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

Leave a Reply

 
wpSolution Live Chat

Hi, Your satisfaction is our top priority, we are ready to answer your questions...

We care about your data, and we'd love to use cookies to make your experience better.