2

wake-on-lanパケットを送信する簡単なphpページを作成しました。これは、すべてWindows7を実行している2台のコンピューターです。

コンピューターの電源がオンになっているかどうかを確認するにはどうすればよいですか(その場所でインターネットが機能していると仮定)。

ページが読み込まれたときにコンピューターにpingを実行して、応答を確認することはできますか?

追加情報:コンピューターはすべて別々の場所にあり、IP用にダイナミックDNSが設定されており、他のコンピューターと一緒にルーターの背後にあります。

4

2 に答える 2

5

Windows RDCを介してすべてのコンピューターをリモートデスクトップに接続できます。ポート3389と、個別のWOLポートを開いて、2つのポートを開いています。

次に、リモートデスクトップセッションを開いてみますか?

<?php
$timeout = 10;
$socket = @fsockopen( 'ip-of-the-client', 3389, $errno, $errstr, $timeout );
$online = ( $socket !== false );

var_dump( $online );

コード内の@は、接続を確立できなかった場合にfsockopenがPHP警告をスローするためです。

編集:明確にするために; 3389は、リモートデスクトップ接続の作成に使用されるデフォルトのポートです。

于 2012-06-07T13:55:55.860 に答える
0

これに関して:

Windows RDCを介してすべてのコンピューターをリモートデスクトップに接続できます。ポート3389と、個別のWOLポートを開いて、2つのポートを開いています。

RDPが開いているので(ブロックされる可能性のあるICMP pingを除いて)最善の策は、おそらくポート3389へのTCPソケットを開くことです。これにより、コンピューターがオンラインで完全に起動している(つまり、RDPサービスが実行されている)ことが確認されます。 。

次のように、fsockopenを使用してこれを行うだけです。

function ServiceOnline($ip, $port = 3389) {
    $rdp_sock = @fsockopen($ip, $port, null, null, 5); // 5 sec timeout so that it doesn't hang for a whole minute if not available
    if (!$rdp_sock) {
        return false;
    } else {
        fclose($rdp_sock);
        return true;
    }
}

$port引数を渡すなどして、フォールバックとして別のサービスを利用できる場合にも、このコードを使用できます。

于 2012-06-07T13:56:00.340 に答える