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

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

?? traceroute1.cpp

?? 這是一個TraceRoute程序
?? CPP
字號:
// TraceRoute1.cpp: implementation of the CTraceRoute class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TraceRoute1.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CTraceRoute::CTraceRoute()
{
   m_nTTL = 1;
   m_nMaxhops = MAX_HOPS;
   m_sockRaw = INVALID_SOCKET;
   m_RcvBuffer = NULL;
   m_IcmpData  = NULL;
   m_nTimeout  = 1000;
   m_bDone     = FALSE;
      
   WSADATA wsaData;
   if (WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
   {
	   printf("WSAStartup() failed: %d/n", WSAGetLastError());
   }
     
}

CTraceRoute::~CTraceRoute()
{
    
}

void CTraceRoute::ConnectToHost(char* strHost)
{
    m_sockRaw = WSASocket(AF_INET, SOCK_RAW, IPPROTO_ICMP,
                          NULL, 0,WSA_FLAG_OVERLAPPED);	                     
    if (m_sockRaw == INVALID_SOCKET) 
    {   
		printf("WSASocket() failed: %d\n", WSAGetLastError());
        ExitProcess(-1);
    }
    
	int ret = setsockopt(m_sockRaw, SOL_SOCKET, SO_RCVTIMEO, 
                        (char *)&m_nTimeout, sizeof(m_nTimeout));
    if (ret == SOCKET_ERROR)
    {
        printf("setsockopt(SO_RCVTIMEO) failed: %d\n", WSAGetLastError());
        return ;
    }
    
	ret = setsockopt(m_sockRaw, SOL_SOCKET, SO_SNDTIMEO, 
        (char *)&m_nTimeout, sizeof(m_nTimeout));
    if (ret == SOCKET_ERROR)
    {   
		printf("setsockopt(SO_SNDTIMEO) failed: %d\n", WSAGetLastError());
        return ;   
    }

	m_addrDest.sin_family = AF_INET;
    if ((m_addrDest.sin_addr.s_addr = inet_addr(strHost)) == INADDR_NONE)
    {   
		HOSTENT* hp;
        hp = gethostbyname(strHost);
        if (hp)
            memcpy(&(m_addrDest.sin_addr), hp->h_addr, hp->h_length);
        else
        {
            printf("gethostbyname failed: %d\n", WSAGetLastError());
            return ;    
        }
    }

	int bOpt = TRUE;
    if (setsockopt(m_sockRaw, SOL_SOCKET, SO_DONTROUTE, (char *)&bOpt, 
            sizeof(BOOL)) == SOCKET_ERROR)
	{
			printf("setsockopt failed: %d\n", WSAGetLastError());
            return ;
	}
    m_nDatasize = DEF_PACKET_SIZE;
	m_nDatasize += sizeof(IcmpHeader);  
    //
    // Allocate the sending and receiving buffers for ICMP packets
    //
    m_IcmpData = (char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PACKET);
    m_RcvBuffer = (char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PACKET);

   if ((!m_IcmpData) || (!m_RcvBuffer))
    {
        printf("HeapAlloc() failed: %d\n", WSAGetLastError());
        return ;
    }
    // Set the socket to bypass the standard routing mechanisms 
    //  i.e. use the local protocol stack to the appropriate network
    //       interface
    //
    
    //  
    // Here we are creating and filling in an ICMP header that is the 
    // core of trace route.
    //
   
     memset(m_IcmpData, 0, MAX_PACKET);
     printf("\nTracing route to %s over a maximum of %d hops:\n\n", 
     strHost, m_nMaxhops);
    fill_icmp_data(m_IcmpData, m_nDatasize);
	
	for(m_nTTL = 1; ((m_nTTL < m_nMaxhops) && (!m_bDone)); m_nTTL++)
    {
        int bwrote;

        // Set the time to live option on the socket
        //
        set_ttl(m_sockRaw, m_nTTL);

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

        ((IcmpHeader*)m_IcmpData)->i_seq = m_nSeqno++;
        ((IcmpHeader*)m_IcmpData)->i_cksum = checksum((USHORT*)m_IcmpData, 
            m_nDatasize);
        //
        // Send the ICMP packet to the destination
        //
        bwrote = sendto(m_sockRaw, m_IcmpData, m_nDatasize, 0, 
                    (SOCKADDR *)&m_addrDest, sizeof(m_addrDest));
        if (bwrote == SOCKET_ERROR)
        {
            if (WSAGetLastError() == WSAETIMEDOUT) 
            {
                printf("%2d  Send request timed out.\n", m_nTTL);
                continue;
            }
            printf("sendto() failed: %d\n", WSAGetLastError());
            return ;
        }
        // Read a packet back from the destination or a router along 
        // the way.
        //
		int fromlen;
		fromlen = sizeof(SOCKADDR);
        ret = recvfrom(m_sockRaw, m_RcvBuffer, MAX_PACKET, 0, 
            (struct sockaddr*)&m_addrFrom, &fromlen);
        if (ret == SOCKET_ERROR)
        {
            if (WSAGetLastError() == WSAETIMEDOUT) 
            {
                printf("%2d  Receive Request timed out.\n", m_nTTL);
                continue;
            }
            printf("recvfrom() failed: %d\n", WSAGetLastError());
            return ;
        }
        //
        // Decode the response to see if the ICMP response is from a 
        // router along the way or whether it has reached the destination.
        //
        m_bDone = decode_resp(m_RcvBuffer, ret, &m_addrFrom, m_nTTL);
        Sleep(1000);
    }   

 }

void CTraceRoute::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   = (USHORT)GetCurrentProcessId();
    icmp_hdr->i_cksum = 0;
    icmp_hdr->i_seq = 0;
  
    datapart = icmp_data + sizeof(IcmpHeader);
    //
    // Place some junk in the buffer. Don't care about the data...
    //
    memset(datapart,'E', datasize - sizeof(IcmpHeader));
}



