How to send multiple packets in scapy

user53029 picture user53029 · Dec 23, 2015 · Viewed 10.2k times · Source

I am aware this has been asked before. However I am unclear on how to construct the command in order to accomplish my task and the previous question was never marked as answered. I need to send multiple packets with scapy and my use case is to send DNS queries to a remote server server using UDP. This is the command that I need to use:

sr1(IP(dst="192.168.155.128")/UDP()/DNS(rd=1,qd=DNSQR(qname="www.oreilly.com")))

In the above example sr1 means send a packet at layer 3 but there are more function definitions to send packets. See Here. The remaining parts in between the braces is how to assemble a DNS query packet with scapy for an A record.

But what I want to do is send more than one packet in a single command. The previous question had a suggested answer of this:

sendp(p, iface=eth0, inter=1 , count=x )

Where p is your packet or a list of packets and count is the number of times to repeat the send operation.

This is where I am lost. If this is the correct answer, how would I integrate that into my command and what would it look like?

Thanks in advance!

Answer

user53029 picture user53029 · Dec 23, 2015

Working solution: In the above example you will need to use a different function definition to send the packets.

Replace sendp with send, (sendp sends at layer2, send uses layer 3, and sr1 is designed to send only one packet) and place " , count=x" in between the last two closing braces. Where x = the number of packets you want to send. Running from the scapy prompt the command and output should look like this:

>>> send(IP(dst="192.168.155.128")/UDP()/DNS(rd=1,qd=DNSQR(qname="www.oreilly.com")), count=100 )
.......................................................................    .............................
Sent 100 packets.
>>> 

A simple ICMP packet can also be sent can also be constructed. In this example we are sending 100 ICMP packets.

>>> send(IP(dst="192.168.155.128")/ICMP()/"testICMPpacket", count=100 )
   .......................................................................    .............................
Sent 100 packets.
>>>