网络与安全基础
OSI、子网、端口、DNS、VPN。
网络侦察与抓包:nmap、tcpdump、Wireshark
这一课你将能做到
- 用 nmap 对自建靶机完成主机发现、端口扫描与服务版本识别
- 用 tcpdump 抓包、用 Wireshark 分析 TCP 三次握手与 HTTP 明文风险
- 从网络层视角解释为什么「端口最小开放」比应用层加固优先级更高
为什么要学
网络是攻击者的主通道,也是防御者的第一道边界。你的 Spring Boot 应用写得再安全,如果无密码的 Redis 6379 暴露公网,攻击者会直接绕过应用写 shell。日常排障时抓包能力是照妖镜:前端说发了请求、后端说没收到,一条 tcpdump 就能定案。
人话:nmap 是「挨家敲门看谁在家」,tcpdump / Wireshark 是「装在走廊的监控摄像头」。这两项能力贯穿渗透、防御、排障三条线,是安全基本功中的基本功。
先建立图像
一次 HTTP 请求在网络里的完整旅程:
客户端 服务器
│ ── SYN ─────────────────────▶│
│◀─────────────── SYN/ACK ─────│ ① 三次握手建立连接
│ ── ACK ─────────────────────▶│
│ ── GET /login?pwd=123456 ───▶│ ② 明文可见!
│◀────────── HTTP/1.1 200 ─────│ ③ 明文可见!
│ ── FIN ─────────────────────▶│ ④ 四次挥手断开
nmap 扫描的本质,就是发起(或伪造)各种握手探测,从响应特征推断端口状态与服务版本;抓包工具则把这条链路上的字节原样录下来。
跟着做
步骤 1:准备合法靶场网络
VirtualBox 新建 Host-Only 网络,导入一台 Ubuntu 靶机(假设 IP 192.168.56.101),靶机上装 Nginx 和 Redis。本课所有扫描目标只有这一台自建虚拟机,禁止指向任何公网地址。
步骤 2:主机发现
# 在攻击机(宿主机)执行
nmap -sn 192.168.56.0/24 # ping 扫描,看网段谁在线
nmap -sn 192.168.56.101 # 确认靶机可达
步骤 3:端口与服务扫描
nmap -sT 192.168.56.101 # 全连接扫描,最温和
nmap -p 22,80,6379,3306 192.168.56.101 # 针对常见端口
nmap -sV -sC 192.168.56.101 # 版本识别 + 默认脚本
nmap --script http-title 192.168.56.101 # 轻量脚本示例
观察输出:22/tcp open ssh、6379/tcp open redis。Redis 无密码对外开放就是典型风险点,下一步你会亲手证明它的危害。
步骤 4:tcpdump 抓明文 HTTP
# 靶机上执行,抓 80 端口写文件
sudo tcpdump -i any port 80 -w /tmp/http.pcap
# 另开终端模拟登录(打靶机)
curl "http://192.168.56.101/login?user=admin&pwd=123456"
# Ctrl+C 停止,用 Wireshark 打开 /tmp/http.pcap
在 Wireshark 里右键任意一个包 → Follow → TCP Stream,用户名密码完全裸奔。这就是「必须上 TLS」的第一手证据。
步骤 5:Wireshark 对比明文与加密
# 再抓一次 HTTPS(靶机 Nginx 配好自签证书)
sudo tcpdump -i any port 443 -w /tmp/tls.pcap
curl -k https://192.168.56.101/
Wireshark 显示过滤器:tcp.flags.syn==1 看三次握手;http 看明文;tls.handshake.type==1 看 ClientHello。TLS 流量里除了 IP、域名(SNI)、证书信息,内容全部是密文。