You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
944 B
32 lines
944 B
"""
|
|
get our current external IP via HTTP
|
|
|
|
@author Georg Hopp
|
|
|
|
@copyright (C) 2014 Copperfasten Technologies
|
|
"""
|
|
import struct
|
|
|
|
from SimpleClient import SimpleClient
|
|
from Protocol.Dns.Dns import Dns
|
|
from Communication.DatagramService import DatagramService
|
|
from Transport.UdpSocket import UdpSocket
|
|
|
|
class DnsClient(object):
|
|
def __init__(self, host, port):
|
|
self._proto = Dns()
|
|
self._client = SimpleClient(
|
|
DatagramService(UdpSocket(host, port), self._proto)
|
|
)
|
|
|
|
def getIp(self, name, timeout=3.0):
|
|
request = self._proto.createRequest(self._client.getRemoteAddr())
|
|
request.addQuery(name)
|
|
response = self._client.issue(request, timeout)
|
|
|
|
if not response or not response._answers:
|
|
raise Exception('no valid response')
|
|
|
|
return '.'.join('%d'%i
|
|
for i in struct.unpack(
|
|
'4B', response._answers[0][4]))
|