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

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

?? ping.c

?? ping的原理就是首先建立通道
?? C
字號:
# include       <stdio.h># include       <stdlib.h># include       <string.h>  
# include       <fcntl.h>  
# include       <errno.h> 
# include       <signal.h> 
# include       <sys/types.h> 
# include       <sys/socket.h> 
# include       <sys/time.h> 
# include       <netinet/in.h> 
# include       <arpa/inet.h> 
# include       <netdb.h> 

# define        ICMP_ECHO       8       /* 定義icmp echo */ 
# define        ICMP_ECHOREPLY 0       /* 定義icmp echo reply */ 
# define        ICMP_HEADSIZE   8       /* 定義icmp 包頭的大小 */ 
# define        IP_HEADSIZE     20      /* 定義ip 包頭的大小 */ 

    /* 以下是定義的兩個用來比較大小的宏 */ 
# define        MAX(a,b)        ((a) > (b))? (a):(b) 
# define        MIN(a,b)        ((a) > (b))? (b):(a) 

typedef struct tagIpHead               /* 定義icmp 包頭數據結構 */ 
{ 
        u_char          ip_verlen;      /* ip version 和 ip header 的長度 */ 
        u_char          ip_tos;         /* service的ip類型 */ 
        u_short         ip_len;         /* ip包的長度 */ 
        u_short         ip_id;          /* ip包的標識號 */ 
        u_short         ip_fragoff;     /* ip包的起始地址 */ 
        u_char          ip_ttl;         /* ip包的存活時間 */ 
        u_char          ip_proto;       /* ip包的協議類型 */ 
        u_short         ip_chksum;      /* ip包頭的檢驗長度 */ 
        u_long          ip_src_addr;    /* ip包的源地址 */ 
        u_long          ip_dst_addr;    /* ip包的目標地址 */ 
} IPHEAD; 

typedef struct tagIcmpHead              /* icmp 頭結構 */ 
{ 
        u_char          icmp_type;      /* icmp 服務類型 */ 
                                        /* 8 echo require, 0 echo reply */ 
        u_char          icmp_code;      /* icmp包頭代碼 */ 
        u_short         icmp_chksum;    /* icmp包頭的檢驗和 */ 
        u_short         icmp_id;        /* icmp包的標識號 */ 
        u_short         icmp_seq;       /* icmp包隊列 */ 
        u_char          icmp_data[1];   /* icmp包數據,指針類型 */ 
} ICMPHEAD; 

/********************************************************************* 
        函數ChkSum用來作奇偶校驗。 
    參數: 
u_short * pIcmpData數據起始地址 
        int iDataLen為數據長度 
    返回值: 
        校驗結果 
*********************************************************************/ 
u_short ChkSum( u_short * pIcmpData, int iDataLen ) 
{ 
        u_short iSum; 
        u_short iOddByte; 

        iSum = 0; 

        while ( iDataLen > 1 ) {          
                iSum = iSum ^ (*pIcmpData++);        /* 和下一個數據作異或操作 */ 
                iDataLen -= 2; 
        } 

        if ( iDataLen == 1 ) {          /* 剩下的奇數位 */ 
                iOddByte = 0; 
                *((u_char *)&iOddByte) = *(u_char *)pIcmpData; 
                iSum ^= iOddByte; 
        } 

        iSum ^= 0xffff;                 /* 取反操作 */ 
        return(iSum); 
} 
/******************************************************************************* 
    time_now函數用來返回系統時間。 
    返回值: 
        系統的當前時間和1970.1.1 00:00:00之間的時間間隔, 
        用微妙來表示。 
********************************************************************************/ 
long time_now() 
{ 
        struct timeval now; 
        long    lPassed; 
        gettimeofday(&now, 0); 
        lPassed = now.tv_sec * 1000000 + now.tv_usec; 
                                        /* now.tv_sec 中保存了秒數*/ 
                                        /* now.tv_usec 中保存了微妙數 */ 
        return lPassed; 
} 

char*   host;                   /* 目標主機 */ 
char*   prog;                   /* 程序名稱 */ 
extern errno;                  /* 系統全局變量 */ 
long    lSendTime;              /* 數據包的發送時間,在發數據時被改變 */ 
u_short seq;                    /* icmp包隊列 */ 
int     iTimeOut;               /* 超時時間 */ 
int     sock, sent, recvd, max, min, total; 
                                /* sent : 發送出去的包的數目 */ 
                                /* recvd: 接收到的包的數目 */ 
                                /* max, min: 最大和最小的往返時間 */ 
                                /* total: 總共用時 */ 
                                /* 用來計算平均值 */ 
u_long lHostIp;                /* 主機的ip地址 */ 
struct sockaddr_in it;          /* 目標主機的信息 */ 

