Skip to content
Snippets Groups Projects
Commit 10210cbe authored by Guillaume Valadon's avatar Guillaume Valadon
Browse files

checksum() example added in doc

parent 58a985f1
Branches
No related tags found
No related merge requests found
***********************
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 *
def pseudo_header(ip_src, ip_dst, ip_proto, length):
"""
Return a pseudo header according to RFC768
"""
# Prepare the binary representation of the pseudo header
return struct.pack("!4s4sHH", inet_aton(ip_src), inet_aton(ip_dst), ip_proto, length)
# Get the UDP checksum computed by Scapy
packet = IP(dst="10.11.12.13", src="10.11.12.14")/UDP()/DNS()
packet_raw = str(packet)
checksum_scapy = IP(packet_raw)[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 = str(packet)
udp_raw = packet_raw[20:]
phdr = pseudo_header(packet.src, packet.dst, socket.IPPROTO_UDP, len(udp_raw))
assert(checksum_scapy == checksum(phdr + udp_raw))
...@@ -21,6 +21,7 @@ This document is under a `Creative Commons Attribution - Non-Commercial ...@@ -21,6 +21,7 @@ This document is under a `Creative Commons Attribution - Non-Commercial
advanced_usage advanced_usage
extending extending
build_dissect build_dissect
functions
troubleshooting troubleshooting
development development
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment