|
|
|
@ -55,12 +55,12 @@ func (d *DefaultDispatcher) Dispatch(ctx context.Context, destination net.Destin
|
|
|
|
|
ctx = proxy.ContextWithTarget(ctx, destination)
|
|
|
|
|
|
|
|
|
|
outbound := ray.NewRay(ctx)
|
|
|
|
|
sniferList := proxyman.ProtocoSniffersFromContext(ctx)
|
|
|
|
|
if destination.Address.Family().IsDomain() || len(sniferList) == 0 {
|
|
|
|
|
snifferList := proxyman.ProtocoSniffersFromContext(ctx)
|
|
|
|
|
if destination.Address.Family().IsDomain() || len(snifferList) == 0 {
|
|
|
|
|
go d.routedDispatch(ctx, outbound, destination)
|
|
|
|
|
} else {
|
|
|
|
|
go func() {
|
|
|
|
|
domain, err := snifer(ctx, sniferList, outbound)
|
|
|
|
|
domain, err := sniffer(ctx, snifferList, outbound)
|
|
|
|
|
if err == nil {
|
|
|
|
|
newError("sniffed domain: ", domain).WithContext(ctx).WriteToLog()
|
|
|
|
|
destination.Address = net.ParseAddress(domain)
|
|
|
|
@ -72,11 +72,11 @@ func (d *DefaultDispatcher) Dispatch(ctx context.Context, destination net.Destin
|
|
|
|
|
return outbound, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func snifer(ctx context.Context, sniferList []proxyman.KnownProtocols, outbound ray.OutboundRay) (string, error) {
|
|
|
|
|
func sniffer(ctx context.Context, snifferList []proxyman.KnownProtocols, outbound ray.OutboundRay) (string, error) {
|
|
|
|
|
payload := buf.New()
|
|
|
|
|
defer payload.Release()
|
|
|
|
|
|
|
|
|
|
sniffer := NewSniffer(sniferList)
|
|
|
|
|
sniffer := NewSniffer(snifferList)
|
|
|
|
|
totalAttempt := 0
|
|
|
|
|
for {
|
|
|
|
|
select {
|
|
|
|
|