web-dev-qa-db-fra.com

Le port 80 est utilisé par système (PID 4), qu'est-ce que c'est?

J'essaie d'utiliser le port 80 pour mon serveur d'applications, mais quand j'effectue "netstat -aon", je reçois

TCP 0.0.0.0:80 0.0.0.0:0 Écouter 4

Lorsque je recherche le processus dans le gestionnaire de tâches, le PID 4 est le système, c'est-à-dire qu'il, pas d'extension ... rien, juste "système". Que se passe t-il ici?

J'ai peur de mettre fin à ce processus, que dois-je faire?

9
GiH

Bien que les gens soulignent des services spécifiques (par exemple, le "Service d'agent de déploiement Web"), cela ne parvient pas à répondre à la cause fondamentale. Si vous venez de désactiver les services qui déclenchent le problème, il y a de fortes chances que cela fera de nouveau la tête à l'avenir dans une bande marginale différente. Il vaut donc la peine de comprendre ce qui ne va pas, car cela conduit à une meilleure solution.

Ce problème se pose lorsqu'un serveur d'applications veut un contrôle total du port 80. Ce conflit avec une fonctionnalité de Windows conçue pour permettre à plusieurs processus de gérer les demandes du port 80. Il est tout à fait possible d'avoir un certain nombre de processus recevant toutes les demandes HTTP sur le port. 80, car Windows dispose d'un mécanisme d'expédition HTTP intégré. Chaque processus peut indiquer Windows que les URL souhaitée.

Toutefois, si un serveur d'applications ignore totalement cela, alors vous êtes de retour dans le monde moins flexible de la vieille école où un seul processus peut recevoir des demandes destinées à un port particulier.

Cela peut être bon - si vous ne voulez vraiment rien d'autre qu'un processus particulier de la manutention de la requête HTTP sur le port 80, il devient tolérable d'utiliser un serveur d'applications qui ne prend pas en charge les mécanismes plus flexibles proposés par Windows. (Et certains serveurs d'applications populaires ont cette limitation. Par exemple, Afaik, Tomcat est incapable de bien jouer avec les autres et insiste sur le port 80 à lui-même. Donc, si vous utilisez le serveur d'applications de quelqu'un d'autre, il peut bien être peu pratique pour Adaptez-le à utiliser le mécanisme préféré.)

