通過ICMP協議判斷乙個IP是否可達

2021-09-26 03:45:03 字數 2255 閱讀 2640

在我們開發過程中,會遇到這樣一種情況:在我們請求伺服器時,伺服器會返回兩個或者多個ip給我們,讓我們自主選擇連線,但我們要選擇乙個和我們匹配的ip連線,比如我們在內網,那麼對應的ip就需要我們能ping通,才能連線,下面我們給出簡單例項**:

#include

#include

#include

"iphlpapi.h"

#pragma comment(lib,"iphlpapi.lib")

#pragma comment(lib,"ws2_32.lib")

#define _winsock_deprecated_no_warnings

typedef

handle

(winapi* icmpcreatefile)

(void)

;typedef

bool

(winapi* icmpclosehandle)

(handle)

;typedef

dword

(winapi* icmpsendecho)

(handle, dword, lpvoid, word, pip_option_information, lpvoid, dword, dword)

;//定義三個指標函式

icmpcreatefile picmpcreatefile;

icmpclosehandle picmpclosehandle;

icmpsendecho picmpsendecho;

// 函式功能:初始化icmp函式:

bool initicmp()

picmpcreatefile =

(icmpcreatefile)

getprocaddress

(hicmp,

"icmpcreatefile");

picmpclosehandle =

(icmpclosehandle)

getprocaddress

(hicmp,

"icmpclosehandle");

picmpsendecho =

(icmpsendecho)

getprocaddress

(hicmp,

"icmpsendecho");

if((picmpcreatefile ==

null)||

(picmpclosehandle ==

null)||

(picmpsendecho ==

null))

return

false

;return

true;}

// 函式功能:判斷是否能ping通ip

bool icmpping

(std::string host)

} handle hip =

picmpcreatefile()

; ip_option_information ipoi;

memset

(&ipoi,0,

sizeof

(ip_option_information));

ipoi.ttl =

128;

//time-to-live

unsigned

char psend[36]

;//傳送包

memset

(psend,

'e',32)

;int repsize =

sizeof

(icmp_echo_reply)+32

;unsigned

char preply[

100]

;//接收包

icmp_echo_reply* pechoreply =

(icmp_echo_reply*

)preply;

dword npackets =

picmpsendecho

(hip, haddr, psend,32,

&ipoi, preply, repsize, timeout)

;//傳送icmp資料報文

if(pechoreply-

>status !=0)

//超時,可能是主機禁用了icmp 或者目標主機不存在

picmpclosehandle

(hip)

;return

true;}

intmain()

什麼是ip協議一

兩節結束,為網路底層系列做鋪墊。首先來看一張圖 ios有七層,但是我們可以簡化層4層,ip屬於傳輸層,可以說是非常重要,下面簡單的做乙個介紹。ip的介紹 1.ip是tcp ip 協議族中最為核心的協議。所以的tcp udp icmp及icmp資料都用ip資料報傳輸。2.ip提供不可靠 無連線的資料報...

C 實現判斷乙個IP是否是指定範圍內的IP

定義允許的ip端,格式如下 static string allowipranges 主函式,呼叫判斷介面 static void main string args 介面函式 引數分別是你要判斷的ip 和 你允許的ip範圍 已經過載 允許同時指定多個陣列 static bool theipisrang...

判斷乙個字串的ip是否是IP合法的ip位址

徵文 你會為 ai 轉型麼?福利 免費參加 2017 openstack days china 2016 12 04 01 00 444人閱讀 網路通訊 2 作者同類文章x 有時候弄一些網路通訊,經常用到網域名稱位址,在進行tcp初始的時候,需要判斷提供的位址是ip還是網域名稱位址。如果傳入的是正確...