विंडोज़ कमांड लाइन के माध्यम से टीसीपी और यूडीपी पोर्ट कैसे बंद करें


160

क्या कोई जानता है कि विंडोज़ कमांड लाइन के माध्यम से एक कनेक्शन के लिए टीसीपी या यूडीपी सॉकेट को कैसे बंद किया जाए?

इस बारे में गुगली करते हुए, मैंने देखा कि कुछ लोग एक ही बात पूछ रहे हैं। लेकिन जवाब नेटस्टैट या नेटश कमांड के मैनुअल पेज की तरह दिखते थे जो बंदरगाहों की निगरानी करने पर ध्यान देते थे। मैं उन्हें मॉनिटर करने के तरीके पर जवाब नहीं चाहता (मैं पहले से ही ऐसा करता हूं)। मैं उन्हें बंद / मारना चाहता हूं।

EDIT, स्पष्टीकरण के लिए: मान लीजिए कि मेरा सर्वर टीसीपी पोर्ट 80 को सुनता है। एक क्लाइंट कनेक्शन बनाता है और पोर्ट 56789 इसके लिए आवंटित किया जाता है। फिर, मुझे पता चलता है कि यह कनेक्शन अवांछित है (जैसे कि यह उपयोगकर्ता खराब काम कर रहा है, हमने उन्हें रुकने के लिए कहा लेकिन कनेक्शन रास्ते से कहीं नहीं गिरा)। आम तौर पर, मैं नौकरी करने के लिए एक फ़ायरवॉल जोड़ूंगा, लेकिन इसमें कुछ समय लगेगा, और मैं एक आपातकालीन स्थिति में था। कनेक्शन का स्वामित्व करने वाली प्रक्रिया को मारना वास्तव में यहां एक बुरा विचार है क्योंकि यह सर्वर को नीचे ले जाएगा (सभी उपयोगकर्ता कार्यक्षमता खो देंगे जब हम बस इस एक कनेक्शन को चुनिंदा और अस्थायी रूप से छोड़ना चाहते हैं)।


1
क्यों? आप कमांड लाइन, या फ़ाइलों से पोर्ट बंद नहीं कर सकते। आपको उन कार्यक्रमों को बंद करना होगा जो उनके खुद के हैं। या आप फ़ायरवॉल संचालन की बात कर रहे हैं? आपका प्रश्न अस्पष्ट है।
लोर्न

9
मैं डाउन वोट समझ सकता हूं। लेकिन करीबी वोट क्यों? यह प्रश्न वैध है।
विक्टर स्टैफुसा

37
@ ईजेपी: यह एक वास्तविक प्रश्न है, क्योंकि मैं कुछ मांग रहा था और एक उत्तर की उम्मीद कर रहा था (भले ही जवाब एक भ्रामक था "नहीं, आप ऐसा नहीं कर सकते")। और, इसका उत्तर दिया गया और मैंने एक उत्तर स्वीकार कर लिया। अधिक, यहां तक ​​कि आपके "यह नहीं किया जा सकता है" एक वैध उत्तर भी है। इस प्रकार, यह प्रश्न मान्य है।
विक्टर स्टैफुसा

1
@EJP कृपया इस तरह का जवाब न दें, हमारे पास यहां पर पर्याप्त लोग हैं, जो एक रूप में या किसी अन्य, मूल रूप से 'कहते हैं कि अगर आपको पता था कि आप उस सवाल को नहीं पूछेंगे' - मुझे यकीन है कि आप मूर्खतापूर्ण देख सकते हैं उसका।
चाल्की

जवाबों:


65

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

यह भी विचार करें कि फ़िडलर और डेस्कटॉप वीपीएन सॉफ़्टवेयर खुद को नेटवर्क स्टैक में सम्मिलित कर सकते हैं और आपको अपने सभी ट्रैफ़िक को दिखा सकते हैं या आपके सभी ट्रैफ़िक को फिर से जोड़ सकते हैं।

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

