mirror of https://github.com/dnomd343/ProxyC
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							108 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							108 lines
						
					
					
						
							3.0 KiB
						
					
					
				| #!/usr/bin/python | |
| # -*- coding:utf-8 -*- | |
| 
 | |
| from ProxyFilter import baseFunc | |
| from ProxyFilter import V2ray | |
| 
 | |
| vmessMethodList = [ | |
|     'aes-128-gcm', | |
|     'chacha20-poly1305', | |
|     'auto', | |
|     'none', | |
|     'zero', | |
| ] | |
| 
 | |
| vmessFilterRules = { | |
|     'rootObject': { | |
|         'remark': { | |
|             'optional': False, | |
|             'default': '', | |
|             'type': str, | |
|             'format': baseFunc.toStr | |
|         }, | |
|         'server': { | |
|             'optional': True, | |
|             'type': str, | |
|             'format': baseFunc.toStrTidy, | |
|             'filter': baseFunc.isHost, | |
|             'errMsg': 'Illegal server address' | |
|         }, | |
|         'port': { | |
|             'optional': True, | |
|             'type': int, | |
|             'format': baseFunc.toInt, | |
|             'filter': baseFunc.isPort, | |
|             'errMsg': 'Illegal port number' | |
|         }, | |
|         'method': { | |
|             'optional': False, | |
|             'default': 'auto', | |
|             'type': str, | |
|             'format': lambda s: baseFunc.toStrTidy(s).replace('_', '-'), | |
|             'filter': lambda method: method in vmessMethodList, | |
|             'errMsg': 'Unknown VMess method' | |
|         }, | |
|         'id': { | |
|             'optional': True, | |
|             'type': str, | |
|             'format': baseFunc.toStr | |
|         }, | |
|         'aid': { | |
|             'optional': False, | |
|             'default': 0, | |
|             'type': int, | |
|             'format': baseFunc.toInt, | |
|             'filter': lambda aid: aid in range(0, 65536), # 0 ~ 65535 | |
|             'errMsg': 'Illegal alter Id' | |
|         }, | |
|         'stream': { | |
|             'optional': False, | |
|             'default': { | |
|                 'type': 'tcp' | |
|             }, | |
|             'type': [ | |
|                 'tcpObject', | |
|                 'kcpObject', | |
|                 'wsObject', | |
|                 'h2Object', | |
|                 'quicObject', | |
|                 'grpcObject', | |
|             ] | |
|         } | |
|     } | |
| } | |
| 
 | |
| def vmessFilter(rawInfo: dict, isExtra: bool) -> tuple[bool, str or dict]: | |
|     """ | |
|     VMess节点合法性检查 | |
|  | |
|         不合法: | |
|             return False, {reason} | |
|  | |
|         合法: | |
|             return True, { | |
|                 'type': 'vmess', | |
|                 ... | |
|             } | |
|     """ | |
|     try: | |
|         if not isExtra: # 去除非必要参数 | |
|             vmessFilterRules['rootObject'].pop('remark') | |
|         for key, obj in V2ray.v2rayStreamRules.items(): # v2ray.stream -> vmess | |
|             vmessFilterRules[key] = obj | |
|         status, result = baseFunc.ruleFilter(rawInfo, vmessFilterRules, { | |
|             'type': 'vmess' | |
|         }) | |
|         if not status: # 节点格式错误 | |
|             return False, result | |
|         stream = result['stream'] | |
|         if stream['secure'] is not None and stream['secure']['sni'] == '': # 未指定SNI | |
|             if stream['type'] == 'tcp' and stream['obfs'] is not None: | |
|                 stream['secure']['sni'] = stream['obfs']['host'].split(',')[0] | |
|             elif stream['type'] == 'ws': | |
|                 stream['secure']['sni'] = stream['host'] | |
|             elif stream['type'] == 'h2': | |
|                 stream['secure']['sni'] = stream['host'].split(',')[0] | |
|         return True, result | |
|     except: | |
|         return False, 'Unknown error'
 | |
| 
 |