转载地址 :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服务?

  1. # -*- coding: utf-8 -*-
  2. # tcp mapping created by hutaow(hutaow.com) at 2014-08-31
  3.  
  4. import socket
  5. import threading
  6.  
  7. # 端口映射配置信息
  8. CFG_REMOTE_IP = '192.168.0.10'
  9. CFG_REMOTE_PORT = 22
  10. CFG_LOCAL_IP = '0.0.0.0'
  11. CFG_LOCAL_PORT = 10022
  12.  
  13. # 接收数据缓存大小
  14. PKT_BUFF_SIZE = 2048
  15.  
  16. # 调试日志封装
  17. def send_log(content):
  18. print content
  19. return
  20.  
  21. # 单向流数据传递
  22. def tcp_mapping_worker(conn_receiver, conn_sender):
  23. while True:
  24. try:
  25. data = conn_receiver.recv(PKT_BUFF_SIZE)
  26. except Exception:
  27. send_log('Event: Connection closed.')
  28. break
  29.  
  30. if not data:
  31. send_log('Info: No more data is received.')
  32. break
  33.  
  34. try:
  35. conn_sender.sendall(data)
  36. except Exception:
  37. send_log('Error: Failed sending data.')
  38. break
  39.  
  40. # send_log('Info: Mapping data > %s ' % repr(data))
  41. send_log('Info: Mapping > %s -> %s > %d bytes.' % (conn_receiver.getpeername(), conn_sender.getpeername(), len(data)))
  42.  
  43. conn_receiver.close()
  44. conn_sender.close()
  45.  
  46. return
  47.  
  48. # 端口映射请求处理
  49. def tcp_mapping_request(local_conn, remote_ip, remote_port):
  50. remote_conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  51.  
  52. try:
  53. remote_conn.connect((remote_ip, remote_port))
  54. except Exception:
  55. local_conn.close()
  56. send_log('Error: Unable to connect to the remote server.')
  57. return
  58.  
  59. threading.Thread(target=tcp_mapping_worker, args=(local_conn, remote_conn)).start()
  60. threading.Thread(target=tcp_mapping_worker, args=(remote_conn, local_conn)).start()
  61.  
  62. return
  63.  
  64. # 端口映射函数
  65. def tcp_mapping(remote_ip, remote_port, local_ip, local_port):
  66. local_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  67. local_server.bind((local_ip, local_port))
  68. local_server.listen(5)
  69.  
  70. send_log('Event: Starting mapping service on ' + local_ip + ':' + str(local_port) + ' ...')
  71.  
  72. while True:
  73. try:
  74. (local_conn, local_addr) = local_server.accept()
  75. except KeyboardInterrupt, Exception:
  76. local_server.close()
  77. send_log('Event: Stop mapping service.')
  78. break
  79.  
  80. threading.Thread(target=tcp_mapping_request, args=(local_conn, remote_ip, remote_port)).start()
  81.  
  82. send_log('Event: Receive mapping request from %s:%d.' % local_addr)
  83.  
  84. return
  85.  
  86. # 主函数
  87. if __name__ == '__main__':
  88. tcp_mapping(CFG_REMOTE_IP, CFG_REMOTE_PORT, CFG_LOCAL_IP, CFG_LOCAL_PORT)

