六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

Delphi中用ICMP探測遠程主機狀態

[摘要]網絡通訊中經常需要確定遠程主機是否存活,以決定下一部進行的操作。可以直接使用ICMP協議來實現,但是要考慮許多協議細節,實現起來比較麻煩。Windows 自帶的ICMP庫里有現成的函數可以使用,只要在使用前填充相應的數據結構就可以了。   以下是要使用的數據結構。這些結構MSDN里有C形式的聲明,...
網絡通訊中經常需要確定遠程主機是否存活,以決定下一部進行的操作。可以直接使用ICMP協議來實現,但是要考慮許多協議細節,實現起來比較麻煩。Windows 自帶的ICMP庫里有現成的函數可以使用,只要在使用前填充相應的數據結構就可以了。

  以下是要使用的數據結構。這些結構MSDN里有C形式的聲明,這里給出的是Delphi的形式。

//用到的協議數據結構
PIPOptionInfo = ^TIPOptionInfo; // IP 頭選項
TIPOptionInfo = packed record
TTL: Byte;//存活時間
TOS: Byte;//Type of Service,請求類型
Flags: Byte;//標志
OptionsSize: Byte;//選項長度
OptionsData: PChar;//選項數據
end;
PIcmpEchoReply = ^TIcmpEchoReply;
TIcmpEchoReply = packed record // ICMP 返回信息
Address: DWORD;//IP地址
Status: DWORD;//狀態
RTT: DWORD;
DataSize: Word;//數據長度
Reserved: Word;//保留
Data: Pointer;//數據
Options: TIPOptionInfo;//選項區
end;

//動態庫中的函數聲明
TIcmpCreateFile = function: THandle; stdcall; //創建ICMP句柄
TIcmpCloseHandle = function(IcmpHandle: THandle): Boolean; stdcall; //關閉ICMP句柄
TIcmpSendEcho = function(IcmpHandle:THandle; DestinationAddress:DWORD;
RequestData:Pointer; RequestSize:Word; RequestOptions:PIPOptionInfo;
ReplyBuffer:Pointer; ReplySize:DWord; Timeout:DWord):DWord; stdcall;//發送ICMP探測數據報

//要用到的變量聲明
hICMPDll,hICMP:THandle;
wsaData:TWSADATA;
ICMPCreateFile:TICMPCreateFile;
IcmpCloseHandle:TIcmpCloseHandle;
IcmpSendEcho:TIcmpSendEcho;

//destip:要探測的遠程地址,形如 192.168.1.1
procedure f_CheckOnline(destip:string);
 var
  IPOpt:TIPOptionInfo;// 發包的 IP 選項
  IPAddr:DWORD;
  pReqData,pRevData:PChar;
  pIPE:PIcmpEchoReply;// ICMP Echo 回復緩沖區
  FSize: DWORD;
  MyString:string;
  FTimeOut:DWORD;
  BufferSize:DWORD;
  i:integer;
 begin
  hICMPdll := LoadLibrary('icmp.dll'); //調取icmp 動態庫
  if hICMPDll<>NULL then
   begin
    WSAStartup($101,wsaData);//初始化網絡協議棧
    @ICMPCreateFile := GetProcAddress(hICMPdll, 'IcmpCreateFile'); //取動態庫中的導出函數
    @IcmpCloseHandle := GetProcAddress(hICMPdll, 'IcmpCloseHandle');
    @IcmpSendEcho := GetProcAddress(hICMPdll, 'IcmpSendEcho');
    hICMP := IcmpCreateFile; //創建 icmp句柄
    IPAddr:= inet_addr(PChar(destip)); //取要探測的遠端主機ip地址

    FSize := 40;
    BufferSize := SizeOf(TICMPEchoReply) + FSize;
    GetMem(pRevData,FSize);
    GetMem(pIPE,BufferSize);
    FillChar(pIPE^, SizeOf(pIPE^), 0);
    pIPE^.Data := pRevData;
    MyString := 'Hi, OnLine?';//任意字符串
    pReqData := PChar(MyString);
    FillChar(IPOpt, Sizeof(IPOpt), 0);
    IPOpt.TTL := 64;
    FTimeOut := 500;//等待時長
    i:=IcmpSendEcho(hICMP, IPAddr, pReqData, Length(MyString), @IPOpt, pIPE, BufferSize, FTimeOut);//如果有返回,返回值表示收到的回復的個數。如果為0表示沒有回復,主機無法到達
    FreeMem(pRevData);
    FreeMem(pIPE);
    IcmpCloseHandle(hicmp);
    FreeLibrary(hICMPdll);//釋放動態庫
    WSAcleanup();//清理協議棧
  end;
end; 


主站蜘蛛池模板: 亚洲好看站 | 日本不卡一区二区三区在线观看 | 欧美午夜视频一区二区 | 伊人手机在线视频 | 色婷婷亚洲十月十月色天 | 午夜男人网站 | 色综合啪啪| 日本精品在线播放 | 青青草华人在线 | 综合欧美日韩 | 在线你懂得 | 欧美中日韩在线 | 色噜噜影院 | 婷婷欧美| 四月婷婷 | 日韩免费一级 | 中国日韩欧美中文日韩欧美色 | 亚洲最新在线视频 | 小草青青免费影视观看 | 特一级黄色片 | 中文在线第一页 | 性xxx免费视频 | 视频一区 日韩 | 亚洲欧美国产精品第1页 | 日韩不卡一二三区 | 欧美性理论片在线观看片免费 | 人人网碰人人网超 | 日本特黄aaaaaaa大片 | 亚洲成人欧美 | 四虎免费最新在线永久 | 亚洲成人99 | 日韩激情视频在线观看 | 小明看国产 | 婷婷中文字幕 | 色综合小说天天综合网 | 中文字幕在线观看免费视频 | 欧美性猛交xxxx乱大交中文 | 午夜影院在线观看免费 | 青草国产精品久久久久久 | 自拍视频啪 | 五月婷婷综合网 |