[英]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.