Tag: DNS

Python Internet availability

Python Internet availability

This Python code snippet gives you a solution when you need to check if your Python application can reach the Internet.  You can always check if an Internet website is responding with urllib.request.urlretrieve.  For instance, www.google.com.  I have found this is not always reliable or even lock up the program.

A more reliable method is pinging one or more public DNS servers.  This snippet is a Python 3 function that does just that.  The function checks at random the set of DNS servers in the ‘li’ list and return ‘1’ when a DNS server responds or ‘0’ when all  DNS severs fail.

function

import random
import os
import socket
import subprocess

def getInternetStatusByDnsServers():
    r = ‘0’
    li = ["8.8.8.8",\
    "8.8.4.4",\
    "209.244.0.3",\
    "209.244.0.4",\
    "208.67.222.222",\
    "37.235.1.174",\
    "91.239.100.100"\
    ]

    random.shuffle(li)
    for i in range(len(li)):
       try :
           hostname = li[i]
           p = subprocess.Popen(["/bin/ping", "-c1", "-W1", hostname], stdout=subprocess.PIPE).stdout.read()
           for item in str(p).split("\n"):
               if "0% packet loss" in item:
                   return ‘1’
        except Exception as inst:
            print(type(inst))
            print(inst.args)
            print(inst)
    return r