Frage Wie finde ich heraus, ob ein Port unter Ubuntu 8.04 verfügbar ist?


Gibt es einen Befehl, den ich von bash ausführen kann, der mir sagen wird, ob ein Port bereits geöffnet ist?


28
2018-05-29 10:59


Ursprung




Antworten:


Verwenden Sie "netstat", um die aktuell verwendeten Ports zu überprüfen.

Netstat-Ant

Proto Recv-Q Send-Q Lokale Adresse Fremdadressstatus PID / Programmname
tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* LISTEN 16297 / benannt
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / benannt
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / benannt
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 16297 / benannt 

37
2018-05-29 11:08



"netstat -antp | grep 80" wobei 80 die Portnummer ist, nach der gesucht werden soll. - Neutralizer


Dies (Netstat) ist die schnellste Lösung ...

netstat -lnt

... aber das gibt Ihnen mehr Kontrolle (auf Kosten der Geschwindigkeit (manchmal eine Menge Geschwindigkeit)) ...

lsof -n -i -a -u www-data

Das obige Beispiel zeigt Ihnen zum Beispiel alle geöffneten und geöffneten TCP - Ports LISTEN Zustand, UND (-a) gehört dem Apachen (www-data) Nutzer.


13
2018-05-29 11:23





Alle guten Antworten.

Sie erwähnen jedoch nicht, wenn Sie an dem betreffenden Computer angemeldet sind. ; P

Wenn nicht, dann nmap ist dein Freund.

Für Anfänger versuchen Sie:

nmap -Otarget

eine Landkarte ist auch eine gute Wahl, die auch versuchen wird, Serversoftware zu erraten, indem man Bannerseiten ergreift.

Für Anfänger versuchen Sie:

amaptarget1-6000


8
2018-05-29 11:35





Versuchen

lsof -i :<port number>

Wenn Sie irgendwelche Ergebnisse erhalten, ist etwas zu hören und zu binden, z

# lsof -i :80
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nginx    1833 nobody    3u  IPv4 51091229      0t0  TCP odessa.cheney.net:http->79.173.188.214:52918 (ESTABLISHED)
nginx    1833 nobody    5u  IPv4 46221856      0t0  TCP odessa.cheney.net:http->66.36.243.182:37876 (CLOSE_WAIT)
nginx    1833 nobody    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx    1833 nobody   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
nginx    1833 nobody   14u  IPv4 46221857      0t0  TCP odessa.cheney.net:http->66.36.243.182:37880 (CLOSE_WAIT)
nginx    1833 nobody   15u  IPv4 51091030      0t0  TCP odessa.cheney.net:http->msnbot-65-55-106-132.search.msn.com:51708 (ESTABLISHED)
nginx   11832   root    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx   11832   root   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)

6
2018-05-29 11:04





netstat -tlnp  

Show tCP-Ports, die sind listening, zeigen nnur Umbrella (Namen nicht auflösen - macht es schneller) und zeige die process, der das Zuhören macht (the p funktioniert nur, wenn Sie root sind)

netstat -ulnp  

Show udp-Ports, die sind listening, zeigen nnur Umbrella (Namen nicht auflösen - macht es schneller) und zeige die process, der das Zuhören macht (the p funktioniert nur, wenn Sie root sind)

netstat -unp  

Show udp-Ports, die offen sind, aber nicht hören, zeigen nnur (nur nicht Namen auflösen - macht schneller) und zeigt den process, der das Zuhören macht (the p funktioniert nur, wenn Sie root sind)

netstat -an

Show all Ports in Verwendung, zeigen nNur Mitglieder - Namen nicht auflösen

lsof -i <proto>@<host>:<port>

z.B

lsof -i tcp@localhost:25

um zu sehen, ob irgendetwas auf Port localhost 25 / TCP hört, oder

lsof -i tcp@0.0.0.0:636 

um zu sehen, ob es irgendwelche Sockets entweder lokal oder remote gibt, die entweder zuhören (lokal) oder verbunden sind (lokal oder remote) für jeden Host / Interface


4
2018-05-29 16:21





