python - लापरवाह और टीसीपीआरप्ले: प्रदर्शन के लिए बाईपास अस्थायी फाइल



networking pcap (1)

अस्थायी फ़ाइल से बचने या नहीं, यह सुनिश्चित करने के लिए पर्याप्त होगा, लेकिन फिर भी, यहां एक तरीका है:

#! /usr/bin/env python

from scapy.all import *

def pkt2pcap(p):
        sec = int(p.time)
        usec = int(round((p.time-sec)*1000000))
        s = str(p)
        caplen = len(s)
        return struct.pack("IIII", sec, usec, caplen, caplen) + s

# adapted from Scapy's sendpfast
def mysendpfast(x, pps=None, mbps=None, realtime=None, loop=0, file_cache=False, iface=None):
    """Send packets at layer 2 using tcpreplay for performance
    pps:  packets per second
    mpbs: MBits per second
    realtime: use packet's timestamp, bending time with realtime value
    loop: number of times to process the packet list
    file_cache: cache packets in RAM instead of reading from disk at each iteration
    iface: output interface """
    if iface is None:
        iface = conf.iface
    argv = [conf.prog.tcpreplay, "--intf1=%s" % iface ]
    if pps is not None:
        argv.append("--pps=%i" % pps)
    elif mbps is not None:
        argv.append("--mbps=%i" % mbps)
    elif realtime is not None:
        argv.append("--multiplier=%i" % realtime)
    else:
        argv.append("--topspeed")
    if loop:
        argv.append("--loop=%i" % loop)
        if file_cache:
            argv.append("--enable-file-cache")
    argv.append("-")
    try:
        f = subprocess.Popen(argv, stdin=subprocess.PIPE)
        # PCAP header
        p = x.next()
        f.stdin.write(struct.pack("IHHIIII", 0xa1b2c3d4L,
                                  2, 4, 0, 0, MTU,
                                  conf.l2types[p.__class__]))
        # Let's send
        f.stdin.write(pkt2pcap(p))
        for p in x:
            f.stdin.write(pkt2pcap(p))
        f.stdin.close()
        f.communicate()
    except KeyboardInterrupt:
        log_interactive.info("Interrupted by user")
    except Exception,e:
        log_interactive.error("while trying to exec [%s]: %s" % (argv[0],e))

https://code.i-harness.com

sendpfast में एक sendpfast कार्य है जो टीसीपीआरपीएप का इस्तेमाल करते हुए पैकेट भेजता है। हालांकि, यह फ़ंक्शन पहले एक अस्थायी पीपीएपी फ़ाइल बनाता है और उसके बाद उस पर टेक्रिपलेप कॉल करता है। यह बहुत अधिक देरी जोड़ता है वैसे भी इसे बायपास करने के लिए और सीधे टीसीपीआरपीएप को डेटा भेजते हैं। मुझे पता है कि टीसीपीआरपीपी एसटीडीआईएन से डेटा पढ़ सकते हैं।

संदर्भ: मैं हर दूसरे से बड़ा ट्रैफ़िक (अलग एसआईपीआईपी के साथ) उत्पन्न करना चाहता हूं और उसे नेटवर्क के माध्यम से भेजना चाहता हूं। एक विकल्प एक विशाल पीएपीपी फ़ाइल में टाइमस्टैम्प के साथ सभी ट्रैफ़िक को बचाने और टीसीपीआरपी चलाने के लिए है। दूसरा विकल्प डेटा भेजने के लिए हर दूसरे है





network-traffic