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.
52 lines
1.1 KiB
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()
|
|
|