लिनक्स पिंग: समय दिखाओ


17

मैं आउटपुट को छोड़ने के बजाय अनुरोधों को 'टाइम आउट' दिखाने के लिए लिनक्स पिंग कैसे बना सकता हूं?

पिंग के विंडोज संस्करण की तरह।


आप टाइमआउट कैसे नहीं दिखाते हैं?
माइकल

जवाबों:


12

मेरे लिए fping काम नहीं आया ... मेरे मामले में, ज्यादातर समय मैं इसे मूल रूप से सर्वर रिबूटिंग के दौरान देखना चाहता हूं ... यह विंडोज पर बहुत अच्छा काम करता है ...

मैं उस पर मेरी मदद करने के लिए एक सरल स्क्रिप्ट (@entropo उत्तर का विस्तार) का निर्माण करता हूं, जो इस प्रश्न का उत्तर देने में मदद कर सकता है:

https://gist.github.com/brunobraga/7259197

#!/bin/bash

host=$1

if [ -z $host ]; then
    echo "Usage: `basename $0` [HOST]"
    exit 1
fi

while :; do
    result=`ping -W 1 -c 1 $host | grep 'bytes from '`
    if [ $? -gt 0 ]; then
        echo -e "`date +'%Y/%m/%d %H:%M:%S'` - host $host is \033[0;31mdown\033[0m"
    else
         echo -e "`date +'%Y/%m/%d %H:%M:%S'` - host $host is \033[0;32mok\033[0m -`echo $result | cut -d ':' -f 2`"
        sleep 1 # avoid ping rain
    fi
done

और उपयोग कुछ इस तरह है:

यहां छवि विवरण दर्ज करें


क्या आप कृपया पैकेट हानि प्रतिशत की रिपोर्ट करने के लिए इसे संशोधित कर सकते हैं और हर पंक्ति पर भरोसा कर सकते हैं?
पोल हॉलन

21

मुझे मिली सबसे अच्छी बात -O ध्वज का उपयोग करना था (ध्यान दें कि यह सभी डिस्ट्रोस पर काम नहीं करता है - लिनक्स टकसाल 17.1 का उपयोग करके रेबेका IPUTILS-PING 3: 20121221-4ubuntu1.1)

$ ping -O 10.10.5.1

64 bytes from 10.10.5.1: icmp_seq=53 ttl=245 time=460 ms
no answer yet for icmp_seq=54
64 bytes from 10.10.5.1: icmp_seq=55 ttl=245 time=265 ms
64 bytes from 10.10.5.1: icmp_seq=56 ttl=245 time=480 ms
no answer yet for icmp_seq=57
64 bytes from 10.10.5.1: icmp_seq=58 ttl=245 time=348 ms
64 bytes from 10.10.5.1: icmp_seq=59 ttl=245 time=515 ms
no answer yet for icmp_seq=60
64 bytes from 10.10.5.1: icmp_seq=61 ttl=245 time=320 ms
64 bytes from 10.10.5.1: icmp_seq=62 ttl=245 time=537 ms

मैन पेज से:

-O Report outstanding ICMP ECHO reply before sending next packet. This is useful together with the timestamp -D to log output to a diagnostic file and search for missing answers.


