2013-11-25 40 views
0

目前,我正在使用「subprocess」命令和「dhclient」,這樣我就可以從服務器發出DHCP請求。我正在嘗試改進,並使用純粹的Python庫來提出DHCP客戶端請求。任何一個知道一個圖書館都可以做到的?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 
+0

感謝您的回覆。首先,對不起,因爲我是新來的python和新的'stockoverflow',所以我可能不會很好地解釋我的問題。現在的問題是我的無線適配器'wlan0'已經與使用'wpa_supplicant'的無線網絡相關聯。但是,它需要DHCP請求才能獲得IP地址。我嘗試了你建議的例子,我把'client.BindToAddress()'改爲'BindToDevice()',所以它應該聽我的'wlan0'。但它一直在聆聽而沒有做任何事情。我想我在這裏錯過了一些東西。 – Mero

+0

相應地更新了答案,請注意我已經爲原始示例添加了一個打印 –