मैं ईथरनेट के माध्यम से वाईफाई और अन्य एप्लिकेशन के माध्यम से कुछ एप्लिकेशन को रूट करना चाहता हूं। यह देखते हुए कि OSX में सिस्टम टूल्स और उपयोगिताओं के साथ-साथ ऐप्स का एक समृद्ध पारिस्थितिकी तंत्र है, मैं इसे कैसे बना सकता हूं? *
मैं ईथरनेट के माध्यम से वाईफाई और अन्य एप्लिकेशन के माध्यम से कुछ एप्लिकेशन को रूट करना चाहता हूं। यह देखते हुए कि OSX में सिस्टम टूल्स और उपयोगिताओं के साथ-साथ ऐप्स का एक समृद्ध पारिस्थितिकी तंत्र है, मैं इसे कैसे बना सकता हूं? *
जवाबों:
मैं ईथरनेट के माध्यम से वाईफाई और अन्य एप्लिकेशन के माध्यम से कुछ एप्लिकेशन को रूट करना चाहता हूं।
दुर्भाग्य से, यह वह तरीका नहीं है जो यह (नेटवर्किंग) काम करता है। आप यह नहीं कह सकते हैं कि आप सफारी को एक नेटवर्क पोर्ट और आईट्यून्स के माध्यम से दूसरे के माध्यम से आना चाहते हैं। इसके साथ समस्या इस तथ्य में निहित है कि एप्लिकेशन स्वयं नेटवर्क कनेक्शन नहीं बनाते हैं - यह नेटवर्किंग ( बर्कले सॉकेट्स ) एपीआई को कॉल करता है जो कनेक्शन बनाता है और इस प्रक्रिया को सॉकेट से ही बांधता है।
सबसे सरल शब्दों में, प्रवाह इस तरह दिखता है
जब आपकी स्थानीय प्रक्रिया (प्रश्न में आवेदन) एक कनेक्शन बनाना चाहती है, तो यह अनुरोध करती है कि एक सॉकेट बनाया जाए। उस अनुरोध के भाग में आईपी पता शामिल है, फिर कनेक्शन बनाया जाता है, और ऐप इसके लिए बाध्य होता है। ऐप तब उस सॉकेट के माध्यम से डेटा भेजता और प्राप्त करता है।
यहां याद रखने की कुंजी यह है कि एप्लिकेशन नेटवर्क पते के आधार पर सॉकेट के लिए पूछता है। के अलावा (यह मानते हुए कि आप एकल खंड वाले नेटवर्क पर हैं), आपके पास केवल दो मार्ग हैं:
यदि आपके पास इस एकल नेटवर्क से जुड़े दो इंटरफेस हैं, तो आपके मार्ग ओवरलैप होंगे और प्राथमिकता वाला इंटरफ़ेस प्राथमिक होगा।
आपका एप्लिकेशन जो भी चल रहा है, वह कहने वाला है, "मैं जाना चाहता हूं foo.bar.com
" जो कि आईपी पते पर अनुवाद करेगा और उस मार्ग पर एक सॉकेट बनाया जाएगा जो आपको वहां मिलता है। मुद्दा यह है, आपके ऐप का मामले पर कोई नियंत्रण नहीं है।
हालाँकि, मान लें कि आप दो अलग-अलग नेटवर्क से जुड़े हैं:
Ethernet (en0) -> 1.2.3.0
WiFi (en1) -> 5.6.7.0
यदि 1.2.3.4 के आईपी के साथ एक फ़ाइल सर्वर है, तो उस पते के लिए बाध्य सभी ट्रैफ़िक ईथरनेट के माध्यम से जाएंगे। यदि आपका वाईफाई इंटरनेट एक्सेस के लिए कॉन्फ़िगर किया गया है, तो सभी कॉल 1.2.3.0 पर जाते हैं और हर दूसरा पता en1 से गुजरेगा। फिर से, आपके ऐप की बात में कोई दम नहीं है और सॉकेट को गंतव्य के आधार पर बनाया जाएगा।
क्या कोई एप्लिकेशन किसी विशिष्ट नेटवर्क इंटरफेस का उपयोग कर सकता है?
हां, यह निश्चित रूप से हो सकता है, लेकिन यह एप्लिकेशन के स्रोत स्तर पर किया गया कुछ है क्योंकि यह एपीआई को कॉल करने वाला है। यदि आप इसे एक विशिष्ट इंटरफ़ेस का उपयोग करने के लिए कोड करते हैं, तो यह ऐसा करेगा (यह किसी भी मायने में व्यावहारिक नहीं है, लेकिन आपके पास क्षमता है)।
निचला रेखा: आपके द्वारा उपयोग किए जाने वाले एप्लिकेशन के आधार पर ट्रैफ़िक को फिर से रूट करने के लिए बाहरी अनुप्रयोग के लिए, ओएस के प्रोटोकॉल स्टैक और एप्लिकेशन के बीच खुद को सम्मिलित करना होगा और ऐसा होने वाला नहीं है।
यह निर्भर करता है कि हम किन ऐप्स के बारे में बात कर रहे हैं और वास्तव में आप क्या हासिल करना चाहते हैं। कुछ मामलों में आप अपने ऐप्स के स्रोत पोर्ट या गंतव्य पोर्ट के आधार पर pf और नीति-आधारित रूटिंग (स्रोत रूटिंग) का उपयोग करके प्राप्त कर सकते हैं। हालांकि यह सामान्य रूप से उन ऐप्स के साथ ही संभव है जो "सरल" नेटवर्क वार हैं (उदाहरण के लिए केवल एक ही सेवा से जुड़ते हैं)।
एक सामान्य समाधान अभी तक एक बड़े करीने से पैक किए गए रूप में मौजूद नहीं है, जिसे आप विशेष विशेषज्ञता के बिना बस डाउनलोड और उपयोग कर सकते हैं।
यदि आप इस तरह के समाधान को लागू करना चाहते हैं, तो आप अपने स्वयं के साझा पुस्तकालय को प्रक्रिया में इंजेक्ट करने के लिए अपने एप्लिकेशन लॉन्च करते समय DYLD_INSERT_LIBRARIES पर्यावरण चर का उपयोग करना चाहेंगे। उस साझा लाइब्रेरी को तब बाइंड () कॉल को ओवरराइड करना चाहिए ताकि यह सुनिश्चित हो सके कि यह प्रक्रिया ऐप के आधार पर आपके वाईफाई या ईथरनेट इंटरफेस के आईपी से जुड़ती है।
इसके लिए मैं जो निकटतम बात सोच सकता हूं, उसे पैकेट प्राथमिकता कहा जाता है (इसलिए ऐप्स एक ही ईथरनेट कनेक्शन पर एक-दूसरे के साथ हस्तक्षेप नहीं करेंगे) यह मदरबोर्ड "Fatal1ty Z370 व्यावसायिक गेमिंग i7" में उपलब्ध है, लेकिन यह $ 200 का बोर्ड है और यह एक हार्डवेयर समाधान है, मुझे विश्वास नहीं है कि इसमें सक्षम एक सॉफ्टवेयर है लेकिन मैं गलत हो सकता हूं मुझे उम्मीद है कि इससे मदद मिली।