#!/usr/bin/python3 from sys import argv from sys import exit import re from vyos.utils.file import read_file services_file = '/etc/services' def get_services(): names = [] service_data = read_file(services_file, "") for line in service_data.split("\n"): if not line or line[0] == '#': continue tmp = line.split() names.append(tmp[0]) if len(tmp) > 2: # Add port aliases to service list, too names.extend(tmp[2:]) # remove duplicate entries (e.g. echo) from list names = list(dict.fromkeys(names)) return names if __name__ == '__main__': if len(argv)>1: ports = argv[1].split(",") services = get_services() for port in ports: if port and port[0] == '!': port = port[1:] if re.match('^[0-9]{1,5}-[0-9]{1,5}$', port): port_1, port_2 = port.split('-') if int(port_1) not in range(1, 65536) or int(port_2) not in range(1, 65536): print(f'Error: {port} is not a valid port range') exit(1) if int(port_1) > int(port_2): print(f'Error: {port} is not a valid port range') exit(1) elif port.isnumeric(): if int(port) not in range(1, 65536): print(f'Error: {port} is not a valid port') exit(1) elif port not in services: print(f'Error: {port} is not a valid service name') exit(1) else: exit(2) exit(0)