Then I used an external server, like duckduckgo.com, utilizing the computer, with python, already running in my house. Something like:
adr = "https://duckduckgo.com/?q=what+is+my+ip&ia=answer" req = urllib2.Request(adr) res = urllib2.urlopen(req) data = res.read() res.close() ... p = re.compile('\"Answer\":"Your IP address is (\d*).(\d*).(\d*).(\d*) in') m = p.search(data) ... current_ip = (m.groups()[0], m.groups()[1], m.groups()[2], m.groups()[3]) ...
This data were then uploaded to a know web page if it were different from the previous address.
And that worked great, until I occasionally started to use a VPN service on the machine running the script. Then duckduckgo.com returned the IP address of my VPN, which would not forward my ssh logins to my home.
So I checked my router, Netgear WNR2000v5, and it returned the IP address as expected. But only from the page "RST_conn_status.htm". It would also return "Access denied" for the first login attempt if someone had logged in to the router for another machine. And it required a username/password.
The script then became:
username='admin' password='password' adr = 'http://10.0.0.1/RST_conn_status.htm' try: #if someone else logged in to the router we get access denied the first time req = urllib2.Request(adr) base64string = base64.encodestring('%s:%s'%(username, password)).replace('\n', '') req.add_header("Authorization", "Basic %s" % base64string) res = urllib2.urlopen(req) except: time.sleep(1)
req = urllib2.Request(adr) base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '') req.add_header("Authorization", "Basic %s" % base64string) res = urllib2.urlopen(req) time.sleep(1) data = res.read() res.close() ... p = re.compile('var info_get_wanip=\"(\d*).(\d*).(\d*).(\d*)\";') m = p.search(data) ... current_ip = (m.groups()[0], m.groups()[1], m.groups()[2], m.groups()[3]) ...
Nowadays, many users across the globe report that their Netgear router failed to obtain IP address.
ReplyDelete