prober build 4: newProcess fallback when the Shizuku UserService won't bind

Build 3 settled it: the Lenovo TB330FU/A15 never spawns the UserService
(two 25s bind attempts, binder alive, permission granted). Build 4 falls
back to the legacy Shizuku.newProcess remote-process API via reflection
and records exec_path in the evidence — whether that path works per
device is itself the capability question core-shizuku needs answered.

Also archives both build-3 reports: phone 7/7 incl. provoked NEIGH
transitions in ip_monitor; traceroute.udp4 handled a silent hop ("*")
correctly on both devices.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mrambossek
2026-07-30 15:10:58 +02:00
co-authored by Claude Opus 5
parent 0ed36d9103
commit 60989b67ef
6 changed files with 433 additions and 7 deletions
@@ -0,0 +1,172 @@
{
"schema": "echolot/prober-report",
"schemaVersion": "0.1.0",
"proberBuild": 3,
"device": {
"manufacturer": "LENOVO",
"model": "TB330FU",
"androidSdk": 35,
"androidRelease": "15"
},
"results": [
{
"id": "link.snapshot",
"title": "LinkProperties snapshot (all active networks)",
"tier": "APP",
"verdict": "SUPPORTED",
"summary": "1 active network(s) read",
"evidence": {
"network_count": "1",
"net0.wifi.iface": "wlan0",
"net0.wifi.mtu": "0",
"net0.wifi.addrs": "fe80::cd8:14ff:fe58:6c8b/64, 10.13.102.120/24",
"net0.wifi.dns": "10.13.102.1",
"net0.wifi.routes": "fe80::/64 -> :: wlan0 mtu 0 | ::/0 -> fe80::7a9a:18ff:fe54:b8f9 wlan0 mtu 0 | 10.13.102.0/24 -> 0.0.0.0 wlan0 mtu 0 | 0.0.0.0/0 -> 10.13.102.1 wlan0 mtu 0",
"net0.wifi.domains": "hudelist.local",
"net0.wifi.nat64": "none",
"net0.wifi.private_dns": "off/opportunistic"
},
"durationMs": 23
},
{
"id": "icmp.ping4",
"title": "ICMPv4 echo (unprivileged datagram socket)",
"tier": "APP",
"verdict": "SUPPORTED",
"summary": "Echo reply on the default network",
"evidence": {
"default": "reply type=0 rtt_ms=20.0 bytes=22 target=1.1.1.1",
"net.wifi": "reply type=0 rtt_ms=27.6 bytes=22 target=1.1.1.1"
},
"durationMs": 63
},
{
"id": "icmp.ping6",
"title": "ICMPv6 echo (unprivileged datagram socket)",
"tier": "APP",
"verdict": "ERROR",
"summary": "No echo reply on any of 2 attempt(s)",
"evidence": {
"default": "error: recvfrom failed: EAGAIN (Try again)",
"net.wifi": "error: recvfrom failed: EAGAIN (Try again)"
},
"durationMs": 6312
},
{
"id": "sockopt.matrix",
"title": "Socket options: TTL, RECVERR, MTU_DISCOVER (DF)",
"tier": "APP",
"verdict": "SUPPORTED",
"summary": "4/4 core sockopts accepted; IP_MTU read=false",
"evidence": {
"IP_TTL": "accepted (ttl=5)",
"IP_TOS/DSCP": "accepted (EF/46)",
"IP_RECVERR": "accepted",
"IP_MTU_DISCOVER=PROBE": "accepted (DF set)",
"IP_MTU(read)": "unreadable: android.system.Os.getsockoptInt [class java.io.FileDescriptor, int, int]"
},
"durationMs": 5
},
{
"id": "trace.errqueue_reachable",
"title": "Traceroute via IP_RECVERR + MSG_ERRQUEUE",
"tier": "APP",
"verdict": "SUPPORTED",
"summary": "Errqueue path fully reachable from Os API",
"evidence": {
"IP_RECVERR": "accepted",
"IP_TTL=1": "accepted",
"StructMsghdr": "true",
"Os.recvmsg": "true"
},
"durationMs": 12
},
{
"id": "traceroute.udp4",
"title": "UDP traceroute via MSG_ERRQUEUE (no root, no JNI)",
"tier": "APP",
"verdict": "SUPPORTED",
"summary": "5 hop(s) read via errqueue — no native shim needed",
"evidence": {
"recvmsg_api": "StructMsghdr + Os.recvmsg via reflection",
"target": "1.1.1.1",
"hop.1": "10.13.102.1 icmp type=11 origin=2 ~45 ms",
"hop.2": "178.191.103.254 icmp type=11 origin=2 ~43 ms",
"hop.3": "195.3.76.32 icmp type=11 origin=2 ~44 ms",
"hop.4": "* (no errqueue event in 900 ms)",
"hop.5": "172.68.48.30 icmp type=11 origin=2 ~43 ms",
"hop.6": "172.68.48.61 icmp type=11 origin=2 ~44 ms"
},
"durationMs": 1144
},
{
"id": "multinetwork.request_and_bind",
"title": "Concurrent per-network binding (Wi-Fi / cellular / ethernet)",
"tier": "APP",
"verdict": "PARTIAL",
"summary": "1 transport(s) acquired and bound (only currently-present links can bind)",
"evidence": {
"wifi": "network acquired; bindSocket=ok; downKbps=60000",
"cellular": "no network within 4s",
"ethernet": "no network within 4s"
},
"durationMs": 8043
},
{
"id": "local.mdns_discover",
"title": "Multicast reception (MulticastLock + mDNS/NSD)",
"tier": "APP",
"verdict": "SUPPORTED",
"summary": "mDNS discovery ran; 4 service(s)/type(s) seen across 3 queries",
"evidence": {
"multicast_lock": "acquired",
"meta.started": "true",
"meta.found": "0",
"meta.type": "_services._dns-sd._udp.",
"http.started": "true",
"http.found": "4",
"http.names": "Magic 2 LAN 1-1, Magic 2 LAN triple #4, Magic 2 LAN triple #5, EPSON WF-7840 Series",
"http.type": "_http._tcp.",
"googlecast.started": "true",
"googlecast.found": "0",
"googlecast.type": "_googlecast._tcp."
},
"durationMs": 10035
},
{
"id": "peer.ble_advertise",
"title": "BLE peripheral advertising (peer-mode control channel)",
"tier": "APP",
"verdict": "SUPPORTED",
"summary": "Advertising start: success",
"evidence": {
"FEATURE_BLUETOOTH_LE": "true",
"adapter_enabled": "true",
"multi_advertisement_supported": "true",
"startAdvertising": "success"
},
"durationMs": 60
},
{
"id": "shizuku.command_battery",
"title": "Shizuku shell tier (ip neigh / route / dumpsys network_stack)",
"tier": "SHIZUKU",
"verdict": "UNSUPPORTED",
"summary": "Shizuku runs as shell(2000); 0/7 commands returned data",
"evidence": {
"binder_alive": "true",
"version": "13",
"runs_as": "shell(2000)",
"permission": "true",
"id": "SHIZUKU_BIND_TIMEOUT",
"ip_neigh": "SHIZUKU_BIND_TIMEOUT",
"ip6_route": "SHIZUKU_BIND_TIMEOUT",
"ip_addr": "SHIZUKU_BIND_TIMEOUT",
"ip_monitor": "SHIZUKU_BIND_TIMEOUT",
"dhcp_log": "SHIZUKU_BIND_TIMEOUT",
"wifi_dump": "SHIZUKU_BIND_TIMEOUT"
},
"durationMs": 50114
}
]
}