Skip to content

Commit

Permalink
Merge branch 'dev' into patch-1
Browse files Browse the repository at this point in the history
  • Loading branch information
kellyjonbrazil authored Nov 19, 2024
2 parents 53437be + 2278c7e commit a1eefb8
Show file tree
Hide file tree
Showing 10 changed files with 97 additions and 22 deletions.
9 changes: 6 additions & 3 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
jc changelog

20241018 v1.25.4
20241119 v1.25.4
- Add `ipconfig` command parser (`ipconfig` for Windows)
- Enhance `ping-s` streaming parser to support error replies
- Enhance `ethtool` parser to support `link_partner_advertised_link_modes`
- Enhance `ifconfig` parser to support `utun` interfaces with assigned IPv4 addresses on macOS
- Enhance `ping-s` streaming parser to support error replies
- Fix `bluetoothctl` parser when extra attributes like `manufacturer` and `version` exist
- Fix `df` parser to correctly output binary vs. decimal size outputs
- Fix `mount` parser for cases where there are spaces in the filesystem name
- Fix `ip-address` parser for Python 3.13 changes to IPv4 mapped IPv6 addresses
- Fix `mount` parser for cases where there are spaces in the filesystem name
- Fix `netstat` parser for cases where there are spaces in the program name
- Fix `pkg-index-deb`, `apt-cache-show`, and `rpm-qi` parsers to correctly convert contiguous packages with the same name
- Fix `traceroute` parser to support extreme IPv6 cases
- Fix `uptime` parser for data that contains `user` instead of `users`
- Enhance `jc.utils.convert_size_to_int()` to add `posix_mode` and `decimal_bias` parameters

Expand Down
2 changes: 1 addition & 1 deletion jc/parsers/netstat.py
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@

class info():
"""Provides parser metadata (version, author, etc.)"""
version = '1.15'
version = '1.16'
description = '`netstat` command parser'
author = 'Kelly Brazil'
author_email = '[email protected]'
Expand Down
3 changes: 2 additions & 1 deletion jc/parsers/netstat_linux.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
r"""jc - JSON Convert Linux netstat Parser"""
import string
import re


def normalize_headers(header):
Expand Down Expand Up @@ -38,7 +39,7 @@ def parse_network(headers, entry):
]

# split entry based on presence of value in "State" column
contains_state = any(state in entry for state in LIST_OF_STATES)
contains_state = any(re.search(rf"\b{re.escape(state)}\b", entry) for state in LIST_OF_STATES)
split_modifier = 1 if contains_state else 2
entry = entry.split(maxsplit=len(headers) - split_modifier)

Expand Down
22 changes: 8 additions & 14 deletions jc/parsers/rpm_qi.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@

class info():
"""Provides parser metadata (version, author, etc.)"""
version = '1.8'
version = '1.9'
description = '`rpm -qi` command parser'
author = 'Kelly Brazil'
author_email = '[email protected]'
Expand Down Expand Up @@ -256,8 +256,6 @@ def parse(data, raw=False, quiet=False):

raw_output = []
entry_obj = {}
last_entry = None
this_entry = None
desc_entry = False
desc_en_entry = False
description = []
Expand All @@ -268,17 +266,13 @@ def parse(data, raw=False, quiet=False):
split_line = line.split(': ', maxsplit=1)

if (split_line[0].startswith('Name') or split_line[0] == 'Package') and len(split_line) == 2:
this_entry = split_line[1].strip()

if this_entry != last_entry:
if entry_obj:
if description:
entry_obj['description'] = ' '.join(description)
raw_output.append(entry_obj)
entry_obj = {}
last_entry = this_entry
desc_entry = False
desc_en_entry = False
if entry_obj:
if description:
entry_obj['description'] = ' '.join(description)
raw_output.append(entry_obj)
entry_obj = {}
desc_entry = False
desc_en_entry = False

