मैं खिड़की सेवाओं की सूची और सी # में अपने बंदरगाहों प्राप्त करना चाहते हैं। मैं ServiceController
का उपयोग कर सभी विंडो सेवाओं को प्राप्त करने में सक्षम हूं लेकिन मैं इन सेवाओं के बंदरगाहों को पाने में असमर्थ हूं।मैं विंडोज सेवा द्वारा बंदरगाहों को कैसे खोलूं?
उत्तर
this question on stackoverlow की जांच करें। यह बिल्कुल वही नहीं है जैसा आप पूछ रहे हैं, लेकिन यह GetExtendedTcpTable available through PInvoke नामक एक उपयोगी फ़ंक्शन को इंगित करता है, जो आपको चाहिए जो कर सकता है। this one भी देखें।
समान प्रश्नों के उत्तर हमेशा Iphlpapi का उपयोग कर का प्रस्ताव है, लेकिन यह बिल्कुल स्पष्ट है कि कैसे आप RpcSs (सेवा नाम) मिलेगा इस netstat -ban कॉपी पेस्ट में नहीं है: टीसीपी 0.0.0.0:135 0.0.0.0:0 RpcSs सुन [svchost.exe]
या यहाँ अनुसूची:
टीसीपी [::]: 49,154 [::]: 0 सुन अनुसूची [svchost.exe]
मैंने देखा इसके समाधान के लिए और फिन नहीं किया डी कुछ भी (आसान)। Netstat Iphlpapi में कुछ गैर-दस्तावेजी कार्यों में कॉल लेकिन यह स्पष्ट है कि क्या यह Iphlpapi से सेवा का नाम हो जाता है या किसी भी तरह Iphlpapi से पीआईडी का उपयोग करता है और सेवा का नाम प्राप्त करने के लिए कुछ और का उपयोग करता है नहीं है। मैं वास्तव में एक डिबगर जवाब देने के लिए साथ खर्च समय की कोशिश नहीं कर रहा हूँ इस वजह ..:
हालांकि आदर्श रूप से एक वैसे भी सी # से एक मतदान शैली दृष्टिकोण का उपयोग नहीं करना चाहते। ईटीडब्ल्यू का उपयोग करना अधिक उपयुक्त होगा। मुझे लगता है कि इसका उपयोग सी # से करने के उदाहरणों की कमी है क्योंकि इसके साथ शुरू करने के लिए कुछ ओवरहेड है और आसपास के उदाहरण अन्य प्रकार के ट्रेसिंग/निगरानी परिदृश्यों के लिए विशिष्ट हो सकते हैं।
सारांश: आप समय पर कम कर रहे हैं इस लागू करने के लिए, बस बचत netstat उत्पादन "समाधान" हो रहा है। आदर्श रूप में मुझे किसी भी नेटवर्क कनेक्शन की निगरानी करने के लिए सी # उदाहरण का उपयोग करना आसान लगेगा और यह पता लगाना होगा कि कौन सी सेवा या प्रक्रिया ने उन्हें फ़ायरवॉल परिवर्तनों के साथ संभाला/शुरू किया था। मेरा मानना है कि दोनों ईटीडब्ल्यू के साथ संभव है लेकिन मेरी वर्तमान जरूरतों के लिए उस काम को पाने के लिए आवश्यक अज्ञात समय को उचित ठहराना मुश्किल है। मैं कम से कम पता लगा है कि "लकड़हारा क्वेरी प्रदाताओं" प्रदाताओं को सूचीबद्ध करता है, तो आप (पैकेट पर कब्जा की तरह कुछ मामलों में पता लगाने के लिए और ड्राइवर समर्थन) प्रदाता सक्षम करने के लिए कुछ करने की जरूरत है। ईटीडब्ल्यू का उपयोग करने के लिए एक सी # परियोजना है। लेकिन यह बिल्कुल स्पष्ट नहीं है कि ईटीडब्ल्यू के साथ नेटस्टैट आउटपुट को पुन: पेश करना कितना प्रयास करेगा।
चारों ओर देख के एक बहुत बाद मैंने पाया कि वहाँ undocumented है "OwningModuleInfo" MIB_TCPROW_OWNER_MODULE संरचना में।
फिर उस की तलाश में मैं इस टिप्पणी को मिला:
Weird issue regarding GetOwnerModuleFromTcpEntry when targeting x64
"मैं निष्कर्ष है कि सरणी में पहला आइटम चल रही सेवाओं की सूची में सेवा के सूचकांक है पर पहुँच गए हैं, .. । "
तो सवाल का जवाब तो उपयोग करने के लिए है कि नाम की जानकारी है कि netstat बी शो (सेवा नाम और पता + बंदरगाह), अपने वांछित सेवा के लिए फ़िल्टरिंग प्राप्त करने के लिए किया जाएगा। मैं इस https://github.com/Loriowar/IpHlpApidotnet lib जो संबंधित कोड पहले से ही इस सुविधा के अलावा की स्थापना की गुच्छा है पाया।
अन्य उपयोगी लिंक्स:
Marshalling Struct with Array of Struct Member
https://msdn.microsoft.com/en-us/library/windows/desktop/aa366911(v=vs.85).aspx
आप टीसीपी/UDP पोर्ट क्या मतलब है? –
हां, टीसीपी/यूडीपी पोर्ट्स –