web-dev-qa-db-fra.com

Comment fermer TCP et les ports UDP via la ligne de commande Windows

Quelqu'un sait-il comment fermer un socket TCP ou UDP pour une seule connexion via la ligne de commande Windows?

Googler à ce sujet, j'ai vu certaines personnes demander la même chose. Mais les réponses ressemblaient à une page de manuel des commandes netstat ou netsh, centrée sur la surveillance des ports. Je ne veux pas de réponses sur la façon de les surveiller (je le fais déjà). Je veux les fermer/les tuer.

EDIT, pour clarification: Supposons que mon serveur écoute TCP port 80. Un client établit une connexion et le port 56789 lui est attribué. Ensuite, je découvre que cette connexion est indésirable (par exemple, cet utilisateur fait de mauvaises choses, nous leur avons demandé de s’arrêter mais la connexion n’a pas été abandonnée à un moment donné). Normalement, j'ajouterais un pare-feu pour faire le travail, mais cela prendrait un certain temps et j'étais dans une situation d'urgence. Tuer le processus qui est propriétaire de la connexion est vraiment une mauvaise idée car cela enlèverait le serveur (tous les utilisateurs perdraient des fonctionnalités lorsque nous voudrions simplement supprimer cette connexion de manière sélective et temporelle).

133
Victor Stafusa

Oui, c'est possible Vous n'avez pas besoin d'être le processus actuel possédant le socket pour le fermer. Considérez un instant que la machine distante, la carte réseau, le câble réseau et votre système d'exploitation peuvent provoquer la fermeture de la prise.

Sachez également que les logiciels VPN Fiddler et Desktop peuvent s’insérer dans la pile réseau et vous montrer tout votre trafic ou réacheminer tout votre trafic.

Donc, tout ce dont vous avez besoin est que Windows fournisse une API qui le permette directement ou que quelqu'un ait écrit un programme qui fonctionne un peu comme un VPN ou un Fiddler et vous permet de fermer les sockets qui le traversent.

Il y a au moins un programme ( CurrPorts ) qui fait exactement cela. Je l'ai utilisé aujourd'hui pour fermer des sockets spécifiques sur un processus démarré avant le démarrage de CurrPorts. Pour ce faire, vous devez bien sûr l'exécuter en tant qu'administrateur.

