
¿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 awk
el printf
comando.
Desea muchos '
caracteres entre comillas simples en su salida con formato json para que sea más fácil definir la printf
cadena de formato fuera del awk
script real, usándola -v
para 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-scan
La salida de está delimitada por TAB, por lo que este awk
script 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.