Python 正则表达式 - 从 tcpdump 解析输出端口

标签 python regex port tcpdump

我正在尝试解析运行“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+)

regex101 demo

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/

相关文章:

python - 内置不可变类型的子类友好版本?

python - OpenCV+Python : Firewire Cams not supported on Windows XP?

java - 使用正则表达式将 SGML 转换为 XML?

netbeans - 如何使用默认设置清除Glassfish 4.0的地址?

python - 创建切片数据帧列表

python - 无法从以下 html 代码打印出 [0] 数据

子目录中的 PHP 脚本在调用时自动请求根目录中的相同脚本

mysql - MySQL 中的 PREG_REPLACE 和 PREG_REPLACE_EVAL

android - 有什么工具可以将Iphone本地化的字符串文件转换成可以在Android中使用的字符串资源文件吗?

ruby-on-rails - 在 3000 端口主机提供的 IP 上绑定(bind) rails app