在我們開發過程中,會遇到這樣一種情況:在我們請求伺服器時,伺服器會返回兩個或者多個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還是網域名稱位址。如果傳入的是正確...