#!/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
Scripts
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.