누군가가 DHCP를 통해 내 네트워크에 접속하는 시기를 감지한 다음 세부 정보를 이메일로 보내는 스크립트를 작성하려고 합니다. 내가 겪고 있는 문제는 루프에서 신기원 시간을 구문 분석하는 것입니다.
렌탈 정보 가져오기, 오류 확인, 비교, 이메일 보내기 등의 코드는 문제가 되지 않기 때문에 생략했습니다.
임대정보 파일의 형식은 다음과 같습니다.
epoch time MAC address IP Address Hostname DeviceID
4476705071 11:11:11:11:11:11 111.111.111.111 device1 *
7956915742 22:22:22:22:22:22 222.222.222.222 device2 *
다음 코드를 사용하여 파일을 참조합니다.
#! /bin/bash
LEASELEN=21600 # SET THE LEASE LENGTH TO 6 HOURS TO DETERMINE START OF LEASE
arrEND=($(cat /usr/local/bin/dhcp/leases.new | awk '{print $1}')) # LEASE EXPIRY IN EPOCH
arrMAC=($(cat /usr/local/bin/dhcp/leases.new | awk '{print $2}')) # MAC ADDRESS
arrIP=($(cat /usr/local/bin/dhcp/leases.new | awk '{print $3}')) # IP ADDRESS
arrHOST=($(cat /usr/local/bin/dhcp/leases.new | awk '{print $4}')) # HOSTNAME
echo 'Current and New connections to the network via DHCP:'
for ((i=0;i<${#arrIP[@]};i++)) # ITERATE FROM 0 TO TOTAL NUMBER OF ENTRIES
do
arrSTART=$(expr ${arrEND[$i]} - $LEASELEN) # CALCULATE LEASE START FROM LEASE END
arrSTARTH=`date -d @${arrSTART[$i]} +"%Y-%m-%d %T"` # CONVERT EPOCH TO HUMAN-READABLE
echo "\""${arrHOST[$i]}"\" started using "${arrIP[$i]}" on "${arrSTARTH[$i]}" with MAC "${arrMAC[$i]}"." #OUTPUT
done
exit 0
출력은 다음과 같습니다
Current and New connections to the network via DHCP:
date: invalid date ‘@4476683471’
"device1" started using 111.111.111.111 on with MAC 11:11:11:11:11:11.
date: invalid date ‘@’
"device2" started using 222.222.222.222 on with MAC 22:22:22:22:22:22.
문제의 일부는 시간을 너무 늦게 설정했다는 것입니다. 왜냐하면 대여 파일 시작 부분에 2줄을 더 추가하여 다음과 같이 만들 수 있기 때문입니다.
epoch time MAC address IP Address Hostname DeviceID
1465374613 00:b0:d0:01:32:86 192.168.0.1 pre-device1 *
1465374820 00:00:00:00:00:00 0.0.0.0 pre-device2 *
4476705071 11:11:11:11:11:11 111.111.111.111 device1 *
7956915742 22:22:22:22:22:22 222.222.222.222 device2 *
첫 번째 결과에서는 날짜를 얻지만 그 이후에는 날짜를 얻지 못합니다.
산출:
Current and New connections to the network via DHCP:
"pre-device1" started using 192.168.0.1 on 2016-06-08 04:30:13 with MAC 00:b0:d0:01:32:86.
date: invalid date ‘@’
"pre-device2" started using 0.0.0.0 on with MAC 00:00:00:00:00:00.
date: invalid date ‘@’
"device1" started using 111.111.111.111 on with MAC 11:11:11:11:11:11.
date: invalid date ‘@’
"device2" started using 222.222.222.222 on with MAC 22:22:22:22:22:22.
내가 뭘 잘못하고 있는지 아시나요?
답변1
이것을 사용하지 않겠습니까 gawk
? 전환 시간과시간:
awk 'BEGIN{PROCINFO["strftime"]="%s"} { print $4, "started using", $3, "on", strftime("%Y-%m-%d %T",$1), "with MAC", $2"."}' /usr/local/bin/dhcp/leases.new
산출:
device1 started using 111.111.111.111 on 2111-11-11 18:11:11 with MAC 11:11:11:11:11:11.
device2 started using 222.222.222.222 on 2222-02-22 23:22:22 with MAC 22:22:22:22:22:22.