Ошибка соединения с соединением в socket_connect в php

Я пытаюсь преобразовать некоторый код из perl в php.

Код Perl выглядит следующим образом:

my $handle = Connect($port, $host);

и я пытаюсь использовать сокет, чтобы делать то же самое в php. Я пробовал socket_create и socket_connect, socket_create и socket_bind и fsocketopen.

В результате я застрял в сообщениях об ошибках с сообщением «Соединение отказано» или «разрешение отклонено»:

socket_connect () [function.socket-connect]: невозможно подключиться [111]: соединение отклонено

Я не уверен, что это проблема, которую мне нужно решить, или проблема разрешения, потому что код в perl отлично работает (я не писал этот код).

мой PHP-код выглядит следующим образом:

 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if(!$socket){ die('Error: socket_create()'); } if(!socket_connect($socket,$host,$port)) { die('Error: socket_connect()'); } 

Я не тот, кто управляет сервером, поэтому мне нужно будет спросить кого-то другого о доступе, если это проблема с разрешением. Что я должен спросить конкретно?

Или я должен использовать другую функцию для подключения к серверу? Я новичок в perl, поэтому я не уверен, является ли socket_connect эквивалентной функцией для использования или нет.

Благодарю.

Solutions Collecting From Web of "Ошибка соединения с соединением в socket_connect в php"

Если ваш Perl-код может установить соединение, не требуется дополнительных разрешений, чтобы сделать то же самое в php. Отклонено соединение означает, что удаленный хост не позволяет вам (возможно, вы подключаетесь к неправильному адресу / порту). Отказ от прав более удивителен, многие люди сталкиваются с такой проблемой при запуске скриптов httpd с включенным SELinux. Если вы один из них, обратитесь к странице руководства SELinux:

Политика SELinux может быть настроена так, что скрипты httpd не могут подключаться к сети. Это помешало бы хакеру проникнуть в вас на сервер httpd и атаковать другие машины. Если вам нужны сценарии для подключения, вы можете установить httpd_can_network_connect boolean:

setsebool -P httpd_can_network_connect 1

Однако у меня есть несколько советов к вашим примерам. Connect от вашего фрагмента Perl, похоже, не является стандартным подключением к сокету; Я не знаю, к какому модулю он принадлежит, но уверены ли вы, что за вызовом нет волшебства? Поскольку socket_connect принимает адрес в нотации с точками- socket_connect (для IPv4), убедитесь, что вы не передаете имя хоста (сначала вам нужно будет выполнить поиск DNS). В самом конце проверьте, действительно ли это TCP-сокет, а не UDP.