diff options
author | We-unite <3205135446@qq.com> | 2024-08-09 13:56:37 +0800 |
---|---|---|
committer | We-unite <3205135446@qq.com> | 2024-08-12 14:16:51 +0800 |
commit | 3e49a044d22635157916651f0acb5a062397b34b (patch) | |
tree | 254cd9a2605fa003f4579e7c5510e6e2aea19375 /filter | |
parent | ea32e017e579f168d87732893335c38d539ac2f1 (diff) | |
download | godo-3e49a044d22635157916651f0acb5a062397b34b.tar.gz godo-3e49a044d22635157916651f0acb5a062397b34b.zip |
Add db structure, fix filePath, start filtering
This commit I made several changes:
- Use structure instead of simple bson.M(interface{}). bson.M has
some shortcomings: 1) It makes the database in chaos and hard to
read, but this's not important; 2) Some entrys may has more or
less content than others, which makes it hard to decode and filt.
So I design new data structure to encode and decode. Hopes that
there's no bugs.
- Fix the way to calculate file path. The original method is to add
all the PATH entries together, that's totally wrong! PATH entry
has several types, as it shows in "objtype". I can't find it in
the kernel src code, so what i know is just "PARENT" means the dir
the file is in, while the filename itself has the path, so we
whould ignore all "PARENT"s. When the src code is found, we should
check it again.
- Fix bugs in updating. The update function of mongodb is set to
required to has a '$' such as 'set'/'push', so when we update a
whole doc, we should use replace but not update function. And,
we should never ignore the error infomation it gives us.
Hope that there's no more bugs for this Big Change.
Now its' time to write filter as well as viewer. Best wishes with
NO BUGS!
Diffstat (limited to 'filter')
-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= | ||