【问题标题】:DHCP request libraryDHCP 请求库
【发布时间】:2013-11-25 14:57:31
【问题描述】:

目前,我正在使用带有“dhclient”的“subprocess”命令,因此我可以从服务器发出 DHCP 请求。我正在尝试改进它,只使用纯 python 库来发出 DHCP 客户端请求。任何人都知道图书馆可以做到这一点?

【问题讨论】:

    标签: python linux dhcp


    【解决方案1】:

    查看 pydhcplib,查看http://pydhcplib.tuxfamily.org/pmwiki/index.php?n=Site.ClientExample 的使用示例

    编辑:在我的 Ubuntu 12.04 上试了一下

    安装:

    $ cd pydhcplib-0.6.2/
    $ sudo python setup.py install
    

    test.py:

    #!/usr/bin/python
    from pydhcplib.dhcp_packet import *
    from pydhcplib.dhcp_network import *
    
    
    netopt = {'client_listen_port':68,
           'server_listen_port':67,
           'listen_address':"0.0.0.0"}
    
    
    class Client(DhcpClient):
        def __init__(self, options):
             DhcpClient.__init__(self,options["listen_address"],
                            options["client_listen_port"],
                            options["server_listen_port"])
    
        def HandleDhcpOffer(self, packet):
            print packet.str()
        def HandleDhcpAck(self, packet):
            print packet.str()
        def HandleDhcpNack(self, packet):
            print packet.str()        
    
    client = Client(netopt)
    # Use BindToAddress if you want to emit/listen to an internet address (like 192.168.1.1)
    # or BindToDevice if you want to emit/listen to a network device (like eth0)
    client.BindToAddress()
    
    while True :
        print client.GetNextDhcpPacket()
    

    运行它:

    $ sudo python x.py 
    # Header fields
    op : BOOTREPLY
    htype : 1
    hlen : 6
    hops : 0
    xid : 2381790907
    secs : 0
    flags : 0
    ciaddr : 0.0.0.0
    yiaddr : 192.168.125.88
    siaddr : 0.0.0.0
    giaddr : 0.0.0.0
    chaddr : 60:fa:cd:bb:25:a5
    sname : 
    file : 
    # Options fields
    server_identifier : 3232267521
    subnet_mask : 255.255.255.0
    domain_name_server : 66.234.224.2 - 8.8.8.8 - 
    router : 192.168.125.1 - 
    dhcp_message_type : DHCP_ACK
    ip_address_lease_time : 86400
    
    # Header fields
    op : BOOTREPLY
    htype : 1
    hlen : 6
    hops : 0
    xid : 3920377619
    secs : 0
    flags : 32768
    ciaddr : 192.168.125.138
    yiaddr : 192.168.125.138
    siaddr : 0.0.0.0
    giaddr : 0.0.0.0
    chaddr : 68:5d:43:8c:3e:94
    sname : 
    file : 
    # Options fields
    server_identifier : 3232267521
    subnet_mask : 255.255.255.0
    domain_name_server : 66.234.224.2 - 8.8.8.8 - 
    router : 192.168.125.1 - 
    dhcp_message_type : DHCP_ACK
    ip_address_lease_time : 86400
    

    【讨论】:

    • 感谢您的回复。首先,对不起,因为我是 python 新手,也是 'stockoverflow' 新手,所以我可能无法很好地解释我的问题。现在的问题是我的无线适配器“wlan0”已经使用“wpa_supplicant”与我的无线网络相关联。但是,它需要 DHCP 请求才能获得 IP 地址。我尝试了您建议的示例,并将“client.BindToAddress()”更改为“BindToDevice()”,因此它应该听我的“wlan0”。但它继续听而不做任何事情。我想我在这里遗漏了一些东西。
    • 相应地更新了答案,请注意我已在原始示例中添加了打印件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多