X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=home%2Fbin%2Farp-recon;h=6444a3816c1056a09f57d20a63b218ccd74cff58;hb=HEAD;hp=bee996d6971d2a6f34d3ac695dc0852bb8a034f3;hpb=29e5f1be54dd3206aeb5b7c22a9808d14a3c8b44;p=khome.git diff --git a/home/bin/arp-recon b/home/bin/arp-recon index bee996d..6444a38 100755 --- a/home/bin/arp-recon +++ b/home/bin/arp-recon @@ -44,14 +44,22 @@ debug() { } log() { - local -r interval="$1" + local -r interval_init="$1" local -r log_file="$2" + local interval_curr="$interval_init" while :; do debug '(>) scan' - sudo arp-scan --localnet; - debug '(.) scan' - sleep "$interval"; + if sudo arp-scan --localnet; then + debug '(.) scan ok' + interval_curr="$interval_init" + else + error '(.) scan failure' + interval_curr=$(( interval_curr * 2 )) + fi + debug '(>) sleep for %d seconds' "$interval_curr" + sleep "$interval_curr"; + debug '(.) sleep' done \ | stdbuf -o L awk ' /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ { @@ -67,8 +75,8 @@ status() { local -r log_file="$1" ( - echo 'mac ip last first freq dist' - echo '--- -- ---- ----- ---- ----' + echo 'mac ip staleness_cur staleness_avg age freq dist' + echo '--- -- ------------- ------------- --- ---- ----' sort -n -k 1 "$log_file" \ | awk -v now="$(date '+%s')" \ ' @@ -77,6 +85,7 @@ status() { mac = $2 ip = $3 + interval[mac, ip, intervals[mac, ip]++] = ts - seen_last[mac, ip] freq[mac, ip]++ if (!seen_last[mac, ip] || ts > seen_last[mac, ip] ) seen_last[mac, ip] = ts if (!seen_first[mac, ip] || ts < seen_first[mac, ip]) seen_first[mac, ip] = ts @@ -87,14 +96,19 @@ status() { split(key, macip, SUBSEP) mac = macip[1] ip = macip[2] - last = now - seen_last[mac, ip] - first = now - seen_first[mac, ip] + staleness_cur = now - seen_last[mac, ip] + age = now - seen_first[mac, ip] dist = 100 * (freq[mac, ip] / NR) + intervals_sum = 0 + for (i=1; i<=intervals[mac, ip]; i++) + intervals_sum += interval[mac, ip, i] + staleness_avg = intervals_sum / intervals[mac, ip] print \ mac, \ ip, \ - sprintf("%d", last), \ - sprintf("%d", first), \ + sprintf("%d", staleness_cur), \ + sprintf("%d", staleness_avg), \ + sprintf("%d", age), \ freq[mac, ip], \ sprintf("%d", dist) }