added action_profile example
This commit is contained in:
59
examples/action_profile/send_and_count.py
Normal file
59
examples/action_profile/send_and_count.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from scapy.all import *
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
|
||||
|
||||
big_lock = threading.Lock()
|
||||
counts = {}
|
||||
|
||||
|
||||
class Receiver(threading.Thread):
|
||||
def __init__(self, port, veth):
|
||||
threading.Thread.__init__(self)
|
||||
self.daemon = True
|
||||
self.port = port
|
||||
self.veth = veth
|
||||
|
||||
def received(self, p):
|
||||
# no need for a lock, each thread is accessing a different key, and the
|
||||
# dictionary itself is not modified
|
||||
counts[self.port] += 1
|
||||
|
||||
def run(self):
|
||||
sniff(iface=self.veth, prn=lambda x: self.received(x))
|
||||
|
||||
|
||||
def main():
|
||||
try:
|
||||
num_packets = int(sys.argv[1])
|
||||
except:
|
||||
num_packets = 200
|
||||
print "Sending", num_packets, "packets on port 0"
|
||||
|
||||
port_map = {
|
||||
1: "veth3",
|
||||
2: "veth5",
|
||||
3: "veth7",
|
||||
4: "veth9"
|
||||
}
|
||||
|
||||
for port in port_map:
|
||||
counts[port] = 0
|
||||
for port, veth in port_map.items():
|
||||
Receiver(port, veth).start()
|
||||
|
||||
for i in xrange(num_packets):
|
||||
src = "11.0.%d.%d" % (i >> 256, i % 256)
|
||||
p = Ether(src="aa:aa:aa:aa:aa:aa") / IP(dst="10.0.0.1", src=src) / TCP() / "aaaaaaaaaaaaaaaaaaa"
|
||||
sendp(p, iface="veth1", verbose=0)
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
for port in port_map:
|
||||
print "port {0}: {1} packets ({2}%)".format(
|
||||
port, counts[port], (100 * counts[port]) / num_packets
|
||||
)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user