int CTraceRoute::set_ttl(SOCKET s, int nTimeToLive)
{
    int     nRet;
    
    nRet = setsockopt(s, IPPROTO_IP, IP_TTL, (LPSTR)&nTimeToLive,
                sizeof(int));
    if (nRet == SOCKET_ERROR)
    {
        printf("setsockopt(IP_TTL) failed: %d\n", 
            WSAGetLastError());
        return 0;
    }
    return 1;
}

USHORT CTraceRoute::checksum(USHORT *buffer, int size)
{
    unsigned long cksum=0;
	
    while(size > 1) 
    {
        cksum += *buffer++;
        size -= sizeof(USHORT);
    }
    if(size )
        cksum += *(UCHAR*)buffer;
    cksum = (cksum >> 16) + (cksum & 0xffff);
    cksum += (cksum >> 16);
	
    return (USHORT)(~cksum);
}

void CTraceRoute::Cleanup()
{
    HeapFree(GetProcessHeap(), 0, m_RcvBuffer);
    HeapFree(GetProcessHeap(), 0, m_IcmpData);
	if (m_sockRaw != NULL)
		closesocket(m_sockRaw);
	WSACleanup();
}

int CTraceRoute::decode_resp(char *buf, int bytes, 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, 
                AF_INET, sizeof(struct in_addr));
            if (lpHostent != NULL)
                printf("%2d  %s (%s)\n", ttl, lpHostent->h_name, 
                    inet_ntoa(inaddr));
            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;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人av一区二区三区| 免费观看在线综合色| 国产一区欧美一区| 久久久午夜精品| 成人黄动漫网站免费app| 国产精品成人免费在线| 欧美在线不卡视频| 久久66热偷产精品| 国产精品视频第一区| 欧美蜜桃一区二区三区| 国产精品中文欧美| 不卡视频在线观看| 欧美日韩中文另类| 91精品国产福利| 91福利国产精品| 麻豆精品久久精品色综合| 久久精品欧美一区二区三区麻豆 | 久久精品国产99国产| wwww国产精品欧美| 欧美日韩电影在线| 日韩精品在线看片z| 国产精品资源网| 福利一区在线观看| 日韩激情一区二区| 亚洲另类中文字| 久久久国产精品午夜一区ai换脸| 亚洲午夜国产一区99re久久| 日韩电影免费一区| 欧美精品1区2区3区| 99久久er热在这里只有精品15| 蜜臀久久99精品久久久画质超高清| 久久激情五月激情| 9色porny自拍视频一区二区| 国产精品一区二区果冻传媒| 97精品国产97久久久久久久久久久久| 欧美在线免费观看视频| 精品国产a毛片| 日韩精品专区在线影院观看| 国产精品欧美一区二区三区| 偷拍日韩校园综合在线| 亚洲电影你懂得| 国产精品一区二区在线看| 欧美专区亚洲专区| 国产欧美日韩卡一| 亚洲欧美综合另类在线卡通| 国产精品你懂的在线欣赏| 亚洲a一区二区| 成人激情黄色小说| 日韩欧美色电影| 一个色在线综合| 五月婷婷综合在线| 91啪亚洲精品| 色妞www精品视频| 91日韩在线专区| 国产亚洲视频系列| 日本伊人精品一区二区三区观看方式| 成人av动漫网站| 久久影院午夜片一区| 午夜激情一区二区| 日本韩国一区二区三区视频| 国产天堂亚洲国产碰碰| 麻豆一区二区99久久久久| 在线观看av一区| 亚洲色图欧美偷拍| 亚洲福利一区二区| 96av麻豆蜜桃一区二区| 亚洲国产精品成人久久综合一区| 亚洲视频狠狠干| zzijzzij亚洲日本少妇熟睡| 亚洲乱码中文字幕综合| 精品黑人一区二区三区久久| 国产成a人亚洲精品| 亚洲乱码精品一二三四区日韩在线| 中文字幕亚洲成人| 丁香桃色午夜亚洲一区二区三区| 一区二区成人在线| 91首页免费视频| 自拍偷拍欧美精品| 99久久免费精品高清特色大片| 国产精品久久精品日日| 成人精品在线视频观看| 亚洲国产精品成人久久综合一区| 国产99一区视频免费| 久久久99久久精品欧美| 成人免费视频视频在线观看免费| 国产视频一区二区在线| 成人毛片在线观看| 成人免费一区二区三区视频| 91在线观看污| 91在线观看免费视频| 欧美群妇大交群中文字幕| 99精品国产99久久久久久白柏| www.欧美日韩国产在线| 国产三级欧美三级日产三级99| 国内精品国产成人国产三级粉色| 国产在线视频精品一区| 久久久91精品国产一区二区精品| 国产一区二区不卡在线| 国产精品久久久久影院亚瑟| 色呦呦国产精品| 午夜视频在线观看一区二区| 日韩欧美综合在线| 亚洲国产成人va在线观看天堂| 884aa四虎影成人精品一区| 亚洲色图一区二区三区| 欧美日韩国产影片| 国产精品影视天天线| 中文字幕在线播放不卡一区| 欧美久久久久中文字幕| 极品少妇xxxx精品少妇| 中文字幕一区在线观看视频| 91精品综合久久久久久| 国产成人精品aa毛片| 国产亚洲短视频| 欧美日韩高清一区二区不卡| 国产成人在线色| 午夜久久久久久久久久一区二区| 亚洲一线二线三线视频| 91视频免费播放| 美女久久久精品| 亚洲一区二区三区精品在线| 精品国产99国产精品| 在线观看欧美黄色| 国产成人综合在线| 亚洲成av人片| 1024国产精品| 精品国产乱码久久久久久牛牛| 91福利资源站| 成人精品国产一区二区4080| 男女男精品视频| 亚洲亚洲精品在线观看| 国产精品久久久久久亚洲伦| 久久综合九色欧美综合狠狠| 欧美午夜不卡在线观看免费| 亚洲成人激情综合网| 国产精品国产三级国产三级人妇| 精品久久久网站| 国产成人精品三级| 久久99热这里只有精品| 亚洲成人精品影院| 亚洲一卡二卡三卡四卡 | 亚洲欧美日韩综合aⅴ视频| 一本一道久久a久久精品综合蜜臀| 国内成人精品2018免费看| 亚洲成a人片综合在线| 亚洲一区精品在线| 亚洲免费三区一区二区| 中文字幕在线免费不卡| 国产欧美久久久精品影院| 精品成人免费观看| 欧美成人一区二区三区片免费| 欧美美女喷水视频| 欧美调教femdomvk| 欧美日韩综合一区| 欧美欧美欧美欧美| 欧美日韩你懂得| 91精品国产入口| 91精品国产入口| 欧美不卡123| 久久久亚洲欧洲日产国码αv| 精品日韩在线观看| 国产欧美日韩一区二区三区在线观看| 久久亚洲一区二区三区四区| 精品成人在线观看| 日本一区二区免费在线观看视频 | 国产精品成人午夜| 亚洲欧洲无码一区二区三区| 成人欧美一区二区三区白人| 亚洲女性喷水在线观看一区| 亚洲一区在线电影| 蜜臀av性久久久久av蜜臀妖精| 久久精品噜噜噜成人av农村| 国产一区二区三区日韩| 成人a级免费电影| 在线观看一区不卡| 日韩欧美在线影院| 国产亲近乱来精品视频| 日韩美女啊v在线免费观看| 亚洲一区二区黄色| 精品一区二区免费在线观看| 成人免费视频播放| 欧美亚洲综合在线| 六月丁香婷婷久久| 国产精品污www在线观看| 中文无字幕一区二区三区| 成人性视频免费网站| 99精品视频免费在线观看| 欧美日韩一区二区三区四区| 精品免费国产二区三区| 成人免费小视频| 欧美a级一区二区| av不卡免费电影| 精品免费一区二区三区| 亚洲视频在线一区| 美国毛片一区二区| 在线一区二区三区四区| 久久尤物电影视频在线观看| 亚洲丰满少妇videoshd| 国产精品羞羞答答xxdd| 欧美精选在线播放|