icmptunnel 是一款将 IP 流量封装在 ICMP 回显请求和响应(ping)数据包内的隧道工具。它的用途是以半隐蔽方式绕过防火墙,例如在允许 ping 的网络内部进行横向渗透时。它也可能用于从企业网络向 Internet 出口,尽管在网络边界过滤 ICMP 回显流量的情况相当常见。
虽然已有几款现有工具实现了这种技术,但 icmptunnel 提供了更可靠的协议,以及一种能够穿越状态防火墙和 NAT 的隧道机制。
该工具使用普通的 Makefile 进行编译和安装。
使用 make 编译 icmptunnel。
首先,在客户端和服务器上禁用 ICMP 回显响应。这可以防止内核自行响应 ping 数据包。
# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
在服务器端,以服务器模式启动 icmptunnel,并为新的隧道接口分配 IP 地址。
# ./icmptunnel –s
opened tunnel device: tun0
(ctrl-z)
# bg
# /sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0
在客户端,将 icmptunnel 指向服务器,并分配 IP 地址。
# ./icmptunnel <server>
opened tunnel device: tun0
connection established.
(ctrl-z)
# bg
# /sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0
此时,您应该已经拥有一个通过 ICMP 数据包工作的点对点隧道。服务器端为 10.0.0.1,客户端为 10.0.0.2。在客户端上,尝试通过 SSH 连接到服务器:
# ssh [email protected]
Password:
要将远程服务器用作加密的 SOCKS 代理:
# ssh -D 8080 -N [email protected]
Password:
现在将您的 Web 浏览器指向本地 SOCKS 服务器。
有关选项列表,请参阅 ./icmptunnel -h。
请将任何缺陷报告到 Github 项目页面: