2011-07-11 17 views
7

DSN, birden çok IP adresini döndürebilir, daha sonra IP adresimi almak için DNS çözümlemesi kullanarak HttpWebRequest cihazımın bağlı olduğu IP adresini almak istiyorum.HttpWebRequest'in bağlı olduğu sunucunun IP adresi nasıl alınır?

Bunu .NET 3.5'de yapmak için var mı? Ben IP HTTP isteği göndermek bağlı hitap olanı öğrenmek isteyen www.microsoft.com için basit bir web isteği yaptığınızda

Örneğin, ben

(değil Wireshark vb aracılığıyla ) programlı bir şekilde bu istiyoruz

cevap

4

burada

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; 
     } 

Kullanım remoteEndPoint istediğiniz verileri toplamak gidin.

+1

var mı? –

+0

İkincisi uzak iade edilmiyor remoteEndPoint başarısız olur mu? BindIPEndPointDelegate okunduğumda yerel bir IP adresini bağlamak için kullanılır, eğer remoteEndPoint'i döndürürseniz, onu bağlayamayacağı için başarısız olur (ya da böyle bir şey). Bunu iade etmeliyim, ancak bunu düzeltmemiz gerekir: yeni IPEndPoint (IPAdresi.Any, 0) –

+1

Bunu denedim, ancak BindIPEndPoint1 yöntemi hiçbir zaman çağrılmıyor. – user626528

2

Bu çalışma örneğidir: Bir WebProxy oluşturmak için herhangi bir neden

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()); 
    } 
}