首页 > 解决方案 > 使用 Python 提取数据包头

问题描述

我是 Python 和 stackoverflow 的新手,非常新。

我想提取目标端口:

2629  >  0 [SYN] Seq=0 Win=512 Len=100
0  >  2629 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
0  >  2633 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0

我想检索每一行的目标端口:'0'、'2629'、'2633' 使用 python 正则表达式并忽略其余部分(出现在 '>' 之后和 '[' 之前的数字。

re.findall("\d\d\d\d\d|\d\d\d\d|\d\d\d|\d\d|\d", str)

但这是非常通用的。这种情况下最好的正则表达式是什么?

标签: python

解决方案


对于这种特定情况,您可以在字符串上使用 split 函数。一个快速的实施将是:

dest_ports = []
lines = [
    "2629  >  0 [SYN] Seq=0 Win=512 Len=100", 
    "0  >  2629 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0", 
    "0  >  2633 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0"
]

for line in lines:
  dest_ports.append(line.split('>  ')[1].split(' [')[0])

这将产生答案:

dest_ports = ['0', '2629', 2633']


推荐阅读