***********************
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)
