Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在PHP中进行真正的ping?(无执行董事)_Php_Ping_Icmp - Fatal编程技术网

有没有办法在PHP中进行真正的ping?(无执行董事)

有没有办法在PHP中进行真正的ping?(无执行董事),php,ping,icmp,Php,Ping,Icmp,我正在尝试使用PHP中的ICMP数据包进行真正的ping。现在我使用exec来运行ping命令,但是您永远不知道它将输出什么,这使得为web设置结果格式非常困难。不同的网络设置可能会导致一些疯狂的输出。因此,我使用socket_create()编写了自己的pinger(在手册注释的帮助下),但这也不起作用。显然,除非apache服务器以root用户身份运行,否则无法创建原始套接字。这也不是一个好的解决方案 这是一个web工具,访问者在自己身上运行ping,这意味着他们访问页面,我的服务器对他们进

我正在尝试使用PHP中的ICMP数据包进行真正的ping。现在我使用exec来运行
ping
命令,但是您永远不知道它将输出什么,这使得为web设置结果格式非常困难。不同的网络设置可能会导致一些疯狂的输出。因此,我使用socket_create()编写了自己的pinger(在手册注释的帮助下),但这也不起作用。显然,除非apache服务器以root用户身份运行,否则无法创建原始套接字。这也不是一个好的解决方案

这是一个web工具,访问者在自己身上运行ping,这意味着他们访问页面,我的服务器对他们进行ping,并输出结果。所以我不能只打开tcp连接,关闭它,然后将其用作ping,因为谁知道用户是否有任何端口打开

还有一个用于ping的pear包,但最终它只是
exec(“ping$host”)的包装器

我可能会被使用系统ping命令的旧代码卡住。但我只是想先确定没有其他解决方案。因为如果可以的话,我真的很想在PHP中实现这一点

这是我的ping函数。它失败,出现“无法创建套接字[1]”错误:

函数ping_you() { $package=“\x08\x00\x19\x2f\x00\x00\x00\x70\x69\x6e\x67”; $sock=socket\u create(AF\u INET,sock\u RAW,1); 如果($sock==false) {
echo“>>”.socket\u strerror(socket\u last\u error())。“您可以更改sudoers文件,以允许www数据以root用户身份运行php脚本,而无需密码

www-data ALL=(ALL)NOPASSWD:/path/to/mypingscript
然后您可以从ApachePHP中
exec(sudo/path/to/mypingscript)
,这将进行ICMP调用并返回一条格式符合您需要的消息


不过要小心,修改你的sudoers文件可能会很危险。如果你破坏了它,你将无法运行sudo命令,如果你设置了错误的权限,这可能会产生糟糕的安全后果。

我如何使用CURL to ping?你必须是root用户才能创建原始套接字。是的……这就是我说的原因。所以你知道这样做吗因为不使用root是不可能的,对吗?然后也许你可以更改你的sudoers文件,允许www data在没有密码的情况下以root身份运行一个php脚本。然后你可以
exec
这个脚本,它将进行ICMP调用,并返回一条符合你喜欢的格式的消息。哈,原来我没有足够的声誉来支持这个。但这是一个错误很好的解决方案,我将使用它。我实际上做了一些类似的事情,这样我的网站就可以自动将泛滥的用户添加到我的服务器防火墙。但我甚至没有想到使用相同的系统来实现这一点。但我认为它会很好地工作,谢谢!作为创建问题的用户,您有能力验证answer(即使你还不能投票)。但在投票之前先尝试一下。
www-data ALL=(ALL)NOPASSWD:/path/to/mypingscript