尝试解析 Python 中的数据包并努力构建合适的脚本
Trying to parse packets in Python and struggling to build a proper script
我有一个巨大的(大约 600MB)数据包捕获文件,格式如下:
[S->C][02][0x5A97BE]
[0047F32B] 95 DE 5E 52 4A F3 80 F5 47 18 97 70 10 EE 5B E5 ..^RJ...G..p..[.
7C E8 F5 B2 2F 1F 3A 6B A1 8F 6C 73 65 A6 42 27 |.../.:k..lse.B'
我的目标是减少整个事情,使其看起来像这样:
[S->C][02][0x5A97BE]
95DE5E524AF380F54718977010EE5BE57CE8F5B22F1F3A6BA18F6C7365A64227
我浏览了一些 string.split() 和正则表达式教程,但其中的 none 似乎很适合我。基本上我试图做一个 if 语句检查该行是否包含 [S->C] 或在第四个字符点有一个“>”。如果是这样,请跳过行。然后我想删除第一个 space 左侧的所有内容和双 space 右侧的所有内容(十六进制和 ascii 显示之间有一个双 space。)
我现在已经学习了大约 3 个教程,修改了它们,但无法正确解析。任何帮助都会很棒。我知道这并不难,但出于某种原因,它让我望而却步。
这是一种方法。将输入文件作为 myfun(input_file)
传递
def myfun(in_file):
header = True
# Get the meat, remove newlines.
reg1 = re.compile(r'^.{11}(.{47}).*\n')
# Remove spaces.
reg2 = re.compile(r' ')
with open(in_file) as f:
for line in f:
if header:
# Print the header.
print(line, end='')
header = False
else:
# Print the body.
print(reg2.sub('', reg1.sub('\g<1>', line)), end='')
# Append a newline.
print()
return
我有一个巨大的(大约 600MB)数据包捕获文件,格式如下:
[S->C][02][0x5A97BE]
[0047F32B] 95 DE 5E 52 4A F3 80 F5 47 18 97 70 10 EE 5B E5 ..^RJ...G..p..[.
7C E8 F5 B2 2F 1F 3A 6B A1 8F 6C 73 65 A6 42 27 |.../.:k..lse.B'
我的目标是减少整个事情,使其看起来像这样:
[S->C][02][0x5A97BE]
95DE5E524AF380F54718977010EE5BE57CE8F5B22F1F3A6BA18F6C7365A64227
我浏览了一些 string.split() 和正则表达式教程,但其中的 none 似乎很适合我。基本上我试图做一个 if 语句检查该行是否包含 [S->C] 或在第四个字符点有一个“>”。如果是这样,请跳过行。然后我想删除第一个 space 左侧的所有内容和双 space 右侧的所有内容(十六进制和 ascii 显示之间有一个双 space。)
我现在已经学习了大约 3 个教程,修改了它们,但无法正确解析。任何帮助都会很棒。我知道这并不难,但出于某种原因,它让我望而却步。
这是一种方法。将输入文件作为 myfun(input_file)
def myfun(in_file):
header = True
# Get the meat, remove newlines.
reg1 = re.compile(r'^.{11}(.{47}).*\n')
# Remove spaces.
reg2 = re.compile(r' ')
with open(in_file) as f:
for line in f:
if header:
# Print the header.
print(line, end='')
header = False
else:
# Print the body.
print(reg2.sub('', reg1.sub('\g<1>', line)), end='')
# Append a newline.
print()
return