2010-01-14 6 views
17

में सॉकेट के लिए एक विशिष्ट नेटवर्क इंटरफ़ेस का उपयोग करना क्या एक विशिष्ट नेटवर्क इंटरफ़ेस का उपयोग करने के लिए एक नव निर्मित सॉकेट को मजबूर करने के लिए, रूटिंग तालिका को बदलने के अलावा, विंडोज में एक विश्वसनीय तरीका है? मैं समझता हूं कि bind() इंटरफ़ेस के आईपी पते पर इसकी गारंटी नहीं है।विंडोज

उत्तर

15

(ठीक है दूसरी बार भाग्यशाली ..)

FYI करें वहाँ एक और सवाल यहाँ उसी तर्ज पर perform connect() on specific network adapter है ...

The Cable Guy

Windows XP और विंडोज सर्वर 2003 के अनुसार भेजने के लिए कमजोर होस्ट मॉडल का उपयोग करें और सभी आईपीवी 4 इंटरफेस और भेजने के लिए मजबूत होस्ट मॉडल भेजता है और सभी आईपीवी 6 के लिए प्राप्त करता है इंटरफेस। आप इस व्यवहार को कॉन्फ़िगर नहीं कर सकते हैं। अगली पीढ़ी Windows Vista में टीसीपी/आईपी और विंडोज सर्वर 2008 भेजता मजबूत मेजबान का समर्थन करता है और एक टेरीडो होस्ट-विशिष्ट रिले के लिए टेरीडो सुरंग इंटरफेस को छोड़कर सभी इंटरफेस पर डिफ़ॉल्ट रूप से दोनों IPv4 और IPv6 के लिए प्राप्त करता है।

तो Windows XP और Windows Server 2003 IP4 संख्या में आपके प्रश्न (ठीक से, इस बार) का उत्तर देने के लिए, लेकिन आईपी 6 हाँ के लिए। और विंडोज विस्टा और विंडोज 2008 के लिए हाँ (कुछ परिस्थितियों को छोड़कर)।

से http://www.codeguru.com/forum/showthread.php?t=487139

इसके अलावा Windows पर, कॉल बाध्य करने के लिए() कार्ड चयन केवल आने वाले यातायात, नहीं बाहर जाने वाले यातायात को प्रभावित करता है। इस प्रकार, एक बहु असर पड़ा प्रणाली में (यानी, एक से अधिक इंटरफेस कार्ड) चला रहे क्लाइंट पर, यह नेटवर्क स्टैक कि का चयन करता है कार्ड का उपयोग करने है, और यह अपने चयन गंतव्य आईपी पर आधारित बनाता है , जो बदले में रूटिंग तालिका पर आधारित है। बाध्य करने के लिए एक कॉल() कार्ड किसी भी तरह से कार्ड की पसंद को प्रभावित नहीं करेगा।

के साथ कुछ ऐसा करने के लिए कुछ मिला है जिसे "वीक एंड सिस्टम" ("कमजोर ई/एस") मॉडल कहा जाता है। Vista मजबूत ई/एस मॉडल में बदल गया, इसलिए समस्या Vista के तहत उत्पन्न नहीं हो सकती है। लेकिन विंडोज़ के सभी पूर्व संस्करणों ने कमजोर ई/एस मॉडल का उपयोग किया था।

एक कमजोर ई/एस मॉडल के साथ

, यह अनुमार्गण तालिका फैसला करता है कि जो कार्ड एक बहु-स्थल प्रणाली में बाहर जाने वाले यातायात के लिए प्रयोग किया जाता है है।

अगर इन धागे कुछ अंतर्दृष्टि प्रदान देखें:

"स्थानीय सॉकेट Windows XP में बहु-स्थल मेजबान पर बाध्यकारी काम नहीं करता है" http://www.codeguru.com/forum/showthread.php?t=452337

पर "कैसे एक निर्दिष्ट Networkcard करने के लिए एक बंदरगाह कनेक्ट करने के लिए ? " http://www.codeguru.com/forum/showthread.php?t=451117 पर। यह धागा CreateIpForwardEntry() फ़ंक्शन, जो (मुझे लगता है कि) का उल्लेख है, ताकि सभी एक निर्दिष्ट सर्वर के साथ बाहर जाने वाले आईपी यातायात एक निर्दिष्ट एडाप्टर के माध्यम से रूट किया जाता है अनुमार्गण तालिका में एक प्रविष्टि बनाने के लिए इस्तेमाल किया जा सकता।

http://www.codeguru.com/forum/showthread.php?t=452368

आशा है कि मदद करता है पर http://www.codeguru.com/forum/showthread.php?t=448863

पर "2 ईथरनेट कार्ड के साथ कार्य करना" "अजीब बाँध व्यवहार बहु-स्थल सिस्टम पर"!

+0

धन्यवाद, जब तक मुझे कुछ याद नहीं आ रहा है, न तो उत्तर प्रासंगिक है, क्योंकि SO_BINDTODEVICE विंडोज के लिए प्रासंगिक नहीं है। मुझे संदेह है कि आपका सारांश सही है, भले ही मेरे पास सबूत न हों। – Ofir

+0

ओह ठीक है आप हैं! बेहतर जानकारी के साथ उपरोक्त मेरा उत्तर अपडेट - क्षमा करें! – Ezz

+0

ध्यान दें कि कमजोर और मजबूत होस्ट मॉडल इस बात को प्रभावित नहीं करते हैं कि किसी सॉकेट से ट्रैफ़िक कैसे भेजा जाता है। अर्थात। मजबूत मेजबान मॉडल यह सुनिश्चित करता है कि नेटवर्क एडेप्टर छोड़ने वाले यातायात उस एडाप्टर के असाइन किए गए आईपी पते का उपयोग करता है, लेकिन यह प्रभावित नहीं करता है कि होस्ट में नेटवर्क स्टैक वास्तव में उपयोग करने के लिए आउटगोइंग एडाप्टर का चयन कैसे करता है। यह वास्तव में उपरोक्त "केबल गाय" लिंक में समझाया गया है, साथ ही साथ विकिपीडिया: https://en.wikipedia.org/wiki/Host_model –