- ALL-SG8316M auf FW 2.2.1.2956 geflasht; VLAN-DB 10/20/30/40/100 via Telnet-CLI (non-disruptiv) - CLI-Tooling: run-cli.exp + .cli-Files + CLI-REFERENCE (FW 2.2.1, IOS-artig) - Kanonisches Inventar: bf.csv/md + build.py (Doku-Motor), Core-Port-Map - Finaler VLAN-/Adressplan (10.40.<vlanid>.0/24), Firmware-Runbooks, Recovery-Assets - Secrets/Firmware/State/DS_Store via .gitignore ausgeschlossen Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
73 lines
3.1 KiB
Bash
Executable File
73 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ⚠️ VERALTET — nur FW 1.0. Switch ist auf FW 2.2.1 geflasht; die dispatcher.cgi-cmd-Codes
|
|
# unten gelten dort NICHT mehr. Konfig jetzt via Telnet-CLI: switch/cli/ (run-cli.exp + .cli).
|
|
# Bleibt nur als Historie / für den (unwahrscheinlichen) FW-1.0-Rollback.
|
|
# ALL-SG8316M (Realtek dispatcher.cgi) driver — curl-based, no MCP needed.
|
|
# Read ops are safe. WRITE ops change config; SAVE persists to flash.
|
|
# Creds via ./.secrets (gitignored): SW_HOST, SW_USER, SW_PASS.
|
|
set -euo pipefail
|
|
|
|
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
[ -f "$HERE/.secrets" ] && . "$HERE/.secrets"
|
|
HOST="${SW_HOST:-10.40.41.239}"
|
|
BASE="http://$HOST/cgi-bin/dispatcher.cgi"
|
|
CURL=(curl -sS --max-time 12)
|
|
|
|
# --- read ---
|
|
get() { "${CURL[@]}" "$BASE?cmd=$1"; }
|
|
|
|
# Curated config-view + AJAX-data cmd codes (see sg8316m-cgi-map.md)
|
|
SCRAPE_CMDS="512 517 519 1297 541 543 768 779 1024 1026 1031 \
|
|
1282 1283 1289 1291 1293 534 537 539 524 \
|
|
4096 4098 4100 2560 2562 2564 2572 2574 2816 2818 2821 3840 3842 3844"
|
|
|
|
scrape() {
|
|
local out="$HERE/${1:-state-PRE}"; mkdir -p "$out"
|
|
echo "Scraping $HOST -> $out"
|
|
for c in $SCRAPE_CMDS; do
|
|
if "${CURL[@]}" "$BASE?cmd=$c" >"$out/cmd-$c.html" 2>/dev/null; then
|
|
printf ' cmd=%-5s %6s bytes\n' "$c" "$(wc -c <"$out/cmd-$c.html" | tr -d ' ')"
|
|
else
|
|
printf ' cmd=%-5s FAILED\n' "$c"
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Pretty-print one page as text
|
|
view() { get "$1" | sed -e 's/<[^>]*>/ /g' | tr -s ' \t\r\n' ' ' | sed 's/ / /g'; echo; }
|
|
|
|
# --- write (use deliberately, then `save`) ---
|
|
post() { "${CURL[@]}" -X POST "$BASE" "$@"; }
|
|
|
|
add_vlans() { post --data-urlencode "vlanlist=$1" --data "vlanAction=0" --data-urlencode "name=${2:-}" --data "cmd=1284"; }
|
|
del_vlans() { post --data-urlencode "vlanlist=$1" --data "vlanAction=1" --data "cmd=1284"; }
|
|
# set_ip <ip> [netmask] [gateway] — RECOVERY: re-point mgmt IP (e.g. after flash reset to 192.168.1.1)
|
|
set_ip() { post --data "mode=0" --data "ip=$1" --data "netmask=${2:-255.255.255.0}" --data "gateway=${3:-10.40.41.254}" --data "cmd=518"; }
|
|
save_flash() { echo ">> SAVE to FLASH (cmd=4358)"; get 4358 >/dev/null; }
|
|
|
|
usage() { cat <<USAGE
|
|
usage: $0 <cmd>
|
|
scrape [dir] dump config pages to switch/<dir> (default state-PRE) [READ]
|
|
get <N> raw HTML of cmd=N [READ]
|
|
view <N> cmd=N as plain text [READ]
|
|
add-vlans <list> [prefix] e.g. add-vlans 10,20,30,40,100 [WRITE]
|
|
del-vlans <list> [WRITE]
|
|
set-ip <ip> [mask] [gw] RECOVERY: re-point mgmt IP [WRITE]
|
|
save persist running config to flash [WRITE]
|
|
|
|
Recovery after flash (switch reset to 192.168.1.1):
|
|
SW_HOST=192.168.1.1 SW_USER=admin SW_PASS=admin $0 set-ip 10.40.41.239
|
|
USAGE
|
|
}
|
|
|
|
case "${1:-}" in
|
|
scrape) scrape "${2:-state-PRE}" ;;
|
|
get) get "$2" ;;
|
|
view) view "$2" ;;
|
|
add-vlans) add_vlans "$2" "${3:-}" ;;
|
|
del-vlans) del_vlans "$2" ;;
|
|
set-ip) set_ip "$2" "${3:-255.255.255.0}" "${4:-10.40.41.254}" ;;
|
|
save) save_flash ;;
|
|
*) usage ;;
|
|
esac
|