मैं पिंग कमांड के साथ एक छोटा सा समय कैसे तय कर सकता हूं?


49

मैं एक स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो मेरे LAN पर सभी होस्ट्स को सूचीबद्ध करती है (उनमें से लगभग 20) और प्रत्येक होस्ट के बगल में पिंग स्टेटस लिखता है। मेरे पास डीएचसीपी पट्टों की फाइल है, इसलिए मेरे पास सभी आईपी (जैसे, 10.0.0.1, 10.0.0.2, आदि) हैं, मुझे प्रत्येक मेजबान के लिए पिंग की स्थिति की आवश्यकता है।

इसलिए, मेरी स्क्रिप्ट प्रत्येक मेजबान के लिए एक एकल पिंग लॉन्च करती है:

ping -c 1 10.0.0.1

दुर्भाग्य से, जब कोई होस्ट ऑफलाइन होता है, तो पिंग को टाइमआउट करने में लंबा समय लगता है। मैंने जाँच की man ping, टाइमआउट देरी सेट करने के लिए दो विकल्प प्रतीत होते हैं: -w deadlineऔर -W timeout। मुझे लगता है कि मुझे बाद में दिलचस्पी है।

इसलिए मैंने यह कोशिश की:

ping -c 1 -W 1 10.0.0.1

लेकिन प्रति ऑफलाइन होस्ट की एक सेकंड प्रतीक्षा अभी भी बहुत लंबी है। मैंने इसे एक दूसरे से नीचे सेट करने की कोशिश की, लेकिन यह पैरामीटर को बिल्कुल भी ध्यान में नहीं रखता है:

ping -c 1 -W 0.1 10.0.0.1  # timeout option is ignored, apparently

क्या टाइमआउट को कम मूल्य पर सेट करने का कोई तरीका है? यदि नहीं, तो क्या कोई विकल्प हैं?

संपादित करें

  • ओएस डेबियन लेनी है।
  • मैं जिन मेजबानों को पिंग करने की कोशिश कर रहा हूं, वे वास्तव में एक्सेस प्वाइंट हैं। वे उपयोगकर्ताओं के रूप में (तैनाती और प्रतिस्थापन की सादगी के लिए) एक ही वलान और सबनेट पर हैं। यही कारण है कि मैं सभी सबनेट ( ping -bउदाहरण के लिए) के साथ स्कैन नहीं करना चाहता ।

# 2 संपादित करें

मैंने fpingसमाधान स्वीकार किया (अन्य सभी उत्तर के लिए धन्यवाद)। यह कमांड वास्तव में वही करता है जो मैं देख रहा था:

fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4

इस कमांड को पूरा करने के लिए अधिकतम 500ms लगते हैं, और मुझे एक साथ सभी मेजबानों की पिंग स्थिति प्रदान करता है:

10.0.0.1 : [0], 84 bytes, 5.71 ms (5.71 avg, 0% loss)
10.0.0.2 : [0], 84 bytes, 7.95 ms (7.95 avg, 0% loss)
10.0.0.3 : [0], 84 bytes, 16.1 ms (16.1 avg, 0% loss)
10.0.0.4 : [0], 84 bytes, 48.0 ms (48.0 avg, 0% loss)

10.0.0.1 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 5.71/5.71/5.71
10.0.0.2 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 7.95/7.95/7.95
10.0.0.3 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 16.1/16.1/16.1
10.0.0.4 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 48.0/48.0/48.0

डेबियन लेनी पर, स्थापना तुच्छ है:

aptitude update
aptitude install fping

जवाबों:


41

फ़ैपिंग आपके द्वारा उपयोग किए जा रहे स्टॉक पिंग की तुलना में एक बेहतर उपकरण हो सकता है। आप किस ओएस पर हैं?

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

