commit 129af471c931245c590c96319fcd4f8ca3b6f8ed from: Sergey Bronnikov date: Fri Nov 24 15:42:36 2017 UTC add tcpdump regression tests commit - 05318df6523d79d06c245ba86c817626117b4288 commit + 129af471c931245c590c96319fcd4f8ca3b6f8ed blob - /dev/null blob + ad09209b00820a054c74cd24e977e8030645cb55 (mode 644) --- /dev/null +++ tests/tcpdump-regress/Makefile @@ -0,0 +1,48 @@ +ARGS != cd ${.CURDIR} && ls proto_*.py +TARGETS ?= ${ARGS} +REGRESS_TARGETS = ${TARGETS:S/^/run-regress-/} +CLEANFILES += *.log + +.for a in ${ARGS} +run-regress-$a: $a + @echo '\n======== $@ ========' + SUDO=${SUDO} python $a +.endfor + +.include + +# TODO: +# +# 802_11 +# atalk +# atm +# cnfp +# decnet +# dvmrp +# enc +# fddi +# frag6 +# iapp +# igrp +# ip6 +# ip6opts +# ipsec +# ipx +# isoclns +# krb +# lwres +# netbios +# nfs +# null +# ofp +# ospf6 +# pflog +# pfsync +# pim +# rt6 +# sl +# slow +# sunrpc +# timed +# udpencap +# wb blob - /dev/null blob + 8c48e1e72d2b201621c8ce4fbf6401f734150e96 (mode 644) --- /dev/null +++ tests/tcpdump-regress/helper.py @@ -0,0 +1,48 @@ +#/usr/local/bin/env python + +import subprocess as sub +import logging +import time +import os +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +# sudo modprobe dummy +# sudo ip link set name eth10 dev dummy0 +# ip link show eth10 +# ip link set dev eth10 up + +DEF_IFACE = 'em0' + +def chck(pkt, re_output, debug=False): + + #if os.getuid() != 0: + # print "root priveleges is required" + # exit(1) + + #if isinstance(pkt, list): + # packet_count = len(pkt) + #else: + # packet_count = 1 + + pcap_name = 'sample.pcap' + + wrpcap(pcap_name, pkt) + tcpdump_cmd = [ 'doas', 'tcpdump', '-r', pcap_name ] + # tcpdump_cmd = [ 'doas', 'tcpdump', '-i', DEF_IFACE, '-c', str(packet_count) ] + p = sub.Popen(tcpdump_cmd, stdout=sub.PIPE, stderr=sub.PIPE) + + while True: + if p.poll() is None: + break + + # time.sleep(2) + # send(pkt, iface=DEF_IFACE, verbose=1) + + if debug: + pkt.show() + print p.communicate()[0] + p.wait() + + os.remove(pcap_name) blob - /dev/null blob + 37d5dad32cc74353a97ed7b849f670e12974559f (mode 644) Binary files /dev/null and tests/tcpdump-regress/helper.pyc differ blob - /dev/null blob + 185de9b3104c9b4f1871be8cc234c93ccfe40543 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_arp.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "arp" + packet = ARP(op=ARP.who_has, psrc='192.168.1.2', pdst='192.168.1.1') + re_output = "" + helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + 332ff1981250170b545f7a2ff71c1b5928347733 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_bgp.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + # https://github.com/secdev/Scapy/blob/master/scapy/contrib/bgp.py + print "bgp" + #packet = IP()/TCP()/BGPUpdate() + #re_output = "" + #helper.chck(packet, re_output) + +if __name__ == "__main__": + main() blob - /dev/null blob + b8df1f088715265dd58c7c6ccbc04dc8be718615 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_carp.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + # https://github.com/secdev/Scapy/blob/master/scapy/contrib/carp.py + print "carp" + #packet = CARP() + #re_output = "" + #helper.chck(packet, re_output) + +if __name__ == "__main__": + main() blob - /dev/null blob + 60e3f267845c0d84a8444ec7e2c4d2875ad65560 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_cdp.py @@ -0,0 +1,19 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + # https://github.com/secdev/Scapy/blob/master/scapy/contrib/cdp.py + print "cdp" + #packet = CDP() + #re_output = "" + #helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + 34c54e1c9fb8b61f69664f06bd90c095747304a2 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_dhcp6.py @@ -0,0 +1,17 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "dhcp6" + packet = DHCP(options=[("message-type", "discover"), "end"]) + re_output = "" + helper.chck(packet, re_output) + +if __name__ == "__main__": + main() blob - /dev/null blob + 57b28ab1867da6e0f8f21ccc45fa4ab0e293a187 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_domain.py @@ -0,0 +1,24 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + + +def main(): + + print "domain" + packet = IP() / UDP(dport=53) / DNS(qd=DNSQR(qname="google.com")) + re_output = "" + helper.chck(packet, re_output) + + packet = TCP(dport=53) + re_output = "" + helper.chck(packet, re_output) + + +if __name__ == "__main__": + + main() blob - /dev/null blob + 8734e0a902ad9144c9ad82c64388627017788c71 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_ether.py @@ -0,0 +1,17 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "ether" + packet = Ether() + re_output = "" + helper.chck(packet, re_output) + +if __name__ == "__main__": + main() blob - /dev/null blob + d608bf90b0bc61a9526a88608f722658b6bc3743 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_etherip.py @@ -0,0 +1,19 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + # https://github.com/secdev/Scapy/blob/master/scapy/contrib/etherip.py + print "etherip" + #packet = EtherIP() + #re_output = "" + #helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + 516d4d3f03460308e05af82c7213f1376db34c97 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_gre.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "gre" + packet = GRE() + re_output = "" + helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + b6bdf9402c67744bd22995fe5b5c105ee2895d08 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_gtp.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + # https://github.com/secdev/scapy/blob/master/scapy/contrib/gtp.py + print "gtp" + #packet = GTP() + #re_output = "" + #helper.chck(packet, re_output) + +if __name__ == "__main__": + main() blob - /dev/null blob + df4b9648e45a650fe66d2b2a47fd8ca582fe9fb2 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_hsrp.py @@ -0,0 +1,21 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "hsrp" + #packet = Ether(src="00:0C:07:AC:02", dst="00:5E:00:00:02") / + # IP(dst="224.0.0.2", src='attacerIP', ttl=1) / + # UDP() / + # HSRP(priority=230, virtualIP='virtualIP') + #re_output = "" + #helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + fbfa23e9afc8b6732e293ec03509cade6234c3b8 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_icmp.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "icmp" + packet = IP(dst="192.168.1.1", ttl=128) / ICMP() + re_output = "" + tcpdump_opt = "-v ip and 'ip[8]>128'" + helper.chck(packet, re_output, debug=True) + +if __name__ == "__main__": + main() blob - /dev/null blob + f6829c2e6ac38ce24102fe3827b31036c8805911 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_icmp6.py @@ -0,0 +1,17 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "icmp6" + packet = ICMPv6EchoRequest() + re_output = "" + helper.chck(packet, re_output) + +if __name__ == "__main__": + main() blob - /dev/null blob + f007e09ccfcacacc55d5788bb51a607a4ebec7cc (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_ike.py @@ -0,0 +1,19 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + # https://github.com/secdev/Scapy/blob/master/scapy/contrib/ikev2.py + print "ike" + #packet = IKEv2() + #re_output = "" + #helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + 5ef402444585c3da8d30e2528541586424d0a4d2 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_ip.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "ip" + packet = IP() + re_output = "" + helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + d6ab3afc2493709b15903ee946376329b9f7c13f (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_l2tp.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "l2tp" + packet = L2TP() + re_output = "" + helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + 1083717429bc6fbb6875ec389f7bf2142e16eef9 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_llc.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "llc" + packet = LLC() + re_output = "" + helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + c04d05a083370e6226c228ab63cd7f4c147a200e (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_lldp.py @@ -0,0 +1,20 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + # https://github.com/secdev/scapy/blob/master/scapy/contrib/lldp.py + #load_contrib('lldp') + print "lldp" + #packet = LLDP() + #re_output = "" + #chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + 5890029678bb9a7a7ea5e8ec0bec3347865339d5 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_mpls.py @@ -0,0 +1,19 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + # https://github.com/secdev/scapy/blob/master/scapy/contrib/mpls.py + print "mpls" + #packet = MPLS() + #re_output = "" + #chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + e36adb59fa40fc2f54d2987a07eb618260c20817 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_ntp.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "ntp" + packet = IP()/UDP(dport=123)/Raw(load=str("\x17\x00\x03\x2a") + str("\x00")*4) + re_output = "" + helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + ca0577301a996e0a0cf25e61d70bfb6f6797cf99 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_ospf.py @@ -0,0 +1,20 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + # https://github.com/secdev/scapy/blob/master/scapy/contrib/ospf.py + #load_contrib('ospf') + print "ospf" + #packet = OSPF() + #re_output = "" + #helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + 5aa68c12c10a681c357f7d5d37fee42c88804bdb (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_ppp.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "ppp" + packet = PPP() + re_output = "" + helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + 8c14b595c34ff1b4f2fa3158f9dcb15b17633c1a (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_radius.py @@ -0,0 +1,17 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "radius" + #packet = Radius() + #re_output = "" + #helper.chck(packet, re_output) + +if __name__ == "__main__": + main() blob - /dev/null blob + 092db08fb095a5665e935a5f347b56e7489f069f (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_raw.py @@ -0,0 +1,19 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "raw" + packet = Raw() + re_output = "" + helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() + blob - /dev/null blob + 15f0527a909bc8c196467445dae33d0f7e28f680 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_rip.py @@ -0,0 +1,19 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "rip" + packet = RIP() + re_output = "" + helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() + blob - /dev/null blob + 333ce647769aa6bd5bfbe788575887def9363264 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_ripng.py @@ -0,0 +1,19 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + # https://github.com/secdev/Scapy/blob/master/scapy/contrib/ripng.py + print "ripng" + #packet = RIPNG() + #re_output = "" + #helper.chck(packet, re_output) + +if __name__ == "__main__": + main() + blob - /dev/null blob + d0f9f34d8f432c1eefc13c3c424e558d37fcbfb0 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_snmp.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "snmp" + packet = UDP(sport=161) / SNMP(community="private", PDU="") + re_output = "" + helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + fd80afd6e645cd0c2e4c554864bd01d4fcddf362 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_stp.py @@ -0,0 +1,17 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "stp" + packet = STP() + re_output = "" + helper.chck(packet, re_output) + +if __name__ == "__main__": + main() blob - /dev/null blob + 79777ef20284ba873256b55c76e034e2459c76fa (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_tcp.py @@ -0,0 +1,17 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "tcp" + packet = TCP() + re_output = "" + helper.chck(packet, re_output) + +if __name__ == "__main__": + main() blob - /dev/null blob + 7b008358a0135fb0a8334116fddab112e9dd8409 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_tftp.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "tftp" + packet = IP()/UDP()/TFTP()/TFTP_DATA(block=0) + re_output = "" + helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + ff6ab54f228994704052a3cfb46fa6bd2537e580 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_udp.py @@ -0,0 +1,17 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "udp" + packet = UDP() + re_output = "" + helper.chck(packet, re_output) + +if __name__ == "__main__": + main() blob - /dev/null blob + a26cf19181186407419833f0ff81ec2890943bcc (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_vqp.py @@ -0,0 +1,20 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + # vqp + # https://github.com/secdev/scapy/blob/master/scapy/contrib/vqp.py + print "vqp" + #packet = VQP() + #re_output = "" + #helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + 7d5217c3b4331023a6cb7bd51cfbca8ae6ccd0a8 (mode 644) --- /dev/null +++ tests/tcpdump-regress/proto_vrrp.py @@ -0,0 +1,18 @@ +#/usr/local/bin/env python + +import helper +import logging +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +def main(): + + print "vrrp" + packet = UDP() + re_output = "" + helper.chck(packet, re_output) + + +if __name__ == "__main__": + main() blob - /dev/null blob + 12618473062572f7517647d3220d9b2c868b1313 (mode 644) Binary files /dev/null and tests/tcpdump-regress/sample-tcp.pcap differ blob - /dev/null blob + 5b2ebcb491a68c24a390aa8ca160eef0ae44d44c (mode 644) --- /dev/null +++ tests/tcpdump-regress/send.py @@ -0,0 +1,333 @@ +#/usr/local/bin/env python + +import subprocess as sub +import logging +import time +import os +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) +from scapy.all import * +logging.getLogger("scapy.runtime").setLevel(logging.WARNING) + +iface = 'em0' + +# sudo modprobe dummy +# sudo ip link set name eth10 dev dummy0 +# ip link show eth10 +# ip link set dev eth10 up + +def chck(pkt, re_output, debug=False): + + if os.getuid() != 0: + print "root priveleges is required" + exit(1) + + if isinstance(pkt, list): + packet_count = len(pkt) + else: + packet_count = 1 + + p = sub.Popen(('doas', 'tcpdump', '-i', iface, '-c', str(packet_count)), + stdout=sub.PIPE, stderr=sub.PIPE) + while True: + if p.poll() is None: + break + + # time.sleep(2) + send(pkt, iface=iface, verbose=1) + + pkt.show() + print p.communicate()[0] + p.wait() + + +def main(): + + # 802_11 ??? + + print "arp" + packet = ARP(op=ARP.who_has, psrc='192.168.1.2', pdst='192.168.1.1') + re_output = "" + chck(packet, re_output) + + # atalk + # atm + + # https://github.com/secdev/Scapy/blob/master/scapy/contrib/bgp.py + #print "bgp" + #packet = IP()/TCP()/BGPUpdate() + #re_output = "" + #chck(packet, re_output) + + print "bootp" + packet = BOOTP() + re_output = "" + chck(packet, re_output) + + # https://github.com/secdev/Scapy/blob/master/scapy/contrib/carp.py + #print "carp" + #packet = CARP() + #re_output = "" + #chck(packet, re_output) + + # cdp + # https://github.com/secdev/Scapy/blob/master/scapy/contrib/cdp.py + #print "cdp" + #packet = CDP() + #re_output = "" + #chck(packet, re_output) + + # cnfp + # decnet + + print "dhcp6" + packet = DHCP(options=[("message-type", "discover"), "end"]) + re_output = "" + chck(packet, re_output) + + print "domain" + packet = IP() / UDP(dport=53) / DNS(qd=DNSQR(qname="google.com")) + re_output = "" + chck(packet, re_output) + + packet = TCP(dport=53) + re_output = "" + chck(packet, re_output) + + # dvmrp + # enc + + print "ether" + packet = Ether() + re_output = "" + chck(packet, re_output) + + # https://github.com/secdev/Scapy/blob/master/scapy/contrib/etherip.py + #print "etherip" + #packet = EtherIP() + #re_output = "" + #chck(packet, re_output) + + # fddi + # frag6 + + print "gre" + packet = GRE() + re_output = "" + chck(packet, re_output) + + # https://github.com/secdev/scapy/blob/master/scapy/contrib/gtp.py + #print "gtp" + #packet = GTP() + #re_output = "" + #chck(packet, re_output) + + print "hsrp" + packet = Ether(src=’00:00:0C:07:AC:02’, dst=’01:00:5E:00:00:02’ ) / + IP(dst=’224.0.0.2’, src='attacerIP', ttl=1) / + UDP() / + HSRP(priority=230, virtualIP='virtualIP'), inter=3, loop=1) + re_output = "" + chck(packet, re_output) + + # iapp ??? + + print "icmp" + packet = IP(dst="192.168.1.1", ttl=128) / ICMP() + re_output = "" + tcpdump_opt = "-v ip and 'ip[8]>128'" + chck(packet, re_output) + + print "icmp6" + packet = ICMPv6EchoRequest() + re_output = "" + chck(packet, re_output) + + # igrp + + # ike + # https://github.com/secdev/Scapy/blob/master/scapy/contrib/ikev2.py + #print "ike" + #packet = IKEv2() + #re_output = "" + #chck(packet, re_output) + + print "ip" + packet = IP() + re_output = "" + chck(packet, re_output) + + # ip6 + # ip6opts + # ipsec + # ipx + # isoclns + # krb + + print "l2tp" + packet = L2TP() + re_output = "" + chck(packet, re_output) + + print "llc" + packet = LLC() + re_output = "" + chck(packet, re_output) + + # lldp + # https://github.com/secdev/scapy/blob/master/scapy/contrib/lldp.py + #load_contrib('lldp') + #print "lldp" + #packet = LLDP() + #re_output = "" + #chck(packet, re_output) + + # lwres + + # https://github.com/secdev/scapy/blob/master/scapy/contrib/mpls.py + #print "mpls" + #packet = MPLS() + #re_output = "" + #chck(packet, re_output) + + # netbios + # nfs + + print "ntp" + packet = IP()/UDP(dport=123)/Raw(load=str("\x17\x00\x03\x2a") + str("\x00")*4) + re_output = "" + chck(packet, re_output) + + # null + # ofp + + # https://github.com/secdev/scapy/blob/master/scapy/contrib/ospf.py + #load_contrib('ospf') + #print "ospf" + #packet = OSPF() + #re_output = "" + #chck(packet, re_output) + + # ospf6 + # pflog + # pfsync + # pim + + print "ppp" + packet = PPP() + re_output = "" + chck(packet, re_output) + + #print "radius" + #packet = Radius() + #re_output = "" + #chck(packet, re_output) + + print "raw" + packet = Raw() + re_output = "" + chck(packet, re_output) + + print "rip" + packet = RIP() + re_output = "" + chck(packet, re_output) + + # ripng + # https://github.com/secdev/Scapy/blob/master/scapy/contrib/ripng.py + #print "ripng" + #packet = RIPNG() + #re_output = "" + #chck(packet, re_output) + + # rt6 + # sl + # slow + + print "snmp" + packet = UDP(sport=161) / SNMP(community="private", PDU="") + re_output = "" + chck(packet, re_output) + + print "stp" + packet = STP() + re_output = "" + chck(packet, re_output) + + # sunrpc + + print "tcp" + packet = TCP() + re_output = "" + chck(packet, re_output) + + print "tftp" + packet = IP()/UDP()/TFTP()/TFTP_DATA(block=0) + re_output = "" + chck(packet, re_output) + + # timed + + print "udp" + packet = UDP() + re_output = "" + chck(packet, re_output) + + # udpencap + + # vqp + # https://github.com/secdev/scapy/blob/master/scapy/contrib/vqp.py + #print "vqp" + #packet = VQP() + #re_output = "" + #chck(packet, re_output) + + print "vrrp" + packet = UDP() + re_output = "" + chck(packet, re_output) + + # wb + +if __name__ == "__main__": + main() + +""" +from scapy.all import * +import urllib +import urlparse +import threading +import re + +proxy = "http://my.proxy.server:8080" +proxyIP = "1.2.3.4" # IP address of proxy + +# list of URLs +urls = ["http://www.bbc.co.uk/news", + "http://www.google.co.uk"] + +packets = [] + +# packet callback +def pkt_callback(pkt): + packets.append(pkt) # save the packet + +# monitor function +def monitor(fname): + del packets[:] + bpf_filter = "tcp and host " + proxyIP # set this filter to capture the traffic you want + sniff(timeout=60, prn=pkt_callback, filter=bpf_filter, store=0) + f=open(fname+".data", 'w') + for pkt in packets: + f.write(repr(pkt)) # or just save the raw packet data instead + f.write('\n') + f.close() + +for url in urls: + print "capturing: " + url + mon = threading.Thread(target=monitor, args=(re.sub(r'\W+', '', url),)) + mon.start() + data = urllib.urlopen(url, proxies={'http': proxy}) + # this line gets IP address of url host, might be helpful + # addr = socket.gethostbyname(urlparse.urlparse(data.geturl()).hostname) + mon.join() +"""