it-swarm.com.de

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

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

28
Codebeef

Verwenden Sie "netstat", um die derzeit 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:* HÖREN 16297/benannt 
 TCP 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* HÖREN 16297/benannt 
 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 
37
Caterpillar

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 Ihnen beispielsweise alle TCP - Ports geöffnet und im Zustand LISTEN, AND (-a) gehört zum Apachen (www-data) Benutzer.

13
Xerxes

Alles gute Antworten.

Sie erwähnen jedoch nicht, ob Sie am 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, die auch versucht, Serversoftware zu erraten, indem sie Bannerseiten greift.

für den Anfang versuchen:

amaptarget1-6000

8
Matthew

Versuchen

lsof -i :<port number>

Wenn Sie Ergebnisse erzielen, 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)
7
Dave Cheney
netstat -tlnp  

Zeigen Sie tcp-Ports an, die listening sind, zeigen Sie nur numbers an (lösen Sie keine Namen auf - macht es schneller) und zeigen Sie den pProzess, der das ausführt Hören (das p funktioniert nur, wenn Sie root sind)

netstat -ulnp  

Zeigen Sie udp-Ports an, die listening sind, zeigen Sie nur numbers an (lösen Sie keine Namen auf - macht es schneller) und zeigen Sie den pProzess, der das ausführt Hören (das p funktioniert nur, wenn Sie root sind)

netstat -unp  

Zeigen Sie udp-Ports an, die geöffnet sind, aber nicht abhören, zeigen Sie nur numbers an (lösen Sie keine Namen auf - macht es schneller) und zeigen Sie den pProzess an, der das Abhören durchführt ( das p funktioniert nur, wenn Sie root sind)

netstat -an

Zeige all verwendete Ports an, zeige nur numbers - löse keine Namen auf

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

z.B

lsof -i [email protected]:25

um zu sehen, ob etwas auf Port localhost 25/TCP lauscht, oder

lsof -i [email protected]:636 

um zu sehen, ob es Sockets gibt, die entweder lokal oder remote entweder lauschen (lokal) oder mit einem Host/einer Schnittstelle verbunden sind (lokal oder remote)

4
Jason Tan

lsof (offene Dateien auflisten) ist ein gutes Tool, um festzustellen, ob ein Prozess einen Port überwacht

lsof -P | grep: <Portnummer>

netstat ist ein gutes Werkzeug, um festzustellen, ob aktive Verbindungen bestehen.

netstat -n | grep: <Portnummer>

2
Jamie

Ich benutze Fixiereinheit (im Paket psmisc):

fixiereinheit -n TCP PORT

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

Wenn dies wissen soll, ob ein Port empfangsbereit ist, macht das gute alte Telnet den Trick :)

telnet 127.0.0.1 PORT

2
Oct

Sie erwähnen nicht, welches Protokoll Sie verwenden möchten, dh TCP oder UDP - und es ist auch wichtig zu erkennen, dass "Port" nicht ganz so detailliert ist, wie das System es unterstützt, um Sockets zu disambiguieren Wenn Ihr System über mehrere IP-Adressen verfügt, wird möglicherweise Port 80 für alle IP-Adressen verwendet (entweder hat die Anwendung nacheinander an "0.0.0.0" oder "::" oder an jede IP-Adresse gebunden) oder er wird möglicherweise verwendet nur für eine 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, sich daran zu binden. Netcat ist dafür praktisch.

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

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

Um festzustellen, ob der Port wirklich "offen" ist, müssen Sie zunächst nach möglichen Firewall-Regeln suchen. Wieder 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 eine Verbindung zu dem von Ihnen geöffneten Port herzustellen.

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

stellt über UDP eine Verbindung zu Port NN auf a.b.c.d her, wenn das Flag -u angegeben ist. Sie können dann Eingaben in das Client-Ende eingeben, die auf dem Server angezeigt werden sollen. Wenn dies nicht der Fall ist, müssen Sie sich mit system- und netzwerkspezifischen Tools befassen.

2
colmmacc

Mit diesem Einzeiler erhalten Sie eine Liste aller verwendeten TCP - Ports. Er 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 Leitung ohne zusätzliche Informationen.

2
Josiah Johnston

Viele Möglichkeiten, dies zu tun, gaben mir Probleme, weil sie unter Linux und OSX nicht funktionierten und/oder weil sie die von Docker verwendeten Ports oder Prozesse, die Root gehörten, nicht zeigten. Jetzt benutze ich nur dieses Javascript-Programm:

(Stellen Sie sicher, dass Sie den Knoten installiert haben und dass er mit node funktioniert, nicht nur mit nodejs, oder ändern Sie das Programm entsprechend.)

speichern Sie Folgendes in einer Datei mit dem Namen check-port auf Ihrem Weg oder in Ihrem 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

renne von deinem Weg

check-port 8080

oder aus demselben Verzeichnis ausführen

./check-port 8080

bisher funktioniert es ziemlich gut.

0
Alex028502