summaryrefslogtreecommitdiff
path: root/src/op_mode/show_conntrack.py
diff options
context:
space:
mode:
authorViacheslav Hletenko <v.gletenko@vyos.io>2022-07-22 12:14:29 +0000
committerViacheslav Hletenko <v.gletenko@vyos.io>2022-07-22 12:56:52 +0000
commit4dc5d78eed411c7584265ee33cf1848fdf6492bc (patch)
treeade47f60fe93ba08a50a79f6b515aee77a9568db /src/op_mode/show_conntrack.py
parentbec3e9de40b57a1d7cd805ddcdd498033105679b (diff)
downloadvyos-1x-4dc5d78eed411c7584265ee33cf1848fdf6492bc.tar.gz
vyos-1x-4dc5d78eed411c7584265ee33cf1848fdf6492bc.zip
conntrack: T4145: Modify conntrack to format command runner
Change op-mode "show conntrack table ipvX" script to work with vyos.opmode module Change name "show_conntrack.py" => "conntrack.py" Ability to get IPv6 conntrack information Ability to get raw and formatted data
Diffstat (limited to 'src/op_mode/show_conntrack.py')
-rwxr-xr-xsrc/op_mode/show_conntrack.py102
1 files changed, 0 insertions, 102 deletions
diff --git a/src/op_mode/show_conntrack.py b/src/op_mode/show_conntrack.py
deleted file mode 100755
index 089a3e454..000000000
--- a/src/op_mode/show_conntrack.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/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))