network-programmingscapypacket

I don't understand what is Network Padding


I'm building an arp spoofer in Python with scapy and I have this function to send spoofed arp packets:

def arp_spoof (dest_ip, dest_mac, source_ip):
    scapy.sendp(scapy.Ether(dst=dest_mac)/ scapy.ARP(op="is-at", psrc=source_ip, hwdst=dest_mac, pdst=dest_ip)/scapy.Padding(load="X"*18),  verbose=False)

And it works perfectly.

I'm using the sendp() method, that sends packet at layer two, so in the Ether section I added the destination mac address and then in the ARP section I added all the details to perform an ARP attack.

Then I found on the Internet that adding the Padding is a good practice while working with Network packets. But I don't understand well what does it mean. I searched on the Internet and I found that a packet must be 64 bits, and if it's less you add zeros with the padding. But in this case I'm not sure what I'm doing (Am I adding X to the packet?): scapy.Padding(load="X"*18)

Can someone explain me what is Network Padding and what does the line of code above mean? Thank you


Solution

  • Network Padding: Network Padding refers to the technique of adding extra data to a packet to ensure that it aligns with certain size requirements or constraints. This can be important for a few reasons:

    1. Alignment: Many protocols or hardware require data to be aligned to certain boundaries (e.g., 4-byte or 8-byte boundaries) for efficiency reasons.

    2. Minimum Length Requirements: Some protocols have minimum length requirements for packets. Padding can be used to meet these requirements.

    3. Security and Privacy: Padding can be used to obscure the actual length of data to make it harder for attackers to infer information based on packet sizes.

    4. Protocol Specific Needs: Certain protocols may need padding to ensure that data structures are correctly aligned or to ensure that the packet meets specific protocol standards.

    Scapy Padding: Scapy is a powerful Python library used for network packet manipulation and analysis. It allows you to create, modify, and send network packets at a low level.

    In Scapy, the Padding class is used to add padding to packets. Padding can be particularly useful for manipulating packet sizes or ensuring alignment.

    The Code: scapy.Padding(load="X"*18) Here’s a breakdown of what this code does:

    scapy.Padding: This class is used to add padding to a packet. Padding adds extra bytes to the packet's payload.

    load="X"*18: This specifies the content of the padding. Here, "X"*18 creates a string consisting of 18 "X" characters. This string is then used as the payload for the padding.

    Purpose: By creating a Padding object with load="X"*18, you are effectively adding 18 bytes of padding with each byte being the ASCII character "X".