कम से कम एक प्रोग्राम ( CurrPorts ) है जो ठीक यही करता है और मैंने इसका इस्तेमाल आज CurrPorts शुरू होने से पहले शुरू की गई प्रक्रिया पर विशिष्ट सॉकेट्स को बंद करने के उद्देश्य से किया। ऐसा करने के लिए, आपको इसे व्यवस्थापक के रूप में चलाना होगा।

ध्यान दें कि किसी प्रोग्राम को पोर्ट पर न सुनने का कारण आसानी से संभव नहीं है (ठीक है, यह संभव है लेकिन उस क्षमता को फ़ायरवॉल के रूप में संदर्भित किया जाता है ...), लेकिन मुझे नहीं लगता कि यहां पूछा जा रहा था। मेरा मानना ​​है कि सवाल यह है कि मैं अपने प्रोग्राम को सुन रहे पोर्ट पर एक सक्रिय कनेक्शन (सॉकेट) कैसे चुन सकता हूं? प्रश्न का शब्दांकन थोड़ा बंद है क्योंकि अवांछित इनबाउंड क्लाइंट कनेक्शन के लिए एक पोर्ट नंबर दिया गया है और इसे "पोर्ट" के रूप में संदर्भित किया गया है, लेकिन यह बहुत स्पष्ट है कि यह उस सॉकेट और श्रवण पोर्ट का संदर्भ था।


3
हां, CP एक अद्भुत उपकरण है: CurrPorts.exe / close <स्थानीय पता> <स्थानीय पोर्ट> <रिमोट एड्रेस> <रिमोट पोर्ट> {प्रोसेस नाम} यह रेखा होगी: CurrPorts.exe / close * 56789 * * सर्वर। exe
जेसनएक्सए

CurrPorts किसी प्रक्रिया से आने वाले UDP मल्टीकास्ट कनेक्शन को बंद करने में सक्षम नहीं प्रतीत होते हैं
george_h

143
  1. खुला हुआ cmd

    • में टाइप करें netstat -a -n -o

    • खोजें TCP [the IP address]:[port number] .... #[target_PID]#(यूडीपी के लिए डिट्टो)

    • (Btw, kill [target_PID]मेरे लिए काम नहीं किया)

  2. CTRL + ALT + DELETE और "स्टार्ट टास्क मैनेजर" चुनें

    • "प्रक्रिया" टैब पर क्लिक करें

    • "PID" कॉलम को सक्षम करें: पर जाएं> कॉलम चुनें> PID के लिए बॉक्स चेक करें

    • ब्याज की पीआईडी ​​खोजें और "END प्रक्रिया"

  3. अब आप सर्वर को [आईपी पते]: [पोर्ट नंबर] पर एक समस्या के बिना पुन: चला सकते हैं


8
आप जो कह रहे हैं वह सिर्फ सर्वर प्रक्रिया को मारना है और इसे फिर से जोड़ना है, जो कुछ ऐसा है जिससे मैं बचना चाहता था, क्योंकि यह सर्वर से हर कनेक्शन को हटा देगा, न कि केवल अवांछित।
विक्टर स्टैफुसा

7
क्षमा करें, मैंने आपके विशिष्ट प्रश्न को हल करने में मदद नहीं की। मैं सिर्फ अपना उत्तर प्रदान कर रहा था क्योंकि आपका प्रश्न तब दिखा जब मैं एक विंडोज़ पोर्ट को बस बंद करने के लिए जा रहा था, और सोचा कि यह उन लोगों के लिए भी उपयोगी हो सकता है जिनके पास मेरा मुद्दा था। :)
हाओकी ली

2
@HaoQiLi, आप बस सब कुछ और कुछ भी समाप्त नहीं कर सकते। ईजी Systemप्रक्रिया जो विंडोज़ नेटवर्क कनेक्शन को संभालती है।
पचेरियर

2
@HaoQiLi मुझे लगता है कि हम बंद कर सकते हैं taskkill /pid 6168 /f6168 का उपयोग कर सकते हैं पिड
माधव प्रियंशा

