亚洲欧美第一页_禁久久精品乱码_粉嫩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电影在线播放| 欧美日韩激情在线| 国产精品盗摄一区二区三区| 日本不卡一二三| 色系网站成人免费| 国产亚洲一区二区三区在线观看 | 欧美经典一区二区| 午夜欧美在线一二页| 成人午夜激情视频| 精品sm捆绑视频| 三级一区在线视频先锋| 色狠狠桃花综合| 中文字幕av一区二区三区免费看| 日韩va欧美va亚洲va久久| 在线免费精品视频| 亚洲人被黑人高潮完整版| 国产成人在线网站| 日韩免费观看高清完整版| 日韩精品电影在线观看| 欧美三级蜜桃2在线观看| √…a在线天堂一区| 国产成人精品www牛牛影视| 欧美一级在线观看| 全国精品久久少妇| 在线不卡欧美精品一区二区三区| 亚洲日本一区二区三区| 91片在线免费观看| 18欧美乱大交hd1984| 北条麻妃国产九九精品视频| 国产日产欧美一区二区视频| 国产91在线观看丝袜| 国产农村妇女精品| 成人在线视频一区| 中文字幕一区二区三区av| 99精品桃花视频在线观看| 综合久久综合久久| 日本电影亚洲天堂一区| 亚洲成人自拍网| 777午夜精品视频在线播放| 日韩高清不卡一区| 欧美大胆人体bbbb| 国产精品12区| 亚洲欧美电影院| 欧美日本国产视频| 精品一区二区三区久久久| 久久久久9999亚洲精品| 丁香桃色午夜亚洲一区二区三区| 国产精品青草久久| 欧洲一区二区三区在线| 日本成人在线不卡视频| 久久这里只有精品6| 成人h动漫精品一区二| 亚洲免费伊人电影| 欧美蜜桃一区二区三区| 精品一区二区久久久| 国产精品午夜免费| 欧美视频精品在线观看| 国内欧美视频一区二区 | 99久久综合99久久综合网站| 亚洲精品国产精品乱码不99| 91精品免费在线| 国产精品一区二区久久精品爱涩| 国产精品久久久一本精品 | 国产日韩欧美激情| 在线视频一区二区免费| 韩国精品久久久| 一区二区三区中文字幕电影| 91精品国产综合久久精品性色| 国产精品中文字幕日韩精品| 一区二区三区四区高清精品免费观看 | 欧美日韩国产一二三| 水蜜桃久久夜色精品一区的特点| 久久看人人爽人人| 欧美在线观看视频在线| 国产精品一区二区在线观看不卡| 一区二区三区资源| 精品电影一区二区| 一本大道久久精品懂色aⅴ| 国产在线视频精品一区| 午夜欧美一区二区三区在线播放| 久久久蜜桃精品| 欧美男人的天堂一二区| 不卡视频一二三四| 精品一区二区在线观看| 亚洲亚洲精品在线观看| 亚洲欧美在线高清| 欧美精品一区二区在线播放| 在线不卡a资源高清| 一本色道久久综合狠狠躁的推荐| 国产精品99久久久久久久女警| 午夜精品免费在线| 亚洲欧美日韩电影| 久久精品免费在线观看| 日韩精品中文字幕一区| 欧美亚洲国产一区二区三区va | 在线播放中文一区| 日本久久电影网| 99久久精品久久久久久清纯| 国产自产视频一区二区三区| 麻豆久久久久久| 日韩中文字幕麻豆| 亚洲成人黄色影院| 亚洲国产日日夜夜| 亚洲一区免费在线观看| 亚洲靠逼com| 亚洲美女视频一区| 国产精品成人网| 最新不卡av在线| 亚洲人成网站影音先锋播放| 亚洲欧洲av在线| 亚洲人成网站在线| 一区二区三区免费在线观看| 日韩一区中文字幕| 亚洲精品国产精华液| 一区二区三区资源| 亚洲国产精品精华液网站| 亚洲一区二区在线播放相泽| 一区二区欧美国产| 五月天网站亚洲| 婷婷六月综合网| 日本不卡一区二区| 极品少妇一区二区| 国产馆精品极品| 成人午夜精品一区二区三区| 99久久夜色精品国产网站| 色综合久久天天| 欧美日本不卡视频| 日韩美女天天操| 日本一区二区免费在线| 最新高清无码专区| 亚洲不卡一区二区三区| 久久精品国产免费看久久精品| 国产在线麻豆精品观看| 成人少妇影院yyyy| 91国产成人在线| 欧美一区二区三区爱爱| 久久免费看少妇高潮| 中文字幕色av一区二区三区| 亚洲国产日韩av| 国内精品久久久久影院薰衣草| 国产91丝袜在线播放0| 欧洲一区二区三区在线| 亚洲精品在线三区| 亚洲日本在线a| 久久99久久久欧美国产| 91麻豆国产自产在线观看| 日韩免费高清av| 亚洲色图.com| 国产一区亚洲一区| 欧美三级一区二区| 日本一区二区视频在线| 日韩精品乱码免费| k8久久久一区二区三区| 欧美日韩精品一区二区在线播放| 久久久精品免费观看| 亚洲一区在线看| 国产精品996| 欧洲一区二区三区免费视频| 日韩一区二区免费在线观看| 欧美精品一区二区三区在线播放 | 一区二区三区在线视频免费观看| 日韩精品91亚洲二区在线观看 | 亚洲国产精品嫩草影院| 精品在线一区二区| 丰满放荡岳乱妇91ww| 欧美一区二区啪啪| 中文字幕人成不卡一区| 首页国产丝袜综合| 日本韩国欧美在线| 久久日韩粉嫩一区二区三区| 一区二区三区国产豹纹内裤在线| 日韩影院免费视频| 欧美私模裸体表演在线观看| 国产亚洲一区字幕| 三级影片在线观看欧美日韩一区二区| 国产精品一区在线观看你懂的| 91精品一区二区三区久久久久久| 日本一区二区久久| 日韩高清国产一区在线| www.成人网.com| 精品少妇一区二区三区在线播放 | 欧美一区永久视频免费观看| 国产精品萝li| 国产尤物一区二区| 日韩一区二区三| 亚洲高清在线视频| 92国产精品观看| 精品精品国产高清一毛片一天堂| 日韩1区2区3区| 在线日韩一区二区| 欧美激情一区二区三区四区| 日韩国产在线观看| 欧美综合在线视频| 午夜国产精品影院在线观看| av激情成人网| 国产精品人成在线观看免费|