कंप्यूटर ऑनलाइन है तो जाँच के लिए पिंग की तुलना में तेज़ तरीका?


20

मैं अपने लैब कंप्यूटर के एक सेट के लिए लैन स्क्रिप्ट पर एक वेक लिख रहा हूं। हमारे पास कंप्यूटर होस्टनाम, IP और MAC की एक सूची के साथ sqlite db है और वर्तमान में मैं उनमें से प्रत्येक को '-c1' के साथ पिंग करता हूं, इसलिए यह अंतहीन रूप से नहीं चलता है - लेकिन यहां तक ​​कि कुछ प्रतीक्षा भी होती है, क्या इसे प्राप्त करने का एक तेज़ तरीका है पिंग के बजाय जवाब? पिंग का उपयोग करना स्क्रिप्ट को काफी धीमा करता है क्योंकि इसे जारी रखने के लिए पिंग उत्तरों की आवश्यकता होती है।

किसी भी सुझाव के लिए बहुत बहुत धन्यवाद!

जवाबों:


20

एक ही पैकेट भेजना और प्रतिक्रिया की प्रतीक्षा करना सबसे तेज़ संभव तरीकों में से एक होने जा रहा है, और पिंग ऐसा करने का एक अच्छा तरीका है। वास्तव में, आपके उपयोग के मामले के आधार पर, मेरा तर्क है कि यह बहुत तेज़ है , क्योंकि यह वास्तव में आपको यह नहीं बताता है कि क्या सिस्टम वास्तव में कुछ भी उपयोगी है, बस कर्नेल का नेटवर्क सबसिस्टम जीवित और कॉन्फ़िगर है।

लेकिन यह मानते हुए कि यह काफी अच्छा है, आप कुछ सुधार कर सकते हैं। सबसे पहले, आप -W1पिंग टाइमआउट को एक सेकंड तक कम करने के लिए उपयोग कर सकते हैं । दूसरा, आप अपनी स्क्रिप्ट को अलग-अलग मेजबानों को अतुल्यकालिक रूप से (एक बैकग्राउंड थ्रेड में) बना सकते हैं, और प्रतीक्षा के बजाय आवश्यकतानुसार परिणामों की जांच कर सकते हैं।

वैकल्पिक रूप से, आप दृष्टिकोण पर फिर से विचार कर सकते हैं और रिमोट सिस्टम की किसी भी तरह से जांच कर सकते हैं जब वे ऊपर हों, और यदि सिस्टम में जाँच नहीं की गई है, तो आप मान सकते हैं कि यह नीचे है।


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

1
मैं एक छोटे पैकेट भेजने के लिए -s का भी उपयोग करता हूं।
शॉन जे। गोफ

3
अगर छोटा पैकेट भेजने से फर्क पड़ता है तो मुझे झटका लगेगा।
Mattdm

क्या वे बहुत पहले से ही पैकेट के न्यूनतम आकार के पास नहीं भेजे गए हैं?
जॉन फेनोव

4
वे बहुत छोटे हैं; 56 डेटा बाइट्स का डिफ़ॉल्ट है, जिसे आप कम कर सकते हैं। लेकिन किसी भी मामले में, यह ईथरनेट एमटीयू से छोटा और कुछ भी नहीं से बड़ा है, इसलिए यह किसी भी तरह से "एक पैकेट" के लिए नीचे आता है।
Mattdm

7

यह वही है जिसके लिए फप्पिंग को डिजाइन किया गया था। http://fping.sourceforge.net/

आपको रिटर्न कोड पर भरोसा करने के बजाय आउटपुट को बाद में पार्स करने की आवश्यकता है, लेकिन यह सामान्य पिंग करने की तुलना में बहुत तेज़ है।


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

रिटर्न कोड के लिए अच्छे मूल्य क्या होंगे?
थोरबजोरन रेव एंडरसन

3

यह केवल एक या दो कंप्यूटरों के लिए काम करेगा, लेकिन यदि आप उन्हें सीधे कंप्यूटर से कनेक्ट करते हैं तो उनकी स्थिति की जाँच के लिए जिम्मेदार हैं, आप यह ethtoolदेखने के लिए उपयोग कर सकते हैं कि लिंक सक्रिय है या नहीं।


मैंने इसके लिए इथूल का उपयोग नहीं किया है, क्या आप एक उदाहरण देना चाहेंगे? (या शायद एक लिंक)?
जोहान

ethtool {network_interface} | grep "Link detected" | cut -f 3 -d ' 'yesयदि कोई मशीन जुड़ा हुआ है, और noयदि यह नहीं है तो वापस आ जाएगी ।
लॉरेंस

2

आप इसे प्रसारण पते को पिंग करने के लिए क्या कर सकते हैं जिसके कारण सभी कंप्यूटरों को वापस पिंग करना चाहिए। फिर आप सभी कंप्यूटरों को सुनिश्चित करने के लिए SQLite में मौजूद इस सूची की जाँच कर सकते हैं।

अन्य तो यह है कि एक पिंग शायद सबसे तेज़ तरीका है जिससे यह सुनिश्चित हो सके कि कंप्यूटर किसी नेटवर्क पर जाग रहा है। जैसा कि अन्य उत्तर द्वारा उल्लेख किया गया है, यह वास्तव में उपयोगी डेटा प्रदान नहीं करता है। यदि आपके पास स्क्रिप्ट स्थापित करने की क्षमता है, तो आप एक केंद्रीय सर्वर को पिंग करने के लिए एक क्रोनजोब जोड़ सकते हैं, एक कार्य चला सकते हैं, या प्रक्रिया सूची को एक केंद्रीय सर्वर से बाहर निकाल सकते हैं जो अनुरोध लॉग करेगा। फिर बस जाँच करना जो आपको बताएगा कि आपके पास हर बार मैन्युअल रूप से जांच करने की कोई आवश्यकता नहीं है।


