HttpListener – Prozess auf Port 80 herausfinden
Prozess-ID 4 belegt Port 80. Klassiker. Da sich dieser Prozess nicht beenden lässt, wird häufig dazu geraten, IIS komplett runterzuwerfen.
Ist allerdings suboptimal, wenn man diesen bzw. den HttpListener für andere Software benötigt (looking at you, Veeam).
Vorher: Bindungen checken
Erster Blick wäre natürlich in der IIS-Verwaltungskonsole, ob eine Webseite auf Port 80 bindet. Dazu im IIS-Manager Rechtsklick auf alle Seiten > Bindungen bearbeiten
Steht da irgendwo Port 80? Dann Bindungen Bearbeiten, Port ändern, Ruhe.
Händisch
Manchmal ist es allerdings auch ein anderes Programm, welches sich den Port 80 über den HttpListener snitcht. Gott sei Dank können wir den HttpListener fragen, wer. CMD als Admin:
netsh http show servicestate view=requestq verbose=yes
Der Block, den wir suchen, sieht z.B. wie folgt aus:
Anforderungswarteschlangenname: Die Anforderungswarteschlange ist nicht benannt.
Version: 2.0
Status: Active
Ausführlichkeitsgrad der Anforderungswarteschlange 503: Einfach
Maximale Anzahl von Anforderungen: 1000
Anzahl von aktiven verbundenen Prozessen: 1
Prozess-IDs:
<strong>2412</strong>
URL-Gruppen:
URL-Gruppen-ID: FE00000640000001
Status: Active
Anforderungswarteschlangenname: Die Anforderungswarteschlange ist nicht benannt.
Eigenschaften:
Max. Bandbreite: vererbt
Max. Verbindungen: vererbt
Zeitlimits:
Entitätskörper-Zeitlimit (Sek.): 120
Ausgleichentitätskörper-Zeitlimit (Sek.): 0
Anforderungswarteschlangen-Zeitlimit (Sek.): 0
Zeitlimit für Leerlaufverbindung (Sek.): 0
Zeitlimit für Warten auf Header (Sek.): 0
Minimale Übertragungsrate (Bytes/Sek.): 0
Authentifizierungskonfiguration:
Aktivierte Authentifikationsschemas:
Aushandeln
Anzahl von registrierten URLs: 1
Registrierte URLs:
<span class="color: red;"><strong>HTTP://+:80/116B50EB-ECE2-41AC-8429-9F9E963361B7/</strong></span>
Serversitzungs-ID: FF00000620000001
Version: 2.0
Status: Active
Eigenschaften:
Max. Bandbreite: 4294967295
Zeitlimits:
Entitätskörper-Zeitlimit (Sek.): 120
Ausgleichentitätskörper-Zeitlimit (Sek.): 120
Anforderungswarteschlangen-Zeitlimit (Sek.): 120
Zeitlimit für Leerlaufverbindung (Sek.): 120
Zeitlimit für Warten auf Header (Sek.): 120
Minimale Übertragungsrate (Bytes/Sek.): 150
Code-Sprache: HTML, XML (xml)
Die zwei relevanten Sachen hier: die PID und die registrierte URL. Die PID können wir z.B. im Taskmanager raussuchen, um den Dienst herauszufinden, der den Port 80 belegt und diesen abschießen – oder permanent deaktivieren.
Den Namen des Prozesses bekommen wir übrigens auch mit folgendem Befehl:
wmic process where processid="2412" get processid,commandline
Code-Sprache: JavaScript (javascript)
Sollte der Übeltäter svchost.exe sein, bekommen wir über den Befehl ebenfalls die Parameter, mit denen er gestartet wurde – und können so den Dienst dahinter ermitteln.
Per PowerShell
Folgender PowerShell-Code kann als Administrator ausgeführt werden, um den Prozess programmiertechnisch zu ermitteln und abzuschießen:
$Uri = "http://127.0.0.1:8989" # for example
# Shows processes that have registered URLs with HTTP.sys
$QueueText = netsh http show servicestate view=requestq verbose=yes | Out-String
# Break into text chunks; discard the header
$Queues = $QueueText -split '(?<=\n)(?=Request queue name)' | Select-Object -Skip 1
# Find the chunk for the request queue listening on your URI
$Queue = @($Queues) -match [regex]::Escape($Uri -replace '/$')
if ($Queue.Count -eq 1)
{
# Will be null if could not pick out exactly one PID
$ProcessId = [string]$Queue -replace '(?s).*Process IDs:\s+' -replace '(?s)\s.*' -as [int]
if ($ProcessId)
{
Write-Verbose "Identified process $ProcessId as the HTTP listener. Killing..."
Stop-Process -Id $ProcessId -Confirm
}
}
Code-Sprache: PHP (php)
Der Code ist allerdings mit Vorsicht zu genießen, denn nach einem Neustart wird vermutlich der entsprechende Dienst wieder laufen. Und je nachdem, was das für ein Dienst ist, kann er auch Probleme verursachen, wenn er einfach beendet wird, statt dessen Port zu ändern.