CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
网络安全入门/课时/网络与安全基础
RawBlame
课时目录12 节

网络安全入门

  1. 01安全职业与 IT 基础
  2. 02网络与安全基础
  3. 03操作系统加固
  4. 04密码学与 PKI
  5. 05身份与访问控制
  6. 06威胁与攻击向量
  7. 07防御技术与工具
  8. 08事件响应与取证
  9. 09云与虚拟化安全
  10. 10渗透测试入门
  11. 11合规与认证
  12. 12综合练习

网络与安全基础

OSI、子网、端口、DNS、VPN。

35 分钟

网络侦察与抓包:nmap、tcpdump、Wireshark

这一课你将能做到

  1. 用 nmap 对自建靶机完成主机发现、端口扫描与服务版本识别
  2. 用 tcpdump 抓包、用 Wireshark 分析 TCP 三次握手与 HTTP 明文风险
  3. 从网络层视角解释为什么「端口最小开放」比应用层加固优先级更高

为什么要学

网络是攻击者的主通道,也是防御者的第一道边界。你的 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)、证书信息,内容全部是密文。

步骤 6:把结论落回 Java 平台

# 检查自己服务器监听情况
ss -tlnp | grep -E '6379|3306|8080'
# 期望:Redis / MySQL 只监听 127.0.0.1 或内网 IP
# 8080 不直接暴露公网,前面有 Nginx 反代 + TLS 终止

讲清楚要点

  1. 三次握手是扫描的基石:SYN 半开扫描(-sS)只发 SYN,收到 SYN/ACK 即判定 open 并回 RST 断开,隐蔽且快;全连接扫描(-sT)走完整 connect(),最准也最吵。
  2. 端口四种状态:open(有服务在听)、closed(无服务但可达)、filtered(防火墙丢包,无法判断)、unfiltered。防御视角,filtered 才是我们想要的状态。
  3. 明文协议是原罪:HTTP、FTP、Telnet 的内容在链路任意节点可读。所有带凭证的流量必须走 TLS,这是硬性要求不是建议。
  4. 抓包三要素:网卡(-i any 兜底)、过滤表达式(BPF:port 8080)、输出(-w 存文件离线分析)。线上抓包用 -C 100 -W 10 滚动文件,防止磁盘打满。
  5. 两种过滤器语法不同:捕获过滤用 BPF(tcpdump port 8080),显示过滤用 Wireshark 语法(tcp.port==8080),混用会得出错误结论。

你可能会懵的地方

  • 为什么很多端口显示 filtered? 目标防火墙对探测包做了 DROP,nmap 既收不到 RST 也收不到响应,只能标记 filtered。这提醒你:DROP 比 REJECT 泄露的信息更少。

  • SYN 扫描为什么要 root? 构造原始套接字需要内核权限,所以 nmap 和 tcpdump 默认要 sudo 或 CAP_NET_RAW 能力。

  • HTTPS 流量还能看到什么? 默认能看到 IP、SNI 域名、证书链、握手时长与加密套件。想看内容需配 TLS keylog(SSLKEYLOGFILE),且只允许在你自己控制的测试环境做。

  • 扫描会不会把目标打挂? 激进参数(-T5、全量脚本)可能打崩老旧设备。对生产系统只做授权窗口内的温和扫描(-T2/-T3),并提前报备。

  • Spring Boot 应用怎么配合抓包排障? 在网关层抓最外层流量看「网络真相」,应用日志用 MDC 加 traceId 看「应用真相」,两边按时间戳对齐,问题定位效率翻倍。

错法对照

错法问题正解
扫公司公网 IP 练手违法违规只扫自建靶机或书面授权范围
Wireshark 网卡选错什么也抓不到选实际联网网卡,VM 环境选 Host-Only 网卡
生产环境长时间全量抓包磁盘打满、泄露敏感数据限时 + 过滤 + 滚动文件,用完即删
端口 open 就当有漏洞开放不等于可利用结合版本、配置与认证评估
把 filtered 当绝对安全可能只是探测被拦对照防火墙规则清单确认

卡点急救

  1. nmap 显示 host down:Host-Only 网段配置不一致。检查两边 IP 同网段;已知靶机在线时加 -Pn 跳过 ping 探测。
  2. tcpdump 抓不到包:网卡名不对,ip a 确认;本机回环流量要用 -i lo。
  3. pcap 文件太大打不开:用 tshark -r big.pcap -Y "http" -w small.pcap 先裁剪再分析。

面试常问

  • 描述三次握手与 SYN Flood 的原理和防御。 SYN → SYN/ACK → ACK。SYN Flood 只发 SYN 不完成握手,耗尽服务端半连接队列。防御:SYN Cookie、缩短半连接超时、上游流量清洗。

  • nmap -sS 和 -sT 的区别? -sS 半开扫描:发 SYN,收到 SYN/ACK 即判定 open 并回 RST,不建完整连接,隐蔽快但需 root;-sT 走完整 connect(),无需特权但系统日志痕迹大。

  • 生产环境抓包怎么合规操作? 变更窗口内操作;只抓目标端口与主机;限时限量滚动存储;不主动解密敏感流量;抓完校验后删除;全程留操作审计记录。

自测三问

  1. open、closed、filtered 分别意味着什么?
  2. 为什么 Redis 6379 暴露公网通常比 MySQL 3306 更危险?至少说两个原因。
  3. tcpdump 捕获过滤和 Wireshark 显示过滤的语法差别是什么?

小结一句话

nmap 画出攻击面地图,tcpdump / Wireshark 还原流量真相;防御的第一步永远是「关上不该开的门,加密必经的路」。

延伸

  • Nmap 官方参考手册
  • Wireshark 官方用户指南
  • 下一课:Linux 系统加固——从账号、SSH 到审计的落地命令。
加载本节练习…
← 上一课安全职业与 IT 基础下一课 →操作系统加固