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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? tracert.c

?? linux下網(wǎng)絡(luò)程序設(shè)計(jì)
?? C
字號(hào):
/*tracert.c*/

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/un.h>
#include <sys/time.h>
#include <sys/times.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netdb.h>

//
// Defines for ICMP message types
//
#define ICMP_ECHOREPLY      0
#define ICMP_DESTUNREACH    3
#define ICMP_SRCQUENCH      4
#define ICMP_REDIRECT       5
#define ICMP_ECHO           8
#define ICMP_TIMEOUT       11
#define ICMP_PARMERR       12

#define MAX_HOPS           30

#define ICMP_MIN 8    // Minimum 8 byte icmp packet (just header)

//
// IP Header
//
typedef struct iphdr 
{
    unsigned int   h_len:4;        // Length of the header
    unsigned int   version:4;      // Version of IP
    unsigned char  tos;            // Type of service
    unsigned short total_len;      // Total length of the packet
    unsigned short ident;          // Unique identifier
    unsigned short frag_and_flags; // Flags
    unsigned char  ttl;            // Time to live
    unsigned char  proto;          // Protocol (TCP, UDP etc)
    unsigned short checksum;       // IP checksum
    unsigned int   sourceIP;       // Source IP
    unsigned int   destIP;         // Destination IP
} IpHeader;

//
// ICMP header
//
typedef struct _ihdr 
{
    char   i_type;               // ICMP message type
    char   i_code;               // Sub code
    unsigned short i_cksum;              
    unsigned short i_id;                 // Unique id
    unsigned short i_seq;                // Sequence number
    // This is not the std header, but we reserve space for time
    unsigned long timestamp;
} IcmpHeader;

#define DEF_PACKET_SIZE         32
#define MAX_PACKET            1024

//
// Function: usage
//
void usage(char *progname)
{
    printf("usage: %s host-name [max-hops]\n", progname);
    exit(-1);
}

//
// Function: set_ttl
//
int set_ttl(int s, int nTimeToLive)
{
    int     nRet;
    
    nRet = setsockopt(s, IPPROTO_IP, IP_TTL, (int *)&nTimeToLive, sizeof(int));
    if (nRet < 0)
    {
        perror("setsockopt in set_ttl:");
        return 0;
    }
    return 1;
}

//
// Function: decode_resp
//
int decode_resp(char *buf, int bytes, struct sockaddr_in *from, int ttl)
{
    IpHeader       *iphdr = NULL;
    IcmpHeader     *icmphdr = NULL;
    unsigned short  iphdrlen;
    struct hostent *lpHostent = NULL;
    struct in_addr  inaddr = from->sin_addr;

    iphdr = (IpHeader *)buf;
    // Number of 32-bit words * 4 = bytes
	iphdrlen = iphdr->h_len * 4; 

    if (bytes < iphdrlen + ICMP_MIN) 
        printf("Too few bytes from %s\n",

            inet_ntoa(from->sin_addr));

    icmphdr = (IcmpHeader*)(buf + iphdrlen);

    switch (icmphdr->i_type)
    {
        case ICMP_ECHOREPLY:     // Response from destination
			lpHostent = gethostbyaddr((const char *)&from->sin_addr, 4, AF_INET);
            if (lpHostent != NULL)
                printf("gethostbyaddr success\n");
            return 1;
            break;
        case ICMP_TIMEOUT:      // Response from router along the way
            printf("%2d  %s\n", ttl, inet_ntoa(inaddr));
            return 0;
            break;
        case ICMP_DESTUNREACH:  // Can't reach the destination at all
            printf("%2d  %s  reports: Host is unreachable\n", ttl, 
                inet_ntoa(inaddr));
            return 1;
            break;
        default:
            printf("non-echo type %d recvd\n", icmphdr->i_type);
            return 1;
            break;
    }
    return 0;
}

