Как отправить с конкретной сетевой карты?
От: x-code  
Дата: 01.06.17 12:44
Оценка:
Есть компьютер с несколькими сетевыми картами
Нужно отправлять UDP пакеты (причем широковещательные) через конкретный сетевой адаптер.
Как это сделать?
Интересует решение как для windows так и для linux.
Re: Как отправить с конкретной сетевой карты?
От: Слава  
Дата: 01.06.17 13:03
Оценка: +4
Здравствуйте, x-code, Вы писали:

XC>Нужно отправлять UDP пакеты (причем широковещательные) через конкретный сетевой адаптер.

XC>Интересует решение как для windows так и для linux.

Сделать bind сокета к конкретному адресу, который присутствует на этой сетевой карте.
Re: Как отправить с конкретной сетевой карты?
От: Mr.Delphist  
Дата: 02.06.17 10:36
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Есть компьютер с несколькими сетевыми картами

XC>Нужно отправлять UDP пакеты (причем широковещательные) через конкретный сетевой адаптер.
XC>Как это сделать?
XC>Интересует решение как для windows так и для linux.

Варианта два:
1) Как уже ответили выше, делаем bind() на нужный адрес.
2) SO_BINDTODEVICE

Но тут надо принять во внимание такую вещь как host model на целевой оси
https://technet.microsoft.com/en-us/library/2007.09.cableguy.aspx

Ибо могут быть сюрпризы:
http://forums.codeguru.com/showthread.php?487139-Socket-binding-with-routing-table

On Windows, a call to bind() affects card selection only incoming traffic, not outgoing traffic.

Thus, on a client running in a multi-homed system (i.e., more than one interface card), it's the network stack that selects the card to use, and it makes its selection based solely on the destination IP, which in turn is based on the routing table. A call to bind() will not affect the choice of the card in any way.

Re[2]: Как отправить с конкретной сетевой карты?
От: Cruser Украина  
Дата: 06.06.17 11:46
Оценка: +1
Здравствуйте, Слава, Вы писали:

С>Здравствуйте, x-code, Вы писали:


XC>>Нужно отправлять UDP пакеты (причем широковещательные) через конкретный сетевой адаптер.

XC>>Интересует решение как для windows так и для linux.

С>Сделать bind сокета к конкретному адресу, который присутствует на этой сетевой карте.


Человек спрашивал про отправку, а не про приём. Отправка идёт по таблице маршрутизации.
Re[3]: Как отправить с конкретной сетевой карты?
От: Слава  
Дата: 06.06.17 11:48
Оценка: +1
Здравствуйте, Cruser, Вы писали:

С>>Сделать bind сокета к конкретному адресу, который присутствует на этой сетевой карте.


C> Человек спрашивал про отправку, а не про приём. Отправка идёт по таблице маршрутизации.


Под виндами широковещательные пакеты без bind не пойдут никуда. Хоть и по таблице.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.