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

बिना पोर्ट के चलाएँ ताकि पता चले कि कौन से स्थानीय TCP एंडपॉइंट ध्यान देने योग्य हैं:
$ 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 कहाँ ट्रैफ़िक स्वीकार करता है। ये जानबूझकर यह दावा नहीं करते कि कोई 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 प्रोटोटाइप है।
POTENTIALका अर्थ है कि देखा गया स्थानीय पथ ट्रैफ़िक की अनुमति देता है; यह दावा नहीं करता कि कोई पोर्ट सार्वजनिक इंटरनेट से पहुँच योग्य है। असमर्थित firewall अभिव्यक्तियाँUNKNOWNउत्पन्न करती हैं।
ss या lsof क्यों नहींNETLINK_INET_DIAG से आते हैं, वही kernel
इंटरफ़ेस जो ss उपयोग करता है, और प्रक्रिया विवरण /proc से। किसी अन्य टूल के
आउटपुट से कुछ भी पार्स नहीं किया जाता, इसलिए जिस कंटेनर में न ss है न lsof, उसे भी
लिसनर और उसका स्वामी मिल जाता है। Firewall विश्लेषण nft या iptables-save चलाता है, और
इनके बिना UNKNOWN रिपोर्ट करता है।ss -ltnp आपको socket और PID देता है।
वह bind केवल loopback है या नहीं, कोई firewall नियम इसे अनुमति देता है या नहीं, और
वह पोर्ट host लिसनर के बजाय Docker publish है या नहीं — यह काम आपको अन्यथा
हाथ से करना पड़ता।UNKNOWN देता है, कभी
आत्मविश्वास से भरा गलत उत्तर नहीं।NETLINK_INET_DIAG के माध्यम से, ss आउटपुट को स्क्रैप करके नहीं/proc के माध्यम सेsystemctl show के माध्यम से सक्रिय socket ट्रिगरnft --json list ruleset के माध्यम सेiptables-save के माध्यम सेPortClue exposure समझाने से पहले पहचानता है कि कोई पोर्ट किसका है। साक्ष्य इस क्रम में रैंक किए जाते हैं:
/etc/services पोर्ट परंपरा।वास्तविक स्वामी हमेशा पारंपरिक पोर्ट नाम को ओवरराइड करता है। यदि केवल पोर्ट परंपरा
ज्ञात है, तो पहचान स्पष्ट रूप से LOW confidence के रूप में चिह्नित की जाती है। अंतर्निहित कैटलॉग
internal/identify/catalog.json में संग्रहीत है और
एकल बाइनरी के अंदर भेजा जाता है; PortClue रनटाइम पर पहचान डेटा डाउनलोड नहीं करता।
PortClue read-only है। यह क्वेरी किए गए पोर्ट से कनेक्ट नहीं होता, किसी अन्य host को स्कैन नहीं करता, firewall नियम नहीं बदलता, प्रक्रियाएँ या कंटेनर नहीं रोकता, डेटा अपलोड नहीं करता, या daemon नहीं चलाता।
Linux (amd64 और arm64) पर चलता है। स्क्रिप्ट मेल खाता GitHub
Release archive डाउनलोड करती है, SHA256SUMS सत्यापित करती है, और एकल बाइनरी इंस्टॉल करती है। यह
shell config को संशोधित नहीं करती।
उपयोगकर्ता इंस्टॉल (डिफ़ॉल्ट, बिना root)। ~/.local/bin में इंस्टॉल करता है, आपके स्वामित्व में:
curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh
portclue
उपयोगकर्ता इंस्टॉल बिना root चलता है और आपके खाते के लिए उपलब्ध साक्ष्य रिपोर्ट करता है,
जो अनुपलब्ध है उसे नोट करता है। यह लिसनर और Docker मैपिंग का पता लगाने के लिए पर्याप्त है।
चूँकि sudo ~/.local/bin को नहीं खोजता और यह बाइनरी आपके उपयोगकर्ता द्वारा लिखने योग्य है,
इस प्रति को sudo के साथ न चलाएँ।
सिस्टम इंस्टॉल (root-owned, sudo portclue के लिए)। PortClue root के रूप में सबसे
पूर्ण साक्ष्य (प्रतिबंधित /proc, पूर्ण firewall स्थिति) पढ़ता है। इसके लिए,
/usr/local/bin में root-owned बाइनरी इंस्टॉल करें (स्क्रिप्ट sudo का उपयोग केवल
अंतिम इंस्टॉल चरण के लिए करती है, डाउनलोड या निकालने के लिए नहीं):
curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh -s -- --system
sudo portclue
वैकल्पिक ओवरराइड: PORTCLUE_VERSION=0.1.2 (बिना अग्रणी v) और
किसी भी मोड के लिए PORTCLUE_INSTALL_DIR।
अनइंस्टॉल:
# 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 से मेल खाता
portclue-VERSION-linux-ARCH.tar.gz और SHA256SUMS डाउनलोड करें, checksum सत्यापित करें,
फिर इंस्टॉल करें:
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
आर्किटेक्चर मैपिंग:
uname -m | Archive |
|---|---|
x86_64 | linux-amd64 |
aarch64, arm64 | linux-arm64 |
प्रत्येक archive में बाइनरी, README, Apache-2.0 लाइसेंस, और तृतीय-पक्ष सूचनाएँ शामिल हैं।
Linux और Go 1.27+ आवश्यक:
go install github.com/pbxqdown/portclue/cmd/[email protected]
यह बाइनरी को $(go env GOPATH)/bin में रखता है। जब आप प्रतिलिपि-योग्य इंस्टॉल आर्टिफ़ैक्ट चाहते हैं
तो checksum-सत्यापित release archive या install script को प्राथमिकता दें।