You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从包含指定十六进制字符串的PCAP文件中提取IP地址

提取包含指定十六进制字符串的数据包IP地址列表

要实现你的需求,我们可以结合tcpdump的数据包过滤能力和awk的文本处理能力,一次性完成过滤和IP提取,比你之前重复执行tcpdump的方案更高效。

最终命令

tcpdump -n -r m.pcap '(ether[0:] contains |AF0DFT5F14|) or (ether[0:] contains |AF0DFT5F25|) or (ether[0:] contains |AF0DFT5F45|)' | \
awk '/IP/ {
    # 提取源IP(tcpdump输出中第3个字段,格式为IP:端口)
    split($3, src_parts, ".");
    print src_parts[1]"."src_parts[2]"."src_parts[3]"."src_parts[4];
    # 提取目的IP(tcpdump输出中第5个字段,格式为IP:端口)
    split($5, dst_parts, ".");
    print dst_parts[1]"."dst_parts[2]"."dst_parts[3]"."dst_parts[4];
}' | sort -u

命令细节解释

  1. tcpdump过滤环节:

    • -n:禁用域名解析,直接显示IP地址,避免额外的解析耗时
    • -r m.pcap:指定读取目标PCAP文件
    • 过滤表达式(ether[0:] contains |XX|) or ...:匹配包含任意指定十六进制字符串的数据包,ether[0:]表示从以太网帧开头开始,匹配整个数据包的内容
  2. awk文本处理环节:

    • /IP/:只处理包含"IP"关键字的行(也就是IP数据包的输出行)
    • split():将带端口的IP字符串(比如192.168.1.1.1234)按.分割成数组,取前4个元素拼接成纯IP地址
    • 分别打印源IP和目的IP,确保两种方向的IP都被收集
  3. sort -u:对所有收集到的IP地址排序并去重,最终得到唯一的IP列表

关键注意点

你提供的十六进制字符串中包含字母T,但合法的十六进制字符只有0-9和A-F/a-f,这大概率是笔误(比如是不是AF0D75F14这类正确的十六进制值?)。如果不修正这个问题,tcpdump会无法识别该匹配模式,导致过滤结果为空,请先确认你的目标十六进制字符串是否正确。

内容的提问来源于stack exchange,提问作者Am3Y

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 13:02:42