久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C++中實(shí)現(xiàn)ping功能3

 禁忌石 2017-05-16

三,、使用Win API調(diào)用ICMP.DLL實(shí)現(xiàn),、

在這里需要注意的一點(diǎn)是,Windows平臺實(shí)現(xiàn)ping功能,如果需要使用到IcmpParseReplies函數(shù),,需要涉及到兩個動態(tài)庫Icmp.dll和Iphlpapi.dll,。IcmpParseReplies函數(shù)在Windows2000上面由Icmp.dll導(dǎo)出,而在 Windows XP及以后的版本是由Iphlpapi.dll導(dǎo)出的,。通過調(diào)用LoadLibrary和GetProcAddress來檢測IcmpParseReplies由哪個動態(tài)庫導(dǎo)出,。優(yōu)先判斷Iphlpapi.dll是否存在且有導(dǎo)出此函數(shù),,如果存在就使用此動態(tài)庫,否則再判斷Icmp.dll,。

另外隨著IP6的使用,,如果業(yè)務(wù)上涉及到這一塊,也應(yīng)該要留意,。

常用的函數(shù)有三個:IcmpCreateFile,、IcmpSendEcho、IcmpCloseHandle,。具體使用見下實(shí)例,。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Ping(char *pIPAddr)
{
HANDLE iHwnd;
iHwnd=IcmpCreateFile();
IPAddr pAddr;
pAddr=(IPAddr)inet_addr (pIPAddr);
icmp_echo_reply pData;
for(int i=1;i<=LoopSend;i++)
{
IcmpSendEcho(iHwnd,pAddr,NULL,0,NULL,(LPVOID)&pData,sizeof(icmp_echo_reply),0);
if (pData.Status==0)
{
printf("Ping測試返回的結(jié)果: Time=%dms TTL=%d \n",(int)pData.RoundTripTime,(int)pData.Options.Ttl);
}
else
{
printf("Ping測試失敗...\n");
}
}
if (!IcmpCloseHandle(iHwnd)) printf("Close handle has Error!\n");
}

 

你可能會發(fā)現(xiàn),用IcmpSendEcho 測試 127.0.0.1的時候,ICMP_ECHO_REPLY.RoundTripTime 會等于0

 

其實(shí),這個函數(shù)是沒有出錯的,即使用Ping 127.0.0.1也是可以的

那么應(yīng)該怎么去判斷這個函數(shù)出錯呢?

用 ICMP_ECHO_REPLY.Status 來獲得測試狀態(tài)(記住,當(dāng)Status為0的時候,函數(shù)是正確運(yùn)行的)

 

常量名

含義

IP_SUCCESS

0

狀態(tài)是成功。

IP_BUF_TOO_SMALL

11001

答復(fù)緩沖區(qū)太小,。

IP_DEST_NET_UNREACHABLE

11002

目標(biāo)網(wǎng)絡(luò)不可達(dá)。

IP_DEST_HOST_UNREACHABLE

11003

目標(biāo)主機(jī)不可達(dá),。

IP_DEST_PROT_UNREACHABLE

11004

目的地的協(xié)議是遙不可及,。

IP_DEST_PORT_UNREACHABLE

11005

目標(biāo)端口不可達(dá)。

IP_NO_RESOURCES

11006

IP資源不足是可用的,。

IP_BAD_OPTION

11007

指定了錯誤的IP選項(xiàng),。

IP_HW_ERROR

11008

一個硬件錯誤。

IP_PACKET_TOO_BIG

11009

包太大,。

IP_REQ_TIMED_OUT

11010

請求超時,。

IP_BAD_REQ

11011

一個壞的請求。

IP_BAD_ROUTE

11012

一個糟糕的路線,。

IP_TTL_EXPIRED_TRANSIT

11013

在傳輸過程中的生存時間(TTL)的過期,。

IP_TTL_EXPIRED_REASSEM

11014

在碎片重組過程中的生存時間過期。

IP_PARAM_PROBLEM

11015

一個參數(shù)的問題,。

IP_SOURCE_QUENCH

11016

數(shù)據(jù)報到達(dá)太快,,處理和數(shù)據(jù)報可能被丟棄。

IP_OPTION_TOO_BIG

11017

一個IP選項(xiàng)是太大了,。

IP_BAD_DESTINATION

11018

一個壞的目的地,。

IP_GENERAL_FAILURE

11050

