[英]How to assign IP address to interface in python?
我有python脚本,为我的无线和有线接口设置IP4地址。 到目前为止,我使用subprocess
命令,如:
subprocess.call(["ip addr add local 192.168.1.2/24 broadcast 192.168.1.255 dev wlan0"])
如何使用python库设置接口的IP4地址? 如果有任何方法可以使用python库获取已有的IP配置?
通过旧的ioctl
接口设置地址:
import socket, struct, fcntl
SIOCSIFADDR = 0x8916
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def setIpAddr(iface, ip):
bin_ip = socket.inet_aton(ip)
ifreq = struct.pack('16sH2s4s8s', iface, socket.AF_INET, '\x00' * 2, bin_ip, '\x00' * 8)
fcntl.ioctl(sock, SIOCSIFADDR, ifreq)
setIpAddr('em1', '192.168.0.1')
(使用SIOCSIFNETMASK = 0x891C
设置网络掩码)
可以使用相同的方式检索IP地址:使用Python的stdlib查找本地IP地址
我相信如果你想在ioctl
上使用它,就会有一个Netlink的python实现
你可以从python程序中选择多个选项。
可以像你展示的那样使用ip
工具。 虽然这不是最好的选择,但这通常会让你的工作变得有点缓慢和笨拙。
另一种方法是直接使用内核netlink接口来自己做ip
。 我知道libnl有一些实验性(?)python绑定。 这可能有用,但你必须处理很多低级别的东西。 我不建议这种方式用于简单的“设置和获取”ips,但它是最“正确”和可靠的方式。
在我看来,最好的方法是(如果你只想设置和获取ips)将使用NetworkManagers dbus接口。 虽然这是非常有限的并且可能有它自己的问题(它可能不是你希望的那样),但如果NetworkManager正在运行,这是最直接的方式。
因此,如果你想要弄脏自己,那么选择libnl
方法,它显然更优越,但也更多的工作。 您也可以使用NetworkManager dbus接口,具体取决于您的需求和一般系统设置。 否则你可以这样离开。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.