如何在Python中从NIC(网络接口控制器)获取IP地址? [英] How can I get the IP address from a NIC (network interface controller) in Python?

查看:32
本文介绍了如何在Python中从NIC(网络接口控制器)获取IP地址?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当Unix上的Python脚本出现错误时,将发送电子邮件。

如果IP地址为192.168.100.37,即测试服务器,则要求我在电子邮件的主题行中添加{Testing Environment}。这样,我们就可以有一个版本的脚本和一种方法来判断电子邮件是否来自测试服务器上的混乱数据。

但是,当我在谷歌上搜索时,我不断地找到以下代码:

import socket
socket.gethostbyname(socket.gethostname())
但是,这为我提供了IP地址127.0.1.1。当我使用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脚本或网络界面,并且我试图使用标准库。

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

推荐答案

两种方式:

方法#1(使用外部包)

您需要请求绑定到您的eth0接口的IP地址。这可以从netifaces package

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()

方法#2(无外部包)

这里有一种无需使用python包即可获取IP地址的方法:

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'
注意:检测IP地址以确定您正在使用的环境相当困难。几乎所有框架都提供了一种非常简单的方法来设置/修改环境变量以指示当前环境。请尝试查看您的文档以了解这一点。它应该像做一件事一样简单

if app.config['ENV'] == 'production':
  #send production email
else:
  #send development email

这篇关于如何在Python中从NIC(网络接口控制器)获取IP地址?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