一直致力于解析iptables输出,以获取每个源IP使用python的统计信息。不想包含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']
OR是否有更好的从iptables获取统计数据,但没有iptc?
答案 0 :(得分:1)
不能保证iptables输出的所有列都会被多个空格分隔。它只是保证至少有一个空间。以下是该命令输出的片段(当在我的一台机器上运行时),你可以看到发生这种情况:
$> iptables -nvL
...
0 0 ACCEPT all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0
...
幸运的是,前9列中的值不会有任何空格。因此,您可以为每一行执行以下操作,以便以您希望的方式获取数据:
fs = s.split()
if len(fs) > 9:
fs[9] = " ".join(fs[9:])
fs = fs[:10]