mirror of
https://github.com/myronblair/proxmox-config
synced 2026-06-30 15:59:57 -05:00
64 lines
1.6 KiB
Bash
Executable File
64 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# JARVIS Network Scanner — runs on PVE1, pushes nmap results to JARVIS
|
|
# Cron: */3 * * * * /usr/local/bin/jarvis-netscan.sh >/dev/null 2>&1
|
|
|
|
JARVIS_URL="https://165.22.1.228"
|
|
JARVIS_HOST="jarvis.orbishosting.com"
|
|
REG_KEY="f846a9aaf7ce9a61742c63c87c4186052a71d2a580c65518"
|
|
SUBNET="10.48.200.0/24"
|
|
|
|
TMPFILE=$(mktemp)
|
|
nmap -sn --send-ip "$SUBNET" 2>/dev/null > "$TMPFILE"
|
|
|
|
if [ ! -s "$TMPFILE" ]; then
|
|
echo "$(date): nmap produced no output" >&2
|
|
rm -f "$TMPFILE"
|
|
exit 1
|
|
fi
|
|
|
|
JSON=$(python3 - "$TMPFILE" <<'PYEOF'
|
|
import sys, re, json
|
|
|
|
with open(sys.argv[1]) as f:
|
|
data = f.read()
|
|
|
|
devices = []
|
|
cur = None
|
|
|
|
for line in data.splitlines():
|
|
line = line.strip()
|
|
m = re.match(r'Nmap scan report for (?:(\S+) \()?(\d+\.\d+\.\d+\.\d+)\)?', line)
|
|
if m:
|
|
if cur:
|
|
devices.append(cur)
|
|
hn = m.group(1) if m.group(1) and m.group(1) != m.group(2) else ''
|
|
cur = {'ip': m.group(2), 'hostname': hn, 'mac': '', 'vendor': ''}
|
|
elif cur:
|
|
m2 = re.match(r'MAC Address: ([0-9A-Fa-f:]{17}) \(([^)]+)\)', line)
|
|
if m2:
|
|
cur['mac'] = m2.group(1).lower()
|
|
cur['vendor'] = '' if m2.group(2) == 'Unknown' else m2.group(2)
|
|
|
|
if cur:
|
|
devices.append(cur)
|
|
|
|
print(json.dumps({'devices': devices}))
|
|
PYEOF
|
|
)
|
|
|
|
rm -f "$TMPFILE"
|
|
|
|
if [ -z "$JSON" ]; then
|
|
echo "$(date): JSON parse failed" >&2
|
|
exit 1
|
|
fi
|
|
|
|
RESPONSE=$(curl -sk --max-time 15 \
|
|
-X POST "$JARVIS_URL/api/netscan" \
|
|
-H "Host: $JARVIS_HOST" \
|
|
-H "Content-Type: application/json" \
|
|
-H "X-Registration-Key: $REG_KEY" \
|
|
-d "$JSON" 2>/dev/null)
|
|
|
|
echo "$(date): $RESPONSE"
|