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

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

?? 4.c

?? linux下面進行網絡編程的幾個小實例
?? C
字號:
#include <stdio.h>
#include <signal.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netdb.h>
#include <setjmp.h>
#include <errno.h>
#define PACKET_SIZE     4096
#define MAX_WAIT_TIME   5
#define MAX_NO_PACKETS  3

char sendpacket[PACKET_SIZE];
char recvpacket[PACKET_SIZE];
int sockfd,datalen=56;
int nsend=0,nreceived=0;
struct sockaddr_in dest_addr;
pid_t pid;
struct sockaddr_in from;
struct timeval tvrecv;
void statistics(int signo);
unsigned short cal_chksum(unsigned short *addr,int len);
int pack(int pack_no);
void send_packet(void);
void recv_packet(void);
int unpack(char *buf,int len);
void tv_sub(struct timeval *out,struct timeval *in);
void statistics(int signo)
{       printf("\n--------------------PING statistics-------------------\n");
        printf("%d packets transmitted, %d received , %%%d lost\n",nsend,nreceived,
                        (nsend-nreceived)/nsend*100);
        close(sockfd);
        exit(1);
}
/*校驗和算法*/
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_NO_PACKETS)
        {       nsend++;
                packetsize=pack(nsend); /*設置ICMP報頭*/
                if( sendto(sockfd,sendpacket,packetsize,0,
                          (struct sockaddr *)&dest_addr,sizeof(dest_addr) )<0  )
                {       perror("sendto error");
                        continue;
                }
                sleep(1); /*每隔一秒發送一個ICMP報文*/
        }
}
/*接收所有ICMP報文*/
void recv_packet()
{       int n,fromlen;
        extern int errno;

        signal(SIGALRM,statistics);
        fromlen=sizeof(from);
        while( nreceived<nsend)
        {       alarm(MAX_WAIT_TIME);
                if( (n=recvfrom(sockfd,recvpacket,sizeof(recvpacket),0,
                                (struct sockaddr *)&from,&fromlen)) <0)
                {       if(errno==EINTR)continue;
                        perror("recvfrom error");
                        continue;
                }
                gettimeofday(&tvrecv,NULL);  /*記錄接收時間*/
                if(unpack(recvpacket,n)==-1)continue;
                nreceived++;
        }
}
/*剝去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數據報的總長度*/
        if( len<8)                /*小于ICMP報頭長度則不合理*/
        {       printf("ICMP packets\'s length is less than 8\n");
                return -1;
        }
        /*確保所接收的是我所發的的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;
}
main(int argc,char *argv[])
{       struct hostent *host;
        struct protoent *protocol;
        unsigned long inaddr=0l;
        int waittime=MAX_WAIT_TIME;
        int size=50*1024;
        if(argc<2)
        {       printf("usage:%s hostname/IP address\n",argv[0]);
                exit(1);
        }
        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;

        /*判斷是主機名還是ip地址*/
        if( inaddr=inet_addr(argv[1])==INADDR_NONE)
        {       if((host=gethostbyname(argv[1]) )==NULL) /*是主機名*/
                {       perror("gethostbyname error");
                        exit(1);
                }
                memcpy( (char *)&dest_addr.sin_addr,host->h_addr,host->h_length);
        }
        else    /*是ip地址*/
                memcpy( (char *)&dest_addr,(char *)&inaddr,host->h_length);
        /*獲取main的進程id,用于設置ICMP的標志符*/
        pid=getpid();
        printf("PING %s(%s): %d bytes data in ICMP packets.\n",argv[1],
                        inet_ntoa(dest_addr.sin_addr),datalen);
        send_packet();  /*發送所有ICMP報文*/
        recv_packet();  /*接收所有ICMP報文*/
        statistics(SIGALRM); /*進行統計*/
        return 0;
}
/*兩個timeval結構相減*/
void tv_sub(struct timeval *out,struct timeval *in)
{       if( (out->tv_usec-=in->tv_usec)<0)
        {       --out->tv_sec;
                out->tv_usec+=1000000;
        }
        out->tv_sec-=in->tv_sec;
}
/*------------- The End -----------*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一线二线三线精华| 日韩欧美区一区二| 91精选在线观看| 久久精品亚洲国产奇米99| 亚洲永久免费视频| 国产黄色91视频| 91精品国产综合久久久久久久 | 一本一道波多野结衣一区二区| 3atv一区二区三区| 亚洲丝袜另类动漫二区| 久久激情五月激情| 欧美性大战久久久| 国产精品私人影院| 狠狠色狠狠色综合系列| 欧美久久久久久久久| 最新国产精品久久精品| 国产又黄又大久久| 7777精品伊人久久久大香线蕉| 亚洲精品免费视频| 懂色av中文字幕一区二区三区| 日韩一区二区在线免费观看| 亚洲成av人在线观看| 波多野结衣精品在线| 久久久精品tv| 国产成人高清视频| 久久久噜噜噜久久中文字幕色伊伊| 日韩国产欧美在线视频| 欧美群妇大交群的观看方式| 亚洲午夜精品在线| 欧美色国产精品| 亚洲综合区在线| 91福利社在线观看| 亚洲精品久久嫩草网站秘色| 91亚洲精品乱码久久久久久蜜桃| 中文字幕色av一区二区三区| 成人h动漫精品一区二| 国产日韩欧美电影| 成人美女在线观看| 国产精品久久久久一区二区三区| 成人免费视频视频在线观看免费| 国产精品污www在线观看| 成人精品视频一区| 亚洲三级小视频| 欧美三级乱人伦电影| 日产精品久久久久久久性色| 精品久久久久久亚洲综合网 | 在线视频观看一区| 亚洲综合色噜噜狠狠| 欧美日韩在线播放一区| 视频一区免费在线观看| 日韩写真欧美这视频| 国产精品综合久久| 国产精品国产成人国产三级| 日本道精品一区二区三区| 亚洲国产视频直播| 欧美成人在线直播| 高清国产一区二区三区| 一区二区三区四区中文字幕| 欧美肥胖老妇做爰| 极品少妇一区二区| 亚洲欧美影音先锋| 欧美精品亚洲一区二区在线播放| 国产麻豆成人传媒免费观看| 亚洲人成人一区二区在线观看| 欧美日韩三级视频| 国产精品一区二区在线看| 尤物av一区二区| 2020国产精品自拍| 99久久精品情趣| 男男视频亚洲欧美| 国产精品福利影院| 欧美一区二区三区四区久久| 成人激情视频网站| 亚洲成人av一区二区三区| 久久久三级国产网站| 日本高清不卡一区| 国产成人精品三级麻豆| 日韩精品一二三| 日韩一区在线播放| 日韩精品资源二区在线| 91国产免费观看| 国产成人精品亚洲午夜麻豆| 秋霞电影网一区二区| 亚洲精品高清视频在线观看| 久久综合久久久久88| 欧美网站大全在线观看| 国产69精品久久777的优势| 日本欧美一区二区三区| 亚洲视频免费在线| 国产日韩精品一区二区三区| 欧美肥妇毛茸茸| 欧美性高清videossexo| 国产成人精品www牛牛影视| 日本免费新一区视频| 一区二区视频免费在线观看| 中文在线免费一区三区高中清不卡| 欧美成人精品1314www| 91国产视频在线观看| www.日韩大片| 成人一区在线看| 国产一区二区精品久久99| 日本美女一区二区| 天天操天天干天天综合网| 亚洲麻豆国产自偷在线| 国产精品免费aⅴ片在线观看| 久久毛片高清国产| 精品噜噜噜噜久久久久久久久试看| 制服丝袜国产精品| 欧美精品久久99| 91.com视频| 欧美日韩免费一区二区三区视频| 91啪在线观看| 欧洲精品视频在线观看| 99国产精品99久久久久久| 暴力调教一区二区三区| 粉嫩绯色av一区二区在线观看| 国产激情一区二区三区| 国产成人精品三级麻豆| 成人激情小说乱人伦| 波多野结衣一区二区三区| 99r国产精品| 欧美优质美女网站| 欧美综合色免费| 91精品欧美福利在线观看| 91超碰这里只有精品国产| 91精品国产免费| 精品少妇一区二区三区日产乱码| 日韩一级片在线观看| 欧美mv日韩mv| 日本一区二区三区电影| 日韩毛片高清在线播放| 悠悠色在线精品| 日本欧美在线观看| 国产麻豆精品久久一二三| 成人午夜免费av| 欧美视频中文字幕| 欧美久久高跟鞋激| 久久久久国产精品人| 亚洲欧洲日产国产综合网| 亚洲国产欧美另类丝袜| 麻豆国产精品一区二区三区| 国产99精品国产| 91精彩视频在线| 日韩一区二区影院| 国产日本欧洲亚洲| 亚洲精品视频免费观看| 天天亚洲美女在线视频| 国产一区二区看久久| 色综合一区二区| 日韩精品一区二区三区在线| 中文字幕一区二区三区不卡| 亚洲高清不卡在线| 国产黄色精品网站| 欧美日韩久久不卡| 国产日韩高清在线| 亚洲成人免费视频| 国产精品66部| 欧美精品在线观看一区二区| 久久久精品日韩欧美| 亚洲一二三四久久| 国产精品一区二区久久精品爱涩| 91福利在线观看| 国产日韩欧美激情| 日本三级韩国三级欧美三级| 91一区二区在线| 久久久www成人免费无遮挡大片| 亚洲国产中文字幕| 国产成人在线观看免费网站| 欧美三级三级三级爽爽爽| 欧美韩日一区二区三区四区| 日本在线观看不卡视频| 色噜噜久久综合| 国产日本欧美一区二区| 蜜臀av性久久久久av蜜臀妖精| 色婷婷精品久久二区二区蜜臂av| 国产视频一区二区在线观看| 蜜臀91精品一区二区三区| 日本高清不卡aⅴ免费网站| 中文字幕不卡在线观看| 精品一二三四在线| 欧美日高清视频| 亚洲老司机在线| jizz一区二区| 26uuuu精品一区二区| 日本va欧美va精品发布| 欧美日韩精品一区二区三区四区| 亚洲日穴在线视频| 成人黄色在线网站| 久久久精品国产免费观看同学| 另类人妖一区二区av| 欧美狂野另类xxxxoooo| 亚洲一区二区三区影院| 91亚洲永久精品| 亚洲特级片在线| 99久久综合精品| 成人欧美一区二区三区| av网站一区二区三区| 综合久久久久综合| 97成人超碰视| 亚洲一区二区三区自拍|