ARP의 출력 파일을 json 형식으로 어떻게 만들 수 있나요?

ARP의 출력 파일을 json 형식으로 어떻게 만들 수 있나요?

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 형식의 출력을 정말로 원한다면 awkprintf명령을 사용할 수 있습니다.

json 형식의 출력에 많은 '작은따옴표 문자가 필요하므로 이라는 awk 변수를 설정하여 실제 스크립트 printf외부에서 형식 문자열을 정의하는 것이 더 쉽습니다 .awk-vfmt

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

그렇게 할 수 있어

원하는 것이 아닌 경우 질문을 편집하여 원하는 모양에 대한 실제 예를 추가하십시오.

관련 정보