//
// Function: checksum
//
unsigned short checksum(unsigned short *buffer, int size) 
{
    unsigned long cksum=0;

    while(size > 1) 
    {
        cksum += *buffer++;
        size -= sizeof(unsigned short);
    }
    if(size )
        cksum += *(unsigned char*)buffer;
    cksum = (cksum >> 16) + (cksum & 0xffff);
    cksum += (cksum >> 16);

    return (unsigned short)(~cksum);
}

//
// Function: fill_icmp_data
//
void fill_icmp_data(char * icmp_data, int datasize)
{
    IcmpHeader *icmp_hdr;
    char       *datapart;

    icmp_hdr = (IcmpHeader*)icmp_data;

    icmp_hdr->i_type = ICMP_ECHO;
    icmp_hdr->i_code = 0;
	icmp_hdr->i_id   = (unsigned short)getpid();
    icmp_hdr->i_cksum = 0;
    icmp_hdr->i_seq = 0;
  
    datapart = icmp_data + sizeof(IcmpHeader);
    memset(datapart,'E', datasize - sizeof(IcmpHeader));
}

long GetTickCount()
{
    struct tms tm;
    return times(&tm);
}
//
// Function: main
// 
int main(int argc, char **argv)
{
    int       sockRaw;
    struct hostent     *hp = NULL;
    struct sockaddr_in   dest,
                 from;
    int          ret,
                 datasize,
                 fromlen = sizeof(from),
                 done = 0,
                 maxhops,
                 ttl = 1;
    char        *icmp_data,
                *recvbuf;
    int         bOpt;
    unsigned short      seq_no = 0;
	struct timeval timeout;
	
    if (argc < 2) 
        usage(argv[0]);
    if (argc == 3)
        maxhops = atoi(argv[2]);
    else
        maxhops = MAX_HOPS;
	sockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
    if (sockRaw < 0) 
    {
        perror("socket");
		 exit(-1);
    }
    //
    // Set the receive and send timeout values to a second
    //
	timeout.tv_sec = 1;
	timeout.tv_usec = 0;
    ret = setsockopt(sockRaw, SOL_SOCKET, SO_RCVTIMEO, 
			&timeout, sizeof(struct timeval));
    if (ret == -1)
    {
        perror("setsockopt in main receive:");
        return -1;
    }
	timeout.tv_sec = 1;
	timeout.tv_usec = 0;
    ret = setsockopt(sockRaw, SOL_SOCKET, SO_SNDTIMEO, 
        &timeout, sizeof(struct timeval));
    if (ret == -1)
    {
        perror("setsockopt in send:");
        return -1;
    }
	memset(&dest, 0, sizeof(struct sockaddr_in));
    dest.sin_family = AF_INET;
    if ((dest.sin_addr.s_addr = inet_addr(argv[1])) == INADDR_NONE)
    {
	
	
        hp = gethostbyname(argv[1]);
        if (hp)
			memcpy(&dest.sin_addr, hp->h_addr, hp->h_length);
        else
        {
            printf("Unable to resolve %s\n",argv[1]);
            exit(-1);
        }
    }
    //
    // Set the data size to the default packet size.
    // We don't care about the data since this is just traceroute/ping
    //
    datasize = DEF_PACKET_SIZE;
        
    datasize += sizeof(IcmpHeader);  
    //
    // Allocate the sending and receiving buffers for ICMP packets
    //
	icmp_data = malloc(MAX_PACKET*sizeof(char));
	recvbuf = malloc(MAX_PACKET*sizeof(char));	

    if ((!icmp_data) || (!recvbuf))
    {
        perror("malloc:");
        return -1;
    }
    //  
    // Here we are creating and filling in an ICMP header that is the 
    // core of trace route.
    //
    memset(icmp_data, 0, MAX_PACKET);
    fill_icmp_data(icmp_data, datasize);

    printf("\nTracing route to %s over a maximum of %d hops:\n\n", 
        argv[1], maxhops);

    for(ttl = 1; ((ttl < maxhops) && (!done)); ttl++)
    {
        int bwrote;

        // Set the time to live option on the socket
        //
        set_ttl(sockRaw, ttl);

        //
        // Fill in some more data in the ICMP header
        //
        ((IcmpHeader*)icmp_data)->i_cksum = 0;
        ((IcmpHeader*)icmp_data)->timestamp = GetTickCount();

        ((IcmpHeader*)icmp_data)->i_seq = seq_no++;
        ((IcmpHeader*)icmp_data)->i_cksum = checksum((unsigned short*)icmp_data, 
            datasize);
        //
        // Send the ICMP packet to the destination
        //
        bwrote = sendto(sockRaw, icmp_data, datasize, 0, 
                    (struct sockaddr *)&dest, sizeof(dest));
        if (bwrote < 0)
        {
			perror("sendto:");
            return -1;
        }
        // Read a packet back from the destination or a router along 
        // the way.
        //
        ret = recvfrom(sockRaw, recvbuf, MAX_PACKET, 0, 
            (struct sockaddr*)&from, &fromlen);
        if (ret < 0)
        {
            perror("recvfrom:");
            return -1;
        }
        //
        // Decode the response to see if the ICMP response is from a 
        // router along the way or whether it has reached the destination.
        //
        done = decode_resp(recvbuf, ret, &from, ttl);
        sleep(1);
    }
	free(recvbuf);
	free(icmp_data);
    return 0;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人永久aaa| 一区二区三区免费观看| 亚洲欧美一区二区三区极速播放 | 国产综合一区二区| 粉嫩欧美一区二区三区高清影视 | 亚洲免费观看高清在线观看| 日韩国产精品91| 国产成人av网站| 欧美日韩视频在线一区二区| 337p粉嫩大胆色噜噜噜噜亚洲 | av在线播放不卡| 欧美男男青年gay1069videost| 精品成人免费观看| 国产精品久久久久四虎| 天天综合色天天| 国产99一区视频免费| 欧美日韩国产首页在线观看| 中文字幕av一区 二区| 午夜久久福利影院| 国产高清成人在线| 91精品国产品国语在线不卡| 国产精品久久久久久久久免费丝袜 | 日av在线不卡| 91老司机福利 在线| 精品国产电影一区二区| 亚洲午夜精品在线| 成人小视频在线| 日韩视频免费观看高清完整版在线观看 | 日本伊人午夜精品| 久久精品人人做| 亚洲精品国产视频| 五月激情综合网| 国产美女视频91| 在线视频欧美精品| 日本一区二区成人| 日韩综合小视频| 91在线无精精品入口| 4438亚洲最大| 亚洲欧美视频在线观看| 精品一区二区三区在线观看国产 | 中文字幕二三区不卡| 亚洲h在线观看| 成人午夜碰碰视频| 欧美嫩在线观看| 亚洲日本在线天堂| 国产ts人妖一区二区| 日韩视频在线观看一区二区| 一个色在线综合| 国产精品一区二区你懂的| 欧美乱妇一区二区三区不卡视频| 国产精品久久久久一区 | 国产日韩欧美不卡在线| 轻轻草成人在线| 色婷婷精品大在线视频| 中文字幕精品综合| 精品亚洲欧美一区| 欧美另类z0zxhd电影| 一区二区三区在线观看视频| 国产精一品亚洲二区在线视频| 91精品国产色综合久久| 亚洲bt欧美bt精品| 在线视频你懂得一区| 国产精品久久久久久久久免费桃花| 国产乱理伦片在线观看夜一区| 日韩一区二区三区免费观看| 亚洲成人激情自拍| 欧美三级日韩三级| 亚洲影视在线播放| 在线视频中文字幕一区二区| 亚洲人成伊人成综合网小说| jiyouzz国产精品久久| 国产日韩成人精品| 国产成人亚洲精品狼色在线| 2021久久国产精品不只是精品| 日本欧美一区二区三区乱码| 777亚洲妇女| 免费在线观看精品| 欧美电影免费提供在线观看| 麻豆freexxxx性91精品| 日韩欧美高清在线| 国产一区在线精品| 国产三级一区二区三区| 国产69精品久久99不卡| 亚洲国产成人一区二区三区| 成人免费视频视频| 成人欧美一区二区三区| 91香蕉视频mp4| 亚洲精品少妇30p| 在线观看成人小视频| 亚洲图片有声小说| 欧美精品第1页| 蜜乳av一区二区三区| 久久男人中文字幕资源站| 国产一区在线观看麻豆| 国产精品人妖ts系列视频| av成人免费在线| 亚洲一区二区黄色| 日韩午夜电影在线观看| 久久99精品久久久久婷婷| 久久蜜桃av一区二区天堂| 国产iv一区二区三区| 亚洲欧美日韩国产中文在线| 欧美日韩国产另类不卡| 黄色资源网久久资源365| 国产精品你懂的| 欧美色手机在线观看| 日本亚洲天堂网| 久久久三级国产网站| 99久久国产综合精品色伊| 亚洲综合一区二区精品导航| 91精品国产综合久久久久久久久久 | 国产精品一区二区在线播放| 最新不卡av在线| 欧美日韩电影在线| 加勒比av一区二区| 亚洲视频一区二区在线观看| 欧美午夜视频网站| 狠狠狠色丁香婷婷综合激情| 国产精品久久福利| 91.成人天堂一区| 国产成人午夜视频| 亚洲亚洲精品在线观看| 久久综合久久鬼色| 91丨九色丨国产丨porny| 亚洲成人一区在线| 国产日韩成人精品| 欧美日韩精品系列| 国产成人av一区二区| 亚洲成av人片在线观看| 久久精品一区二区三区不卡牛牛 | 国产成人午夜高潮毛片| 一区二区日韩电影| 精品国产欧美一区二区| 91蝌蚪porny九色| 久久精品久久久精品美女| 亚洲视频你懂的| 日韩三级视频在线看| 93久久精品日日躁夜夜躁欧美| 免费一区二区视频| 一区二区三区四区亚洲| 久久久久免费观看| 欧美一区二区人人喊爽| 91麻豆国产福利在线观看| 国产在线精品一区二区三区不卡| 亚洲精品乱码久久久久久久久 | 国产呦萝稀缺另类资源| 午夜国产精品一区| 亚洲人成网站精品片在线观看| 精品捆绑美女sm三区| 欧美日韩国产在线播放网站| 高清国产一区二区| 捆绑紧缚一区二区三区视频| 亚洲永久精品大片| 中文字幕日韩欧美一区二区三区| 精品欧美一区二区久久 | 蜜臀a∨国产成人精品| 亚洲欧美色综合| 国产精品毛片无遮挡高清| 日韩午夜在线影院| 欧美日韩成人在线| 欧美在线999| 99综合电影在线视频| 国产精品一区二区在线观看不卡| 热久久久久久久| 亚洲成a人片在线不卡一二三区| 亚洲三级理论片| 国产精品国产三级国产aⅴ无密码| 精品国产免费久久| 欧美一级黄色大片| 56国语精品自产拍在线观看| 日本高清不卡在线观看| 99麻豆久久久国产精品免费优播| 国产福利不卡视频| 国产乱淫av一区二区三区| 九九**精品视频免费播放| 日韩av一区二区三区四区| 五月激情综合色| 天天操天天色综合| 午夜精品一区二区三区电影天堂 | 色噜噜狠狠一区二区三区果冻| 国产成人精品aa毛片| 国产精品小仙女| 国产精品影视在线观看| 国产在线一区二区综合免费视频| 视频一区免费在线观看| 日韩激情在线观看| 日本亚洲免费观看| 蜜桃精品视频在线观看| 久久av老司机精品网站导航| 蜜臀久久99精品久久久久久9| 免费人成黄页网站在线一区二区| 日韩成人dvd| 美国毛片一区二区三区| 九色porny丨国产精品| 国产在线视频一区二区三区| 国产精品99久久久久久久女警| 国产麻豆日韩欧美久久| 福利一区二区在线观看| jvid福利写真一区二区三区| 91免费观看视频|