• 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】1630. Arithmetic Subarrays
    【leetcode】1629. Slowest Key
    【leetcode】1624. Largest Substring Between Two Equal Characters
    【leetcode】1620. Coordinate With Maximum Network Quality
    【leetcode】1619. Mean of Array After Removing Some Elements
    【leetcode】1609. Even Odd Tree
    【leetcode】1608. Special Array With X Elements Greater Than or Equal X
    【leetcode】1603. Design Parking System
    【leetcode】1598. Crawler Log Folder
    Java基础加强总结(三)——代理(Proxy)Java实现Ip代理池
  • 原文地址:https://www.cnblogs.com/hejoy91/p/3527139.html
Copyright © 2020-2023  润新知