-2

我正在寻找一个简短的命令,以在 python 中通过其名称获取网络接口 IP 地址。例如,它不适用于 socket.getaddr(),这是我的详细信息: 在此处输入图像描述

我想要一个函数:

x=func('vEthernet (VIC Ethernet)')

所以 x 将是 10.10.255.254 我不想运行 ipconfig 并解析它

谢谢

4

3 回答 3

0

scapy 模块有一个功能 -get_if_addr(iface_name) 谢谢大家

于 2022-01-10T20:25:42.317 回答
0

您可以使用此功能获取主 IP:

import socket
def get_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.settimeout(0)
    try:
        # doesn't even have to be reachable
        s.connect(('10.255.255.255', 1))
        IP = s.getsockname()[0]
    except Exception:
        IP = '127.0.0.1'
    finally:
        s.close()
    return IP

要获取所有 ip,您可以使用netifaces

from netifaces import interfaces, ifaddresses, AF_INET
for ifaceName in interfaces():
    addresses = [i['addr'] for i in ifaddresses(ifaceName).setdefault(AF_INET, [{'addr':'No IP addr'}] )]
    print(' '.join(addresses))

输出:

No IP addr
No IP addr
No IP addr
No IP addr
192.168.0.104
127.0.0.1
于 2022-01-10T15:08:53.030 回答
0

它以元组的形式返回 IP 地址和端口。

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])
于 2022-01-10T15:12:56.397 回答