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;
    

      

  • 相关阅读:
    2019牛客暑期多校赛(第四场)
    单调栈求左右第一个比该数大(小)的位置
    带修莫队板子
    普通莫队算法
    2019牛客暑期多校赛(第三场)B-求01串中的最长01数量相等的子串和子序列
    2019牛客暑假多校赛(第二场) F和H(单调栈)
    网络文件系统nfs
    rsync详解
    逻辑卷LVM
    crontab定时任务
  • 原文地址:https://www.cnblogs.com/hejoy91/p/3527139.html
Copyright © 2011-2022 走看看