
Como posso criar um arquivo de saída do ARP no formato JSON?
Eu tenho um raspberry pi rodando o openremote2 e quero formatar um arquivo de saída que o openremote entenda - aqui está um exemplo
{
'command':'ELAPSE',
'value':53680,
'mute':1,
'shuffle':0,
'repeat':0,
'play':1,
'volume':0,
'TotalTime':0,
'favstatus':0
}
então o comando arp fica assim: -
sudo arp-scan 192.168.0.5-192.168.0.5
e a saída fica assim: -
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
quando o dispositivo é ligado, recebo isto: -
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
O plano aqui é criar um arquivo de saída que contenha ou não o IP que indica se o dispositivo está na rede ou não com IE.
Responder1
Se você realmente deseja uma saída no formato JSON, pode usar awk
o comando ' printf
.
Você deseja muitos '
caracteres de aspas simples em sua saída formatada em json, para que seja mais fácil definir a printf
string de formato fora do awk
script real, usando -v
para definir uma variável awk chamada 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
A saída de é delimitada por TAB, portanto, este awk
script verifica se o segundo campo ( $2
) se parece com um endereço MAC. Se isso acontecer, ele imprime os campos usando printf
. Caso contrário, não será impresso.
Saída (com base no seu exemplo):
{
'ip': '192.168.0.5',
'mac': '08:eb:74:9e:00:f4',
'vendor': '(Unknown)'
}
Se você deseja apenas os endereços IP em texto simples, é muito mais simples:
sudo arp-scan 192.168.0.5-192.168.0.5 |
awk -F'\t' '$2 ~ /([0-9a-f][0-9a-f]:){5}/ {print $1}'
Saída:
192.168.0.5
(ou nada se o IP não responder)
Responder2
Você dá um exemplo JSONish na estrela da sua pergunta, mas realmente não pede isso no resumo. Apenas um arquivo que contém ou não algo.
De certa forma
sudo arp-scan 192.168.0.5-192.168.0.5 | tail -n +2 | head -n -2 | head -1 > out.txt
pode fazer isso
Se não é isso que você deseja, edite sua pergunta para adicionar um exemplo real de como você deseja que ela seja