2011-04-20 70 views
5

如何确定某个IP地址是否可以连接?如何确定主机是否可达?

我需要编写一个小node.js样本而tryes连接到ip:port并返回truefalse,从而确定,如果主机是可到达与否。

回答

16

http.get

var options = { 
    host: 'www.google.com', 
    port: 80, 
    path: '/index.html' 
}; 

http.get(options, function(res) { 
    if (res.statusCode == 200) { 
    console.log("success"); 
    } 
}).on('error', function(e) { 
    console.log("Got error: " + e.message); 
}); 

function testPort(port, host, cb) { 
    http.get({ 
    host: host, 
    port: port 
    }, function(res) { 
    cb("success", res); 
    }).on("error", function(e) { 
    cb("failure", e); 
    }); 
} 

对于TCP套接字只是使用net.createConnection

function testPort(port, host, cb) { 
    net.createConnection(port, host).on("connect", function(e) { 
    cb("success", e); 
    }).on("error", function(e) { 
    cb("failure", e); 
    }); 
} 
+0

您的解决方案适用于HTTP服务器的互联,但我需要验证是否可以与某个主机建立TCP连接。 – George 2011-04-20 16:03:53

+0

@George然后只需打开一个tcp端口。我将编辑答案 – Raynos 2011-04-20 16:11:19

+0

10x以便及时回答。这正是我需要的 - 建立一个tcp连接 – George 2011-04-21 08:13:20

-2

如果只是HTTP你有兴趣,你可以使用HTTP HEAD请求(而不是POST/GET):

function hostAvailable(url) { 
    var req = new XMLHttpRequest(); 
    req.open('HEAD', url, false); 
    req.send(); 
    return req.status!=404; 
} 
+3

这不是有效的node.js代码。 – Raynos 2011-04-20 15:32:17