|
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. 快速设置本地ipif
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