Как создать выходной файл из ARP в формате json?

Как создать выходной файл из ARP в формате json?

Как создать выходной файл из ARP в формате json?

У меня есть Raspberry Pi с запущенным OpenRemote2, и я хочу отформатировать выходной файл, который понимает OpenRemote — вот пример

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

Итак, команда arp выглядит так:-

sudo arp-scan 192.168.0.5-192.168.0.5

и вывод выглядит так:-

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

при включении устройства я получаю это:-

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

План состоит в том, чтобы создать выходной файл, который либо содержит, либо не содержит IP-адрес, который указывает, находится ли устройство в сети или на нем не запущен IE.

решение1

Если вам действительно нужен вывод в формате JSON, вы можете использовать awkкоманду printf.

Вам нужно много 'символов одинарных кавычек в вашем выводе в формате JSON, поэтому проще определить printfстроку формата вне самого awkскрипта, используя -vдля установки переменной awk с именем 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Вывод разделен табуляцией, поэтому этот awkскрипт проверяет, что второе поле ( $2) похоже на MAC-адрес. Если это так, он красиво печатает поля с помощью printf. Если нет, он не печатается.

Вывод (на основе вашего примера):

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

Если вам нужны IP-адреса в виде обычного текста, все гораздо проще:

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

Выход:

192.168.0.5

(или ничего, если IP не отвечает)

решение2

Вы приводите пример JSON в начале вашего вопроса, но на самом деле не просите об этом в резюме. Просто файл, который что-то содержит или не содержит.

В некотором роде

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

может сделать это

Если это не то, что вам нужно, пожалуйста, отредактируйте свой вопрос, добавив реальный пример того, как вы хотите, чтобы это выглядело.

Связанный контент