int ping(); 
void stat(); 
main(int argc, char** argv) 
{ 
        struct hostent* h; 
        char            buf[200]; 
        char            dst_host[32]; 
        int             i, namelen; 
        IPHEAD*         pIpHead; 
        ICMPHEAD*       pIcmpHead; 

        if (argc < 2) {         /* 每一個超時時間后ping一次指定的主機 */ 
                                /* 缺省的超時時間為1秒 */ 

                printf("usage: %s [-timeout] host|IP\n", argv[0]); 
                exit(0); 
        } 
        prog = argv[0]; 
        host = argc == 2 ? argv[1] : argv[2]; 
        iTimeOut = argc == 2 ? 1 : atoi(argv[1]); 

        /* 創建icmp套接字 */ 

        if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0) { 
                perror("socket"); 
                exit(2); 
        } 

        /* 設置目標主機信息 */ 

        bzero(&it, sizeof(it)); 
        it.sin_family = AF_INET; 

        /* 檢查主機地址類型 */ 

        if ( ( lHostIp = inet_addr(host) ) != INADDR_NONE ) { 
                                                /* 合法的ip地址 */ 
                it.sin_addr.s_addr = lHostIp; 
                strcpy( dst_host, host ); 
        } else if ( h = gethostbyname(host) ) { 
                                                /* 獲取合法的主機名稱 */ 
                                                /* 從本地機上獲取*/ 
                                                /* 或從DNS服務器上獲取 */ 
                bcopy(h->h_addr, &it.sin_addr, h->h_length); 
                sprintf( dst_host, "%s (%s)", host, 
                         inet_ntoa(it.sin_addr) ); 
        } else { 
                                                /* 錯誤的ip地址或主機名稱 */ 
                                                /* 在這種情況下程序便退出 */ 
                fprintf( stderr, "bad IP or host\n" ); 
                exit(3); 
        } 
        namelen = sizeof(it); 
   
        printf("\npinging %s, send %d bytes\n", 
                dst_host, 
                IP_HEADSIZE + ICMP_HEADSIZE + sizeof(long) 
                ); 
   
        seq = 0;                /* 第一個 icmp_seq = 0 */ 
        sigset(SIGINT, stat);   /* 按鍵響應函數,當收到del 或 ctrl+c */ 
    /*按鍵操作后便調用 stat函數 */ 
                                /* 顯示完結果,便退出 */ 
        sigset(SIGALRM, ping); /* 設置超時處理函數 */ 
                                /* 收到超時信號后便去調用ping函數 */ 
        alarm(iTimeOut);        /* 啟動計時器 */ 
                                /* 以秒為單位 */ 
        ping(); 
        for ( ;; ) {            /* 等待每個返回的 */ 
                                /* icmp包,并且處理它 */ 
                register size; 
                register u_char ttl; 
                register delta; 
                register iIpHeadLen; 
   
                /* 阻塞并獲取返回的數據包 */ 
   
                size = recvfrom(sock, buf, sizeof(buf), 0, 
                                (struct sockaddr *)&it, &namelen); 
                if (size == -1 && errno == EINTR) { 
                                /* 獲取數據時出錯或者是系統調用被信號所中斷 */ 
                     //   continue; 
                } 
   
                /* 計算數據包的往返時間 */ 
                /* 用當前系統時間減去發送此包時的系統時間來獲得 */ 
   
                delta = (int)((time_now() - lSendTime)/1000); 
   
                /* 獲取返回的數據包并檢查它的ip頭 */ 
   
                pIpHead = (IPHEAD *)buf; 
   
                /* 檢查包的大小,如果包太小,那么就不是返回的icmp數據包 */ 
                /* 這時,便丟棄這個包 */ 
   
                iIpHeadLen = (int)((pIpHead->ip_verlen & 0x0f) << 2); 
                if (size < iIpHeadLen + ICMP_HEADSIZE) { 
                    //    continue; 
                } 
                ttl = pIpHead->ip_ttl;          /* 數據包的存活時間 */ 
   
                /* 獲取icmp 頭信息 */ 
                pIcmpHead = (ICMPHEAD *)(buf + iIpHeadLen); 
   
                /* 不是icmp返回包,丟棄它 */ 
                if (pIcmpHead->icmp_type != ICMP_ECHOREPLY) { 
                    //    continue; 
                } 
   
                /* 不是正確的icmp隊列號,丟棄它 */ 
                if (pIcmpHead->icmp_id != seq || pIcmpHead->icmp_seq != seq) { 
                   //     continue; 
                } 
   
                /* 給每個返回icmp包打印返回信息 */ 
                sprintf( buf, "icmp_seq=%u bytes=%d ttl=%d", 
                        pIcmpHead->icmp_seq, size, ttl ); 
                fprintf(stderr, "reply from %s: %s time=%d ms\n", 
                            host, buf, delta); 
   
                /* 計算ping的結果,包括: */ 
                /* 數據包的最大、最小、平均往返時間 */ 
                /* 收到的返回icmp數據包的數目 */ 
                max = MAX(delta, max); 
                min = min ? MIN(delta, min) : delta; 
                total += delta; 
                ++ recvd; 
   
                /* 緊接著下一個的icmp數據包 */ 
   
                ++ seq; 
        } 
} 
   
