首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python正则表达式-从tcpdump解析端口

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

Stack Overflow用户
提问于 2014-08-16 21:26:25
回答 3查看 2K关注 0票数 1

我试图解析运行"tcpdump -nNqt“时给出的信息。

示例输出如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
(?<=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 / Size

代码语言:javascript
复制
(?<=:\s)(.{1,3})
(?<=tcp |udp )(\d+)

我无法解析端口号,这些端口号是IP末尾的最后一个数字。我的不工作尝试是这样的:

代码语言:javascript
复制
(?<=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\.)\d{,6}

我的表情怎么了?还有其他我看不到的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-16 21:46:16

我不知道你为什么每次拿你需要的零件。你可以一次把它们都拿走(我还把你的IP模式缩小了一点):

代码语言:javascript
复制
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演示

代码语言:javascript
复制
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"))
票数 2
EN

Stack Overflow用户

发布于 2014-08-16 21:38:39

为什么不用一个正则表达式来解析整个事件呢?使用组,您仍然可以分离不同的部分。例如:

代码语言:javascript
复制
import re

regex_string = r'IP (?P<first_ip>\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}.\d+) > (?P<second_ip>\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}.\d+): (?P<protocol>tcp|udp) (?P<port_num>\d{1,5})'
ip_regex = re.compile(regex_string)

#info contains the output of tcpdump
for match in ip_regex.finditer(info):
    print(match.group("first_ip"))
    print(match.group("second_ip"))
    print(match.group("protocol"))
    print(match.group("port_num"))

下面是是一个很好的网站,可以测试正则表达式,如果需要的话。

票数 0
EN

Stack Overflow用户

发布于 2014-08-16 21:39:58

试试这个正则表达式

代码语言:javascript
复制
/^.*?(\d+\.\d+\.\d+\.\d+).*?(\d+\.\d+\.\d+\.\d+).*?([a-z]+)\s(\d+)$/g   

演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25344145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档