使用node.js中的net模块,可以直接尝试向目录主机的某个端口进行连接,如果能建立连接,则说明该地址存在服务器。
- var socket = new Socket()
- socket.connect(port, host)
- socket.on('connect', function() {
- //找到port 和 host 地址
- })
所以只要进行255次扫描,则可找到同一网段内所有的web服务器了。完整的示例代码如下,使用Node.JS扫描的速度极快,最你几秒钟即可完成扫描。
- var net = require('net') var Socket = net.Socket
- //待扫描的开始网段,可换成192.168.0
- var ip = '10.0.0'
- var port = 80
- var scan = function(host, cb) {
- var socket = new Socket() var status = null
- socket.setTimeout(1500)
- socket.on('connect',
- function() {
- socket.end() cb && cb(null, host)
- })
- socket.on('timeout',
- function() {
- socket.destroy() cb && cb(new Error('timeout'), host)
- })
- socket.on('error',
- function(err) {
- cb && cb(err, host)
- })
- socket.on('close',
- function(err) {
- })
- socket.connect(port, host)
- }
- for (var i = 1; i <= 255; i++) {
- scan(ip + '.' + i,
- function(err, host) {
- if (err) {
- console.log('Reader not found', host) return
- }
- console.log("Reader found: ", host)
- })
- }
输出结果:
- Reader found: 10.0.0.1
- Reader found: 10.0.0.3
- Reader not found 10.0.0.255
- ......
来源: http://www.tuicool.com/articles/6z6R7bR