关于ICMP隧道一点理解(起于修改wien-qq的记住密码)

使用linux半年多以来,一直有一个我很需要但我无法完美解决的东西困扰这我-----(linux QQ)

目前我的解决方案是GitHub上的一个第三方QQ(有关ICMP隧道的搭建见 承,转)

但是第三方总是有些小毛病(无法向个人发送文件)

于是我有走上了那条老路,使用wine来兼容WindowsQQ(这里没有选择deepin-wine,我印象中deepin的wine还停留在2.几)

然后我就遇到了这个跟ICMP有一点点关系的问题(关系不大,但我当时确实是想解决QQ的问题)

wine-qq一直有一个无法解决的问题(无法记住密码),也就是说只要我网一断我就得重新登录一下我的QQ(还要再输一次密码)

我大概分析了一下它的原因:

每次断网重连QQ都会提醒我检查防火墙什么的(wine哪来的防火墙),不过这给了我提示

有可能是断网之后wine重置了分配给QQ的网络资源,导致QQ无法使用原来的网络配置,最终致使QQ无法联网

然后好巧不巧,我发现QQ支持代理这个功能(也就是可以指定QQ的流量使用什么网络配置)然后我用我服务器的代理给QQ挂上了

bingo,我成功了,从此我的wine-QQ可以记住密码了

但是有些人就是上头(me),没有问题也要创造问题

我觉得用服务器的代理太麻烦了(万一服务器到期就没了)

所以我想找一个本地的代理,让我的主机代理主机里wine的QQ

先说一下结果

我没能成功找到我觉得合适的方法(要么就是太占用资源,没必要,要么就是没法用)

buttttt,在找的过程中我发现了这个ICMP隧道代理(扯这么久终于扯到ICMP了)

OK,从这里开始就和linux QQ没任何关系了

首先,什么是ICMP?

举个最简单的栗子,ping的数据包就是通过ICMP协议传输的

........

很明显可以看出来icmp数据包是有一个data部分,而data里面的数据在ping这个指令里就是一堆连续的字符,在Windows里面默认值是"abcdefghijklmn......... hi",一瞬间感觉网络世界好单纯,有意思

不过有默认值那就说明里面填充的data是可以自定义的,

所以我们可以自定义要传输的数据(这就是隧道)然后交给指定的服务端

最后要说道的一个重要的知识点(很重要,那笔记下来):

ICMP的数据包是由系统底层进行处理的一般应用是接触不到icmp数据包(所以icmp数据包可以直接穿透防火墙,是不是有了什么奇妙的想法、注:网络不是什么法外之地)

而且就算服务端收到了你处理好的icmp数据包,它这么知道要去data字段找内容

下面就要说道ICMP隧道最重要的部分了

icmptunnel

这里直接放过地址自己看 https://github.com/DhavalKapil/icmptunnel

 

好的~ 该介绍的知识也介绍的差不多了,那就直接动手

这次我用我主机通过icmp隧道链接我的阿里云服务器

1.关闭系统对icmp数据包的处理机制(这也是为什么icmp隧道能分辨初隧道流量,因为真实的ICMP流量已经被系统忽略了)

这里直接给出命令:

 

sudo su  #进入root用户

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all #这里不要用vim ,nano等打开,只能用echo写入

 

客户端和服务端都要配置,通过icmp_echo_ignore_all很容易理解就是忽略所有的icmp请求

 

2.在服务端启动icmptunnel

下载icmptunnel的文件包,编译好之后(按照github上的步骤编译),进入到icmptunnel可执行文件的位置

 

sudo su     #进入root用户,icmp设局内核层无法在普通用户上操作

./icmptunnel -s &    #开启icmptunnel服务端的进程,它应该会提醒你新建了一个tun0的网卡

ifconfig tun0 110.11.12.1 netmask 255.255.255.0    #配置一下网卡这里ip地址可以随便设,但不要太随便(10.0.0.1最好,我这里就举个栗子),然后子网掩码什么的不懂就直接抄我这份(主要是不想换行写注释)

 

至此服务端就配置好了

 

3客户端链接icmptunnel

同样也是编译好,进入对应文件夹

 

sudo su #进入root用户

./icmptunnel 36.89.42.97 &   #这中间的ip地址是服务端的公网ip,也就是说是我云服务器的ip(当然这里是我编的),运行玩之后应该会告诉你链接成功

ifconfig 110.11.12.2 netmask 255.255.255.0  #注意配置ip是前面三段一定要是一样的(因为这里的子网掩码是255.255.255.0)最后一段任意,如果服务端的是10.0.0.1,这里就是10.0.0.2

 

先不要关闭终端(这个终端还能用,好像关了服务就停了)

至此icmp隧道就完成了,你可以在你的电脑上以110.11.12.1的ip对110.11.12.2(也就是你的云服务器的隧道ip)进行访问,比如说ssh,fth,sftp.....

 

最后我晒一下我的结果

 

 应该都打上码了吧

 

虽然不知道这么就从linuxqq的问题扯到了ICMP隧道,但整一整确实挺有意思的

不过icmp隧道最终也没有用到我的qq上,主要是太麻烦

但有一点确实值得强调(icmp是可以穿过防火墙的),也就是说有可能你的服务器就被别人用icmp隧道控制着你的电脑

当然这个可能性很小,icmp隧道的要求太高了

如果你不放心等话可以检查一下系统是否可以收到ping的数据包,可以收到就说明没有icmp隧道(应该是这样的吧)

 

最后说一下转载我的博客可以直接和我联系,不要直接把别人的博客复制过去然后还TMD投原创

嗯~~,一晚上没睡,现在去补个觉~~~~~

posted @ 2021-11-04 08:17  bighu  阅读(122)  评论(0编辑  收藏  举报