Notez qu'il n'est probablement pas facilement possible d'empêcher un programme d'écouter sur un port (eh bien, c'est possible, mais cette capacité est appelée pare-feu ...), mais je ne pense pas que cela a été demandé ici. Je crois que la question est "comment puis-je fermer sélectivement une connexion active (socket) au port sur lequel mon programme écoute?". La formulation de la question est un peu compliquée, car un numéro de port pour la connexion client entrante non souhaitée est indiqué et il a été désigné par "port", mais il est assez clair qu'il s'agissait d'une référence à ce socket et non du port d'écoute.

58
huntharo
  1. ouvrir cmd

    • tapez netstat -a -n -o

    • find TCP [the IP address]:[port number] .... #[target_PID]# (idem pour UDP)

    • (Btw, kill [target_PID] n'a pas fonctionné pour moi)

  2. CTRL + ALT + SUPPR et choisissez "démarrer le gestionnaire de tâches"

    • Cliquez sur l'onglet "Processus"

    • Activez la colonne "PID" en allant dans: Affichage> Sélectionner les colonnes> Cochez la case correspondant au PID.

    • Trouver le PID d’intérêt et "FIN DU PROCESSUS"

  3. Maintenant, vous pouvez relancer le serveur sur [l'adresse IP]: [numéro de port] sans problème

121
HaoQi Li

Par exemple, vous voulez libérer le port 8080, puis suivez ces commandes.

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

Terminé!

41
Rahul Lakhanpal

Si vous connaissez le port que vous souhaitez libérer, vous pouvez trier votre liste netstat en recherchant le port spécifique comme ceci:

netstat -ano | findstr :8080

Alors le pid apparaîtra au droit que vous pouvez tuer avec taskkill.

enter image description here

taskkill/pid 11704 /F

Aussi, vous voudrez peut-être regarder ceci question qui est spécifiquement pour localhost, mais je pense que c'est pertinent:

34
Felipe Centeno

Essayez l’outil sysinternals/Microsoft tcpview (gui) et Tcpvcon (ligne de commande)

23
Patrick

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

Sinon, si vous ne souhaitez pas utiliser de logiciel externe (ces outils ne nécessitent pas d'installation), vous pouvez simplement exécuter d'abord la commande netstat (de préférence, netstat -b), puis configurer la stratégie de sécurité locale pour bloquer l'adresse IP. adresse de la machine de l'utilisateur en question, c'est ce que je faisais avec des connexions indésirables ou même inconnues - cela vous permet de tout faire SANS LOGICIEL EXTERNE (tout est livré avec Windows) ...

22
Vman

Vous ne pouvez pas fermer de sockets sans arrêter le processus qui en est propriétaire. Les sockets appartiennent au processus qui les a ouverts. Donc, pour trouver l'ID de processus (PID) pour Unix/Linux. Utilisez netstat comme ceci:

netstat -a -n -p -l

Cela va imprimer 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 affiche tous les sockets, -n indique le numéro de port, -p affiche le PID, -l affiche uniquement le contenu en écoute (option facultative selon ce que vous recherchez).

La vraie information que vous voulez est le PID. Maintenant, nous pouvons arrêter ce processus en faisant:

kill 1879

Si vous arrêtez un service, utilisez de préférence:

service sendmail stop

Tuer tue littéralement ce processus et tous les enfants qu’il possède. L'utilisation de la commande de service exécute le script d'arrêt enregistré dans le répertoire init.d. Si vous utilisez kill sur un service, il est possible que la sauvegarde ne soit pas démarrée correctement car vous ne l'avez pas arrêté correctement. Cela dépend du service.

Malheureusement, Mac est différent de Linux/Unix à cet égard. Vous ne pouvez pas utiliser netstat. Lisez ce tutoriel 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 utilisez Windows, utilisez TaskManager pour tuer les processus et l'interface utilisateur des services pour arrêter les services. Vous pouvez utiliser netstat sous Windows comme Linux/Unix pour identifier le PID.

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

6
chubbsondubs

Utilisez CurrPorts (c'est gratuit et sans 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 possède également une interface graphique de Nice avec des fonctionnalités de recherche et de filtrage.

Remarque: cette réponse est la réponse et les commentaires de huntharo et JasonXA, mis en place et simplifiés pour le rendre plus facile pour les lecteurs. Les exemples proviennent de la page Web de CurrPorts.

4
qwertzguy

Vous ne pouvez pas fermer des sockets sur votre serveur sans posséder ces sockets et vous ne pouvez donc pas réellement fermer le socket sans laisser le code s'exécuter dans le processus qui possède le socket du serveur.

Cependant, il existe une autre option qui demande au client de fermer son socket. L'envoi d'un paquet RST TCP au port sur lequel le client se connecte entraîne sa perte de connexion. Vous pouvez le faire avec l'analyse RST en utilisant nmap.

http://nmap.org/

3
chubbsondubs

wkillcx est un outil de ligne de commande Windows fiable pour supprimer les connexions TCP de la ligne de commande qui n'a pas été mentionnée. Cependant, il y a parfois des problèmes avec les serveurs avec un grand nombre de connexions. J'utilise parfois tcpview pour les attaques interactives, mais wkillcx peut être utilisé dans des scripts.

2
user3310805

J'ai trouvé la bonne réponse à celle-ci. Essayez TCPView de Sysinternals, qui appartient maintenant à Microsoft. Vous pouvez le trouver à http://technet.Microsoft.com/en-us/sysinternals/bb897437

2
Michael Mueller

Afin de fermer le port, vous pouvez identifier le processus qui écoute sur ce port et tuer ce processus.

1
Darin Dimitrov

vous pouvez utiliser un programme comme tcpview de sysinternal. Je suppose que cela peut vous aider beaucoup à surveiller et à supprimer les connexions indésirables.

1
Mochan

réponse instantanée/réalisable/partielle : https://stackoverflow.com/a/20130959/2584794

Contrairement à la réponse précédente où netstat -a -o -n était utilisé incroyablement , la longue liste devait être examinée sans le nom de l'application utilisant ces ports.

0
Anup