python struct unpack 格式_python – struct:unpack需要长度为16的字符串参数

在实现计算机网络课程的Traceroute时,作者遇到一个Python struct.unpack错误,提示需要长度为16的字符串参数。问题出现在解包ICMP响应数据包时。代码创建了一个ICMP请求数据包并尝试解包接收到的响应,但接收到错误。检查发现struct.calcsize()返回正确的格式字符串长度。完整的程序包括ICMP包的构建和校验和计算,以及使用原始套接字发送和接收数据包。
摘要由CSDN通过智能技术生成

对于我的计算机网络课程,我正在尝试使用带有ICMP协议的原始套接字来实现Traceroute.我需要构建一个数据包,然后使用

Python结构类解包响应数据包.以下是构建数据包的代码:

header = struct.pack("bbHHh", ICMP_ECHO_REQUEST, 0, myChecksum, pid, 1)

data = struct.pack("d", time.time())

packet = header + data

稍后,我会收到与确认相同格式的ICMP数据包.以下是解包数据包的代码:

request_code, request_type, checksum, packet_id, \

sequence, timeSent, data = struct.unpack("bbHHhd", recvPacket)

但是我收到以下错误:struct.error:unpack需要一个长度为16的字符串参数.

我不明白,因为当我检查struct.calcsize()格式字符串时,它返回16.

如果你想在你的机器上运行它,这是我的完整程序

from socket import *

import socket

import os

import sys

import struct

import time

import select

import binascii

ICMP_ECHO_REQUEST = 8

MAX_HOPS = 30

TIMEOUT = 2.0

TRIES = 2

# The packet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值