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

How to allow or deny remote connections in Python's SocketServer?

我正在创建一个极其简单的 Vega visualization viewer: it's a one file module,它提供一个基本 HTML 页面,其中仅包含 Vega 图形和 HTML5 EventSource 更新。用户(我)正在通过 ssh 在 Python shell 中工作,创建一个代表查看器的对象,该对象打印其 IP 和端口供用户粘贴到他们(我的)网络浏览器中。此 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" 因为这意味着客户端必须访问它 as 127.0.0.1,这只能在本地发生?在这种情况下,port 可以是 0 以获取任何开放端口。

如果我运行远程想要确保外部观众可以访问它,我是否将host设置为"""0.0.0.0",因为这意味着客户端可以将其作为任何到达服务器的地址进行访问?在这种情况下,我可能无法将 port 设置为 0,因为其中许多端口可能被阻止,或者 OS 对此更聪明吗?

基本上,Python 的 SocketServer 中的访问控制应该 是如何工作的?

这是基本的 TCP。与 Python.

无关

如果您在 127.0.0.1 监听,则只有同一主机中的客户端 运行 可以连接。

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