用python寫socks5伺服器端 « xiaoxia[pg]
參考自rfc1928:直接執行這個程式就給本機建立了乙個socks5的**伺服器。
**如下:
view plain
copy to clipboard
?
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:
'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]))
'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:
'socket error'
def main():
server = threadingtcpserver(('', 1080), socks5server)
server.serve_forever()
if __name__ == '__main__':
main()
已經修正google syntaxhighlighter無法正確顯示python**的問題。問題出自shbrushpython.js中定義regexlist陣列的時候末尾多了乙個","。刪去就行了。神奇的是,只有iecore才報錯……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()
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解壓縮 ...