### 如果 TCP 和 UDP 不出网怎么绕过

1. 利用 DNS 协议进行隧道传输

DNS 协议是最常见的出网协议之一，很多防火墙为了保证正常的网络解析，都会放行 DNS 流量。因此，我们可以利用 DNS 请求和响应来传输数据

- 工作原理: 我们把需要传输的数据编码成 DNS 域名请求（通常是子域名），发送给一个可控的 DNS 服务器。我们的服务器收到请求后，会解析这些数据，并把响应数据编码在 DNS 回复包中，发回给目标机器
- 常用工具:
  - dnscat2: 这是一个功能强大的 DNS 隧道工具，支持加密和交互式会话，可以建立一个类似 shell 的通道
  - iodine: 另一个流行的 DNS 隧道工具，可以将 IPv4 流量封装在 DNS 请求中

2. 利用 ICMP 协议进行隧道传输

ICMP（互联网控制消息协议）主要用于网络诊断，例如 `ping` 命令就是基于 ICMP 协议。如果网络管理员没有禁用 ICMP，我们可以利用 ICMP 包来传输数据

- 工作原理: 将数据封装在 ICMP Echo 请求或回复的数据载荷中。目标机器发送带有数据的 ICMP 请求到我们的服务器，我们的服务器解析数据并发送 ICMP 回复包，以此实现双向通信
- 常用工具:
  - `icmpsh`: 一个简单的 ICMP shell，可以在两台机器之间建立一个交互式命令行
  - `ptunnel`: 一个 TCP over ICMP 的隧道工具，可以将 TCP 流量通过 ICMP 隧道传输