fix User check error

This commit is contained in:
yuzuki999 2022-06-09 21:00:46 +08:00
parent 31446726a4
commit 77d0cc89bb
2 changed files with 18 additions and 13 deletions

View File

@ -70,17 +70,15 @@ func (c *Client) GetUserList() (UserList *[]UserInfo, err error) {
return nil, fmt.Errorf("unmarshal userlist error: %s", err) return nil, fmt.Errorf("unmarshal userlist error: %s", err)
} }
l := len(userList.Data) l := len(userList.Data)
checkNum := userList.Data[l-1].UID + checkNum := userList.Data[l-1].UID + userList.Data[l/2-1].UID +
userList.Data[l/2-1].UID + userList.Data[l/3-1].UID + userList.Data[l/4-1].UID +
userList.Data[0].UID userList.Data[l/5-1].UID + userList.Data[0].UID
if c.UserListCheckNum != 0 { if c.UserListCheckNum != 0 {
if c.UserListCheckNum == checkNum { if c.UserListCheckNum == checkNum {
return nil, nil return nil, nil
} }
} }
c.UserListCheckNum = userList.Data[l-1].UID + c.UserListCheckNum = checkNum
userList.Data[l/2-1].UID +
userList.Data[0].UID
return &userList.Data, nil return &userList.Data, nil
} }

View File

@ -320,7 +320,7 @@ func (d *DefaultDispatcher) Dispatch(ctx context.Context, destination net.Destin
} }
switch { switch {
case !sniffingRequest.Enabled: case !sniffingRequest.Enabled:
go d.routedDispatch(ctx, outbound, destination) go d.routedDispatch(ctx, outbound, destination, "")
case destination.Network != net.Network_TCP: case destination.Network != net.Network_TCP:
// Only metadata sniff will be used for non tcp connection // Only metadata sniff will be used for non tcp connection
result, err := sniffer(ctx, nil, true) result, err := sniffer(ctx, nil, true)
@ -337,7 +337,7 @@ func (d *DefaultDispatcher) Dispatch(ctx context.Context, destination net.Destin
} }
} }
} }
go d.routedDispatch(ctx, outbound, destination) go d.routedDispatch(ctx, outbound, destination, result.Protocol())
default: default:
go func() { go func() {
cReader := &cachedReader{ cReader := &cachedReader{
@ -358,7 +358,7 @@ func (d *DefaultDispatcher) Dispatch(ctx context.Context, destination net.Destin
ob.Target = destination ob.Target = destination
} }
} }
d.routedDispatch(ctx, outbound, destination) d.routedDispatch(ctx, outbound, destination, result.Protocol())
}() }()
} }
return inbound, nil return inbound, nil
@ -381,7 +381,7 @@ func (d *DefaultDispatcher) DispatchLink(ctx context.Context, destination net.De
sniffingRequest := content.SniffingRequest sniffingRequest := content.SniffingRequest
switch { switch {
case !sniffingRequest.Enabled: case !sniffingRequest.Enabled:
go d.routedDispatch(ctx, outbound, destination) go d.routedDispatch(ctx, outbound, destination, "")
case destination.Network != net.Network_TCP: case destination.Network != net.Network_TCP:
// Only metadata sniff will be used for non tcp connection // Only metadata sniff will be used for non tcp connection
result, err := sniffer(ctx, nil, true) result, err := sniffer(ctx, nil, true)
@ -398,7 +398,7 @@ func (d *DefaultDispatcher) DispatchLink(ctx context.Context, destination net.De
} }
} }
} }
go d.routedDispatch(ctx, outbound, destination) go d.routedDispatch(ctx, outbound, destination, result.Protocol())
default: default:
go func() { go func() {
cReader := &cachedReader{ cReader := &cachedReader{
@ -419,7 +419,7 @@ func (d *DefaultDispatcher) DispatchLink(ctx context.Context, destination net.De
ob.Target = destination ob.Target = destination
} }
} }
d.routedDispatch(ctx, outbound, destination) d.routedDispatch(ctx, outbound, destination, result.Protocol())
}() }()
} }
return nil return nil
@ -471,7 +471,7 @@ func sniffer(ctx context.Context, cReader *cachedReader, metadataOnly bool) (Sni
return contentResult, contentErr return contentResult, contentErr
} }
func (d *DefaultDispatcher) routedDispatch(ctx context.Context, link *transport.Link, destination net.Destination) { func (d *DefaultDispatcher) routedDispatch(ctx context.Context, link *transport.Link, destination net.Destination, protocol string) {
ob := session.OutboundFromContext(ctx) ob := session.OutboundFromContext(ctx)
if hosts, ok := d.dns.(dns.HostsLookup); ok && destination.Address.Family().IsDomain() { if hosts, ok := d.dns.(dns.HostsLookup); ok && destination.Address.Family().IsDomain() {
proxied := hosts.LookupHosts(ob.Target.String()) proxied := hosts.LookupHosts(ob.Target.String())
@ -491,6 +491,13 @@ func (d *DefaultDispatcher) routedDispatch(ctx context.Context, link *transport.
// Check if domain and protocol hit the rule // Check if domain and protocol hit the rule
sessionInbound := session.InboundFromContext(ctx) sessionInbound := session.InboundFromContext(ctx)
// Whether the inbound connection contains a user // Whether the inbound connection contains a user
/*if protocol == "bittorrent" {
newError(fmt.Sprintf("User %s access %s reject by protocol rule", sessionInbound.User.Email, destination.String())).AtError().WriteToLog()
newError("destination is reject by protocol rule")
common.Close(link.Writer)
common.Interrupt(link.Reader)
return
}*/
if sessionInbound.User != nil { if sessionInbound.User != nil {
if d.RuleManager.Detect(sessionInbound.Tag, destination.String(), sessionInbound.User.Email) { if d.RuleManager.Detect(sessionInbound.Tag, destination.String(), sessionInbound.User.Email) {
newError(fmt.Sprintf("User %s access %s reject by rule", sessionInbound.User.Email, destination.String())).AtError().WriteToLog() newError(fmt.Sprintf("User %s access %s reject by rule", sessionInbound.User.Email, destination.String())).AtError().WriteToLog()