我的客户端是用网络引导的。
客户端如何得到DHCP服务器的IP地址。我现在通过编程实现了得到客户端本地的IP地址。
在客户端由于是使用WINPE启动的,所以不能使用IPCONFIG来查看DHCP的地址。
而我也只想用自己编一个程序来获得DHCP服务器的地址。
谢谢!

解决方案 »

  1.   

    先枚举网络中计算机的IP地址再判断是否开启了
    67/68端口, 如果开放了就是DHCP Server.
      

  2.   

    查看这个Blog
    http://spaces.msn.com/easternstone/blog/
      

  3.   

    UDP广播67端口
    然后看那个IP有68端口的回应即可
      

  4.   

    下面这些数据是我用IRIS监控出来的数据分析结果,供楼主参考
    //Client Broadcast
    01 //Opcode: Boot request(0x01)
    01 //Hardware type: Ethernet(0x01)
    06 //Hardware address length: 6bytes
    00 //Hop count: 0bytes
    A0 9E D4 75 //Transcation ID: 0xA09ED475
    00 00 //Seconds elapsed: 0
    00 00 //Broadcast flag: 0x00
    00 00 00 00 //Client IP address: 0.0.0.0 
    00 00 00 00 //Your IP address: 0.0.0.0 
    00 00 00 00 //Next server IP address: 0.0.0.0 
    00 00 00 00 //Gateway IP address: 0.0.0.0 
    01 1C 29 C3 19 B6 00 00 00 00 00 00 00 00 00 00 //Client hardware address:00:0C:29:C3:19:B6
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    63 82 53 63 //Magic cookie: (OK)
    35 01 03 //Option 53: DHCP Message Type = DHCP Request
    3D 07 01 00 0C 29 C3 19 B6 
    32 04 C0 A8 00 14 //Option 50: Requested IP address = 192.168.0.20
    0C 09 79 61 6E 5F 76 6D 5F 30 31 //Option 12: Host Name = "yan_vm_01"
    51 0D 00 00 00 79 61 6E 5F 76 6D 5F 30 31 2E //Option 81: Client Fully Qualified Domain Name(13Bytes)
    3C 08 
    4D 53 46 54 20 35 2E 30 //Option 60: Vendor class identifier = "MSFT 5.0"
    37 0B 01 0F 03 06 2C 2E 2F 1F 21 F9 2B 
    FF //End option
    -----------------------
    //DHCP Server Reply
    02 //Opcode: Boot reply(0x02)
    01 //Hardware type: Ethernet(0x01)
    06 //Hardware address length: 6bytes
    00 //Hop count: 0 bytes
    A0 9E D4 75 //Transaction ID: 0xA09ED475
    00 00 //Seconds elapsed: 0
    00 00 //Broadcast flag: 0x00
    00 00 00 00 //Client IP address: 0.0.0.0
    C0 A8 00 14 //Your IP address: 192.168.0.20
    C0 A8 00 01 //Next server IP address: 192.168.0.1
    C0 A8 00 01 //Gateway IP address: 192.168.0.1
    01 1C 29 C3 19 B6 00 00 00 00 00 00 00 00 00 00 //Client hardware address:00:0C:29:C3:19:B6
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 //Server hostname: not given
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 //Boot filename: not given
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 63 82 53 63 //Magic cookie: (OK)
    35 01 05 //Option 53: DHCP Message Type = DHCP_ACK
    32 04 C0 A8 00 14 //Option 50: Requested IP address = 192.168.0.20
    01 04 FF FF FF 00 //Option 1: Subnet Mask = 255.255.255.0
    33 04 00 01 51 80 //Optioin 51: IP Address lease Time (4 Bytes)
    0F 08 70 72 69 76 61 74 65 00 //Option 15: Domain Name = "private"
    36 04 C0 A8 00 01 //Option 54: Server Identifies = 192.168.0.1
    03 04 C0 A8 00 01 //Option 3: Router = 192.168.0.1
    06 0C C0 A8 00 01 CA 65 AC 2E CA 65 AC 2F //Option 6: Domain Name Server
    FF //End option
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 //Padding
      

  5.   

    大家有没有代码可供我参考一下例如我的客户端得到的IP地址是192.168.0.5  我的DHCP服务器地址为192.168.0.1
    那我如何在客户端得到DHCP服务器的IP地址。
      

  6.   

    lz去google一下吧,一般人不会告诉你的
      

  7.   

    大家有没有代码可供我参考一下例如我的客户端得到的IP地址是192.168.0.5  我的DHCP服务器地址为192.168.0.1
    那我如何在客户端得到DHCP服务器的IP地址。
      

  8.   

    还没解决啊,给你段代码参考unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, WinSock,
      IdUDPServer, IdSocketHandle;type
      TForm1 = class(TForm)
        Button1: TButton;
        IdUDPServer1: TIdUDPServer;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
          ABinding: TIdSocketHandle);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      CBuf: array [0..319] of Byte = ( //这些数据是我监听我的路由器得到的
        $01, $01, $06, $00, $A6, $25, $3C, $AD, $00, $00, $00, $00, $00, $00, $00,
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $0C,
        $29, $B4, $0B, $34, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
        $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $63, $82, $53, $63,
        $35, $01, $03, $3D, $07, $01, $00, $0C, $29, $B4, $0B, $34, $32, $04, $C0, 
        $A8, $00, $11, $0C, $0F, $79, $61, $6E, $00, $00, $00, $00, $00, $00, $00,
        $00, $00, $00, $00, $65, $51, $13, $00, $00, $00, $63, $68, $69, $6E, $61,
        $2D, $31, $34, $38, $66, $37, $34, $66, $61, $65, $2E, $3C, $08, $4D, $53,
        $46, $54, $20, $35, $2E, $30, $37, $0B, $01, $0F, $03, $06, $2C, $2E, $2F,
        $1F, $21, $F9, $2B, $FF);
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      addr: sockaddr_in;
      err: Integer;
      IdUDPClient1: TIdUDPClient;
    begin
      IdUDPClient1 := TIdUDPClient.Create(nil);
      with IdUDPClient1 do
      begin
        Host := '255.255.255.255';
        Port := 67;
        BroadcastEnabled := True;
      end;
      begin
        addr.sin_family := PF_INET;
        addr.sin_port := htons(68);
        addr.sin_addr.s_addr := INADDR_ANY;
        err := WinSock.Bind (IdUDPClient1.Binding.Handle, addr, sizeof(addr));
        if err <> 0 then
          begin
            err := WSAGetLastError;
            if err <> WSAEWOULDBLOCK then
            begin
              ShowMessage(IntToStr(err));
              Exit;
            end;
          end;
        end;
        IdUDPClient1.SendBuffer(CBuf, SizeOf(CBuf));
        IdUDPClient1.Free;
        IdUDPServer1.DefaultPort := 68;
        IdUDPServer1.Active := True;
    end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    begin
      AData.Position := 0;
      ShowMessage(ABinding.PeerIP); //这个IP就是DHCP服务器的IP
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      Self.IdUDPServer1.Active := False;
    end;end.
      

  9.   

    ipconfig /all >> a.txt
    memo1 load a.txt
    find DHCP SERVER: ...