Comment fermer les ports TCP et UDP via la ligne de commande windows
est-ce que quelqu'un sait comment fermer une socket TCP ou UDP pour une seule connexion via la ligne de commande windows?
Googlant à ce sujet, j'ai vu des gens demander la même chose. Mais les réponses ressemblaient à une page de manuel de commandes netstat ou netsh se concentrant sur la façon de surveiller les ports. Je ne veux pas de réponses sur la façon de les surveiller (je le fais déjà). Je veux fermer/les tuer.
EDIT, pour clarification: disons que mon serveur écoute TCP le port 80. Un client établit une connexion et le port 56789 lui est attribué. Ensuite, je découvre que cette connexion n'est pas désirée (par exemple, cet utilisateur fait de mauvaises choses, nous lui avons demandé d'arrêter mais la connexion n'a pas été abandonnée quelque part en cours de route). Normalement, j'ajouterais un pare-feu pour faire le travail, mais ça prendrait du temps, et j'étais dans une situation d'urgence. Tuer le processus qui possède la connexion est vraiment une mauvaise idée ici parce que cela détruirait le serveur (tous les utilisateurs perdraient fonctionnalité lorsque nous voulons simplement supprimer sélectivement et temporellement cette connexion).
16 réponses
Oui, c'est possible. Vous n'avez pas besoin d'être le processus actuel possédant la socket pour la fermer. Considérez un instant que la machine distante, la carte réseau, le câble réseau et votre OS peuvent tous provoquer la fermeture de la prise.
considérez aussi que le logiciel VPN Fiddler et Desktop peut s'insérer dans la pile réseau et vous montrer tout votre trafic ou vous rediriger tout votre trafic.
donc tout ce que vous avez vraiment besoin est soit pour Windows pour fournir une API qui permet cela directement, ou pour quelqu'un d'avoir écrit un programme qui fonctionne un peu comme un VPN ou un Fiddler et vous donne un moyen de fermer les sockets qui passent à travers elle.
il y a au moins un programme ( CurrPorts ) qui fait exactement cela et je l'ai utilisé aujourd'hui dans le but de fermer des sockets spécifiques sur un processus qui a commencé avant que CurrPorts a été commencé. Pour ce faire, vous devez l'exécuter en tant qu'administrateur, bien sûr.
notez qu'il n'est probablement pas facile de faire qu'un programme n'écoute pas sur un port (bien, c'est possible, mais cette capacité est appelée un pare-feu...), mais je ne pense pas que c'était d'être posée ici. Je crois que la question est "comment fermer sélectivement une connexion active (socket) au port sur lequel mon programme écoute?". La formulation de la question est un peu éteinte parce qu'un numéro de port pour la connexion indésirable du client est donné et il a été appelé "port" mais il est assez clair que c'était une référence à cette socket et pas au port d'écoute.
-
ouvert
cmd
-
type dans
netstat -a -n -o
-
find
TCP [the IP address]:[port number] .... #[target_PID]#
(idem pour UDP) -
(Btw,
kill [target_PID]
ne fonctionne pas pour moi)
-
-
CTRL+ALT+DELETE et cliquez sur "démarrer le gestionnaire des tâches"
-
Cliquez sur" process "onglet
-
activez la colonne "PID" en allant à: View > Select Columns > cochez la case pour PID
-
trouver le PID d'intérêt et "END PROCESS"
-
-
Maintenant vous pouvez rediriger le serveur sur [l'adresse IP]: [numéro de port] sans problème
, Par exemple, vous voulez libérer le port 8080 Ensuite, suivez ces commandes.
- netstat-ano
- taskkill /f /im [pid du port 8080 obtenu à partir de la commande précédente]
fait!
Essayez le sysinternals/outil de microsoft tcpview (gui) et Tcpvcon (ligne de commande)
Use TCPView ( http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx ) ou CurrPorts ( http://www.nirsoft.net/utils/cports.html ).
alternativement, si vous ne voulez pas utiliser de logiciel externe (ces outils ne nécessitent pas d'installation en passant), vous pouvez tout simplement lancer la commande netstat (de préférence netstat-B) et ensuite configurer la Politique de sécurité locale pour bloquer l'adresse IP de la machine de l'utilisateur dans question, c'est ce que j'ai fait avec des connexions indésirables ou même inconnues - qui vous permet de tout faire sans aucun logiciel externe (tout vient avec Windows)...
Si vous connaissez le port que vous voulez gratuitement, vous pouvez trier vos netstat liste pour les particuliers port comme ceci:
netstat -ano | findstr :8080
alors le pid apparaîtra à la rigth que vous pouvez tuer avec taskkill.
taskkill/pid 11704 /F
Également vous pouvez regarder ce question qui est spécifiquement pour localhost, mais je pense que c'est pertinent:
vous ne pouvez pas fermer les sockets sans arrêter le processus qui possède ces sockets. Les Sockets appartiennent au processus qui les a ouverts. Donc pour trouver L'ID du processus (PID) pour Unix/Linux. Utiliser netstat comme suit:
netstat -a -n -p -l
qui imprimera quelque chose comme:
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
où -a imprime toutes les sockets, - n montre le numéro de port, - p montre le PID, - l montre seulement ce qui est à l'écoute (cela est facultatif selon sur ce que vous êtes après).
la vraie info que vous voulez est PID. Maintenant nous pouvons arrêter ce processus en faisant:
kill 1879
si vous fermez un service, il est préférable d'utiliser:
service sendmail stop
tue littéralement ce processus et tous les enfants qu'il possède. L'utilisation de la commande service exécute le script d'arrêt enregistré dans l'init.d répertoire. Si vous utilisez tuer sur un service qu'il pourrait ne pas démarrer correctement sauvegarder parce que vous ne pas fermer correctement. Tout dépend du service.
malheureusement, Mac est différent de Linux / Unix à cet égard. Vous ne pouvez pas utiliser la commande netstat. Si vous êtes intéressé par Mac:
http://www.tech-recipes.com/rx/227/find-out-which-process-is-holding-which-socket-open /
et si vous êtes sur Windows utilisez TaskManager pour tuer les processus, et les services UI pour arrêter les services. Vous pouvez utiliser netstat sur Windows tout comme Linux/Unix pour identifier le PID.
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/netstat.mspx?mfr=true
pour fermer le port vous pouvez identifier le processus qui écoute sur ce port et tuer ce processus.
j'ai trouvé la bonne réponse à cette question. Essayez TCPView à partir de Sysinternals, maintenant propriété de Microsoft. Vous pouvez le trouver à http://technet.microsoft.com/en-us/sysinternals/bb897437
wkillcx est un outil en ligne de commande windows fiable pour tuer les connexions tcp à partir de la ligne de commande qui n'a pas été mentionné. Il a cependant des problèmes avec les serveurs avec un grand nombre de connexions parfois. J'utilise parfois tcpview pour les kills interactifs, mais wkillcx peut être utilisé dans les scripts.
utilisez CurrPorts (c'est gratuit et pas d'installation): http://www.nirsoft.net/utils/cports.html
/close <Local Address> <Local Port> <Remote Address> <Remote Port> {Process Name}
exemples:
# 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
Il a également une belle interface graphique avec la recherche et les fonctions du filtre.
Note: Cette réponse est la réponse et le commentaire de huntharo et JasonXA mis ensemble et simplifié pour le rendre plus facile pour les lecteurs. Les exemples viennent de La page Web de CurrPorts.
vous ne pouvez pas fermer les sockets sur votre serveur sans posséder ces sockets donc vous ne pouvez pas réellement fermer la socket vers le bas sans avoir le code en cours d'exécution dans le processus qui possède la socket serveur.
cependant, il y a une autre option qui dit au client de fermer sa socket. L'envoi d'un paquet TCP RST au port sur lequel le client se connecte entraînera le client à abandonner sa connexion. Vous pouvez le faire avec le balayage RST en utilisant nmap.
instantanée/faisable/réponse partielle : https://stackoverflow.com/a/20130959/2584794
contrairement à la réponse précédente où netstat-a-o-n a été utilisé incroyablement longue liste devait être examiné sans le nom de l'application en utilisant ces ports
, vous pouvez utiliser le programme comme tcpview de sysinternals. Je suppose que cela peut vous aider beaucoup sur la surveillance et le meurtre de connexion non désirée.
si vous exécutez sur Windows 8
, Windows Server 2012
ou plus haut avec PowerShell v4
de ci-dessus installé, vous pouvez utiliser le script ci-dessous. Ceci trouve les processus associés au port et les termine.
Code
#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
de la Documentation:
- Get-NetTCPConnection - Powershell's
NetStat
equivalent - Select-Object - retirer les propriétés spécifiques d'un objet / supprimer les doublons
- Where-Object - valeurs de filtre basées sur une certaine condition
- Stop-Process -
TaskKill
équivalent " de PowerShell 1519160920"
Oui, il est possible de fermer le port TCP ou UDP il existe une commande sous DOS
TASKKILL /f /pid 1234
j'espère que cela fonctionnera pour Vous