1#!/usr/bin/env python 2""" 3Tells whether the internet is available using the SystemConfiguration 4framework. 5 6Usage: 7 python internetison [address] 8""" 9from SystemConfiguration import * 10import socket, sys 11 12def resultAvailable(target, flags, info): 13 print "got network reachability status for %s:"%(info,) 14 15 if flags & kSCNetworkFlagsTransientConnection: 16 print "- transient connection" 17 18 if flags & kSCNetworkFlagsReachable: 19 print "- reachable" 20 21 if flags & kSCNetworkFlagsConnectionRequired: 22 print "- connection required" 23 24 if flags & kSCNetworkFlagsConnectionAutomatic: 25 print "- connection automatic" 26 27 if flags & kSCNetworkFlagsInterventionRequired: 28 print "- user intervention required" 29 30 if flags & kSCNetworkFlagsIsLocalAddress: 31 print "- local interface" 32 33 if flags & kSCNetworkFlagsIsDirect: 34 print "- directly attached network" 35 36 37 # And stop the program: 38 loop = CFRunLoopGetCurrent() 39 CFRunLoopStop(loop) 40 41 42def main(): 43 if len(sys.argv) >= 2: 44 addr = socket.gethostbyname(sys.argv[1]) 45 else: 46 addr = '82.94.237.218' # www.python.org 47 48 loop = CFRunLoopGetCurrent() 49 50 target = SCNetworkReachabilityCreateWithAddress(None, (addr, 80)) 51 SCNetworkReachabilitySetCallback(target, resultAvailable, addr) 52 53 ok, flags = SCNetworkReachabilityGetFlags(target, None) 54 if ok: 55 resultAvailable(target, flags, addr) 56 57 else: 58 ok = SCNetworkReachabilityScheduleWithRunLoop(target, 59 loop, kCFRunLoopCommonModes) 60 61 CFRunLoopRun() 62 63if __name__ == "__main__": 64 main() 65