
Wie kann ich eine Ausgabedatei aus ARP im JSON-Format erstellen?
Ich habe einen Raspberry Pi, auf dem Openremote2 läuft, und möchte eine Ausgabedatei formatieren, die Openremote versteht - hier ist ein Beispiel
{
'command':'ELAPSE',
'value':53680,
'mute':1,
'shuffle':0,
'repeat':0,
'play':1,
'volume':0,
'TotalTime':0,
'favstatus':0
}
Der ARP-Befehl sieht also folgendermaßen aus: -
sudo arp-scan 192.168.0.5-192.168.0.5
und die Ausgabe sieht folgendermaßen aus: -
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
wenn das Gerät eingeschaltet wird, erhalte ich Folgendes: -
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
Der Plan besteht darin, eine Ausgabedatei zu erstellen, die entweder die IP enthält oder nicht, die angibt, ob das Gerät mit dem Netzwerk verbunden ist oder nicht über den Internet Explorer eingeschaltet ist.
Antwort1
Wenn Sie wirklich eine Ausgabe im JSON-Format wünschen, können Sie awk
den printf
Befehl verwenden.
Sie möchten viele '
einfache Anführungszeichen in Ihrer JSON-formatierten Ausgabe, daher ist es einfacher, die printf
Formatzeichenfolge außerhalb des eigentlichen awk
Skripts zu definieren, indem -v
Sie eine AWK-Variable namens festlegen 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
Die Ausgabe von ist TAB-getrennt, daher awk
prüft dieses Skript, ob das zweite Feld ( $2
) wie eine MAC-Adresse aussieht. Wenn dies der Fall ist, werden die Felder mit ausdruckt printf
. Wenn nicht, werden sie nicht ausgedruckt.
Ausgabe (basierend auf Ihrem Beispiel):
{
'ip': '192.168.0.5',
'mac': '08:eb:74:9e:00:f4',
'vendor': '(Unknown)'
}
Wenn Sie nur die IP-Adressen im Klartext möchten, ist es viel einfacher:
sudo arp-scan 192.168.0.5-192.168.0.5 |
awk -F'\t' '$2 ~ /([0-9a-f][0-9a-f]:){5}/ {print $1}'
Ausgabe:
192.168.0.5
(oder nichts, wenn die IP nicht antwortet)
Antwort2
Sie geben zu Beginn Ihrer Frage ein JSON-ähnliches Beispiel an, verlangen dies in der Zusammenfassung aber nicht wirklich. Nur eine Datei, die etwas enthält oder nicht.
In gewisser Weise
sudo arp-scan 192.168.0.5-192.168.0.5 | tail -n +2 | head -n -2 | head -1 > out.txt
kann das tun
Wenn das nicht das ist, was Sie wollen, bearbeiten Sie bitte Ihre Frage, um ein konkretes Beispiel hinzuzufügen, wie es aussehen soll