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 manuelle Seite mit netstat- oder netsh-Befehlen aus, die sich auf die Überwachung der Ports konzentrierten. Ich möchte keine Antworten darauf, wie ich sie überwachen soll (das mache ich bereits). Ich möchte sie schließen / töten.
EDIT zur Verdeutlichung: Nehmen wir an, mein Server überwacht den 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. wenn dieser Benutzer schlechte Dinge tut, haben wir ihn gebeten, die Verbindung zu beenden, aber die Verbindung wurde unterwegs nicht unterbrochen). Normalerweise würde ich eine Firewall hinzufügen, um die Arbeit zu erledigen, aber dies würde einige Zeit dauern und ich war in einer Notsituation. Das Beenden des Prozesses, dem die Verbindung gehört, ist hier wirklich eine schlechte Idee, da dies den Server herunterfahren würde (alle Benutzer würden die Funktionalität verlieren, wenn wir nur diese eine Verbindung selektiv und zeitlich trennen möchten).
quelle
Antworten:
Ja, das ist möglich. Sie müssen nicht der aktuelle Prozess sein, dem der Socket gehört, um ihn zu schließen. Denken Sie für einen Moment daran, 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 die Fiddler- und Desktop-VPN-Software in den Netzwerkstapel einfügen und Ihnen den gesamten Datenverkehr anzeigen oder den gesamten Datenverkehr umleiten kann.
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 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 für einen 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 (nun, es ist möglich, aber diese Funktion wird als Firewall bezeichnet ...), 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 falsch, da eine Portnummer für die unerwünschte eingehende Clientverbindung angegeben wird und als "Port" bezeichnet wurde, aber es ist ziemlich klar, dass es sich um einen Verweis auf diesen einen Socket und nicht auf den Überwachungsport handelt.
quelle
öffnen
cmd
eintippen
netstat -a -n -o
find
TCP [the IP address]:[port number] .... #[target_PID]#
(dito für UDP)(Übrigens
kill [target_PID]
hat bei mir nicht funktioniert)STRG + ALT + LÖSCHEN und wählen Sie "Task-Manager starten"
Klicken Sie auf die Registerkarte "Prozesse"
Aktivieren Sie die Spalte "PID", indem Sie zu: Ansicht> Spalten auswählen> Aktivieren Sie das Kontrollkästchen für PID
Finden Sie die PID von Interesse und "END PROCESS"
Jetzt können Sie den Server unter [der IP-Adresse]: [Portnummer] problemlos erneut ausführen
quelle
System
Prozess, der die Windows-Netzwerkverbindungen verwaltet.taskkill /pid 6168 /f
6168 verwenden ist dieZum Beispiel möchten Sie den Port 8080 freigeben. Befolgen Sie dann diese Befehle.
Getan!
quelle
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:
Dann erscheint die PID an der Stelle, die Sie mit Taskkill töten können.
Vielleicht möchten Sie sich auch diese Frage ansehen , die speziell für localhost bestimmt ist, aber ich denke, sie ist relevant:
quelle
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 (diese Tools erfordern übrigens keine Installation), können Sie alternativ zuerst den Befehl netstat (vorzugsweise netstat -b) ausführen und dann die lokale Sicherheitsrichtlinie einrichten, um die IP zu blockieren Adresse des betreffenden Computers des Benutzers, das habe ich mit unerwünschten oder sogar unbekannten Verbindungen gemacht - damit können Sie alles OHNE EXTERNE SOFTWARE ausführen (alles wird mit Windows geliefert) ...
quelle
Probieren Sie das Sysinternals / Microsoft-Tool tcpview (GUI) und Tcpvcon (Befehlszeile) aus.
quelle
Sie können Sockets nicht schließen, ohne den Prozess herunterzufahren, dem diese Sockets gehören. Sockets gehören dem Prozess, der sie geöffnet hat. So finden Sie die Prozess-ID (PID) für Unix / Linux heraus. Verwenden Sie netstat wie folgt:
Das wird so etwas wie drucken:
Wobei -a alle Sockets druckt, -n die Portnummer anzeigt, -p die PID anzeigt, -l nur anzeigt, was zuhört (dies ist optional, je nachdem, was Sie suchen).
Die eigentliche Information, die Sie wollen, ist PID. Jetzt können wir diesen Prozess beenden, indem wir Folgendes tun:
Wenn Sie einen Dienst herunterfahren, ist es besser, Folgendes zu verwenden:
Töten tötet buchstäblich nur diesen Prozess und alle Kinder, die es besitzt. Mit dem Dienstbefehl wird das im Verzeichnis init.d registrierte Shutdown-Skript ausgeführt. Wenn Sie kill für einen Dienst verwenden, wird er möglicherweise nicht ordnungsgemäß neu 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, verwenden Sie TaskManager, um Prozesse zu beenden, und die Benutzeroberfläche für Dienste, um Dienste herunterzufahren. 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
quelle
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:
Es hat auch eine schöne GUI mit Such- und Filterfunktionen.
Hinweis: Diese Antwort ist die Antwort und der Kommentar von huntharo und JasonXA, die zusammengestellt und vereinfacht wurden, um es den Lesern zu erleichtern. Beispiele stammen von der CurrPorts-Webseite.
quelle
Sie können Sockets auf Ihrem Server nicht schließen, ohne diese Sockets zu besitzen. Daher können Sie den Socket nicht schließen, ohne dass Code in dem Prozess ausgeführt wird, dem der Server-Socket gehört.
Es gibt jedoch eine andere Option, die den Client anweist, seinen Socket zu schließen. Durch das Senden eines RST-TCP-Pakets an den Port, an dem der Client eine Verbindung herstellt, wird die Verbindung vom Client getrennt. Sie können dies mit RST-Scannen mit nmap tun.
http://nmap.org/
quelle
Ich habe die richtige Antwort auf diese Frage gefunden. Probieren Sie TCPView von Sysinternals aus, das jetzt Microsoft gehört. Sie finden es unter http://technet.microsoft.com/en-us/sysinternals/bb897437
quelle
wkillcx ist ein zuverlässiges Windows-Befehlszeilentool zum Beenden von TCP- Verbindungen über die nicht erwähnte Befehlszeile. 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.
quelle
Um den Port zu schließen, können Sie den Prozess identifizieren, der diesen Port überwacht, und diesen Prozess beenden.
quelle
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.
quelle
CurrPorts hat bei uns nicht funktioniert und wir konnten nur über ssh auf den Server zugreifen, also auch nicht über TCPView. Wir konnten den Prozess auch nicht beenden, um andere Verbindungen nicht zu trennen. Am Ende haben wir die Verbindung zur Windows-Firewall blockiert. Ja, dies blockiert alle Verbindungen, die der Regel entsprechen, aber in unserem Fall gab es eine einzige Verbindung (die, an der wir interessiert waren):
Ersetzen Sie die IP durch die von Ihnen benötigte und fügen Sie bei Bedarf weitere Regeln hinzu.
quelle
Sofortige / machbare / teilweise Antwort : https://stackoverflow.com/a/20130959/2584794 Im
Gegensatz zu der vorherigen Antwort, bei der netstat -a -o -n verwendet wurde, sollte eine unglaublich lange Liste ohne den Namen der Anwendung untersucht werden, die diese verwendet Häfen
quelle
Ja, es ist möglich, den TCP- oder UDP-Port zu schließen. Unter DOS gibt es einen Befehl
Ich hoffe das wird für dich funktionieren
quelle
Wenn Sie unter Windows 8, Windows Server 2012 oder höher mit PowerShell v4 der oben genannten Version ausgeführt werden, können Sie das folgende Skript verwenden. Dadurch werden die dem Port zugeordneten Prozesse gefunden und beendet.
Code
Dokumentation:
NetStat
ÄquivalentTaskKill
Äquivalentquelle