9
जब इस सवाल का स्पष्ट रूप से उल्लेख किया गया है, तो हास्यास्पद है कि इस सवाल का जवाब पूरी प्रक्रिया नहीं है!
माइक

59

उदाहरण के लिए, आप पोर्ट 8080 को मुक्त करना चाहते हैं फिर, इन आदेशों का पालन करें।

 netstat -ano
 taskkill /f /im [PID of the port 8080 got from previous command]

किया हुआ!


5
Thanx। केवल आपके समाधान से मुझे मदद मिली।
vvator

1
ठीक है, यह पीआईडी ​​का पता लगाने की कोशिश करते समय वास्तव में पीआईडी ​​को प्रिंट करने में मदद करता है। (ये लोग कौन हैं?)।
एड्रियन एम।

3
यह भी उल्लेख पोर्ट की प्रक्रिया को मार रहा है और सिर्फ पोर्ट को बंद नहीं कर रहा है।
NDestiny

1
यह मददगार है।
तुरल असगर

मैंने विंडोज 10 पर परीक्षण किया और यह टीसीपी कनेक्शन को नहीं मारता बल्कि पूरी प्रक्रिया या थ्रेड का उपयोग करता है। जैसा कि विक्टर ने कहा कि यह उसका लक्ष्य नहीं है।
सेबेस्टियन

53

यदि आप उस पोर्ट को जानते हैं जिसे आप मुक्त करना चाहते हैं तो आप इस तरह से निर्दिष्ट पोर्ट की तलाश करके अपनी नेटस्टैट सूची को सॉर्ट कर सकते हैं:

netstat -ano | findstr :8080

तब पीड रिग में दिखाई देगा जिसे आप टास्ककिल से मार सकते हैं।

यहां छवि विवरण दर्ज करें

taskkill/pid 11704 /F

इसके अलावा आप इस प्रश्न को देखना चाहते हैं, जो विशेष रूप से लोकलहोस्ट के लिए है, लेकिन मुझे लगता है कि यह प्रासंगिक है:


मैंने विंडोज 10 पर परीक्षण किया और यह टीसीपी कनेक्शन को नहीं मारता बल्कि पूरी प्रक्रिया या थ्रेड का उपयोग करता है। जैसा कि विक्टर ने कहा कि यह उसका लक्ष्य नहीं है।
सेबेस्टियन

27

