亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? traceroute.c

?? Linux網絡編程配套源代碼 不過看的時候最好和書籍一起配套看
?? C
字號:
#include <signal.h>

#include <netinet/in.h>

#include <netdb.h>

#include <sys/socket.h>

#include  <sys/types.h> 

#include  <sys/times.h> 

#include <sys/time.h>

#include  <sys/select.h> 

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h> 

#include <fcntl.h>

#include <errno.h>



struct ip

{

#if __BYTE_ORDER == __LITTLE_ENDIAN

    unsigned int ip_hl:4;                /* little-endian IP頭長度(單位為32位)4位 */

    unsigned int ip_v:4;                 /* 版本號4 IP4用4 */

#endif

#if __BYTE_ORDER == __BIG_ENDIAN

    unsigned int ip_v:4;                /*  version */

    unsigned int ip_hl:4;               /*  header length */

#endif

    u_int8_t ip_tos;                    /* 服務類型  一般為0 */

    u_short ip_len;                     /* 數據總長度 (單位為32位) */

    u_short ip_id;                      /* 標識16 */

    u_short ip_off;                     /* 分段偏移*/

#define IP_RF 0x8000                    /*  reserved fragment標志 */

#define IP_DF 0x4000                    /*  dont fragment flag */

#define IP_MF 0x2000                    /*  more fragments flag */

#define IP_OFFMASK 0x1fff               /*  mask for fragmenting bits */

    u_int8_t ip_ttl;                     /* 生存時間 */

    u_int8_t ip_p;                      /* 傳輸協議 tcp是6 */

    u_short ip_sum;                     /* 頭校驗和 */

    struct in_addr ip_src, ip_dst;      /*  源地址 目標地址 */

};



struct icmp             

{

u_int8_t  type;		/* 消息類型 */

  	u_int8_t  code;		/* 代碼類型 */

  	u_int16_t checksum;	/* 校驗位 */

  	union

  	{

    		u_char ih_pptr;			/* ICMP_PARAMPROB */

    		struct in_addr ih_gwaddr;	/* 網關地址 */

    		struct 					/* echo 數據包 */

{

      		u_int16_t id;

      		u_int16_t sequence;

    		} echo;



    u_int32_t ih_void;



    struct ih_pmtu

    {

     	u_int16_t ipm_void;

     	u_int16_t ipm_nextmtu;

} ih_pmtu;



    struct ih_rtradv

    {

u_int8_t irt_num_addrs;

u_int8_t irt_wpa;

u_int16_t irt_lifetime;

    } ih_rtradv;

  } un;

#define	icmp_pptr	un.ih_pptr

#define	icmp_gwaddr	un.ih_gwaddr

#define	icmp_id		un.echo.id

#define	icmp_seq	un.echo.sequence

#define	icmp_void	un.ih_void

#define	icmp_pmvoid	un.ih_pmtu.ipm_void

#define	icmp_nextmtu	un.ih_pmtu.ipm_nextmtu

#define	icmp_num_addrs	un.ih_rtradv.irt_num_addrs

#define	icmp_wpa	un.ih_rtradv.irt_wpa

#define	icmp_lifetime	un.ih_rtradv.irt_lifetime

  

union

{

    struct

    {

    		u_int32_t its_otime;

u_int32_t its_rtime;

      	u_int32_t its_ttime;

    } id_ts;

    struct

    {

    		struct ip idi_ip;

	  /* 屬性阿和緊跟它的64位數據 */

    } id_ip;



  } icmp_dun;

#define	icmp_otime	icmp_dun.id_ts.its_otime

#define	icmp_rtime	icmp_dun.id_ts.its_rtime

#define	icmp_ttime	icmp_dun.id_ts.its_ttime

#define	icmp_ip		icmp_dun.id_ip.idi_ip

#define	icmp_radv	icmp_dun.id_radv

#define	icmp_mask	icmp_dun.id_mask

#define	icmp_data	icmp_dun.id_data

};





struct ip_and_icmp

{

struct  ip iph;

struct  icmp icmph;

};



/* 公共信息 */ 

char dstip[]="202.115.57.24"; 	/* 目標IP */

int	errno;

int	sends,waits;				/* 發送的socket 接收用的socket */

char info[500]; 				/* 收到的icmp信息 */

struct icmp *eicmp; 			/* TTL超時的icmp信息 */

struct ip_and_icmp *ip_icmp;		/* 收到的icmp原始信息 */

struct sockaddr_in toaddr,from;  	/* 目標地址  來信息地址 */



unsigned short csum (unsigned short *packet, int packlen)  /* 校驗和計算 */

