Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
OpnSense
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kulya
OpnSense
Commits
b1acd50e
Commit
b1acd50e
authored
Jun 30, 2015
by
Ad Schellevis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(ids) add logfile number selection to query script
parent
f4253772
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
45 additions
and
39 deletions
+45
-39
queryAlertLog.py
src/opnsense/scripts/suricata/queryAlertLog.py
+45
-39
No files found.
src/opnsense/scripts/suricata/queryAlertLog.py
View file @
b1acd50e
...
@@ -30,6 +30,7 @@
...
@@ -30,6 +30,7 @@
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
query suricata alert log
query suricata alert log
"""
"""
import
os.path
import
re
import
re
import
sre_constants
import
sre_constants
import
shlex
import
shlex
...
@@ -37,12 +38,16 @@ import ujson
...
@@ -37,12 +38,16 @@ import ujson
from
lib.log
import
reverse_log_reader
from
lib.log
import
reverse_log_reader
from
lib.params
import
updateParams
from
lib.params
import
updateParams
suricata_log
=
'/var/log/suricata/eve.json'
# handle parameters
# handle parameters
parameters
=
{
'limit'
:
'0'
,
'offset'
:
'0'
,
'filter'
:
''
}
parameters
=
{
'limit'
:
'0'
,
'offset'
:
'0'
,
'filter'
:
''
,
'fileid'
:
''
}
updateParams
(
parameters
)
updateParams
(
parameters
)
# choose logfile by number
if
parameters
[
'fileid'
]
.
isdigit
():
suricata_log
=
'/var/log/suricata/eve.json.
%
d'
%
int
(
parameters
[
'fileid'
])
else
:
suricata_log
=
'/var/log/suricata/eve.json'
if
parameters
[
'limit'
]
.
isdigit
():
if
parameters
[
'limit'
]
.
isdigit
():
limit
=
int
(
parameters
[
'limit'
])
limit
=
int
(
parameters
[
'limit'
])
else
:
else
:
...
@@ -78,42 +83,43 @@ else:
...
@@ -78,42 +83,43 @@ else:
# query suricata eve log
# query suricata eve log
result
=
{
'filters'
:
data_filters
,
'rows'
:[],
'total_rows'
:
0
}
result
=
{
'filters'
:
data_filters
,
'rows'
:[],
'total_rows'
:
0
}
for
line
in
reverse_log_reader
(
filename
=
suricata_log
,
start_pos
=
log_start_pos
):
if
os
.
path
.
exists
(
suricata_log
):
try
:
for
line
in
reverse_log_reader
(
filename
=
suricata_log
,
start_pos
=
log_start_pos
):
record
=
ujson
.
loads
(
line
[
'line'
])
try
:
except
ValueError
:
record
=
ujson
.
loads
(
line
[
'line'
])
# can not handle line
except
ValueError
:
record
=
{}
# can not handle line
record
=
{}
# only process valid alert items
if
'alert'
in
record
:
# only process valid alert items
# add position in file
if
'alert'
in
record
:
record
[
'filepos'
]
=
line
[
'pos'
]
# add position in file
# flatten structure
record
[
'filepos'
]
=
line
[
'pos'
]
record
[
'alert_sid'
]
=
record
[
'alert'
][
'signature_id'
]
# flatten structure
record
[
'alert'
]
=
record
[
'alert'
][
'signature'
]
record
[
'alert_sid'
]
=
record
[
'alert'
][
'signature_id'
]
record
[
'alert'
]
=
record
[
'alert'
][
'signature'
]
# use filters on data (using regular expressions)
do_output
=
True
# use filters on data (using regular expressions)
for
filterKeys
in
data_filters
:
do_output
=
True
filter_hit
=
False
for
filterKeys
in
data_filters
:
for
filterKey
in
filterKeys
.
split
(
','
):
filter_hit
=
False
if
record
.
has_key
(
filterKey
)
and
data_filters_comp
[
filterKeys
]
.
match
((
'
%
s'
%
record
[
filterKey
])
.
lower
()):
for
filterKey
in
filterKeys
.
split
(
','
):
filter_hit
=
True
if
record
.
has_key
(
filterKey
)
and
data_filters_comp
[
filterKeys
]
.
match
((
'
%
s'
%
record
[
filterKey
])
.
lower
()):
filter_hit
=
True
if
not
filter_hit
:
do_output
=
False
if
not
filter_hit
:
if
do_output
:
do_output
=
False
result
[
'total_rows'
]
+=
1
if
do_output
:
if
(
len
(
result
[
'rows'
])
<
limit
or
limit
==
0
)
and
result
[
'total_rows'
]
>=
offset
:
result
[
'total_rows'
]
+=
1
result
[
'rows'
]
.
append
(
record
)
if
(
len
(
result
[
'rows'
])
<
limit
or
limit
==
0
)
and
result
[
'total_rows'
]
>=
offset
:
elif
result
[
'total_rows'
]
>
offset
+
limit
:
result
[
'rows'
]
.
append
(
record
)
# do not fetch data until end of file...
elif
result
[
'total_rows'
]
>
offset
+
limit
:
break
# do not fetch data until end of file...
break
# only try to fetch one line when filepos is given
if
log_start_pos
!=
None
:
# only try to fetch one line when filepos is given
break
if
log_start_pos
!=
None
:
break
# output results
# output results
print
(
ujson
.
dumps
(
result
))
print
(
ujson
.
dumps
(
result
))
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment