在 Ubuntu 中,如何在没有 ifconfig 或 ip 命令的情况下获取 ip 地址?

在 Ubuntu 中,如何在没有 ifconfig 或 ip 命令的情况下获取 ip 地址?

今天我得到了一个新的 Ubuntu 服务器。我尝试使用ifconfigip命令获取其 IP 地址。

但是我得到了一个command not found错误。我在 Google 上搜索了错误,看起来我需要安装包来运行这些命令。

但我没有sudo权限。除了这些命令之外,还有其他方法可以获取 IP 地址吗?

答案1

如果您很幸运(并且主机名设置正确),hostname -i将提供本地 IP 地址。如果不幸运,或者您有多个 IP 地址,它可能会返回本地主机地址127.0.0.1。该命令hostname -I将报告所有机器本地 IP(v4 和 v6)地址。

答案2

你可以尝试使用 Python。它在大多数发行版上都是默认安装的。它非常容易使用。

$python
>>> import netifaces as ni
>>> ni.interfaces()
['lo', 'eth0','eth1','eth2']
>>> ni.ifaddresses('eth0')
{17: [{'addr': '02:93:07:be:da:d9', 'broadcast': 'ff:ff:ff:ff:ff:ff'}], 2: [{'addr': '10.0.0.76', 'netmask': '255.255.255.0', 'broadcast': '10.0.0.255'}], 10: [{'addr': 'fe80::93:7ff:febe:dad9%eth0', 'netmask': 'ffff:ffff:ffff:ffff::'}]}

在上面的例子中,有四个接口,eth0、eth1、eth2。eth0 的 ip 地址是 10.0.0.76。

Linux 服务器可以有多个网络接口。你可以查看我网站上的帖子这里以获取有关此内容的更多信息。

该 Python 脚本显示每个网络接口的 mac 地址、ip 地址和网络掩码。

以下是不使用 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'

您可以参考这个帖子了解有关如何使用 Python 获取 IP 地址的更多信息。

答案3

如果你只是一个用户在 Ubuntu 服务器上,并且管理员已禁用您对某些工具的访问权限,则可能很难确定哪个您可用的工具。该ip命令通常可供最终用户使用,但可能存在路径问题(不太可能):

/usr/bin/ip addr show
# or
/bin/ip addr show
# or (could be restricted)
/sbin/ip addr show

或者,您可以尝试使用来curl访问将检测您的公共 IP 的外部服务。有很多这样的服务 - 我只是选择了我找到的第一个搜索结果:

curl ifconfig.me/all

答案4

这是基于@howtouselinux 的回答的解决方案,您可以直接复制粘贴。

python3 <<HEREDOC
import netifaces as ni
import pprint
interfaces = ni.interfaces()
print("\n", "Interfaces:", interfaces)
for iface in interfaces:
    ifconfig = ni.ifaddresses(iface)
    pprint.pprint(ifconfig)
HEREDOC

输出

Interfaces: ['lo', 'enp0s1']
{2: [{'addr': '127.0.0.1', 'netmask': '255.0.0.0', 'peer': '127.0.0.1'}],
 10: [{'addr': '::1',
       'netmask': 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128'}],
 17: [{'addr': '00:00:00:00:00:00', 'peer': '00:00:00:00:00:00'}]}
{2: [{'addr': '192.168.1.215',
      'broadcast': '192.168.1.255',
      'netmask': '255.255.255.0'}],
 10: [{'addr': 'fe80::b:d8ff:fe61:58a%enp0s1',
       'netmask': 'ffff:ffff:ffff:ffff::/64'}],
 17: [{'addr': '02:0b:d8:65:0b:8a', 'broadcast': 'ff:ff:ff:ff:ff:ff'}]}

相关内容