Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import json
- import math
- import socket
- import struct
- import sys
- from threading import Thread
- import time
- from queue import Queue
- concurrent = 768
- done = 0
- def pack_varint(data):
- ordinal = b''
- while True:
- byte = data & 0x7F
- data >>= 7
- ordinal += struct.pack('B', byte | (0x80 if data > 0 else 0))
- if data == 0:
- break
- return ordinal
- def pack_data(data):
- if type(data) is str:
- data = data.encode('utf8')
- return pack_varint(len(data)) + data
- elif type(data) is int:
- return struct.pack('H', data)
- elif type(data) is float:
- return struct.pack('L', int(data))
- else:
- return data
- def format_data(*dargs):
- data = b''
- for arg in dargs:
- data += pack_data(arg)
- return pack_varint(len(data)) + data
- def unpack_varint(con):
- data = 0
- for i in range(5):
- ordinal = con.recv(1)
- if len(ordinal) == 0:
- break
- byte = ord(ordinal)
- data |= (byte & 0x7F) << 7*i
- if not byte & 0x80:
- break
- return data
- def status(url,port):
- s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- s.settimeout(10)
- s.connect((url,port))
- s.send(format_data(b'\x00\x00', url, port, b'\x01'))
- s.send(format_data(b'\x00'))
- packet_length = unpack_varint(s)
- packet_id = unpack_varint(s)
- byte = b''
- if packet_id > packet_length:
- unpack_varint(s)
- extra = unpack_varint(s)
- while len(byte) < extra:
- byte += s.recv(extra)
- return byte.decode('utf8')
- s.close()
- def to_ip(ip):
- blocks = ip.split(".")
- if len(blocks) == 4:
- for block in blocks:
- if not block.isdigit():
- return socket.gethostbyname(ip)
- else:
- num = int(block)
- if num < 0 or num > 255:
- return socket.gethostbyname(ip)
- return ip
- else:
- return socket.gethostbyname(ip)
- def complete():
- global done
- global time_a
- global time_b
- time_b = time.time()
- done += 1
- if done % 1000 == 0:
- print(str(done) + " completed; " + str(math.floor(done / len(ips))) + "% Done.")
- print("Took " + str(math.floor(((time_b - time_a)*1000)/1000)) + "s")
- time_a = time.time()
- def doWork():
- while True:
- dat = q.get()
- try:
- response = status(dat[0],dat[1])
- resp = response.replace("\n","\\n")
- with open("results.txt","a") as f:
- f.write("\n" + dat[0] + " | " + resp)
- except ConnectionRefusedError:
- pass
- except socket.timeout:
- pass
- except ConnectionResetError:
- pass
- except UnicodeDecodeError:
- pass
- except OSError:
- pass
- complete()
- q.task_done()
- #ips = ["198.27.64.141","pvp.vanillalegacy.com","185.38.151.155"]
- time_a = time.time()
- time_b = time.time()
- with open("test.csv") as f:
- ips = [line.rstrip() for line in f]
- q = Queue(concurrent *2)
- for i in range(concurrent):
- t = Thread(target=doWork)
- t.daemon = True
- t.start()
- try:
- for ip in ips:
- q.put([ip,25565])
- q.join()
- except KeyboardInterrupt:
- sys.exit(1)
Advertisement
Add Comment
Please, Sign In to add comment