Skip to content

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 :

local netscan = require("netscan")

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.
  • nil et 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.
  • nil et 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.
  • nil et 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.
  • nil et 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").