Рейтинг:0

Подключение сокета PHP через маршрутизатор XR300 к принтеру чеков

флаг cn

У меня есть приложение 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(): невозможно подключиться [111]: в соединении отказано и журналы маршрутизатора показывают, что соединение не удалось.

В журналах маршрутизатора я заметил, что начальный порт является случайным, и попытался изменить конфигурацию переадресации портов на: введите описание изображения здесь

Это дает мне тот же результат, и мой маршрутизатор не дает мне много информации для продолжения (почему соединение не удалось, было ли оно заблокировано?). Это все, что показано в логах:

введите описание изображения здесь

Редактировать: В меню утилиты настройки принтера ничего не упоминается о брандмауэре или удаленных подключениях. введите описание изображения здесь

Gerard H. Pille avatar
флаг in
Вы пытаетесь подключиться к 192.168.1.150:9100? Вы должны использовать IP-адрес маршрутизатора.
EvilZebra avatar
флаг cn
@GerardH.Pille - нет, я пытаюсь подключиться к общедоступному IP-адресу маршрутизатора.Я полагаю, что маршрутизатор автоматически направляет меня на этот локальный адрес из-за переадресации порта с установленным внутренним IP-адресом?
Gerard H. Pille avatar
флаг in
ХОРОШО. Случайный начальный порт (эфемер IIRC) - это то, как это работает. Теперь принтер прослушивает 9100 и принимает внешние подключения? «Начальный порт» должен быть 9100 внешним и внутренним.
EvilZebra avatar
флаг cn
Принтер прослушивает (как я упоминаю в своем посте, я могу успешно подключиться и распечатать на устройстве с помощью локального сценария nodejs), и я не думаю, что он различает внутренние и внешние соединения.
Gerard H. Pille avatar
флаг in
Вы можете убедиться? В настоящее время я не вижу, что еще это может быть. Я проверю ваш PHP-код.
EvilZebra avatar
флаг cn
Я на 100% уверен. Мой исходный PHP-код отправляет детали в nodejs, nodejs подключается к принтеру локально через сокет и печатает детали. Новый код PHP пытается подключиться к сокету напрямую (и удаленно). Использую старый код - принтер работает, новый код - ошибки.
EvilZebra avatar
флаг cn
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/133066/discussion-between-evilzebra-and-gerard-h-pille).
Gerard H. Pille avatar
флаг in
Это не доказывает, что принтер принимает внешние подключения. PHP, который вы показываете, в порядке, я могу подключиться к своему принтеру, используя внешний адрес, но у моего принтера нет настроек «брандмауэра». HP direct активен (прослушивает порт 9100) или нет.
EvilZebra avatar
флаг cn
@GerardH.Pille - согласно нашему обсуждению в чате, я проверил ваши последние идеи, и оказалось, что это шлюз по умолчанию! Согласно поиску Google, на устройстве должен быть установлен шлюз по умолчанию, чтобы иметь возможность удаленно общаться. Поэтому я установил `192.168.1.1`, и все в порядке. Не стесняйтесь давать ответ на этот вопрос, чтобы я мог принять его и получить вашу карму.
Рейтинг:1
флаг in

Тогда меня интересует шлюз 0.0.0.0 в сетевой конфигурации принтера.

Это означает, что ваш принтер может напрямую подключаться к любому IP-адресу. При нормальных обстоятельствах система сможет напрямую взаимодействовать только с другими системами в своей подсети (см. маску). Для более широкого охвата необходимо пройти через шлюз.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.