HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux aritmodecarnaval.es 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: www-data (33)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //snap/core24/1055/bin/routel
#! /usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0
#
# This is simple script to process JSON output from ip route
# command and format it.  Based on earlier shell script version.
"""Script to parse ip route output into more readable text."""

import sys
import json
import getopt
import subprocess


def usage():
    '''Print usage and exit'''
    print("Usage: {} [tablenr [raw ip args...]]".format(sys.argv[0]))
    sys.exit(64)


def main():
    '''Process the arguments'''
    family = 'inet'
    try:
        opts, args = getopt.getopt(sys.argv[1:], "h46f:", ["help", "family="])
    except getopt.GetoptError as err:
        print(err)
        usage()

    for opt, arg in opts:
        if opt in ["-h", "--help"]:
            usage()
        elif opt == '-6':
            family = 'inet6'
        elif opt == "-4":
            family = 'inet'
        elif opt in ["-f", "--family"]:
            family = arg
        else:
            assert False, "unhandled option"

    if not args:
        args = ['0']

    cmd = ['ip', '-f', family, '-j', 'route', 'list', 'table'] + args
    process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    tbl = json.load(process.stdout)
    if family == 'inet':
        fmt = '{:15} {:15} {:15} {:8} {:8}{:<16} {}'
    else:
        fmt = '{:32} {:32} {:32} {:8} {:8}{:<16} {}'

    # ip route json keys
    keys = ['dst', 'gateway', 'prefsrc', 'protocol', 'scope', 'dev', 'table']
    print(fmt.format(*map(lambda x: x.capitalize(), keys)))

    for record in tbl:
        fields = [record[k] if k in record else '' for k in keys]
        print(fmt.format(*fields))


if __name__ == "__main__":
    main()