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
.
이라는 awk 변수 설정을 사용하여 실제 스크립트 외부에서 형식 문자열을 '
더 쉽게 정의할 수 있도록 json 형식의 출력에 많은 작은따옴표 문자를 포함하려고 합니다 .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
의 출력은 탭으로 구분되므로 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
이것을 할 수 있다
이것이 원하는 것이 아니라면 질문을 편집하여 원하는 모양에 대한 실제 예를 추가하십시오.