xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 8.80KB
    文件類型: .rar
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2024-04-19
  • 語言: C/C++
  • 標(biāo)簽: route??out??ACE??CE??

資源簡介

traceroute(路由跟蹤)用于查找傳輸數(shù)據(jù)所經(jīng)過的路由地址

資源截圖

代碼片段和文件信息

#include?
#include?
#define?_WINSOCK_DEPRECATED_NO_WARNINGS
#include?
#include?
using?namespace?std;

#pragma?comment(lib?“Ws2_32.lib“)

//IP報(bào)頭
typedef?struct?IP_HEADER
{
unsigned?char?hdr_len?:?4;???????//4位頭部長度
unsigned?char?version?:?4;???????//4位版本號(hào)
unsigned?char?tos;?????????????//8位服務(wù)類型
unsigned?short?total_len;??????//16位總長度
unsigned?short?identifier;?????//16位標(biāo)識(shí)符
unsigned?short?frag_and_flags;?//3位標(biāo)志加13位片偏移
unsigned?char?ttl;?????????????//8位生存時(shí)間
unsigned?char?protocol;????????//8位上層協(xié)議號(hào)
unsigned?short?checksum;???????//16位校驗(yàn)和
unsigned?long?sourceIP;????????//32位源IP地址
unsigned?long?destIP;??????????//32位目的IP地址
}?IP_HEADER;

//ICMP報(bào)頭
typedef?struct?ICMP_HEADER
{
BYTE?type;????//8位類型字段
BYTE?code;????//8位代碼字段
USHORT?cksum;?//16位校驗(yàn)和
USHORT?id;????//16位標(biāo)識(shí)符
USHORT?seq;???//16位序列號(hào)
}?ICMP_HEADER;

//報(bào)文解碼結(jié)構(gòu)
typedef?struct?DECODE_RESULT
{
USHORT?usSeqNo;????????//序列號(hào)
DWORD?dwRoundTripTime;?//往返時(shí)間
in_addr?dwIPaddr;??????//返回報(bào)文的IP地址
}DECODE_RESULT;

//計(jì)算網(wǎng)際校驗(yàn)和函數(shù)
/**
1、把校驗(yàn)和字段置為0;
2、對(duì)IP頭部中的每16bit進(jìn)行二進(jìn)制求和;
3、如果和的高16bit不為0,則將和的高16bit和低16bit反復(fù)相加,直到和的高16bit為0,從而獲得一個(gè)16bit的值;
4、將該16bit的值取反,存入校驗(yàn)和字段。
*/
USHORT?checksum(USHORT?*pBuf?int?iSize)
{
unsigned?long?cksum?=?0;
//每16位相加
while?(iSize?>?1)
{
cksum?+=?*pBuf++;
iSize?-=?sizeof(USHORT);
}
if?(iSize)//如果?iSize?為正,即為奇數(shù)個(gè)字節(jié)
{
cksum?+=?*(UCHAR?*)pBuf;?//則在末尾補(bǔ)上一個(gè)字節(jié),使之有偶數(shù)個(gè)字節(jié)
}
cksum?=?(cksum?>>?16)?+?(cksum?&?0xffff);?//將高16位與低16位相加
cksum?+=?(cksum?>>?16);?//將進(jìn)位到高位的16位與低16位相加,確保高16位為0
return?(USHORT)(~cksum);?//最后將結(jié)果取反,得到checksum
}

//對(duì)數(shù)據(jù)包進(jìn)行解碼
BOOL?DecodeIcmpResponse(char?*pBuf?int?iPacketSize?DECODE_RESULT?&DecodeResult
BYTE?ICMP_ECHO_REPLY?BYTE?ICMP_TIMEOUT)
{
//檢查數(shù)據(jù)報(bào)大小的合法性
IP_HEADER?*pIpHdr?=?(IP_HEADER?*)pBuf;
int?iIpHdrLen?=?pIpHdr->hdr_len?*?4;????//ip報(bào)頭的長度是以4字節(jié)為單位的

//若數(shù)據(jù)包大小?小于?IP報(bào)頭?+?ICMP報(bào)頭,則數(shù)據(jù)報(bào)大小不合法
if?(iPacketSize? return?FALSE;

//根據(jù)ICMP報(bào)文類型提取ID字段和序列號(hào)字段
ICMP_HEADER?*pIcmpHdr?=?(ICMP_HEADER?*)(pBuf?+?iIpHdrLen);//ICMP報(bào)頭?=?接收到的緩沖數(shù)據(jù)?+?IP報(bào)頭
USHORT?usID?usSquNo;

if?(pIcmpHdr->type?==?ICMP_ECHO_REPLY)????//ICMP回顯應(yīng)答報(bào)文
{
usID?=?pIcmpHdr->id;????????//報(bào)文ID
usSquNo?=?pIcmpHdr->seq;????//報(bào)文序列號(hào)
}
else?if?(pIcmpHdr->type?==?ICMP_TIMEOUT)??//ICMP超時(shí)差錯(cuò)報(bào)文
{
char?*pInnerIpHdr?=?pBuf?+?iIpHdrLen?+?sizeof(ICMP_HEADER);?//載荷中的IP頭
int?iInnerIPHdrLen?=?((IP_HEADER?*)pInnerIpHdr)->hdr_len?*?4;?//載荷中的IP頭長
ICMP_HEADER?*pInnerIcmpHdr?=?(ICMP_HEADER?*)(pInnerIpHdr?+?iInnerIPHdrLen);//載荷中的ICMP頭

usID?=?pInnerIcmpHdr->id;????????//報(bào)文ID
usSquNo?=?pInnerIcmpHdr->seq;????//序列號(hào)
}
else
{
return?false;
}

//檢查ID和序列號(hào)以確定收到期待數(shù)據(jù)報(bào)
if?(usID?!=?(USHORT)GetCurrentProcessId()?||?usSquNo?!=?DecodeResult.usSeqNo)
{
return?false;
}
//記錄IP地址并計(jì)算往返時(shí)間
DecodeResult.dwIPaddr.s_addr?=?pIpHdr->sourceIP;
DecodeResult.dwRoundTripTime?=?GetTickCount()?-?DecodeResult.dwRoundTripTime;


評(píng)論

共有 條評(píng)論