5

別のマシンが一般的に PHP で応答しているかどうかを確認したい。

ほとんどのアプローチは、ターゲット マシンで実行されているサービスに ping を実行することですが、マシンが一般的にオンラインであるかどうかを確認したいと考えています。

ICMP Ping パッケージを送信すると思われるhttp://birk-jensen.dk/2010/09/php-ping/を見つけました。問題は、どういうわけかroot、実行する必要があることsocket_create(AF_INET, SOCK_RAW, 1)です。昇格したアクセス許可も必要であるため、経由の回避策posix_seteuid(0)も機能しません。

プログラムを実行できる機能はping 、私のシナリオでも使用できません。

では、PHPを使用してサーバーがオンラインかどうかを確認するにはどうすればよいですか?

4

2 に答える 2

1

これを試してみると、意味のあるデータが得られる可能性はほとんどありませんが、理解する必要があります。

ランダムなポートへの tcp ソケットを開くと、タイムアウトする代わりにすぐに閉じます。その後、マシンは「稼働」していますが、これはそれ以上の意味はありません。カーネルパニックの可能性があります。

また、タイムアウトはマシンがダウンしていることを意味するものではありません。tcp ハンドシェイクを拒否する代わりにドロップしただけです。

これで意味のあるタイミングデータを取得することはできませんが、問題のマシンがオンまたはオフの場合、より知識に基づいた推測が得られます.

<?php
$sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_connect ( $sock , string $address,22 ) === true) {
switch(socket_last_error($sock)) {
    case 110:
    case 112:
    case 113:
       echo 'Machine may be down';
       break;
    case 111:
       echo 'Machine may be up';
       break;
    case 115:
       echo 'Machine is up';
       break;
    default:
       echo 'Machine in unknown state.';
       break;
}

あなたはすでにpingコマンドを使用できないと述べたので、Net_Pingはオペレーティングシステムのpingコマンドへの単なる派手なインターフェースであるため機能しません

于 2012-12-23T00:05:56.860 に答える
1

いつでも Net_Ping を使用して、php http://pear.php.net/package/Net_Ping/redirectedから ping を実行できます。

于 2012-12-22T20:42:09.997 に答える