【发布时间】:2012-03-12 20:00:16
【问题描述】:
以下是我正在尝试编写的脚本的一部分。该脚本会打开我的 iptables 日志,日志中的每一行都包含以下示例中的详细信息。
#单行示例 #Mar 9 14:57:51 机器内核:[23780.638839] IPTABLES 拒绝 UDP:IN=p21p1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:00:00:00:00:00:00 :00 SRC=10.100.1.4 DST=10.100.1.63 LEN=78 TOS=0x00 PREC=0x00 TTL=128 ID=10898 PROTO=UDP$ # 一次读取一行文件 对于 iptables_log.readlines() 中的行: #根据 4 个字母、2 个空格、最多 2 个数字、1 个空格来查找时间,然后是标准 10:10:10 时间格式 time = re.findall('(^\w{1,4}\s\s\d{1,2}\s\d\d:\d\d:\d\d)', 行) #mac 查找 mac = re.findall('MAC=(?:\w\w:\w\w:\w\w:\w\w\:\w\w:\w\w:\w\w:\w \w:\w\w:\w\w:\w\w:\w\w:\w\w:\w\w)', 行) #源端口 src = re.findall('SRC=(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3 })\.(?:[\d]{1,3})', 行) #目的端口 dst = re.findall('DST=(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3 })\.(?:[\d]{1,3})', 行) #协议 proto = re.findall('PROTO=(?:\w{3,4})', line) #源端口 sourceport = re.findall('SPT=(?:\w{1,5})', 行) #destport destport = re.findall('DPT=(?:\w{1,5})', 行) 打印时间、mac、src、dst、proto、sourceport、destport 打印'================================================== ======'我试图让脚本只打印我想要的项目,但是当它由脚本输出时,它看起来像这样,这似乎是一个列表。我希望它在没有 [] '' 的情况下打印。在网上看,似乎每个变量(时间、mac、src 等)本身都是一个列表。我不确定如何将它们结合起来。我已经看到了加入的参考,但不知道如何在这个例子中使用它。有人可以帮忙吗?
['3 月 9 日 14:57:51'] ['MAC=ff:ff:ff:ff:ff:ff:00:00:00:00:00:00:00:00'] ['SRC=10.100. 1.4'] ['DST=10.100.1.63'] ['PROTO=UDP'] ['SPT=137'] ['DPT=137']【问题讨论】:
-
你为什么不用一个正则表达式来做这个?