我想知道是否有办法扫描本地网络的IP范围以查找特定数量的开放端口。
本质上,我在寻找< code>nodejs来寻找特定类型的客户端,而不知道它们的IP地址。在这种情况下,侦听端口14150的RFID读取器。
我希望此扫描速度很快,因此我不希望每个IP地址之间出现长时间的超时。它们应该发生得相当快,对于最多255个客户端的整个本地IP范围(不包括我自己的IP),它们可能在几秒钟内最多发生。
我编写了我想要的代码,但速度非常慢...我想看看如何通过快速浏览连接并在20ms内无法连接到给定IP时退出来加快速度。我想捕获数组中的实际连接,然后将其用于其他目的。
var net = require('net'); // Required to create socket connections
var ip = 254; //IP address to start with on a C class network
function checkConnect () {
ip--;
var thisIP = '192.168.1.' + ip; //concatenate to a real IP address
var S = new net.Socket();
S.connect(80, thisIP);
if(ip > 0) { checkConnect(); }
S.on('connect', function () { console.log('port 80 found on ' + thisIP); });
S.on('error', function () { console.log('no such port on ' + thisIP); });
S.end();
}
checkConnect();
您可以使用arp命令首先获取活动设备列表。跳出框框思考;)不必盲目扫描所有设备。
var child = require("child_process");
var async = require("async");
var net = require("net");
var os = require("os");
function scan(port, cb){
var hosts = {};
var result = [];
async.series([
function scan(next, c){
if(c == 1){
next(); return;
}
// scan twice because arp sometimes does not list all hosts on first time
child.exec("arp -n | awk '{print $1}' | tail -n+2", function(err, res){
if(err) cb(err);
else {
var list = res.split("\n").filter(function(x){return x !== "";});
list.map(function(x){
hosts[x] = x;
});
}
scan(next, 1);
});
},
function(next){
// if you want to scan local addresses as well
var ifs = os.networkInterfaces();
Object.keys(ifs).map(function(x){
hosts[((ifs[x][0])||{}).address] = true;
});
// do the scan
async.each(Object.keys(hosts), function(x, next){
var s = new net.Socket();
s.setTimeout(1500, function(){s.destroy(); next();});
s.on("error", function(){
s.destroy();
next();
});
s.connect(port, x, function(){
result.push(x);
s.destroy();
next();
});
}, function(){
next();
});
}
], function(){
cb(null, result);
});
}
scan(80, function(err, hosts){
if(err){
console.error(err);
} else {
console.log("Found hosts: "+hosts);
}
});
您也可以使用arp扫描实用程序,它更可靠。但是 arp-scan 需要 root 访问权限才能工作,因此最好只使用 arp。它几乎可以在每个Linux机器上使用。
前面的答案都没有真正达到我需要的方式。我找到了一个更轻的替代品。有了这个解决方案,我很快就得到了我的解决方案。我的下一个升级将基于当前子网指定主机范围。我想我会想把它限制在前254个客户端,这样就不会过分了。代码如下:
//LLRP DEVICE SCANNER
var net = require('net'), Socket = net.Socket;
var checkPort = function(port, host, callback) {
var socket = new Socket(), status = null;
// Socket connection established, port is open
socket.on('connect', function() {status = 'open';socket.end();});
socket.setTimeout(1500);// If no response, assume port is not listening
socket.on('timeout', function() {status = 'closed';socket.destroy();});
socket.on('error', function(exception) {status = 'closed';});
socket.on('close', function(exception) {callback(null, status,host,port);});
socket.connect(port, host);
}
var LAN = '192.168.1'; //Local area network to scan (this is rough)
var LLRP = 5084; //globally recognized LLRP port for RFID readers
//scan over a range of IP addresses and execute a function each time the LLRP port is shown to be open.
for(var i=1; i <=255; i++){
checkPort(LLRP, LAN+'.'+i, function(error, status, host, port){
if(status == "open"){
console.log("Reader found: ", host, port, status);
}
});
}
我为你做的https://github.com/eviltik/evilscan.(今天刚发布v0.0.3)
安装:
npm install -g evilscan
用途(端口列表端口范围):
root@debian:~# evilscan --target=192.168.0.0/24 --port=21-446,5900 --concurrency=100 --progress
192.168.0.3:5900|open
192.168.0.26:53|open
192.168.0.26:111|open
192.168.0.26:81|open
192.168.0.26:23|open
Scanned 192.168.0.253:446 (100%)
小贴士:
对于非常快速的扫描,您可以使用“并发”参数,超过1000,但您必须首先更新linux的ulimit参数:
ulimit -u unlimited
希望这有帮助。
有办法通过android扫描开放的网络端口吗?例如,在阻止我通过某些端口发送UDP数据包的防火墙后面。那么,有没有一种方法可以扫描哪些端口没有被防火墙阻止接入互联网呢?也许是一个终端应用程序或以编程的方式?
本文向大家介绍Python扫描IP段查看指定端口是否开放的方法,包括了Python扫描IP段查看指定端口是否开放的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python扫描IP段查看指定端口是否开放的方法。分享给大家供大家参考。具体实现方法如下: ini.py: 运行: 希望本文所述对大家的Python程序设计有所帮助。
本文向大家介绍CentOS 7如何快速开放端口,包括了CentOS 7如何快速开放端口的使用技巧和注意事项,需要的朋友参考一下 CentOS升级到7之后,发现无法使用iptables控制Linuxs的端口,google之后发现Centos 7使用firewalld代替了原来的iptables。下面记录如何使用firewalld开放Linux端口: 开启端口 命令含义: --zone #作用域 --
这一章将会演示如何通过Python的网络连接来开发一个基础的端口扫描器,我们的设计思路是使用socket一遍又一遍的去连接ip与端口的组合的新值,为了方面我们能够快速的完成它,首先需要介绍一点新的概念,for循环: >>> >>> for port in range(1000,1024): ... print "[+] The port is: "+str(port) ... [+] The
我正在构建一个应用程序,它将从用户那里提取一个单词,然后使用XPath扫描文件,根据文件中是否找到该单词返回true或false。 我已经构建了以下实现XPath的类,但我要么误解了它应该如何工作,要么我的代码有问题。有人能给我解释一下如何使用Xpath进行完整的文件搜索吗? 以及我目前正在测试的xml文件。 找到解决方案后,我丢失了找到的条目的正确显示,正如有人在注释“java”中指出的那样,我
我正在做一个项目,其中包含一个模块来扫描pdf,从sd卡文档xls文件,并列出它们。我也想只列出文件夹。 因为我对android非常陌生。任何人都有实现这一目标的想法。 这是我的密码: