代码之家  ›  专栏  ›  技术社区  ›  Jim Pivarski

如何在Python的SocketServer中允许或拒绝远程连接?

  •  0
  • Jim Pivarski  · 技术社区  · 7 年前

    我正在创建一个非常简单的 Vega 可视化查看器:它是 one file module 它提供一个只包含Vega图形和HTML5的基本HTML页面 EventSource 的更新。用户(me)通过ssh在Python shell中工作,创建一个表示查看器的对象,该对象打印其IP和端口,供用户粘贴到其(my)web浏览器中。这个HTTP服务器不提供文件或从客户端获取输入,所以我看不到任何安全问题。

    我不确定的部分是如何设置 (host, port) 这样,我的web浏览器可以找到在远程Python中运行的HTTP服务器。我整个下午都在做实验,我不知道我是否误解了 假定的 或者如果我使用的服务器更改了访问策略。

    下面是一个简单的示例:

    import SimpleHTTPServer
    import SocketServer
    Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
    httpd = SocketServer.TCPServer((host, port), Handler)
    print(httpd.server_address)
    httpd.serve_forever()
    

    如果我在本地运行此程序并希望确保外部查看器 不能 访问它,我是否设置 host "127.0.0.1" 因为这意味着客户端必须访问它 127.0.0.1,哪种情况只能在本地发生?在这种情况下, port 可以是 0 获取任何开放端口。

    如果我远程运行这个,想确保外部观众 可以 访问它,我是否设置 主办 "" "0.0.0.0" 因为这意味着客户端可以将其作为任何地址访问服务器?在这种情况下,我可能无法设置 港口城市 0 因为这些端口中的许多可能被阻塞,或者操作系统对此更聪明?

    基本上,Python的SocketServer中的访问控制是如何实现的 假定的 去工作?

    1 回复  |  直到 7 年前
        1
  •  3
  •   user207421    7 年前

    这是基本的TCP。与Python无关。

    如果侦听127.0.0.1,则只有在同一主机上运行的客户端才能连接。

    如果您在0.0.0.0上收听,任何人都可以连接,如果防火墙允许的话。