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

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

内容简介:为了方便管理家里的无线路由器,特意在无线路由器的设置里开通了外网访问功能,但最新发现外网无论如何也无法远程访问无线路由器。刚开始以为无线路由器出现故障,后来经过调查才发现联通封锁了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端口的封锁》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

PHP经典实例(第3版)

PHP经典实例(第3版)

David Sklar、Adam Trachtenberg / 苏金国、丁小峰 / 中国电力出版社 / 2015-7 / 128.00

想要掌握PHP编程技术?或者想要学习如何完成一个特定的任务?那么一定要先看看《PHP经典实例(第3版)》。本书介绍了专门为PHP 5.4和5.5修订的350个经典技巧,并提供了丰富的示例代码。特别是对生成动态Web内容的解决方案做了全面更新,从使用基本数据类型到查询数据库,从调用RESTful API到测试和保护网站安全都有涵盖。 各个技巧都提供了示例代码,可以免费使用,另外还讨论了如何解决......一起来看看 《PHP经典实例(第3版)》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具