Windows tente d'accueillir de tels services inflexibles en ne liant pas son mécanisme d'expédition au port 80 jusqu'à ce que quelque chose le demande activement. (C'est pourquoi vous ne verrez pas nécessairement un problème initialement, mais peut courir dans ce numéro après une sorte de mise à jour ou de modification de configuration.) Mais s'appuyer sur ce n'est pas une solution très solide - vous faites essentiellement confiance à la chance que rien Tentatives d'écoute sous le port 80 avant que votre serveur d'applications ne se lance. (Il existe diverses raisons un processus pour tenter de tenter de vous inscrire à certaines URL sur le port 80 et de reculer si elle n'est pas autorisée.)

Donc, si vous voulez qu'un seul service ait un accès exclusif au port 80, vous feriez mieux de dire Windows. Ce n'est pas vraiment assez bon pour tenter d'éteindre tous les services susceptibles d'utiliser le mécanisme de partage de ports habituel, car il est difficile d'être confiant que vous avez tous trouvé tous. (En particulier lorsque les mises à jour de Windows semblent modifier ce qui est sur défaut.) C'est probablement une bonne pratique de désactiver ceux que vous connaissez, mais il est préférable d'aborder cela des deux extrémités: désactivez les services que vous ne voulez pas, et assurez-vous également que ce n'est pas possible pour ceux que vous ne saviez pas de vous faire trébucher.

Par défaut HTTP.SYS (le mécanisme de dépannage HTTP de partage de ports sous-jacents sous Windows) est capable d'écouter toutes les adresses. Mais vous pouvez le dire de ne pas. Cette page montre une façon de le faire: http://www.mikeplate.com/2011/11/06/stop-http-sys-from-listening-on-port-80-in-windows/

C'est un moyen relativement léger de le faire, car il permet toujours d'écouter sur Localhost pour IPv6. Il ne fait que libérer le port IPv4 80. Vous pouvez le prendre plus en plus avec plus de configuration spécialisée. (Vous pourriez même désactiver HTTP.SYS entièrement, mais cela pourrait casser des objets à l'aide des ports autres que 80, il peut donc causer des problèmes.)

Mais tout ce que vous faites, le but est de vous assurer que HTTP.SYS n'essaie pas d'écouter le port 80 sur l'adresse IP que vous vous souciez. Une fois que vous avez fait cela, vous n'avez pas besoin de vous soucier des services de désactivation, et vous n'avez pas à vous soucier de vous soucier des autres modifications à réintroduire le problème. Si vous avez veillé à ce que le noeud final que vous avez besoin est effectivement hors limites pour le partage de ports, vous devriez trouver que le processus système cesse de se lier.

14
Ian Griffiths

Culprit était le service d'agent de déploiement Web.

Meilleure solution que net stop http est d'arrêter les services nommés "Service d'agent de déploiement Web".

8
Avinash

C'est très probablement IIS 6.0 ou plus.

La pile de protocoles HTTP (http.sys), qui fonctionne in Mode de noyau, reçoit les demandes du client et les achemine dans la file d'attente de demande appropriée. Processus des travailleurs, qui fonctionnent en mode utilisateur, tirent les demandes directement à partir de leurs propres files d'attente de demande de noyau, éliminant ainsi les sauts de processus qui se produisent dans IIS 5.0 (et qui se produisent également dans le mode d'isolement IIS 5.0) lorsque la Web Server envoie une demande à une application à haute isolation et à court terme. Étant donné que ces houblons de processus supplémentaires sont éliminés en mode d'isolement du processus de travailleur, IIS peut fournir une isolation d'application sans sacrifier la performance.

4
Mark Allen

Essayez d'arrêter le HTTP.SYS En entrant dans Device Manager/Non Plug and Play Drivers et sélectionnez HTTP, essayez de l'arrêter et vous verrez des services qui déclenchent ce HTTP pour utiliser le port 80.

1
Farooque

J'ai trouvé la réponse à cette question à: https://superuser.com/questions/352017/pid4-utilisateur-port-8

Spécifiquement, lorsqu'il s'agit du processus système 4, vous devez désactiver le pilote HTTP.SYS qui est démarré à la demande par un autre service, tel que Windows Remote Management ou Spooler sur Windows 7 ou 2008.

  1. Allez au gestionnaire de périphériques, sélectionnez "Afficher les périphériques masqués" dans Menu/View, accédez à "Pilote non-Plug and Play"/http, double-cliquez dessus pour le désactiver (ou définissez-le sur manuel, certains services en dépendaient).

Redémarrer et utiliser netstat -nao | Trouver ": 80" Pour vérifier si 80 est toujours utilisé.

J'ai également essayé de récupérer le port en exécutant simplement un "arrêt net http", mais le port n'a jamais semblé être libéré de la sauvegarde. Ce qui précède a travaillé pour moi cependant, et je n'ai pas besoin des autres services qui dépendent de ce conducteur.

0
Adam Trimeloni

Windows Sync Share est ce qui nous a tué sur Windows 2012 R2. Une fois que nous avons désactivé cette fonctionnalité, tout est bien venu.

0
Chief Roberts

Enfin, j'ai vérifié, vous ne pouvez pas terminer le processus "système", et si vous le faites, je suppose que cela va avoir des effets catastrophiques. Je ne vais pas l'essayer sur le PC, je suis en ce moment maintenant!

Il semblerait que quelque chose à l'intérieur de Windows lui-même écoute: 80 - Je vais deviner que cela pourrait être quelque chose de malveillant. La meilleure façon de savoir est de:

a) Ouvrez un navigateur Web à localhost et voyez ce qui se pose

b) Démarrez Telnet et Telnet à localhost 80 et exécutez un message HTTP de base (par exemple get /) et voir ce qu'il revient.

B est la meilleure option si vous pensez que vous organiez peut-être un logiciel malveillant, car vous ne voulez pas vraiment vous infecter. Bien que cela n'aura peut-être pas d'importance.

0
Mark Henderson