user11501941
user11501941

Reputation:

Checking whether specific website is up in the terminal?

Is there an easy way to check Internet connectivity from console? I am trying to play around in a shell script. One idea I seem is to wget --spider http://www.google.com/ and check the HTTP response code to interpret if the Internet connection is working fine.

This is what I am trying:

#!/bin/bash

# Sending the output of the wget in a variable and not what wget fetches
RESULT=`wget --spider http://google.com 2>&1`
FLAG=0

# Traverse the string considering it as an array of words
for x in $RESULT; do
    if [ "$x" = '200' ]; then
        FLAG=1 # This means all good
    fi
done

Is there any way to accomplish this?

Upvotes: 1

Views: 4944

Answers (5)

LMC
LMC

Reputation: 12877

A bit more compact variant of @carlos-abraham answer. You can have curl to output just the http response code and make a decision with it

# 200 if everything is ok
http_code=$(curl -s --head -m 5 -w %{http_code} --output /dev/null www.google.com)

if [ "$http_code" -eq 200 ]; then
    echo "success"
else
    # write error to stderr
    echo "http request failed: $http_code" >&2
    exit 1
fi

-m 5: wait 5 seconds for the whole operation
--output /dev/null: suppress html site response
-w %{http_code}: write to stdout the http response code.

A bit more elaborated script to check connectivity and http response

#url="mmm.elgoog.moc"
url="www.google.com"
max_wait=5

(ping -w $max_wait -q -c 1 "$url" > /dev/null 2>&1 )
response_code=$?

if [ "$response_code" -eq 0 ]; then
    # 200 if everything is ok
    response_code=$(curl -s --head -m $max_wait -w %{http_code} --output /dev/null "$url")
fi

case "$response_code" in
  1)
    echo "Connectivity failed. Host down?" >&2
    exit $response_code
    ;;
  2)
    echo "Unknown host or other problem. DNS problem?" >&2
    exit $response_code
    ;;
  200)
    echo "success"
    exit 0
    ;;
   *)
    echo "Failed to get a response: $response_code" >&2
    exit 1
esac

Upvotes: 0

user9127520
user9127520

Reputation:

Please try this code.

#!/bin/bash

wget -q --spider http://google.com

if [ $? -eq 0 ]; then
    echo "Internet connection is OK"
else
    echo "Internet connection is FAILED"

fi

Upvotes: 0

Cole Tierney
Cole Tierney

Reputation: 10334

An option that does not use the internet to see if it is available is to check for a default route in your routing tables. The routing daemon will remove your default route when the internet is not available and add it back when it is.

netstat -nrf inet | grep -q ^default && \
    echo internet is up || \
    echo internet is down

To check if a website is up, you can use netcat to see if it is listening on port 80. This helps with sites that refuse head requests with '405 Method Not Allowed'.

nc -zw2 www.example.com 80 &>/dev/null && \
    echo website is up || \
    echo website is down

Upvotes: 0

Abraham
Abraham

Reputation: 9885

I am using this for myself and kinda works for me! It checks the connection from a reliable website like google and if it gets 200 status as the response, you probably have internet.

if curl -s --head  --request GET www.google.com | grep "200 OK" > /dev/null ; then
    echo "Internet is present"
else
    echo "Internet isn't present"
fi

On one line, thanks @PS

if ping -c1 8.8.8.8 &>/dev/null ;then echo Working ;else echo Down ;fi

Upvotes: 3

Israel Figueirido
Israel Figueirido

Reputation: 343

You can do it with ping or curl commands. Check man for more.

Upvotes: 1

Related Questions