2011-05-28 10 views
12

मेरे पास एप्लिकेशन उपयोगकर्ता मशीन का नाम प्राप्त करना चाहता है, यहां मैं पुनर्प्राप्त कर सकता हूं और यह लोकहोस्ट में ठीक काम करता है।ASP.NET/C# में क्लाइंट मशीन का नाम कैसे प्राप्त करें?

string clientPCName; 
string[] computer_name = System.Net.Dns.GetHostEntry(
Request.ServerVariables["remote_host"]).HostName.Split(new Char[] { '.' }); 
clientPCName = computer_name[0].ToString(); 

स्थानीय में यह वास्तव में मेरा कंप्यूटर नाम देता है।
लेकिन सर्वर पर मुझे इस तरह का परिणाम मिलता है: 0x57364794
कोई समाधान?

उत्तर

12

इस प्रयास करें यह काम करता है मुझे

string clientMachineName; 
clientMachineName = (Dns.GetHostEntry(Request.ServerVariables["remote_addr"]).HostName); 
Response.Write(clientMachineName); 
+1

यह वही है स्थानीय कार्यों पर लेकिन सर्वर में की कोड इस लाइन रिटर्न: 0x57364794.boanxx22.dynamic.dsl ..... – Shaahin

+0

यह काम नहीं कर रहा –

+0

होस्ट नाम @Ahmed क्लाइंट मशीन नाम –

8

मशीन नाम के लिए केवल स्थानीय नेटवर्क, और स्थानीय विज्ञापन नेटवर्क/कि कम से जंगलों के लिए एक अवधारणा है। एक बार जब आप अपनी साइट को इंटरनेट मशीन नामों पर बेनकाब करते हैं तो अब समझ में नहीं आता है, इसके बजाय आपको DNS नाम मिलते हैं।

तो, उदाहरण के लिए, मेरे कार्य नेटवर्क पर मेरा लैपटॉप नाम bdorrans01.redmond.contoso.com पर हल हो जाता है। लेकिन अगर मैं घर से किसी वेब साइट पर ब्राउज़ करता हूं तो मेरा वर्तमान आईपी पता c-98-203-143-14.hsd1.wa.comcast.net पर हल हो जाता है।

आप एफक्यूडीएन ले रहे हैं और पहली अवधि/पूर्ण स्टॉप के बाद सबकुछ छोड़ रहे हैं। यह एक एडी पर्यावरण (प्रकार) में काम करता है, और आपका कोड आंतरिक रूप से bdorrans01 देखेंगे, लेकिन यह बाहरी रूप से c-98-203-143-14 देखेंगे।

यहां तक ​​कि आंतरिक रूप से बहु-वन एडी के भीतर भी यह गलत होगा यदि आपकी वेबसाइट किसी अन्य जंगल में होस्ट की गई थी, उदाहरण के लिए यदि आप साइट पर रहते हैं उदाहरण के लिए .europe.contoso.com, आपके कोड का मशीन नाम होगा bdorrans01, लेकिन मेरी मशीन एक ही जंगल में नहीं होगी, और यदि आपने इसे पिंग करने का प्रयास किया है, या नेटवर्क ड्राइव पर मैप किया है तो यह नहीं मिलेगा, क्योंकि आप europe.contoso.com में bdorrans01 की तलाश करेंगे, नहीं redmond.contoso.com जहां यह वास्तव में है।

इसके अलावा आपका कोड मानता है कि एक आईपी पता हल करने से पूरी तरह से योग्य डोमेन नाम उत्पन्न होगा, यह कई मामलों में सच नहीं है, आप केवल आईपी पता वापस प्राप्त कर सकते हैं, ताकि आप 1.2.3.4 और अपने कोड 1 का मशीन नाम देगा। इससे भी बदतर यह आईपीवी 6 पते पर कुछ भी नहीं करेगा क्योंकि वे अलग-अलग कॉलन का उपयोग करते हैं, 2001: डीबी 8: 85 ए 3: 8 डी 3: 1319: 8 ए 2e: 370: 7348

