# 计算机网络基础 · 网络安全方向

> **前置要求**：会使用 Linux 基本命令  
> **配套工具**：Wireshark、Nmap、Burp Suite、curl

---

## 目录

1. [为什么安全人员必须懂网络](#1-为什么安全人员必须懂网络)
2. [网络分层模型（安全视角）](#2-网络分层模型安全视角)
3. [IP 地址与子网（扫描与内网渗透基础）](#3-ip-地址与子网扫描与内网渗透基础)
4. [ARP 与 ICMP（信息收集与欺骗）](#4-arp-与-icmp信息收集与欺骗)
5. [TCP 与 UDP（端口扫描与攻击面）](#5-tcp-与-udp端口扫描与攻击面)
6. [常见端口与服务速查表](#6-常见端口与服务速查表)
7. [HTTP / HTTPS（Web 安全基石）](#7-http--httpsweb-安全基石)
8. [DNS（信息收集与劫持）](#8-dns信息收集与劫持)
9. [其他高危协议与服务](#9-其他高危协议与服务)
10. [NAT、防火墙与边界突破](#10-nat防火墙与边界突破)
11. [代理、VPN 与流量走向](#11-代理vpn-与流量走向)
12. [安全人员必备网络命令](#12-安全人员必备网络命令)
13. [Wireshark 抓包入门](#13-wireshark-抓包入门)
14. [典型网络攻击手法概览](#14-典型网络攻击手法概览)
15. [实战练习与自测清单](#15-实战练习与自测清单)

---

## 1. 为什么安全人员必须懂网络

渗透测试的每一步几乎都发生在网络上：

| 阶段 | 网络知识的作用 |
|------|----------------|
| 信息收集 | 判断目标 IP、开放端口、子网范围、DNS 记录 |
| 漏洞利用 | 理解 HTTP 请求结构、协议交互才能构造 Payload |
| 内网渗透 | 划分子网、找网关、横向移动、端口转发 |
| 流量分析 | Wireshark 读包、识别 C2 通信、溯源 |
| 防御绕过 | 理解 WAF/CDN/NAT/防火墙如何改变流量路径 |

**一句话**：不懂网络，只能点工具；懂网络，才知道工具在干什么、为什么失败、怎么改。

---

## 2. 网络分层模型（安全视角）

不需要背 OSI 七层细节，安全人员用 **TCP/IP 四层模型** 即可：

![网络分层 · 安全视角](images/network-security/01-tcpip-layers.png)

```
┌─────────────────────────────────────────┐
│  应用层   HTTP / DNS / FTP / SSH / SMTP  │  ← 漏洞最多（注入、越权、逻辑漏洞）
├─────────────────────────────────────────┤
│  传输层   TCP / UDP                      │  ← 端口扫描、SYN Flood、会话劫持
├─────────────────────────────────────────┤
│  网络层   IP / ICMP / ARP                │  ← 主机发现、路由、ARP 欺骗
├─────────────────────────────────────────┤
│  链路层   以太网 / MAC / 交换机           │  ← 内网嗅探、MAC 欺骗（二层攻击）
└─────────────────────────────────────────┘
```

### 数据封装（读包时必须理解）

![数据封装过程](images/network-security/02-encapsulation.png)

```
应用数据
  → TCP/UDP 段（加源端口、目的端口）
    → IP 包（加源 IP、目的 IP）
      → 以太网帧（加源 MAC、目的 MAC）
```

**安全意义**：
- Burp 看到的是 **应用层**
- Nmap 扫描的是 **传输层端口**
- ARP 欺骗发生在 **链路层 / 网络层交界**
- Wireshark 可以从任意层过滤和分析

---

## 3. IP 地址与子网（扫描与内网渗透基础）

### 3.1 IPv4 结构

IPv4 地址 32 位，通常写作四段十进制，如 `192.168.1.100`。

### 3.2 公网 IP vs 私网 IP

![公网 · 私网 · 子网扫描](images/network-security/03-public-private-subnet.png)

| 类型 | 地址范围 | 安全场景 |
|------|----------|----------|
| 公网 IP | 全球唯一，可直接从互联网访问 | 外网渗透的直接目标 |
| 私网 IP | `10.0.0.0/8`、`172.16.0.0/12`、`192.168.0.0/16` | 内网主机，需先打穿边界 |
| 环回 | `127.0.0.1` | 本地服务（数据库、Redis 误绑定） |

**实战要点**：
- 扫描到 `10.x`、`172.16-31.x`、`192.168.x` → 说明已进入内网或目标是内网地址
- 服务只监听 `127.0.0.1` → 外网无法直接访问，需 SSRF 或端口转发

### 3.3 子网掩码与 CIDR

```
192.168.1.0/24  →  256 个地址（192.168.1.0 ~ 192.168.1.255）
192.168.0.0/16  →  65536 个地址
```

**渗透中的用途**：
- 拿到一个内网 IP 后，推断所在网段，批量扫描存活主机
- 例：本机 `192.168.1.105/24` → 扫描 `192.168.1.0/24`

```bash
# Nmap 扫描整个 C 段
nmap -sn 192.168.1.0/24

# 快速扫描常见端口
nmap -sS -T4 192.168.1.0/24
```

### 3.4 默认网关

网关是子网出口，通常是 `.1` 或 `.254`（如 `192.168.1.1`）。

- 内网渗透：控制网关 = 可 MITM 整个子网流量
- 路由追踪：判断流量出网路径

---

## 4. ARP 与 ICMP（信息收集与欺骗）

### 4.1 ARP 协议

**作用**：将 IP 地址解析为 MAC 地址（局域网内通信必需）。

```
主机 A 想知道 192.168.1.1 的 MAC
  → 广播 ARP 请求："谁是 192.168.1.1？"
  → 192.168.1.1 回复 MAC 地址
  → A 写入 ARP 缓存表
```

**安全威胁：ARP 欺骗（ARP Spoofing）**

![ARP 欺骗 · 中间人攻击](images/network-security/04-arp-spoofing.png)

攻击者伪造 ARP 回复，告诉受害者"网关的 MAC 是我"→ 流量被劫持 → **中间人攻击（MITM）**。

常用工具：`ettercap`、`arpspoof`、Bettercap

**防御**：静态 ARP 绑定、DAI（动态 ARP 检测）、网络隔离

### 4.2 ICMP 协议

最常见：`Ping`（Echo Request / Echo Reply）

| 用途 | 命令 |
|------|------|
| 主机存活探测 | `ping 192.168.1.1` |
| 路径追踪 | `traceroute` / `tracert` |
| Nmap 主机发现 | `nmap -sn`（发送 ICMP Echo） |

**注意**：很多防火墙会禁 Ping，主机不响应 Ping ≠ 主机不存在。需结合 TCP/UDP 探测。

---

## 5. TCP 与 UDP（端口扫描与攻击面）

### 5.1 TCP：面向连接、可靠传输

#### 三次握手（必须会画、会在 Wireshark 里认）

![TCP 三次握手](images/network-security/05-tcp-handshake.png)

```
客户端                         服务器
   │  ──── SYN ────────────►   │   第1次：客户端发起连接
   │  ◄─── SYN + ACK ───────   │   第2次：服务器确认
   │  ──── ACK ────────────►   │   第3次：客户端确认
   │        连接建立            │
```

#### 四次挥手（断开连接）

了解即可，安全场景较少直接涉及。

#### TCP 安全相关特性

| 特性 | 安全意义 |
|------|----------|
| 端口 | 服务的"门牌号"，扫描端口 = 找攻击面 |
| 序列号 | 会话劫持需预测或劫持序列号 |
| 状态机 | SYN 半开连接 → SYN Flood 拒绝服务 |

### 5.2 UDP：无连接、不保证送达

- 无握手，扫描更快，但结果可能不准确
- 常见：DNS（53）、SNMP（161）、DHCP（67/68）
- UDP 扫描：`nmap -sU -p 53,161 目标IP`（较慢）

### 5.3 Nmap 扫描类型（安全人员必会）

| 扫描方式 | 参数 | 原理 | 特点 |
|----------|------|------|------|
| TCP SYN 扫描 | `-sS` | 半开扫描，不完成三次握手 | 默认推荐，较隐蔽 |
| TCP Connect | `-sT` | 完成完整三次握手 | 较慢，但不需要 root |
| UDP 扫描 | `-sU` | 向 UDP 端口发探测包 | 很慢 |
| 版本探测 | `-sV` | 识别服务版本 | 找已知 CVE |
| 脚本扫描 | `-sC` | 运行默认 NSE 脚本 | 自动化漏洞检测 |

```bash
# 实战常用组合
nmap -sS -sV -sC -O -p- 10.10.10.5
# -p- 表示扫描全部 65535 端口
```

### 5.4 端口状态

| 状态 | 含义 |
|------|------|
| open | 有服务在监听，攻击面 |
| closed | 端口可达，但无服务监听 |
| filtered | 被防火墙过滤，无法判断 |
| open\|filtered | UDP 扫描常见，开放或被过滤 |

---

## 6. 常见端口与服务速查表

**必须熟记的高危端口**（渗透测试每日使用）：

![高危端口速查](images/network-security/06-danger-ports.png)

| 端口 | 协议 | 服务 | 常见漏洞/利用 |
|------|------|------|---------------|
| 21 | TCP | FTP | 匿名登录、弱口令、文件上传 |
| 22 | TCP | SSH | 弱口令、密钥泄露、CVE |
| 23 | TCP | Telnet | 明文传输、弱口令 |
| 25 | TCP | SMTP | 用户枚举、邮件伪造 |
| 53 | TCP/UDP | DNS | 区域传送、DNS 劫持 |
| 80 | TCP | HTTP | Web 漏洞（注入、XSS、上传…） |
| 110 | TCP | POP3 | 弱口令 |
| 135 | TCP | MSRPC | 内网横向（Windows） |
| 139 | TCP | NetBIOS | 信息泄露 |
| 143 | TCP | IMAP | 弱口令 |
| 443 | TCP | HTTPS | Web 漏洞（加密传输） |
| 445 | TCP | SMB | 永恒之蓝、横向移动、密码喷洒 |
| 1433 | TCP | MSSQL | 弱口令、命令执行 |
| 1521 | TCP | Oracle | 弱口令 |
| 3306 | TCP | MySQL | 弱口令、UDF 提权 |
| 3389 | TCP | RDP | 弱口令、BlueKeep |
| 5432 | TCP | PostgreSQL | 弱口令 |
| 5900 | TCP | VNC | 弱口令、未授权 |
| 6379 | TCP | Redis | 未授权访问、写 SSH 公钥 |
| 8080 | TCP | HTTP-Proxy | Web 管理后台、Tomcat |
| 27017 | TCP | MongoDB | 未授权访问 |

```bash
# 快速扫描 Top 1000 端口 + 服务识别
nmap -sS -sV --top-ports 1000 目标IP
```

---

## 7. HTTP / HTTPS（Web 安全基石）

![HTTP / HTTPS · Web 安全基石](images/network-security/07-http-https.png)

### 7.1 HTTP 请求结构

```http
GET /login.php?user=admin HTTP/1.1
Host: target.com
User-Agent: Mozilla/5.0
Cookie: session=abc123
Referer: https://target.com/
Accept: text/html
```

```http
POST /api/login HTTP/1.1
Host: target.com
Content-Type: application/json
Content-Length: 42

{"username":"admin","password":"123456"}
```

**安全人员必须熟悉的字段**：

| 字段 | 安全用途 |
|------|----------|
| Host | Host 头攻击、虚拟主机碰撞 |
| Cookie | 会话劫持、越权 |
| User-Agent | WAF 绕过、爬虫识别 |
| Referer | CSRF 校验绕过 |
| X-Forwarded-For | 伪造客户端 IP |
| Authorization | Basic/Bearer Token 认证 |
| Content-Type | 文件上传类型绕过 |

### 7.2 HTTP 方法

| 方法 | 用途 | 安全风险 |
|------|------|----------|
| GET | 获取资源 | 参数暴露在 URL、缓存 |
| POST | 提交数据 | 注入、CSRF |
| PUT | 上传/替换资源 | 任意文件写入 |
| DELETE | 删除资源 | 越权删除 |
| OPTIONS | 查询支持的方法 | 信息泄露 |
| PATCH | 部分更新 | 逻辑漏洞 |

### 7.3 HTTP 状态码（安全相关）

| 状态码 | 含义 | 渗透意义 |
|--------|------|----------|
| 200 | 成功 | 正常响应 |
| 301/302 | 重定向 | 开放重定向漏洞 |
| 401 | 未认证 | 需要登录 |
| 403 | 禁止访问 | 目录/文件可能存在（枚举） |
| 404 | 未找到 | 隐藏路径探测 |
| 500 | 服务器错误 | 可能存在注入（报错信息） |

### 7.4 HTTPS 与 TLS

```
HTTP  +  TLS 加密层  =  HTTPS（默认端口 443）
```

**握手过程（了解即可）**：
1. Client Hello（支持的加密套件）
2. Server Hello（选定加密套件 + 证书）
3. 密钥交换
4. 加密通信开始

**安全测试要点**：
- 证书无效 / 自签名 → 可能存在中间人风险
- 老旧 TLS 版本（TLS 1.0/1.1）→ 降级攻击
- Burp 抓 HTTPS：需安装 Burp CA 证书到浏览器

### 7.5 抓包与改包工具

| 工具 | 用途 |
|------|------|
| Burp Suite | Web 渗透核心，拦截/改包/重放 |
| curl | 命令行快速发请求 |
| wget | 下载文件 |
| Postman | API 测试 |

```bash
# 查看完整 HTTP 交互
curl -v http://target.com/

# 带 Cookie 和自定义 Header
curl -H "Cookie: session=xxx" -H "X-Forwarded-For: 127.0.0.1" http://target.com/admin
```

---

## 8. DNS（信息收集与劫持）

### 8.1 DNS 解析流程

![DNS 解析与劫持](images/network-security/08-dns-resolve.png)

```
浏览器输入 www.example.com
  → 查本地缓存
  → 问递归 DNS 服务器（如 8.8.8.8）
  → 问根域名服务器 → .com 服务器 → example.com 权威服务器
  → 返回 IP 地址
```

### 8.2 常见 DNS 记录（信息收集必查）

| 记录 | 含义 | 安全用途 |
|------|------|----------|
| A | 域名 → IPv4 | 获取真实 IP（绕过 CDN） |
| AAAA | 域名 → IPv6 | 双栈环境攻击面 |
| CNAME | 域名别名 | 子域名接管（Subdomain Takeover） |
| MX | 邮件服务器 | 邮件相关攻击面 |
| TXT | 文本记录 | SPF/DKIM、验证 token 泄露 |
| NS | 域名服务器 | 域传送漏洞 |
| SOA | 域权威信息 | 信息收集 |

```bash
# 查询 A 记录
dig example.com A
nslookup example.com

# 查询所有记录
dig example.com ANY

# 尝试 DNS 区域传送（经典漏洞）
dig axfr @ns1.example.com example.com
```

### 8.3 DNS 相关攻击

| 攻击 | 原理 |
|------|------|
| DNS 劫持 | 篡改 DNS 响应，指向恶意 IP |
| DNS 欺骗 | 伪造 DNS 回复（中间人场景） |
| 子域名接管 | CNAME 指向已释放的第三方服务 |
| DNS 隧道 | 通过 DNS 查询外传数据（绕过防火墙） |

---

## 9. 其他高危协议与服务

### 9.1 SSH（22）

- 加密远程管理，替代 Telnet
- 风险：弱口令、密钥泄露、`~/.ssh/authorized_keys` 写公钥提权
- 隧道：`ssh -L` / `ssh -R` / `ssh -D`（端口转发与代理，内网渗透核心技能）

```bash
# 本地端口转发：把远程 3306 映射到本地 3306
ssh -L 3306:127.0.0.1:3306 user@jump-server

# 动态 SOCKS 代理
ssh -D 1080 user@jump-server
```

### 9.2 FTP（21）

- 明文传输（含用户名密码）
- 风险：匿名登录、`PUT` 上传 Webshell

### 9.3 SMB（445）

- Windows 文件共享
- 内网渗透核心协议：PTH（Pass-the-Hash）、PTT（Pass-the-Ticket）、永恒之蓝

### 9.4 DHCP（67/68）

- 自动分配 IP
- 风险：伪造 DHCP 服务器 → 指定恶意 DNS 和网关（MITM）

### 9.5 SNMP（161，UDP）

- 网络设备管理协议
- 风险：Community String 默认 `public`/`private` → 信息泄露

---

## 10. NAT、防火墙与边界突破

![NAT 与反弹 Shell](images/network-security/10-nat-reverse-shell.png)

### 10.1 NAT（网络地址转换）

```
内网主机 192.168.1.100  →  NAT 路由器  →  公网 IP 1.2.3.4
（多个私网 IP 共用一个公网 IP 出网）
```

**安全意义**：
- 内网主机默认不被外网直接访问（保护）
- 出网连接可以，入站连接被挡（状态防火墙）
- 渗透突破：反弹 Shell（目标主动连攻击者）、DNS/ICMP 隧道

### 10.2 防火墙

| 类型 | 工作层 | 能力 |
|------|--------|------|
| 包过滤防火墙 | 网络层/传输层 | 按 IP、端口过滤 |
| 状态防火墙 | 传输层 | 跟踪连接状态，只允许回程流量 |
| WAF | 应用层 | 检测 HTTP 攻击特征（SQL 注入、XSS） |

**绕过思路**：
- 换端口（8080、8443、8000）
- 分块传输、编码绕过 WAF
- 寻找直连 IP 绕过 CDN/WAF

### 10.3 边界常见架构

![边界架构 · 外网到内网](images/network-security/09-dmz-boundary.png)

```
互联网 → 防火墙 → DMZ（Web/邮件/VPN） → 内网防火墙 → 内网
```

- **外网渗透**：打 DMZ 上的公开服务
- **内网渗透**：从 DMZ 跳板进内网，横向移动

---

## 11. 代理、VPN 与流量走向

### 11.1 代理类型

| 类型 | 说明 | 工具 |
|------|------|------|
| HTTP 代理 | 代理 HTTP 流量 | Burp、Fiddler |
| SOCKS5 代理 | 代理任意 TCP/UDP | proxychains、Chisel |
| 反向代理 | 服务器端代理 | Nginx、FRP（内网穿透） |

```bash
# 通过 Burp 代理发请求
curl -x http://127.0.0.1:8080 http://target.com

# proxychains 让任意工具走 SOCKS
proxychains nmap -sT 10.0.0.5
```

### 11.2 VPN

- 建立加密隧道，使远程主机"逻辑上"进入内网
- 渗透场景：拿到 VPN 账号 = 直接进入内网
- 常见：IPSec VPN、SSL VPN（如 Pulse Secure、Fortinet）

### 11.3 内网穿透（渗透必会概念）

| 工具 | 用途 |
|------|------|
| frp / ngrok | 把内网服务映射到公网 |
| Chisel / Ligolo | 内网 SOCKS 隧道 |
| ssh -R | 反向 SSH 隧道 |

---

## 12. 安全人员必备网络命令

### 12.1 查看本机网络

```bash
# Linux
ip addr                    # 查看 IP 地址
ip route                   # 查看路由表
cat /etc/resolv.conf       # DNS 服务器

# Windows
ipconfig /all
route print
```

### 12.2 查看连接与监听端口

```bash
# Linux
ss -tlnp                  # TCP 监听端口
ss -an | grep ESTAB       # 已建立连接
netstat -tlnp             # 同上（较旧）

# Windows
netstat -ano
```

### 12.3 连通性测试

```bash
ping 目标IP
traceroute 目标IP          # Linux
tracert 目标IP             # Windows
telnet 目标IP 80           # 测试端口是否开放
nc -zv 目标IP 80           # 同上（推荐）
```

### 12.4 端口扫描

```bash
nmap -sS -sV 目标IP
masscan -p1-65535 10.0.0.0/8 --rate=1000   # 超高速（慎用）
```

### 12.5 DNS 查询

```bash
dig domain.com
host domain.com
nslookup domain.com
whois domain.com           # 域名注册信息
```

### 12.6 HTTP 请求

```bash
curl -v http://target.com
curl -X POST -d "user=admin&pass=123" http://target.com/login
wget -r http://target.com  # 递归下载（爬虫）
```

---

## 13. Wireshark 抓包入门

### 13.1 为什么安全人员必须会抓包

- 看清"真实"的网络交互（不被应用层掩盖）
- 分析恶意流量、C2 通信
- 验证漏洞利用是否成功
- 学习协议细节

### 13.2 常用过滤表达式

```
# 按 IP 过滤
ip.addr == 192.168.1.100

# 按端口
tcp.port == 80
tcp.port == 443

# 按协议
http
dns
tcp

# 组合
ip.addr == 10.0.0.5 && tcp.port == 445

# 只看 HTTP 请求
http.request

# 按 HTTP 方法
http.request.method == "POST"
```

### 13.3 分析 TCP 三次握手

1. 过滤器输入 `tcp.flags.syn == 1`
2. 找到 SYN → SYN-ACK → ACK 三个包
3. 右键 → Follow → TCP Stream 查看完整会话

### 13.4 分析 HTTP 明文

- 过滤器：`http`
- 若 HTTPS：需配置 SSLKEYLOGFILE 或在中间人代理后抓包

---

## 14. 典型网络攻击手法概览

| 攻击 | 层次 | 原理 | 防御 |
|------|------|------|------|
| 端口扫描 | 传输层 | 探测开放端口和服务 | 防火墙、端口敲门 |
| ARP 欺骗 | 链路层 | 伪造 MAC 映射 | 静态 ARP、端口安全 |
| 中间人（MITM） | 多层 | 劫持通信路径 | HTTPS、证书锁定 |
| SYN Flood | 传输层 | 耗尽连接资源 | SYN Cookie、限速 |
| DNS 欺骗 | 应用层 | 返回恶意 IP | DNSSEC、DoH |
| 会话劫持 | 传输/应用层 | 窃取 Cookie/Token | HttpOnly、Secure |
| 重放攻击 | 应用层 | 重复发送合法请求 | 时间戳、Nonce |
| SSRF | 应用层 | 让服务器代发请求 | 白名单校验 URL |
| 反弹 Shell | 多层 | 内网主动连外网 | 出站流量监控 |

---

## 15. 实战练习与自测清单

### 15.1 实验环境建议

```
[ Kali 攻击机 ]  ←→  [ 靶机 / Metasploitable / DVWA ]
     192.168.56.101       192.168.56.102
```

网络模式推荐 VirtualBox **Host-Only** 或 **Internal Network`。

### 15.2 练习任务

- [ ] 用 `ip addr` 查看本机 IP，判断是公网还是私网
- [ ] 用 `nmap -sn` 扫描同网段存活主机
- [ ] 用 `nmap -sS -sV` 扫描靶机，记录所有 open 端口
- [ ] 用 `curl -v` 手动发一条 HTTP GET，读懂响应头
- [ ] 用 Burp 拦截一条登录请求，修改参数后重放
- [ ] 用 Wireshark 抓包，找到 TCP 三次握手并截图
- [ ] 用 `dig` 查询某域名的 A、MX、TXT 记录
- [ ] 用 `ssh -L` 做一次本地端口转发
- [ ] 解释 NAT 为什么能阻止外网直接访问内网主机
- [ ] 说出 445、3389、6379 端口分别对应什么服务、有什么风险

### 15.3 自测标准（L0 网络部分）

- [ ] 能独立解释 TCP 三次握手，并在 Wireshark 指认 SYN / SYN-ACK / ACK
- [ ] 能手工构造 HTTP GET 请求并读懂响应
- [ ] 能区分公网 IP、私网 IP、环回地址
- [ ] 能根据 CIDR 计算网段范围
- [ ] 能使用 Nmap 完成一次完整的主机发现 + 端口扫描 + 服务识别
- [ ] 能说出至少 10 个常见端口及其安全风险

---

## 附录 A：本章 deliberately 不讲的内容

以下内容属于通用计算机网络课程，与攻防关联较弱，**本课件不做展开**：

- OSI 七层逐层物理细节（电缆、编码方式）
- 路由协议（RIP、OSPF、BGP）
- 交换机组网、生成树协议（STP）
- 5G、SDN、NFV、网络切片
- 云计算 IaaS/PaaS/SaaS 概念
- 网络性能指标（吞吐量公式推导等）

如需以上知识，请参考通用计算机网络教材；安全方向掌握本文内容即可进入下一阶段。

---

## 附录 B：推荐后续学习

| 方向 | 对应课程 |
|------|----------|
| Web 渗透 | 信息收集、Burp 实战、OWASP Top 10 |
| 内网渗透 | 内网渗透与外网渗透对比、C#/.NET 内网渗透 |
| 流量分析 | 网络安全溯源、Wireshark 进阶 |
| 编程自动化 | Python 网络安全学习大纲 |