हाय स्कॉय, सुपर यूजर में आपका स्वागत है और इस सवाल के जवाब के लिए धन्यवाद! यह प्रतीत होता है के संस्करण पर निर्भर करता है ping; डेबियन व्हीज़ी पर मुझे " ping: invalid option -- 'O'" मिलता है , लेकिन जेसी पर यह आपके ध्यान में रखते हुए काम करता है। आप इस जानकारी को शामिल करने के लिए अपने उत्तर को अपडेट करना चाह सकते हैं। (मैंने आउटपुट और मैनपेज से जानकारी के लिए
प्रीफॉर्मेट

5

जब मैं यह देखने के लिए पिंग का उपयोग करता हूं कि क्या कोई होस्ट शेल स्क्रिप्ट में है, तो मैं ऐसा कुछ करता हूं:

ping -W 1 -c 1 $HOST 2>&1 > /dev/null || (echo -n "dead!"; false) && command-that-needs-host-to-be-up

मूल रूप से, एक आउटपुट के साथ एक सेकंड में एक बार ICMP भेजता है और आगे की कार्रवाई के लिए गेट से बाहर निकलने के कोड का उपयोग करता है।


2

ऐसा करने के लिए आम के लिए कोई रास्ता नहीं pingहै। यदि आप कुछ ऐसा करने की कोशिश कर रहे हैं तो आपके पास कुछ विकल्प हैं:

ping -c 2 <ip>
RESULT=$?
echo $RESULT
1

यदि पिंग विफल होता है, $?तो 1 होगा, यदि पिंग सफल है, $?तो 0 होगा।

दूसरा विकल्प fpingसिस्को की तरह काम करता है ping:

$ fping 200.1.1.1
200.1.1.1 is unreachable
$ fping 192.168.1.1
192.168.1.1 is alive

2

Bruno.braga द्वारा ऊपर दी गई स्क्रिप्ट ठीक काम करती है, हालाँकि व्यक्तिगत रूप से मैं शेल प्रोफ़ाइल में एक उपनाम का उपयोग करना पसंद करता हूं (जैसे .bashrc) ताकि यह दैनिक उपयोग का मामला बन सके।

नीचे दिया गया मेरा समाधान भी ECHO अनुरोध क्रम संख्या की स्वचालित रूप से गणना करता है:

alias pingt='__pingt() { s=0; while :; do s=$(($s+1)); result=$(ping $1 -c1 -W1 |/bin/grep from) && echo "$result, seq=$s" && sleep 1 || echo timeout; done }; __pingt $1'

यहां आउटपुट उदाहरण है जब होस्ट टाइमआउट के साथ अस्थिर है:

$ pingt 10.10.10.126
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.235 ms, seq=1
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.228 ms, seq=2
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.209 ms, seq=3
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.241 ms, seq=4
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.195 ms, seq=5
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.211 ms, seq=6
timeout
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.267 ms, seq=8
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.232 ms, seq=9
^C

बेशक, दोष यह है: सीटीआरएल-सी दबाए जाने पर अंत में कोई आंकड़े नहीं। यदि वांछित है, तो यह शेल स्क्रिप्ट द्वारा न्यूनतम / औसत / अधिकतम की गणना करना भी संभव होगा, महादेव गुंजाइश से परे है।


1

मुझे डर है लेकिन मानक पिंग के साथ इसका कोई 100% समाधान नहीं है। यहां तक ​​कि क्रिया- आउटपुट के लिए पिंग -v के साथ टाइमिंग के मामले में पिंग चुप हो जाएगा। आप उपयोग करने की कोशिश कर सकते हैं:

ping -w 2 192.168.199.1
PING 192.168.199.1 (192.168.199.1) 56(84) bytes of data.

--- 192.168.199.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1007ms

यह 2 सेकंड के बाद पिंग करना बंद कर देगा और फिर पैकेट की संख्या को प्रेषित और पैकेट हानि को दिखाएगा। एक अन्य विकल्प होगा कि आप mtr का उपयोग करें ।


1
nomad@local:~$ fping -l -e 8.8.8.8

8.8.8.8 : [0], 92 bytes, 183 ms (183 avg, 0% loss)
8.8.8.8 : [1], 92 bytes, 61.4 ms (122 avg, 0% loss)
8.8.8.8 : [2], 92 bytes, 164 ms (136 avg, 0% loss)
8.8.8.8 : [3], 92 bytes, 163 ms (143 avg, 0% loss)
8.8.8.8 : [5], 92 bytes, 158 ms (146 avg, 16% loss)
8.8.8.8 : [6], 92 bytes, 122 ms (142 avg, 14% loss)
8.8.8.8 : [7], 92 bytes, 134 ms (141 avg, 12% loss)
8.8.8.8 : [8], 92 bytes, 130 ms (140 avg, 11% loss)

nomad@local:~$ fping -version
fping: Version 3.2
fping: comments to david@schweikert.ch

हालांकि ध्यान दें कि दो-दो मिनट के लिए रस्साकशी के बाद छिटपुट समय में छपे हुए नुकसान पर शून्य प्रभाव पड़ता है (1000 में से 1 पैकेट 0.1% नुकसान होता है और फप्पिंग 0% प्रिंट करता रहेगा)। यह उल्लेख करने के लिए कि "रिक्वेस्ट टाइमआउट" को नोटिस करना बहुत आसान है, समय को पकड़ने की तुलना में 18% 19% हो जाता है (इस बात का उल्लेख नहीं करने के लिए कि आपको उस पल को अनदेखा करना होगा कि 18% वापस 17% पर चला जाता है)
ndemou

fpingअच्छा है, और BTW -eआवश्यक नहीं है जब है -lया -cजोड़ा जाता है, सिर्फ इस्तेमाल कर सकते हैं fping -l 8.8.8.8, उत्पादन में ही है।
एरिक वांग

0

मुझे वास्तव में ब्रूनो से शेल स्क्रिप्ट पसंद है। मैंने सभी विफलताओं के साथ एक फ़ाइल बनाने के लिए एक पंक्ति जोड़ी।

इको-ई " date +'%Y/%m/%d %H:%M:%S'- मेजबान $ मेजबान \ 033 [0; 31mdown \ 033 [0m" >>//ostostpackets.txt है।


0

बिना किसी स्क्रिप्ट के

ping -f -i 1 hostname

लाभ : मानक लिनक्स कमांड - इंस्टॉल या स्क्रिप्ट के लिए कुछ भी नहीं।

नुकसान :

  1. कुछ भी नहीं पैकेट के लिए मुद्रित किया जाता है जो सफलतापूर्वक उत्तर दिया जाता है
  2. यह पैकेट के लिए एक कष्टप्रद बीप बनाता है जिसे सफलतापूर्वक उत्तर दिया जाता है
  3. टाइमआउट का दृश्य संकेत उतना ही कम से कम हो सकता है जब (एक पैकेट के बाहर होने पर एक छोटा बिंदु स्क्रीन पर रहता है)।

एक न्यूनतम स्क्रिप्ट के साथ

#!/bin/bash
while :; do
    ping -W1 -c 1 "$@" | grep 'bytes from '
    case $? in
        0 ) sleep 1 ;;
        1 ) echo -e "request timeout" ;;
        * ) exit ;;
    esac