if line.startswith('Description :'):
desc_entry = True
Expand Down
4 changes: 2 additions & 2 deletions jc/parsers/traceroute.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@

class info():
"""Provides parser metadata (version, author, etc.)"""
version = '1.7'
version = '1.8'
description = '`traceroute` and `traceroute6` command parser'
author = 'Kelly Brazil'
author_email = '[email protected]'
Expand Down Expand Up @@ -167,7 +167,7 @@ class info():
RE_HEADER = re.compile(r'(\S+)\s+\((\d+\.\d+\.\d+\.\d+|[0-9a-fA-F:]+)\)')
RE_PROBE_NAME_IP = re.compile(r'(\S+)\s+\((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|[0-9a-fA-F:]+)\)+')
RE_PROBE_IP_ONLY = re.compile(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+([^\(])')
RE_PROBE_IPV6_ONLY = re.compile(r'(([a-f0-9:]+:+)+[a-f0-9]+)')
RE_PROBE_IPV6_ONLY = re.compile(r'(([a-f0-9]*:)+[a-f0-9]+)')
RE_PROBE_BSD_IPV6 = re.compile(r'\b(?:[A-Fa-f0-9]{1,4}:){7}[A-Fa-f0-9]{1,4}\b')
RE_HOP = re.compile(r'^\s*(\d+)?\s+(.+)$')
RE_PROBE_ASN = re.compile(r'\[AS(\d+)\]')
Expand Down
2 changes: 1 addition & 1 deletion tests/fixtures/generic/pkg-index-deb.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions tests/fixtures/ubuntu-18.04/netstat-sudo-lnp-space.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"proto":"tcp","recv_q":0,"send_q":0,"local_address":"0.0.0.0","foreign_address":"0.0.0.0","state":"LISTEN","program_name":"pgpool","kind":"network","pid":1178,"local_port":"9898","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv4","local_port_num":9898},{"proto":"tcp","recv_q":0,"send_q":0,"local_address":"192.168.68.116","foreign_address":"0.0.0.0","state":"LISTEN","program_name":"bareos-fd","kind":"network","pid":584,"local_port":"9102","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv4","local_port_num":9102},{"proto":"tcp","recv_q":0,"send_q":0,"local_address":"0.0.0.0","foreign_address":"0.0.0.0","state":"LISTEN","program_name":"sshd: /usr/sbin","kind":"network","pid":600,"local_port":"22","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv4","local_port_num":22},{"proto":"tcp","recv_q":0,"send_q":0,"local_address":"0.0.0.0","foreign_address":"0.0.0.0","state":"LISTEN","program_name":"pgpool","kind":"network","pid":1178,"local_port":"5432","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv4","local_port_num":5432},{"proto":"tcp","recv_q":0,"send_q":0,"local_address":"0.0.0.0","foreign_address":"0.0.0.0","state":"LISTEN","program_name":"postgres","kind":"network","pid":1676,"local_port":"5433","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv4","local_port_num":5433},{"proto":"tcp","recv_q":0,"send_q":0,"local_address":"127.0.0.1","foreign_address":"0.0.0.0","state":"LISTEN","program_name":"exim4","kind":"network","pid":928,"local_port":"25","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv4","local_port_num":25},{"proto":"tcp","recv_q":0,"send_q":0,"local_address":"0.0.0.0","foreign_address":"0.0.0.0","state":"LISTEN","program_name":"zabbix_agen","kind":"network","pid":1817931,"local_port":"10050","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv4","local_port_num":10050},{"proto":"tcp","recv_q":0,"send_q":0,"local_address":"0.0.0.0","foreign_address":"0.0.0.0","state":"LISTEN","program_name":"pgpool: watchd","kind":"network","pid":1187,"local_port":"9000","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv4","local_port_num":9000},{"proto":"tcp6","recv_q":0,"send_q":0,"local_address":"::","foreign_address":"::","state":"LISTEN","program_name":"pgpool","kind":"network","pid":1178,"local_port":"9898","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv6","local_port_num":9898},{"proto":"tcp6","recv_q":0,"send_q":0,"local_address":"::","foreign_address":"::","state":"LISTEN","program_name":"sshd: /usr/sbin","kind":"network","pid":600,"local_port":"22","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv6","local_port_num":22},{"proto":"tcp6","recv_q":0,"send_q":0,"local_address":"::","foreign_address":"::","state":"LISTEN","program_name":"pgpool","kind":"network","pid":1178,"local_port":"5432","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv6","local_port_num":5432},{"proto":"tcp6","recv_q":0,"send_q":0,"local_address":"::","foreign_address":"::","state":"LISTEN","program_name":"postgres","kind":"network","pid":1676,"local_port":"5433","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv6","local_port_num":5433},{"proto":"tcp6","recv_q":0,"send_q":0,"local_address":"::","foreign_address":"::","state":"LISTEN","program_name":"zabbix_agen","kind":"network","pid":1817931,"local_port":"10050","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv6","local_port_num":10050},{"proto":"udp","recv_q":0,"send_q":0,"local_address":"0.0.0.0","foreign_address":"0.0.0.0","state":null,"program_name":"dhclient","kind":"network","pid":535,"local_port":"68","foreign_port":"*","transport_protocol":"udp","network_protocol":"ipv4","local_port_num":68},{"proto":"udp","recv_q":0,"send_q":0,"local_address":"0.0.0.0","foreign_address":"0.0.0.0","state":null,"program_name":"pgpool: heartb","kind":"network","pid":1204,"local_port":"37300","foreign_port":"*","transport_protocol":"udp","network_protocol":"ipv4","local_port_num":37300},{"proto":"udp","recv_q":0,"send_q":0,"local_address":"0.0.0.0","foreign_address":"0.0.0.0","state":null,"program_name":"pgpool: heartb","kind":"network","pid":1205,"local_port":"9694","foreign_port":"*","transport_protocol":"udp","network_protocol":"ipv4","local_port_num":9694},{"proto":"udp","recv_q":0,"send_q":0,"local_address":"0.0.0.0","foreign_address":"0.0.0.0","state":null,"program_name":"pgpool: heartb","kind":"network","pid":1203,"local_port":"9694","foreign_port":"*","transport_protocol":"udp","network_protocol":"ipv4","local_port_num":9694},{"proto":"udp","recv_q":0,"send_q":0,"local_address":"0.0.0.0","foreign_address":"0.0.0.0","state":null,"program_name":"pgpool: heartb","kind":"network","pid":1206,"local_port":"44649","foreign_port":"*","transport_protocol":"udp","network_protocol":"ipv4","local_port_num":44649},{"proto":"udp","recv_q":0,"send_q":0,"local_address":"0.0.0.0","foreign_address":"0.0.0.0","state":null,"program_name":"rsyslogd","kind":"network","pid":494,"local_port":"52868","foreign_port":"*","transport_protocol":"udp","network_protocol":"ipv4","local_port_num":52868},{"proto":"tcp","recv_q":0,"send_q":0,"local_address":"127.0.0.1","foreign_address":"0.0.0.0","state":"LISTEN","program_name":"containerd","kind":"network","pid":1112,"local_port":"42351","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv4","local_port_num":42351},{"proto":"tcp","recv_q":0,"send_q":0,"local_address":"127.0.0.53","foreign_address":"0.0.0.0","state":"LISTEN","program_name":"systemd-resolve","kind":"network","pid":885,"local_port":"53","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv4","local_port_num":53},{"proto":"tcp","recv_q":0,"send_q":0,"local_address":"0.0.0.0","foreign_address":"0.0.0.0","state":"LISTEN","program_name":"sshd","kind":"network","pid":1127,"local_port":"22","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv4","local_port_num":22},{"proto":"tcp6","recv_q":0,"send_q":0,"local_address":"::","foreign_address":"::","state":"LISTEN","program_name":"sshd","kind":"network","pid":1127,"local_port":"22","foreign_port":"*","transport_protocol":"tcp","network_protocol":"ipv6","local_port_num":22},{"proto":"udp","recv_q":0,"send_q":0,"local_address":"127.0.0.53","foreign_address":"0.0.0.0","state":null,"program_name":"systemd-resolve","kind":"network","pid":885,"local_port":"53","foreign_port":"*","transport_protocol":"udp","network_protocol":"ipv4","local_port_num":53},{"proto":"udp","recv_q":0,"send_q":0,"local_address":"192.168.71.131","foreign_address":"0.0.0.0","state":null,"program_name":"systemd-network","kind":"network","pid":867,"local_port":"68","foreign_port":"*","transport_protocol":"udp","network_protocol":"ipv4","local_port_num":68},{"proto":"raw6","recv_q":0,"send_q":0,"local_address":"::","foreign_address":"::","state":"7","program_name":"systemd-network","kind":"network","pid":867,"local_port":"58","foreign_port":"*","transport_protocol":null,"network_protocol":"ipv6","local_port_num":58},{"proto":"unix","refcnt":2,"flags":"ACC","type":"SEQPACKET","state":"LISTENING","inode":20812,"program_name":"init","path":"/run/udev/control","kind":"socket","pid":1},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":33765,"program_name":"systemd","path":"/run/user/1000/systemd/private","kind":"socket","pid":1723},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":33808,"program_name":"systemd","path":"/run/user/1000/gnupg/S.gpg-agent.ssh","kind":"socket","pid":1723},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":33809,"program_name":"systemd","path":"/run/user/1000/gnupg/S.dirmngr","kind":"socket","pid":1723},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":33810,"program_name":"systemd","path":"/run/user/1000/gnupg/S.gpg-agent.browser","kind":"socket","pid":1723},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":33811,"program_name":"systemd","path":"/run/user/1000/gnupg/S.gpg-agent","kind":"socket","pid":1723},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":33812,"program_name":"systemd","path":"/run/user/1000/gnupg/S.gpg-agent.extra","kind":"socket","pid":1723},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":20655,"program_name":"init","path":"/run/systemd/private","kind":"socket","pid":1},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":20662,"program_name":"init","path":"/run/lvm/lvmetad.socket","kind":"socket","pid":1},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":20664,"program_name":"init","path":"/run/systemd/journal/stdout","kind":"socket","pid":1},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":20891,"program_name":"init","path":"/run/lvm/lvmpolld.socket","kind":"socket","pid":1},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":27473,"program_name":"init","path":"/run/acpid.socket","kind":"socket","pid":1},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":27443,"program_name":"init","path":"/run/snapd.socket","kind":"socket","pid":1},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":27445,"program_name":"init","path":"/run/snapd-snap.socket","kind":"socket","pid":1},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":27475,"program_name":"init","path":"/run/uuidd/request","kind":"socket","pid":1},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":27481,"program_name":"init","path":"/var/run/docker.sock","kind":"socket","pid":1},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":27489,"program_name":"init","path":"/var/run/dbus/system_bus_socket","kind":"socket","pid":1},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":27468,"program_name":"init","path":"/var/lib/lxd/unix.socket","kind":"socket","pid":1},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":30726,"program_name":"containerd","path":"/run/containerd/containerd.sock","kind":"socket","pid":1112},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":27436,"program_name":"init","path":"@ISCSIADM_ABSTRACT_NAMESPACE","kind":"socket","pid":1},{"proto":"unix","refcnt":2,"flags":"ACC","type":"STREAM","state":"LISTENING","inode":25548,"program_name":"VGAuthService","path":"/var/run/vmware/guestServicePipe","kind":"socket","pid":607}]
Loading

0 comments on commit a1eefb8

Please sign in to comment.