{

	register unsigned long sum = 0;



	while (packlen > 1) {

		sum+= *(packet++);

		packlen-=2;

	}



	if (packlen > 0)

		sum += *(unsigned char *)packet;



	/* 這些將取決于位順序 */

	while (sum >> 16)

		sum = (sum & 0xffff) + (sum >> 16);



	return (unsigned short) ~sum;

}



long int send_echo(struct sockaddr_in toaddr,int id,int sq,int size,int ttlset)

/* 發送icmp ECHO信息可定目標IP,ID號,SQ號和 IP的TTL大小, */

/* 出現返回-1,否則返回發送時的時間 */

void sendicmp()

{

 int lenth;

 long int nowtime;

 char icmpbuffer[200];

 struct  icmp  *icmph;

 memset(icmpbuffer,'a', 200);

 icmph=(struct  icmp *)icmpbuffer;

 sen=socket(AF_INET,SOCK_RAW,1);

 inet_aton(toip,&toaddr.sin_addr);   /* 字符串轉入地址 */

 toaddr.sin_family = AF_INET; 

 icmph->type=8;

 icmph->code=0;

 icmph->un.echo.id=htons(id);

 icmph->un.echo.sequence=htons(sq);

 icmph->checksum=htons(0);

 icmph->checksum=csum((unsigned short *)icmpbuffer,8+size);

 /* 發送的沒有IP頭信息 */

 setsockopt(sends, IPPROTO_IP, IP_TTL, &ttlset, sizeof(ttlset));  /* 設定TTL的大小 */

 lenth=sendto(sends,icmpbuffer,8+size,0,(struct sockaddr *)&toaddr,sizeof(toaddr));

 if (lenth>0)

 {

  	nowtime=clock();

printf("send ICMO size %d at clock %d to %s  id=%d sq=%d  \n",

size,nowtime,inet_ntoa(toaddr.sin_addr),id,sq);

  }

  else

  {

  	return -1;

  }

 return nowtime;

}



/* 等對應的ICMP REPLY信息 指定IP,ID,SQ和等待時間。*/

/* 出現ttl超時或收到返回接收到時的時間,否則為-1 */

int wait_icmp(struct sockaddr_in toaddr,int id,int sq,clock_t timesize)

{

int length,fromlength;

clock_t endclock,recvclock;

inet_aton(toip,&toaddr.sin_addr);

memset(info,'A',500);

endclock=clock()+timesize;

while(clock()<endclock)

     {

fromlength=sizeof(from);

		length=recvfrom(waits,info,sizeof(info),0,

(struct sockaddr *)&from,&fromlength);

   	   

	   if ( length>0 && (from.sin_addr.s_addr==toaddr.sin_addr.s_addr) 

&& (ip_icmp->icmph.type==0) )

   	   { 

recvclock=clock();

if ((ntohs(ip_icmp->icmph.un.echo.id)==id) 

&& (ntohs(ip_icmp->icmph.un.echo.sequence)==sq) )

		  	{

viewinfo(info,length);

		  	return recvclock;

          	}

		} /* end length>0

		if (length>0 && (ip_icmp->icmph.type==11)&&(ntohs(eicmp->icmp_id)==id) 

&& (ntohs(eicmp->icmp_seq)==sq) )   /* 11為ttl超時 */

		{

recvclock=clock();

   	 		return recvclock;

		}

    } /* end while */



return -1;  /* 超時 */

}



int main(int argc, char *argv[])

