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.
58 lines
1.2 KiB
58 lines
1.2 KiB
import sys
|
|
import socket
|
|
from levin.section import Section
|
|
from levin.bucket import Bucket
|
|
from levin.ctypes import *
|
|
from levin.constants import P2P_COMMANDS, LEVIN_SIGNATURE
|
|
|
|
args = sys.argv
|
|
if len(args) != 3:
|
|
print('./%s ip port')
|
|
sys.exit()
|
|
|
|
host, ip = args[1], int(args[2])
|
|
|
|
try:
|
|
sock = socket.socket()
|
|
sock.connect((host, ip))
|
|
except:
|
|
sys.stderr.write("unable to connect to %s:%d\n" % (host, ip))
|
|
sys.exit()
|
|
|
|
bucket = Bucket.create_handshake_request()
|
|
|
|
head = bucket.header()
|
|
body = bucket.payload()
|
|
|
|
sock.send(head)
|
|
sock.send(body)
|
|
|
|
# print(">> sent packet \'%s\'" % P2P_COMMANDS[bucket.command])
|
|
|
|
buckets = []
|
|
|
|
while 1:
|
|
buffer = sock.recv(8)
|
|
if not buffer:
|
|
sys.stderr.write("Invalid response; exiting\n")
|
|
break
|
|
|
|
if not buffer.startswith(bytes(LEVIN_SIGNATURE)):
|
|
sys.stderr.write("Invalid response; exiting\n")
|
|
break
|
|
|
|
bucket = Bucket.from_buffer(signature=buffer, sock=sock)
|
|
buckets.append(bucket)
|
|
|
|
if bucket.command == 1001:
|
|
peers = bucket.get_peers() or []
|
|
|
|
for peer in peers:
|
|
try:
|
|
print('%s:%d' % (peer['ip'].ip, peer['port'].value))
|
|
except:
|
|
pass
|
|
|
|
sock.close()
|
|
break
|