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?


Anmelden zum Antworten