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

时间:2018-03-14 01:47:50

标签: python sockets tcp socketserver

我正在创建一个非常简单的Vega可视化查看器:它是一个one file module,它提供一个只包含Vega图形和HTML5 EventSource更新的基本HTML页面。用户(我)通过ssh在Python shell中工作,创建一个表示查看器的对象,该对象打印其IP和端口供用户粘贴到他们的(我的)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获取任何开放端口。

如果我正在远程运行此操作以确保外部查看者可以访问它,请将host设置为"""0.0.0.0",因为是否客户端可以访问它作为进入服务器的任何地址?在这种情况下,我可能无法将port设置为0,因为许多端口可能被阻止,或者操作系统是否更智能?

基本上,Python的SocketServer 中的访问控制如何实现

1 个答案:

答案 0 :(得分:1)

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

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

如果你在0.0.0.0听,任何人都可以连接,防火墙允许。