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 ;
|