mirror of
				https://github.com/v2fly/v2ray-core.git
				synced 2025-10-31 17:59:15 +00:00 
			
		
		
		
	fake dns + others sniffer
This commit is contained in:
		
							parent
							
								
									7e82418a40
								
							
						
					
					
						commit
						3b4920a1e6
					
				| @ -34,6 +34,15 @@ func newFakeDNSSniffer(ctx context.Context) (protocolSnifferWithMetadata, error) | ||||
| 				return &fakeDNSSniffResult{domainName: domainFromFakeDNS}, nil | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if ipAddressInRangeValueI := ctx.Value(ipAddressInRange); ipAddressInRangeValueI != nil { | ||||
| 			ipAddressInRangeValue := ipAddressInRangeValueI.(*ipAddressInRangeOpt) | ||||
| 			if fkr0, ok := fakeDNSEngine.(dns.FakeDNSEngineRev0); ok { | ||||
| 				inPool := fkr0.IsIPInIPPool(Target.Address) | ||||
| 				ipAddressInRangeValue.addressInRange = &inPool | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		return nil, common.ErrNoClue | ||||
| 	}, metadataSniffer: true}, nil | ||||
| } | ||||
| @ -49,3 +58,55 @@ func (fakeDNSSniffResult) Protocol() string { | ||||
| func (f fakeDNSSniffResult) Domain() string { | ||||
| 	return f.domainName | ||||
| } | ||||
| 
 | ||||
| type fakeDnsExtraOpts int | ||||
| 
 | ||||
| const ipAddressInRange fakeDnsExtraOpts = 1 | ||||
| 
 | ||||
| type ipAddressInRangeOpt struct { | ||||
| 	addressInRange *bool | ||||
| } | ||||
| 
 | ||||
| type DNSThenOthersSniffResult struct { | ||||
| 	domainName string | ||||
| } | ||||
| 
 | ||||
| func (DNSThenOthersSniffResult) Protocol() string { | ||||
| 	return "fakedns+others" | ||||
| } | ||||
| 
 | ||||
| func (f DNSThenOthersSniffResult) Domain() string { | ||||
| 	return f.domainName | ||||
| } | ||||
| 
 | ||||
| func newFakeDNSThenOthers(ctx context.Context, fakeDNSSniffer protocolSnifferWithMetadata, others []protocolSnifferWithMetadata) (protocolSnifferWithMetadata, error) { | ||||
| 	return protocolSnifferWithMetadata{ | ||||
| 		protocolSniffer: func(ctx context.Context, bytes []byte) (SniffResult, error) { | ||||
| 			ipAddressInRangeValue := &ipAddressInRangeOpt{} | ||||
| 			ctx = context.WithValue(ctx, ipAddressInRange, ipAddressInRangeValue) | ||||
| 			result, err := fakeDNSSniffer.protocolSniffer(ctx, bytes) | ||||
| 			if err == nil { | ||||
| 				return result, nil | ||||
| 			} | ||||
| 			if ipAddressInRangeValue.addressInRange != nil { | ||||
| 				if *ipAddressInRangeValue.addressInRange == true { | ||||
| 					for _, v := range others { | ||||
| 						if v.metadataSniffer || bytes != nil { | ||||
| 							if result, err := v.protocolSniffer(ctx, bytes); err == nil { | ||||
| 								return DNSThenOthersSniffResult{result.Domain()}, nil | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 					return nil, common.ErrNoClue | ||||
| 				} else { | ||||
| 					newError("ip address not in fake dns range, return as is").AtDebug().WriteToLog() | ||||
| 					return nil, common.ErrNoClue | ||||
| 				} | ||||
| 			} else { | ||||
| 				newError("fake dns sniffer did not set address in range option, assume false.").AtWarning().WriteToLog() | ||||
| 				return nil, common.ErrNoClue | ||||
| 			} | ||||
| 		}, | ||||
| 		metadataSniffer: true, | ||||
| 	}, nil | ||||
| } | ||||
|  | ||||
| @ -39,7 +39,12 @@ func NewSniffer(ctx context.Context) *Sniffer { | ||||
| 		}, | ||||
| 	} | ||||
| 	if sniffer, err := newFakeDNSSniffer(ctx); err == nil { | ||||
| 		others := ret.sniffer | ||||
| 		ret.sniffer = append(ret.sniffer, sniffer) | ||||
| 		fakeDNSThenOthers, err := newFakeDNSThenOthers(ctx, sniffer, others) | ||||
| 		if err != nil { | ||||
| 			ret.sniffer = append(ret.sniffer, fakeDNSThenOthers) | ||||
| 		} | ||||
| 	} | ||||
| 	return ret | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Shelikhoo
						Shelikhoo