Eu tenho um aplicativo PHP que está tentando abrir uma conexão de soquete para uma impressora através do meu roteador.
Algumas coisas a serem observadas - minhas habilidades de rede estão faltando, então posso estar perdendo algo óbvio ou isso pode nem ser possível da maneira que eu quero que seja. Dito isto, pesquisei muito sobre o problema e não consigo encontrar ninguém com esse problema exato (apenas muitas pessoas tentando SSH remotamente). Também sei que o dispositivo ao qual estou tentando me conectar está funcionando conforme o esperado porque tenho um pequeno aplicativo nodejs que abre com êxito uma conexão com ele na rede local. E, finalmente, estou usando o Docker para executar o aplicativo PHP localmente, o que pode ser relevante para o meu problema (embora eu saiba que a conexão está chegando ao roteador devido aos logs).
O código é simples:
$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);
Dentro do meu roteador, configurei essa porta para ser encaminhada:
Quando tento conectar o PHP lança socket_connect(): unable to connect [111]: Connection refused
e os logs do roteador mostram que uma conexão falhou.
Percebi nos logs do roteador que a porta inicial é aleatória e tentei alterar minha configuração de encaminhamento de porta para:
Isso me dá o mesmo resultado e meu roteador não me dá muitas informações para continuar (por que a conexão falhou, foi bloqueada?). Isso é tudo o que é mostrado nos logs:
Editar: O menu do utilitário de configuração da impressora parece não mencionar nada sobre um firewall ou conexões remotas.
Então me pergunto sobre o gateway 0.0.0.0 na configuração de rede da impressora.
Isso significaria que sua impressora pode se conectar diretamente a qualquer endereço IP. Em circunstâncias normais, um sistema só poderá se comunicar diretamente com outros sistemas em sua sub-rede (consulte a máscara). Para maior alcance, ele precisará passar por um gateway.