我在Linux系统上,不允许使用'ping‘应用程序(ping: icmp open socket:操作不允许)。但是,我正在编写的脚本(PHP,但如果需要,我可以对任何脚本/程序使用exec()调用)需要确定主机是否“活着”。我怎么才能在不使用ping的情况下做到这一点?
发布于 2009-06-18 10:52:28
如果ping不能做到这一点,你就不能用另一种语言来做到这一点。这里有一个类比,可能会帮助你理解其中的原因。假设文件系统上有一个文件,您想要查看其内容。你运行cat filename,它会显示cat: filename: Permission denied。您认为Perl (或任何其他语言)会比C更好吗?让我们试一试:
#!/usr/bin/perl
use strict;
use warnings;
die "usage: $0 filename" unless @ARGV == 1;
my $filename = shift;
open my $fh, "<", $filename
or die "could not open $filename: $!\n";
print while <$fh>;当对该文件运行时,它会显示could not open filename: Permission denied。无论你尝试使用哪种语言,你都会得到Operation not permitted。
也就是说,还有其他方法可以确定机器是否处于活动状态。如果已知有一台服务器始终在机器上运行,您可以尝试连接到它。请注意,你不需要完成连接(例如登录),只要你能成功启动连接就足以知道盒子已经打开了。
发布于 2009-06-18 15:10:04
要执行ping (ICMP),您需要root访问权限。
唯一的方法是执行TCP或UDP ping。如果您想要一个示例,请检查Cacti的代码,或者可以使用hping为您完成此操作
发布于 2011-03-30 06:08:08
或者您可以在unix上的"ping“程序上设置SUID位;)
https://stackoverflow.com/questions/1010506
复制相似问题