אפליקציית הטלפון והשרת המרוחק מתחילים מעובדות שונות, ואף אחד מהם לא יכול ללוות את של האחר. האפליקציה יכולה לשאול את מערכת ההפעלה על הרשת שבה היא משתמשת, ואילו השרת יודע רק מה שמגיע דרך החיבור. הפעלת נקודת קצה משלכם כותבת מחדש את השנייה ומשאירה את הראשונה בלי שינוי. איזו מהן עונה על השאלה שלכם תלוי בשאלה עצמה.

שתי נקודות תצפית, שני סוגי ראיות

ראיה מקומית מתארת את המכשיר. היא מכסה את הממשק שנושא תעבורה, את התעבורה שהפלטפורמה מדווחת עליה, ואת מה שהאפליקציה הקוראת רשאית לשאול. ראיה מרוחקת מתארת את החיבור: כתובת מקור, פרוטוקול, תזמון וכל מה שהאפליקציה בוחרת לשלוח. אף נקודת תצפית אינה קבוצה על של האחרת.

ערבוב השניים מייצר טענות שנשמעות מדויקות ואינן ניתנות לבדיקה. סמן מוכיח משהו על אובייקט רשת במכשיר, לא על איך שירות מרוחק מסווג את הבקשה.

לפני שמתווכחים על זיהוי, כתבו לאיזו נקודה השאלה מתייחסת. האם השאלה היא אם אפליקציה מסוימת יכולה לדעת שמנהרה פעילה, או אם שירות יכול להסיק מהיכן הגיעה הבקשה? אלו חקירות נפרדות, ותשובה לאחת אינה אומרת דבר על האחרת.

מה ממשק פלטפורמה מקומי יכול לדווח

Android מציע סמן מסוים. האובייקט NetworkCapabilities יכול לדווח על TRANSPORT_VPN, ו-hasTransport בודק אם אותה תעבורה קיימת באובייקט. האפליקציה מקבלת את האובייקט משירות הקישוריות וקוראת אותו, בכפוף להרשאת מצב הרשת.

התוצאה היא מידע פלטפורמה מקומי, לא חיפוש בטווחי הכתובות של ספק. היא מתארת את הרשת שהאפליקציה הקוראת משתמשת בה.

שני גבולות חשובים. כלל מנהרה מפוצלת שמחריג אפליקציה יכול לתת באותו טלפון תשובה שונה מזו שעמית רואה, משום שהאפליקציה עשויה להיות קשורה במקום אחר. הסמן קיים גם משום שמערכת ההפעלה מדמה ממשקי VPN, לא משום שאפליקציה מסוימת אוספת אותו. אם אפליקציה קוראת את השדה, מעבירה אותו הלאה או מתעלמת ממנו, זו תכונה של אותה אפליקציה. המניפסט והתיעוד שלה הם המקורות האמינים היחידים לשאלה הזו.

adb shell dumpsys connectivity | grep -i -m5 vpn

מה שירות מרוחק יכול לראות

שרת רואה את כתובת המקור של החיבור, את התעבורה ואת התזמון, והוא יכול להעשיר את הכתובת בנתוני מרשם או ניתוב. הוא יכול גם לקבל כל מה שהאפליקציה שולחת, כולל מיקום כשהאפליקציה מבקשת אותו והמשתמש מסכים. הערוצים האלה נפרדים, ורק אחד מהם דומה לחיפוש כתובת.

כתובת הרשומה אצל ספק אחסון מרמזת על מנהרה, ואילו כתובת הרשומה ברשת מגורים מרמזת על חיבור ביתי. שתיהן רמזים סטטיסטיים, לא עובדות על המכשיר.

כתובת מגורים אינה מציבה את האדם בכתובת ההיא, וכתובת אחסון אינה נוקבת במפעיל או במדינה. שירות שמתייחס להסקה כוודאות יטעה לעיתים בלי יכולת לזהות זאת. אם הדרישה היא אמינות ולא היוריסטיקה, נתוני כתובת אינם יכולים לספק אותה, ותכנון שאומר זאת כנה יותר מכזה שמסתיר את ההשערה.

ראיהעל מה היא עונהמה היא אינה יכולה להראות
סמן תעבורה מקומיהאם אובייקט הרשת הזה הוא VPNמי מפעיל את היציאה או היכן המכשיר
כתובת מקור מרוחקתאיזו כתובת הגיעה לשירותהאם המכשיר נושא גם מנהרה
מטען האפליקציהמה האפליקציה בחרה לשלוחכל מה שהאפליקציה לא שלחה

למה יציאה באחסון עצמי משנה רק צד אחד

הפעלת נקודת קצה משלכם משנה את כתובת המקור ששירות מרוחק רואה, מה שיכול להזיז אותה מחוץ לטווחים שהשירות מקשר לספקים מסחריים. היא אינה משנה דבר במודל הרשת המקומי, משום שהמנהרה נשארת מנהרה ומערכת ההפעלה עדיין מדווחת עליה.

צד אחד של הראיה זז; האחר נשאר קבוע. הפער ביניהם הוא המקום שבו הציפיות נשברות.

דפדפן הוא מקרה שלישי עם ממשקים ומגבלות משלו. תוכן ווב אינו יכול לקרוא אובייקט יכולות מקורי, והתייחסות לתכונה של מערכת הפעלה ניידת כדבר הזמין לדף ווב היא שגיאת קטגוריה. אם השאלה נוגעת לאתר, חקרו מה אתר באמת יכול להשיג במקום לתעתק API של פלטפורמה.

החליטו לפי השאלה שאתם שואלים

אם השאלה היא אם אפליקציה מסוימת יכולה לצפות במצב המנהרה, ממשק הפלטפורמה הוא המקום הנכון להסתכל, והתשובה נמצאת בקוד ובהרשאות של אותה אפליקציה. אם השאלה היא מה שירות יכול להסיק, מטא-נתוני החיבור הם הראיה. שאלה משפטית או חוזית אינה מוכרעת על ידי אף אחת מהן.

תנו לשאלה שם במשפט אחד לפני שאתם אוספים משהו. המשפט הזה קובע איזו נקודת תצפית חשובה ומונע מהחקירה לסחוף לוויכוח אחר.

תייגו כל תצפית לפי מקורה כשאתם מדווחים עליה, כי טענה בלי תיוג אינה ניתנת לבדיקה. סמן מקומי והסקה מכתובת שניהם שימושיים ואף אחד אינו מכריע, ולכן איחודם לפסק אחד הוא טעות.

כאשר שירות דוחה חיבור מורשה, השתמשו במסלול הבדיקה הנתמך שלו במקום לשנות הגדרה מקומית כדי להסתיר אות. הסרת תצפית אחת לעולם אינה מוכיחה שהאחרות נעלמו.

מאמרים קשורים