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

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

?? myping.c

?? 實現ping功能,返回ping的結果.可以直接調用此函數,通則返回true,不通則返回false.
?? C
字號:
#include "myping.h"

#define PACKET_SIZE   32  //包大小
#define MAX_WAIT_TIME   500//最大等待時間,ms
#define MAX_SEND_PACKETS 3//發送包的個數

char sendpacket[PACKET_SIZE];
char recvpacket[PACKET_SIZE];
int sockfd,datalen=56;
int nsend=0,nreceived=0;
int result=0,timer_flag=0;
struct sockaddr_in dest_addr;
pid_t pid;
struct sockaddr_in from;
struct timeval tvrecv;

/*統計數據并修改結果,保存在全局變量result中*/
int statistics(int signo)
{
printf("nsend=%d\n",nsend);
printf("nreceived=%d\n",nreceived);
    printf("\n--------------------PING statistics-------------------\n");
    printf("%d packets transmitted, %d received , %d%% lost\n",nsend,nreceived,(int)((float)(nsend-nreceived)/(float)nsend*100));
    close(sockfd);
//	exit(0);
timer_flag=1;
	if(nsend==nreceived)
   result=1;
	else
result=0;
	  if(result)
   printf("ping success!\n");
else
	printf("ping fail!\n");
}



/*校驗和算法*/
unsigned short cal_chksum(unsigned short *addr,int len)
{     int nleft=len;
    int sum=0;
    unsigned short *w=addr;
    unsigned short answer=0;
           
/*把ICMP報頭二進制數據以2字節為單位累加起來*/
    while(nleft>1)
    {     sum+=*w++;
          nleft-=2;
    }
           /*若ICMP報頭為奇數個字節,會剩下最后一字節。把最后一個字節視為一個2字節數據的高字節,這個2字節數據的低字節為0,繼續累加*/
    if( nleft==1)
    {     *(unsigned char *)(&answer)=*(unsigned char *)w;
          sum+=answer;
    }
    sum=(sum>>16)+(sum&0xffff);
    sum+=(sum>>16);
    answer=~sum;
    return answer;
}



/*設置ICMP報頭*/
int pack(int pack_no)
{    
    int i,packsize;
    struct icmp *icmp;
    struct timeval *tval;
    icmp=(struct icmp*)sendpacket;
    icmp->icmp_type=ICMP_ECHO;
    icmp->icmp_code=0;
    icmp->icmp_cksum=0;
    icmp->icmp_seq=pack_no;
    icmp->icmp_id=pid;
    packsize=8+datalen;
    tval= (struct timeval *)icmp->icmp_data;
    gettimeofday(tval,NULL);   /*記錄發送時間*/
    icmp->icmp_cksum=cal_chksum( (unsigned short *)icmp,packsize); /*校驗算法*/
    return packsize;
}



/*發送三個ICMP報文*/
void send_packet()
{     int packetsize;
    while( nsend<MAX_SEND_PACKETS)
    { 
    nsend++;
          packetsize=pack(nsend); /*設置ICMP報頭*/
          if( sendto(sockfd,sendpacket,packetsize,0,(struct sockaddr *)&dest_addr,sizeof(dest_addr) )<0 )
          {     perror("sendto error");
                continue;
          }
          usleep(10000); /*每隔10m秒發送一個ICMP報文*/
    }
  //printf("nsend=%d\n",nsend);
}


/*接收所有ICMP報文*/
void recv_packet()
{    

    int n,fromlen;
    extern int errno;
    signal(SIGALRM,(void (*)(int))statistics);
    fromlen=sizeof(from);
    while( nreceived<nsend)
    {     

//打開定時器
         ualarm(MAX_WAIT_TIME*1000,0);
          if( (n=recvfrom(sockfd,recvpacket,sizeof(recvpacket),0,(struct sockaddr *)&from,(int *)&fromlen)) <0)
          {    
            if(errno==EINTR)
		continue;
	//	break;	
       //         perror("recvfrom error");
              break;
          }
          gettimeofday(&tvrecv,NULL); /*記錄接收時間*/
          if(unpack(recvpacket,n)==-1)
		  	continue;
       nreceived++;
	   
			   printf("nreceived=%d\n",nreceived);
    }
	 if(timer_flag==0)
statistics(SIGALRM);
}



