Connecting Tech Pros Worldwide Help | Site Map

Testing for Internet Connection

Alexnb
Guest
 
Posts: n/a
#1: Jul 15 '08

Hello internet.

I am wondering, is there a simple way to test for Internet connection? If
not, what is the hard way :p
--
View this message in context: http://www.nabble.com/Testing-for-In...p18460572.html
Sent from the Python - python-list mailing list archive at Nabble.com.

Alex Marandon
Guest
 
Posts: n/a
#2: Jul 15 '08

re: Testing for Internet Connection


Alexnb wrote:
Quote:
I am wondering, is there a simple way to test for Internet connection? If
not, what is the hard way :p
Trying to fetch the homepage from a few major websites (Yahoo, Google,
etc.)? If all of them are failing, it's very likely that the connection
is down. You can use urllib2 [1] to accomplish that.

[1] <http://docs.python.org/lib/module-urllib2.html>
Ben Finney
Guest
 
Posts: n/a
#3: Jul 15 '08

re: Testing for Internet Connection


Alexnb <alexnbryan@gmail.comwrites:
Quote:
I am wondering, is there a simple way to test for Internet
connection? If not, what is the hard way :p
Refine the question: What do you mean by "internet"? It isn't a single
entity.

Do you mean "some particular internet host responding on a particular
network port"?

If you can define exactly what you mean by "internet connection", the
test for it becomes correspondingly easier.

--
\ “Why should I care about posterity? What's posterity ever done |
`\ for me?” —Groucho Marx |
_o__) |
Ben Finney
Thomas Troeger
Guest
 
Posts: n/a
#4: Jul 15 '08

re: Testing for Internet Connection


Alex Marandon wrote:
Quote:
Alexnb wrote:
Quote:
>I am wondering, is there a simple way to test for Internet connection? If
>not, what is the hard way :p
>
Trying to fetch the homepage from a few major websites (Yahoo, Google,
etc.)? If all of them are failing, it's very likely that the connection
is down. You can use urllib2 [1] to accomplish that.
>
[1] <http://docs.python.org/lib/module-urllib2.html>
This seems to work and is rather fast and wastes no bandwidth:

================================================== ============================
#!/usr/bin/python

import socket, struct

def check_host(host, port, timeout=1):
"""
Check for connectivity to a certain host.
"""
# assume we have no route.
ret=False

# connect to host.
try:
# create socket.
sock=socket.socket()
# create timeval structure.
timeval=struct.pack("2I", timeout, 0)
# set socket timeout options.
sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, timeval)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDTIMEO, timeval)
# connect to host.
sock.connect((host, port))
# abort communications.
sock.shutdown(SHUT_RDWR)
# we have connectivity after all.
ret=True
except:
pass

# try to close socket in any case.
try:
sock.close()
except:
pass

return ret

# -------------------------------- main ---------------------------------

if check_host("www.heise.de", 80):
print "Horray!"
else:
print "We've lost headquarters!"
================================================== ============================

I hope the code is ok, but there is always something you can do better.
Comments? :)

Cheers,
Thomas.
Marc Christiansen
Guest
 
Posts: n/a
#5: Jul 15 '08

re: Testing for Internet Connection


Alex Marandon <invalid@nowhere.invalid.orgwrote:
Quote:
Alexnb wrote:
Quote:
>I am wondering, is there a simple way to test for Internet connection? If
>not, what is the hard way :p
>
Trying to fetch the homepage from a few major websites (Yahoo, Google,
etc.)? If all of them are failing, it's very likely that the connection
is down
or there is a mandatory proxy...

Does it count as internet connection, when only port 80 and port 443 are
accessible and those require going through a proxy (very strict firewall
policy)? Or everything requires using SOCKS?
Just some possible problems I came up with. I don't know how often some-
thing like this will happen.

Ciao
Marc
Alexnb
Guest
 
Posts: n/a
#6: Jul 15 '08

re: Testing for Internet Connection





Ben Finney-2 wrote:
Quote:

Alexnb <alexnbryan@gmail.comwrites:
Quote:
>I am wondering, is there a simple way to test for Internet
>connection? If not, what is the hard way :p
Refine the question: What do you mean by "internet"? It isn't a single
entity.

Do you mean "some particular internet host responding on a particular
network port"?

If you can define exactly what you mean by "internet connection", the
test for it becomes correspondingly easier.

--
\ “Why should I care about posterity? What's posterity everdone |
`\ for me?” —Groucho Marx |
_o__) |
Ben Finney
--
http://mail.python.org/mailman/listinfo/python-list
Well, really I just need to figure out if I am able to connect to one site.
That site is dictionary.com.
--
View this message in context: http://www.nabble.com/Testing-for-In...p18468350.html
Sent from the Python - python-list mailing list archive at Nabble.com.

Grant Edwards
Guest
 
Posts: n/a
#7: Jul 15 '08

re: Testing for Internet Connection


>If you can define exactly what you mean by "internet connection", the
Quote:
Quote:
>test for it becomes correspondingly easier.
Quote:
Well, really I just need to figure out if I am able to connect
to one site. That site is dictionary.com.
Then use urllib2 to try to fetch a page from dictionary.com. If
it works, you're "connected". If it fails, you're not. The
most straight-forward way to find out if you can do X is to try
to do X.

--
Grant Edwards grante Yow! if it GLISTENS,
at gobble it!!
visi.com
Alexnb
Guest
 
