HG8145V5 set Samba Permit mode

The provider returns the Gpon ONT Modem settings. So I wrote a script that simulates user behavior and sets the necessary setting. In this example, we will set the setting for the SAMBA server to Permit mode. Run the script via cron on a schedule or in other ways.
#!/bin/bash

set -euo pipefail
exec > /root/script/HG8145V5/script.log 2>&1

BASE_URL="http://192.168.100.1"
USERNAME="telecomadmin"
PASSWORD_BASE64="UGFzc3dvcmQh=="  # Base64

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
COOKIE_FILE="$SCRIPT_DIR/hg_cookies.txt"
DEBUG_FILE="$SCRIPT_DIR/debug_response.html"

log() {
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}

logout_and_exit() {
	log "=== 6. Log out ==="
	curl -s -b "$COOKIE_FILE" -H "Cookie: $FULL_COOKIE" \
	  -H "Origin: $BASE_URL" \
	  -H "Referer: $BASE_URL/index.asp" \
	  -H "Content-Type: application/x-www-form-urlencoded" \
	  -X POST "$BASE_URL/logout.cgi?RequestFile=html/logout.html" \
	  -d "x.X_HW_Token=$HWONTTOKEN" > /dev/null

	rm -f "$COOKIE_FILE"
	log "[+] Script finished. Debugging saved to $DEBUG_FILE (if there was an error)"
	exit "$1"
}

log "=== 0. Get the main page and cookies ==="
curl -s -c "$COOKIE_FILE" "$BASE_URL/" > /dev/null
if [ ! -s "$COOKIE_FILE" ]; then
  log "[!] Failed to get cookies"
  logout_and_exit 1
fi
log "[+] Cookies received"

log "=== 1. Get X_HW_Token ==="
TOKEN=$(curl -s -b "$COOKIE_FILE" -c "$COOKIE_FILE" -X POST "$BASE_URL/asp/GetRandCount.asp" | grep -oE '[a-f0-9]{40,}')
if [ -z "$TOKEN" ]; then
  log "[!] Failed to get X_HW_Token"
  logout_and_exit 1
fi
log "[+] Received X_HW_Token: $TOKEN"

log "=== 2. Let's log in ==="
curl -s -b "$COOKIE_FILE" -c "$COOKIE_FILE" -X POST "$BASE_URL/login.cgi" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Origin: $BASE_URL" \
  -H "Referer: $BASE_URL/" \
  -d "UserName=$USERNAME&PassWord=$PASSWORD_BASE64&Language=english&x.X_HW_Token=$TOKEN" > /dev/null

SID=$(grep -o 'sid=[^;]*' "$COOKIE_FILE")
if [ -z "$SID" ]; then
  log "[!] Login failed"
  logout_and_exit 1
fi
log "[+] Login successful, SID: $SID"

FULL_COOKIE="$SID:Language:english:id=1"

log "=== 3. We get onttoken from index.asp ==="
INDEX_PAGE=$(curl -s -b "$COOKIE_FILE" -H "Cookie: $FULL_COOKIE" "$BASE_URL/index.asp")
ONTTOKEN_INDEX=$(echo "$INDEX_PAGE" | grep -oP 'name="onttoken"\s+id="onttoken"\s+value="\K[a-f0-9]{40,}')
if [ -z "$ONTTOKEN_INDEX" ]; then
  log "[!] onttoken not found in index.asp"
else
  log "[+] Received onttoken: $ONTTOKEN_INDEX"
fi

log "=== 4. Getting hwonttoken from newacl.asp ==="
NEWACL_PAGE=$(curl -s -b "$COOKIE_FILE" -H "Cookie: $FULL_COOKIE" "$BASE_URL/html/bbsp/portacl/newacl.asp")
HWONTTOKEN=$(echo "$NEWACL_PAGE" | grep -oP 'name="onttoken"\s+id="hwonttoken"\s+value="\K[a-f0-9]{40,}')
if [ -z "$HWONTTOKEN" ]; then
  log "[!] hwonttoken not found in newacl.asp"
else
  log "[+] Received hwonttoken: $HWONTTOKEN"
fi

log "=== 5. Set ACL: x.Mode=0 (Permit for SAMBA) ==="

POST_DATA="x.Priority=30&x.SrcPortName=ALL&x.ServicePort=SAMBA&x.SrcPortType=2&x.SrcIp=&x.Mode=0&x.ServiceProto=&x.ServiceProtoPort=&x.X_HW_Token=$HWONTTOKEN"

ACL_URL="$BASE_URL/html/bbsp/portacl/set.cgi?x=InternetGatewayDevice.X_HW_Security.AclServices.AccessControl.List.3&RequestFile=html/bbsp/portacl/newacl.asp"

ACL_RESPONSE=$(curl -s -k -w "%{http_code}" -b "$COOKIE_FILE" -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Cookie: $SID" -d "$POST_DATA" "$ACL_URL")

HTTP_CODE="${ACL_RESPONSE: -3}"
RESPONSE_BODY="${ACL_RESPONSE::-3}"

if [ "$HTTP_CODE" -ne 200 ]; then
  log "[!] HTTP error applying ACL: $HTTP_CODE"
  echo "$RESPONSE_BODY" | tee "$DEBUG_FILE"
  logout_and_exit 1
fi

logout_and_exit 0

Добавить комментарий

 
Живой чат wpSolution

Привет, Ваше удовлетворение является нашим главным приоритетом, мы готовы ответить на ваши вопросы...

Мы заботимся о ваших данных и с удовольствием используем файлы cookie, чтобы сделать ваш опыт лучше.