4
4
-- Project Site: pgmodeler.com.br
5
5
-- Model Author: ---
6
6
7
+ SET check_function_bodies = false;
8
+ -- ddl-end --
9
+
7
10
8
11
-- Database creation must be done outside an multicommand file.
9
12
-- These commands were put in this file only for convenience.
10
- -- -- object: new_database | type: DATABASE --
11
- -- -- DROP DATABASE IF EXISTS new_database ;
12
- -- CREATE DATABASE new_database
13
+ -- -- object: passive_ssl | type: DATABASE --
14
+ -- -- DROP DATABASE IF EXISTS passive_ssl ;
15
+ -- CREATE DATABASE passive_ssl
13
16
-- ;
14
17
-- -- ddl-end --
15
18
--
@@ -64,7 +67,7 @@ CREATE TABLE public.certificate(
64
67
is_valid_chain bool NOT NULL DEFAULT false,
65
68
" notBefore" time ,
66
69
" notAfter" time ,
67
- " isSS " bool NOT NULL DEFAULT false,
70
+ " is_SS " bool NOT NULL DEFAULT false,
68
71
CONSTRAINT certificate_pk PRIMARY KEY (hash)
69
72
70
73
);
@@ -104,7 +107,7 @@ CREATE TABLE public."sessionRecord"(
104
107
src_ip inet NOT NULL ,
105
108
dst_port int4 NOT NULL ,
106
109
src_port int4 NOT NULL ,
107
- hash_ja3 bytea ,
110
+ hash_ja3 bytea NOT NULL ,
108
111
" timestamp" time (0 ) with time zone ,
109
112
CONSTRAINT " sessionRecord_pk" PRIMARY KEY (id)
110
113
@@ -130,7 +133,7 @@ ALTER TABLE public.ja3 OWNER TO postgres;
130
133
-- ALTER TABLE public."sessionRecord" DROP CONSTRAINT IF EXISTS ja3_fk CASCADE;
131
134
ALTER TABLE public." sessionRecord" ADD CONSTRAINT ja3_fk FOREIGN KEY (hash_ja3)
132
135
REFERENCES public .ja3 (hash) MATCH FULL
133
- ON DELETE SET NULL ON UPDATE CASCADE;
136
+ ON DELETE RESTRICT ON UPDATE CASCADE;
134
137
-- ddl-end --
135
138
136
139
-- object: public."many_sessionRecord_has_many_certificate" | type: TABLE --
@@ -162,8 +165,8 @@ ON DELETE RESTRICT ON UPDATE CASCADE;
162
165
CREATE TABLE public .fuzzy_hash(
163
166
id bigserial NOT NULL ,
164
167
type text NOT NULL ,
165
- value public . hstore NOT NULL ,
166
- hash_ja3 bytea ,
168
+ value text NOT NULL ,
169
+ " id_sessionRecord " bigint ,
167
170
CONSTRAINT fuzzy_hash_pk PRIMARY KEY (id)
168
171
169
172
);
@@ -258,11 +261,62 @@ CREATE INDEX path_index ON public.certificate
258
261
WITH (BUFFERING = ON );
259
262
-- ddl-end --
260
263
261
- -- object: ja3_fk | type: CONSTRAINT --
262
- -- ALTER TABLE public.fuzzy_hash DROP CONSTRAINT IF EXISTS ja3_fk CASCADE;
263
- ALTER TABLE public .fuzzy_hash ADD CONSTRAINT ja3_fk FOREIGN KEY (hash_ja3 )
264
- REFERENCES public .ja3 (hash ) MATCH FULL
264
+ -- object: "sessionRecord_fk" | type: CONSTRAINT --
265
+ -- ALTER TABLE public.fuzzy_hash DROP CONSTRAINT IF EXISTS "sessionRecord_fk" CASCADE;
266
+ ALTER TABLE public .fuzzy_hash ADD CONSTRAINT " sessionRecord_fk " FOREIGN KEY (" id_sessionRecord " )
267
+ REFERENCES public." sessionRecord " (id ) MATCH FULL
265
268
ON DELETE SET NULL ON UPDATE CASCADE;
266
269
-- ddl-end --
267
270
271
+ -- object: plpython3u | type: LANGUAGE --
272
+ -- DROP LANGUAGE IF EXISTS plpython3u CASCADE;
273
+ CREATE LANGUAGE plpython3u ;
274
+ -- ddl-end --
275
+ ALTER LANGUAGE plpython3u OWNER TO postgres;
276
+ -- ddl-end --
277
+
278
+ -- object: public.tlshc | type: FUNCTION --
279
+ -- DROP FUNCTION IF EXISTS public.tlshc(text,text) CASCADE;
280
+ CREATE FUNCTION public .tlshc ( a text , b text )
281
+ RETURNS int4
282
+ LANGUAGE plpython3u
283
+ VOLATILE
284
+ CALLED ON NULL INPUT
285
+ SECURITY INVOKER
286
+ COST 1
287
+ AS $$
288
+ import tlsh
289
+ return tlsh .diff (a, b)
290
+ $$;
291
+ -- ddl-end --
292
+ ALTER FUNCTION public .tlshc (text ,text ) OWNER TO postgres;
293
+ -- ddl-end --
294
+
295
+ -- object: public.tlsht | type: FUNCTION --
296
+ -- DROP FUNCTION IF EXISTS public.tlsht(IN text,IN text,IN int4,int4) CASCADE;
297
+ CREATE FUNCTION public .tlsht (IN filter text , IN hash text , IN threshold int4, maxrows int4)
298
+ RETURNS SETOF public .fuzzy_hash
299
+ LANGUAGE plpython3u
300
+ IMMUTABLE LEAKPROOF
301
+ RETURNS NULL ON NULL INPUT
302
+ SECURITY INVOKER
303
+ COST 1
304
+ ROWS 1000
305
+ AS $$
306
+ import tlsh
307
+ param = [" TLSH" ]
308
+ # param[0] = filter
309
+ # plan = plpy.prepare("SELECT * FROM fuzzy_hash WHERE type <> $1", ["text"])
310
+ # rv = plan.execute(param, maxrows)
311
+ rv = plpy .execute (" SELECT * FROM fuzzy_hash" , 1000 )
312
+ r = []
313
+ for x in rv:
314
+ if tlsh .diff (x[" value" ], hash) < threshold:
315
+ r .append (x)
316
+ return r
317
+ $$;
318
+ -- ddl-end --
319
+ ALTER FUNCTION public .tlsht (IN text ,IN text ,IN int4,int4) OWNER TO postgres;
320
+ -- ddl-end --
321
+
268
322
0 commit comments