所谓的”端口转发”,通俗地说就是让 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 协议栈。具体步骤如下:
- 以管理员身份登录,进入”控制面板”下面的”网络连接”
- 选中本地连接,点右键,在右键菜单选”属性”
- 弹出”属性”对话框,点”安装”按钮
- 弹出”选择网络组件类型”对话框,选”协议”,再点”添加”
- 在弹出的对话框中选”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
端口。
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 系统。
利用 rinetd
获取软件
rinetd 是一个很小巧的、跨平台的、开源的工具,它能提供 TCP 端口转发的功能。它的官网在(这里)[http://www.boutell.com/rinetd/],上面提供了 Linux 平台和 Windows 平台的软件包。考虑到大多数同学用的是 Windows,俺针对 Windows 的使用介绍一下。
把那个rinetd.zip
下载到本地,解压出来,里面有好几个文件(包括源代码)。你只需取出其中的rinetd.exe
其它文件不需要。
编写配置文件
rinetd 的配置文件很简单,就是一个普通的文本文件,每一行对应一条转发规则。每一条转发规则包含4个字段,分别如下,字段之间用空格分开。
绑定地址 监听端口 转发的地址 转发的端口
配置文件举例
比方说,俺本地已经运行了TOR
,端口是8118
,绑定在127.0.0.1
如果俺希望通过rinetd
建立一个新的端口,端口号是12345
(这个端口号是俺随手编的,你也可以用其它端口号),绑定在0.0.0.0
那么,转发规则就这么写
0.0.0.0 12345 127.0.0.1 8118
运行
把刚才写好的配置文件保存成config.txt
(俺只是举例,你也可以用其它文件名),把该文件跟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