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

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

?? traceroute.cpp

?? 《Visual C++網絡通信編程實用案例精選》配套源碼
?? CPP
字號:
// TraceRoute.cpp: implementation of the CTraceRoute class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MyTraceRoute.h"
#include "TraceRoute.h"
#include "MyTraceRouteDlg.h"

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

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


CTraceRoute::CTraceRoute(CMyTraceRouteDlg* dlg)
{
	m_dlg=dlg;
	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)
	{
		AfxMessageBox("Sorry, socket cannot load dll!");
	}
}

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) 
    {   
		AfxMessageBox("socket創建失敗!");
		return;
    }
    
	int ret = setsockopt(m_sockRaw, SOL_SOCKET, SO_RCVTIMEO, 
                        (char *)&m_nTimeout, sizeof(m_nTimeout));
    if (ret == SOCKET_ERROR)
    {
		AfxMessageBox("設置socket接收超時參數失敗!");
        return ;
    }
    
	ret = setsockopt(m_sockRaw, SOL_SOCKET, SO_SNDTIMEO, 
        (char *)&m_nTimeout, sizeof(m_nTimeout));
    if (ret == SOCKET_ERROR)
    {   
		AfxMessageBox("設置socket發送超時參數失敗!");
        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
        {
			AfxMessageBox("不正確的主機名!");
            return ;    
        }
    }

	int bOpt = TRUE;
    if (setsockopt(m_sockRaw, SOL_SOCKET, SO_DONTROUTE, (char *)&bOpt, 
            sizeof(BOOL)) == SOCKET_ERROR)
	{
			AfxMessageBox("設置socket參數失敗!");
            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))
    {
		AfxMessageBox("堆分配失敗!");
        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);
	 CString temp;
	 temp.Format("Tracing route to %s over a maximum of %d hops: \r\n",strHost, m_nMaxhops);
	 m_dlg->m_result+=temp;
	 m_dlg->SetDlgItemText(IDC_RESULT,m_dlg->m_result);
    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) 
            {
				temp.Format("%2d  Send request timed out. \r\n", m_nTTL);
				m_dlg->m_result+=temp;
				m_dlg->SetDlgItemText(IDC_RESULT,m_dlg->m_result);
                continue;
            }
			temp.Format("發送數據報函數調用失敗!\r\n");
			m_dlg->m_result+=temp;
			m_dlg->SetDlgItemText(IDC_RESULT,m_dlg->m_result);
            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) 
            {
				temp.Format("%2d  Receive Request timed out. \r\n", m_nTTL);
				m_dlg->m_result+=temp;
				m_dlg->SetDlgItemText(IDC_RESULT,m_dlg->m_result);
                continue;
            }
			temp.Format("recvfrom 函數調用失敗!\n");
			m_dlg->m_result+=temp;
			m_dlg->SetDlgItemText(IDC_RESULT,m_dlg->m_result);
            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)
    {
		AfxMessageBox("設置socket選項IP_TTL失敗!");
        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; 

	CString temp;
    if (bytes < iphdrlen + ICMP_MIN) 
	{
		temp.Format("Too few bytes from %s \r\n",inet_ntoa(from->sin_addr));
		m_dlg->m_result+=temp;
		m_dlg->SetDlgItemText(IDC_RESULT,m_dlg->m_result);
	}
    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)
			{
				temp.Format("%2d  %s (%s) \r\n", ttl, lpHostent->h_name,inet_ntoa(inaddr));
				m_dlg->m_result+=temp;
				m_dlg->SetDlgItemText(IDC_RESULT,m_dlg->m_result);
			}
            return 1;
            break;
        case ICMP_TIMEOUT:      // Response from router along the way
			temp.Format("%2d  %s \r\n", ttl, inet_ntoa(inaddr));
			m_dlg->m_result+=temp;
			m_dlg->SetDlgItemText(IDC_RESULT,m_dlg->m_result);
            return 0;
            break;
        case ICMP_DESTUNREACH:  // Can't reach the destination at all
			temp.Format("%2d  %s  reports: Host is unreachable \r\n", ttl,inet_ntoa(inaddr));
			m_dlg->m_result+=temp;
			m_dlg->SetDlgItemText(IDC_RESULT,m_dlg->m_result);
            return 1;
            break;
        default:
			temp.Format("non-echo type %d recvd\n", icmphdr->i_type);
			m_dlg->m_result+=temp;
			m_dlg->SetDlgItemText(IDC_RESULT,m_dlg->m_result);
            return 1;
            break;
    }
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久久久久| 日本精品裸体写真集在线观看| 一区二区不卡在线播放 | 欧美肥妇bbw| 欧美日韩亚洲国产综合| 欧美三级日本三级少妇99| 96av麻豆蜜桃一区二区| 91在线国产观看| 色婷婷综合久久| 777午夜精品免费视频| 欧美一区二区三区四区五区| 欧美一区二区三区视频免费 | 亚洲乱码国产乱码精品精98午夜| 国产精品天干天干在观线| 中文字幕精品一区| 中文字幕亚洲一区二区av在线 | 久久免费电影网| 日韩欧美在线网站| 国产农村妇女精品| 亚洲久草在线视频| 婷婷国产在线综合| 国产原创一区二区三区| 波多野结衣精品在线| 91免费国产在线观看| 欧美巨大另类极品videosbest| 精品国产不卡一区二区三区| 国产女人水真多18毛片18精品视频 | 欧美日本不卡视频| 日韩女优视频免费观看| 欧美—级在线免费片| 一区二区三区资源| 国产在线视频一区二区| 99这里只有久久精品视频| 欧美久久久久久久久中文字幕| 91精品国产综合久久精品| 国产亚洲一区二区三区| 亚洲激情男女视频| 激情国产一区二区 | 精品视频999| 2021中文字幕一区亚洲| 亚洲综合色噜噜狠狠| 国内成人免费视频| 欧美在线小视频| 欧美精品一区二区高清在线观看| 国产精品福利一区| 狠狠色丁香婷婷综合久久片| 91美女片黄在线观看| 精品国产麻豆免费人成网站| 亚洲免费资源在线播放| 国产一区二区三区四| 欧美午夜理伦三级在线观看| 久久九九久久九九| 日精品一区二区| jiyouzz国产精品久久| 欧美大片顶级少妇| 午夜精品视频在线观看| 99久久免费视频.com| 精品久久久久久综合日本欧美| 亚洲综合清纯丝袜自拍| 国产麻豆欧美日韩一区| 欧美一区二区三区的| 亚洲综合一二三区| 97se亚洲国产综合在线| 国产精品视频第一区| 韩国女主播一区| 日韩精品一区二区三区swag | 美女视频黄a大片欧美| 欧美天堂一区二区三区| 樱桃视频在线观看一区| 国产91精品久久久久久久网曝门 | 中文欧美字幕免费| 成人综合在线视频| 久久亚洲精品小早川怜子| 久久精品国产精品青草| 欧美一区二区视频在线观看| 午夜精品久久久久久久久久久 | 国产丝袜美腿一区二区三区| 久久精品国产亚洲一区二区三区| 欧美精品久久久久久久多人混战| 亚洲美女偷拍久久| 日本韩国精品一区二区在线观看| 中文字幕一区二区三区四区 | 亚洲一区欧美一区| 欧美精品丝袜中出| 免费xxxx性欧美18vr| 日韩欧美成人午夜| 韩国成人在线视频| 国产喂奶挤奶一区二区三区| 国产精品18久久久久久久久 | 精品国产一区二区三区不卡| 狠狠色综合色综合网络| 亚洲国产经典视频| 97久久精品人人做人人爽 | 337p日本欧洲亚洲大胆精品| 高清beeg欧美| 亚洲精品少妇30p| 91精选在线观看| 国产一区美女在线| 最新国产の精品合集bt伙计| 欧美在线观看视频一区二区三区| 亚洲成av人片在线观看无码| 欧美成人午夜电影| 不卡av免费在线观看| 一区二区三区在线免费视频| 欧美一区二区福利在线| 国产sm精品调教视频网站| 亚洲欧美日韩电影| 欧美第一区第二区| 91在线观看视频| 日本午夜一本久久久综合| 国产日韩欧美制服另类| 欧美视频在线播放| 国产成人精品午夜视频免费| 亚洲一区二区黄色| 久久亚洲春色中文字幕久久久| 成人精品视频一区二区三区尤物| 污片在线观看一区二区| 亚洲精品在线免费观看视频| 99麻豆久久久国产精品免费| 免费欧美日韩国产三级电影| 亚洲欧洲色图综合| 久久婷婷国产综合精品青草| 91视频免费观看| 国产麻豆日韩欧美久久| 亚洲国产成人91porn| 国产调教视频一区| 日韩一区二区高清| 91丝袜国产在线播放| 韩国欧美国产1区| 日韩精品色哟哟| 一区二区三区在线免费播放 | 亚洲444eee在线观看| 国产精品人人做人人爽人人添 | 国产精品一二三区在线| 奇米777欧美一区二区| 亚洲在线中文字幕| 亚洲乱码中文字幕| 国产精品理伦片| 中文字幕欧美日韩一区| 精品国产自在久精品国产| 日韩一本二本av| 欧美精品v国产精品v日韩精品 | 国产剧情av麻豆香蕉精品| 日韩电影在线免费看| 亚洲国产日韩在线一区模特 | 日韩久久久精品| 91精品国产麻豆国产自产在线| 日本韩国视频一区二区| 91麻豆视频网站| 91麻豆.com| 91久久精品一区二区三| 91在线免费看| 色偷偷一区二区三区| 一本到不卡免费一区二区| 91在线porny国产在线看| 99国产一区二区三精品乱码| 99久久精品国产麻豆演员表| 成人动漫av在线| 色综合天天在线| 欧美综合一区二区| 欧美日韩国产高清一区二区| 在线播放中文一区| 欧美一级精品在线| 久久久无码精品亚洲日韩按摩| 精品久久99ma| 国产午夜亚洲精品羞羞网站| 国产亚洲精品精华液| 国产亚洲污的网站| 亚洲欧洲无码一区二区三区| 亚洲永久精品大片| 蜜桃av一区二区在线观看| 韩国av一区二区三区在线观看| 国产乱色国产精品免费视频| k8久久久一区二区三区 | 国产91精品久久久久久久网曝门| 国产+成+人+亚洲欧洲自线| 99久久伊人精品| 欧美日韩黄色一区二区| 欧美www视频| 国产精品国产自产拍在线| 亚洲图片有声小说| 国产一区二区中文字幕| 91视频国产观看| 日韩一级在线观看| 最新热久久免费视频| 蜜桃视频第一区免费观看| 丰满少妇久久久久久久| 欧美性大战久久久久久久| 精品国产区一区| 一区二区三区91| 国产尤物一区二区在线| 91蝌蚪porny九色| 欧美电影免费观看高清完整版在| 中文字幕中文字幕中文字幕亚洲无线| 亚洲一区二区三区视频在线播放 | 国产精品初高中害羞小美女文 | 国产亚洲欧美激情| 亚洲国产日韩精品| 不卡在线视频中文字幕| 欧美一级搡bbbb搡bbbb|