介绍
在本实验中,你将学习如何使用现代且功能强大的 ip a 命令来识别 Linux 系统上的关键网络寻址信息。本实验的主要目标是让你能够熟练地检查系统的网络接口,并从命令输出中定位特定细节,包括 MAC 地址、IPv4 地址和 IPv6 地址。
你将首先执行 ip a 命令,以显示所有网络接口的全面概览,例如回环接口(lo)和主以太网接口(eth0)。随后,你将学习如何解析详细的输出,以精准定位 MAC 地址所在的 link/ether 行、IPv4 地址所在的 inet 行以及 IPv6 地址所在的 inet6 行,从而巩固你对 Linux 网络分析基础知识的理解。
使用 ip a 显示所有网络接口信息
在这一步中,你将学习如何使用 ip 命令。它是 Linux 系统中用于查看和操作网络接口、IP 地址及路由的首选现代工具。我们将从最基础的命令开始,显示所有可用网络接口的信息。
ip a 命令是 ip address show 的缩写。它提供了系统网络配置的全面概览。
首先,请确保你处于终端中。你的默认路径是 ~/project。现在,执行 ip a 命令来列出所有网络接口及其关联地址。
ip a
你将看到列出所有网络接口的详细输出。通常,你会看到以下几个接口:
lo:这是回环接口(loopback interface),是一个系统用于与自身通信的虚拟网络接口。它的 IP 地址始终为127.0.0.1。eth0(或类似名称,如enp0s5):这是你的主以太网接口(Ethernet interface),用于将系统连接到外部网络。注意其中的altname字段,它们提供了该接口的别名。docker0:如果安装了 Docker,你可能会看到docker0接口,这是 Docker 为容器网络创建的虚拟网桥。
你的输出将类似于下方的示例,尽管具体的名称和地址会有所不同。
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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:0e:d8:3c brd ff:ff:ff:ff:ff:ff
altname enp0s5
altname ens5
inet 172.16.50.202/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
valid_lft 1892159975sec preferred_lft 1892159975sec
inet6 fe80::216:3eff:fe0e:d83c/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:60:7e:6f:bc brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
花点时间检查一下输出。在接下来的步骤中,我们将分解这些信息,以识别 MAC 地址和 IP 地址等具体细节。
查找 MAC 地址 (link/ether)
在这一步中,你将学习如何从 ip a 命令的输出中识别媒体访问控制(MAC)地址。MAC 地址是分配给网络接口卡(NIC)的唯一硬件级标识符。它也被称为物理地址,通常表示为 12 位的十六进制数字。
在上一步中,你运行了 ip a 并看到了大量信息。现在,让我们专注于查找 MAC 地址。找到你的主网络接口(通常是 eth0)。MAC 地址位于以 link/ether 开头的行中。
为了简化操作,你可以通过管道符 | 将 ip a 的输出传递给 grep 命令,从而仅过滤出包含 MAC 地址的行。管道符 | 会将左侧命令的输出作为右侧命令的输入。
在终端中运行以下命令:
ip a | grep "link/ether"
该命令将仅显示 ip a 输出中包含字符串 "link/ether" 的行。
你将看到一个精简得多的输出,这使得识别 MAC 地址变得非常容易。由冒号分隔的 12 个十六进制字符即为 MAC 地址。
link/ether 00:16:3e:0e:d8:3c brd ff:ff:ff:ff:ff:ff
link/ether 02:42:60:7e:6f:bc brd ff:ff:ff:ff:ff:ff
回环接口 lo 没有传统的 MAC 地址,因此它不会出现在此过滤后的输出中。在本例中,00:16:3e:0e:d8:3c 是 eth0 接口的 MAC 地址。你的地址会有所不同,但格式是一样的。
查找 IPv4 地址 (inet)
在这一步中,你将定位互联网协议版本 4 (IPv4) 地址。与物理 MAC 地址不同,IP 地址是分配给你的设备用于网络通信的逻辑地址。IPv4 地址是最常见的格式,由四个点分十进制数字组成(例如 192.168.1.10)。
在 ip a 命令的输出中,IPv4 地址位于以 inet 开头的行中。我们可以再次使用 grep 命令来过滤输出,就像处理 MAC 地址时那样。为了避免匹配到 inet6,在搜索模式中 inet 后面加一个空格是一个好习惯。
在终端中执行以下命令,查找系统上配置的所有 IPv4 地址:
ip a | grep "inet "
该命令将过滤输出,仅显示包含 IPv4 地址的行。你通常会看到多个地址:一个用于回环接口(lo),一个用于主网络接口(eth0),可能还有其他接口(如 docker0)。
inet 127.0.0.1/8 scope host lo
inet 172.16.50.202/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
从输出中,你可以识别出多个 IPv4 地址:
127.0.0.1:这是回环地址,系统用它与自身通信。172.16.50.202/24:这是eth0接口的主 IPv4 地址,用于与网络上的其他设备通信。/24是 CIDR 表示法,定义了网络的子网掩码。你的地址会有所不同。172.17.0.1/16:这是docker0网桥的 IPv4 地址。
查找 IPv6 地址 (inet6)
在最后一步中,你将识别互联网协议版本 6 (IPv6) 地址。IPv6 是 IPv4 的继任者,旨在解决 IPv4 地址最终耗尽的问题。IPv6 地址长度为 128 位,以冒号分隔的十六进制表示法书写(例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334)。
与 IPv4 一样,ip a 命令也会显示 IPv6 信息。包含 IPv6 地址的行由 inet6 明确标记。我们将最后一次使用 grep 来提取此信息。
在终端中运行以下命令,查找系统上的所有 IPv6 地址:
ip a | grep "inet6"
该命令将显示包含接口 IPv6 地址的行。
inet6 ::1/128 scope host
inet6 fe80::216:3eff:fe0e:d83c/64 scope link
从输出中,你可以识别出两个 IPv6 地址:
::1/128:这是 IPv6 回环地址的压缩格式,相当于 IPv4 中的127.0.0.1。fe80::216:3eff:fe0e:d83c/64:这是eth0接口的链路本地(link-local) IPv6 地址。链路本地地址会自动配置在所有启用了 IPv6 的接口上,仅用于同一本地网段内的通信。你的地址会有所不同。
恭喜!你现在已经学会了如何使用 ip a 命令来识别 Linux 系统上的 MAC 地址、IPv4 地址和 IPv6 地址。
总结
在本实验中,你学习了如何使用 ip a 命令来识别 Linux 中的网络地址。你执行了 ip a(一种现代且首选的网络配置工具),以显示所有网络接口的全面信息。输出揭示了回环接口(lo)和主以太网接口(eth0)的详细信息,提供了系统网络设置的完整概览。
通过检查 ip a 命令的输出,你学会了定位特定的网络标识符。你成功识别了标记为 link/ether 的 MAC 地址。此外,你还定位了 inet 标签旁边的系统 IPv4 地址以及 inet6 标签旁边的 IPv6 地址,掌握了在 Linux 系统上获取基本网络地址信息这一核心技能。