1
महान काम करता है, धन्यवाद, यही वह चीज है जिसकी मुझे तलाश थी। यह कमांड काम ठीक करता है: fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 ... पूरी बात आधे से एक सेकंड तक चलती है, और मुझे सभी मेजबानों के लिए एक ही बार में परिणाम मिलते हैं। उत्कृष्ट उपकरण। :-))
मिनीक्वार्क

37

एक समाधान की तलाश कर रहे लोगों के लिए ping, -iस्विच का उपयोग करें।

ping -i 0.2 www.google.com

या, यदि आप 0.1 का उपयोग करना चाहते हैं, तो आपको इसे रूट के रूप में चलाने की आवश्यकता होगी

sudo ping -i 0.1 www.google.com

अतिरिक्त उपयोगिताओं को डाउनलोड करने की आवश्यकता नहीं है।


4
मुझ से +1। यह पहला परिणाम है जब गुगली "पिंग टाइमआउट", और यह वही है जो मैं देख रहा था।
स्टीवन जेफ्रीस

@StevenJeffries वही यहाँ!
ल्यूक

1
मृत होस्ट के मामले में यह समाधान लगभग 1 सेकंड के बाद अपना पहला उपयोगी आउटपुट प्रिंट करेगा। यह निश्चित रूप से गलत उत्तर है क्योंकि @MarcelBurkhard ने पहले ही उल्लेख किया है।
विक्टर यारमा

1
इस समाधान के साथ समस्या यह है कि -i 0.1 100ms इंतजार नहीं करेगा, लेकिन अब, 100 मिलियन से अधिक ले जाने वाले पिंग्स के लिए, इस प्रकार समय को फेंकना।
लेलमेड्डन

2
यह उत्तर गलत है - यह बदलता नहीं है कि pingप्रतिक्रिया का इंतजार कब तक होगा - बल्कि यह सिर्फ लगातार पिंग्स भेजता है ....
माउंट देव

21

आप timeoutउबंटू / डेबियन पर कमांड के साथ कुछ समय समाप्त कर सकते हैं:

timeout 0.2 ping -c1 fqdn || { do_work }

अच्छा उत्तर! मैंने अब किया: टाइमआउट 1 पिंग -c 1 test.com
vrijdenker

1
टाइमआउट का मेरा संस्करण केवल 1 सेकंड स्वीकार करता है। timeout (GNU coreutils) 8.4
स्लम

मैं इस समाधान को पसंद करता हूं, इसे अन्य सभी कमांडों पर लागू किया जा सकता है
डेटिनडहॉक

@ एसएलएम, यह अजीब है कि आपका संस्करण एक सेकंड से कम का समर्थन नहीं करता है। यह मेरे लिए काम करता है: DURATION is a floating point number with an optional suffix: 's' for seconds (the default),... मेरे मामले में man timeoutरिपोर्ट करता है GNU coreutils 8.26। BWT, मैं Ubuntu 17.04 का उपयोग कर रहा हूं।
विक्टर यारमा

यह वास्तव में केवल एक चीज है जो काम करता है यदि आप टाइमआउट कम करना चाहते हैं (मेजबान जवाब नहीं देता है) ... आपको गणित करना होगा हालांकि: टाइमआउट पिंग कमांड के "-c" * "-i" से अधिक होना चाहिए-
मार्की

13

मैं इस कार्य के लिए नैम्प का उपयोग करूंगा।

nmap -sP --max-retries=1 --host-timeout=1500ms 10.0.0.1

इस पर अधिक जानकारी के लिए नैम्प डॉक्यूमेंटेशन देखें ।


गुड कॉल .. यह करने के लिए "भयानक" तरीका है: D +1
Arenstar

नमस्ते, मैंने बस यह कोशिश की, लेकिन मुझे निम्नलिखित त्रुटि संदेश मिला: "--host-timeout को मिलीसेकंड में निर्दिष्ट किया जाता है जब तक कि आप इसे 's', 'm', 'h', या 'd' को जोड़कर योग्य नहीं करते। मान। 1500 मिलीसेकंड से अधिक होना चाहिए ”।
मिनीक्वायार्क

