Det kjem supportbillettar som seier at appen viser éin adresse medan tenaren logga ei anna, og deretter spør kva av dei som lyg. Ingen av dei; det er to observasjonar av to ulike ting. Ei adresse bunden til eit grensesnitt, ei adresse bunden til ein socket og ei kjeldeadresse sett av ein ekstern teneste svarar på tre separate spørsmål. Ein VPN legg til ein nettverkskontekst på telefonen og slår ikkje saman dei tre til eitt tal for heile eininga. Les feltnamna i billetten før du les adressene.

Kva billetten vanlegvis skildrar

Førestill deg ein telefon på Wi-Fi med ein tunnel oppe. Wi-Fi-grensesnittet har ei LAN-adresse, tunnelgrensesnittet har ei tildelt indre adresse, og ein førespurnad som går ut gjennom tunnelen, kjem til ei offentleg teneste frå kva som helst kjelde som overlever ei eventuell omsetjing undervegs. Ein app som skriv ut den indre adressa, og ein tenar som loggar den omsette kjelda, rapporterer begge nøyaktig, og dei to verdiane vil aldri stemme overeins.

Dei tre observasjonane skil seg i kva dei kan bevise, ikkje berre i kva dei skildrar.

ObservationWhat it describesWhat it cannot prove
An address on a local interfaceOne configured attachment: Wi-Fi, cellular or a tunnelThe source a remote site receives
A socket's local endpointThe binding used by that one connectionThe address after translation further along
The peer address at a serviceWhat arrived at that observation pointAny other interface on the phone

Hald den tabellen ved sida av koden som fyller desse verdiane inn i ein billett, for det meste av forvirringa her er ei kolonneforveksling og ikkje ein nettverksfeil.

Kva eit socket-kall kan og ikkje kan svare på

På API-nivå rapporterer getsockname det lokale endepunktet som for tida er bunde til ein bestemd socket. For ein tilkopla socket er det kjelda kjernen valde for den tilkoplinga, noko som allereie er meir spesifikt enn kva grensesnittliste som helst. Det er ikkje eit oppslag av offentleg adresse, og å kalle det på ein ubunden socket fortel deg nesten ingenting. Kva det enn returnerer, kan seinare skrivast om på vegen, så berre tenesta si eiga observasjon er autoritativ om kva tenesta tok imot.

På Apple-plattformer har grensesnittsida ei eiga flate: tunnelinnstillingane listar adressene som er tildelte tunnelgrensesnittet. Å lese dei fortel deg korleis tunnelen vart konfigurert, og det fortel deg ikkje kva veg ein gitt førespurnad tok, fordi ruting og reglar per app avgjer det for kvar tilkopling.

Delt tunnellering gjer gapet synleg. Éin førespurnad kan gå ut gjennom tunnelen medan den neste, retta mot ein annan destinasjon eller adressefamilie, ikkje gjer det, så to resultat frå same app med sekunds mellomrom kan vere ærlege og ulike.

Vel observasjonen som passar til spørsmålet

Vel medvite i staden for å instrumentere alt. For det backend ser, logg kjelda i backend, og der ein omvend proxy står framfor, les klientadressa frå vidaresendingshovudet utrullinga di faktisk set, og ikkje frå noko klienten sende.

For å vite om tunnelen er konfigurert, les grensesnittet. For å vite om trafikken til denne appen brukte han, send trafikk frå den appen til ein destinasjon du kontrollerer og samanlikn kjelda i begge endar.

Reglar per app fortener si eiga setning. Eit nettlesarresultat er bevis om den nettlesaren, og ein administrert tunnel per app kan setje to apper på same telefon på ulike vegar i same augneblink. Å verifisere dekning betyr å sende trafikk frå den aktuelle appen, i den aktuelle adressefamilien.

Grensesnittnamn er ikkje ein detektor

Ikkje bruk eit grensesnittnamn som VPN-sjekk heller. Namna er ikkje ein offentleg kontrakt, og ein telefon kan ha fleire tilkoplingar medan berre éin av dei ber førespurnaden din.

Gi feltet namn etter observasjonen det held. local_interface_address, socket_local_endpoint og service_observed_source er klossete og eintydige, og eintydig er det du vil ha når verdien endar i ein støttebillett ei veke seinare. Éin kolonne kalla device IP vil samle alle tre og deretter bli trudd på som om han var éin.

Hald identitet utanfor adressekolonnen

Ein delt VPN-utgang er ikkje ein brukaridentitet, og ei privat adresse er ikkje ei tilgangsopplysning. Begge skildrar ein veg og ikkje ein person, og å handsame ein av dei som autentisering gjer ei ruteulukke om til ei autorisasjonsavgjerd.

Når nokon spør kva adresse telefonen har, er det nyttige svaret eit spørsmål om kva tilkopling og kva observatør. Definisjonen av getsockname er verdt å sitere for midt-caset, fordi han avgjer socket-spørsmålet utan å late som han avgjer dei to andre.

Skriv deretter ned kva av dei tre produktet ditt faktisk treng å vise, og slett dei to andre frå grensesnittet.

Relaterte artiklar