467,915 Members | 1,495 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 467,915 developers. It's quick & easy.

Testing for Internet Connection


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.

Jul 15 '08 #1
  • viewed: 10403
Share:
11 Replies
Alexnb wrote:
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>
Jul 15 '08 #2
Alexnb <al********@gmail.comwrites:
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
Jul 15 '08 #3
Alex Marandon wrote:
Alexnb wrote:
>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.
Jul 15 '08 #4
Alex Marandon <in*****@nowhere.invalid.orgwrote:
Alexnb wrote:
>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
Jul 15 '08 #5

Ben Finney-2 wrote:

Alexnb <al********@gmail.comwrites:
>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.

Jul 15 '08 #6
>If you can define exactly what you mean by "internet connection", the
>test for it becomes correspondingly easier.
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
Jul 15 '08 #7

Troeger Thomas (Ext) wrote:
>
Alex Marandon wrote:
>Alexnb wrote:
>>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.

Jul 15 '08 #8

Alex Marandon-3 wrote:
>
Alexnb wrote:
>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.

Jul 15 '08 #9
On 2008-07-15, Alexnb <al********@gmail.comwrote:
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.
Jul 15 '08 #10

Grant Edwards wrote:
On 2008-07-15, Alexnb <al********@gmail.comwrote:
>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
no******@hughes.net
Jul 15 '08 #11
On 2008-07-15, norseman <no******@hughes.netwrote:
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
Jul 15 '08 #12

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

12 posts views Thread by Cliff Wells | last post: by
3 posts views Thread by Jonny | last post: by
5 posts views Thread by Mark C | last post: by
6 posts views Thread by =?Utf-8?B?QnNtZW5nZW4=?= | last post: by
1 post views Thread by =?Utf-8?B?QiBTaW5naA==?= | last post: by
1 post views Thread by =?Utf-8?B?QWxoYW1icmEgRWlkb3MgRGVzYXJyb2xsbw==?= | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.