1

これに関する情報が見つかりません。これが可能かどうか疑問に思っていましたか? 特定のポートでオンになっているかどうかを確認するために ping を実行したい Minecraft サーバーがあります。私はJavascriptでこれをやりたいと思っていますが、私が見ることができることから、実際にはそれができないか、以前に行われたことがありません. これを実現できるプラグインまたはサードパーティの Javascript ベンダーはありますか?

例えば:

mc.mydomain.net:25565

Javascript はサーバーに ping を送信し、接続できるかどうかに応じて、テキストをオンラインからオフラインに変更します。

Server is: Online

または

Server is: Offline
4

4 に答える 4

2

Ping はポートの概念を持たない ICMP を使用しているため、まずポートに ping を実行できません。ポートは、TCP や UDP などのトランスポート層プロトコルに属します。

そのため、PHP などのサーバー側言語を使用してクエリを実行し、このページに AJAX リクエストを送信して結果を取得することで解決できます。PHP での例を次に示します。

<?php                                                                                                                                       
  error_reporting(E_ERROR);                                                                                                                   
  $fp = fsockopen('mc.mydomain.net', 25565, $errno, $errstr, 1);                                                                                
  if (!$fp) {                                                                                                                                 
    echo 'no';                                                                                                                                
  } else {                                                                                                                                    
    echo 'yes';                                                                                                                               
    fclose($fp);                                                                                                                              
  }                                                                                                                                           
?>

さらに、リクエストを高速に保つために、上記のクエリの結果をファイルまたはデータベースにキャッシュし、その値を数分ごとに更新して (たとえば、cron ジョブを使用して)、キャッシュされた結果をAJAX リクエスト。

于 2012-06-27T20:13:25.103 に答える
2

Minecraft サーバーが実際にそのポートで平文の HTTP を話す場合 (これはありそうもないことです)、動作する可能性があります。

そうでなければ、少なくとも現在の仕様ではできません。

ブラウザーは、HTTP (つまり、Web サーバーに対して) と WebSocket、およびその SSL バリアントのみを対話できます。今後の WebRTC プロトコルが役立つかどうかはわかりません。

別の方法として、Flash (これらの状況で役立つ可能性がある JS コードに公開できるプレーンな TCP ソケット機能を持つ AIUI) を使用することもできます。

于 2012-06-27T19:46:11.400 に答える
1

http://www.gnucitizen.org/static/blog/2006/08/jsportscanner.jsから、「javascript ポートスキャン」を検索すると最初にヒットします。

var AttackAPI = {
    version: '0.1',
    author: 'Petko Petkov (architect)',
    homepage: 'http://www.gnucitizen.org'};

AttackAPI.PortScanner = {};
AttackAPI.PortScanner.scanPort = function (callback, target, port, timeout) {
    var timeout = (timeout == null)?100:timeout;
    var img = new Image();

    img.onerror = function () {
        if (!img) return;
        img = undefined;
        callback(target, port, 'open');
    };

    img.onload = img.onerror;
    img.src = 'http://' + target + ':' + port;

    setTimeout(function () {
        if (!img) return;
        img = undefined;
        callback(target, port, 'closed');
    }, timeout);
};
AttackAPI.PortScanner.scanTarget = function (callback, target, ports, timeout)
{
    for (index = 0; index < ports.length; index++)
        AttackAPI.PortScanner.scanPort(callback, target, ports[index], timeout);
};
于 2012-06-27T20:19:25.893 に答える
0

JavaScript を使用しているドメインに対してのみ、HTTP(S) または WS(S) リクエストを送信できます。Pingはレベルが低すぎます。

minecraft サーバーが HTTP をサポートしている場合は、それを使用することができます。

于 2012-06-27T19:47:38.390 に答える