Φτάνουν δελτία υποστήριξης που λένε ότι η εφαρμογή δείχνει μια διεύθυνση ενώ ο διακομιστής κατέγραψε άλλη, και μετά ρωτούν ποια από τις δύο λέει ψέματα. Καμία δεν λέει· πρόκειται για δύο παρατηρήσεις δύο διαφορετικών πραγμάτων. Μια διεύθυνση δεσμευμένη σε μια διεπαφή, μια διεύθυνση δεσμευμένη σε ένα socket και μια διεύθυνση πηγής που βλέπει μια απομακρυσμένη υπηρεσία απαντούν σε τρία ξεχωριστά ερωτήματα. Ένα VPN προσθέτει δικτυακό πλαίσιο στο τηλέφωνο και δεν συμπτύσσει αυτές τις τρεις σε έναν αριθμό για όλη τη συσκευή. Διαβάστε τα ονόματα των πεδίων στο δελτίο πριν διαβάσετε τις διευθύνσεις.

Τι περιγράφει συνήθως το δελτίο

Φανταστείτε ένα τηλέφωνο σε Wi-Fi με μια σήραγγα ενεργή. Η διεπαφή Wi-Fi κρατά μια διεύθυνση LAN, η διεπαφή της σήραγγας κρατά μια εκχωρημένη εσωτερική διεύθυνση, και ένα αίτημα που βγαίνει μέσα από τη σήραγγα φτάνει σε μια δημόσια υπηρεσία από όποια πηγή επιβιώσει από οποιαδήποτε μετάφραση στη διαδρομή. Μια εφαρμογή που εκτυπώνει την εσωτερική διεύθυνση και ένας διακομιστής που καταγράφει τη μεταφρασμένη πηγή αναφέρουν και τα δύο με ακρίβεια, και οι δύο τιμές δεν θα συμπέσουν ποτέ.

Οι τρεις παρατηρήσεις διαφέρουν ως προς το τι μπορούν να αποδείξουν, όχι μόνο ως προς το τι περιγράφουν.

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

Κρατήστε αυτόν τον πίνακα δίπλα στον κώδικα που γεμίζει αυτές τις τιμές σε ένα δελτίο, γιατί η περισσότερη σύγχυση εδώ είναι μπέρδεμα στηλών και όχι βλάβη δικτύου.

Τι μπορεί και τι δεν μπορεί να απαντήσει μια κλήση socket

Σε επίπεδο API, το getsockname αναφέρει το τοπικό τελικό σημείο που είναι αυτή τη στιγμή δεσμευμένο σε ένα συγκεκριμένο socket. Για ένα συνδεδεμένο socket αυτή είναι η πηγή που επέλεξε ο πυρήνας για εκείνη τη σύνδεση, το οποίο είναι ήδη πιο συγκεκριμένο από οποιαδήποτε λίστα διεπαφών. Δεν είναι αναζήτηση δημόσιας διεύθυνσης, και η κλήση του σε ένα μη δεσμευμένο socket δεν σας λέει σχεδόν τίποτα. Ό,τι κι αν επιστρέψει μπορεί να ξαναγραφτεί αργότερα στη διαδρομή, οπότε μόνο η παρατήρηση της ίδιας της υπηρεσίας είναι έγκυρη για το τι έλαβε η υπηρεσία.

Στις πλατφόρμες Apple η πλευρά των διεπαφών έχει ξεχωριστή επιφάνεια: οι ρυθμίσεις σήραγγας απαριθμούν τις διευθύνσεις που εκχωρήθηκαν στη διεπαφή της σήραγγας. Το να τις διαβάσετε σας λέει πώς διαμορφώθηκε η σήραγγα, και δεν σας λέει ποια διαδρομή ακολούθησε ένα συγκεκριμένο αίτημα, επειδή η δρομολόγηση και οι κανόνες ανά εφαρμογή το αποφασίζουν για κάθε σύνδεση.