一般故障。這個錯誤可以返回一些畸形的ICMP數(shù)據(jù)包

 

 

要了解Ping的原理,,我們先來了解下ping命令的使用

通過發(fā)送“網(wǎng)際消息控制協(xié)議 (ICMP)”回響請求消息來驗(yàn)證與另一臺 TCP/IP 計算機(jī)的 IP 級連接,。回響應(yīng)答消息的接收情況將和往返過程的次數(shù)一起顯示出來,。Ping 是用于檢測網(wǎng)絡(luò)連接性,、可到達(dá)性和名稱解析的疑難問題的主要 TCP/IP 命令。

語法

ping [-t] [-a] [-n Count] [-l Size] [-f] [-i TTL] [-v TOS] [-r Count] [-s Count] [{-j HostList | -k HostList}] [-w Timeout] [TargetName]

-t

指定在中斷前 ping 可以持續(xù)發(fā)送回響請求信息到目的地,。要中斷并顯示統(tǒng)計信息,,請按 CTRL-BREAK,。要中斷并退出 ping,請按 CTRL-C,。

-a

指定對目的地 IP 地址進(jìn)行反向名稱解析,。如果解析成功,ping 將顯示相應(yīng)的主機(jī)名,。

-n Count

指定發(fā)送回響請求消息的次數(shù),。默認(rèn)值為 4。

-lSize

指定發(fā)送的回響請求消息中“數(shù)據(jù)”字段的長度(以字節(jié)表示),。默認(rèn)值為 32,。size 的最大值是 65,527。

-f

指定發(fā)送的回響請求消息帶有“不要拆分”標(biāo)志(所在的 IP 標(biāo)題設(shè)為 1),?;仨懻埱笙⒉荒苡赡康牡芈窂缴系穆酚善鬟M(jìn)行拆分。該參數(shù)可用于檢測并解決“路徑最大傳輸單位 (PMTU)”的故障,。

-i TTL

指定發(fā)送回響請求消息的 IP 標(biāo)題中的 TTL 字段值,。其默認(rèn)值是是主機(jī)的默認(rèn) TTL 值。對于 Windows XP 主機(jī),,該值一般是 128,。TTL 的最大值是 255。

-v TOS

指定發(fā)送回響請求消息的 IP 標(biāo)題中的“服務(wù)類型 (TOS)”字段值,。默認(rèn)值是 0,。TOS 被指定為 0 到 255 的十進(jìn)制數(shù)。

-r Count

指定 IP 標(biāo)題中的“記錄路由”選項(xiàng)用于記錄由回響請求消息和相應(yīng)的回響應(yīng)答消息使用的路徑,。路徑中的每個躍點(diǎn)都使用“記錄路由”選項(xiàng)中的一個值,。如果可能,可以指定一個等于或大于來源和目的地之間躍點(diǎn)數(shù)的 Count,。Count 的最小值必須為 1,,最大值為 9。

-s Count

指定 IP 標(biāo)題中的“Internet 時間戳”選項(xiàng)用于記錄每個躍點(diǎn)的回響請求消息和相應(yīng)的回響應(yīng)答消息的到達(dá)時間,。Count 的最小值必須為 1,,最大值為 4。

-jPath

指定回響請求消息使用帶有 HostList 指定的中間目的地集的 IP 標(biāo)題中的“稀疏資源路由”選項(xiàng),??梢杂梢粋€或多個具有松散源路由的路由器分隔連續(xù)中間的目的地。主機(jī)列表中的地址或名稱的最大數(shù)為 9,,主機(jī)列表是一系列由空格分開的 IP 地址(帶點(diǎn)的十進(jìn)制符號),。

-k HostList

指定回響請求消息使用帶有 HostList 指定的中間目的地集的 IP 標(biāo)題中的“嚴(yán)格來源路由”選項(xiàng)。使用嚴(yán)格來源路由,,下一個中間目的地必須是直接可達(dá)的(必須是路由器接口上的鄰居),。主機(jī)列表中的地址或名稱的最大數(shù)為 9,,主機(jī)列表是一系列由空格分開的 IP 地址(帶點(diǎn)的十進(jìn)制符號)。

-w Timeout

指定等待回響應(yīng)答消息響應(yīng)的時間(以微妙計),,該回響應(yīng)答消息響應(yīng)接收到的指定回響請求消息,。如果在超時時間內(nèi)未接收到回響應(yīng)答消息,將會顯示“請求超時”的錯誤消息,。默認(rèn)的超時時間為 4000(4 秒 ),。

