Jabber/XMPP conference bot & framework
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.
brathuhn/sys/s5b.py

52 lines
1.1 KiB

import socket, random
def s5b_prepare():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = None
while True:
port = random.randint(10000,2**16-1)
try:
s.bind(('', port))
s.listen(1)
break
except socket.error:
pass
return (s,port)
def s5b_write_file(s,fd,size):
s.settimeout(60)
conn, addr = s.accept()
data = conn.recv(3)
assert data[0]=='\x05' #SOCKS version not 5
assert data[1]=='\x01' #not a connect command
assert data[2]=='\x00' #does not support other connection method
#send VER=5 METHOD=NO_AUTH
conn.sendall('\x05\x00')
data = conn.recv(47)
assert data[0]=='\x05' # SOCKS version not 5
assert data[1]=='\x01' # not a connect command
# data[2] is reserved
assert data[3]=='\x03' # addr type is name
assert data[4]=='('
name = data[5:45]
assert data[45]=='\x00'
assert data[46]=='\x00'
#ACK
conn.sendall('\x05\x00\x00'+'\x03('+name+'\x00\x00')
#send file
data = fd.read(min(size,1024))
size -= len(data)
while data!='':
conn.sendall(data)
data = fd.read(min(size,1024))
size -= len(data)
conn.close()
fd.close()