{

int rec,fromlen,n,sq,id,mstime,on=1,route=1,timeout=0,ttl;

long int iplong;

struct protoent *proto;

struct hostent *hp,*fromname; 

clock_t start,sendtime,waittime;

start = clock();

ip_icmp=(struct ip_and_icmp *)info;

eicmp=(struct icmp *)(&ip_icmp->icmph.icmp_ip+1);

id=999;

mstime=2000;

if (argc<2)

{

printf("usage: %s ip_addrs time-out(millisecond)  \n",argv[0]);

printf("       %s testping 192.168.11.38 1000  \n",argv[0]);

printf("or     %s testping 192.168.11.38   \n",argv[0]);

return 0;

}

if (argc>2)

{

mstime=atoi(argv[2]);

if (mstime<1)

    		{

printf("time-out(millisecond) is error \n");

exit (0);

}

printf("timo-out %d ms \n",mstime);

}

if ((hp = gethostbyname(argv[1])) == NULL)    /* 進入名字的分析 */

{

if ( (toaddr.sin_addr.s_addr=inet_addr(argv[1])) == -1) 

{ 

	    		fprintf(stderr, "%s: unknown host\n", argv[1]);

exit (0);

		}

		if (htonl(toaddr.sin_addr.s_addr)<0x1000001)

        	{

         		printf("error ip %s \n",inet_ntoa(toaddr.sin_addr));

         		exit (0);

        	}

     } 

else 

{

bcopy(hp->h_addr_list[0], &toaddr.sin_addr.s_addr, hp->h_length);

} 

icmph=(struct  icmphdr *)icmpbuffer;

/* 初化接收和發送用的sends */

sends=socket(AF_INET,SOCK_RAW,1);

if(setsockopt(sends, IPPROTO_IP, IP_TTL, &on, sizeof(on)) < 0)

{

perror("This is sytem can't set TTL \n"); 

exit(1); 

     }

waits=socket(AF_INET,SOCK_RAW,1);

fcntl(waits,F_SETFL,O_NDELAY); 

proto = getprotobyname("icmp");  

rec=socket(AF_INET,SOCK_RAW, proto->p_proto);

fcntl(rec,F_SETFL,O_NDELAY); 

printf("%s \n",sys_errlist[errno]);

if (rec<0)

{

exit(0);

}

printf("now to wait... at %d \n",start);

/* waiting for packets */

inet_aton(dstip,&toaddr.sin_addr);

printf("send ICMO  to %s  \n",inet_ntoa(toaddr.sin_addr));

   	id=999;  		/* 初始化ID */

sq=0;   		/* 初始化sq */

timeout=0;  	/* time out次數 */

ttl=1;    /* ttl 值 */

while (1)

{

sq++;

sendtime=send_echo(toaddr,id,sq*100,20,ttl);	/* 發送ICMP ECHO */

/* 目標IP  編號  長度 ttl */

if (sendtime==-1)

{

printf("end error \n");

exit (0);

}

waittime=wait_icmp(toaddr,id,sq*100,mstime*1000); /* 接收ICMP ECHO */



if (waittime==-1)

{

if (timeout==4)  /* 連續4次time out退出 */

{

printf("time out >3 end \n");

exit (1);

}

printf("time out \n");

timeout++;

}

     else 

{

if (ip_icmp->icmph.type==0)

{

printf("%02d ",route);

printf(" %04d ms ",(waittime-sendtime)/1000);

printf("  %s ",inet_ntoa(ip_icmp->iph.ip_src));

printf("\n");

printf("\n");

printf("Trace complete \n");

break;

}

if (ip_icmp->icmph.type==11)

{

timeout=0;

ttl++;   			/* 接收到一個ttl超時信息TTL值加1 */

printf("%02d ",route);

printf(" %04d ms ",(waittime-sendtime)/1000);

printf("  %s ",inet_ntoa(ip_icmp->iph.ip_src));

printf("\n");

route++;

}

} /* end else waittime==-1 */

} /* end for */

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情图片一区| 国产尤物一区二区| 免费看日韩精品| 美女被吸乳得到大胸91| 精品av久久707| 午夜精品久久久久久久99水蜜桃| 91精品国产一区二区| 成人午夜精品一区二区三区| 一区二区三区精密机械公司| 久久免费美女视频| 欧美午夜宅男影院| 99久久er热在这里只有精品15 | 91免费看视频| 不卡一区二区三区四区| 国产精品白丝jk黑袜喷水| 久久精品72免费观看| 亚洲日本va午夜在线影院| 欧美精品一区二区三区高清aⅴ| 在线免费av一区| 一本到一区二区三区| 97久久超碰国产精品电影| 国产精品69毛片高清亚洲| 麻豆91小视频| 美国av一区二区| 狠狠色狠狠色综合日日91app| 日韩中文字幕av电影| 日韩精品每日更新| 美腿丝袜在线亚洲一区| 日本va欧美va瓶| 激情五月激情综合网| 国产精品亚洲午夜一区二区三区| 国内精品国产成人国产三级粉色| 精品一区二区三区久久久| 国产自产视频一区二区三区| jlzzjlzz亚洲日本少妇| 欧美性高清videossexo| 日韩无一区二区| 国产精品久久久久久亚洲伦| 一区二区三区中文字幕精品精品| 亚洲成人一区二区在线观看| 日本成人在线网站| 97精品国产露脸对白| 欧美剧情片在线观看| 欧美激情综合五月色丁香| 尤物在线观看一区| 激情六月婷婷久久| 欧美日韩一本到| 中文字幕欧美激情一区| 日日夜夜精品视频免费| 制服.丝袜.亚洲.中文.综合| 久久免费看少妇高潮| 午夜精品久久久久久久| 99精品视频一区| 久久久不卡影院| 九九九久久久精品| 欧美高清性hdvideosex| 亚洲另类色综合网站| 懂色av噜噜一区二区三区av| 日韩三级av在线播放| 亚洲一区在线观看网站| 成人激情免费网站| 欧美激情综合五月色丁香小说| 三级亚洲高清视频| 欧美日韩国产一二三| 一区二区不卡在线视频 午夜欧美不卡在 | 日韩精品一区在线| 国产在线播放一区| 精品国一区二区三区| 韩国三级中文字幕hd久久精品| 91精品国产乱码| 日韩精品一二三| 欧美一区午夜视频在线观看| 亚洲成人动漫在线免费观看| 欧美日韩电影在线播放| 热久久免费视频| 久久中文娱乐网| 成人福利在线看| 亚洲一区在线免费观看| 欧美美女视频在线观看| 激情成人午夜视频| 亚洲蜜臀av乱码久久精品| 欧美大度的电影原声| 亚洲人成亚洲人成在线观看图片| 国产盗摄一区二区三区| 亚洲国产一区视频| 亚洲福利视频一区| 中文av字幕一区| 日本精品裸体写真集在线观看| 午夜婷婷国产麻豆精品| 精品国产乱码久久久久久夜甘婷婷 | 色伊人久久综合中文字幕| 久久99精品久久久久久国产越南| 久久九九久久九九| 精品国产伦一区二区三区免费| 一本久久综合亚洲鲁鲁五月天| 国精产品一区一区三区mba视频| 一区二区三区四区在线播放 | 一区二区三区国产| 日本一区二区三区在线观看| 欧美一级黄色录像| 日韩欧美区一区二| 欧美tickling挠脚心丨vk| 欧美乱妇20p| 91精品欧美一区二区三区综合在| 国产精品自拍av| 99视频精品全部免费在线| 欧美日韩综合不卡| 精品裸体舞一区二区三区| 国产午夜亚洲精品理论片色戒| 精品av综合导航| 欧美激情自拍偷拍| 国产精品久久久久久久久免费樱桃| 2020国产精品自拍| 欧美国产精品专区| ...xxx性欧美| 免费欧美在线视频| 国产一区在线不卡| k8久久久一区二区三区| 在线观看日韩av先锋影音电影院| 精品视频999| 国产日韩综合av| 亚洲综合一区二区| 蜜桃av噜噜一区| 色999日韩国产欧美一区二区| 欧美视频精品在线观看| 久久精品欧美日韩精品| 日韩美女精品在线| 奇米精品一区二区三区四区 | 欧美午夜精品电影| 欧美精品一区二区三区视频| 国产精品欧美一区二区三区| 亚洲精品欧美激情| 丁香啪啪综合成人亚洲小说| 欧美综合在线视频| 欧美激情一区二区在线| 蜜桃视频一区二区三区在线观看| 99久久精品免费看| 国产亚洲精品久| 国产美女在线观看一区| 日韩精品一区在线| 日韩vs国产vs欧美| 在线观看视频欧美| 亚洲男人的天堂在线aⅴ视频| 国产成人午夜99999| 久久一二三国产| 韩国女主播一区二区三区| 欧美一级搡bbbb搡bbbb| 亚洲风情在线资源站| 欧美午夜精品理论片a级按摩| 亚洲猫色日本管| 精品视频一区二区不卡| 一区二区三区国产精品| 欧美久久久久久久久久| 日韩国产在线一| 精品黑人一区二区三区久久| 精品一区二区三区在线播放| 久久午夜色播影院免费高清| 国产精品综合一区二区| 亚洲国产精品激情在线观看| 国产99久久精品| 亚洲国产精品一区二区尤物区| 欧美精品粉嫩高潮一区二区| 蜜臂av日日欢夜夜爽一区| 久久久精品日韩欧美| 波多野结衣在线一区| 一区二区三区视频在线看| 在线观看国产日韩| 国产精品亚洲视频| 亚洲午夜久久久久久久久久久| 精品国产一区二区三区忘忧草 | 亚洲777理论| 亚洲欧美日韩一区二区| 91精品国产欧美一区二区18| 成人av资源网站| 奇米色一区二区三区四区| 亚洲午夜三级在线| 国产精品久久久久7777按摩| 国产不卡免费视频| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 欧美精品粉嫩高潮一区二区| 91麻豆蜜桃一区二区三区| 国产一区不卡在线| 国产精品一级在线| 国产精品资源在线| 国产成人av一区二区三区在线观看| 日韩精品电影一区亚洲| 五月婷婷久久综合| 欧美aaaaaa午夜精品| 久久99精品久久久| 国产不卡视频在线观看| 91蜜桃免费观看视频| 精品视频1区2区3区| 久久亚区不卡日本| 日韩欧美在线不卡| 国产偷国产偷精品高清尤物 | 老司机精品视频导航| 国产不卡视频一区| 欧美日韩成人综合| 国产欧美日韩视频在线观看| 亚洲精品视频在线观看免费|