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 | Its script file |
|---|---|---|---|
| 1st | MAXIS | Maxis / Hotlink SIM — mobile data on, WiFi off | probe-maxis.sh |
| 2nd | CELCOMDIGI | Celcom or Digi SIM — mobile data on, WiFi off | probe-celcomdigi.sh |
| 3rd | U MOBILE | U Mobile SIM — mobile data on, WiFi off | probe-umobile.sh |
| 4th | UNIFI | No SIM. WiFi on a TM/Unifi fibre line | probe-unifi.sh |
| 5th | TIME | No SIM. WiFi on a TIME fibre line | probe-time.sh |
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.
Now you'll type into Termux. Commands are case-sensitive — use the copy buttons.
Get the file probe-maxis.sh onto the phone — send it
over Telegram or email to yourself, then open it once so it downloads.
Check the file name matches the label on the back of the phone. Sending the same file to two phones is the easiest mistake to make here, and it does not announce itself — the second phone quietly overwrites the first one's results.
Handle this file carefully
It contains the password that lets this phone report in. Don't post it in a group chat, and don't put it anywhere public.
Open Termux. Install what it needs:
$ pkg update -y && pkg install -y curlIf it asks anything, press Enter to accept. This takes a minute or two.
Give Termux access to the phone's storage. A permission popup will appear — tap Allow.
$ termux-setup-storageFind where the file landed:
$ find /sdcard -name "probe-*.sh" 2>/dev/nullIt will print a path such as /sdcard/Download/probe-maxis.sh.
If it prints nothing, the file never arrived — send it to the phone again.
Install it. If the path above was different, change it in the second line:
$ mkdir -p ~/.termux/boot $ cp /sdcard/Download/probe-maxis.sh ~/.termux/boot/probe.sh $ chmod +x ~/.termux/boot/probe.sh
Start it:
$ ~/.termux/boot/probe.sh &Nothing visible happens. That's correct — it's now running quietly in the background.
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. |
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 &