TCPView ( http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx ) या CurrPorts ( http://www.nirsoft.net/utils/cports.html ) का उपयोग करें ) का उपयोग करें।

वैकल्पिक रूप से, यदि आप बाहरी सॉफ़्टवेयर का उपयोग नहीं करना चाहते हैं (इन उपकरणों को रास्ते में स्थापना की आवश्यकता नहीं है), तो आप बस नेटस्टैट कमांड (अधिमानतः नेटस्टैट-बी) और फिर आईपी को ब्लॉक करने के लिए स्थानीय सुरक्षा नीति सेटअप कर सकते हैं। प्रश्न में उपयोगकर्ता की मशीन का पता, कि मैं अवांछित या यहां तक ​​कि अज्ञात कनेक्शन के साथ क्या कर रहा हूं - जो आपको किसी भी बाहरी सॉफ़्टवेयर के बिना सब कुछ करने की अनुमति देता है (सब कुछ विंडोज के साथ आता है) ...


2
यह सही उत्तर है, और पूरी तरह से Microsoft समर्थित है।
दान बोनाशे

मेरे लिए भी काम किया। मैंने स्थानीय सुरक्षा नीति -> स्थानीय कंप्यूटर पर IPSecurity नीतियाँ का उपयोग किया। यूआई काफी सहज है।
प्यूटरेटो बोरेटो

1
यह जानने की कोशिश की, करीबी कनेक्शन ipv6 के लिए तैयार है, यदि कोई हो तो ipv6 को बंद करने का विकल्प क्या है?
jjxtra


7

आप उन सॉकेट्स को संसाधित करने वाली प्रक्रिया को बंद किए बिना सॉकेट बंद नहीं कर सकते। सॉकेट्स उस प्रक्रिया के स्वामित्व में हैं जिसने उन्हें खोला है। तो यूनिक्स / लिनक्स के लिए प्रक्रिया आईडी (पीआईडी) का पता लगाने के लिए। नेटस्टैट का उपयोग करें जैसे:

netstat -a -n -p -l

जो कुछ इस तरह छपेगा:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State     PID/Program name   
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN     1879/sendmail: acce 
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN     1860/xinetd         

जहां -एक सभी सॉकेट्स को प्रिंट करता है, -n पोर्ट नंबर दिखाता है, -p पीआईडी ​​दिखाता है, -एलएल केवल वही दिखाता है जो सुन रहा है (यह आपके लिए क्या है इसके आधार पर वैकल्पिक है)।

वास्तविक जानकारी जो आप चाहते हैं वह पीआईडी ​​है। अब हम उस प्रक्रिया को बंद कर सकते हैं:

kill 1879

यदि आप ऐसी सेवा को बंद कर रहे हैं जिसका उपयोग करना बेहतर है:

service sendmail stop

मारना वस्तुतः उस प्रक्रिया को मारता है और जो भी बच्चे इसके मालिक हैं। सेवा कमांड का उपयोग init.d निर्देशिका में पंजीकृत शटडाउन स्क्रिप्ट को चलाता है। यदि आप किसी सेवा पर किल का उपयोग करते हैं तो यह ठीक से वापस शुरू नहीं हो सकता क्योंकि आपने इसे ठीक से बंद नहीं किया था। यह सिर्फ सेवा पर निर्भर करता है।

दुर्भाग्य से, मैक इस संबंध में लिनक्स / यूनिक्स से अलग है। आप netstat का उपयोग नहीं कर सकते। इस ट्यूटोरियल को पढ़ें यदि आप मैक में रुचि रखते हैं:

http://www.tech-recipes.com/rx/227/find-out-which-process-is-holding-which-socket-open/

और अगर आप विंडोज पर हैं तो टास्कमैनेजर का उपयोग प्रक्रियाओं को मारने के लिए, और सेवाओं को बंद करने के लिए यूआई को सेवाओं के लिए किया जा सकता है। पीआईडी ​​की पहचान करने के लिए आप लिनक्स / यूनिक्स की तरह विंडोज पर नेटस्टैट का उपयोग कर सकते हैं।

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/netstat.mspx?mfr=true


उन्होंने अपने प्रश्न के बारे में स्पष्टीकरण दिया है जो दूरस्थ क्लाइंट सॉकेट है जिसे अन्य उपकरणों के साथ बंद किया जा सकता है जैसा कि अन्य ने बताया है। यह उत्तर ज्यादातर सर्वर सॉकेट्स पर केंद्रित होता है, जो (ओएस के अंदर चारों ओर फ़िडिंग के बिना) नहीं हो सकता। यह एक सर्वर सॉकेट के स्वामित्व वाली प्रक्रिया को साफ करने का तरीका है, जो कि यदि आप पोर्ट करना चाहते हैं तो आप क्या करना चाहते हैं। लेकिन, अगर आपके पास अपने सर्वर के बहुत सारे इनकमिंग कनेक्शन हैं जो एक अलग स्थिति है और आप निश्चित रूप से उन लोगों को मार सकते हैं। यह गलत नहीं है कि ओपी क्या पूछ रहा है।
चुबोंसॉन्डबस

आपको "प्रक्रिया को मारना" भाग को हटा देना चाहिए, क्योंकि यह प्रश्न का उत्तर नहीं है। आप ट्रैफ़िक को रोकने के लिए नेटवर्क-एडॉप्टर को भी रोक सकते थे लेकिन यह अभी भी सॉकेट को नहीं मारता है!
सेबेस्टियन

उत्तर केवल ipv6 के लिए सही है, ipv4 के लिए आप SetTcpEntry
jjxtra

5

CurrPorts (यह मुफ़्त है और कोई स्थापित नहीं) का उपयोग करें: http://www.nirsoft.net/utils/cports.html

/close <Local Address> <Local Port> <Remote Address> <Remote Port> {Process Name}

उदाहरण:

# Close all connections with remote port 80 and remote address 192.168.1.10: 
/close * * 192.168.1.10 80
# Close all connections with remote port 80 (for all remote addresses): 
/close * * * 80
# Close all connections to remote address 192.168.20.30: 
/close * * 192.168.20.30 *
# Close all connections with local port 80: 
/close * 80 * *
# Close all connections of Firefox with remote port 80: 
/close * * * 80 firefox.exe

इसमें एक अच्छा GUI भी है खोज और फ़िल्टर सुविधाओं के साथ है।

नोट: यह उत्तर हंटारो और जेसनक्सा का उत्तर और टिप्पणी एक साथ रखा गया है और पाठकों के लिए इसे आसान बनाने के लिए सरलीकृत किया गया है। उदाहरण CurrPorts के वेब पेज से आते हैं।


3

आप उन सॉकेट्स के मालिक के बिना अपने सर्वर पर सॉकेट्स को बंद नहीं कर सकते हैं इसलिए आप वास्तव में सॉकेट को बंद नहीं कर सकते हैं बिना उस प्रक्रिया में चल रहे कोड के बिना जो सर्वर सॉकेट का मालिक है।

हालांकि, एक और विकल्प है जो क्लाइंट को अपना सॉकेट बंद करने के लिए कह रहा है। ग्राहक जिस पोर्ट पर कनेक्ट हो रहा है उस पोर्ट पर RST TCP पैकेट भेजना क्लाइंट को उनके कनेक्शन को छोड़ने का कारण बनेगा। आप ऐसा कर सकते हैं कि RST स्कैनिंग के साथ nmap का उपयोग करें।

http://nmap.org/


यह एक बेहतर जवाब है तो आपका पिछला जवाब! धन्यवाद!
सेबेस्टियन


2

wkillcx कमांड लाइन से tcp कनेक्शन को मारने के लिए एक विश्वसनीय विंडोज़ कमांड लाइन टूल है जिसका उल्लेख नहीं किया गया है। यह सर्वर के साथ बड़ी संख्या में कनेक्शन के साथ कभी-कभी समस्या है। मैं कभी-कभी इंटरैक्टिव किल्स के लिए tcpview का उपयोग करता हूं लेकिन स्क्रिप्ट में wkillcx का उपयोग किया जा सकता है।



1

पोर्ट को बंद करने के लिए आप इस प्रक्रिया को पहचान सकते हैं जो इस पोर्ट पर सुन रही है और इस प्रक्रिया को मार सकती है।


2
@ विक्टर, मैंने इसे देखा, लेकिन प्रक्रिया को नीचे लाए बिना एक बंदरगाह को जबरन बंद करने का कोई तरीका नहीं है। एक अन्य संभावना सर्वर प्रोग्राम को इस तरह से लिखना है कि आपके पास कुछ प्रकार का नियंत्रण कक्ष हो जब आप ग्राहकों की निगरानी और प्रशासन कर सकते हैं।
डारिन दिमित्रोव

1
इसके अलावा, यदि वह इंटरफ़ेस जिस पर सॉकेट सुन रहा है, नीचे लाया जाता है, तो सॉकेट बंद हो जाएगा।
12

मेरा मानना ​​है कि वह एक उदाहरण के लिए पूछ रहा था।
ईयोएलडी

@rustyx धन्यवाद! यही मैंने सोचा था कि यह सब "प्रक्रिया को मार डालो" उत्तरों को पढ़ने के बाद ... लेकिन उसका जवाब केवल एक सुझाव है, इसलिए यह मेरे लिए ठीक है (लेकिन एक अच्छा जवाब नहीं), अन्य उत्तर ऐसे हैं जैसे कि इसे करने का कोई तरीका नहीं है।
सेबेस्टियन

1

आप sysinternal से tcpview जैसे प्रोग्राम का उपयोग कर सकते हैं। मुझे लगता है कि यह अवांछित कनेक्शन की निगरानी और हत्या दोनों पर आपकी बहुत मदद कर सकता है।


1

CurrPorts ने हमारे लिए काम नहीं किया और हम केवल ssh के माध्यम से सर्वर तक पहुंच सकते हैं, इसलिए कोई TCPView भी नहीं। हम इस प्रक्रिया को नहीं मार सकते थे, जैसे कि अन्य कनेक्शन नहीं छोड़ते। हमने जो किया वह समाप्त हो गया और सुझाव नहीं दिया गया था कि विंडोज के फ़ायरवॉल पर कनेक्शन को ब्लॉक करना है। हां, यह नियम को फिट करने वाले सभी कनेक्शनों को अवरुद्ध कर देगा , लेकिन हमारे मामले में एक ही कनेक्शन था (हम जिस में रुचि रखते थे):

netsh advfirewall firewall add rule name="Conn hotfix" dir=out action=block protocol=T
CP remoteip=192.168.38.13

आईपी ​​को अपनी ज़रूरत के अनुसार बदलें और यदि आवश्यक हो तो अन्य नियम जोड़ें।


0

तत्काल / व्यवहार्य / आंशिक उत्तर : https://stackoverflow.com/a/20130959/2584794

पिछले उत्तर के विपरीत, जहां netstat -a -o -n का उपयोग किया गया था, अविश्वसनीय रूप से लंबी सूची का उपयोग किए बिना आवेदन के नाम के बिना देखा जाना था। बंदरगाहों


5
यह लगभग वही है जो हाओकी ली का जवाब है। यह हर कनेक्शन को छोड़ने वाली सर्वर प्रक्रिया को मार डालेगा, न कि केवल अवांछित चीज को। चुनौती सिर्फ अवांछनीय को छोड़ने की है और इससे ज्यादा कुछ नहीं।
विक्टर स्टैफुसा

मैं विक्टर से सहमत हूं। यह सवाल का जवाब नहीं है। इसलिए आप नेटवर्क-एडेप्टर को भी निष्क्रिय कर सकते हैं ...
सेबस्टियन

-3

हां, टीसीपी या यूडीपी पोर्ट को बंद करना संभव है, डॉस में एक कमांड है

TASKKILL /f /pid 1234 

मुझे उम्मीद है कि यह आपके लिए काम करेगा


मैंने विंडोज 10 पर परीक्षण किया और यह टीसीपी कनेक्शन को नहीं मारता बल्कि पूरी प्रक्रिया या थ्रेड का उपयोग करता है। जैसा कि विक्टर ने कहा कि यह उसका लक्ष्य नहीं है।
सेबेस्टियन

-3

यदि आप विंडोज 8, `विंडोज सर्वर 2012 या इसके बाद के संस्करण के ऊपर स्थापित PowerShell v4 के साथ, आप नीचे स्क्रिप्ट का उपयोग कर सकते हैं। यह पोर्ट से जुड़ी प्रक्रियाओं को ढूंढता है और उन्हें समाप्त करता है।

कोड

#which port do you want to kill
[int]$portOfInterest = 80

#fetch the process ids related to this port
[int[]]$processId = Get-NetTCPConnection -LocalPort $portOfInterest | 
    Select-Object -ExpandProperty OwningProcess -Unique | 
    Where-Object {$_ -gt 0} 

#kill those processes
Stop-Process -Id $processId 

प्रलेखन:


मैंने विंडोज 10 पर परीक्षण किया और यह टीसीपी कनेक्शन को नहीं मारता बल्कि पूरी प्रक्रिया या थ्रेड का उपयोग करता है। जैसा कि विक्टर ने कहा कि यह उसका लक्ष्य नहीं है।
सेबेस्टियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.