পাঠকের জন্য নোট : মূল উত্তরটি কিছুক্ষণ আগে পোস্ট করা হয়েছিল এবং যখন আমি কেবল শেল স্ক্রিপ্টিং শিখছিলাম। একটি নতুন এবং উন্নত স্ক্রিপ্টের জন্য নীচে পুনর্বিবেচিত সংস্করণটি দেখুন যা আরও দ্রুত সম্পাদন করে।
আসল উত্তর
nmap
আমার # 1 পছন্দ হতে পারে, কিন্তু আপনি এটি না থাকলে কি হবে? ডিআইওয়াই উপায়টি একটি পিং স্ক্রিপ্টের সাথে থাকবে যা নেটওয়ার্কে প্রতিটি সম্ভাব্য আইপি ঠিকানার মাধ্যমে ম্যানুয়ালি চলে। আমাদের এখানে যা আছে ঠিক সেই সময়েই, যেখানে আমরা ঠিকানার মধ্যে শেষ সংখ্যাটি সেট করি, ঠিকানায় নিঃশব্দ একক পিং করি, কমান্ডটি সফল হয় কিনা তা পরীক্ষা করে দেখুন (এবং যদি এটি সফল হয় তবে হোস্টটি অবশ্যই আপ হবে) এবং printf
বিবৃতি। দ্রুত এবং নোংরা উপায়, এটি লিখতে আমাকে প্রায় 10 মিনিট সময় নিয়েছে তবে রানটাইম যদিও কিছুটা ধীর হতে পারে।
#!/bin/sh
# set -x
NUM=1
while [ $NUM -lt 256 ];do
ping -q -c 1 192.168.0.$NUM > /dev/null
RESULT=$(echo $?)
if [ $RESULT -eq 0 ]; then
printf 192.168.0.$NUM"\n"
fi
NUM=$(expr $NUM + 1)
done
পুনরায় দেখা উত্তর
আমি মূলত এই উত্তরটি ২০১৫ সালের আগস্টে পোস্ট করেছি then তখন থেকে আমি শেল স্ক্রিপ্টিং সম্পর্কে আরও কিছুটা শিখেছি এবং আমি একবার এই স্ক্রিপ্টটি দেখেছি, আমি মনে করেছি যে কয়েকটি উত্তর সংশোধন করার জন্য এই উত্তরটি পুনর্বিবেচনা করা ভাল ধারণা হবে। এখানে কয়েকটি ধারণা দেওয়া হল:
স্ক্রিপ্টটি অবশ্যই ধীর এবং ping
হোস্টের প্রতিক্রিয়ার জন্য অপেক্ষা করছে। ডিফল্টরূপে, ping
দুই RTT, কিভাবে ঘনবসতিপূর্ণ আপনার নেটওয়ার্ক, এবং যতদূর আমি বুঝতে বিভিন্ন TCP প্রোটোকল অপেক্ষার সময় প্রতিটি সময় দ্বিগুণ উপর নির্ভর করে করতে, যার জন্য (অন্তত অনুযায়ী এই )। সুতরাং আমরা পতাকা ping
সহ সময় বেরিয়ে যেতে পারে -w 1
। যেহেতু আমাদের 256 ঠিকানা রয়েছে এবং আমরা প্রতিটি ঠিকানার জন্য 1 সেকেন্ড ধরে নিয়েছি, স্ক্রিপ্টটি প্রায় 256/60 = 4.27 মিনিট সময় নেয়।
একটি কমান্ড করা এবং তারপরে এর প্রস্থান স্থিতি ক্যাপচার করা $?
আসলে প্রয়োজনীয় ছিল না। দ্য if ... then;...fi
কমান্ড সরাসরি কাজ করতে পারে। অন্য কথায়, এটি করার জন্য এটি যথেষ্ট:
if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
then
<some other code here>
fi
printf
কমান্ড তাই হিসাবে পুনর্লিখিত করা যেতে পারে:
printf "IP %s is up\n" 192.168.0."$NUM"
এটি আরও একটি স্টাইলিস্টিক পরিবর্তন, তবে এটি পরিবর্তনশীল printf
উদ্ধৃতি সহ অন্যান্য ভাষাগুলির মধ্যে কীভাবে কাজ করে এবং দেখতে কেমন তার সাথে সামঞ্জস্য "$NUM"
। এখানে উদ্ধৃতি দেওয়ার প্রয়োজন নেই - যেহেতু আমরা কেবল সংখ্যার সাথেই কাজ করছি, একটি ভেরিয়েবলের স্পেস থাকার কারণে আমাদের শব্দের বিভাজন সম্পর্কে ধারণা করার দরকার নেই।
আমরা বেশ কয়েকটি ব্যাকগ্রাউন্ড প্রক্রিয়া চালিত করতে পারলে আরও ভাল পারফরম্যান্সের উন্নতি অর্জন করা যেতে পারে। নীচের স্ক্রিপ্ট সম্পাদনা ঠিক তা করে। আমি করা ping
এবং printf
একটি ফাংশন মধ্যে, pingf
(হ্যাঁ, গতানুগতিক নাম, আমি জানি)। এখন, এখানে একটি একক main
ফাংশন রয়েছে যা লুপিং এবং কলিং করে pingf
।
#!/bin/sh
# Uncomment for debugging
#set -x
pingf(){
if ping -w 2 -q -c 1 192.168.0."$1" > /dev/null ;
then
printf "IP %s is up\n" 192.168.0."$1"
fi
}
main(){
NUM=1
while [ $NUM -lt 255 ];do
pingf "$NUM" &
NUM=$(expr "$NUM" + 1)
done
wait
}
main
আর কতটা ভাল কাজ করে? খারাপ না, আসলে, কয়েক সেকেন্ড সময় নেয়।
$ time ./ping_script.sh
IP 192.168.0.1 is up
IP 192.168.0.101 is up
IP 192.168.0.27 is up
IP 192.168.0.29 is up
0m02.50s real 0m00.01s user 0m00.12s system
জিনিষ মনে রাখা
- উইন্ডোজ (উইন্ডোজ since এর পর থেকে, আমি মনে করি) আইসিএমপি প্রতিধ্বনির অনুরোধগুলিতে সাড়া দিতে শুরু করেছে। জিজ্ঞাসা উবুন্টু এবং সাজানোর অন্যান্য সাইটগুলিতে সে সম্পর্কে বেশ কয়েকটি প্রশ্ন রয়েছে "আরে, আমার লিনাক্স কম্পিউটারটি পিন করা যেতে পারে, তবে উইন্ডোজ নয়, তার কী হবে?" শুধু এই সত্যটি সম্পর্কে সচেতন থাকুন যে নতুন উইন্ডোজ সংস্করণগুলির জন্য আপনার আইসিএমপি প্রতিধ্বনির প্রতিক্রিয়া সক্ষম করতে হবে।
angry ip scanner