您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Delphi >> 网络监控 撒分啦

网络监控 撒分啦

来源:网络整理     时间:2016/8/30 2:18:26     关键词:

关于网友提出的“ 网络监控 撒分啦”问题疑问,本网通过在网上对“ 网络监控 撒分啦”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 网络监控 撒分啦
描述:

      小弟想做一个简单的网络监控软件,有以下几个问题想请教大家:
       1.获取IP地址以及DNS,MAC地址等信息,我在网上找了一些函数,但是都是获取的内网的IP, 比如192.168.1.3 ,我想获取外网的.
       2.多线程的下载,下载的同时进度条会根据文件的大小显示进度。
        3.获取电信ID用户名
      
      


解决方案1:

内网IP好获得,但是外网……麻烦
Const
  MAX_HOSTNAME_LEN               = 128;
  MAX_DOMAIN_NAME_LEN            = 128;
  MAX_SCOPE_ID_LEN               = 256;
  MAX_ADAPTER_NAME_LENGTH        = 256;
  MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
  MAX_ADAPTER_ADDRESS_LENGTH     = 8;
//定义相关结构
Type
  TIPAddressString = Array[0..4*4-1] of Char;
  PIPAddrString = ^TIPAddrString;
  TIPAddrString = Record
    Next      : PIPAddrString;
    IPAddress : TIPAddressString;
    IPMask    : TIPAddressString;
    Context   : Integer;
  End;
  PFixedInfo = ^TFixedInfo;
  TFixedInfo = Record { FIXED_INFO }
    HostName         : Array[0..MAX_HOSTNAME_LEN+3] of Char;
    DomainName       : Array[0..MAX_DOMAIN_NAME_LEN+3] of Char;
    CurrentDNSServer : PIPAddrString;
    DNSServerList    : TIPAddrString;
    NodeType         : Integer;
    ScopeId          : Array[0..MAX_SCOPE_ID_LEN+3] of Char;
    EnableRouting    : Integer;
    EnableProxy      : Integer;
    EnableDNS        : Integer;
  End;
  PIPAdapterInfo = ^TIPAdapterInfo;
  TIPAdapterInfo = Record { IP_ADAPTER_INFO }
    Next                : PIPAdapterInfo;
    ComboIndex          : Integer;
    AdapterName         : Array[0..MAX_ADAPTER_NAME_LENGTH+3] of Char;
    Description         : Array[0..MAX_ADAPTER_DESCRIPTION_LENGTH+3] of Char;
    AddressLength       : Integer;
    Address             : Array[1..MAX_ADAPTER_ADDRESS_LENGTH] of Byte;
    Index               : Integer;
    _Type               : Integer;
    DHCPEnabled         : Integer;
    CurrentIPAddress    : PIPAddrString;
    IPAddressList       : TIPAddrString;
    GatewayList         : TIPAddrString;
    DHCPServer          : TIPAddrString;
    HaveWINS            : Bool;
    PrimaryWINSServer   : TIPAddrString;
    SecondaryWINSServer : TIPAddrString;
    LeaseObtained       : Integer;
    LeaseExpires        : Integer;
  End;
type
 TGetAdaptersInfo=function(AI : PIPAdapterInfo; Var BufLen : Integer) : Integer;StdCall;
var
  GetAdaptersInfo:TGetAdaptersInfo;
  h:hmodule;
implementation
function Loadiphlpapidll:boolean;//动态加载iphlpapi.dll中的GetAdaptersInfo
begin
  if h>0 then exit;
  h:=Loadlibrary('iphlpapi.dll');
  if h>0 then
   GetAdaptersInfo:=GetProcAddress(h,'GetAdaptersInfo');
  result:=assigned(GetAdaptersInfo);
end;
function GetWanIP: string;//获取外网IP
Var
  AI,Work : PIPAdapterInfo;
  Size    : Integer;
  Res     : Integer;
  Description:string;
  WanIP:string;
  Function GetAddrString(Addr : PIPAddrString) : String;
  Begin
    Result := '';
    While (Addr <> nil) do Begin
      Result := Result+'A: '+Addr^.IPAddress+' M: '+Addr^.IPMask+#13;
      Addr := Addr^.Next;
    End;
  End;
begin
  Loadiphlpapidll;
  result:='无法获得外网IP';
  Size := 5120;
  GetMem(AI,Size);
  Res := GetAdaptersInfo(AI,Size);
  If (Res <> ERROR_SUCCESS) Then
  Begin
   MessageBoxA(0,'获取外网IP失败    ','错误',MB_OK or MB_ICONERROR);
   exit;
  End;
    Work := AI;
    Repeat
       Description:=strpas(Work^.Description);
       if pos('WAN',Description)>0 then
        begin
         WanIP:=GetAddrString(@Work^.IPAddressList);
         //这里返回的WanIP是这种格式 A: 222.111.25.32 M: 255.255.255.0
         //其中A到M中间就是外网IP了
         WanIP:=copy(WanIP,pos(':',WanIP)+1,pos('M',WanIP)-pos(':',WanIP)-2);
         result:=trim(WanIP);//这里就是最终的外网IP了
         exit;
        end;
      Work := Work^.Next;
    Until (Work = nil);
  FreeMem(AI);
end; 


以上介绍了“ 网络监控 撒分啦”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3667779.html

相关图片

相关文章