Η διαχωρισμένη σήραγγα κάνει το κενό ορατό. Ένα αίτημα μπορεί να βγει μέσα από τη σήραγγα ενώ το επόμενο, με κατεύθυνση σε άλλο προορισμό ή οικογένεια διευθύνσεων, δεν βγαίνει, οπότε δύο αποτελέσματα από την ίδια εφαρμογή με διαφορά δευτερολέπτων μπορούν να είναι ειλικρινή και διαφορετικά.

Διαλέξτε την παρατήρηση που ταιριάζει με το ερώτημα

Διαλέξτε σκόπιμα αντί να οργανώνετε μετρήσεις για τα πάντα. Για το τι βλέπει το backend, καταγράψτε την πηγή στο backend, και όπου μπροστά στέκεται ένας αντίστροφος διακομιστής μεσολάβησης, διαβάστε τη διεύθυνση του πελάτη από την κεφαλίδα προώθησης που όντως ορίζει η ανάπτυξή σας και όχι από οτιδήποτε έστειλε ο πελάτης.

Για το αν η σήραγγα είναι διαμορφωμένη, διαβάστε τη διεπαφή. Για το αν η κίνηση αυτής της εφαρμογής τη χρησιμοποίησε, στείλτε κίνηση από αυτή την εφαρμογή σε έναν προορισμό που ελέγχετε και συγκρίνετε την πηγή στα δύο άκρα.

Οι κανόνες ανά εφαρμογή αξίζουν τη δική τους πρόταση. Το αποτέλεσμα ενός προγράμματος περιήγησης είναι απόδειξη για εκείνο το πρόγραμμα, και μια διαχειριζόμενη σήραγγα ανά εφαρμογή μπορεί να βάλει δύο εφαρμογές στο ίδιο τηλέφωνο σε διαφορετικές διαδρομές την ίδια στιγμή. Η επαλήθευση κάλυψης σημαίνει αποστολή κίνησης από την εν λόγω εφαρμογή, στην εν λόγω οικογένεια διευθύνσεων.

Τα ονόματα διεπαφών δεν είναι ανιχνευτής

Μη χρησιμοποιείτε ούτε όνομα διεπαφής ως έλεγχο VPN. Τα ονόματα δεν είναι δημόσιο συμβόλαιο, και ένα τηλέφωνο μπορεί να έχει πολλές προσαρτήσεις ενώ μόνο μία από αυτές μεταφέρει το αίτημά σας.

Ονομάστε το πεδίο σύμφωνα με την παρατήρηση που κρατά. Τα local_interface_address, socket_local_endpoint και service_observed_source είναι αδέξια και σαφή, και σαφήνεια είναι αυτό που θέλετε όταν η τιμή καταλήξει σε δελτίο υποστήριξης μια εβδομάδα αργότερα. Μία μόνο στήλη με όνομα device IP θα συγκεντρώσει και τις τρεις και μετά θα της έχει εμπιστοσύνη σαν να ήταν μία.

Κρατήστε την ταυτότητα έξω από τη στήλη διεύθυνσης

Μια κοινόχρηστη έξοδος VPN δεν είναι ταυτότητα χρήστη, και μια ιδιωτική διεύθυνση δεν είναι διαπιστευτήριο πρόσβασης. Και οι δύο περιγράφουν μια διαδρομή και όχι ένα πρόσωπο, και το να αντιμετωπίζετε οποιοδήποτε από τα δύο ως έλεγχο ταυτότητας μετατρέπει ένα ατύχημα δρομολόγησης σε απόφαση εξουσιοδότησης.

Όταν κάποιος ρωτά ποια διεύθυνση έχει το τηλέφωνο, η χρήσιμη απάντηση είναι ένα ερώτημα για το ποια σύνδεση και ποιος παρατηρητής. Ο ορισμός του getsockname αξίζει να αναφερθεί για τη μεσαία περίπτωση, επειδή λύνει το ζήτημα του socket χωρίς να προσποιείται ότι λύνει τα άλλα δύο.

Στη συνέχεια γράψτε ποια από τις τρεις χρειάζεται πραγματικά να εμφανίζει το προϊόν σας, και διαγράψτε τις άλλες δύο από τη διεπαφή.

Σχετικά άρθρα