【转载】用Python实现端口映射功能(A/B/C内外网)的更多相关文章

  1. 使用 Anydesk 5.1 TCP 通道(端口映射)功能从外网方便访问内网的 web/数据库等资源

    Anydesk 5.1 带来一个新的功能:TCP 通道,在家办公时,通过互联网进行远程桌面连接到公司电脑,可以将家用电脑的某个端口,映射到公司网络的某个电脑( IP + 端口),不局限于被远程桌面连接 ...

  2. SSH有端口映射功能(访问本地端口=访问远程端口)

    大部分SSH连接软件都有SSH通道转发功能,就是用这个实现的. 如果Delphi在代码上实现的话,用libSSH 或者 SecureBridge都可以. 代码基本不用帖,思路给大家讲一下吧. SSH有 ...

  3. 【转载】Python实现图书馆预约功能

    注释: 1,原博主是:http://blog.csdn.net/cq361106306/article/details/42644001# 2,学校是我现在的学校,我最近也在研究这个,所以转了. 3, ...

  4. SQL Server配置管理器的“别名”功能好处,实现内外网统一以及加了端口号导致的限制

    这里主要有两个别名,经过研究,最好两个都配置成一样的,减少排查. 操作: 点击[别名],右键[新建别名] 这里的别名能实现比如我一台远程服务器,加了端口的,如果要实现在SQL登录的时候,使用计算机名来 ...

  5. [转载]详解ssh端口转发(二)

    关于使用ssh portforwarding来进行FQ的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下. 首先要记住一件事情就是: SSH 端口转发自然需要 SSH 连接,而 SSH ...

  6. CentOS下Apache配置多域名或者多端口映射

    CentOS下Apache默认网站根目录为/var/www/html,假如我默认存了一个CI项目在html文件夹里,同时服务器的外网IP为ExampleIp,因为使用的是MVC框架,Apache需开启 ...

  7. 通俗语言解释内外网IP与端口映射

    IP:分为外网IP和内网IP 也就是我们说的外网IP属于实体IP 实体IP,它是独一无二的,在网络的世界里,每一部计算机的都有他的位置,一个 IP 就好似一个门牌!例如,你要去百度的网站的话,就要去『 ...

  8. 内网服务器设置NAT123端口映射,方便外网连接;如何测试端口连通情况。

    一.nat123设置端口映射. 1)首先去nat123官网注册账号. http://www.nat123.com/ 2)下载nat123客户端 http://www.nat123.com/Pages_ ...

  9. 在Windows下通过netsh命令实现端口映射

    在Windows环境下,可以通过netsh命令实现简单快速的配置端口映射功能 1. 新增端口映射 netsh interface portproxy add v4tov4 listenport= co ...

随机推荐

  1. 利用PyCharm的Profile工具进行Python性能分析

    Profile:PyCharm提供了性能分析工具Run->Profile,如下图所示.利用Profile工具可以对代码进行性能分析,找出瓶颈所在. 测试:下面以一段测试代码来说明如何使用pych ...

  2. 【旧文章搬运】分析了一下360安全卫士的HOOK

    原文发表于百度空间及看雪论坛,2009-10-08 看雪论坛地址:https://bbs.pediy.com/thread-99128.htm 看时间,09年的国庆节基本上就搞这玩意儿了...==== ...

  3. B. Chris and Magic Square

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  4. django上课笔记6-MVC,MTV架构-中间件-初识Form组件

    一.MVC,MTV架构 models(数据库,模型) views(html模板) controllers(业务逻辑处理) --> MVC models(数据库,模型) templates(htm ...

  5. linux中用管道实现父子进程通信

    1 用户要实现父进程到子进程的数据通道,可以在父进程关闭管道读出一端, 然后相应的子进程关闭管道的输入端. 2 先用pipe()建立管道 然后fork函数创建子进程.父进程向子进程发消息,子进程读消息 ...

  6. UVa 1642 Magical GCD (暴力+数论)

    题意:给出一个长度在 100 000 以内的正整数序列,大小不超过 10^ 12.求一个连续子序列,使得在所有的连续子序列中, 它们的GCD值乘以它们的长度最大. 析:暴力枚举右端点,然后在枚举左端点 ...

  7. WebService之第一天

    1. 定义:webService是一个远程调用技术 远程:相对于本地,不是当前应用服务的.调用:数据交互. 1.1.  业务需求的问题 1.自己想要,但没有

  8. E20170426-gg

    recursive   adj. 回归的,递归的; removal    n. 除去; 搬迁; 免职; 移走; customize vt. 定制,定做; 按规格改制;

  9. POJ3264【线段树】

    求区间最值-(基础,继续) code---.. #include<cstdio> #include<iostream> #include<string.h> #in ...

  10. HDOJ3231醉

    反正一开始就是瞎几把看题,然后题意理解了,什么飞机?只能去看题解了. 呵呵,可惜,题解看了三个小时,还是一知半解,先写了. - -菜鸡超级详细题解,强行掰弯一波,等下再问问别人吧. OK,OK开始!! ...