我正在尝试将一些代码从perl转换为php。
Perl 代码如下所示:
my $handle = Connect($port, $host);
我正在尝试使用套接字在 php 中做同样的事情。我试过socket_create,socket_connect,socket_create和socket_bind,并打开。
结果,我遇到了错误消息,指出"连接被拒绝"或"权限被拒绝":
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布尔值设置为:
塞布尔 -P httpd_can_network_connect 1
不过,我对你的例子有一些看法。 Perl 代码段中的Connect
似乎不是标准的套接字连接;我不知道它属于哪个模块,但你确定调用背后没有魔力吗?由于socket_connect
采用点分四边形表示法(对于IPv4(的地址,请确保您没有传递主机名(您需要先进行DNS查找(。最后检查它是否真的是您需要的TCP套接字,而不是UDP。