FlyTrap Network inspection

Tired of empty
network pages?

Every QA tool ships a network tab. To fill it, they install a root certificate and push your traffic through a proxy. Your app notices, the flows you wanted to test stop working, and the tab is empty anyway. We went the other way.

Proxy and root cert Run degraded
0 calls logged
3 of 24 screens reached
0 flows completed
  • Pinning rejected the re-signed certificate chain
  • Login never returned, the feed stayed blank
  • Session abandoned at the third screen
FlyTrap, same build Run clean
443 calls logged
24 of 24 screens reached
51.5 MB transferred
  • Nothing installed, nothing added to the build
  • The app behaved the way it ships to users
  • Crawl finished, so the report has data in it
Every app, every run

A report from a build we did not touch

Amazon Shopping, one exploratory run on a real device. No proxy, no certificate, no code change. The run finished, so there is something here to read.

dashboard.flytrap.dev/network/amazon-shopping
Captured

Network Inspection

443 calls · 24 hosts
  • Total Calls 443 single exploratory run
  • Unique Hosts 24 9 outside amazon.com
  • Transferred 51.51 MB 42.5 MB on media alone
  • Errors 0 0.0% error rate

Amazon Shopping: high media load with significant latency

AI

The run generated 443 requests across 24 unique hosts, totalling 51.5 MB of transferred data. Traffic is dominated by m.media-amazon.com at 42.5 MB and www.amazon.com at 6.06 MB. All captured sessions used the CONNECT method, with zero recorded errors.

Attention

Extreme latency was detected on core and telemetry hosts, with msh.amazon.com averaging 46.5 s and unagi.amazon.com at 14.2 s. Both m.media-amazon.com and data.amazon.com are bandwidth heavy, exceeding 1 MB per host. Several ad system and telemetry endpoints, including c.amazon-adsystem.com and api.mshop.bdtelemetry.amazon, are slower than 20 s.

Top Hosts by Bytes

Largest network consumers captured during the run.

  • m.media-amazon.com CONNECT 170 calls 43 MB avg 3.58 s
  • www.amazon.com CONNECT 48 calls 6.1 MB avg 7.09 s
  • data.amazon.com CONNECT 23 calls 1.5 MB avg 6.36 s
  • unagi.amazon.com CONNECT 58 calls 364 KB avg 14.28 s
  • appx.transient.amazon.com CONNECT 3 calls 267 KB avg 1.74 s
  • dtjsystab5p0r.cloudfront.net CONNECT 8 calls 112 KB avg 5.03 s
  • fls-na.amazon.com CONNECT 32 calls 112 KB avg 6.57 s
  • unagi-na.amazon.com CONNECT 17 calls 86 KB avg 1.35 s
  • images-na.ssl-images-amazon.com CONNECT 9 calls 83 KB avg 9.91 s
Amazon Shopping · Android · single run Switch to calls and the chatty telemetry hosts jump the list
The trade everyone else makes

Reading bodies means breaking the app

There is one way to look inside an encrypted call without shipping extra code into the app: sit in the middle and re-sign the traffic. Every serious mobile app is built to catch exactly that.

  1. 01

    Trust a fake CA

    A root certificate goes into the device store so a proxy can terminate TLS and re-sign every response on the way back.

  2. 02

    The app checks

    Pinned certificates, TLS fingerprints, and attestation compare what arrived against what shipped. It does not match.

  3. 03

    Calls start failing

    Login, search, cart, payments. Anything pinned errors out or retries forever, and the rest of the app crawls behind it.

  4. 04

    Nothing to report

    The session dies a few screens in. You open the network tab you came for and there is almost nothing in it.

What we do instead

Watch the connection, not the contents

A TLS connection tells you plenty from the outside. Which host it went to, how often, how many bytes moved, how long it took, and whether it failed. We collect that at the device level, with no certificate in the trust store, so the app runs untouched and the session finishes.

What lands in the report

  • Every host the app opened a connection to
  • Connection count and method per host
  • Bytes transferred, and which host is eating them
  • Average and worst duration, per host
  • Failures, resets, and timeouts
  • Hosts that were not there in the last build

What we leave alone

  • Request and response bodies
  • Headers, cookies, and tokens
  • The device trust store

That is a real limit and we are not going to dress it up. If you need a decrypted payload, do it once in a lab on a build with pinning switched off. It is a terrible default for every run on every build, which is how most teams end up with a network page they stopped opening.

Supply chain and privacy

The calls you did not write are the ones that get you

Ads, attribution, telemetry, crash reporting, session replay. Every SDK in the build gets the same network access your own code has, and it points wherever the vendor decides. A version bump moves a host. A vendor that changes hands moves the whole endpoint. Nobody sends you an email.

  • An attacker does not need your repo

    One dependency is enough. A hijacked release, a domain someone re-registered, an analytics vendor that quietly changed hands. Review passes, the binary looks the same, and the app starts calling a host that was not there last week. That host is the whole signal, and it takes one run to see it.

  • It talks when nobody is looking

    Screen off, app parked in the background, session long finished. Telemetry keeps beating, ad SDKs keep bidding, attribution keeps posting. A manual tester never sees that traffic and a script stops at the last assertion. We keep capturing, so the quiet calls land in the report next to everything else.

  • Privacy is a claim until you watch the wire

    You filled in a data safety form and a policy that names your processors. The host list is what the device actually did. If a build starts shipping events to an exchange or a broker nobody signed off on, read it in a report on your own build, not in a letter from a regulator.

Hosts from the run above

Same session, ordered by how much explaining they need.

  • 24 hosts
  • 9 outside amazon.com
  • 1 first seen in this build
  • 2 calling while idle
  • c.amazon-adsystem.com Idle app Ads Ad exchange Bidding calls over 20 s, still firing with the app parked
  • api.mshop.bdtelemetry.amazon Idle app Telemetry Device telemetry Reporting the whole session, slow from the first call
  • dtjsystab5p0r.cloudfront.net New host CDN Generated subdomain No run before this one went anywhere near it
  • unagi.amazon.com Telemetry Behavioural events 58 connections of taps and views, 14.28 s average
  • fls-na.amazon.com Beacons Click logging 32 connections, nothing a user would ever notice
  • m.media-amazon.com CDN Media delivery 170 connections and 43 MB, most of the run's weight

Put your own app here and the list reads differently: an attribution SDK, an ad exchange, a crash reporter, a replay tool, and whatever the next release drags in. We diff it run over run and say what moved.

Open a network page that has something in it

Point FlyTrap at a build and the report shows up on the first run. Nothing to install on the device, nothing to strip out before you ship.