35 lines
1.1 KiB
ReStructuredText
35 lines
1.1 KiB
ReStructuredText
***********************
|
|
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)
|