done

नुकसान : आपको अंत में कोई आंकड़े नहीं मिलते हैं और आप इन 3 पिंग विकल्पों का उपयोग नहीं कर सकते हैं:

  1. -i पैकेट भेजने के बीच के अंतराल को बदलने के लिए (यह 1sec के लिए हार्डकोड है)
  2. -W टाइमआउट को बदलने के लिए (यह 1sec के लिए हार्डकोड है)
  3. -c एन पैकेट भेजने के बाद रोकना

BTW: यह कार्यक्षमता का एक अत्यंत दुर्लभ उदाहरण है जिसे मैं वास्तव में लिनक्स सीएलआई टूल से याद करता हूं, लेकिन मुझे विंडोज़ टूल मिलता है। जैसा कि वे कहते हैं कि क्रियान्वयन नियम साबित करता है :-)


0

यदि आप खिड़कियों की तरह निरंतर पिंग करना चाहते हैं और टाइमस्टैम्प के साथ, यह प्रयोग करें। 192.168.0.1अपने खुद के आईपी पते से बदलने के लिए स्वतंत्र महसूस करें

while :; do ping -c 1 -t 1 192.168.0.1 > /dev/null && echo "`date` >>> Reply OK" && sleep 1 || echo "`date` >>> Request timed out"; done

उदाहरण उत्तर ठीक है

[user@Linux ~]$ while :; do ping -c 1 -t 1 192.168.0.1 > /dev/null && echo "`date` >>> Reply OK" && sleep 1 || echo "`date` >>> Request timed out"; done
Wed Jan  3 03:41:49 GMT 2018 >>> Reply OK
Wed Jan  3 03:41:50 GMT 2018 >>> Reply OK
Wed Jan  3 03:41:51 GMT 2018 >>> Reply OK
^Z
[23]+  Stopped                 sleep 1
[user@Linux ~]$

उदाहरण अनुरोध समय समाप्त हो गया

[user@Linux ~]$ while :; do ping -c 1 -t 1 192.168.0.254 > /dev/null && echo "`date` >>> Reply OK" && sleep 1 || echo "`date` >>> Request timed out"; done
Wed Jan  3 03:41:36 GMT 2018 >>> Request timed out
Wed Jan  3 03:41:37 GMT 2018 >>> Request timed out
Wed Jan  3 03:41:38 GMT 2018 >>> Request timed out
^Z
[22]+  Stopped                 ping -c 1 -t 1 192.168.0.254 >/dev/null
[user@Linux ~]$ 

0

सामान्य पिंग वास्तव में आपको टाइमआउट दिखाता है। पिंग्स के बीच seq = value देखकर आप बता सकते हैं कि कितने टाइमआउट हैं

64 bytes from 192.168.12.46: icmp_seq=8 ttl=62 time=46.7 ms
64 bytes from 192.168.12.46: icmp_seq=11 ttl=62 time=45.3 ms

ईजी 3 समय बाहरी 2 पिंग्स के बीच उत्पन्न हुआ क्योंकि पहला एक था seq=8और दूसरा एक seq=11 (9 और 10 समय बाहरी थे) seq=sequence

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