打造端口转发脚本

  1. 前言
  2. 原理
  3. 代码

前言

之前尝试在学校写端口转发工具,发现失败了。回家找了一些文章看懂了之后写了出来。时间过的真快,今天就10月3号了。。。我日。。

原理

在网吧通过路由器或者代理连接到外网,而在内网建立和运行网络服务器或FTP服务器是没办法使外网用户直接访问的,通过在路由上的NAT开启建立相应端口转发的映射,你可以指示路由器转发对某一特定网端口(如80 ,为网络服务器或21为FTP服务器) 所有的信息为本地网络。 这意味着,如果一个外部主机试图通过HTTP访问外网的IP加相应端口,就可访问到相应的内网建立的服务器。 外部访问此服务器的用户并不知道服务器是处于内部网络上的。 这种方法被广泛应用于网吧或通过NAT共享上网在内网建立服务器的用户。公安监控系统即通过此方法来监控网吧数据的。 转发端口,比用其它方法更安全更易用, 企业内部可能有很多专业化的服务,比如 ERP 系统,监控系统, OA 系统, CRM 等等,用户不需要移植或者更新现有的服务而单独申请专用的外部IP地址,只需要简单的配置一下网关路由的端口转发功能,即可使互联网上的用户使用这些服务。
端口转发一般常常用于虚拟机与宿主机之间通信时使用。最经常用的如:通过linux的ssh方式通信,本机端口转发连接VMware虚拟机。再者:VirtualBox NAT设置和端口转发等等。–《百度百科》

实际上实现端口转发也就是:

要转发的端口为A 监听的端口为B
1.连接要转发端口
2.监听一个端口
3.A发送数据给B,B发送数据给A

代码

import socket
import threading

server_host='127.0.0.1'
server_port=4446

client_host='127.0.0.1'
client_port=80
def jianting(host,port,client_host,client_port):
    try:
        server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        server.bind((host,port))
        server.listen(5)

        ss,addr=server.accept()
        client.connect((client_host,client_port))
        while True:
            mg=ss.recv(5096)
            client.send(mg)

            buf=client.recv(5096)
            ss.send(buf)
    except Exception as error:
        print('[-]Error {}'.format(error))
        exit()



def run():
    s=threading.Thread(target=jianting,args=(server_host,server_port,client_host,client_port))
    s.start()
if __name__ == '__main__':
run()

测试结果:

转载请声明:转自422926799.github.io


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:打造端口转发脚本

本文作者:九世

发布时间:2018-10-03, 11:44:04

最后更新:2019-04-19, 20:36:16

原始链接:http://jiushill.github.io/posts/e431254b.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录