Sometimes it is necessary to check whether server you want to run some big bash script is connected to Internet. Usually it makes sense while running scripts periodically using cron. Below is the tiny bash script for this purpose:
#!/bin/bash WGET="/usr/bin/wget" $WGET -q --tries=10 --timeout=5 http://www.google.com -O /tmp/index.google &> /dev/null if [ ! -s /tmp/index.google ];then echo "no" else echo "yes" fi
As you see it tries to download google’s index page, if it’s not empty script returns “yes”, if there is not Internet connection available script will return “no”. If it is impossible to fetch the page in more than 5 seconds script will return “no” as well.
Anything to add? You are welcome!









Hi,
Thank you for that. I have been looking for something like that. In Ubuntu Im using Link Monitor Applet, which pings any selected host.
Sorry, that only proves, if you can reach a site named google.com what is not enough for getting checked if internet connection is up and running.
This will not work, if the google website is down (I saw that once) or your DNS-Server is not reachable.
It would be better to check, if you can reach any DNS-Server.
Dirk has a point. I would suggest ping OpenDNS ip address – 208.67.222.222
Thanks for commenting, guys! Absolutely agreed with you that is not a panacea to fetch a google’s main page. Also it’s not an option to ping any public IP for the same reason — what if the firewall accepts icmp traffic only?
At the same time to make the script more useful you can replace “www.google.com” with “74.125.67.100″ that is google’s public IP… This is to walk-around possible DNS problem. How do you think?
Try
nmap -sU -p
on some dns-servers. If one of them answers, you are connected.
those are very good tips!
I will ad this to my tools, thanks for sharing it.
Whatever happened to good old ping and tracert? ping -c 4 208.67.222.222 –>> this sends 4 pings (to the opendns IP) ofc, you’ll want to check what other nifty little flags ping has. Careful, sending too many pings to an IP might throw some warning flags in your direction. Remember, be considerate.
That was very helpful! Thank You!
what about to ping first the gateway 192.168.0.1 or something similar and than ping google?
Some ping way:
#!/bin/sh
IS=`/bin/ping -c 10 google.com | grep -c “64 bytes”`
if (test “$IS” -lt “3″) then
echo FAIL
else
echo OK
fi
exit
In first variant, after
echo “yes”
may be will be coolest to add:
unlink /tmp/index.google
?????????? ??????, ?? ? ??? ???? ? ?????? ????? ???? ?? ????. ????? ???? ?? ?????? ?? ???????, ????? ? ????????