例如一台计算机上的:Ethernet adapter 本地连接:        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 192.168.0.14
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.0.1
如何通过程序取得以上三项内容
IP Address
Subnet Mask
Default Gateway 
的值现在找了找,已经可以取到本机IP了

解决方案 »

  1.   

    哦,好的,能不能用winsock来取
      

  2.   

    可以使用UDP控件,有个属性LocalAddress,就可以得到本地IP.
      

  3.   

    我已经知道如何取到本地IP了,网上有个程序的,是用winsock来取的,
    现在想知道的就是如何取到“子网掩码”和“网关”???????????????
      

  4.   

    我已经找到一个别人写好的程序可以取本地IP了,现在是想如何用程序取得本地的“子网掩码”和“网关”或DNS  ???????请大家看清再回答我好吗?
      

  5.   

    请不要把“网关IP”理解成“本机IP”
      

  6.   

    调用Dos命令Ipconfig不就搞定了吗!
      

  7.   

    uses
     winsockfunction GetCompueterIp(sComputerName:string):string; 
    var 
      WSAData: TWSAData; 
      HostEnt: PHostEnt; 
       sIP: string; 
    begin 
      //函数返回指定计算机的IP地址,如果不成功返回空  WSAStartup(2,WSAData); 
      HostEnt := gethostbyname(PChar(sComputerName)); 
      if HostEnt <> nil then 
      begin 
        with HostEnt^ do 
          sIP := Format('%d.%d.%d.%d',[Byte(h_addr^[0]),Byte(h_addr^[1]),Byte(h_addr^[2]),Byte(h_addr^[3])]); 
      end; 
      WSACleanup; 
      GetCompueterIp:=sIP; 
    end; 
    要先知道你的计算机名
      

  8.   

    seav() 你的这个程序我也有,不过只是取本机IP的,不是网关的IP,
      

  9.   

    Connection-specific DNS Suffix  . :
     IP Address. . . . . . . . . . . . : 192.168.0.14            此IP已经可以取到了
     Subnet Mask . . . . . . . . . . . : 255.255.255.0       ?????这个如何取
     Default Gateway . . . . . . . . . : 192.168.0.1          ?????这个如何取
      

  10.   

    IP Address. . . . . . . . . . . . : 192.168.0.14   //这个已经可以取了
     Subnet Mask . . . . . . . . . . . : 255.255.255.0   ///这个要如何取?????
     Default Gateway . . . . . . . . . : 192.168.0.1   ///这个要如何取?????
      

  11.   

    请问  kmzym()   你说的这个GetAdaptersInfo
    函数如何使用,请写段代码,好吗?
      

  12.   

    搜到的,你看看
    unit GetDnsList;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TIPMainForm = class(TForm)
        Info: TMemo;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        Procedure GetNetworkParameters;
        Procedure GetAdapterInformation;
      end;var
      IPMainForm: TIPMainForm;
      aDnsList:TStrings;
    implementation{$R *.DFM}Const
      MAX_HOSTNAME_LEN               = 128; { from IPTYPES.H }
      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;Function GetNetworkParams(FI : PFixedInfo; Var BufLen : Integer) : Integer;
             StdCall; External 'iphlpapi.dll' Name 'GetNetworkParams';Function GetAdaptersInfo(AI : PIPAdapterInfo; Var BufLen : Integer) : Integer;
             StdCall; External 'iphlpapi.dll' Name 'GetAdaptersInfo';procedure TIPMainForm.GetAdapterInformation;
    Var
      AI,Work : PIPAdapterInfo;
      Size    : Integer;
      Res     : Integer;
      I       : Integer;  Function MACToStr(ByteArr : PByte; Len : Integer) : String;
      Begin
        Result := '';
        While (Len > 0) do Begin
          Result := Result+IntToHex(ByteArr^,2)+'-';
          ByteArr := Pointer(Integer(ByteArr)+SizeOf(Byte));
          Dec(Len);
        End;
        SetLength(Result,Length(Result)-1); { remove last dash }
      End;  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;  Function TimeTToDateTimeStr(TimeT : Integer) : String;
      Const UnixDateDelta = 25569; { days between 12/31/1899 and 1/1/1970 }
      Var
        DT  : TDateTime;
        TZ  : TTimeZoneInformation;
        Res : DWord;  Begin
        If (TimeT = 0) Then Result := ''
        Else Begin
          { Unix TIME_T is secs since 1/1/1970 }
          DT := UnixDateDelta+(TimeT / (24*60*60)); { in UTC }
          { calculate bias }
          Res := GetTimeZoneInformation(TZ);
          If (Res = TIME_ZONE_ID_INVALID) Then RaiseLastWin32Error;
          If (Res = TIME_ZONE_ID_STANDARD) Then Begin
            DT := DT-((TZ.Bias+TZ.StandardBias) / (24*60));
            Result := DateTimeToStr(DT)+' '+WideCharToString(TZ.StandardName);
          End
          Else Begin { daylight saving time }
            DT := DT-((TZ.Bias+TZ.DaylightBias) / (24*60));
            Result := DateTimeToStr(DT)+' '+WideCharToString(TZ.DaylightName);
          End;
        End;
      End;begin
      Size := 5120;
      GetMem(AI,Size);
      Res := GetAdaptersInfo(AI,Size);
      If (Res <> ERROR_SUCCESS) Then Begin
        SetLastError(Res);
        RaiseLastWin32Error;
      End;
      With Info,Lines do Begin
        Work := AI;
        I := 1;
        Repeat
          Add('');
          Add('Adapter '+IntToStr(I));
          Add('  ComboIndex: '+IntToStr(Work^.ComboIndex));
          Add('  Adapter name: '+Work^.AdapterName);
          Add('  Description: '+Work^.Description);
          Add('  Adapter address: '+MACToStr(@Work^.Address,Work^.AddressLength));
          Add('  Index: '+IntToStr(Work^.Index));
          Add('  Type: '+IntToStr(Work^._Type));
          Add('  DHCP: '+IntToStr(Work^.DHCPEnabled));
          Add('  Current IP: '+GetAddrString(Work^.CurrentIPAddress));
          Add('  IP addresses: '+GetAddrString(@Work^.IPAddressList));
          Add('  Gateways: '+GetAddrString(@Work^.GatewayList));
          Add('  DHCP servers: '+GetAddrString(@Work^.DHCPServer));
          Add('  Has WINS: '+IntToStr(Integer(Work^.HaveWINS)));
          Add('  Primary WINS: '+GetAddrString(@Work^.PrimaryWINSServer));
          Add('  Secondary WINS: '+GetAddrString(@Work^.SecondaryWINSServer));
          Add('  Lease obtained: '+TimeTToDateTimeStr(Work^.LeaseObtained));
          Add('  Lease expires: '+TimeTToDateTimeStr(Work^.LeaseExpires));
          Inc(I);
          Work := Work^.Next;
        Until (Work = nil);
      End;
      FreeMem(AI);
    end;procedure TIPMainForm.GetNetworkParameters;
    Var
      FI   : PFixedInfo;
      Size : Integer;
      Res  : Integer;
      I    : Integer;
      DNS  : PIPAddrString;begin
      Size := 1024;
      GetMem(FI,Size);
      Res := GetNetworkParams(FI,Size);
      If (Res <> ERROR_SUCCESS) Then Begin
        SetLastError(Res);
        RaiseLastWin32Error;
      End;
      With Info do Begin
        Clear;
        Lines.Add('Host name: '+FI^.HostName);
        Lines.Add('Domain name: '+FI^.DomainName);
        aDnsList.Clear;
        If (FI^.CurrentDNSServer <> nil) Then
        begin
          Lines.Add('Current DNS Server: '+FI^.CurrentDNSServer^.IPAddress);
        end
        Else Lines.Add('Current DNS Server: (none)');
        I := 1;
        DNS := @FI^.DNSServerList;
        Repeat
          Lines.Add('DNS '+IntToStr(I)+': '+DNS^.IPAddress);
          aDnsList.Add(DNS^.IPAddress);
          Inc(I);
          DNS := DNS^.Next;
        Until (DNS = nil);
        Lines.Add('Scope ID: '+FI^.ScopeId);
        Lines.Add('Routing: '+IntToStr(FI^.EnableRouting));
        Lines.Add('Proxy: '+IntToStr(FI^.EnableProxy));
        Lines.Add('DNS: '+IntToStr(FI^.EnableDNS));
      End;
      FreeMem(FI);
    end;procedure TIPMainForm.Button1Click(Sender: TObject);
    begin
      GetNetworkParameters;
      GetAdapterInformation;end;procedure TIPMainForm.FormCreate(Sender: TObject);
    begin
        aDnsList:=TStringList.Create;
    end;end.