Node.js 的 Nmap 運用

利用 Nmap 來進行 IP&PORT 掃描

1. Nmap 介紹

Nmap 是一款用於網路發現和安全審計的網路安全工具,它是 Open Source 的軟體。Nmap 是 Network Mapper 的簡稱。通常情況下,Nmap用於:

  • 列舉網路主機清單
  • 管理服務升級排程
  • 監控主機
  • 服務執行狀況

Nmap可以檢測目標主機是否線上、port 開放情況、偵測執行的服務類型及版本資訊、偵測作業系統與裝置類型等資訊。 它是網路管理員必用的軟體之一,用以評估網路系統安全。

此外, Nmap 也是不少駭客愛用的工具。系統管理員可以利用 Nmap 來探測工作環境中未經批准使用的伺服器,駭客通常會利用 Nmap 來搜集目標電腦的網路設定,從而計劃攻擊的方法。

2. 安裝 Nmap

1
sudo apt install nmap
  • 試試看掃描自己的網域

在 Terminal 打以下指令:

1
2
# 後面網域請依自己的情況而定
nmap 10.0.2.1/24

Node.js 中也有現成的模組可提供使用者直接操作 Nmap, 方便使用者做系統整合

3. 安裝 Node.js 的 Nmap 模組

1
sudo npm install libnmap
  • 寫個簡單的程式掃描自己看看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 引進 Node.js 的 Nmap module
var nmap = require('libnmap')
// 下面的 range 和 ports 同樣視自己情況而定
,opts = {
ports: ["3000"],
range: ["192.168.43.1/24"]
};

// 使用 libnmap 模組中的 scan 函數來做掃描
nmap.scan(opts, function(err, report) {
if (err) throw new Error(err);

for (var item in report) {
console.log(JSON.stringify(report[item]));
}
});
  • 掃出來的結果你會發現是這樣…

4. 抽絲剝繭拿出想看的資料

從上面的結果中你可以發現, 倘若你直接掃描, 裏面的資料會非常多且複雜, 如果你只想拿出特定自己想看的部份就需要利用層層的 for 迴圈來取資料

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
var nmap = require('libnmap')
,opts = {
ports: ["3000"],
range: ["192.168.43.1/24"]
};

nmap.scan(opts, function(err, report) {
if (err) throw new Error(err);

var result = {};
var ip_num = "",
port_num = "";

for (var item in report) {
for (var host in report[item].host) {
for (var ports in report[item].host[host].ports) {
ip_num = report[item].host[host].address[0].item.addr;
console.log(ip_num);
result[ip_num] = [];
for (var port in report[item].host[host].ports[ports].port) {
if (report[item].host[host].ports[ports].port[port].state[0].item.state == 'open') {
port_num = report[item].host[host].ports[ports].port[port].item.portid;
console.log(port_num);
result[ip_num].push(port_num);
}
}
if (result[ip_num].length == 0) //刪除長度為零的元素
delete result[ip_num];
}
}
}
console.log(result);
});
  • 此時掃出來的結果就會非常乾淨