Как открыть сокет на определенном интерфейсе и получать трафик как IPv4, так и IPv6 - PullRequest
4 голосов
/ 24 февраля 2011

С IPv4 я могу привязать () к определенному адресу, чтобы выбрать интерфейс, который будет использоваться для приема пакетов (и в некоторых случаях также для отправки, но это не главное).

Вкл.машина с двумя стеками IPv6 / IPV4 У меня есть эта проблема: я могу создать 6-сокет и использовать его для получения 4-х трафика, но если я хочу привязать к определенному интерфейсу, мне нужно выбрать IP-адрес для привязки.

Если я свяжусь с IPv6-адресом, я отфильтрую весь трафик IPv4 и наоборот.

Как я могу получать трафик как IPv4, так и IPv6 с определенного интерфейса?

Ответы [ 2 ]

5 голосов
/ 24 февраля 2011

Если вы используете Linux, вы можете использовать опцию SO_BINDTODEVICE socket для привязки к интерфейсу, а не к определенному IP-адресу. Это описано в справочной странице socket .

2 голосов
/ 25 февраля 2011

Не существует стандартного переносимого интерфейса для привязки одного сокета к неопределенному адресу и ограничения области адресами на конкретном интерфейсе, причем гораздо реже выборочно требуется модель сильного хоста для связи с этим сокетом. Каждая операционная система, поддерживающая эту функцию, делает это по-своему.

...