Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как выбрать исходящий IP адрес?


Автор: Dims 7.1.2009, 17:07
Если у меня сетевая карта имеет несколько IP адресов, то как мне выбрать, через какой из них осуществляется WebRequest?

Автор: Partizan 7.1.2009, 18:10
Dims, как сетевая карта в один момент времени может иметь несколько IP адресов????

Автор: Dobermann 7.1.2009, 18:28
Цитата(Dims @  7.1.2009,  17:07 Найти цитируемый пост)
Если у меня сетевая карта имеет несколько IP адресов, то как мне выбрать, через какой из них осуществляется WebRequest?

Т.е. нужно программно задавать разные ip-адреса одной сетевой карте? 
Не совсем понятен вопрос...

Автор: Dims 7.1.2009, 19:30
Вы можете зайти в настройки своей сети (под Windows) и убедиться, что много IP адресов на одной карте -- это штатная функция. Адреса должны быть статические. Кажется, это называется multihomed. Linux, естественно, тоже позволяет присваивать одной карте несколько адресов.

Так вот, если УЖЕ настроено несколько IP адресов на одной карте, то как выбрать из программы, через какой из настроенных адресов происходит обращение?

Автор: rooks 7.1.2009, 23:35
Есть такой класс 
Код
System.Net.NetworkInformation.NetworkInterface 
в котором лежит вся инфа о сетевых интерфейсах. Получить список можно так: 
Код
NetworkInterface.GetAllNetworkInterfaces();
Сетевая карта обычно первая в списке(по крайней мере у меня smile ). Метод GetIPProperties() возвращает кучу инфы по айпишникам: днс, шлюзы, мультикасты и т.д. Вам видимо надо GetIPProperties().UnicastAddresses.

Автор: avvo 8.1.2009, 07:11
Socket socket = new Socket();  
socket.bind(new InetSocketAddress("1.1.1.1",12345));
socket.connect(new InetSocketAddress("2.2.2.2", 12345));

главное, чтобы от 1.1.1.1 (локальный клиент) существовал путь до 2.2.2.2 (удаленный сервер), включая локальную роутинговую таблицу.

Автор: PashaPash 8.1.2009, 13:01
Dims, судя по рефлектору - никак. HttpWebRequest не вызывает bind перед connect.

Автор: nmn 8.1.2009, 13:26
выбор интерфейса то бишь исходящего ip определяется по таблице маршрутизации, в windows "route print" чтобы посмотреть таблицу

Автор: PashaPash 8.1.2009, 17:08
nmn, ага, а на один интерфейс может быть назначено несколько IP-адресов из одной подсети. И для выбора конкретного клиентского адреса/порта нужно вручную указать его вызовом Socket.Bind. Никакие route print тут не помогут.

Автор: Dims 9.1.2009, 21:44
Хорошо, ну а как, хотя бы, выбрать исходящий порт?

И если опять никак, то какой порт выбирается автоматически? Каждый раз новый на новый реквест? Или иногда старый?

Автор: PashaPash 9.1.2009, 23:41
Dims, никак, выбирается по принципу "available port number between 1024 and 5000."

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)