【发布时间】:2016-04-16 07:05:33
【问题描述】:
一直致力于解析 iptables 输出以使用 python 获取每个源 IP 的统计信息。不想包含 iptc 模块。 所以只是做字符串操作。
bytes target prot opt in out source destination
0 0 udp -- * eth1 10.10.10.10 0.0.0.0/0 udp spt:10
0 0 tcp -- * eth1 10.10.10.10 0.0.0.0/0 tcp spt:10
0 0 all -- * eth1 1.1.1.1 0.0.0.0/0
0 0 all -- * eth1 0.0.0.0/0 0.0.0.0/0 source IP range 5.5.5.5-5.5.5.10
0 0 all -- * eth1 0.0.0.0/0 0.0.0.0/0 source IP range 4.4.4.4-4.4.4.5
0 0 all -- * eth1 0.0.0.0/0 0.0.0.0/0
>>> s=' 0 0 udp -- * eth1 10.10.10.10 0.0.0.0/0 udp spt:10 '
>>> s.split()
['0', '0', 'udp', '--', '*', 'eth1', '10.10.10.10', '0.0.0.0/0', 'udp', 'spt:10']
想要解析如下,除了单词之间的单个空格外,如何分隔所有空格?
expected_output=['0', '0', 'udp', '--', '*', 'eth1', '10.10.10.10', '0.0.0.0/0', 'udp spt:10']
或者有没有更好的方法从 iptables 获取统计信息,但没有 iptc?
【问题讨论】:
-
你可以使用
re.split:re.split(' {2,}', s)。不过不知道有没有更好的解决方案。 -
您确定这些块不是制表符分隔的吗?如果是这样,您可以毫无问题地使用
s.split('\t')。 -
它的输出“iptables -t -nvL”,