python - DHCP请求库

标签 python linux dhcp

目前,我正在使用带有“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/

相关文章:

python - 模块未找到错误 : No module named 'Crypto' Error

android - 获取/设置安卓 IPv4 地址

android - 如何找到连接到手机 BT-PAN 的设备发布的 IP 地址

python - 如何使用 imaplib 从 python 电子邮件中获取纯文本

python - 将shift_jis转换为utf-8

linux - 每次在 linux 上运行 shell 脚本时创建一个新目录

c++ - Linux C++串口写入: Only one character written

linux - iPhone : Local DNS for local domains - cellular data for external addresses

python - 在 Vagrant 中访问端口 5000 时遇到问题

linux - PID 文件存在,但进程未运行