Я хотел бы написать программу, которая с интерфейса с MAC-адресом отправляет запрос DHCP и возвращает IP-адрес, шлюз, маску и широковещательный адрес с сервера DHCP.
я использовал эта реализация клиента DHCP, но он дает только IP-адрес и адреса шлюза.
Я прочитал о формате сообщений DHCP и не нашел маски или файлов трансляции. Однако, используя командную строку dhcpclient, я вижу, используя ifconfig, что интерфейс имеет маску и широковещательные адреса, как показано ниже:
arm@arm-desktop:~/dhclient wlp2s0
arm@arm-desktop:~/ifconfig wlp2s0
wlp2s0 Link encap:Ethernet HWaddr 54:da:d0:15:4b:04
inet addr:153.179.154.55 Bcast:153.179.169.255 Mask:255.255.240.0
inet6 addr: fe80::2037:c031:5db1:445c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:113 errors:0 dropped:0 overruns:0 frame:0
TX packets:56 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:112130 (112.1 KB) TX bytes:9520 (9.5 KB)
Может кто-нибудь сказать мне, как эта информация получается?
Увидеть этот вопрос, это может быть то, что вы хотите.
Я так понимаю, вы пишете свой собственный DHCP-клиент, который использует необработанные сокеты или что-то еще, чтобы поместить байты прямо в провод.
Вы можете прочитать больше о DHCP Вот или в другом месте, если вы гуглите. Как вы можете видеть, маска подсети может быть получена от DHCP-сервера, а также широковещательный адрес. Это делается с помощью параметров DHCP при соединении с сервером DHCP.
Затем вы должны поместить правильные байты в провод в правильном порядке и прочитать возвращаемые байты, чтобы получить нужную информацию.
Используя клиент, с которым вы связались, вы можете расширить код для запроса и обработки дополнительной информации с DHCP-сервера, такой как широковещательный адрес и маска подсети. См. Документацию DHCP для получения информации о поле параметров DHCP.
Других решений пока нет …