2009-07-02 8 views
6

यदि मैं यहां काम पर स्थानीय लैन से जुड़ा हूं, तो मुझे अपने ऐप को एक आंतरिक आईपी के माध्यम से हमारे सर्वर तक पहुंचने की ज़रूरत है, अन्यथा, जंगली में बाहर होने पर मुझे अपने बाहरी आईपी का उपयोग करने की आवश्यकता होगी।मैं प्रोग्रामेटिक रूप से यह देखने के लिए कैसे जांच करूं कि मैं किस डोमेन से कनेक्ट हूं?

वर्तमान में, मैं स्थानीय आईपी के माध्यम से कनेक्ट करने का प्रयास करता हूं और फिर विफल होने पर बाहरी कोशिश करता हूं ... लेकिन टाइमआउट थोड़ा लंबा लगता है और मैं सोच रहा था कि मशीन का कौन सा डोमेन पता है कोशिश करने से पहले जुड़ा हुआ है।

संपादित करें: पैट्रिक> अनिवार्य रूप से, ऐप एक टैबलेट पीसी पर चलता है जो स्थानीय नेटवर्क से दिन में दो बार जुड़ा होता है। यह नेटवर्क पर कनेक्ट होने की संख्या और स्थानीय रूप से कनेक्ट होने वाले समय के बीच लगभग बराबर है।

सभी मशीनों एक डोमेन खाते जब वे नेटवर्क से जुड़े हैं (और डोमेन "LOCTabletx" जहां एक्स एक नंबर जब यह ghosted है मशीन को दिया है की तरह का एक नामकरण परंपरा के साथ खाते हैं।

क्या मैं 'के लिए देख रहा हूँ एक तेजी से करता है, तो मशीन हमारे स्थानीय नेटवर्क या इंटरनेट पर जुड़ा हुआ है को देखने के लिए तरीका है। Environment.UserDomainName मुझे हो जाता है LOCTabletx डोमेन नाम नहीं का उपयोग करना।

संपादित

अगर यह किसी की मदद करता है, तो मैं बस एक मशीन के नाम को हल करने की कोशिश करता हूं जिसे मैं गारंटी दे सकता हूं नेटवर्क (सर्वरों में से एक) पर होगा। यह मेरे लिए पर्याप्त रूप से अच्छी तरह से काम करता है।

+0

क्या आप डोमेन खाते से मशीन पर लॉग इन हैं, और सिर्फ आपके कार्य नेटवर्क से शारीरिक रूप से जुड़े नहीं हैं? –

उत्तर

7

आप की कोशिश की है:

Environment.UserDomainName 

तुम भी एक है कि अपने स्थानीय नेटवर्क पर काम करता है के लिए मशीन पर सक्रिय IP पते पर एक नज़र, और क्वेरी ले सकता है ...

var x = NetworkInterface.GetAllNetworkInterfaces() 
    .Where(ni => ni.OperationalStatus == OperationalStatus.Up) 
    .SelectMany(ni => ni.GetIPProperties().UnicastAddresses); 

// do something with the collection here to determine if you're on the right network. 
// just looping & printing here for example. 
foreach (var item in x) 
{   
    Console.WriteLine(item.Address); 
} 

और जब आप जिस नेटवर्क पर हैं, उसे समझने के बाद, आप अपने कंप्यूटर चलते समय अपने कंप्यूटर कूदने वाले नेटवर्क को संभालने के लिए System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged ईवेंट की सदस्यता ले सकते हैं।

+0

जो मुझे केवल डोमेन पर मेरा मशीन नाम देता है। डोमेन नाम ही नहीं। उदाहरण के लिए, यदि मेरा कंप LOCProgrammer1 है और डोमेन कंपनी है। लोकल मैं पूर्व प्राप्त करता हूं, और मैं बाद वाले की तलाश में हूं। –

+0

यह बहुत अजीब है। मुझे Vista और XP प्रो दोनों के अंतर्गत हमारा डोमेन नाम मिलता है। शायद आप इसे एक संकेत के रूप में उपयोग कर सकते हैं कि आप डोमेन में लॉग इन नहीं हैं? –

+0

मुझे अपना स्थानीय मशीन नाम मिलता है - और मैं किसी डोमेन में लॉग इन नहीं हूं। यद्यपि यह समझ में आता है - यदि आप किसी डोमेन में लॉग इन करते हैं तो यह आपको स्थानीय सिस्टम या स्थानीय डोमेन का उपयोग करने पर स्थानीय मशीन को आपके सिस्टम को प्रमाणित करता है। –

5
System.Environment.UserDomainName 
+2

"इसे _that_ बहुत से याद किया गया।" –

2

आप Network Location Awareness एपीआई देखना चाहते हैं। Windows Vista या बाद में उपलब्ध, यह आपको प्रोग्रामेटिक रूप से यह पता लगाने की अनुमति देता है कि आप किस नेटवर्क से कनेक्ट हैं, और इन परिवर्तनों के दौरान अधिसूचित किया जाए।

यह के रूप में आप परिचित हो सकता है "यह एक घर/कार्य/सार्वजनिक नेटवर्क है?" संवाद बॉक्स।

+0

दुर्भाग्यवश मशीनें WinXP Pro को अपग्रेड करने के विकल्प के बिना चलाती हैं। हालांकि मैं WinXP के बराबर कुछ खोज करूँगा। धन्यवाद। –

3

एक और तरीका है, लेकिन अगर यह वास्तव में किसी भी अन्य समाधान की तुलना में बेहतर है मैं नहीं जानता है:

System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType 

इस एक स्ट्रिंग है "करबरोस" रिटर्न सक्रिय निर्देशिका के अंतर्गत है। यह सुनिश्चित नहीं है कि डोमेन से कनेक्ट नहीं होने पर यह क्या कहेंगे।

0

Environment.UserDomainName ... यदि आप एक डोमेन से जुड़ा हुआ नहीं कर रहे हैं आप मशीन नाम देता है। यदि आप किसी डोमेन से जुड़े हैं तो यह आपको डोमेन नाम देता है। यदि आप एक मशीन लेते हैं जो नेटवर्क से बाहर डोमेन में और "जंगली में" बाहर निकलता है, तो Environment.UserDomainName डोमेन नाम प्रदान करना जारी रखेगा भले ही आप रीबूट करते हैं और वापस लॉग इन करते हैं (आपके डोमेन खाते में)। आपकी मशीन डोमेन प्रमाण-पत्रों को लगभग 30 दिनों तक कैश करती है।

यदि आप अपने मशीन खाते में लॉग इन करते हैं, तो आपको मशीन का नाम मिल जाएगा।

4
System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType 

यह नेटवर्क से कनेक्ट नहीं होने पर "एनटीएलएम" वापस करेगा।

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

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