Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
portclue — Explique pourquoi un port TCP Linux peut être ou ne pas être joignable | Kitploit
Outils/GitHubGitHub/pbxqdown/portclue
Outils DéfensifsSécurité des ConteneursAudit de ConfigurationCollecte d'InformationsSécurité RéseauUtilitaires et Frameworks
GitHubpbxqdown/portclue

portclue

Explique pourquoi un port TCP Linux peut être ou ne pas être joignable

Voir le dépôt
345il y a 27 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Site web
Partager

PortClue

CI Release License Go

PortClue explique pourquoi un port TCP sur une machine Linux peut ou non être joignable. Il transforme l'état des sockets, des processus, du pare-feu et de Docker en une courte chaîne de preuves au lieu de vous obliger à corréler manuellement ss, /proc, nftables, iptables et docker inspect.

Démonstration de PortClue : un aperçu des écouteurs TCP locaux, puis la chaîne de preuves pour le port 8080

Exécutez-le sans port pour découvrir quels points de terminaison TCP locaux méritent votre attention :

$ 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 et LOOPBACK_ONLY décrivent où un socket accepte le trafic. Ils ne prétendent délibérément pas qu'un pare-feu l'autorise. Inspectez un port pour l'analyse complète du pare-feu local :

$ 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 est un prototype Linux précoce et conservateur. POTENTIAL signifie que le chemin local observé autorise le trafic ; cela ne prétend pas qu'un port est joignable depuis l'internet public. Les expressions de pare-feu non prises en charge produisent UNKNOWN.

Pourquoi pas ss ou lsof

  • Il n'en a pas besoin. Les écouteurs proviennent de NETLINK_INET_DIAG, la même interface du noyau que celle utilisée par ss, et les détails des processus de /proc. Rien n'est analysé à partir de la sortie d'un autre outil, donc un conteneur sans ss ni lsof obtient quand même l'écouteur et son propriétaire. L'analyse du pare-feu exécute bien nft ou iptables-save, et signale UNKNOWN sans eux.
  • Il répond à la question suivante. ss -ltnp vous donne le socket et le PID. Savoir si ce bind est limité à la loopback, si une règle de pare-feu l'autorise, et si le port est une publication Docker plutôt qu'un écouteur hôte est un travail que vous feriez autrement à la main.
  • Il ne devinera pas. Une règle de pare-feu que PortClue ne peut pas modéliser donne UNKNOWN, jamais une réponse fausse avec assurance.

Ce qu'il lit

  • Les écouteurs TCP via NETLINK_INET_DIAG, et non en analysant la sortie de ss
  • la propriété du processus, l'exécutable, la ligne de commande, le cgroup et l'espace de noms réseau via /proc
  • les descriptions d'unités systemd à partir des fichiers d'unités installés et les déclencheurs de socket actifs via systemctl show
  • nftables via nft --json list ruleset
  • iptables via iptables-save lorsque nftables n'est pas disponible
  • les ports publiés par Docker via l'API HTTP locale du moteur Docker, y compris l'image et les labels

Identité du service

PortClue identifie à quoi appartient un port avant d'expliquer l'exposition. Les preuves sont classées dans cet ordre :

  1. exécutable observé, unité systemd et déclencheur de socket actif ;
  2. image Docker, nom du conteneur et labels ;
  3. le catalogue de services embarqué et sélectionné ;
  4. la convention de port locale /etc/services.

Un propriétaire réel prime toujours sur un nom de port conventionnel. Si seule la convention de port est connue, l'identité est explicitement marquée avec une confiance LOW. Le catalogue embarqué est stocké dans internal/identify/catalog.json et est livré à l'intérieur du binaire unique ; PortClue ne télécharge pas de données d'identité à l'exécution.

PortClue est en lecture seule. Il ne se connecte pas au port interrogé, ne scanne pas un autre hôte, ne modifie pas les règles de pare-feu, n'arrête pas de processus ou de conteneurs, ne téléverse pas de données et n'exécute pas de démon.

Installation

Script d'installation (recommandé)

Fonctionne sous Linux (amd64 et arm64). Le script télécharge l'archive GitHub Release correspondante, vérifie SHA256SUMS et installe un binaire unique. Il ne modifie pas la configuration du shell.

Installation utilisateur (par défaut, sans root). Installe dans ~/.local/bin, vous en êtes propriétaire :

curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh
portclue

Une installation utilisateur s'exécute sans root et rapporte les preuves disponibles pour votre compte, en notant ce qui manque. Cela suffit pour explorer les écouteurs et les mappages Docker. Comme sudo ne cherche pas dans ~/.local/bin et que ce binaire est modifiable par votre utilisateur, n'exécutez pas cette copie avec sudo.

Installation système (propriété de root, pour sudo portclue). PortClue lit les preuves les plus complètes (restreintes /proc, état complet du pare-feu) en tant que root. Pour cela, installez un binaire appartenant à root dans /usr/local/bin (le script utilise sudo uniquement pour l'étape d'installation finale, pas pour le téléchargement ou l'extraction) :

curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh -s -- --system
sudo portclue

Surcharges optionnelles : PORTCLUE_VERSION=0.1.2 (sans v initial) et PORTCLUE_INSTALL_DIR pour l'un ou l'autre mode.

Désinstallation :

# 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

Archive de release

Téléchargez le fichier portclue-VERSION-linux-ARCH.tar.gz correspondant et SHA256SUMS depuis GitHub Releases, vérifiez la somme de contrôle, puis installez :

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

Correspondance des architectures :

Télécharger l’outil