Posts: n/a
#8: Jul 15 '08

re: Testing for Internet Connection





Troeger Thomas (Ext) wrote:
Quote:
>
Alex Marandon wrote:
Quote:
>Alexnb wrote:
Quote:
>>I am wondering, is there a simple way to test for Internet connection?
>>If
>>not, what is the hard way :p
>>
>Trying to fetch the homepage from a few major websites (Yahoo, Google,
>etc.)? If all of them are failing, it's very likely that the connection
>is down. You can use urllib2 [1] to accomplish that.
>>
>[1] <http://docs.python.org/lib/module-urllib2.html>
>
This seems to work and is rather fast and wastes no bandwidth:
>
================================================== ============================
#!/usr/bin/python
>
import socket, struct
>
def check_host(host, port, timeout=1):
"""
Check for connectivity to a certain host.
"""
# assume we have no route.
ret=False
>
# connect to host.
try:
# create socket.
sock=socket.socket()
# create timeval structure.
timeval=struct.pack("2I", timeout, 0)
# set socket timeout options.
sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, timeval)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDTIMEO, timeval)
# connect to host.
sock.connect((host, port))
# abort communications.
sock.shutdown(SHUT_RDWR)
# we have connectivity after all.
ret=True
except:
pass
>
# try to close socket in any case.
try:
sock.close()
except:
pass
>
return ret
>
# -------------------------------- main ---------------------------------
>
if check_host("www.heise.de", 80):
print "Horray!"
else:
print "We've lost headquarters!"
================================================== ============================
>
I hope the code is ok, but there is always something you can do better.
Comments? :)
>
Cheers,
Thomas.
--
http://mail.python.org/mailman/listinfo/python-list
>
>
Thomas this code did not work on google.com and I also tried it with port
443
--
View this message in context: http://www.nabble.com/Testing-for-In...p18468756.html
Sent from the Python - python-list mailing list archive at Nabble.com.

Alexnb
Guest
 
Posts: n/a
#9: Jul 15 '08

re: Testing for Internet Connection





Alex Marandon-3 wrote:
Quote:
>
Alexnb wrote:
Quote:
>I am wondering, is there a simple way to test for Internet connection? If
>not, what is the hard way :p
>
Trying to fetch the homepage from a few major websites (Yahoo, Google,
etc.)? If all of them are failing, it's very likely that the connection
is down. You can use urllib2 [1] to accomplish that.
>
[1] <http://docs.python.org/lib/module-urllib2.html>
--
http://mail.python.org/mailman/listinfo/python-list
>
>
What exactly do you think will work? I am not sure what you think I should
do? If I use urlopen("http://www.google.com") and I am not connected, I am
not going to get an exception, the program will fail.

--
View this message in context: http://www.nabble.com/Testing-for-In...p18471183.html
Sent from the Python - python-list mailing list archive at Nabble.com.

Grant Edwards
Guest
 
Posts: n/a
#10: Jul 15 '08

re: Testing for Internet Connection


On 2008-07-15, Alexnb <alexnbryan@gmail.comwrote:
Quote:
What exactly do you think will work? I am not sure what you
think I should do? If I use urlopen("http://www.google.com")
and I am not connected, I am not going to get an exception,
the program will fail.
Bullshit. You get an exception. Here's my program:

import urllib2
try:
con = urllib2.urlopen("http://www.google.com/")
data = con.read()
print data
except:
print "failed"

If I run it with no internet connection, I get this:

$ python testit.py
failed

If I bring up the internet connection, then I get a bunch of
HTML.

--
Grant Edwards grante Yow! I'm ZIPPY the PINHEAD
at and I'm totally committed
visi.com to the festive mode.
norseman
Guest
 
Posts: n/a
#11: Jul 15 '08

re: Testing for Internet Connection



Grant Edwards wrote:
Quote:
On 2008-07-15, Alexnb <alexnbryan@gmail.comwrote:
>
Quote:
>What exactly do you think will work? I am not sure what you
>think I should do? If I use urlopen("http://www.google.com")
>and I am not connected, I am not going to get an exception,
>the program will fail.
>
Bullshit. You get an exception. Here's my program:
>
import urllib2
try:
con = urllib2.urlopen("http://www.google.com/")
data = con.read()
print data
except:
print "failed"
>
If I run it with no internet connection, I get this:
>
$ python testit.py
failed
>
If I bring up the internet connection, then I get a bunch of
HTML.
>
=============================
Yep -me two

Process:
copy/paste into afile
slide lines left to create proper indent values
save
python afile

I get same as Grant


If one does a copy/paste into interactive Python, it does fail.
(Lots of indent error messages. After all, it is Python :)


Steve
norseman@hughes.net
Grant Edwards
Guest
 
Posts: n/a
#12: Jul 15 '08

re: Testing for Internet Connection


On 2008-07-15, norseman <norseman@hughes.netwrote:
Quote:
Process:
copy/paste into afile
slide lines left to create proper indent values
save
python afile
>
I get same as Grant
>
>
If one does a copy/paste into interactive Python, it does fail.
(Lots of indent error messages. After all, it is Python :)
I'm always a bit conflicted about how to post code snippets.
IMO, the posting is a lot more readable if the code is indented
to offset it from the prose, but it does make more work for
anybody who wants to run the example.

--
Grant Edwards grante Yow! Did I SELL OUT yet??
at
visi.com
Closed Thread