1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 |
1 . 首先引用winsock单元 function
PingHost(HostIP: String ): Boolean ; type PIPOptionInformation=^TIPOptionInformation; TIPOptionInformation= packed
record TTL: Byte ; TOS: Byte ; Flags: Byte ; OptionsSize: Byte ; OptionsData: PChar ; end ; PIcmpEchoReply=^TIcmpEchoReply; TIcmpEchoReply= packed
record Address : DWORD; Status : DWORD; RTT: DWORD; DataSize: Word ; Reserved: Word ; Data: Pointer ; Options: TIPOptionInformation; end ; TIcmpCreateFile = function : THandle; stdcall; TIcmpCloseHandle = function (IcmpHandle: THandle): Boolean ; stdcall; TIcmpSendEcho = function (IcmpHandle:THandle; DestinationAddress: DWORD; RequestData: Pointer ; RequestSize: Word ; RequestOptions: PIPOptionInformation; ReplyBuffer: Pointer ; ReplySize: DWord; Timeout: DWord ): DWord; stdcall; var hICMP : THandle; hICMPdll : THandle; IcmpCreateFile : TIcmpCreateFile; IcmpCloseHandle : TIcmpCloseHandle; IcmpSendEcho : TIcmpSendEcho; pIPE : PIcmpEchoReply; // ICMP Echo reply buffer FIPAddress : DWORD; FSize : DWORD; FTimeOut : DWORD; BufferSize : DWORD; pReqData,pRevData: PChar ; MyString: string ; begin Result:= False ; hICMPdll:=LoadLibrary( ‘icmp.dll‘ ); if
hICMPdll= 0
then
exit; @ICMPCreateFile:=GetProcAddress(hICMPdll, ‘IcmpCreateFile‘ ); @IcmpCloseHandle:=GetProcAddress(hICMPdll, ‘IcmpCloseHandle‘ ); @IcmpSendEcho:=GetProcAddress(hICMPdll, ‘IcmpSendEcho‘ ); hICMP:=IcmpCreateFile; if (hICMP=INVALID_HANDLE_VALUE) then
exit; FIPAddress:= inet_addr( PChar (HostIP)); MyString:= ‘Hello‘ ; //send data buffer pReqData:= PChar (MyString); FSize:= 40 ; //receive data buffer BufferSize:=SizeOf(TICMPEchoReply)+FSize; GetMem(pIPE,BufferSize); FillChar(pIPE^,SizeOf(pIPE^), 0 ); GetMem(pRevData,FSize); pIPE^.Data:=pRevData; FTimeOut:= 50 ; //超时时间,毫秒 try Result:=IcmpSendEcho(hICMP,FIPAddress,pReqData, Length(MyString), nil ,pIPE,BufferSize,FTimeOut)> 0 ; finally IcmpCloseHandle(hICMP); FreeLibrary(hICMPdll); FreeMem(pRevData); FreeMem(pIPE); end ; end ; true
能Ping通 否则无此主机。 2 . 快速设置本地ip if
not
pinghost(ip4) then begin winstr:= ‘netsh interface ip set address 本地连接 static 192.168.1.9 255.255. 255.0 192.168.1.1 1‘ ; WinExec( PChar (winstr),SW_HIDE); end ; |
原文:http://www.cnblogs.com/hejoy91/p/3527139.html