mirror of
				https://github.com/v2fly/v2ray-core.git
				synced 2025-10-30 17:29:23 +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 | 				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 | 		return nil, common.ErrNoClue | ||||||
| 	}, metadataSniffer: true}, nil | 	}, metadataSniffer: true}, nil | ||||||
| } | } | ||||||
| @ -49,3 +58,55 @@ func (fakeDNSSniffResult) Protocol() string { | |||||||
| func (f fakeDNSSniffResult) Domain() string { | func (f fakeDNSSniffResult) Domain() string { | ||||||
| 	return f.domainName | 	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 { | 	if sniffer, err := newFakeDNSSniffer(ctx); err == nil { | ||||||
|  | 		others := ret.sniffer | ||||||
| 		ret.sniffer = append(ret.sniffer, sniffer) | 		ret.sniffer = append(ret.sniffer, sniffer) | ||||||
|  | 		fakeDNSThenOthers, err := newFakeDNSThenOthers(ctx, sniffer, others) | ||||||
|  | 		if err != nil { | ||||||
|  | 			ret.sniffer = append(ret.sniffer, fakeDNSThenOthers) | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	return ret | 	return ret | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Shelikhoo
						Shelikhoo