
Erklären Sie, warum ein Linux-TCP-Port erreichbar sein kann oder nicht
PortClue erklärt, warum ein TCP-Port auf einer Linux-Maschine erreichbar sein könnte oder nicht.
Es verwandelt Socket-, Prozess-, Firewall- und Docker-Zustand in eine kurze Beweiskette, statt
dass Sie ss, /proc, nftables, iptables und docker inspect manuell korrelieren müssen.

Führen Sie es ohne Port aus, um zu ermitteln, welche lokalen TCP-Endpunkte Aufmerksamkeit verdienen:
$ sudo portclue
LOCAL TCP LISTENERS
PORT SERVICE CONFIDENCE BIND OWNER SOURCE BIND SCOPE
22 OpenSSH server HIGH 0.0.0.0,:: ssh.service host ALL_INTERFACES
8080 NGINX web server HIGH 0.0.0.0,:: nginx host ALL_INTERFACES
8443 api service MEDIUM 192.0.2.10 demo-api docker SPECIFIC_INTERFACE
9000 Python HTTP server MEDIUM 127.0.0.1 python3 host LOOPBACK_ONLY
BIND SCOPE describes socket binding, not firewall reachability.
Run `portclue PORT` for the complete evidence chain and local exposure verdict.
ALL_INTERFACES, SPECIFIC_INTERFACE und LOOPBACK_ONLY beschreiben, wo ein
Socket Datenverkehr annimmt. Sie behaupten bewusst nicht, dass eine Firewall ihn zulässt.
Untersuchen Sie einen Port für die vollständige lokale Firewall-Analyse:
$ sudo portclue 8080
POTENTIAL EXTERNAL EXPOSURE
TCP port 8080
0.0.0.0:8080/tcp [POTENTIAL]
Service NGINX web server
Category web
Confidence HIGH
Identity evidence executable basename matched "nginx"
-> LISTEN NETLINK_INET_DIAG reports socket inode 123456 bound to 0.0.0.0:8080/tcp
-> OWNED PID 4242 (nginx), systemd unit nginx.service
-> ALL_INTERFACES 0.0.0.0 accepts traffic addressed to any local interface
-> ACCEPT nftables: a direct rule matches TCP destination port 8080 and returns accept
Unknown outside this machine:
- router port forwarding
- cloud firewall or security group
- upstream NAT, including carrier-grade NAT
[!IMPORTANT] PortClue v0.1 ist ein früher, konservativer Linux-Prototyp.
POTENTIALbedeutet, dass der beobachtete lokale Pfad Datenverkehr zulässt; es behauptet nicht, dass ein Port aus dem öffentlichen Internet erreichbar ist. Nicht unterstützte Firewall-Ausdrücke erzeugenUNKNOWN.
ss oder lsofNETLINK_INET_DIAG, derselben Kernel-
Schnittstelle, die ss verwendet, und Prozessdetails aus /proc. Nichts wird aus
der Ausgabe eines anderen Tools geparst, sodass ein Container ohne ss und lsof trotzdem
den Listener und seinen Eigentümer erhält. Die Firewall-Analyse führt jedoch nft oder iptables-save aus und
meldet UNKNOWN ohne sie.ss -ltnp liefert Ihnen den Socket und die PID.
Ob dieses Binding nur auf Loopback beschränkt ist, ob eine Firewall-Regel es zulässt und ob
der Port eine Docker-Veröffentlichung statt eines Host-Listeners ist, ist Arbeit, die Sie sonst
manuell erledigen würden.UNKNOWN, niemals eine
selbstsichere falsche Antwort.NETLINK_INET_DIAG, nicht durch Scraping der ss-Ausgabe/procsystemctl shownft --json list rulesetiptables-save, wenn nftables nicht verfügbar istPortClue identifiziert, zu wem ein Port gehört, bevor es die Exposition erklärt. Beweise werden in dieser Reihenfolge gewichtet:
/etc/services.Ein tatsächlicher Eigentümer überschreibt immer einen konventionellen Portnamen. Wenn nur die Portkonvention
bekannt ist, wird die Identität explizit mit LOW-Konfidenz markiert. Der eingebettete Katalog ist
in internal/identify/catalog.json gespeichert und wird
innerhalb der einzelnen Binärdatei ausgeliefert; PortClue lädt zur Laufzeit keine Identitätsdaten herunter.
PortClue ist schreibgeschützt. Es verbindet sich nicht mit dem abgefragten Port, scannt keinen anderen Host, ändert keine Firewall-Regeln, stoppt keine Prozesse oder Container, lädt keine Daten hoch und führt keinen Daemon aus.
Läuft unter Linux (amd64 und arm64). Das Skript lädt das passende GitHub-
Release-Archiv herunter, verifiziert SHA256SUMS und installiert eine einzelne Binärdatei. Es
ändert nicht die Shell-Konfiguration.
Benutzerinstallation (Standard, kein Root). Installiert nach ~/.local/bin, im Besitz von Ihnen:
curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh
portclue
Eine Benutzerinstallation läuft ohne Root und meldet die für Ihr Konto verfügbaren
Beweise und weist darauf hin, was fehlt. Dies reicht aus, um Listener und Docker-
Mappings zu erkunden. Da sudo nicht in ~/.local/bin sucht und diese Binärdatei
von Ihrem Benutzer beschreibbar ist, führen Sie diese Kopie nicht mit sudo aus.
Systeminstallation (Root-eigentümerschaft, für sudo portclue). PortClue liest die vollständigsten
Beweise (eingeschränktes /proc, vollständiger Firewall-Zustand) als Root. Dafür
installieren Sie eine Root-eigene Binärdatei nach /usr/local/bin (das Skript verwendet sudo nur
für den letzten Installationsschritt, nicht zum Herunterladen oder Entpacken):
curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh -s -- --system
sudo portclue
Optionale Überschreibungen: PORTCLUE_VERSION=0.1.2 (ohne führendes v) und
PORTCLUE_INSTALL_DIR für beide Modi.
Deinstallation:
# user install
rm ~/.local/bin/portclue
# system install
sudo rm /usr/local/bin/portclue
# or, matching how you installed:
curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh -s -- --uninstall
curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh -s -- --system --uninstall
Laden Sie das passende portclue-VERSION-linux-ARCH.tar.gz und SHA256SUMS von
GitHub Releases herunter, verifizieren Sie die
Prüfsumme und installieren Sie dann:
sha256sum -c SHA256SUMS --ignore-missing
tar -xzf portclue-0.1.2-linux-amd64.tar.gz # or linux-arm64
sudo install -m 0755 portclue-0.1.2-linux-amd64/portclue /usr/local/bin/portclue
portclue --version
Architektur-Zuordnung:
uname -m | Archiv |
|---|---|
x86_64 | linux-amd64 |
aarch64, arm64 | linux-arm64 |