目前,我正在使用带有“dhclient”的“subprocess”命令,这样我就可以从服务器发出 DHCP 请求。我正在尝试改进它,只使用纯 python 库来发出 DHCP 客户端请求。任何人都知道图书馆可以做到这一点吗?
最佳答案
查看 pydhcplib,查看 http://pydhcplib.tuxfamily.org/pmwiki/index.php?n=Site.ClientExample 的用法示例
编辑:在我的 Ubuntu 12.04 上试了一下
安装:
$ cd pydhcplib-0.6.2/
$ sudo python setup.py install
测试.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 - DHCP请求库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20196171/