很多时候需要在 Python 获取指定网卡的 IP 地址。如果能够在目标机器上安装 netifaces 模块,事情会变得非常容易,如果安装模块是不方便的话,使用 Python 的标准库同样也能实现。这里分别记录一下两种办法。
使用模块实现
import netifaces
interface_list = netifaces.interfaces()
interface_name = list(filter(lambda x: x.startswith('e'), interface_list))[0]
ipaddr = netifaces.ifaddresses(interface_name)[netifaces.AF_INET][0]['addr']
使用标准库实现
import os
import socket
import fcntl
import struct
interface_list = os.listdir('/sys/class/net/')
interface_name = list(filter(lambda x: x.startswith('e'), interface_list))[0]
def get_ip_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
ip = socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915,
struct.pack('256s', ifname[:15].encode('utf-8')))[20:24])
except OSError:
print("Wrong interface name: " + ifname + "ncheck config.ini")
sys.exit(0)
return ip
转载请注明出处。本博客所有内容均为作者个人工作经验的总结,请不要视作为 sop,受制于可能完全不同的使用场景,本博客的观点并不可靠,仅供参考。