[英]How to manage Twisted SSH server connections
我需要创建一个可以接受多个命令的扭曲SSH服务器。 但是主要功能是服务器应该管理连接。 更具体地说,如果持续时间超过10分钟(例如),则需要关闭打开的连接。 如果已经有10个打开的连接,则它不应该接受新的连接。
实际上,我仍然无法完全理解所有这些领域,化身,协议和门户等如何相互影响。 而且我感到很缺乏文档。 有几个示例,但是没有任何注释说明每个步骤中到底发生了什么。
无论如何,通过尝试和失败,我能够将所需命令的执行添加到扭曲的简单ssh服务器示例中 。 但是我完全不知道如何拒绝新连接或关闭现有连接,或者为新连接添加一些时间标记,这些标记可用于在达到时间限制时关闭连接。
任何帮助,将不胜感激。 请对我好一点,我从未与Twisted合作过,实际上我是python的newby :)
谢谢。
ps我很抱歉可能出现的错误,英语不是我的母语。
因此,主要问题是限制连接数。 这实际上取决于您要使用的协议。 假设您将LineOnlyReceiver
用作基本协议( Prototol
其他继承者的行为方式相同,但例如AMP
情况略有不同):
from twisted.internet.protocol import ServerFactory
from twisted.protocols.basic import LineOnlyReceiver
class NoConnectionSlots(Exception):
message = "Sorry, bro. There are no free slots for you. Try again later."
class ExampleProtocol(LineOnlyReceiver):
def connectionMade(self):
try:
self.factory.client_connected(self)
except NoConnectionSlots as e:
self.sendLine("{:}\\n".format(unicode(e)))
self.transport.loseConnection()
def connectionLost(self, reason):
self.factory.client_left(self)
class ExampleServerFactory(ServerFactory):
protocol = ExampleProtocol
max_connections = 10
def __init__(self):
self._connections = []
def client_connected(self, connection):
if len(self._connections) < self.max_connections:
raise NoConnectionSlots()
self._connections.append(connection)
def client_left(self, connection):
try:
self._connections.remove(connection)
except ValueError as e:
pass # place for logging
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.