python 提取网关信息_Python:在linux中获取本地接口/ IP地址的默认网关

本文介绍了两种在Python中获取Linux系统默认网关的方法:直接读取/proc/net/route文件,以及使用netifaces库。示例代码分别展示了如何通过这两种方式提取本地接口的默认网关地址。
摘要由CSDN通过智能技术生成

对于那些不需要额外依赖并且不喜欢调用子进程的人,可以直接通过/proc/net/route直接读取:

import socket, struct def get_default_gateway_linux(): """Read the default gateway directly from /proc.""" with open("/proc/net/route") as fh: for line in fh: fields = line.strip().split() if fields[1] != '00000000' or not int(fields[3], 16) & 2: continue return socket.inet_ntoa(struct.pack("

我没有一个大端机器来测试,所以我不确定是否endianness是依赖于你的处理器架构,但如果是,替换< struct.pack('

为了完整性(并扩展alastair的答案),这里是一个使用“netifaces”(在Ubuntu 10.04下测试,但应该是可移植的)的例子:

$ sudo easy_install netifaces Python 2.6.5 (r265:79063, Oct 1 2012, 22:04:36) ... $ ipython ... In [8]: import netifaces In [9]: gws=netifaces.gateways() In [10]: gws Out[10]: {2: [('192.168.0.254', 'eth0', True)], 'default': {2: ('192.168.0.254', 'eth0')}} In [11]: gws['default'][netifaces.AF_INET][0] Out[11]: '192.168.0.254'

“netifaces”的文档: https ://pypi.python.org/pypi/netifaces/

netifaces的最新版本也可以这样做,但是与pynetinfo不同的pynetinfo ,它可以在Linux以外的系统(包括Windows,OS X,FreeBSD和Solaris)上运行。

def get_ip(): file=os.popen("ifconfig | grep 'addr:'") data=file.read() file.close() bits=data.strip().split('\n') addresses=[] for bit in bits: if bit.strip().startswith("inet "): other_bits=bit.replace(':', ' ').strip().split(' ') for obit in other_bits: if (obit.count('.')==3): if not obit.startswith("127."): addresses.append(obit) break return addresses

你可以像这样得到它(用python 2.7和Mac OS X Capitain测试,但也可以在GNU / Linux上运行):import subprocess

def system_call(command): p = subprocess.Popen([command], stdout=subprocess.PIPE, shell=True) return p.stdout.read() def get_gateway_address(): return system_call("route -n get default | grep 'gateway' | awk '{print $2}'") print get_gateway_address()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值