Gibt es irgendeinen Befehl, den ich von der Bash ausführen kann, der mir sagt, ob ein Port bereits offen ist?
28
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 ...
... aber das gibt dir mehr Kontrolle (auf Kosten der Geschwindigkeit (manchmal viel Geschwindigkeit)) ...
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.quelle
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
quelle
Versuchen
Wenn Sie irgendwelche Ergebnisse erhalten, hört etwas zu und ist gebunden, z
quelle
Zeigen Sie
t
cp-Ports an, diel
angezeigt werden, zeigenn
Sie nur Umbers an (lösen Sie keine Namen auf - macht es schneller) und zeigen Sie denp
Prozess an, der das Listening ausführt (dasp
funktioniert nur, wenn Sie root sind).Zeige
u
dp-Ports, die sindl
, zeigen
nur Umbers (löse keine Namen auf - macht es schneller) und zeige denp
Prozess, der das Listening durchführt (dasp
funktioniert nur, wenn du root bist)Zeige
u
dp-Ports, die offen sind, aber nicht lauschen, zeigen
nur Umbers (löse keine Namen auf - beschleunige das) und zeige denp
Prozess, der lauscht (dasp
funktioniert nur, wenn du root bist)Zeige
a
ll verwendeten Ports, zeigenn
Umbren nur - lösen keine Namenz.B
um zu sehen, ob irgendetwas auf Port localhost 25 / TCP lauscht, oder
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
quelle
lsof (list open files) ist ein gutes Tool, um festzustellen, ob ein Prozess einen Port überwacht
netstat ist ein gutes Tool, um zu sehen, ob aktive Verbindungen bestehen.
quelle
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.
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.
quelle
Ich benutze Fixiereinheit (im Paket psmisc):
Bringt wieder die pid des Prozesses an diesen Port gebunden.
Wenn dies wissen soll, ob ein Port lauscht, macht das gute alte Telnet den Trick :)
quelle
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.
quelle
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 wirdBerechtigungen festlegen
renn von deinem weg
oder aus demselben Verzeichnis ausführen
Bisher funktioniert es ziemlich gut.
quelle