所谓的"端口转发",通俗地说就是让 A 端口监听到的数据转发到 B 监听端口。
举例应用
A 监听端口是翻墙软件开启的端口B 监听端口是新开的,而且绑定地址是 0.0.0.0
如此一来,外部电脑就可以用 B 端口作为代理的端口,数据都发给 B 端口,然后利用"端口转发"功能,把数据转向 A 端口(也就是翻墙工具自身的端口)
如何看本机开启的监听端口
对于 Windows 系统,在命令行窗口(先运行 cmd 就会出现命令行窗口)运行如下命令,可以看到本机开启的所有监听端口。
netstat -an | find "LISTEN"
刚才有读者在留言中提问,俺再补充一下。用 netstat 的 o 选项可以看到每个监听端口分别是哪个进程开启的。命令如下
netstat -ano | find "LISTEN"
什么是监听端口的"绑定地址"
以俺手头的虚拟机为例,执行刚才那个命令后,会显示如下
TCP 127.0.0.1:8118 0.0.0.0:0 LISTENING
其中的 127.0.0.1 表示这个监听端口绑定的网卡地址,而 8118 表示监听的端口号。所谓的"绑定地址",意思就是说,这个监听端口只接受来自该网卡的连接。
因为 127.0.0.1 表示本机网卡地址;所以,绑定在 127.0.0.1 表示该监听端口只接受来自本机的连接。
如果要让某个监听端口接受任意连接(包括外部电脑的连接),可以把绑定地址设置为 0.0.0.0
如何搞端口转发?
用来搞端口转发的工具有很多,如果你去 Google 一下 "TCP proxy" 或 "TCP redirection",应该能找到一大堆软件和解决方案。考虑到很多读者是菜鸟,俺挑选两种最简单的办法。
利用 Windows 自带的 netsh
准备工作
对于 Vista 以及更新版本的 Windows (比如 Win7 Win8 ...)可以直接使用该方案。
对于 Vista 之前的 Windows(比如 WinXP、Win2003),需要先安装 IPv6 协议栈。具体步骤如下:
1. 以管理员身份登录,进入"控制面板"下面的"网络连接"
2. 选中本地连接,点右键,在右键菜单选"属性"
3. 弹出"属性"对话框,点"安装"按钮
4. 弹出"选择网络组件类型"对话框,选"协议",再点"添加"
5. 在弹出的对话框中选"IPv6",点"确定"
命令详解
(以下命令需要管理员身份才能执行)
添加端口转发的命令
netsh interface portproxy add v4tov4 listenport=新开的监听端口 listenaddress=新开端口的绑定地址connectaddress=要转发的地址 connectport=要转发的端口 protocol=tcp
删除端口转发的命令
netsh interface portproxy delete v4tov4 listenport=新开的监听端口 listenaddress=新开端口的绑定地址
命令举例
比方说,俺本地已经运行了 TOR,端口是 8118,绑定在 127.0.0.1
如果俺希望建立一个新的端口,端口号是 12345(这个端口号是俺随手编的,你也可以用其它端口号),绑定在 0.0.0.0
那么就执行如下命令。然后,发往 12345 端口的数据流就会被转发到 8118 端口。
如果俺希望建立一个新的端口,端口号是 12345(这个端口号是俺随手编的,你也可以用其它端口号),绑定在 0.0.0.0
那么就执行如下命令。然后,发往 12345 端口的数据流就会被转发到 8118 端口。
netsh interface portproxy add v4tov4 listenport=12345 listenaddress=0.0.0.0connectaddress=127.0.0.1 connectport=8118 protocol=tcp
为了保险起见,再用前面介绍的 netstat 命令,看一下本机开启的端口。如果正常的话,你就可以看到如下一行
TCP 0.0.0.0:12345 0.0.0.0:0 LISTENING
如果要删除该端口转发,就执行如下命令
netsh interface portproxy delete v4tov4 listenport=12345 listenaddress=0.0.0.0
删除之后,再用 netstat 命令查一下,这个 12345 的监听端口就看不到了
优点
无需安装任何第三方软件
一旦设置好就会持续有效——即使系统重新启动也没关系。
一旦设置好就会持续有效——即使系统重新启动也没关系。
缺点
需要以管理员身份登录,才能执行上述命令。
该方法只能用于 Windows 系统。
该方法只能用于 Windows 系统。
利用 rinetd
获取软件
rinetd 是一个很小巧的、跨平台的、开源的工具,它能提供 TCP 端口转发的功能。它的官网在"这里",上面提供了 Linux 平台和 Windows 平台的软件包。考虑到大多数同学用的是 Windows,俺针对 Windows 的使用介绍一下。
把那个 rinetd.zip 下载到本地,解压出来,里面有好几个文件(包括源代码)。你只需取出其中的 rinetd.exe 其它文件不需要。
把那个 rinetd.zip 下载到本地,解压出来,里面有好几个文件(包括源代码)。你只需取出其中的 rinetd.exe 其它文件不需要。
编写配置文件
rinetd 的配置文件很简单,就是一个普通的文本文件,每一行对应一条转发规则。每一条转发规则包含4个字段,分别如下,字段之间用空格分开。
绑定地址 监听端口 转发的地址 转发的端口
配置文件举例
比方说,俺本地已经运行了 TOR,端口是 8118,绑定在 127.0.0.1
如果俺希望通过 rinetd 建立一个新的端口,端口号是 12345(这个端口号是俺随手编的,你也可以用其它端口号),绑定在 0.0.0.0
那么,转发规则就这么写
如果俺希望通过 rinetd 建立一个新的端口,端口号是 12345(这个端口号是俺随手编的,你也可以用其它端口号),绑定在 0.0.0.0
那么,转发规则就这么写
0.0.0.0 12345 127.0.0.1 8118
运行
把刚才写好的配置文件保存成 config.txt(俺只是举例,你也可以用其它文件名),把该文件跟 rinetd.exe 放到同一个目录。
运行 cmd 进入 Windows 的命令行窗口,然后进入 rinetd.exe 所在的目录,执行如下命令
运行 cmd 进入 Windows 的命令行窗口,然后进入 rinetd.exe 所在的目录,执行如下命令
rinetd.exe -c config.txt
为了保险起见,再用前面介绍的 netstat 命令,看一下本机开启的端口。如果正常的话,你就可以看到如下一行
TCP 0.0.0.0:12345 0.0.0.0:0 LISTENING
优点
该软件很小巧(整个下载包才 100 多 KB),而且是绿色软件。几乎不占用啥系统资源
无需管理员即可运行
跨平台
无需管理员即可运行
跨平台
缺点
每次你关机或用户注销,rinetd 就退出了,下次要重新运行(为了方便,你可以把 rinetd 的启动命令加入 Windows 的启动项)
原文:http://feedproxy.google.com/~r/chinagfwblog/~3/tzwu0cwOTyI/blog-post.html
原文:http://feedproxy.google.com/~r/chinagfwblog/~3/tzwu0cwOTyI/blog-post.html