django - 为什么我可以连接到http ://127. 0.0.1 :8000/but not to http://192. 168.1.6/

标签 django macos sockets networking firewall

我在本地 IP 地址为 192.168.1.6 的计算机上运行 OS X Mountain Lion(由网络实用程序和 ifconfig 报告),并且在我想要的端口 8000 上运行本地 (Django) 开发 Web 服务器从在同一台计算机上运行 guest 操作系统的虚拟机进行连接。

在主机操作系统(即,在地址为 192.168.1.6 的机器上运行的 OS X)上,我可以通过浏览器导航到 127.0.0.1:8000 连接到我的测试 Web 服务器;或本地主机:8000;但使用机器的本地 IP 地址时则不然。这就是让这变得更加令人困惑的原因:

  • 路由器没有过滤端口;并且,为了确定,我已将其设置为显式将端口 8000 和 22 转发到 192.168.1.6;说到端口 22,
  • 当我启动 SSH 服务时,我可以通过 ssh 192.168.1.6 连接(从命令行)
  • 这不是浏览器问题,因为我也无法 telnet 到 192.168.1.6 端口 8000(连接被拒绝),而我可以 telnet 到 127.0.0.1 端口 8000,而且我还可以 telnet 到192.168.1.6端口22
  • 防火墙已设置为关闭(如系统偏好设置中所报告),但为了更加安全,我还设置了 ipfw 规则以允许所有内容通过

以下是 ipfw 规则:

00100 allow tcp from any to any dst-port 8000
65535 allow ip from any to any

这里是我的测试服务器确实正在监听该端口的额外确认:

netstat -an | grep 8000
tcp4       0      0  127.0.0.1.8000         *.*                    LISTEN 

所以这是怎么回事?不知何故,端口 22 的处理方式与端口 8000 不同,但在我能想到的每个地方都找不到这些差异。为什么我无法使用 native IP 地址进入该机器的 8000 端口?

最佳答案

当你启动 Django 开发服务器时,你需要明确给出地址:

python manage.py runserver 192.168.1.6:8000

或者,如果您希望服务器在您可以使用的所有接口(interface)上运行:

python manage.py runserver 0.0.0.0:8000

在其他情况下,Django 开发服务器默认仅在本地界面上运行。

关于django - 为什么我可以连接到http ://127. 0.0.1 :8000/but not to http://192. 168.1.6/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19167178/

相关文章:

javascript - Socket.io 客户端由于 ping 超时/传输关闭而断开连接

django - Docker - psql : django. db.utils.OperationalError: FATAL: 角色 "admin"不存在

javascript - 添加将 Excel 数据粘贴到 Django 表单中的功能

macos - CMake在带有brew的OS X上找不到Boost

java - ServerSocket 文件传输丢失字节

sockets - 当两台计算机通过网络连接进行交互时,它们首先必须建立套接字连接吗?

django - 如何通过南迁移在现有模型中添加一对一的关系字段

python - 如何为 Django 管理员创建选项卡?

c++ - Mac 的 McCabe 风格的功能复杂性测试

objective-c - 为什么文本字段中闪烁的光标会导致调用 drawRect?