5

我在本地桌面上的 8080 上运行 NanoHttpd。我可以在浏览器中本地访问服务器http://localhost:8080/。该部分按预期工作。

但是,我不希望我的邻居(或更糟糕的是,全世界)也能够在http://my.local.ip.add:8080/.

如何将其限制为仅 localhost 访问,以便我是唯一可以看到我的本地运行的 NanoHttpd 实例提供这些页面的人?

4

1 回答 1

8

NanoHttpd 只是一个源文件:这是一个相关的剪辑:

   /**
     * Constructs an HTTP server on given hostname andport.
     */
    public NanoHTTPD(String hostname, int port) {
        this.hostname = hostname;
        this.myPort = port;
        setTempFileManagerFactory(new DefaultTempFileManagerFactory());
        setAsyncRunner(new DefaultAsyncRunner());
    }

    /**
     * Start the server.
     * @throws IOException if the socket is in use.
     */
    public void start() throws IOException {
        myServerSocket = new ServerSocket();
        myServerSocket.bind((hostname != null) ? new InetSocketAddress(hostname, myPort) : new InetSocketAddress(myPort));

虽然我无法从这里尝试它,但您似乎可以通过构建服务器来实现您想要的效果new NanoHTTPD("localhost",8080)——因为这会导致绑定操作绑定到 localhost 上的端口(而不是使用通配符绑定)

更新:由于人们似乎仍在阅读——并且偶尔会支持:^)——几年后我的即兴回答,我想我会添加这个警告:如果你出于安全原因只绑定到本地主机(即你“信任”在 localhost 上运行的东西,但您想阻止来自大坏 Internet 的连接,)请记住,绑定到 localhost 仅意味着到 NanoHttpd 的tcp 连接必须具有本地源地址——但仍然有可能“本地”连接可能由远程不良行为者发起,使用主机上的其他一些软件作为跳板。例如,在同一主机上运行的配置错误的 http 代理可能会被欺骗连接到“ http://localhost:8080' 代表远程用户。当然,限制对本地主机的连接访问是有帮助的,但请考虑上下文:如果您正在保护高价值资源——特别是如果您在同一主机上有其他可能受到损害的面向公众的服务——绑定到 localhost 不能替代使用正确的加密身份验证。

于 2014-02-07T16:57:07.740 回答