2012-07-06 174 views
4

我想将一些代码从perl转换为php。“连接被拒绝”错误在socket_connect php

Perl代码看起来像下面:

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

,我试图用插座做同样的事情在PHP。 我试过socket_create和socket_connect, socket_create和socket_bind,以及fsocketopen。

其结果是,我坚持用错误信息,说 “连接被拒绝” 或 “权限被拒绝”:

socket_connect()[function.socket-连接]:无法连接[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是否等同于使用的函数。

谢谢。

回答

3

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

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

setsebool -P httpd_can_network_connect 1

我有几个concers到你的例子,虽然。你的Perl片段中的Connect似乎不是标准套接字连接;我不知道它属于哪个模块,但是你确定电话背后没有魔法吗?由于socket_connect以虚线四舍五入形式表示地址(对于IPv4),请确保您未传递主机名(您需要首先进行DNS查找)。最后检查它是否真的是你需要的TCP套接字,而不是UDP。

+0

很好的答案!做得好。 – 2012-07-07 06:41:43

+0

谢谢你的回答。 Connect是一个辅助函数,而不是标准套接字连接函数。我还没有建立正确的联系,但我会继续努力,你的回答会非常有帮助。再次感谢。 – user1507925 2012-07-10 01:35:14

+0

@ user1507925乐意提供帮助,如果您无法解决问题,请向我们发送一些更多详细信息。 – tomasz 2012-07-10 23:04:18