-
Notifications
You must be signed in to change notification settings - Fork 126
/
socketfingerScan.go
79 lines (71 loc) · 1.88 KB
/
socketfingerScan.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package plugin
import (
"github.com/chainreactors/fingers/common"
. "github.com/chainreactors/gogo/v2/pkg"
"github.com/chainreactors/logs"
)
var (
TCP = "tcp"
UDP = "udp"
)
func socketFingerScan(result *Result) {
// 如果是http协议,则判断cms,如果是tcp则匹配规则库.暂时不考虑udp
if Proxy != nil {
// 如果存在http代理,跳过tcp指纹识别
return
}
var closureResp, finalResp []byte
callback := func(f *common.Framework, v *common.Vuln) {
if f != nil {
result.Frameworks.Add(f)
finalResp = closureResp
}
if v != nil {
result.Vulns.Add(v)
}
}
tcpsender := func(sendData []byte) ([]byte, bool) {
target := result.GetTarget()
logs.Log.Debugf("active detect: %s, data: %q", target, sendData)
conn, err := NewSocket(TCP, target, RunOpt.Delay)
if err != nil {
logs.Log.Debugf("active detect %s error, %s", target, err.Error())
return nil, false
}
defer conn.Close()
data, err := conn.QuickRequest(sendData, 1024)
if err != nil {
return nil, false
}
closureResp = data
return data, true
}
//udpsender := func(sendData []byte) ([]byte, bool) {
// target := result.GetTarget()
// logs.Log.Debugf("active detect: , data: ", target, sendData)
// conn, err := NewSocket(UDP, target, RunOpt.Delay)
// if err != nil {
// logs.Log.Debugf("active detect %s error, %s", target, err.Error())
// return nil, false
// }
// defer conn.Close()
//
// data, err := conn.QuickRequest(sendData, 1024)
// if err != nil {
// return nil, false
// }
//
// return data, true
//}
if RunOpt.VersionLevel > 0 {
FingerEngine.SocketMatch(result.Content, result.Port, RunOpt.VersionLevel, tcpsender, callback)
} else {
if group, ok := FingerEngine.SocketGroupped[result.Port]; ok {
group.Match(result.ContentMap(), 1, tcpsender, callback, true)
}
}
if finalResp != nil {
CollectSocketResponse(result, finalResp)
}
return
}