
बताएं कि Linux TCP पोर्ट पहुंच योग्य क्यों हो सकता है या नहीं
PortClue बताता है कि Linux मशीन पर कोई TCP पोर्ट क्यों पहुँच योग्य हो सकता है या नहीं।
यह socket, process, firewall, और Docker स्थिति को एक छोटी evidence chain में बदल देता है,
बजाय इसके कि आपको ss, /proc, nftables, iptables, और docker inspect को हाथ से
आपस में जोड़ना पड़े।

बिना पोर्ट दिए इसे चलाएँ ताकि पता चले कि कौन से स्थानीय TCP endpoints ध्यान देने योग्य हैं:
$ 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, और LOOPBACK_ONLY बताते हैं कि कोई
socket कहाँ से traffic स्वीकार करता है। ये जानबूझकर यह दावा नहीं करते कि firewall इसे अनुमति देता है।
पूर्ण स्थानीय firewall विश्लेषण के लिए किसी पोर्ट का निरीक्षण करें:
$ 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 एक प्रारंभिक, रूढ़िवादी Linux prototype है।
POTENTIALका अर्थ है कि देखा गया स्थानीय path traffic की अनुमति देता है; यह दावा नहीं करता कि कोई पोर्ट public internet से पहुँच योग्य है। असमर्थित firewall expressionsUNKNOWNउत्पन्न करते हैं।
NETLINK_INET_DIAG के माध्यम से, ss output को scrape करके नहीं/proc के माध्यम सेsystemctl show के माध्यम से active socket triggersnft --json list ruleset के माध्यम सेiptables-save के माध्यम सेPortClue exposure समझाने से पहले पहचानता है कि कोई पोर्ट किसका है। Evidence इस क्रम में ranked है:
/etc/services port convention.वास्तविक owner हमेशा conventional port name को override करता है। यदि केवल port convention
ज्ञात हो, तो identity स्पष्ट रूप से LOW confidence के रूप में चिह्नित की जाती है। Embedded catalog
internal/identify/catalog.json में संग्रहीत है और single binary
के अंदर ship होता है; PortClue runtime पर identity data download नहीं करता।
PortClue read-only है। यह queried port से connect नहीं करता, किसी अन्य host को scan नहीं करता, firewall rules नहीं बदलता, processes या containers नहीं रोकता, data upload नहीं करता, या daemon नहीं चलाता।
Linux (amd64 और arm64) पर चलता है। Script matching GitHub
Release archive download करता है, SHA256SUMS verify करता है, और एक single binary install करता है। यह
shell config को modify नहीं करता।
User install (default, no root)। ~/.local/bin में install करता है, जो आपके स्वामित्व में है:
curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh
portclue
User install बिना root के चलता है और आपके account को उपलब्ध evidence की रिपोर्ट करता है,
यह बताते हुए कि क्या missing है। यह listeners और Docker mappings को explore करने के लिए पर्याप्त है।
चूँकि sudo ~/.local/bin को search नहीं करता और यह binary आपके user द्वारा writable है,
इस copy को sudo के साथ न चलाएँ।
System install (root-owned, sudo portclue के लिए)। PortClue root के रूप में सबसे
पूर्ण evidence (restricted /proc, पूर्ण firewall state) पढ़ता है। इसके लिए,
/usr/local/bin में root-owned binary install करें (script sudo का उपयोग केवल
अंतिम install step के लिए करता है, download या extract के लिए नहीं):
curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh -s -- --system
sudo portclue
वैकल्पिक overrides: PORTCLUE_VERSION=0.1.2 (बिना leading v) और
PORTCLUE_INSTALL_DIR दोनों modes के लिए।
Uninstall:
# 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
GitHub Releases से matching
portclue-VERSION-linux-ARCH.tar.gz और SHA256SUMS download करें, checksum
verify करें, फिर install करें:
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
Architecture mapping:
uname -m | Archive |
|---|---|
x86_64 | linux-amd64 |
aarch64, arm64 | linux-arm64 |
प्रत्येक archive में binary, README, Apache-2.0 license, और third-party notices शामिल हैं।
Linux और Go 1.25+ आवश्यक:
go install github.com/pbxqdown/portclue/cmd/[email protected]
यह binary को $(go env GOPATH)/bin में रखता है। जब आप reproducible install artifacts चाहते हों
तो checksum-verified release archive या install script को प्राथमिकता दें।
आवश्यकताएँ: Linux और Go 1.25 या नया।
go build -o portclue ./cmd/portclue
./portclue
./portclue --json
./portclue 8080
./portclue --json 8080
Overview mode वैकल्पिक filters स्वीकार करता है (ignored fields unconstrained रहते हैं):
./portclue --bind-scope ALL_INTERFACES,SPECIFIC_INTERFACE
./portclue --source docker
./portclue --min-confidence MEDIUM
./portclue --json --bind-scope ALL_INTERFACES --min-confidence HIGH
--bind-scope ALL_INTERFACES, SPECIFIC_INTERFACE, और LOOPBACK_ONLY की
comma-separated list स्वीकार करता है। --source host और/या docker स्वीकार करता है।
--min-confidence entries को HIGH, MEDIUM, LOW, या UNKNOWN पर या उससे ऊपर रखता है।
ये flags केवल तब लागू होते हैं जब PORT छोड़ा गया हो।
बिना root चलाने पर भी उपयोगी listener, Docker mapping, और bind-address evidence मिलता है।
जब /proc या firewall state restricted हो तो process identity और firewall evidence अधूरा हो सकता है;
PortClue इसे Incomplete evidence के अंतर्गत रिपोर्ट करता है। सबसे पूर्ण परिणाम के लिए sudo का उपयोग करें:
sudo ./portclue
sudo ./portclue --bind-scope ALL_INTERFACES,SPECIFIC_INTERFACE
sudo ./portclue 8080
JSON forms scripts और agents के लिए हैं। Overview JSON schema_version: 2,
mode: "overview", और entries का उपयोग करता है जिसमें service_identity और
bind_scope होते हैं। Detailed report schema_version: 1, query, verdict,
paths का उपयोग करता है जिसमें service_identity, unknowns, और warnings होते हैं।
एक schema version के भीतर, मौजूदा field names और meanings stable माने जाते हैं।
नए optional fields जोड़े जा सकते हैं। किसी field को हटाने, rename करने, या असंगत meaning
परिवर्तन के लिए नया schema_version आवश्यक है। दोनों contracts के regression tests हैं।
| Verdict | Meaning |
|---|
--bind-scope, --source, --min-confidenceशामिल नहीं: UDP, Podman, Kubernetes, cloud security groups, router discovery, remote scanning, eBPF, continuous monitoring, या remediation।
PortClue जानबूझकर पूरे Netfilter virtual machine को implement करने का प्रयास नहीं करता।
पहला version direct rules के एक छोटे समूह को समझता है। Multiple base
chains, jumps, sets, maps, fib, dynamic expressions, या अन्य unrecognized logic
UNKNOWN उत्पन्न करते हैं जब वे query को प्रभावित कर सकते हों। यह चुपचाप किसी
unparsed rule को accept या drop मानने से अधिक सुरक्षित है।
Scope, testing, और firewall UNKNOWN परिणामों की रिपोर्ट कैसे करें, इसके लिए
CONTRIBUTING.md देखें।
make check
make release VERSION=0.1.2
make release के लिए clean Git worktree आवश्यक है और यह versioned amd64/arm64
archives तथा dist/SHA256SUMS बनाता है। Configured GitHub remote पर v* tag push करने से
वही checks चलते हैं और GitHub release बनता है। Makefile द्वारा कोई tag नहीं बनाया जाता।
दीर्घकालिक design analyzer, causal model, और renderers को platform-neutral रखता है। Linux पहला evidence backend है; यदि Linux prototype वास्तविक उपयोग अर्जित करता है तो Windows संभवतः दूसरा backend होगा।
PortClue Apache License 2.0 के अंतर्गत licensed है। LICENSE देखें। Binary archives में THIRD_PARTY_NOTICES भी शामिल हैं।
Release history और JSON compatibility notes के लिए CHANGELOG.md देखें, supported versions और private vulnerability reporting के लिए SECURITY.md, और योगदान देने के लिए CONTRIBUTING.md देखें।
POTENTIAL | एक non-loopback local path देखा जाता है और समर्थित firewall evidence इसे अनुमति देता है। External routing अज्ञात है। |
NOT_EXPOSED_LOCALLY | कोई listener/mapping मौजूद नहीं है, bind loopback-only है, या समर्थित local firewall evidence path को block करता है। |
UNKNOWN | कोई आवश्यक तथ्य अनुपलब्ध है या कोई संभावित रूप से प्रासंगिक firewall expression समर्थित नहीं है। |
CONFIRMED | भविष्य के explicit external probe के लिए आरक्षित। वर्तमान local-only CLI इसे कभी emit नहीं करता। |