既然有些技术是基于协议识别的和DPI的,为什么不自己创造一种VPN协议呢?
一个及其简单的原型,需要配合squid和国外VPS使用,欢迎来信索取使用方式。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
| #!/usr/bin/env pythonimport sysimport socketimport threadingimport timehelp_msg ="""Info:pysectunnel forwards encrypted data from local_port to sink_port on sink_host.Usage:pysectunnel local_port sink_host sink_port"""LOGGING=0LOG_LEVEL=1def log(log_level, log_str):if LOGGING:if log_level <= LOG_LEVEL:print '%s:%s' % (time.ctime(), log_str)sys.stdout.flush()def encrypt_data(data):encrypted_data=[]for i in range(len(data)):encrypted_data.append( chr(ord(data[i]) ^ 0x17) )return ''.join(encrypted_data)class TunnelThread(threading.Thread):def __init__(self, local_sc, sink_sc, encrypt_enable):threading.Thread.__init__(self)self.local_sc = local_scself.sink_sc = sink_sclog(1, 'Creating new tunnel thread %s ( %s -> %s )' % ( self,self.local_sc.getpeername(), self.sink_sc.getpeername() ) )def run(self):while True:try:data = self.local_sc.recv(1024)if not data:breakencrypted_data = encrypt_data(data)self.sink_sc.sendall(encrypted_data)except:breaklog(1, 'Terminating tunnel thread %s' % self)class TunnelManager:def __init__(self, local_port, sink_host, sink_port):self.local_port = int(local_port)self.sink_host = sink_hostself.sink_port = int(sink_port)print 'Initializing PySecTunnel...'def work(self):print 'PySecTunnel working...'manager_sc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)manager_sc.bind(('0.0.0.0', self.local_port))manager_sc.listen(5)while True:local_sc, address = manager_sc.accept()print 'Accepted connection from %s:%s' % addresssink_sc = socket.socket( socket.AF_INET, socket.SOCK_STREAM )try:sink_sc.connect( ( self.sink_host, self.sink_port ) )log (1, 'Creating new tunnel thread %s ( %s -> %s )' % (self, local_sc.getpeername(), sink_sc.getpeername() ) )except:log(0, 'Error connecting')TunnelThread( local_sc, sink_sc, 0 ).start()TunnelThread( sink_sc, local_sc, 1 ).start()def main():if len(sys.argv) != 4:print help_msgreturn 1local_port = sys.argv[1]sink_host = sys.argv[2]sink_port = sys.argv[3]tunnel_manager = TunnelManager(local_port, sink_host, sink_port)tunnel_manager.work()return 0if __name__=='__main__':sys.exit(main()) |
--------------------------------------------------------
本地:python 111.py 本地代理端口 vps地址 9999
服务器:python 111.py 9999 localhost 3128
加密:异或0×17
不知是否有理解错?