在python

时间:2015-10-24 23:51:28

标签: python ssh

我想为一个有趣的项目创建一个基于多人游戏的文本游戏。我想运行一个响应telnet / ssh到我的IP的python服务器。一旦玩家连接,他们将能够输入命令来做不同的事情。会有聊天,ascii图形,交易和其他各种事情。

我需要一个允许我这样做的高级网络库。以下是我目前的问题:

  1. 我最好将此服务器视为异步

  2. 我想通过终端通过telnet,ssh或其他一些内置的连接服务器来实现一切。我不希望最终用户必须安装任何类似客户端或依赖项的东西。

  3. 我想在用户连接时结束加密。这是出现问题的地方。我的猜测是我将无法使用telnet,但我不确定SSH。我需要用户能够通过终端注册和登录他们的帐户,我希望服务器来回发送给客户端的信息被窃听者加密和难以识别。

  4. 到目前为止,我最大的问题是弄清楚如何让这个游戏变得安全,但是在纯终端中运行。我也想用curses用ascii制作很酷的菜单和地图。我怎么做到这一点?我是否能够在服务器端使用curses操作文本并将其发送到客户端,或者客户端是否需要安装curses?

2 个答案:

答案 0 :(得分:1)

网络

您可以使用asyncio:它是在Py3.4中构建的。它使用异步io实现某种事件循环,并允许您在一个进程上拥有许多客户端。 Yoy可能会使用http://asyncssh.readthedocs.org/来实现ssh,这是非常安全的

诅咒

每个终端(真正的终端,如70或终端仿真器,如linux控制台或xterm)都有一些转义代码,用于绘制伪图形,清晰屏幕,哔哔声等。这些代码(终端功能)存储在{{ 1}}或termcap,适当的终端类型存储在terminfo env变量中。 Curses使用此信息将正确的代码发送到终端。所以,你可以在这里使用curses,但是使用取决于你将拥有哪个客户端。

如果您要在Python上编写客户端,那么您可以在客户端计算机上安装curses并使用抽象,例如"绘制菜单"在您的协议中。 在这种情况下,客户可能是图形化的,因为绘图是客户的职责。

但是如果您将使用简单的ssh客户端(如Windows Putty),则需要获取客户端的终端类型(http://asyncssh.readthedocs.org/en/latest/#getting-terminal-information),将其设置为TERM变量,然后重定向curses输出(或stdout)如果诅咒使用它)

答案 1 :(得分:-3)

考虑使用ssh和Unix Domain Socket绑定。

“可以保护Unix域套接字不被创建端口转发隧道的用户访问。通过扩展,还可以保护与远程主机的连接免受未经授权的访问。支持使用Unix域套接字端口转发,SSH中增加了两个选项。“

来源:https://www.ll.mit.edu/mission/cybersec/corpora/Cybercorpora/README.sshhop