Die foonprogram en die verre bediener begin met verskillende feite, en nie een kan die ander se feite leen nie. Die program kan die bedryfstelsel vra oor die netwerk wat dit gebruik, terwyl die bediener net weet wat op die verbinding aankom. Om jou eie eindpunt te bedryf herskryf die tweede en laat die eerste onaangeraak. Watter een van hulle jou vraag beantwoord, hang van die vraag self af.

Twee waarnemingspunte, twee soorte bewyse

Plaaslike bewyse beskryf die toestel. Dit dek die koppelvlak wat verkeer dra, die vervoer wat die platform rapporteer, en wat die program wat vra mag navraag doen. Afgeleë bewyse beskryf die verbinding: bronadres, protokol, tydsberekening en enigiets wat die program kies om te stuur. Geen waarnemingspunt is ’n superset van die ander nie.

Om die twee te vermeng lewer bewerings wat presies klink en nie nagegaan kan word nie. ’n Merk bewys iets oor ’n netwerkobjek op die toestel, nie oor hoe ’n afgeleë diens die versoek klassifiseer nie.

Voordat jy oor opsporing argumenteer, skryf neer watter punt die vraag raak. Gaan dit daaroor of ’n bepaalde program kan sien dat ’n tonnel aktief is, of daaroor of ’n diens kan aflei waar die versoek vandaan kom? Dit is afsonderlike ondersoeke, en ’n antwoord op die een sê niks oor die ander nie.

Wat ’n plaaslike platformkoppelvlak kan rapporteer

Android bied ’n spesifieke merk. Die NetworkCapabilities-objek kan TRANSPORT_VPN rapporteer, en hasTransport toets of daardie vervoer op die objek teenwoordig is. ’n Program kry die objek by die konnektiwiteitsdiens en lees dit, onderhewig aan toestemming vir netwerktoestand.

Die resultaat is plaaslike platforminligting, nie ’n opsoek teen ’n verskaffer se adresreekse nie. Dit beskryf die netwerk wat die program wat vra, gebruik.

Twee beperkings maak saak. ’n Split-tonnelreël wat ’n program uitsluit, kan op dieselfde foon ’n ander antwoord lewer as wat ’n kollega sien, want die program kan elders gebind wees. Die merk bestaan ook omdat die bedryfstelsel VPN-koppelvlakke modelleer, nie omdat enige bepaalde program dit versamel nie. Of ’n program die veld lees, dit aanstuur of ignoreer, is ’n eienskap van daardie program. Sy manifes en dokumentasie is die enigste betroubare bronne vir daardie vraag.

adb shell dumpsys connectivity | grep -i -m5 vpn

Wat ’n afgeleë diens kan sien

’n Bediener sien die bronadres van die verbinding, die vervoer en die tydsberekening, en dit kan die adres verryk met register- of roeteringsdata. Dit kan ook enigiets ontvang wat die program stuur, insluitend ligging wanneer die program dit aanvra en die gebruiker instem. Daardie kanale is afsonderlik, en net een daarvan lyk soos ’n adresopsoek.

’n Adres wat by ’n gasheer-verskaffer geregistreer is, dui op ’n tonnel, terwyl een wat by ’n residensiële netwerk geregistreer is, op ’n huisverbinding dui. Albei is statistiese aanduidings, nie feite oor die toestel nie.

’n Residensiële adres plaas nie die persoon by daardie adres nie, en ’n gasheer-adres noem nie die operateur of die land nie. ’n Diens wat die afleiding as sekerheid behandel, sal soms verkeerd wees sonder om dit te kan bespeur. As die vereiste betroubaarheid eerder as ’n heuristiek is, kan adresdata dit nie lewer nie, en ’n ontwerp wat dit sê, is eerliker as een wat die raaiskoot verberg.

BewysWat dit beantwoordWat dit nie kan wys nie
Plaaslike vervoermerkOf hierdie netwerkobjek ’n VPN isWie die uitgang bedryf of waar die toestel is
Afgeleë bronadresWatter adres die diens bereik hetOf die toestel ook ’n tonnel dra
ProgramladingWat die program gekies het om te stuurEnigiets wat die program nie gestuur het nie

Waarom ’n selfgehoste uitgang net een kant verander

Om jou eie eindpunt te bedryf verander die bronadres wat ’n afgeleë diens sien, wat dit buite die reekse kan skuif wat daardie diens met kommersiële verskaffers assosieer. Dit verander niks in die plaaslike netwerkmodel nie, want die tonnel bly ’n tonnel en die bedryfstelsel rapporteer dit steeds.

Een kant van die bewyse beweeg; die ander bly vas. Die gaping tussen hulle is waar verwagtinge breek.

’n Blaaier is ’n derde geval met sy eie koppelvlakke en beperkings. Webinhoud kan nie ’n inheemse vermoëns-objek lees nie, en om ’n mobiele bedryfstelsel-kenmerk as beskikbaar vir ’n webblad te behandel, is ’n kategorie-fout. As die vraag ’n webwerf raak, bestudeer wat ’n webwerf werklik kan verkry eerder as om ’n platform-API te translitereer.

Besluit met die vraag wat jy vra

As die vraag is of ’n spesifieke program tonneltoestand kan waarneem, is die platformkoppelvlak die regte plek om te kyk, en die antwoord lê in daardie program se kode en toestemmings. As die vraag is wat ’n diens kan aflei, is verbindingsmetadata die bewys. ’n Regs- of kontraktuele vraag word deur nie een van die twee besleg nie.

Noem die vraag in een sin voordat jy enigiets versamel. Daardie sin bepaal watter waarnemingspunt saak maak en keer dat die ondersoek na ’n ander argument afdwaal.

Merk elke waarneming volgens sy bron wanneer jy dit rapporteer, want ’n ongemerkte bewering kan nie nagegaan word nie. ’n Plaaslike merk en ’n adresafleiding is albei nuttig en nie een is beslissend nie, en daarom is dit ’n fout om hulle in een oordeel saam te voeg.

Wanneer ’n diens ’n gemagtigde verbinding verwerp, gebruik sy ondersteunde hersieningsroete eerder as om ’n plaaslike instelling te verander om ’n sein weg te steek. Om een waarneming te verwyder bewys nooit dat die ander verdwyn het nie.

Verwante artikels