2012-03-08 15 views
7

मैं वर्तमान में सी # में एक छोटी चैट उपयोगिता पर काम कर रहा हूं।
समस्या यह है कि मैं यह नहीं समझ सकता कि सभी मशीनों पर किसी विशिष्ट पोर्ट के लिए नेटवर्क को स्कैन कैसे करें। मैं वर्तमान में इस विधिकिसी नेटवर्क पर कनेक्शन के लिए प्रतीक्षा करने वाले पोर्ट के लिए स्कैन कैसे करें

IPGlobalProperties network = IPGlobalProperties.GetIPGlobalProperties(); 
    IEnumerable<IPEndPoint> connections = network.GetActiveTcpListeners() 
                 .Where(x => x.Port == ConstParams.iPort); 

जहां ConstParams.iPort बंदरगाह मैं (यहाँ 6910) स्कैन करना चाहते है उपयोग कर रहा हूँ।

समस्या यह है कि लौटे मूल्यों केवल स्थानीय बंदरगाहों और "0.0.0.0" आईपी पते हैं ...

मैं वर्तमान नेटवर्क पर सभी खुले बंदरगाहों (6910) के लिए कैसे स्कैन कर सकते हैं?

+1

कैसे * nmap * काम करता है आप मदद कर सकते हैं के विवरण में देख रहे हैं। –

उत्तर

9

बल्कि बंदरगाह स्कैनिंग का उपयोग करने से, मैं तुम्हें बहुस्त्र्पीय/प्रसारण संचार के आधार पर एक सरल खोज तंत्र को लागू करने के लिए सुझाव:

यह लेख एक दृष्टिकोण का वर्णन है।

स्टार्टअप के दौरान एप्लिकेशन को अपनी आईपी/पोर्ट जानकारी प्रसारित/मल्टीकास्ट करना चाहिए। सभी चल रहे उदाहरणों को इस संदेश को उनके आईपी/पोर्ट जानकारी के साथ जवाब देना चाहिए। इस प्रकार की खोज तंत्र को कार्यान्वित करना आसान है, और यह रनटाइम में तेज़ और पोर्ट स्कैनिंग दृष्टिकोण से अधिक गतिशील दोनों है।

+0

क्या आप कुछ उदाहरण दिखा सकते हैं? – rkmax

0

GetIPGlobalProperties केवल आपकी स्थानीय मशीन के बारे में जानकारी देता है (http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ipglobalproperties.getipglobalproperties.aspx देखें)।

यह पता लगाने के लिए कि नेटवर्क पर कौन सी मशीनों को बंदरगाह खुला है, आपको उस बंदरगाह पर कनेक्ट करने का प्रयास करने वाले आईपी की एक श्रृंखला के माध्यम से फिर से शुरू करना होगा। इस पर पूछताछ करने के लिए कोई केंद्रीय भंडार नहीं है। http://www.dijksterhuis.org/building-a-simple-portscanner-in-c/

1

आप बहुस्त्र्पीय पर विचार करना चाहिए, बल्कि अपने खुद के रोलिंग से, पुस्तकालय समर्थन के साथ एक मौजूदा मानक पर भरोसा करते हैं, mDNS की तरह: अपने मूल समाधानों में से एक का उपयोग कर, http://en.wikipedia.org/wiki/Multicast_DNS

या जब से तुम ने कहा कि सी #,: http://msdn.microsoft.com/en-us/library/system.net.peertopeer.aspx

1

बंदरगाहों स्कैन एक गरीब पसंद है, तो आप एक हमलावर के रूप में अपने मशीन प्रदर्शित करने के लिए नेटवर्क में मशीनों पर सबसे अधिक संभावना ट्रिगर फायरवॉल जाएगा। नेटवर्क पर किसी भी घुसपैठ का पता लगाने सिस्टम संभावित रूप से ट्रिगर भी हो सकता है। आपको जो चाहिए वह बहुत अधिक है।

मैं करूंगा एक प्रसारण यूडीपी या बहुस्त्र्पीय उपयोग करके अन्य क्लाइंट http://www.codeproject.com/Articles/1705/IP-Multicasting-in-C

को खोजने के लिए करने की सलाह देते एक अन्य विकल्प के लिए एक केंद्रीकृत सर्वर के लिए हो सकता है, या तो एक वेब सर्वर (PHP स्क्रिप्ट, asp.net पृष्ठ, आदि पर) या एक वेब सेवा (आरईएसटी) जो चैट क्लाइंट स्टार्टअप पर कनेक्ट होगा, इसे आईपी/पोर्ट सुन रहा है, और फिर बदले में नेटवर्क पर अन्य ग्राहकों के हाल ही में घोषित आईपी/बंदरगाहों की एक सूची प्राप्त होगी। आप शायद यहां कुछ जीवित रखना चाहते हैं, आईई: क्लाइंट प्रत्येक 5 मिनट में पृष्ठ पर पोस्ट करेगा, यदि कोई आईपी 10 मिनट के लिए पोस्ट नहीं करता है, तो उसे सूची से निकाल दिया जाएगा। http://www.whatismyip.com/faq/automation.asp

तुम बस आईपी पुनः प्राप्त करने के लिए यह करने के लिए एक वेब अनुरोध भेजना चाहते हैं:

मशीन के सार्वजनिक आईपी पाने के लिए, तो आप इस पेज की जाँच कर सकते हैं। यदि आप गैर 0.0.0.0/127.0.0 प्राप्त करना चाहते हैं।स्थानीय इंटरफ़ेस का 1 आईपी, आप इन पदों की जाँच कर सकते हैं:

Get local IP address

How do I get the Local Network IP address of a computer programmatically? (C#)

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

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