当前位置: 首页 > 知识库问答 >
问题:

如何在Python中从NIC获取IP地址?

韩明德
2023-03-14
import socket
socket.gethostbyname(socket.gethostname())

但是,这给了我127.0.1.1的IP地址。当我使用ifconfig时,我得到以下信息

eth0      Link encap:Ethernet  HWaddr 00:1c:c4:2c:c8:3e
          inet addr:192.168.100.37  Bcast:192.168.100.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:75760697 errors:0 dropped:411180 overruns:0 frame:0
          TX packets:23166399 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:59525958247 (59.5 GB)  TX bytes:10142130096 (10.1 GB)
          Interrupt:19 Memory:f0500000-f0520000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:25573544 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25573544 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:44531490070 (44.5 GB)  TX bytes:44531490070 (44.5 GB)

首先,我不知道127.0.1.1是从哪里来的,但不管怎样,这都不是我想要的。当我谷歌的时候,我总是看到相同的语法,Bash脚本或netifaces,我试图使用标准库。

那么如何在Python中获取eth0的IP地址呢?

共有1个答案

丘畅
2023-03-14

两种方法:

您需要询问绑定到eth0接口的IP地址。这可从netifaces包中获得

import netifaces as ni
ni.ifaddresses('eth0')
ip = ni.ifaddresses('eth0')[ni.AF_INET][0]['addr']
print ip  # should print "192.168.100.37"

您还可以通过以下方式获取所有可用接口的列表:

ni.interfaces()
import socket
import fcntl
import struct

def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])

get_ip_address('eth0')  # '192.168.0.110'
if app.config['ENV'] == 'production':
  #send production email
else:
  #send development email
 类似资料:
  • 当Unix上的Python脚本出现错误时,会发送一封电子邮件。 如果IP地址192.168.100.37是测试服务器,我被要求将{测试环境}添加到电子邮件的主题行。这样我们就可以有一个版本的脚本和一种方法来判断电子邮件是否来自测试服务器上混乱的数据。 然而,当我在谷歌上搜索时,我一直在寻找以下代码: 然而,这给了我127.0.1.1的IP地址。当我使用时,我得到了这个 首先,我不知道它是从哪里12

  • 问题内容: 我想获取计算机的IP地址。我使用了下面的代码,但是返回了。 我想获取IP地址(例如),而不是回送地址。 问题答案: 您需要遍历所有网络接口 播放(取自util / helper.go)

  • 问题内容: 我不是指 127.0.0.1 而是其他计算机将用来访问该计算机的计算机,例如 192.168.1.6 问题答案: http://nodejs.org/api/os.html#os_os_networkinterfaces

  • 问题内容: 如何在Django中获取用户的IP? 我有这样的看法: 但是我得到这个错误: 问题答案: 确保正确配置了反向代理(如果有)(例如,为Apache安装)。 注意:上面使用的第一项,但是你可能想使用最后一项(例如,在Heroku的情况下:在Heroku上获取客户端的真实IP地址) 然后将请求作为参数传递给它;

  • 我的计算机上有多个网卡。(因为VMWare) 如何找到活动卡的IPv4地址。我的意思是,如果我在终端中发送ping并在WireShark中拦截数据包,我需要“Source”的地址。 我想过检查每个网络接口,看看GateWay是空还是空?或者可能ping127.0.0.1并获取ping请求的IP源?但无法实现它。 现在我有这个代码,我在StackOverFlow上找到的 但它给了我VmWare卡的I

  • 问题内容: 我想从Swift中的DNS查询中获取IP地址(例如192.168.0.1或87.12.56.50)。我用100种不同的方法尝试了100次…没有任何帮助,所以我必须寻求帮助。到目前为止,这是我的代码: 问题答案: 您的代码将地址检索为“套接字地址”结构。 可用于将地址转换为数字IP字符串回收的代码,现已更新为Swift 2 ): 输出(示例): 还要注意第一行的用法,因为名称中 带有“