რატომ აჩვენებს თქვენი iPhone აპი ერთ IP-ს და სერვერი სხვას ჩაწერს
ინტერფეისის მისამართი, სოკეტის ბოლო წერტილი და სერვერის მიერ ჩაწერილი წყარო სხვადასხვა კითხვას პასუხობს. VPN კონტექსტს მატებს; ისინი ერთ რიცხვად არ აქცევს.
მოდის მხარდაჭერის ბილეთები, რომლებშიც წერია, რომ აპი ერთ მისამართს აჩვენებს, სერვერმა კი სხვა ჩაწერა, და შემდეგ კითხულობენ, რომელი მათგანი იტყუება. არც ერთი; ეს ორი განსხვავებული რამის ორი დაკვირვებაა. ინტერფეისზე მიბმული მისამართი, სოკეტზე მიბმული მისამართი და შორეული სერვისის მიერ დანახული წყაროს მისამართი სამ სხვადასხვა კითხვას პასუხობს. VPN ტელეფონს ქსელურ კონტექსტს მატებს და არ აკუმშავს ამ სამს ერთ მოწყობილობისეულ რიცხვად. წაიკითხეთ ბილეთში ველების სახელები, სანამ მისამართებს წაიკითხავთ.
რას აღწერს ბილეთი ჩვეულებრივ
წარმოიდგინეთ ტელეფონი Wi-Fi-ზე აწეული გვირაბით. Wi-Fi ინტერფეისს აქვს LAN მისამართი, გვირაბის ინტერფეისს აქვს მინიჭებული შიდა მისამართი, და გვირაბიდან გამომავალი მოთხოვნა საჯარო სერვისამდე აღწევს იმ წყაროდან, რომელიც გზაზე ნებისმიერ გარდაქმნას გადაურჩება. აპი, რომელიც შიდა მისამართს ბეჭდავს, და სერვერი, რომელიც გარდაქმნილ წყაროს ჩაწერს, ორივე ზუსტად აცნობებს, და ეს ორი მნიშვნელობა არასოდეს დაემთხვევა.
სამი დაკვირვება იმით განსხვავდება, რისი დამტკიცება შეუძლიათ, და არა მხოლოდ იმით, რას აღწერენ.
| Observation | What it describes | What it cannot prove |
|---|---|---|
| An address on a local interface | One configured attachment: Wi-Fi, cellular or a tunnel | The source a remote site receives |
| A socket's local endpoint | The binding used by that one connection | The address after translation further along |
| The peer address at a service | What arrived at that observation point | Any other interface on the phone |
შეინახეთ ეს ცხრილი იმ კოდის გვერდით, რომელიც ამ მნიშვნელობებს ბილეთში ავსებს, რადგან აქ არეულობის უმეტესობა სვეტების არევაა და არა ქსელური ხარვეზი.
რაზე შეიძლება უპასუხოს სოკეტის გამოძახებამ და რაზე არა
API დონეზე getsockname აცნობებს ლოკალურ ბოლო წერტილს, რომელიც ამჟამად კონკრეტულ სოკეტზეა მიბმული. დაკავშირებული სოკეტისთვის ეს არის წყარო, რომელიც ბირთვმა ამ კავშირისთვის აირჩია, და ეს უკვე უფრო კონკრეტულია, ვიდრე ინტერფეისების ნებისმიერი სია. ეს არ არის საჯარო მისამართის ძიება, და მიუბმელ სოკეტზე მისი გამოძახება თითქმის არაფერს გეტყვით. რასაც დააბრუნებს, შეიძლება მოგვიანებით გზაზე გადაიწეროს, ამიტომ მხოლოდ სერვისის საკუთარი დაკვირვებაა ავტორიტეტული იმაში, თუ რა მიიღო სერვისმა.
Apple-ის პლატფორმებზე ინტერფეისების მხარეს ცალკე ზედაპირი აქვს: გვირაბის პარამეტრები ჩამოთვლის გვირაბის ინტერფეისზე მინიჭებულ მისამართებს. მათი კითხვა გეტყვით, როგორ იყო გვირაბი კონფიგურირებული, და არ გეტყვით, რომელი გზა გაიარა მოცემულმა მოთხოვნამ, რადგან მარშრუტიზაცია და თითო აპის წესები ამას ყოველი კავშირისთვის წყვეტენ.
გაყოფილი გვირაბი ხარვეზს თვალსაჩინოს ხდის. ერთი მოთხოვნა შეიძლება გვირაბიდან გავიდეს, მაშინ როცა შემდეგი, სხვა დანიშნულებისკენ ან სხვა მისამართების ოჯახისკენ მიმართული, არ გადის, ამიტომ ერთი და იმავე აპის წამებით დაშორებული ორი შედეგი შეიძლება იყოს პატიოსანი და განსხვავებული.
აირჩიეთ დაკვირვება, რომელიც კითხვას შეესაბამება
აირჩიეთ განზრახ, ყველაფრის გაზომვის ნაცვლად. იმისთვის, რასაც backend ხედავს, ჩაწერეთ წყარო backend-ში, და სადაც წინ უკუპროქსი დგას, კლიენტის მისამართი წაიკითხეთ იმ გადამისამართების თავსართიდან, რომელსაც თქვენი განლაგება რეალურად აყენებს, და არა იმიდან, რაც კლიენტმა გამოგზავნა.
გვირაბი კონფიგურირებულია თუ არა, ამისთვის ინტერფეისი წაიკითხეთ. ამ აპის ტრაფიკმა გამოიყენა თუ არა, ამისთვის ამ აპიდან ტრაფიკი გაგზავნეთ თქვენს მიერ კონტროლირებად დანიშნულებაზე და შეადარეთ წყარო ორივე ბოლოში.
თითო აპის წესები საკუთარ წინადადებას იმსახურებს. ბრაუზერის შედეგი მტკიცებულებაა იმ ბრაუზერის შესახებ, და მართული თითო აპის გვირაბი შეიძლება ერთ ტელეფონზე ორი აპი სხვადასხვა გზაზე დააყენოს ერთსა და იმავე მომენტში. დაფარვის შემოწმება ნიშნავს ტრაფიკის გაგზავნას შესაბამისი აპიდან, შესაბამისი მისამართების ოჯახში.
ინტერფეისების სახელები დეტექტორი არ არის
ინტერფეისის სახელი VPN-ის შემოწმებადაც არ გამოიყენოთ. სახელები საჯარო ხელშეკრულება არ არის, და ტელეფონს შეიძლება რამდენიმე მიმაგრება ჰქონდეს, მაშინ როცა მათგან მხოლოდ ერთი ატარებს თქვენს მოთხოვნას.
ველს დაარქვით იმ დაკვირვების სახელი, რომელსაც ინახავს. local_interface_address, socket_local_endpoint და service_observed_source მოუქნელი და ცალსახაა, და ცალსახაობა სწორედ ის არის, რაც გინდათ, როცა მნიშვნელობა ერთ კვირაში მხარდაჭერის ბილეთში ხვდება. ერთი სვეტი სახელად device IP სამივეს შეაგროვებს და შემდეგ ენდობიან, თითქოს ერთია.
იდენტობა მისამართის სვეტის გარეთ შეინახეთ
საერთო VPN გასასვლელი მომხმარებლის იდენტობა არ არის, და კერძო მისამართი წვდომის სერტიფიკატი არ არის. ორივე აღწერს გზას და არა ადამიანს, და რომელიმეს ავთენტიფიკაციად მოქცევა მარშრუტიზაციის შემთხვევითობას ავტორიზაციის გადაწყვეტილებად აქცევს.
როცა ვინმე იკითხავს, რა მისამართი აქვს ტელეფონს, სასარგებლო პასუხი კითხვაა იმაზე, რომელი კავშირი და რომელი დამკვირვებელი. getsockname-ის განმარტება ღირს ციტირებად შუა შემთხვევისთვის, რადგან ის წყვეტს სოკეტის საკითხს იმის მოჩვენების გარეშე, რომ დანარჩენ ორს წყვეტს.
შემდეგ ჩაწერეთ, სამიდან რომელი სჭირდება თქვენს პროდუქტს რეალურად ჩვენება, და წაშალეთ დანარჩენი ორი ინტერფეისიდან.