Module netscan
Le module netscan permet d'effectuer des scans réseau pour découvrir les équipements connectés.
Import
Pour importer le module en Lua :
Configuration YAML
Le module netscan peut être configuré dans le fichier YAML de l'agent :
iot:
modules:
netscan:
- name: netscan1
timeout: 1000 # timeout en ms (défaut: 1000)
max_concurrent: 50 # scans simultanés max (défaut: 50)
ping_count: 1 # nombre de pings par hôte (défaut: 1)
Détails de la configuration
- name : Nom de l'instance du module.
- timeout : Délai d'attente pour les opérations réseau, en millisecondes (défaut: 1000).
- max_concurrent : Nombre maximum d'opérations simultanées (défaut: 50).
- ping_count : Nombre de paquets ICMP à envoyer par hôte (défaut: 1).
API Lua
Liste des fonctions
| Fonction | Signature Lua | Rôle | Retour (succès) | Retour (échec) |
|---|---|---|---|---|
ping_sweep |
hosts, err = netscan.ping_sweep(network[, timeout_ms[, max_concurrent]]) |
Découverte d'hôtes par ping. | table, nil |
nil, "msg" |
port_scan |
ports, err = netscan.port_scan(target, ports[, timeout_ms[, max_concurrent]]) |
Scan de ports TCP. | table, nil |
nil, "msg" |
arp_scan |
hosts, err = netscan.arp_scan([interface]) |
Scan ARP du cache. | table, nil |
nil, "msg" |
discover_hosts |
hosts, err = netscan.discover_hosts(network[, methods[, timeout_ms]]) |
Découverte multi-méthode. | table, nil |
nil, "msg" |
| Champs | netscan.name, netscan.type |
Métadonnées du module. | – | – |
netscan.ping_sweep(network[, timeout_ms[, max_concurrent]])
Scanne un réseau pour découvrir les hôtes actifs par ping ICMP.
- Paramètres :
network(string) : Le réseau à scanner au format CIDR (ex."192.168.1.0/24").timeout_ms(number, optionnel) : Timeout par hôte en ms (défaut: config).-
max_concurrent(number, optionnel) : Scans simultanés max (défaut: config). -
Retour :
- Une table Lua contenant les hôtes découverts.
nilet un message d'erreur en cas d'échec.
Chaque hôte contient :
- ip : Adresse IP de l'hôte
- hostname : Nom d'hôte (si résolution DNS réussie)
- mac : Adresse MAC (si disponible)
- rtt_ms : Temps de réponse en millisecondes
local netscan = require("netscan")
local hosts, err = netscan.ping_sweep("192.168.1.0/24", 500, 100)
if err then
print("Erreur : " .. err)
else
for _, host in ipairs(hosts) do
print("IP: " .. host.ip .. ", Hostname: " .. (host.hostname or ""))
end
end
netscan.port_scan(target, ports[, timeout_ms[, max_concurrent]])
Scanne les ports TCP d'une cible.
- Paramètres :
target(string) : Adresse IP ou nom d'hôte à scanner.ports(string ou table) : Ports à scanner (ex."22,80,443"ou"80-90"ou{22, 80, 443}).timeout_ms(number, optionnel) : Timeout par port en ms (défaut: config).-
max_concurrent(number, optionnel) : Scans simultanés max (défaut: config). -
Retour :
- Une table Lua contenant les ports ouverts.
nilet un message d'erreur en cas d'échec.
Chaque port contient :
- port : Numéro du port
- service : Nom du service (si connu)
- state : État du port ("open")
local netscan = require("netscan")
-- Scan de ports spécifiques
local ports, err = netscan.port_scan("192.168.1.1", "22,80,443,8080")
if err then
print("Erreur : " .. err)
else
for _, p in ipairs(ports) do
print("Port " .. p.port .. " (" .. p.service .. ") : " .. p.state)
end
end
-- Scan d'une plage de ports
local ports, err = netscan.port_scan("192.168.1.1", "80-100")
netscan.arp_scan([interface])
Récupère les hôtes du cache ARP du système.
- Paramètres :
-
interface(string, optionnel) : Interface réseau à utiliser. -
Retour :
- Une table Lua contenant les hôtes du cache ARP.
nilet un message d'erreur en cas d'échec.
Chaque hôte contient :
- ip : Adresse IP de l'hôte
- mac : Adresse MAC
- hostname : Nom d'hôte (si résolution DNS réussie)
local netscan = require("netscan")
local hosts, err = netscan.arp_scan()
if err then
print("Erreur : " .. err)
else
for _, host in ipairs(hosts) do
print("IP: " .. host.ip .. ", MAC: " .. host.mac)
end
end
netscan.discover_hosts(network[, methods[, timeout_ms]])
Découvre les hôtes d'un réseau en combinant plusieurs méthodes.
- Paramètres :
network(string) : Le réseau à scanner au format CIDR (ex."192.168.1.0/24").methods(string, optionnel) : Méthodes à utiliser, séparées par des virgules (défaut:"ping,arp").-
timeout_ms(number, optionnel) : Timeout en ms (défaut: config). -
Retour :
- Une table Lua contenant les hôtes découverts avec les informations fusionnées.
nilet un message d'erreur en cas d'échec.
Chaque hôte contient :
- ip : Adresse IP de l'hôte
- hostname : Nom d'hôte (si résolution DNS réussie)
- mac : Adresse MAC (si disponible via ARP)
- method : Méthodes ayant découvert l'hôte (ex. "ping,arp")
- rtt_ms : Temps de réponse en millisecondes (si disponible)
local netscan = require("netscan")
-- Découverte combinant ping et ARP
local hosts, err = netscan.discover_hosts("192.168.1.0/24", "ping,arp", 1000)
if err then
print("Erreur : " .. err)
else
for _, host in ipairs(hosts) do
print("IP: " .. host.ip)
print(" MAC: " .. (host.mac or "inconnu"))
print(" Hostname: " .. (host.hostname or "inconnu"))
print(" Méthode: " .. host.method)
end
end
Champs Lua associés
netscan.name: Retourne le nom de l'instance (netscan).netscan.type: Retourne le type du module ("netscan").