Отправка HttpWebRequest через определенный сетевой адаптер - PullRequest
0 голосов
/ 03 мая 2011

Пару дней назад я задал вопрос об отправке HttpWebRequest через определенный сетевой адаптер, и кто-то сказал мне использовать BindIPEndPointCallback. Я попробовал это:

public static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
{
    List<IPEndPoint> ipep = new List<IPEndPoint>();
    foreach (var i in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
    {
        foreach (var ua in i.GetIPProperties().UnicastAddresses)
            ipep.Add(new IPEndPoint(ua.Address, 0));
    }
    return new IPEndPoint(ipep[1].Address, ipep[1].Port);
}

private void button1_Click(object sender, EventArgs e)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://whatismyip.com");
    request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    StreamReader sr = new StreamReader(response.GetResponseStream());
    string x = sr.ReadToEnd();
}

Но это все равно не работает. Он отправляет HttpWebRequest через тот же сетевой адаптер. Могу ли я попробовать еще что-нибудь?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2013

Если вашей локальной конечной точкой является частный IP-адрес (192.168.50.103 - это), ваш маршрутизатор преобразует этот адрес в другой общедоступный IP-адрес, и это адрес, который может видеть mysmyip.

Предлагаю попробовать этот пример:

using System;
using System.Net;

class Program
{
    public static void Main ()
    {
        // TODO: Put your ip addresses in this list
        var ips = new IPAddress[]
        {
            IPAddress.Parse("10.0.0.3"),
            IPAddress.Parse("192.168.1.7")
        };

        foreach (var ip in ips)
        {
            try
            {
                Console.WriteLine("Request from: " + ip);
                var request = (HttpWebRequest)HttpWebRequest.Create("http://ns1.vianett.no/");
                request.ServicePoint.BindIPEndPointDelegate = delegate
                {
                    return new IPEndPoint(ip, 0);
                };
                var response = (HttpWebResponse)request.GetResponse();
                Console.WriteLine("Actual IP: " + response.GetResponseHeader("X-YourIP"));
                response.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}
0 голосов
/ 03 мая 2011

То, что вы пытаетесь сделать, может поддерживаться или не поддерживаться базовой платформой.

Google для "Сильных / слабых хост-моделей".

Например, это хорошее введение в тему:

http://technet.microsoft.com/en-us/library/2007.09.cableguy.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...