【问题标题】:Connecting to a local network Raspberry Pi连接到本地网络 Raspberry Pi
【发布时间】:2015-12-05 19:48:31
【问题描述】:

我有一个:

Rasberry Pi 2

运行

Raspbian Jessie Version:November 2015

我正在使用 Undertow(Java http 服务器)为网站提供服务。这是我用来构建服务器的代码。

Undertow server = Undertow.builder()
                   .addHttpListener(8890, "localhost")
                   .setHandler(Handlers.pathTemplate()
                      .add("/", resource(new PathResourceManager(staticFilePath, 100))
                              .setDirectoryListingEnabled(false))
                   .build();

问题:尽管能够 ping 和 SSH 进入 PI,但我无法从本地网络上的另一台计算机上看到网络服务器。

我做了什么(在 Pi2 上):

wget localhost:8890

正确返回 index.html

netstat -lptn

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -               
tcp6       0      0 :::22                   :::*                    LISTEN      -               
tcp6       0      0 127.0.0.1:8890          :::*                    LISTEN      1743/java  

我的开发机器 192.168.1.8:8890 上的 Chrome 提供 ERR_CONNECTION_REFUSED

wget 192.168.1.8:8890

连接到 192.168.1.8:8890... 失败:连接被拒绝。

nmap 192.168.1.8

Starting Nmap 6.40 ( http://nmap.org ) at 2015-12-05 14:05 CST
Nmap scan report for 192.168.1.8
Host is up (0.039s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 1.83 seconds

我的理解是没有防火墙,所以我很困惑为什么我无法从我的开发机器上看到服务器。

【问题讨论】:

  • 从您的主机尝试 nmap 以发现哪些端口是可见的。
  • 您发布的 nmap 扫描无论如何都不会显示它已打开,默认扫描仅扫描 1,000 个端口。你可以看到它说 999 关闭并显示 22 打开。这是因为最常见的服务会在 0-1024 的保留范围内创建套接字。如果您想扫描该特定端口,请尝试 nmap -p 8890

标签: linux raspberry-pi raspbian


【解决方案1】:

见:

tcp6       0      0 127.0.0.1:8890    :::*      LISTEN      1743/java  

您的 Web 服务器仅侦听 localhost 地址 (127.0.0.1)。这样它就无法从除本地主机之外的任何地方访问。

您的 nmap 扫描显示相同:唯一可远程访问的端口是 22。

要远程访问此服务,您必须将 Web 服务器绑定到属于此树莓派 (192.168.1.8) 的任何非本地地址或“任何地址”0.0.0.0,因为已绑定 SSH 服务。

如何做到这一点写在您的网络服务器的手册中。可能,您必须从“-d”参数开始,即

standalone.sh -b=0.0.0.0
standalone.sh -Djboss.bind.address=0.0.0.0

或类似的东西。

在监听器设置代码中是这样的

"localhost" 必须替换为一些公共名称。这可能是“0.0.0.0”或“192.168.1.8”。我们也可以

cat "192.168.1.8 somename" >> /etc/hosts

然后使用某个名称:

Undertow server = Undertow.builder() .addHttpListener(8890, "somename")

【讨论】:

  • 是的,我使用的是 Undertow,所以我手动设置了它。除了在我的代码中设置之外,还有其他步骤吗?
  • 我在您的问题中看到的唯一错误是 Web 服务器仅在本地绑定。我不知道你的代码,如果它自己检查远程地址,你可能需要配置它以允许从其他地址访问。
  • 我使用的是 Undertow,而不是 JBoss 附带的捆绑版本。我有一行用于绑定,如下所示 `Undertow server = Undertow.builder() .addHttpListener(8890, "localhost");
  • 是的,这是您问题的根源。您必须将“localhost”更改为某个公共名称。尝试在此处指定 IP 地址(0.0.0.0 或 192.168.1.8)。如果这不起作用,在树莓派上 cat "192.168.1.8 somename" >> /etc/hosts,然后使用这个 "somename" 而不是 localhost。
  • 我相信你是对的。我将修复并将其标记为正确答案。您会将该评论添加到答案中吗?
猜你喜欢
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
相关资源
最近更新 更多