2016-05-23 4 views
1

Coming из Node.js я могу сделать, это сказать Node.js, чтобы сделать запрос, используя ipv6 против ipv4Как заставить ipv6 или ipv4 для HttpWebRequest или WebRequest C#

var http = require("http"); 
var options = { 
    hostname: "google.com", 
    family: 4, // set to 6 for ipv6 
}; 
var req = http.request(options, function(res) { 
    .. handle result here .. 
}); 
req.write(""); 
req.end(); 

Установка family в 4 силы ipv4, установив его на 6 силы ipv6. Не устанавливая его, вы можете работать.

Как я могу сделать то же самое в C# (.NET 3.5)

я могу думать о пути, который должен сделать DNS просить себя сам для записей A или AAAA, сделать прямой запрос IP и установите заголовок host:. Есть ли способ лучше?

ответ

3

Вы можете использовать ServicePoint.BindIPEndPointDelegate.

var req = HttpWebRequest.Create(url) as HttpWebRequest; 

req.ServicePoint.BindIPEndPointDelegate = (servicePount, remoteEndPoint, retryCount) => 
{ 
    if (remoteEndPoint.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) 
    { 
     return new IPEndPoint(IPAddress.IPv6Any, 0); 
    } 

    throw new InvalidOperationException("no IPv6 address"); 
};