2012-06-27 42 views
0

我找不到任何有關此信息,我想知道這是甚至可能嗎? 我有一臺Minecraft服務器,我想要查看它是否在特定端口上。我想用Javascript做到這一點,但從我可以看到,你不能做到這一點,或以前沒有做過。有沒有可以實現這一目標的插件或第三方Javascript供應商?看看服務器端口是否使用JavaScript打開

例如:

mc.mydomain.net:25565 

的Javascript坪的服務器,它改變來自網上的文字離線,取決於它是否可以連接。

Server is: Online 

或者

Server is: Offline 

回答

2

如果它發生在我的世界服務器實際上講的平原HTTP端口(這是不可能的),那麼它可以工作。

否則,不,不能完成,至少不符合當前的規範。

瀏覽器只能說HTTP(即Web服務器)和WebSockets及其SSL變體。我不知道即將到來的WebRTC協議是否會有所幫助。

另一種方法是使用Flash-AIUI,它具有普通的TCP套接字功能,可以暴露給可能有助於這些情況的JS代碼。

+0

downvoter請解釋一下? – Alnitak

0

您只能向使用JavaScript的域發送HTTP(S)或WS(S)請求。 A Ping太低級了。

如果minecraft服務器支持HTTP,您可以嘗試使用它。

2

首先你不能Ping通端口,因爲Ping使用的ICMP沒有端口的概念。端口屬於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請求。

0

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); 
}; 
相關問題