/*剝去ICMP報頭*/
int unpack(char *buf,int len)
{     int i,iphdrlen;
    struct ip *ip;
    struct icmp *icmp;
    struct timeval *tvsend;
    double rtt;
    ip=(struct ip *)buf;
    iphdrlen=ip->ip_hl<<2;   /*求ip報頭長度,即ip報頭的長度標志乘4*/
    icmp=(struct icmp *)(buf+iphdrlen); /*越過ip報頭,指向ICMP報頭*/
    len-=iphdrlen;         /*ICMP報頭及ICMP數據報的總長度*/
	printf("len=%d\n",len);
    if( len<8)           /*小于ICMP報頭長度則不合理*/
    {     
    printf("ICMP packets\'s length is less than 8\n");
   return -1;
    }
printf("icmp->icmp_type=%d\n",icmp->icmp_type);
printf("ICMP_ECHOREPLY=%d\n",ICMP_ECHOREPLY);
    /*確保所接收的是我所發的的ICMP的回應*/
    if( (icmp->icmp_type==ICMP_ECHOREPLY) && (icmp->icmp_id==pid) )
    {     tvsend=(struct timeval *)icmp->icmp_data;
          tv_sub(&tvrecv,tvsend); /*接收和發送的時間差*/
          rtt=tvrecv.tv_sec*1000+tvrecv.tv_usec/1000; /*以毫秒為單位計算rtt*/
          /*顯示相關信息*/
          printf("%d byte from %s: icmp_seq=%u ttl=%d rtt=%.3f ms\n",len,inet_ntoa(from.sin_addr), icmp->icmp_seq,ip->ip_ttl,rtt);
    }
    else   return -1;
}


/*主函數,ping遠程ip,并返回結果*/
void myping(char *ip)
{     
    struct hostent *host;
    struct protoent *protocol;
    unsigned long inaddr=0l;
    int waittime=MAX_WAIT_TIME;
    int size=50*1024;
    result=0;
	
    if( (protocol=getprotobyname("icmp") )==NULL)
    {     
          perror("getprotobyname");
          exit(1);
    }

    /*生成使用ICMP的原始套接字,這種套接字只有root才能生成*/
    if( (sockfd=socket(AF_INET,SOCK_RAW,protocol->p_proto) )<0)
    {     perror("socket error");
          exit(1);
    }
    /* 回收root權限,設置當前用戶權限*/
    setuid(getuid());
    /*擴大套接字接收緩沖區到50K這樣做主要為了減小接收緩沖區溢出的
      的可能性,若無意中ping一個廣播地址或多播地址,將會引來大量應答*/
    setsockopt(sockfd,SOL_SOCKET,SO_RCVBUF,&size,sizeof(size) );
    bzero(&dest_addr,sizeof(dest_addr));
    dest_addr.sin_family=AF_INET;

if ((host=gethostbyname(ip)) == NULL)
{
/* get the host info */
herror("gethostbyname");
exit(1);
}
printf("Host name : %s\n", host->h_name);
// printf("IP Address : %s\n",inet_ntoa(*((struct in_addr *)Dest->h_addr)));

dest_addr.sin_addr = *((struct in_addr *)host->h_addr);
dest_addr.sin_family = AF_INET;
bzero(&(dest_addr.sin_zero), 8); 



/*	
   
    if( inaddr=inet_addr(ip)==INADDR_NONE)
    {     

	if((host=gethostbyname(ip) )==NULL) 
          {     
          perror("gethostbyname error");
                exit(1);
          }
          memcpy( (char *)&dest_addr.sin_addr,host->h_addr,host->h_length);
    }
    else  
      //    memcpy( (char *)&dest_addr,(char *)&inaddr,host->h_length);
    	{
         memcpy( (char *)&dest_addr.sin_addr,(char *)&inaddr, sizeof(dest_addr.sin_addr));
    	}*/
    /*獲取main的進程id,用于設置ICMP的標志符*/
    pid=getpid();
    printf("PING %s(%s): %d bytes data in ICMP packets.\n",ip,inet_ntoa(dest_addr.sin_addr),datalen);
    send_packet(); /*發送所有ICMP報文*/
    recv_packet(); /*接收所有ICMP報文*/
//  return  statistics(SIGALRM); /*進行統計*/

}



