2011-07-11 24 views
7

DSNは複数のIPアドレスを返すことができるので、私の要求後にIPアドレスを取得するためにDNS解決を使用する代わりに、自分のHttpWebRequestが接続されているIPを取得します。HttpWebRequestが接続されているサーバーのIPアドレスを取得する方法は?

これを行う方法はありますか。

例えば

私はIPが、それはHTTPリクエストを送信するために接続されたアドレスものを学びたいwww.microsoft.comに簡単なWeb要求を行うとき、私はプログラム的にこれにしたい(ないなど Wiresharkを経由して)

ここ

答えて

4

あなたが望むデータを収集するために

static void Main(string[] args) 
     { 
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.microsoft.com"); 
      req.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPoint1); 

      Console.ReadKey(); 
     } 

     public static IPEndPoint BindIPEndPoint1(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount) 
     { 
      string IP = remoteEndPoint.ToString(); 
      return remoteEndPoint; 
     } 

使用remoteEndPointを行きます。

+1

は、WebProxyにを作成するための何らかの理由はありますか? –

+0

2番目に返されないremoteEndPointは失敗しますか? BindIPEndPointDelegateはローカルIPアドレスをバインドするために使用されていますが、remoteEndPointを返すと、BindIPEndPointDelegateはバインドできないため失敗します。私はこれを修正する必要が返すと仮定します:新しいIPEndPoint(IPAddress.Any、0) –

+1

私はこれを試しましたが、BindIPEndPoint1メソッドが呼び出されることはありません。 – user626528

2

これは実施例である:

using System; 
using System.Net; 

class Program 
{ 
    public static void Main() 
    { 
     IPEndPoint remoteEP = null; 
     HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com"); 
     req.ServicePoint.BindIPEndPointDelegate = delegate (ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount) { 
      remoteEP = remoteEndPoint; 
      return null; 
     }; 
     req.GetResponse(); 
     Console.WriteLine (remoteEP.Address.ToString()); 
    } 
} 
関連する問題