শেল স্ক্রিপ্টের মধ্যে টেলনেট পোর্ট সক্রিয় আছে কিনা তা পরীক্ষা করুন


11

টেলনেটের মাধ্যমে লগইন করা সম্ভব কিনা তা পরীক্ষা করার জন্য আমি একটি স্ক্রিপ্ট তৈরি করার চেষ্টা করছি। আমি সত্যিই লগ ইন করতে চাই না; অতএব, প্রত্যাশার প্রয়োজন হয় না। আমি কেবল দেখতে চাই যে আমি লগইন প্রম্পট পেতে সক্ষম কিনা। এটি একটি লিনাক্স সিস্টেম থেকে করা হচ্ছে তাই আমি ব্যবহার করার চেষ্টা করছি nc:

nc 192.168.10.5 23 -w 1 | grep -q login 
if [ $? -eq 1 ]
then
    echo "console is down"
fi

সমস্যাটি হ'ল এর ফলে আমার কনসোলটি লকআপ হয়ে যাচ্ছে। দেখে মনে হচ্ছে -wসত্যই সংযোগটি বাদ দিচ্ছে না।

আমি টেলনেট ব্যবহার করার চেষ্টাও করেছি কিন্তু আমি স্ক্রিপ্টের মধ্যে থেকে সংযোগটি ভেঙে ফেলতে পারছি না। চেষ্টা

\echo "\035" | telnet 192.168.10.5

লগইন প্রম্পট পাওয়ার আগে বিরতি ঘটে।


সম্ভাব্য সদৃশ superuser.com/questions/621870/...
vschum

উত্তর:


14

বাশ সিউডো ডিভাইসগুলি সরবরাহ করে যা আপনি সম্ভবত এর সাথে পরিচিত /dev/null। তবে এমন হিসাবে অন্যান্য ডিভাইস /dev/tcpএবং /dev/udpনেটওয়ার্ক সংযোগ, যা আপনি খুব ব্যাশ স্ক্রিপ্ট মধ্যে থেকে ব্যবহার করতে পারেন পরীক্ষার জন্য।

বাশের ম্যান পৃষ্ঠা থেকে উদ্ধৃত অংশ

নীচের টেবিলের বর্ণনা অনুযায়ী বাশ পুনরায়নির্দেশে ব্যবহৃত হলে বিশেষত বেশ কয়েকটি ফাইলের নাম পরিচালনা করে:

          /dev/fd/fd
                 If fd is a valid integer, file descriptor fd is duplicated.
          /dev/stdin
                 File descriptor 0 is duplicated.
          /dev/stdout
                 File descriptor 1 is duplicated.
          /dev/stderr
                 File descriptor 2 is duplicated.
          /dev/tcp/host/port
                If  host  is a valid hostname or Internet address, and port 
                is an integer port number or service name, bash attempts to 
                open a TCP connection to the corresponding socket.
          /dev/udp/host/port
                If host is a valid hostname or Internet address, and port 
                is an integer port number or service name, bash attempts to 
                open a  UDP  connection to the corresponding socket.

উদাহরণ

আমি এখানে আমার ডোমেন নামক একটি হোস্টের সাথে স্কিনার নামের সংযোগটি পরীক্ষা করছি এবং আমি তার পোর্ট 22 এ সংযুক্ত হতে পারি কিনা তা দেখার জন্য।

দ্রষ্টব্য: পোর্ট 22 এসএসএইচের জন্য, টেলনেট ব্যবহারের পোর্ট 23 এর জন্য।

$ echo > /dev/tcp/skinner/22 && echo "it's up" || echo "it's down"
it's up

দুর্দান্ত তাই আসুন একটি নন-পোর্ট চেষ্টা করুন:

$ echo > /dev/tcp/skinner/223 && echo "it's up" || echo "it's down"
bash: connect: Connection refused
bash: /dev/tcp/skinner/223: Connection refused
it's down

ওয়েল এটি কাজ করে তবে এটি অত্যন্ত কুরুচিপূর্ণ আউটপুট। চিন্তার কিছু নেই. আপনি echo > /dev/tcp/...একটি সাব-শেল এ চালাতে পারেন এবং /dev/nullকিছুটা পরিষ্কার করার জন্য সমস্ত আউটপুট পুনর্নির্দেশ করতে পারেন। আপনার শেল স্ক্রিপ্টগুলির মধ্যে আপনি যে প্যাটার্নটি ব্যবহার করতে পারেন তা এখানে:

$ (echo > /dev/tcp/skinner/22) > /dev/null 2>&1 \
    && echo "it's up" || echo "it's down"
it's up

$ (echo > /dev/tcp/skinner/223) > /dev/null 2>&1 \
    && echo "it's up" || echo "it's down"
it's down

আপনি নির্দিষ্টভাবে পরীক্ষা অনুপস্থিত হয় telnet, তারপর পোর্ট 23 ডিফল্ট রানে, তাই যেখানে SLM 22 এবং 223, ব্যবহার ব্যবহার করেছেন যে 23
ওয়ারউইক

@ ওয়ারউইক - ধন্যবাদ, আমি উদাহরণ বিভাগে একটি নোট হিসাবে এটি যুক্ত করেছি।
slm

