是否可以仅将NanoHttpd限制为localhost?

whi*_*der 5 java security embeddedwebserver nanohttpd

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

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

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

JVM*_*ATL 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));
Run Code Online (Sandbox Code Playgroud)

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

更新:因为看起来人们还在阅读 - 偶尔也会热议:^) - 多年后我的袖手旁观答案,我想我会加上这个警告:如果出于安全原因你只绑定到localhost(即你"信任"在localhost上运行的东西,但是你想要阻止来自大型恶意Internet的连接,)记住绑定到localhost只意味着与NanoHttpd 的tcp连接必须有一个本地源地址 - 但它仍然可能是"本地"连接可以由远程坏人发起,使用主机上的其他软件作为跳板.例如,在同一主机上运行的配置错误的http代理可能会被欺骗,代表远程用户连接到" http:// localhost:8080 ".当然,限制对本地主机的连接访问是有帮助的,但要考虑上下文:如果要保护高价值资源 - 特别是如果您在同一主机上有其他可能受到危害的面向公众的服务 - 绑定localhost不能替代使用适当的加密身份验证.