1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-06-21 00:19:42 +02:00
This commit is contained in:
Kelly Brazil
2019-10-18 09:57:22 -07:00
parent 756c2bc9ac
commit cec73d6131
4 changed files with 24 additions and 16 deletions

View File

@ -10,14 +10,16 @@ import jc.parsers.ifconfig
import jc.parsers.ls import jc.parsers.ls
import jc.parsers.netstat import jc.parsers.netstat
def main(): def main():
pretty = False pretty = False
data = sys.stdin.read() data = sys.stdin.read()
if len(sys.argv) < 2: if len(sys.argv) < 2:
print(f'\nError: jc\n Must specify parser. (e.g. --ls, --netstat, --ifconfig, etc.)') print('Error: jc')
print(' Must specify parser. (e.g. --ls, --netstat, --ifconfig, etc.)')
print(' Use -p to pretty print') print(' Use -p to pretty print')
print(f'\nExample: ls -al | jc --ls -p\n') print('Example: ls -al | jc --ls -p\n')
exit() exit()
arg = sys.argv[1] arg = sys.argv[1]
@ -39,5 +41,6 @@ def main():
else: else:
print(json.dumps(result)) print(json.dumps(result))
if __name__ == '__main__': if __name__ == '__main__':
main() main()

View File

@ -13,9 +13,10 @@ $ ifconfig | jc --ifconfig -p
from collections import namedtuple from collections import namedtuple
from ifconfigparser import IfconfigParser from ifconfigparser import IfconfigParser
def parse(data): def parse(data):
output = [] output = []
parsed = IfconfigParser(console_output=data) parsed = IfconfigParser(console_output=data)
interfaces = parsed.get_interfaces() interfaces = parsed.get_interfaces()
@ -24,7 +25,5 @@ def parse(data):
d = interfaces[iface]._asdict() d = interfaces[iface]._asdict()
dct = dict(d) dct = dict(d)
output.append(dct) output.append(dct)
return output return output

View File

@ -85,9 +85,10 @@ $ $ ls -l /usr/bin | jc --ls | jq .[] | jq 'select(.bytes > 50000000)'
""" """
import re import re
def parse(data): def parse(data):
output = [] output = []
cleandata = data.splitlines() cleandata = data.splitlines()
# Delete first line if it starts with 'total' # Delete first line if it starts with 'total'

View File

@ -138,6 +138,7 @@ import string
output = {} output = {}
class state(): class state():
section = '' section = ''
session = '' session = ''
@ -147,12 +148,13 @@ class state():
client_tcp_ip6 = [] client_tcp_ip6 = []
client_udp_ip4 = [] client_udp_ip4 = []
client_udp_ip6 = [] client_udp_ip6 = []
server_tcp_ip4 = [] server_tcp_ip4 = []
server_tcp_ip6 = [] server_tcp_ip6 = []
server_udp_ip4 = [] server_udp_ip4 = []
server_udp_ip6 = [] server_udp_ip6 = []
def parse_line(entry): def parse_line(entry):
parsed_line = entry.split() parsed_line = entry.split()
output_line = {} output_line = {}
@ -166,7 +168,7 @@ def parse_line(entry):
if parsed_line[5][0] not in string.digits: if parsed_line[5][0] not in string.digits:
output_line['state'] = parsed_line[5] output_line['state'] = parsed_line[5]
if len(parsed_line) > 6: if len(parsed_line) > 6:
output_line['pid'] = int(parsed_line[6].split('/')[0]) output_line['pid'] = int(parsed_line[6].split('/')[0])
output_line['program_name'] = parsed_line[6].split('/')[1] output_line['program_name'] = parsed_line[6].split('/')[1]
@ -179,6 +181,7 @@ def parse_line(entry):
return output_line return output_line
def parse(data): def parse(data):
cleandata = data.splitlines() cleandata = data.splitlines()
@ -191,13 +194,13 @@ def parse(data):
if line.find('Active Internet connections (only servers)') == 0: if line.find('Active Internet connections (only servers)') == 0:
state.section = 'server' state.section = 'server'
continue continue
if line.find('Proto') == 0: if line.find('Proto') == 0:
continue continue
if line.find('Active UNIX') == 0: if line.find('Active UNIX') == 0:
break break
if state.section == 'client': if state.section == 'client':
if line.find('tcp') == 0: if line.find('tcp') == 0:
state.session = 'tcp' state.session = 'tcp'
@ -225,6 +228,7 @@ def parse(data):
else: else:
state.network = 'ipv4' state.network = 'ipv4'
# client section
if state.section == 'client' and state.session == 'tcp' and state.network == 'ipv4': if state.section == 'client' and state.session == 'tcp' and state.network == 'ipv4':
state.client_tcp_ip4.append(parse_line(line)) state.client_tcp_ip4.append(parse_line(line))
@ -237,7 +241,7 @@ def parse(data):
if state.section == 'client' and state.session == 'udp' and state.network == 'ipv6': if state.section == 'client' and state.session == 'udp' and state.network == 'ipv6':
state.client_udp_ip6.append(parse_line(line)) state.client_udp_ip6.append(parse_line(line))
# server section
if state.section == 'server' and state.session == 'tcp' and state.network == 'ipv4': if state.section == 'server' and state.session == 'tcp' and state.network == 'ipv4':
state.server_tcp_ip4.append(parse_line(line)) state.server_tcp_ip4.append(parse_line(line))
@ -254,6 +258,7 @@ def parse(data):
state.network = '' state.network = ''
# build dictionary # build dictionary
# client section
if state.client_tcp_ip4: if state.client_tcp_ip4:
if 'client' not in output: if 'client' not in output:
output['client'] = {} output['client'] = {}
@ -281,8 +286,8 @@ def parse(data):
if 'udp' not in output['client']: if 'udp' not in output['client']:
output['client']['udp'] = {} output['client']['udp'] = {}
output['client']['udp']['ipv6'] = state.client_udp_ip6 output['client']['udp']['ipv6'] = state.client_udp_ip6
# server section
if state.server_tcp_ip4: if state.server_tcp_ip4:
if 'server' not in output: if 'server' not in output:
output['server'] = {} output['server'] = {}
@ -303,7 +308,7 @@ def parse(data):
if 'udp' not in output['server']: if 'udp' not in output['server']:
output['server']['udp'] = {} output['server']['udp'] = {}
output['server']['udp']['ipv4'] = state.server_udp_ip4 output['server']['udp']['ipv4'] = state.server_udp_ip4
if state.server_udp_ip6: if state.server_udp_ip6:
if 'server' not in output: if 'server' not in output:
output['server'] = {} output['server'] = {}
@ -311,4 +316,4 @@ def parse(data):
output['server']['udp'] = {} output['server']['udp'] = {}
output['server']['udp']['ipv6'] = state.server_udp_ip6 output['server']['udp']['ipv6'] = state.server_udp_ip6
return output return output