2009-11-25 7 views
0

Я хочу создать сокет для доступа к пакетам IPv4 с уровня канала передачи данных. С Unix сетевого программирования V1,Доступ к пакетам уровня передачи данных

socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP)) 

1) Я реализую клиента DHCP, это правильный способ сделать это? (означает, что вы не получаете доступ к каналу передачи данных, я не могу получить ответ от сервера dhcp) или есть ли другой более простой способ? также, поскольку этот сокет получит все пакеты IPv4, предназначенные для моей системы, как я должен отличить пакет ответа dhcp от других пакетов?

2) просьба предложить мне хорошую ссылку/tuorial для сетевое программирование с доступом к каналу передачи данных. В приведенной выше книге нет подробного описания.

Это my code

+0

Я получил, где находится ETH_IP. Я изменил вопрос. Я прошу прощения за это. Пожалуйста, ответьте на новый новый вопрос – avd

ответ

1

ли вам нужны заголовки канального уровня тоже? Если это так, вам необходимо использовать SOCK_RAW - SOCK_DGRAM удалит заголовок уровня ссылки, прежде чем подавать его в ваше приложение.

Вы можете идентифицировать запросы DHCP от портов источника и назначения, так как DHCP генерирует трафик на UDP порты 67 и 68.

+0

Я думаю, что мне не нужен заголовок канала ссылки bcoz Я использую DHCP-клиент, поэтому мне нужен только заголовок IPv4. – avd

2

Вы пробовали смотреть на библиотеки PCAP? Он обеспечивает хорошие функции фильтрации по IP, порту и другим вещам.

+0

Я хочу разобрать блок IP самостоятельно, чтобы я мог учиться. – avd

+0

pcap не анализирует заголовки IP или пакеты DHCP. Он просто позволяет вам, как упоминал Джек, * фильтровать * в ядре, поэтому ваше приложение не перегружено пакетами, которые вам не нужны. – bortzmeyer