用Python寫socks5伺服器端

2021-09-09 04:38:26 字數 4373 閱讀 3510

用python寫socks5伺服器端 « xiaoxia[pg]

參考自rfc1928:

直接執行這個程式就給本機建立了乙個socks5的**伺服器。

**如下:

view plain

copy to clipboard

print

?

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:  

print

'socks connection from ', self.client_address  

sock = self.connection  

# 1. version

sock.recv(262)  

sock.send(b"\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 = b"\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]))  

print

'tcp connect to', addr, port[0]  

else:  

reply = b"\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:  

print

'socket error'

def main():  

server = threadingtcpserver(('', 1080), socks5server)  

server.serve_forever()  

if __name__ == '__main__':  

main()  

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:

print 'socks connection from ', self.client_address

sock = self.connection

# 1. version

sock.recv(262)

sock.send(b"\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 = b"\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]))

print 'tcp connect to', addr, port[0]

else:

reply = b"\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:

print 'socket error'

def main():

server = threadingtcpserver(('', 1080), socks5server)

server.serve_forever()

if __name__ == '__main__':

main()

已經修正google syntaxhighlighter無法正確顯示python**的問題。問題出自shbrushpython.js中定義regexlist陣列的時候末尾多了乙個","。刪去就行了。神奇的是,只有iecore才報錯……

centos7簡單測試 部署socks5伺服器

參考 官網 2.編譯安裝,安裝環境準備 需先安裝一些依賴元件 yum y install gcc gcc c automake make pam devel openldap devel cyrus sasl devel openssl devel 3 解壓 編譯安裝ss5 解壓命名 root iz...

centos vps 安裝socks5服務

安裝gcc c 和pam yum update y yum install gcc c gcc automake y yum install make yum install flex 安裝socks5必要的包 yum y install pam devel openldap devel cyrus...

Kali搭建Socks5伺服器

首先給kali安裝一些依賴 apt update apt install gcc apt install automake apt install make apt install g apt install libpam0g dev apt install libldap2 devwget解壓縮 ...