@@ -19,7 +19,7 @@ import (
19
19
20
20
func DetectFastjson (url string ) (bool ,string ){
21
21
fmt .Println ("[" + url + "] :" + "[+] 正在进行报错识别" )
22
- jsonType , _ := ErrDetectVersion (url )
22
+ jsonType := ErrDetectVersion (url , Utils . FS_ERR_DETECT )
23
23
if jsonType == "jackson" {
24
24
return false ,Utils .NOT_FS
25
25
}
@@ -64,26 +64,32 @@ func DetectVersion(url string ) Utils.Result {
64
64
}
65
65
fmt .Println ("[" + result .Url + "] :" + "[+] 正在进行版本探测" )
66
66
payloads , session = Utils .DNS_DETECT_FACTORY ()
67
- if DnslogDetect (url , payloads .Dns_48 , session ) == "48" {
67
+ version := DnslogDetect (url , payloads .Dns_48 , session )
68
+ if version == "48" {
68
69
result .Version = Utils .FJ_UNDER_48
69
70
return result
70
71
}
71
- if DnslogDetect (url , payloads .Dns_68 , session ) == "68" {
72
+ version = DnslogDetect (url , payloads .Dns_68 , session )
73
+ if version == "68" {
72
74
if result .AutoType {
73
75
result .Version = Utils .FJ_BEYOND_48
74
76
return result
75
77
}
76
78
result .Version = Utils .FJ_BETWEEN_48_68
77
79
return result
78
80
}
79
- if DnslogDetect (url , payloads .Dns_80 , session ) == "80" {
81
+ version = DnslogDetect (url , payloads .Dns_80 , session )
82
+ if version == "80" {
80
83
result .Version = Utils .FJ_BETWEEN_69_80
81
84
return result
82
85
}
83
- if DnslogDetect (url , payloads .Dns_80 , session ) == "83" {
86
+ version = DnslogDetect (url , payloads .Dns_80 , session )
87
+ if version == "83" {
84
88
result .Version = Utils .FS_BEYOND_80
85
89
return result
86
90
}
91
+ result .Version = version
92
+ return result
87
93
}else {
88
94
fmt .Println ("客户端与dnslog平台网络不可达" )
89
95
//内网测试场景 施工中
@@ -171,7 +177,17 @@ func DnslogDetect(target string,payload string,session string) string{
171
177
return Utils .NETWORK_NOT_ACCESS
172
178
}
173
179
}
174
- defer httpRsp .Body .Close ()
180
+ //defer httpRsp.Body.Close()
181
+ body , err := ioutil .ReadAll (httpRsp .Body )
182
+ if err != nil {
183
+ err .Error ()
184
+ }
185
+ reg := regexp .MustCompile (`fastjson-version\s\d.\d.[0-9]+` )
186
+ var version string
187
+ version = reg .FindString (string (body ))
188
+ if version != "" {
189
+ return version [17 :]
190
+ }
175
191
176
192
//fmt.Println(session)
177
193
time .Sleep (3 * time .Second ) // 等3秒钟,防止由于网络原因误报
@@ -183,9 +199,9 @@ func DnslogDetect(target string,payload string,session string) string{
183
199
*** 报错探测
184
200
**/
185
201
186
- func ErrDetectVersion (target string ) ( string , bool ) {
202
+ func ErrDetectVersion (target string , payload string ) string {
187
203
var version string
188
- reqBody := strings .NewReader (Utils . FS_ERR_DETECT )
204
+ reqBody := strings .NewReader (payload )
189
205
httpReq , err := http .NewRequest ("POST" , target , reqBody )
190
206
if err != nil {
191
207
err .Error ()
@@ -196,7 +212,7 @@ func ErrDetectVersion(target string) (string,bool){
196
212
httpRsp = Utils .NetWorkErrHandle (http .DefaultClient ,httpReq ,err )
197
213
if httpRsp == nil {
198
214
fmt .Println ("与" + target + "网络不可达,请检查网络" )
199
- return Utils .NETWORK_NOT_ACCESS , false
215
+ return Utils .NETWORK_NOT_ACCESS
200
216
}
201
217
}
202
218
defer httpRsp .Body .Close ()
@@ -210,9 +226,9 @@ func ErrDetectVersion(target string) (string,bool){
210
226
if version == "" {
211
227
reg = regexp .MustCompile (`jackson` )
212
228
version = reg .FindString (string (body ))
213
- return version , false
229
+ return version
214
230
}else {
215
- return version [17 :], true
231
+ return version [17 :]
216
232
}
217
233
}
218
234
0 commit comments