मुझे लगता है कि समस्या स्पष्ट है, टाइमआउट 1500ms से कम नहीं हो सकता है। मुझे लगता है कि मुझे लगता है कि समानता के लिए नामपद विकल्पों की तलाश करनी चाहिए।
pacey

यह केवल एक अनुरोध भेजने के लिए लगता है। मैं निरंतर दोष का पता लगा रहा हूं, मुझे यहां "पिंग मिलिसकॉन्ड टाइमआउट" द्वारा गुगलिंग मिला है, क्या नंबि इनफिनिटी पिंग की तरह इन्फिनिटी-पिंग प्रदान करता है?
ThorSummoner

एक सेकंड से भी कम समय के लिए कुछ समय सेट करने पर @ विजेता- bjelkholm उत्तर के रूप में एक विशेषाधिकार प्राप्त उपयोगकर्ता का उपयोग करना शामिल होगा
thrau

4

यदि आप अपने सभी मेजबान भौतिक LAN पर हैं, तो आप arp ping टूल को देख सकते हैं। यह वही काम करता है, लेकिन 'ping' करने के लिए लेयर 2 arp पैकेट्स का उपयोग करता है। आप फँसाने और icmp पिंग, या वास्तव में tcp पिंग के संयोजन का उपयोग कर सकते हैं, जो कि विफलता है। निष्कासन एक tcp स्टैक क्रैश है, हालांकि इन दिनों दुर्लभ, हम पा सकते हैं कि क्या एक मशीन tcp स्टैक दुर्घटनाग्रस्त हो गई थी, क्योंकि मशीन पिंग का जवाब नहीं देगी, हालांकि यह arp का जवाब देगी (जो मेजबान पर कोड का एक अलग टुकड़ा है) ।

आर्पिंग, टीसीपी और आईसीएमपी पिंग के संयोजन का उपयोग करके आप यह पता लगा सकते हैं कि मशीन पर सेवा दुर्घटनाग्रस्त हो गई है, टीसीपी स्टैक दुर्घटनाग्रस्त हो गया है, या मशीन पूरी तरह से बंद हो गई है। यदि आपने ईथरनेट स्विच प्रबंधित किए हैं तो आप भौतिक लिंक डेटा प्राप्त कर सकते हैं, यह खुलासा करते हुए कि मशीन वास्तव में चालू है, या भौतिक रूप से अनप्लग हो गई है। हमारे पास एक ऐसी स्थिति थी जहां मशीनों (सार्वजनिक कमरों में ग्राहकों) को बंद कर दिया जाएगा, हमने मशीनों को शक्ति प्रदान करने के लिए उस डेटा और लैन पैकेट पर भेजे गए वेक को इकट्ठा किया। :-)

कभी भी आपके द्वारा बनाए जाने वाले समाधान, यदि आपका नेटवर्क व्यस्त है, तो किसी प्रकार के qos को लागू करने के बारे में सोचें, ताकि आपके निगरानी पैकेट नेटवर्क पर प्राथमिकता ले सकें, नेटवर्क की भीड़ के कारण माप पैकेट खोने से झूठे अलार्म दे सकते हैं। यदि आप पैकेट की निगरानी के लिए qos का उपयोग करते हैं, तो आपको नेटवर्क उपयोग के बारे में डेटा इकट्ठा करने के बारे में सोचना होगा।

तो, आप अपने निगरानी समाधान को जटिल या जितना चाहें उतना आसान बना सकते हैं। हम पाते हैं कि सबसे प्राथमिक निगरानी प्रणाली भी सही दिशा में एक कदम है, कम से कम कुछ प्रशासक मशीनों पर किसी भी नजर रखते हैं :-)।

सौभाग्य!


3

@ जोर्डन-बेडवेल के पास एक बढ़िया सुझाव है।

