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).

105
demandé sur huntharo 2011-12-31 19:35:02

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.

49
répondu huntharo 2017-03-01 15:01:14
  1. 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)

  2. 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"

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

109
répondu HaoQi Li 2013-04-18 06:28:10

, 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!

26
répondu Rahul Lakhanpal 2016-12-25 09:17:57

Essayez le sysinternals/outil de microsoft tcpview (gui) et Tcpvcon (ligne de commande)

23
répondu Patrick 2012-04-26 19:23:08

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)...

20
répondu Vman 2014-01-18 12:34:27

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.

enter image description here

taskkill/pid 11704 /F

Également vous pouvez regarder ce question qui est spécifiquement pour localhost, mais je pense que c'est pertinent:

7
répondu Felipe Centeno 2018-06-25 13:27:04

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

5
répondu chubbsondubs 2013-05-01 17:17:49

pour fermer le port vous pouvez identifier le processus qui écoute sur ce port et tuer ce processus.

2
répondu Darin Dimitrov 2011-12-31 15:38:27

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

2
répondu Michael Mueller 2013-09-23 19:03:21

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.

2
répondu user3310805 2014-02-14 15:32:17

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.

2
répondu qwertzguy 2016-01-18 14:37:32

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.

http://nmap.org /

1
répondu chubbsondubs 2012-01-01 15:52:52

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

1
répondu Anup 2017-05-23 12:10:41

, 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.

1
répondu Mochan 2014-01-08 01:53:29

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:

1
répondu JohnLBevan 2017-10-25 17:05:55

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

-1
répondu Bijay Budhathoki 2018-07-29 05:57:25