Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

checksum() example added in doc #691

merged 1 commit into from Jul 4, 2017
Changes from all commits
File filter...
Filter file types
Jump to…
Jump to file or symbol
Failed to load files and symbols.
+41 −0
Diff settings


Just for now

checksum() example added in doc

  • Loading branch information...
Guillaume Valadon
Guillaume Valadon committed Jun 27, 2017
commit 10210cbe4ba2b1173c8eb3511cad1e296c696edd
Copy path View file
@@ -0,0 +1,40 @@
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="", src="")/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="", src="")/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))
Copy path View file
@@ -21,6 +21,7 @@ This document is under a `Creative Commons Attribution - Non-Commercial

ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.