使用 nmap 扫描开放的 TCP 和 UDP 端口
在这一步中,你将学习如何使用 nmap 工具扫描你自己的系统以查找开放的网络端口。网络端口是操作系统中通信的端点。当一个程序想要从网络接收信息时,它会“监听”一个特定的端口。扫描开放端口是评估机器安全性的基础第一步,因为每个开放端口都代表着攻击者潜在的入口点。
首先,你需要安装 nmap,因为它不包含在基础环境中。在安装新软件之前更新软件包列表是一个好习惯。
运行以下命令更新软件包列表:
sudo apt-get update
现在,通过运行以下命令安装 nmap:
sudo apt-get install -y nmap
你应该会看到显示 nmap 及其依赖项正在安装的输出。
接下来,你需要找到机器的 IP 地址,以便告诉 nmap 扫描什么。你可以使用 ip 命令找到它。
ip addr show
查找类似 eth0 或 ens33 的条目。你的 IP 地址将列在 inet 旁边。它看起来类似于 172.16.50.13/24。
如何从输出中识别你的 IP 地址:
- 查找状态为
state UP 的接口(通常是 eth0)。
- 找到以
inet 开头的行(不是 inet6)。
- 只取
/ 之前的 IP 地址部分(例如,如果你看到 inet 172.16.50.13/24,你的 IP 地址就是 172.16.50.13)。
- 忽略 IP 为
127.0.0.1 的回环接口(lo)。
在本实验的后续部分,我们将使用 <your_IP_address> 作为你实际 IP 地址的占位符。
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:04:c3:1d brd ff:ff:ff:ff:ff:ff
altname enp0s5
altname ens5
inet 172.16.50.13/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
valid_lft 1892159940sec preferred_lft 1892159940sec
inet6 fe80::216:3eff:fe04:c31d/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:1d:45:49:f8 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
现在你已经准备好进行第一次扫描了。让我们从扫描开放的 TCP(传输控制协议)端口开始。TCP 是一种面向连接的协议,用于许多常见服务,如 SSH(端口 22)和 HTTP(端口 80)。nmap 中的 -sT 选项执行 TCP 连接扫描。
重要提示: 请将 <your_IP_address> 替换为你从上一步中找到的实际 IP。例如,如果你的 IP 是 172.16.50.13,命令将是 nmap -sT 172.16.50.13。
替换 <your_IP_address> 并运行命令:
nmap -sT <your_IP_address>
输出将列出处于“开放(open)”状态的端口。你的系统默认情况下可能会开放 SSH 端口(22),并且可能在其他端口上运行着其他服务。
Starting Nmap 7.80 ( https://nmap.org ) at 2025-07-01 14:08 CST
Nmap scan report for iZrj93qpoj98oqswu96cqfZ (172.16.50.13)
Host is up (0.00013s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
3000/tcp open ppp
3001/tcp open nessus
Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds
接下来,让我们扫描 UDP(用户数据报协议)端口。UDP 是一种无连接协议,用于 DNS(端口 53)和 DHCP(端口 67/68)等服务。UDP 扫描可能比 TCP 扫描更慢且更不可靠。使用 sudo 可以为 UDP 扫描提供更好的结果。-sU 选项告诉 nmap 执行 UDP 扫描。
请记住: 将 <your_IP_address> 替换为你上一步中的实际 IP 地址。
替换 <your_IP_address> 并运行命令:
sudo nmap -sU <your_IP_address>
输出可能会将端口显示为 open|filtered。这意味着 nmap 无法确定端口是开放的还是防火墙拦截了扫描。这是 UDP 扫描的常见结果。
Starting Nmap 7.80 ( https://nmap.org ) at 2025-07-01 14:09 CST
Nmap scan report for iZrj93qpoj98oqswu96cqfZ (172.16.50.13)
Host is up (0.0000060s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
68/udp open|filtered dhcpc
5353/udp open|filtered zeroconf
Nmap done: 1 IP address (1 host up) scanned in 1.29 seconds
通过完成这些扫描,你已成功识别了机器上正在监听网络连接的服务。