Exemple #1
0
def loadFile(DNS_FILE, KEY_FILE):
    #Read Key
    with open(KEY_FILE, "r") as keyFile:
        global key
        key = keyFile.readline().strip()

    # Read file into data structure
    with open(DNS_FILE, "r") as dnsFile:
        global dnsRecords
        dnsRecords = loadFromFile(dnsFile)
        xprint("Loaded " + DNS_FILE)
        print(dnsRecords)
Exemple #2
0
def lookupHostname(query):

    hostname = query.strip()

    xprint("Looking up", hostname)
    # Hostname is in DNS records
    if hostname in dnsRecords:
        entry = dnsRecords[hostname]
        return hostname + " " + entry["ip"] + " " + entry["flag"]

    # Hostname not in DNS records
    return hostname + ' - Error:HOST NOT FOUND'
Exemple #3
0
def connectToTS(ts1_HN, ts2_HN):
    sa_sameas_myaddr = socket.gethostbyname(socket.gethostname())

    global TS1socket, TS2socket

    try:
        TS1socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        TS2socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        xprint("Created both TS sockets")
    except socket.error as err:
        xprint("Unable to create TS sockets", err)

    TS1socket.connect((ts1_HN, TS1Port))
    TS2socket.connect((ts2_HN, TS2Port))
Exemple #4
0
def handleAuth(params, csockid):

    TS1socket.send(('auth^^' + params[1]).encode('utf-8'))
    ts1res = TS1socket.recv(100).decode('utf-8')

    TS2socket.send(('auth^^' + params[1]).encode('utf-8'))
    ts2res = TS2socket.recv(100).decode('utf-8')

    if ts1res == params[2]:
        response = 'TLDS1'
    elif ts2res == params[2]:
        response = 'TLDS2'
    else:
        response = 'NO_DIGEST_MATCH'

    xprint('Auth request for challenge ' + params[1] + ':' + response)

    csockid.send(response.encode('utf-8'))
Exemple #5
0
def lookupHostname(query):

    hostname = query.strip()

    # Hostname is in DNS records
    if hostname in dnsRecords:
        entry = dnsRecords[hostname]
        return hostname + " " + entry["ip"] + " " + entry["flag"]

    domaintype = hostname.split('.')[-1]

    if domaintype == 'com':
        xprint("\tPerforming com TS server lookup for", hostname)
        return lookupExternal(hostname, TS1socket)
    if domaintype == 'edu':
        xprint("\tPerforming edu TS server lookup for", hostname)
        return lookupExternal(hostname, TS2socket)

    # Hostname not in DNS records
    return hostname + ' - Error:HOST NOT FOUND'
Exemple #6
0
def runService(connection):
    csockid, addr = connection.accept()
    xprint("Got connection request from", str(addr))

    try:
        while True:
            query = csockid.recv(100).decode('utf-8')
            if len(query) < 1:
                continue

            xprint("Lookup from client:", query)
            response = lookupHostname(query)
            xprint("Sending to client: " + response)
            csockid.send(response.encode('utf-8'))
    except:
        xprint("No more data, closing connection")
        pass
Exemple #7
0
def runService(connection, ts1_HN, ts2_HN):

    connectToTS(ts1_HN, ts2_HN)

    csockid, addr = connection.accept()
    xprint("Got connection request from", str(addr))

    try:
        while True:
            query = csockid.recv(100).decode('utf-8')
            if len(query) < 1:
                continue
            #xprint("Message from client:", query)

            params = query.strip().split('^^')
            if params[0] == 'auth':
                handleAuth(params, csockid)

            #resolved = lookupHostname(query)
            #xprint("\tReplying with", resolved)
            #csockid.send(resolved.encode('utf-8'))
    except socket.error:
        xprint("No more data, closing connection")
        pass
Exemple #8
0
def startServer():
    try:
        connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        xprint("Socket Created")
    except socket.error as err:
        xprint("Error Opening Socket", err)
        exit(10)

    connection.bind(('', PORT))
    connection.listen(1)

    host = socket.gethostname()
    xprint("Hostname:", host)

    localhost_ip = (socket.gethostbyname(host))
    xprint("IP:", localhost_ip)

    return connection
Exemple #9
0
def runService(connection, ts1_HN, ts2_HN):

    connectToTS(ts1_HN, ts2_HN)

    csockid, addr = connection.accept()
    xprint("Got connection request from", str(addr))

    try:
        while True:
            query = csockid.recv(100).decode('utf-8')
            if len(query) < 1:
                continue
            xprint("Lookup from client:", query)
            resolved = lookupHostname(query)
            xprint("\tReplying with", resolved)
            csockid.send(resolved.encode('utf-8'))
    except socket.error:
        xprint("No more data, closing connection")
        pass
Exemple #10
0
def runService(csockid, addr):

    xprint("Got connection request from", str(addr))

    try:
        while True:
            query = csockid.recv(100).decode('utf-8')
            if len(query) < 1:
                continue
            params = query.strip().split('^^')

            if params[0] == 'auth':
                digest = hmac.new(key.encode(), params[1].encode("utf-8"))
                csockid.send(digest.hexdigest().encode('utf-8'))
                continue

            xprint("Lookup from client:", params[1])
            response = lookupHostname(params[1])
            xprint("Sending to client: " + response)
            csockid.send(response.encode('utf-8'))
    except:
        xprint("No more data, closing connection")
        pass
Exemple #11
0
def loadFile(dns_FILE):
    # Read file into data structure
    with open(dns_FILE, "r") as dnsFile:
        global dnsRecords
        dnsRecords = loadFromFile(dnsFile)
        xprint("Loaded " + dns_FILE)