0

ポート 80 でリッスンする TCP プロキシを作成しました (ポート 80 は他のサービスでは使用されていません)。リスナー ソケットの IpAddress として「Localhost」または「127.0.0.1」を使用すると、プロキシは POST 要求を受信できます。

Socket listner = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint localEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 80);
listner.Bind(localEndpoint);
listner.Listen();

ただし、「localhost」をマシンの IP (191.151.43.22) に置き換えると、プロキシはクライアント要求を「GET 要求」として受け取ります。

Socket listner = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint localEndpoint = new IPEndPoint(IPAddress.Parse("191.151.43.22"), 80);
listner.Bind(localEndpoint);
listner.Listen();

localhost / 127.0.0.1 を使用して接続をリッスンするときのクライアント リクエスト

   POST /?toke=abc455/../Control.html?s=783&i=0&t=134 HTTP/1.1

    Host: localhost:58888
    Connection: keep-alive
    Content-Length: 0
    Origin: http://localhost:58888
    User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) C
    hrome/21.0.1180.89 Safari/537.1
    Content-Type: text/plain;charset=UTF-8
    Accept: */*
    Referer: http://localhost:58888/?toke=abc455/../Stream.html?s=0&d=%22
    localhost%22&p=0&t=1348652703126
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: en-US,en;q=0.8
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
    Cookie: style=null

自分のマシンの IP (191.151.43.22) を使用して接続をリッスンするときのクライアント リクエスト

GET /?token=abc344/../Stream.html?s=0&d=%22localhost%22&p=0&t=13486531
37269 HTTP/1.1
Host: 192.168.53.50
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) C
hrome/21.0.1180.89 Safari/537.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

POST がシステムの IP アドレスでは機能しないのに、IP の代わりに「localhost」を使用すると機能する理由。

4

1 に答える 1

0

おそらく、HTTPリクエストはプロキシサーバーによって変更されています(私の推測ではルーターです)。

そうは言っても、プロキシサーバー(それが原因であると仮定して)は、それが実行していることについて正しくない可能性があります。リクエストにPOSTデータが表示されない**ため、加えられた変更が受信側に機能的な影響を与えることはありません。

** GETデータ(URLに存在する)はありますが、POSTデータ(ヘッダーの後に存在する)はありません。

于 2012-09-26T15:29:46.587 に答える