/*****
    ping函數 
        向指定的目標地址發送icmp數據包。 
    無參數,無返回值。 
    使用全局變量******************/ 
ping() 
{ 
        char    buf[200]; 
        int     iPacketSize; 
        /* 設置icmp數據包的頭信息 */ 
        ICMPHEAD *pIcmpHead = (ICMPHEAD *)buf; 
        pIcmpHead->icmp_type = ICMP_ECHO; 
        pIcmpHead->icmp_code = 0; 
        pIcmpHead->icmp_id = seq; 
        pIcmpHead->icmp_seq = seq; 
        pIcmpHead->icmp_chksum = 0; 
   
        /* store time information as icmp packet content, 4 bytes */ 
        /* 你也可以在此存儲一些別的信息 */ 
   
        *((long *)pIcmpHead->icmp_data) = time_now(); 
   
        iPacketSize = ICMP_HEADSIZE + 4;        /* icmp包的長度 */ 
   
        /* icmp包數據的奇偶校驗 */ 
   
        pIcmpHead->icmp_chksum = ChkSum((u_short *)pIcmpHead, 
                                                iPacketSize ); 
   
        /* 存儲發送包的時間,以便用來計算數據包的往返時間 */ 
        lSendTime = time_now(); 
   
        /* 向指定的目標地址發送icmp數據包 */ 
        if ( sendto(sock, buf, iPacketSize, 0, (struct sockaddr *)&it, 
                sizeof(it) ) < 0) { 
                perror("send failed"); 
                exit(6); 
        } 
   
        /* 總共發送的數據包數目 */ 
        ++sent; 
   
        /* 重新設置計時器 */ 
        alarm(iTimeOut); 
} 
/******    stat函數: 
        打印結果信息。 ******/ 
