239 votes

Comment fermer les ports TCP et 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 ?

En cherchant sur Google, j'ai vu des gens qui demandaient la même chose. Mais les réponses ressemblaient à une page de manuel de commandes netstat ou netsh axées 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 les fermer/supprimer.

EDIT, pour clarification : Disons que mon serveur écoute le port TCP 80. Un client établit une connexion et le port 56789 lui est alloué. Ensuite, je découvre que cette connexion n'est pas souhaitée (par exemple, cet utilisateur fait de mauvaises choses, nous lui avons demandé d'arrêter mais la connexion n'a pas été interrompue en cours de route). Normalement, j'ajouterais un pare-feu pour faire le travail, mais cela prendrait du temps, et je suis dans une situation d'urgence. Tuer le processus qui possède la connexion est vraiment une mauvaise idée ici, car cela mettrait le serveur hors service (tous les utilisateurs perdraient leurs fonctionnalités alors que nous voulons juste supprimer cette connexion de manière sélective et temporaire).

1 votes

Pourquoi ? Vous ne pouvez pas fermer les ports depuis la ligne de commande, ni les fichiers. Vous devez fermer les programmes qui les possèdent. Ou faites-vous référence aux opérations du pare-feu ? Votre question n'est pas claire.

10 votes

Je peux comprendre le vote négatif. Mais pourquoi les votes serrés ? Cette question est légitime.

176voto

HaoQi Li Points 2200
  1. ouvrir cmd

    • le type en netstat -a -n -o

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

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

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

    • Cliquez sur l'onglet "Processus".

    • Activez la colonne "PID" en allant dans : View > Select Columns > Cochez la case pour PID

    • Trouvez le PID qui vous intéresse et "END PROCESS".

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

21 votes

Ce que vous dites, c'est qu'il suffit de tuer le processus du serveur et de le relancer, ce que je voulais éviter, car cela supprimerait toutes les connexions au serveur, et pas seulement la connexion indésirable.

8 votes

Désolé de ne pas avoir aidé à résoudre votre question spécifique. J'ai simplement fourni ma réponse car votre question est apparue lorsque j'ai cherché sur Google comment fermer simplement un port Windows, et j'ai pensé que cela pourrait être utile à d'autres personnes qui ont eu le même problème que moi.)

3 votes

@HaoQiLi, Vous ne pouvez pas simplement mettre fin à tout et n'importe quoi. Par exemple. System qui gère les connexions réseau de Windows.

82voto

huntharo Points 983

Oui, c'est possible. Vous n'avez pas besoin d'être le processus actuel propriétaire de la socket pour la 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 tous provoquer la fermeture de la prise.

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

Il suffit donc 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 Fiddler et vous donne un moyen de fermer les sockets qui passent par lui.

Il existe 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 été lancé avant que CurrPorts ne soit lancé. 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 en sorte qu'un programme n'écoute pas sur un port (enfin, c'est possible mais cette capacité est appelée un pare-feu...), mais je ne pense pas que la question ait été posée ici. Je crois que la question est "comment puis-je fermer sélectivement une connexion active (socket) au port sur lequel mon programme est en train d'écouter ?". La formulation de la question est un peu fausse parce qu'un numéro de port pour la connexion client entrante non désirée est donné et il a été mentionné comme "port" mais il est assez clair que c'était une référence à ce socket et non au port d'écoute.

4 votes

Oui, le CP est un outil merveilleux : CurrPorts.exe /close <Adresse locale> <Port local> <Adresse distante> <Port distant> {Nom du processus} Ce serait la ligne : CurrPorts.exe /close * 56789 * * server.exe

0 votes

CurrPorts ne semble pas être capable de fermer les connexions UDP multicast provenant d'un processus

35voto

Vman Points 31

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

Alternativement, si vous ne voulez pas utiliser de LOGICIEL EXTERNE (ces outils ne nécessitent pas d'installation d'ailleurs), vous pouvez tout simplement exécuter 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 en question, c'est ce que j'ai fait avec les connexions non désirées ou même inconnues - cela vous permet de tout faire SANS AUCUN LOGICIEL EXTERNE (tout est fourni avec Windows)...

3 votes

C'est la bonne réponse, et elle est entièrement soutenue par Microsoft.

0 votes

Ça a marché pour moi aussi. J'ai utilisé la politique de sécurité locale -> politiques de sécurité de l'ordinateur local. L'interface utilisateur est assez intuitive.

1 votes

J'ai essayé, mais la fermeture de la connexion est grisée pour l'ipv6. Quelle est l'alternative à la fermeture de l'ipv6, le cas échéant ?

30voto

Patrick Points 121

Essayez les outils TCPView (GUI) et Tcpvcon (ligne de commande) de Sysinternals/Microsoft.
https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview

7voto

chubbsondubs Points 16075

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 ouvertes. Donc pour trouver l'ID du processus (PID) pour Unix/Linux. Utilisez netstat comme suit :

netstat -a -n -p -l

Cela 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 tous les sockets, -n montre le numéro de port, -p montre le PID, -l montre seulement ce qui écoute (ceci est optionnel en fonction de ce que vous recherchez).

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

kill 1879

Si vous arrêtez un service, il est préférable de l'utiliser :

service sendmail stop

Kill tue littéralement ce processus et tous les enfants qu'il possède. L'utilisation de la commande service exécute le script script enregistré dans le répertoire init.d. Si vous utilisez kill sur un service, il se peut qu'il ne redémarre pas correctement parce que 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 êtes sous Windows, utilisez TaskManager pour tuer les processus et l'interface de services pour arrêter les services. Vous pouvez utiliser netstat sous Windows comme sous Linux/Unix pour identifier le PID.

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

0 votes

Il a apporté une clarification à sa question, à savoir les sockets clients distants qui peuvent être fermés avec d'autres outils, comme d'autres l'ont souligné. Cette réponse est principalement axée sur les sockets de serveur qui ne peuvent pas l'être (sans manipuler le système d'exploitation). Voici comment arrêter proprement un processus qui possède un socket serveur, ce qui est ce que vous voulez faire si c'est le port. Mais, si vous avez beaucoup de connexions entrantes sur votre serveur, c'est une situation différente et vous pouvez certainement les tuer. Ce n'est pas faux, mais ce n'est pas tout à fait ce que le PO demandait.

2 votes

Vous devriez supprimer la partie "tuer le processus", car ce n'est pas une réponse à la question. Vous pouvez également arrêter l'adaptateur réseau pour arrêter le trafic, mais cela ne tue toujours pas le socket uniquement !

0 votes

La réponse est correcte seulement pour ipv6, pour ipv4 vous pouvez appeler SetTcpEntry

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X