किसी वेबसाइट को पिंग किए बिना इंटरनेट कनेक्शन का परीक्षण कैसे किया जा सकता है? मेरा मतलब है, क्या होगा अगर कोई कनेक्शन है लेकिन साइट डाउन है? क्या दुनिया के साथ संबंध के लिए कोई जांच है?
किसी वेबसाइट को पिंग किए बिना इंटरनेट कनेक्शन का परीक्षण कैसे किया जा सकता है? मेरा मतलब है, क्या होगा अगर कोई कनेक्शन है लेकिन साइट डाउन है? क्या दुनिया के साथ संबंध के लिए कोई जांच है?
जवाबों:
बिना पिंग के
#!/bin/bash
wget -q --spider http://google.com
if [ $? -eq 0 ]; then
echo "Online"
else
echo "Offline"
fi
-q : साइलेंस मोड
- स्पाइडर : नहीं मिलता है, बस पृष्ठ उपलब्धता की जांच करें
$? : शेल रिटर्न कोड
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
और मेरे पास अभी भी एक डिफ़ॉल्ट गेटवे है और यह पिंगेबल है, हालांकि मैं वास्तव में बाहरी दुनिया तक नहीं पहुंच सकता।
उपयोगकर्ता के लिए सुपर धन्यवाद somedrew उनके पद के लिए यहाँ: https://bbs.archlinux.org/viewtopic.php?id=55485 2008-09-20 02:09:48 पर
/ Sys / class / net में देखना एक तरीका होना चाहिए
यहाँ लूप बैक के अलावा नेटवर्क कनेक्शन के लिए परीक्षण करने के लिए मेरी स्क्रिप्ट है। मैं नीचे किसी अन्य स्क्रिप्ट का उपयोग करता हूं जो मुझे समय-समय पर परीक्षण के लिए है यदि मेरी वेबसाइट सुलभ है। अगर यह सुलभ नहीं है तो पॉपअप विंडो मुझे किसी समस्या से सचेत करती है।
नीचे दी गई स्क्रिप्ट मुझे हर पांच मिनट में पॉपअप संदेश प्राप्त करने से रोकती है जब भी मेरा लैपटॉप नेटवर्क से कनेक्ट नहीं होता है।
#!/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
नोट करने के लिए उन नए के लिए ध्यान दें: अंतिम 'अगर' कथन परीक्षण करता है यदि नहीं [!] ऑनलाइन और बाहर निकलता है अगर यह मामला है। अधिक जानकारी के लिए मैन बैश और "एक्सप्रेशंस को जोड़ा जा सकता है" देखें।
PS मुझे लगता है कि पिंग यहाँ उपयोग करने के लिए सबसे अच्छी बात नहीं है क्योंकि इसका उद्देश्य किसी विशेष प्रकार के होस्ट के कनेक्शन का परीक्षण करना है यदि किसी प्रकार के नेटवर्क से कनेक्शन है ।
PPS उबंटू 12.04 पर काम करता है / sys कुछ अन्य डिस्ट्रो पर मौजूद नहीं हो सकता है। निचे देखो:
आधुनिक लिनक्स वितरण में वर्चुअल फाइलसिस्टम के रूप में / sys निर्देशिका शामिल है (sysfs, तुलनीय / खरीद के लिए, जो एक खरीद है), जो स्टोर करता है और सिस्टम से जुड़े उपकरणों के संशोधन की अनुमति देता है, जबकि कई पारंपरिक यूनिक्स और यूनिक्स जैसे ऑपरेटिंग सिस्टम का उपयोग करते हैं। / कर्नेल स्रोत ट्री के प्रतीकात्मक लिंक के रूप में sys। [उद्धरण वांछित]
विकिपीडिया से https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
cat /sys/class/net/wwan0/carrier
Ubuntu 14.04 LTS पर काम नहीं करता है।
2>/dev/null
बाद रखना चाह सकते हैं cat /sys/class/net/$interface/carrier
।
यह MacOSX और Linux दोनों पर काम करता है:
#!/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 } / host / port का उपयोग करता है :
if : >/dev/tcp/8.8.8.8/53; then
echo 'Internet available.'
else
echo 'Offline.'
fi
( :
बैश नो-ऑप है, क्योंकि आप केवल कनेक्शन का परीक्षण करना चाहते हैं, लेकिन प्रसंस्करण नहीं।)
मैंने पहले स्क्रिप्ट लिखी है कि पोर्ट 80 से कनेक्ट करने के लिए टेलनेट का उपयोग करें, फिर टेक्स्ट ट्रांसमिट करें:
HTTP/1.0 GET /index.html
इसके बाद दो CR / LF क्रम होते हैं।
बशर्ते आपको HTTP प्रतिक्रिया का कुछ रूप वापस मिल जाए, आप आम तौर पर मान सकते हैं कि साइट कार्य कर रही है।
शीर्ष उत्तर इस तथ्य को याद करता है कि आप अपने डिफ़ॉल्ट गेटवे के लिए पूरी तरह से स्थिर कनेक्शन रख सकते हैं लेकिन इसका मतलब यह नहीं है कि आप वास्तव में इंटरनेट पर कुछ तक पहुंच सकते हैं। ओपी पूछता है कि वह दुनिया के साथ संबंध कैसे परख सकता है। इसलिए मैं आपके LAN के बाहर स्थित ज्ञात IP (xyzw) के गेटवे IP को बदलकर शीर्ष उत्तर को बदलने का सुझाव देता हूं।
तो उत्तर बन जाएगा:
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
मैकओएस हाई सिएरा 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
, नकारात्मक पक्ष यह है कि आपको इसे स्थापित करना होगा।
आप किसी विशिष्ट वेबसाइट के बजाय किसी भी सार्वजनिक डीएनएस का उपयोग कर सकते हैं ।
fping -q google.com && echo "do something because you're connected!"
-q
एक एग्ज़िट कोड देता है, इसलिए मैं सिर्फ कुछ ऑनलाइन चलाने का एक उदाहरण दिखा रहा हूँ।
मैक पर स्थापित करने के लिए brew install fping
:; ubuntu पर: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 अर्थ हैं - उद्धरण :
ऐसा लगता है कि तीन राज्य हैं:
- ./carrier पठनीय नहीं है (उदाहरण के लिए जब इंटरफ़ेस नेटवर्क मैनेजर में अक्षम है)।
- ./carrier में "1" होता है (जब इंटरफ़ेस सक्रिय होता है और यह वाईफाई नेटवर्क से जुड़ा होता है)
- । एयरकार्ट में "0" होता है (जब इंटरफ़ेस सक्रिय होता है और यह वाईफाई नेटवर्क से कनेक्ट नहीं होता है)
@ जेसी के उत्तर में पहले विकल्प का ध्यान नहीं रखा गया है । sh
आदेश बाहर धारीदार है:
# Note: $0 == $interface
cat "$0"/carrier 2>&1
cat
का उपयोग किया जा रहा है की सामग्री की जाँच करें carrier
और सभी आउटपुट को मानक आउटपुट पर पुनर्निर्देशित करें, भले ही वह विफल हो क्योंकि फ़ाइल पठनीय नहीं है। यदि उन फ़ाइलों के बीच grep -q
पाता है "1"
तो इसका मतलब है कि कम से कम 1 इंटरफ़ेस जुड़ा हुआ है। एग्जिट कोड grep -q
अंतिम एग्जिट कोड होगा।
उदाहरण के लिए, इस कमांड के एग्जिट स्टेटस का उपयोग करते हुए, आप इसका उपयोग केवल अपने इंटरनेट कनेक्शन होने पर ही अपने मोबाइल में कर सकते हैं ~/.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 &
यदि आपका लक्ष्य वास्तव में इंटरनेट एक्सेस की जांच करना है , तो इस प्रश्न के कई मौजूदा उत्तर त्रुटिपूर्ण हैं। कुछ बातों से आपको अवगत होना चाहिए:
इसे ध्यान में रखते हुए, मेरा मानना है कि सबसे अच्छी रणनीति HTTPS कनेक्शन पर कई साइटों से संपर्क करना और उन साइटों में से किसी एक पर प्रतिक्रिया देने पर सही वापस आना है।
उदाहरण के लिए:
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
और अब समझता हूं कि रिटर्न कोड का वास्तव में परीक्षण किया जा रहा है। मैंने आपके कोड को फिर से कॉपी किया और आज यह काम करता है - व्हाट्स! मैंने पिछली बार कुछ गड़बड़ कर दी होगी, हालांकि मैं यह नहीं समझ सकता कि क्या या कैसे। फिर भी, मैया पुलक। क्षमा याचना।
यह यहां पोस्ट किए गए किसी भी समाधान की तुलना में काफी तेज है, और एक विशिष्ट मेजबान का परीक्षण करने के लिए भी इस्तेमाल किया जा सकता है।
चाल आईपी को कम व्यस्त DNS सॉल्वर का उपयोग करके हल कर रही है जो एक नियोजित है 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
}