void stat() 
{ 
        if (sent) { 
                printf("\n----- %s ping statistics summerized by Digger-----\n" 
                        , host ); 
                printf("%d packets sent, %d packets received, %.2f%% lost\n", 
                        sent, recvd, (float)(sent-recvd)/(float)sent*100 ); 
        } 
        if (recvd) { 
                printf("round_trip min/avg/max: %d/%d/%d ms\n\n", 
                        min, total/recvd, max ); 
        } 
        exit(0); }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡av在线免费观看| 欧美一区二区在线不卡| 欧美最猛黑人xxxxx猛交| 精品国产精品网麻豆系列| 亚洲免费在线视频一区 二区| 日本91福利区| 92精品国产成人观看免费| 91精品国产91久久综合桃花| 亚洲日本丝袜连裤袜办公室| 国内精品伊人久久久久av影院 | 国产日韩欧美综合一区| 五月天久久比比资源色| 一本色道综合亚洲| 欧美高清在线精品一区| 国产在线精品一区二区不卡了 | 欧美女孩性生活视频| 亚洲丝袜另类动漫二区| 国产麻豆精品久久一二三| 日韩免费看网站| 天堂va蜜桃一区二区三区漫画版| 99天天综合性| 中文字幕欧美日本乱码一线二线| 美女网站一区二区| 91精品国产全国免费观看| 亚洲午夜在线视频| 欧美体内she精高潮| 亚洲精品久久7777| 在线区一区二视频| 一级做a爱片久久| 色香蕉久久蜜桃| 亚洲欧美一区二区三区久本道91| 成人的网站免费观看| 国产精品久久看| av综合在线播放| 亚洲色图清纯唯美| 色激情天天射综合网| 亚洲综合视频网| 欧美专区亚洲专区| 婷婷国产在线综合| 91麻豆精品国产91久久久久| 视频一区欧美日韩| 欧美一卡二卡三卡| 国产一区激情在线| 国产精品天干天干在线综合| av一区二区不卡| 一区二区三区资源| 3d成人动漫网站| 黄色精品一二区| 国产精品美女久久久久av爽李琼| av电影一区二区| 亚洲综合免费观看高清在线观看| 欧美乱熟臀69xxxxxx| 精品一区二区三区在线观看| 久久久久久久久久久久久夜| 99麻豆久久久国产精品免费优播| 亚洲免费看黄网站| 欧美高清精品3d| 国产精品一级二级三级| 亚洲精品ww久久久久久p站| 欧美三级电影一区| 国模娜娜一区二区三区| 中文子幕无线码一区tr | 国产乱码精品1区2区3区| 亚洲国产精品av| 欧美日韩一区二区三区不卡| 麻豆免费精品视频| 亚洲天堂成人网| 日韩欧美aaaaaa| 99精品热视频| 久久99精品久久久| 一区二区三区免费看视频| 欧美草草影院在线视频| 91首页免费视频| 韩国精品在线观看| 一区二区三区免费观看| 久久久久久久久97黄色工厂| 欧美性高清videossexo| 国产成人8x视频一区二区| 一区二区三区高清| 欧美激情在线免费观看| 日韩一区二区三区四区五区六区| 成人午夜电影小说| 人人精品人人爱| 亚洲精品亚洲人成人网在线播放| 精品捆绑美女sm三区| 色国产精品一区在线观看| 国产精品一区二区在线播放| 日韩黄色免费网站| 亚洲精品中文在线观看| 中文字幕精品综合| 精品成人一区二区三区四区| 欧美日韩成人一区| 色综合激情五月| 不卡的av中国片| 国产成人自拍在线| 美女视频黄免费的久久| 亚洲成人免费影院| 亚洲精品你懂的| 中文字幕日韩一区| 久久噜噜亚洲综合| 日韩欧美一级在线播放| 欧美美女bb生活片| 欧美综合视频在线观看| 色婷婷国产精品久久包臀| 成人免费电影视频| 国产白丝精品91爽爽久久 | 成人午夜在线视频| 狠狠色伊人亚洲综合成人| 成人午夜视频免费看| 国产在线视频一区二区| 久久se这里有精品| 日本aⅴ亚洲精品中文乱码| 日韩经典一区二区| 日韩成人精品在线| 美女性感视频久久| 国产在线视频不卡二| 国产一区三区三区| 国产91精品在线观看| 成人一区二区三区在线观看| 国产成人精品亚洲日本在线桃色| 极品少妇一区二区| 国产成人亚洲综合a∨婷婷| 国产91清纯白嫩初高中在线观看 | 奇米影视7777精品一区二区| 午夜精品久久久久影视| 午夜电影网亚洲视频| 美女视频网站黄色亚洲| 久久国产精品一区二区| 激情丁香综合五月| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美一区二区日韩| 日韩欧美国产一区二区三区| 26uuu国产在线精品一区二区| 欧美成人性战久久| 日本一区二区三区四区 | 日本欧美大码aⅴ在线播放| 免播放器亚洲一区| 国产激情一区二区三区四区| 成人美女视频在线观看18| av激情亚洲男人天堂| 欧美专区在线观看一区| 日韩欧美亚洲另类制服综合在线| 精品免费一区二区三区| 国产精品国产馆在线真实露脸 | 午夜av区久久| 国产一区日韩二区欧美三区| eeuss鲁一区二区三区| 精品视频一区三区九区| 26uuu亚洲| 亚洲已满18点击进入久久| 蜜臀av亚洲一区中文字幕| 成人毛片老司机大片| 欧美精品亚洲一区二区在线播放| 精品电影一区二区| 亚洲主播在线播放| 国产成人精品亚洲日本在线桃色 | 色美美综合视频| 欧美性感一类影片在线播放| 久久影院午夜论| 亚洲主播在线播放| 国产成a人亚洲精品| 欧美日韩精品福利| 日本一区二区高清| 奇米综合一区二区三区精品视频 | 在线观看91视频| 国产亚洲一区二区三区四区| 亚洲成人午夜影院| 91啪亚洲精品| 亚洲国产激情av| 久久av老司机精品网站导航| 欧美怡红院视频| 中文字幕一区二区三| 韩国午夜理伦三级不卡影院| 欧美日韩国产大片| 亚洲人成在线播放网站岛国| 国产成人亚洲精品青草天美| 欧美人伦禁忌dvd放荡欲情| 国产精品私房写真福利视频| 久久99久久久久久久久久久| 欧美日韩国产成人在线免费| 最新国产の精品合集bt伙计| 福利一区福利二区| 26uuu精品一区二区| 麻豆91在线播放| 正在播放一区二区| 亚洲高清三级视频| 在线观看国产一区二区| 中文子幕无线码一区tr| 国产精一区二区三区| 2017欧美狠狠色| 美女视频黄 久久| 欧美一区二区精品| 全国精品久久少妇| 日韩一区二区三区四区五区六区| 亚洲丶国产丶欧美一区二区三区| 日本高清成人免费播放| 亚洲卡通动漫在线| 欧美视频一区在线| 性欧美大战久久久久久久久| 在线视频中文字幕一区二区|