
Как создать выходной файл из 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
может сделать это
Если это не то, что вам нужно, пожалуйста, отредактируйте свой вопрос, добавив реальный пример того, как вы хотите, чтобы это выглядело.