diff options
Diffstat (limited to '')
-rw-r--r-- | filter/filter.go | 118 | ||||
-rw-r--r-- | filter/go.mod | 18 | ||||
-rw-r--r-- | filter/go.sum | 50 |
3 files changed, 186 insertions, 0 deletions
diff --git a/filter/filter.go b/filter/filter.go new file mode 100644 index 0000000..c83fb13 --- /dev/null +++ b/filter/filter.go | |||
@@ -0,0 +1,118 @@ | |||
1 | package main | ||
2 | |||
3 | import ( | ||
4 | "context" | ||
5 | "fmt" | ||
6 | "log" | ||
7 | "os" | ||
8 | "time" | ||
9 | |||
10 | "go.mongodb.org/mongo-driver/bson" | ||
11 | "go.mongodb.org/mongo-driver/mongo" | ||
12 | "go.mongodb.org/mongo-driver/mongo/options" | ||
13 | "go.mongodb.org/mongo-driver/mongo/readpref" | ||
14 | ) | ||
15 | |||
16 | type Exec struct { | ||
17 | timestamp time.Time `bson:"timestamp"` | ||
18 | execArgs []string `bson:"execArgs"` | ||
19 | } | ||
20 | |||
21 | type Process struct { | ||
22 | timestamp time.Time `bson:"start_timestamp"` | ||
23 | ppid int `bson:"ppid"` | ||
24 | parentTgid int `bson:"parentTgid"` | ||
25 | pid int `bson:"pid"` | ||
26 | tgid int `bson:"tgid"` | ||
27 | args []string `bson:"args"` | ||
28 | comm string `bson:"comm"` | ||
29 | cwd string `bson:"cwd"` | ||
30 | execve []Exec `bson:"execve"` | ||
31 | exit_code int `bson:"exit_code"` | ||
32 | exit_signal int `bson:"exit_signal"` | ||
33 | exit_timestamp time.Time `bson:"exit_timestamp"` | ||
34 | } | ||
35 | |||
36 | func (p Process) String() string { | ||
37 | var res string | ||
38 | res = "" | ||
39 | res += fmt.Sprintf("timestamp\t%v\n", p.timestamp) | ||
40 | res += fmt.Sprintf("ppid\t%d\nparentTgid\t%d\n", p.ppid, p.parentTgid) | ||
41 | res += fmt.Sprintf("pid\t%d\ntgid\t%d\nargs: ", p.pid, p.tgid) | ||
42 | for i := 0; i < len(p.args); i++ { | ||
43 | res += fmt.Sprintf("%s ", p.args[i]) | ||
44 | } | ||
45 | res += fmt.Sprintf("\ncomm\t%s\ncwd\t%s\n", p.comm, p.cwd) | ||
46 | return res | ||
47 | } | ||
48 | |||
49 | // type Process struct { | ||
50 | // StartTimestamp time.Time `bson:"start_timestamp"` | ||
51 | // Ppid *int `bson:"ppid"` | ||
52 | // ParentTgid *int `bson:"parentTgid"` | ||
53 | // Pid int `bson:"pid"` | ||
54 | // Tgid int `bson:"tgid"` | ||
55 | // Args []string `bson:"args"` | ||
56 | // Comm *string `bson:"comm"` | ||
57 | // Cwd *string `bson:"cwd"` | ||
58 | // Execve []Exec `bson:"execve"` | ||
59 | // ExitCode *int `bson:"exit_code"` | ||
60 | // ExitSignal *int `bson:"exit_signal"` | ||
61 | // ExitTimestamp *time.Time `bson:"exit_timestamp"` | ||
62 | // } | ||
63 | |||
64 | // func (p Process) String() string { | ||
65 | // var res string | ||
66 | // res = "" | ||
67 | // res += fmt.Sprintf("timestamp\t%v\n", p.StartTimestamp) | ||
68 | // if p.Ppid != nil && p.ParentTgid != nil { | ||
69 | // res += fmt.Sprintf("ppid\t%d\nparentTgid\t%d\n", *(p.Ppid), *(p.ParentTgid)) | ||
70 | // } | ||
71 | // res += fmt.Sprintf("pid\t%d\ntgid\t%d\nargs: ", p.Pid, p.Tgid) | ||
72 | // for i := 0; i < len(p.Args); i++ { | ||
73 | // res += fmt.Sprintf("%s ", p.Args[i]) | ||
74 | // } | ||
75 | // if p.Comm != nil && p.Cwd != nil { | ||
76 | // res += fmt.Sprintf("\ncomm\t%s\ncwd\t%s\n", *(p.Comm), *(p.Cwd)) | ||
77 | // } | ||
78 | // return res | ||
79 | // } | ||
80 | |||
81 | func main() { | ||
82 | client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("mongodb://localhost:27017")) | ||
83 | if err != nil { | ||
84 | fmt.Fprintf(os.Stderr, "Err connecting mongodb: %v\n", err) | ||
85 | } | ||
86 | defer client.Disconnect(context.TODO()) | ||
87 | |||
88 | // 检查连接 | ||
89 | err = client.Ping(context.TODO(), readpref.Primary()) | ||
90 | if err != nil { | ||
91 | log.Fatal(err) | ||
92 | } | ||
93 | |||
94 | pidCol := client.Database("test").Collection("pids") | ||
95 | cur, err := pidCol.Find(context.TODO(), bson.M{}) // 查询所有文档 | ||
96 | if err != nil { | ||
97 | log.Fatal(err) | ||
98 | } | ||
99 | defer cur.Close(context.TODO()) // 确保游标被关闭 | ||
100 | |||
101 | var res []Process | ||
102 | for cur.Next(context.TODO()) { | ||
103 | var tmp Process | ||
104 | // 解码到Process结构体 | ||
105 | if err := cur.Decode(&tmp); err != nil { | ||
106 | log.Fatal(err) | ||
107 | } | ||
108 | res = append(res, tmp) | ||
109 | } | ||
110 | |||
111 | if err := cur.Err(); err != nil { | ||
112 | log.Fatal(err) | ||
113 | } | ||
114 | |||
115 | for i := 0; i < len(res); i++ { | ||
116 | fmt.Printf("------\n%v\n", res[i]) | ||
117 | } | ||
118 | } | ||
diff --git a/filter/go.mod b/filter/go.mod new file mode 100644 index 0000000..4e9c553 --- /dev/null +++ b/filter/go.mod | |||
@@ -0,0 +1,18 @@ | |||
1 | module filter | ||
2 | |||
3 | go 1.21.5 | ||
4 | |||
5 | require go.mongodb.org/mongo-driver v1.16.1 | ||
6 | |||
7 | require ( | ||
8 | github.com/golang/snappy v0.0.4 // indirect | ||
9 | github.com/klauspost/compress v1.13.6 // indirect | ||
10 | github.com/montanaflynn/stats v0.7.1 // indirect | ||
11 | github.com/xdg-go/pbkdf2 v1.0.0 // indirect | ||
12 | github.com/xdg-go/scram v1.1.2 // indirect | ||
13 | github.com/xdg-go/stringprep v1.0.4 // indirect | ||
14 | github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect | ||
15 | golang.org/x/crypto v0.22.0 // indirect | ||
16 | golang.org/x/sync v0.7.0 // indirect | ||
17 | golang.org/x/text v0.14.0 // indirect | ||
18 | ) | ||
diff --git a/filter/go.sum b/filter/go.sum new file mode 100644 index 0000000..3bc8cc9 --- /dev/null +++ b/filter/go.sum | |||
@@ -0,0 +1,50 @@ | |||
1 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||
2 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
3 | github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= | ||
4 | github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||
5 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | ||
6 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||
7 | github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= | ||
8 | github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= | ||
9 | github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= | ||
10 | github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= | ||
11 | github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= | ||
12 | github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= | ||
13 | github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= | ||
14 | github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= | ||
15 | github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= | ||
16 | github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= | ||
17 | github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= | ||
18 | github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= | ||
19 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= | ||
20 | go.mongodb.org/mongo-driver v1.16.1 h1:rIVLL3q0IHM39dvE+z2ulZLp9ENZKThVfuvN/IiN4l8= | ||
21 | go.mongodb.org/mongo-driver v1.16.1/go.mod h1:oB6AhJQvFQL4LEHyXi6aJzQJtBiTQHiAd83l0GdFaiw= | ||
22 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||
23 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | ||
24 | golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= | ||
25 | golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= | ||
26 | golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= | ||
27 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||
28 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||
29 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= | ||
30 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||
31 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||
32 | golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= | ||
33 | golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= | ||
34 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||
35 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
36 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
37 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
38 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
39 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= | ||
40 | golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= | ||
41 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||
42 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||
43 | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= | ||
44 | golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= | ||
45 | golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= | ||
46 | golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= | ||
47 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||
48 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||
49 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= | ||
50 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||