На каком адаптере я только что получил этот UDP-пакет?

StackOverflow https://stackoverflow.com/questions/2267538

  •  20-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь написать сервер BOOTP на С#.

Я получаю и анализирую пакет BOOTP от клиента, и мне нужно ответить, указав IP-адрес моего сервера.

Проблема в:

  • Компьютер может иметь несколько сетевых адаптеров
  • У клиента еще нет IP-адреса

Есть ли способ узнать, на каком адаптере был получен UDP-пакет?

Это было полезно?

Решение

Есть несколько возможных способов сделать это.Привяжите отдельный сокет на каждый IP на каждом физическом интерфейсе, тогда вы всегда будете знать, на какой интерфейс пришел пакет.Вы также можете попробовать использовать флаг IP_RECVIF вместе с функцией сокета Recvmsg, хотя я не знаю, поддерживается ли это в Windows.У Стивена есть примеры в разделах 22.2 и 22.6 книги «Сетевое программирование для Unix».Вы можете использовать флаг SIOCGIFCONF с ioctl, чтобы получить список интерфейсов на машине.Пример программы приведен в разделе 17.6 UNP.Если C# не дает вам доступа к этим функциям, но они поддерживаются в Windows, вы можете написать простую программу C для сбора и обновления информации об интерфейсе/IP, а затем использовать mmap для совместного использования области памяти между вашей программой C# и перечислителем интерфейса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top