TargetName

指定目的端,它既可以是 IP 地址,,也可以是主機(jī)名,。

/?

在命令提示符顯示幫助。

 

 每個ICMP報文都有自己的格式,,但它們開始的三個字段都是一樣的:一個8位的報文類型(type)用來標(biāo)識報文,,一個8位的代碼(code)用來 提供有關(guān)類型的進(jìn)一步信息,一個16位的校驗(yàn)和(checksum),。(ICMP采用和IP相同的校驗(yàn)和算法,,但I(xiàn)CMP校驗(yàn)和只覆蓋ICMP報文)。這 里我們給出ICMP報文首部的數(shù)據(jù)結(jié)構(gòu):

struct ICMPHEADER

{

    BYTE   i_type;               // 類型

    BYTE   i_code;               // 代碼

    USHORT i_cksum;              // 首部校驗(yàn)和

    USHORT i_id;                 // 標(biāo)識

    USHORT i_seq;                // 序列號

    ULONG timestamp;             // 時間戳(選用)

};

下表表示了ICMP的報文類型及其含義:

TYPE

CODE

Description

Query

Error

0

0

Echo Reply——回顯應(yīng)答(Ping應(yīng)答)

x

 

3

0

Network Unreachable——網(wǎng)絡(luò)不可達(dá)

 

x

3

1

Host Unreachable——主機(jī)不可達(dá)

 

x

3

2

Protocol Unreachable——協(xié)議不可達(dá)

 

x

3

3

Port Unreachable——端口不可達(dá)

 

x

3

4

Fragmentation needed but no frag. bit set——需要進(jìn)行分片但設(shè)置不分片比特

 

x

3

5

Source routing failed——源站選路失敗

 

x

3

6

Destination network unknown——目的網(wǎng)絡(luò)未知

 

x

3

7

Destination host unknown——目的主機(jī)未知

 

x

3

8

Source host isolated (obsolete)——源主機(jī)被隔離(作廢不用)

 

x

3

9

Destination network administratively prohibited——目的網(wǎng)絡(luò)被強(qiáng)制禁止

 

x

3

10

Destination host administratively prohibited——目的主機(jī)被強(qiáng)制禁止

 

x

3

11

Network unreachable for TOS——由于服務(wù)類型TOS,,網(wǎng)絡(luò)不可達(dá)

 

x

3

12

Host unreachable for TOS——由于服務(wù)類型TOS,主機(jī)不可達(dá)

 

x

3

13

Communication administratively prohibited by filtering——由于過濾,,通信被強(qiáng)制禁止

 

x

3

14

Host precedence violation——主機(jī)越權(quán)

 

x

3

15

Precedence cutoff in effect——優(yōu)先中止生效

 

x

4

0

Source quench——源端被關(guān)閉(基本流控制)

 

 

5

0

Redirect for network——對網(wǎng)絡(luò)重定向

 

 

5

1

Redirect for host——對主機(jī)重定向

 

 

5

2

Redirect for TOS and network——對服務(wù)類型和網(wǎng)絡(luò)重定向

 

 

5

3

Redirect for TOS and host——對服務(wù)類型和主機(jī)重定向

 

 

8

0

Echo request——回顯請求(Ping請求)

x

 

9

0

Router advertisement——路由器通告

 

 

10

0

Route solicitation——路由器請求

 

 

11

0

TTL equals 0 during transit——傳輸期間生存時間為0

 

x

11

1

TTL equals 0 during reassembly——在數(shù)據(jù)報組裝期間生存時間為0

 

x

12

0

IP header bad (catchall error)——壞的IP首部(包括各種差錯)

 

x

12

1

Required options missing——缺少必需的選項(xiàng)

 

x

13

0

Timestamp request (obsolete)——時間戳請求(作廢不用)

x

 

14

 

Timestamp reply (obsolete)——時間戳應(yīng)答(作廢不用)

x

 

15

0

Information request (obsolete)——信息請求(作廢不用)

x

 

16

0

Information reply (obsolete)——信息應(yīng)答(作廢不用)

x

 

17

0

Address mask request——地址掩碼請求

x

 

18

0

Address mask reply——地址掩碼應(yīng)答

 

 

 

言必信,,行必果。歡迎訪問我的博客,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多