Calling Scapy functions

This section provides some examples that show how to benefit from Scapy functions in your own code.

UDP checksum

The following example explains howto use the checksum() function to compute and UDP checksum manually. The following steps must be performed:

  1. compute the UDP pseudo header as described in RFC768
  2. build an UDP packet with Scapy with p[UDP].chksum=0
  3. call checksum() with the pseudo header and the UDP packet
from scapy.all import *

# Get the UDP checksum computed by Scapy
packet = IP(dst="10.11.12.13", src="10.11.12.14")/UDP()/DNS()
packet = IP(raw(packet))  # Build packet (automatically done when sending)
checksum_scapy = packet[UDP].chksum

# Set the UDP checksum to 0 and compute the checksum 'manually'
packet = IP(dst="10.11.12.13", src="10.11.12.14")/UDP(chksum=0)/DNS()
packet_raw = raw(packet)
udp_raw = packet_raw[20:]
# in4_chksum is used to automatically build a pseudo-header
chksum = in4_chksum(socket.IPPROTO_UDP, packet[IP], udp_raw)  # For more infos, call "help(in4_chksum)"

assert(checksum_scapy == chksum)