今天我得到了一个新的 Ubuntu 服务器。我尝试使用ifconfig
或ip
命令获取其 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'}]}