तो आपका आधार गलत है - और आप जो करने की कोशिश कर रहे हैं उसे करने के लिए आपको एक अलग तरीका खोजने की जरूरत है। आपको विश्वास क्यों है कि आपको मशीन नाम की आवश्यकता है?

+0

धन्यवाद नहीं कर रहा है blowdart, मुझे आपकी व्याख्या से जानकारी मिलती है, यह मैंने कोशिश की अन्य विकल्प का परिणाम दिया है: 0x57364794.boanxx22.dynamic.dsl.tele ...., आप सही हैं लेकिन फिर भी मुझे नहीं पता कि इस समस्या को कैसे संभालना है। मेरे पास एक ऐसा एप्लिकेशन है जो उपयोगकर्ता एक लिंक पर मतदान कर सकते हैं, यह सामान्य मतदान नहीं है, क्योंकि मेरे फॉर्म पर यह बहुत सारे लिंक होंगे, इसलिए इसे गतिशील होना चाहिए। मैं डेटाबेस में वोट सहेजता हूं और फिर मतदान करके लिंक को सॉर्ट करता हूं। मैं दो बार या उससे अधिक उपयोगकर्ता वोट को रोकने के लिए आईपी और पीसी नाम दोनों का उपयोग करना चाहता हूं। – Shaahin

+1

न तो आप जो भी करने की कोशिश कर रहे हैं उसके लिए काम करेंगे। एकाधिक उपयोगकर्ता प्रॉक्सी के माध्यम से आ सकते हैं - और इसलिए आप केवल उस प्रॉक्सी के पीछे पहले व्यक्ति को मतदान करने की इजाजत दे देंगे। आप क्लाइंट पर कोड चलाने के बिना वास्तविक मशीन नाम तक नहीं पहुंच सकते हैं, और फिर भी फ्लैश जैसे सामान्य प्लग-इन आपको मदद करने के लिए पर्याप्त मशीन विवरण तक पहुंचने में सक्षम नहीं होंगे। – blowdart

0

एक बार जब आप सक्रिय-एक्स ऑब्जेक्ट के निर्माण की अनुमति के लिए ब्राउज़र सक्षम, IE के लिए आप नीचे दिए गए जावास्क्रिप्ट कोड क्लाइंट कंप्यूटर नाम पाने के लिए लिख सकते हैं:

var WinNetwork = new ActiveXObject("WScript.Network"); 
var ComputerName = WinNetwork.ComputerName; 
3

रूप @blowdark ने लिखा कि यह वास्तव में क्लाइंट मशीन प्राप्त करने के लिए असंभव है नाम और होस्ट नाम क्लाइंट मशीन का नाम नहीं है। चलो देखते हैं कि आपके पास क्या अनुरोध हो सकता है?

  • अनुरोध आईपी पते (टीसीपी/आईपी)
  • HTTP हेडर

सब है कि। आईपी ​​पता एक आईपी है जो आपके इंटरनेट प्रदाता द्वारा दिया जाता है, और मेजबान का नाम कुछ प्रदाता मशीन का नाम है जो इंटरनेट यातायात गुजरता है। आप इंटरनेट प्रदाता नेटवर्क में उपयोगकर्ता मशीन स्थानीय आईपी पते को सरल तरीके से भी नहीं प्राप्त कर सकते हैं।

यदि आपके एप्लिकेशन में बैलेंसर या प्रॉक्सी लोड है तो आपको अनुरोध क्लाइंट आईपी प्राप्त करने के लिए HTTP_X_FORWARDED_FOR शीर्षलेख (डिफ़ॉल्ट रूप से) पढ़ने की आवश्यकता है। लेकिन यह प्रदाता आईपी फिर से है।

तो, अनुरोध आईपी से आपको सामान्य क्लाइंट मशीन नाम सामान्य रूप से नहीं मिल सकता है। HTTP हेडर ब्राउज़र में भी मशीन का नाम पास नहीं होता है। शायद किसी प्रकार के हैक्स के साथ आप मशीन नाम प्रदाता सर्वर से पूछ सकते हैं, लेकिन यह दायरे से बाहर है।

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