网安实验3:网络扫描
查看IP
kali:192.168.130.146

ubuntu:192.168.130.147

Ping扫描(主机发现)
1 | nmap -sn 192.168.130.147 |

过滤arp

- ARP 请求 (第 38 号包):
- Source:
VMware_c7:01:3e(你的 Kali 攻击机) - Info:
Who has 192.168.130.147? Tell 192.168.130.146 - 分析: 这正是 Nmap 在执行Ping扫描。你的 Kali 机器在网络上广播:“谁是
192.168.130.147?请告诉192.168.130.146(我)。”
- Source:
- ARP 响应 (第 40 号包):
- Source:
VMware_b6:5d:b0(你的 Ubuntu 靶机) - Info:
192.168.130.147 is at 00:0c:29:b6:5d:b0 - 分析: 靶机收到了这个广播,并回复了:“我就是
192.168.130.147,这是我的MAC地址。”
- Source:
Nmap通过这个ARP请求和响应,成功确认了靶机 192.168.130.147 是存活的。
TCP Connect扫描(端口扫描)
1 | nmap -sT 192.168.130.147 |

过滤器tcp.port == 22

- [SYN] (第 10957 号包)
- 源 (Source):
192.168.130.146(你的 Kali 攻击机) - 目标 (Destination):
192.168.130.147(你的 Ubuntu 靶机) - 分析: 你的 Kali 向靶机的 22 端口发送
[SYN]包,请求建立连接。
- 源 (Source):
- [SYN, ACK] (第 10959 号包)
- 源 (Source):
192.168.130.147(Ubuntu 靶机) - 目标 (Destination):
192.168.130.146(Kali 攻击机) - 分析: 靶机回复了
[SYN, ACK]!这就是端口开放的决定性证据! 它的意思是:“我收到了你的请求,我也同意建立连接”。
- 源 (Source):
- [ACK] (第 10960 号包)
- 源 (Source):
192.168.130.146(Kali 攻击机) - 目标 (Destination):
192.168.130.147(Ubuntu 靶机) - 分析: 你的 Kali 回复了
[ACK],完成了完整的三次握手。
- 源 (Source):
操作系统扫描
1 | nmap -O 192.168.130.147 |


关键数据包 (第 2101 号):
- Source (源):
192.168.130.147(你的 Ubuntu 靶机) - Info (信息):
Destination unreachable (Port unreachable)(目标不可达 - 端口不可达)
原理分析 (这才是重点):
- 这个
Port unreachable(端口不可达) 是一个 ICMP 错误消息。 - 这不是一个普通的 Ping 回复。这个包的出现,意味着你的 Kali 攻击机 (
...146) 刚刚向你的 Ubuntu 靶机 (...147) 发送了一个数据包,该数据包的目的端口是关闭的(很可能是 Nmap 发送的一个 UDP 包,发往一个随机的高位端口)。 - Nmap 的OS探测故意这么做。它想知道:“当我向一个已关闭的UDP端口发送数据时,这个操作系统会如何反应?”
- 你的靶机回复了! 你的 Ubuntu 靶机 (
...147) 非常“守规矩”地回复了一个 ICMP 错误消息,告诉 Kali:“你发送的那个端口,我这里没开”。 - 这就是一个关键的“指纹”。Nmap 会记录下来:“哦,目标系统会回复 ICMP Port Unreachable”。其他操作系统(比如某些版本的 Windows)可能就会“默默地”丢弃这个包,根本不回复。
Nmap 通过收集这一系列的“反应”(包括这个 Port unreachable、TCP 窗口大小、对奇怪 TCP 标志位的响应等),然后去和它的指纹数据库进行比对,最终猜出:“这种行为模式最像 Linux 4.x/5.x 内核”。
漏洞扫描
1 | nmap -sV --script=vuln 192.168.130.147 |

过滤器ssh

- 关键数据包 (第 4199 号包):
- Source (源):
192.168.130.147(你的 Ubuntu 靶机) - Info (信息):
Server: Protocol (SSH-2.0-OpenSSH_8.2p1 Ubuntu... - 分析: 这是最关键的一步!靶机在 SSH 握手的一开始,就主动向 Nmap 宣告了它的“版本横幅 (Banner)”。它在说:“你好,我是
OpenSSH_8.2p1,运行在 Ubuntu 系统上”。 - Nmap 读到了这个信息,
nmap -sV的主要任务就完成了。
- Source (源):
- 确认是 Nmap (第 4227 号包):
- Source (源):
192.168.130.146(你的 Kali 攻击机) - Info (信息):
Client: Protocol (SSH-2.0-Nmap-SSH2-Hostkey) - 分析: 这个包进一步证实了这就是 Nmap 在工作,它的 SSH 客户端标识里包含了 “Nmap” 字样。
- Source (源):
- 漏洞脚本 (
--script=vuln) (后续包):- 在获取到版本信息后,Nmap 的脚本引擎会接管。你看到的后续
Key Exchange Init(密钥交换初始化) 等数据包,就是 Nmap 脚本在继续 SSH 握手,目的是为了检查靶机是否支持过时的加密算法、是否存在可利用的漏洞等。
- 在获取到版本信息后,Nmap 的脚本引擎会接管。你看到的后续
证明了 nmap -sV 是通过读取服务的“版本横幅 (Banner)”来识别服务版本的,并且 --script=vuln 会在此基础上进行更深入的交互来探测漏洞。
主机全面扫描
1 | nmap -A 192.168.130.147 |

阶段 1:端口发现 (SYN 扫描)

- [SYN] (第 10624 号包)
- 源 (Source):
192.168.130.146(你的 Kali 攻击机) - 目标 (Destination):
192.168.130.147(你的 Ubuntu 靶机) - 分析: Kali 发送
[SYN]包,询问:“22 端口,你开放吗?”
- 源 (Source):
- [SYN, ACK] (第 10625 号包)
- 源 (Source):
192.168.130.147(Ubuntu 靶机) - 目标 (Destination):
192.168.130.146(Kali 攻击机) - 分析: 靶机回复
[SYN, ACK],意思是:“是的,我开放了!”
- 源 (Source):
- [RST] (第 10626 号包) ⬅️ 这就是决定性的证据!
- 源 (Source):
192.168.130.146(你的 Kali 攻击机) - 目标 (Destination):
192.168.130.147(你的 Ubuntu 靶机) - 分析: Nmap 在收到“端口开放”的
[SYN, ACK]信号后,并没有按规矩回复[ACK]来完成连接,而是立即发送了一个[RST](Reset) 包,强行中断了这个连接。
- 源 (Source):
这就是 Nmap 默认的 SYN 扫描(也叫“隐蔽扫描”或“半开放扫描”)。它通过 SYN -> [SYN, ACK] 来确认端口开放,但通过立即发送 [RST] 来避免建立一个完整的连接。
阶段 2:深入探测
- [SYN] (第 12785 号包):Kali (...146) 向靶机 (...147) 发起一个新的连接。
- [SYN, ACK] (第 12786 号包):靶机 (
...147) 回复同意。 - [ACK] (第 12788 号包):Kali (
...146) 确认,完成了完整的三次握手。
证明了 nmap -A 为了执行深入的版本探测 (-sV) 和脚本扫描 (-sC),会建立一个完整的TCP连接。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Bastandern's Blog!
评论

