
ARP의 출력 파일을 json 형식으로 어떻게 만들 수 있나요?
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
여기서 계획은 장치가 네트워크에 있는지 또는 IE 전원이 켜져 있는지 여부를 나타내는 IP를 포함하거나 포함하지 않는 출력 파일을 생성하는 것입니다.
답변1
JSON 형식의 출력을 정말로 원한다면 awk
의 printf
명령을 사용할 수 있습니다.
json 형식의 출력에 많은 '
작은따옴표 문자가 필요하므로 이라는 awk 변수를 설정하여 실제 스크립트 printf
외부에서 형식 문자열을 정의하는 것이 더 쉽습니다 .awk
-v
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
의 출력은 TAB으로 구분되므로 이 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
질문의 핵심에 JSONish 예를 제공하지만 실제로 요약에서는 이를 요구하지 않습니다. 무언가를 포함하거나 포함하지 않는 파일입니다.
어떤 면에서는
sudo arp-scan 192.168.0.5-192.168.0.5 | tail -n +2 | head -n -2 | head -1 > out.txt
그렇게 할 수 있어
원하는 것이 아닌 경우 질문을 편집하여 원하는 모양에 대한 실제 예를 추가하십시오.