首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从动态语言Ping而不使用'ping‘

从动态语言Ping而不使用'ping‘
EN

Stack Overflow用户
提问于 2009-06-18 02:39:44
回答 5查看 894关注 0票数 0

我在Linux系统上,不允许使用'ping‘应用程序(ping: icmp open socket:操作不允许)。但是,我正在编写的脚本(PHP,但如果需要,我可以对任何脚本/程序使用exec()调用)需要确定主机是否“活着”。我怎么才能在不使用ping的情况下做到这一点?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-06-18 10:52:28

如果ping不能做到这一点,你就不能用另一种语言来做到这一点。这里有一个类比,可能会帮助你理解其中的原因。假设文件系统上有一个文件,您想要查看其内容。你运行cat filename,它会显示cat: filename: Permission denied。您认为Perl (或任何其他语言)会比C更好吗?让我们试一试:

代码语言:javascript
复制
#!/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

也就是说,还有其他方法可以确定机器是否处于活动状态。如果已知有一台服务器始终在机器上运行,您可以尝试连接到它。请注意,你不需要完成连接(例如登录),只要你能成功启动连接就足以知道盒子已经打开了。

票数 2
EN

Stack Overflow用户

发布于 2009-06-18 15:10:04

要执行ping (ICMP),您需要root访问权限。

唯一的方法是执行TCP或UDP ping。如果您想要一个示例,请检查Cacti的代码,或者可以使用hping为您完成此操作

票数 1
EN

Stack Overflow用户

发布于 2011-03-30 06:08:08

或者您可以在unix上的"ping“程序上设置SUID位;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1010506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档