0

'ping'アプリケーションの使用が許可されていないLinuxシステムを使用しています(ping:icmp open socket:操作は許可されていません)。ただし、私が書いているスクリプト(PHPですが、必要に応じて任意のスクリプト/プログラムへのexec()呼び出しを使用できます)は、ホストが「生きている」かどうかを判断する必要があります。'ping'を使用せずにこれを実行するにはどうすればよいですか?

4

5 に答える 5

2

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-18T10:52:28.213 に答える
1

ping(ICMP)を実行するには、rootアクセスが必要です。

あなたが持っている唯一の方法は、TCPまたはUDPpingを実行することです。例が必要な場合は、 Cactiのコードを確認するか、hpingを使用してそれを行うことができます

于 2009-06-18T15:10:04.047 に答える
1

または、UNIXの「ping」プログラムにSUIDビットを設定できます;)

于 2011-03-29T22:08:08.130 に答える
0

http://us2.php.net/manual-lookup.php?pattern=socket

ただし、pingでソケットを開くことができない場合は、これらのいずれかを使用できる可能性はほとんどありません。ホスティングプロバイダーに相談してください。

于 2009-06-18T02:46:41.733 に答える
0

PHPマニュアルには、PHPでpingを実装するためのユーザー提供のコードが記載されています。残念ながら、rootアクセスが必要なため、rootアクセスも使用できない可能性があります。1つの代替方法は、curlを使用して、curl_getinfo()によって返される値を確認することです。

c = curl_init('http://www.site.com/');
curl_exec($c);
$info = curl_getinfo($ch);

pingと同等にはほど遠いですが、それでもニーズに適している可能性があります。

于 2009-06-18T03:11:28.733 に答える