Доступ к пакетам канального уровня передачи данных
-
22-09-2019 - |
Вопрос
Я хочу создать сокет для доступа к пакетам IPv4 с канального уровня.Из unix network programming версии V1,
socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP))
1) Я внедряю dhcp-клиент, это правильный способ сделать это?(означает, что без доступа к уровню передачи данных я не могу получить ответ от dhcp-сервера) или есть какой-либо другой более простой способ?кроме того, поскольку этот сокет будет получать все пакеты IPv4, предназначенные для моей системы, как я должен отличать ответный пакет dhcp от других пакетов?
2) пожалуйста, предложите мне хорошую ссылку / tuorial для сетевое программирование с доступом к канальному уровню передачи данных.В приведенной выше книге это не является подробным описанием.
Это мой код
Решение
Вам тоже нужны заголовки уровня ссылок?Если это так, вам нужно использовать SOCK_RAW
—SOCK_DGRAM
удалит заголовок уровня ссылок перед отправкой его в ваше приложение.
Вы можете идентифицировать запросы DHCP по портам источника и назначения, поскольку DHCP генерирует трафик на UDP-портах 67 и 68.
Другие советы
Вы пробовали просматривать библиотеки PCAP?Он предоставляет приятные функции фильтрации по IP, порту и другим параметрам.