Как достичь открытого и прослушиваемого порта в Linux?

С помощью zsh :

zsh -xl

В bash :

PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>&2

Это будет имитировать оболочку входа в систему и показать все, что выполняется (кроме областей, где stderr перенаправляется с помощью ] zsh ) вместе с именем файла, который в настоящее время интерпретируется.

Все, что вам нужно сделать, это найти в этом выводе JAVA_HOME . (вы можете использовать команду script , чтобы сохранить этот вывод).

1
19.07.2016, 04:05
2 ответа

Оказывается, проблема заключалась в нескольких вещах, в основном из-за моего модема / маршрутизатора. Я использую Motorola SB6580 , в котором недавно было обновление прошивки, и который не перезагружался в течение 10 дней, из-за чего он работал довольно медленно, что не позволяло мне вносить в него слишком много изменений.

Обновление микропрограммы изменило страницу переадресации портов , чтобы включить здесь раздел с внешним адресом удаленного хоста (по умолчанию 0.0.0.0), здесь нет проблем, но что-то еще они нарушили существующие правила переадресации портов, которые я установил .

Я использовал диапазон перенаправляемых портов, который не работал, и, изменив этот диапазон на 8399 - 8399, он снова начал работать. Перезагрузка не повлияла на это, кроме увеличения скорости модемов, и не изменила протокол с Оба на TCP.

IP Addr|Start Port|End Port|Remote Host Addr|Start Port|End Port|Protocol|Enabled
192.168.0.101|8340|    8399|         0.0.0.0|      8340|    8399|    Both|Checked
192.168.0.101|8399|    8399|         0.0.0.0|      8399|    8399|     TCP|Checked

Кроме того, при использовании PHP-команды gethostbyname (gethostname ()) в Linux возвращается локальный адрес 127.0.1.1, вторая запись в файле / etc / hosts, которая не будет работать для привязки сокета. $ _SERVER ['REMOTE_ADDR'] также возвращает предупреждение: невозможно найти хост. вручную изменив его на домашний адрес (подсеть?) (У меня 192.168.0.101) или подстановочный знак IPv4 0.0.0.0 , прослушиватель сокета привязывается правильно и принимает внешние соединения.

Мой опыт работы с маршрутизатором и отсутствие опыта работы с Linux заставили меня склониться к неправильному пути устранения неполадок Linux. Заметив, что что-то не работает и в Windows 7, я внес два вышеуказанных изменения, и теперь все работает как надо.

0
28.01.2020, 01:31

Вам что-то не хватает концептуально и в коде. У вас есть PHP-код, который прослушивает соединения, но вы должны принять соединение перед его использованием.

$ns = socket_accept($this->wsRead[0]);
$some_string = socket_read($ns, 128);

Вызов socket_accept () блоков. Он не вернется, пока какая-то клиентская программа не подключится к программе, ожидающей подключения.

Вызов socket_accept () возвращает фактический сокет, который вы используете для связи с удаленной программой. Я не думаю, что isset () - это действительно то, что вам нужно, вам следует изучить socket_select () или что-то в этом роде. Когда вы закончите общение с пультом дистанционного управления, вы вызываете socket_close ($ ns) , а затем возвращаетесь к вызову socket_accept ($ this-> wsRead [0]) , чтобы дождаться другая удаленная программа для подключения к вашей программе.

Когда ваша PHP-программа завершит обработку соединений, она должна вызвать socket_close ($ this-> wsRead [0]) , чтобы закрыть сокет, который в основном сообщает ядру ОС прекратить прослушивание входящего TCP SYN. пакеты для указанного вами порта.

0
28.01.2020, 01:31

Теги

Похожие вопросы