借助树莓派自己写代码突破联通对80端口的封锁

栏目: 软件资讯 · 发布时间: 5年前

内容简介:为了方便管理家里的无线路由器,特意在无线路由器的设置里开通了外网访问功能,但最新发现外网无论如何也无法远程访问无线路由器。刚开始以为无线路由器出现故障,后来经过调查才发现联通封锁了80端口导致无法通过外网访问无线路由器的管理界面。作为一个“程序猿”,本着“编码改变生活”的原则,决定通过编码来突破联通对80端口的封锁。在实现的过程中,也遇到过一些麻烦,分享出来可以使后来人少走弯路。首先在路由器上将树莓派设置为DMZ主机,这样做可以使外网访问到树莓派。然后在树莓派上搭建端口映射服务,使外网对树莓派特定端口的访

*本文作者:xutiejun,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

为了方便管理家里的无线路由器,特意在无线路由器的设置里开通了外网访问功能,但最新发现外网无论如何也无法远程访问无线路由器。刚开始以为无线路由器出现故障,后来经过调查才发现联通封锁了80端口导致无法通过外网访问无线路由器的管理界面。作为一个“程序猿”,本着“编码改变生活”的原则,决定通过编码来突破联通对80端口的封锁。在实现的过程中,也遇到过一些麻烦,分享出来可以使后来人少走弯路。

一、硬件环境:

1.联通宽带(独享公网IP)
2.TPLINK无线路由器
3.树莓派

二、开发思路:

首先在路由器上将树莓派设置为DMZ主机,这样做可以使外网访问到树莓派。然后在树莓派上搭建端口映射服务,使外网对树莓派特定端口的访问映射到无线路由器的80端口。思路如下图。

借助树莓派自己写代码突破联通对80端口的封锁

三、开发过程:

1 将树莓派设置为DMZ主机

如下图所示。

借助树莓派自己写代码突破联通对80端口的封锁

2 将树莓派设置为固定静态IP

有必要将树莓派设置为固定静态IP,这样可以防止树莓派的IP变化。

设置方法如下 图所示。

借助树莓派自己写代码突破联通对80端口的封锁

3 在树莓派上搭建端口映射服务

本人比较熟悉C++语言,所以本次端口映射服务会用C++语言实现。

简单介绍下端口映射的概念。

端口映射就是将端口映射服务主机的特定端口映射到局域网中另外一台机器上,当用户访问 端口映射服务主机 的特定端口时,服务器自动将请求映射到对应局域网分机。

80端口一般提供的是HTTP服务,下面简单介绍一下HTTP协议。

HTTP是一个属于应用层的面向对象的协议,基于TCP/IP通信协议来传递数据。HTTP协议永远都是客户端发起请求,服务器回送响应。

http协议图如下。

借助树莓派自己写代码突破联通对80端口的封锁

http请求-响应模型图如下。

借助树莓派自己写代码突破联通对80端口的封锁

我设计的端口映射服务的 详细 处理流程如下:

1.树莓派上(192.168.1.101)监听的端口为8081。(不用8080,是因为有时8080也会被查封)
2.当树莓派监听到8081端口有请求时,与路由器(192.168.1.1)的80端口建立TCP连接,并把请求数据原封不动地传递给路由器。
3.当收到路由器的应答消息时,将应答消息原封不动地通过TCP连接传递给请求者。

为了支持多用户同时访问的情况, 当树莓派监听到8081端口有请求时,务必要创建一个新的线程,来执行上面的步骤2和步骤3,这一样就可以多用户同时访问了。

按照上面的思路编码后发现出现了问题。

虽然可以进入登录画面(见下图)。 借助树莓派自己写代码突破联通对80端口的封锁

但输入完登录密码,却进不了管理页面,返回如下错误见下图。 借助树莓派自己写代码突破联通对80端口的封锁

当时不清楚为什么会这样,决定用wireshark软件对正常访问和异常访问进行抓包进行对比,找出异常点。

通过抓包发现:

正确时,HTTP的HEAD头部情报如下图所示。

借助树莓派自己写代码突破联通对80端口的封锁

本次错误时, HTTP的HEAD头部情报如下图所 示。 借助树莓派自己写代码突破联通对80端口的封锁

对比发现HEAD中的Host字段和Referer字段的情报存在差异。

后来通过一些列的调试,最终发现,Host字段必须是路由器的IP地址,否则访问路由器会出现异常。Referer字段中跳转IP地址必须为路由器的IP,否则访问路由器会出现异常。

所以当端口映射服务收到请求时,需要将 Host字段、 Referer字段中出现的IP地址强制修改为路由器的IP,这就就可以成功访问路由器了。

将端口映射服务的 详细 处理流程修改一下,如下:

1.树莓派上(192.168.1.101)监听的端口为8081。(不用8080,是因为有时8080也会被查封)
2.当树莓派监听到8081端口有请求时,与路由器(192.168.1.1)的80端口建立TCP连接,并把请求数据中Host、Referer字段中的IP强制修改为路由器的IP,再将数据传递给路由器。
3.当收到路由器的应答消息时,将应答消息原封不动地通过TCP连接传递给请求者。

到此整个端口映射服务就可以正常工作了。

整个 端口映射服务 代码已经发到了百度网盘上。

链接: https://pan.baidu.com/s/1UnnyIIGN87GMMRH6Um_a6A 密码: huxt

四、结尾

突破80端口的方法有很多种,虽然本次使用的不是最简单的那种,但通过自己动手解决问题会使自己有很大的成就感 。

最后引用王明阳的一句话与读者共勉。

“知行合一”

*本文作者:xutiejun,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。


以上所述就是小编给大家介绍的《借助树莓派自己写代码突破联通对80端口的封锁》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程真好玩

编程真好玩

[英] 乔恩·伍德科克 / 余宙华 / 南海出版公司 / 2017-8-1 / 88.00元

在美国,编程已进入幼儿园和中小学课堂,是备受欢迎的课程之一。 在英国,编程被列入国家教学大纲,成为6~15岁孩子的必修课。 在芬兰,编程理念融入了小学的各门课程,孩子们可以随时随地学编程。 编程已经成为世界的通用语言,和听、说、读、写、算一样,是孩子必须掌握的技能。 Scratch是美国麻省理工学院设计开发的可视化少儿编程工具,全球1500多万孩子正在学习使用。它把枯燥乏味......一起来看看 《编程真好玩》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

SHA 加密
SHA 加密

SHA 加密工具