【转载】用Python实现端口映射功能(A/B/C内外网)
转载地址 :http://hutaow.com/blog/2014/09/08/write-tcp-mapping-program-with-python/
有A,B,C三台计算机,A,B互通,B,C互通,但是A,C不通,这个时候在C上开了一个Web服务,如何让A访问C的Web服务?
- # -*- coding: utf-8 -*-
- # tcp mapping created by hutaow(hutaow.com) at 2014-08-31
- import socket
- import threading
- # 端口映射配置信息
- CFG_REMOTE_IP = '192.168.0.10'
- CFG_REMOTE_PORT = 22
- CFG_LOCAL_IP = '0.0.0.0'
- CFG_LOCAL_PORT = 10022
- # 接收数据缓存大小
- PKT_BUFF_SIZE = 2048
- # 调试日志封装
- def send_log(content):
- print content
- return
- # 单向流数据传递
- def tcp_mapping_worker(conn_receiver, conn_sender):
- while True:
- try:
- data = conn_receiver.recv(PKT_BUFF_SIZE)
- except Exception:
- send_log('Event: Connection closed.')
- break
- if not data:
- send_log('Info: No more data is received.')
- break
- try:
- conn_sender.sendall(data)
- except Exception:
- send_log('Error: Failed sending data.')
- break
- # send_log('Info: Mapping data > %s ' % repr(data))
- send_log('Info: Mapping > %s -> %s > %d bytes.' % (conn_receiver.getpeername(), conn_sender.getpeername(), len(data)))
- conn_receiver.close()
- conn_sender.close()
- return
- # 端口映射请求处理
- def tcp_mapping_request(local_conn, remote_ip, remote_port):
- remote_conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- try:
- remote_conn.connect((remote_ip, remote_port))
- except Exception:
- local_conn.close()
- send_log('Error: Unable to connect to the remote server.')
- return
- threading.Thread(target=tcp_mapping_worker, args=(local_conn, remote_conn)).start()
- threading.Thread(target=tcp_mapping_worker, args=(remote_conn, local_conn)).start()
- return
- # 端口映射函数
- def tcp_mapping(remote_ip, remote_port, local_ip, local_port):
- local_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- local_server.bind((local_ip, local_port))
- local_server.listen(5)
- send_log('Event: Starting mapping service on ' + local_ip + ':' + str(local_port) + ' ...')
- while True:
- try:
- (local_conn, local_addr) = local_server.accept()
- except KeyboardInterrupt, Exception:
- local_server.close()
- send_log('Event: Stop mapping service.')
- break
- threading.Thread(target=tcp_mapping_request, args=(local_conn, remote_ip, remote_port)).start()
- send_log('Event: Receive mapping request from %s:%d.' % local_addr)
- return
- # 主函数
- if __name__ == '__main__':
- tcp_mapping(CFG_REMOTE_IP, CFG_REMOTE_PORT, CFG_LOCAL_IP, CFG_LOCAL_PORT)
【转载】用Python实现端口映射功能(A/B/C内外网)的更多相关文章
- 使用 Anydesk 5.1 TCP 通道(端口映射)功能从外网方便访问内网的 web/数据库等资源
Anydesk 5.1 带来一个新的功能:TCP 通道,在家办公时,通过互联网进行远程桌面连接到公司电脑,可以将家用电脑的某个端口,映射到公司网络的某个电脑( IP + 端口),不局限于被远程桌面连接 ...
- SSH有端口映射功能(访问本地端口=访问远程端口)
大部分SSH连接软件都有SSH通道转发功能,就是用这个实现的. 如果Delphi在代码上实现的话,用libSSH 或者 SecureBridge都可以. 代码基本不用帖,思路给大家讲一下吧. SSH有 ...
- 【转载】Python实现图书馆预约功能
注释: 1,原博主是:http://blog.csdn.net/cq361106306/article/details/42644001# 2,学校是我现在的学校,我最近也在研究这个,所以转了. 3, ...
- SQL Server配置管理器的“别名”功能好处,实现内外网统一以及加了端口号导致的限制
这里主要有两个别名,经过研究,最好两个都配置成一样的,减少排查. 操作: 点击[别名],右键[新建别名] 这里的别名能实现比如我一台远程服务器,加了端口的,如果要实现在SQL登录的时候,使用计算机名来 ...
- [转载]详解ssh端口转发(二)
关于使用ssh portforwarding来进行FQ的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下. 首先要记住一件事情就是: SSH 端口转发自然需要 SSH 连接,而 SSH ...
- CentOS下Apache配置多域名或者多端口映射
CentOS下Apache默认网站根目录为/var/www/html,假如我默认存了一个CI项目在html文件夹里,同时服务器的外网IP为ExampleIp,因为使用的是MVC框架,Apache需开启 ...
- 通俗语言解释内外网IP与端口映射
IP:分为外网IP和内网IP 也就是我们说的外网IP属于实体IP 实体IP,它是独一无二的,在网络的世界里,每一部计算机的都有他的位置,一个 IP 就好似一个门牌!例如,你要去百度的网站的话,就要去『 ...
- 内网服务器设置NAT123端口映射,方便外网连接;如何测试端口连通情况。
一.nat123设置端口映射. 1)首先去nat123官网注册账号. http://www.nat123.com/ 2)下载nat123客户端 http://www.nat123.com/Pages_ ...
- 在Windows下通过netsh命令实现端口映射
在Windows环境下,可以通过netsh命令实现简单快速的配置端口映射功能 1. 新增端口映射 netsh interface portproxy add v4tov4 listenport= co ...
随机推荐
- 利用PyCharm的Profile工具进行Python性能分析
Profile:PyCharm提供了性能分析工具Run->Profile,如下图所示.利用Profile工具可以对代码进行性能分析,找出瓶颈所在. 测试:下面以一段测试代码来说明如何使用pych ...
- 【旧文章搬运】分析了一下360安全卫士的HOOK
原文发表于百度空间及看雪论坛,2009-10-08 看雪论坛地址:https://bbs.pediy.com/thread-99128.htm 看时间,09年的国庆节基本上就搞这玩意儿了...==== ...
- B. Chris and Magic Square
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- django上课笔记6-MVC,MTV架构-中间件-初识Form组件
一.MVC,MTV架构 models(数据库,模型) views(html模板) controllers(业务逻辑处理) --> MVC models(数据库,模型) templates(htm ...
- linux中用管道实现父子进程通信
1 用户要实现父进程到子进程的数据通道,可以在父进程关闭管道读出一端, 然后相应的子进程关闭管道的输入端. 2 先用pipe()建立管道 然后fork函数创建子进程.父进程向子进程发消息,子进程读消息 ...
- UVa 1642 Magical GCD (暴力+数论)
题意:给出一个长度在 100 000 以内的正整数序列,大小不超过 10^ 12.求一个连续子序列,使得在所有的连续子序列中, 它们的GCD值乘以它们的长度最大. 析:暴力枚举右端点,然后在枚举左端点 ...
- WebService之第一天
1. 定义:webService是一个远程调用技术 远程:相对于本地,不是当前应用服务的.调用:数据交互. 1.1. 业务需求的问题 1.自己想要,但没有
- E20170426-gg
recursive adj. 回归的,递归的; removal n. 除去; 搬迁; 免职; 移走; customize vt. 定制,定做; 按规格改制;
- POJ3264【线段树】
求区间最值-(基础,继续) code---.. #include<cstdio> #include<iostream> #include<string.h> #in ...
- HDOJ3231醉
反正一开始就是瞎几把看题,然后题意理解了,什么飞机?只能去看题解了. 呵呵,可惜,题解看了三个小时,还是一知半解,先写了. - -菜鸡超级详细题解,强行掰弯一波,等下再问问别人吧. OK,OK开始!! ...