Scan LAN/Subnet for devices

Scan LAN/Subnet for devices

This simple flow uses nmap to scan for devices in a subnet.

Usage

Edit the scan subnet and change your the network subnet with your network ip. By default the value is 192.168.2.0/24.

The command to execute (Linux tested) requires nmap installed on machine running node-red.

sudo nmap -sn 192.168.2.0/24 | awk '/Nmap scan report for/{printf $5;}/MAC Address:/{print "|"substr($0, index($0,$3)) }' | sort

Scanning

The flow has an inject node (runs every minute) that trigger the networks scan.

Output

Please pay attention that the response time of the scan depends on the size of your network (how many devices attached).

I added a parser for the scan result that transform data to an array of objects

[

   {
      ip: 'device_ip',
      mac: 'device_mac_address,
      brand: 'device_brand'
   },
   {
      ....
   }
]
[{"id":"c3961d41.0f858","type":"tab","label":"Scan Subnet for Devices","disabled":false,"info":""},{"id":"842fa7ed.314678","type":"inject","z":"c3961d41.0f858","name":"","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":true,"onceDelay":0.1,"x":150,"y":60,"wires":[["c43bcf07.4070d"]]},{"id":"c43bcf07.4070d","type":"exec","z":"c3961d41.0f858","command":"sudo nmap -sn 192.168.2.0/24 | awk '/Nmap scan report for/{printf $5;}/MAC Address:/{print \"|\"substr($0, index($0,$3)) }' | sort","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"scan subnet","x":370,"y":60,"wires":[["6903a852.c6bd58"],[],[]]},{"id":"6903a852.c6bd58","type":"function","z":"c3961d41.0f858","name":"Subnet Devices Array","func":"let response = msg.payload.split('\\n');\nlet found = []\nlet device\nresponse.forEach ( line => {\n    if ( line.indexOf('|') > -1 ){\n        device = {\n            ip : line.split('|')[0],\n            mac: line.split('|')[1].split(' ')[0],\n            brand: line.split('|')[1].split(' ')[1]\n        }\n        found.push ( device )\n    }\n})\nmsg.payload = found;\nreturn msg;","outputs":1,"noerr":0,"x":600,"y":60,"wires":[["c5c606d2.36a7f8"]]},{"id":"c5c606d2.36a7f8","type":"debug","z":"c3961d41.0f858","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":850,"y":60,"wires":[]}]

Flow Info

Created 1 year, 11 months ago
Rating: not yet rated

Owner

Node Types

Core
  • debug (x1)
  • exec (x1)
  • function (x1)
  • inject (x1)
  • tab (x1)

Tags

  • network
  • nmap
  • discovery
Copy this flow JSON to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option