Contents

查找Linux计算机的主IP地址

1. 概述

什么是IP地址?互联网协议 (IP) 地址是一个标签,用于标识网络中使用互联网协议进行通信的任何硬件设备。这些 IP 地址是任何网络中设备之间所有通信消息的组成部分。

这种 IP 标记是必不可少的,这样路由器和中间设备才能将消息路由到适当的目的地。简单来说,IP 地址类似于我们的内陆 pin 码,邮政部门用于路由我们的邮件。

在本文中,让我们学习如何查看 Linux 机器的主 IP 地址。

2. IP 地址类型

首先,让我们了解IP地址类型。有两个 IP 地址版本, IPv4 和 IPv6。IPv4地址是目前使用最多的IP寻址版本。它的格式是一系列从 0 到 255 的四个数字,以句点分隔。例如,10.106.146.25 是一个 IPv4 地址。

尽管 IPv4 IP 地址被广泛使用,但由于当今终端网络设备的激增,需要更大的地址池。

IPv6 地址试图通过增加位数并在地址中包含字母数字字符来缓解有限的 IPv4 地址池。IPv6 地址由 128 位组成,有 8 组 16 位长度的十六进制数,以冒号分隔。例如,FE80:CD00:0000:0CDE:1257:0000:211E:729C 是一个 IPv6 地址。

其次,除了两个 IP 版本之外,还有两大类 IP 地址

  • 私有 IP 地址(内部 IP)
  • 公共 IP 地址(外部 IP)

私有 IP 地址用于识别本地网络中的设备。以下范围内的所有地址均为私有IP地址:

  • 10.0.0.0 – 10.255.255.255
  • 172.16.0.0 – 173.31.255.255
  • 192.168.0.0 – 192.168.255.255

公共 IP 地址用于识别 Internet 上的设备。所有非私有地址都属于公共地址范围。

通常,IP 地址可以是静态地址,也可以是动态地址。静态 IP 地址只是一个不随时间变化的地址。另一方面,动态 IP 地址在网络中由 DHCP 服务器分配时会不时更改。

3、一个系统最多可以有多少个IP地址?

现在,让我们了解任何 Linux 系统如何将自己与网络连接起来。有一种称为 NIC(网络接口卡)的特殊硬件,它具有将任何设备连接到网络的魔力。网络接口控制器、网络适配器或 LAN 适配器是 NIC 硬件的其他名称。

一个系统可以有一个或多个 NIC 用于网络连接。每个 NIC 都将在网络中使用唯一的 IP 地址来标识自己。简而言之,任何系统都可以有一个或多个 IP 地址(由于连接了许多 NIC)。

即使系统有许多关联的 NIC,在任何时间点也只有一个主 IP 地址。

4. 网络接口概述

首先,什么是网络接口?网络接口是网络接口卡的软件表示。网络接口是与网络硬件(NIC 卡)通信以配置它并获取有关硬件的信息(如IP 地址、MAC 地址、链路状态和数据包传输)的媒介。让我们使用ip 实用程序检查我们系统的网络接口详细信息:

$ ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:d5:cd:03 brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.207.128/24 brd 192.168.207.255 scope global dynamic noprefixroute ens33
       valid_lft 1773sec preferred_lft 1773sec
    inet6 fe80::37c:eba3:2365:23b7/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

在这里,我们看到我们的系统有两个网络接口,ens33lo(环回接口),并列出了它们的详细信息。

4.1. 主网络接口

在 Linux 系统中,只能有一个主要的活动网络连接。结果,将只存在一个主接口。内核路由表将帮助我们识别主接口。

正如我们已经知道的那样,主接口是具有默认路由的接口,这意味着主接口应该能够到达默认网关。也就是说,内核路由表的网关条目应该链接到系统的主要活动接口。

现在,让我们使用 route  实用程序来检查内核路由表:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    100    0        0 ens33
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 ens33
192.168.207.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

在上面的代码片段中,我们看到 ens33接口是连接到默认网关的接口,因此,它是系统的主要活动接口。

5. 检查主活动接口的IP地址

随后,在识别主要活动接口后,最后一步是检查主要 IP 地址,即主要活动接口的 IP 地址。有许多 Linux 实用程序可以查找主 IP 地址:

在本节中,让我们检查所有三个实用程序以找出 Linux 系统的主 IP 地址。

5.1. ip实用程序

我们已经学习了ip实用程序来检查系统中所有网络接口的详细信息。同时,让我们看看如何使用相同的实用程序获取系统的主 IP 地址。

