import os
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from resources.libraries.python.PacketVerifier import RxQueue, TxQueue,\
- auto_pad, create_gratuitous_arp_request
+ auto_pad, create_gratuitous_arp_request, checksum_equal
from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
from scapy.layers.inet import IP, ICMP
from scapy.all import Ether, Raw
if icmpv4.id != echo_id or icmpv4.seq != echo_seq:
raise RuntimeError(
- 'Invalid ICMP echo reply received ID {0} seq {1} should be ' +
+ 'Invalid ICMP echo reply received ID {0} seq {1} should be ' \
'ID {2} seq {3}, {0}'.format(icmpv4.id, icmpv4.seq, echo_id,
echo_seq))
chksum = icmpv4.chksum
del icmpv4.chksum
tmp = ICMP(str(icmpv4))
- if tmp.chksum != chksum:
+ if not checksum_equal(tmp.chksum, chksum):
raise RuntimeError(
'Invalid checksum {0} should be {1}'.format(chksum, tmp.chksum))
- recv_payload_len = ipv4.len - 20 - 8
- load = tmp['Raw'].load[0:recv_payload_len]
+
+ if 'Raw' in icmpv4:
+ load = icmpv4['Raw'].load
+ else:
+ load = []
if load != data[0:echo_seq]:
raise RuntimeError(
'Received ICMP payload does not match sent payload')