zoukankan      html  css  js  c++  java
  • 神人风范

    用Python写socks5服务器端 « Xiaoxia[PG]

    用Python写socks5服务器端

    参考自RFC1928: http://xiaoxia.org/?p=2672

    直接运行这个程序就给本机建立了一个socks5的代理服务器。

    代码如下:

    1. import socket, sys, select, SocketServer, struct, time  
    2.   
    3. class ThreadingTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): pass  
    4. class Socks5Server(SocketServer.StreamRequestHandler):  
    5.     def handle_tcp(self, sock, remote):  
    6.         fdset = [sock, remote]  
    7.         while True:  
    8.             r, w, e = select.select(fdset, [], [])  
    9.             if sock in r:  
    10.                 if remote.send(sock.recv(4096)) <= 0break  
    11.             if remote in r:  
    12.                 if sock.send(remote.recv(4096)) <= 0break  
    13.     def handle(self):  
    14.         try:  
    15.             print 'socks connection from 'self.client_address  
    16.             sock = self.connection  
    17.             # 1. Version  
    18.             sock.recv(262)  
    19.             sock.send(b"\x05\x00");  
    20.             # 2. Request  
    21.             data = self.rfile.read(4)  
    22.             mode = ord(data[1])  
    23.             addrtype = ord(data[3])  
    24.             if addrtype == 1:       # IPv4  
    25.                 addr = socket.inet_ntoa(self.rfile.read(4))  
    26.             elif addrtype == 3:     # Domain name  
    27.                 addr = self.rfile.read(ord(sock.recv(1)[0]))  
    28.             port = struct.unpack('>H'self.rfile.read(2))  
    29.             reply = b"\x05\x00\x00\x01"  
    30.             try:  
    31.                 if mode == 1:  # 1. Tcp connect  
    32.                     remote = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    33.                     remote.connect((addr, port[0]))  
    34.                     print 'Tcp connect to', addr, port[0]  
    35.                 else:  
    36.                     reply = b"\x05\x07\x00\x01" # Command not supported  
    37.                 local = remote.getsockname()  
    38.                 reply += socket.inet_aton(local[0]) + struct.pack(">H", local[1])  
    39.             except socket.error:  
    40.                 # Connection refused  
    41.                 reply = '\x05\x05\x00\x01\x00\x00\x00\x00\x00\x00'  
    42.             sock.send(reply)  
    43.             # 3. Transfering  
    44.             if reply[1] == '\x00':  # Success  
    45.                 if mode == 1:    # 1. Tcp connect  
    46.                     self.handle_tcp(sock, remote)  
    47.         except socket.error:  
    48.             print 'socket error'  
    49. def main():  
    50.     server = ThreadingTCPServer((''1080), Socks5Server)  
    51.     server.serve_forever()  
    52. if __name__ == '__main__':  
    53.     main()  

    已经修正Google SyntaxHighlighter无法正确显示Python代码的问题。问题出自shBrushPython.js中定义regexList数组的时候末尾多了一个","。删去就行了。神奇的是,只有IEcore才报错……

  • 相关阅读:
    ora-12541:TNS:无监听程序
    【sql: 练习题 25】查询每门课程的平均成绩,结果按平均成绩降序排列
    【sql: 联系题 23 24】查询同名学生名单,并统计同名人数 找到同名的名字并统计个数,查询 1990 年出生的学生名单
    【sql :联系题目 21 22】查询男生、女生人数 ,查询名字中含有「风」字的学生信息
    【sql: 练习题19 ,20】查询每门课程被选修的学生数,查询出只选修两门课程的学生学号和姓名
    【sql:练习题16】查询学生的总成绩,并进行排名
    【sql:练习题15】按各科成绩进行排序,并显示排名
    【sql:练习题14】查询各科成绩最高分、最低分和平均分
    【sql:练习题】按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
    【sql: 练习题12】检索" 01 "课程分数小于 60,按分数降序排列的学生信息
  • 原文地址:https://www.cnblogs.com/lexus/p/2460864.html
Copyright © 2011-2022 走看看