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 à 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 les fermer / les tuer.
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 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é interrompue quelque part en cours de route). 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 propriétaire de la connexion est vraiment une mauvaise idée ici car cela entraînerait la suppression du serveur (tous les utilisateurs perdraient des fonctionnalités lorsque nous souhaitons simplement supprimer cette connexion de manière sélective et temporelle).
la source
Réponses:
Oui, c'est possible. Vous n'avez pas besoin d'être le processus actuel propriétaire du 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 tous provoquer la fermeture de la prise.
Considérez également que les logiciels Fiddler et Desktop VPN peuvent s'insérer dans la pile réseau et vous montrer tout votre trafic ou rediriger tout votre trafic.
Donc, tout ce dont vous avez vraiment besoin est soit que Windows fournisse une API qui permet cela directement, soit que quelqu'un ait écrit un programme qui fonctionne un peu comme un VPN ou un Fiddler et vous donne un moyen de fermer les sockets qui le traversent.
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é 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 de faire en sorte qu'un programme n'écoute pas sur un port (enfin, c'est possible, mais cette capacité est appelée pare-feu ...), mais je ne pense pas que ce soit demandé ici. Je crois que la question est «comment fermer sélectivement une connexion active (socket) au port sur lequel mon programme écoute?». Le libellé de la question est un peu erroné car un numéro de port pour la connexion client entrante indésirable est donné et il a été appelé "port" mais il est assez clair qu'il s'agissait d'une référence à ce socket et non au port d'écoute.
la source
ouvert
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)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 PID
Trouvez le PID qui vous intéresse et "END PROCESS"
Vous pouvez maintenant réexécuter le serveur sur [l'adresse IP]: [numéro de port] sans problème
la source
System
processus qui gère les connexions réseau Windows.taskkill /pid 6168 /f
6168 est le pidPar exemple, vous souhaitez libérer le port 8080 Ensuite, suivez ces commandes.
Terminé!
la source
Si vous connaissez le port que vous souhaitez libérer, vous pouvez trier votre liste netstat en recherchant le port spécifique comme ceci:
Ensuite, le pid apparaîtra à la droite que vous pouvez tuer avec taskkill.
Aussi, vous voudrez peut-être regarder cette question qui est spécifiquement pour localhost, mais je pense qu'elle est pertinente:
la source
Utilisez TCPView: http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx
ou CurrPorts: https://www.nirsoft.net/utils/cports.html
Sinon, si vous ne voulez pas utiliser de LOGICIEL EXTERNE (ces outils ne nécessitent pas d'installation d'ailleurs), vous pouvez simplement exécuter d'abord la commande netstat (de préférence netstat -b), puis configurer la politique de sécurité locale pour bloquer l'IP adresse de la machine de l'utilisateur en question, c'est ce que j'ai fait avec des connexions indésirables ou même inconnues - cela vous permet de tout faire SANS AUCUN LOGICIEL EXTERNE (tout est livré avec Windows) ...
la source
Essayez les outils TCPView (GUI) et Tcpvcon (ligne de commande) de Sysinternals / Microsoft.
https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview
la source
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 connaître l'ID de processus (PID) pour Unix / Linux. Utilisez netstat comme ceci:
Cela imprimera quelque chose comme:
Où -a affiche toutes les sockets, -n montre le numéro de port, -p montre le PID, -l montre seulement ce qui écoute (ceci est facultatif selon ce que vous recherchez).
La vraie information que vous voulez est le PID. Maintenant, nous pouvons arrêter ce processus en faisant:
Si vous arrêtez un service, il est préférable d'utiliser:
Kill 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 se peut qu'il ne démarre pas correctement car vous ne l'avez pas arrêté correctement. Cela dépend simplement 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 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
la source
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:
Il a également une belle interface graphique avec des fonctionnalités de recherche et de filtrage.
Remarque: Cette réponse est la réponse et le commentaire de huntharo et JasonXA réunis et simplifiés pour faciliter la tâche des lecteurs. Les exemples proviennent de la page Web de CurrPorts.
la source
Vous ne pouvez pas fermer les sockets sur votre serveur sans posséder ces sockets, donc vous ne pouvez pas réellement fermer le socket sans que le code s'exécute dans le processus qui possède le socket du serveur.
Cependant, il existe une autre option qui indique au client de fermer son 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 l'analyse RST à l'aide de nmap.
http://nmap.org/
la source
J'ai trouvé la bonne réponse à celle-ci. Essayez TCPView de Sysinternals, désormais propriété de Microsoft. Vous pouvez le trouver sur http://technet.microsoft.com/en-us/sysinternals/bb897437
la source
wkillcx est un outil de ligne de commande Windows fiable pour tuer les connexions TCP à partir de la ligne de commande qui n'a pas été mentionnée. Cependant, il a parfois des problèmes avec les serveurs avec un grand nombre de connexions. J'utilise parfois tcpview pour les kills interactifs mais wkillcx peut être utilisé dans les scripts.
la source
Afin de fermer le port, vous pouvez identifier le processus qui écoute sur ce port et tuer ce processus.
la source
vous pouvez utiliser un programme comme tcpview de sysinternal. Je suppose que cela peut vous aider beaucoup à la fois à surveiller et à supprimer les connexions indésirables.
la source
CurrPorts ne fonctionnait pas pour nous et nous ne pouvions accéder au serveur que via ssh, donc pas de TCPView non plus. Nous ne pouvions pas non plus tuer le processus, ni abandonner d'autres connexions. Ce que nous avons fini par faire et qui n'a pas encore été suggéré, c'est de bloquer la connexion sur le pare-feu de Windows. Oui, cela bloquera toutes les connexions qui correspondent à la règle, mais dans notre cas, il y avait une seule connexion (celle qui nous intéressait):
Remplacez l'adresse IP par celle dont vous avez besoin et ajoutez d'autres règles si nécessaire.
la source
réponse instantanée / faisable / partielle : https://stackoverflow.com/a/20130959/2584794
contrairement à la réponse précédente où netstat -a -o -n était utilisé, une liste incroyablement longue devait être examinée sans le nom de l'application utilisant ces les ports
la source
Oui, il est possible de fermer le port TCP ou UDP il y a une commande sous DOS
J'espère que cela fonctionnera pour vous
la source
Si vous exécutez sur Windows 8, `Windows Server 2012 ou supérieur avec PowerShell v4 ci-dessus installé, vous pouvez utiliser le script ci-dessous. Cela trouve les processus associés au port et les termine.
Code
Documentation:
NetStat
équivalent de PowerShellTaskKill
équivalent de PowerShellla source