我试图解析运行"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}\bTCP或UDP / Size
(?<=:\s)(.{1,3})
(?<=tcp |udp )(\d+)我无法解析端口号,这些端口号是IP末尾的最后一个数字。我的不工作尝试是这样的:
(?<=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\.)\d{,6}我的表情怎么了?还有其他我看不到的方法吗?
发布于 2014-08-16 21:46:16
我不知道你为什么每次拿你需要的零件。你可以一次把它们都拿走(我还把你的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演示
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"))发布于 2014-08-16 21:38:39
为什么不用一个正则表达式来解析整个事件呢?使用组,您仍然可以分离不同的部分。例如:
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"))下面是是一个很好的网站,可以测试正则表达式,如果需要的话。
发布于 2014-08-16 21:39:58
试试这个正则表达式
/^.*?(\d+\.\d+\.\d+\.\d+).*?(\d+\.\d+\.\d+\.\d+).*?([a-z]+)\s(\d+)$/g 演示
https://stackoverflow.com/questions/25344145
复制相似问题