На каком адаптере я только что получил этот пакет UDP? - PullRequest
3 голосов
/ 15 февраля 2010

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

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

Проблема:

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

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

1 Ответ

2 голосов
/ 18 февраля 2010

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

...