टेलनेट के अलावा, खुले बंदरगाहों की जांच के लिए विकल्प क्या हैं?


24

टेलनेट वीआईए पोर्ट का परीक्षण करने के लिए हम निम्नलिखित का उपयोग कर सकते हैं; निम्नलिखित उदाहरण में हम पोर्ट 6667 का परीक्षण करते हैं:

[root@kafka03 ~]# telnet kafka02 6667
Trying 103.64.35.86...
Connected to kafka02.
Escape character is '^]'.
^CConnection closed by foreign host

चूंकि कुछ मशीनों पर हम टेलनेट (आंतरिक कारणों से) का उपयोग नहीं कर सकते हैं, पोर्ट की जांच के विकल्प क्या हैं, टेलनेट के रूप में?


पर्ल एक विकल्प है?
जेफ स्कालर

5
वे "आंतरिक कारण" आपको अन्य पोर्ट-स्कैनिंग सॉफ़्टवेयर का उपयोग करने से रोक सकते हैं। मैं एक आदमी को जानता था जो एक बैंक में काम करता था और उसका अनुबंध समाप्त हो गया था क्योंकि उसके पास अपने पीसी पर नैम्प की एक प्रति थी। वह इसे काम से संबंधित उद्देश्यों के लिए उपयोग कर रहा था, लेकिन यह अभियुक्त सूची में था, इसलिए उसे इमारत से बाहर निकाल दिया गया था।
रोजर लिप्सकॉम्ब

2
पर्ल एक विकल्प है? - हाँ
येल

2
ध्यान दें कि टेलनेट एक परिष्कृत प्रोटोकॉल है। telnetयदि एक बंदरगाह कमांड लाइन पर दिया जाता है उपयोगिता प्रोटोकॉल व्यवहार बंद हो जाती है। तब यह बहुत कुछ व्यवहार करता है netcat, बस लाइन का पता लगाने के साथ।
rexkogitans

एक अधिक ऑपरेटिंग-सिस्टम अज्ञेयवादी प्रश्न, जो पोर्ट स्कैनिंग पर भी संकेत नहीं देता है, वह unix.stackexchange.com/questions/499694 है
JdeBP

जवाबों:


23

यदि बैश शेल का उपयोग कर रहे हैं, तो आप इसकी सुविधा का उपयोग करके यह जांच सकते हैं कि पोर्ट खुला है या बंद है:

