Alyssa

MC_Ping

Jan 11th, 2017
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.79 KB | None | 0 0
  1. import json
  2. import math
  3. import socket
  4. import struct
  5. import sys
  6. from threading import Thread
  7. import time
  8. from queue import Queue
  9. concurrent = 768
  10. done = 0
  11. def pack_varint(data):
  12.     ordinal = b''
  13.     while True:
  14.         byte = data & 0x7F
  15.         data >>= 7
  16.         ordinal += struct.pack('B', byte | (0x80 if data > 0 else 0))
  17.         if data == 0:
  18.             break
  19.     return ordinal
  20. def pack_data(data):
  21.     if type(data) is str:
  22.         data = data.encode('utf8')
  23.         return pack_varint(len(data)) + data
  24.     elif type(data) is int:
  25.         return struct.pack('H', data)
  26.     elif type(data) is float:
  27.         return struct.pack('L', int(data))
  28.     else:
  29.         return data
  30. def format_data(*dargs):
  31.     data = b''
  32.     for arg in dargs:
  33.         data += pack_data(arg)
  34.     return pack_varint(len(data)) + data
  35. def unpack_varint(con):
  36.     data = 0
  37.     for i in range(5):
  38.         ordinal = con.recv(1)
  39.         if len(ordinal) == 0:
  40.             break
  41.         byte = ord(ordinal)
  42.         data |= (byte & 0x7F) << 7*i
  43.         if not byte & 0x80:
  44.             break
  45.     return data
  46. def status(url,port):
  47.     s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  48.     s.settimeout(10)
  49.     s.connect((url,port))
  50.     s.send(format_data(b'\x00\x00', url, port, b'\x01'))
  51.     s.send(format_data(b'\x00'))
  52.     packet_length = unpack_varint(s)
  53.     packet_id = unpack_varint(s)
  54.     byte = b''
  55.     if packet_id > packet_length:
  56.         unpack_varint(s)
  57.     extra = unpack_varint(s)
  58.     while len(byte) < extra:
  59.         byte += s.recv(extra)
  60.     return byte.decode('utf8')
  61.     s.close()
  62. def to_ip(ip):
  63.     blocks = ip.split(".")
  64.     if len(blocks) == 4:
  65.         for block in blocks:
  66.             if not block.isdigit():
  67.                 return socket.gethostbyname(ip)
  68.             else:
  69.                 num = int(block)
  70.                 if num < 0 or num > 255:
  71.                     return socket.gethostbyname(ip)
  72.                 return ip
  73.     else:
  74.         return socket.gethostbyname(ip)
  75. def complete():
  76.     global done
  77.     global time_a
  78.     global time_b
  79.     time_b = time.time()
  80.     done += 1
  81.     if done % 1000 == 0:
  82.         print(str(done) + " completed; " + str(math.floor(done / len(ips))) + "% Done.")
  83.         print("Took " + str(math.floor(((time_b - time_a)*1000)/1000)) + "s")
  84.         time_a = time.time()
  85. def doWork():
  86.     while True:
  87.         dat = q.get()
  88.         try:
  89.             response = status(dat[0],dat[1])
  90.             resp = response.replace("\n","\\n")
  91.             with open("results.txt","a") as f:
  92.                 f.write("\n" + dat[0] + " | " + resp)
  93.         except ConnectionRefusedError:
  94.             pass
  95.         except socket.timeout:
  96.             pass
  97.         except ConnectionResetError:
  98.             pass
  99.         except UnicodeDecodeError:
  100.             pass
  101.         except OSError:
  102.             pass
  103.         complete()
  104.         q.task_done()
  105. #ips = ["198.27.64.141","pvp.vanillalegacy.com","185.38.151.155"]
  106. time_a = time.time()
  107. time_b = time.time()
  108. with open("test.csv") as f:
  109.     ips = [line.rstrip() for line in f]
  110. q = Queue(concurrent *2)
  111. for i in range(concurrent):
  112.     t = Thread(target=doWork)
  113.     t.daemon = True
  114.     t.start()
  115. try:
  116.     for ip in ips:
  117.         q.put([ip,25565])
  118.     q.join()
  119. except KeyboardInterrupt:
  120.     sys.exit(1)
Advertisement
Add Comment
Please, Sign In to add comment