Antworten:
Verwenden Sie "netstat", um die aktuell verwendeten Ports zu überprüfen.
netstat -antp Proto Recv-Q Send-Q Lokale Adresse Fremdadresse Status PID / Programmname tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* LISTEN 16297 / named tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / named tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 16297 / named
Dies (netstat) ist die schnellste Lösung ...
netstat -lnt
... aber das gibt dir mehr Kontrolle (auf Kosten der Geschwindigkeit (manchmal viel Geschwindigkeit)) ...
lsof -n -i -a -u www-data
Das obige Beispiel zeigt zum Beispiel, dass alle TCP-Ports geöffnet sind und sich im LISTEN
Status AND ( -a
) des Apache ( www-data
) -Benutzers befinden.
Alles gute Antworten.
Sie erwähnen jedoch nicht, ob Sie an dem betreffenden Computer angemeldet sind. ; P
Wenn nicht, dann ist nmap dein Freund.
für den Anfang versuchen:
nmap -O
target
amap ist auch eine gute Wahl, bei der versucht wird, die Serversoftware durch Aufrufen von Bannerseiten zu erraten.
für den Anfang versuchen:
amap
target
1-6000
Versuchen
lsof -i :<port number>
Wenn Sie irgendwelche Ergebnisse erhalten, hört etwas zu und ist gebunden, 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)
netstat -tlnp
Zeigen Sie t
cp-Ports an, die l
angezeigt werden, zeigen n
Sie nur Umbers an (lösen Sie keine Namen auf - macht es schneller) und zeigen Sie den p
Prozess an, der das Listening ausführt (das p
funktioniert nur, wenn Sie root sind).
netstat -ulnp
Zeige u
dp-Ports, die sind l
, zeige n
nur Umbers (löse keine Namen auf - macht es schneller) und zeige den p
Prozess, der das Listening durchführt (das p
funktioniert nur, wenn du root bist)
netstat -unp
Zeige u
dp-Ports, die offen sind, aber nicht lauschen, zeige n
nur Umbers (löse keine Namen auf - beschleunige das) und zeige den p
Prozess, der lauscht (das p
funktioniert nur, wenn du root bist)
netstat -an
Zeige a
ll verwendeten Ports, zeigen n
Umbren nur - lösen keine Namen
lsof -i <proto>@<host>:<port>
z.B
lsof -i tcp@localhost:25
um zu sehen, ob irgendetwas auf Port localhost 25 / TCP lauscht, oder
lsof -i tcp@0.0.0.0:636
um zu sehen, ob es Sockets gibt, die entweder lokal oder remote sind (lokal) oder mit (lokal oder remote) für einen Host / eine Schnittstelle verbunden sind
Sie erwähnen nicht, welches Protokoll Sie verwenden möchten, dh TCP oder UDP - und es ist auch wichtig zu wissen, dass "Port" nicht ganz so detailliert ist, wie es das System unterstützt, um Sockets zu disambiguieren. Wenn Ihr System beispielsweise über mehrere IP-Adressen verfügt, wird Port 80 möglicherweise für alle IP-Adressen verwendet (entweder hat die Anwendung an "0.0.0.0" oder "::" oder an jede IP-Adresse nacheinander gebunden), oder es befindet sich möglicherweise in Nur für eine Teilmenge dieser IP-Adressen verwenden.
Der beste und sicherste Weg, um festzustellen, ob ein Port / eine Adresse frei und verfügbar ist, besteht darin, zu versuchen, sich daran zu binden. Netcat ist dafür praktisch.
nc -l [-s abcd] -p NN
versucht, eine Bindung an den TCP-Port NN herzustellen (optional sind alle Adressen Standard). abcd Fügen Sie die Option -u hinzu, um dasselbe in UDP zu tun.
Um festzustellen, ob der Port wirklich "offen" ist, müssen Sie sich nach möglichen Firewall-Regeln umsehen. Wiederum ist es am einfachsten, eine Verbindung zum Port herzustellen. Verwenden Sie netcat wie oben beschrieben auf dem Server und verwenden Sie netcat von einem Client aus, um eine Verbindung zu dem von Ihnen geöffneten Port herzustellen.
nc [-u] abcd NN
stellt eine Verbindung zu Port NN auf abcd her und verwendet UDP, wenn das Flag -u angegeben ist. Sie können dann die Eingabe in das Client-Ende eingeben, und sie sollte auf dem Server angezeigt werden. Ist dies nicht der Fall, müssen Sie sich mit system- und netzwerkspezifischen Tools befassen.
Mit diesem Einzeiler erhalten Sie eine Liste aller verwendeten TCP-Ports. Es funktioniert in Bash unter 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.
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
Viele Möglichkeiten, dies zu tun, gaben mir Probleme, weil sie unter Linux und OSX nicht funktionierten und / oder weil sie nicht die von Docker verwendeten Ports oder Prozesse zeigten, die root gehörten. Jetzt benutze ich nur dieses Javascript-Programm:
(Stellen Sie sicher, dass Sie einen Knoten installiert haben und dieser node
nicht nur funktioniert, nodejs
oder ändern Sie das Programm entsprechend)
Speichern Sie Folgendes in einer Datei, die check-port
in Ihrem Pfad oder in Ihrem Projekt aufgerufen wird
#!/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
renn von deinem weg
check-port 8080
oder aus demselben Verzeichnis ausführen
./check-port 8080
Bisher funktioniert es ziemlich gut.