How to capture mobile phone data using Wireshark?

Afprøvning af netværkstrafik på Android

01/07/2024

Rating: 3.99 (1408 votes)
Indholdsfortegnelse

Afprøvning af Netværkstrafik i Android Apps: En Dybdegående Guide

I den moderne app-udviklingsverden, hvor tredjeparts SDK'er er en integreret del af mange applikationer, opstår ofte behovet for at forstå og overvåge den netværkstrafik, disse SDK'er genererer. Specielt når man arbejder med populære SDK'er som Google Analytics og Facebook SDK, kan det være afgørende at kunne spore alle GET- og POST-anmodninger for at diagnosticere problemer, optimere ydeevne eller blot for at opnå en dybere indsigt i appens funktionalitet. Mens eksterne værktøjer som Fiddler og Charles Proxy er effektive til at afprøve netværkstrafik generelt, giver de ikke altid mulighed for at registrere denne trafik direkte inden for selve appen, hvilket kan være en begrænsning, når man ønsker en integreret løsningsmodel.

How do I monitor TLS traffic on my Android phone?
You'll need to set up your computer's local IP has a proxy on your phone. It can sniff TLS traffic too, and do it without a warning if you install Charles' certificate on the phone. Another option which has not been suggested here is to run the app you want to monitor in the Android emulator from the Android SDK.

Denne artikel dykker ned i, hvordan du kan opnå dette ved at implementere løsninger direkte i din Android-app. Vi vil udforske forskellige metoder til at intercept'e og logge al HTTP-trafik, herunder både GET- og POST-anmodninger, som dine anvendte SDK'er foretager. Målet er at give dig de nødvendige værktøjer og viden til at kunne analysere din apps netværksadfærd uden at skulle forlade appens udviklingsmiljø.

Forståelse af Netværkstrafik på Android

Android-platformen tilbyder flere måder at interagere med og overvåge netværkstrafik på. Når en app sender data til en server eller modtager data fra den, sker dette typisk via HTTP- eller HTTPS-protokoller. For at kunne overvåge denne kommunikation skal vi finde en måde at "lytte" til de netværksanmodninger, der sendes fra appen. Dette kan gøres på flere niveauer, men for at opnå en integreret løsning, der virker inden for appen, skal vi fokusere på metoder, der kan implementeres i selve appens kode eller via udviklingsværktøjer, der integrerer tæt med appen.

Metoder til Netværksafprøvning i Android

Der findes primært to tilgange til at afprøve netværkstrafik fra en Android-app: eksterne proxy-værktøjer og interne, kodebaserede løsninger.

Is there a way to intercept HTTP traffic from Android devices?
Try HTTP Toolkit - it's an open-source tool I've been building to do exactly this. It can automatically intercept traffic from an Android device, with no manual setup required, and then allows you to inspect & rewrite all HTTP traffic from your computer, like so:

1. Eksterne Proxy-Værktøjer (Charles, Fiddler)

Som nævnt er værktøjer som Charles Proxy og Fiddler yderst populære til at analysere netværkstrafik. Disse fungerer ved at oprette en lokal proxy-server på din computer, som din Android-enhed konfigureres til at sende sin trafik igennem. Fordelen er, at de giver en detaljeret oversigt over alle anmodninger og svar, inklusive headers, payloads og SSL-dekryptering. Ulempen, som du påpeger, er, at de opererer uden for selve appen, hvilket ikke opfylder kravet om at registrere trafikken *i* appen.

2. Interne Løsninger via Kode

For at kunne registrere HTTP-kald direkte i din app, skal du implementere en form for netværksaflytning i din egen app-kode. Dette kan opnås ved at:

  • Implementere en brugerdefineret `OkHttpClient` (med Retrofit/Volley): Hvis din app bruger biblioteker som Retrofit eller Volley til netværksanmodninger, kan du ofte konfigurere disse til at bruge en tilpasset `OkHttpClient`. Ved at tilføje en interceptor til denne klient, kan du fange alle anmodninger og svar, før de sendes eller efter de modtages. Denne interceptor kan derefter bruges til at logge dataene.
  • Brug af Android Network Security Configuration: Fra Android 7.0 (API level 24) kan du bruge Network Security Configuration til at definere netværkssikkerhedspolitikker for din app. Selvom dette primært bruges til at styre SSL/TLS-certifikater, kan det også konfigureres til at tillade debugging af trafik, hvilket kan være nyttigt i kombination med andre værktøjer.
  • Brug af Debugging-Værktøjer (Android Studio Network Inspector): Android Studio indeholder en Network Inspector, der giver dig mulighed for at inspicere netværkstrafik fra din kørende app. Dette er en integreret løsning, der giver detaljeret indsigt i dine app's netværksanmodninger. Du kan se alle HTTP/HTTPS-anmodninger, deres payloads, headers og responstider. Dette er en af de mest tilgængelige metoder til at overvåge trafikken direkte under udvikling og test.

Detaljeret Implementering af Interceptors

Lad os se nærmere på, hvordan du kan implementere en netværksinterceptor i din app, hvis du bruger Retrofit med OkHttpClient, da dette er en meget almindelig konfiguration.

Du kan oprette en simpel interceptor, der logger detaljerne om hver anmodning og respons. Her er et eksempel på, hvordan en sådan interceptor kan se ud:

import okhttp3.Interceptor; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; import okio.Buffer; import java.io.IOException; public class LoggingInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); // Log request details System.out.println("Sending request: " + request.url()); System.out.println("Method: " + request.method()); if (request.headers().size() > 0) { System.out.println("Request Headers: " + request.headers()); } if (request.body() != null) { Buffer buffer = new Buffer(); request.body().writeTo(buffer); System.out.println("Request Body: " + buffer.readUtf8()); } // Proceed with the request Response response = chain.proceed(request); // Log response details System.out.println("Received response: " + response.code()); if (response.headers().size() > 0) { System.out.println("Response Headers: " + response.headers()); } ResponseBody responseBody = response.peekBody(Long.MAX_VALUE); System.out.println("Response Body: " + responseBody.string()); return response; } } 