lsof (offene Dateien auflisten) ist ein gutes Werkzeug, um zu sehen, ob ein Prozess einen Port überwacht

lsof -P | grep: <Anschlussnummer>

Netstat ist ein gutes Werkzeug, um zu sehen, ob es aktive Verbindungen gibt.

netstat -n | grep: <Anschlussnummer>


2
2018-05-29 11:06





Sie erwähnen nicht, welches Protokoll Sie verwenden möchten, d. H. TCP oder UDP - und es ist auch wichtig zu erkennen, dass "Port" nicht ganz so granular ist, wie das System es unterstützt, Sockets zu disambiguieren. Z.B. Wenn Ihr System über mehrere IP-Adressen verfügt, wird Port 80 möglicherweise für alle IP-Adressen verwendet (die Anwendung ist entweder an "0.0.0.0" oder "::" oder an jede IP-Adresse gebunden) oder wird möglicherweise verwendet nur auf einer Teilmenge dieser IP-Adressen.

Der beste und sicherste Weg, um festzustellen, ob ein Port / eine Adresse frei und verfügbar ist, besteht darin, zu versuchen, eine Verbindung zu ihm herzustellen. Netcat ist dafür praktisch.

nc -l [-s a.b.c.d] -p NN

wird versuchen, an den TCP-Port NN zu binden (optional, der Standardwert sind alle Adressen) a.b.c.d. Fügen Sie die Option -u hinzu, um dasselbe in UDP zu tun.

Um festzustellen, ob der Port wirklich "offen" ist, müssen Sie nach potenziellen Firewall-Regeln suchen. Auch hier ist es am einfachsten, eine Verbindung zum Port herzustellen. Verwenden Sie netcat wie oben auf dem Server und verwenden Sie von einem Client aus netcat, um die Verbindung zu dem von Ihnen geöffneten Port herzustellen.

nc [-u] a.b.c.d NN

wird eine Verbindung zu Port NN auf a.b.c.d herstellen, wobei UDP verwendet wird, wenn das Flag -u angegeben wird. Sie können dann Eingabe in das Client-Ende eingeben, und es sollte auf dem Server angezeigt werden. Wenn dies nicht der Fall ist, müssen Sie sich system- und netzwerkspezifische Tools ansehen.


2
2018-05-29 13:20





ich benutze Fixiereinheit (im Paket psmisc):

fuser -n tcp PORT

Bringt das zurück pid des an diesen Port gebundenen Prozesses.

Wenn das zu wissen ist, ob ein Port zuhört, ist das gut alt telnet macht den Trick :)

Telnet 127.0.0.1 PORT


2
2018-05-29 16:05





Mit diesem One-Liner erhalten Sie eine Liste aller verwendeten TCP-Ports. Es funktioniert in bash auf Ubuntu und OS X.

netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq

Die Liste enthält einen Port pro Zeile ohne zusätzliche Informationen.


2
2018-06-27 19:30



Liebe es! gret Drop-in für Bash-Skripte, z.B .: for port in $(netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq); do echo EXECUTE COMMAND FOR PORT $port; done - Grzegorz Wierzowiecki


Viele Möglichkeiten, dies zu tun, gaben mir Probleme, weil sie nicht auf Linux und OSX arbeiteten, und / oder weil sie die Ports, die von Docker verwendet wurden, oder Prozesse, die root gehörten, nicht zeigten. Jetzt benutze ich einfach dieses Javascript-Programm:

(Vergewissern Sie sich, dass Sie einen Knoten installiert haben und mit dem er arbeitet node nicht nur nodejs oder ändere das Programm entsprechend)

Speichere folgendes in eine Datei namens check-port auf deinem Weg oder in deinem Projekt

#!/usr/bin/env node
var http = require('http');
var app = new http.Server();
app.listen(process.argv[2], () => {
  process.exit(0)
});

Berechtigungen festlegen

chmod +x path/to/check-port

Lauf von deinem Weg

check-port 8080

oder laufe aus demselben Verzeichnis

./check-port 8080

Bis jetzt funktioniert es ziemlich gut.


0
2018-02-02 11:07