build_ipv4 Problem
-
Hi,
ich möchte ein Echo senden.
Mein Code sieht wie folgt aus:int main(void){ u_int32_t ip_addr_dst, ip_addr_src; u_int16_t id, seq; libnet_ptag_t icmp_tag, ip_tag; icmp_tag = ip_tag = LIBNET_PTAG_INITIALIZER; libnet_t *context; char error[LIBNET_ERRBUF_SIZE]; char payload[] = "test123"; char ip_addr_str_dst[] = "188.93.10.125"; // wikipedia.de char ip_addr_str_src[] = "192.168.1.52"; context = libnet_init(LIBNET_RAW4, NULL, error); ip_addr_dst = libnet_name2addr4(context, ip_addr_str_dst, LIBNET_DONT_RESOLVE); ip_addr_src = libnet_name2addr4(context, ip_addr_str_src, LIBNET_DONT_RESOLVE); libnet_seed_prand(context); id = (u_int16_t) libnet_get_prand(LIBNET_PR16); seq = 1; icmp_tag = libnet_build_icmpv4_echo(ICMP_ECHO, 0, 0, id, seq, (u_int8_t *) payload, sizeof(payload), context, 0); ip_tag = libnet_build_ipv4(LIBNET_IPV4_H + LIBNET_ICMPV4_ECHO_H + sizeof(payload), 0, id, 0,1, IPPROTO_ICMP,0, ip_addr_src, ip_addr_dst, (u_int8_t*)payload, sizeof(payload), context, 0 ); if (libnet_write(context) == -1){ libnet_destroy(context); exit(EXIT_FAILURE); } libnet_destroy(context); return 0; }
Ich denke, es gibt ein Problem beim bauen des IP-Pakets, aber ich weiß nicht, wo ich gucken soll. Das Programm lässt sich ganz normal ausführen.
Mit einer TTL von 1 sollte ich ja eigentlich eine Nachricht vom Typ 11 ("Time Exceeded") bekommen. Stattdessen zeigt mir Wireshark Typ 76 ("Unknown ICMP (obselte or malformed?)) an.Hier der Auszug von Wireshark:
Internet Protocol, Src: 192.168.1.52 (192.168.1.52), Dst: 188.93.10.125 (188.93.10.125)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
Total Length: 58
Identification: 0x7cc3 (31939)
Flags: 0x00
Fragment offset: 0
Time to live: 1
Protocol: ICMP (0x01)
Header checksum: 0xb449 [correct]
Source: 192.168.1.52 (192.168.1.52)
Destination: 188.93.10.125 (188.93.10.125)
Internet Control Message Protocol
Type: 76 (Unknown ICMP (obsolete or malformed?))
Code: 105 ()
Checksum: 0x931a [incorrect, should be 0x134f]Kann mir jemand sagen, was ich da falsch gemacht habe?
Gruß
sdy
-
alles klar. hat sich erledigt. fehler gefunden. fehler liegt am payload. aber kann mir jemand sagen, wieso ich da kein payload mitgeben kann?