zoukankan      html  css  js  c++  java
  • delphi局域网Ping各主机方法及设置本地ip方法

    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;
    

      

  • 相关阅读:
    [LeetCode 116 117]
    看几道JQuery试题后总结(下篇)
    插入排序及其扩展
    Operation not permitted引发的惊魂72小时
    dddd
    天底下什么人都有,不要跟他们一般见识就是了
    qt宽字符串中文乱码(codec->toUnicode值得学习)
    qt事件传递过程和处理
    qt新进程工作目录的设置(工作目录确实是被子进程继承的,但也可以设置)
    面试都爱问的委托和事件(纠正)
  • 原文地址:https://www.cnblogs.com/hejoy91/p/3527139.html
Copyright © 2011-2022 走看看