কোনও ওয়েবসাইটের পিং ছাড়াই কীভাবে একটি ইন্টারনেট সংযোগ পরীক্ষা করা যেতে পারে? মানে, সংযোগ থাকলেও সাইটটি ডাউন থাকলে কী হয়? বিশ্বের সাথে সংযোগের জন্য কি চেক আছে?
কোনও ওয়েবসাইটের পিং ছাড়াই কীভাবে একটি ইন্টারনেট সংযোগ পরীক্ষা করা যেতে পারে? মানে, সংযোগ থাকলেও সাইটটি ডাউন থাকলে কী হয়? বিশ্বের সাথে সংযোগের জন্য কি চেক আছে?
উত্তর:
পিং ছাড়াই
#!/bin/bash
wget -q --spider http://google.com
if [ $? -eq 0 ]; then
echo "Online"
else
echo "Offline"
fi
-কিউ : নীরবতা মোড
- স্পাইডার : পাবেন না, কেবল পৃষ্ঠার উপলভ্যতা পরীক্ষা করুন
$? : শেল রিটার্ন কোড
0 : "সমস্ত ঠিক আছে" কোডটি শেল করুন
উইজেট ছাড়াই
#!/bin/bash
echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Online"
else
echo "Offline"
fi
nc
বিষয়টি নিশ্চিত করার জন্য আপনাকে সময়সীমা যুক্ত করতে হবে। এর মতো কিছুnc google.com 80 -w 10
আপনার ডিফল্ট গেটওয়ে পিং করুন:
#!/bin/bash
ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error
function ping_gw() { ... && return 0 || return 1 }
এবং তারপরে ping_gw || (echo "no network, bye" && exit 1)
ifconfig down wlan0
এবং আমার এখনও একটি ডিফল্ট গেটওয়ে রয়েছে এবং এটি মজাদার, যদিও আমি বাস্তবে বাইরের বিশ্বে পৌঁছাতে পারি না।
এখানে তাদের পোস্টের জন্য ব্যবহারকারীদের কিছুটা হলেও সুপারকে ধন্যবাদ : https://bbs.archlinux.org/viewtopic.php?id=55485 ২০০৮-০৯-২০১২ 02:09:48 এ
/ সিস / ক্লাস / নেট সন্ধান করা এক উপায় হতে হবে
লুপ ব্যাক ব্যতীত অন্য কোনও নেটওয়ার্ক সংযোগের জন্য পরীক্ষা করার জন্য এখানে আমার স্ক্রিপ্ট। আমি আমার ওয়েবসাইট অ্যাক্সেসযোগ্য কিনা তা পর্যায়ক্রমে পরীক্ষার জন্য আমার কাছে অন্য স্ক্রিপ্টের নীচে ব্যবহার করি। যদি এটি অ্যাক্সেসযোগ্য না হয় তবে একটি পপআপ উইন্ডো আমাকে কোনও সমস্যার জন্য সতর্ক করে।
যখনই আমার ল্যাপটপটি নেটওয়ার্কের সাথে সংযুক্ত না থাকে তখন নীচের স্ক্রিপ্টটি প্রতি পাঁচ মিনিটে আমাকে পপআপ বার্তা পেতে বাধা দেয়।
#!/usr/bin/bash
# Test for network conection
for interface in $(ls /sys/class/net/ | grep -v lo);
do
if [[ $(cat /sys/class/net/$interface/carrier) = 1 ]]; then OnLine=1; fi
done
if ! [ $OnLine ]; then echo "Not Online" > /dev/stderr; exit; fi
নতুনদের বাশ দেওয়ার জন্য নোট করুন: চূড়ান্ত 'যদি' স্টেটমেন্টটি অনলাইনে না হয় তবে [!] পরীক্ষা করে এবং যদি এটি হয় তবে প্রস্থান করা হবে। ম্যান বাশ দেখুন এবং আরও তথ্যের জন্য "এক্সপ্রেশন একত্রিত হতে পারে" সন্ধান করুন।
পিএস আমি অনুভব করি যে এখানে পিং ব্যবহার করা সবচেয়ে ভাল জিনিস নয় কারণ এটির লক্ষ্য কোনও নির্দিষ্ট হোস্টের সাথে সংযোগ পরীক্ষা করা নয় পরীক্ষা করা যদি কোনও ধরণের নেটওয়ার্কের সাথে সংযোগ থাকে তবে ।
পিপিএস দি উপরোক্ত উবুন্টু 12.04 এ কাজ করে / অন্য কোনও ডিস্ট্রোতে / সিসের অস্তিত্ব থাকতে পারে। নিচে দেখ:
আধুনিক লিনাক্স ডিস্ট্রিবিউশনে একটি ভার্চুয়াল ফাইল সিস্টেম (sysfs, যা / proc এর সাথে তুলনীয়) হিসাবে একটি / sys ডিরেক্টরি অন্তর্ভুক্ত করে, যা সিস্টেমের সাথে সংযুক্ত ডিভাইসগুলিকে সঞ্চয় করে এবং মঞ্জুরি দেয়, যেখানে অনেকগুলি traditionalতিহ্যবাহী ইউএনআইএক্স এবং ইউনিক্সের মতো অপারেটিং সিস্টেম ব্যবহার করে / sys কার্নেল উত্স গাছের প্রতীকী লিঙ্ক হিসাবে। [উদ্ধৃতি আবশ্যক]
উইকিপিডিয়া থেকে https://en.wikedia.org/wiki/Files systemm হাইরেসি_স্ট্যান্ডার্ড
cat /sys/class/net/wwan0/carrier
উবুন্টু 14.04 LTS কাজ করে না।
2>/dev/null
পরে আপনি রাখতে পারেন cat /sys/class/net/$interface/carrier
।
এটি ম্যাকোএসএক্সএক্স এবং লিনাক্স উভয় ক্ষেত্রেই কাজ করে:
#!/bin/bash
ping -q -w1 -c1 google.com &>/dev/null && echo online || echo offline
ping: invalid option -- w
fping google.com
বা কেবল fping 8.8.8.8
কোনও বোনাস দিয়ে যাদু করে তোলে আপনি এটির পরীক্ষা (" google.com is alive
") ছাড়াই স্ট্যাটাস কোড পান ...
বাশে, এটি / dev / { udp , tcp } / হোস্ট / পোর্টের মাধ্যমে নেটওয়ার্ক র্যাপার ব্যবহার করে :
if : >/dev/tcp/8.8.8.8/53; then
echo 'Internet available.'
else
echo 'Offline.'
fi
( :
বাশ নো-ওপ, কারণ আপনি কেবল সংযোগটি পরীক্ষা করতে চান, তবে প্রক্রিয়াজাত করছেন না))
আমি এর আগে স্ক্রিপ্ট লিখেছিলাম যে 80 টি পোর্টের সাথে সংযোগ করতে কেবল টেলনেট ব্যবহার করা হবে, তারপরে পাঠ্যটি প্রেরণ করুন:
HTTP/1.0 GET /index.html
এরপরে দুটি সিআর / এলএফ ক্রম রয়েছে।
আপনি যদি HTTP প্রতিক্রিয়াটির কোনও ফর্ম ফিরে পান তবে আপনি সাধারণত ধরে নিতে পারেন যে সাইটটি কাজ করছে।
উপরের উত্তরটি আপনার ডিফল্ট গেটওয়ের সাথে নিখুঁতভাবে স্থিতিশীল সংযোগ স্থাপন করতে পারে এই সত্যটি মিস করে তবে এটির স্বয়ংক্রিয়র অর্থ এই নয় যে আপনি আসলে ইন্টারনেটে কোনও কিছুতে পৌঁছাতে পারবেন। ওপি জিজ্ঞাসা করে যে সে কীভাবে বিশ্বের সাথে সংযোগ পরীক্ষা করতে পারে। সুতরাং আমি গেটওয়ে আইপিটি আপনার ল্যানের বাইরে থাকা একটি পরিচিত আইপি (xyzw) এ পরিবর্তন করে শীর্ষের উত্তরটি পরিবর্তন করার পরামর্শ দিচ্ছি।
সুতরাং উত্তর হয়ে যাবে:
ping -q -w 1 -c 1 x.y.z.w > /dev/null && echo ok || echo error
কমান্ড প্রতিস্থাপনের জন্য অপ্রয়োজনীয় ব্যাকটিকগুলি অপসারণ [1] ।
আপনি যদি কিছু কোড কার্যকর করার আগে কেবল বিশ্বের সাথে সংযুক্ত আছেন তা নিশ্চিত করতে চান তবে আপনি এটি ব্যবহার করতে পারেন:
if ping -q -w 1 -c 1 x.y.z.w > /dev/null; then
# more code
fi
আপনার নেটওয়ার্ক টিসিপি ট্র্যাফিক ভিতরে এবং বাইরে প্রবেশের অনুমতি দেয় তা নিশ্চিত করুন, তারপরে আপনি নীচের কমান্ডটি দিয়ে আপনার জনসাধারণের মুখোমুখি আইপি ফিরে পেতে পারেন
curl ifconfig.co
কোনও ওয়েব সাইট আপ আছে কিনা এবং ওয়েব সার্ভারটি কোন স্থিতির বার্তা প্রদর্শন করছে তা পরীক্ষা করতে নিম্নলিখিত কমান্ডটি কার্যকর করুন:
$ curl -Is http://www.google.com |
head -1 HTTP/1.1 200 OK
স্থিতি কোড '200 ওকে' এর অর্থ হল যে অনুরোধটি সফল হয়েছে এবং একটি ওয়েবসাইট পৌঁছনীয়।
curl -Is http://www.google.com | head -1 | grep 200; if [[ $? -eq 0 ]]; then; echo "Online"; else; echo "Offline"; fi;
যদি আপনার স্থানীয় নেমসারভারটি নিচে থাকে,
পিং 4.2.2.1
সর্বদা স্মরণে রাখা সহজ আইপি (এটি আসলে একটি নেমসার্ভার, এমনকি)।
শীর্ষ ভোট উত্তর তাই একটি ম্যাক তাদের জন্য, আমি সফলভাবে এই পরীক্ষিত থাকেন MacOS এর জন্য কাজ করে না:
GATEWAY=`route -n get default | grep gateway`
if [ -z "$GATEWAY" ]
then
echo error
else
ping -q -t 1 -c 1 `echo $GATEWAY | cut -d ':' -f 2` > /dev/null && echo ok || echo error
fi
MacOS হাই সিয়েরা 10.12.6 এ পরীক্ষিত
route
কমান্ডটি পরিবর্তন করুন route -n get default 2> /dev/null | grep gateway
।
এই বাশ স্ক্রিপ্টটি অবিচ্ছিন্নভাবে ইন্টারনেটের জন্য চেক করে এবং ইন্টারনেট উপলভ্য হলে একটি বীপ শব্দ করে।
#!/bin/bash
play -n synth 0.3 sine 800 vol 0.75
while :
do
pingtime=$(ping -w 1 8.8.8.8 | grep ttl)
if [ "$pingtime" = "" ]
then
pingtimetwo=$(ping -w 1 www.google.com | grep ttl)
if [ "$pingtimetwo" = "" ]
then
clear ; echo 'Offline'
else
clear ; echo 'Online' ; play -n synth 0.3 sine 800 vol 0.75
fi
else
clear ; echo 'Online' ; play -n synth 0.3 sine 800 vol 0.75
fi
sleep 1
done
সংক্ষিপ্ততম উপায়: fping 4.2.2.1
=> "4.2.2.1 জীবিত"
আমি এটিকে পছন্দ করি কারণ এটি দ্রুত এবং কম ভার্বোস আউটপুটের চেয়ে কম ping
হয়, আপনাকে এটি ইনস্টল করতে হবে down
আপনি কোনও নির্দিষ্ট ওয়েবসাইটের চেয়ে যে কোনও পাবলিক ডিএনএস ব্যবহার করতে পারেন ।
fping -q google.com && echo "do something because you're connected!"
-q
একটি প্রস্থান কোড ফেরত দেয়, তাই আমি অনলাইনে কিছু চালানোর উদাহরণ দেখিয়ে চলেছি।
Mac এ ইনস্টল করার: brew install fping
; উবুন্টুতে:sudo apt-get install fping
একইভাবে @ জেসির উত্তরের জন্য , এই বিকল্পটি ব্যবহার করা যে কোনও সমাধানের চেয়ে অনেক দ্রুত ping
এবং সম্ভবত @ জেসির উত্তরের চেয়ে কিছুটা বেশি দক্ষ হতে পারে ।
find /sys/class/net/ -maxdepth 1 -mindepth 1 ! -name "*lo*" -exec sh -c 'cat "$0"/carrier 2>&1' {} \; | grep -q '1'
এই কমান্ডের ব্যবহার find
সঙ্গে -exec
সমস্ত ফাইল উপর রান কমান্ড নামে না *lo*
এ/sys/class/net/
। এগুলি আপনার মেশিনে উপলব্ধ নেটওয়ার্ক ইন্টারফেস সম্পর্কিত তথ্য সম্বলিত ডিরেক্টরিগুলির লিঙ্ক হওয়া উচিত।
কমান্ডটি রান করা হচ্ছে একটি sh
কমান্ড যা carrier
সেই ডিরেক্টরিগুলির মধ্যে ফাইলের বিষয়বস্তুগুলি পরীক্ষা করে । এর মানটির $interface/carrier
3 টি অর্থ রয়েছে - উদ্ধৃতি :
মনে হয় এখানে তিনটি রাজ্য রয়েছে:
- । / ক্যারিয়ারটি পঠনযোগ্য নয় (উদাহরণস্বরূপ যখন নেটওয়ার্ক ম্যানেজারে ইন্টারফেস অক্ষম থাকে)।
- । / ক্যারিয়ারটিতে "1" থাকে (যখন ইন্টারফেসটি সক্রিয় হয় এবং এটি কোনও ওয়াইফাই নেটওয়ার্কের সাথে সংযুক্ত থাকে)
- । / ক্যারিয়ারটিতে "0" থাকে (যখন ইন্টারফেসটি সক্রিয় থাকে এবং এটি কোনও ওয়াইফাই নেটওয়ার্কের সাথে সংযুক্ত থাকে না)
@ জেসির উত্তরে প্রথম বিকল্পটি যত্ন নেওয়া হয় না । sh
কমান্ড আউট ডোরাকাটা হল:
# Note: $0 == $interface
cat "$0"/carrier 2>&1
cat
carrier
ফাইলটির পাঠ্যযোগ্য না হওয়ার কারণে ব্যর্থ হওয়া সত্ত্বেও সামগ্রীর সামগ্রীগুলি পরীক্ষা করতে এবং সমস্ত আউটপুটকে স্ট্যান্ডার্ড আউটপুটে পুনর্নির্দেশ করতে ব্যবহার করা হচ্ছে । যদি এই ফাইলগুলির মধ্যে grep -q
পাওয়া যায় "1"
তবে এর অর্থ কমপক্ষে 1 টি ইন্টারফেস সংযুক্ত রয়েছে। এর প্রস্থান কোড grep -q
হবে চূড়ান্ত প্রস্থান কোড।
উদাহরণ হিসেবে বলা যায়, এই কম্যান্ডের এর প্রস্থানের অবস্থা ব্যবহার করে, আপনি এটি একটি শুরু ব্যবহার করতে পারেন gnubiff আপনার ~/.xprofile
শুধুমাত্র যদি আপনার একটি ইন্টারনেট সংযোগ আছে।
online() {
find /sys/class/net/ -maxdepth 1 -mindepth 1 ! -name "*lo*" -exec sh -c 'cat "$0"/carrier 2>&1 > /dev/null | grep -q "1" && exit 0' {} \;
}
online && gnubiff --systemtray --noconfigure &
যদি আপনার লক্ষ্যটি আসলে ইন্টারনেট অ্যাক্সেসের জন্য যাচাই করা হয় , তবে এই প্রশ্নের বিদ্যমান অনেক উত্তর ত্রুটিযুক্ত। কয়েকটি বিষয় সম্পর্কে আপনার সচেতন হওয়া উচিত:
এই বিষয়টি মনে রেখে আমি বিশ্বাস করি যে বেশিরভাগের সাথে যোগাযোগ করা সবচেয়ে ভাল কৌশল এইচটিটিপিএস সংযোগের মাধ্যমে সাইটের সাথে যোগাযোগ করা এবং যদি সেই সাইটের কোনওর প্রতিক্রিয়া প্রকাশিত হয় তবে সত্য প্রত্যাবর্তন করা ।
উদাহরণ স্বরূপ:
connected_to_internet() {
test_urls="\
https://www.google.com/ \
https://www.microsoft.com/ \
https://www.cloudflare.com/ \
"
processes="0"
pids=""
for test_url in $test_urls; do
curl --silent --head "$test_url" > /dev/null &
pids="$pids $!"
processes=$(($processes + 1))
done
while [ $processes -gt 0 ]; do
for pid in $pids; do
if ! ps | grep "^[[:blank:]]*$pid[[:blank:]]" > /dev/null; then
# Process no longer running
processes=$(($processes - 1))
pids=$(echo "$pids" | sed --regexp-extended "s/(^| )$pid($| )/ /g")
if wait $pid; then
# Success! We have a connection to at least one public site, so the
# internet is up. Ignore other exit statuses.
kill -TERM $pids > /dev/null 2>&1 || true
wait $pids
return 0
fi
fi
done
# wait -n $pids # Better than sleep, but not supported on all systems
sleep 0.1
done
return 1
}
ব্যবহার:
if connected_to_internet; then
echo "Connected to internet"
else
echo "No internet connection"
fi
এই পদ্ধতির সম্পর্কে কিছু নোট:
if wait $pid;
। কেন এটি আপনার সিস্টেমে কাজ করছে না ধারণা নেই। আপনি কি নিশ্চিত ব্যাশ ব্যবহার করছেন?
wait
এবং এখন বুঝতে পারি রিটার্ন কোডটি সত্যই পরীক্ষিত হচ্ছে। আমি আপনার কোডটি আবার অনুলিপি করেছি এবং আজ এটি কাজ করে - ওফ! আমি অবশ্যই শেষবারের মতো কিছু গণ্ডগোল করেছিলাম যদিও আমি কী কীভাবে বুঝতে পারি না। তবুও মায়া কুলপা। দুঃক্ষিত।
এটি এখানে পোস্ট করা যে কোনও সমাধানের চেয়ে উল্লেখযোগ্যভাবে দ্রুত এবং এটি একটি নির্দিষ্ট হোস্টকে পরীক্ষা করতেও ব্যবহার করা যেতে পারে ।
কৌশলটি আইপি সমাধান করছে যার দ্বারা নিযুক্ত একজনের চেয়ে কম ব্যস্ত ডিএনএস সলভার ব্যবহার করে ping
:
validateConnection () {
host="${1}"
ip=$(getent ahostsv4 "${host}" | awk '{ print $1 }' | head -n1)
ping -c1 "${ip}" 2>&1 >"/dev/null"
if [ "${?}" -ne 0 ]; then
echo "No connection to: ${host}" >&2
exit 1
fi
}