Как сказать, из какого интерфейса сокет получил сообщение?

Вы можете использовать как триггер, так и поплавок в условиях вашего перехода.

12
задан Ajay 27 July 2016 в 06:51
поделиться

4 ответа

Кроме привязки к каждому интерфейсу, я не знаю о пути с IPv4 по сути.

IPv6 добавил опцию сокета IPV6_PKTINFO обратиться к этому недостатку. С той опцией в действительности, a struct in6_pktinfo будет возвращен как вспомогательные данные.

3
ответ дан 2 December 2019 в 22:23
поделиться

dwc является правильным, IPV6_PKTINFO будет работать на IPv6 на Linux.

Кроме того, IP_PKTINFO будет работать на IPv4 — Вы видите детали в IP страницы справочника (7)

8
ответ дан 2 December 2019 в 22:23
поделиться

Ее некоторое время, так как я делал C/C++ кодирование TCP/IP, но насколько я помню на каждом сообщении (или получил сокет) можно войти в информацию о заголовках IP. Эти заголовки должны включать адрес получения, который будет IP интерфейса, о котором Вы спрашиваете.

-1
ответ дан 2 December 2019 в 22:23
поделиться

За пределами открытия отдельного сокета в каждом интерфейсе как предложенный Glomek единственный способ, которым я знаю, чтобы сделать это окончательно в Windows, состоит в том, чтобы использовать неструктурированный сокет, например,

  SOCKET s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);

Каждый получает от этого сокета, будет пакет IP, который содержит и исходные адреса и адреса назначения. Программа я продолжаю работать, требует, чтобы я поместил сокет в неразборчивый режим с помощью опции SIO_RCVALL. Выполнение этого означает, что я получаю каждый пакет IP, который интерфейс "видит" в сети. Извлечь пакеты явно для моего приложения требует, чтобы я отфильтровал данные с помощью адресов и портов в заголовках TCP/UDP и IP. Очевидно, это - вероятно, больше служебное, чем Вы интересуетесь. Я только упоминаю это для высказывания этого - я никогда не использовал неструктурированный сокет, не помещая его в неразборчивый режим. Таким образом, я не уверен, можно ли связать его с INADDR_ANY и просто использовать его в качестве обычного сокета от той точки вперед или нет. Мне казалось бы, что Вы можете; я только что никогда не пробовал его.

Править: Прочитайте эту статью для ограничений относительно неструктурированных сокетов в Windows. Это самое большое препятствие, с которым я столкнулся на своем проекте, было то, что нужно быть членом Группы администраторов для открытия неструктурированного сокета на Windows 2000 и позже.

-2
ответ дан 2 December 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: