GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Alle Möglichkeiten, um zu überprüfen, ob ein Port in Linux geöffnet ist

Ihr Linux-Server läuft, und Sie möchten jetzt überprüfen, ob ein bestimmter Port geöffnet ist, damit Sie remote darauf zugreifen können. Das Überprüfen auf offene Ports ist eine ziemlich häufige Aufgabe für Systemadministratoren, und es gibt einige verschiedene Möglichkeiten, dies unter Linux zu tun.

In diesem Artikel lernen Sie verschiedene Möglichkeiten kennen, um zu überprüfen, ob ein Port in Linux geöffnet ist, damit Sie auswählen können, welche für Sie am besten funktionieren. Bereit? Lesen Sie weiter!

Voraussetzungen

Dieses Tutorial wird eine praktische Demonstration sein. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie Folgendes haben.

  • Ein Linux-Computer. Diese Anleitung verwendet Ubuntu 20.04, aber jede neuere Linux-Distribution sollte funktionieren.
  • Zugang zu einem Terminal. Wenn Sie eine grafische Desktop-Umgebung verwenden, suchen Sie in Ihrem Anwendungsmenü nach einem Terminal-Emulator-Programm. Oder, wenn Sie sich über SSH bei einem Remote-Server angemeldet haben,
  • Ein Benutzerkonto mit sudo Privilegien. Der Einfachheit halber verwendet dieses Tutorial den Root-Benutzer.

Überprüfen Sie mit netstat, ob ein Port in Linux geöffnet ist

Die erste Methode, um zu überprüfen, ob ein Port unter Linux geöffnet ist, besteht darin, netstat auszuführen Befehl. Dieser Befehl zeigt Netzwerkverbindungen, Routing-Tabellen und viele Statistiken zu Netzwerkschnittstellen an.

Die netstat Befehl ist Teil des net-tools Paket, und dieses Paket ist möglicherweise nicht standardmäßig in Ihrer Linux-Distribution enthalten. Installieren Sie unter Ubuntu netstat indem Sie die folgenden Befehle im Terminal ausführen.

apt update -y && apt install net-tools -y

Angenommen, Sie haben einen NGINX-Webserver ausgeführt und möchten überprüfen, ob Port 80 ist offen. Sie können dies tun, indem Sie den folgenden Befehl ausführen. Ersetzen Sie 80 mit der Portnummer, die Sie überprüfen möchten.

Die -tulpn Flags weisen netstat an um alle Listening Ports anzuzeigen. Die erste grep Der Befehl findet und filtert die Zeile, die das Wort LISTEN enthält im Ergebnis. Die zweite grep Der Befehl filtert die Ergebnisse so, dass nur die Elemente angezeigt werden, die mit :80 übereinstimmen .

netstat -tulpn | grep LISTEN | grep :80

Um mehr über die netstat-Flags zu erfahren, führen Sie den Befehl netstat –help aus.

Wenn der Port geöffnet ist, sehen Sie die folgende Ausgabe. Wie Sie sehen können, zeigt die Ausgabe, dass Port 80 auf dem System geöffnet ist. TCP ist der Protokolltyp und :::80 gibt an, dass es sich um ein TCPv6 handelt Hafen. 0.0.0.0:80 bedeutet, dass der Port für alle IPv4-Adressen offen ist. 80 ist der Standard-HTTP-Port für den Zugriff auf die Website.

Mit ss prüfen, ob ein Port offen ist

Die ss command ist ein weiteres Befehlszeilendienstprogramm zum Überprüfen offener Ports. Dieser Befehl zeigt Socket-Statistiken an, die Sie verwenden können, um zu bestätigen, ob ein Port offen ist oder nicht. Die ss Der Befehl zeigt mehr Informationen über offene Ports an als die anderen Tools.

Wie die netstat Befehl, der -t Flag weist ss an um nur TCP-Sockets anzuzeigen, -u um nur UDP-Sockets anzuzeigen, und -l um nur lauschende Steckdosen anzuzeigen. Die -p Flag gibt den Prozessnamen oder die PID an, die den Port verwendet.

ss -tulpn | grep LISTEN | grep :80

Sie sehen die folgende Ausgabe, wenn der Port offen ist. Wie Sie sehen, enthält die Ausgabe den Prozessnamen und die PID für jeden Listening-Port. In diesem Fall ist Port 80 offen und wird vom NGINX-Webserver verwendet.

Mit lsof prüfen, ob ein Port geöffnet ist

Der lsof Der Befehl ist ein weiteres praktisches Tool, um nach offenen Ports zu suchen. Der lsof Name steht für offene Dateien auflisten , das Informationen zu Dateien anzeigt, die auf dem System geöffnet sind. Zu diesen Informationen gehören Dateideskriptoren, Prozess-IDs, Benutzer-IDs usw.

Wie hilft Ihnen das Auflisten offener Dateien festzustellen, ob ein Port offen ist? Sie haben wahrscheinlich schon den Ausdruck „Alles in Linux ist eine Datei“ gehört – und dieser Ausdruck bedeutet, was er sagt.

Angenommen, Sie möchten überprüfen, ob Port 22 offen ist und Ihre Benutzer SSH auf Ihren Server zugreifen können. Führen Sie den folgenden Befehl aus, um offene Dateien mit aktiven Verbindungen in Port 22 aufzulisten.

Der -i Flag weist lsof an um alle geöffneten Internet-Sockets anzuzeigen. Der -P Flag zeigt die Portnummern anstelle der Dienstnamen. Und die -n -Flag unterdrückt DNS- und Dienstnamen-Lookups, sodass Sie die IP-Adressen anstelle der Remote-Hostnamen sehen.

lsof -i -P -n | grep LISTEN | grep :22

Wenn der Port geöffnet ist, sehen Sie die folgende Ausgabe. Wie Sie sehen können, enthält die Ausgabe Informationen über:

  • 1027 is the process id of the sshd service.
  • root is the user id that is using the port.
  • 3u and 4u are the file descriptors for IPv4 and IPv6, respectively.
  • 31035 and 31037 are the network ports for IPv4 and IPv6, respectively.
  • :22 indicates that port 22 is open for all IPv4 and IPv6 addresses.
  • (LISTEN) zeigt an, dass der Port auf eingehende Verbindungen wartet.
  • 0t0 is the status of the socket, which means that the socket is in the LISTEN state.

Überprüfen, ob ein Port mit nmap geöffnet ist

Bisher haben Sie gesehen, wie Sie mit der Befehlszeile überprüfen, ob ein Port unter Linux geöffnet ist. Aber was ist, wenn Sie überprüfen möchten, ob ein Port auf einem Remote-Computer geöffnet ist? In diesem Fall können Sie den nmap verwenden Werkzeug.

Aber bevor Sie nmap ausführen , beachten Sie, dass dieses Tool möglicherweise nicht Teil der Standardpakete in Ihrer Linux-Distribution ist. In diesem Fall müssen Sie zuerst nmap installieren indem Sie den folgenden Befehl ausführen.

apt install nmap -y

Führen Sie nun den folgenden Befehl aus, um zu überprüfen, ob ein Port auf einem Remotecomputer geöffnet ist. Dieser Befehl testet, ob Port 22 ist auf 159.89.176.25 geöffnet damit Ihr Benutzer SSH auf Ihren Server zugreifen kann. Ersetzen Sie die IP-Adresse nach Bedarf durch Ihre eigene.

nmap -p 22 159.89.176.25

Wie Sie sehen können, enthält die Ausgabe Informationen über:

  • Die Startzeit des Port-Scannens (2022-06-30 16:58 UTC ).
  • Die IP-Adresse des Remote-Computers (159.89.176.25 ).
  • Der Status des Ports (offen ).
  • Der Dienst, der den Port verwendet (ssh ).
  • Der Zustand des Hosts (up ).

Das Ergebnis bestätigt, dass Benutzer mithilfe der IP-Adresse und des Ports eine SSH-Verbindung zum Computer herstellen können.

ssh [email protected] -p 22

Der Screenshot unten zeigt eine erfolgreiche SSH-Verbindung zum Server, was beweist, dass Port 22 offen ist.

Testen, ob ein Port von einem Shell-Skript geöffnet ist

Automatisierung ist immer eine gute Idee. Das Überprüfen offener Ports durch Ausführen eines Shell-Skripts ist eine hervorragende Möglichkeit, mehrere Ports zu testen. Sie können alle vorherigen Methoden verwenden, um zu überprüfen, ob ein Port geöffnet ist. Aber für dieses Beispiel schreiben Sie ein einfaches Shell-Skript, das Netcat ausführt nc Befehl.

1. Erstellen Sie eine Datei namens check_port .sh in Ihrem Home-Verzeichnis mit Ihrem bevorzugten Texteditor. Dieses Beispiel verwendet nano.

nano check_port.sh

2. Kopieren Sie den folgenden Beispielcode in Ihren Editor. Ersetzen Sie 80 durch die Portnummer, die Sie überprüfen möchten.

Das wenn condition prüft mit dem nc-Befehl, ob Port 80 offen ist. Die 2>&1 und>/dev/null leiten die Fehler- bzw. Ausgabemeldungen nach /dev/null um. /dev/null ist eine spezielle Datei, die alles verwirft, was sie empfängt.

Wenn der Port offen ist, wird die check_port.sh Das Skript wird online auf der Konsole gedruckt. Andernfalls wird das Skript offline gedruckt.

if ( nc -zv localhost 80 2>&1 >/dev/null ); then
    echo 'Online'
else
    echo 'Offline'
fi

Die Skriptdatei sollte ähnlich wie im folgenden Screenshot aussehen. Speichern Sie das Skript und beenden Sie den Editor.

3. Führen Sie das Shell-Skript aus, um nach den offenen Ports zu suchen, die Sie im Skript angegeben haben.

bash check_port.sh

Abhängig davon, ob der Port geöffnet ist, sehen Sie eine der folgenden Ausgaben. In diesem Fall ist der Port offen, was die Meldung Online bestätigt.

Sie können dieses Shell-Skript verwenden, um zu überprüfen, ob ein Port in einem Intervall oder einem geplanten Job geöffnet ist. Scripting ist besonders hilfreich, wenn Sie mehrere Server überprüfen müssen. Sie müssen nur diese check_port.sh kopieren Skript an alle Server, die Sie überprüfen möchten, und führen Sie es mit CI/CD-Tools wie Jenkins oder Ansible aus.

Testen, ob ein Port mit PowerShell geöffnet ist

PowerShell verfügt über ein integriertes Cmdlet zum Testen von Netzwerkverbindungen mit dem Namen Test-NetConnection – aber dieses Cmdlet ist nur auf Windows-Systemen verfügbar. Mach dir keine Sorgen; Sie können weiterhin PowerShell in Linux verwenden, um offene Ports und Verbindungen mit der TcpClient-Klasse zu überprüfen.

Wenn Ihr Linux-Computer noch nicht über PowerShell verfügt, installieren Sie es anhand der Anweisungen in dieser Microsoft-Dokumentation:Installieren Sie PowerShell unter Linux.

1. Starten Sie PowerShell, indem Sie den folgenden Befehl ausführen.

pwsh

2. Als nächstes erstellen Sie mit Ihrem Texteditor eine Datei namens Test-Port.ps1. Dieses Beispiel verwendet nano.

nano Test-Port.ps1

3. Kopieren Sie als Nächstes den folgenden Code in Ihren Editor. Speichern Sie die Datei und verlassen Sie danach den Editor.

Hinweis:Dieser Code ist ein Auszug aus dem An All-in-One PowerShell Test Port Testing Tool.

<#
	.SYNOPSIS
		This function tests for open TCP/UDP ports.
	.DESCRIPTION
		This function tests any TCP/UDP port to see if it's open or closed.
	.NOTES

	.PARAMETER Computername
		One or more remote, comma-separated computer names
	.PARAMETER Port
		One or more comma-separated port numbers you'd like to test.
	.PARAMETER TcpTimeout
		The number of milliseconds that the function will wait until declaring
		the TCP port closed. Default is 1000.
	.EXAMPLE
		PS> Test-Port -Computername 'LABDC','LABDC2' -Protocol TCP 80,443
		
		This example tests the TCP network ports 80 and 443 on both the LABDC
		and LABDC2 servers.
	#>
[CmdletBinding()]
[OutputType([System.Management.Automation.PSCustomObject])]
param (
    [Parameter(Mandatory)]
    [string[]]$ComputerName,
    [Parameter(Mandatory)]
    [int[]]$Port,
    [Parameter()]
    [int]$TcpTimeout = 1000
)
begin {
    $Protocol = 'TCP'
}
process {
    foreach ($Computer in $ComputerName) {
        foreach ($Portx in $Port) {            
            $Output = @{ 'Computername' = $Computer; 'Port' = $Portx; 'Protocol' = $Protocol; 'Result' = '' }
            Write-Verbose "$($MyInvocation.MyCommand.Name) - Beginning port test on '$Computer' on port '$Protocol:$Portx'"

            $TcpClient = New-Object System.Net.Sockets.TcpClient
            $Connect = $TcpClient.BeginConnect($Computer, $Portx, $null, $null)
            $Wait = $Connect.AsyncWaitHandle.WaitOne($TcpTimeout, $false)
            if (!$Wait -or !($TcpClient.Connected)) {
                $TcpClient.Close()
                Write-Verbose "$($MyInvocation.MyCommand.Name) - '$Computer' failed port test on port '$Protocol:$Portx'"
                $Output.Result = $false
            }
            else {
                $TcpClient.EndConnect($Connect)
                $TcpClient.Close()
                Write-Verbose "$($MyInvocation.MyCommand.Name) - '$Computer' passed port test on port '$Protocol:$Portx'"
                $Output.Result = $true
                $TcpClient.Close()
                $TcpClient.Dispose()
            }
            [pscustomobject]$Output
        }
    }
}

4. Führen Sie nach dem Speichern des Skripts Test-Port.ps1 den folgenden Befehl aus, um die Ports 22, 80, 443 und 53 zu testen.

Der Parameter -ComputerName akzeptiert die Liste der Hostnamen, FQDN oder IP-Adressen der Zielmaschine(n).

Der Parameter -Port akzeptiert ein Array von einer oder mehreren zu testenden Portnummern.

./Test-Port.ps1 -ComputerName localhost -Port 22,80,443

Wie Sie unten sehen können, zeigt das Ergebnis, dass die Ports 22 und 80 offen sind (True), während Port 443 nicht geöffnet ist (False).

Um dasselbe Skript für mehrere Zielendpunkte und Ports auszuführen, bearbeiten Sie den folgenden Code, um alle Zielcomputer im ComputerName-Parameter und Portnummern im Port-Parameter hinzuzufügen.

./Test-Port.ps1 `
    -ComputerName adamtheautomator.com,localhost,8.8.8.8 `
    -Port 22,80,443,53

Schlussfolgerung

In diesem Artikel haben Sie gelernt, wie Sie überprüfen können, ob ein Port in Linux geöffnet ist oder nicht. Sie haben auch gelernt, über ein Shell-Skript und PowerShell zu prüfen, ob ein Port geöffnet ist. Jetzt können Sie eine dieser Methoden verwenden, um zu überprüfen, ob ein Port auf Ihrem Computer oder einem Remote-Computer geöffnet ist.

Hören Sie hier jedoch nicht auf. Sehen Sie sich andere Artikel zur Fehlerbehebung an, um Ihre Fähigkeiten als Systemadministrator weiter zu verbessern!


Linux
  1. 4 Möglichkeiten, Fotos auf der Linux-Befehlszeile zu bearbeiten

  2. Überprüfen Sie den Dateistatus unter Linux mit dem Befehl stat

  3. Meistern Sie den Linux-ls-Befehl

  4. 5 Möglichkeiten, den Move-Befehl unter Linux zu verwenden

  5. So überprüfen Sie den offenen Port auf einem Remote-Linux-System

Was sind Häfen? Wie überprüfe ich offene Linux-Ports?

Sysadmin-Tools:11 Möglichkeiten, den Befehl ls unter Linux zu verwenden

So überprüfen Sie, ob ein Port auf einem Remote-Linux-System geöffnet ist

3 Möglichkeiten zum Überprüfen der Linux-Kernel-Version in der Befehlszeile

So überprüfen Sie alle offenen Ports in Ihrem Linux-System

Wie überprüfe ich offene Ports in Linux?