Advertisement
DeaD_EyE

Teamspeak 3 TSDNS/SRV Resolver

Dec 6th, 2015
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.13 KB | None | 0 0
  1. from __future__ import print_function
  2. import sys
  3. import socket
  4. from contextlib import contextmanager
  5.  
  6. @contextmanager
  7. def socketcontext(*args, **kwargs):
  8.     s = socket.socket(*args, **kwargs)
  9.     try:
  10.         yield s
  11.     finally:
  12.         s.close()
  13.  
  14. def get_srv(host):
  15.     try:
  16.         response = dns.resolver.query('_ts3._udp.' + host, 'SRV')
  17.     except:
  18.         return None
  19.     for entry in response:
  20.         return socket.gethostbyname(entry.target.to_text().rstrip('.')) + ':' + str(entry.port)
  21.  
  22. def get_tsdns(host):
  23.     with socketcontext(socket.AF_INET, socket.SOCK_STREAM) as sock:
  24.         try:
  25.             sock.connect((host, 41144))
  26.         except:
  27.             return None
  28.         sock.send('{}'.format(host))
  29.         ret = sock.recv(100)
  30.     return ret
  31.  
  32. def get_ts3port(host):
  33.     ret_tsdns = get_tsdns(host)
  34.     ret_srv = get_srv(host)
  35.     return ret_tsdns or ret_srv or host
  36.  
  37. def main():
  38.     if len(sys.argv) != 2:
  39.         sys.stderr.write('First argument must be a host\n'.encode())
  40.         return -1
  41.     print(get_ts3port(sys.argv[1]))
  42.     return 0
  43.  
  44. if __name__ == '__main__':
  45.     sys.exit(main())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement