【问题标题】:how to bind multiple specified ip address on BaseHTTPRequestHandler of python如何在python的BaseHTTPRequestHandler上绑定多个指定的IP地址
【发布时间】:2013-10-24 03:38:14
【问题描述】:

我的服务器有 3 个 IP 地址,127.0.0.1、192.168.0.100 和一个互联网 IP 地址。我将在此服务器上运行由 python 编写的服务,但我不希望它在互联网上公开。 我正在使用 BaseHTTPRequestHandler 类来实现这个服务,那么如何只绑定 127.0.0.1 和 192.168.0.100 而不是另一个呢?

【问题讨论】:

    标签: python basehttprequesthandler


    【解决方案1】:

    通常,路由器有一个选项,您可以在其中允许服务器可见或不可见。如果在路由器上您将服务器设置为不可见,则您的服务器将无法通过 Internet 访问。

    【讨论】:

    • 谢谢,但不是一个选项,因为此服务器上还有其他服务。
    【解决方案2】:

    我认为你有两个选择。

    1) 监听所有接口,但覆盖 BaseHTTPRequestHandler.init 以检查客户端地址,如果它来自不需要的接口则断开连接

    2) 创建多个套接字,每个要监听的地址一个。 SocketServer.serve_forever() 是阻塞的,所以你要么需要为每个地址使用一个线程,要么切换到更复杂的框架,比如 twisted。

    【讨论】:

    • 谢谢,我更喜欢解决方案 1,因为第二个会添加很多代码。有没有办法只在绑定地址元组中指定2个ip?
    • 据我所知没有。低级套接字只能绑定到单个地址(但可能是 ADDR_ANY)。如果您直接使用套接字,那么一次监听多个套接字相当容易,但这似乎并没有在非常简单的 SocketServer 类中实现。还有一件事:绑定到通配符地址允许您的服务器在接口出现故障和备份时继续运行(例如由于拔掉电缆)。如果您绑定到特定地址,则需要手动重新收听。
    猜你喜欢
    • 2017-09-09
    • 2015-01-13
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    相关资源
    最近更新 更多