1
मेरा मानना ​​है कि आप प्रसारण पते को पिंग करते हैं, गेटवे को नहीं। आधुनिक प्रणालियों पर, जो शायद काम नहीं करेगा। देखें unix.stackexchange.com/questions/7458/cant-ping-broadcast
mattdm

1
@mattdm: तब मल्टीकास्ट ? मुझे पता नहीं था कि ज्यादातर लोगों ने इसे बंद कर दिया था। मैं इसके साथ पहले मुद्दों का सामना नहीं किया है।
जोश के

Haha हाँ धन्यवाद mattdm, एक समान समस्या आप देख सकते हैं मैं भाग गया। यह नहीं है कि लोग उन्हें बंद कर देते हैं, लेकिन वे आम तौर पर स्पष्ट रूप से प्रसारण बंद करते हैं।
जॉन फिनो

समानांतर में मेजबानों की सूची पिंग करने के लिए fping ( fping.sourceforge.net ) का उपयोग कर सकता है । फिर आपको प्रसारण पते को पिंग करने में सक्षम होने पर भरोसा करने की आवश्यकता नहीं है।
mazianni

2

गंगालिया एक क्लस्टर में कई मेजबानों की निगरानी के लिए मल्टीकास्ट ट्रैफिक का उपयोग करता है, शायद आप भी कुछ इसी तरह का उपयोग कर सकते हैं? यह मानता है कि आपका नेटवर्किंग हार्डवेयर सभी मेजबानों और आपके निगरानी तंत्र के बीच मल्टीकास्ट ट्रैफ़िक की अनुमति देता है।


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

0

मुझे एक ही समस्या थी और निम्नलिखित (त्वरित और गंदी) स्क्रिप्ट के साथ आया था। यह समानांतर रूप से सभी पिंग को अलग-अलग नौकरियों के रूप में जारी करता है और 3 सेकंड में पूरे / 24 सबनेट को स्कैन करेगा; ध्यान दें कि किसी कारण से मैंने यह पता लगाने की जहमत नहीं उठाई कि मैं यहाँ पिंग परिणाम कोड का उपयोग नहीं कर सकता लेकिन grep -v ने यह काम किया:

#!/bin/bash
case $# in
1)
  case $1 in
  [1-9]*)
        echo
        echo Systems active in subnet: $1
        for (( K = 1 ; K < 255 ; K=$K+1 )); do
        # grep -v delivers 0 on no matches
                echo -ne "testing:" $1$K "...    \r"
                (if ping -c 1 -w 1 -n $1$K 2>&1 | grep -q '64 bytes' ; then
                echo $1$K alive "                "
                fi) &
        done
        sleep 3
        echo "                               "
        exit 0
        ;;
  esac;;
esac

0

सी में,

/* count = 1, wait interval = 1 second, no name lookup, */
/* 10 data bytes, 1 second timeout, 200 millisecond wait time */

sprintf(command,"ping -c1 -i1 -n -s10 -t1 -W200 %u" 
   , connection[port].IPAddress);
err = system(command);
/* err == 0 means OK */

0

मैंने fping -r0 ...सबसे तेज़ प्रतिक्रिया प्रदान करना पाया है।

-r(फिर से प्रयास करें) विकल्प समान की तुलना में तेजी लगता है -c(संख्या)। -r0केवल एक पिंग में परिणाम का उपयोग करना और आउटपुट अन्य विकल्पों की तुलना में बहुत संक्षिप्त है।

मेरे सिस्टम पर ...

fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01  2>&1

का परिणाम...

LX00 is alive
LX02 is alive
HA01 is alive
ICMP Host Unreachable from 192.168.1.5 for ICMP Echo sent to LX01
PRINTER is unreachable
LX01 is unreachable
LX03 is unreachable

ICMPसंदेश से छुटकारा पाने के लिए थोड़ी मालिश मुझे देता है ...

fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01  2>&1 | grep ' is ' | sort

HA01 is alive
LX00 is alive
LX01 is unreachable
LX02 is alive
LX03 is unreachable
PRINTER is unreachable

गति के लिए, fping4 जीबी रैम के साथ इस पुराने 1.8GHz इंटेल डुअल-कोर पर ...

time fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01 2>&1

LX00 is alive
LX02 is alive
HA01 is alive
PRINTER is unreachable
LX01 is unreachable
LX03 is unreachable

real    0m0.554s
user    0m0.000s
sys     0m0.000s

और grepऔर sortकेवल समय के लिए 0.001-0.004s जोड़ने के लिए लग रहे हैं ...

time fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01 2>&1 | grep ' is ' | sort

HA01 is alive
LX00 is alive
LX01 is unreachable
LX02 is alive
LX03 is unreachable
PRINTER is unreachable

real    0m0.558s
user    0m0.000s
sys     0m0.000s

टिप्पणियाँ

  • ICMPसंदेश हर रन पर नहीं होती है।
  • 2>&1रोकने के लिए आवश्यक है ICMPसे संदेश के रूप में यह करने के लिए भेज दिया जाता है उत्पादन में दिखाने stderrके बजाय stdout
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.