Merge pull request #191 from tlslink/agent

优化 os 和 userAgent 判断顺序,预留 AnyLink Agent
This commit is contained in:
bjdgyc 2022-11-15 20:39:00 +08:00 committed by GitHub
commit 7a290fe807
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 32 deletions

View File

@ -41,17 +41,18 @@ var (
UserLogout: "用户登出", UserLogout: "用户登出",
}, },
OsOps: []string{ // 操作系统 OsOps: []string{ // 操作系统
0: "Windows", 0: "Unknown",
1: "macOS", 1: "Windows",
2: "Linux", 2: "macOS",
3: "Android", 3: "Linux",
4: "iOS", 4: "Android",
5: "Unknown", 5: "iOS",
}, },
ClientOps: []string{ // 客户端 ClientOps: []string{ // 客户端
0: "AnyConnect", 0: "Unknown",
1: "OpenConnect", 1: "AnyConnect",
2: "Unknown", 2: "OpenConnect",
3: "AnyLink",
}, },
InfoOps: []string{ // 信息 InfoOps: []string{ // 信息
UserLogoutLose: "用户掉线", UserLogoutLose: "用户掉线",
@ -119,27 +120,29 @@ func (ua *UserActLogProcess) GetInfoOpsById(id uint8) string {
func (ua *UserActLogProcess) ParseUserAgent(userAgent string) (os_idx, client_idx uint8, ver string) { func (ua *UserActLogProcess) ParseUserAgent(userAgent string) (os_idx, client_idx uint8, ver string) {
// Unknown // Unknown
if len(userAgent) == 0 { if len(userAgent) == 0 {
return 5, 2, "" return 0, 0, ""
} }
// OS // OS
os_idx = 5 os_idx = 0
if strings.Contains(userAgent, "windows") { if strings.Contains(userAgent, "windows") {
os_idx = 0
} else if strings.Contains(userAgent, "mac os") || strings.Contains(userAgent, "darwin_i386") {
os_idx = 1 os_idx = 1
} else if strings.Contains(userAgent, "darwin_arm") || strings.Contains(userAgent, "apple") { } else if strings.Contains(userAgent, "mac os") || strings.Contains(userAgent, "darwin_i386") {
os_idx = 4
} else if strings.Contains(userAgent, "android") {
os_idx = 3
} else if strings.Contains(userAgent, "linux") {
os_idx = 2 os_idx = 2
} else if strings.Contains(userAgent, "darwin_arm") || strings.Contains(userAgent, "apple") {
os_idx = 5
} else if strings.Contains(userAgent, "android") {
os_idx = 4
} else if strings.Contains(userAgent, "linux") {
os_idx = 3
} }
// Client // Client
client_idx = 2 client_idx = 0
if strings.Contains(userAgent, "anyconnect") { if strings.Contains(userAgent, "anyconnect") {
client_idx = 0
} else if strings.Contains(userAgent, "openconnect") {
client_idx = 1 client_idx = 1
} else if strings.Contains(userAgent, "openconnect") {
client_idx = 2
} else if strings.Contains(userAgent, "anylink") {
client_idx = 3
} }
// Verion // Verion
uaSlice := strings.Split(userAgent, " ") uaSlice := strings.Split(userAgent, " ")

View File

@ -19,47 +19,57 @@ func TestParseUserAgent(t *testing.T) {
{ {
name: "mac os 1", name: "mac os 1",
args: args{userAgent: "cisco anyconnect vpn agent for mac os x 4.10.05085"}, args: args{userAgent: "cisco anyconnect vpn agent for mac os x 4.10.05085"},
want: res{os_idx: 1, client_idx: 0, ver: "4.10.05085"}, want: res{os_idx: 2, client_idx: 1, ver: "4.10.05085"},
}, },
{ {
name: "mac os 2", name: "mac os 2",
args: args{userAgent: "anyconnect darwin_i386 4.10.05085"}, args: args{userAgent: "anyconnect darwin_i386 4.10.05085"},
want: res{os_idx: 1, client_idx: 0, ver: "4.10.05085"}, want: res{os_idx: 2, client_idx: 1, ver: "4.10.05085"},
}, },
{ {
name: "windows", name: "windows",
args: args{userAgent: "cisco anyconnect vpn agent for windows 4.8.02042"}, args: args{userAgent: "cisco anyconnect vpn agent for windows 4.8.02042"},
want: res{os_idx: 0, client_idx: 0, ver: "4.8.02042"}, want: res{os_idx: 1, client_idx: 1, ver: "4.8.02042"},
}, },
{ {
name: "iPad", name: "iPad",
args: args{userAgent: "anyconnect applesslvpn_darwin_arm (ipad) 4.10.04060"}, args: args{userAgent: "anyconnect applesslvpn_darwin_arm (ipad) 4.10.04060"},
want: res{os_idx: 4, client_idx: 0, ver: "4.10.04060"}, want: res{os_idx: 5, client_idx: 1, ver: "4.10.04060"},
}, },
{ {
name: "iPhone", name: "iPhone",
args: args{userAgent: "cisco anyconnect vpn agent for apple iphone 4.10.04060"}, args: args{userAgent: "cisco anyconnect vpn agent for apple iphone 4.10.04060"},
want: res{os_idx: 4, client_idx: 0, ver: "4.10.04060"}, want: res{os_idx: 5, client_idx: 1, ver: "4.10.04060"},
}, },
{ {
name: "android", name: "android",
args: args{userAgent: "anyconnect android 4.10.05096"}, args: args{userAgent: "anyconnect android 4.10.05096"},
want: res{os_idx: 3, client_idx: 0, ver: "4.10.05096"}, want: res{os_idx: 4, client_idx: 1, ver: "4.10.05096"},
}, },
{ {
name: "linux", name: "linux",
args: args{userAgent: "cisco anyconnect vpn agent for linux v7.08"}, args: args{userAgent: "cisco anyconnect vpn agent for linux v7.08"},
want: res{os_idx: 2, client_idx: 0, ver: "7.08"}, want: res{os_idx: 3, client_idx: 1, ver: "7.08"},
}, },
{ {
name: "openconnect", name: "openconnect",
args: args{userAgent: "openconnect-gui 1.5.3 v7.08"}, args: args{userAgent: "openconnect-gui 1.5.3 v7.08"},
want: res{os_idx: 5, client_idx: 1, ver: "7.08"}, want: res{os_idx: 0, client_idx: 2, ver: "7.08"},
}, },
{ {
name: "unknown", name: "unknown",
args: args{userAgent: "unknown 1.4.3 aabcd"}, args: args{userAgent: "unknown 1.4.3 aabcd"},
want: res{os_idx: 5, client_idx: 2, ver: ""}, want: res{os_idx: 0, client_idx: 0, ver: ""},
},
{
name: "unknown 2",
args: args{userAgent: ""},
want: res{os_idx: 0, client_idx: 0, ver: ""},
},
{
name: "anylink",
args: args{userAgent: "anylink vpn agent for linux v1.0"},
want: res{os_idx: 3, client_idx: 3, ver: "1.0"},
}, },
} }
for _, tt := range tests { for _, tt := range tests {

View File

@ -1057,5 +1057,5 @@ sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
xorm.io/builder v0.3.9 h1:Sd65/LdWyO7LR8+Cbd+e7mm3sK/7U9k0jS3999IDHMc= xorm.io/builder v0.3.9 h1:Sd65/LdWyO7LR8+Cbd+e7mm3sK/7U9k0jS3999IDHMc=
xorm.io/builder v0.3.9/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= xorm.io/builder v0.3.9/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=
xorm.io/xorm v1.2.2 h1:FFBOEvJ++8fYBA9cywf2sxDVmFktl1SpJzTAG1ab06Y= xorm.io/xorm v1.2.5 h1:tqN7OhN8P9xi52qBb76I8m5maAJMz/SSbgK2RGPCPbo=
xorm.io/xorm v1.2.2/go.mod h1:fTG8tSjk6O1BYxwuohZUK+S1glnRycsCF05L1qQyEU0= xorm.io/xorm v1.2.5/go.mod h1:fTG8tSjk6O1BYxwuohZUK+S1glnRycsCF05L1qQyEU0=