python - 如何从字符串(Wireshark 输出)中提取某些子字符串(IP 地址)?

标签 python regex string wireshark

我正在逐行读取文本文件中 wireshark 转储的内容。我可以轻松挑选出的一件事是 wireshark 输出的特定行中使用的协议(protocol)(如下面的代码所示)。我遇到的问题是从线路中提取 ip 地址。正如您在下面的示例输出和我的代码中所看到的,提取协议(protocol)相当容易,因为它总是大写并且两边都有一个空格。但是,IP 地址并不统一,我也不太确定如何将它们拉出来。这主要是因为我不太确定 re.match() 的所有部分是如何工作的。有人可以帮我解决这个问题,并可能解释一下 re.match() 参数是如何工作的吗?

file = open('tcpdump.txt', 'r');
     for line in file:
          matchObj = re.match(r'(.*) TCP (.*?) .*', line, re.M)

示例 Wireshark 输出:

604 1820.381625 10.200.59.77 -> 114.113.226.43 TCP 54 ssh > 47820 [FIN, ACK] Seq=1848 Ack=522 Win=16616 Len=0

最佳答案

第一个正则表达式组是 greedy (.*) 并且匹配所有内容,您可以通过添加 使其成为 non-greedy >?,即:

file = open('tcpdump.txt', 'r');
     for line in file:
          matchObj = re.match(r"->\s(.*?)\s(\w+)\s(.*?)\s", line, re.M)

上面的例子将捕获包含远程地址114.113.226.43、协议(protocol)TCP和端口54的3组分别。


Regex101 Demo

关于python - 如何从字符串(Wireshark 输出)中提取某些子字符串(IP 地址)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36928007/

相关文章:

python - BashOperator 不运行 bash 文件 apache Airflow

regex - Perl:如何使用起始字符提取所需的字符串但还需要包含它们?

php - 在PHP中使用正则表达式匹配同一个句子中相同的单词组合

c - 用 char *p 定义字符串是正确的;然后再赋值?

java - 与 python psycopg2 相比,使用 clojure jdbc 将文件记录插入 postgres db 需要很长时间

python - 如何从 S3 加载 pickle 文件以在 AWS Lambda 中使用?

python - Sqlalchemy 在多个表上使用 func 和 outerjoin

javascript - 如何在 Firefox 中使用 javascript 正则表达式替换 href?

java - 在碧 Jade 报告中将字符串格式化为货币格式

java - 如何在数组字符串中搜索非字母字符?