本地端口转发-有中间商但是不赚差价

本地端口转发

想象这样一个场景,在局域网里面,有一个主机A,由于限制,主机A不能访问外网,现在要使其能够访问外网的一台主机C。而局域网中有一台边界主机B,B既可以与主机A通信,也可以与外网通信,这时我们可以使用主机B做跳板,使主机A能够访问外网的主机C。

举个形象的例子,你的左边坐了一个帅哥(A),你的右边坐了一个美女(C),然后左边的帅哥(A)写了一封情书(请求数据包),请你帮忙传递,你用左手(监听端口)接到了这封情书(请求数据包),然后用右手(主动与C建立连接的端口)将情书(请求数据包)给美女(C),然后美女(C)回了一封信(响应数据包),同样,你右手接到这封信,然后用左手递给帅哥(A),这就是本地端口转发。 (虐~~~)

如下图所示,A不能直接访问C,借助于在B上做端口转发,通过访问B监听的端口,来达到访问C的目的。

本地端口转发-有中间商但是不赚差价_第1张图片

这种叫做本地端口转发,意思是B监听一个端口,等待A的连接,当A连接到B时,A向B发送请求数据,然后B主动与C建立连接,转发A请求的数据,当B收到C回复的数据,通过刚才监听的端口(与A建立连接的端口),将数据发送给A,这样就实现了A与C的通信。

可以使用SSH实现本地端口转发,在windows系统中自带了端口转发的命令。

netsh interface portproxy add v4tov4 listenaddress=xxx.xxx.xxx.xxx listenport=xxx connectaddress=xxx.xxx.xxx.xxx connectport=xxx

上面的命令就是windows实现本地端口转发的命令,add代表添加一条端口转发,v4tov4表示IPv4到IPv4的转发,listenaddress表示监听的本地地址,默认可以不写,listenport表示监听的端口,connectaddress是远程的主机IP地址,connectport是远程的主机端口。

 

比如A主机想要访问新浪博客(blog.sina.com.cn),就可以在B上做本地端口转发,例如我的电脑的IP是192.168.1.4,现在我使用nslookup命令查询新浪博客的IP地址,然后使用上面的命令做端口转发。如图。

本地端口转发-有中间商但是不赚差价_第2张图片

本地端口转发-有中间商但是不赚差价_第3张图片

使用netstat命令查看监听的端口,看到4444处于监听的状态

也可以把listenaddress写成本机的IP地址192.168.1.4。

本地端口转发-有中间商但是不赚差价_第4张图片

在本地的浏览器访问192.168.1.4:4444,已经可以访问blog.sina.com.cn。

本地端口转发-有中间商但是不赚差价_第5张图片

现在的情况如下图。

本地端口转发-有中间商但是不赚差价_第6张图片

至于B使用的哪个端口去连接的blog.sina.com.cn,这是TCP随机选择的一个端口,可以通过抓包来查看。 

为什么叫本地端口转发,因为B从端口4444收到的数据,通过和C建立连接的某个端口转发出去,也就是数据从本地的端口4444转发到本地的端口(与blog.sina.com.cn建立连接的端口),因此称作本地端口转发。

除了本地端口转发,还有远程端口转发。

 

关于netsh interface portproxy的使用:

删除本地端口转发:

netsh interface portproxy delete v4tov4 listenaddress=192.168.1.4 listenport=4444

查看本地端口转发列表:

netsh interface portproxy show all

你可能感兴趣的:(网络安全)