mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-06-17 00:07:37 +02:00
add linux support for netstat -i
This commit is contained in:
32
README.md
32
README.md
@ -1704,6 +1704,38 @@ $ netstat -r | jc --netstat -p # or: jc -p netstat -r
|
|||||||
"kind": "route"
|
"kind": "route"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
$ netstat -i | jc --netstat -p # or: jc -p netstat -i
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"iface": "ens33",
|
||||||
|
"mtu": 1500,
|
||||||
|
"rx_ok": 476,
|
||||||
|
"rx_err": 0,
|
||||||
|
"rx_drp": 0,
|
||||||
|
"rx_ovr": 0,
|
||||||
|
"tx_ok": 312,
|
||||||
|
"tx_err": 0,
|
||||||
|
"tx_drp": 0,
|
||||||
|
"tx_ovr": 0,
|
||||||
|
"flg": "BMRU",
|
||||||
|
"kind": "interface"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"iface": "lo",
|
||||||
|
"mtu": 65536,
|
||||||
|
"rx_ok": 0,
|
||||||
|
"rx_err": 0,
|
||||||
|
"rx_drp": 0,
|
||||||
|
"rx_ovr": 0,
|
||||||
|
"tx_ok": 0,
|
||||||
|
"tx_err": 0,
|
||||||
|
"tx_drp": 0,
|
||||||
|
"tx_ovr": 0,
|
||||||
|
"flg": "LRU",
|
||||||
|
"kind": "interface"
|
||||||
|
}
|
||||||
|
]
|
||||||
```
|
```
|
||||||
### ntpq
|
### ntpq
|
||||||
```
|
```
|
||||||
|
@ -203,6 +203,38 @@ Examples:
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
$ netstat -i | jc --netstat -p
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"iface": "ens33",
|
||||||
|
"mtu": 1500,
|
||||||
|
"rx_ok": 476,
|
||||||
|
"rx_err": 0,
|
||||||
|
"rx_drp": 0,
|
||||||
|
"rx_ovr": 0,
|
||||||
|
"tx_ok": 312,
|
||||||
|
"tx_err": 0,
|
||||||
|
"tx_drp": 0,
|
||||||
|
"tx_ovr": 0,
|
||||||
|
"flg": "BMRU",
|
||||||
|
"kind": "interface"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"iface": "lo",
|
||||||
|
"mtu": 65536,
|
||||||
|
"rx_ok": 0,
|
||||||
|
"rx_err": 0,
|
||||||
|
"rx_drp": 0,
|
||||||
|
"rx_ovr": 0,
|
||||||
|
"tx_ok": 0,
|
||||||
|
"tx_err": 0,
|
||||||
|
"tx_drp": 0,
|
||||||
|
"tx_ovr": 0,
|
||||||
|
"flg": "LRU",
|
||||||
|
"kind": "interface"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
## info
|
## info
|
||||||
```python
|
```python
|
||||||
info(self, /, *args, **kwargs)
|
info(self, /, *args, **kwargs)
|
||||||
@ -275,7 +307,23 @@ Returns:
|
|||||||
"window": integer,
|
"window": integer,
|
||||||
"irtt": integer,
|
"irtt": integer,
|
||||||
"iface": string,
|
"iface": string,
|
||||||
"metric": integer
|
"metric": integer,
|
||||||
|
"network": string,
|
||||||
|
"address": string,
|
||||||
|
"ipkts": integer, - = null
|
||||||
|
"ierrs": integer, - = null
|
||||||
|
"opkts": integer, - = null
|
||||||
|
"oerrs": integer, - = null
|
||||||
|
"coll": integer, - = null
|
||||||
|
"rx_ok": integer,
|
||||||
|
"rx_err": integer,
|
||||||
|
"rx_drp": integer,
|
||||||
|
"rx_ovr": integer,
|
||||||
|
"tx_ok": integer,
|
||||||
|
"tx_err": integer,
|
||||||
|
"tx_drp": integer,
|
||||||
|
"tx_ovr": integer,
|
||||||
|
"flg": string
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -203,7 +203,36 @@ Examples:
|
|||||||
]
|
]
|
||||||
|
|
||||||
$ netstat -i | jc --netstat -p
|
$ netstat -i | jc --netstat -p
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"iface": "ens33",
|
||||||
|
"mtu": 1500,
|
||||||
|
"rx_ok": 476,
|
||||||
|
"rx_err": 0,
|
||||||
|
"rx_drp": 0,
|
||||||
|
"rx_ovr": 0,
|
||||||
|
"tx_ok": 312,
|
||||||
|
"tx_err": 0,
|
||||||
|
"tx_drp": 0,
|
||||||
|
"tx_ovr": 0,
|
||||||
|
"flg": "BMRU",
|
||||||
|
"kind": "interface"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"iface": "lo",
|
||||||
|
"mtu": 65536,
|
||||||
|
"rx_ok": 0,
|
||||||
|
"rx_err": 0,
|
||||||
|
"rx_drp": 0,
|
||||||
|
"rx_ovr": 0,
|
||||||
|
"tx_ok": 0,
|
||||||
|
"tx_err": 0,
|
||||||
|
"tx_drp": 0,
|
||||||
|
"tx_ovr": 0,
|
||||||
|
"flg": "LRU",
|
||||||
|
"kind": "interface"
|
||||||
|
}
|
||||||
|
]
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
@ -286,7 +315,6 @@ def process(proc_data):
|
|||||||
"irtt": integer,
|
"irtt": integer,
|
||||||
"iface": string,
|
"iface": string,
|
||||||
"metric": integer,
|
"metric": integer,
|
||||||
|
|
||||||
"network": string,
|
"network": string,
|
||||||
"address": string,
|
"address": string,
|
||||||
"ipkts": integer, - = null
|
"ipkts": integer, - = null
|
||||||
@ -294,6 +322,15 @@ def process(proc_data):
|
|||||||
"opkts": integer, - = null
|
"opkts": integer, - = null
|
||||||
"oerrs": integer, - = null
|
"oerrs": integer, - = null
|
||||||
"coll": integer, - = null
|
"coll": integer, - = null
|
||||||
|
"rx_ok": integer,
|
||||||
|
"rx_err": integer,
|
||||||
|
"rx_drp": integer,
|
||||||
|
"rx_ovr": integer,
|
||||||
|
"tx_ok": integer,
|
||||||
|
"tx_err": integer,
|
||||||
|
"tx_drp": integer,
|
||||||
|
"tx_ovr": integer,
|
||||||
|
"flg": string
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
"""
|
"""
|
||||||
@ -302,7 +339,8 @@ def process(proc_data):
|
|||||||
int_list = ['recv_q', 'send_q', 'pid', 'refcnt', 'inode', 'unit', 'vendor', 'class',
|
int_list = ['recv_q', 'send_q', 'pid', 'refcnt', 'inode', 'unit', 'vendor', 'class',
|
||||||
'osx_flags', 'subcla', 'pcbcount', 'rcvbuf', 'sndbuf', 'rxbytes', 'txbytes',
|
'osx_flags', 'subcla', 'pcbcount', 'rcvbuf', 'sndbuf', 'rxbytes', 'txbytes',
|
||||||
'route_refs', 'use', 'mtu', 'mss', 'window', 'irtt', 'metric', 'ipkts',
|
'route_refs', 'use', 'mtu', 'mss', 'window', 'irtt', 'metric', 'ipkts',
|
||||||
'ierrs', 'opkts', 'oerrs', 'coll']
|
'ierrs', 'opkts', 'oerrs', 'coll', 'rx_ok', 'rx_err', 'rx_drp', 'rx_ovr',
|
||||||
|
'tx_ok', 'tx_err', 'tx_drp', 'tx_ovr']
|
||||||
for key in int_list:
|
for key in int_list:
|
||||||
if key in entry:
|
if key in entry:
|
||||||
try:
|
try:
|
||||||
|
@ -23,6 +23,13 @@ def normalize_route_headers(header):
|
|||||||
return header
|
return header
|
||||||
|
|
||||||
|
|
||||||
|
def normalize_interface_headers(header):
|
||||||
|
header = header.lower()
|
||||||
|
header = header.replace('-', '_')
|
||||||
|
|
||||||
|
return header
|
||||||
|
|
||||||
|
|
||||||
def parse_network(headers, entry):
|
def parse_network(headers, entry):
|
||||||
# Count words in header
|
# Count words in header
|
||||||
# if len of line is one less than len of header, then insert None in field 5
|
# if len of line is one less than len of header, then insert None in field 5
|
||||||
@ -79,6 +86,14 @@ def parse_route(headers, entry):
|
|||||||
return output_line
|
return output_line
|
||||||
|
|
||||||
|
|
||||||
|
def parse_interface(headers, entry):
|
||||||
|
entry = entry.split(maxsplit=len(headers) - 1)
|
||||||
|
output_line = dict(zip(headers, entry))
|
||||||
|
output_line['kind'] = 'interface'
|
||||||
|
|
||||||
|
return output_line
|
||||||
|
|
||||||
|
|
||||||
def parse_post(raw_data):
|
def parse_post(raw_data):
|
||||||
# clean up trailing whitespace on each item in each entry
|
# clean up trailing whitespace on each item in each entry
|
||||||
# flags --- = null
|
# flags --- = null
|
||||||
@ -157,6 +172,7 @@ def parse(cleandata):
|
|||||||
socket = False
|
socket = False
|
||||||
bluetooth = False
|
bluetooth = False
|
||||||
routing_table = False
|
routing_table = False
|
||||||
|
interface_table = False
|
||||||
headers = None
|
headers = None
|
||||||
|
|
||||||
for line in cleandata:
|
for line in cleandata:
|
||||||
@ -166,6 +182,7 @@ def parse(cleandata):
|
|||||||
socket = False
|
socket = False
|
||||||
bluetooth = False
|
bluetooth = False
|
||||||
routing_table = False
|
routing_table = False
|
||||||
|
interface_table = False
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if line.startswith('Active UNIX'):
|
if line.startswith('Active UNIX'):
|
||||||
@ -173,6 +190,7 @@ def parse(cleandata):
|
|||||||
socket = True
|
socket = True
|
||||||
bluetooth = False
|
bluetooth = False
|
||||||
routing_table = False
|
routing_table = False
|
||||||
|
interface_table = False
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if line.startswith('Active Bluetooth'):
|
if line.startswith('Active Bluetooth'):
|
||||||
@ -180,6 +198,7 @@ def parse(cleandata):
|
|||||||
socket = False
|
socket = False
|
||||||
bluetooth = True
|
bluetooth = True
|
||||||
routing_table = False
|
routing_table = False
|
||||||
|
interface_table = False
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if line.startswith('Kernel IP routing table'):
|
if line.startswith('Kernel IP routing table'):
|
||||||
@ -187,8 +206,18 @@ def parse(cleandata):
|
|||||||
socket = False
|
socket = False
|
||||||
bluetooth = False
|
bluetooth = False
|
||||||
routing_table = True
|
routing_table = True
|
||||||
|
interface_table = False
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if line.startswith('Kernel Interface table'):
|
||||||
|
network = False
|
||||||
|
socket = False
|
||||||
|
bluetooth = False
|
||||||
|
routing_table = False
|
||||||
|
interface_table = True
|
||||||
|
continue
|
||||||
|
|
||||||
|
# get headers
|
||||||
if line.startswith('Proto'):
|
if line.startswith('Proto'):
|
||||||
header_text = normalize_headers(line)
|
header_text = normalize_headers(line)
|
||||||
headers = header_text.split()
|
headers = header_text.split()
|
||||||
@ -199,6 +228,12 @@ def parse(cleandata):
|
|||||||
headers = header_text.split()
|
headers = header_text.split()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if line.startswith('Iface '):
|
||||||
|
header_text = normalize_interface_headers(line)
|
||||||
|
headers = header_text.split()
|
||||||
|
continue
|
||||||
|
|
||||||
|
# parse items
|
||||||
if network:
|
if network:
|
||||||
raw_output.append(parse_network(headers, line))
|
raw_output.append(parse_network(headers, line))
|
||||||
continue
|
continue
|
||||||
@ -215,4 +250,8 @@ def parse(cleandata):
|
|||||||
raw_output.append(parse_route(headers, line))
|
raw_output.append(parse_route(headers, line))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if interface_table:
|
||||||
|
raw_output.append(parse_interface(headers, line))
|
||||||
|
continue
|
||||||
|
|
||||||
return parse_post(raw_output)
|
return parse_post(raw_output)
|
||||||
|
5
tests/fixtures/centos-7.7/netstat-i.out
vendored
Normal file
5
tests/fixtures/centos-7.7/netstat-i.out
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Kernel Interface table
|
||||||
|
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
|
||||||
|
docker0 1500 0 0 0 0 0 0 0 0 BMU
|
||||||
|
ens33 1500 476 0 0 0 312 0 0 0 BMRU
|
||||||
|
lo 65536 0 0 0 0 0 0 0 0 LRU
|
Reference in New Issue
Block a user