【问题标题】:Get my local IP address and subnet mask of the network via Python通过 Python 获取我的本地 IP 地址和网络的子网掩码
【发布时间】:2019-03-10 00:07:18
【问题描述】:

我想用 python 代码获取我的本地 IP 地址 以及 网络的子网掩码。 我尝试使用此代码获取 IP 地址:

import socket
print socket.gethostbyname(socket.gethostname())

但是我得到了这个 IP > 169.254.236.99,这不是我的本地 IP 地址。

所以也许你可以帮我做这件事?谢谢。

编辑:我找到了适用于 Linux 和 Windows 的 IP 地址 的不错解决方案

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])

因此,如果您能帮我解决子网掩码问题,那将非常有帮助:)

【问题讨论】:

  • 问题是您的计算机有多个网络适配器和多个地址。 169 位于用于 pcap 的虚拟接口上。您可以使用 pip 中的 ifaddr 之类的东西来列出所有这些。
  • 你说得对,我找到了解决方案。也许你可以帮我解决子网掩码?
  • 您还需要 IP 掩码吗?试试这个:stackoverflow.com/a/10508732/9808870 但是,您必须知道掩码的位数(通常是无符号 32 位整数)。
  • 这不是我需要的,因为我不知道掩码的位数.. 但感谢您的评论
  • 对不起,我修改了我的评论。 IPv4 的掩码通常为 32 位(4 字节 x 8 位)。

标签: python networking


【解决方案1】:

环回不是一般但总是 127.0.0.1 你的本地 IP (LAN) 是 192.168.1.11 (wifi)

看看这个:Netifaces

这是一件小事,可能会进一步帮助您。 :-)

【讨论】:

  • 我已经编辑了我的问题,如果你能看一下它会很有帮助。谢谢
  • 对于 Linux,这应该可以解决问题: iface = "eth0" socket.inet_ntoa(fcntl.ioctl(socket.socket(socket.AF_INET, socket.SOCK_DGRAM), 35099, struct.pack(' 256s', iface))[20:24])
  • 那么 Windows 呢?
  • 嗯...我建议你看看这个:Netifaces alastairs-place.net/projects/netifaces
  • 一般不会。 始终如一 127.0.0.1 是一个保留地址,用于测试网络适配器。
猜你喜欢
  • 1970-01-01
  • 2012-07-12
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多