我有一个 PHP 应用程序试图通过我的路由器打开与打印机的套接字连接。
需要注意的几件事 - 我缺乏网络技能,所以我可能会遗漏一些明显的东西,或者这甚至可能无法以我想要的方式实现。话虽如此,我已经对这个问题进行了大量搜索,但似乎找不到任何有这个确切问题的人(只是很多人试图远程 SSH)。我也知道我尝试连接的设备正在按预期工作,因为我有一个小型 nodejs 应用程序,它成功地在本地网络上打开了与它的连接。最后,我使用 Docker 在本地运行 PHP 应用程序,这可能与我的问题有关(尽管由于日志,我知道连接正在到达路由器)。
代码很简单:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_TCP, SO_DEBUG, 1);
$server_connect = socket_connect($socket, "router_public_ip", 9100);
当我尝试连接 PHP 时会抛出异常socket_connect(): unable to connect [111]: Connection refused
并且路由器日志显示连接失败。
我在路由器日志中注意到启动端口是随机的,并尝试将我的端口转发配置更改为:
这给了我相同的结果,并且我的路由器没有给我太多信息(关于连接失败的原因,是否被阻止?)。这就是日志中显示的全部内容:
然后我想知道打印机网络配置中的 0.0.0.0 网关。
这意味着您的打印机可以直接连接到任何 IP 地址。在正常情况下,系统只能与子网中的其他系统直接通信(见掩码)。为了更广泛的覆盖范围,它需要通过一个网关。