要获取主要 IP 地址,我们需要主要活动接口的详细信息。我们可以通过将接口名称作为参数提供给ip 实用程序来获取特定接口的详细信息。在我们的系统中,我们已经发现ens33是我们的主要活动接口。现在,让我们获取主要活动界面的所有详细信息:

$ ip address show dev ens33 
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:d5:cd:03 brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.207.128/24 brd 192.168.207.255 scope global dynamic noprefixroute ens33
       valid_lft 1086sec preferred_lft 1086sec
    inet6 fe80::37c:eba3:2365:23b7/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

在上面的代码片段中,使用 ip实用程序,我们获得了有关主要活动接口ens33的所有详细信息,例如 IP 地址、MAC 地址和流量详细信息。

随后,为了仅显示主要 IP 地址,我们使用grep  和 awk 等截断工具来处理获取的主要接口详细信息:

$ ip address show dev ens33 | grep -w inet | awk '{print $2}'
192.168.207.128/24

在这里,ip实用程序显示网络掩码和 IP 地址。

除了上述方法,我们还可以使用ip实用程序查找主 IP 地址。** ip实用程序  能够找到到任何目的地的路由**。我们可以使用此功能来查找主 IP 地址,因为它是使用默认路由的接口。

让我们使用ip实用程序找出到达任何随机 IP 地址 (1.1.1.1) 的路由 :

$ ip route get 1.1.1.1
1.1.1.1 via 192.168.207.2 dev ens33 src 192.168.207.128 uid 1000 
    cache 

在这里,上面的代码片段显示我们的系统可以通过接口 ens33 到达1.1.1.1,其 IP 地址是 192.168.207.128——我们的主 IP 地址。

5.2. ifconfig实用程序

ifconfig实用程序 是另一种广泛使用的网络配置工具。这个遗留实用程序已被弃用,取而代之的是ip实用程序,但许多 Linux 发行版仍然支持此实用程序。与ip实用程序类似 ,用户必须将主要活动接口名称作为参数传递:

$ ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.207.128  netmask 255.255.255.0  broadcast 192.168.207.255
        inet6 fe80::37c:eba3:2365:23b7  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:d5:cd:03  txqueuelen 1000  (Ethernet)
        RX packets 11265  bytes 11392205 (11.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2591  bytes 397297 (397.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

随后,为了仅显示主要 IP 地址,我们将在获取的主要接口详细信息上使用截图工具:

$ ifconfig ens33 | grep -w inet | awk '{print $2}'
192.168.207.128

5.3. nmcli实用程序

nmcli实用程序 用于在安装了网络管理器的系统上配置和显示网络设置。它通常出现在所有现代 Linux 发行版中。该实用程序将获取有关系统中存在的所有接口的详细信息,因此用户必须仔细阅读并找到主要活动网络接口的主要 IP 地址:

$ nmcli 
ens33: connected to Wired connection 1
        "Intel 82545EM"
        ethernet (e1000), 00:0C:29:D5:CD:03, hw, mtu 1500
        ip4 default
        inet4 192.168.207.128/24
        route4 0.0.0.0/0
        route4 192.168.207.0/24
        route4 169.254.0.0/16
        inet6 fe80::37c:eba3:2365:23b7/64
        route6 fe80::/64
lo: unmanaged
        "lo"
        loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536
DNS configuration:
        servers: 192.168.207.2
        domains: localdomain
        interface: ens33
Use "nmcli device show" to get complete information about known devices and
"nmcli connection show" to get an overview of active connection profiles.
Consult nmcli(1) and nmcli-examples(7) manual pages for complete usage details.

最后,让我们仔细阅读nmcli实用程序输出中的ens33部分(我们的主要活动接口)以找到我们的主要 IPv4 地址 ( 192.168.207.128/24 )。

6. 外部IP地址

外部和本地 IP 地址具有相同的目的,即为系统提供唯一标识。它们之间的唯一区别是范围。本地 IP 地址是本地网络中系统的标识。相反,外部IP地址是一个系统在整个互联网上的身份。因此,每个连接到互联网的系统都将有一个本地 IP 地址(用于其本地身份)和一个外部 IP 地址(用于其全球身份)。

到目前为止,在本文中,我们已经讨论了多种检查系统本地 IP 地址的方法。要检查系统的外部 IP 地址:

$ curl ifconfig.me
220.158.158.132

或者,我们可以使用ipchicken.com 等网站服务检查外部 IP 地址。