Convertire l'output del comando dig in JSON con Bash

Convertire l'output del comando dig in JSON con Bash

Il comando dig (Domain Information Groper) è uno strumento versatile e ampiamente utilizzato per effettuare query DNS (Domain Name System) da linea di comando. Tuttavia, l'output standard del comando dig è in formato testuale, che può essere difficile da analizzare e processare in contesti programmatici. Un formato più strutturato, come il JSON (JavaScript Object Notation), può rendere molto più agevole la manipolazione e l'analisi automatica delle risposte DNS, specialmente in scenari di scripting e automazione. In questo articolo, ti mostrerò come convertire l'output di una query DNS effettuata con dig in formato JSON utilizzando uno script Bash.

La versione più recente di dig (a partire da bind 9.11) offre un'opzione per ottenere direttamente l'output in formato JSON. Basta aggiungere l'opzione +json alla fine del comando:


dig example.com A +json

Questo approccio è il più semplice, poiché non richiede alcuna manipolazione dell'output testuale, ma solo l'uso dell'opzione +json.

Se stai utilizzando una versione di dig che non supporta l'opzione +json, puoi comunque convertire l'output testuale in JSON con un po' di scripting Bash. Questo può essere utile se ti trovi su un sistema che non ha una versione aggiornata di dig.


#!/bin/bash

domain=$1

# Esegui la query DNS con dig
output=$(dig $domain A +short)

# Inizia la costruzione del JSON
json_output="{\"domain\": \"$domain\", \"A_records\": ["

# Elabora ogni linea dell'output
first=1
while read -r line; do
  if [ $first -eq 1 ]; then
    json_output+="\"$line\""
    first=0
  else
    json_output+=", \"$line\""
  fi
done <<< "$output"

# Chiudi il JSON
json_output+="]}"

# Stampa il risultato in formato JSON
echo $json_output

Spiegazione del codice:

  1. Lo script accetta come parametro il dominio su cui eseguire la query (domain=$1).
  2. Esegue dig con l'opzione +short per ottenere solo gli indirizzi IP senza il formato esteso e senza i dettagli aggiuntivi.
  3. Viene creato un oggetto JSON di base con un campo "A_records" che contiene una lista degli indirizzi IP trovati.
  4. Utilizza un ciclo while per leggere riga per riga l'output di dig e popolare la lista degli indirizzi IP.
  5. Infine, stampa il JSON risultante.

Se desideri elaborare ulteriormente l'output JSON, puoi utilizzare il comando jq. Ad esempio, puoi filtrare l'output JSON per ottenere solo gli indirizzi IP:


dig example.com A +json | jq '.answer[] | select(.type=="A") | .data'

Questo comando restituirà solo gli indirizzi IP contenuti nella sezione "answer" del JSON.

Conclusione

Convertire l'output di dig in JSON rende molto più semplice lavorare con i risultati delle query DNS in contesti programmatici. Se utilizzi una versione recente di dig, puoi sfruttare l'opzione +json per ottenere subito un output strutturato. In alternativa, puoi creare uno script Bash per parsare l'output testuale di dig e trasformarlo in JSON. Con l'aiuto di strumenti come jq, puoi manipolare il JSON per adattarlo alle tue esigenze specifiche.

Torna su