ICMP Echo: ioctl() fehlgeschlagen



  • Moin,

    ich versuche mich gerade in die libnet- und libpcpap-Bliotheken reinzuarbeiten.

    Ich habe jetzt versucht meinen Router anzupingen.

    Mein Code sieht wie folgt aus (in etwa wie in diesem tutorial http://repura.livejournal.com/23429.html "ping.c")

    #include <stdio.h>
    #include <libnet.h>
    
    int main(int argc, char *argv[]){
    
    	libnet_t *context;
    	char errbuf[LIBNET_ERRBUF_SIZE];
    
    	char ip_add_str[] = "192.168.1.1"; // router adresse
    	char payload[] = "asdfghjk";
    	u_int32_t ip_addr;
    	u_int16_t id, seq;
    	int written;
    
    	// initialisierung
    	context = libnet_init(LIBNET_RAW4, NULL, errbuf);
    	if( context == NULL){
    		printf("libnet_init() fehlgeschlagen: %s\n", errbuf);
    		exit(EXIT_FAILURE);
    	}
    
    	// zufalls id erzeugen
    	libnet_seed_prand(context);
    	id = (u_int16_t)libnet_get_prand(LIBNET_PR16);
    
    	// ip adresse
    	ip_addr = libnet_name2addr4(context, ip_add_str, LIBNET_DONT_RESOLVE);
    	if(ip_addr == -1){
    		printf("libnet_name2addr4 fehlgeschlagen\n");
    		libnet_destroy(context);
    		exit(EXIT_FAILURE);
    	}
    
    	seq = 1;
    
    	if(libnet_build_icmpv4_echo(ICMP_ECHO,0, 0, id, seq, (u_int8_t *)payload, sizeof(payload), context, 0) == -1 ){
    		printf("libnet_build_icmpv4_echo fehlgeschlagen\n");
    		libnet_destroy(context);
    		exit(EXIT_FAILURE);
    	}
    
    	 if(libnet_autobuild_ipv4(LIBNET_IPV4_H + LIBNET_ICMPV4_ECHO_H + sizeof(payload),IPPROTO_ICMP,ip_addr, context) == -1){
    		 printf("libnet_autobuild_ipv4 fehlgeschlagen: %s\n", libnet_geterror(context));
    		 libnet_destroy(context);
    		 exit(EXIT_FAILURE);
    	 }
    
    	 if (written = libnet_write(context) == -1) {
    		printf("libnet_write fehlgeschlagen\n");
    		libnet_destroy(context);
    		exit(EXIT_FAILURE);
    	}
    	 else{
    		 printf("%d written.\n", written);
    	 }
    
    	 libnet_destroy(context);
    
    	printf("alles gut\n");
    
    	return EXIT_SUCCESS;
    }
    

    Wenn ich es ausführe erscheint folgene Fehlermeldung:

    $ sudo ./bla
    libnet_autobuild_ipv4 fehlgeschlagen: libnet_get_ipaddr4(): ioctl(): Cannot assign requested address

    Trotz der Fehlermeldung weiß ich nicht, wo ich weitermachen soll. Selbst, wenn ich das Beispiel aus dem Tutorial compiliere oder localhost als Adresse angebe, bekomme ich die gleiche Fehlermeldung. 😞

    Vielen DAnk für eure Hilfe im voraus.

    Viele Grüße
    Sdy



  • hmm alles klar. hat sich erledigt.

    Der Fehelr lag hier:

    context = libnet_init(LIBNET_RAW4, NULL, errbuf);
    

    Ich habe einmal (kaputtes)LAN onboard und eine weitere Netzwerkkarte. Es wurde immer die falsche Netzwerkschnittstelle genommen.

    (Trotzdem sagt er nur "0 Bytes written". Aber das ist ein anderes Thema ;))


Anmelden zum Antworten