Witam

Mam do napisania program podobny do tracerouta i nie bardzo wiem jak sie za to zarac, samemu wymyslilem cos taiego ale to z jakiegos powodu nie dziala, jak analizuje ruch sieciowy wiresharkiem, wysyla mi pakiec ale nie otrzymuje nic z powrotem

//#define __USE_BSD
#include <netinet/in.h> 
#define __USE_BSD

#include <netinet/ip.h> 
#include <netinet/ip_icmp.h> 
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <cstdio>
#include <iostream>

using namespace std;

struct header {
	struct ip iph;
	struct icmphdr icmph;
	
};

unsigned short
csum (unsigned short *buf, int nwords)
{
    unsigned long sum;
    for (sum = 0; nwords > 0; nwords--)
        sum += *buf++;
    sum = (sum >> 16) + (sum & 0xffff);
    sum += (sum >> 16);
    return sum;
}


int main(int argc,char * argv[]){
	
	
	
	int sockfd = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP);
	
    struct sockaddr_in dst, src;
    dst.sin_addr.s_addr = inet_addr ("212.77.100.101");
    dst.sin_port = 3000;
    dst.sin_family = AF_INET;
    
     
    
    struct header ipicmp;

    ipicmp.iph.ip_hl = 5;
    ipicmp.iph.ip_v = 4;
    ipicmp.iph.ip_p = IPPROTO_ICMP;
    ipicmp.iph.ip_tos = 0;
    ipicmp.iph.ip_len = sizeof (struct header);
    ipicmp.iph.ip_id = 0;
    ipicmp.iph.ip_off = htons (IP_DF);
    ipicmp.iph.ip_ttl = 1;
    ipicmp.iph.ip_sum = 0;
    ipicmp.iph.ip_src.s_addr = INADDR_ANY;
    ipicmp.iph.ip_dst.s_addr = dst.sin_addr.s_addr;

    ipicmp.icmph.type = ICMP_ECHO;
    ipicmp.icmph.code = 0;
    ipicmp.icmph.checksum = 0;
    ipicmp.icmph.checksum = csum ((unsigned short *) &ipicmp.icmph, sizeof (ipicmp.icmph) >> 1);
    ipicmp.iph.ip_sum = csum ((unsigned short *) &ipicmp.iph, sizeof (ipicmp) >> 1);
     
     
    while(true){
		
		sendto(sockfd, &ipicmp, sizeof(ipicmp),0 ,(struct sockaddr *)&dst, sizeof(struct sockaddr) );
		struct header buf;
		cout<<"1 "<<endl;
		socklen_t len = sizeof (struct sockaddr);
		
		recvfrom(sockfd,&buf,sizeof(buf),0,(struct sockaddr *)&src,&len);
		
		cout<<"2 "<<endl;
		if(buf.icmph.type==ICMP_ECHOREPLY){ 
			cout<<"Znalazlem ttl: "<<ipicmp.iph.ip_ttl<<endl;
			break;
		}else{
			
			cout<<"Nie trafilem jeszcze"<<endl;
			ipicmp.iph.ip_ttl++;
			ipicmp.icmph.checksum = csum ((unsigned short *) &ipicmp.icmph, sizeof (ipicmp.icmph) >> 1);
			ipicmp.iph.ip_sum = csum ((unsigned short *) &ipicmp.iph, sizeof (ipicmp) >> 1);	
		}
	}    
             
            
    
	return 0;
}

Z gory dziekuje za pomoc

Pozdrawiam