For at bruge denne interceptor, skal du tilføje den til din OkHttpClient-instans, når du opretter din Retrofit-instans:

OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new LoggingInterceptor()) .build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl("YOUR_BASE_URL") .client(client) .build(); 

Denne interceptor vil nu logge alle detaljer om de netværksanmodninger, der sendes via denne OkHttpClient. Du kan udvide denne logik til at gemme disse oplysninger i appens interne lager, sende dem til en analyse-tjeneste eller vise dem i et dedikeret UI-element i din app.

How to check network traffic in Windows 10?
Press “ Inspect ” near your app You will see all the traffic in the Network tab of the inspecting tool. A desktop proxy application that can display all traffic from your device/emulator. It also contains a lot of network functions, such as throttling, new request builder, redirecting, socket monitoring, etc.

Håndtering af HTTPS-trafik

Når det kommer til HTTPS-trafik, er der en ekstra udfordring: kryptering. For at kunne inspicere indholdet af HTTPS-anmodninger, skal du som regel have en måde at dekryptere dem på. Eksterne værktøjer som Charles og Fiddler gør dette ved at fungere som en "Man-in-the-Middle" (MITM), hvor de genererer et certifikat, som din enhed stoler på. Dette er dog ikke direkte muligt at implementere i din app uden at påvirke appens sikkerhed eller kræve specifikke brugerrettigheder.

Hvis du ønsker at logge HTTPS-trafik fra din egen app, er den mest ligetil metode at bruge Android Studio's Network Inspector, som er designet til at håndtere SSL-certifikater korrekt under udvikling. Alternativt kan du, som foreslået i nogle svar, bruge en "dirty trick" med ARP spoofing og Wireshark på et lokalt netværk, men dette er en avanceret metode, der kræver netværkskendskab og ikke er egnet til direkte integration i appen.

Overvågning af Tredjeparts SDK'er

Når du bruger SDK'er som Google Analytics eller Facebook SDK, foretager disse SDK'er ofte deres egne netværkskald, som du måske ikke har direkte kontrol over. Ved at implementere en global netværksinterceptor som beskrevet ovenfor, kan du dog fange selv disse kald, forudsat at de bruger standard HTTP-klienter, som din interceptor kan påvirke.

How do I debug a website on a mobile device?
Go to the website you want to debug on your mobile device. For Android: In Chrome on your computer, open a new tab and type chrome://inspect in the address bar. You should see your connected Android device listed under “Remote Target.” Click the “inspect” link next to your device to open Chrome DevTools for that device.

Det er vigtigt at bemærke, at nogle SDK'er kan bruge deres egne, lukkede netværksimplementeringer eller skjule deres anmodninger på måder, der gør dem sværere at aflytte med simple interceptors. I sådanne tilfælde kan det være nødvendigt at dykke dybere ned i SDK'ernes dokumentation eller endda bruge mere avancerede debugging-teknikker.

Tabel: Sammenligning af Metoder

MetodeFordeleUlemperIntegreret i App?
Charles Proxy / FiddlerDetaljeret analyse, SSL-dekryptering, bredt anvendeligt.Kræver ekstern opsætning, ikke direkte i appen.Nej
Kode-interceptor (OkHttpClient)Direkte logning i appen, fuld kontrol over data.Kræver kodeændringer, kan være komplekst for HTTPS.Ja
Android Studio Network InspectorNem at bruge, integreret i IDE, god til debugging.Kræver kørende app i debug-mode, ikke til produktion.Ja (via IDE)
Network Security ConfigurationSikkerhedskontrol, debugging af trafik.Primært til certifikatstyring, kræver Android 7+.Delvist (konfiguration)

Ofte Stillede Spørgsmål (FAQ)

  • Kan jeg aflytte alle netværkskald fra min Android-app uden at ændre SDK-koden? Ja, ved at implementere en global netværksinterceptor, der fanger anmodninger fra de underliggende netværksbiblioteker, som SDK'erne bruger.
  • Hvordan logger jeg HTTPS-trafik direkte i min app? Det er udfordrende på grund af kryptering. Android Studio's Network Inspector er den mest praktiske metode under udvikling. For produktion er det generelt ikke anbefalet eller muligt uden specielle tilladelser.
  • Hvad er den bedste metode til at registrere netværkskald fra Google Analytics SDK? Brug Android Studio's Network Inspector eller en OkHttpClient-interceptor, hvis du bruger Retrofit/Volley.
  • Kan jeg se data fra enhedens Wi-Fi-netværk i min app? Nej, din app kan kun se sin egen netværkstrafik eller den trafik, der bevidst dirigeres igennem den.

Konklusion

At afprøve og overvåge netværkstrafik fra din Android-app, især når det involverer tredjeparts SDK'er, er en værdifuld færdighed for enhver udvikler. Mens eksterne værktøjer tilbyder en bred vifte af funktioner, er der effektive måder at opnå en integreret løsning på ved at implementere netværksinterceptors direkte i din app-kode eller ved at udnytte Android Studio's indbyggede debugging-værktøjer. Ved at følge disse metoder kan du få et dybdegående kendskab til din apps netværksadfærd og dermed forbedre dens ydeevne og stabilitet.

Hvis du vil læse andre artikler, der ligner Afprøvning af netværkstrafik på Android, kan du besøge kategorien Teknologi.

Go up