我正在尝试解析运行“tcpdump -nNqt”时给出的信息。
示例输出如下所示:
IP 10.0.0.11.60446 > 10.0.0.232.22: tcp 0
IP 10.0.0.232.22 > 10.0.0.11.60446: tcp 176
IP 10.0.0.232.22 > 10.0.0.11.60446: tcp 80
到目前为止我已经能够删除:
第一个IP/第二个IP
(?<=IP\s)\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
(?<=\s>\s)\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
TCP 或 UDP/大小
(?<=:\s)(.{1,3})
(?<=tcp |udp )(\d+)
我无法解析出端口号,即 IP 末尾的最后一位数字。我的无效尝试如下所示:
(?<=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\.)\d{,6}
我的表情有什么问题吗?还有另一种我没有看到的方法吗?
最佳答案
我不知道你为什么一次只拿一个你需要的零件。你可以一次性把它们全部拿走(我也稍微折叠了你的 IP 模式):
IP (?P<IP1>(?:\d{1,3}\.){3}\d{1,3})\.(?P<Port1>\d+) > (?P<IP2>(?:\d{1,3}\.){3}\d{1,3})\.(?P<Port2>\d+): (?:tc|ud)p (?P<protocol>\d+)
import re
reg = re.compile(r"IP (?P<IP1>(?:\d{1,3}\.){3}\d{1,3})\.(?P<Port1>\d+) > (?P<IP2>(?:\d{1,3}\.){3}\d{1,3})\.(?P<Port2>\d+): (?:tc|ud)p (?P<size>\d+)")
for line in input_lines:
m = reg.match(line)
print(m.group("IP1"))
print(m.group("Port1"))
print(m.group("IP2"))
print(m.group("Port2"))
print(m.group("size"))
关于Python 正则表达式 - 从 tcpdump 解析输出端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25344145/