Get these three wrong and every result is fiction
Five phones go into service. Each one gets its own script file — they are not interchangeable, and a phone running the wrong file reports another telco's results under the wrong name.
| Order | Label the phone | Network it must be on | Reports as |
|---|---|---|---|
| 1st | MAXIS | Maxis / Hotlink SIM — mobile data on, WiFi off | maxis |
| 2nd | CELCOMDIGI | Celcom or Digi SIM — mobile data on, WiFi off | celcomdigi |
| 3rd | U MOBILE | U Mobile SIM — mobile data on, WiFi off | umobile |
| 4th | UNIFI | No SIM. WiFi on a TM/Unifi fibre line | unifi |
| 5th | TIME | No SIM. WiFi on a TIME fibre line | time |
On the table before you begin
Keep the SIMs alive
Each phone uses well under 100 MB a month — you're paying to keep the line open, not for data. Put a monthly reload reminder on someone's calendar. An expired SIM looks a lot like a blocked domain.
The Digi question — ten minutes, on the CelcomDigi phone only
Celcom and Digi merged but may still run two networks. No sixth phone needed: once the CelcomDigi phone is finished, put the Digi SIM in it, run the block-address test in Part 5 again, then put the Celcom SIM back. Same answer means one network — keep either SIM and drop the other. A different answer means we need a sixth phone, so send both results over.
Do this on the phone itself, not on a computer. Two apps, both from GitHub.
Both apps must come from GitHub
Not the Play Store — that version is abandoned and will not work. And don't mix sources: if you get Termux from GitHub and Termux:Boot from anywhere else, Termux:Boot silently does nothing, and the phone stops reporting the first time it restarts.
Open Chrome on the phone and go to:
github.com/termux/termux-app/releases
The newest release is at the top of the page. Under it, tap Assets to expand the file list if it's collapsed.
There are about ten files. You want the one that ends in _arm64-v8a.apk
and has apt-android-7 in the middle. It looks like this:
termux-app_v0.118.3+apt-android-7-github-debug_arm64-v8a.apk
The version number will be higher by the time you read this — that's fine, just match
the two highlighted parts. Ignore every apt-android-5 file; those are for
phones from 2015.
If Android says "App not installed"
The phone is an older 32-bit model. Go back and download the
_universal.apk file from the same list instead — it works on every phone.
When the download finishes, tap it to open. Android will warn about installing from an unknown source — tap Settings → turn on Allow from this source → go back → Install.
Now the second app. Go to:
github.com/termux/termux-boot/releases
This is what restarts the checker after the phone reboots. Without it, one power cut or Android update takes this telco offline permanently.
Same routine: newest release at the top → expand Assets → download the
file ending in _arm64-v8a.apk → install it.
Open Termux:Boot once. The screen will look completely empty — that's normal and correct. If you never open it, it never arms itself, and the phone stops reporting the first time it restarts.
The part people get wrong. Menu names vary a little by phone brand.
Turn Private DNS off.
On Samsung it's Settings › Connections › More connection settings › Private DNS. If you can't find it, search the Settings app for "Private DNS".
Turn WiFi off. Turn mobile data on. Then leave it that way forever.
Swipe down from the top of the screen and check the WiFi icon is grey, not lit.
Connect to the WiFi on the line you're measuring. Turn mobile data off.
This phone measures a fixed fibre line, so WiFi is exactly what we want here — it needs no SIM card at all. It does not have to sit in your office: any premises on that ISP works, as long as it has power and WiFi. Nobody there needs to do anything.
Stop Android from killing Termux.
On Xiaomi / Redmi / POCO there are two settings, and you need both:
Remove the screen lock.
After a reboot, Android won't run the checker until the phone has been unlocked once. With no lock screen it restarts on its own at 3am without anyone touching it. These phones hold nothing personal, so there's nothing to protect.
Plug it in and leave it plugged in. Put it somewhere open — not in a drawer or a sealed box.
Three commands. The phone downloads its own script — nothing to email across, nothing to copy off an SD card, nothing to install.
You need the install code
Ten characters, given to you separately. It is a password — it hands over the phone's reporting key, so don't put it in a group chat. It gets switched off once all five phones are built.
Open Termux and bring it up to date:
$ apt update && apt full-upgrade -yThree to five minutes, and it prints a lot. Press Enter at any question about a configuration file.
Don't install anything, and don't use pkg
Termux already has everything this needs. pkg install curl in particular
will break a phone that hasn't been upgraded first — you get a new curl on an old
SSL library and it dies with
CANNOT LINK EXECUTABLE "curl". apt is used here instead of
pkg because pkg needs curl to run and so cannot repair curl.
Type this, with the install code in place of the x's, and press Enter. It's the only thing you type by hand in the whole setup:
$ CODE=xxxxxxxxxxNothing happens when you press Enter. That's correct.
Copy this whole block and paste it into Termux — long-press the screen, choose Paste. It fetches this phone's script and starts it:
$ mkdir -p ~/.termux/boot $ curl -fsS "https://domain-monitor.miya-gwen996.workers.dev/i/$CODE/umobile" -o ~/.termux/boot/probe.sh $ chmod +x ~/.termux/boot/probe.sh $ ~/.termux/boot/probe.sh &
The telco name is already correct for the phone you picked at the top of this page. That's what tells the monitor which network these results came from.
Open this page on the phone itself
Every command box here has a COPY button. Open this guide in Chrome on the handset, tap COPY, then long-press in Termux and Paste. Far quicker and safer than retyping long lines on a phone keyboard.
Check the script actually came down:
$ head -1 ~/.termux/boot/probe.shIt should print #!/data/data/com.termux/files/usr/bin/bash.
If you got an error instead
401 or bad install code — the code in step 02 was mistyped.
Redo steps 02 and 03.
400 or unknown phone — wrong telco name. Check the picker at the
top of this page matches the label on the back of the handset.
CANNOT LINK EXECUTABLE "curl" — step 01 was skipped or didn't finish. Run it
again, all of it, then redo step 03.
Could not resolve host — the phone has no working internet. Check mobile data
is on and the SIM has credit.
Don't skip this. A phone that looks fine but reports nothing is the whole problem we're solving.
Wait two minutes, then check its log:
$ cat ~/probe.logYou want to see a line saying sweep done with a number of domains checked.
If you see domain refresh failed, the phone has no working internet — check
mobile data is on and the SIM has credit.
Restart the phone. This is the real test — it proves the checker comes back by itself.
Wait five minutes after it boots, open Termux again and run cat ~/probe.log.
A fresh probe starting line means it restarted on its own. That's the phone finished.
Send word that this phone is live, along with the last few lines of its log:
$ tail -n 5 ~/probe.logScreenshot that and send it with the telco name. It gets confirmed at the other end — the phone arms itself automatically on its first report, so nothing else is needed to switch this telco on.
Then do Part 5 on this same phone before you move to the next one.
Finished checklist
Two minutes, on every phone, right after it starts reporting. This is the one step that can only be done from inside the telco's network — nobody can do it for you afterwards.
Why this matters
When a Malaysian telco blocks a domain it doesn't show a block page. It quietly
answers the lookup with a different address of its own, and that address serves
nothing at all — the user just sees a tab that hangs forever. We already know Maxis uses
175.139.142.25. We do not yet know the equivalent for CelcomDigi,
U Mobile, Unifi or TIME.
Without it the monitor still catches the block — it just reports it in vaguer wording. With it, the alert says plainly which telco is blocking and what it redirected to.
First make sure Part 4 is done and the log has said sweep done at least
once. That's what downloads the domain list this test reads.
In Termux, paste this in one go and press Enter. It looks up every domain through this phone's own network and counts how often each address comes back.
$ cd ~ && while IFS= read -r d; do ip=$(ping -c 1 -W 1 "$d" 2>/dev/null | head -1 | sed -n 's/.*(\([0-9.]\{7,15\}\)).*/\1/p'); [ -n "$ip" ] && echo "$ip"; done < domains.txt | sort | uniq -c | sort -rn | head -8It takes up to two minutes and the screen sits still while it runs. That's normal — leave it alone until it prints.
You'll get eight lines, each a count and an address:
31 175.139.142.25 2 104.21.9.14 1 172.67.181.203 1 47.84.198.177
Normal domains each have their own address, so most lines show a 1 or a 2. A line with a big number — a dozen, thirty, fifty domains all pointing at one single address — is the telco's block address. That is the whole test.
Screenshot the output and send it, with the telco name. Don't decide which line it is and don't type the address out by hand — send the whole thing and let it be read at the other end. A digit typed wrong here makes a real block invisible.
If every line shows a small number, nothing is blocked on this telco at this moment. That is a perfectly good result — send it anyway and carry on to the next phone. The test gets re-run the next time a block appears.
Nothing to install for this
Once the address is confirmed it gets added centrally, and every phone picks it up by itself within fifteen minutes. No phone is ever touched again for this — you don't come back and edit anything on the handsets.
Thirty seconds a day. The system alerts you when something's wrong, so a quiet channel is good news.
All five phones on, screens can be off, all still plugged in and charging.
No Probe offline message in the Telegram channel. If there is one, it names the phone — go fix that one.
Once a month: top up each prepaid SIM so the line doesn't expire. A dead SIM looks a lot like a blocked domain if nobody's watching.
Almost every problem is one of these four.
| What you see | What it means | Fix |
|---|---|---|
| "Probe offline" alert | Phone off, out of battery, or Android killed Termux | Unlock the phone, open Termux, then reboot it. Re-check the battery setting in Part 2. |
| Phone went quiet after a restart | Termux:Boot was never opened, or the screen lock is back on | Open Termux:Boot once, remove the screen lock, reboot again. |
| One telco suddenly shows everything working | Somebody connected that phone to WiFi | Turn WiFi off. It was testing the office line, not the telco. |
CANNOT LINK EXECUTABLE "curl" |
Termux was half-upgraded — new curl, old SSL library. Usually means something ran pkg install |
Run apt update && apt full-upgrade -y — apt, never pkg, because pkg needs curl itself. Confirm with curl --version, then redo Part 3 from step 02. |
domain refresh failed in the log |
No internet on the phone | Check mobile data is on and the SIM still has credit. |
Start over cleanly
If a phone is misbehaving and you want a clean slate, this stops the checker and restarts it from scratch:
$ pkill -f probe.sh $ rm -f ~/probe.log ~/domains.txt $ ~/.termux/boot/probe.sh &