(timeout 1 bash -c '</dev/tcp/127.0.0.1/17500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT OPEN

(timeout 1 bash -c '</dev/tcp/127.0.0.1/7500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT CLOSED

ध्यान दें कि यदि 1 सेकंड का समय समाप्त होने के बाद सर्वर जवाब नहीं देता है, तो बीच में आज्ञाएँ 'बाधित हो जाती हैं, और इस प्रकार कुछ भी मुद्रित नहीं होता है।


5
शायद आपको इसके बजाय प्रश्न (kafka02) से होस्टनाम का उपयोग करना चाहिए 127.0.0.1, जिससे यह दिखता है कि यह केवल लूपबैक के साथ काम करता है।
दिमित्री ग्रिगोरीव

1
(timeout 1 bash -c '</dev/tcp/www.google.com/444 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/nullमेरे लिए कुछ नहीं छापता। (timeout 1 bash -c '</dev/tcp/www.google.com/444' && echo PORT OPEN || echo PORT CLOSED) 2>/dev/nullअपेक्षित के रूप में काम किया (प्रिंट बंद)। के स्थान पर ध्यान दें '
thecarpy

क्या आप बैश पर मिलता -c '</ देव / टीसीपी / kafka01 / 6667'
येल

तब गूंज $? (यदि 0 है तो पोर्ट खुला है)
येल नो

IIRC यह बैश फीचर कुछ समय पहले डेबियन में अक्षम हुआ करता था। यह एक साफ-सुथरी चाल है लेकिन हमेशा काम नहीं करती।
AnonymousLurker

32

netcat एक विकल्प है।

nc -zv kafka02 6667
  • -z = वास्तव में उन्हें कोई डेटा भेजने के बिना, डेमॉन को सुनने के लिए स्कैन करने के लिए एनसी सेट करता है
  • -v = वर्बोज़ मोड को सक्षम करता है

क्या nc से मानक आउटपुट प्राप्त करना संभव है? क्योंकि मैं अपनी बैश स्क्रिप्ट में लिखना चाहता हूं
येल

2
प्रलेखन पढ़ें! विकल्पों के बिना ncबहुत कुछ व्यवहार करता है telnet
हेनरिक -

हाँ, मैं डॉक्स पढ़ता हूं, लेकिन -w झंडा टाइमआउट के रूप में काम नहीं करता है
येल

उदाहरण - c -v -w 1 kafka01 6667 (हमें समय पर नहीं मिलता है)
येल

nc -v -w 3 kafka01 6667 Ncat: संस्करण 6.40 ( nmap.org/ncat ) Ncat : 10.164.235.85:6667 से जुड़ा। (यह अभी भी लटका हुआ है)
येल

23

स्वर्ण मानक निस्संदेह nmap( nmap.org ) है, लेकिन आम तौर पर इसे "सर्वोत्तम परिणामों" के लिए रूट की आवश्यकता होती है। हालाँकि, स्टैंडअलोन बायनेरिज़ उपलब्ध हैं और इसे केवल अनपेक्षित क्षमताओं के साथ एक अप्रभावित उपयोगकर्ता के रूप में चलाना संभव है। उदाहरण के लिए, एक गुप्त synस्कैन ( -sS) के बजाय , यह एक मानक टीसीपी कनेक्ट स्कैन ( -sT) में वापस आ जाता है । यह कार्यात्मक रूप से नेटकैट के बराबर है, लेकिन अच्छी मल्टी-होस्ट, स्पेड-अप क्षमताओं के साथ।

एक उदाहरण:

not-root$ nmap -sT google.com
Starting Nmap 7.70 ( https://nmap.org ) at 2018-11-04 21:01 GMT
Nmap scan report for google.com (172.217.23.14)
Host is up (0.12s latency).
rDNS record for 172.217.23.14: lhr35s01-in-f14.1e100.net
Not shown: 998 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https

1
ज्यादातर संगठनों में नैम्प को एक स्कैनिंग उपकरण के रूप में माना जाता है और एक व्यक्ति उचित प्राधिकरण के बिना नैम्प का उपयोग नहीं कर सकता है। इसके अलावा अगर यह एक EC2 उदाहरण है, तो AWS से भी प्राधिकरण आवश्यक है।
अल मामुन

4

यदि पर्ल एक विकल्प है, तो आप IO::Socketकिसी विशेष होस्ट और पोर्ट से कनेक्शन का परीक्षण करने के लिए इसके मॉड्यूल का उपयोग कर सकते हैं ; प्रोटोकॉल के रूप में हार्ड-कोड टीसीपी के नीचे की स्क्रिप्ट (जो टेलनेट का उपयोग करेगी):

#!/usr/bin/perl -w

# tries to connect to the given IP and port (tcp)

use strict;
use IO::Socket;

my $desthost = shift or die "Usage: $0 host port\n";
my $destport = shift or die "Usage: $0 host port\n";

gethostbyname($desthost) || die "Invalid host given\n";

my $handle = IO::Socket::INET->new(
        PeerAddr => $desthost,
        PeerPort => $destport,
        Proto    => 'tcp')
    or die "can't connect to $desthost:$destport: $!\n";
close $handle;
print "Success!\n"

एक बंद बंदरगाह से नमूना उत्पादन:

$ ./above-script kafka02 6667
can't connect to kafka02:6667: Connection refused

एक खुले बंदरगाह से नमूना उत्पादन:

$ ./above-script kafka02 4200
Success!

2

डिवाइस फ़ाइल / देव / tcp और / dev / udp का उपयोग टेलनेट के बजाय किया जा सकता है। उदाहरण: प्रतिध्वनि ०> / देवा /tcp/103.64.35.86/6667। फिर # $ $ का उपयोग करके निकास स्थिति की जांच करें? । यदि निकास स्थिति 0 है, तो पोर्ट खुला है। यदि निकास की स्थिति गैर-शून्य है तो पोर्ट बंद है। Udp पैकेट की जाँच के लिए, echo 0> /dev/udp/103.64.35.86/6667 का उपयोग करें।


मेरे redhat 7 में / dev / के तहत, हमारे पास tcp नहीं है
येल

ls / dev / tcp / ls: एक्सेस नहीं कर सकते / dev / tcp /: ऐसी कोई फ़ाइल या निर्देशिका नहीं
येल

आप किस ओएस पर इसका परीक्षण कर रहे हैं?
येल

@ येल, आपको ls के दौरान / dev / tcp या / dev / udp नहीं मिलेगा। अपने शेल पर सटीक समान कमांड का प्रयास करें और आपको परिणाम मिलेगा। वैसे, मैं अक्सर इसका इस्तेमाल RHEL6,7
अल

0
ss -lt 

यह एक और कमांड है जिसका आप उपयोग कर सकते हैं।


यह केवल स्थानीय मशीन के लिए काम करता है, मेरा मानना ​​है कि प्रश्न एक दूरस्थ होस्ट के खुले बंदरगाहों की जांच करने के बारे में है।
एलेक्स बारानोव्स्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.