Como posso criar um arquivo de saída do ARP no formato JSON?

Como posso criar um arquivo de saída do ARP no formato JSON?

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 awko comando ' printf.

Você deseja muitos 'caracteres de aspas simples em sua saída formatada em json, para que seja mais fácil definir a printfstring de formato fora do awkscript real, usando -vpara 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-scanA saída de é delimitada por TAB, portanto, este awkscript 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

informação relacionada