我在本地桌面上运行Nano80tat 8080。我可以在http://localhost:8080/
的浏览器中本地访问服务器。那部分正如预期的那样运作。
但是,我不希望我的邻居(或者更糟的是,世界)也能够在http://my.local.ip.add:8080/
访问它。
如何将其限制为仅限本地主机访问,这样我才能看到这些页面由我本地运行的NanoHttpd实例提供服务?
答案 0 :(得分:7)
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 (即你“信任”在localhost上运行的东西,但你想阻止来自大型恶意Internet的连接,)记住绑定到localhost只意味着 tcp连接到NanoHttpd必须有一个本地源地址 - 但是仍然可能由远程坏人发起“本地”连接,使用主机上的其他软件作为跳板。例如,在同一主机上运行的配置错误的http代理可能会被欺骗,代表远程用户连接到“http://localhost:8080”。当然,限制对本地主机的连接访问是有帮助的,但要考虑上下文:如果要保护高价值资源 - 特别是如果您在同一主机上有其他可能受到危害的面向公众的服务 - 绑定localhost不能替代使用适当的加密身份验证。