|
@@ -36,7 +36,9 @@ def socks5ResolveRequest(hostname, atype=0x03, command=0xF0):
|
|
|
version = 5
|
|
|
rsv = 0
|
|
|
port = 0
|
|
|
- reqheader = struct.pack("!BBBBB",version, command, rsv, atype, len(hostname))
|
|
|
+ reqheader = struct.pack("!BBBB",version, command, rsv, atype)
|
|
|
+ if atype == 0x03:
|
|
|
+ reqheader += struct.pack("!B", len(hostname))
|
|
|
portstr = struct.pack("!H",port)
|
|
|
return "%s%s%s"%(reqheader,hostname,portstr)
|
|
|
|
|
@@ -62,8 +64,11 @@ def socks5ParseResponse(r):
|
|
|
|
|
|
return "IPv6: %s"%(":".join([hex(ord(c)) for c in addr]))
|
|
|
else:
|
|
|
- nul = r.index('\0',4)
|
|
|
- return r[4:nul]
|
|
|
+ hlen, = struct.unpack("!B", r[4])
|
|
|
+ expected_len = 5 + hlen + 2
|
|
|
+ if len(r) < expected_len:
|
|
|
+ return None
|
|
|
+ return r[5:-2]
|
|
|
|
|
|
def socks5ResolvePTRRequest(hostname):
|
|
|
return socks5ResolveRequest(socket.inet_aton(hostname),
|
|
@@ -105,7 +110,6 @@ def resolve(hostname, sockshost, socksport, socksver=4, reverse=0):
|
|
|
if socksver == 5:
|
|
|
s.send(socks5Hello())
|
|
|
socks5ParseHello(s.recv(2))
|
|
|
- print len(fmt(hostname)), len(hostname)
|
|
|
s.send(fmt(hostname))
|
|
|
answer = s.recv(6)
|
|
|
result = parse(answer)
|
|
@@ -127,7 +131,7 @@ if __name__ == '__main__':
|
|
|
sys.exit(0)
|
|
|
socksver = 4
|
|
|
reverse = 0
|
|
|
- while sys.argv[1] == '-':
|
|
|
+ while sys.argv[1][0] == '-':
|
|
|
if sys.argv[1] in ("-4", "-5"):
|
|
|
socksver = int(sys.argv[1][1])
|
|
|
del sys.argv[1]
|
|
@@ -138,7 +142,7 @@ if __name__ == '__main__':
|
|
|
break
|
|
|
|
|
|
if len(sys.argv) >= 4:
|
|
|
- print "Syntax: resolve.py [-4|-5] hostname [sockshost:socksport]"
|
|
|
+ print "Syntax: resolve.py [-x] [-4|-5] hostname [sockshost:socksport]"
|
|
|
sys.exit(0)
|
|
|
if len(sys.argv) == 3:
|
|
|
sh,sp = parseHostAndPort(sys.argv[2])
|