| name | safaricom-mx0268-router-api |
|---|---|
| description | Use this skill to talk to the Safaricom MX0268 mobile router (marketed as "Safaricom Kimem MIFI", hardware is a ZTE M30S Pro). Covers login, reading state, listing connected devices, sending SMS, navigating USSD menus, the protocol's quirks, and a security model overview. Trigger when the user mentions a router admin panel at 192.168.0.1 / Server header "Demo-Webs", or asks about endpoints `/reqproc/proc_get` / `/reqproc/proc_post`, or goformId values like LOGIN / SEND_SMS / USSD_PROCESS, or device names "Kimem" or "M30S Pro". |
A field-tested guide to the HTTP API behind the Vue admin panel of the Safaricom MX0268 (marketed as the "Safaricom Kimem MIFI", hardware is a ZTE M30S Pro) running the "Demo-Webs" embedded HTTP server. The firmware identifies itself via cmd=cr_version as CPE_M30SPRO_... and via tz_customer_code as MX0268. Everything below was reverse-engineered from the unpacked SPA bundle and verified against a live unit.
Use this when the target router meets ANY of these:
- HTTP
Server:header readsDemo-Webs - Admin panel is a Vue SPA at
http://192.168.0.1and theindex.htmlmentions "cpe" in the noscript fallback - API endpoints live under
/reqproc/proc_getand/reqproc/proc_post - Login flow uses
goformId=LOGINwith a nonce-salted SHA-256 password cmd=cr_versionreturns a string starting withCPE_M30SPRO_
GETs read state from /reqproc/proc_get, POSTs perform actions via /reqproc/proc_post. Both require isTest=false. POSTs additionally require a Referer header pointing at the router. Authentication is a 2-step dance: GET a one-time random_login nonce, then POST goformId=LOGIN with password = base64(sha256(nonce + plaintext)). Sessions are bound to client IP (no cookie, no session token). Login times out after a few minutes of inactivity. Five failed logins lock the account for 300 seconds.
Default credentials for the MX0268 are admin / admin — try those first. If they don't return result: "0", ask the user for their current password.
import { createHash } from "node:crypto";
const sha256 = (s: string) => createHash("sha256").update(s).digest("hex");
const b64 = (s: string) => Buffer.from(s, "utf8").toString("base64");
const HOST = "192.168.0.1";
// Step 1: fetch the nonce
const { random_login: nonce } = await fetch(
`http://${HOST}/reqproc/proc_get?cmd=get_random_login&isTest=false`
).then(r => r.json());
// Step 2: POST LOGIN
const res = await fetch(`http://${HOST}/reqproc/proc_post`, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded;charset=utf-8",
Referer: `http://${HOST}/`, // ⚠ REQUIRED
},
body: new URLSearchParams({
username: b64("admin"),
password: b64(sha256(nonce + "<plaintext-password>")),
goformId: "LOGIN",
unique_login_credentials: "1", // any non-empty string works
isTest: "false",
}).toString(),
}).then(r => r.json());
// res = { result: "0", power: "<role>", unique_login_credentials: "1" }
// result === "0" means successAfter success, the server associates your client IP with an authenticated session. Subsequent GETs from the same IP just work — no token to pass.
The power field in the response is a copy of tz_account_power, an account-role identifier. Observed values:
"1"— full admin (most permissive UI guards check for this)"2"— restricted role (UI hides several panels for this on MX0268)"3"— default admin — whatadmin/adminreturns"4"— sometimes treated equivalent to"1"(e.g.tz_account_power === "1" || === "4")
The mapping was inferred from ~30 tz_account_power comparisons in 56d7.js. The exact 1/2/3/4 semantics matter if you ever change the admin password and notice the SPA hiding/showing different features.
CSRFToken handling (omit when empty). The SPA's axios interceptor calls cmd=get_token_identity before every POST and, if the response token is non-empty, adds CSRFToken: sha256(token) to the body. Pre-auth, get_token_identity returns "" — and the SPA does NOT send a CSRFToken in that case. If you naively send CSRFToken: sha256("") you get {"result":"illegal request for csrfToken"} and the request fails. Either omit the field entirely (what the recipes above do) or only include it when you've genuinely got a non-empty token to hash.
Single cmd:
GET /reqproc/proc_get?cmd=station_list&isTest=false
→ {"station_list": [...]}
Batched (comma-separated cmd list + multi_data=1):
GET /reqproc/proc_get?cmd=rssi,signalbar,network_type&isTest=false&multi_data=1
→ {"rssi":"-72","signalbar":"5","network_type":"LTE"}
⚠️ We don't know the hard limit on how many cmds can be batched. Keep batches reasonable (a few dozen at most) and chunk by topic if you need more.
await fetch(`http://${HOST}/reqproc/proc_post`, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded;charset=utf-8",
Referer: `http://${HOST}/`,
},
body: new URLSearchParams({
goformId: "EDIT_HOSTNAME", // any action from the goformId table below
mac: "AA:BB:CC:DD:EE:FF",
hostname: "Friendly Name",
isTest: "false",
}).toString(),
}).then(r => r.json());
// → {"result": "success"} on success (some actions return {"result":"0"} instead — see notes)const { station_list } = await fetch(
`http://${HOST}/reqproc/proc_get?cmd=station_list&isTest=false`
).then(r => r.json());
// Each entry:
// { hostname, ip_addr, mac_addr, ssid_index, ipv6, dev_type, ip_type, connect_time, ipv6_local }If station_list is "" (empty string), the session expired — re-login.
const ucs2 = (s: string) =>
[...s].map(c => c.charCodeAt(0).toString(16).toUpperCase().padStart(4, "0")).join("");
const smsTime = (d = new Date()) => {
const p = (n: number) => String(n).padStart(2, "0");
const yy = String(d.getFullYear()).slice(2);
const tz = -d.getTimezoneOffset() / 60;
return `${yy};${p(d.getMonth()+1)};${p(d.getDate())};${p(d.getHours())};${p(d.getMinutes())};${p(d.getSeconds())};${tz >= 0 ? "+" : ""}${tz}`;
};
await fetch(`http://${HOST}/reqproc/proc_post`, {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded;charset=utf-8", Referer: `http://${HOST}/` },
body: new URLSearchParams({
goformId: "SEND_SMS",
notCallback: "true",
Number: "+251900000000", // recipient MSISDN, full international format
sms_time: smsTime(), // semicolon-separated, NOT comma
MessageBody: ucs2("hello world"), // UCS-2 hex
ID: "-1",
encode_type: "UNICODE", // or "GSM7_default" for pure-ASCII
isTest: "false",
}).toString(),
});
// → { result: "success" }The router doesn't tell you about delivery; only about acceptance for transmission.
const params = new URLSearchParams({
cmd: "sms_data_total",
page: "0",
data_per_page: "500",
mem_store: "1", // 1 = SIM/NV combined, 0 = device-only
tags: "10", // standard "all inbox messages" filter
order_by: "order by id asc",
isTest: "false",
});
const { messages } = await fetch(
`http://${HOST}/reqproc/proc_get?${params}`
).then(r => r.json());
// Each message: { id, number, content, tag, date, draft_group_id }
// content is UCS-2 hex; decode:
function decodeUCS2(hex: string) {
let s = "";
for (let i = 0; i + 4 <= hex.length; i += 4) s += String.fromCharCode(parseInt(hex.slice(i, i + 4), 16));
return s;
}
// date format: "YY,MM,DD,HH,MM,SS,+TZ" where TZ is in QUARTER-HOURS (e.g. +12 = +3:00)Three-step dance: send → poll → read. Reply to navigate menus; cancel when done.
async function ussdSend(code: string) {
await post({ goformId: "USSD_PROCESS", USSD_operator: "ussd_send",
USSD_send_number: code, notCallback: "true" });
return pollAndRead();
}
async function ussdReply(input: string) {
await post({ goformId: "USSD_PROCESS", USSD_operator: "ussd_reply",
USSD_reply_number: input, notCallback: "true" });
return pollAndRead();
}
async function ussdCancel() {
await post({ goformId: "USSD_PROCESS", USSD_operator: "ussd_cancel" });
}
async function pollAndRead(): Promise<string> {
for (let i = 0; i < 30; i++) {
await new Promise(r => setTimeout(r, 1000));
const { ussd_write_flag: f } = await get("ussd_write_flag");
if (f === "15") continue; // still in progress
if (["1","3","4","10","41","99","unknown"].includes(f)) {
throw new Error(`USSD error code ${f}`);
}
break; // "16" (and probably others) = ready
}
const { ussd_data } = await get("ussd_data_info");
return decodeUCS2(ussd_data); // UCS-2 hex → text
}USSD response shape: the GET returns {ussd_data: "<UCS-2 hex>", ussd_action: "<state>", ussd_dcs: "<encoding>"}. The SPA doesn't explicitly branch on ussd_action to decide menu-vs-final — it just shows whatever text came back and lets the user reply or close. A script has to either infer from content (does the text contain "Reply 1/2/3..."?) or just try-and-let-it-fail.
Known Safaricom Ethiopia codes (from firmware help text):
*777#— main self-service menu*777*10#or*704#— remaining airtime balance*777*02*01*08#or*704#— remaining internet balance*777*02#— buy internet bundle*777*07#— manage your internet*777*02*01*07#— buy internet package for someone else*777*02*06#— buy 4G Wi-Fi bundle for someone else*733#— M-PESA menu700— voice call to customer care (won't work from this hardware — no microphone)
α — HTTP/0.9 framing on malformed-request errors. If the server rejects your request (bad CSRF token, missing field, etc.), it replies with a bare body — no status line, no headers — which strict HTTP clients (e.g. Bun's fetch) reject. Workarounds: (1) make sure your request is well-formed; well-formed traffic gets proper HTTP/1.1 even on logical errors like wrong password. (2) Shell out to curl with --http0.9 if you need to read malformed-response bodies for debugging.
β — Referer required on every POST. Without it, the server silently returns zero bytes. Set Referer: http://<host>/ on all POSTs. GETs don't need it.
γ — isTest=false required everywhere. Both GET URLs and POST bodies. Without it, the server returns {"result":"invalid cmd isTest"}.
δ — Sessions are bound to client IP, not a cookie or token. The unique_login_credentials field the SPA sends is decorative; its value is unchecked. Once you POST LOGIN, your source IP is authenticated. No bearer token to track.
ε — Sessions time out after a few minutes of inactivity. If reads start returning empty strings, re-login (it's cheap).
ζ — Five failed logins = 300s lockout per IP. Check status:
GET /reqproc/proc_get?cmd=psw_fail_num_str,login_lock_time&isTest=false&multi_data=1
→ {"psw_fail_num_str":"5","login_lock_time":"-1"} ← fresh, 5 attempts
→ {"psw_fail_num_str":"0","login_lock_time":"276"} ← LOCKED, 276s until reset
Both reset to defaults on a successful login. A failed login does NOT terminate an existing IP-authenticated session.
η — multi_data=1 overload. Bundling too many cmd keys can hang the device until force-reboot. Chunk by topic.
θ — Empty returns are common. A field returning "" can mean: session expired, the field is unset on this firmware/region, the field is role-gated, or the field needs different request context. Re-login first; if still empty, suspect role/context.
ι — Result codes (verified for this firmware):
- LOGIN:
result == "0"→ success,"3"→ auth fail (wrong password with correct hash format),"1"→ format error / malformed password - LOGOUT and most actions:
result == "success"→ success
κ — No cookies on login. The LOGIN response has no Set-Cookie headers at all. Authentication is purely IP-bound — no cookie to manage.
λ — User-Agent not checked. Tested with a raw HTTP/1.1 request that omits the header entirely; the server responded normally.
μ — HTTP version dialect. The Demo-Webs server speaks a relaxed HTTP/1.1: success responses lack a Content-Length and rely on connection close for body framing. Strict clients tolerate that. Error responses sometimes degrade further to HTTP/0.9.
ν — Only two URL "forms" exist under /reqproc/. Anything under that prefix other than proc_get or proc_post returns {"Form name error"} with HTTP 404. URLs outside /reqproc/ get a 302 redirect to /index.html (catch-all). So you can't fuzz for hidden endpoints via URL path — the routing layer only routes those two. Hidden capabilities live as additional cmd / goformId values within the existing form names, not separate URLs.
| cmd | what it returns |
|---|---|
station_list |
JSON array of connected WiFi clients |
imei |
device IMEI |
sim_imsi |
SIM IMSI |
sim_plmn |
current PLMN string (MCC+MNC, e.g. "63602") |
network_type |
LTE / WCDMA / GSM |
rssi |
signal in dBm |
lte_rsrp, rscp, lte_rsrq |
other signal metrics |
signalbar |
0–5 |
lte_cellid |
sector (low 8 bits of full ECI) |
lte_enodebid |
eNodeB ID (high 20 bits) |
lte_tac |
tracking area code |
dwCellId |
full ECI = (eNodeB << 8) | sector |
nv_arfcn |
LTE EARFCN |
battery_exist, battery_percentage, power_exist |
battery state (1=plugged in, 0=on battery) |
monthly_rx_bytes, monthly_tx_bytes |
monthly traffic counters |
realtime_rx_bytes, realtime_tx_bytes |
since-boot counters |
realtime_rx_thrpt, realtime_tx_thrpt |
live throughput |
lan_ipaddr, LocalDomain, dhcpStart, dhcpEnd |
LAN config |
wan_ipaddr, ppp_status |
WAN status |
SSID1, m_SSID |
primary + secondary SSID names |
WPAPSK1_encode, m_WPAPSK1_encode |
base64 of WPA passwords (plaintext) |
AuthMode, m_AuthMode |
WPA2PSK, etc. |
cr_version |
full firmware build string |
airtime_balance |
UCS-2 hex of last cached USSD balance response |
psw_fail_num_str, login_lock_time |
login-lockout state (no auth needed) |
get_random_login |
login nonce (no auth needed) |
| goformId | body params | what it does |
|---|---|---|
LOGIN |
username, password, unique_login_credentials | authenticate |
LOGOUT |
(none) | end session |
SEND_SMS |
Number, MessageBody, sms_time, encode_type, ID | send an SMS |
DELETE_SMS |
msg_id | delete one SMS |
SET_MSG_READ |
msg_id, tag | mark SMS read |
SAVE_SMS |
SMSNumber, SMSMessage, sms_time, encode_type | save a draft |
USSD_PROCESS |
USSD_operator + USSD_send_number/USSD_reply_number | submit USSD code / menu reply / cancel |
REBOOT_DEVICE |
(none) | reboot the router |
SAVE_SCHEDULE_REBOOT |
schedule_reboot1_weekday/hour/minute, switch | configure weekly auto-reboot |
SET_WIFI_SSID1_SETTINGS |
ssid, security_mode, passphrase, MAX_Access_num, cipher, ... | change primary WiFi |
EDIT_HOSTNAME |
mac, hostname | rename a device in router's view |
AIRTEL_SET_TRAFFIC_BLOCK |
operate_mac, block_flag | kick a device off the WiFi |
SCAN_NETWORK |
(none) | async cellular network scan (then read m_netselect_contents) |
SET_BEARER_PREFERENCE |
BearerPreference (NETWORK_auto / Only_LTE / Only_WCDMA / Only_GSM) | force radio type |
APN_PROC_EX |
apn_action, profile_name, wan_apn, ppp_username, ppp_passwd, dns_mode, ... | manage APN profiles |
ENABLE_PIN / DISABLE_PIN / ENTER_PIN / ENTER_PUK |
OldPinNumber / NewPinNumber / PinNumber / PUKNumber | SIM PIN management |
DATA_LIMIT_SETTING |
data_volume_limit_switch, data_remind_sms_switch | configure data caps |
SET_TRAFFIC_WAN_LIMIT |
flow_rate_limit_switch/unit/up/down | per-direction speed cap |
send_at_tools |
(spread from caller — accepts any field) | raw AT commands to the modem |
CHANGE_PASSWORD |
newUsername, newPassword, oldPassword | change admin credentials |
These exist but have high blast radius. Know what they are; don't fire them without understanding the consequences.
TZ_CMD_SECURE_LOGINwithtelnetdEnable / dropbearEnable / adbEnable = 1— enables telnet / SSH / ADB on the device. If the router is reachable from outside the LAN, this is a remote root shell.tcpdump_upload— triggers packet capture on the device. Surveillance vector.start_upgrade/TZ_START_SYSTEM_UPGRADE/tr069_start_upgrade— firmware upgrade triggers. Bricking risk.tz_set_ctiot_mqtt_client— configures outbound MQTT telemetry to a vendor broker (likely China Telecom IoT).MODE_SWITCH/SET_DEVICE_MODE(older firmware) — factory-reset / debug mode toggles.
The MX0268 ships with code paths that, while not necessarily active by default, represent significant trust surface. Anyone running this device should know about them.
The firmware contains a complete classic MQTT client implementation that can be pointed at a remote broker — TLS or plaintext, with token authentication. "CTIOT" almost certainly stands for China Telecom IoT. The configurable fields (queryable via cmd=ctiot_mqtt_*):
ctiot_mqtt_enable— on/off switchctiot_mqtt_tcp_address/ctiot_mqtt_tcp_port— plain broker endpointctiot_mqtt_tls_address/ctiot_mqtt_tls_port— TLS broker endpointctiot_mqtt_token— broker authentication tokenctiot_mqtt_id_prefix— client ID prefixctiot_mqtt_keepalive_interval— MQTT keepalivectiot_mqtt_report_period— how often it publishes telemetryctiot_mqtt_status— current connection statectiot_mqtt_device_num— number of devices it reports
On the unit this skill was built from we verified all 11 fields return "" — the channel is not active. The capability is there waiting if the carrier ever decides to populate it remotely (e.g. via TR-069 management, which the firmware also supports).
A single POST flips three debug daemons on or off:
telnetdEnable— plain unencrypted telnetdropbearEnable— SSH serveradbEnable— Android Debug Bridge (suggesting the firmware is Android-derived)
Setting any of these to 1 opens an unauthenticated/lightly-authenticated shell server on the device. The SPA exposes this on a "Developer / Secure Login" settings page. If the router is internet-reachable (some MX0268 units expose the admin UI on the WAN side) and an attacker can guess the admin password, this becomes a remote root shell.
The admin password is stored in plaintext (or trivially recoverable). Logical proof: the server issues a one-time random_login nonce per login attempt, then validates sha256(nonce + plaintext_password). To recompute that comparison the server must have the plaintext on hand. A properly-hashed-at-rest password (bcrypt/scrypt/even plain-sha256) cannot be combined with a server-issued challenge nonce — the math forbids it.
Direct evidence: the CHANGE_PASSWORD POST sends newPassword: base64(newPassword) in clear (base64 ≠ encryption). The server receives the new plaintext and stores whatever it stores.
The same applies to other credentials kept on the device, readable via GET cmd=:
ppp_passwd/ipv6_ppp_passwd— PPP authenticationpppoe_password— PPPoEapn2_passwd/apn3_passwd— multi-APN authenticationDDNSPassword— dynamic DNStr069_ConnectionRequestPassword/tr069_ServerPassword— TR-069 remote managementuse_lock_plmn_pwd— SIM PLMN-lock password
These reads are session-gated (return "" to unauthenticated callers, in practice), but anyone with shell access (via #2 above or a kernel exploit) reads them directly from NVRAM.
POST goformId=tcpdump_upload triggers tcpdump on the device. State controlled by tcpdump_state_flag and tz_tcpdump_interface (which network interface to capture on). The SPA exposes no destination URL — where the pcap goes is hardcoded in the C binary. Possible options: a local file the admin UI downloads, an upload to a vendor server, or both.
Standard CWMP / TR-069 protocol — your ISP can remotely configure, upgrade, factory-reset, and diagnose the device. There are 27 tr069_* read fields and 4 TR-069-related POST actions in the catalogue. Configuration includes the URL the device phones home to and credentials it uses. Not specific to this firmware (TR-069 is ubiquitous on carrier-deployed routers), but worth knowing.
On the unit we tested, tz_lock_plmn_state == "yes" — the SIM is administratively locked to a specific PLMN. Combined with the carrier-coverage code for OTHER operators baked into the same binary (Airtel/Orange/Globe/etc.), this means the device can be remotely re-pointed at a different carrier by an authorised entity (vendor, carrier, TR-069 ACS) — the code paths are already there.
Three different POST actions can flash firmware: start_upgrade (manual UI flow), TZ_START_SYSTEM_UPGRADE (vendor flow), and tr069_start_upgrade (TR-069 remote flow). Combined with the TR-069 remote management above, the carrier can push firmware to the device at any time.
- The admin password is stored in plaintext on the device. The nonce+sha256 dance defeats wire-sniffers but does nothing at rest — server has to have the plaintext to recompute
sha256(nonce + plaintext). Confirmed by the change-password endpoint sendingnewPassword: base64(newPassword)in clear. - Many other credentials also stored in plaintext — PPP, PPPoE, DDNS, TR-069 server, APN credentials, SIM-lock password. Each readable via a dedicated GET cmd (
ppp_passwd,pppoe_password, etc.) — though the read API may return empty in protected contexts. - Session model has no defence against LAN attackers. Anyone on the same LAN segment can probe passwords from any IP without disrupting whoever's currently logged in. Failed-login attempts don't kill an existing IP session.
- No CSRF defence beyond the
Refererheader check. Any HTML page on the same Referer (e.g. an XSS via the admin panel's USSD echo) could trigger any POST. - Carrier-specific firmware is multi-tenant. Look for
tz_customer_codechecks (KE0625,MX0268,EG0666,USA694, etc.) and prefix-namespaced cmds (AIRTEL_*,ORANGE_*,GLOBE_*) — a Safaricom-branded MX0268 ships with code paths for Orange, Airtel, Globe Telecom, and others, gated by configuration.
A ~40-line TypeScript that logs in and prints the connected device list:
import { createHash } from "node:crypto";
const HOST = "192.168.0.1", USER = "admin", PASS = "<password>";
const sha256 = (s: string) => createHash("sha256").update(s).digest("hex");
const b64 = (s: string) => Buffer.from(s, "utf8").toString("base64");
const { random_login: nonce } = await fetch(
`http://${HOST}/reqproc/proc_get?cmd=get_random_login&isTest=false`,
).then(r => r.json()) as any;
const login = await fetch(`http://${HOST}/reqproc/proc_post`, {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded;charset=utf-8", Referer: `http://${HOST}/` },
body: new URLSearchParams({
username: b64(USER), password: b64(sha256(nonce + PASS)),
goformId: "LOGIN", unique_login_credentials: "1", isTest: "false",
}).toString(),
}).then(r => r.json()) as any;
if (login.result !== "0") throw new Error(`login failed: ${JSON.stringify(login)}`);
const { station_list } = await fetch(
`http://${HOST}/reqproc/proc_get?cmd=station_list&isTest=false`,
).then(r => r.json()) as any;
console.table(station_list.map((d: any) => ({
hostname: d.hostname || "(unknown)",
ip: d.ip_addr,
mac: d.mac_addr,
})));The MX0268's app.js contains conditional branches gated on tz_customer_code (NVRAM string) and Main_PLMN. On a Safaricom MX0268 these other branches never execute — tz_customer_code is fixed to MX0268. They're listed here only because grep through the bundle turns them up, and because the EG0666 branch in particular changes the login math (see below).
Other tz_customer_code values referenced in the bundle (all inert on MX0268 — listed so a reader who greps the bundle isn't confused):
KE0625— Safaricom KenyaEG0666— Egypt (uses a different login password hashing — see EG0666 section below)USA694— United States (has a special first-login flow gated onMain_PLMN == "70402"inb394.js)ID0237,ID0237_Telkomsel— Indonesia / TelkomselPH0222— PhilippinesSC001,LKA001— Seychelles / Sri LankaIO24003— country code unknown
PLMN values explicitly checked in code:
70402— Guatemala / Tigo (in special USA694 flow atb394.js)- (other PLMNs are not explicitly enumerated — the SPA generally reads
Main_PLMNandsim_plmnfor display, not for branching)
Branded goformId prefixes (most are inert on MX0268):
AIRTEL_*— firewall rules, port forward/filter, traffic logsORANGE_*— auto-update settings, device-switch management, first-language onboardingGLOBE_*— e.g.GLOBE_SET_PARENTAL_CONTROLTZ_*— vendor extensions (these DO execute — they're the standard ZTE extensions, not carrier branding)
A device that ships as Safaricom MX0268 still carries the full Airtel/Orange/Globe code paths inside its single app.js — they just never execute given the configured tz_customer_code.
The bundle contains an alternate login path that the code only takes if tz_customer_code == "EG0666":
username = base64(sha256(account))(account is also hashed)password = base64(nonce + sha256(plaintext))(different nesting order)
On an MX0268 this branch never runs and the default login (covered in the recipes above) is what's used. Documented here only so that anyone seeing result: "3" despite "correct" credentials can rule it in or out via cmd=tz_customer_code.
The methodology used to produce this reference, for posterity:
- Saved the SPA:
curl http://192.168.0.1/static/js/app.js -o app.js. Also savedchunk-vendors.jsand everychunk-*.jsreferenced inapp.js'ss.e()chunk-name list (98 lazy-loaded chunks for this firmware). - Unpacked with webcrack:
bunx webcrack app.js -o unpacked. This splits the webpack bundle back into per-module files with readable variable names. - Extracted goformId names:
grep -hoE 'goformId:\s*"[^"]+"' unpacked/*.js | sort -u→ 91 unique POST actions. - Extracted cmd names:
grep -hoE 'cmd:\s*"[^"]+"' unpacked/*.js | sort -u→ 508 unique GET field names. - For each goformId, found the calling Vuex action and its parameter shape:
grep -B 5 -A 25 'goformId: "<TARGET>"' unpacked/*.js. The Vuex store inapp-unpacked/4360.jsis where almost every API call originates. - For lazy-loaded admin pages (settings panels for SMS, USSD, advanced WiFi, etc.) the relevant
chunk-*.jsfiles contain only UI templates and i18n labels — the actual API actions still live in the main bundle's Vuex store. So the goformId/cmd inventory from step 3-4 is exhaustive without needing to unpack every chunk. - Empirically tested every recipe and quirk against the live router on the wire. Where this skill claims a behaviour, it's because we observed it directly — not inferred from code. Note that the SPA sometimes computes fields dynamically (e.g. LOGIN's
username/passwordare computed at call time, not static keys in an object literal) that grep alone won't catch as parameters — those required reading the calling Vue method.
Every POST action the official Vue SPA can issue, with the Vuex action that triggers it and the body parameters it sends. 91 entries (LOGIN documented separately above).
Param notation:
key1, key2, …— explicit fields the SPA always sends with this action- “+ all keys from caller’s X argument” — the action uses
Object.assign({…}, X)or.extend({…}, X), so the body also carries whatever the calling Vue method passes through
| goformId | triggered by | body params | success check |
|---|---|---|---|
LOGOUT |
user_loginOut |
+ caller's e arg |
result != "success" |
SET_FIRST_LOGIN |
? |
+ caller's t arg |
— |
| goformId | triggered by | body params | success check |
|---|---|---|---|
TZ_CMD_SECURE_LOGIN |
device_setServer |
telnetdEnable, dropbearEnable, adbEnable + caller's a arg |
— |
| goformId | triggered by | body params | success check |
|---|---|---|---|
open_check_upgrade |
device_checkingUpgrade |
check_upgrade_flag, check_need_upgrade, check_confirm_upgrade |
— |
start_upgrade |
setManualUpgrade |
+ caller's t arg |
result != "success" |
tr069_check_upgrade |
device_tr069CheckUpgrade |
tr069_check_upgrade_flag, tr069_check_need_upgrade, tr069_confirm_upgrade + caller's t arg |
— |
tr069_start_upgrade |
setTR069ManualUpgrade |
+ caller's t arg |
result != "success" |
TZ_START_SYSTEM_UPGRADE |
device_upgrade |
+ caller's t arg |
— |
| goformId | triggered by | body params | success check |
|---|---|---|---|
send_at_tools |
sendAtTools |
+ caller's t arg |
result != "success" |
tcpdump_upload |
tcpdump_upload |
+ caller's t arg |
— |
TZ_SET_TRAP_STATUS |
setTrapInfo |
trapEnable + caller's a arg |
result != "success" |
| goformId | triggered by | body params | success check |
|---|---|---|---|
setTR069Config |
setTR069Configuration |
+ caller's t arg |
result != "success" |
tz_set_ctiot_mqtt_client |
setCtiotData |
+ caller's t arg |
result != "success" |
| goformId | triggered by | body params | success check |
|---|---|---|---|
CLEAR_IMSI |
setImsiClear |
+ caller's t arg |
result != "success" |
DISABLE_PIN |
wifi_disablePin |
OldPinNumber + caller's a arg |
result != "success" |
ENABLE_PIN |
wifi_changePin |
OldPinNumber, NewPinNumber + caller's a arg |
result != "success" |
ENTER_PIN |
wifi_setPin |
PinNumber + caller's a arg |
result != "success" |
ENTER_PUK |
wifi_setPinByPuk |
PUKNumber, PinNumber + caller's a arg |
result != "success" |
SET_SIM_SETTING |
setSimSetting |
+ caller's t arg |
result != "success" |
TZ_PIN_WSC_CONFIGURED |
getWscConfigured |
+ caller's e arg |
— |
TZ_SET_WPS_PIN_CONFIG |
setWpsPinConfig |
+ caller's t arg |
result != "success" |
| goformId | triggered by | body params | success check |
|---|---|---|---|
ENABLE_WPS_SET |
wifi_setWPS_enable |
tz_wps_enable, current_pin_switch + caller's a arg |
result != "success" |
GOFORM_WLAN_SAVE_WIFI_MAC_BLACK_LIST |
wifi_setBlackList |
+ caller's a arg |
result != "success" |
GOFORM_WLAN_SAVE_WIFI_MAC_WHITE_LIST |
wifi_setWhiteList |
+ caller's a arg |
result != "success" |
SET_WIFI_SSID1_SETTINGS |
wifi_setWifiBasic |
ssid, broadcastSsidEnabled, MAX_Access_num, security_mode, passphrase, cipher, show_qrcode_flag, wep_default_key, wep_key_1, wep_key_2, wep_key_3, wep_key_4, WEP1Select, pmf_status, wpa2_pmf_status, base64_encrypted_SSID, security_shared_mode |
— |
SET_WIFI_SSID3_SETTINGS |
wifi_setWifiBasic3 |
ssid, broadcastSsidEnabled, MAX_Access_num3, security_mode, passphrase, cipher, show_qrcode_flag, wep_default_key, wep_key_1, wep_key_2, wep_key_3, wep_key_4, WEP1Select, pmf_status, wpa2_pmf_status, base64_encrypted_SSID, security_shared_mode |
— |
SET_WIFI_SSID4_SETTINGS |
wifi_setWifiBasic2 |
ssid, broadcastSsidEnabled, MAX_Access_num2, security_mode, passphrase, cipher, show_qrcode_flag, wep_default_key, wep_key_1, wep_key_2, wep_key_3, wep_key_4, WEP1Select, pmf_status, wpa2_pmf_status, base64_encrypted_SSID, security_shared_mode |
— |
SET_WIFI_SSID5_SETTINGS |
wifi_setWifiBasic4 |
ssid, broadcastSsidEnabled, MAX_Access_num4, security_mode, passphrase, cipher, show_qrcode_flag, wep_default_key, wep_key_1, wep_key_2, wep_key_3, wep_key_4, WEP1Select, pmf_status, wpa2_pmf_status, base64_encrypted_SSID, security_shared_mode |
— |
WIFI_MAC_FILTER |
wifi_setMacFilter |
+ caller's a arg |
result != "success" |
WIFI_WPS_SET |
wifi_setWPS_Pin |
WPS_SSID, wps_mode, wifi_wps_index, wps_pin + caller's a arg |
result != "success" |
| goformId | triggered by | body params | success check |
|---|---|---|---|
APN_PROC_EX |
wifi_applyAPN |
apn_action, apn_mode, profile_name, wan_dial, apn_select, pdp_type, pdp_select, pdp_addr, main_nat, index, wan_apn, ppp_auth_mode, ppp_username, ppp_passwd, dns_mode, prefer_dns_manual, standby_dns_manual, ipv6_wan_apn, ipv6_ppp_auth_mode, ipv6_ppp_username, ipv6_ppp_passwd, ipv6_dns_mode, ipv6_prefer_dns_manual, ipv6_standby_dns_manual |
— |
CONNECTION_IN_ROAMING |
setConnectionInRoaming |
tz_roam_state |
— |
GET_STATUS_ROUTE |
getStaticRoute |
(none) | — |
LOCK_CELL_LIST |
setCellInfo |
lock_cellid_switch, lock_cellid_count, lock_cellid_active_time + caller's a arg |
result != "success" |
MANUAL_ADD_CELLID |
addCellList |
manual_add_cellid + caller's a arg |
result != "success" |
PPPOE_SETTING |
wifiModel_setpppoe |
rj45_mode, ethwan_mode, static_ethwan_ip, static_ethwan_mac, static_ethwan_gw, static_ethwan_nm, static_ethwan_pridns, static_ethwan_secdns, pppoe_password, pppoe_username |
— |
SCAN_NETWORK |
wifi_set_scan_network |
+ caller's e arg |
result != "success" |
SET_ANTENNA_MODE |
setAntennaMode |
+ caller's t arg |
result != "success" |
SET_BEARER_PREFERENCE |
wifi_setBearerPreference |
BearerPreference + caller's a arg |
result != "success" |
SET_NETWORK |
wifi_set_network |
NetworkNumber, Rat, nSubrat + caller's a arg |
result != "success" |
TZ_GET_LOCK_BAND |
getLockBandInfo |
+ caller's t arg |
— |
TZ_POST_ROUTE |
setPostRoute |
postRouteFlag, ip_postroute_mac + caller's a arg |
result != "success" |
UNLOCK_CELL_LIST |
setCellList |
+ caller's t arg |
result != "success" |
unlock_plmn |
user_get_token_post |
user_unlock_code + caller's a arg |
— |
| goformId | triggered by | body params | success check |
|---|---|---|---|
DELETE_SMS |
sms_deleteMessage |
msg_id, notCallback + caller's a arg |
result != "success" |
SAVE_SMS |
sms_saveSMS |
notCallback, SMSNumber, sms_time, SMSMessage, draft_group_id, Index, encode_type + caller's a arg |
result != "success" |
SEND_SMS |
sms_sendSMS |
notCallback, Number, sms_time, MessageBody, ID, encode_type + caller's a arg |
result != "success" |
| goformId | triggered by | body params | success check |
|---|---|---|---|
DATA_LIMIT_SETTING |
wifiModel_setTrafficAlertInfo |
data_volume_limit_switch, data_remind_sms_switch, data_volume_limit_unit, data_volume_limit_size, data_volume_alert_percent, data_remind_sms_number, data_remind_sms_content, encode_type |
— |
FLOW_CALIBRATION_MANUAL |
wifiModel_trafficCalibration |
calibration_way, time, data |
— |
ROAM_DATA_LIMIT_SETTING |
wifiModel_setTrafficAlertInfoRoam |
data_volume_limit_switch, roam_data_remind_sms_switch, roam_data_volume_limit_unit, roam_data_volume_limit_size, roam_data_volume_alert_percent, roam_data_remind_sms_number, roam_data_remind_sms_content, roam_encode_type |
— |
SET_DATA_CLEAR |
wifi_cleardata |
(none) | — |
SET_TRAFFIC_WAN_LIMIT |
setTrafficWanLimit |
flow_rate_limit_switch, flow_rate_limit_unit, flow_rate_limit_up, flow_rate_limit_down + caller's a arg |
result != "success" |
set_traffic_zero |
wifi_set_traffic_zero |
+ caller's e arg |
result != "success" |
| goformId | triggered by | body params | success check |
|---|---|---|---|
EDIT_HOSTNAME |
wifi_editHostName |
mac, hostname + caller's e arg |
result != "success" |
| goformId | triggered by | body params | success check |
|---|---|---|---|
SIP_SERVER_SETTING |
volte_setSipServer |
sip_reg_server, sip_reg_port, is_show_sipServer, sip_domain_address, sip_domain_port, sip_proxy_address, sip_proxy_port, sip_proxy_enable, sip_display_name, sip_user_name, voip_apn_enable, voip_apn, sip_reg_account, sip_reg_pwd |
result != "success" |
SNTP |
system_setSntpSetting |
+ caller's a arg |
result != "success" |
SNTP_Getdatastatic |
system_setSNTPDate |
+ caller's t arg |
result != "success" |
| goformId | triggered by | body params | success check |
|---|---|---|---|
SET_WEB_LANGUAGE |
user_set_need_language |
Language + caller's a arg |
result != "success" |
| goformId | triggered by | body params | success check |
|---|---|---|---|
AIRTEL_ACCESS_LOGS |
wifi_setAccessLogs |
list, pdp_name, cid, start_time, ip_type, end_time, ipv4addr, ipv6addr, index + caller's a arg |
result != "success" |
AIRTEL_FIREWALL_RULES_FILE |
fire_setFirewallRules |
firewallRules + caller's a arg |
— |
AIRTEL_PORT_FILTER_FILE |
fire_setFilter |
PortFilter + caller's a arg |
— |
AIRTEL_PORT_FORWARD_FILE |
fire_setForward |
PortForwarding + caller's a arg |
— |
AIRTEL_SEARCH_TRAFFIC |
wifi_searchAllTraffic |
+ caller's t arg |
result != "success" |
AIRTEL_SET_CLEAR_TRAFFIC |
wifi_setResetTraffic |
+ caller's t arg |
result != "success" |
AIRTEL_SET_MTU |
wifi_setMTU |
mtu + caller's e arg |
result != "success" |
AIRTEL_SET_TRAFFIC_BLOCK |
wifi_setBlock |
operate_mac, block_flag + caller's a arg |
result != "success" |
AIRTEL_SET_UPDATE_TRAFFIC |
wifi_setUpdateTraffic |
operate_mac + caller's a arg |
result != "success" |
AIRTEL_WIFI_ACCESS_LOGS |
wifi_setClientAccessLogs |
list, mac, connectime, disconnectime, index + caller's a arg |
result != "success" |
| goformId | triggered by | body params | success check |
|---|---|---|---|
GLOBE_SET_PARENTAL_CONTROL |
device_setBlackData |
parentList + caller's e arg |
— |
ORANGE_SET_AUTO_UPDATE |
device_autoUpdate |
is_update + caller's e arg |
— |
ORANGE_SET_DEVICE_SWITCH |
SET_DEVICELIST_MANAGE |
macAddress, enable, deviceName + caller's e arg |
— |
ORANGE_SET_SYS_STATUS |
user_set_sys_status |
orange_no_remind, orange_update, orange_update_no_remind, orange_pin_no_remind, orange_first_login + caller's a arg |
result != "success" |
orange_update |
setUpdate |
+ caller's t arg |
result != "success" |
SET_ORANGE_FIRST_LANGUAGE |
user_set_first_language |
orange_first_language, is_restore + caller's t arg |
result != "success" |
SET_ORANGE_THEME |
index_setTheme |
orange_theme + caller's a arg |
— |
| goformId | triggered by | body params | success check |
|---|---|---|---|
TZ_READ_SYSTEM_INFO |
readSystemInfo |
+ caller's t arg |
— |
| goformId | triggered by | body params | success check |
|---|---|---|---|
ACL_SETTING |
setAcl |
+ caller's t arg |
result != "success" |
GOFORM_DORMANCY_TIME |
wifi_setSleepTime |
(none) | — |
GOFORM_SET_WAN_RESTRICTION |
setWanRestriction |
tz_rate_limit_enable, tz_rate_limit_unit, tz_rate_limit_up, tz_rate_limit_down + caller's a arg |
result != "success" |
LOCK_STAY_TIME |
setStayTime |
lock_stay_time + caller's a arg |
result != "success" |
MOBILE_DATA_SETTINGS |
wifi_setDataRoaming |
tz_roam_enable + caller's e arg |
result != "success" |
PBM_CONTACT_DEL |
phoneBook_deleteMessage |
del_option, delete_id, notCallback + caller's a arg |
result != "success" |
QUICK_SETUP_EX |
wifi_setQuickSetting4IPv6 |
index, pdp_type, apn_mode, profile_name, wan_apn, ppp_auth_mode, ppp_username, ppp_passwd, ipv6_wan_apn, ipv6_ppp_auth_mode, ipv6_ppp_username, ipv6_ppp_passwd, SSID_name, base64_encrypted_SSID, SSID_Broadcast, Encryption_Mode_hid, security_shared_mode, WPA_PreShared_Key, wep_default_key, WPA_ENCRYPTION_hid |
— |
SELECT_VOLTE |
volte_setVolte |
tz_cvmod_state + caller's a arg |
result != "success" |
SET_MSG_READ |
sms_setSmsRead |
msg_id, tag + caller's a arg |
— |
set_scanning_status |
setScanning |
+ caller's e arg |
result == "success" |
SET_WIFI_INFO |
wifi_setWifiAdvance_orange |
wifiMode, countryCode, MAX_Access_num, wifi_channel_selection_times, wifi_channel_selection_dcs, m_MAX_Access_num, wifi_dfs_enable, wifi_band, selectedChannel, abg_rate, wifi_11n_cap |
— |
SET_WIFI_INFO2 |
wifi_setWifiSwitch2 |
wifiEnabled, wifiOrder + caller's e arg |
result != "success" |
tz_get_all_scanning |
setScanning |
+ caller's e arg |
result == "failure" |
tz_set_parents_control_enable |
setParentsControl |
+ caller's t arg |
— |
WB_MODE |
wbMode |
wb_mode + caller's a arg |
result != "success" |
Every readable field the SPA queries. 508 entries. Grouped by topic. The “used by” column shows which Vuex action(s) read the field — useful for finding context.
Every read uses GET /reqproc/proc_get?cmd=<name>&isTest=false. Multiple cmds can be batched with &multi_data=1 and a comma-separated list (but watch the count — too many keys can hang the device).
| cmd | used by |
|---|---|
add_special_login_page |
device_getOnceData |
allow_login_from_wan |
getRemoteLoginParams |
first_login |
getPermission |
get_random_login |
user_get_token |
get_token_identity |
user_get_token_post |
is_user_password_default |
getPermission |
login_lock_time |
user_getLoginData |
psw_fail_num_str |
user_getLoginData |
| cmd | used by |
|---|---|
adbd_enable |
device_getServer |
dropbear_enable |
device_getServer |
telnetd_enable |
device_getServer |
| cmd | used by |
|---|---|
tcpdump_state_flag |
tcpdumpData |
tz_tcpdump_interface |
tcpdumpData |
| cmd | used by |
|---|---|
ctiot_mqtt_enable |
getTIANYIConfiguration |
ctiot_mqtt_id_prefix |
getTIANYIConfiguration |
ctiot_mqtt_keepalive_interval |
getTIANYIConfiguration |
ctiot_mqtt_report_period |
getTIANYIConfiguration |
ctiot_mqtt_status |
getTIANYIConfiguration |
ctiot_mqtt_tcp_address |
getTIANYIConfiguration |
ctiot_mqtt_tcp_port |
getTIANYIConfiguration |
ctiot_mqtt_tls_address |
getTIANYIConfiguration |
ctiot_mqtt_tls_port |
getTIANYIConfiguration |
ctiot_mqtt_token |
getTIANYIConfiguration |
tr069_ACS_auth |
device_getTR069Configuration, getTR069Configuration |
tr069_ACS_auth1 |
device_getTR069Configuration, getTR069Configuration |
tr069_CPEPortNo |
device_getTR069Config, getTR069Config |
tr069_CPE_auth |
device_getTR069Configuration, getTR069Configuration |
tr069_CPE_auth1 |
device_getTR069Configuration, getTR069Configuration |
tr069_CertEnable |
device_getTR069Config, getTR069Config |
tr069_PeriodicInformEnable |
device_getTR069Config, device_getTR069Configuration, getTR069Configuration |
tr069_PeriodicInformEnable1 |
device_getTR069Configuration, getTR069Configuration |
tr069_PeriodicInformInterval |
device_getTR069Config, device_getTR069Configuration, getTR069Configuration |
tr069_PeriodicInformInterval1 |
device_getTR069Configuration, getTR069Configuration |
tr069_PeriodicInformTime |
device_getTR069Config, getTR069Config |
tr069_ServerPassword |
device_getTR069Config, device_getTR069Configuration, getTR069Configuration |
tr069_ServerPassword1 |
device_getTR069Configuration, getTR069Configuration |
tr069_ServerURL |
device_getTR069Config, device_getTR069Configuration, getTR069Configuration |
tr069_ServerURL1 |
device_getTR069Configuration, getTR069Configuration |
tr069_ServerUsername |
device_getTR069Config, device_getTR069Configuration, getTR069Configuration |
tr069_ServerUsername1 |
device_getTR069Configuration, getTR069Configuration |
tr069_app_enable |
device_getTR069Configuration, getTR069Configuration |
tr069_connect_status |
device_getTR069Config, getTR069Config |
tr069_use_test_config |
device_getTR069Configuration, getTR069Configuration |
| cmd | used by |
|---|---|
AIRTEL_GET_DEVICE_INFO_TRAFFIC |
get_WLAN_Clients |
MAX_Station_num |
wifi_getWifiAdvance |
client_mac_address |
wifi_getMacFilterInfo |
ctiot_mqtt_device_num |
getTIANYIConfiguration |
deviceList_manage |
GET_DEVICELIST_MANAGE |
device_version |
device_getDeviceVersion |
station_list |
getCurrentlyAttachedDevicesInfo |
| cmd | used by |
|---|---|
Main_PLMN |
getPermission |
current_network_mode |
wifi_getNetSelectInfo |
dwCellId |
device_getOnceData |
lte_cellid |
device_getOnceData |
lte_enodebid |
device_getOnceData |
lte_rsrp |
device_getInfo |
lte_tac |
device_getOnceData |
network_provider_byspn |
getPermission |
network_type |
device_getInfo |
rscp |
device_getInfo |
rssi |
device_getInfo |
sim_plmn |
device_getPinData |
tz_lock_cellid_active_time |
getCellInfo |
tz_lock_cellid_count |
getCellInfo, getCellList |
tz_lock_cellid_list_0 |
getCellList |
tz_lock_cellid_list_1 |
getCellList |
tz_lock_cellid_list_10 |
getCellList |
tz_lock_cellid_list_11 |
getCellList |
tz_lock_cellid_list_2 |
getCellList |
tz_lock_cellid_list_3 |
getCellList |
tz_lock_cellid_list_4 |
getCellList |
tz_lock_cellid_list_5 |
getCellList |
tz_lock_cellid_list_6 |
getCellList |
tz_lock_cellid_list_7 |
getCellList |
tz_lock_cellid_list_8 |
getCellList |
tz_lock_cellid_list_9 |
getCellList |
tz_lock_cellid_mode |
getLockRule |
tz_lock_cellid_switch |
getCellInfo, getCellList |
tz_lock_current_cellid |
getCellList |
tz_lock_plmn_list |
device_getPinData |
tz_lock_plmn_state |
device_getPinData |
tz_plmn_is_lock |
device_getPinData |
unlock_plmn_time |
user_getLoginData, device_getUnlockInfo |
use_lock_plmn_pwd |
device_getPinData |
| cmd | used by |
|---|---|
APN_config0 |
wifi_getApnSettings |
APN_config1 |
wifi_getApnSettings |
APN_config10 |
wifi_getApnSettings |
APN_config11 |
wifi_getApnSettings |
APN_config12 |
wifi_getApnSettings |
APN_config13 |
wifi_getApnSettings |
APN_config14 |
wifi_getApnSettings |
APN_config15 |
wifi_getApnSettings |
APN_config16 |
wifi_getApnSettings |
APN_config17 |
wifi_getApnSettings |
APN_config18 |
wifi_getApnSettings |
APN_config19 |
wifi_getApnSettings |
APN_config2 |
wifi_getApnSettings |
APN_config3 |
wifi_getApnSettings |
APN_config4 |
wifi_getApnSettings |
APN_config5 |
wifi_getApnSettings |
APN_config6 |
wifi_getApnSettings |
APN_config7 |
wifi_getApnSettings |
APN_config8 |
wifi_getApnSettings |
APN_config9 |
wifi_getApnSettings |
DDNS_Enable |
getDDNS |
DDNS_Hash_Value |
getDDNS |
DDNS_Mode |
getDDNS |
TZ_ACL_WAN_HTTP_0 |
getACLInfo |
TZ_ACL_WAN_HTTP_1 |
getACLInfo |
TZ_ACL_WAN_HTTP_2 |
getACLInfo |
TZ_ACL_WAN_HTTP_3 |
getACLInfo |
TZ_ACL_WAN_HTTP_4 |
getACLInfo |
TZ_ACL_WAN_HTTP_5 |
getACLInfo |
TZ_ACL_WAN_ICMP_0 |
getACLInfo |
TZ_ACL_WAN_ICMP_1 |
getACLInfo |
TZ_ACL_WAN_ICMP_2 |
getACLInfo |
TZ_ACL_WAN_ICMP_3 |
getACLInfo |
TZ_ACL_WAN_ICMP_4 |
getACLInfo |
TZ_ACL_WAN_ICMP_5 |
getACLInfo |
apn2_auth_mode |
wifi_getMultiAPN |
apn2_passwd |
wifi_getMultiAPN |
apn2_profile_name |
wifi_getMultiAPN |
apn2_type |
wifi_getMultiAPN |
apn2_username |
wifi_getMultiAPN |
apn2_wan |
wifi_getMultiAPN |
apn3_auth_mode |
wifi_getMultiAPN |
apn3_passwd |
wifi_getMultiAPN |
apn3_profile_name |
wifi_getMultiAPN |
apn3_type |
wifi_getMultiAPN |
apn3_username |
wifi_getMultiAPN |
apn3_wan |
wifi_getMultiAPN |
apn_auto_config |
wifi_getApnSettings |
apn_index |
wifi_getQuickSettingInfo |
apn_mode |
wifi_getApnSettings, wifi_getQuickSettingInfo |
apn_num_preset |
wifi_getApnSettings |
apn_select |
wifi_getApnSettings |
blc_wan_auto_mode |
user_getLoginData |
blc_wan_mode |
user_getLoginData |
dns_mode |
wifi_getApnSettings |
ethwan_mode |
wifiModel_getpppoe, device_getInfo |
getddns_status |
getDDNSStatus |
ipv6_APN_config0 |
wifi_getApnSettings |
ipv6_APN_config1 |
wifi_getApnSettings |
ipv6_APN_config10 |
wifi_getApnSettings |
ipv6_APN_config11 |
wifi_getApnSettings |
ipv6_APN_config12 |
wifi_getApnSettings |
ipv6_APN_config13 |
wifi_getApnSettings |
ipv6_APN_config14 |
wifi_getApnSettings |
ipv6_APN_config15 |
wifi_getApnSettings |
ipv6_APN_config16 |
wifi_getApnSettings |
ipv6_APN_config17 |
wifi_getApnSettings |
ipv6_APN_config18 |
wifi_getApnSettings |
ipv6_APN_config19 |
wifi_getApnSettings |
ipv6_APN_config2 |
wifi_getApnSettings |
ipv6_APN_config3 |
wifi_getApnSettings |
ipv6_APN_config4 |
wifi_getApnSettings |
ipv6_APN_config5 |
wifi_getApnSettings |
ipv6_APN_config6 |
wifi_getApnSettings |
ipv6_APN_config7 |
wifi_getApnSettings |
ipv6_APN_config8 |
wifi_getApnSettings |
ipv6_APN_config9 |
wifi_getApnSettings |
ipv6_APN_index |
wifi_getQuickSettingInfo |
ipv6_apn_auto_config |
wifi_getApnSettings |
ipv6_apn_index |
wifi_getQuickSettingInfo |
ipv6_dns_mode |
wifi_getApnSettings |
ipv6_pdp_type |
wifi_getApnSettings, wifi_getQuickSettingInfo, device_getInfo |
ipv6_ppp_auth_mode |
wifi_getApnSettings |
ipv6_ppp_passwd |
wifi_getApnSettings |
ipv6_ppp_username |
wifi_getApnSettings |
ipv6_prefer_dns_manual |
wifi_getApnSettings |
ipv6_standby_dns_manual |
wifi_getApnSettings |
ipv6_wan_apn |
wifi_getApnSettings |
ipv6_wan_ipaddr |
system_getSntpParams, device_getInfo |
is_show_apn_mode_select |
wifi_getApnSettings |
ppp_auth_mode |
wifi_getApnSettings |
ppp_passwd |
wifi_getApnSettings |
ppp_status |
getPermission, wifi_getNetSelectInfo, wifi_getQuickSettingInfo |
ppp_username |
wifi_getApnSettings |
pppoe_password |
wifiModel_getpppoe |
pppoe_username |
wifiModel_getpppoe |
prefer_dns_manual |
wifi_getApnSettings |
standby_dns_manual |
wifi_getApnSettings |
static_ethwan_gw |
wifiModel_getpppoe |
static_ethwan_ip |
wifiModel_getpppoe |
static_ethwan_mac |
wifiModel_getpppoe |
static_ethwan_nm |
wifiModel_getpppoe |
static_ethwan_pridns |
wifiModel_getpppoe |
static_ethwan_secdns |
wifiModel_getpppoe |
static_wan_ipaddr |
device_getInfo |
tr069_ConnectionRequestPassword |
device_getTR069Config, device_getTR069Configuration, getTR069Configuration |
tr069_ConnectionRequestPassword1 |
device_getTR069Configuration, getTR069Configuration |
tr069_ConnectionRequestUname |
device_getTR069Config, device_getTR069Configuration, getTR069Configuration |
tr069_ConnectionRequestUname1 |
device_getTR069Configuration, getTR069Configuration |
tr069_apn |
device_getTR069Config, getTR069Config |
tr069_apn_enable |
device_getTR069Config, getTR069Config |
tr069_apn_show |
getPermission |
tz_ability_supported_wan_mode |
getPermission |
tz_apn2_enable |
getPermission, wifi_getMultiAPN |
tz_apn3_enable |
getPermission, wifi_getMultiAPN |
wan3_ipv6_ip |
device_getInfo |
wan4_ipv6_ip |
device_getInfo |
wan_apn |
wifi_getApnSettings |
wan_dial |
wifi_getApnSettings |
wan_ipaddr |
system_getSntpParams, device_getInfo, device_getTR069Config |
wan_ssl_enable |
getHttpsPort |
wan_ssl_port |
getHttpsPort |
web_set_wan_http |
getACLInfo |
| cmd | used by |
|---|---|
HideSSID |
wifi_getQuickSettingInfo |
SSID1 |
wifi_getWpsInfo, wifiModel_getWpsInfo, wifi_getQuickSettingInfo |
WPS_SSID |
wifi_getWpsInfo, wifiModel_getWpsInfo |
hostNameList |
wifi_getHostNameList |
m_HideSSID |
device_getInfo |
m_SSID |
wifi_getWpsInfo, wifiModel_getWpsInfo, device_getInfo |
m_ssid_enable |
wifi_getWpsInfo, wifiModel_getWpsInfo, device_getInfo |
tz_ability_supported_wps |
getPermission |
tz_hide_wps_pbc |
wifi_getWpsInfo |
tz_wps_enable |
wifi_getWpsInfo, wifiModel_getWpsInfo |
wifi_11n_cap |
wifi_getWifiAdvance, device_getOnceData |
wifi_2g5g_select |
getPermission, wifi_getWifiAdvance |
wifi_band |
wifi_getWifiAdvance, device_getOnceData |
wifi_channel_selection_dcs |
wifi_getWifiAdvance |
wifi_channel_selection_times |
wifi_getWifiAdvance |
wifi_chip_type |
wifi_getWifiAdvance, device_getOnceData |
wifi_cur_state |
wifi_getMacFilterInfo, wifi_getWpsInfo, wifiModel_getWpsInfo |
wifi_dfs_enable |
wifi_getWifiAdvance |
wifi_hostname_black_list |
wifi_getMacFilterInfo |
wifi_mac_black_list |
wifi_getMacFilterInfo |
wifi_mac_white_list |
wifi_getMacFilterInfo |
wifi_sta_connection |
wifi_getWifiAdvance, wifi_getWpsInfo, wifiModel_getWpsInfo |
wifi_wps_index |
wifi_getWpsInfo, wifiModel_getWpsInfo |
wps_mode |
wifi_getWpsInfo, wifiModel_getWpsInfo |
| cmd | used by |
|---|---|
control_sms_edit |
getPermission |
data_remind_sms_content |
wifi_getTrafficAlertInfo |
data_remind_sms_number |
wifi_getTrafficAlertInfo |
data_remind_sms_switch |
wifi_getTrafficAlertInfo |
roam_data_remind_sms_content |
wifi_getTrafficAlertInfoRoam |
roam_data_remind_sms_number |
wifi_getTrafficAlertInfoRoam |
roam_data_remind_sms_switch |
wifi_getTrafficAlertInfoRoam |
sms_cmd_status_info |
sms_getSmsStatusInfo |
sms_data_total |
sms_getSMSMessages, sms_getSMSMessages_encode |
sms_parameter_info |
sms_getMessageCenter |
| cmd | used by |
|---|---|
data_volume_alert_percent |
wifi_getTrafficAlertInfo |
data_volume_limit_size |
wifi_getTrafficAlertInfo |
data_volume_limit_switch |
wifi_getTrafficAlertInfo, wifi_getTrafficAlertInfoRoam |
data_volume_limit_unit |
wifi_getTrafficAlertInfo |
flow_rate_limit_down |
wifi_getTrafficAlertInfo |
flow_rate_limit_switch |
wifi_getTrafficAlertInfo |
flow_rate_limit_unit |
wifi_getTrafficAlertInfo |
flow_rate_limit_up |
wifi_getTrafficAlertInfo |
flux_total_flow_when_power_on |
wifi_getStatistic |
low_flux_limit |
wifi_getSleepTime |
monthly_rx_bytes |
wifi_getTrafficAlertInfo |
monthly_time |
wifi_getTrafficAlertInfo |
monthly_tx_bytes |
wifi_getTrafficAlertInfo |
realtime_rx_bytes |
wifi_getStatistic |
realtime_tx_bytes |
wifi_getStatistic |
roam_data_volume_alert_percent |
wifi_getTrafficAlertInfoRoam |
roam_data_volume_limit_size |
wifi_getTrafficAlertInfoRoam |
roam_data_volume_limit_unit |
wifi_getTrafficAlertInfoRoam |
roam_monthly_rx_bytes |
wifi_getTrafficAlertInfoRoam |
roam_monthly_time |
wifi_getTrafficAlertInfoRoam |
roam_monthly_tx_bytes |
wifi_getTrafficAlertInfoRoam |
roam_traffic_alined_delta |
wifi_getTrafficAlertInfoRoam |
traffic_alined_delta |
wifi_getTrafficAlertInfo |
tz_rate_limit_down |
wifi_getTrafficAlertInfo, getWanRestriction |
tz_rate_limit_enable |
wifi_getTrafficAlertInfo, getWanRestriction |
tz_rate_limit_unit |
wifi_getTrafficAlertInfo, getWanRestriction |
tz_rate_limit_up |
wifi_getTrafficAlertInfo, getWanRestriction |
use_flow_day0 |
wifi_getTrafficAlertInfo |
use_flow_day1 |
wifi_getTrafficAlertInfo |
use_flow_day2 |
wifi_getTrafficAlertInfo |
use_flow_day3 |
wifi_getTrafficAlertInfo |
use_flow_day4 |
wifi_getTrafficAlertInfo |
use_flow_day5 |
wifi_getTrafficAlertInfo |
use_flow_day6 |
wifi_getTrafficAlertInfo |
ussd_data_info |
success |
| cmd | used by |
|---|---|
auto_simpin |
user_getLoginData, wifi_getPinData, device_getPinData |
current_pin_switch |
wifi_getWpsInfo, wifiModel_getWpsInfo |
imei |
device_getInfo |
imsi |
device_getInfo |
modem_main_state |
user_getLoginData, wifi_getNetSelectInfo, wifi_getPinData |
old_sim_num |
device_getOnceData |
pin_status |
wifi_getPinData, device_getPinData |
pinnumber |
user_getLoginData, wifi_getPinData, device_getPinData |
puknumber |
user_getLoginData, wifi_getPinData, device_getPinData |
show_sim_spn |
getPermission |
sim_iccid |
device_getOnceData |
sim_imsi |
device_getInfo |
sim_in_use |
getPermission |
sim_slot_mode |
getPermission |
sim_spn |
getPermission |
tz_lock_imsi_activation_time |
getImsiInfo |
| cmd | used by |
|---|---|
check_need_upgrade |
device_getUpgradStatus |
config_version |
device_getConfigVersion |
cr_version |
device_getInfo |
hardware_version |
device_getInfo |
tz_hardware_version |
getPermission |
tz_set_version |
getPermission |
tz_version |
system_getAuth |
tz_version_not_show_zlt |
getPermission |
tz_version_type |
getPermission, device_getOnceData |
| cmd | used by |
|---|---|
auto_refresh_sntp |
system_getSntpParams |
sntp_day |
system_getSntpParams |
sntp_dst_enable |
system_getSntpParams |
sntp_hour |
system_getSntpParams |
sntp_minute |
system_getSntpParams |
sntp_month |
system_getSntpParams |
sntp_other_server0 |
system_getSntpParams |
sntp_other_server1 |
system_getSntpParams |
sntp_other_server2 |
system_getSntpParams |
sntp_process_result |
system_getSntpParams |
sntp_second |
system_getSntpParams |
sntp_server0 |
system_getSntpParams |
sntp_server1 |
system_getSntpParams |
sntp_server2 |
system_getSntpParams |
sntp_server_list1 |
system_getSntpParams |
sntp_server_list2 |
system_getSntpParams |
sntp_server_list3 |
system_getSntpParams |
sntp_time_set_mode |
system_getSntpParams |
sntp_timezone |
system_getSntpParams |
sntp_timezone_index |
system_getSntpParams |
sntp_year |
system_getSntpParams |
tz_ability_supported_voice |
getPermission |
tz_voice_support |
getPermission |
zscan_voice_sta |
getScanData |
| cmd | used by |
|---|---|
AIRTEL_GET_ACCESS_LOGS |
wifi_getAccessLogs |
AIRTEL_GET_WIFI_ACCESS_LOGS |
wifi_getClientAccessLogs |
GLOBE_GET_PARENTAL_CONTROL |
device_getBlackData |
| cmd | used by |
|---|---|
TZ_ACL_LAN_HTTP_0 |
getACLInfo |
TZ_ACL_LAN_HTTP_1 |
getACLInfo |
TZ_ACL_LAN_HTTP_2 |
getACLInfo |
TZ_ACL_LAN_HTTP_3 |
getACLInfo |
TZ_ACL_LAN_HTTP_4 |
getACLInfo |
TZ_ACL_LAN_HTTP_5 |
getACLInfo |
TZ_ACL_LAN_ICMP_0 |
getACLInfo |
TZ_ACL_LAN_ICMP_1 |
getACLInfo |
TZ_ACL_LAN_ICMP_2 |
getACLInfo |
TZ_ACL_LAN_ICMP_3 |
getACLInfo |
TZ_ACL_LAN_ICMP_4 |
getACLInfo |
TZ_ACL_LAN_ICMP_5 |
getACLInfo |
tz_ability_supported_ac_adapter |
getPermission |
tz_ability_supported_antenna |
getPermission |
tz_ability_supported_auxiliary_antenna |
getPermission |
tz_ability_supported_dormancy |
getPermission |
tz_ability_supported_eth |
getPermission |
tz_ability_supported_lcd |
getPermission |
tz_account_power |
getPermission |
tz_bcp_mrru |
getL2tp |
tz_bcp_status |
getL2tp |
tz_browser_title |
getPermission |
tz_browser_title_icon |
getPermission |
tz_change_theme |
getPermission |
tz_close_gms |
wifi_getNetSelectInfo |
tz_customer_code |
getPermission, handleClick |
tz_display_2G_band_list |
device_getOnceData |
tz_display_3G_band_list |
device_getOnceData |
tz_flash_total |
device_getOnceData |
tz_flash_use |
device_getOnceData |
tz_gre_state |
getL2tp |
tz_gsm_bands |
device_getOnceData |
tz_l2tp_auth_name |
getL2tp |
tz_l2tp_auth_pass |
getL2tp |
tz_l2tp_bcp_enable |
getL2tp |
tz_l2tp_challenge_pass |
getL2tp |
tz_l2tp_get_ip |
getL2tp |
tz_l2tp_ipsec_enable |
getL2tp |
tz_l2tp_ipsec_psk |
getL2tp |
tz_l2tp_ipsec_status |
getL2tp |
tz_l2tp_lac_name |
getL2tp |
tz_l2tp_lns_checkalive |
getL2tp |
tz_l2tp_lns_server |
getL2tp |
tz_l2tp_mtu |
getL2tp |
tz_l2tp_peer_ip |
getL2tp |
tz_l2tp_state |
getL2tp |
tz_l2tp_status |
getL2tp |
tz_l2tp_tunnel_name |
getL2tp |
tz_lightoff_time |
wifi_getSleepTime, getLightOff |
tz_listen_goahead |
getPermission |
tz_lock_gsm_band |
device_getOnceData |
tz_lock_wcdma_band |
device_getOnceData |
tz_network_license |
system_getAuth |
tz_pptp_vpn_state |
getL2tp |
tz_roam_enable |
wifi_getNetSelectInfo |
tz_roam_state |
getConnectionInRoaming |
tz_tcpdump |
tz_tcpdump |
tz_trap_status |
getTrapInfo |
tz_unlock_operator_num |
— |
tz_wcdma_bands |
device_getOnceData |
tz_web_desc_update |
device_getInfo |
tz_web_page_hide |
getHidePage |
tz_web_special_func |
getFuncItems, device_getFuncItems |
tz_web_user_hide |
getHidePage |
tz_wifi_ch_hi_max |
wifi_getWifiAdvance |
| cmd | used by |
|---|---|
ACL_mode |
wifi_getMacFilterInfo |
AuthMode |
wifi_getWpsInfo, wifiModel_getWpsInfo, wifi_getQuickSettingInfo |
CQI |
device_getOnceData |
Channel |
wifi_getWifiAdvance, device_getOnceData |
Channel_cur |
device_getOnceData |
CountryCode |
wifi_getWifiAdvance, device_getOnceData |
Current_index |
wifi_getApnSettings |
DDNS |
getDDNS |
DDNSAccount |
getDDNS |
DDNSPassword |
getDDNS |
DDNSProvider |
getDDNS |
DefaultKeyID |
wifi_getQuickSettingInfo |
EncrypType |
wifi_getWpsInfo, wifiModel_getWpsInfo, wifi_getQuickSettingInfo |
HT_MCS |
wifi_getWifiAdvance |
Key1Str1 |
wifi_getQuickSettingInfo |
Key2Str1 |
wifi_getQuickSettingInfo |
Key3Str1 |
wifi_getQuickSettingInfo |
Key4Str1 |
wifi_getQuickSettingInfo |
LocalDomain |
device_getInfo |
MAX_Access_num |
wifi_getWifiAdvance, device_getInfo |
MCS |
device_getOnceData |
NORMAL_DATA |
render, index_info |
NoForwarding |
wifi_getWifiAdvance |
TIME_TO_LIVE |
autoGeTtl |
WPAPSK1_encode |
device_getInfo |
WirelessMode |
wifi_getWifiAdvance, device_getOnceData |
WscModeOption |
wifi_getWpsInfo, wifiModel_getWpsInfo, wifi_getQuickSettingInfo |
airtime_balance |
getPermission |
automatically_switch |
sms_getRedirectMessage |
battery_exist |
device_getInfo |
battery_lack |
getPermission |
battery_percentage |
device_getInfo |
charge_stop |
device_getInfo |
cvmod_ims |
volte_getCvmodIms |
dhcpEnd |
device_getInfo |
dhcpStart |
device_getInfo |
dormancy_support_enable |
wifi_getSleepTime |
dormancy_when_low_flux |
wifi_getSleepTime |
ecno |
device_getOnceData |
flux_endTime |
wifi_getSleepTime |
flux_startTime |
wifi_getSleepTime |
get_token |
success |
gui_lcd_dormancy_time |
wifi_getSleepTime |
hide_all_wifi_settings |
getPermission |
hide_at_send |
getPermission |
hide_lte_all |
getPermission |
home_get |
index_get_home |
index |
wifi_getApnSettings |
internet_access |
getPermission |
ip_postroute_enable |
getPermission, getPostRoute |
ip_postroute_mac |
getPostRoute |
is_alert_netlock_lock |
device_getPinData |
is_show_2g_select |
wifi_getNetSelectInfo |
is_show_3g_select |
getPermission |
is_show_4g_tdd_select |
wifi_getNetSelectInfo |
is_show_bcp_mode |
getL2tp |
is_show_showBattery |
getPermission |
lan_ipaddr |
getPermission, device_getInfo |
login_box_welcome_title |
getPermission |
logs_level |
LogsNetworkTools |
m_AuthMode |
wifi_getWpsInfo, wifiModel_getWpsInfo, device_getInfo |
m_EncrypType |
wifi_getWpsInfo, wifiModel_getWpsInfo |
m_MAX_Access_num |
wifi_getWifiAdvance, device_getInfo |
m_WPAPSK1_encode |
device_getInfo |
m_netselect_contents |
wifi_getNetSelectInfo, wifi_getNetworkListContents |
m_netselect_result |
setNetwork |
m_netselect_save |
wifi_getNetSelectInfo |
m_netselect_status |
wifi_getNetworkList, scanForNetwork |
m_profile_name |
wifi_getApnSettings, wifi_getQuickSettingInfo |
mac_address |
device_getInfo |
main_antenna_used |
getPermission |
main_nat |
wifi_getApnSettings |
main_nat_1 |
wifi_getMultiAPN |
main_nat_2 |
wifi_getMultiAPN |
manual_channelOption_start |
wifi_getWifiAdvance |
mins_of_flux_count |
wifi_getSleepTime |
month_use |
wifi_getTrafficAlertInfo |
msis |
device_getInfo |
msisdn |
device_getInfo |
mtu |
wifi_getNetSelectInfo, getMTU |
need_support_pb |
getPermission |
need_support_ussd |
getPermission |
net_select |
wifi_getNetSelectInfo |
net_select_mode |
wifi_getNetSelectInfo |
nv_arfcn |
device_getOnceData |
online_time |
device_getOnceData |
pdp_addr |
wifi_getApnSettings |
pdp_select |
wifi_getApnSettings |
pdp_type |
wifi_getApnSettings, wifi_getQuickSettingInfo, getMTU |
power_exist |
device_getInfo |
profile_name |
wifi_getApnSettings |
redirect_number |
sms_getRedirectMessage |
rj45_mode |
getPermission, wifiModel_getpppoe, device_getInfo |
rj45_state |
getPermission, system_getSntpParams, device_getInfo |
roam_month_use |
wifi_getTrafficAlertInfoRoam |
rx_since_restore |
wifi_getStatistic |
set_show_network_mode |
getPermission |
set_token |
index_set_token |
show_pmf_switch |
getPermission |
spn_check_done |
getPermission |
sta_ip_status |
device_getInfo |
sub_antenna |
device_getOnceData |
sub_antenna_used |
getPermission |
syn_done |
system_getSntpParams, error |
syslog_level |
getSyslogLevel |
system_status |
device_getSystemStatusBasic |
total_since_restore |
wifi_getStatistic |
tx_since_restore |
wifi_getStatistic |
user_ip_addr |
wifi_getMacFilterInfo, getACLInfo |
ussd_write_flag |
error |
wan3_ip |
device_getInfo |
wan4_ip |
device_getInfo |
web_used_port |
getRemoteLoginParams |
workstate_wait_time |
wifi_getSleepTime |
ziccid |
device_getOnceData |