ICMP Packet versenden



  • Hallo alle

    Ich bin ein Anfänger in Socketprogrammierung, und habe das folgende Problem.
    Ich versuche ein Programm zu schreiben, das ein ICMP_ECHO Request schickt und auf einen Reply wartet. Bis jetzt funktioniert es aber nur zwischen meinen beiden WNICs (auf meinem Desktop habe ich 2 Wlan Karten), aber wenn ich versuche, mich mit einem anderen Rechner zu kommunizieren, funktioniert es leider nicht (Timeout bei recvfrom()).

    if ((sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) == -1) {
         perror("socket");
         exit(EXIT_FAILURE);
    }
    
    /*
     *	here the icmp packet is created
     *	also the ip checksum is generated
     */
            icmp->type = ICMP_ECHO;
    	icmp->code = 0;
    	icmp->un.echo.id = 0;
    	icmp->un.echo.sequence = 0;
    	icmp->checksum = 0;
    	icmp->checksum = in_cksum((unsigned short *) icmp, sizeof(struct  icmphdr));
    
    	ip->check = in_cksum((unsigned short *) ip, sizeof(struct iphdr));
    
    struct sockaddr_in connection;
    connection.sin_family = AF_INET;
    connection.sin_addr.s_addr = inet_addr(dst_addr);
    
    struct timeval timeout;
    	timeout.tv_sec = 3;
    	timeout.tv_usec = 0;
    	if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) == -1) {
    		perror("setsockopt (SO_RCVTIMEO)");
    		exit(1);
    	}
    
    /*
     *now the packet is sent
     */
    sendto(sockfd, packet, ip->tot_len, 0, (struct sockaddr *) &connection,
    	sizeof(struct sockaddr));
    
    /*
     *now we listen for responses
     */
    addrlen = sizeof(connection);
    if (recvfrom(sockfd, buffer, sizeof(struct iphdr) + sizeof(struct icmphdr),
    	0, (struct sockaddr *) &connection, &addrlen) == -1) {
    	perror("recv");
    } else {
    	printf("Received %d byte reply from %s:\n", sizeof(buffer), dst_addr);
    	ip_reply = (struct iphdr*) buffer;
    }
    

    Also ich weiss nicht genau wo der Fehler liegt, ich vermute es liegt an der Definition der Internetaddrese für meinen Socket.

    Sorry für die Fehler aber Deutsch ist leider nicht meine Muttersprache. 😞

    LG Enrique



  • Firewalls sind auch immer 'nen Verdacht wert. Evtl. werden ICMP-Pakete an der Gegenstelle verworfen?



  • Danke für deine schnelle Antwort

    Ich habe ein ping an dieser Addrese gemacht und kriege eine Antwort, also sollte eigentlich kein Problem sein.

    LG Enrique


Log in to reply