it-swarm.com.de

So schließen Sie TCP - und UDP-Ports über die Windows-Befehlszeile

Weiß jemand, wie man einen TCP - oder UDP-Socket für eine einzelne Verbindung über die Windows-Befehlszeile schließt?

Als ich darüber googelte, sah ich einige Leute, die dasselbe fragten. Die Antworten sahen jedoch wie eine Handbuchseite mit netstat- oder netsh-Befehlen aus, die sich mit der Überwachung der Ports befassten. Ich möchte keine Antworten, wie ich sie überwachen soll (das mache ich bereits). Ich möchte sie schließen/töten.

BEARBEITEN, zur Verdeutlichung: Nehmen wir an, mein Server lauscht TCP Port 80. Ein Client stellt eine Verbindung her und Port 56789 wird ihm zugewiesen. Dann stelle ich fest, dass diese Verbindung unerwünscht ist (z. B. macht dieser Benutzer schlechte Dinge. Wir haben ihn gebeten, die Verbindung zu beenden, aber die Verbindung wurde unterwegs nicht unterbrochen). Normalerweise fügte ich eine Firewall hinzu, um die Aufgabe zu erledigen, aber dies dauerte einige Zeit, und ich befand mich in einer Notsituation. Das Beenden des Prozesses, der die Verbindung besitzt, ist hier wirklich eine schlechte Idee, da dadurch der Server heruntergefahren würde (alle Benutzer würden die Funktionalität verlieren, wenn wir nur diese eine Verbindung selektiv und vorübergehend trennen möchten).

133
Victor Stafusa

Ja, das ist möglich. Sie müssen nicht der aktuelle Prozess sein, der den Socket besitzt, um ihn zu schließen. Bedenken Sie für einen Moment, dass der Remote-Computer, die Netzwerkkarte, das Netzwerkkabel und Ihr Betriebssystem dazu führen können, dass der Socket geschlossen wird.

Bedenken Sie auch, dass sich Fiddler und die Desktop VPN-Software in den Netzwerkstapel einfügen und Ihnen den gesamten Datenverkehr anzeigen oder den gesamten Datenverkehr umleiten können.

Alles, was Sie wirklich brauchen, ist, dass Windows entweder eine API bereitstellt, die dies direkt ermöglicht, oder dass jemand ein Programm geschrieben hat, das wie ein VPN oder ein Fiddler funktioniert und Ihnen die Möglichkeit gibt, Sockets zu schließen, die es passieren.

Es gibt mindestens ein Programm ( CurrPorts ), das genau dies tut, und ich habe es heute verwendet, um bestimmte Sockets in einem Prozess zu schließen, der vor dem Start von CurrPorts gestartet wurde. Dazu müssen Sie es natürlich als Administrator ausführen.

Beachten Sie, dass es wahrscheinlich nicht einfach ist, ein Programm dazu zu bringen, einen Port nicht abzuhören (naja, es ist möglich, dass diese Funktion als Firewall bezeichnet wird ...), aber ich glaube nicht, dass dies hier gefragt wurde. Ich glaube, die Frage lautet "Wie schließe ich selektiv eine aktive Verbindung (Socket) zu dem Port, den mein Programm abhört?". Der Wortlaut der Frage ist etwas unpassend, da eine Portnummer für die unerwünschte eingehende Client-Verbindung angegeben wurde und diese als "Port" bezeichnet wurde. Es ist jedoch ziemlich klar, dass es sich um einen Verweis auf diesen einen Socket und nicht um den abhörenden Port handelte.

58
huntharo
  1. öffne cmd

    • tippe netstat -a -n -o ein

    • find TCP [the IP address]:[port number] .... #[target_PID]# (ebenso für UDP)

    • (Btw, kill [target_PID] hat bei mir nicht funktioniert)

  2. STRG + ALT + ENTF und wählen Sie "Task-Manager starten"

    • Klicken Sie auf die Registerkarte "Prozesse"

    • Aktivieren Sie die Spalte "PID" unter: Ansicht> Spalten auswählen> Aktivieren Sie das Kontrollkästchen für PID

    • Finden Sie die PID von Interesse und "END PROCESS"

  3. Jetzt können Sie den Server unter [der IP-Adresse]: [Portnummer] problemlos erneut ausführen

121
HaoQi Li

Zum Beispiel möchten Sie den Port 8080 freigeben. Befolgen Sie dann diese Befehle.

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

Getan!

41
Rahul Lakhanpal

Wenn Sie den Port kennen, den Sie freigeben möchten, können Sie Ihre Netstat-Liste sortieren, indem Sie nach dem angegebenen Port wie folgt suchen:

netstat -ano | findstr :8080

Dann erscheint die PID an der richtigen Stelle, die Sie mit taskkill töten können.

enter image description here

taskkill/pid 11704 /F

Vielleicht möchten Sie sich auch dieses Frage ansehen, das speziell für localhost bestimmt ist, aber ich denke, es ist relevant:

34
Felipe Centeno

Probieren Sie das sysinternals/Microsoft-Tool tcpview (gui) und Tcpvcon (Kommandozeile)