@ laszlo-valko https://stackoverflow.com/questions/20359487/why-does-ping-not-timeout-in-linux बताते हैं कि पिंग टाइमआउट आईपी एड्रेस निर्धारित होने के बाद ही शुरू होता है। यदि आप एक डीएनएस का उपयोग करते हैं और आपका कार्य केंद्र ऑफ़लाइन है, तो पिंग आईपी पते का निर्धारण नहीं कर सकता है और इसलिए झूठे लौटने से पहले लगभग 20 डिफ़ॉल्ट सेकंड प्रतीक्षा करने के लिए प्रकट होता है।

डोमेन नाम के साथ पिंग चलाते समय लाइनक्स 'टाइमआउट' टूल का उपयोग अधिक नियंत्रण प्रदान करता है।

धन्यवाद दोस्तों


2

का प्रयोग करें डब्ल्यू स्विच, दोनों Windows और डेबियन पर।

यह जांचने का एक त्वरित तरीका है कि क्या मशीन सभी पर प्रतिक्रिया करती है, यह मानते हुए कि यह समय कम से कम सेकंड में निर्दिष्ट होगी।

ping -w 1 192.168.80.105

PING 192.168.80.105 (192.168.80.105) 56(84) bytes of data.

--- 192.168.80.105 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms

1

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


0

हर होस्ट के समानांतर, एक अस्थायी फ़ाइल के आउटपुट के साथ, पृष्ठभूमि में पिंग लॉन्च क्यों नहीं किया जाता है? फिर एक सेकंड के लिए सो जाओ, किसी भी पिंग प्रक्रियाओं को मार डालो जो अभी भी चल रहे हैं, और आउटपुट को इकट्ठा करने के लिए फ़ाइलों को पढ़ें।


1
मुझे लगता है कि यह काम करेगा, लेकिन मैं एक सरल समाधान की तलाश में था। फिर भी धन्यवाद।
मिनीक्वार्क

इस विधि का पैमाना नहीं है।
Synetech

0

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

चीजों को गति देने का एकमात्र तरीका पृष्ठभूमि की जांच करना और परिणामों की कटाई करना है। यह वही है जो नागियस जैसे उपकरण करते हैं।


1
मुझे खेद है, लेकिन मुझे नहीं लगता कि यह सच है। मैन पेज बहुत स्पष्ट है कि -W "सेकंड में, प्रतिक्रिया के लिए प्रतीक्षा करने का समय" निर्दिष्ट करता है; यह आयामहीन नहीं है, और हालांकि पिंग 1 से नीचे मानों का सम्मान नहीं करता है (इसलिए सवाल) उप-सेकंड टाइमआउट अर्थहीन नहीं हैं। यदि आप मुझे क्षमा करेंगे, तो आप -t के साथ भ्रमित हो सकते हैं, -t के साथ, बाद में आईपी टीटीएल (होप काउंट) फ़ील्ड सेट करना, जो आपके द्वारा वर्णित के रूप में व्यवहार करता है, और जहां 1 से नीचे के मूल्य वास्तव में अर्थहीन हैं।
मध्याह्न

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

0

आप कुछ इस तरह की कोशिश कर सकते हैं। लेकिन इसे चलाने में 15 मिनट का समय लगता है।

a=258
while [ $a -ge 1 ]
do
    echo "10.0.0.$a"
    sudo ping -i 0.1 -c 1 "10.0.0.$a">>/home/$USER/output.log
   a=`expr $a - 1`
done
cat /home/$USER/output.log|grep -i "icmp_req=1"
cat /dev/null>/home/$USER/output.log

ऐसा लगता है nmapकि नौकरी के लिए सही उपकरण होगा।
kasperd


-1

पिंग के पास [-टी टाइमआउट] और [-W waittime] विकल्प हैं ताकि आप कर सकें:

ping -c 1 -t 1 -W 1 google.com
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.