delphi局域网Ping各主机方法及设置本地ip方法

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;

  

delphi局域网Ping各主机方法及设置本地ip方法

上一篇:学习类 2


下一篇:市内换工作.五险一金处理攻略