SOCKSv5 の接続コード

認証不要のSOCKSv5サーバにTCPで繋ぐだけwww 接続先もIPじゃないと駄目www 将来に向けた布石のつもりではある.

from sys import exit, stdout, stderr
from socket import socket, AF_INET, SOCK_STREAM

s = socket(AF_INET, SOCK_STREAM)
try:
    s.connect(('socks-server', 1080))
    s.sendall('\x05\x01\x00')
    ret = s.recv(1024)
    if ret[1] == '\xff':
        stderr.write('method error')
        exit(1)
    ip = '192.168.10.5'
    port = 1000
    s.sendall('\x05\x01\x00\x01' + ''.join(map(chr, map(int, ip.split('.')))) + chr(port >> 8) + chr(port & 255))
    ret = s.recv(1024)
    stdout.write('VER: X%x\n' % ord(ret[0]))
    stdout.write('REP: X%x\n' % ord(ret[1]))
    stdout.write('ATYP: X%x\n' % ord(ret[3]))
    addr = '%d.%d.%d.%d' % (ord(ret[4]), ord(ret[5]), ord(ret[6]), ord(ret[7]))
    port = '%d' % (ord(ret[8]) * 256 + ord(ret[9]))
    stdout.write('BND.ADDR: %s\n' % addr)
    stdout.write('BND.PORT: %s\n' % port)
finally:
    s.close()