Python寫的Socks5協(xié)議代理服務(wù)器
直接上代碼:
#!/usr/bin/python # Filename s5.py # Python Dynamic Socks5 Proxy # Usage: python s5.py 1080 # Background Run: nohup python s5.py 1080 & import socket, sys, select, SocketServer, struct, time class ThreadingTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): pass class Socks5Server(SocketServer.StreamRequestHandler): def handle_tcp(self, sock, remote): fdset = [sock, remote] while True: r, w, e = select.select(fdset, [], []) if sock in r: if remote.send(sock.recv(4096)) <= 0: break if remote in r: if sock.send(remote.recv(4096)) <= 0: break def handle(self): try: pass # print 'from ', self.client_address nothing to do. sock = self.connection # 1. Version sock.recv(262) sock.send("\x05\x00"); # 2. Request data = self.rfile.read(4) mode = ord(data[1]) addrtype = ord(data[3]) if addrtype == 1: # IPv4 addr = socket.inet_ntoa(self.rfile.read(4)) elif addrtype == 3: # Domain name addr = self.rfile.read(ord(sock.recv(1)[0])) port = struct.unpack('>H', self.rfile.read(2)) reply = "\x05\x00\x00\x01" try: if mode == 1: # 1. Tcp connect remote = socket.socket(socket.AF_INET, socket.SOCK_STREAM) remote.connect((addr, port[0])) pass # print 'To', addr, port[0] nothing do to. else: reply = "\x05\x07\x00\x01" # Command not supported local = remote.getsockname() reply += socket.inet_aton(local[0]) + struct.pack(">H", local[1]) except socket.error: # Connection refused reply = '\x05\x05\x00\x01\x00\x00\x00\x00\x00\x00' sock.send(reply) # 3. Transfering if reply[1] == '\x00': # Success if mode == 1: # 1. Tcp connect self.handle_tcp(sock, remote) except socket.error: pass #print 'error' nothing to do . except IndexError: pass def main(): filename = sys.argv[0]; if len(sys.argv)<2: print 'usage: ' + filename + ' port' sys.exit() socks_port = int(sys.argv[1]); server = ThreadingTCPServer(('', socks_port), Socks5Server) print 'bind port: %d' % socks_port + ' ok!' server.serve_forever() if __name__ == '__main__': main()
相關(guān)文章
python?Sweetviz探索性數(shù)據(jù)可視化分析庫(kù)使用特征詳解
這篇文章主要為大家介紹了python?Sweetviz探索性數(shù)據(jù)可視化分析庫(kù)特征使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01解決django服務(wù)器重啟端口被占用的問(wèn)題
今天小編就為大家分享一篇解決django服務(wù)器重啟端口被占用的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Keras中的多分類損失函數(shù)用法categorical_crossentropy
這篇文章主要介紹了Keras中的多分類損失函數(shù)用法categorical_crossentropy,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06Python中l(wèi)ogger模塊的使用場(chǎng)景分析
logger是python的內(nèi)置模塊,用以輸出代碼運(yùn)行過(guò)程中的運(yùn)行情況,極大的方便了我們的debug過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹了Python中l(wèi)ogger模塊的使用教程,需要的朋友可以參考下2023-06-06Mac系統(tǒng)中Anaconda環(huán)境配置Python json庫(kù)的方法詳解
這篇文章主要為大家介紹了如何在Mac電腦的Anaconda環(huán)境中,配置Python語(yǔ)言中,用以編碼、解碼、處理JSON數(shù)據(jù)的json庫(kù),需要的小伙伴可以參考下2023-08-08Django-rest-framework中過(guò)濾器的定制實(shí)例
這篇文章主要介紹了Django-rest-framework中過(guò)濾器的定制實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Python將string轉(zhuǎn)換到float的實(shí)例方法
在本篇文章中小編給大家分享的是關(guān)于Python將string轉(zhuǎn)換到float的實(shí)例方法以及相關(guān)知識(shí)點(diǎn),需要的朋友們參考下。2019-07-07Django 用戶登陸訪問(wèn)限制實(shí)例 @login_required
這篇文章主要介紹了Django 用戶登陸訪問(wèn)限制實(shí)例 @login_required,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05python socket網(wǎng)絡(luò)編程之粘包問(wèn)題詳解
這篇文章主要介紹了python socket網(wǎng)絡(luò)編程之粘包問(wèn)題詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04