实验一个 ICMP Tunnel

2012年5月11日 | 分类: 翻墙相关 | 标签: , , ,

各式各样的Tunnel其实充满了乐趣

今天下午忙里偷闲玩了玩 ICMP Tunnel

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

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

已经有一位大侠做到了,并且写了个很好用的工具来实现这个tunnel.
PingTunnel

可以来捣鼓一下这个ptunnel.

前提:
1. 有一台可以有root权限的服务器 (暂时叫 S)
2. 本地最好是类UNIX系统,或者装了winpcap的windows. (因为ptunnel依赖libpcap)

=========
1. 先登录到 S, 在上面安装 pingtunnel. (make 即可)
直接运行 sudo ./ptunnel

2. 在本地也装, 假设S的地址是 5.5.5.5, 本地listen端口是8000
运行: ./ptunnel -p 5.5.5.5 -lp 8000 -da 127.0.0.1 -dp 22
(这命令就是说在本地起一个ptunnel, 监听8000端口, 监听来干嘛呢? 就是tunnel给在5.5.5.5上的ptunnel服务器端, 服务器端干什么呢? 就是连接到S自己的22端口 )
所以这里已经在本地跑了一个ptunnel实例,来连接到S的22端口

3. 再 ssh -p 8000 localhost
(连接到刚刚建立的那个ptunnel,其效果就是ssh连接到了5.5.5.5上)
这时就可以用ssh服务了

那如果想要上网呢?
可以这样 ssh -p 8000 -ND 9999 localhost
这样就用ssh建了一个SOCKS代理,该代理通向5.5.5.5。是一个在ICMP Tunnel上的SSH Tunnel.
然后设置浏览器的代理为 SOCK5 , 地址是 localhost, 端口为9999. 就可以上网了。

这样,我们就在一个只能Ping的“封闭”网络中实现了上网需求。

==========

当然,用ICMP Tunnel理论上可以进行任何TCP通信,有兴趣的同学可以继续实验。

来源:http://www.douban.com/note/153932873/

  1. Mr.Koala
    2012年5月11日12:38

      以前看过类似的。

      这样 Ping / Pong 包的身材会暴涨的。GFW 会不会作出响应呢?

  2. 2012年5月11日12:22

    icmp能携带的消息实在太少了,用icmp tunnel进行简单的通信倒是可以

  3. 福音乐章
    2012年5月11日10:50

    我非常喜欢博主的博客。每天都会有好几篇文章。虽然有一些技术性比较强的看不懂。不过总体而言对我帮助挺多的。