|
|
@@ -1,36 +1,13 @@
|
|
|
#!/usr/bin/env bash
|
|
|
+#
|
|
|
+# Depends: nmap, ipcalc
|
|
|
+#
|
|
|
set -euo pipefail
|
|
|
|
|
|
-IFACE=rndis0
|
|
|
-
|
|
|
-getip(){
|
|
|
- local iface="$1"
|
|
|
- ifconfig | awk -v FS="\n" -vRS="\n\n" "/$iface/ {print \$0}" | awk '/inet / {print $2}'
|
|
|
-}
|
|
|
-
|
|
|
-MYIP="$(getip "$IFACE")"
|
|
|
-[ "$MYIP" ] || {
|
|
|
- echo "Failed to find ip on $IFACE" >&2
|
|
|
- exit 1
|
|
|
-}
|
|
|
-
|
|
|
-# XXX: assume subnet is /24
|
|
|
-PREFIX="$(echo "$MYIP" | cut -d'.' -f1-3)"
|
|
|
-
|
|
|
-findpeer(){
|
|
|
- local prefix="$1"
|
|
|
- local me="$2"
|
|
|
- for ip in {1..254}
|
|
|
- do
|
|
|
- [ "$me" == "${prefix}.${ip}" ] && continue
|
|
|
- {
|
|
|
- ping -c1 -W1 "${prefix}.${ip}" 2>&1 1>/dev/null && echo "${prefix}.${ip}"
|
|
|
- } &
|
|
|
- done
|
|
|
- wait
|
|
|
-}
|
|
|
-PEERIP="$(findpeer "$PREFIX" "$MYIP")"
|
|
|
-[ "$PEERIP" ] || {
|
|
|
- echo "Failed to find peer on $IFACE (${PREFIX}.0/24)" >&2
|
|
|
- exit 1
|
|
|
-}
|
|
|
+while read ip mask
|
|
|
+do
|
|
|
+ if [ "${ip%%.*}" -eq "127" ]; then continue; fi
|
|
|
+ cidr=$(ipcalc "$ip" "$mask" | grep -oE '[0-9.]+/[0-9]+')
|
|
|
+ nmap -T5 "$cidr" -sn | grep 'report' | cut -d' ' -f5 &
|
|
|
+done <<< $(ifconfig | awk '/inet / {print $2 " " $4}')
|
|
|
+wait
|