【问题标题】:"Connection refused" error on socket_connect in phpphp中socket_connect上的“连接被拒绝”错误
【发布时间】:2012-07-07 09:23:19
【问题描述】:

我正在尝试将一些代码从 perl 转换为 php。

Perl 代码如下所示:

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

我正在尝试使用套接字在 php 中做同样的事情。 我试过socket_create和socket_connect, socket_create 和 socket_bind,以及 fsocketopen。

因此,我遇到了“连接被拒绝”或“权限被拒绝”的错误消息:

socket_connect() [function.socket-connect]: 无法连接 [111]: Connection denied in

我不确定这是我需要解决的问题,还是权限问题,因为 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 是否是等效的函数。

谢谢。

【问题讨论】:

    标签: php perl sockets


    【解决方案1】:

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

    可以设置 SELinux 策略,从而不允许 httpd 脚本连接到网络。这将防止黑客闯入您的 httpd 服务器并攻击其他机器。如果您需要脚本才能连接,您可以设置 httpd_can_network_connect 布尔值:

    setsebool -P httpd_can_network_connect 1

    不过,我对您的示例有一些看法。您的 Perl sn-p 中的Connect 似乎不是标准的套接字连接;我不知道它属于哪个模块,但你确定调用背后没有魔法吗?由于socket_connect 采用点分四进制表示法(对于 IPv4),请确保您没有传递主机名(您需要先进行 DNS 查找)。最后检查它是否真的是您需要的 TCP 套接字,而不是 UDP。

    【讨论】:

    • 感谢您的回答。 Connect 是一个辅助函数,而不是标准的套接字连接函数。我还没有建立正确的连接,但我会继续努力,你的回答会很有帮助。再次感谢。
    • @user1507925 很乐意为您提供帮助,如果您无法解决问题,请向我们提供更多详细信息。
    猜你喜欢
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多