[pyar] OnLine/OffLine indicator

Andrés Gattinoni andresgattinoni en gmail.com
Sab Sep 25 16:59:18 ART 2010


2010/9/25 Juan Carlos Ojeda <juancarlospaco en gmail.com>:
> Como implementarian un indicador en una GUI para informar si tenemos
> conexion full con internet, incluido DNS,
> de la manera mas pythonica y resumida posible?
> He buscado documentacion y lo que hacen es bajar una web con urllib y
> mandarla a ningun lado,
> no quisiera bajar una web y mandarla a /dev/null
> Yo estaba pensando algo como:
> import commands
> rtfm = commands.getoutput('ping -c 2 google.com')

Para no depender de programas externos (tené en cuenta que, por
ejemplo, ping seguramente no recibe los mismos parámetros en Linux que
en Windows), podés intentar abrir un socket a algún servidor externo y
enviar algo.

Si el DNS resuelve podés chequear con
socket.gethostbyname('google.com'). En mi caso igual no me serviría
porque por la configuración de mi router, siempre por default
cualquier dominio desconocido me lo resuelve con la IP del dominio
elbarto.com.ar.

Y después para ver si podés establecer una conexión hacés
socket.create_connection.

Algo similar a esto:

>>> import socket
>>> try:
...     socket.gethostbyname('google.com')
...     c = socket.create_connection(('google.com', 80), 1)
...     c.close()
... except socket.gaierror:
...     print "DNS error"
... except socket.error:
...     print "Connection error"

Fijate bien la descripción de los distintos tipos de errores y capaz
podés hacer algo un poco más prolijo. De hecho, el gethostbyname creo
que es al pedo porque internamente lo hace el create_connection.

Saludos,

A



More information about the pyar mailing list