47 lines
1.7 KiB
Bash
47 lines
1.7 KiB
Bash
|
#!/bin/bash
|
||
|
if [ "$(awk -W version 2>/dev/null|awk '{print $1;exit}')" != "GNU" ]
|
||
|
then
|
||
|
echo "do 'apt-get install gawk' for this to work"
|
||
|
exit 1
|
||
|
fi
|
||
|
export PATH=/bin:/usr/bin:/usr/sbin
|
||
|
arps="$( (cat /root/arps.txt # get old list
|
||
|
arp -an| # get current values
|
||
|
awk -F'[().: ]' '/10.2.113/ && $6 > 100 && !/incomplete/'| # only our subnet and only addresses above 100
|
||
|
awk -v now=$(date +%s) '{print $4 " " now}') | # write them with current timestamp
|
||
|
awk '{arps[$1]=arps[$1]" "$2}
|
||
|
END {
|
||
|
for(i in arps) {
|
||
|
split(arps[i],a)
|
||
|
asort(a)
|
||
|
print i " " a[1] " " a[length(a)] # write out mac, oldest seen and newest seen
|
||
|
}
|
||
|
}'|
|
||
|
sort -k2 | # sort by timestamp, newest first
|
||
|
sort -u -k1,1 )" # remove duplicate arp (keeps the most recent entry by timestamp)
|
||
|
# echo "$arps" | sort -n -k2| awk -v onehour=$(date --date="1 hour ago" +%s) '{print $0 " " $3-onehour};c==1 && (($3 - $2)<3600*24) && ($3 > onehour) {n+=1;print "->"$0}
|
||
|
Current="$(
|
||
|
(date --date="1 hour ago" +"CURRENT: %s"
|
||
|
echo "$arps" )|
|
||
|
sort -n -k2|
|
||
|
awk 'c==1 && (($3 - $2)<3600*10) && ($3 > c) {n+=1}
|
||
|
/CURRENT:/{c=1}
|
||
|
END{print n}'
|
||
|
)"
|
||
|
Current="$(
|
||
|
echo "$arps" |
|
||
|
sort -n -k2|
|
||
|
awk -v onehour=$(date --date="1 hour ago" +%s) '
|
||
|
$3 > onehour {print $0 " " $3-$2}
|
||
|
' |
|
||
|
awk '$3-$2 < 24*3600' |
|
||
|
wc -l
|
||
|
)"
|
||
|
echo "$arps" > /root/arps.txt
|
||
|
oldCurrent="$(cat /run/presency)"
|
||
|
echo "$Current" > /run/presency
|
||
|
if [ "$Current" != "$oldCurrent" ]
|
||
|
then
|
||
|
logger -t $(basename $0) "there are now $Current people in Level2"
|
||
|
fi
|