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

28

Gibt es irgendeinen Befehl, den ich von der Bash ausführen kann, der mir sagt, ob ein Port bereits offen ist?

Codebeef
quelle

Antworten:

37

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     
Raupe
quelle
2
"netstat -antp | grep 80" wobei 80 die zu suchende Portnummer ist.
Umair A.
13

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 LISTENStatus AND ( -a) des Apache ( www-data) -Benutzers befinden.

Xerxes
quelle
8

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 -Otarget

amap ist auch eine gute Wahl, bei der versucht wird, die Serversoftware durch Aufrufen von Bannerseiten zu erraten.

für den Anfang versuchen:

amaptarget1-6000

Matthew
quelle
7

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)
Dave Cheney
quelle
4
netstat -tlnp  

Zeigen Sie tcp-Ports an, die langezeigt werden, zeigen nSie nur Umbers an (lösen Sie keine Namen auf - macht es schneller) und zeigen Sie den pProzess an, der das Listening ausführt (das pfunktioniert nur, wenn Sie root sind).

netstat -ulnp  

Zeige udp-Ports, die sind l, zeige nnur Umbers (löse keine Namen auf - macht es schneller) und zeige den pProzess, der das Listening durchführt (das pfunktioniert nur, wenn du root bist)

netstat -unp  

Zeige udp-Ports, die offen sind, aber nicht lauschen, zeige nnur Umbers (löse keine Namen auf - beschleunige das) und zeige den pProzess, der lauscht (das pfunktioniert nur, wenn du root bist)

netstat -an

Zeige all verwendeten Ports, zeigen nUmbren 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

Jason Tan
quelle
2

lsof (list open files) ist ein gutes Tool, um festzustellen, ob ein Prozess einen Port überwacht

lsof -P | grep: <Portnummer>

netstat ist ein gutes Tool, um zu sehen, ob aktive Verbindungen bestehen.

netstat -n | grep: <Portnummer>

Jamie
quelle
2

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.

colmmacc
quelle
2

Ich benutze Fixiereinheit (im Paket psmisc):

fixiereinheit -n tcp PORT

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 :)

Telnet 127.0.0.1 PORT

Okt.
quelle
2

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.

Josiah Johnston
quelle
Liebe es! Besuchen Sie uns 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
0

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 nodenicht nur funktioniert, nodejsoder ändern Sie das Programm entsprechend)

Speichern Sie Folgendes in einer Datei, die check-portin 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.

Alex028502
quelle