2008-12-02 15 views
19

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

मैं एक अजगर उदाहरण पसंद करूंगा, लेकिन सवाल भाषा अज्ञेयवादी है, इसलिए दूर गोली मारो।

संपादित करें: कृपया मुझे जवाब के रूप में "आप नहीं" दे सकते हैं। मेरा मतलब है, यह एक कंप्यूटर है। मैं इसे कुछ भी पसंद कर सकता हूं, उदाहरण के लिए - मैं एक इंटरफ़ेस को प्रोग्रामिक रूप से अक्षम कर सकता हूं जिसे मैं फ्लाई पर नहीं चाहता हूं। मैं कुछ सुंदर दिख रहा हूँ।

उत्तर

12

आप निश्चित रूप से किसी विशिष्ट डिवाइस पर सॉकेट बांध सकते हैं।

मुझे नहीं पता कि इसे पायथन में कैसे किया जाए, लेकिन बर्कले सॉकेट एपीआई (सी में) का उपयोग करके आपको SO_BINDTODEVICE विकल्प का उपयोग करके setsockopt() पर कॉल करने की आवश्यकता है।

आप एक इंटरफेस डिस्क्रिप्टर में पास करते हैं, जो struct ifreq प्रकार है। आदर्श रूप से आपको ioctl() का उपयोग करके इंटरफ़ेस डिस्क्रिप्टर की सामग्री मिल जाएगी, और SIOCGIFINDEX का अनुरोध - एक तर्क के रूप में इंटरफेस (उदाहरण के लिए eth0) का नाम पारित करना होगा।


संपादित करें: बस एक त्वरित खोज किया था और अजगर में सॉकेट तरीकों में से this प्रलेखन पाया। setsockopt() उनमें से एक है।

+0

से आपको बहुत बहुत धन्यवाद! मैं कोशिश करूँगा और वापस रिपोर्ट करूंगा। – Mikle

+0

केवल लिनक्स के लिए काम करता है। ओएस एक्स के बारे में क्या? – Dor

11

बस थोड़ा सा नोट - मुझे वास्तव में एक विशिष्ट आईपी से बांधना है, और केवल पूर्णता के लिए, समाधान सृजन के बाद सॉकेट को बांधना है। अजगर में स्रोत:

import socket 
s = socket.socket() 
s.bind(("127.0.0.1", 0)) 
s.connect(("321.12.131.432", 80)) 
1
import socket 
s = socket.socket() 
s.bind((get_ip_address('eth0'), 0)) 

Quora

+1

यह get_ip_address की परिभाषा के बिना काम नहीं करेगा – toth

संबंधित मुद्दे