用Python提取包头
我不熟悉Python和stackoverflow,非常新 我想提取目标端口:用Python提取包头,python,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 我希望使用python正则表达式检索每行的目标端口:“0”、“2629”、“2633”,并忽略其余的端口(出现在“>”之后和“[”之前的数字
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
我希望使用python正则表达式检索每行的目标端口:“0”、“2629”、“2633”,并忽略其余的端口(出现在“>”之后和“[”之前的数字)
re.findall("\d\d\d\d\d|\d\d\d\d|\d\d\d|\d\d|\d", str)
但这是一个非常通用的正则表达式。对于这种情况,最好的正则表达式是什么?对于这种特定情况,您可以使用string上的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']
您可以使用这样的正则表达式:
dff=io.StringIO("""2629 > 0 [SYN] Seq=0 Win=512 Len=100
0 > 2629 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
0 > 2622 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
0 > 2633 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0""")
dff.seek(0)
for line in dff:
print(re.search('(^\d+\s+\>\s+)(\d+)', line).groups()[1])
您正在尝试解析某个程序的输出。为什么不直接用Python捕获数据包?例如,如果您有字符串,则使用空格拆分它,并获得第三个元素
line.split(“”)[2]