gpt4 book ai didi

python - 如何用Python读取保存在文件中的数据包?

转载 作者:太空宇宙 更新时间:2023-11-03 18:59:24 25 4
gpt4 key购买 nike

我有一个生成 IP 数据包 header 的 C++ 代码。该代码使用一个结构体来表示数据包中的每个字段:

struct cip {
uint8_t ip_hl:4, /* both fields are 4 bytes */
ip_v:4;
uint8_t ip_tos;
uint16_t ip_len;
uint16_t ip_id;
uint16_t ip_off;
uint8_t ip_ttl;
uint8_t ip_p;
uint16_t ip_sum;
struct in_addr ip_src;
struct in_addr ip_dst;
char head[100];
};

系统会提示用户输入消息以输入结构中每个变量的值:

Enter the filename to save the packet: packet

Enter IP version(0-15): 4

Enter Header Length(5-15): 5

Enter type of service(0-255): 55

Enter packet total size(bytes, 20, 200): 25

数据包已创建并保存在文件中:

FILE* f = fopen(file, "w");
int success = fwrite(&packet, sizeof(char), ((unsigned int)packet.ip_hl)*4,f);
if(success <= 0) {
printf("Error writing packet header");
}
success = fwrite(&data, sizeof(char),ntohs(packet.ip_len)-(4*packet.ip_hl),f);
if(success < 0) {
printf("Error writing packet data");
}
fflush(f);
fclose(f);
printf("\nPacket Written.\n");

我没有创建此代码,有人给了我代码,以便我可以在 Python 中创建其他程序来验证上述程序创建的数据包。验证包括验证数据包生成的校验和、Ip 数据包的版本、协议(protocol)、 header 长度等。

所以我想知道是否有人可以帮助我弄清楚如何读取文件并解析框架。我尝试将文件中的行作为字符串读取,但我遇到的问题是文件在创建后看起来像这样:(它不可读)

O È ,@ šÀ¨À¨ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxDATA_______________________DATA____________ ô·

我不明白为什么:(我猜测这是因为大于1字节的变量被函数“htons”转换为大端:

printf("\nEnter ip ID number(0-65535):\n");
scanf("%d", &input);
packet.ip_id = htons(input);

我试图寻找另一个选项来处理这个问题socket.makefile(),但这将帮助我将程序中的套接字作为文件,但我需要做的是解析这个文件中给我的帧.

有什么想法吗?

谢谢。

P.S.:还有人可以给我一个链接,我可以在其中找到如何在 Python 中将整数从大端转换为小端,反之亦然。谢谢!

最佳答案

您应该照常读取文件(为 Windows 指定“二进制”模式):

with open("test.txt", 'br') as f:
for line in f.readlines():
# process lines

要解压二进制数据,您应该使用 struct包,也可以处理 big and little endian等等。您的结构示例:

print struct.unpack('BBHHHBBH100s', line)

我省略了 ip_srcip_dst 解包,因为您没有指定其结构的内容。读取的最小可能值是一个字节,因此要将第一个字段分成两部分,您可以使用:

(ip_hl, ip_v) = (value >> 4, value & 15)

当然,8位组件的顺序取决于你的结构字节序。

关于python - 如何用Python读取保存在文件中的数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16392936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com