机房对外的系统安装的是Linux,内网有一台Windows机器,想找工作把3389端口转到Linux服务器上,每次临时启用。
安装了iptables,竟然提示缺少模块,配置也比较繁琐,所以就放弃了。
想到以前用过的twisted,于是自己写了一个小工具:
from twisted.internet.protocol import Protocol, ClientFactory, ServerFactory
from twisted.internet import reactor
import sys
class ForwardServer(Protocol):
def __init__(self, host, port):
self.host = host
self.port = port
self.data = ""
self._connected = False
def dataReceived(self, data):
#print "Received %d bytes from client\n" % len(data)
self.data += data
#print "%d bytes in buffer" % len(self.data)
if self._connected and (len(self.data) > 0):
self.connector.transport.write(self.data)
#print "Sent %d bytes to server" % len(self.data)
self.data = ""
def connectionMade(self):
self.connector = reactor.connectTCP(self.host, self.port, ForwardClientFactory(self))
print "Client connected"
def setConnected(self, flag):
if flag:
self.onConnected()
else:
self.transport.loseConnection()
self._connected = flag
def onConnected(self):
if len(self.data) > 0:
self.connector.transport.write(self.data)
self.data = ""
def connectionLost(self, reason):
self.connector.transport.loseConnection()
self._connected = False
print "Client disonnected"
class ForwardClient(Protocol):
def __init__(self, forward):
self.forward = forward
def dataReceived(self, data):
#print "Received %d bytes from server\n" % len(data)
self.forward.transport.write(data)
def connectionMade(self):
print "Connected to server"
self.forward.setConnected(True)
def connectionLost(self, reason):
self.forward.setConnected(False)
print "Disconnected from server"
class ForwardServerFactory(ServerFactory):
def __init__(self, host, port):
self.host = host
self.port = port
def buildProtocol(self, addr):
return ForwardServer(self.host, self.port)
class ForwardClientFactory(ClientFactory):
def __init__(self, forward):
self.forward = forward
def buildProtocol(self, addr):
return ForwardClient(self.forward)
def clientConnectionFailed(self, connector, reason):
self.forward.transport.loseConnection()
if __name__ == "__main__":
if len(sys.argv) != 4:
print "USAGE: %s <host> <port> <listen port>" % sys.argv[0]
sys.exit(1)
host, port, listen_port = sys.argv[1], int(sys.argv[2]), int(sys.argv[3])
server_factory = ForwardServerFactory(host, port)
reactor.listenTCP(listen_port, server_factory)
reactor.run()
运行:
python port_forward.py 192.168.0.10 3389 3389
就可以在本机上监听3389端口,有客户连接时就建立起到服务器的连接,并在2台机器间转发数据。
twisted是reactor架构,可以支持多个侦听器和连接器,也可以接受多个客户同时访问。作些修改,就可以改成简单的负载均衡服务器。twisted易用性、效率都是很不错的。
分享到:
相关推荐
Twisted 是一个强大的异步网络编程框架,特别适合用来编写灵活且高效的服务器应用程序。它的设计哲学在于通过分层的方式组织代码,使得服务器的构建模块化,易于管理和扩展。本文主要聚焦于使用Twisted来创建TCP、...
BurstLink, 基于 Twisted的假多连接代理 BurstLink一种基于 Twisted的假多连接注释这是一个测试版,可能有 Bug当前不支持支持加密传输安装客户端 Windows安装 python 2.7安装 Twisted 和 zope从下载这里文件
Twisted的异步模型可以让程序员轻松地编写高效的网络应用程序,例如Web服务器、聊天服务器、游戏服务器等。 Twisted的异步模型可以分为两个部分:Reactor和Protocol。Reactor是Twisted的核心组件,负责管理所有的I/...
2. **TCP服务**:可能会有一个简单的TCP服务器示例,展示如何使用Twisted来监听和处理客户端的TCP连接。这将涉及`twisted.internet.protocol`和`twisted.internet.endpoints`模块。 3. **UDP通信**:除了TCP,...
##### 2.2 使用 TCP 连接 - **第2章**:详细介绍如何使用 Twisted 创建 TCP 服务器和客户端。这一章将从最基础的概念入手,逐步引导读者实现一个完整的 TCP 应用。 ##### 2.3 Web 客户端与服务器 - **第3章**:...
**Twisted事件驱动网络框架详解** Twisted是一个强大的开源Python库,主要用于构建异步网络应用程序。...通过熟练掌握Twisted,你可以编写出高效率、低延迟的网络程序,满足现代互联网的高性能需求。
4. **TCP和UDP编程**:书中的例子会涵盖如何使用Twisted创建TCP服务器和客户端,以及如何处理无连接的UDP通信。这对于实现聊天应用、文件传输等网络服务非常有用。 5. **HTTP编程**:了解如何使用Twisted实现HTTP...
7. **测试框架**:Twisted还附带了一个强大的测试框架—— Trial,它支持异步测试,帮助开发者编写和执行对异步代码的单元测试。 8. **安全性**:Twisted包含了一些安全相关的组件,如加密套接字和认证机制,使得...
1. **编写TCP服务器和客户端**: - 使用 `twisted.internet.protocol.ServerFactory` 创建服务器工厂。 - 使用 `twisted.internet.protocol.ClientFactory` 创建客户端工厂。 - 通过 `reactor.listenTCP` 绑定...
# ~*~ Twisted - A Python tale ~*~ from time import sleep # Hello, I'm a developer and I mainly setup WordPress. def install_wordpress(customer): # Our hosting company Threads Ltd. is bad. I start ...
- **twisted.internet**: 提供了各种网络接口,包括TCP、UDP、SSL/TLS、UNIX域套接字等。还有线程池、延迟调用、计时器等功能。 - **twisted.web**: 用于构建Web服务器和客户端,支持HTTP、HTTPS以及WebSockets。 ...
在本主题中,我们将深入探讨TCP(传输控制协议)连接的Socket编程,包括服务器端和客户端的实现代码。 TCP是一种面向连接的、可靠的传输层协议,它确保了数据在发送到目的地之前是完整且有序的。TCP连接的建立过程...
一个简单的 Twisted 应用程序通常会创建一个工厂,定义协议类,然后使用反应器的 `connectXXX` 或 `listenXXX` 方法启动监听或连接,并调用 `reactor.run()` 启动事件循环。例如: ```python from twisted.internet...
Twisted是一个用Python编写的事件驱动网络引擎,它提供了构建服务器和客户端应用程序的强大工具。以下是对文档中提到的重要知识点进行的详细解读: ### 一、Twisted框架概述 #### 1.1 Twisted的愿景 Twisted的目标...
**Python** 是 Twisted 构建的基础,因为 Twisted 是用 Python 编写的,所以使用它意味着你可以利用 Python 的强大语法和丰富的生态系统。Python 的动态性和面向对象特性使得编写复杂的网络程序变得简单且灵活。...
下面将详细讨论Twisted的核心概念、主要功能以及如何使用它来构建异步应用程序。 一、Twisted框架核心概念 1. **事件驱动编程**:Twisted基于事件驱动模型,通过回调函数处理网络事件,如连接建立、数据接收、连接...