我找不到任何关于此的信息,我想知道这是否可能? 我有一个我想ping的Minecraft服务器,以确定它是否在特定端口上。我想在Javascript中这样做但是从我可以看到你无法真正做到这一点或者之前没有做过。是否有任何插件或第三方Javascript供应商可以实现这一目标?
例如:
mc.mydomain.net:25565
Javascript ping服务器,它会将文本从在线更改为离线,具体取决于它是否可以连接。
Server is: Online
或者
Server is: Offline
答案 0 :(得分: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请求。
答案 1 :(得分:1)
如果发生Minecraft服务器实际上在该端口上说平原HTTP(这不太可能),那么它可以工作。
否则,不,不能这样做,至少不能用当前的规格。
浏览器只能与HTTP(即Web服务器)和WebSockets以及其SSL变体进行通信。我不知道即将推出的WebRTC协议会有所帮助。
另一种方法是使用Flash-AIUI,它具有普通的TCP套接字功能,可以在这些情况下为JS代码公开。
答案 2 :(得分:0)
您只能向使用JavaScript的域发送HTTP(S)或WS(S)请求。 Ping太低级了。
如果Minecraft服务器支持HTTP,您可以尝试使用它。
答案 3 :(得分:0)
来自http://www.gnucitizen.org/static/blog/2006/08/jsportscanner.js,搜索“javascript portscan”时的第一个点击:
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);
};