如何在python中为接口分配IP地址?

Mer*_*ero 8 python linux subprocess python-2.7 ubuntu-12.04

我有python脚本,为我的无线和有线接口设置IP4地址.到目前为止,我使用的subprocess命令如下:

subprocess.call(["ip addr add local 192.168.1.2/24 broadcast 192.168.1.255 dev wlan0"])
Run Code Online (Sandbox Code Playgroud)

如何使用python库设置接口的IP4地址?如果有任何方法可以使用python库获取已有的IP配置?

svi*_*ota 11

使用pyroute2 .IPRoute:

from pyroute2 import IPRoute
ip = IPRoute()
index = ip.link_lookup(ifname='em1')[0]
ip.addr('add', index, address='192.168.0.1', mask=24)
ip.close()
Run Code Online (Sandbox Code Playgroud)

使用pyroute2 .IPDB:

from pyroute2 import IPDB
ip = IPDB()
with ip.interfaces.em1 as em1:
    em1.add_ip('192.168.0.1/24')
ip.release()
Run Code Online (Sandbox Code Playgroud)

  • 我写它是为了使用,而不是为自己做广告:))但在一个想知道的情况下,这种关联应该是显而易见的,我相信. (6认同)

tMC*_*tMC 7

通过旧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')
Run Code Online (Sandbox Code Playgroud)

(设置网络掩码完成SIOCSIFNETMASK = 0x891C)

可以使用相同的方式检索IP地址:使用Python的stdlib查找本地IP地址

我相信如果你想使用它,有一个Netlink的python实现 ioctl