繁体   English   中英

php中的socket_connect上的“连接被拒绝”错误

[英]“Connection refused” error on socket_connect in php

我试图将一些代码从perl转换为php。

Perl代码如下所示:

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

我试图使用socket在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是否是要使用的等效函数。

谢谢。

如果你的perl代码能够建立连接,那么在php中也不需要额外的权限来做同样的事情。 连接被拒绝意味着远程主机不允许您进入(您可能连接到错误的地址/端口)。 权限被拒绝更令人惊讶,很多人在启用SELinux的情况下运行httpd脚本时遇到此类问题。 如果您是其中之一,请参阅SELinux手册页:

可以设置SELinux策略,以便不允许httpd脚本连接到网络。 这可以防止黑客攻击你的httpd服务器并攻击其他机器。 如果您需要能够连接的脚本,可以在以下位置设置httpd_can_network_connect布尔值:

setsebool -P httpd_can_network_connect 1

不过,我对你的例子有一些看法。 从您的Perl片段Connect似乎不是标准的套接字连接; 我不知道它属于哪个模块,但你确定这个电话背后没有魔力吗? 由于socket_connect以点分四位表示法(对于IPv4)采用地址,因此请确保您没有传递主机名(您需要先进行DNS查找)。 在最后检查它是否真的是你需要的TCP套接字,而不是UDP。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM