當前位置:編程學習大全網 - 源碼下載 - 雜註源代碼

雜註源代碼

#包含?" stdafx.h "

#包含?& ltstdio.h & gt

#包含?& ltwindows.h & gt?

#包含?& ltwininet.h & gt

#pragma?評論(lib,?" ws2_32.lib ")

#pragma?評論(lib,?" wininet.lib ")

typedef?DWORD(__stdcall?*IcmpSendEcho)(HANDLE,IPAddr,LPVOID,WORD,PIP_OPTION_INFORMATION,LPVOID,DWORD,DWORD);

typedef?手柄?(__stdcall?* IcmpCreateFile)(void);

typedef?布爾?(__stdcall?*IcmpCloseHandle)(句柄);

icmpcreatefileficimpcreatefile;

icmpsendechoficimpsendecho;

IcmpCloseHandle?fIcmpCloseHandle

布爾?InitFun(void)

{

HMODULE?lModl

lModl=(HMODULE)LoadLibrary?(“iphlpapi . dll”);

如果?(lModl==0)?{

printf("Load?那個?圖書館?有嗎?錯誤!\ n ");

回歸?假的;

}

否則{

fIcmpCreateFile =(IcmpCreateFile)GetProcAddress?(lModl," IcmpCreateFile ");

fIcmpSendEcho =(IcmpSendEcho)GetProcAddress?(lModl," IcmpSendEcho ");

fIcmpCloseHandle =(IcmpCloseHandle)GetProcAddress?(lModl," IcmpCloseHandle ");

如果?(fIcmpCreateFile==NULL?||?fIcmpSendEcho==NULL?||?fIcmpCloseHandle==NULL){

printf("Load?那個?功能?有嗎?錯誤!\ n ");

回歸?假的;

}

回歸?真實;

}

}

LPHANDLE?GetPingHandle(void)

{

手柄?pHandle

pHandle = fIcmpCreateFile();

如果?((int)pHandle==-1){

printf("Load?ICMP?手柄?有嗎?錯誤!\ n ");

回歸?0;

}

否則{

回歸?(LP handle)pHandle;

}

}

布爾?Ping(LPSTR?pIPAddr)

{

手柄?iHwnd

iHwnd =(HANDLE)getping HANDLE();

IPAddr?pAddr

pAddr=(IPAddr)inet_addr?((char?*)pIPAddr);

icmp_echo_reply?pData

for(int?I = 1;我& lt= LoopSendi++)

{

fIcmpSendEcho(iHwnd,pAddr,NULL,0,NULL,(LPVOID)amp;pData,sizeof(icmp_echo_reply),0);

如果?(pData。狀態==0)

{

printf(" ping測試返回的結果:?時間=%dms?TTL=%d?\n ",(int)pData。RoundTripTime,(int)pData。options . Ttl);

}

其他

{

Printf("Ping測試失敗...\ n ");

}

}

如果?(!fIcmpCloseHandle(iHwnd))?printf("Close?手柄?有嗎?錯誤!\ n ");

回歸?真實;

}

至於主函數,可以自己寫,只要傳壹個IP地址給Ping函數就可以運行了。

對應的VB模塊代碼。

私人?申報?功能?IcmpCreateFile?Lib?“iphlpapi.dll”?()?作為?長的

私人?申報?功能?IcmpSendEcho?Lib?“iphlpapi.dll”?(ByVal?IcmpHandle?作為?龍,?ByVal?目的地地址?作為?龍,?ByVal?RequestData?作為?字符串,?ByVal?RequestSize?作為?龍,?ByVal?請求選項?作為?龍,?ReplyBuffer?作為?ICMP_ECHO_REPLY,?ByVal?回復?作為?龍,?ByVal?超時?作為?龍)?作為?長的

私人?申報?功能?IcmpCloseHandle?Lib?“iphlpapi.dll”?(ByVal?IcmpHandle?作為?龍)?作為?長的

私人?申報?功能?inet_addr?Lib?" wsock32.dll "?(ByVal?cp?作為?字符串)?作為?長的

私人?類型?IP _選項_信息

ttl?作為?字節''生存時間

托薩斯?字節??服務類型

旗幟?作為?字節“”IP標頭標誌

OptionsSizeAs?字節??選項數據的大小,字節

OptionsData?作為?很久嗎?指向選項數據的指針

結束?類型

私人?類型?ICMP _ ECHO _回復

AddressAs?長''''包含正在回復的IP地址。

狀態a?Long ' '包含回復的狀態(參見後面的常量部分)。

往返測量?龍??往返時間RTT(毫秒)

DataSizeAs?整數?回復數據大小(字節)

預訂了嗎?整數?保持

ptrDataAs?龍??指向回復數據的指針

選項a?IP_OPTION_INFORMATION?回復選項

數據即服務?字符串?*?250

結束?類型

公共?類型?Rtn _ ICMPTestMessage

地址?作為?線

狀態?作為?字符串?“”是用函數編寫的。

testSuccess?作為?布爾?''測試成功?

時間?作為?長的

尺寸?作為?長的

ttl?作為?長的

結束?類型

公共?功能?RtnICMPTestMessage(ByVal?TestIP?作為?字符串,?ByVal?超時?作為?龍,?ByVal?打包?作為?龍)?作為?Rtn _ ICMPTestMessage

暗淡?IcmpHandle?作為?長的

IcmpHandle?=?IcmpCreateFile ' ' '創建測試句柄。

暗淡?ICMPReply?作為?ICMP _ ECHO _回復

暗淡?LongIPAdde?作為?長的

LongIPAddr?=?inet_addr

暗淡?發送數據?作為?為包裝尺寸設置了字符串' ' ' '。

發送數據?=?空間(包裝尺寸)

IcmpSendEcho?IcmpHandle,?LongIPAddr,?SendData,?Len(SendData),?0,?ICMPReply,?len(ICM reply),?超時

如果?ICMPReply。地位?=?0?然後

RtnICMPTestMessage。地址?=?TestIP

RtnICMPTestMessage.size?=?ICMPReply。數據大小

RtnICMPTestMessage。狀態?=?RtnICMPState(ICM reply。狀態)

RtnICMPTestMessage.time?=?ICMPReply。往返時間

RtnICMPTestMessage.ttl?=?ICMPReply。Options.ttl

RtnICMPTestMessage.testSuccess?=?True ' ' '測試成功。

其他

RtnICMPTestMessage。地址?=?TestIP

RtnICMPTestMessage。狀態?=?RtnICMPState(ICM reply。狀態)

RtnICMPTestMessage.testSuccess?=?False ' ' '測試失敗。

結束?如果

IcmpCloseHandle?IcmpHandle

結束?功能

  • 上一篇:跪求農歷編寫規則或者農歷公歷轉換公式!
  • 下一篇:寫壹篇關於楚雄某景區的四年級作文,400字。
  • copyright 2024編程學習大全網