2012-11-09 15 views
5

का उपयोग करते समय विभिन्न आईपी पते दे रहे हैं। मैं वर्चुअल मशीन चला रहा हूं जो निम्न मान देता है और जब कोड चलाया जाता है (वेबसाइट पर कुछ क्रिया करके)socket.getfqdn() और socket.gethostname() socket.gethostname

socket.getfqdn() 
x-vps-01.abc.it 

socket.gethostname() 
x-vps-01 

socket.gethostbyname(socket.getfqdn()) 
216.185.103.35 

socket.gethostbyname(socket.gethostname()) 
78.47.171.19 

कृपया ध्यान दें कि, जब मैं टर्मिनल में प्रवेश करें और इसके बाद के संस्करण चलाने के लिए, मैं हमेशा 78.47.171.19

+1

अपने नेटवर्क सेटअप, होस्ट और वीएम इंटरफेस/आईपी का वर्णन करें, और आप DNS में कैसे जुड़ते हैं। –

उत्तर

8

मैंने कोशिश की है कि तुम क्या एक लिनक्स बॉक्स पर किया था मिलता है। शायद आपको यह बताना चाहिए कि आप किस ओएस और नेटवर्क की स्थिति पर चल रहे हैं।

strace का उपयोग करते हुए मैंने पाया कि socket.getfqdn() जानकारी का उपयोग कर फाइल सिस्टम कॉल uname() का परिणाम से /etc/hosts जबकि socket.gethostname() केवल प्रिंट डेटा में प्रदान की जाती है; मूल रूप से आप कह सकते हैं कि कोई नेटवर्क मॉड्यूल से पूछता है जबकि दूसरा कर्नेल से पूछता है। दोनों के पास आपके प्रश्न का उत्तर है लेकिन वे जरूरी नहीं हैं क्योंकि उनके पास इस मामले पर अलग-अलग विचार हैं।

कॉलिंग socket.gethostbyname() नेटवर्क मॉड्यूल से भी पूछताछ करता है (मेरे मामले में एक मैच के लिए फ़ाइल /etc/hosts फ़ाइल की सामग्री की खोज करता है)। कर्नेल का जवाब नेटवर्क फ़ंक्शन पर देना वास्तव में आपको नहीं करना चाहिए। ज्यादातर मामलों में यह फिर भी काम करेगा। आपको एक ऐसी जगह मिली जिसमें उसने अजीब परिणाम दिए।