Page Menu
Home
VyOS Platform
Search
Configure Global Search
Log In
Files
F118306407
show_conntrack.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
show_conntrack.py
View Options
#!/usr/bin/env python3
#
# Copyright (C) 2022 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import
xmltodict
from
tabulate
import
tabulate
from
vyos.util
import
cmd
def
_get_raw_data
():
"""
Get conntrack XML output
"""
return
cmd
(
f
'sudo conntrack --dump --output xml'
)
def
_xml_to_dict
(
xml
):
"""
Convert XML to dictionary
Return: dictionary
"""
parse
=
xmltodict
.
parse
(
xml
)
# If only one conntrack entry we must change dict
if
'meta'
in
parse
[
'conntrack'
][
'flow'
]:
return
dict
(
conntrack
=
{
'flow'
:
[
parse
[
'conntrack'
][
'flow'
]]})
return
parse
def
_get_formatted_output
(
xml
):
"""
:param xml:
:return: formatted output
"""
data_entries
=
[]
dict_data
=
_xml_to_dict
(
xml
)
for
entry
in
dict_data
[
'conntrack'
][
'flow'
]:
orig_src
,
orig_dst
,
orig_sport
,
orig_dport
=
{},
{},
{},
{}
reply_src
,
reply_dst
,
reply_sport
,
reply_dport
=
{},
{},
{},
{}
proto
=
{}
for
meta
in
entry
[
'meta'
]:
direction
=
meta
[
'@direction'
]
if
direction
in
[
'original'
]:
if
'layer3'
in
meta
:
orig_src
=
meta
[
'layer3'
][
'src'
]
orig_dst
=
meta
[
'layer3'
][
'dst'
]
if
'layer4'
in
meta
:
if
meta
.
get
(
'layer4'
)
.
get
(
'sport'
):
orig_sport
=
meta
[
'layer4'
][
'sport'
]
if
meta
.
get
(
'layer4'
)
.
get
(
'dport'
):
orig_dport
=
meta
[
'layer4'
][
'dport'
]
proto
=
meta
[
'layer4'
][
'@protoname'
]
if
direction
in
[
'reply'
]:
if
'layer3'
in
meta
:
reply_src
=
meta
[
'layer3'
][
'src'
]
reply_dst
=
meta
[
'layer3'
][
'dst'
]
if
'layer4'
in
meta
:
if
meta
.
get
(
'layer4'
)
.
get
(
'sport'
):
reply_sport
=
meta
[
'layer4'
][
'sport'
]
if
meta
.
get
(
'layer4'
)
.
get
(
'dport'
):
reply_dport
=
meta
[
'layer4'
][
'dport'
]
proto
=
meta
[
'layer4'
][
'@protoname'
]
if
direction
==
'independent'
:
conn_id
=
meta
[
'id'
]
timeout
=
meta
[
'timeout'
]
orig_src
=
f
'{orig_src}:{orig_sport}'
if
orig_sport
else
orig_src
orig_dst
=
f
'{orig_dst}:{orig_dport}'
if
orig_dport
else
orig_dst
reply_src
=
f
'{reply_src}:{reply_sport}'
if
reply_sport
else
reply_src
reply_dst
=
f
'{reply_dst}:{reply_dport}'
if
reply_dport
else
reply_dst
state
=
meta
[
'state'
]
if
'state'
in
meta
else
''
mark
=
meta
[
'mark'
]
zone
=
meta
[
'zone'
]
if
'zone'
in
meta
else
''
data_entries
.
append
(
[
conn_id
,
orig_src
,
orig_dst
,
reply_src
,
reply_dst
,
proto
,
state
,
timeout
,
mark
,
zone
])
headers
=
[
"Id"
,
"Original src"
,
"Original dst"
,
"Reply src"
,
"Reply dst"
,
"Protocol"
,
"State"
,
"Timeout"
,
"Mark"
,
"Zone"
]
output
=
tabulate
(
data_entries
,
headers
,
numalign
=
"left"
)
return
output
def
show
(
raw
:
bool
):
conntrack_data
=
_get_raw_data
()
if
raw
:
return
conntrack_data
else
:
return
_get_formatted_output
(
conntrack_data
)
if
__name__
==
'__main__'
:
print
(
show
(
raw
=
False
))
File Metadata
Details
Attached
Mime Type
text/x-script.python
Expires
Sat, Oct 17, 12:15 AM (1 d, 8 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4355002
Default Alt Text
show_conntrack.py (3 KB)
Attached To
Mode
rVYOSONEX vyos-1x
Attached
Detach File
Event Timeline
Log In to Comment