summaryrefslogtreecommitdiff
path: root/arp-ddns
blob: bc7bbb38072ac812ef51f0eeef73beb2a9495e03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/bash

cd "$(dirname "$(readlink -e "$0")")"

. ./arp-ddns.conf

nmap -sn $(
  sipcalc $(
    for dev in "${devs[@]}"; do
      ip -4 -o addr show dev "$dev"
    done \
    | awk '{print $4}'
  ) \
  | awk '
    $1 == "Network" && $2 == "address" && $3 == "-" {print $4}
    $1 == "Network" && $2 == "mask" && $3 == "(bits)" && $4 == "-" {print $5}
  ' \
  | sed '
    N
    s,\n,/,
  '
) >/dev/null

join -1 1 -2 2 -o 1.2,2.1,1.3 <(
  printf '%s\n' "${hosts[@]}" \
  | sort -k1,1
) <(
  arp -a \
  | cut -d' ' -f2,4 \
  | sort -k2,2 \
  | tr -d '()'
) \
| while read -r host ip key; do
  if dig +short ${host}.ddns.eckner.net A | grep -qxF "${ip}"; then
    continue
  fi
  curl -Ss 'https://eckner.net/ddns.php?i='"${key}"'&address='"${ip}"
done