Я пишу очень простой DHCP-сервер, используя scapy, и застрял при отправке пакета предложения. Прямо сейчас я делаю это так:
ethernet=Ether(dst=dest_mac, src=hw, type=0x800)
ip=IP(dst=dest_addr, src=srv_ip)
udp=UDP(sport=67, dport=68)
bootp=BOOTP(op=2, yiaddr=dest_addr, siaddr=srv_ip, chaddr=client_mac)
dhcp=DHCP(options=[("message-type", "offer"), ("server_id", dest_addr), ("broadcast_address", broadcast), ("router", gateway), ("subnet_mask", netmask)])
of_pack=ethernet/ip/udp/bootp/dhcp
sendp(of_pack)
Клиент - ISC DHCP, установленный на сервере Ubuntu 16.04.
Я вижу пакеты обнаружения, отправленные dhclient в Wireshark, но не вижу пакетов предложений, которые отправляются моим сервером (scapy говорит: отправлено 1 пакет, так что все выглядит нормально).
Поэтому я думаю, что сделал что-то не так при создании пакета предложений.
Поскольку в Wireshark этого даже не видно, я думаю, что проблема где-то на уровне протокола IP или ниже (я отправлял искаженные пакеты раньше и мог видеть их в Wireshark).
UPD: выход of_pack.show()
: 1 2
Не уверен, но, возможно, проблема в контрольных суммах и / или длине заголовка IP? Должен ли я рассчитать это вручную или Scapy может сделать это сам?