python-3.x - 从wireshark文本文件中提取帧号、ipv6地址和类型信息
问题描述
有没有办法从文本文件中提取特定信息?我正在尝试提取诸如帧号、ipv6 mac 地址和类型信息之类的信息,但这样做的时间很艰难。
帧 1:线上 372 字节(2976 位),在接口 0 以太网 II 上捕获 372 字节(2976 位),Src:Example_00:aa:aa (aa:00:aa:00:aa:00),Dst:IPv4mcast_7z: zz:za (zz:zz:zz:zz:zz:zz)... ... 类型:IPv4 (0x0800)
我创建了包含我希望返回字符串的方式的类元素。我还使用以下方法打开了文件:
`''蟒蛇
使用 open(infilename, 'r') 作为输入文件:
lineShark = inputfile.read()
lineStrip = lineShark.strip()
lineSplit = lineStrip.split() ''`
我将跨行整合并返回文档中的每个后续单词和数字。有没有办法搜索文件并从上面提取这些信息元素?
我试图使返回的行看起来像这样:
帧 1,Src:00:00:00:00:00:00,Dst:00:00:00:00:00:00,类型:0x0800
对 Python 非常陌生。感谢大家一直以来的帮助。
解决方案
那这个呢?
import re
def read_wireshark_file(self, file_name: str):
with open(file_name, "r") as inputfile:
for line_number, line in enumerate(inputfile.readlines(), start=1):
match = re.search(r"Frame (\d+)", line)
if not match:
print(f"Line {line_number} has no Frame.")
break
frame = match.group(1)
match = re.search(r"Src:[^(]*\(([^)]*)", line)
if not match:
print(f"Line {line_number} has no Src.")
break
src = match.group(1)
match = re.search(r"Dst:[^(]*\(([^)]*)", line)
if not match:
print(f"Line {line_number} has no Dst.")
break
dst = match.group(1)
match = re.search(r"Type:[^(]*\(([^)]*)", line)
if not match:
print(f"Line {line_number} has no Type.")
break
type_ = match.group(1)
print(f"Frame {frame}, Src:{src}, Dst:{dst}, Type:{type_}")
该模块re
代表正则表达式。有关文档,请参见此处这对于刚开始开发 Python 的人来说可能有点高级,但它允许我用几行代码编写解决方案。
要编写没有正则表达式的解决方案,您需要编写自己的解析器,这对于刚开始开发 Python 的人来说可能更加困难。
line.split()
如果输入具有相同数量的空格,则using 的解决方案可能会起作用。您必须找出框架、src、dst 和类型在哪个索引处,然后从子字符串中去除多余的字符。例如,对于框架,line.split()[1]
将是"1:"
. 你必须去掉后面的冒号1
。
拆分的问题是空格的数量可能会有所不同。例如,Ethernet II
可能是您计算机上设备的名称。在我的计算机上,我没有这样的设备,但我有一个名为 的设备Ethernet
,它少了一个空间。所以这会改变分割线后要使用的索引。
推荐阅读
- blockchain - 一个节点可以加入 Corda 中的多个业务网络吗?
- laravel - sphinx 搜索(我在 sphinx 中有一个工作数据库,每个工作都与公司相关。)
- python - 使用 Groupby 并删除包含某些特征的组
- powerbi - 了解维度表 - 最佳方法 - Power BI
- ios - 如何使用 IOS 获取 NFC 芯片的篡改状态
- c# - 依赖注入容器 - 如何获取对象的特定实例?
- plot - 如何在 Julia 中绘制 3D 高斯的时间演化?
- php - Laravel:如何防止使用同一用户帐户多次登录?
- python-3.x - 如何在下面的代码中使用 for 循环从列表中删除值?
- javascript - 鼠标悬停在fullcallendar时如何拖动事件