"""Traffic script for IPv4 sweep ping."""
-import sys
import logging
import os
+import sys
+
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue,\
- auto_pad, create_gratuitous_arp_request
+from resources.libraries.python.PacketVerifier import RxQueue, TxQueue, \
+ 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
# send ICMP echo request with incremented data length and receive ICMP
# echo reply
- for echo_seq in range(start_size, end_size+1, step):
- pkt_send = auto_pad(Ether(src=src_mac, dst=dst_mac) /
- IP(src=src_ip, dst=dst_ip) /
- ICMP(id=echo_id, seq=echo_seq) /
- Raw(load=data[0:echo_seq]))
+ for echo_seq in range(start_size, end_size + 1, step):
+ pkt_send = (Ether(src=src_mac, dst=dst_mac) /
+ IP(src=src_ip, dst=dst_ip) /
+ ICMP(id=echo_id, seq=echo_seq) /
+ Raw(load=data[0:echo_seq]))
sent_packets.append(pkt_send)
txq.send(pkt_send)
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')
+ sent_packets.remove(pkt_send)
+
sys.exit(0)
+
if __name__ == "__main__":
main()