最近在公司总是被一个机器尝试弱口令登陆共享文件夹,初步猜测是谁的电脑中病毒了。。尝试了Ping它的IP发现还Ping不通。然后就开启了无聊乱Ping模式。。突然ping通了一台手里被TCP阻断的机器,突发奇想ICMP我们是不是可以好好利用一下?于是有意思的事情就来了。

以下是维基百科对ICMP的解释:

互联网控制消息协议(英語:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。它用于网际协议(IP)中发送控制消息,提供可能发生在通信环境中的各种问题反馈。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。

ICMP 依靠IP來完成它的任务,它是IP的主要部分。它与传输协议(如TCPUDP)显著不同:它一般不用于在两点间传输数据。它通常不由网络程序直接使用,除了 ping 和 traceroute 这两个特別的例子。 IPv4中的ICMP被称作ICMPv4,IPv6中的ICMP则被称作ICMPv6

而ICMP Tunnel又是啥呢?就是说,在一个”封闭”网络中,所有端口都封了,但只要你能Ping出去,你就能通过这个Ping发出的ICMP包上网了。

顾名思义,其实就是把TCP/IP Suite 上层的包放到ICMP包里面,利用ICMP echo request 和 echo reply 来进行通信。

原理:简单的理解就是在客户端借助icmp协议把想要发送的信息包装起来,到了服务器进行解包,返回时同样用icmp协议包装信息,送达客户端再解包,实现信息交流。

所以,只要外侧服务器Ping的通,我们完全可以在本地和外侧服务器之间建立一个ICMP隧道,把TCP、UDP、Sock5伪装成ICMP,达到科学上网、拯救被TCP阻断的小鸡、校园网免流等等目的。 😀 (不要做坏事哦


这次我们用一台Debian 10做演示吧。

首先ssh上VPS,依次输入以下命令,先更新一下资源列表,然后再安装一些必要的工具:

这里我们用pingtunnel来伪装流量,依次输入以下命令,在opt目录下创建pingtunnel目录,利用wget下载Pingtunnel的二进制文件到/opt/pingtunnel/目录下并进行解压:

接下来利用supervisor管理pingtunnel进程。

supervisor是一个Linux/Unix系统上的进程监控工具,supervisor是一个Python开发的通用的进程管理程序,可以管理和监控Linux上面的进程,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。不过同daemontools一样,它不能监控daemon进程。
输入以下命令,用nano新建一个supervisor的配置文件:
在该配置文件内输入以下内容:
输入完后按Ctrl + X,再输入Y,按回车即可保存。

输入以下命令更新一下supervisor配置:

此时应该会提示“加入到进程组”就对了。

然后可以输入以下命令查看一下pingtunnel的运行状态:

看到类似如下回显就说明服务端配置成功了:


接下来配置客户端。

到github去下载相应客户端:https://github.com/esrrhs/pingtunnel/releases

然后解压,进入文件夹,不要点开.exe文件。

打开cmd或者powershell之类的,切换到此目录下。这里教你们一个小技巧:在文件所在位置相应界面下,直接在上面的框框里输入cmd,回车,便可直接在这个目录下打开命令行终端,如下图:

看,命令提示符前已经在该目录下了~ 😉

在这个目录下,输入以下命令,即可建立起一个ICMP隧道:

看到cmd有一大堆回显在不停刷新就对了。。(cmd不建议先关掉,扔在最小化运行就行了)


然后我们在Chrome里下载SwitchyOmega这个插件,老司机应该早就有了,就是它↓

然后我们在SwitchyOmega里设置一个socks5代理即可:

  1. 点击左侧新建情景模式,随便取一个名字,比如我的就叫ICMP tunnel了。
  2. 如下图这样,协议选择socks5,服务器填本地127.0.0.1,端口是本地pingtunnel 4455端口。
  3. 点击左侧应用选项即可。

然后点击浏览器右上的SwitchyOmega黑色小圆圈图标,选中新添加的代理即可。

测试了下连接速度,也就吶央儿吧。。 😕 当然,也可能是和我在晚高峰时期测试的,并且用的是V站洛杉矶3.5美金的辣鸡机器有关。。

当然,这么用嫌麻烦的话,可以套个shadowsocks,我就不再赘述了~

最后,欢迎打赏(*^_^*)