@ সিম মন্তব্য করার জন্য ধন্যবাদ। আমি এটি আগে দেখেছি কিন্তু আমি এটির সাথে এটি কাজ করতে সক্ষম হইনি। আমার সমস্যাটি হ'ল আমাকে লগইন প্রম্পটের জন্য গ্রেপ বা পরীক্ষা করতে সক্ষম হওয়া দরকার। এই ক্ষেত্রে কনসোলটি লক হয়ে গেছে এবং লগইন প্রম্পট নেই। # telnet 192.168.10.5 Trying 192.168.10.5... Connected to 192.168.10.5 (192.168.10.5). Escape character is '^]'. Connection closed by foreign host.
rleon

# cat < /dev/tcp/192.168.10.12/23 আমাকে একটি লগইন প্রম্পট দেয় তবে আমি এটি থেকে বেরিয়ে আসতে সক্ষম নই।
rleon

1
বাহ .. সেখানে পুনঃনির্দেশ বরাদ্দ। # cat afile ^] এটি চালানোর পরে এটি কেবল বিরতিতে প্রতিধ্বনিত হয় afile। এখনও এটি নিয়ে খেলছি তবে আমি অনুভব করছি যে আমি প্রায় আছি।
rleon

7

আপনি ব্যবহার করে সঠিক পথে রয়েছেন nc, তবে আপনি যদি সংযোগটি স্থাপন করতে পারেন কিনা তা যদি আপনি সত্যিই পরীক্ষা করতে চান তবে এনসির -zসুইচটি ব্যবহার করুন :

#!/bin/bash
REMOTEHOST=10.11.12.13
REMOTEPORT=1234
TIMEOUT=1

if nc -w $TIMEOUT -z $REMOTEHOST $REMOTEPORT; then
    echo "I was able to connect to ${REMOTEHOST}:${REMOTEPORT}"
else
    echo "Connection to ${REMOTEHOST}:${REMOTEPORT} failed. Exit code from Netcat was ($?)."
fi

এটি সমস্ত সিস্টেমে কাজ করে না, আমার এনসির কাছে -z পতাকা নেই
Shapeshifter

মজাদার. এটি কোন সংস্করণ nc?
ডোপঘোতি

আমি সেন্টোস on-তে আছি, এবং এনসি এনএমএপ-এনসিএটি দ্বারা প্রতিস্থাপিত হয়েছিল যার বিকল্প নেই :(
শাপিশেফটার

যদি আমি সঠিকভাবে স্মরণ করি তবে সেন্টস-এ আপনি যে প্যাকেজটি চান তা কেবল সহজ nc
ডোপঘোতি

এনসি সেন্টোস 7-এ এনএমএপ-এনসি্যাট হয়
শাপিশেফটার

2

আমি জানি উত্তরটি কিছুটা দেরিতে এসেছে, তবে আমি কীভাবে এটি করব তা খুঁজছিলাম এবং সুরক্ষার কারণে এনসি ব্যবহার করা কোনও বিকল্প ছিল না, সুতরাং এখানে যদি এটি কাউকে সহায়তা করতে পারে তবে তা এখানে।

আপনার প্রাথমিক প্রতিধ্বনিতে যা অনুপস্থিত ছিল তা হ'ল সুইচ:

   -e     enable interpretation of backslash escapes
   -E     disable interpretation of backslash escapes (default)

এবং একটি নতুন লাইন + সংযোগ বিচ্ছিন্ন হওয়ার পরে টেলনেট ছাড়ার আদেশ ছেড়ে দিন। যেমন:

echo -e '\035\nquit' | telnet 10.0.0.1 23 && echo "success" || echo "failed"

স্পষ্টতই একই কাজ করবে যদি আপনি বিবৃতি এবং ate মূল্যায়ন করে একটি ব্লক শৈলী ব্যবহার করেন? আপনি যেমন প্রথমদিকে করেছিলেন:

echo -e '\035\nquit' | telnet 10.0.0.1 23
if [ $? -eq 1 ]
then
  echo "Console is down."
fi

যদিও আমরা এটিতে এসেছি, যতদূর এনসি যায়, এটি নির্ভর করে আপনার কী এনসি এর স্বাদ রয়েছে (gnu ncat vs nmap-ncat)। গনুর কাছে -z সুইচ থাকবে:

  -z                         Zero-I/O mode, report connection status only
nc -z 10.0.0.1 23
# (evaluate $? here)

অন্যটি করবে না এবং আপনাকে আটকে না রাখতে আপনার এনসি তে একটি খালি লাইন পাইপ করতে হবে:

echo | nc 10.0.0.1 23
# (evaluate $? here)

1

nc -z 192.168.10.5 23কমান্ড প্রম্পটে চালান বা এই কমান্ডটি চালানোর জন্য বাশ স্ক্রিপ্ট তৈরি করুন।

সংযোগটি সফল হলে এটি নীচে বিবৃতি দেয়।

192.168.10.5 23 বন্দরের সাথে সংযোগ সফল হয়েছে [টিসিপি / *] সফল হয়েছে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.