How to check internet access using bash script in linux?

前端 未结 10 1192
孤街浪徒
孤街浪徒 2021-02-01 06:43

In my school, the internet is not available(every night after 23:0 the school will kill the internet, to put us in bed >..<), then the ping will never stop, though I have use

相关标签:
10条回答
  • 2021-02-01 07:22

    Install fping: > less problem then ping.

    fping google.com | grep alive
    

    to use for example like:

    #!/bin/bash
    
    itest=$(fping google.com | grep alive)
    
    while [ "$itest" == "" ] 
            do
            sleep 5
            itest=$(fping google.com | grep alive)
    done
    echo now online
    
    0 讨论(0)
  • 2021-02-01 07:24

    If the school actually turns off their router instead of redirecting all traffic to a "why aren't you in bed" page, then there's no need to download an entire web page or send HTTP headers. All you have to do is just make a connection and check if someone's listening.

    nc -z 8.8.8.8 53
    

    This will output "Connection to 8.8.8.8 port 53 [tcp/domain] succeeded!" and return a value of 0 if someone's listening.

    If you want to use it in a shell script:

    nc -z 8.8.8.8 53  >/dev/null 2>&1
    online=$?
    if [ $online -eq 0 ]; then
        echo "Online"
    else
        echo "Offline"
    fi
    
    0 讨论(0)
  • 2021-02-01 07:26

    I decided to combine a few of the above so I could later create a plot showing ups, downs, and their durations:

    #!/bin/bash
    #
    # pinger is a bash shell script that monitors the network 
    # status every 15 seconds and records if it is up '1' or down '0'
    # into the file log.csv from whence it may be plotted.
    #
    # author: J. W. Wooten, Ph.D.
    # since: 11/12/2019
    # version: 1.0
    #
    TIMESTAMP=`date +%s`
    while [ 1 ]
      do
        nc -z -w 5 8.8.8.8 53  >/dev/null 2>&1
    online=$?
        TIME=`date +%s`
        if [ $online -eq 0 ]; then
          echo "`date +%Y-%m-%d_%H:%M:%S_%Z` 1 $(($TIME-$TIMESTAMP))" | tee -a log.csv
        else
          echo "`date +%Y-%m-%d_%H:%M:%S_%Z` 0 $(($TIME-$TIMESTAMP))" | tee -a log.csv
        fi
        TIMESTAMP=$TIME
        sleep 15
      done;
    

    this outputs to a csv file every 15 seconds. Using Excel or Numbers, you can read the file and create a plot which will show when internet was not available and also the duration. If it changes from your sleep interval, then it is spending time trying to connect. Hope to add the ability to send me a text when it detects network is down next. Thanks to all above.

    0 讨论(0)
  • 2021-02-01 07:27

    Using the example above, I wrote this script to log the state of your connection: https://gist.github.com/cganterh/ffc2fffa8263857cbece

    First, save the following code into a name.sh file.

    #!/bin/bash
    
    while true
    do
        wget -q --tries=10 --timeout=20 -O - http://google.com > /dev/null
        if [[ $? -eq 0 ]]; then
            echo $(date) "1" | tee -a log.csv
        else
            echo $(date) "0" | tee -a log.csv
        fi
        sleep 5
    done
    

    Then, execute name.sh file in terminal, then check the log state information in log.csv of the same folder.

    0 讨论(0)
提交回复
热议问题