2010-02-15 4 views
3

Я пытаюсь написать сервер BOOTP в C#.Какой адаптер я только что получил этот UDP-пакет?

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

Проблема заключается в том:

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

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

ответ

2

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

+1

Привязка к каждому порту отдельно будет работать хорошо! – Tim