当前位置: 代码迷 >> python >> 在 python 中为基于文本的多人游戏创建安全终端环境的最佳方法
  详细解决方案

在 python 中为基于文本的多人游戏创建安全终端环境的最佳方法

热度:98   发布时间:2023-06-13 17:03:16.0

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

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

  1. 我希望这个服务器是异步的

  2. 我希望一切都通过 telnet、ssh 或其他一些内置的连接服务器的方式通过终端进行。 我不希望最终用户必须安装诸如客户端或依赖项之类的东西。

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

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

网络

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

诅咒

每个终端(来自 70th 的真实终端或终端模拟器如 linux console 或 xterm)都有一些转义码,用于绘制伪图形、清屏、哔声等。这些代码(终端功能)存储在termcapterminfo ,并且适当的终端类型存储在$TERM变量中。 Curses 使用此信息向终端发送正确的代码。 因此,您可以在这里使用curses,但用法取决于您将拥有哪个客户端。

如果您打算在 Python 上编写客户端,那么您可以在客户端机器上安装 Curses 并在您的协议中使用诸如“绘制菜单”之类的抽象。 在这种情况下,客户甚至可能是图形化的,因为绘图是客户的职责。

但是,如果您将使用简单的 ssh 客户端(如 Windows Putty),则需要获取客户端的终端类型( ),将其设置为 TERM 变量,然后重定向curses输出(或stdout,如果curses使用它)

考虑 ssh 和 Unix 域套接字绑定。

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

资料来源: :