¿Cómo puedo crear un archivo de salida desde ARP en formato json?

¿Cómo puedo crear un archivo de salida desde ARP en formato json?

¿Cómo puedo crear un archivo de salida desde ARP en formato json?

Tengo una raspberry pi que ejecuta openremote2 y quiero formatear un archivo de salida que openremote entienda; aquí hay un ejemplo

{
  'command':'ELAPSE',
  'value':53680,
  'mute':1,
  'shuffle':0,
  'repeat':0,
  'play':1,
  'volume':0,
  'TotalTime':0,
  'favstatus':0
}

entonces el comando arp se ve así: -

sudo arp-scan 192.168.0.5-192.168.0.5

y el resultado se ve así: -

Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 1 hosts (http://www.nta-monitor.com/tools/arp-scan/)
1 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.8.1: 1 hosts scanned in 1.684 seconds (0.59 hosts/sec). 0 responded

cuando el dispositivo está encendido me sale esto:-

Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 1 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.0.5     08:eb:74:9e:00:f4       (Unknown)
2 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.8.1: 1 hosts scanned in 1.405 seconds (0.71 hosts/sec). 1 responded

El plan aquí es crear un archivo de salida que contenga o no la IP que indique si el dispositivo está en la red o no está encendido con IE.

Respuesta1

Si realmente desea una salida con formato JSON, puede usar awkel printfcomando.

Desea muchos 'caracteres entre comillas simples en su salida con formato json para que sea más fácil definir la printfcadena de formato fuera del awkscript real, usándola -vpara configurar una variable awk llamada fmt.

sudo arp-scan 192.168.0.5-192.168.0.5 | 
    awk -F'\t' -v fmt="{\n 'ip': '%s',\n 'mac': %'s',\n 'vendor': '%s'\n}\n" \
        '$2 ~ /([0-9a-f][0-9a-f]:){5}/ {printf fmt,  $1, $2, $3}'

arp-scanLa salida de está delimitada por TAB, por lo que este awkscript verifica que el segundo campo ( $2) parezca una dirección MAC. Si es así, imprime los campos usando printf. Si no es así, no se imprime.

Salida (basada en su ejemplo):

{
 'ip': '192.168.0.5',
 'mac': '08:eb:74:9e:00:f4',
 'vendor': '(Unknown)'
}

Si sólo quieres las direcciones IP en texto plano, es mucho más sencillo:

sudo arp-scan 192.168.0.5-192.168.0.5 | 
    awk -F'\t' '$2 ~ /([0-9a-f][0-9a-f]:){5}/ {print $1}'

Producción:

192.168.0.5

(o nada si la IP no responde)

Respuesta2

Da un ejemplo JSON al comienzo de su pregunta, pero realmente no lo solicite en el resumen. Solo un archivo que contiene o no algo.

En cierto sentido

sudo arp-scan 192.168.0.5-192.168.0.5  | tail -n +2 | head -n -2 | head -1 > out.txt

puedo hacer eso

Si eso no es lo que desea, edite su pregunta para agregar un ejemplo real de cómo desea que se vea.

información relacionada