заголовок icmp устанавливается как трейлер - PullRequest
0 голосов
/ 12 марта 2019

Я экспериментирую с Raw Sockets на 2-м уровне в python3. Я пытаюсь построить свое первое приложение как эхо-запрос icmp. Но после анализа пакета из tcpdump я обнаружил, что мой пакет icmp усекается ОС после заголовка ipv4. Мой заголовок icmp отображается как трейлер вместо уровня Ethernet; Я узнал об этом через Wireshark. Например, мой слой Ethernet в Wireshark показывает трейлер: 0800f4f603090000. Это значение - заголовок icmp для эхо-запроса с типом 8 и кодом 0. Может кто-нибудь сказать, что происходит?

ICMP_ECHO_REQ = 8 #ping request
remoteHostIP = "8.8.8.8"
sourceip = "0.0.0.0"

socketsender = socket.socket(family=socket.AF_PACKET, type=socket.SOCK_RAW )
socketsender.bind(("eth0",0))

srcmacaddress = "12:38:32:be:4a:66"
dstmacaddress = "12:69:0a:60:d5:2e"
srcmac_packed = struct.pack("!BBBBBB",0x12,0x38,0x32,0xbe,0x4a,0x65)
dstmac_packed = struct.pack("!BBBBBB",0x12,0x69,0x0a,0x60,0xd5,0x2e)
ethertype = struct.pack("!BB",0x8,0x0)
sequencenumber = 0

ipv4_datagram = rawIPV4.IPV4Datagram(sourceip,remoteHostIP,ttl=227, protocol = socket.IPPROTO_ICMP)
ipv4_header = ipv4_datagram.pack()
icmp_datagram = rawICMP.ICMPDatagram (type = ICMP_ECHO_REQ, sequence=sequencenumber)
icmp_header = icmp_datagram.pack()
socketsender.send(dstmac_packed+srcmac_packed+ethertype+ipv4_header+icmp_header)
...