23
Patrick

Verwenden Sie TCPView ( http://technet.Microsoft.com/en-us/sysinternals/bb897437.aspx ) oder CurrPorts ( http://www.nirsoft.net/utils/cports) .html ).

Wenn Sie keine EXTERNE SOFTWARE verwenden möchten (für diese Tools ist übrigens keine Installation erforderlich), können Sie den Befehl netstat (vorzugsweise netstat -b) einfach ZUERST ausführen und dann die lokale Sicherheitsrichtlinie einrichten, um die IP-Adresse zu blockieren Adresse des fraglichen Benutzers, das ist, was ich mit unerwünschten oder sogar unbekannten Verbindungen getan habe - das ermöglicht es Ihnen, alles OHNE EXTERNE SOFTWARE zu tun (alles kommt mit Windows) ...

22
Vman

Sie können Sockets nicht schließen, ohne den Prozess herunterzufahren, der diese Sockets besitzt. Sockets gehören dem Prozess, der sie geöffnet hat. So finden Sie die Prozess-ID (PID) für Unix/Linux. Verwenden Sie netstat wie folgt:

netstat -a -n -p -l

Das wird ungefähr so ​​aussehen:

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         

Wobei -a alle Sockets ausgibt, -n die Portnummer angibt, -p die PID angibt, -l nur anzeigt, was gehört (dies ist optional, je nachdem, wonach Sie suchen).

Die wirkliche Information, die Sie wollen, ist PID. Jetzt können wir diesen Prozess beenden, indem wir Folgendes tun:

kill 1879

Wenn Sie einen Dienst herunterfahren, ist es besser, Folgendes zu verwenden:

service sendmail stop

Töten tötet buchstäblich genau diesen Prozess und alle Kinder, die ihm gehören. Mit dem Befehl service wird das im Verzeichnis init.d registrierte Skript zum Herunterfahren ausgeführt. Wenn Sie kill für einen Dienst verwenden, wird er möglicherweise nicht ordnungsgemäß gestartet, da Sie ihn nicht ordnungsgemäß heruntergefahren haben. Es kommt nur auf den Service an.

Leider unterscheidet sich Mac in dieser Hinsicht von Linux/Unix. Sie können netstat nicht verwenden. Lesen Sie dieses Tutorial, wenn Sie sich für Mac interessieren:

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

Wenn Sie unter Windows arbeiten, können Sie mithilfe von TaskManager Prozesse beenden und mithilfe der Benutzeroberfläche von Diensten Dienste beenden. Sie können netstat unter Windows genau wie Linux/Unix verwenden, um die PID zu identifizieren.

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

6
chubbsondubs

Verwenden Sie CurrPorts (kostenlos und ohne Installation): http://www.nirsoft.net/utils/cports.html

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

Beispiele:

# 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

Es hat auch eine schöne GUI mit Such- und Filterfunktionen.

Hinweis: Bei dieser Antwort handelt es sich um die Antwort und den Kommentar von huntharo und JasonXA, die zusammengefasst und vereinfacht wurden, um es den Lesern zu erleichtern. Beispiele stammen von der Webseite von CurrPorts.

4
qwertzguy

Sie können Sockets auf Ihrem Server nicht schließen, ohne diese Sockets zu besitzen. Sie können den Socket also nicht schließen, ohne dass Code in dem Prozess ausgeführt wird, der den Server-Socket besitzt.

Es gibt jedoch eine andere Option, die den Client auffordert, seinen Socket zu schließen. Wenn Sie ein RST TCP -Paket an den Port senden, über den der Client eine Verbindung herstellt, wird die Verbindung vom Client getrennt. Sie können dies mit dem RST-Scannen mit nmap tun.

http://nmap.org/

3
chubbsondubs

wkillcx ist ein zuverlässiges Windows-Befehlszeilentool zum Beenden von TCP-Verbindungen über die Befehlszeile, das noch nicht erwähnt wurde. Es gibt jedoch manchmal Probleme mit Servern mit einer großen Anzahl von Verbindungen. Ich benutze manchmal tcpview für interaktive Kills, aber wkillcx kann in Skripten verwendet werden.

2
user3310805

Ich habe die richtige Antwort auf diese Frage gefunden. Testen Sie TCPView von Sysinternals, das jetzt Microsoft gehört. Sie finden es unter http://technet.Microsoft.com/en-us/sysinternals/bb897437

2
Michael Mueller

Um den Port zu schließen können Sie den Prozess identifizieren, der diesen Port überwacht, und diesen Prozess beenden.

1
Darin Dimitrov

sie können ein Programm wie tcpview von sysinternal verwenden. Ich denke, es kann Ihnen sehr helfen, unerwünschte Verbindungen zu überwachen und zu beenden.

1
Mochan

sofortige/durchführbare/teilweise Antwort : https://stackoverflow.com/a/20130959/2584794

Im Gegensatz zu der vorherigen Antwort, in der netstat -a -o -n unglaublich verwendet wurde, sollte lange Liste ohne den Namen der Anwendung untersucht werden, die diese Ports verwendet

0
Anup