我家里有一台树莓派,上面运行着一个小型的 djangorest 应用程序,对于我个人来说,这是非常简单的东西。
今天我想从图书馆访问我的 pi(如果重要的话,使用他们的公共 wifi),但我无法访问;然后我决定通过网络共享切换到我的手机数据,然后它又可以正常工作了。
我对 nmap 进行了测试,结果证实了我刚才所描述的。
使用WiFi:
PORT STATE SERVICE
3000/tcp filtered sae-urn
网络共享时:
PORT STATE SERVICE
3000/tcp open sae-urn
我不太熟悉 nmap,我想知道“过滤”是否意味着我当前网络上的防火墙正在过滤连接,或者 Raspberry Pi 上的防火墙正在过滤它。
有没有什么可能的解决方法?
编辑:
我也尝试使用旧的 ping 命令,结果如下(连接到 wifi 时):
ping myip -p 3000
PATTERN: 0x3000
PING myip (myip) 56(84) bytes of data.
64 bytes from myip: icmp_seq=1 ttl=56 time=4.28 ms
64 bytes from myip: icmp_seq=2 ttl=56 time=4.33 ms
64 bytes from myip: icmp_seq=3 ttl=56 time=2.77 ms
64 bytes from myip: icmp_seq=4 ttl=56 time=3.82 ms
答案1
我不太熟悉 nmap,我想知道“过滤”是否意味着我当前网络上的防火墙正在过滤连接,或者 Raspberry Pi 上的防火墙正在过滤它。
“过滤”仅表示探测被完全忽略,没有响应。(如果您使用选项运行 nmap --reason
,它会告诉您大致相同的信息。)它没有真正告诉您连接尝试在何处被阻止 – 它实际上可能在路径上的任何地方。
现在,公共 Wi-Fi 网络(例如图书馆、学校)经常会阻止所有不常见的端口(例如,以阻止人们在那里运行 BitTorrent),因此您可以放心地认为问题就在这里。
解决方法是使用更常见的端口。例如,如果它是一个 Web 应用程序,请在标准 HTTPS 端口 443 上运行它(如果您的家庭 ISP 允许这样做)。(您可以在“反向代理”模式下使用 Apache/Nginx 在同一端口上多路复用多个 Web 应用程序。)
然而,如果你仅根据 nmap 的输出进行猜测,那么它可以可能是 Pi 的防火墙将它们丢弃(如果通过网络共享工作的话,这种情况不太可能发生,但从技术上讲是可行的),和可能是你家的路由器丢了它们(同样),和可能是图书馆的 ISP 阻止了数据包(这可能发生在某些“常被滥用”的端口上),和可能是你家里的 ISP 无法从图书馆的 ISP 获取任何数据包,和可能是 Pi 接收到了你的探测,但是回应没有打通...换句话说,简单的 nmap 扫描不能提供足够的信息来定位问题。
A路由追踪程序可能会提供更多信息,如果您可以告诉它在这个端口上专门使用 TCP 探测(而不是通常的 ICMP),例如traceroute --tcp --port=3000
。
(Nmap 有自己的--traceroute
选项,但不幸的是它似乎没有办法指定用于 traceroute 探测的端口,甚至忽略了规范-p
。)