/*兩個timeval結構相減*/
void tv_sub(struct timeval *out,struct timeval *in)
{     if( (out->tv_usec-=in->tv_usec)<0)
    {     --out->tv_sec;
          out->tv_usec+=500000;
    }
    out->tv_sec-=in->tv_sec;
}
/*------------- The End -----------*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区三区在线观看| 欧美一级生活片| 国产专区综合网| 免费在线观看一区| 亚洲电影第三页| 亚洲国产wwwccc36天堂| 亚洲欧美色一区| 亚洲欧美aⅴ...| 亚洲精品中文字幕乱码三区| 中文字幕一区二区三区视频| 国产精品不卡一区| 亚洲欧美日韩国产成人精品影院 | 欧美主播一区二区三区美女| 成人av免费观看| 色视频一区二区| 欧美日韩不卡一区二区| 日韩一区二区三区视频在线| 欧美www视频| 日本一区二区三区免费乱视频 | 在线成人av影院| 欧美不卡在线视频| 国产精品女同一区二区三区| 中文字幕在线播放不卡一区| 亚洲午夜久久久久久久久电影网| 日韩电影免费在线看| 国产一二三精品| 99精品国产视频| 91精品国产aⅴ一区二区| 欧美xfplay| 一区二区三区中文字幕电影| 日韩影院精彩在线| 丁香激情综合国产| 欧美一区二区在线观看| 国产欧美日韩在线观看| 亚洲成人av电影在线| 国产东北露脸精品视频| 欧美性受极品xxxx喷水| 2023国产一二三区日本精品2022| 中文字幕亚洲精品在线观看 | 国产黑丝在线一区二区三区| 一本高清dvd不卡在线观看| 欧美视频你懂的| 久久久久久久久久久久电影 | 欧美a一区二区| a4yy欧美一区二区三区| 欧美岛国在线观看| 亚洲一区二区av在线| 国产99久久久国产精品| 欧美丰满嫩嫩电影| 亚洲乱码一区二区三区在线观看| 国产乱理伦片在线观看夜一区| 欧美日韩在线直播| 中文子幕无线码一区tr| 蜜桃视频在线一区| 欧美精品一二三| 综合分类小说区另类春色亚洲小说欧美| 欧美aaaaaa午夜精品| 欧洲国内综合视频| 亚洲欧美日韩国产综合在线| 国产精品18久久久久久久网站| 欧美一区二区在线观看| 亚洲一区在线观看视频| 91麻豆文化传媒在线观看| 久久精品亚洲麻豆av一区二区| 日本视频在线一区| 欧美福利电影网| 日韩不卡一区二区| 欧美美女激情18p| 亚洲自拍偷拍九九九| 色拍拍在线精品视频8848| 国产精品水嫩水嫩| 成人黄色免费短视频| 国产精品美女久久久久久2018| 国产馆精品极品| 中文av一区二区| 国产成人久久精品77777最新版本| 精品久久久久久无| 精品亚洲成a人| 久久伊人中文字幕| 国产精品中文有码| 国产欧美一区二区精品性色超碰 | 中文字幕亚洲区| av一区二区三区四区| 国产精品成人免费| 91啪亚洲精品| 一区二区三区四区不卡在线| 在线欧美日韩精品| 亚洲成a人v欧美综合天堂下载| 欧美日韩国产精选| 久久国产福利国产秒拍| 精品国产伦一区二区三区观看方式| 精品综合久久久久久8888| wwww国产精品欧美| jlzzjlzz亚洲日本少妇| 亚洲一区二区在线播放相泽| 欧美丰满少妇xxxxx高潮对白| 看国产成人h片视频| 久久免费偷拍视频| 色悠悠亚洲一区二区| 亚洲一区二区视频在线观看| 欧美一区二区三区四区在线观看| 久久精品国产99| 国产精品免费久久| 欧美精品第一页| 国产在线精品一区二区不卡了| 中文字幕一区二区三区色视频| 91视频com| 爽爽淫人综合网网站| 久久久精品国产免大香伊| 色偷偷成人一区二区三区91| 日产国产高清一区二区三区| 国产日韩欧美不卡在线| 在线一区二区三区四区| 久久成人免费电影| 亚洲欧美日韩一区二区| 91精品婷婷国产综合久久| www.99精品| 久久99国产乱子伦精品免费| 国产精品白丝在线| 欧美tickle裸体挠脚心vk| 91免费看`日韩一区二区| 青青草成人在线观看| 亚洲少妇最新在线视频| 久久久国际精品| 欧美精品三级日韩久久| 一本大道久久a久久精二百| 久久99久久精品| 亚洲成av人影院在线观看网| 国产精品另类一区| 精品国产电影一区二区| 在线观看国产精品网站| 顶级嫩模精品视频在线看| 免费一级欧美片在线观看| 亚洲免费高清视频在线| 中文字幕欧美三区| 欧美精品一区二区三区在线播放| 欧美性感一类影片在线播放| 不卡一区二区三区四区| 国产精品一二一区| 久久99久久99精品免视看婷婷 | 久久久亚洲精品石原莉奈| 欧美日韩大陆在线| 91视视频在线观看入口直接观看www| 国内精品伊人久久久久av一坑| 日韩综合小视频| 婷婷国产在线综合| 亚洲不卡av一区二区三区| 亚洲色图制服诱惑| 亚洲天堂免费在线观看视频| 国产精品伦理一区二区| 亚洲国产精品成人久久综合一区 | 国产九色sp调教91| 国产一区二区三区在线观看免费视频 | 盗摄精品av一区二区三区| 国产精品亚洲人在线观看| 久久精品国产亚洲高清剧情介绍| 蜜桃视频第一区免费观看| 日韩1区2区日韩1区2区| 男男视频亚洲欧美| 日韩电影在线观看电影| 蜜臀久久久99精品久久久久久| 蜜桃在线一区二区三区| 精品一区二区三区欧美| 国产精品538一区二区在线| 国产一区在线精品| 99热在这里有精品免费| 色欧美日韩亚洲| 日韩一级完整毛片| 久久免费精品国产久精品久久久久| 国产三级精品三级在线专区| 国产精品麻豆欧美日韩ww| 一区二区三区在线视频观看58 | 亚洲不卡在线观看| 蜜臀a∨国产成人精品| 国产成人8x视频一区二区 | 日韩欧美中文字幕精品| 久久综合av免费| 最新日韩在线视频| 亚洲成人免费av| 国产激情视频一区二区三区欧美 | www.亚洲精品| 欧美视频在线一区二区三区 | 日本高清不卡视频| 日韩精品一区二区三区三区免费| 精品盗摄一区二区三区| 综合婷婷亚洲小说| 美女在线视频一区| 一本色道亚洲精品aⅴ| 欧美高清视频一二三区 | 久久亚洲精精品中文字幕早川悠里| 久久精品网站免费观看| 伊人夜夜躁av伊人久久| 久久99精品视频| 91国偷自产一区二区三区成为亚洲经典 | 色诱视频网站一区| 日韩久久免费av| 亚洲一区在线播放| 波多野结衣亚洲一区| 欧美一区二区三级| 亚洲精品欧美激情|