From 49f6b00b58c3ec734218fcd69259771a42c157bd Mon Sep 17 00:00:00 2001 From: Dan Klein Date: Sun, 23 Aug 2015 17:41:23 +0300 Subject: Added dkpt package, created basic shell for packetGen usage --- .gitignore | 1 + scripts/automation/__init__.py | 0 .../trex_control_plane/client/outer_packages.py | 4 +- .../examples/client_interactive_example.py | 1 - .../examples/interactive_stateless.py | 78 ++ .../python_lib/dpkt-1.8.6.2/AUTHORS | 60 ++ .../python_lib/dpkt-1.8.6.2/CHANGES | 71 ++ .../python_lib/dpkt-1.8.6.2/LICENSE | 28 + .../python_lib/dpkt-1.8.6.2/MANIFEST.in | 7 + .../python_lib/dpkt-1.8.6.2/PKG-INFO | 82 ++ .../python_lib/dpkt-1.8.6.2/README.md | 39 + .../python_lib/dpkt-1.8.6.2/README.rst | 64 ++ .../python_lib/dpkt-1.8.6.2/docs/Makefile | 153 ++++ .../python_lib/dpkt-1.8.6.2/docs/api/api_auto.rst | 545 +++++++++++++ .../python_lib/dpkt-1.8.6.2/docs/api/index.rst | 11 + .../python_lib/dpkt-1.8.6.2/docs/authors.rst | 7 + .../python_lib/dpkt-1.8.6.2/docs/badges.rst | 41 + .../python_lib/dpkt-1.8.6.2/docs/changelog.rst | 4 + .../python_lib/dpkt-1.8.6.2/docs/conf.py | 76 ++ .../python_lib/dpkt-1.8.6.2/docs/contributing.rst | 45 ++ .../python_lib/dpkt-1.8.6.2/docs/examples.rst | 80 ++ .../python_lib/dpkt-1.8.6.2/docs/index.rst | 32 + .../python_lib/dpkt-1.8.6.2/docs/installation.rst | 21 + .../python_lib/dpkt-1.8.6.2/docs/license.rst | 4 + .../python_lib/dpkt-1.8.6.2/docs/plans.rst | 13 + .../python_lib/dpkt-1.8.6.2/docs/requirements.txt | 3 + .../python_lib/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO | 82 ++ .../dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt | 96 +++ .../dpkt.egg-info/dependency_links.txt | 1 + .../dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe | 1 + .../dpkt-1.8.6.2/dpkt.egg-info/top_level.txt | 1 + .../python_lib/dpkt-1.8.6.2/dpkt/__init__.py | 71 ++ .../python_lib/dpkt-1.8.6.2/dpkt/ah.py | 35 + .../python_lib/dpkt-1.8.6.2/dpkt/aim.py | 52 ++ .../python_lib/dpkt-1.8.6.2/dpkt/aoe.py | 90 +++ .../python_lib/dpkt-1.8.6.2/dpkt/aoeata.py | 35 + .../python_lib/dpkt-1.8.6.2/dpkt/aoecfg.py | 25 + .../python_lib/dpkt-1.8.6.2/dpkt/arp.py | 32 + .../python_lib/dpkt-1.8.6.2/dpkt/asn1.py | 121 +++ .../python_lib/dpkt-1.8.6.2/dpkt/bgp.py | 789 +++++++++++++++++++ .../python_lib/dpkt-1.8.6.2/dpkt/cdp.py | 99 +++ .../python_lib/dpkt-1.8.6.2/dpkt/crc32c.py | 83 ++ .../python_lib/dpkt-1.8.6.2/dpkt/decorators.py | 91 +++ .../python_lib/dpkt-1.8.6.2/dpkt/dhcp.py | 169 ++++ .../python_lib/dpkt-1.8.6.2/dpkt/diameter.py | 243 ++++++ .../python_lib/dpkt-1.8.6.2/dpkt/dns.py | 462 +++++++++++ .../python_lib/dpkt-1.8.6.2/dpkt/dpkt.py | 176 +++++ .../python_lib/dpkt-1.8.6.2/dpkt/dtp.py | 26 + .../python_lib/dpkt-1.8.6.2/dpkt/esp.py | 12 + .../python_lib/dpkt-1.8.6.2/dpkt/ethernet.py | 145 ++++ .../python_lib/dpkt-1.8.6.2/dpkt/gre.py | 127 +++ .../python_lib/dpkt-1.8.6.2/dpkt/gzip.py | 123 +++ .../python_lib/dpkt-1.8.6.2/dpkt/h225.py | 213 +++++ .../python_lib/dpkt-1.8.6.2/dpkt/hsrp.py | 33 + .../python_lib/dpkt-1.8.6.2/dpkt/http.py | 259 ++++++ .../python_lib/dpkt-1.8.6.2/dpkt/icmp.py | 127 +++ .../python_lib/dpkt-1.8.6.2/dpkt/icmp6.py | 77 ++ .../python_lib/dpkt-1.8.6.2/dpkt/ieee80211.py | 875 +++++++++++++++++++++ .../python_lib/dpkt-1.8.6.2/dpkt/igmp.py | 19 + .../python_lib/dpkt-1.8.6.2/dpkt/ip.py | 359 +++++++++ .../python_lib/dpkt-1.8.6.2/dpkt/ip6.py | 383 +++++++++ .../python_lib/dpkt-1.8.6.2/dpkt/ipx.py | 18 + .../python_lib/dpkt-1.8.6.2/dpkt/llc.py | 56 ++ .../python_lib/dpkt-1.8.6.2/dpkt/loopback.py | 25 + .../python_lib/dpkt-1.8.6.2/dpkt/mrt.py | 96 +++ .../python_lib/dpkt-1.8.6.2/dpkt/netbios.py | 166 ++++ .../python_lib/dpkt-1.8.6.2/dpkt/netflow.py | 219 ++++++ .../python_lib/dpkt-1.8.6.2/dpkt/ntp.py | 113 +++ .../python_lib/dpkt-1.8.6.2/dpkt/ospf.py | 27 + .../python_lib/dpkt-1.8.6.2/dpkt/pcap.py | 172 ++++ .../python_lib/dpkt-1.8.6.2/dpkt/pim.py | 46 ++ .../python_lib/dpkt-1.8.6.2/dpkt/pmap.py | 18 + .../python_lib/dpkt-1.8.6.2/dpkt/ppp.py | 66 ++ .../python_lib/dpkt-1.8.6.2/dpkt/pppoe.py | 61 ++ .../python_lib/dpkt-1.8.6.2/dpkt/qq.py | 224 ++++++ .../python_lib/dpkt-1.8.6.2/dpkt/radiotap.py | 532 +++++++++++++ .../python_lib/dpkt-1.8.6.2/dpkt/radius.py | 91 +++ .../python_lib/dpkt-1.8.6.2/dpkt/rfb.py | 90 +++ .../python_lib/dpkt-1.8.6.2/dpkt/rip.py | 89 +++ .../python_lib/dpkt-1.8.6.2/dpkt/rpc.py | 161 ++++ .../python_lib/dpkt-1.8.6.2/dpkt/rtp.py | 127 +++ .../python_lib/dpkt-1.8.6.2/dpkt/rx.py | 45 ++ .../python_lib/dpkt-1.8.6.2/dpkt/sccp.py | 214 +++++ .../python_lib/dpkt-1.8.6.2/dpkt/sctp.py | 95 +++ .../python_lib/dpkt-1.8.6.2/dpkt/sip.py | 33 + .../python_lib/dpkt-1.8.6.2/dpkt/sll.py | 26 + .../python_lib/dpkt-1.8.6.2/dpkt/smb.py | 20 + .../python_lib/dpkt-1.8.6.2/dpkt/snoop.py | 122 +++ .../python_lib/dpkt-1.8.6.2/dpkt/ssl.py | 579 ++++++++++++++ .../dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py | 76 ++ .../python_lib/dpkt-1.8.6.2/dpkt/stp.py | 22 + .../python_lib/dpkt-1.8.6.2/dpkt/stun.py | 47 ++ .../python_lib/dpkt-1.8.6.2/dpkt/tcp.py | 152 ++++ .../python_lib/dpkt-1.8.6.2/dpkt/telnet.py | 80 ++ .../python_lib/dpkt-1.8.6.2/dpkt/tftp.py | 56 ++ .../python_lib/dpkt-1.8.6.2/dpkt/tns.py | 26 + .../python_lib/dpkt-1.8.6.2/dpkt/tpkt.py | 16 + .../python_lib/dpkt-1.8.6.2/dpkt/udp.py | 17 + .../python_lib/dpkt-1.8.6.2/dpkt/vrrp.py | 70 ++ .../python_lib/dpkt-1.8.6.2/dpkt/yahoo.py | 30 + .../python_lib/dpkt-1.8.6.2/setup.cfg | 20 + .../python_lib/dpkt-1.8.6.2/setup.py | 67 ++ .../server/extended_daemon_runner.py | 2 +- 103 files changed, 11210 insertions(+), 4 deletions(-) create mode 100644 scripts/automation/__init__.py create mode 100644 scripts/automation/trex_control_plane/examples/interactive_stateless.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/AUTHORS create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/CHANGES create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/LICENSE create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/MANIFEST.in create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/PKG-INFO create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.md create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.rst create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/Makefile create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/api_auto.rst create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/index.rst create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/authors.rst create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/badges.rst create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/changelog.rst create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/conf.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/contributing.rst create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/examples.rst create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/index.rst create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/installation.rst create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/license.rst create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/plans.rst create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/requirements.txt create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/__init__.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ah.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aim.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoe.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoeata.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoecfg.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/arp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/asn1.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/bgp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/cdp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/crc32c.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/decorators.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dhcp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/diameter.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dns.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dpkt.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dtp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/esp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ethernet.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gre.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gzip.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/h225.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/hsrp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/http.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp6.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ieee80211.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/igmp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip6.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ipx.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/llc.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/loopback.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/mrt.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netbios.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netflow.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ntp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ospf.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pcap.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pim.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pmap.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ppp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pppoe.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/qq.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radiotap.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radius.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rfb.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rip.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rpc.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rtp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rx.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sccp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sctp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sip.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sll.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/smb.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/snoop.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stun.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tcp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/telnet.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tftp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tns.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tpkt.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/udp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/vrrp.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/yahoo.py create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.cfg create mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.py diff --git a/.gitignore b/.gitignore index 249f61b8..7440a10d 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,4 @@ scripts/bp-sim-* ehthumbs.db Thumbs.db +.idea/ diff --git a/scripts/automation/__init__.py b/scripts/automation/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/automation/trex_control_plane/client/outer_packages.py b/scripts/automation/trex_control_plane/client/outer_packages.py index a7c34e48..42a553ca 100755 --- a/scripts/automation/trex_control_plane/client/outer_packages.py +++ b/scripts/automation/trex_control_plane/client/outer_packages.py @@ -9,10 +9,10 @@ PATH_TO_PYTHON_LIB = os.path.abspath(os.path.join(ROOT_PATH, 'python_lib')) CLIENT_MODULES = ['enum34-1.0.4', - # 'jsonrpclib-0.1.3', 'jsonrpclib-pelix-0.2.5', 'termstyle', - 'rpc_exceptions-0.1' + 'rpc_exceptions-0.1', + 'dpkt-1.8.6.2' ] def import_client_modules (): diff --git a/scripts/automation/trex_control_plane/examples/client_interactive_example.py b/scripts/automation/trex_control_plane/examples/client_interactive_example.py index d45e4cef..dbca7615 100755 --- a/scripts/automation/trex_control_plane/examples/client_interactive_example.py +++ b/scripts/automation/trex_control_plane/examples/client_interactive_example.py @@ -13,7 +13,6 @@ import time import socket import errno - class InteractiveTRexClient(cmd.Cmd): intro = termstyle.green("\nInteractive shell to play with Cisco's T-Rex API.\nType help to view available pre-defined scenarios\n(c) All rights reserved.\n") diff --git a/scripts/automation/trex_control_plane/examples/interactive_stateless.py b/scripts/automation/trex_control_plane/examples/interactive_stateless.py new file mode 100644 index 00000000..c0fc51a7 --- /dev/null +++ b/scripts/automation/trex_control_plane/examples/interactive_stateless.py @@ -0,0 +1,78 @@ +#!/router/bin/python + +import trex_root_path +from client.trex_client import * +from common.trex_exceptions import * +import cmd +from python_lib.termstyle import termstyle +import os +from argparse import ArgumentParser +import socket +import errno + + +class InteractiveStatelessTRex(cmd.Cmd): + + intro = termstyle.green("\nInteractive shell to play with Cisco's TRex stateless API.\ + \nType help to view available pre-defined scenarios\n(c) All rights reserved.\n") + prompt = '> ' + + def __init__(self, verbose_mode=False): + cmd.Cmd.__init__(self) + self.verbose = verbose_mode + self.trex = None + self.DEFAULT_RUN_PARAMS = dict(m=1.5, + nc=True, + p=True, + d=100, + f='avl/sfr_delay_10_1g.yaml', + l=1000) + self.run_params = dict(self.DEFAULT_RUN_PARAMS) + + def do_push_files(self, filepaths): + """Pushes a custom file to be stored locally on T-Rex server.\ + \nPush multiple files by specifying their path separated by ' ' (space).""" + try: + filepaths = filepaths.split(' ') + print termstyle.green("*** Starting pushing files ({trex_files}) to T-Rex. ***".format( + trex_files=', '.join(filepaths)) + ) + ret_val = self.trex.push_files(filepaths) + if ret_val: + print termstyle.green("*** End of T-Rex push_files method (success) ***") + else: + print termstyle.magenta("*** End of T-Rex push_files method (failed) ***") + + except IOError as inst: + print termstyle.magenta(inst) + +if __name__ == "__main__": + parser = ArgumentParser(description=termstyle.cyan('Run T-Rex client API demos and scenarios.'), + usage="client_interactive_example [options]") + + parser.add_argument('-v', '--version', action='version', version='%(prog)s 1.0 \t (C) Cisco Systems Inc.\n') + + # parser.add_argument("-t", "--trex-host", required = True, dest="trex_host", + # action="store", help="Specify the hostname or ip to connect with T-Rex server.", + # metavar="HOST" ) + # parser.add_argument("-p", "--trex-port", type=int, default = 8090, metavar="PORT", dest="trex_port", + # help="Select port on which the T-Rex server listens. Default port is 8090.", action="store") + # parser.add_argument("-m", "--maxhist", type=int, default = 100, metavar="SIZE", dest="hist_size", + # help="Specify maximum history size saved at client side. Default size is 100.", action="store") + parser.add_argument("--verbose", dest="verbose", + action="store_true", + help="Switch ON verbose option at T-Rex client. Default is: OFF.", + default=False) + args = parser.parse_args() + + try: + InteractiveStatelessTRex(args.verbose).cmdloop() + + except KeyboardInterrupt: + print termstyle.cyan('Bye Bye!') + exit(-1) + except socket.error, e: + if e.errno == errno.ECONNREFUSED: + raise socket.error(errno.ECONNREFUSED, + "Connection from T-Rex server was terminated. \ + Please make sure the server is up.") diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/AUTHORS b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/AUTHORS new file mode 100644 index 00000000..dcefbef9 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/AUTHORS @@ -0,0 +1,60 @@ + +Original author +--------------- + +Dug Song + + +Contributors +------------ + +Timur Alperovich + radiotap module + +Nic Bellamy + HTTP header parsing fix + +the grugq + better RTP module + +David Helder + bug fixes + +Przemyslaw Karwasiecki + TABLE_DUMP in MRT module + +Reza Lotun + MetaPacket cleanup + +Jeff Nathan + bug fixes + +Tim Newsham + IPv6 bugfixing and improvements + +keisuke.nishimoto@gmail.com + Snoop file parser + +Jon Oberheide + STUN, H.225, TPKT, NTP, RIP, Diameter, SCTP, BGP, MRT, RX modules + +plotnikoff@gmail.com + handle dynamic imports from py2exe/freeze.py/zipped egg packages + +simdream@gmail.com + handle multiple cookie values in HTTP + +Owen Stephens + IP6 extension header support + +Robert Stone + Netflow and QQ modules + +Thomas Taranowski + dnet IP checksum bug on i386 + +Jirka Vejrazka + bug fixes + +Tim Yardley + DHCP definitions diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/CHANGES b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/CHANGES new file mode 100644 index 00000000..a5f05121 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/CHANGES @@ -0,0 +1,71 @@ +dpkg-1.8: + - fix a typo in vrrp.py + - fix IPv4 and IPv6 packet to correctly handle zero payload length + - store cipher_suite as int in TLSServerHello to allow app-specific messages + - improve SSL parsing + +dpkt-1.7: + - handle dynamic imports from py2exe/freeze.py/zipped egg + packages, from plotnikoff + - decode Ethernet MPLS labels, Cisco ISL VLAN tags, 802.2 LLC fields + - handle multiply-defined HTTP headers from simdream + - add IPv6 extension header support (minus ESP) from Owen Stephens + - add radiotap module from Timur Alperovich + - add IEEE80211 module from Jon Oberheide + - add RFB module from Jon Oberheide + - fix IP6 checksum to include options + - rename 'as' to 'asn' field in BGP header + - fix transport-layer checksum in IP6 + - handle improper TCP header offset + - fix SSL typo + - handle malformed ICMP headers + - added RX module from Jon Oberheide + - fixed loopback module IP/IP6 decoding + - set transport-layer (TCP, UDP) checksum in IP + - MRT module fixes + - fix pcap.Writer timestamp calculation + +dpkt-1.6: + - DNS RR packing fixed + - added STUN, H.225, TPKT, NTP, RIP, Diameter, SCTP, + BGP, and MRT modules from Jon Oberheide + - new dpkt.NeedData exception + +dpkt-1.5: + - IP6 checksum fix + - __getitem__() interface to Packet (e.g. ip['src'] == ip.src) + - faster Ethernet, IP, PPP module loading + - support any endianness capture file in pcap module, + and export a pypcap-compatible Reader + - additional CDP definitions + - replaced rtp module with the grugq's version + - added QQ module from Robert Stone + - added gzip module + - added PPPoE module + - added RADIUS module + +dpkt-1.4: + - fix IP checksum bug on i386, caught by Thomas Taranowski + +dpkt-1.3: + - autoload IP, Ethernet dispatch tables + - IP6 bugfixes from Tim Newsham + - additional DHCP definitions from Tim Yardley + - HTTP bugfixes and abstraction (see SIP) + - RPC bugfixes + - added pypcap-compatible PcapReader + - added Linux libpcap "cooked" capture module + - added preliminary SSL module + - added SIP module + - added SCCP module + - added RTP module + - added Portmap module + +dpkt-1.2: + - changed license from GPL to BSD + - added DTP module + - added HTTP module + - added DNS RR decodes + - added enough PPP to decode PPTP GRE encapsulation + +# $Id: CHANGES 379 2006-07-27 05:23:19Z dugsong $ diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/LICENSE b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/LICENSE new file mode 100644 index 00000000..99d14371 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/LICENSE @@ -0,0 +1,28 @@ + + Copyright (c) 2004 Dug Song + All rights reserved, all wrongs reversed. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The names of the authors and copyright holders may not be used to + endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/MANIFEST.in b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/MANIFEST.in new file mode 100644 index 00000000..2d5c155a --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/MANIFEST.in @@ -0,0 +1,7 @@ + +include AUTHORS CHANGES README.rst LICENSE + +recursive-include docs * +prune docs/_build + +global-exclude __pycache__/* diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/PKG-INFO b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/PKG-INFO new file mode 100644 index 00000000..baf82a26 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/PKG-INFO @@ -0,0 +1,82 @@ +Metadata-Version: 1.1 +Name: dpkt +Version: 1.8.6.2 +Summary: fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols +Home-page: http://dpkt.googlecode.com/ +Author: Dug Song +Author-email: dugsong@monkey.org +License: BSD +Description: + ==== + dpkt + ==== + + | |travis| |coveralls| |landscape| |downloads| + | |version| |wheel| |supported-versions| |supported-implementations| + + .. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + + .. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + + .. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + + .. |version| image:: http://img.shields.io/pypi/v/dpkt.svg + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + + .. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + + .. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + + Installation + ============ + + :: + + pip install dpkt + + Documentation + ============= + + https://dpkt.readthedocs.org/ + + About + ===== + + This code is based on `dpkt code `__ lead by Dug Song and + is now being maintained and improved by an extended set of + `contributors `__ + and `developers `__. + + LICENSE + ------- + + BSD 3-Clause + +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Natural Language :: English +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.md b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.md new file mode 100644 index 00000000..fc637836 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.md @@ -0,0 +1,39 @@ +dpkt +==== + +**A fast, simple packet creation/parsing python module with definitions for the basic TCP/IP protocols.** + +[![travis](http://img.shields.io/travis/kbandla/dpkt.svg)](https://travis-ci.org/kbandla/dpkt) +[![coveralls](http://img.shields.io/coveralls/kbandla/dpkt.svg)](https://coveralls.io/r/kbandla/dpkt) +[![landscape](https://landscape.io/github/kbandla/dpkt/master/landscape.svg)](https://landscape.io/github/kbandla/dpkt/master) +[![version](http://img.shields.io/pypi/v/dpkt.svg)](https://pypi.python.org/pypi/dpkt) +[![downloads](https://img.shields.io/pypi/dm/dpkt.svg)](https://pypi.python.org/pypi/dpkt) + +[![wheel](https://img.shields.io/pypi/wheel/dpkt.svg)](https://pypi.python.org/pypi/dpkt) +[![supported-versions](https://img.shields.io/pypi/pyversions/dpkt.svg)](https://pypi.python.org/pypi/dpkt) +[![supported-implementations](https://img.shields.io/pypi/implementation/dpkt.svg)](https://pypi.python.org/pypi/dpkt) +[![On Deck](https://badge.waffle.io/kbandla/dpkt.svg?label=on%20deck&title=On%20Deck)](http://waffle.io/kbandla/dpkt) +[![In Progress](https://badge.waffle.io/kbandla/dpkt.svg?label=in%20progress&title=In%20Progress)](http://waffle.io/kbandla/dpkt) + +Installation +------------ + + pip install dpkt + +Documentation +------------- + +**[dpkt.readthedocs.org](https://dpkt.readthedocs.org/)** + + +About +----- + +This code is based on [dpkt code](https://code.google.com/p/dpkt/) lead +by Dug Song and is now being maintained and improved by an extended set of [contributors](https://dpkt.readthedocs.org/en/latest/authors.html) + and [developers](https://github.com/kbandla/dpkt/graphs/contributors). + + +#### LICENSE + +BSD 3-Clause \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.rst new file mode 100644 index 00000000..b4e1b966 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.rst @@ -0,0 +1,64 @@ + +==== +dpkt +==== + +| |travis| |coveralls| |landscape| |downloads| +| |version| |wheel| |supported-versions| |supported-implementations| + +.. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + +.. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + +.. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + +.. |version| image:: http://img.shields.io/pypi/v/dpkt.svg + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + +.. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + +.. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + +Installation +============ + +:: + + pip install dpkt + +Documentation +============= + +https://dpkt.readthedocs.org/ + +About +===== + +This code is based on `dpkt code `__ lead by Dug Song and +is now being maintained and improved by an extended set of +`contributors `__ +and `developers `__. + +LICENSE +------- + +BSD 3-Clause diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/Makefile b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/Makefile new file mode 100644 index 00000000..2687c750 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/Makefile @@ -0,0 +1,153 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/pyspotify.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/pyspotify.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/pyspotify" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/pyspotify" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/api_auto.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/api_auto.rst new file mode 100644 index 00000000..3837c903 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/api_auto.rst @@ -0,0 +1,545 @@ + +dpkt.ah module +-------------- + +.. automodule:: dpkt.ah + :members: + :undoc-members: + :show-inheritance: + +dpkt.aim module +--------------- + +.. automodule:: dpkt.aim + :members: + :undoc-members: + :show-inheritance: + +dpkt.aoe module +--------------- + +.. automodule:: dpkt.aoe + :members: + :undoc-members: + :show-inheritance: + +dpkt.aoeata module +------------------ + +.. automodule:: dpkt.aoeata + :members: + :undoc-members: + :show-inheritance: + +dpkt.aoecfg module +------------------ + +.. automodule:: dpkt.aoecfg + :members: + :undoc-members: + :show-inheritance: + +dpkt.arp module +--------------- + +.. automodule:: dpkt.arp + :members: + :undoc-members: + :show-inheritance: + +dpkt.asn1 module +---------------- + +.. automodule:: dpkt.asn1 + :members: + :undoc-members: + :show-inheritance: + +dpkt.bgp module +--------------- + +.. automodule:: dpkt.bgp + :members: + :undoc-members: + :show-inheritance: + +dpkt.cdp module +--------------- + +.. automodule:: dpkt.cdp + :members: + :undoc-members: + :show-inheritance: + +dpkt.crc32c module +------------------ + +.. automodule:: dpkt.crc32c + :members: + :undoc-members: + :show-inheritance: + +dpkt.decorators module +---------------------- + +.. automodule:: dpkt.decorators + :members: + :undoc-members: + :show-inheritance: + +dpkt.dhcp module +---------------- + +.. automodule:: dpkt.dhcp + :members: + :undoc-members: + :show-inheritance: + +dpkt.diameter module +-------------------- + +.. automodule:: dpkt.diameter + :members: + :undoc-members: + :show-inheritance: + +dpkt.dns module +--------------- + +.. automodule:: dpkt.dns + :members: + :undoc-members: + :show-inheritance: + +dpkt.dpkt module +---------------- + +.. automodule:: dpkt.dpkt + :members: + :undoc-members: + :show-inheritance: + +dpkt.dtp module +--------------- + +.. automodule:: dpkt.dtp + :members: + :undoc-members: + :show-inheritance: + +dpkt.esp module +--------------- + +.. automodule:: dpkt.esp + :members: + :undoc-members: + :show-inheritance: + +dpkt.ethernet module +-------------------- + +.. automodule:: dpkt.ethernet + :members: + :undoc-members: + :show-inheritance: + +dpkt.gre module +--------------- + +.. automodule:: dpkt.gre + :members: + :undoc-members: + :show-inheritance: + +dpkt.gzip module +---------------- + +.. automodule:: dpkt.gzip + :members: + :undoc-members: + :show-inheritance: + +dpkt.h225 module +---------------- + +.. automodule:: dpkt.h225 + :members: + :undoc-members: + :show-inheritance: + +dpkt.hsrp module +---------------- + +.. automodule:: dpkt.hsrp + :members: + :undoc-members: + :show-inheritance: + +dpkt.http module +---------------- + +.. automodule:: dpkt.http + :members: + :undoc-members: + :show-inheritance: + +dpkt.icmp module +---------------- + +.. automodule:: dpkt.icmp + :members: + :undoc-members: + :show-inheritance: + +dpkt.icmp6 module +----------------- + +.. automodule:: dpkt.icmp6 + :members: + :undoc-members: + :show-inheritance: + +dpkt.ieee80211 module +--------------------- + +.. automodule:: dpkt.ieee80211 + :members: + :undoc-members: + :show-inheritance: + +dpkt.igmp module +---------------- + +.. automodule:: dpkt.igmp + :members: + :undoc-members: + :show-inheritance: + +dpkt.ip module +-------------- + +.. automodule:: dpkt.ip + :members: + :undoc-members: + :show-inheritance: + +dpkt.ip6 module +--------------- + +.. automodule:: dpkt.ip6 + :members: + :undoc-members: + :show-inheritance: + +dpkt.ipx module +--------------- + +.. automodule:: dpkt.ipx + :members: + :undoc-members: + :show-inheritance: + +dpkt.llc module +--------------- + +.. automodule:: dpkt.llc + :members: + :undoc-members: + :show-inheritance: + +dpkt.loopback module +-------------------- + +.. automodule:: dpkt.loopback + :members: + :undoc-members: + :show-inheritance: + +dpkt.mrt module +--------------- + +.. automodule:: dpkt.mrt + :members: + :undoc-members: + :show-inheritance: + +dpkt.netbios module +------------------- + +.. automodule:: dpkt.netbios + :members: + :undoc-members: + :show-inheritance: + +dpkt.netflow module +------------------- + +.. automodule:: dpkt.netflow + :members: + :undoc-members: + :show-inheritance: + +dpkt.ntp module +--------------- + +.. automodule:: dpkt.ntp + :members: + :undoc-members: + :show-inheritance: + +dpkt.ospf module +---------------- + +.. automodule:: dpkt.ospf + :members: + :undoc-members: + :show-inheritance: + +dpkt.pcap module +---------------- + +.. automodule:: dpkt.pcap + :members: + :undoc-members: + :show-inheritance: + +dpkt.pim module +--------------- + +.. automodule:: dpkt.pim + :members: + :undoc-members: + :show-inheritance: + +dpkt.pmap module +---------------- + +.. automodule:: dpkt.pmap + :members: + :undoc-members: + :show-inheritance: + +dpkt.ppp module +--------------- + +.. automodule:: dpkt.ppp + :members: + :undoc-members: + :show-inheritance: + +dpkt.pppoe module +----------------- + +.. automodule:: dpkt.pppoe + :members: + :undoc-members: + :show-inheritance: + +dpkt.qq module +-------------- + +.. automodule:: dpkt.qq + :members: + :undoc-members: + :show-inheritance: + +dpkt.radiotap module +-------------------- + +.. automodule:: dpkt.radiotap + :members: + :undoc-members: + :show-inheritance: + +dpkt.radius module +------------------ + +.. automodule:: dpkt.radius + :members: + :undoc-members: + :show-inheritance: + +dpkt.rfb module +--------------- + +.. automodule:: dpkt.rfb + :members: + :undoc-members: + :show-inheritance: + +dpkt.rip module +--------------- + +.. automodule:: dpkt.rip + :members: + :undoc-members: + :show-inheritance: + +dpkt.rpc module +--------------- + +.. automodule:: dpkt.rpc + :members: + :undoc-members: + :show-inheritance: + +dpkt.rtp module +--------------- + +.. automodule:: dpkt.rtp + :members: + :undoc-members: + :show-inheritance: + +dpkt.rx module +-------------- + +.. automodule:: dpkt.rx + :members: + :undoc-members: + :show-inheritance: + +dpkt.sccp module +---------------- + +.. automodule:: dpkt.sccp + :members: + :undoc-members: + :show-inheritance: + +dpkt.sctp module +---------------- + +.. automodule:: dpkt.sctp + :members: + :undoc-members: + :show-inheritance: + +dpkt.sip module +--------------- + +.. automodule:: dpkt.sip + :members: + :undoc-members: + :show-inheritance: + +dpkt.sll module +--------------- + +.. automodule:: dpkt.sll + :members: + :undoc-members: + :show-inheritance: + +dpkt.smb module +--------------- + +.. automodule:: dpkt.smb + :members: + :undoc-members: + :show-inheritance: + +dpkt.snoop module +----------------- + +.. automodule:: dpkt.snoop + :members: + :undoc-members: + :show-inheritance: + +dpkt.ssl module +--------------- + +.. automodule:: dpkt.ssl + :members: + :undoc-members: + :show-inheritance: + +dpkt.ssl_ciphersuites module +---------------------------- + +.. automodule:: dpkt.ssl_ciphersuites + :members: + :undoc-members: + :show-inheritance: + +dpkt.stp module +--------------- + +.. automodule:: dpkt.stp + :members: + :undoc-members: + :show-inheritance: + +dpkt.stun module +---------------- + +.. automodule:: dpkt.stun + :members: + :undoc-members: + :show-inheritance: + +dpkt.tcp module +--------------- + +.. automodule:: dpkt.tcp + :members: + :undoc-members: + :show-inheritance: + +dpkt.telnet module +------------------ + +.. automodule:: dpkt.telnet + :members: + :undoc-members: + :show-inheritance: + +dpkt.tftp module +---------------- + +.. automodule:: dpkt.tftp + :members: + :undoc-members: + :show-inheritance: + +dpkt.tns module +--------------- + +.. automodule:: dpkt.tns + :members: + :undoc-members: + :show-inheritance: + +dpkt.tpkt module +---------------- + +.. automodule:: dpkt.tpkt + :members: + :undoc-members: + :show-inheritance: + +dpkt.udp module +--------------- + +.. automodule:: dpkt.udp + :members: + :undoc-members: + :show-inheritance: + +dpkt.vrrp module +---------------- + +.. automodule:: dpkt.vrrp + :members: + :undoc-members: + :show-inheritance: + +dpkt.yahoo module +----------------- + +.. automodule:: dpkt.yahoo + :members: + :undoc-members: + :show-inheritance: + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/index.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/index.rst new file mode 100644 index 00000000..7d44785d --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/index.rst @@ -0,0 +1,11 @@ + +API Reference +============= +The dpkt API reference section is currently a work in progress, please have patience as we fill in and improve the documentation. + +**dpkt Modules** + +.. toctree:: + :maxdepth: 4 + + api_auto diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/authors.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/authors.rst new file mode 100644 index 00000000..238aa6bb --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/authors.rst @@ -0,0 +1,7 @@ +******* +Authors +******* + +.. include:: ../AUTHORS + +If you want to contribute to dpkt, see :doc:`contributing`. diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/badges.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/badges.rst new file mode 100644 index 00000000..906f8b7f --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/badges.rst @@ -0,0 +1,41 @@ + + +| |docs| |travis| |coveralls| |landscape| |version| +| |downloads| |wheel| |supported-versions| |supported-implementations| + +.. |docs| image:: https://readthedocs.org/projects/dpkt/badge/?style=flat + :target: https://readthedocs.org/projects/dpkt + :alt: Documentation Status + +.. |travis| image:: http://img.shields.io/travis/kbandla/dpkt/master.png?style=flat + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + +.. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt/master.png?style=flat + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + +.. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg?style=flat + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + +.. |version| image:: http://img.shields.io/pypi/v/dpkt.svg + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + +.. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + +.. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/changelog.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/changelog.rst new file mode 100644 index 00000000..ac7e2371 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/changelog.rst @@ -0,0 +1,4 @@ +********* +Changelog +********* + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/conf.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/conf.py new file mode 100644 index 00000000..6dfc9fc4 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/conf.py @@ -0,0 +1,76 @@ +# encoding: utf-8 + +"""dpkt documentation build configuration file""" + +from __future__ import unicode_literals + +import os +import re +import sys +import types +import mock + + +def get_version(filename): + init_py = open(filename).read() + metadata = dict(re.findall("__([a-z]+)__ = '([^']+)'", init_py)) + return metadata['version'] + + +# -- Workarounds to have autodoc generate API docs ---------------------------- + +sys.path.insert(0, os.path.abspath('..')) + + +# Mock any objects that we might need to +foo = mock.Mock() +foo.__version__ = '0.1.1' +sys.modules['foo'] = foo + + +# -- General configuration ---------------------------------------------------- +needs_sphinx = '1.0' +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.extlinks', + 'sphinx.ext.intersphinx', + 'sphinx.ext.viewcode', + 'sphinx.ext.autosummary', + 'sphinxcontrib.napoleon' +] + +templates_path = ['_templates'] +source_suffix = '.rst' +master_doc = 'index' + +project = 'dpkt' +copyright = '2009-2015 Dug Song and contributors' + +release = get_version('../dpkt/__init__.py') +version = '.'.join(release.split('.')[:2]) + +exclude_patterns = ['_build'] + +pygments_style = 'sphinx' + +modindex_common_prefix = ['dpkt.'] + +autodoc_default_flags = ['members', 'undoc-members', 'show-inheritance'] +autodoc_member_order = 'bysource' + + +# -- Options for HTML output -------------------------------------------------- +html_theme = 'default' +html_static_path = ['_static'] + +html_use_modindex = True +html_use_index = True +html_split_index = False +html_show_sourcelink = True + +htmlhelp_basename = 'dpkt' + +# -- Options for extlink extension -------------------------------------------- +extlinks = { + 'issue': ('https://github.com/kbandla/dpkt/issues/%s', '#'), +} diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/contributing.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/contributing.rst new file mode 100644 index 00000000..cae4acfe --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/contributing.rst @@ -0,0 +1,45 @@ +============ +Contributing +============ + +Report a Bug or Make a Feature Request +-------------------------------------- +Please go to the GitHub Issues page: https://github.com/kbandla/dpkt/issues. + +Checkout the Code +----------------- + +:: + + git clone https://github.com/kblandla/dpkt.git + + +Become a Developer +------------------ +dpkt uses the 'GitHub Flow' model: `GitHub Flow `_ + +- To work on something new, create a descriptively named branch off of master (ie: my-awesome) +- Commit to that branch locally and regularly push your work to the same named branch on the server +- When you need feedback or help, or you think the branch is ready for merging, open a pull request +- After someone else has reviewed and signed off on the feature, you can merge it into master + +Getting Started +~~~~~~~~~~~~~~~ + - Fork the repo on GitHub + - git clone git@github.com:your_name_here/dpkt.git + +New Feature or Bug +~~~~~~~~~~~~~~~~~~ + + :: + + $ git checkout -b my-awesome + $ git push -u origin my-awesome + $ ; git push + $ ; git push + $ tox (this will run all the tests) + + - Go to github and hit 'New pull request' + - Someone reviews it and says 'AOK' + - Merge the pull request (green button) + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/examples.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/examples.rst new file mode 100644 index 00000000..d99a0c2f --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/examples.rst @@ -0,0 +1,80 @@ + +Examples +======== + +Examples in dpkt/examples +------------------------- + +print_packets.py +~~~~~~~~~~~~~~~~ +.. automodule:: examples.print_packets + +**Code Excerpt** + +.. code-block:: python + + # For each packet in the pcap process the contents + for timestamp, buf in pcap: + + # Print out the timestamp in UTC + print 'Timestamp: ', str(datetime.datetime.utcfromtimestamp(timestamp)) + + # Unpack the Ethernet frame (mac src/dst, ethertype) + eth = dpkt.ethernet.Ethernet(buf) + print 'Ethernet Frame: ', mac_addr(eth.src), mac_addr(eth.dst), eth.type + + # Make sure the Ethernet frame contains an IP packet + # EtherType (IP, ARP, PPPoE, IP6... see http://en.wikipedia.org/wiki/EtherType) + if eth.type != dpkt.ethernet.ETH_TYPE_IP: + print 'Non IP Packet type not supported %s\n' % eth.data.__class__.__name__ + continue + + # Now unpack the data within the Ethernet frame (the IP packet) + # Pulling out src, dst, length, fragment info, TTL, and Protocol + ip = eth.data + + # Pull out fragment information (flags and offset all packed into off field, so use bitmasks) + do_not_fragment = bool(ip.off & dpkt.ip.IP_DF) + more_fragments = bool(ip.off & dpkt.ip.IP_MF) + fragment_offset = ip.off & dpkt.ip.IP_OFFMASK + + # Print out the info + print 'IP: %s -> %s (len=%d ttl=%d DF=%d MF=%d offset=%d)\n' % \ + (ip_to_str(ip.src), ip_to_str(ip.dst), ip.len, ip.ttl, do_not_fragment, more_fragments, fragment_offset) + +**Example Output** + +.. code-block:: json + + Timestamp: 2004-05-13 10:17:07.311224 + Ethernet Frame: 00:00:01:00:00:00 fe:ff:20:00:01:00 2048 + IP: 145.254.160.237 -> 65.208.228.223 (len=48 ttl=128 DF=1 MF=0 offset=0) + + Timestamp: 2004-05-13 10:17:08.222534 + Ethernet Frame: fe:ff:20:00:01:00 00:00:01:00:00:00 2048 + IP: 65.208.228.223 -> 145.254.160.237 (len=48 ttl=47 DF=1 MF=0 offset=0) + + ... + + + +Jon Oberheide's Examples +------------------------- +[@jonoberheide's](https://twitter.com/jonoberheide) old examples still +apply: + +- `dpkt Tutorial #1: ICMP + Echo `__ +- `dpkt Tutorial #2: Parsing a PCAP + File `__ +- `dpkt Tutorial #3: dns + spoofing `__ +- `dpkt Tutorial #4: AS Paths from + MRT/BGP `__ + +Jeff Silverman Docs/Code +------------------------ +`Jeff Silverman `__ has some +`code `__ and +`documentation `__. + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/index.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/index.rst new file mode 100644 index 00000000..31ef9251 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/index.rst @@ -0,0 +1,32 @@ +dpkt +==== +.. include:: badges.rst +dpkt is a python module for fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols + + +Getting Started +=============== +.. toctree:: + :maxdepth: 2 + + installation + examples + +API Reference +============= +.. toctree:: + :maxdepth: 1 + + api/index + +About dpkt +========== +.. toctree:: + :maxdepth: 2 + + authors + changelog + plans + contributing + license + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/installation.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/installation.rst new file mode 100644 index 00000000..2c93001b --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/installation.rst @@ -0,0 +1,21 @@ +============ +Installation +============ + +DKPT is now available directly from pypi :) + +Install the Code +---------------- + +:: + + pip install dpkt + +Checkout the Code +----------------- + +:: + + git clone https://github.com/kblandla/dpkt.git + + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/license.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/license.rst new file mode 100644 index 00000000..56c72381 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/license.rst @@ -0,0 +1,4 @@ + +License +======= +BSD 3-Clause License, as the upstream project diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/plans.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/plans.rst new file mode 100644 index 00000000..a6b1ca35 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/plans.rst @@ -0,0 +1,13 @@ +***************** +Development plans +***************** + +Current plans +============= + +- Be Awesome + +Future plans +============ + +- Maintain the Awesome diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/requirements.txt b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/requirements.txt new file mode 100644 index 00000000..0e912345 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/requirements.txt @@ -0,0 +1,3 @@ +mock >= 1.0 +Sphinx >= 1.0 +sphinxcontrib-napoleon diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO new file mode 100644 index 00000000..baf82a26 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO @@ -0,0 +1,82 @@ +Metadata-Version: 1.1 +Name: dpkt +Version: 1.8.6.2 +Summary: fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols +Home-page: http://dpkt.googlecode.com/ +Author: Dug Song +Author-email: dugsong@monkey.org +License: BSD +Description: + ==== + dpkt + ==== + + | |travis| |coveralls| |landscape| |downloads| + | |version| |wheel| |supported-versions| |supported-implementations| + + .. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + + .. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + + .. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + + .. |version| image:: http://img.shields.io/pypi/v/dpkt.svg + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + + .. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + + .. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + + Installation + ============ + + :: + + pip install dpkt + + Documentation + ============= + + https://dpkt.readthedocs.org/ + + About + ===== + + This code is based on `dpkt code `__ lead by Dug Song and + is now being maintained and improved by an extended set of + `contributors `__ + and `developers `__. + + LICENSE + ------- + + BSD 3-Clause + +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Natural Language :: English +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt new file mode 100644 index 00000000..8ac474c8 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt @@ -0,0 +1,96 @@ +AUTHORS +CHANGES +LICENSE +MANIFEST.in +README.md +README.rst +setup.cfg +setup.py +docs/Makefile +docs/authors.rst +docs/badges.rst +docs/changelog.rst +docs/conf.py +docs/contributing.rst +docs/examples.rst +docs/index.rst +docs/installation.rst +docs/license.rst +docs/plans.rst +docs/requirements.txt +docs/api/api_auto.rst +docs/api/index.rst +dpkt/__init__.py +dpkt/ah.py +dpkt/aim.py +dpkt/aoe.py +dpkt/aoeata.py +dpkt/aoecfg.py +dpkt/arp.py +dpkt/asn1.py +dpkt/bgp.py +dpkt/cdp.py +dpkt/crc32c.py +dpkt/decorators.py +dpkt/dhcp.py +dpkt/diameter.py +dpkt/dns.py +dpkt/dpkt.py +dpkt/dtp.py +dpkt/esp.py +dpkt/ethernet.py +dpkt/gre.py +dpkt/gzip.py +dpkt/h225.py +dpkt/hsrp.py +dpkt/http.py +dpkt/icmp.py +dpkt/icmp6.py +dpkt/ieee80211.py +dpkt/igmp.py +dpkt/ip.py +dpkt/ip6.py +dpkt/ipx.py +dpkt/llc.py +dpkt/loopback.py +dpkt/mrt.py +dpkt/netbios.py +dpkt/netflow.py +dpkt/ntp.py +dpkt/ospf.py +dpkt/pcap.py +dpkt/pim.py +dpkt/pmap.py +dpkt/ppp.py +dpkt/pppoe.py +dpkt/qq.py +dpkt/radiotap.py +dpkt/radius.py +dpkt/rfb.py +dpkt/rip.py +dpkt/rpc.py +dpkt/rtp.py +dpkt/rx.py +dpkt/sccp.py +dpkt/sctp.py +dpkt/sip.py +dpkt/sll.py +dpkt/smb.py +dpkt/snoop.py +dpkt/ssl.py +dpkt/ssl_ciphersuites.py +dpkt/stp.py +dpkt/stun.py +dpkt/tcp.py +dpkt/telnet.py +dpkt/tftp.py +dpkt/tns.py +dpkt/tpkt.py +dpkt/udp.py +dpkt/vrrp.py +dpkt/yahoo.py +dpkt.egg-info/PKG-INFO +dpkt.egg-info/SOURCES.txt +dpkt.egg-info/dependency_links.txt +dpkt.egg-info/not-zip-safe +dpkt.egg-info/top_level.txt \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt new file mode 100644 index 00000000..4daab81a --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt @@ -0,0 +1 @@ +dpkt diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/__init__.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/__init__.py new file mode 100644 index 00000000..09d28fb3 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/__init__.py @@ -0,0 +1,71 @@ +"""fast, simple packet creation and parsing.""" + +__author__ = 'Dug Song' +__author_email__ = 'dugsong@monkey.org' +__license__ = 'BSD' +__url__ = 'http://dpkt.googlecode.com/' +__version__ = '1.8.6.2' + +from dpkt import * + +import ah +import aoe +import aim +import arp +import asn1 +import bgp +import cdp +import dhcp +import diameter +import dns +import dtp +import esp +import ethernet +import gre +import gzip +import h225 +import hsrp +import http +import icmp +import icmp6 +import ieee80211 +import igmp +import ip +import ip6 +import ipx +import llc +import loopback +import mrt +import netbios +import netflow +import ntp +import ospf +import pcap +import pim +import pmap +import ppp +import pppoe +import qq +import radiotap +import radius +import rfb +import rip +import rpc +import rtp +import rx +import sccp +import sctp +import sip +import sll +import smb +import ssl +import stp +import stun +import tcp +import telnet +import tftp +import tns +import tpkt +import udp +import vrrp +import yahoo diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ah.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ah.py new file mode 100644 index 00000000..5ad29ad5 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ah.py @@ -0,0 +1,35 @@ +# $Id: ah.py 34 2007-01-28 07:54:20Z dugsong $ +# -*- coding: utf-8 -*- + +"""Authentication Header.""" + +import dpkt + + +class AH(dpkt.Packet): + __hdr__ = ( + ('nxt', 'B', 0), + ('len', 'B', 0), # payload length + ('rsvd', 'H', 0), + ('spi', 'I', 0), + ('seq', 'I', 0) + ) + auth = '' + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.auth = self.data[:self.len] + buf = self.data[self.len:] + import ip + + try: + self.data = ip.IP.get_proto(self.nxt)(buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def __len__(self): + return self.__hdr_len__ + len(self.auth) + len(self.data) + + def __str__(self): + return self.pack_hdr() + str(self.auth) + str(self.data) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aim.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aim.py new file mode 100644 index 00000000..8250d69e --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aim.py @@ -0,0 +1,52 @@ +# $Id: aim.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- + +"""AOL Instant Messenger.""" + +import dpkt +import struct + +# OSCAR: http://iserverd1.khstu.ru/oscar/ + + +class FLAP(dpkt.Packet): + __hdr__ = ( + ('ast', 'B', 0x2a), # '*' + ('type', 'B', 0), + ('seq', 'H', 0), + ('len', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.ast != 0x2a: + raise dpkt.UnpackError('invalid FLAP header') + if len(self.data) < self.len: + raise dpkt.NeedData, '%d left, %d needed' % (len(self.data), self.len) + + +class SNAC(dpkt.Packet): + __hdr__ = ( + ('family', 'H', 0), + ('subtype', 'H', 0), + ('flags', 'H', 0), + ('reqid', 'I', 0) + ) + + +def tlv(buf): + n = 4 + try: + t, l = struct.unpack('>HH', buf[:n]) + except struct.error: + raise dpkt.UnpackError + v = buf[n:n + l] + if len(v) < l: + raise dpkt.NeedData + buf = buf[n + l:] + return t, l, v, buf + +# TOC 1.0: http://jamwt.com/Py-TOC/PROTOCOL + +# TOC 2.0: http://www.firestuff.org/projects/firetalk/doc/toc2.txt + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoe.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoe.py new file mode 100644 index 00000000..8fcf7c63 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoe.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- +"""ATA over Ethernet Protocol.""" + +import struct +import dpkt +from decorators import deprecated + + +class AOE(dpkt.Packet): + __hdr__ = ( + ('ver_fl', 'B', 0x10), + ('err', 'B', 0), + ('maj', 'H', 0), + ('min', 'B', 0), + ('cmd', 'B', 0), + ('tag', 'I', 0), + ) + _cmdsw = {} + + @property + def ver(self): return self.ver_fl >> 4 + + @ver.setter + def ver(self, ver): self.ver_fl = (ver << 4) | (self.ver_fl & 0xf) + + @property + def fl(self): return self.ver_fl & 0xf + + @fl.setter + def fl(self, fl): self.ver_fl = (self.ver_fl & 0xf0) | fl + + @classmethod + def set_cmd(cls, cmd, pktclass): + cls._cmdsw[cmd] = pktclass + + @classmethod + def get_cmd(cls, cmd): + return cls._cmdsw[cmd] + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._cmdsw[self.cmd](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, struct.error, dpkt.UnpackError): + pass + + def pack_hdr(self): + try: + return dpkt.Packet.pack_hdr(self) + except struct.error, e: + raise dpkt.PackError(str(e)) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_ver(self): return self.ver + + @deprecated + def _set_ver(self, ver): self.ver = ver + + @deprecated + def _get_fl(self): return self.fl + + @deprecated + def _set_fl(self, fl): self.fl = fl + # ================================================= + + + +AOE_CMD_ATA = 0 +AOE_CMD_CFG = 1 +AOE_FLAG_RSP = 1 << 3 + + +def __load_cmds(): + prefix = 'AOE_CMD_' + g = globals() + for k, v in g.iteritems(): + if k.startswith(prefix): + name = 'aoe' + k[len(prefix):].lower() + try: + mod = __import__(name, g) + except ImportError: + continue + AOE.set_cmd(v, getattr(mod, name.upper())) + + +if not AOE._cmdsw: + __load_cmds() diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoeata.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoeata.py new file mode 100644 index 00000000..1be917d3 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoeata.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +"""ATA over Ethernet ATA command""" + +import dpkt + +ATA_DEVICE_IDENTIFY = 0xec + + +class AOEATA(dpkt.Packet): + __hdr__ = ( + ('aflags', 'B', 0), + ('errfeat', 'B', 0), + ('scnt', 'B', 0), + ('cmdstat', 'B', ATA_DEVICE_IDENTIFY), + ('lba0', 'B', 0), + ('lba1', 'B', 0), + ('lba2', 'B', 0), + ('lba3', 'B', 0), + ('lba4', 'B', 0), + ('lba5', 'B', 0), + ('res', 'H', 0), + ) + + # XXX: in unpack, switch on ATA command like icmp does on type + + +def test_aoeata(): + s = '\x03\x0a\x6b\x19\x00\x00\x00\x00\x45\x00\x00\x28\x94\x1f\x00\x00\xe3\x06\x99\xb4\x23\x2b\x24\x00\xde\x8e\x84\x42\xab\xd1\x00\x50\x00\x35\xe1\x29\x20\xd9\x00\x00\x00\x22\x9b\xf0\xe2\x04\x65\x6b' + aoeata = AOEATA(s) + assert (str(aoeata) == s) + + +if __name__ == '__main__': + test_aoeata() + print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoecfg.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoecfg.py new file mode 100644 index 00000000..7643eddf --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoecfg.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +"""ATA over Ethernet ATA command""" + +import dpkt + + +class AOECFG(dpkt.Packet): + __hdr__ = ( + ('bufcnt', 'H', 0), + ('fwver', 'H', 0), + ('scnt', 'B', 0), + ('aoeccmd', 'B', 0), + ('cslen', 'H', 0), + ) + + +def test_aoecfg(): + s = '\x01\x02\x03\x04\x05\x06\x11\x12\x13\x14\x15\x16\x88\xa2\x10\x00\x00\x01\x02\x01\x80\x00\x00\x00\x12\x34\x00\x00\x00\x00\x04\x00' + '\0xed' * 1024 + aoecfg = AOECFG(s[14 + 10:]) + assert (aoecfg.bufcnt == 0x1234) + + +if __name__ == '__main__': + test_aoecfg() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/arp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/arp.py new file mode 100644 index 00000000..a6ae62f4 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/arp.py @@ -0,0 +1,32 @@ +# $Id: arp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Address Resolution Protocol.""" + +import dpkt + +# Hardware address format +ARP_HRD_ETH = 0x0001 # ethernet hardware +ARP_HRD_IEEE802 = 0x0006 # IEEE 802 hardware + +# Protocol address format +ARP_PRO_IP = 0x0800 # IP protocol + +# ARP operation +ARP_OP_REQUEST = 1 # request to resolve ha given pa +ARP_OP_REPLY = 2 # response giving hardware address +ARP_OP_REVREQUEST = 3 # request to resolve pa given ha +ARP_OP_REVREPLY = 4 # response giving protocol address + + +class ARP(dpkt.Packet): + __hdr__ = ( + ('hrd', 'H', ARP_HRD_ETH), + ('pro', 'H', ARP_PRO_IP), + ('hln', 'B', 6), # hardware address length + ('pln', 'B', 4), # protocol address length + ('op', 'H', ARP_OP_REQUEST), + ('sha', '6s', ''), + ('spa', '4s', ''), + ('tha', '6s', ''), + ('tpa', '4s', '') + ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/asn1.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/asn1.py new file mode 100644 index 00000000..7acae041 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/asn1.py @@ -0,0 +1,121 @@ +# $Id: asn1.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Abstract Syntax Notation #1.""" + +import struct +import time +import dpkt + +# Type class +CLASSMASK = 0xc0 +UNIVERSAL = 0x00 +APPLICATION = 0x40 +CONTEXT = 0x80 +PRIVATE = 0xc0 + +# Constructed (vs. primitive) +CONSTRUCTED = 0x20 + +# Universal-class tags +TAGMASK = 0x1f +INTEGER = 2 +BIT_STRING = 3 # arbitrary bit string +OCTET_STRING = 4 # arbitrary octet string +NULL = 5 +OID = 6 # object identifier +SEQUENCE = 16 # ordered collection of types +SET = 17 # unordered collection of types +PRINT_STRING = 19 # printable string +T61_STRING = 20 # T.61 (8-bit) character string +IA5_STRING = 22 # ASCII +UTC_TIME = 23 + + +def utctime(buf): + """Convert ASN.1 UTCTime string to UTC float.""" + yy = int(buf[:2]) + mn = int(buf[2:4]) + dd = int(buf[4:6]) + hh = int(buf[6:8]) + mm = int(buf[8:10]) + try: + ss = int(buf[10:12]) + buf = buf[12:] + except TypeError: + ss = 0 + buf = buf[10:] + if buf[0] == '+': + hh -= int(buf[1:3]) + mm -= int(buf[3:5]) + elif buf[0] == '-': + hh += int(buf[1:3]) + mm += int(buf[3:5]) + return time.mktime((2000 + yy, mn, dd, hh, mm, ss, 0, 0, 0)) + + +def decode(buf): + """Sleazy ASN.1 decoder. + Return list of (id, value) tuples from ASN.1 BER/DER encoded buffer. + """ + msg = [] + while buf: + t = ord(buf[0]) + constructed = t & CONSTRUCTED + tag = t & TAGMASK + l = ord(buf[1]) + c = 0 + if constructed and l == 128: + # XXX - constructed, indefinite length + msg.append((t, decode(buf[2:]))) + elif l >= 128: + c = l & 127 + if c == 1: + l = ord(buf[2]) + elif c == 2: + l = struct.unpack('>H', buf[2:4])[0] + elif c == 3: + l = struct.unpack('>I', buf[1:5])[0] & 0xfff + c = 2 + elif c == 4: + l = struct.unpack('>I', buf[2:6])[0] + else: + # XXX - can be up to 127 bytes, but... + raise dpkt.UnpackError('excessive long-form ASN.1 length %d' % l) + + # Skip type, length + buf = buf[2 + c:] + + # Parse content + if constructed: + msg.append((t, decode(buf))) + elif tag == INTEGER: + if l == 0: + n = 0 + elif l == 1: + n = ord(buf[0]) + elif l == 2: + n = struct.unpack('>H', buf[:2])[0] + elif l == 3: + n = struct.unpack('>I', buf[:4])[0] >> 8 + elif l == 4: + n = struct.unpack('>I', buf[:4])[0] + else: + raise dpkt.UnpackError('excessive integer length > %d bytes' % l) + msg.append((t, n)) + elif tag == UTC_TIME: + msg.append((t, utctime(buf[:l]))) + else: + msg.append((t, buf[:l])) + + # Skip content + buf = buf[l:] + return msg + + +def test_asn1(): + s = '0\x82\x02Q\x02\x01\x0bc\x82\x02J\x04xcn=Douglas J Song 1, ou=Information Technology Division, ou=Faculty and Staff, ou=People, o=University of Michigan, c=US\n\x01\x00\n\x01\x03\x02\x01\x00\x02\x01\x00\x01\x01\x00\x87\x0bobjectclass0\x82\x01\xb0\x04\rmemberOfGroup\x04\x03acl\x04\x02cn\x04\x05title\x04\rpostalAddress\x04\x0ftelephoneNumber\x04\x04mail\x04\x06member\x04\thomePhone\x04\x11homePostalAddress\x04\x0bobjectClass\x04\x0bdescription\x04\x18facsimileTelephoneNumber\x04\x05pager\x04\x03uid\x04\x0cuserPassword\x04\x08joinable\x04\x10associatedDomain\x04\x05owner\x04\x0erfc822ErrorsTo\x04\x08ErrorsTo\x04\x10rfc822RequestsTo\x04\nRequestsTo\x04\tmoderator\x04\nlabeledURL\x04\nonVacation\x04\x0fvacationMessage\x04\x05drink\x04\x0elastModifiedBy\x04\x10lastModifiedTime\x04\rmodifiersname\x04\x0fmodifytimestamp\x04\x0ccreatorsname\x04\x0fcreatetimestamp' + assert (decode(s) == [(48, [(2, 11), (99, [(4, 'cn=Douglas J Song 1, ou=Information Technology Division, ou=Faculty and Staff, ou=People, o=University of Michigan, c=US'), (10, '\x00'), (10, '\x03'), (2, 0), (2, 0), (1, '\x00'), (135, 'objectclass'), (48, [(4, 'memberOfGroup'), (4, 'acl'), (4, 'cn'), (4, 'title'), (4, 'postalAddress'), (4, 'telephoneNumber'), (4, 'mail'), (4, 'member'), (4, 'homePhone'), (4, 'homePostalAddress'), (4, 'objectClass'), (4, 'description'), (4, 'facsimileTelephoneNumber'), (4, 'pager'), (4, 'uid'), (4, 'userPassword'), (4, 'joinable'), (4, 'associatedDomain'), (4, 'owner'), (4, 'rfc822ErrorsTo'), (4, 'ErrorsTo'), (4, 'rfc822RequestsTo'), (4, 'RequestsTo'), (4, 'moderator'), (4, 'labeledURL'), (4, 'onVacation'), (4, 'vacationMessage'), (4, 'drink'), (4, 'lastModifiedBy'), (4, 'lastModifiedTime'), (4, 'modifiersname'), (4, 'modifytimestamp'), (4, 'creatorsname'), (4, 'createtimestamp')])])])]) + +if __name__ == '__main__': + test_asn1() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/bgp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/bgp.py new file mode 100644 index 00000000..7439a0e3 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/bgp.py @@ -0,0 +1,789 @@ +# $Id: bgp.py 76 2011-01-06 15:51:30Z dugsong $ +# -*- coding: utf-8 -*- +"""Border Gateway Protocol.""" + +import struct +import socket +import dpkt +from decorators import deprecated + + +# Border Gateway Protocol 4 - RFC 4271 +# Communities Attribute - RFC 1997 +# Capabilities - RFC 3392 +# Route Refresh - RFC 2918 +# Route Reflection - RFC 4456 +# Confederations - RFC 3065 +# Cease Subcodes - RFC 4486 +# NOPEER Community - RFC 3765 +# Multiprotocol Extensions - 2858 + +# Message Types +OPEN = 1 +UPDATE = 2 +NOTIFICATION = 3 +KEEPALIVE = 4 +ROUTE_REFRESH = 5 + +# Attribute Types +ORIGIN = 1 +AS_PATH = 2 +NEXT_HOP = 3 +MULTI_EXIT_DISC = 4 +LOCAL_PREF = 5 +ATOMIC_AGGREGATE = 6 +AGGREGATOR = 7 +COMMUNITIES = 8 +ORIGINATOR_ID = 9 +CLUSTER_LIST = 10 +MP_REACH_NLRI = 14 +MP_UNREACH_NLRI = 15 + +# Origin Types +ORIGIN_IGP = 0 +ORIGIN_EGP = 1 +INCOMPLETE = 2 + +# AS Path Types +AS_SET = 1 +AS_SEQUENCE = 2 +AS_CONFED_SEQUENCE = 3 +AS_CONFED_SET = 4 + +# Reserved Communities Types +NO_EXPORT = 0xffffff01L +NO_ADVERTISE = 0xffffff02L +NO_EXPORT_SUBCONFED = 0xffffff03L +NO_PEER = 0xffffff04L + +# Common AFI types +AFI_IPV4 = 1 +AFI_IPV6 = 2 + +# Multiprotocol SAFI types +SAFI_UNICAST = 1 +SAFI_MULTICAST = 2 +SAFI_UNICAST_MULTICAST = 3 + +# OPEN Message Optional Parameters +AUTHENTICATION = 1 +CAPABILITY = 2 + +# Capability Types +CAP_MULTIPROTOCOL = 1 +CAP_ROUTE_REFRESH = 2 + +# NOTIFICATION Error Codes +MESSAGE_HEADER_ERROR = 1 +OPEN_MESSAGE_ERROR = 2 +UPDATE_MESSAGE_ERROR = 3 +HOLD_TIMER_EXPIRED = 4 +FSM_ERROR = 5 +CEASE = 6 + +# Message Header Error Subcodes +CONNECTION_NOT_SYNCHRONIZED = 1 +BAD_MESSAGE_LENGTH = 2 +BAD_MESSAGE_TYPE = 3 + +# OPEN Message Error Subcodes +UNSUPPORTED_VERSION_NUMBER = 1 +BAD_PEER_AS = 2 +BAD_BGP_IDENTIFIER = 3 +UNSUPPORTED_OPTIONAL_PARAMETER = 4 +AUTHENTICATION_FAILURE = 5 +UNACCEPTABLE_HOLD_TIME = 6 +UNSUPPORTED_CAPABILITY = 7 + +# UPDATE Message Error Subcodes +MALFORMED_ATTRIBUTE_LIST = 1 +UNRECOGNIZED_ATTRIBUTE = 2 +MISSING_ATTRIBUTE = 3 +ATTRIBUTE_FLAGS_ERROR = 4 +ATTRIBUTE_LENGTH_ERROR = 5 +INVALID_ORIGIN_ATTRIBUTE = 6 +AS_ROUTING_LOOP = 7 +INVALID_NEXT_HOP_ATTRIBUTE = 8 +OPTIONAL_ATTRIBUTE_ERROR = 9 +INVALID_NETWORK_FIELD = 10 +MALFORMED_AS_PATH = 11 + +# Cease Error Subcodes +MAX_NUMBER_OF_PREFIXES_REACHED = 1 +ADMINISTRATIVE_SHUTDOWN = 2 +PEER_DECONFIGURED = 3 +ADMINISTRATIVE_RESET = 4 +CONNECTION_REJECTED = 5 +OTHER_CONFIGURATION_CHANGE = 6 +CONNECTION_COLLISION_RESOLUTION = 7 +OUT_OF_RESOURCES = 8 + + +class BGP(dpkt.Packet): + __hdr__ = ( + ('marker', '16s', '\xff' * 16), + ('len', 'H', 0), + ('type', 'B', OPEN) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len - self.__hdr_len__] + if self.type == OPEN: + self.data = self.open = self.Open(self.data) + elif self.type == UPDATE: + self.data = self.update = self.Update(self.data) + elif self.type == NOTIFICATION: + self.data = self.notifiation = self.Notification(self.data) + elif self.type == KEEPALIVE: + self.data = self.keepalive = self.Keepalive(self.data) + elif self.type == ROUTE_REFRESH: + self.data = self.route_refresh = self.RouteRefresh(self.data) + + class Open(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 4), + ('asn', 'H', 0), + ('holdtime', 'H', 0), + ('identifier', 'I', 0), + ('param_len', 'B', 0) + ) + __hdr_defaults__ = { + 'parameters': [] + } + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + plen = self.param_len + while plen > 0: + param = self.Parameter(self.data) + self.data = self.data[len(param):] + plen -= len(param) + l.append(param) + self.data = self.parameters = l + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.parameters)) + + def __str__(self): + params = ''.join(map(str, self.parameters)) + self.param_len = len(params) + return self.pack_hdr() + params + + class Parameter(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len] + + if self.type == AUTHENTICATION: + self.data = self.authentication = self.Authentication(self.data) + elif self.type == CAPABILITY: + self.data = self.capability = self.Capability(self.data) + + class Authentication(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ) + + class Capability(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len] + + class Update(dpkt.Packet): + __hdr_defaults__ = { + 'withdrawn': [], + 'attributes': [], + 'announced': [] + } + + def unpack(self, buf): + self.data = buf + + # Withdrawn Routes + wlen = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + l = [] + while wlen > 0: + route = RouteIPV4(self.data) + self.data = self.data[len(route):] + wlen -= len(route) + l.append(route) + self.withdrawn = l + + # Path Attributes + plen = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + l = [] + while plen > 0: + attr = self.Attribute(self.data) + self.data = self.data[len(attr):] + plen -= len(attr) + l.append(attr) + self.attributes = l + + # Announced Routes + l = [] + while self.data: + route = RouteIPV4(self.data) + self.data = self.data[len(route):] + l.append(route) + self.announced = l + + def __len__(self): + return 2 + sum(map(len, self.withdrawn)) + \ + 2 + sum(map(len, self.attributes)) + \ + sum(map(len, self.announced)) + + def __str__(self): + return struct.pack('>H', sum(map(len, self.withdrawn))) + \ + ''.join(map(str, self.withdrawn)) + \ + struct.pack('>H', sum(map(len, self.attributes))) + \ + ''.join(map(str, self.attributes)) + \ + ''.join(map(str, self.announced)) + + class Attribute(dpkt.Packet): + __hdr__ = ( + ('flags', 'B', 0), + ('type', 'B', 0) + ) + + @property + def optional(self): + return (self.flags >> 7) & 0x1 + + @optional.setter + def optional(self, o): + self.flags = (self.flags & ~0x80) | ((o & 0x1) << 7) + + @property + def transitive(self): + return (self.flags >> 6) & 0x1 + + @transitive.setter + def transitive(self, t): + self.flags = (self.flags & ~0x40) | ((t & 0x1) << 6) + + @property + def partial(self): + return (self.flags >> 5) & 0x1 + + @partial.setter + def partial(self, p): + self.flags = (self.flags & ~0x20) | ((p & 0x1) << 5) + + @property + def extended_length(self): + return (self.flags >> 4) & 0x1 + + @extended_length.setter + def extended_length(self, e): + self.flags = (self.flags & ~0x10) | ((e & 0x1) << 4) + + # Deprecated methods, will be removed in the future + # ====================================================== + @deprecated + def _get_o(self): + return self.optional + + @deprecated + def _set_o(self, o): + self.optional = o + + @deprecated + def _get_t(self): + return self.transitive + + @deprecated + def _set_t(self, t): + self.transitive = t + + @deprecated + def _get_p(self): + return self.partial + + @deprecated + def _set_p(self, p): + self.partial = p + + @deprecated + def _get_e(self): + return self.extended_length + + @deprecated + def _set_e(self, e): + self.extended_length = e + + # ====================================================== + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + if self.extended_length: + self.len = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + else: + self.len = struct.unpack('B', self.data[:1])[0] + self.data = self.data[1:] + + self.data = self.data[:self.len] + + if self.type == ORIGIN: + self.data = self.origin = self.Origin(self.data) + elif self.type == AS_PATH: + self.data = self.as_path = self.ASPath(self.data) + elif self.type == NEXT_HOP: + self.data = self.next_hop = self.NextHop(self.data) + elif self.type == MULTI_EXIT_DISC: + self.data = self.multi_exit_disc = self.MultiExitDisc(self.data) + elif self.type == LOCAL_PREF: + self.data = self.local_pref = self.LocalPref(self.data) + elif self.type == ATOMIC_AGGREGATE: + self.data = self.atomic_aggregate = self.AtomicAggregate(self.data) + elif self.type == AGGREGATOR: + self.data = self.aggregator = self.Aggregator(self.data) + elif self.type == COMMUNITIES: + self.data = self.communities = self.Communities(self.data) + elif self.type == ORIGINATOR_ID: + self.data = self.originator_id = self.OriginatorID(self.data) + elif self.type == CLUSTER_LIST: + self.data = self.cluster_list = self.ClusterList(self.data) + elif self.type == MP_REACH_NLRI: + self.data = self.mp_reach_nlri = self.MPReachNLRI(self.data) + elif self.type == MP_UNREACH_NLRI: + self.data = self.mp_unreach_nlri = self.MPUnreachNLRI(self.data) + + def __len__(self): + if self.extended_length: + attr_len = 2 + else: + attr_len = 1 + return self.__hdr_len__ + attr_len + len(self.data) + + def __str__(self): + if self.extended_length: + attr_len_str = struct.pack('>H', self.len) + else: + attr_len_str = struct.pack('B', self.len) + return self.pack_hdr() + attr_len_str + str(self.data) + + class Origin(dpkt.Packet): + __hdr__ = ( + ('type', 'B', ORIGIN_IGP), + ) + + class ASPath(dpkt.Packet): + __hdr_defaults__ = { + 'segments': [] + } + + def unpack(self, buf): + self.data = buf + l = [] + while self.data: + seg = self.ASPathSegment(self.data) + self.data = self.data[len(seg):] + l.append(seg) + self.data = self.segments = l + + def __len__(self): + return sum(map(len, self.data)) + + def __str__(self): + return ''.join(map(str, self.data)) + + class ASPathSegment(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + for i in range(self.len): + AS = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + l.append(AS) + self.data = self.path = l + + def __len__(self): + return self.__hdr_len__ + 2 * len(self.path) + + def __str__(self): + as_str = '' + for AS in self.path: + as_str += struct.pack('>H', AS) + return self.pack_hdr() + as_str + + class NextHop(dpkt.Packet): + __hdr__ = ( + ('ip', 'I', 0), + ) + + class MultiExitDisc(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class LocalPref(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class AtomicAggregate(dpkt.Packet): + def unpack(self, buf): + pass + + def __len__(self): + return 0 + + def __str__(self): + return '' + + class Aggregator(dpkt.Packet): + __hdr__ = ( + ('asn', 'H', 0), + ('ip', 'I', 0) + ) + + class Communities(dpkt.Packet): + __hdr_defaults__ = { + 'list': [] + } + + def unpack(self, buf): + self.data = buf + l = [] + while self.data: + val = struct.unpack('>I', self.data[:4])[0] + if (0x00000000L <= val <= 0x0000ffffL) or (0xffff0000L <= val <= 0xffffffffL): + comm = self.ReservedCommunity(self.data[:4]) + else: + comm = self.Community(self.data[:4]) + self.data = self.data[len(comm):] + l.append(comm) + self.data = self.list = l + + def __len__(self): + return sum(map(len, self.data)) + + def __str__(self): + return ''.join(map(str, self.data)) + + class Community(dpkt.Packet): + __hdr__ = ( + ('asn', 'H', 0), + ('value', 'H', 0) + ) + + class ReservedCommunity(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class OriginatorID(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class ClusterList(dpkt.Packet): + __hdr_defaults__ = { + 'list': [] + } + + def unpack(self, buf): + self.data = buf + l = [] + while self.data: + id = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:] + l.append(id) + self.data = self.list = l + + def __len__(self): + return 4 * len(self.list) + + def __str__(self): + cluster_str = '' + for val in self.list: + cluster_str += struct.pack('>I', val) + return cluster_str + + class MPReachNLRI(dpkt.Packet): + __hdr__ = ( + ('afi', 'H', AFI_IPV4), + ('safi', 'B', SAFI_UNICAST), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + # Next Hop + nlen = struct.unpack('B', self.data[:1])[0] + self.data = self.data[1:] + self.next_hop = self.data[:nlen] + self.data = self.data[nlen:] + + # SNPAs + l = [] + num_snpas = struct.unpack('B', self.data[:1])[0] + self.data = self.data[1:] + for i in range(num_snpas): + snpa = self.SNPA(self.data) + self.data = self.data[len(snpa):] + l.append(snpa) + self.snpas = l + + if self.afi == AFI_IPV4: + Route = RouteIPV4 + elif self.afi == AFI_IPV6: + Route = RouteIPV6 + else: + Route = RouteGeneric + + # Announced Routes + l = [] + while self.data: + route = Route(self.data) + self.data = self.data[len(route):] + l.append(route) + self.data = self.announced = l + + def __len__(self): + return self.__hdr_len__ + \ + 1 + len(self.next_hop) + \ + 1 + sum(map(len, self.snpas)) + \ + sum(map(len, self.announced)) + + def __str__(self): + return self.pack_hdr() + \ + struct.pack('B', len(self.next_hop)) + \ + str(self.next_hop) + \ + struct.pack('B', len(self.snpas)) + \ + ''.join(map(str, self.snpas)) + \ + ''.join(map(str, self.announced)) + + class SNPA(object): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:(self.len + 1) / 2] + + class MPUnreachNLRI(dpkt.Packet): + __hdr__ = ( + ('afi', 'H', AFI_IPV4), + ('safi', 'B', SAFI_UNICAST), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + if self.afi == AFI_IPV4: + Route = RouteIPV4 + elif self.afi == AFI_IPV6: + Route = RouteIPV6 + else: + Route = RouteGeneric + + # Withdrawn Routes + l = [] + while self.data: + route = Route(self.data) + self.data = self.data[len(route):] + l.append(route) + self.data = self.withdrawn = l + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + return self.pack_hdr() + ''.join(map(str, self.data)) + + class Notification(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ('subcode', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.error = self.data + + class Keepalive(dpkt.Packet): + def unpack(self, buf): + pass + + def __len__(self): + return 0 + + def __str__(self): + return '' + + class RouteRefresh(dpkt.Packet): + __hdr__ = ( + ('afi', 'H', AFI_IPV4), + ('rsvd', 'B', 0), + ('safi', 'B', SAFI_UNICAST) + ) + + +class RouteGeneric(dpkt.Packet): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.prefix = self.data[:(self.len + 7) / 8] + + +class RouteIPV4(dpkt.Packet): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + tmp = self.data[:(self.len + 7) / 8] + tmp += (4 - len(tmp)) * '\x00' + self.data = self.prefix = tmp + + def __repr__(self): + cidr = '%s/%d' % (socket.inet_ntoa(self.prefix), self.len) + return '%s(%s)' % (self.__class__.__name__, cidr) + + def __len__(self): + return self.__hdr_len__ + (self.len + 7) / 8 + + def __str__(self): + return self.pack_hdr() + self.prefix[:(self.len + 7) / 8] + + +class RouteIPV6(dpkt.Packet): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + tmp = self.data[:(self.len + 7) / 8] + tmp += (16 - len(tmp)) * '\x00' + self.data = self.prefix = tmp + + def __len__(self): + return self.__hdr_len__ + (self.len + 7) / 8 + + def __str__(self): + return self.pack_hdr() + self.prefix[:(self.len + 7) / 8] + + +__bgp1 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x13\x04' +__bgp2 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x63\x02\x00\x00\x00\x48\x40\x01\x01\x00\x40\x02\x0a\x01\x02\x01\xf4\x01\xf4\x02\x01\xfe\xbb\x40\x03\x04\xc0\xa8\x00\x0f\x40\x05\x04\x00\x00\x00\x64\x40\x06\x00\xc0\x07\x06\xfe\xba\xc0\xa8\x00\x0a\xc0\x08\x0c\xfe\xbf\x00\x01\x03\x16\x00\x04\x01\x54\x00\xfa\x80\x09\x04\xc0\xa8\x00\x0f\x80\x0a\x04\xc0\xa8\x00\xfa\x16\xc0\xa8\x04' +__bgp3 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x79\x02\x00\x00\x00\x62\x40\x01\x01\x00\x40\x02\x00\x40\x05\x04\x00\x00\x00\x64\xc0\x10\x08\x00\x02\x01\x2c\x00\x00\x01\x2c\xc0\x80\x24\x00\x00\xfd\xe9\x40\x01\x01\x00\x40\x02\x04\x02\x01\x15\xb3\x40\x05\x04\x00\x00\x00\x2c\x80\x09\x04\x16\x05\x05\x05\x80\x0a\x04\x16\x05\x05\x05\x90\x0e\x00\x1e\x00\x01\x80\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x04\x04\x04\x00\x60\x18\x77\x01\x00\x00\x01\xf4\x00\x00\x01\xf4\x85' +__bgp4 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x2d\x01\x04\x00\xed\x00\x5a\xc6\x6e\x83\x7d\x10\x02\x06\x01\x04\x00\x01\x00\x01\x02\x02\x80\x00\x02\x02\x02\x00' + + +def test_pack(): + assert (__bgp1 == str(BGP(__bgp1))) + assert (__bgp2 == str(BGP(__bgp2))) + assert (__bgp3 == str(BGP(__bgp3))) + assert (__bgp4 == str(BGP(__bgp4))) + + +def test_unpack(): + b1 = BGP(__bgp1) + assert (b1.len == 19) + assert (b1.type == KEEPALIVE) + assert (b1.keepalive is not None) + + b2 = BGP(__bgp2) + assert (b2.type == UPDATE) + assert (len(b2.update.withdrawn) == 0) + assert (len(b2.update.announced) == 1) + assert (len(b2.update.attributes) == 9) + a = b2.update.attributes[1] + assert (a.type == AS_PATH) + assert (a.len == 10) + assert (len(a.as_path.segments) == 2) + s = a.as_path.segments[0] + assert (s.type == AS_SET) + assert (s.len == 2) + assert (len(s.path) == 2) + assert (s.path[0] == 500) + + a = b2.update.attributes[6] + assert (a.type == COMMUNITIES) + assert (a.len == 12) + assert (len(a.communities.list) == 3) + c = a.communities.list[0] + assert (c.asn == 65215) + assert (c.value == 1) + r = b2.update.announced[0] + assert (r.len == 22) + assert (r.prefix == '\xc0\xa8\x04\x00') + + b3 = BGP(__bgp3) + assert (b3.type == UPDATE) + assert (len(b3.update.withdrawn) == 0) + assert (len(b3.update.announced) == 0) + assert (len(b3.update.attributes) == 6) + a = b3.update.attributes[0] + assert (a.optional == False) + assert (a.transitive == True) + assert (a.partial == False) + assert (a.extended_length == False) + assert (a.type == ORIGIN) + assert (a.len == 1) + o = a.origin + assert (o.type == ORIGIN_IGP) + a = b3.update.attributes[5] + assert (a.optional == True) + assert (a.transitive == False) + assert (a.partial == False) + assert (a.extended_length == True) + assert (a.type == MP_REACH_NLRI) + assert (a.len == 30) + m = a.mp_reach_nlri + assert (m.afi == AFI_IPV4) + assert (len(m.snpas) == 0) + assert (len(m.announced) == 1) + p = m.announced[0] + assert (p.len == 96) + + b4 = BGP(__bgp4) + assert (b4.len == 45) + assert (b4.type == OPEN) + assert (b4.open.asn == 237) + assert (b4.open.param_len == 16) + assert (len(b4.open.parameters) == 3) + p = b4.open.parameters[0] + assert (p.type == CAPABILITY) + assert (p.len == 6) + c = p.capability + assert (c.code == CAP_MULTIPROTOCOL) + assert (c.len == 4) + assert (c.data == '\x00\x01\x00\x01') + c = b4.open.parameters[2].capability + assert (c.code == CAP_ROUTE_REFRESH) + assert (c.len == 0) + + +if __name__ == '__main__': + test_pack() + test_unpack() + print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/cdp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/cdp.py new file mode 100644 index 00000000..43c6a564 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/cdp.py @@ -0,0 +1,99 @@ +# $Id: cdp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Cisco Discovery Protocol.""" + +import struct +import dpkt + +CDP_DEVID = 1 # string +CDP_ADDRESS = 2 +CDP_PORTID = 3 # string +CDP_CAPABILITIES = 4 # 32-bit bitmask +CDP_VERSION = 5 # string +CDP_PLATFORM = 6 # string +CDP_IPPREFIX = 7 + +CDP_VTP_MGMT_DOMAIN = 9 # string +CDP_NATIVE_VLAN = 10 # 16-bit integer +CDP_DUPLEX = 11 # 8-bit boolean +CDP_TRUST_BITMAP = 18 # 8-bit bitmask0x13 +CDP_UNTRUST_COS = 19 # 8-bit port +CDP_SYSTEM_NAME = 20 # string +CDP_SYSTEM_OID = 21 # 10-byte binary string +CDP_MGMT_ADDRESS = 22 # 32-bit number of addrs, Addresses +CDP_LOCATION = 23 # string + + +class CDP(dpkt.Packet): + __hdr__ = ( + ('version', 'B', 2), + ('ttl', 'B', 180), + ('sum', 'H', 0) + ) + + class Address(dpkt.Packet): + # XXX - only handle NLPID/IP for now + __hdr__ = ( + ('ptype', 'B', 1), # protocol type (NLPID) + ('plen', 'B', 1), # protocol length + ('p', 'B', 0xcc), # IP + ('alen', 'H', 4) # address length + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.alen] + + class TLV(dpkt.Packet): + __hdr__ = ( + ('type', 'H', 0), + ('len', 'H', 4) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len - 4] + if self.type == CDP_ADDRESS: + n = struct.unpack('>I', self.data[:4])[0] + buf = self.data[4:] + l = [] + for i in range(n): + a = CDP.Address(buf) + l.append(a) + buf = buf[len(a):] + self.data = l + + def __len__(self): + if self.type == CDP_ADDRESS: + n = 4 + sum(map(len, self.data)) + else: + n = len(self.data) + return self.__hdr_len__ + n + + def __str__(self): + self.len = len(self) + if self.type == CDP_ADDRESS: + s = struct.pack('>I', len(self.data)) + \ + ''.join(map(str, self.data)) + else: + s = self.data + return self.pack_hdr() + s + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = self.data + l = [] + while buf: + tlv = self.TLV(buf) + l.append(tlv) + buf = buf[len(tlv):] + self.data = l + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + data = ''.join(map(str, self.data)) + if not self.sum: + self.sum = dpkt.in_cksum(self.pack_hdr() + data) + return self.pack_hdr() + data diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/crc32c.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/crc32c.py new file mode 100644 index 00000000..aaf40e1f --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/crc32c.py @@ -0,0 +1,83 @@ +# $Id: crc32c.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +import array + +# CRC-32C Checksum +# http://tools.ietf.org/html/rfc3309 + +crc32c_table = ( + 0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L, 0xC79A971FL, + 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL, 0x8AD958CFL, 0x78B2DBCCL, + 0x6BE22838L, 0x9989AB3BL, 0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, + 0x5E133C24L, 0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL, + 0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L, 0x9A879FA0L, + 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L, 0x5D1D08BFL, 0xAF768BBCL, + 0xBC267848L, 0x4E4DFB4BL, 0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, + 0x33ED7D2AL, 0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L, + 0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L, 0x6DFE410EL, + 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL, 0x30E349B1L, 0xC288CAB2L, + 0xD1D83946L, 0x23B3BA45L, 0xF779DEAEL, 0x05125DADL, 0x1642AE59L, + 0xE4292D5AL, 0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL, + 0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L, 0x417B1DBCL, + 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L, 0x86E18AA3L, 0x748A09A0L, + 0x67DAFA54L, 0x95B17957L, 0xCBA24573L, 0x39C9C670L, 0x2A993584L, + 0xD8F2B687L, 0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L, + 0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L, 0x96BF4DCCL, + 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L, 0xDBFC821CL, 0x2997011FL, + 0x3AC7F2EBL, 0xC8AC71E8L, 0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, + 0x0F36E6F7L, 0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L, + 0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L, 0xEB1FCBADL, + 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L, 0x2C855CB2L, 0xDEEEDFB1L, + 0xCDBE2C45L, 0x3FD5AF46L, 0x7198540DL, 0x83F3D70EL, 0x90A324FAL, + 0x62C8A7F9L, 0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L, + 0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L, 0x3CDB9BDDL, + 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L, 0x82F63B78L, 0x709DB87BL, + 0x63CD4B8FL, 0x91A6C88CL, 0x456CAC67L, 0xB7072F64L, 0xA457DC90L, + 0x563C5F93L, 0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L, + 0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL, 0x92A8FC17L, + 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L, 0x55326B08L, 0xA759E80BL, + 0xB4091BFFL, 0x466298FCL, 0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, + 0x0B21572CL, 0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L, + 0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L, 0x65D122B9L, + 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL, 0x2892ED69L, 0xDAF96E6AL, + 0xC9A99D9EL, 0x3BC21E9DL, 0xEF087A76L, 0x1D63F975L, 0x0E330A81L, + 0xFC588982L, 0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL, + 0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L, 0x38CC2A06L, + 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L, 0xFF56BD19L, 0x0D3D3E1AL, + 0x1E6DCDEEL, 0xEC064EEDL, 0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, + 0xD0DDD530L, 0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL, + 0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL, 0x8ECEE914L, + 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L, 0xD3D3E1ABL, 0x21B862A8L, + 0x32E8915CL, 0xC083125FL, 0x144976B4L, 0xE622F5B7L, 0xF5720643L, + 0x07198540L, 0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L, + 0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL, 0xE330A81AL, + 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL, 0x24AA3F05L, 0xD6C1BC06L, + 0xC5914FF2L, 0x37FACCF1L, 0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, + 0x7AB90321L, 0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL, + 0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L, 0x34F4F86AL, + 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL, 0x79B737BAL, 0x8BDCB4B9L, + 0x988C474DL, 0x6AE7C44EL, 0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, + 0xAD7D5351L +) + + +def add(crc, buf): + buf = array.array('B', buf) + for b in buf: + crc = (crc >> 8) ^ crc32c_table[(crc ^ b) & 0xff] + return crc + + +def done(crc): + tmp = ~crc & 0xffffffffL + b0 = tmp & 0xff + b1 = (tmp >> 8) & 0xff + b2 = (tmp >> 16) & 0xff + b3 = (tmp >> 24) & 0xff + crc = (b0 << 24) | (b1 << 16) | (b2 << 8) | b3 + return crc + + +def cksum(buf): + """Return computed CRC-32c checksum.""" + return done(add(0xffffffffL, buf)) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/decorators.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/decorators.py new file mode 100644 index 00000000..08f78161 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/decorators.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +import warnings +from timeit import Timer +from test import pystone +from time import sleep + + +def decorator_with_args(decorator_to_enhance): + """ + This is decorator for decorator. It allows any decorator to get additional arguments + """ + def decorator_maker(*args, **kwargs): + def decorator_wrapper(func): + return decorator_to_enhance(func, *args, **kwargs) + return decorator_wrapper + return decorator_maker + + +def deprecated(deprecated_method): + def _deprecated(*args, **kwargs): + # Print only the first occurrence of the DeprecationWarning, regardless of location + warnings.simplefilter('once', DeprecationWarning) + # Display the deprecation warning message + warnings.warn("Call to deprecated method %s" % deprecated_method.__name__, + category=DeprecationWarning, stacklevel=2) + return deprecated_method(*args, **kwargs) # actually call the method + + return _deprecated + + +@decorator_with_args +def duration(function, repeat=10000): + def _duration(*args, **kwargs): + time = 0 + try: + time = Timer(lambda: function(*args, **kwargs)).timeit(repeat) + finally: + benchtime, pystones = pystone.pystones() + kstones = (pystones * time) / 1000 + print '%s : time = %f kstones = %f' % (function.__name__, time, kstones) + return function(*args, **kwargs) + + return _duration + + +class TestDeprecatedDecorator(object): + @deprecated + def deprecated_decorator(self): + return + + def test_deprecated_decorator(self): + import sys + from StringIO import StringIO + + saved_stderr = sys.stderr + try: + out = StringIO() + sys.stderr = out + self.deprecated_decorator() + assert ('DeprecationWarning: Call to deprecated method deprecated_decorator' in out.getvalue()) + # 'in' because message contains the filename, line, etc + finally: + sys.stderr = saved_stderr + + +class TestDurationDecorator(object): + @duration(1) + def duration_decorator(self): + sleep(0.05) + return + + def test_duration_decorator(self): + import sys + import re + from StringIO import StringIO + + saved_stdout = sys.stdout + try: + out = StringIO() + sys.stdout = out + self.duration_decorator() + assert (re.match('((.+?[0-9]+\.[0-9]+)\s?){2}', out.getvalue())) + finally: + sys.stdout = saved_stdout + +if __name__ == '__main__': + a = TestDeprecatedDecorator() + a.test_deprecated_decorator() + a = TestDurationDecorator() + a.test_duration_decorator() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dhcp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dhcp.py new file mode 100644 index 00000000..5332a1fc --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dhcp.py @@ -0,0 +1,169 @@ +# $Id: dhcp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Dynamic Host Configuration Protocol.""" + +import arp +import dpkt + +DHCP_OP_REQUEST = 1 +DHCP_OP_REPLY = 2 + +DHCP_MAGIC = 0x63825363 + +# DHCP option codes +DHCP_OPT_NETMASK = 1 # I: subnet mask +DHCP_OPT_TIMEOFFSET = 2 +DHCP_OPT_ROUTER = 3 # s: list of router ips +DHCP_OPT_TIMESERVER = 4 +DHCP_OPT_NAMESERVER = 5 +DHCP_OPT_DNS_SVRS = 6 # s: list of DNS servers +DHCP_OPT_LOGSERV = 7 +DHCP_OPT_COOKIESERV = 8 +DHCP_OPT_LPRSERV = 9 +DHCP_OPT_IMPSERV = 10 +DHCP_OPT_RESSERV = 11 +DHCP_OPT_HOSTNAME = 12 # s: client hostname +DHCP_OPT_BOOTFILESIZE = 13 +DHCP_OPT_DUMPFILE = 14 +DHCP_OPT_DOMAIN = 15 # s: domain name +DHCP_OPT_SWAPSERV = 16 +DHCP_OPT_ROOTPATH = 17 +DHCP_OPT_EXTENPATH = 18 +DHCP_OPT_IPFORWARD = 19 +DHCP_OPT_SRCROUTE = 20 +DHCP_OPT_POLICYFILTER = 21 +DHCP_OPT_MAXASMSIZE = 22 +DHCP_OPT_IPTTL = 23 +DHCP_OPT_MTUTIMEOUT = 24 +DHCP_OPT_MTUTABLE = 25 +DHCP_OPT_MTUSIZE = 26 +DHCP_OPT_LOCALSUBNETS = 27 +DHCP_OPT_BROADCASTADDR = 28 +DHCP_OPT_DOMASKDISCOV = 29 +DHCP_OPT_MASKSUPPLY = 30 +DHCP_OPT_DOROUTEDISC = 31 +DHCP_OPT_ROUTERSOLICIT = 32 +DHCP_OPT_STATICROUTE = 33 +DHCP_OPT_TRAILERENCAP = 34 +DHCP_OPT_ARPTIMEOUT = 35 +DHCP_OPT_ETHERENCAP = 36 +DHCP_OPT_TCPTTL = 37 +DHCP_OPT_TCPKEEPALIVE = 38 +DHCP_OPT_TCPALIVEGARBAGE = 39 +DHCP_OPT_NISDOMAIN = 40 +DHCP_OPT_NISSERVERS = 41 +DHCP_OPT_NISTIMESERV = 42 +DHCP_OPT_VENDSPECIFIC = 43 +DHCP_OPT_NBNS = 44 +DHCP_OPT_NBDD = 45 +DHCP_OPT_NBTCPIP = 46 +DHCP_OPT_NBTCPSCOPE = 47 +DHCP_OPT_XFONT = 48 +DHCP_OPT_XDISPLAYMGR = 49 +DHCP_OPT_REQ_IP = 50 # I: IP address +DHCP_OPT_LEASE_SEC = 51 # I: lease seconds +DHCP_OPT_OPTIONOVERLOAD = 52 +DHCP_OPT_MSGTYPE = 53 # B: message type +DHCP_OPT_SERVER_ID = 54 # I: server IP address +DHCP_OPT_PARAM_REQ = 55 # s: list of option codes +DHCP_OPT_MESSAGE = 56 +DHCP_OPT_MAXMSGSIZE = 57 +DHCP_OPT_RENEWTIME = 58 +DHCP_OPT_REBINDTIME = 59 +DHCP_OPT_VENDOR_ID = 60 # s: vendor class id +DHCP_OPT_CLIENT_ID = 61 # Bs: idtype, id (idtype 0: FQDN, idtype 1: MAC) +DHCP_OPT_NISPLUSDOMAIN = 64 +DHCP_OPT_NISPLUSSERVERS = 65 +DHCP_OPT_MOBILEIPAGENT = 68 +DHCP_OPT_SMTPSERVER = 69 +DHCP_OPT_POP3SERVER = 70 +DHCP_OPT_NNTPSERVER = 71 +DHCP_OPT_WWWSERVER = 72 +DHCP_OPT_FINGERSERVER = 73 +DHCP_OPT_IRCSERVER = 74 +DHCP_OPT_STSERVER = 75 +DHCP_OPT_STDASERVER = 76 + +# DHCP message type values +DHCPDISCOVER = 1 +DHCPOFFER = 2 +DHCPREQUEST = 3 +DHCPDECLINE = 4 +DHCPACK = 5 +DHCPNAK = 6 +DHCPRELEASE = 7 +DHCPINFORM = 8 + + +class DHCP(dpkt.Packet): + __hdr__ = ( + ('op', 'B', DHCP_OP_REQUEST), + ('hrd', 'B', arp.ARP_HRD_ETH), # just like ARP.hrd + ('hln', 'B', 6), # and ARP.hln + ('hops', 'B', 0), + ('xid', 'I', 0xdeadbeefL), + ('secs', 'H', 0), + ('flags', 'H', 0), + ('ciaddr', 'I', 0), + ('yiaddr', 'I', 0), + ('siaddr', 'I', 0), + ('giaddr', 'I', 0), + ('chaddr', '16s', 16 * '\x00'), + ('sname', '64s', 64 * '\x00'), + ('file', '128s', 128 * '\x00'), + ('magic', 'I', DHCP_MAGIC), + ) + opts = ( + (DHCP_OPT_MSGTYPE, chr(DHCPDISCOVER)), + (DHCP_OPT_PARAM_REQ, ''.join(map(chr, (DHCP_OPT_REQ_IP, + DHCP_OPT_ROUTER, + DHCP_OPT_NETMASK, + DHCP_OPT_DNS_SVRS)))) + ) # list of (type, data) tuples + + def __len__(self): + return self.__hdr_len__ + \ + sum([2 + len(o[1]) for o in self.opts]) + 1 + len(self.data) + + def __str__(self): + return self.pack_hdr() + self.pack_opts() + str(self.data) + + def pack_opts(self): + """Return packed options string.""" + if not self.opts: + return '' + l = [] + for t, data in self.opts: + l.append('%s%s%s' % (chr(t), chr(len(data)), data)) + l.append('\xff') + return ''.join(l) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.chaddr = self.chaddr[:self.hln] + buf = self.data + l = [] + while buf: + t = ord(buf[0]) + if t == 0xff: + buf = buf[1:] + break + elif t == 0: + buf = buf[1:] + else: + n = ord(buf[1]) + l.append((t, buf[2:2 + n])) + buf = buf[2 + n:] + self.opts = l + self.data = buf + + +def test_dhcp(): + s = '\x01\x01\x06\x00\xadS\xc8c\xb8\x87\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02U\x82\xf3\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Sc5\x01\x01\xfb\x01\x01=\x07\x01\x00\x02U\x82\xf3\xa62\x04\n\x00\x01e\x0c\tGuinevere<\x08MSFT 5.07\n\x01\x0f\x03\x06,./\x1f!+\xff\x00\x00\x00\x00\x00' + dhcp = DHCP(s) + assert (s == str(dhcp)) + + +if __name__ == '__main__': + test_dhcp() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/diameter.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/diameter.py new file mode 100644 index 00000000..a6994276 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/diameter.py @@ -0,0 +1,243 @@ +# $Id: diameter.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Diameter.""" + +import struct +import dpkt +from decorators import deprecated + +# Diameter Base Protocol - RFC 3588 +# http://tools.ietf.org/html/rfc3588 + +# Request/Answer Command Codes +ABORT_SESSION = 274 +ACCOUTING = 271 +CAPABILITIES_EXCHANGE = 257 +DEVICE_WATCHDOG = 280 +DISCONNECT_PEER = 282 +RE_AUTH = 258 +SESSION_TERMINATION = 275 + + +class Diameter(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 1), + ('len', '3s', 0), + ('flags', 'B', 0), + ('cmd', '3s', 0), + ('app_id', 'I', 0), + ('hop_id', 'I', 0), + ('end_id', 'I', 0) + ) + + @property + def request_flag(self): + return (self.flags >> 7) & 0x1 + + @request_flag.setter + def request_flag(self, r): + self.flags = (self.flags & ~0x80) | ((r & 0x1) << 7) + + @property + def proxiable_flag(self): + return (self.flags >> 6) & 0x1 + + @proxiable_flag.setter + def proxiable_flag(self, p): + self.flags = (self.flags & ~0x40) | ((p & 0x1) << 6) + + @property + def error_flag(self): + return (self.flags >> 5) & 0x1 + + @error_flag.setter + def error_flag(self, e): + self.flags = (self.flags & ~0x20) | ((e & 0x1) << 5) + + @property + def retransmit_flag(self): + return (self.flags >> 4) & 0x1 + + @retransmit_flag.setter + def retransmit_flag(self, t): + self.flags = (self.flags & ~0x10) | ((t & 0x1) << 4) + + # Deprecated methods, will be removed in the future + # ====================================================== + @deprecated + def _get_r(self): return self.request_flag + + @deprecated + def _set_r(self, r): self.request_flag = r + + @deprecated + def _get_p(self): return self.proxiable_flag + + @deprecated + def _set_p(self, p): self.proxiable_flag = p + + @deprecated + def _get_e(self): return self.error_flag + + @deprecated + def _set_e(self, e): self.error_flag = e + + @deprecated + def _get_t(self): return self.request_flag + + @deprecated + def _set_t(self, t): self.request_flag = t + + # ====================================================== + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.cmd = (ord(self.cmd[0]) << 16) | (ord(self.cmd[1]) << 8) | (ord(self.cmd[2])) + self.len = (ord(self.len[0]) << 16) | (ord(self.len[1]) << 8) | (ord(self.len[2])) + self.data = self.data[:self.len - self.__hdr_len__] + + l = [] + while self.data: + avp = AVP(self.data) + l.append(avp) + self.data = self.data[len(avp):] + self.data = self.avps = l + + def pack_hdr(self): + self.len = chr((self.len >> 16) & 0xff) + chr((self.len >> 8) & 0xff) + chr(self.len & 0xff) + self.cmd = chr((self.cmd >> 16) & 0xff) + chr((self.cmd >> 8) & 0xff) + chr(self.cmd & 0xff) + return dpkt.Packet.pack_hdr(self) + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + return self.pack_hdr() + ''.join(map(str, self.data)) + + +class AVP(dpkt.Packet): + __hdr__ = ( + ('code', 'I', 0), + ('flags', 'B', 0), + ('len', '3s', 0), + ) + + @property + def vendor_flag(self): + return (self.flags >> 7) & 0x1 + + @vendor_flag.setter + def vendor_flag(self, v): + self.flags = (self.flags & ~0x80) | ((v & 0x1) << 7) + + @property + def mandatory_flag(self): + return (self.flags >> 6) & 0x1 + + @mandatory_flag.setter + def mandatory_flag(self, m): + self.flags = (self.flags & ~0x40) | ((m & 0x1) << 6) + + @property + def protected_flag(self): + return (self.flags >> 5) & 0x1 + + @protected_flag.setter + def protected_flag(self, p): + self.flags = (self.flags & ~0x20) | ((p & 0x1) << 5) + + # Deprecated methods, will be removed in the future + # ====================================================== + @deprecated + def _get_v(self): + return self.vendor_flag + + @deprecated + def _set_v(self, v): + self.vendor_flag = v + + @deprecated + def _get_m(self): + return self.mandatory_flag + + @deprecated + def _set_m(self, m): + self.mandatory_flag = m + + @deprecated + def _get_p(self): + return self.protected_flag + + @deprecated + def _set_p(self, p): + self.protected_flag = p + + # ====================================================== + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.len = (ord(self.len[0]) << 16) | (ord(self.len[1]) << 8) | (ord(self.len[2])) + + if self.vendor_flag: + self.vendor = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:self.len - self.__hdr_len__] + else: + self.data = self.data[:self.len - self.__hdr_len__] + + def pack_hdr(self): + self.len = chr((self.len >> 16) & 0xff) + chr((self.len >> 8) & 0xff) + chr(self.len & 0xff) + data = dpkt.Packet.pack_hdr(self) + if self.vendor_flag: + data += struct.pack('>I', self.vendor) + return data + + def __len__(self): + length = self.__hdr_len__ + sum(map(len, self.data)) + if self.vendor_flag: + length += 4 + return length + + +__s = '\x01\x00\x00\x28\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x41\xc8\x00\x00\x00\x0c\x00\x00\x01\x08\x40\x00\x00\x0c\x68\x30\x30\x32\x00\x00\x01\x28\x40\x00\x00\x08' +__t = '\x01\x00\x00\x2c\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x41\xc8\x00\x00\x00\x0c\x00\x00\x01\x08\xc0\x00\x00\x10\xde\xad\xbe\xef\x68\x30\x30\x32\x00\x00\x01\x28\x40\x00\x00\x08' + + +def test_pack(): + d = Diameter(__s) + assert (__s == str(d)) + d = Diameter(__t) + assert (__t == str(d)) + + +def test_unpack(): + d = Diameter(__s) + assert (d.len == 40) + # assert (d.cmd == DEVICE_WATCHDOG_REQUEST) + assert (d.request_flag == 1) + assert (d.error_flag == 0) + assert (len(d.avps) == 2) + + avp = d.avps[0] + # assert (avp.code == ORIGIN_HOST) + assert (avp.mandatory_flag == 1) + assert (avp.vendor_flag == 0) + assert (avp.len == 12) + assert (len(avp) == 12) + assert (avp.data == '\x68\x30\x30\x32') + + # also test the optional vendor id support + d = Diameter(__t) + assert (d.len == 44) + avp = d.avps[0] + assert (avp.vendor_flag == 1) + assert (avp.len == 16) + assert (len(avp) == 16) + assert (avp.vendor == 3735928559) + assert (avp.data == '\x68\x30\x30\x32') + + +if __name__ == '__main__': + test_pack() + test_unpack() + print 'Tests Successful...' + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dns.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dns.py new file mode 100644 index 00000000..d4d08e47 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dns.py @@ -0,0 +1,462 @@ +# $Id: dns.py 27 2006-11-21 01:22:52Z dahelder $ +# -*- coding: utf-8 -*- +"""Domain Name System.""" + +import struct +import dpkt +from decorators import deprecated + +DNS_Q = 0 +DNS_R = 1 + +# Opcodes +DNS_QUERY = 0 +DNS_IQUERY = 1 +DNS_STATUS = 2 +DNS_NOTIFY = 4 +DNS_UPDATE = 5 + +# Flags +DNS_CD = 0x0010 # checking disabled +DNS_AD = 0x0020 # authenticated data +DNS_Z = 0x0040 # unused +DNS_RA = 0x0080 # recursion available +DNS_RD = 0x0100 # recursion desired +DNS_TC = 0x0200 # truncated +DNS_AA = 0x0400 # authoritative answer +DNS_QR = 0x8000 # response ( query / response ) + +# Response codes +DNS_RCODE_NOERR = 0 +DNS_RCODE_FORMERR = 1 +DNS_RCODE_SERVFAIL = 2 +DNS_RCODE_NXDOMAIN = 3 +DNS_RCODE_NOTIMP = 4 +DNS_RCODE_REFUSED = 5 +DNS_RCODE_YXDOMAIN = 6 +DNS_RCODE_YXRRSET = 7 +DNS_RCODE_NXRRSET = 8 +DNS_RCODE_NOTAUTH = 9 +DNS_RCODE_NOTZONE = 10 + +# RR types +DNS_A = 1 +DNS_NS = 2 +DNS_CNAME = 5 +DNS_SOA = 6 +DNS_PTR = 12 +DNS_HINFO = 13 +DNS_MX = 15 +DNS_TXT = 16 +DNS_AAAA = 28 +DNS_SRV = 33 + +# RR classes +DNS_IN = 1 +DNS_CHAOS = 3 +DNS_HESIOD = 4 +DNS_ANY = 255 + + +def pack_name(name, off, label_ptrs): + if name: + labels = name.split('.') + else: + labels = [] + labels.append('') + buf = '' + for i, label in enumerate(labels): + key = '.'.join(labels[i:]).upper() + ptr = label_ptrs.get(key) + if not ptr: + if len(key) > 1: + ptr = off + len(buf) + if ptr < 0xc000: + label_ptrs[key] = ptr + i = len(label) + buf += chr(i) + label + else: + buf += struct.pack('>H', (0xc000 | ptr)) + break + return buf + + +def unpack_name(buf, off): + name = '' + saved_off = 0 + for _ in range(100): # XXX + n = ord(buf[off]) + if n == 0: + off += 1 + break + elif (n & 0xc0) == 0xc0: + ptr = struct.unpack('>H', buf[off:off + 2])[0] & 0x3fff + off += 2 + if not saved_off: + saved_off = off + # XXX - don't use recursion!@#$ + name = name + unpack_name(buf, ptr)[0] + '.' + break + else: + off += 1 + name = name + buf[off:off + n] + '.' + if len(name) > 255: + raise dpkt.UnpackError('name longer than 255 bytes') + off += n + return name.strip('.'), off + + +class DNS(dpkt.Packet): + __hdr__ = ( + ('id', 'H', 0), + ('op', 'H', DNS_RD), # recursive query + # XXX - lists of query, RR objects + ('qd', 'H', []), + ('an', 'H', []), + ('ns', 'H', []), + ('ar', 'H', []) + ) + + @property + def qr(self): + return int((self.op & DNS_QR) == DNS_QR) + + @qr.setter + def qr(self, v): + if v: + self.op |= DNS_QR + else: + self.op &= ~DNS_QR + + @property + def opcode(self): + return (self.op >> 11) & 0xf + + @opcode.setter + def opcode(self, v): + self.op = (self.op & ~0x7800) | ((v & 0xf) << 11) + + @property + def aa(self): + return int((self.op & DNS_AA) == DNS_AA) + + @aa.setter + def aa(self, v): + if v: + self.op |= DNS_AA + else: + self.op &= ~DNS_AA + + @property + def rd(self): + return int((self.op & DNS_RD) == DNS_RD) + + @rd.setter + def rd(self, v): + if v: + self.op |= DNS_RD + else: + self.op &= ~DNS_RD + + @property + def ra(self): + return int((self.op & DNS_RA) == DNS_RA) + + @ra.setter + def ra(self, v): + if v: + self.op |= DNS_RA + else: + self.op &= ~DNS_RA + + @property + def zero(self): + return int((self.op & DNS_Z) == DNS_Z) + + @zero.setter + def zero(self, v): + if v: + self.op |= DNS_Z + else: + self.op &= ~DNS_Z + + @property + def rcode(self): + return self.op & 0xf + + @rcode.setter + def rcode(self, v): + self.op = (self.op & ~0xf) | (v & 0xf) + + # Deprecated methods, will be removed in the future + # ====================================================== + @deprecated + def get_qr(self): + return self.qr + + @deprecated + def set_qr(self, v): + self.qr = v + + @deprecated + def get_opcode(self): + return self.opcode + + @deprecated + def set_opcode(self, v): + self.opcode = v + + @deprecated + def get_aa(self): + return self.aa + + @deprecated + def set_aa(self, v): + self.aa = v + + @deprecated + def get_rd(self): + return self.rd + + @deprecated + def set_rd(self, v): + self.rd = v + + @deprecated + def get_ra(self): + return self.ra + + @deprecated + def set_ra(self, v): + self.ra = v + + @deprecated + def get_zero(self): + return self.zero + + @deprecated + def set_zero(self, v): + self.zero = v + + @deprecated + def get_rcode(self): + return self.rcode + + @deprecated + def set_rcode(self, v): + self.rcode = v + + # ====================================================== + + class Q(dpkt.Packet): + """DNS question.""" + __hdr__ = ( + ('name', '1025s', ''), + ('type', 'H', DNS_A), + ('cls', 'H', DNS_IN) + ) + + # XXX - suk + def __len__(self): + raise NotImplementedError + + __str__ = __len__ + + def unpack(self, buf): + raise NotImplementedError + + class RR(Q): + """DNS resource record.""" + __hdr__ = ( + ('name', '1025s', ''), + ('type', 'H', DNS_A), + ('cls', 'H', DNS_IN), + ('ttl', 'I', 0), + ('rlen', 'H', 4), + ('rdata', 's', '') + ) + + def pack_rdata(self, off, label_ptrs): + # XXX - yeah, this sux + if self.rdata: + return self.rdata + if self.type == DNS_A: + return self.ip + elif self.type == DNS_NS: + return pack_name(self.nsname, off, label_ptrs) + elif self.type == DNS_CNAME: + return pack_name(self.cname, off, label_ptrs) + elif self.type == DNS_PTR: + return pack_name(self.ptrname, off, label_ptrs) + elif self.type == DNS_SOA: + l = [] + l.append(pack_name(self.mname, off, label_ptrs)) + l.append(pack_name(self.rname, off + len(l[0]), label_ptrs)) + l.append(struct.pack('>IIIII', self.serial, self.refresh, + self.retry, self.expire, self.minimum)) + return ''.join(l) + elif self.type == DNS_MX: + return struct.pack('>H', self.preference) + \ + pack_name(self.mxname, off + 2, label_ptrs) + elif self.type == DNS_TXT or self.type == DNS_HINFO: + return ''.join(['%s%s' % (chr(len(x)), x) + for x in self.text]) + elif self.type == DNS_AAAA: + return self.ip6 + elif self.type == DNS_SRV: + return struct.pack('>HHH', self.priority, self.weight, self.port) + \ + pack_name(self.srvname, off + 6, label_ptrs) + + def unpack_rdata(self, buf, off): + if self.type == DNS_A: + self.ip = self.rdata + elif self.type == DNS_NS: + self.nsname, off = unpack_name(buf, off) + elif self.type == DNS_CNAME: + self.cname, off = unpack_name(buf, off) + elif self.type == DNS_PTR: + self.ptrname, off = unpack_name(buf, off) + elif self.type == DNS_SOA: + self.mname, off = unpack_name(buf, off) + self.rname, off = unpack_name(buf, off) + self.serial, self.refresh, self.retry, self.expire, \ + self.minimum = struct.unpack('>IIIII', buf[off:off + 20]) + elif self.type == DNS_MX: + self.preference = struct.unpack('>H', self.rdata[:2]) + self.mxname, off = unpack_name(buf, off + 2) + elif self.type == DNS_TXT or self.type == DNS_HINFO: + self.text = [] + buf = self.rdata + while buf: + n = ord(buf[0]) + self.text.append(buf[1:1 + n]) + buf = buf[1 + n:] + elif self.type == DNS_AAAA: + self.ip6 = self.rdata + elif self.type == DNS_SRV: + self.priority, self.weight, self.port = struct.unpack('>HHH', self.rdata[:6]) + self.srvname, off = unpack_name(buf, off + 6) + + def pack_q(self, buf, q): + """Append packed DNS question and return buf.""" + return buf + pack_name(q.name, len(buf), self.label_ptrs) + struct.pack('>HH', q.type, q.cls) + + def unpack_q(self, buf, off): + """Return DNS question and new offset.""" + q = self.Q() + q.name, off = unpack_name(buf, off) + q.type, q.cls = struct.unpack('>HH', buf[off:off + 4]) + off += 4 + return q, off + + def pack_rr(self, buf, rr): + """Append packed DNS RR and return buf.""" + name = pack_name(rr.name, len(buf), self.label_ptrs) + rdata = rr.pack_rdata(len(buf) + len(name) + 10, self.label_ptrs) + return buf + name + struct.pack('>HHIH', rr.type, rr.cls, rr.ttl, len(rdata)) + rdata + + def unpack_rr(self, buf, off): + """Return DNS RR and new offset.""" + rr = self.RR() + rr.name, off = unpack_name(buf, off) + rr.type, rr.cls, rr.ttl, rdlen = struct.unpack('>HHIH', buf[off:off + 10]) + off += 10 + rr.rdata = buf[off:off + rdlen] + rr.unpack_rdata(buf, off) + off += rdlen + return rr, off + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + off = self.__hdr_len__ + cnt = self.qd # FIXME: This relies on this being properly set somewhere else + self.qd = [] + for _ in range(cnt): + q, off = self.unpack_q(buf, off) + self.qd.append(q) + for x in ('an', 'ns', 'ar'): + cnt = getattr(self, x, 0) + setattr(self, x, []) + for _ in range(cnt): + rr, off = self.unpack_rr(buf, off) + getattr(self, x).append(rr) + self.data = '' + + def __len__(self): + # XXX - cop out + return len(str(self)) + + def __str__(self): + # XXX - compress names on the fly + self.label_ptrs = {} + buf = struct.pack(self.__hdr_fmt__, self.id, self.op, len(self.qd), + len(self.an), len(self.ns), len(self.ar)) + for q in self.qd: + buf = self.pack_q(buf, q) + for x in ('an', 'ns', 'ar'): + for rr in getattr(self, x): + buf = self.pack_rr(buf, rr) + del self.label_ptrs + return buf + + +def test_basic(): + from ip import IP + + s = 'E\x00\x02\x08\xc15\x00\x00\x80\x11\x92aBk0\x01Bk0w\x005\xc07\x01\xf4\xda\xc2d\xd2\x81\x80\x00\x01\x00\x03\x00\x0b\x00\x0b\x03www\x06google\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x05\x00\x01\x00\x00\x03V\x00\x17\x03www\x06google\x06akadns\x03net\x00\xc0,\x00\x01\x00\x01\x00\x00\x01\xa3\x00\x04@\xe9\xabh\xc0,\x00\x01\x00\x01\x00\x00\x01\xa3\x00\x04@\xe9\xabc\xc07\x00\x02\x00\x01\x00\x00KG\x00\x0c\x04usw5\x04akam\xc0>\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04usw6\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04usw7\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x08\x05asia3\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02za\xc07\xc07\x00\x02\x00\x01\x00\x00KG\x00\x0f\x02zc\x06akadns\x03org\x00\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02zf\xc07\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02zh\xc0\xd5\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04eur3\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04use2\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04use4\xc0t\xc0\xc1\x00\x01\x00\x01\x00\x00\xfb4\x00\x04\xd0\xb9\x84\xb0\xc0\xd2\x00\x01\x00\x01\x00\x001\x0c\x00\x04?\xf1\xc76\xc0\xed\x00\x01\x00\x01\x00\x00\xfb4\x00\x04?\xd7\xc6S\xc0\xfe\x00\x01\x00\x01\x00\x001\x0c\x00\x04?\xd00.\xc1\x0f\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04\xc1-\x01g\xc1"\x00\x01\x00\x01\x00\x00\x101\x00\x04?\xd1\xaa\x88\xc15\x00\x01\x00\x01\x00\x00\r\x1a\x00\x04PCC\xb6\xc0o\x00\x01\x00\x01\x00\x00\x10\x7f\x00\x04?\xf1I\xd6\xc0\x87\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04\xce\x84dl\xc0\x9a\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04A\xcb\xea\x1b\xc0\xad\x00\x01\x00\x01\x00\x00\x0b)\x00\x04\xc1l\x9a\t' + ip = IP(s) + my_dns = DNS(ip.udp.data) + assert my_dns.qd[0].name == 'www.google.com' and my_dns.an[1].name == 'www.google.akadns.net' + s = '\x05\xf5\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x03cnn\x03com\x00\x00\x01\x00\x01' + my_dns = DNS(s) + assert s == str(my_dns) + + +def test_PTR(): + s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' + my_dns = DNS(s) + assert my_dns.qd[0].name == '1.1.211.141.in-addr.arpa' and \ + my_dns.an[0].ptrname == 'default.v-umce-ifs.umnet.umich.edu' and \ + my_dns.ns[0].nsname == 'shabby.ifs.umich.edu' and \ + my_dns.ns[1].ttl == 3382L and \ + my_dns.ns[2].nsname == 'dns2.itd.umich.edu' + assert s == str(my_dns) + + +def test_pack_name(): + # Empty name is \0 + x = pack_name('', 0, {}) + assert x == '\0' + + +def test_deprecated_methods(): + """Test deprecated methods. Note: when they are removed so should this test""" + s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' + my_dns = DNS(s) + my_dns.get_aa() + my_dns.get_opcode() + qr = my_dns.get_qr() + my_dns.set_qr(qr) + qr2 = my_dns.get_qr() + assert qr == qr2 + + +def test_deprecated_method_performance(): + """Test the performance hit for the deprecation decorator""" + from timeit import Timer + + s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' + my_dns = DNS(s) + t1 = Timer(lambda: my_dns.aa).timeit(10000) + t2 = Timer(my_dns.get_aa).timeit(10000) + print 'Performance of dns.aa vs. dns.get_aa(): %f %f' % (t1, t2) + + +if __name__ == '__main__': + # Runs all the test associated with this class/file + test_basic() + test_PTR() + test_pack_name() + test_deprecated_methods() + test_deprecated_method_performance() + print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dpkt.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dpkt.py new file mode 100644 index 00000000..0ed3780f --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dpkt.py @@ -0,0 +1,176 @@ +# $Id: dpkt.py 43 2007-08-02 22:42:59Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Simple packet creation and parsing.""" + +import copy +import itertools +import socket +import struct +import array + + +class Error(Exception): pass + + +class UnpackError(Error): pass + + +class NeedData(UnpackError): pass + + +class PackError(Error): pass + + +class _MetaPacket(type): + def __new__(cls, clsname, clsbases, clsdict): + t = type.__new__(cls, clsname, clsbases, clsdict) + st = getattr(t, '__hdr__', None) + if st is not None: + # XXX - __slots__ only created in __new__() + clsdict['__slots__'] = [x[0] for x in st] + ['data'] + t = type.__new__(cls, clsname, clsbases, clsdict) + t.__hdr_fields__ = [x[0] for x in st] + t.__hdr_fmt__ = getattr(t, '__byte_order__', '>') + \ + ''.join([x[1] for x in st]) + t.__hdr_len__ = struct.calcsize(t.__hdr_fmt__) + t.__hdr_defaults__ = dict(zip( + t.__hdr_fields__, [x[2] for x in st])) + return t + + +class Packet(object): + """Base packet class, with metaclass magic to generate members from + self.__hdr__. + + __hdr__ should be defined as a list of (name, structfmt, default) tuples + __byte_order__ can be set to override the default ('>') + + Example:: + + >>> class Foo(Packet): + ... __hdr__ = (('foo', 'I', 1), ('bar', 'H', 2), ('baz', '4s', 'quux')) + ... + >>> foo = Foo(bar=3) + >>> foo + Foo(bar=3) + >>> str(foo) + '\x00\x00\x00\x01\x00\x03quux' + >>> foo.bar + 3 + >>> foo.baz + 'quux' + >>> foo.foo = 7 + >>> foo.baz = 'whee' + >>> foo + Foo(baz='whee', foo=7, bar=3) + >>> Foo('hello, world!') + Foo(baz=' wor', foo=1751477356L, bar=28460, data='ld!') + """ + __metaclass__ = _MetaPacket + + def __init__(self, *args, **kwargs): + """Packet constructor with ([buf], [field=val,...]) prototype. + + Arguments: + + buf -- optional packet buffer to unpack + + Optional keyword arguments correspond to members to set + (matching fields in self.__hdr__, or 'data'). + """ + self.data = '' + if args: + try: + self.unpack(args[0]) + except struct.error: + if len(args[0]) < self.__hdr_len__: + raise NeedData + raise UnpackError('invalid %s: %r' % + (self.__class__.__name__, args[0])) + else: + for k in self.__hdr_fields__: + setattr(self, k, copy.copy(self.__hdr_defaults__[k])) + for k, v in kwargs.iteritems(): + setattr(self, k, v) + + def __len__(self): + return self.__hdr_len__ + len(self.data) + + def __getitem__(self, k): + try: + return getattr(self, k) + except AttributeError: + raise KeyError + + def __repr__(self): + l = ['%s=%r' % (k, getattr(self, k)) + for k in self.__hdr_defaults__ + if getattr(self, k) != self.__hdr_defaults__[k]] + if self.data: + l.append('data=%r' % self.data) + return '%s(%s)' % (self.__class__.__name__, ', '.join(l)) + + def __str__(self): + return self.pack_hdr() + str(self.data) + + def pack_hdr(self): + """Return packed header string.""" + try: + return struct.pack(self.__hdr_fmt__, + *[getattr(self, k) for k in self.__hdr_fields__]) + except struct.error: + vals = [] + for k in self.__hdr_fields__: + v = getattr(self, k) + if isinstance(v, tuple): + vals.extend(v) + else: + vals.append(v) + try: + return struct.pack(self.__hdr_fmt__, *vals) + except struct.error, e: + raise PackError(str(e)) + + def pack(self): + """Return packed header + self.data string.""" + return str(self) + + def unpack(self, buf): + """Unpack packet header fields from buf, and set self.data.""" + for k, v in itertools.izip(self.__hdr_fields__, + struct.unpack(self.__hdr_fmt__, buf[:self.__hdr_len__])): + setattr(self, k, v) + self.data = buf[self.__hdr_len__:] + +# XXX - ''.join([(len(`chr(x)`)==3) and chr(x) or '.' for x in range(256)]) +__vis_filter = """................................ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[.]^_`abcdefghijklmnopqrstuvwxyz{|}~.................................................................................................................................""" + + +def hexdump(buf, length=16): + """Return a hexdump output string of the given buffer.""" + n = 0 + res = [] + while buf: + line, buf = buf[:length], buf[length:] + hexa = ' '.join(['%02x' % ord(x) for x in line]) + line = line.translate(__vis_filter) + res.append(' %04d: %-*s %s' % (n, length * 3, hexa, line)) + n += length + return '\n'.join(res) + +def in_cksum_add(s, buf): + n = len(buf) + cnt = (n / 2) * 2 + a = array.array('H', buf[:cnt]) + if cnt != n: + a.append(struct.unpack('H', buf[-1] + '\x00')[0]) + return s + sum(a) + +def in_cksum_done(s): + s = (s >> 16) + (s & 0xffff) + s += (s >> 16) + return socket.ntohs(~s & 0xffff) + +def in_cksum(buf): + """Return computed Internet checksum.""" + return in_cksum_done(in_cksum_add(0, buf)) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dtp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dtp.py new file mode 100644 index 00000000..9fc7ec9f --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dtp.py @@ -0,0 +1,26 @@ +# $Id: dtp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Dynamic Trunking Protocol.""" + +import struct +import dpkt + + +class DTP(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 0), + ) # rest is TLVs + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = self.data + tvs = [] + while buf: + t, l = struct.unpack('>HH', buf[:4]) + v, buf = buf[4:4 + l], buf[4 + l:] + tvs.append((t, v)) + self.data = tvs + + +TRUNK_NAME = 0x01 +MAC_ADDR = 0x04 diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/esp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/esp.py new file mode 100644 index 00000000..94295d39 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/esp.py @@ -0,0 +1,12 @@ +# $Id: esp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Encapsulated Security Protocol.""" + +import dpkt + + +class ESP(dpkt.Packet): + __hdr__ = ( + ('spi', 'I', 0), + ('seq', 'I', 0) + ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ethernet.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ethernet.py new file mode 100644 index 00000000..d8d8700f --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ethernet.py @@ -0,0 +1,145 @@ +# $Id: ethernet.py 65 2010-03-26 02:53:51Z dugsong $ +# -*- coding: utf-8 -*- +"""Ethernet II, LLC (802.3+802.2), LLC/SNAP, and Novell raw 802.3, +with automatic 802.1q, MPLS, PPPoE, and Cisco ISL decapsulation.""" + +import struct +import dpkt +import stp + + +ETH_CRC_LEN = 4 +ETH_HDR_LEN = 14 + +ETH_LEN_MIN = 64 # minimum frame length with CRC +ETH_LEN_MAX = 1518 # maximum frame length with CRC + +ETH_MTU = (ETH_LEN_MAX - ETH_HDR_LEN - ETH_CRC_LEN) +ETH_MIN = (ETH_LEN_MIN - ETH_HDR_LEN - ETH_CRC_LEN) + +# Ethernet payload types - http://standards.ieee.org/regauth/ethertype +ETH_TYPE_PUP = 0x0200 # PUP protocol +ETH_TYPE_IP = 0x0800 # IP protocol +ETH_TYPE_ARP = 0x0806 # address resolution protocol +ETH_TYPE_AOE = 0x88a2 # AoE protocol +ETH_TYPE_CDP = 0x2000 # Cisco Discovery Protocol +ETH_TYPE_DTP = 0x2004 # Cisco Dynamic Trunking Protocol +ETH_TYPE_REVARP = 0x8035 # reverse addr resolution protocol +ETH_TYPE_8021Q = 0x8100 # IEEE 802.1Q VLAN tagging +ETH_TYPE_IPX = 0x8137 # Internetwork Packet Exchange +ETH_TYPE_IP6 = 0x86DD # IPv6 protocol +ETH_TYPE_PPP = 0x880B # PPP +ETH_TYPE_MPLS = 0x8847 # MPLS +ETH_TYPE_MPLS_MCAST = 0x8848 # MPLS Multicast +ETH_TYPE_PPPoE_DISC = 0x8863 # PPP Over Ethernet Discovery Stage +ETH_TYPE_PPPoE = 0x8864 # PPP Over Ethernet Session Stage +ETH_TYPE_LLDP = 0x88CC # Link Layer Discovery Protocol + +# MPLS label stack fields +MPLS_LABEL_MASK = 0xfffff000 +MPLS_QOS_MASK = 0x00000e00 +MPLS_TTL_MASK = 0x000000ff +MPLS_LABEL_SHIFT = 12 +MPLS_QOS_SHIFT = 9 +MPLS_TTL_SHIFT = 0 +MPLS_STACK_BOTTOM = 0x0100 + + +class Ethernet(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', ''), + ('src', '6s', ''), + ('type', 'H', ETH_TYPE_IP) + ) + _typesw = {} + + def _unpack_data(self, buf): + if self.type == ETH_TYPE_8021Q: + self.tag, self.type = struct.unpack('>HH', buf[:4]) + buf = buf[4:] + elif self.type == ETH_TYPE_MPLS or self.type == ETH_TYPE_MPLS_MCAST: + # XXX - skip labels (max # of labels is undefined, just use 24) + self.labels = [] + for i in range(24): + entry = struct.unpack('>I', buf[i * 4:i * 4 + 4])[0] + label = ((entry & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT, + (entry & MPLS_QOS_MASK) >> MPLS_QOS_SHIFT, + (entry & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT) + self.labels.append(label) + if entry & MPLS_STACK_BOTTOM: + break + self.type = ETH_TYPE_IP + buf = buf[(i + 1) * 4:] + try: + self.data = self._typesw[self.type](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.type > 1500: + # Ethernet II + self._unpack_data(self.data) + elif self.dst.startswith('\x01\x00\x0c\x00\x00') or \ + self.dst.startswith('\x03\x00\x0c\x00\x00'): + # Cisco ISL + self.vlan = struct.unpack('>H', self.data[6:8])[0] + self.unpack(self.data[12:]) + elif self.data.startswith('\xff\xff'): + # Novell "raw" 802.3 + self.type = ETH_TYPE_IPX + self.data = self.ipx = self._typesw[ETH_TYPE_IPX](self.data[2:]) + else: + # 802.2 LLC + self.dsap, self.ssap, self.ctl = struct.unpack('BBB', self.data[:3]) + if self.data.startswith('\xaa\xaa'): + # SNAP + self.type = struct.unpack('>H', self.data[6:8])[0] + self._unpack_data(self.data[8:]) + else: + # non-SNAP + dsap = ord(self.data[0]) + if dsap == 0x06: # SAP_IP + self.data = self.ip = self._typesw[ETH_TYPE_IP](self.data[3:]) + elif dsap == 0x10 or dsap == 0xe0: # SAP_NETWARE{1,2} + self.data = self.ipx = self._typesw[ETH_TYPE_IPX](self.data[3:]) + elif dsap == 0x42: # SAP_STP + self.data = self.stp = stp.STP(self.data[3:]) + + @classmethod + def set_type(cls, t, pktclass): + cls._typesw[t] = pktclass + + @classmethod + def get_type(cls, t): + return cls._typesw[t] + + +# XXX - auto-load Ethernet dispatch table from ETH_TYPE_* definitions +def __load_types(): + g = globals() + for k, v in g.iteritems(): + if k.startswith('ETH_TYPE_'): + name = k[9:] + modname = name.lower() + try: + mod = __import__(modname, g) + except ImportError: + continue + Ethernet.set_type(v, getattr(mod, name)) + + +if not Ethernet._typesw: + __load_types() + + +def test_eth(): # TODO recheck this test + s = '\x00\xb0\xd0\xe1\x80r\x00\x11$\x8c\x11\xde\x86\xdd`\x00\x00\x00\x00(\x06@\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x11$\xff\xfe\x8c\x11\xde\xfe\x80\x00\x00\x00\x00\x00\x00\x02\xb0\xd0\xff\xfe\xe1\x80r\xcd\xd3\x00\x16\xffP\xd7\x13\x00\x00\x00\x00\xa0\x02\xff\xffg\xd3\x00\x00\x02\x04\x05\xa0\x01\x03\x03\x00\x01\x01\x08\n}\x18:a\x00\x00\x00\x00' + # eth = Ethernet(s) # Variable eth is not used + Ethernet(s) + + +if __name__ == '__main__': + test_eth() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gre.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gre.py new file mode 100644 index 00000000..d61e56ff --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gre.py @@ -0,0 +1,127 @@ +# $Id: gre.py 75 2010-08-03 14:42:19Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Generic Routing Encapsulation.""" + +import struct +import dpkt +from decorators import deprecated + +GRE_CP = 0x8000 # Checksum Present +GRE_RP = 0x4000 # Routing Present +GRE_KP = 0x2000 # Key Present +GRE_SP = 0x1000 # Sequence Present +GRE_SS = 0x0800 # Strict Source Route +GRE_AP = 0x0080 # Acknowledgment Present + +GRE_opt_fields = ( + (GRE_CP | GRE_RP, 'sum', 'H'), (GRE_CP | GRE_RP, 'off', 'H'), + (GRE_KP, 'key', 'I'), (GRE_SP, 'seq', 'I'), (GRE_AP, 'ack', 'I') +) + + +class GRE(dpkt.Packet): + __hdr__ = ( + ('flags', 'H', 0), + ('p', 'H', 0x0800), # ETH_TYPE_IP + ) + _protosw = {} + sre = () + + @property + def v(self): + return self.flags & 0x7 + + @v.setter + def v(self, v): + self.flags = (self.flags & ~0x7) | (v & 0x7) + + @property + def recur(self): + return (self.flags >> 5) & 0x7 + + @recur.setter + def recur(self, v): + self.flags = (self.flags & ~0xe0) | ((v & 0x7) << 5) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def get_v(self): return self.v + + @deprecated + def set_v(self, v): self.v = v + + @deprecated + def get_recur(self): return self.recur + + @deprecated + def set_recur(self, v): self.recur = v + # ================================================= + + + class SRE(dpkt.Packet): + __hdr__ = [ + ('family', 'H', 0), + ('off', 'B', 0), + ('len', 'B', 0) + ] + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len] + + def opt_fields_fmts(self): + if self.v == 0: + fields, fmts = [], [] + opt_fields = GRE_opt_fields + else: + fields, fmts = ['len', 'callid'], ['H', 'H'] + opt_fields = GRE_opt_fields[-2:] + for flags, field, fmt in opt_fields: + if self.flags & flags: + fields.append(field) + fmts.append(fmt) + return fields, fmts + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + fields, fmts = self.opt_fields_fmts() + if fields: + fmt = ''.join(fmts) + fmtlen = struct.calcsize(fmt) + vals = struct.unpack(fmt, self.data[:fmtlen]) + self.data = self.data[fmtlen:] + self.__dict__.update(dict(zip(fields, vals))) + if self.flags & GRE_RP: + l = [] + while True: + sre = self.SRE(self.data) + self.data = self.data[len(sre):] + l.append(sre) + if not sre.len: + break + self.sre = l + self.data = ethernet.Ethernet._typesw[self.p](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + + def __len__(self): + opt_fmtlen = struct.calcsize(''.join(self.opt_fields_fmts()[1])) + return self.__hdr_len__ + opt_fmtlen + sum(map(len, self.sre)) + len(self.data) + + # XXX - need to fix up repr to display optional fields... + + def __str__(self): + fields, fmts = self.opt_fields_fmts() + if fields: + vals = [] + for f in fields: + vals.append(getattr(self, f)) + opt_s = struct.pack(''.join(fmts), *vals) + else: + opt_s = '' + return self.pack_hdr() + opt_s + ''.join(map(str, self.sre)) + str(self.data) + +# XXX - auto-load GRE dispatch table from Ethernet dispatch table +import ethernet + +GRE._protosw.update(ethernet.Ethernet._typesw) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gzip.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gzip.py new file mode 100644 index 00000000..e41165b2 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gzip.py @@ -0,0 +1,123 @@ +# $Id: gzip.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""GNU zip.""" + +import struct +import zlib +import dpkt + + +# RFC 1952 +GZIP_MAGIC = '\x1f\x8b' + +# Compression methods +GZIP_MSTORED = 0 +GZIP_MCOMPRESS = 1 +GZIP_MPACKED = 2 +GZIP_MLZHED = 3 +GZIP_MDEFLATE = 8 + +# Flags +GZIP_FTEXT = 0x01 +GZIP_FHCRC = 0x02 +GZIP_FEXTRA = 0x04 +GZIP_FNAME = 0x08 +GZIP_FCOMMENT = 0x10 +GZIP_FENCRYPT = 0x20 +GZIP_FRESERVED = 0xC0 + +# OS +GZIP_OS_MSDOS = 0 +GZIP_OS_AMIGA = 1 +GZIP_OS_VMS = 2 +GZIP_OS_UNIX = 3 +GZIP_OS_VMCMS = 4 +GZIP_OS_ATARI = 5 +GZIP_OS_OS2 = 6 +GZIP_OS_MACOS = 7 +GZIP_OS_ZSYSTEM = 8 +GZIP_OS_CPM = 9 +GZIP_OS_TOPS20 = 10 +GZIP_OS_WIN32 = 11 +GZIP_OS_QDOS = 12 +GZIP_OS_RISCOS = 13 +GZIP_OS_UNKNOWN = 255 + +GZIP_FENCRYPT_LEN = 12 + + +class GzipExtra(dpkt.Packet): + __hdr__ = ( + ('id', '2s', ''), + ('len', 'H', 0) + ) + + +class Gzip(dpkt.Packet): + __hdr__ = ( + ('magic', '2s', GZIP_MAGIC), + ('method', 'B', GZIP_MDEFLATE), + ('flags', 'B', 0), + ('mtime', 'I', 0), + ('xflags', 'B', 0), + ('os', 'B', GZIP_OS_UNIX), + + ('extra', '0s', ''), # XXX - GZIP_FEXTRA + ('filename', '0s', ''), # XXX - GZIP_FNAME + ('comment', '0s', '') # XXX - GZIP_FCOMMENT + ) + + def unpack(self, buf): + super(Gzip, self).unpack(buf) + if self.flags & GZIP_FEXTRA: + n = struct.unpack(self.data[:2], '>H')[0] + self.extra = GzipExtra(self.data[2:2 + n]) + self.data = self.data[2 + n:] + if self.flags & GZIP_FNAME: + n = self.data.find('\x00') + self.filename = self.data[:n] + self.data = self.data[n + 1:] + if self.flags & GZIP_FCOMMENT: + n = self.data.find('\x00') + self.comment = self.data[:n] + self.data = self.data[n + 1:] + if self.flags & GZIP_FENCRYPT: + self.data = self.data[GZIP_FENCRYPT_LEN:] # XXX - skip + if self.flags & GZIP_FHCRC: + self.data = self.data[2:] # XXX - skip + + def pack_hdr(self): + l = [] + if self.extra: + self.flags |= GZIP_FEXTRA + s = str(self.extra) + l.append(struct.pack('>H', len(s))) + l.append(s) + if self.filename: + self.flags |= GZIP_FNAME + l.append(self.filename) + l.append('\x00') + if self.comment: + self.flags |= GZIP_FCOMMENT + l.append(self.comment) + l.append('\x00') + l.insert(0, super(Gzip, self).pack_hdr()) + return ''.join(l) + + def compress(self): + """Compress self.data.""" + c = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS, + zlib.DEF_MEM_LEVEL, 0) + self.data = c.compress(self.data) + + def decompress(self): + """Return decompressed payload.""" + d = zlib.decompressobj(-zlib.MAX_WBITS) + return d.decompress(self.data) + + +if __name__ == '__main__': + import sys + + gz = Gzip(open(sys.argv[1]).read()) + print `gz`, `gz.decompress()` diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/h225.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/h225.py new file mode 100644 index 00000000..d8b2d51f --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/h225.py @@ -0,0 +1,213 @@ +# $Id: h225.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""ITU-T H.225.0 Call Signaling.""" + +import struct +import dpkt +import tpkt + + +# H225 Call Signaling +# +# Call messages and information elements (IEs) are defined by Q.931: +# http://cvsup.de.openbsd.org/historic/comp/doc/standards/itu/Q/Q.931.ps.gz +# +# The User-to-User IEs of H225 are encoded by PER of ASN.1. + +# Call Establishment Messages +ALERTING = 1 +CALL_PROCEEDING = 2 +CONNECT = 7 +CONNECT_ACKNOWLEDGE = 15 +PROGRESS = 3 +SETUP = 5 +SETUP_ACKNOWLEDGE = 13 + +# Call Information Phase Messages +RESUME = 38 +RESUME_ACKNOWLEDGE = 46 +RESUME_REJECT = 34 +SUSPEND = 37 +SUSPEND_ACKNOWLEDGE = 45 +SUSPEND_REJECT = 33 +USER_INFORMATION = 32 + +# Call Clearing Messages +DISCONNECT = 69 +RELEASE = 77 +RELEASE_COMPLETE = 90 +RESTART = 70 +RESTART_ACKNOWLEDGE = 78 + +# Miscellaneous Messages +SEGMENT = 96 +CONGESTION_CONTROL = 121 +INFORMATION = 123 +NOTIFY = 110 +STATUS = 125 +STATUS_ENQUIRY = 117 + +# Type 1 Single Octet Information Element IDs +RESERVED = 128 +SHIFT = 144 +CONGESTION_LEVEL = 176 +REPEAT_INDICATOR = 208 + +# Type 2 Single Octet Information Element IDs +MORE_DATA = 160 +SENDING_COMPLETE = 161 + +# Variable Length Information Element IDs +SEGMENTED_MESSAGE = 0 +BEARER_CAPABILITY = 4 +CAUSE = 8 +CALL_IDENTITY = 16 +CALL_STATE = 20 +CHANNEL_IDENTIFICATION = 24 +PROGRESS_INDICATOR = 30 +NETWORK_SPECIFIC_FACILITIES = 32 +NOTIFICATION_INDICATOR = 39 +DISPLAY = 40 +DATE_TIME = 41 +KEYPAD_FACILITY = 44 +SIGNAL = 52 +INFORMATION_RATE = 64 +END_TO_END_TRANSIT_DELAY = 66 +TRANSIT_DELAY_SELECTION_AND_INDICATION = 67 +PACKET_LAYER_BINARY_PARAMETERS = 68 +PACKET_LAYER_WINDOW_SIZE = 69 +PACKET_SIZE = 70 +CLOSED_USER_GROUP = 71 +REVERSE_CHARGE_INDICATION = 74 +CALLING_PARTY_NUMBER = 108 +CALLING_PARTY_SUBADDRESS = 109 +CALLED_PARTY_NUMBER = 112 +CALLED_PARTY_SUBADDRESS = 113 +REDIRECTING_NUMBER = 116 +TRANSIT_NETWORK_SELECTION = 120 +RESTART_INDICATOR = 121 +LOW_LAYER_COMPATIBILITY = 124 +HIGH_LAYER_COMPATIBILITY = 125 +USER_TO_USER = 126 +ESCAPE_FOR_EXTENSION = 127 + + +class H225(dpkt.Packet): + __hdr__ = ( + ('proto', 'B', 8), + ('ref_len', 'B', 2) + ) + + def unpack(self, buf): + # TPKT header + self.tpkt = tpkt.TPKT(buf) + if self.tpkt.v != 3: + raise dpkt.UnpackError('invalid TPKT version') + if self.tpkt.rsvd != 0: + raise dpkt.UnpackError('invalid TPKT reserved value') + n = self.tpkt.len - self.tpkt.__hdr_len__ + if n > len(self.tpkt.data): + raise dpkt.UnpackError('invalid TPKT length') + buf = self.tpkt.data + + # Q.931 payload + dpkt.Packet.unpack(self, buf) + buf = buf[self.__hdr_len__:] + self.ref_val = buf[:self.ref_len] + buf = buf[self.ref_len:] + self.type = struct.unpack('B', buf[:1])[0] + buf = buf[1:] + + # Information Elements + l = [] + while buf: + ie = self.IE(buf) + l.append(ie) + buf = buf[len(ie):] + self.data = l + + def __len__(self): + return self.tpkt.__hdr_len__ + self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + return self.tpkt.pack_hdr() + self.pack_hdr() + self.ref_val + \ + struct.pack('B', self.type) + ''.join(map(str, self.data)) + + class IE(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = buf[self.__hdr_len__:] + + # single-byte IE + if self.type & 0x80: + self.len = 0 + self.data = None + # multi-byte IE + else: + # special PER-encoded UUIE + if self.type == USER_TO_USER: + self.len = struct.unpack('>H', buf[:2])[0] + buf = buf[2:] + # normal TLV-like IE + else: + self.len = struct.unpack('B', buf[:1])[0] + buf = buf[1:] + self.data = buf[:self.len] + + def __len__(self): + if self.type & 0x80: + n = 0 + else: + if self.type == USER_TO_USER: + n = 2 + else: + n = 1 + return self.__hdr_len__ + self.len + n + + def __str__(self): + if self.type & 0x80: + length_str = None + else: + if self.type == USER_TO_USER: + length_str = struct.pack('>H', self.len) + else: + length_str = struct.pack('B', self.len) + return struct.pack('B', self.type) + length_str + self.data + + +__s = '\x03\x00\x04\x11\x08\x02\x54\x2b\x05\x04\x03\x88\x93\xa5\x28\x0e\x4a\x6f\x6e\x20\x4f\x62\x65\x72\x68\x65\x69\x64\x65\x00\x7e\x03\xf0\x05\x20\xb8\x06\x00\x08\x91\x4a\x00\x04\x01\x40\x0c\x00\x4a\x00\x6f\x00\x6e\x00\x20\x00\x4f\x00\x62\x00\x65\x00\x72\x00\x68\x00\x65\x00\x69\x00\x64\x00\x65\x22\xc0\x09\x00\x00\x3d\x06\x65\x6b\x69\x67\x61\x00\x00\x14\x32\x2e\x30\x2e\x32\x20\x28\x4f\x50\x41\x4c\x20\x76\x32\x2e\x32\x2e\x32\x29\x00\x00\x00\x01\x40\x15\x00\x74\x00\x63\x00\x70\x00\x24\x00\x68\x00\x33\x00\x32\x00\x33\x00\x2e\x00\x76\x00\x6f\x00\x78\x00\x67\x00\x72\x00\x61\x00\x74\x00\x69\x00\x61\x00\x2e\x00\x6f\x00\x72\x00\x67\x00\x42\x87\x23\x2c\x06\xb8\x00\x6a\x8b\x1d\x0c\xb7\x06\xdb\x11\x9e\xca\x00\x10\xa4\x89\x6d\x6a\x00\xc5\x1d\x80\x04\x07\x00\x0a\x00\x01\x7a\x75\x30\x11\x00\x5e\x88\x1d\x0c\xb7\x06\xdb\x11\x9e\xca\x00\x10\xa4\x89\x6d\x6a\x82\x2b\x0e\x30\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x26\x00\x00\x64\x0c\x10\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x2a\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x20\x00\x00\x65\x0c\x10\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x20\x40\x00\x00\x06\x04\x01\x00\x4e\x0c\x03\x00\x83\x00\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x16\x00\x00\x66\x0e\x0c\x03\x00\x83\x00\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x4b\x40\x00\x00\x06\x04\x01\x00\x4c\x10\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x41\x00\x00\x67\x0c\x10\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x32\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x28\x00\x00\x68\x0c\x10\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x1d\x40\x00\x00\x06\x04\x01\x00\x4c\x60\x1d\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x13\x00\x00\x69\x0c\x60\x1d\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x1d\x40\x00\x00\x06\x04\x01\x00\x4c\x20\x1d\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x13\x00\x00\x6a\x0c\x20\x1d\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x01\x00\x01\x00\x01\x00\x01\x00\x81\x03\x02\x80\xf8\x02\x70\x01\x06\x00\x08\x81\x75\x00\x0b\x80\x13\x80\x01\xf4\x00\x01\x00\x00\x01\x00\x00\x01\x00\x00\x0c\xc0\x01\x00\x01\x80\x0b\x80\x00\x00\x20\x20\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x00\x01\x20\x20\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x00\x02\x24\x18\x03\x00\xe6\x00\x80\x00\x03\x20\x20\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x00\x04\x20\x20\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x00\x05\x20\xc0\xef\x80\x00\x06\x20\x40\xef\x80\x00\x07\x08\xe0\x03\x51\x00\x80\x01\x00\x80\x00\x08\x08\xd0\x03\x51\x00\x80\x01\x00\x80\x00\x09\x83\x01\x50\x80\x00\x0a\x83\x01\x10\x80\x00\x0b\x83\x01\x40\x00\x80\x01\x03\x06\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x01\x00\x07\x00\x08\x00\x00\x09\x01\x00\x0a\x00\x0b\x07\x01\x00\x32\x80\xa6\xff\x4c\x02\x80\x01\x80' + + +def test_pack(): + h = H225(__s) + assert (__s == str(h)) + + +def test_unpack(): + h = H225(__s) + assert (h.tpkt.v == 3) + assert (h.tpkt.rsvd == 0) + assert (h.tpkt.len == 1041) + assert (h.proto == 8) + assert (h.type == SETUP) + assert (len(h.data) == 3) + + ie = h.data[0] + assert (ie.type == BEARER_CAPABILITY) + assert (ie.len == 3) + ie = h.data[1] + assert (ie.type == DISPLAY) + assert (ie.len == 14) + ie = h.data[2] + assert (ie.type == USER_TO_USER) + assert (ie.len == 1008) + + +if __name__ == '__main__': + test_pack() + test_unpack() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/hsrp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/hsrp.py new file mode 100644 index 00000000..7581d3e4 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/hsrp.py @@ -0,0 +1,33 @@ +# $Id: hsrp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Cisco Hot Standby Router Protocol.""" + +import dpkt + +# Opcodes +HELLO = 0 +COUP = 1 +RESIGN = 2 + +# States +INITIAL = 0x00 +LEARN = 0x01 +LISTEN = 0x02 +SPEAK = 0x04 +STANDBY = 0x08 +ACTIVE = 0x10 + + +class HSRP(dpkt.Packet): + __hdr__ = ( + ('version', 'B', 0), + ('opcode', 'B', 0), + ('state', 'B', 0), + ('hello', 'B', 0), + ('hold', 'B', 0), + ('priority', 'B', 0), + ('group', 'B', 0), + ('rsvd', 'B', 0), + ('auth', '8s', 'cisco'), + ('vip', '4s', '') + ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/http.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/http.py new file mode 100644 index 00000000..59759ac6 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/http.py @@ -0,0 +1,259 @@ +# $Id: http.py 86 2013-03-05 19:25:19Z andrewflnr@gmail.com $ +# -*- coding: utf-8 -*- +"""Hypertext Transfer Protocol.""" + +import cStringIO +import dpkt + + +def parse_headers(f): + """Return dict of HTTP headers parsed from a file object.""" + d = {} + while 1: + line = f.readline() + if not line: + raise dpkt.NeedData('premature end of headers') + line = line.strip() + if not line: + break + l = line.split(':', 1) + if len(l[0].split()) != 1: + raise dpkt.UnpackError('invalid header: %r' % line) + k = l[0].lower() + v = len(l) != 1 and l[1].lstrip() or '' + if k in d: + if not type(d[k]) is list: + d[k] = [d[k]] + d[k].append(v) + else: + d[k] = v + return d + + +def parse_body(f, headers): + """Return HTTP body parsed from a file object, given HTTP header dict.""" + if headers.get('transfer-encoding', '').lower() == 'chunked': + l = [] + found_end = False + while 1: + try: + sz = f.readline().split(None, 1)[0] + except IndexError: + raise dpkt.UnpackError('missing chunk size') + n = int(sz, 16) + if n == 0: + found_end = True + buf = f.read(n) + if f.readline().strip(): + break + if n and len(buf) == n: + l.append(buf) + else: + break + if not found_end: + raise dpkt.NeedData('premature end of chunked body') + body = ''.join(l) + elif 'content-length' in headers: + n = int(headers['content-length']) + body = f.read(n) + if len(body) != n: + raise dpkt.NeedData('short body (missing %d bytes)' % (n - len(body))) + elif 'content-type' in headers: + body = f.read() + else: + # XXX - need to handle HTTP/0.9 + body = '' + return body + + +class Message(dpkt.Packet): + """Hypertext Transfer Protocol headers + body.""" + __metaclass__ = type + __hdr_defaults__ = {} + headers = None + body = None + + def __init__(self, *args, **kwargs): + if args: + self.unpack(args[0]) + else: + self.headers = {} + self.body = '' + for k, v in self.__hdr_defaults__.iteritems(): + setattr(self, k, v) + for k, v in kwargs.iteritems(): + setattr(self, k, v) + + def unpack(self, buf): + f = cStringIO.StringIO(buf) + # Parse headers + self.headers = parse_headers(f) + # Parse body + self.body = parse_body(f, self.headers) + # Save the rest + self.data = f.read() + + def pack_hdr(self): + return ''.join(['%s: %s\r\n' % t for t in self.headers.iteritems()]) + + def __len__(self): + return len(str(self)) + + def __str__(self): + return '%s\r\n%s' % (self.pack_hdr(), self.body) + + +class Request(Message): + """Hypertext Transfer Protocol Request.""" + __hdr_defaults__ = { + 'method': 'GET', + 'uri': '/', + 'version': '1.0', + } + __methods = dict.fromkeys(( + 'GET', 'PUT', 'ICY', + 'COPY', 'HEAD', 'LOCK', 'MOVE', 'POLL', 'POST', + 'BCOPY', 'BMOVE', 'MKCOL', 'TRACE', 'LABEL', 'MERGE', + 'DELETE', 'SEARCH', 'UNLOCK', 'REPORT', 'UPDATE', 'NOTIFY', + 'BDELETE', 'CONNECT', 'OPTIONS', 'CHECKIN', + 'PROPFIND', 'CHECKOUT', 'CCM_POST', + 'SUBSCRIBE', 'PROPPATCH', 'BPROPFIND', + 'BPROPPATCH', 'UNCHECKOUT', 'MKACTIVITY', + 'MKWORKSPACE', 'UNSUBSCRIBE', 'RPC_CONNECT', + 'VERSION-CONTROL', + 'BASELINE-CONTROL' + )) + __proto = 'HTTP' + + def unpack(self, buf): + f = cStringIO.StringIO(buf) + line = f.readline() + l = line.strip().split() + if len(l) < 2: + raise dpkt.UnpackError('invalid request: %r' % line) + if l[0] not in self.__methods: + raise dpkt.UnpackError('invalid http method: %r' % l[0]) + if len(l) == 2: + # HTTP/0.9 does not specify a version in the request line + self.version = '0.9' + else: + if not l[2].startswith(self.__proto): + raise dpkt.UnpackError('invalid http version: %r' % l[2]) + self.version = l[2][len(self.__proto) + 1:] + self.method = l[0] + self.uri = l[1] + Message.unpack(self, f.read()) + + def __str__(self): + return '%s %s %s/%s\r\n' % (self.method, self.uri, self.__proto, + self.version) + Message.__str__(self) + + +class Response(Message): + """Hypertext Transfer Protocol Response.""" + __hdr_defaults__ = { + 'version': '1.0', + 'status': '200', + 'reason': 'OK' + } + __proto = 'HTTP' + + def unpack(self, buf): + f = cStringIO.StringIO(buf) + line = f.readline() + l = line.strip().split(None, 2) + if len(l) < 2 or not l[0].startswith(self.__proto) or not l[1].isdigit(): + raise dpkt.UnpackError('invalid response: %r' % line) + self.version = l[0][len(self.__proto) + 1:] + self.status = l[1] + self.reason = l[2] if len(l) > 2 else '' + Message.unpack(self, f.read()) + + def __str__(self): + return '%s/%s %s %s\r\n' % (self.__proto, self.version, self.status, + self.reason) + Message.__str__(self) + + +def test_parse_request(): + s = """POST /main/redirect/ab/1,295,,00.html HTTP/1.0\r\nReferer: http://www.email.com/login/snap/login.jhtml\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.75 [en] (X11; U; OpenBSD 2.8 i386; Nav)\r\nHost: ltd.snap.com\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: 61\r\n\r\nsn=em&mn=dtest4&pw=this+is+atest&fr=true&login=Sign+in&od=www""" + r = Request(s) + assert r.method == 'POST' + assert r.uri == '/main/redirect/ab/1,295,,00.html' + assert r.body == 'sn=em&mn=dtest4&pw=this+is+atest&fr=true&login=Sign+in&od=www' + assert r.headers['content-type'] == 'application/x-www-form-urlencoded' + try: + Request(s[:60]) + assert 'invalid headers parsed!' + except dpkt.UnpackError: + pass + + +def test_format_request(): + r = Request() + assert str(r) == 'GET / HTTP/1.0\r\n\r\n' + r.method = 'POST' + r.uri = '/foo/bar/baz.html' + r.headers['content-type'] = 'text/plain' + r.headers['content-length'] = '5' + r.body = 'hello' + s = str(r) + assert s.startswith('POST /foo/bar/baz.html HTTP/1.0\r\n') + assert s.endswith('\r\n\r\nhello') + assert '\r\ncontent-length: 5\r\n' in s + assert '\r\ncontent-type: text/plain\r\n' in s + r = Request(str(r)) + assert str(r) == s + + +def test_chunked_response(): + s = """HTTP/1.1 200 OK\r\nCache-control: no-cache\r\nPragma: no-cache\r\nContent-Type: text/javascript; charset=utf-8\r\nContent-Encoding: gzip\r\nTransfer-Encoding: chunked\r\nSet-Cookie: S=gmail=agg:gmail_yj=v2s:gmproxy=JkU; Domain=.google.com; Path=/\r\nServer: GFE/1.3\r\nDate: Mon, 12 Dec 2005 22:33:23 GMT\r\n\r\na\r\n\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\r\n152\r\nm\x91MO\xc4 \x10\x86\xef\xfe\n\x82\xc9\x9eXJK\xe9\xb6\xee\xc1\xe8\x1e6\x9e4\xf1\xe0a5\x86R\xda\x12Yh\x80\xba\xfa\xef\x85\xee\x1a/\xf21\x99\x0c\xef0<\xc3\x81\xa0\xc3\x01\xe6\x10\xc1<\xa7eYT5\xa1\xa4\xac\xe1\xdb\x15:\xa4\x9d\x0c\xfa5K\x00\xf6.\xaa\xeb\x86\xd5y\xcdHY\x954\x8e\xbc*h\x8c\x8e!L7Y\xe6\'\xeb\x82WZ\xcf>8\x1ed\x87\x851X\xd8c\xe6\xbc\x17Z\x89\x8f\xac \x84e\xde\n!]\x96\x17i\xb5\x02{{\xc2z0\x1e\x0f#7\x9cw3v\x992\x9d\xfc\xc2c8\xea[/EP\xd6\xbc\xce\x84\xd0\xce\xab\xf7`\'\x1f\xacS\xd2\xc7\xd2\xfb\x94\x02N\xdc\x04\x0f\xee\xba\x19X\x03TtW\xd7\xb4\xd9\x92\n\xbcX\xa7;\xb0\x9b\'\x10$?F\xfd\xf3CzPt\x8aU\xef\xb8\xc8\x8b-\x18\xed\xec<\xe0\x83\x85\x08!\xf8"[\xb0\xd3j\x82h\x93\xb8\xcf\xd8\x9b\xba\xda\xd0\x92\x14\xa4a\rc\reM\xfd\x87=X;h\xd9j;\xe0db\x17\xc2\x02\xbd\xb0F\xc2in#\xfb:\xb6\xc4x\x15\xd6\x9f\x8a\xaf\xcf)\x0b^\xbc\xe7i\x11\x80\x8b\x00D\x01\xd8/\x82x\xf6\xd8\xf7J(\xae/\x11p\x1f+\xc4p\t:\xfe\xfd\xdf\xa3Y\xfa\xae4\x7f\x00\xc5\xa5\x95\xa1\xe2\x01\x00\x00\r\n0\r\n\r\n""" + r = Response(s) + assert r.version == '1.1' + assert r.status == '200' + assert r.reason == 'OK' + + +def test_multicookie_response(): + s = """HTTP/1.x 200 OK\r\nSet-Cookie: first_cookie=cookie1; path=/; domain=.example.com\r\nSet-Cookie: second_cookie=cookie2; path=/; domain=.example.com\r\nContent-Length: 0\r\n\r\n""" + r = Response(s) + assert type(r.headers['set-cookie']) is list + assert len(r.headers['set-cookie']) == 2 + + +def test_noreason_response(): + s = """HTTP/1.1 200 \r\n\r\n""" + r = Response(s) + assert r.reason == '' + assert str(r) == s + + +def test_request_version(): + s = """GET / HTTP/1.0\r\n\r\n""" + r = Request(s) + assert r.method == 'GET' + assert r.uri == '/' + assert r.version == '1.0' + + s = """GET /\r\n\r\n""" + r = Request(s) + assert r.method == 'GET' + assert r.uri == '/' + assert r.version == '0.9' + + s = """GET / CHEESE/1.0\r\n\r\n""" + try: + Request(s) + assert "invalid protocol version parsed!" + except: + pass + + +if __name__ == '__main__': + # Runs all the test associated with this class/file + test_parse_request() + test_format_request() + test_chunked_response() + test_multicookie_response() + test_noreason_response() + test_request_version() + print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp.py new file mode 100644 index 00000000..12e73728 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp.py @@ -0,0 +1,127 @@ +# $Id: icmp.py 45 2007-08-03 00:05:22Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Internet Control Message Protocol.""" + +import dpkt +import ip + +# Types (icmp_type) and codes (icmp_code) - +# http://www.iana.org/assignments/icmp-parameters + +ICMP_CODE_NONE = 0 # for types without codes +ICMP_ECHOREPLY = 0 # echo reply +ICMP_UNREACH = 3 # dest unreachable, codes: +ICMP_UNREACH_NET = 0 # bad net +ICMP_UNREACH_HOST = 1 # bad host +ICMP_UNREACH_PROTO = 2 # bad protocol +ICMP_UNREACH_PORT = 3 # bad port +ICMP_UNREACH_NEEDFRAG = 4 # IP_DF caused drop +ICMP_UNREACH_SRCFAIL = 5 # src route failed +ICMP_UNREACH_NET_UNKNOWN = 6 # unknown net +ICMP_UNREACH_HOST_UNKNOWN = 7 # unknown host +ICMP_UNREACH_ISOLATED = 8 # src host isolated +ICMP_UNREACH_NET_PROHIB = 9 # for crypto devs +ICMP_UNREACH_HOST_PROHIB = 10 # ditto +ICMP_UNREACH_TOSNET = 11 # bad tos for net +ICMP_UNREACH_TOSHOST = 12 # bad tos for host +ICMP_UNREACH_FILTER_PROHIB = 13 # prohibited access +ICMP_UNREACH_HOST_PRECEDENCE = 14 # precedence error +ICMP_UNREACH_PRECEDENCE_CUTOFF = 15 # precedence cutoff +ICMP_SRCQUENCH = 4 # packet lost, slow down +ICMP_REDIRECT = 5 # shorter route, codes: +ICMP_REDIRECT_NET = 0 # for network +ICMP_REDIRECT_HOST = 1 # for host +ICMP_REDIRECT_TOSNET = 2 # for tos and net +ICMP_REDIRECT_TOSHOST = 3 # for tos and host +ICMP_ALTHOSTADDR = 6 # alternate host address +ICMP_ECHO = 8 # echo service +ICMP_RTRADVERT = 9 # router advertise, codes: +ICMP_RTRADVERT_NORMAL = 0 # normal +ICMP_RTRADVERT_NOROUTE_COMMON = 16 # selective routing +ICMP_RTRSOLICIT = 10 # router solicitation +ICMP_TIMEXCEED = 11 # time exceeded, code: +ICMP_TIMEXCEED_INTRANS = 0 # ttl==0 in transit +ICMP_TIMEXCEED_REASS = 1 # ttl==0 in reass +ICMP_PARAMPROB = 12 # ip header bad +ICMP_PARAMPROB_ERRATPTR = 0 # req. opt. absent +ICMP_PARAMPROB_OPTABSENT = 1 # req. opt. absent +ICMP_PARAMPROB_LENGTH = 2 # bad length +ICMP_TSTAMP = 13 # timestamp request +ICMP_TSTAMPREPLY = 14 # timestamp reply +ICMP_INFO = 15 # information request +ICMP_INFOREPLY = 16 # information reply +ICMP_MASK = 17 # address mask request +ICMP_MASKREPLY = 18 # address mask reply +ICMP_TRACEROUTE = 30 # traceroute +ICMP_DATACONVERR = 31 # data conversion error +ICMP_MOBILE_REDIRECT = 32 # mobile host redirect +ICMP_IP6_WHEREAREYOU = 33 # IPv6 where-are-you +ICMP_IP6_IAMHERE = 34 # IPv6 i-am-here +ICMP_MOBILE_REG = 35 # mobile registration req +ICMP_MOBILE_REGREPLY = 36 # mobile registration reply +ICMP_DNS = 37 # domain name request +ICMP_DNSREPLY = 38 # domain name reply +ICMP_SKIP = 39 # SKIP +ICMP_PHOTURIS = 40 # Photuris +ICMP_PHOTURIS_UNKNOWN_INDEX = 0 # unknown sec index +ICMP_PHOTURIS_AUTH_FAILED = 1 # auth failed +ICMP_PHOTURIS_DECOMPRESS_FAILED = 2 # decompress failed +ICMP_PHOTURIS_DECRYPT_FAILED = 3 # decrypt failed +ICMP_PHOTURIS_NEED_AUTHN = 4 # no authentication +ICMP_PHOTURIS_NEED_AUTHZ = 5 # no authorization +ICMP_TYPE_MAX = 40 + + +class ICMP(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 8), + ('code', 'B', 0), + ('sum', 'H', 0) + ) + + class Echo(dpkt.Packet): + __hdr__ = (('id', 'H', 0), ('seq', 'H', 0)) + + class Quote(dpkt.Packet): + __hdr__ = (('pad', 'I', 0),) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.ip = ip.IP(self.data) + + class Unreach(Quote): + __hdr__ = (('pad', 'H', 0), ('mtu', 'H', 0)) + + class Quench(Quote): pass + + class Redirect(Quote): + __hdr__ = (('gw', 'I', 0),) + + class ParamProbe(Quote): + __hdr__ = (('ptr', 'B', 0), ('pad1', 'B', 0), ('pad2', 'H', 0)) + + class TimeExceed(Quote): pass + + _typesw = {0: Echo, 3: Unreach, 4: Quench, 5: Redirect, 8: Echo, 11: TimeExceed} + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._typesw[self.type](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + pass + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) + + +def test_icmp(): + s = '\x03\x0a\x6b\x19\x00\x00\x00\x00\x45\x00\x00\x28\x94\x1f\x00\x00\xe3\x06\x99\xb4\x23\x2b\x24\x00\xde\x8e\x84\x42\xab\xd1\x00\x50\x00\x35\xe1\x29\x20\xd9\x00\x00\x00\x22\x9b\xf0\xe2\x04\x65\x6b' + assert (str(ICMP(s)) == s) + +if __name__ == '__main__': + test_icmp() + print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp6.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp6.py new file mode 100644 index 00000000..679bc6b4 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp6.py @@ -0,0 +1,77 @@ +# $Id: icmp6.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Internet Control Message Protocol for IPv6.""" + +import dpkt +import ip6 + +ICMP6_DST_UNREACH = 1 # dest unreachable, codes: +ICMP6_PACKET_TOO_BIG = 2 # packet too big +ICMP6_TIME_EXCEEDED = 3 # time exceeded, code: +ICMP6_PARAM_PROB = 4 # ip6 header bad + +ICMP6_ECHO_REQUEST = 128 # echo service +ICMP6_ECHO_REPLY = 129 # echo reply +MLD_LISTENER_QUERY = 130 # multicast listener query +MLD_LISTENER_REPORT = 131 # multicast listener report +MLD_LISTENER_DONE = 132 # multicast listener done + +# RFC2292 decls +ICMP6_MEMBERSHIP_QUERY = 130 # group membership query +ICMP6_MEMBERSHIP_REPORT = 131 # group membership report +ICMP6_MEMBERSHIP_REDUCTION = 132 # group membership termination + +ND_ROUTER_SOLICIT = 133 # router solicitation +ND_ROUTER_ADVERT = 134 # router advertisment +ND_NEIGHBOR_SOLICIT = 135 # neighbor solicitation +ND_NEIGHBOR_ADVERT = 136 # neighbor advertisment +ND_REDIRECT = 137 # redirect + +ICMP6_ROUTER_RENUMBERING = 138 # router renumbering + +ICMP6_WRUREQUEST = 139 # who are you request +ICMP6_WRUREPLY = 140 # who are you reply +ICMP6_FQDN_QUERY = 139 # FQDN query +ICMP6_FQDN_REPLY = 140 # FQDN reply +ICMP6_NI_QUERY = 139 # node information request +ICMP6_NI_REPLY = 140 # node information reply + +ICMP6_MAXTYPE = 201 + + +class ICMP6(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('code', 'B', 0), + ('sum', 'H', 0) + ) + + class Error(dpkt.Packet): + __hdr__ = (('pad', 'I', 0), ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.ip6 = ip6.IP6(self.data) + + class Unreach(Error): pass + + class TooBig(Error): + __hdr__ = (('mtu', 'I', 1232), ) + + class TimeExceed(Error): pass + + class ParamProb(Error): + __hdr__ = (('ptr', 'I', 0), ) + + class Echo(dpkt.Packet): + __hdr__ = (('id', 'H', 0), ('seq', 'H', 0)) + + _typesw = {1: Unreach, 2: TooBig, 3: TimeExceed, 4: ParamProb, 128: Echo, 129: Echo} + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._typesw[self.type](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ieee80211.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ieee80211.py new file mode 100644 index 00000000..e18833fb --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ieee80211.py @@ -0,0 +1,875 @@ +# $Id: 80211.py 53 2008-12-18 01:22:57Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""IEEE 802.11.""" + +import socket +import struct +import dpkt +from decorators import deprecated + +# Frame Types +MGMT_TYPE = 0 +CTL_TYPE = 1 +DATA_TYPE = 2 + +# Frame Sub-Types +M_ASSOC_REQ = 0 +M_ASSOC_RESP = 1 +M_REASSOC_REQ = 2 +M_REASSOC_RESP = 3 +M_PROBE_REQ = 4 +M_PROBE_RESP = 5 +M_BEACON = 8 +M_ATIM = 9 +M_DISASSOC = 10 +M_AUTH = 11 +M_DEAUTH = 12 +M_ACTION = 13 +C_BLOCK_ACK_REQ = 8 +C_BLOCK_ACK = 9 +C_PS_POLL = 10 +C_RTS = 11 +C_CTS = 12 +C_ACK = 13 +C_CF_END = 14 +C_CF_END_ACK = 15 +D_DATA = 0 +D_DATA_CF_ACK = 1 +D_DATA_CF_POLL = 2 +D_DATA_CF_ACK_POLL = 3 +D_NULL = 4 +D_CF_ACK = 5 +D_CF_POLL = 6 +D_CF_ACK_POLL = 7 +D_QOS_DATA = 8 +D_QOS_CF_ACK = 9 +D_QOS_CF_POLL = 10 +D_QOS_CF_ACK_POLL = 11 +D_QOS_NULL = 12 +D_QOS_CF_POLL_EMPTY = 14 + +TO_DS_FLAG = 10 +FROM_DS_FLAG = 1 +INTER_DS_FLAG = 11 + +# Bitshifts for Frame Control +_VERSION_MASK = 0x0300 +_TYPE_MASK = 0x0c00 +_SUBTYPE_MASK = 0xf000 +_TO_DS_MASK = 0x0001 +_FROM_DS_MASK = 0x0002 +_MORE_FRAG_MASK = 0x0004 +_RETRY_MASK = 0x0008 +_PWR_MGT_MASK = 0x0010 +_MORE_DATA_MASK = 0x0020 +_WEP_MASK = 0x0040 +_ORDER_MASK = 0x0080 +_VERSION_SHIFT = 8 +_TYPE_SHIFT = 10 +_SUBTYPE_SHIFT = 12 +_TO_DS_SHIFT = 0 +_FROM_DS_SHIFT = 1 +_MORE_FRAG_SHIFT = 2 +_RETRY_SHIFT = 3 +_PWR_MGT_SHIFT = 4 +_MORE_DATA_SHIFT = 5 +_WEP_SHIFT = 6 +_ORDER_SHIFT = 7 + +# IEs +IE_SSID = 0 +IE_RATES = 1 +IE_FH = 2 +IE_DS = 3 +IE_CF = 4 +IE_TIM = 5 +IE_IBSS = 6 +IE_HT_CAPA = 45 +IE_ESR = 50 +IE_HT_INFO = 61 + +FCS_LENGTH = 4 + +FRAMES_WITH_CAPABILITY = [M_BEACON, M_ASSOC_RESP, M_ASSOC_REQ, M_REASSOC_REQ, ] + +# Block Ack control constants +_ACK_POLICY_SHIFT = 0 +_MULTI_TID_SHIFT = 1 +_COMPRESSED_SHIFT = 2 +_TID_SHIFT = 12 + +_ACK_POLICY_MASK = 0x0001 +_MULTI_TID_MASK = 0x0002 +_COMPRESSED_MASK = 0x0004 +_TID_MASK = 0xf000 + +_COMPRESSED_BMP_LENGTH = 8 +_BMP_LENGTH = 128 + +# Action frame categories +BLOCK_ACK = 3 + +# Block ack category action codes +BLOCK_ACK_CODE_REQUEST = 0 +BLOCK_ACK_CODE_RESPONSE = 1 + + +class IEEE80211(dpkt.Packet): + __hdr__ = ( + ('framectl', 'H', 0), + ('duration', 'H', 0) + ) + + @property + def version(self): + return (self.framectl & _VERSION_MASK) >> _VERSION_SHIFT + + @version.setter + def version(self, val): + self.framectl = (val << _VERSION_SHIFT) | (self.framectl & ~_VERSION_MASK) + + @property + def type(self): + return (self.framectl & _TYPE_MASK) >> _TYPE_SHIFT + + @type.setter + def type(self, val): + self.framectl = (val << _TYPE_SHIFT) | (self.framectl & ~_TYPE_MASK) + + @property + def subtype(self): + return (self.framectl & _SUBTYPE_MASK) >> _SUBTYPE_SHIFT + + @subtype.setter + def subtype(self, val): + self.framectl = (val << _SUBTYPE_SHIFT) | (self.framectl & ~_SUBTYPE_MASK) + + @property + def to_ds(self): + return (self.framectl & _TO_DS_MASK) >> _TO_DS_SHIFT + + @to_ds.setter + def to_ds(self, val): + self.framectl = (val << _TO_DS_SHIFT) | (self.framectl & ~_TO_DS_MASK) + + @property + def from_ds(self): + return (self.framectl & _FROM_DS_MASK) >> _FROM_DS_SHIFT + + @from_ds.setter + def from_ds(self, val): + self.framectl = (val << _FROM_DS_SHIFT) | (self.framectl & ~_FROM_DS_MASK) + + @property + def more_frag(self): + return (self.framectl & _MORE_FRAG_MASK) >> _MORE_FRAG_SHIFT + + @more_frag.setter + def more_frag(self, val): + self.framectl = (val << _MORE_FRAG_SHIFT) | (self.framectl & ~_MORE_FRAG_MASK) + + @property + def retry(self): + return (self.framectl & _RETRY_MASK) >> _RETRY_SHIFT + + @retry.setter + def retry(self, val): + self.framectl = (val << _RETRY_SHIFT) | (self.framectl & ~_RETRY_MASK) + + @property + def pwr_mgt(self): + return (self.framectl & _PWR_MGT_MASK) >> _PWR_MGT_SHIFT + + @pwr_mgt.setter + def pwr_mgt(self, val): + self.framectl = (val << _PWR_MGT_SHIFT) | (self.framectl & ~_PWR_MGT_MASK) + + @property + def more_data(self): + return (self.framectl & _MORE_DATA_MASK) >> _MORE_DATA_SHIFT + + @more_data.setter + def more_data(self, val): + self.framectl = (val << _MORE_DATA_SHIFT) | (self.framectl & ~_MORE_DATA_MASK) + + @property + def wep(self): + return (self.framectl & _WEP_MASK) >> _WEP_SHIFT + + @wep.setter + def wep(self, val): + self.framectl = (val << _WEP_SHIFT) | (self.framectl & ~_WEP_MASK) + + @property + def order(self): + return (self.framectl & _ORDER_MASK) >> _ORDER_SHIFT + + @order.setter + def order(self, val): + self.framectl = (val << _ORDER_SHIFT) | (self.framectl & ~_ORDER_MASK) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_version(self): return self.version + + @deprecated + def _set_version(self, val): self.version = val + + @deprecated + def _get_type(self): return self.type + + @deprecated + def _set_type(self, val): self.type = val + + @deprecated + def _get_subtype(self): return self.subtype + + @deprecated + def _set_subtype(self, val): self.subtype = val + + @deprecated + def _get_to_ds(self): return self.to_ds + + @deprecated + def _set_to_ds(self, val): self.to_ds = val + + @deprecated + def _get_from_ds(self): return self.from_ds + + @deprecated + def _set_from_ds(self, val): self.from_ds = val + + @deprecated + def _get_more_frag(self): return self.more_frag + + @deprecated + def _set_more_frag(self, val): self.more_frag = val + + @deprecated + def _get_retry(self): return self.retry + + @deprecated + def _set_retry(self, val): self.retry = val + + @deprecated + def _get_pwr_mgt(self): return self.pwr_mgt + + @deprecated + def _set_pwr_mgt(self, val): self.pwr_mgt = val + + @deprecated + def _get_more_data(self): return self.more_data + + @deprecated + def _set_more_data(self, val): self.more_data = val + + @deprecated + def _get_wep(self): return self.wep + + @deprecated + def _set_wep(self, val): self.wep = val + + @deprecated + def _get_order(self): return self.order + + @deprecated + def _set_order(self, val): self.order = val + # ================================================= + + def unpack_ies(self, buf): + self.ies = [] + + ie_decoder = { + IE_SSID: ('ssid', self.IE), + IE_RATES: ('rate', self.IE), + IE_FH: ('fh', self.FH), + IE_DS: ('ds', self.DS), + IE_CF: ('cf', self.CF), + IE_TIM: ('tim', self.TIM), + IE_IBSS: ('ibss', self.IBSS), + IE_HT_CAPA: ('ht_capa', self.IE), + IE_ESR: ('esr', self.IE), + IE_HT_INFO: ('ht_info', self.IE) + } + + # each IE starts with an ID and a length + while len(buf) > FCS_LENGTH: + ie_id = struct.unpack('B', (buf[0]))[0] + try: + parser = ie_decoder[ie_id][1] + name = ie_decoder[ie_id][0] + except KeyError: + parser = self.IE + name = 'ie_' + str(ie_id) + ie = parser(buf) + + ie.data = buf[2:2 + ie.len] + setattr(self, name, ie) + self.ies.append(ie) + buf = buf[2 + ie.len:] + + class Capability(object): + def __init__(self, field): + self.ess = field & 1 + self.ibss = (field >> 1) & 1 + self.cf_poll = (field >> 2) & 1 + self.cf_poll_req = (field >> 3) & 1 + self.privacy = (field >> 4) & 1 + self.short_preamble = (field >> 5) & 1 + self.pbcc = (field >> 6) & 1 + self.hopping = (field >> 7) & 1 + self.spec_mgmt = (field >> 8) & 1 + self.qos = (field >> 9) & 1 + self.short_slot = (field >> 10) & 1 + self.apsd = (field >> 11) & 1 + self.dsss = (field >> 13) & 1 + self.delayed_blk_ack = (field >> 14) & 1 + self.imm_blk_ack = (field >> 15) & 1 + + def __init__(self, *args, **kwargs): + if kwargs and 'fcs' in kwargs: + self.fcs_present = kwargs.pop('fcs') + else: + self.fcs_present = False + + super(IEEE80211, self).__init__(*args, **kwargs) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = buf[self.__hdr_len__:] + + m_decoder = { + M_BEACON: ('beacon', self.Beacon), + M_ASSOC_REQ: ('assoc_req', self.Assoc_Req), + M_ASSOC_RESP: ('assoc_resp', self.Assoc_Resp), + M_DISASSOC: ('diassoc', self.Disassoc), + M_REASSOC_REQ: ('reassoc_req', self.Reassoc_Req), + M_REASSOC_RESP: ('reassoc_resp', self.Assoc_Resp), + M_AUTH: ('auth', self.Auth), + M_PROBE_RESP: ('probe_resp', self.Beacon), + M_DEAUTH: ('deauth', self.Deauth), + M_ACTION: ('action', self.Action) + } + + c_decoder = { + C_RTS: ('rts', self.RTS), + C_CTS: ('cts', self.CTS), + C_ACK: ('ack', self.ACK), + C_BLOCK_ACK_REQ: ('bar', self.BlockAckReq), + C_BLOCK_ACK: ('back', self.BlockAck), + C_CF_END: ('cf_end', self.CFEnd), + } + + d_dsData = { + 0: self.Data, + FROM_DS_FLAG: self.DataFromDS, + TO_DS_FLAG: self.DataToDS, + INTER_DS_FLAG: self.DataInterDS + } + + # For now decode everything with DATA. Haven't checked about other QoS + # additions + d_decoder = { + # modified the decoder to consider the ToDS and FromDS flags + # Omitting the 11 case for now + D_DATA: ('data_frame', d_dsData), + D_NULL: ('data_frame', d_dsData), + D_QOS_DATA: ('data_frame', d_dsData), + D_QOS_NULL: ('data_frame', d_dsData) + } + + decoder = { + MGMT_TYPE: m_decoder, + CTL_TYPE: c_decoder, + DATA_TYPE: d_decoder + } + + # Strip off the FCS field + if self.fcs_present: + self.fcs = struct.unpack('I', self.data[-1 * FCS_LENGTH:])[0] + self.data = self.data[0: -1 * FCS_LENGTH] + + if self.type == MGMT_TYPE: + self.mgmt = self.MGMT_Frame(self.data) + self.data = self.mgmt.data + if self.subtype == M_PROBE_REQ: + self.unpack_ies(self.data) + return + if self.subtype == M_ATIM: + return + + try: + parser = decoder[self.type][self.subtype][1] + name = decoder[self.type][self.subtype][0] + except KeyError: + print "Key error:", self.type, self.subtype + return + + if self.type == DATA_TYPE: + # need to grab the ToDS/FromDS info + parser = parser[self.to_ds * 10 + self.from_ds] + + if self.type == MGMT_TYPE: + field = parser(self.mgmt.data) + else: + field = parser(self.data) + self.data = field + + setattr(self, name, field) + + if self.type == MGMT_TYPE: + self.ies = self.unpack_ies(field.data) + if self.subtype in FRAMES_WITH_CAPABILITY: + self.capability = self.Capability(socket.ntohs(field.capability)) + + if self.type == DATA_TYPE and self.subtype == D_QOS_DATA: + self.qos_data = self.QoS_Data(field.data) + field.data = self.qos_data.data + + self.data = field.data + + class BlockAckReq(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('ctl', 'H', 0), + ('seq', 'H', 0), + ) + + class BlockAck(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('ctl', 'H', 0), + ('seq', 'H', 0), + ) + + @property + def compressed(self): + return (self.ctl & _COMPRESSED_MASK) >> _COMPRESSED_SHIFT + + @compressed.setter + def compressed(self, val): + self.ctl = (val << _COMPRESSED_SHIFT) | (self.ctl & ~_COMPRESSED_MASK) + + @property + def ack_policy(self): + return (self.ctl & _ACK_POLICY_MASK) >> _ACK_POLICY_SHIFT + + @ack_policy.setter + def ack_policy(self, val): + self.ctl = (val << _ACK_POLICY_SHIFT) | (self.ctl & ~_ACK_POLICY_MASK) + + @property + def multi_tid(self): + return (self.ctl & _MULTI_TID_MASK) >> _MULTI_TID_SHIFT + + @multi_tid.setter + def multi_tid(self, val): + self.ctl = (val << _MULTI_TID_SHIFT) | (self.ctl & ~_MULTI_TID_MASK) + + @property + def tid(self): + return (self.ctl & _TID_MASK) >> _TID_SHIFT + + @tid.setter + def tid(self, val): + self.ctl = (val << _TID_SHIFT) | (self.ctl & ~_TID_MASK) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_compressed(self): return self.compressed + + @deprecated + def _set_compressed(self, val): self.compressed = val + + @deprecated + def _get_ack_policy(self): return self.ack_policy + + @deprecated + def _set_ack_policy(self, val): self.ack_policy = val + + @deprecated + def _get_multi_tid(self): return self.multi_tid + + @deprecated + def _set_multi_tid(self, val): self.multi_tid = val + + @deprecated + def _get_tid(self): return self.tid + + @deprecated + def _set_tid(self, val): self.tid = val + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = buf[self.__hdr_len__:] + self.ctl = socket.ntohs(self.ctl) + + if self.compressed: + self.bmp = struct.unpack('8s', self.data[0:_COMPRESSED_BMP_LENGTH])[0] + else: + self.bmp = struct.unpack('128s', self.data[0:_BMP_LENGTH])[0] + self.data = self.data[len(self.__hdr__) + len(self.bmp):] + + class RTS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6) + ) + + class CTS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ) + + class ACK(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ) + + class CFEnd(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ) + + class MGMT_Frame(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('bssid', '6s', '\x00' * 6), + ('frag_seq', 'H', 0) + ) + + class Beacon(dpkt.Packet): + __hdr__ = ( + ('timestamp', 'Q', 0), + ('interval', 'H', 0), + ('capability', 'H', 0) + ) + + class Disassoc(dpkt.Packet): + __hdr__ = ( + ('reason', 'H', 0), + ) + + class Assoc_Req(dpkt.Packet): + __hdr__ = ( + ('capability', 'H', 0), + ('interval', 'H', 0) + ) + + class Assoc_Resp(dpkt.Packet): + __hdr__ = ( + ('capability', 'H', 0), + ('status', 'H', 0), + ('aid', 'H', 0) + ) + + class Reassoc_Req(dpkt.Packet): + __hdr__ = ( + ('capability', 'H', 0), + ('interval', 'H', 0), + ('current_ap', '6s', '\x00' * 6) + ) + + # This obviously doesn't support any of AUTH frames that use encryption + class Auth(dpkt.Packet): + __hdr__ = ( + ('algorithm', 'H', 0), + ('auth_seq', 'H', 0), + ) + + class Deauth(dpkt.Packet): + __hdr__ = ( + ('reason', 'H', 0), + ) + + class Action(dpkt.Packet): + __hdr__ = ( + ('category', 'B', 0), + ('code', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + action_parser = { + BLOCK_ACK: {BLOCK_ACK_CODE_REQUEST: ('block_ack_request', IEEE80211.BlockAckActionRequest), + BLOCK_ACK_CODE_RESPONSE: ('block_ack_response', IEEE80211.BlockAckActionResponse), + }, + } + + decoder = action_parser[self.category][self.code][1] + field_name = action_parser[self.category][self.code][0] + field = decoder(self.data) + setattr(self, field_name, field) + self.data = field.data + + class BlockAckActionRequest(dpkt.Packet): + __hdr__ = ( + ('dialog', 'B', 0), + ('parameters', 'H', 0), + ('timeout', 'H', 0), + ('starting_seq', 'H', 0), + ) + + class BlockAckActionResponse(dpkt.Packet): + __hdr__ = ( + ('dialog', 'B', 0), + ('status_code', 'H', 0), + ('parameters', 'H', 0), + ('timeout', 'H', 0), + ) + + class Data(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('bssid', '6s', '\x00' * 6), + ('frag_seq', 'H', 0) + ) + + class DataFromDS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('bssid', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('frag_seq', 'H', 0) + ) + + class DataToDS(dpkt.Packet): + __hdr__ = ( + ('bssid', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('dst', '6s', '\x00' * 6), + ('frag_seq', 'H', 0) + ) + + class DataInterDS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('da', '6s', '\x00' * 6), + ('frag_seq', 'H', 0), + ('sa', '6s', '\x00' * 6) + ) + + class QoS_Data(dpkt.Packet): + __hdr__ = ( + ('control', 'H', 0), + ) + + class IE(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.info = buf[2:self.len + 2] + + class FH(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('tu', 'H', 0), + ('hopset', 'B', 0), + ('hoppattern', 'B', 0), + ('hopindex', 'B', 0) + ) + + class DS(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('ch', 'B', 0) + ) + + class CF(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('count', 'B', 0), + ('period', 'B', 0), + ('max', 'H', 0), + ('dur', 'H', 0) + ) + + class TIM(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('count', 'B', 0), + ('period', 'B', 0), + ('ctrl', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.bitmap = buf[5:self.len + 2] + + class IBSS(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('atim', 'H', 0) + ) + +def test_802211_ack(): + s = '\xd4\x00\x00\x00\x00\x12\xf0\xb6\x1c\xa4\xff\xff\xff\xff' + ieee = IEEE80211(s, fcs=True) + assert ieee.version == 0 + assert ieee.type == CTL_TYPE + assert ieee.subtype == C_ACK + assert ieee.to_ds == 0 + assert ieee.from_ds == 0 + assert ieee.pwr_mgt == 0 + assert ieee.more_data == 0 + assert ieee.wep == 0 + assert ieee.order == 0 + assert ieee.ack.dst == '\x00\x12\xf0\xb6\x1c\xa4' + fcs = struct.unpack('I', s[-4:])[0] + assert ieee.fcs == fcs + +def test_80211_beacon(): + s = '\x80\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x26\xcb\x18\x6a\x30\x00\x26\xcb\x18\x6a\x30\xa0\xd0\x77\x09\x32\x03\x8f\x00\x00\x00\x66\x00\x31\x04\x00\x04\x43\x41\x45\x4e\x01\x08\x82\x84\x8b\x0c\x12\x96\x18\x24\x03\x01\x01\x05\x04\x00\x01\x00\x00\x07\x06\x55\x53\x20\x01\x0b\x1a\x0b\x05\x00\x00\x6e\x00\x00\x2a\x01\x02\x2d\x1a\x6e\x18\x1b\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x28\x00\x32\x04\x30\x48\x60\x6c\x36\x03\x51\x63\x03\x3d\x16\x01\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x1e\x05\x00\x8f\x00\x0f\x00\xff\x03\x59\x00\x63\x73\x65\x2d\x33\x39\x31\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x96\x06\x00\x40\x96\x00\x14\x00\xdd\x18\x00\x50\xf2\x02\x01\x01\x80\x00\x03\xa4\x00\x00\x27\xa4\x00\x00\x42\x43\x5e\x00\x62\x32\x2f\x00\xdd\x06\x00\x40\x96\x01\x01\x04\xdd\x05\x00\x40\x96\x03\x05\xdd\x05\x00\x40\x96\x0b\x09\xdd\x08\x00\x40\x96\x13\x01\x00\x34\x01\xdd\x05\x00\x40\x96\x14\x05' + ieee = IEEE80211(s, fcs=True) + assert ieee.version == 0 + assert ieee.type == MGMT_TYPE + assert ieee.subtype == M_BEACON + assert ieee.to_ds == 0 + assert ieee.from_ds == 0 + assert ieee.pwr_mgt == 0 + assert ieee.more_data == 0 + assert ieee.wep == 0 + assert ieee.order == 0 + assert ieee.mgmt.dst == '\xff\xff\xff\xff\xff\xff' + assert ieee.mgmt.src == '\x00\x26\xcb\x18\x6a\x30' + assert ieee.beacon.capability == 0x3104 + assert ieee.capability.privacy == 1 + assert ieee.ssid.data == 'CAEN' + assert ieee.rate.data == '\x82\x84\x8b\x0c\x12\x96\x18\x24' + assert ieee.ds.data == '\x01' + assert ieee.tim.data == '\x00\x01\x00\x00' + fcs = struct.unpack('I', s[-4:])[0] + assert ieee.fcs == fcs + +def test_80211_data(): + s = '\x08\x09\x20\x00\x00\x26\xcb\x17\x3d\x91\x00\x16\x44\xb0\xae\xc6\x00\x02\xb3\xd6\x26\x3c\x80\x7e\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04\xac\x17\x00\x00' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == DATA_TYPE + assert ieee.subtype == D_DATA + assert ieee.data_frame.dst == '\x00\x02\xb3\xd6\x26\x3c' + assert ieee.data_frame.src == '\x00\x16\x44\xb0\xae\xc6' + assert ieee.data_frame.frag_seq == 0x807e + assert ieee.data == '\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04' + assert ieee.fcs == struct.unpack('I', '\xac\x17\x00\x00')[0] + + import llc, ip + + llc_pkt = llc.LLC(ieee.data_frame.data) + ip_pkt = ip.IP(llc_pkt.data) + assert ip_pkt.dst == '\x3f\xf5\xd1\x69' + +def test_80211_data_qos(): + s = '\x88\x01\x3a\x01\x00\x26\xcb\x17\x44\xf0\x00\x23\xdf\xc9\xc0\x93\x00\x26\xcb\x17\x44\xf0\x20\x7b\x00\x00\xaa\xaa\x03\x00\x00\x00\x88\x8e\x01\x00\x00\x74\x02\x02\x00\x74\x19\x80\x00\x00\x00\x6a\x16\x03\x01\x00\x65\x01\x00\x00\x61\x03\x01\x4b\x4c\xa7\x7e\x27\x61\x6f\x02\x7b\x3c\x72\x39\xe3\x7b\xd7\x43\x59\x91\x7f\xaa\x22\x47\x51\xb6\x88\x9f\x85\x90\x87\x5a\xd1\x13\x20\xe0\x07\x00\x00\x68\xbd\xa4\x13\xb0\xd5\x82\x7e\xc7\xfb\xe7\xcc\xab\x6e\x5d\x5a\x51\x50\xd4\x45\xc5\xa1\x65\x53\xad\xb5\x88\x5b\x00\x1a\x00\x2f\x00\x05\x00\x04\x00\x35\x00\x0a\x00\x09\x00\x03\x00\x08\x00\x33\x00\x39\x00\x16\x00\x15\x00\x14\x01\x00\xff\xff\xff\xff' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == DATA_TYPE + assert ieee.subtype == D_QOS_DATA + assert ieee.data_frame.dst == '\x00\x26\xcb\x17\x44\xf0' + assert ieee.data_frame.src == '\x00\x23\xdf\xc9\xc0\x93' + assert ieee.data_frame.frag_seq == 0x207b + assert ieee.data == '\xaa\xaa\x03\x00\x00\x00\x88\x8e\x01\x00\x00\x74\x02\x02\x00\x74\x19\x80\x00\x00\x00\x6a\x16\x03\x01\x00\x65\x01\x00\x00\x61\x03\x01\x4b\x4c\xa7\x7e\x27\x61\x6f\x02\x7b\x3c\x72\x39\xe3\x7b\xd7\x43\x59\x91\x7f\xaa\x22\x47\x51\xb6\x88\x9f\x85\x90\x87\x5a\xd1\x13\x20\xe0\x07\x00\x00\x68\xbd\xa4\x13\xb0\xd5\x82\x7e\xc7\xfb\xe7\xcc\xab\x6e\x5d\x5a\x51\x50\xd4\x45\xc5\xa1\x65\x53\xad\xb5\x88\x5b\x00\x1a\x00\x2f\x00\x05\x00\x04\x00\x35\x00\x0a\x00\x09\x00\x03\x00\x08\x00\x33\x00\x39\x00\x16\x00\x15\x00\x14\x01\x00' + assert ieee.qos_data.control == 0x0 + assert ieee.fcs == struct.unpack('I', '\xff\xff\xff\xff')[0] + +def test_bug(): + s = '\x88\x41\x2c\x00\x00\x26\xcb\x17\x44\xf0\x00\x1e\x52\x97\x14\x11\x00\x1f\x6d\xe8\x18\x00\xd0\x07\x00\x00\x6f\x00\x00\x20\x00\x00\x00\x00' + ieee = IEEE80211(s) + assert ieee.wep == 1 + +def test_data_ds(): + # verifying the ToDS and FromDS fields and that we're getting the + # correct values + + s = '\x08\x03\x00\x00\x01\x0b\x85\x00\x00\x00\x00\x26\xcb\x18\x73\x50\x01\x0b\x85\x00\x00\x00\x00\x89\x00\x26\xcb\x18\x73\x50' + ieee = IEEE80211(s) + assert ieee.type == DATA_TYPE + assert ieee.to_ds == 1 + assert ieee.from_ds == 1 + assert ieee.data_frame.sa == '\x00\x26\xcb\x18\x73\x50' + assert ieee.data_frame.src == '\x00\x26\xcb\x18\x73\x50' + assert ieee.data_frame.dst == '\x01\x0b\x85\x00\x00\x00' + assert ieee.data_frame.da == '\x01\x0b\x85\x00\x00\x00' + + s = '\x88\x41\x50\x01\x00\x26\xcb\x17\x48\xc1\x00\x24\x2c\xe7\xfe\x8a\xff\xff\xff\xff\xff\xff\x80\xa0\x00\x00\x09\x1a\x00\x20\x00\x00\x00\x00' + ieee = IEEE80211(s) + assert ieee.type == DATA_TYPE + assert ieee.to_ds == 1 + assert ieee.from_ds == 0 + assert ieee.data_frame.bssid == '\x00\x26\xcb\x17\x48\xc1' + assert ieee.data_frame.src == '\x00\x24\x2c\xe7\xfe\x8a' + assert ieee.data_frame.dst == '\xff\xff\xff\xff\xff\xff' + + s = '\x08\x02\x02\x01\x00\x02\x44\xac\x27\x70\x00\x1f\x33\x39\x75\x44\x00\x1f\x33\x39\x75\x44\x90\xa4' + ieee = IEEE80211(s) + assert ieee.type == DATA_TYPE + assert ieee.to_ds == 0 + assert ieee.from_ds == 1 + assert ieee.data_frame.bssid == '\x00\x1f\x33\x39\x75\x44' + assert ieee.data_frame.src == '\x00\x1f\x33\x39\x75\x44' + assert ieee.data_frame.dst == '\x00\x02\x44\xac\x27\x70' + +def test_compressed_block_ack(): + s = '\x94\x00\x00\x00\x34\xc0\x59\xd6\x3f\x62\xb4\x75\x0e\x46\x83\xc1\x05\x50\x80\xee\x03\x00\x00\x00\x00\x00\x00\x00\xa2\xe4\x98\x45' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == CTL_TYPE + assert ieee.subtype == C_BLOCK_ACK + assert ieee.back.dst == '\x34\xc0\x59\xd6\x3f\x62' + assert ieee.back.src == '\xb4\x75\x0e\x46\x83\xc1' + assert ieee.back.compressed == 1 + assert len(ieee.back.bmp) == 8 + assert ieee.back.ack_policy == 1 + assert ieee.back.tid == 5 + +def test_action_block_ack_request(): + s = '\xd0\x00\x3a\x01\x00\x23\x14\x36\x52\x30\xb4\x75\x0e\x46\x83\xc1\xb4\x75\x0e\x46\x83\xc1\x70\x14\x03\x00\x0d\x02\x10\x00\x00\x40\x29\x06\x50\x33\x9e' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == MGMT_TYPE + assert ieee.subtype == M_ACTION + assert ieee.action.category == BLOCK_ACK + assert ieee.action.code == BLOCK_ACK_CODE_REQUEST + assert ieee.action.block_ack_request.timeout == 0 + parameters = struct.unpack('H', '\x10\x02')[0] + assert ieee.action.block_ack_request.parameters == parameters + +def test_action_block_ack_response(): + s = '\xd0\x00\x3c\x00\xb4\x75\x0e\x46\x83\xc1\x00\x23\x14\x36\x52\x30\xb4\x75\x0e\x46\x83\xc1\xd0\x68\x03\x01\x0d\x00\x00\x02\x10\x88\x13\x9f\xc0\x0b\x75' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == MGMT_TYPE + assert ieee.subtype == M_ACTION + assert ieee.action.category == BLOCK_ACK + assert ieee.action.code == BLOCK_ACK_CODE_RESPONSE + timeout = struct.unpack('H', '\x13\x88')[0] + assert ieee.action.block_ack_response.timeout == timeout + parameters = struct.unpack('H', '\x10\x02')[0] + assert ieee.action.block_ack_response.parameters == parameters + +if __name__ == '__main__': + # Runs all the test associated with this class/file + test_802211_ack() + test_80211_beacon() + test_80211_data() + test_80211_data_qos() + test_bug() + test_data_ds() + test_compressed_block_ack() + test_action_block_ack_request() + test_action_block_ack_response() + print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/igmp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/igmp.py new file mode 100644 index 00000000..5e5cb166 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/igmp.py @@ -0,0 +1,19 @@ +# $Id: igmp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Internet Group Management Protocol.""" + +import dpkt + + +class IGMP(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('maxresp', 'B', 0), + ('sum', 'H', 0), + ('group', 'I', 0) + ) + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip.py new file mode 100644 index 00000000..0658ff6a --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip.py @@ -0,0 +1,359 @@ +# $Id: ip.py 87 2013-03-05 19:41:04Z andrewflnr@gmail.com $ +# -*- coding: utf-8 -*- +"""Internet Protocol.""" + +import dpkt +from decorators import deprecated + + +class IP(dpkt.Packet): + __hdr__ = ( + ('v_hl', 'B', (4 << 4) | (20 >> 2)), + ('tos', 'B', 0), + ('len', 'H', 20), + ('id', 'H', 0), + ('off', 'H', 0), + ('ttl', 'B', 64), + ('p', 'B', 0), + ('sum', 'H', 0), + ('src', '4s', '\x00' * 4), + ('dst', '4s', '\x00' * 4) + ) + _protosw = {} + opts = '' + + @property + def v(self): + return self.v_hl >> 4 + + @v.setter + def v(self, v): + self.v_hl = (v << 4) | (self.v_hl & 0xf) + + @property + def hl(self): + return self.v_hl & 0xf + + @hl.setter + def hl(self, hl): + self.v_hl = (self.v_hl & 0xf0) | hl + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): + return self.v + + @deprecated + def _set_v(self, v): + self.v = v + + @deprecated + def _get_hl(self): + return self.hl + + @deprecated + def _set_hl(self, hl): + self.hl = hl + + # ================================================= + + def __len__(self): + return self.__hdr_len__ + len(self.opts) + len(self.data) + + def __str__(self): + if self.sum == 0: + self.sum = dpkt.in_cksum(self.pack_hdr() + self.opts) + if (self.p == 6 or self.p == 17) and (self.off & (IP_MF | IP_OFFMASK)) == 0 and \ + isinstance(self.data, dpkt.Packet) and self.data.sum == 0: + # Set zeroed TCP and UDP checksums for non-fragments. + p = str(self.data) + s = dpkt.struct.pack('>4s4sxBH', self.src, self.dst, + self.p, len(p)) + s = dpkt.in_cksum_add(0, s) + s = dpkt.in_cksum_add(s, p) + self.data.sum = dpkt.in_cksum_done(s) + if self.p == 17 and self.data.sum == 0: + self.data.sum = 0xffff # RFC 768 + # XXX - skip transports which don't need the pseudoheader + return self.pack_hdr() + self.opts + str(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + ol = ((self.v_hl & 0xf) << 2) - self.__hdr_len__ + if ol < 0: + raise dpkt.UnpackError, 'invalid header length' + self.opts = buf[self.__hdr_len__:self.__hdr_len__ + ol] + if self.len: + buf = buf[self.__hdr_len__ + ol:self.len] + else: # very likely due to TCP segmentation offload + buf = buf[self.__hdr_len__ + ol:] + try: + self.data = self._protosw[self.p](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + @classmethod + def set_proto(cls, p, pktclass): + cls._protosw[p] = pktclass + + @classmethod + def get_proto(cls, p): + return cls._protosw[p] + +# IP Headers +IP_ADDR_LEN = 0x04 +IP_ADDR_BITS = 0x20 + +IP_HDR_LEN = 0x14 +IP_OPT_LEN = 0x02 +IP_OPT_LEN_MAX = 0x28 +IP_HDR_LEN_MAX = IP_HDR_LEN + IP_OPT_LEN_MAX + +IP_LEN_MAX = 0xffff +IP_LEN_MIN = IP_HDR_LEN + +# Reserved Addresses +IP_ADDR_ANY = "\x00\x00\x00\x00" # 0.0.0.0 +IP_ADDR_BROADCAST = "\xff\xff\xff\xff" # 255.255.255.255 +IP_ADDR_LOOPBACK = "\x7f\x00\x00\x01" # 127.0.0.1 +IP_ADDR_MCAST_ALL = "\xe0\x00\x00\x01" # 224.0.0.1 +IP_ADDR_MCAST_LOCAL = "\xe0\x00\x00\xff" # 224.0.0.255 + +# Type of service (ip_tos), RFC 1349 ("obsoleted by RFC 2474") +IP_TOS_DEFAULT = 0x00 # default +IP_TOS_LOWDELAY = 0x10 # low delay +IP_TOS_THROUGHPUT = 0x08 # high throughput +IP_TOS_RELIABILITY = 0x04 # high reliability +IP_TOS_LOWCOST = 0x02 # low monetary cost - XXX +IP_TOS_ECT = 0x02 # ECN-capable transport +IP_TOS_CE = 0x01 # congestion experienced + +# IP precedence (high 3 bits of ip_tos), hopefully unused +IP_TOS_PREC_ROUTINE = 0x00 +IP_TOS_PREC_PRIORITY = 0x20 +IP_TOS_PREC_IMMEDIATE = 0x40 +IP_TOS_PREC_FLASH = 0x60 +IP_TOS_PREC_FLASHOVERRIDE = 0x80 +IP_TOS_PREC_CRITIC_ECP = 0xa0 +IP_TOS_PREC_INTERNETCONTROL = 0xc0 +IP_TOS_PREC_NETCONTROL = 0xe0 + +# Fragmentation flags (ip_off) +IP_RF = 0x8000 # reserved +IP_DF = 0x4000 # don't fragment +IP_MF = 0x2000 # more fragments (not last frag) +IP_OFFMASK = 0x1fff # mask for fragment offset + +# Time-to-live (ip_ttl), seconds +IP_TTL_DEFAULT = 64 # default ttl, RFC 1122, RFC 1340 +IP_TTL_MAX = 255 # maximum ttl + +# Protocol (ip_p) - http://www.iana.org/assignments/protocol-numbers +IP_PROTO_IP = 0 # dummy for IP +IP_PROTO_HOPOPTS = IP_PROTO_IP # IPv6 hop-by-hop options +IP_PROTO_ICMP = 1 # ICMP +IP_PROTO_IGMP = 2 # IGMP +IP_PROTO_GGP = 3 # gateway-gateway protocol +IP_PROTO_IPIP = 4 # IP in IP +IP_PROTO_ST = 5 # ST datagram mode +IP_PROTO_TCP = 6 # TCP +IP_PROTO_CBT = 7 # CBT +IP_PROTO_EGP = 8 # exterior gateway protocol +IP_PROTO_IGP = 9 # interior gateway protocol +IP_PROTO_BBNRCC = 10 # BBN RCC monitoring +IP_PROTO_NVP = 11 # Network Voice Protocol +IP_PROTO_PUP = 12 # PARC universal packet +IP_PROTO_ARGUS = 13 # ARGUS +IP_PROTO_EMCON = 14 # EMCON +IP_PROTO_XNET = 15 # Cross Net Debugger +IP_PROTO_CHAOS = 16 # Chaos +IP_PROTO_UDP = 17 # UDP +IP_PROTO_MUX = 18 # multiplexing +IP_PROTO_DCNMEAS = 19 # DCN measurement +IP_PROTO_HMP = 20 # Host Monitoring Protocol +IP_PROTO_PRM = 21 # Packet Radio Measurement +IP_PROTO_IDP = 22 # Xerox NS IDP +IP_PROTO_TRUNK1 = 23 # Trunk-1 +IP_PROTO_TRUNK2 = 24 # Trunk-2 +IP_PROTO_LEAF1 = 25 # Leaf-1 +IP_PROTO_LEAF2 = 26 # Leaf-2 +IP_PROTO_RDP = 27 # "Reliable Datagram" proto +IP_PROTO_IRTP = 28 # Inet Reliable Transaction +IP_PROTO_TP = 29 # ISO TP class 4 +IP_PROTO_NETBLT = 30 # Bulk Data Transfer +IP_PROTO_MFPNSP = 31 # MFE Network Services +IP_PROTO_MERITINP = 32 # Merit Internodal Protocol +IP_PROTO_SEP = 33 # Sequential Exchange proto +IP_PROTO_3PC = 34 # Third Party Connect proto +IP_PROTO_IDPR = 35 # Interdomain Policy Route +IP_PROTO_XTP = 36 # Xpress Transfer Protocol +IP_PROTO_DDP = 37 # Datagram Delivery Proto +IP_PROTO_CMTP = 38 # IDPR Ctrl Message Trans +IP_PROTO_TPPP = 39 # TP++ Transport Protocol +IP_PROTO_IL = 40 # IL Transport Protocol +IP_PROTO_IP6 = 41 # IPv6 +IP_PROTO_SDRP = 42 # Source Demand Routing +IP_PROTO_ROUTING = 43 # IPv6 routing header +IP_PROTO_FRAGMENT = 44 # IPv6 fragmentation header +IP_PROTO_RSVP = 46 # Reservation protocol +IP_PROTO_GRE = 47 # General Routing Encap +IP_PROTO_MHRP = 48 # Mobile Host Routing +IP_PROTO_ENA = 49 # ENA +IP_PROTO_ESP = 50 # Encap Security Payload +IP_PROTO_AH = 51 # Authentication Header +IP_PROTO_INLSP = 52 # Integated Net Layer Sec +IP_PROTO_SWIPE = 53 # SWIPE +IP_PROTO_NARP = 54 # NBMA Address Resolution +IP_PROTO_MOBILE = 55 # Mobile IP, RFC 2004 +IP_PROTO_TLSP = 56 # Transport Layer Security +IP_PROTO_SKIP = 57 # SKIP +IP_PROTO_ICMP6 = 58 # ICMP for IPv6 +IP_PROTO_NONE = 59 # IPv6 no next header +IP_PROTO_DSTOPTS = 60 # IPv6 destination options +IP_PROTO_ANYHOST = 61 # any host internal proto +IP_PROTO_CFTP = 62 # CFTP +IP_PROTO_ANYNET = 63 # any local network +IP_PROTO_EXPAK = 64 # SATNET and Backroom EXPAK +IP_PROTO_KRYPTOLAN = 65 # Kryptolan +IP_PROTO_RVD = 66 # MIT Remote Virtual Disk +IP_PROTO_IPPC = 67 # Inet Pluribus Packet Core +IP_PROTO_DISTFS = 68 # any distributed fs +IP_PROTO_SATMON = 69 # SATNET Monitoring +IP_PROTO_VISA = 70 # VISA Protocol +IP_PROTO_IPCV = 71 # Inet Packet Core Utility +IP_PROTO_CPNX = 72 # Comp Proto Net Executive +IP_PROTO_CPHB = 73 # Comp Protocol Heart Beat +IP_PROTO_WSN = 74 # Wang Span Network +IP_PROTO_PVP = 75 # Packet Video Protocol +IP_PROTO_BRSATMON = 76 # Backroom SATNET Monitor +IP_PROTO_SUNND = 77 # SUN ND Protocol +IP_PROTO_WBMON = 78 # WIDEBAND Monitoring +IP_PROTO_WBEXPAK = 79 # WIDEBAND EXPAK +IP_PROTO_EON = 80 # ISO CNLP +IP_PROTO_VMTP = 81 # Versatile Msg Transport +IP_PROTO_SVMTP = 82 # Secure VMTP +IP_PROTO_VINES = 83 # VINES +IP_PROTO_TTP = 84 # TTP +IP_PROTO_NSFIGP = 85 # NSFNET-IGP +IP_PROTO_DGP = 86 # Dissimilar Gateway Proto +IP_PROTO_TCF = 87 # TCF +IP_PROTO_EIGRP = 88 # EIGRP +IP_PROTO_OSPF = 89 # Open Shortest Path First +IP_PROTO_SPRITERPC = 90 # Sprite RPC Protocol +IP_PROTO_LARP = 91 # Locus Address Resolution +IP_PROTO_MTP = 92 # Multicast Transport Proto +IP_PROTO_AX25 = 93 # AX.25 Frames +IP_PROTO_IPIPENCAP = 94 # yet-another IP encap +IP_PROTO_MICP = 95 # Mobile Internet Ctrl +IP_PROTO_SCCSP = 96 # Semaphore Comm Sec Proto +IP_PROTO_ETHERIP = 97 # Ethernet in IPv4 +IP_PROTO_ENCAP = 98 # encapsulation header +IP_PROTO_ANYENC = 99 # private encryption scheme +IP_PROTO_GMTP = 100 # GMTP +IP_PROTO_IFMP = 101 # Ipsilon Flow Mgmt Proto +IP_PROTO_PNNI = 102 # PNNI over IP +IP_PROTO_PIM = 103 # Protocol Indep Multicast +IP_PROTO_ARIS = 104 # ARIS +IP_PROTO_SCPS = 105 # SCPS +IP_PROTO_QNX = 106 # QNX +IP_PROTO_AN = 107 # Active Networks +IP_PROTO_IPCOMP = 108 # IP Payload Compression +IP_PROTO_SNP = 109 # Sitara Networks Protocol +IP_PROTO_COMPAQPEER = 110 # Compaq Peer Protocol +IP_PROTO_IPXIP = 111 # IPX in IP +IP_PROTO_VRRP = 112 # Virtual Router Redundancy +IP_PROTO_PGM = 113 # PGM Reliable Transport +IP_PROTO_ANY0HOP = 114 # 0-hop protocol +IP_PROTO_L2TP = 115 # Layer 2 Tunneling Proto +IP_PROTO_DDX = 116 # D-II Data Exchange (DDX) +IP_PROTO_IATP = 117 # Interactive Agent Xfer +IP_PROTO_STP = 118 # Schedule Transfer Proto +IP_PROTO_SRP = 119 # SpectraLink Radio Proto +IP_PROTO_UTI = 120 # UTI +IP_PROTO_SMP = 121 # Simple Message Protocol +IP_PROTO_SM = 122 # SM +IP_PROTO_PTP = 123 # Performance Transparency +IP_PROTO_ISIS = 124 # ISIS over IPv4 +IP_PROTO_FIRE = 125 # FIRE +IP_PROTO_CRTP = 126 # Combat Radio Transport +IP_PROTO_CRUDP = 127 # Combat Radio UDP +IP_PROTO_SSCOPMCE = 128 # SSCOPMCE +IP_PROTO_IPLT = 129 # IPLT +IP_PROTO_SPS = 130 # Secure Packet Shield +IP_PROTO_PIPE = 131 # Private IP Encap in IP +IP_PROTO_SCTP = 132 # Stream Ctrl Transmission +IP_PROTO_FC = 133 # Fibre Channel +IP_PROTO_RSVPIGN = 134 # RSVP-E2E-IGNORE +IP_PROTO_RAW = 255 # Raw IP packets +IP_PROTO_RESERVED = IP_PROTO_RAW # Reserved +IP_PROTO_MAX = 255 + +# XXX - auto-load IP dispatch table from IP_PROTO_* definitions + + +def __load_protos(): + g = globals() + for k, v in g.iteritems(): + if k.startswith('IP_PROTO_'): + name = k[9:].lower() + try: + mod = __import__(name, g) + except ImportError: + continue + IP.set_proto(v, getattr(mod, name.upper())) + + +if not IP._protosw: + __load_protos() + + +def test_ip(): + import udp + + s = 'E\x00\x00"\x00\x00\x00\x00@\x11r\xc0\x01\x02\x03\x04\x01\x02\x03\x04\x00o\x00\xde\x00\x0e\xbf5foobar' + ip = IP(id=0, src='\x01\x02\x03\x04', dst='\x01\x02\x03\x04', p=17) + u = udp.UDP(sport=111, dport=222) + u.data = 'foobar' + u.ulen += len(u.data) + ip.data = u + ip.len += len(u) + assert (str(ip) == s) + + ip = IP(s) + assert (str(ip) == s) + assert (ip.udp.sport == 111) + assert (ip.udp.data == 'foobar') + + +def test_hl(): # Todo chack this test method + s = 'BB\x03\x00\x00\x00\x00\x00\x00\x00\xd0\x00\xec\xbc\xa5\x00\x00\x00\x03\x80\x00\x00\xd0\x01\xf2\xac\xa5"0\x01\x00\x14\x00\x02\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00' + try: + IP(s) + except dpkt.UnpackError: + pass + + +def test_opt(): + s = '\x4f\x00\x00\x50\xae\x08\x00\x00\x40\x06\x17\xfc\xc0\xa8\x0a\x26\xc0\xa8\x0a\x01\x07\x27\x08\x01\x02\x03\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + ip = IP(s) + ip.sum = 0 + assert (str(ip) == s) + + +def test_zerolen(): + import tcp + d = 'X' * 2048 + s = 'E\x00\x00\x004\xce@\x00\x80\x06\x00\x00\x7f\x00\x00\x01\x7f\x00\x00\x01\xccN\x0c8`\xff\xc6N_\x8a\x12\x98P\x18@):\xa3\x00\x00' + d + ip = IP(s) + assert (isinstance(ip.data, tcp.TCP)) + assert (ip.tcp.data == d) + + +if __name__ == '__main__': + test_ip() + test_hl() + test_opt() + test_zerolen() + print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip6.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip6.py new file mode 100644 index 00000000..099abfcb --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip6.py @@ -0,0 +1,383 @@ +# $Id: ip6.py 87 2013-03-05 19:41:04Z andrewflnr@gmail.com $ +# -*- coding: utf-8 -*- +"""Internet Protocol, version 6.""" + +import dpkt +from decorators import deprecated + + +class IP6(dpkt.Packet): + __hdr__ = ( + ('v_fc_flow', 'I', 0x60000000L), + ('plen', 'H', 0), # payload length (not including header) + ('nxt', 'B', 0), # next header protocol + ('hlim', 'B', 0), # hop limit + ('src', '16s', ''), + ('dst', '16s', '') + ) + + # XXX - to be shared with IP. We cannot refer to the ip module + # right now because ip.__load_protos() expects the IP6 class to be + # defined. + _protosw = None + + @property + def v(self): + return self.v_fc_flow >> 28 + + @v.setter + def v(self, v): + self.v_fc_flow = (self.v_fc_flow & ~0xf0000000L) | (v << 28) + + @property + def fc(self): + return (self.v_fc_flow >> 20) & 0xff + + @fc.setter + def fc(self, v): + self.v_fc_flow = (self.v_fc_flow & ~0xff00000L) | (v << 20) + + @property + def flow(self): + return self.v_fc_flow & 0xfffff + + @flow.setter + def flow(self, v): + self.v_fc_flow = (self.v_fc_flow & ~0xfffff) | (v & 0xfffff) + + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): + return self.v + + @deprecated + def _set_v(self, v): + self.v = v + + @deprecated + def _get_fc(self): + return self.fc + + @deprecated + def _set_fc(self, v): + self.rc = v + + @deprecated + def _get_flow(self): + return self.flow + + @deprecated + def _set_flow(self, v): + self.flow = v + + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.extension_hdrs = dict(((i, None) for i in ext_hdrs)) + + if self.plen: + buf = self.data[:self.plen] + else: # due to jumbo payload or TSO + buf = self.data + + next = self.nxt + + while next in ext_hdrs: + ext = ext_hdrs_cls[next](buf) + self.extension_hdrs[next] = ext + buf = buf[ext.length:] + next = ext.nxt + + # set the payload protocol id + setattr(self, 'p', next) + + try: + self.data = self._protosw[next](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def headers_str(self): + """Output extension headers in order defined in RFC1883 (except dest opts)""" + + header_str = "" + + for hdr in ext_hdrs: + if not self.extension_hdrs[hdr] is None: + header_str += str(self.extension_hdrs[hdr]) + return header_str + + def __str__(self): + if (self.nxt == 6 or self.nxt == 17 or self.nxt == 58) and not self.data.sum: + # XXX - set TCP, UDP, and ICMPv6 checksums + p = str(self.data) + s = dpkt.struct.pack('>16s16sxBH', self.src, self.dst, self.nxt, len(p)) + s = dpkt.in_cksum_add(0, s) + s = dpkt.in_cksum_add(s, p) + try: + self.data.sum = dpkt.in_cksum_done(s) + except AttributeError: + pass + return self.pack_hdr() + self.headers_str() + str(self.data) + + @classmethod + def set_proto(cls, p, pktclass): + cls._protosw[p] = pktclass + + @classmethod + def get_proto(cls, p): + return cls._protosw[p] + + +import ip +# We are most likely still in the middle of ip.__load_protos() which +# implicitly loads this module through __import__(), so the content of +# ip.IP._protosw is still incomplete at the moment. By sharing the +# same dictionary by reference as opposed to making a copy, when +# ip.__load_protos() finishes, we will also automatically get the most +# up-to-date dictionary. +IP6._protosw = ip.IP._protosw + + +class IP6ExtensionHeader(dpkt.Packet): + """ + An extension header is very similar to a 'sub-packet'. + We just want to re-use all the hdr unpacking etc. + """ + pass + + +class IP6OptsHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('len', 'B', 0) # option data length in 8 octect units (ignoring first 8 octets) so, len 0 == 64bit header + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + setattr(self, 'length', (self.len + 1) * 8) + options = [] + + index = 0 + + while index < self.length - 2: + opt_type = ord(self.data[index]) + + # PAD1 option + if opt_type == 0: + index += 1 + continue + + opt_length = ord(self.data[index + 1]) + + if opt_type == 1: # PADN option + # PADN uses opt_length bytes in total + index += opt_length + 2 + continue + + options.append( + {'type': opt_type, 'opt_length': opt_length, 'data': self.data[index + 2:index + 2 + opt_length]}) + + # add the two chars and the option_length, to move to the next option + index += opt_length + 2 + + setattr(self, 'options', options) + + +class IP6HopOptsHeader(IP6OptsHeader): pass + + +class IP6DstOptsHeader(IP6OptsHeader): pass + + +class IP6RoutingHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('len', 'B', 0), # extension data length in 8 octect units (ignoring first 8 octets) (<= 46 for type 0) + ('type', 'B', 0), # routing type (currently, only 0 is used) + ('segs_left', 'B', 0), # remaining segments in route, until destination (<= 23) + ('rsvd_sl_bits', 'I', 0), # reserved (1 byte), strict/loose bitmap for addresses + ) + + @property + def sl_bits(self): + return self.rsvd_sl_bits & 0xffffff + + @sl_bits.setter + def sl_bits(self, v): + self.rsvd_sl_bits = (self.rsvd_sl_bits & ~0xfffff) | (v & 0xfffff) + + # Deprecated methods, will be removed in the future + # ================================================= + def _get_sl_bits(self): return self.sl_bits + + def _set_sl_bits(self, v): self.sl_bits = v + + # ================================================= + + def unpack(self, buf): + hdr_size = 8 + addr_size = 16 + + dpkt.Packet.unpack(self, buf) + + addresses = [] + num_addresses = self.len / 2 + buf = buf[hdr_size:hdr_size + num_addresses * addr_size] + + for i in range(num_addresses): + addresses.append(buf[i * addr_size: i * addr_size + addr_size]) + + self.data = buf + setattr(self, 'addresses', addresses) + setattr(self, 'length', self.len * 8 + 8) + + +class IP6FragmentHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('resv', 'B', 0), # reserved, set to 0 + ('frag_off_resv_m', 'H', 0), # frag offset (13 bits), reserved zero (2 bits), More frags flag + ('id', 'I', 0) # fragments id + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + setattr(self, 'length', self.__hdr_len__) + + @property + def frag_off(self): + return self.frag_off_resv_m >> 3 + + @frag_off.setter + def frag_off(self, v): + self.frag_off_resv_m = (self.frag_off_resv_m & ~0xfff8) | (v << 3) + + @property + def m_flag(self): + return self.frag_off_resv_m & 1 + + @m_flag.setter + def m_flag(self, v): + self.frag_off_resv_m = (self.frag_off_resv_m & ~0xfffe) | v + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_frag_off(self): return self.flag_off + + @deprecated + def _set_frag_off(self, v): self.flag_off = v + + @deprecated + def _get_m_flag(self): return self.m_flag + + @deprecated + def _set_m_flag(self, v): self.m_flag = v + + # ================================================= + + +class IP6AHHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('len', 'B', 0), # length of header in 4 octet units (ignoring first 2 units) + ('resv', 'H', 0), # reserved, 2 bytes of 0 + ('spi', 'I', 0), # SPI security parameter index + ('seq', 'I', 0) # sequence no. + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + setattr(self, 'length', (self.len + 2) * 4) + setattr(self, 'auth_data', self.data[:(self.len - 1) * 4]) + + +class IP6ESPHeader(IP6ExtensionHeader): + def unpack(self, buf): + raise NotImplementedError("ESP extension headers are not supported.") + + +ext_hdrs = [ip.IP_PROTO_HOPOPTS, ip.IP_PROTO_ROUTING, ip.IP_PROTO_FRAGMENT, ip.IP_PROTO_AH, ip.IP_PROTO_ESP, + ip.IP_PROTO_DSTOPTS] +ext_hdrs_cls = {ip.IP_PROTO_HOPOPTS: IP6HopOptsHeader, + ip.IP_PROTO_ROUTING: IP6RoutingHeader, + ip.IP_PROTO_FRAGMENT: IP6FragmentHeader, + ip.IP_PROTO_ESP: IP6ESPHeader, + ip.IP_PROTO_AH: IP6AHHeader, + ip.IP_PROTO_DSTOPTS: IP6DstOptsHeader} + + +def test_ipg(): + s = '`\x00\x00\x00\x00(\x06@\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x11$\xff\xfe\x8c\x11\xde\xfe\x80\x00\x00\x00\x00\x00\x00\x02\xb0\xd0\xff\xfe\xe1\x80r\xcd\xca\x00\x16\x04\x84F\xd5\x00\x00\x00\x00\xa0\x02\xff\xff\xf8\t\x00\x00\x02\x04\x05\xa0\x01\x03\x03\x00\x01\x01\x08\n}\x185?\x00\x00\x00\x00' + _ip = IP6(s) + # print `ip` + _ip.data.sum = 0 + s2 = str(_ip) + IP6(s) + # print `ip2` + assert (s == s2) + + +def test_ip6_routing_header(): + s = '`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x02\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' + ip = IP6(s) + s2 = str(ip) + # 43 is Routing header id + assert (len(ip.extension_hdrs[43].addresses) == 2) + assert (ip.tcp) + assert (s == s2) + + +def test_ip6_fragment_header(): + s = '\x06\xee\xff\xfb\x00\x00\xff\xff' + fh = IP6FragmentHeader(s) + # s2 = str(fh) variable 's2' is not used + str(fh) + assert (fh.nxt == 6) + assert (fh.id == 65535) + assert (fh.frag_off == 8191) + assert (fh.m_flag == 1) + + +def test_ip6_options_header(): + s = ';\x04\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x02\x00\x00' + options = IP6OptsHeader(s).options + assert (len(options) == 3) + + +def test_ip6_ah_header(): + s = ';\x04\x00\x00\x02\x02\x02\x02\x01\x01\x01\x01\x78\x78\x78\x78\x78\x78\x78\x78' + ah = IP6AHHeader(s) + assert (ah.length == 24) + assert (ah.auth_data == 'xxxxxxxx') + assert (ah.spi == 0x2020202) + assert (ah.seq == 0x1010101) + + +def test_ip6_extension_headers(): + p = '`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x02\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' + ip = IP6(p) + o = ';\x04\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x02\x00\x00' + options = IP6HopOptsHeader(o) + ip.extension_hdrs[0] = options + fh = '\x06\xee\xff\xfb\x00\x00\xff\xff' + ip.extension_hdrs[44] = IP6FragmentHeader(fh) + ah = ';\x04\x00\x00\x02\x02\x02\x02\x01\x01\x01\x01\x78\x78\x78\x78\x78\x78\x78\x78' + ip.extension_hdrs[51] = IP6AHHeader(ah) + do = ';\x02\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + ip.extension_hdrs[60] = IP6DstOptsHeader(do) + assert (len([k for k in ip.extension_hdrs if (not ip.extension_hdrs[k] is None)]) == 5) + + +if __name__ == '__main__': + test_ipg() + test_ip6_routing_header() + test_ip6_fragment_header() + test_ip6_options_header() + test_ip6_ah_header() + test_ip6_extension_headers() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ipx.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ipx.py new file mode 100644 index 00000000..b95ff0d9 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ipx.py @@ -0,0 +1,18 @@ +# $Id: ipx.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Internetwork Packet Exchange.""" + +import dpkt + +IPX_HDR_LEN = 30 + + +class IPX(dpkt.Packet): + __hdr__ = ( + ('sum', 'H', 0xffff), + ('len', 'H', IPX_HDR_LEN), + ('tc', 'B', 0), + ('pt', 'B', 0), + ('dst', '12s', ''), + ('src', '12s', '') + ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/llc.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/llc.py new file mode 100644 index 00000000..ce7429f6 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/llc.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +import struct +import dpkt +import stp +import ethernet + + +class LLC(dpkt.Packet): + _typesw = {} + + def _unpack_data(self, buf): + if self.type == ethernet.ETH_TYPE_8021Q: + self.tag, self.type = struct.unpack('>HH', buf[:4]) + buf = buf[4:] + elif self.type == ethernet.ETH_TYPE_MPLS or self.type == ethernet.ETH_TYPE_MPLS_MCAST: + # XXX - skip labels + for i in range(24): + if struct.unpack('>I', buf[i:i + 4])[0] & 0x0100: # MPLS_STACK_BOTTOM + break + self.type = ethernet.ETH_TYPE_IP + buf = buf[(i + 1) * 4:] + try: + self.data = self._typesw[self.type](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def unpack(self, buf): + self.data = buf + if self.data.startswith('\xaa\xaa'): + # SNAP + self.type = struct.unpack('>H', self.data[6:8])[0] + self._unpack_data(self.data[8:]) + else: + # non-SNAP + dsap = ord(self.data[0]) + if dsap == 0x06: # SAP_IP + self.data = self.ip = self._typesw[ethernet.ETH_TYPE_IP](self.data[3:]) + elif dsap == 0x10 or dsap == 0xe0: # SAP_NETWARE{1,2} + self.data = self.ipx = self._typesw[ethernet.ETH_TYPE_IPX](self.data[3:]) + elif dsap == 0x42: # SAP_STP + self.data = self.stp = stp.STP(self.data[3:]) + + +def test_llc(): + s = '\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04\xac\x17\x00\x00' + import ip + llc_pkt = LLC(s) + ip_pkt = ip.IP(llc_pkt.data) + assert (llc_pkt.type == ethernet.ETH_TYPE_IP) + assert (ip_pkt.dst == '\x3f\xf5\xd1\x69') + +if __name__ == '__main__': + test_llc() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/loopback.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/loopback.py new file mode 100644 index 00000000..5bf24bf5 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/loopback.py @@ -0,0 +1,25 @@ +# $Id: loopback.py 38 2007-03-17 03:33:16Z dugsong $ +# -*- coding: utf-8 -*- +"""Platform-dependent loopback header.""" + +import dpkt +import ethernet +import ip +import ip6 + + +class Loopback(dpkt.Packet): + __hdr__ = (('family', 'I', 0), ) + __byte_order__ = '@' + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.family == 2: + self.data = ip.IP(self.data) + elif self.family == 0x02000000: + self.family = 2 + self.data = ip.IP(self.data) + elif self.family in (24, 28, 30): + self.data = ip6.IP6(self.data) + elif self.family > 1500: + self.data = ethernet.Ethernet(self.data) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/mrt.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/mrt.py new file mode 100644 index 00000000..aa1dc78a --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/mrt.py @@ -0,0 +1,96 @@ +# $Id: mrt.py 29 2007-01-26 02:29:07Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Multi-threaded Routing Toolkit.""" + +import dpkt +import bgp + +# Multi-threaded Routing Toolkit +# http://www.ietf.org/internet-drafts/draft-ietf-grow-mrt-03.txt + +# MRT Types +NULL = 0 +START = 1 +DIE = 2 +I_AM_DEAD = 3 +PEER_DOWN = 4 +BGP = 5 # Deprecated by BGP4MP +RIP = 6 +IDRP = 7 +RIPNG = 8 +BGP4PLUS = 9 # Deprecated by BGP4MP +BGP4PLUS_01 = 10 # Deprecated by BGP4MP +OSPF = 11 +TABLE_DUMP = 12 +BGP4MP = 16 +BGP4MP_ET = 17 +ISIS = 32 +ISIS_ET = 33 +OSPF_ET = 64 + +# BGP4MP Subtypes +BGP4MP_STATE_CHANGE = 0 +BGP4MP_MESSAGE = 1 +BGP4MP_ENTRY = 2 +BGP4MP_SNAPSHOT = 3 +BGP4MP_MESSAGE_32BIT_AS = 4 + +# Address Family Types +AFI_IPv4 = 1 +AFI_IPv6 = 2 + + +class MRTHeader(dpkt.Packet): + __hdr__ = ( + ('ts', 'I', 0), + ('type', 'H', 0), + ('subtype', 'H', 0), + ('len', 'I', 0) + ) + + +class TableDump(dpkt.Packet): + __hdr__ = ( + ('view', 'H', 0), + ('seq', 'H', 0), + ('prefix', 'I', 0), + ('prefix_len', 'B', 0), + ('status', 'B', 1), + ('originated_ts', 'I', 0), + ('peer_ip', 'I', 0), + ('peer_as', 'H', 0), + ('attr_len', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + plen = self.attr_len + l = [] + while plen > 0: + attr = bgp.BGP.Update.Attribute(self.data) + self.data = self.data[len(attr):] + plen -= len(attr) + l.append(attr) + self.attributes = l + + +class BGP4MPMessage(dpkt.Packet): + __hdr__ = ( + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('intf', 'H', 0), + ('family', 'H', AFI_IPv4), + ('src_ip', 'I', 0), + ('dst_ip', 'I', 0) + ) + + +class BGP4MPMessage_32(dpkt.Packet): + __hdr__ = ( + ('src_as', 'I', 0), + ('dst_as', 'I', 0), + ('intf', 'H', 0), + ('family', 'H', AFI_IPv4), + ('src_ip', 'I', 0), + ('dst_ip', 'I', 0) + ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netbios.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netbios.py new file mode 100644 index 00000000..54586327 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netbios.py @@ -0,0 +1,166 @@ +# $Id: netbios.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Network Basic Input/Output System.""" + +import struct +import dpkt +import dns + + +def encode_name(name): + """Return the NetBIOS first-level encoded name.""" + l = [] + for c in struct.pack('16s', name): + c = ord(c) + l.append(chr((c >> 4) + 0x41)) + l.append(chr((c & 0xf) + 0x41)) + return ''.join(l) + + +def decode_name(nbname): + """Return the NetBIOS first-level decoded nbname.""" + if len(nbname) != 32: + return nbname + l = [] + for i in range(0, 32, 2): + l.append(chr(((ord(nbname[i]) - 0x41) << 4) | + ((ord(nbname[i + 1]) - 0x41) & 0xf))) + return ''.join(l).split('\x00', 1)[0] + +# RR types +NS_A = 0x01 # IP address +NS_NS = 0x02 # Name Server +NS_NULL = 0x0A # NULL +NS_NB = 0x20 # NetBIOS general Name Service +NS_NBSTAT = 0x21 # NetBIOS NODE STATUS + +# RR classes +NS_IN = 1 + +# NBSTAT name flags +NS_NAME_G = 0x8000 # group name (as opposed to unique) +NS_NAME_DRG = 0x1000 # deregister +NS_NAME_CNF = 0x0800 # conflict +NS_NAME_ACT = 0x0400 # active +NS_NAME_PRM = 0x0200 # permanent + +# NBSTAT service names +nbstat_svcs = { + # (service, unique): list of ordered (name prefix, service name) tuples + (0x00, 0): [('', 'Domain Name')], + (0x00, 1): [('IS~', 'IIS'), ('', 'Workstation Service')], + (0x01, 0): [('__MSBROWSE__', 'Master Browser')], + (0x01, 1): [('', 'Messenger Service')], + (0x03, 1): [('', 'Messenger Service')], + (0x06, 1): [('', 'RAS Server Service')], + (0x1B, 1): [('', 'Domain Master Browser')], + (0x1C, 0): [('INet~Services', 'IIS'), ('', 'Domain Controllers')], + (0x1D, 1): [('', 'Master Browser')], + (0x1E, 0): [('', 'Browser Service Elections')], + (0x1F, 1): [('', 'NetDDE Service')], + (0x20, 1): [('Forte_$ND800ZA', 'DCA IrmaLan Gateway Server Service'), + ('', 'File Server Service')], + (0x21, 1): [('', 'RAS Client Service')], + (0x22, 1): [('', 'Microsoft Exchange Interchange(MSMail Connector)')], + (0x23, 1): [('', 'Microsoft Exchange Store')], + (0x24, 1): [('', 'Microsoft Exchange Directory')], + (0x2B, 1): [('', 'Lotus Notes Server Service')], + (0x2F, 0): [('IRISMULTICAST', 'Lotus Notes')], + (0x30, 1): [('', 'Modem Sharing Server Service')], + (0x31, 1): [('', 'Modem Sharing Client Service')], + (0x33, 0): [('IRISNAMESERVER', 'Lotus Notes')], + (0x43, 1): [('', 'SMS Clients Remote Control')], + (0x44, 1): [('', 'SMS Administrators Remote Control Tool')], + (0x45, 1): [('', 'SMS Clients Remote Chat')], + (0x46, 1): [('', 'SMS Clients Remote Transfer')], + (0x4C, 1): [('', 'DEC Pathworks TCPIP service on Windows NT')], + (0x52, 1): [('', 'DEC Pathworks TCPIP service on Windows NT')], + (0x87, 1): [('', 'Microsoft Exchange MTA')], + (0x6A, 1): [('', 'Microsoft Exchange IMC')], + (0xBE, 1): [('', 'Network Monitor Agent')], + (0xBF, 1): [('', 'Network Monitor Application')] +} + + +def node_to_service_name((name, service, flags)): + try: + unique = int(flags & NS_NAME_G == 0) + for namepfx, svcname in nbstat_svcs[(service, unique)]: + if name.startswith(namepfx): + return svcname + except KeyError: + pass + return '' + + +class NS(dns.DNS): + """NetBIOS Name Service.""" + + class Q(dns.DNS.Q): + pass + + class RR(dns.DNS.RR): + """NetBIOS resource record.""" + + def unpack_rdata(self, buf, off): + if self.type == NS_A: + self.ip = self.rdata + elif self.type == NS_NBSTAT: + num = ord(self.rdata[0]) + off = 1 + l = [] + for i in range(num): + name = self.rdata[off:off + 15].split(None, 1)[0].split('\x00', 1)[0] + service = ord(self.rdata[off + 15]) + off += 16 + flags = struct.unpack('>H', self.rdata[off:off + 2])[0] + off += 2 + l.append((name, service, flags)) + self.nodenames = l + # XXX - skip stats + + def pack_name(self, buf, name): + return dns.DNS.pack_name(self, buf, encode_name(name)) + + def unpack_name(self, buf, off): + name, off = dns.DNS.unpack_name(self, buf, off) + return decode_name(name), off + + +class Session(dpkt.Packet): + """NetBIOS Session Service.""" + __hdr__ = ( + ('type', 'B', 0), + ('flags', 'B', 0), + ('len', 'H', 0) + ) + + +SSN_MESSAGE = 0 +SSN_REQUEST = 1 +SSN_POSITIVE = 2 +SSN_NEGATIVE = 3 +SSN_RETARGET = 4 +SSN_KEEPALIVE = 5 + + +class Datagram(dpkt.Packet): + """NetBIOS Datagram Service.""" + __hdr__ = ( + ('type', 'B', 0), + ('flags', 'B', 0), + ('id', 'H', 0), + ('src', 'I', 0), + ('sport', 'H', 0), + ('len', 'H', 0), + ('off', 'H', 0) + ) + + +DGRAM_UNIQUE = 0x10 +DGRAM_GROUP = 0x11 +DGRAM_BROADCAST = 0x12 +DGRAM_ERROR = 0x13 +DGRAM_QUERY = 0x14 +DGRAM_POSITIVE = 0x15 +DGRAM_NEGATIVE = 0x16 diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netflow.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netflow.py new file mode 100644 index 00000000..4e53ba79 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netflow.py @@ -0,0 +1,219 @@ +# $Id: netflow.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Cisco Netflow.""" + +import itertools +import struct +import dpkt + + +class NetflowBase(dpkt.Packet): + """Base class for Cisco Netflow packets.""" + + __hdr__ = ( + ('version', 'H', 1), + ('count', 'H', 0), + ('sys_uptime', 'I', 0), + ('unix_sec', 'I', 0), + ('unix_nsec', 'I', 0) + ) + + def __len__(self): + return self.__hdr_len__ + (len(self.data[0]) * self.count) + + def __str__(self): + # for now, don't try to enforce any size limits + self.count = len(self.data) + return self.pack_hdr() + ''.join(map(str, self.data)) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = self.data + l = [] + while buf: + flow = self.NetflowRecord(buf) + l.append(flow) + buf = buf[len(flow):] + self.data = l + + class NetflowRecordBase(dpkt.Packet): + """Base class for netflow v1-v7 netflow records.""" + + # performance optimizations + def __len__(self): + # don't bother with data + return self.__hdr_len__ + + def __str__(self): + # don't bother with data + return self.pack_hdr() + + def unpack(self, buf): + # don't bother with data + for k, v in itertools.izip(self.__hdr_fields__, + struct.unpack(self.__hdr_fmt__, buf[:self.__hdr_len__])): + setattr(self, k, v) + self.data = "" + + +class Netflow1(NetflowBase): + """Netflow Version 1.""" + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v1 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('pad1', 'H', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('tcp_flags', 'B', 0), + ('pad2', 'B', 0), + ('pad3', 'H', 0), + ('reserved', 'I', 0) + ) + + +# FYI, versions 2-4 don't appear to have ever seen the light of day. + +class Netflow5(NetflowBase): + """Netflow Version 5.""" + __hdr__ = NetflowBase.__hdr__ + ( + ('flow_sequence', 'I', 0), + ('engine_type', 'B', 0), + ('engine_id', 'B', 0), + ('reserved', 'H', 0), + ) + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v5 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('pad1', 'B', 0), + ('tcp_flags', 'B', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('src_mask', 'B', 0), + ('dst_mask', 'B', 0), + ('pad2', 'H', 0), + ) + + +class Netflow6(NetflowBase): + """Netflow Version 6. + XXX - unsupported by Cisco, but may be found in the field. + """ + __hdr__ = Netflow5.__hdr__ + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v6 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('pad1', 'B', 0), + ('tcp_flags', 'B', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('src_mask', 'B', 0), + ('dst_mask', 'B', 0), + ('in_encaps', 'B', 0), + ('out_encaps', 'B', 0), + ('peer_nexthop', 'I', 0), + ) + + +class Netflow7(NetflowBase): + """Netflow Version 7.""" + __hdr__ = NetflowBase.__hdr__ + ( + ('flow_sequence', 'I', 0), + ('reserved', 'I', 0), + ) + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v7 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('flags', 'B', 0), + ('tcp_flags', 'B', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('src_mask', 'B', 0), + ('dst_mask', 'B', 0), + ('pad2', 'H', 0), + ('router_sc', 'I', 0), + ) + +# No support for v8 or v9 yet. + +__sample_v1 = "\x00\x01\x00\x18gza> 3) & 0x7 + + @v.setter + def v(self, v): + self.flags = (self.flags & ~0x38) | ((v & 0x7) << 3) + + @property + def li(self): + return (self.flags >> 6) & 0x3 + + @li.setter + def li(self, li): + self.flags = (self.flags & ~0xc0) | ((li & 0x3) << 6) + + @property + def mode(self): + return self.flags & 0x7 + + @mode.setter + def mode(self, mode): + self.flags = (self.flags & ~0x7) | (mode & 0x7) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): return self.v + + @deprecated + def _set_v(self, v): self.v = v + + @deprecated + def _get_li(self): return self.li + + @deprecated + def _set_li(self, li): self.li = li + + @deprecated + def _get_mode(self): return self.mode + + @deprecated + def _set_mode(self, mode): self.mode = mode + # ================================================= + +__s = '\x24\x02\x04\xef\x00\x00\x00\x84\x00\x00\x33\x27\xc1\x02\x04\x02\xc8\x90\xec\x11\x22\xae\x07\xe5\xc8\x90\xf9\xd9\xc0\x7e\x8c\xcd\xc8\x90\xf9\xd9\xda\xc5\xb0\x78\xc8\x90\xf9\xd9\xda\xc6\x8a\x93' + + +def test_ntp_pack(): + n = NTP(__s) + assert (__s == str(n)) + + +def test_ntp_unpack(): + n = NTP(__s) + assert (n.li == NO_WARNING) + assert (n.v == 4) + assert (n.mode == SERVER) + assert (n.stratum == 2) + assert (n.id == '\xc1\x02\x04\x02') + # test get/set functions + n.li = ALARM_CONDITION + n.v = 3 + n.mode = CLIENT + assert (n.li == ALARM_CONDITION) + assert (n.v == 3) + assert (n.mode == CLIENT) + +if __name__ == '__main__': + test_ntp_pack() + test_ntp_unpack() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ospf.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ospf.py new file mode 100644 index 00000000..cc47aae3 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ospf.py @@ -0,0 +1,27 @@ +# $Id: ospf.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Open Shortest Path First.""" + +import dpkt + +AUTH_NONE = 0 +AUTH_PASSWORD = 1 +AUTH_CRYPTO = 2 + + +class OSPF(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 0), + ('type', 'B', 0), + ('len', 'H', 0), + ('router', 'I', 0), + ('area', 'I', 0), + ('sum', 'H', 0), + ('atype', 'H', 0), + ('auth', '8s', '') + ) + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pcap.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pcap.py new file mode 100644 index 00000000..c14ba6de --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pcap.py @@ -0,0 +1,172 @@ +# $Id: pcap.py 77 2011-01-06 15:59:38Z dugsong $ +# -*- coding: utf-8 -*- +"""Libpcap file format.""" + +import sys +import time +import dpkt + + +TCPDUMP_MAGIC = 0xa1b2c3d4L +PMUDPCT_MAGIC = 0xd4c3b2a1L + +PCAP_VERSION_MAJOR = 2 +PCAP_VERSION_MINOR = 4 + +DLT_NULL = 0 +DLT_EN10MB = 1 +DLT_EN3MB = 2 +DLT_AX25 = 3 +DLT_PRONET = 4 +DLT_CHAOS = 5 +DLT_IEEE802 = 6 +DLT_ARCNET = 7 +DLT_SLIP = 8 +DLT_PPP = 9 +DLT_FDDI = 10 +DLT_PFSYNC = 18 +DLT_IEEE802_11 = 105 +DLT_LINUX_SLL = 113 +DLT_PFLOG = 117 +DLT_IEEE802_11_RADIO = 127 + +if sys.platform.find('openbsd') != -1: + DLT_LOOP = 12 + DLT_RAW = 14 +else: + DLT_LOOP = 108 + DLT_RAW = 12 + +dltoff = {DLT_NULL: 4, DLT_EN10MB: 14, DLT_IEEE802: 22, DLT_ARCNET: 6, + DLT_SLIP: 16, DLT_PPP: 4, DLT_FDDI: 21, DLT_PFLOG: 48, DLT_PFSYNC: 4, + DLT_LOOP: 4, DLT_LINUX_SLL: 16} + + +class PktHdr(dpkt.Packet): + """pcap packet header.""" + __hdr__ = ( + ('tv_sec', 'I', 0), + ('tv_usec', 'I', 0), + ('caplen', 'I', 0), + ('len', 'I', 0), + ) + + +class LEPktHdr(PktHdr): + __byte_order__ = '<' + + +class FileHdr(dpkt.Packet): + """pcap file header.""" + __hdr__ = ( + ('magic', 'I', TCPDUMP_MAGIC), + ('v_major', 'H', PCAP_VERSION_MAJOR), + ('v_minor', 'H', PCAP_VERSION_MINOR), + ('thiszone', 'I', 0), + ('sigfigs', 'I', 0), + ('snaplen', 'I', 1500), + ('linktype', 'I', 1), + ) + + +class LEFileHdr(FileHdr): + __byte_order__ = '<' + + +class Writer(object): + """Simple pcap dumpfile writer.""" + + def __init__(self, fileobj, snaplen=1500, linktype=DLT_EN10MB): + self.__f = fileobj + if sys.byteorder == 'little': + fh = LEFileHdr(snaplen=snaplen, linktype=linktype) + else: + fh = FileHdr(snaplen=snaplen, linktype=linktype) + self.__f.write(str(fh)) + + def writepkt(self, pkt, ts=None): + if ts is None: + ts = time.time() + s = str(pkt) + n = len(s) + if sys.byteorder == 'little': + ph = LEPktHdr(tv_sec=int(ts), + tv_usec=int((float(ts) - int(ts)) * 1000000.0), + caplen=n, len=n) + else: + ph = PktHdr(tv_sec=int(ts), + tv_usec=int((float(ts) - int(ts)) * 1000000.0), + caplen=n, len=n) + self.__f.write(str(ph)) + self.__f.write(s) + + def close(self): + self.__f.close() + + +class Reader(object): + """Simple pypcap-compatible pcap file reader.""" + + def __init__(self, fileobj): + self.name = fileobj.name + self.fd = fileobj.fileno() + self.__f = fileobj + buf = self.__f.read(FileHdr.__hdr_len__) + self.__fh = FileHdr(buf) + self.__ph = PktHdr + if self.__fh.magic == PMUDPCT_MAGIC: + self.__fh = LEFileHdr(buf) + self.__ph = LEPktHdr + elif self.__fh.magic != TCPDUMP_MAGIC: + raise ValueError('invalid tcpdump header') + if self.__fh.linktype in dltoff: + self.dloff = dltoff[self.__fh.linktype] + else: + self.dloff = 0 + self.snaplen = self.__fh.snaplen + self.filter = '' + + def fileno(self): + return self.fd + + def datalink(self): + return self.__fh.linktype + + def setfilter(self, value, optimize=1): + return NotImplementedError + + def readpkts(self): + return list(self) + + def dispatch(self, cnt, callback, *args): + if cnt > 0: + for i in range(cnt): + ts, pkt = self.next() + callback(ts, pkt, *args) + else: + for ts, pkt in self: + callback(ts, pkt, *args) + + def loop(self, callback, *args): + self.dispatch(0, callback, *args) + + def __iter__(self): + self.__f.seek(FileHdr.__hdr_len__) + while 1: + buf = self.__f.read(PktHdr.__hdr_len__) + if not buf: break + hdr = self.__ph(buf) + buf = self.__f.read(hdr.caplen) + yield (hdr.tv_sec + (hdr.tv_usec / 1000000.0), buf) + + +def test_pcap_endian(): + be = '\xa1\xb2\xc3\xd4\x00\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x01' + le = '\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x01\x00\x00\x00' + befh = FileHdr(be) + lefh = LEFileHdr(le) + assert (befh.linktype == lefh.linktype) + +if __name__ == '__main__': + test_pcap_endian() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pim.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pim.py new file mode 100644 index 00000000..6cd16a42 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pim.py @@ -0,0 +1,46 @@ +# $Id: pim.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Protocol Independent Multicast.""" + +import dpkt +from decorators import deprecated + + +class PIM(dpkt.Packet): + __hdr__ = ( + ('v_type', 'B', 0x20), + ('rsvd', 'B', 0), + ('sum', 'H', 0) + ) + + @property + def v(self): return self.v_type >> 4 + + @v.setter + def v(self, v): self.v_type = (v << 4) | (self.v_type & 0xf) + + @property + def type(self): return self.v_type & 0xf + + @type.setter + def type(self, type): self.v_type = (self.v_type & 0xf0) | type + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): return self.v + + @deprecated + def _set_v(self, v): self.v = v + + @deprecated + def _get_type(self): return self.type + + @deprecated + def _set_type(self, type): self.type = type + # ================================================= + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pmap.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pmap.py new file mode 100644 index 00000000..0e57b64c --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pmap.py @@ -0,0 +1,18 @@ +# $Id: pmap.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Portmap / rpcbind.""" + +import dpkt + +PMAP_PROG = 100000L +PMAP_PROCDUMP = 4 +PMAP_VERS = 2 + + +class Pmap(dpkt.Packet): + __hdr__ = ( + ('prog', 'I', 0), + ('vers', 'I', 0), + ('prot', 'I', 0), + ('port', 'I', 0), + ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ppp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ppp.py new file mode 100644 index 00000000..282bdd98 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ppp.py @@ -0,0 +1,66 @@ +# $Id: ppp.py 65 2010-03-26 02:53:51Z dugsong $ +# -*- coding: utf-8 -*- +"""Point-to-Point Protocol.""" + +import struct +import dpkt + +# XXX - finish later + +# http://www.iana.org/assignments/ppp-numbers +PPP_IP = 0x21 # Internet Protocol +PPP_IP6 = 0x57 # Internet Protocol v6 + +# Protocol field compression +PFC_BIT = 0x01 + + +class PPP(dpkt.Packet): + __hdr__ = ( + ('p', 'B', PPP_IP), + ) + _protosw = {} + + @classmethod + def set_p(cls, p, pktclass): + cls._protosw[p] = pktclass + + @classmethod + def get_p(cls, p): + return cls._protosw[p] + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.p & PFC_BIT == 0: + self.p = struct.unpack('>H', buf[:2])[0] + self.data = self.data[1:] + try: + self.data = self._protosw[self.p](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, struct.error, dpkt.UnpackError): + pass + + def pack_hdr(self): + try: + if self.p > 0xff: + return struct.pack('>H', self.p) + return dpkt.Packet.pack_hdr(self) + except struct.error, e: + raise dpkt.PackError(str(e)) + + +def __load_protos(): + g = globals() + for k, v in g.iteritems(): + if k.startswith('PPP_'): + name = k[4:] + modname = name.lower() + try: + mod = __import__(modname, g) + except ImportError: + continue + PPP.set_p(v, getattr(mod, name)) + + +if not PPP._protosw: + __load_protos() diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pppoe.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pppoe.py new file mode 100644 index 00000000..72e7a31b --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pppoe.py @@ -0,0 +1,61 @@ +# $Id: pppoe.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""PPP-over-Ethernet.""" + +import dpkt +import ppp +from decorators import deprecated + +# RFC 2516 codes +PPPoE_PADI = 0x09 +PPPoE_PADO = 0x07 +PPPoE_PADR = 0x19 +PPPoE_PADS = 0x65 +PPPoE_PADT = 0xA7 +PPPoE_SESSION = 0x00 + + +class PPPoE(dpkt.Packet): + __hdr__ = ( + ('v_type', 'B', 0x11), + ('code', 'B', 0), + ('session', 'H', 0), + ('len', 'H', 0) # payload length + ) + + @property + def v(self): return self.v_type >> 4 + + @v.setter + def v(self, v): self.v_type = (v << 4) | (self.v_type & 0xf) + + @property + def type(self): return self.v_type & 0xf + + @type.setter + def type(self, t): self.v_type = (self.v_type & 0xf0) | t + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): return self.v + + @deprecated + def _set_v(self, v): self.v = v + + @deprecated + def _get_type(self): return self.type + + @deprecated + def _set_type(self, t): self.type = t + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + if self.code == 0: + self.data = self.ppp = ppp.PPP(self.data) + except dpkt.UnpackError: + pass + +# XXX - TODO TLVs, etc. diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/qq.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/qq.py new file mode 100644 index 00000000..3399d882 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/qq.py @@ -0,0 +1,224 @@ +# $Id: qq.py 48 2008-05-27 17:31:15Z yardley $ +# -*- coding: utf-8 -*- +from dpkt import Packet + +# header_type +QQ_HEADER_BASIC_FAMILY = 0x02 +QQ_HEADER_P2P_FAMILY = 0x00 +QQ_HEADER_03_FAMILY = 0x03 +QQ_HEADER_04_FAMILY = 0x04 +QQ_HEADER_05_FAMILY = 0x05 + +header_type_str = [ + "QQ_HEADER_P2P_FAMILY", + "Unknown Type", + "QQ_HEADER_03_FAMILY", + "QQ_HEADER_04_FAMILY", + "QQ_HEADER_05_FAMILY", +] + +# command +QQ_CMD_LOGOUT = 0x0001 +QQ_CMD_KEEP_ALIVE = 0x0002 +QQ_CMD_MODIFY_INFO = 0x0004 +QQ_CMD_SEARCH_USER = 0x0005 +QQ_CMD_GET_USER_INFO = 0x0006 +QQ_CMD_ADD_FRIEND = 0x0009 +QQ_CMD_DELETE_FRIEND = 0x000A +QQ_CMD_ADD_FRIEND_AUTH = 0x000B +QQ_CMD_CHANGE_STATUS = 0x000D +QQ_CMD_ACK_SYS_MSG = 0x0012 +QQ_CMD_SEND_IM = 0x0016 +QQ_CMD_RECV_IM = 0x0017 +QQ_CMD_REMOVE_SELF = 0x001C +QQ_CMD_REQUEST_KEY = 0x001D +QQ_CMD_LOGIN = 0x0022 +QQ_CMD_GET_FRIEND_LIST = 0x0026 +QQ_CMD_GET_ONLINE_OP = 0x0027 +QQ_CMD_SEND_SMS = 0x002D +QQ_CMD_CLUSTER_CMD = 0x0030 +QQ_CMD_TEST = 0x0031 +QQ_CMD_GROUP_DATA_OP = 0x003C +QQ_CMD_UPLOAD_GROUP_FRIEND = 0x003D +QQ_CMD_FRIEND_DATA_OP = 0x003E +QQ_CMD_DOWNLOAD_GROUP_FRIEND = 0x0058 +QQ_CMD_FRIEND_LEVEL_OP = 0x005C +QQ_CMD_PRIVACY_DATA_OP = 0x005E +QQ_CMD_CLUSTER_DATA_OP = 0x005F +QQ_CMD_ADVANCED_SEARCH = 0x0061 +QQ_CMD_REQUEST_LOGIN_TOKEN = 0x0062 +QQ_CMD_USER_PROPERTY_OP = 0x0065 +QQ_CMD_TEMP_SESSION_OP = 0x0066 +QQ_CMD_SIGNATURE_OP = 0x0067 +QQ_CMD_RECV_MSG_SYS = 0x0080 +QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS = 0x0081 +QQ_CMD_WEATHER_OP = 0x00A6 +QQ_CMD_ADD_FRIEND_EX = 0x00A7 +QQ_CMD_AUTHORIZE = 0X00A8 +QQ_CMD_UNKNOWN = 0xFFFF +QQ_SUB_CMD_SEARCH_ME_BY_QQ_ONLY = 0x03 +QQ_SUB_CMD_SHARE_GEOGRAPHY = 0x04 +QQ_SUB_CMD_GET_FRIEND_LEVEL = 0x02 +QQ_SUB_CMD_GET_CLUSTER_ONLINE_MEMBER = 0x01 +QQ_05_CMD_REQUEST_AGENT = 0x0021 +QQ_05_CMD_REQUEST_FACE = 0x0022 +QQ_05_CMD_TRANSFER = 0x0023 +QQ_05_CMD_REQUEST_BEGIN = 0x0026 +QQ_CLUSTER_CMD_CREATE_CLUSTER = 0x01 +QQ_CLUSTER_CMD_MODIFY_MEMBER = 0x02 +QQ_CLUSTER_CMD_MODIFY_CLUSTER_INFO = 0x03 +QQ_CLUSTER_CMD_GET_CLUSTER_INFO = 0x04 +QQ_CLUSTER_CMD_ACTIVATE_CLUSTER = 0x05 +QQ_CLUSTER_CMD_SEARCH_CLUSTER = 0x06 +QQ_CLUSTER_CMD_JOIN_CLUSTER = 0x07 +QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH = 0x08 +QQ_CLUSTER_CMD_EXIT_CLUSTER = 0x09 +QQ_CLUSTER_CMD_SEND_IM = 0x0A +QQ_CLUSTER_CMD_GET_ONLINE_MEMBER = 0x0B +QQ_CLUSTER_CMD_GET_MEMBER_INFO = 0x0C +QQ_CLUSTER_CMD_MODIFY_CARD = 0x0E +QQ_CLUSTER_CMD_GET_CARD_BATCH = 0x0F +QQ_CLUSTER_CMD_GET_CARD = 0x10 +QQ_CLUSTER_CMD_COMMIT_ORGANIZATION = 0x11 +QQ_CLUSTER_CMD_UPDATE_ORGANIZATION = 0x12 +QQ_CLUSTER_CMD_COMMIT_MEMBER_ORGANIZATION = 0x13 +QQ_CLUSTER_CMD_GET_VERSION_ID = 0x19 +QQ_CLUSTER_CMD_SEND_IM_EX = 0x1A +QQ_CLUSTER_CMD_SET_ROLE = 0x1B +QQ_CLUSTER_CMD_TRANSFER_ROLE = 0x1C +QQ_CLUSTER_CMD_CREATE_TEMP = 0x30 +QQ_CLUSTER_CMD_MODIFY_TEMP_MEMBER = 0x31 +QQ_CLUSTER_CMD_EXIT_TEMP = 0x32 +QQ_CLUSTER_CMD_GET_TEMP_INFO = 0x33 +QQ_CLUSTER_CMD_MODIFY_TEMP_INFO = 0x34 +QQ_CLUSTER_CMD_SEND_TEMP_IM = 0x35 +QQ_CLUSTER_CMD_SUB_CLUSTER_OP = 0x36 +QQ_CLUSTER_CMD_ACTIVATE_TEMP = 0x37 + +QQ_CLUSTER_SUB_CMD_ADD_MEMBER = 0x01 +QQ_CLUSTER_SUB_CMD_REMOVE_MEMBER = 0x02 +QQ_CLUSTER_SUB_CMD_GET_SUBJECT_LIST = 0x02 +QQ_CLUSTER_SUB_CMD_GET_DIALOG_LIST = 0x01 + +QQ_SUB_CMD_GET_ONLINE_FRIEND = 0x2 +QQ_SUB_CMD_GET_ONLINE_SERVICE = 0x3 +QQ_SUB_CMD_UPLOAD_GROUP_NAME = 0x2 +QQ_SUB_CMD_DOWNLOAD_GROUP_NAME = 0x1 +QQ_SUB_CMD_SEND_TEMP_SESSION_IM = 0x01 +QQ_SUB_CMD_BATCH_DOWNLOAD_FRIEND_REMARK = 0x0 +QQ_SUB_CMD_UPLOAD_FRIEND_REMARK = 0x1 +QQ_SUB_CMD_REMOVE_FRIEND_FROM_LIST = 0x2 +QQ_SUB_CMD_DOWNLOAD_FRIEND_REMARK = 0x3 +QQ_SUB_CMD_MODIFY_SIGNATURE = 0x01 +QQ_SUB_CMD_DELETE_SIGNATURE = 0x02 +QQ_SUB_CMD_GET_SIGNATURE = 0x03 +QQ_SUB_CMD_GET_USER_PROPERTY = 0x01 +QQ_SUB_CMD_GET_WEATHER = 0x01 + +QQ_FILE_CMD_HEART_BEAT = 0x0001 +QQ_FILE_CMD_HEART_BEAT_ACK = 0x0002 +QQ_FILE_CMD_TRANSFER_FINISHED = 0x0003 +QQ_FILE_CMD_FILE_OP = 0x0007 +QQ_FILE_CMD_FILE_OP_ACK = 0x0008 +QQ_FILE_CMD_SENDER_SAY_HELLO = 0x0031 +QQ_FILE_CMD_SENDER_SAY_HELLO_ACK = 0x0032 +QQ_FILE_CMD_RECEIVER_SAY_HELLO = 0x0033 +QQ_FILE_CMD_RECEIVER_SAY_HELLO_ACK = 0x0034 +QQ_FILE_CMD_NOTIFY_IP_ACK = 0x003C +QQ_FILE_CMD_PING = 0x003D +QQ_FILE_CMD_PONG = 0x003E +QQ_FILE_CMD_YES_I_AM_BEHIND_FIREWALL = 0x0040 +QQ_FILE_CMD_REQUEST_AGENT = 0x0001 +QQ_FILE_CMD_CHECK_IN = 0x0002 +QQ_FILE_CMD_FORWARD = 0x0003 +QQ_FILE_CMD_FORWARD_FINISHED = 0x0004 +QQ_FILE_CMD_IT_IS_TIME = 0x0005 +QQ_FILE_CMD_I_AM_READY = 0x0006 + +command_str = { + 0x0001: "QQ_CMD_LOGOUT", + 0x0002: "QQ_CMD_KEEP_ALIVE", + 0x0004: "QQ_CMD_MODIFY_INFO", + 0x0005: "QQ_CMD_SEARCH_USER", + 0x0006: "QQ_CMD_GET_USER_INFO", + 0x0009: "QQ_CMD_ADD_FRIEND", + 0x000A: "QQ_CMD_DELETE_FRIEND", + 0x000B: "QQ_CMD_ADD_FRIEND_AUTH", + 0x000D: "QQ_CMD_CHANGE_STATUS", + 0x0012: "QQ_CMD_ACK_SYS_MSG", + 0x0016: "QQ_CMD_SEND_IM", + 0x0017: "QQ_CMD_RECV_IM", + 0x001C: "QQ_CMD_REMOVE_SELF", + 0x001D: "QQ_CMD_REQUEST_KEY", + 0x0022: "QQ_CMD_LOGIN", + 0x0026: "QQ_CMD_GET_FRIEND_LIST", + 0x0027: "QQ_CMD_GET_ONLINE_OP", + 0x002D: "QQ_CMD_SEND_SMS", + 0x0030: "QQ_CMD_CLUSTER_CMD", + 0x0031: "QQ_CMD_TEST", + 0x003C: "QQ_CMD_GROUP_DATA_OP", + 0x003D: "QQ_CMD_UPLOAD_GROUP_FRIEND", + 0x003E: "QQ_CMD_FRIEND_DATA_OP", + 0x0058: "QQ_CMD_DOWNLOAD_GROUP_FRIEND", + 0x005C: "QQ_CMD_FRIEND_LEVEL_OP", + 0x005E: "QQ_CMD_PRIVACY_DATA_OP", + 0x005F: "QQ_CMD_CLUSTER_DATA_OP", + 0x0061: "QQ_CMD_ADVANCED_SEARCH", + 0x0062: "QQ_CMD_REQUEST_LOGIN_TOKEN", + 0x0065: "QQ_CMD_USER_PROPERTY_OP", + 0x0066: "QQ_CMD_TEMP_SESSION_OP", + 0x0067: "QQ_CMD_SIGNATURE_OP", + 0x0080: "QQ_CMD_RECV_MSG_SYS", + 0x0081: "QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS", + 0x00A6: "QQ_CMD_WEATHER_OP", + 0x00A7: "QQ_CMD_ADD_FRIEND_EX", + 0x00A8: "QQ_CMD_AUTHORIZE", + 0xFFFF: "QQ_CMD_UNKNOWN", + 0x0021: "_CMD_REQUEST_AGENT", + 0x0022: "_CMD_REQUEST_FACE", + 0x0023: "_CMD_TRANSFER", + 0x0026: "_CMD_REQUEST_BEGIN", +} + + +class QQBasicPacket(Packet): + __hdr__ = ( + ('header_type', 'B', 2), + ('source', 'H', 0), + ('command', 'H', 0), + ('sequence', 'H', 0), + ('qqNum', 'L', 0), + ) + + +class QQ3Packet(Packet): + __hdr__ = ( + ('header_type', 'B', 3), + ('command', 'B', 0), + ('sequence', 'H', 0), + ('unknown1', 'L', 0), + ('unknown2', 'L', 0), + ('unknown3', 'L', 0), + ('unknown4', 'L', 0), + ('unknown5', 'L', 0), + ('unknown6', 'L', 0), + ('unknown7', 'L', 0), + ('unknown8', 'L', 0), + ('unknown9', 'L', 0), + ('unknown10', 'B', 1), + ('unknown11', 'B', 0), + ('unknown12', 'B', 0), + ('source', 'H', 0), + ('unknown13', 'B', 0), + ) + + +class QQ5Packet(Packet): + __hdr__ = ( + ('header_type', 'B', 5), + ('source', 'H', 0), + ('unknown', 'H', 0), + ('command', 'H', 0), + ('sequence', 'H', 0), + ('qqNum', 'L', 0), + ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radiotap.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radiotap.py new file mode 100644 index 00000000..76e6306b --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radiotap.py @@ -0,0 +1,532 @@ +# -*- coding: utf-8 -*- +"""Radiotap""" + +import dpkt +import ieee80211 +import socket +from decorators import deprecated + +# Ref: http://www.radiotap.org +# Fields Ref: http://www.radiotap.org/defined-fields/all + +# Present flags +_TSFT_MASK = 0x1000000 +_FLAGS_MASK = 0x2000000 +_RATE_MASK = 0x4000000 +_CHANNEL_MASK = 0x8000000 +_FHSS_MASK = 0x10000000 +_ANT_SIG_MASK = 0x20000000 +_ANT_NOISE_MASK = 0x40000000 +_LOCK_QUAL_MASK = 0x80000000 +_TX_ATTN_MASK = 0x10000 +_DB_TX_ATTN_MASK = 0x20000 +_DBM_TX_POWER_MASK = 0x40000 +_ANTENNA_MASK = 0x80000 +_DB_ANT_SIG_MASK = 0x100000 +_DB_ANT_NOISE_MASK = 0x200000 +_RX_FLAGS_MASK = 0x400000 +_CHANNELPLUS_MASK = 0x200 +_EXT_MASK = 0x1 + +_TSFT_SHIFT = 24 +_FLAGS_SHIFT = 25 +_RATE_SHIFT = 26 +_CHANNEL_SHIFT = 27 +_FHSS_SHIFT = 28 +_ANT_SIG_SHIFT = 29 +_ANT_NOISE_SHIFT = 30 +_LOCK_QUAL_SHIFT = 31 +_TX_ATTN_SHIFT = 16 +_DB_TX_ATTN_SHIFT = 17 +_DBM_TX_POWER_SHIFT = 18 +_ANTENNA_SHIFT = 19 +_DB_ANT_SIG_SHIFT = 20 +_DB_ANT_NOISE_SHIFT = 21 +_RX_FLAGS_SHIFT = 22 +_CHANNELPLUS_SHIFT = 10 +_EXT_SHIFT = 0 + +# Flags elements +_FLAGS_SIZE = 2 +_CFP_FLAG_SHIFT = 0 +_PREAMBLE_SHIFT = 1 +_WEP_SHIFT = 2 +_FRAG_SHIFT = 3 +_FCS_SHIFT = 4 +_DATA_PAD_SHIFT = 5 +_BAD_FCS_SHIFT = 6 +_SHORT_GI_SHIFT = 7 + +# Channel type +_CHAN_TYPE_SIZE = 4 +_CHANNEL_TYPE_SHIFT = 4 +_CCK_SHIFT = 5 +_OFDM_SHIFT = 6 +_TWO_GHZ_SHIFT = 7 +_FIVE_GHZ_SHIFT = 8 +_PASSIVE_SHIFT = 9 +_DYN_CCK_OFDM_SHIFT = 10 +_GFSK_SHIFT = 11 +_GSM_SHIFT = 12 +_STATIC_TURBO_SHIFT = 13 +_HALF_RATE_SHIFT = 14 +_QUARTER_RATE_SHIFT = 15 + +# Flags offsets and masks +_FCS_SHIFT = 4 +_FCS_MASK = 0x10 + + +class Radiotap(dpkt.Packet): + __hdr__ = ( + ('version', 'B', 0), + ('pad', 'B', 0), + ('length', 'H', 0), + ('present_flags', 'I', 0) + ) + + @property + def tsft_present(self): + return (self.present_flags & _TSFT_MASK) >> _TSFT_SHIFT + + @tsft_present.setter + def tsft_present(self, val): + self.present_flags |= val << _TSFT_SHIFT + + @property + def flags_present(self): + return (self.present_flags & _FLAGS_MASK) >> _FLAGS_SHIFT + + @flags_present.setter + def flags_present(self, val): + self.present_flags |= val << _FLAGS_SHIFT + + @property + def rate_present(self): + return (self.present_flags & _RATE_MASK) >> _RATE_SHIFT + + @rate_present.setter + def rate_present(self, val): + self.present_flags |= val << _RATE_SHIFT + + @property + def channel_present(self): + return (self.present_flags & _CHANNEL_MASK) >> _CHANNEL_SHIFT + + @channel_present.setter + def channel_present(self, val): + self.present_flags |= val << _CHANNEL_SHIFT + + @property + def fhss_present(self): + return (self.present_flags & _FHSS_MASK) >> _FHSS_SHIFT + + @fhss_present.setter + def fhss_present(self, val): + self.present_flags |= val << _FHSS_SHIFT + + @property + def ant_sig_present(self): + return (self.present_flags & _ANT_SIG_MASK) >> _ANT_SIG_SHIFT + + @ant_sig_present.setter + def ant_sig_present(self, val): + self.present_flags |= val << _ANT_SIG_SHIFT + + @property + def ant_noise_present(self): + return (self.present_flags & _ANT_NOISE_MASK) >> _ANT_NOISE_SHIFT + + @ant_noise_present.setter + def ant_noise_present(self, val): + self.present_flags |= val << _ANT_NOISE_SHIFT + + @property + def lock_qual_present(self): + return (self.present_flags & _LOCK_QUAL_MASK) >> _LOCK_QUAL_SHIFT + + @lock_qual_present.setter + def lock_qual_present(self, val): + self.present_flags |= val << _LOCK_QUAL_SHIFT + + @property + def tx_attn_present(self): + return (self.present_flags & _TX_ATTN_MASK) >> _TX_ATTN_SHIFT + + @tx_attn_present.setter + def tx_attn_present(self, val): + self.present_flags |= val << _TX_ATTN_SHIFT + + @property + def db_tx_attn_present(self): + return (self.present_flags & _DB_TX_ATTN_MASK) >> _DB_TX_ATTN_SHIFT + + @db_tx_attn_present.setter + def db_tx_attn_present(self, val): + self.present_flags |= val << _DB_TX_ATTN_SHIFT + + @property + def dbm_tx_power_present(self): + return (self.present_flags & _DBM_TX_POWER_MASK) >> _DBM_TX_POWER_SHIFT + + @dbm_tx_power_present.setter + def dbm_tx_power_present(self, val): + self.present_flags |= val << _DBM_TX_POWER_SHIFT + + @property + def ant_present(self): + return (self.present_flags & _ANTENNA_MASK) >> _ANTENNA_SHIFT + + @ant_present.setter + def ant_present(self, val): + self.present_flags |= val << _ANTENNA_SHIFT + + @property + def db_ant_sig_present(self): + return (self.present_flags & _DB_ANT_SIG_MASK) >> _DB_ANT_SIG_SHIFT + + @db_ant_sig_present.setter + def db_ant_sig_present(self, val): + self.present_flags |= val << _DB_ANT_SIG_SHIFT + + @property + def db_ant_noise_present(self): + return (self.present_flags & _DB_ANT_NOISE_MASK) >> _DB_ANT_NOISE_SHIFT + + @db_ant_noise_present.setter + def db_ant_noise_present(self, val): + self.present_flags |= val << _DB_ANT_NOISE_SHIFT + + @property + def rx_flags_present(self): + return (self.present_flags & _RX_FLAGS_MASK) >> _RX_FLAGS_SHIFT + + @rx_flags_present.setter + def rx_flags_present(self, val): + self.present_flags |= val << _RX_FLAGS_SHIFT + + @property + def chanplus_present(self): + return (self.present_flags & _CHANNELPLUS_MASK) >> _CHANNELPLUS_SHIFT + + @chanplus_present.setter + def chanplus_present(self, val): + self.present_flags |= val << _CHANNELPLUS_SHIFT + + @property + def ext_present(self): + return (self.present_flags & _EXT_MASK) >> _EXT_SHIFT + + @ext_present.setter + def ext_present(self, val): + self.present_flags |= val << _EXT_SHIFT + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_tsft_present(self): + return self.tsft_present + + @deprecated + def _set_tsft_present(self, val): + self.tsft_present = val + + @deprecated + def _get_flags_present(self): + return self.flags_present + + @deprecated + def _set_flags_present(self, val): + self.flags_present = val + + @deprecated + def _get_rate_present(self): + return self.rate_present + + @deprecated + def _set_rate_present(self, val): + self.rate_present = val + + @deprecated + def _get_channel_present(self): + return self.channel_present + + @deprecated + def _set_channel_present(self, val): + self.channel_present = val + + @deprecated + def _get_fhss_present(self): + return self.fhss_present + + @deprecated + def _set_fhss_present(self, val): + self.fhss_present = val + + @deprecated + def _get_ant_sig_present(self): + return self.ant_sig_present + + @deprecated + def _set_ant_sig_present(self, val): + self.ant_sig_present = val + + @deprecated + def _get_ant_noise_present(self): + return self.ant_noise_present + + @deprecated + def _set_ant_noise_present(self, val): + self.ant_noise_present = val + + @deprecated + def _get_lock_qual_present(self): + return self.lock_qual_present + + @deprecated + def _set_lock_qual_present(self, val): + self.lock_qual_present = val + + @deprecated + def _get_tx_attn_present(self): + return self.tx_attn_present + + @deprecated + def _set_tx_attn_present(self, val): + self.tx_attn_present = val + + @deprecated + def _get_db_tx_attn_present(self): + return self.db_tx_attn_present + + @deprecated + def _set_db_tx_attn_present(self, val): + self.db_tx_attn_present = val + + @deprecated + def _get_dbm_power_present(self): + return self.dbm_tx_power_present + + @deprecated + def _set_dbm_power_present(self, val): + self.dbm_tx_power_present = val + + @deprecated + def _get_ant_present(self): + return self.ant_present + + @deprecated + def _set_ant_present(self, val): + self.ant_present = val + + @deprecated + def _get_db_ant_sig_present(self): + return self.db_ant_sig_present + + @deprecated + def _set_db_ant_sig_present(self, val): + self.db_ant_sig_present = val + + @deprecated + def _get_db_ant_noise_present(self): + return self.db_ant_noise_present + + @deprecated + def _set_db_ant_noise_present(self, val): + self.db_ant_noise_present = val + + @deprecated + def _get_rx_flags_present(self): + return self.rx_flags_present + + @deprecated + def _set_rx_flags_present(self, val): + self.rx_flags_present = val + + @deprecated + def _get_chanplus_present(self): + return self.chanplus_present + + @deprecated + def _set_chanplus_present(self, val): + self.chanplus_present = val + + @deprecated + def _get_ext_present(self): + return self.ext_present + + @deprecated + def _set_ext_present(self, val): + self.ext_present = val + + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = buf[socket.ntohs(self.length):] + + self.fields = [] + buf = buf[self.__hdr_len__:] + + # decode each field into self. (eg. self.tsft) as well as append it self.fields list + field_decoder = [ + ('tsft', self.tsft_present, self.TSFT), + ('flags', self.flags_present, self.Flags), + ('rate', self.rate_present, self.Rate), + ('channel', self.channel_present, self.Channel), + ('fhss', self.fhss_present, self.FHSS), + ('ant_sig', self.ant_sig_present, self.AntennaSignal), + ('ant_noise', self.ant_noise_present, self.AntennaNoise), + ('lock_qual', self.lock_qual_present, self.LockQuality), + ('tx_attn', self.tx_attn_present, self.TxAttenuation), + ('db_tx_attn', self.db_tx_attn_present, self.DbTxAttenuation), + ('dbm_tx_power', self.dbm_tx_power_present, self.DbmTxPower), + ('ant', self.ant_present, self.Antenna), + ('db_ant_sig', self.db_ant_sig_present, self.DbAntennaSignal), + ('db_ant_noise', self.db_ant_noise_present, self.DbAntennaNoise), + ('rx_flags', self.rx_flags_present, self.RxFlags) + ] + for name, present_bit, parser in field_decoder: + if present_bit: + field = parser(buf) + field.data = '' + setattr(self, name, field) + self.fields.append(field) + buf = buf[len(field):] + + if len(self.data) > 0: + if self.flags_present and self.flags.fcs: + self.data = ieee80211.IEEE80211(self.data, fcs=self.flags.fcs) + else: + self.data = ieee80211.IEEE80211(self.data) + + class Antenna(dpkt.Packet): + __hdr__ = ( + ('index', 'B', 0), + ) + + class AntennaNoise(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class AntennaSignal(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class Channel(dpkt.Packet): + __hdr__ = ( + ('freq', 'H', 0), + ('flags', 'H', 0), + ) + + class FHSS(dpkt.Packet): + __hdr__ = ( + ('set', 'B', 0), + ('pattern', 'B', 0), + ) + + class Flags(dpkt.Packet): + __hdr__ = ( + ('val', 'B', 0), + ) + + @property + def fcs(self): return (self.val & _FCS_MASK) >> _FCS_SHIFT + + # TODO statement seems to have no effect + @fcs.setter + def fcs(self, v): (v << _FCS_SHIFT) | (self.val & ~_FCS_MASK) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_fcs_present(self): return self.fcs + + @deprecated + def _set_fcs_present(self, v): self.fcs = v + + # ================================================= + + class LockQuality(dpkt.Packet): + __hdr__ = ( + ('val', 'H', 0), + ) + + class RxFlags(dpkt.Packet): + __hdr__ = ( + ('val', 'H', 0), + ) + + class Rate(dpkt.Packet): + __hdr__ = ( + ('val', 'B', 0), + ) + + class TSFT(dpkt.Packet): + __hdr__ = ( + ('usecs', 'Q', 0), + ) + + class TxAttenuation(dpkt.Packet): + __hdr__ = ( + ('val', 'H', 0), + ) + + class DbTxAttenuation(dpkt.Packet): + __hdr__ = ( + ('db', 'H', 0), + ) + + class DbAntennaNoise(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class DbAntennaSignal(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class DbmTxPower(dpkt.Packet): + __hdr__ = ( + ('dbm', 'B', 0), + ) + + +def test_Radiotap(): + s = '\x00\x00\x00\x18\x6e\x48\x00\x00\x00\x02\x6c\x09\xa0\x00\xa8\x81\x02\x00\x00\x00\x00\x00\x00\x00' + rad = Radiotap(s) + assert(rad.version == 0) + assert(rad.present_flags == 0x6e480000) + assert(rad.tsft_present == 0) + assert(rad.flags_present == 1) + assert(rad.rate_present == 1) + assert(rad.channel_present == 1) + assert(rad.fhss_present == 0) + assert(rad.ant_sig_present == 1) + assert(rad.ant_noise_present == 1) + assert(rad.lock_qual_present == 0) + assert(rad.db_tx_attn_present == 0) + assert(rad.dbm_tx_power_present == 0) + assert(rad.ant_present == 1) + assert(rad.db_ant_sig_present == 0) + assert(rad.db_ant_noise_present == 0) + assert(rad.rx_flags_present == 1) + assert(rad.channel.freq == 0x6c09) + assert(rad.channel.flags == 0xa000) + assert(len(rad.fields) == 7) + + +def test_fcs(): + s = '\x00\x00\x1a\x00\x2f\x48\x00\x00\x34\x8f\x71\x09\x00\x00\x00\x00\x10\x0c\x85\x09\xc0\x00\xcc\x01\x00\x00' + rt = Radiotap(s) + assert(rt.flags_present == 1) + assert(rt.flags.fcs == 1) + + +if __name__ == '__main__': + test_Radiotap() + test_fcs() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radius.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radius.py new file mode 100644 index 00000000..740d5cd7 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radius.py @@ -0,0 +1,91 @@ +# $Id: radius.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Remote Authentication Dial-In User Service.""" + +import dpkt + +# http://www.untruth.org/~josh/security/radius/radius-auth.html +# RFC 2865 + + +class RADIUS(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ('id', 'B', 0), + ('len', 'H', 4), + ('auth', '16s', '') + ) + attrs = '' + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.attrs = parse_attrs(self.data) + self.data = '' + + +def parse_attrs(buf): + """Parse attributes buffer into a list of (type, data) tuples.""" + attrs = [] + while buf: + t = ord(buf[0]) + l = ord(buf[1]) + if l < 2: + break + d, buf = buf[2:l], buf[l:] + attrs.append((t, d)) + return attrs + +# Codes +RADIUS_ACCESS_REQUEST = 1 +RADIUS_ACCESS_ACCEPT = 2 +RADIUS_ACCESS_REJECT = 3 +RADIUS_ACCT_REQUEST = 4 +RADIUS_ACCT_RESPONSE = 5 +RADIUS_ACCT_STATUS = 6 +RADIUS_ACCESS_CHALLENGE = 11 + +# Attributes +RADIUS_USER_NAME = 1 +RADIUS_USER_PASSWORD = 2 +RADIUS_CHAP_PASSWORD = 3 +RADIUS_NAS_IP_ADDR = 4 +RADIUS_NAS_PORT = 5 +RADIUS_SERVICE_TYPE = 6 +RADIUS_FRAMED_PROTOCOL = 7 +RADIUS_FRAMED_IP_ADDR = 8 +RADIUS_FRAMED_IP_NETMASK = 9 +RADIUS_FRAMED_ROUTING = 10 +RADIUS_FILTER_ID = 11 +RADIUS_FRAMED_MTU = 12 +RADIUS_FRAMED_COMPRESSION = 13 +RADIUS_LOGIN_IP_HOST = 14 +RADIUS_LOGIN_SERVICE = 15 +RADIUS_LOGIN_TCP_PORT = 16 +# unassigned +RADIUS_REPLY_MESSAGE = 18 +RADIUS_CALLBACK_NUMBER = 19 +RADIUS_CALLBACK_ID = 20 +# unassigned +RADIUS_FRAMED_ROUTE = 22 +RADIUS_FRAMED_IPX_NETWORK = 23 +RADIUS_STATE = 24 +RADIUS_CLASS = 25 +RADIUS_VENDOR_SPECIFIC = 26 +RADIUS_SESSION_TIMEOUT = 27 +RADIUS_IDLE_TIMEOUT = 28 +RADIUS_TERMINATION_ACTION = 29 +RADIUS_CALLED_STATION_ID = 30 +RADIUS_CALLING_STATION_ID = 31 +RADIUS_NAS_ID = 32 +RADIUS_PROXY_STATE = 33 +RADIUS_LOGIN_LAT_SERVICE = 34 +RADIUS_LOGIN_LAT_NODE = 35 +RADIUS_LOGIN_LAT_GROUP = 36 +RADIUS_FRAMED_ATALK_LINK = 37 +RADIUS_FRAMED_ATALK_NETWORK = 38 +RADIUS_FRAMED_ATALK_ZONE = 39 +# 40-59 reserved for accounting +RADIUS_CHAP_CHALLENGE = 60 +RADIUS_NAS_PORT_TYPE = 61 +RADIUS_PORT_LIMIT = 62 +RADIUS_LOGIN_LAT_PORT = 63 diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rfb.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rfb.py new file mode 100644 index 00000000..6a69892f --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rfb.py @@ -0,0 +1,90 @@ +# $Id: rfb.py 47 2008-05-27 02:10:00Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Remote Framebuffer Protocol.""" + +import dpkt + +# Remote Framebuffer Protocol +# http://www.realvnc.com/docs/rfbproto.pdf + +# Client to Server Messages +CLIENT_SET_PIXEL_FORMAT = 0 +CLIENT_SET_ENCODINGS = 2 +CLIENT_FRAMEBUFFER_UPDATE_REQUEST = 3 +CLIENT_KEY_EVENT = 4 +CLIENT_POINTER_EVENT = 5 +CLIENT_CUT_TEXT = 6 + +# Server to Client Messages +SERVER_FRAMEBUFFER_UPDATE = 0 +SERVER_SET_COLOUR_MAP_ENTRIES = 1 +SERVER_BELL = 2 +SERVER_CUT_TEXT = 3 + + +class RFB(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ) + + +class SetPixelFormat(dpkt.Packet): + __hdr__ = ( + ('pad', '3s', ''), + ('pixel_fmt', '16s', '') + ) + + +class SetEncodings(dpkt.Packet): + __hdr__ = ( + ('pad', '1s', ''), + ('num_encodings', 'H', 0) + ) + + +class FramebufferUpdateRequest(dpkt.Packet): + __hdr__ = ( + ('incremental', 'B', 0), + ('x_position', 'H', 0), + ('y_position', 'H', 0), + ('width', 'H', 0), + ('height', 'H', 0) + ) + + +class KeyEvent(dpkt.Packet): + __hdr__ = ( + ('down_flag', 'B', 0), + ('pad', '2s', ''), + ('key', 'I', 0) + ) + + +class PointerEvent(dpkt.Packet): + __hdr__ = ( + ('button_mask', 'B', 0), + ('x_position', 'H', 0), + ('y_position', 'H', 0) + ) + + +class FramebufferUpdate(dpkt.Packet): + __hdr__ = ( + ('pad', '1s', ''), + ('num_rects', 'H', 0) + ) + + +class SetColourMapEntries(dpkt.Packet): + __hdr__ = ( + ('pad', '1s', ''), + ('first_colour', 'H', 0), + ('num_colours', 'H', 0) + ) + + +class CutText(dpkt.Packet): + __hdr__ = ( + ('pad', '3s', ''), + ('length', 'I', 0) + ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rip.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rip.py new file mode 100644 index 00000000..83f29f62 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rip.py @@ -0,0 +1,89 @@ +# $Id: rip.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Routing Information Protocol.""" + +import dpkt + +# RIP v2 - RFC 2453 +# http://tools.ietf.org/html/rfc2453 + +REQUEST = 1 +RESPONSE = 2 + + +class RIP(dpkt.Packet): + __hdr__ = ( + ('cmd', 'B', REQUEST), + ('v', 'B', 2), + ('rsvd', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + self.auth = None + while self.data: + rte = RTE(self.data[:20]) + if rte.family == 0xFFFF: + self.auth = Auth(self.data[:20]) + else: + l.append(rte) + self.data = self.data[20:] + self.data = self.rtes = l + + def __len__(self): + len = self.__hdr_len__ + if self.auth: + len += len(self.auth) + len += sum(map(len, self.rtes)) + return len + + def __str__(self): + auth = '' + if self.auth: + auth = str(self.auth) + return self.pack_hdr() + auth + ''.join(map(str, self.rtes)) + + +class RTE(dpkt.Packet): + __hdr__ = ( + ('family', 'H', 2), + ('route_tag', 'H', 0), + ('addr', 'I', 0), + ('subnet', 'I', 0), + ('next_hop', 'I', 0), + ('metric', 'I', 1) + ) + + +class Auth(dpkt.Packet): + __hdr__ = ( + ('rsvd', 'H', 0xFFFF), + ('type', 'H', 2), + ('auth', '16s', 0) + ) + + +__s = '\x02\x02\x00\x00\x00\x02\x00\x00\x01\x02\x03\x00\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x00\xc0\xa8\x01\x08\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x01' + + +def test_rtp_pack(): + r = RIP(__s) + assert (__s == str(r)) + + +def test_rtp_unpack(): + r = RIP(__s) + assert (r.auth is None) + assert (len(r.rtes) == 2) + + rte = r.rtes[1] + assert (rte.family == 2) + assert (rte.route_tag == 0) + assert (rte.metric == 1) + + +if __name__ == '__main__': + test_rtp_pack() + test_rtp_unpack() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rpc.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rpc.py new file mode 100644 index 00000000..f12bc83b --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rpc.py @@ -0,0 +1,161 @@ +# $Id: rpc.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Remote Procedure Call.""" + +import struct +import dpkt + +# RPC.dir +CALL = 0 +REPLY = 1 + +# RPC.Auth.flavor +AUTH_NONE = AUTH_NULL = 0 +AUTH_UNIX = 1 +AUTH_SHORT = 2 +AUTH_DES = 3 + +# RPC.Reply.stat +MSG_ACCEPTED = 0 +MSG_DENIED = 1 + +# RPC.Reply.Accept.stat +SUCCESS = 0 +PROG_UNAVAIL = 1 +PROG_MISMATCH = 2 +PROC_UNAVAIL = 3 +GARBAGE_ARGS = 4 +SYSTEM_ERR = 5 + +# RPC.Reply.Reject.stat +RPC_MISMATCH = 0 +AUTH_ERROR = 1 + + +class RPC(dpkt.Packet): + __hdr__ = ( + ('xid', 'I', 0), + ('dir', 'I', CALL) + ) + + class Auth(dpkt.Packet): + __hdr__ = (('flavor', 'I', AUTH_NONE), ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + n = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:4 + n] + + def __len__(self): + return 8 + len(self.data) + + def __str__(self): + return self.pack_hdr() + struct.pack('>I', len(self.data)) + \ + str(self.data) + + class Call(dpkt.Packet): + __hdr__ = ( + ('rpcvers', 'I', 2), + ('prog', 'I', 0), + ('vers', 'I', 0), + ('proc', 'I', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.cred = RPC.Auth(self.data) + self.verf = RPC.Auth(self.data[len(self.cred):]) + self.data = self.data[len(self.cred) + len(self.verf):] + + def __len__(self): + return len(str(self)) # XXX + + def __str__(self): + return dpkt.Packet.__str__(self) + \ + str(getattr(self, 'cred', RPC.Auth())) + \ + str(getattr(self, 'verf', RPC.Auth())) + \ + str(self.data) + + class Reply(dpkt.Packet): + __hdr__ = (('stat', 'I', MSG_ACCEPTED), ) + + class Accept(dpkt.Packet): + __hdr__ = (('stat', 'I', SUCCESS), ) + + def unpack(self, buf): + self.verf = RPC.Auth(buf) + buf = buf[len(self.verf):] + self.stat = struct.unpack('>I', buf[:4])[0] + if self.stat == SUCCESS: + self.data = buf[4:] + elif self.stat == PROG_MISMATCH: + self.low, self.high = struct.unpack('>II', buf[4:12]) + self.data = buf[12:] + + def __len__(self): + if self.stat == PROG_MISMATCH: n = 8 + else: n = 0 + return len(self.verf) + 4 + n + len(self.data) + + def __str__(self): + if self.stat == PROG_MISMATCH: + return str(self.verf) + struct.pack('>III', self.stat, + self.low, self.high) + self.data + return str(self.verf) + dpkt.Packet.__str__(self) + + class Reject(dpkt.Packet): + __hdr__ = (('stat', 'I', AUTH_ERROR), ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.stat == RPC_MISMATCH: + self.low, self.high = struct.unpack('>II', self.data[:8]) + self.data = self.data[8:] + elif self.stat == AUTH_ERROR: + self.why = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:] + + def __len__(self): + if self.stat == RPC_MISMATCH: n = 8 + elif self.stat == AUTH_ERROR: n = 4 + else: n = 0 + return 4 + n + len(self.data) + + def __str__(self): + if self.stat == RPC_MISMATCH: + return struct.pack('>III', self.stat, self.low, self.high) + self.data + elif self.stat == AUTH_ERROR: + return struct.pack('>II', self.stat, self.why) + self.data + return dpkt.Packet.__str__(self) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.stat == MSG_ACCEPTED: + self.data = self.accept = self.Accept(self.data) + elif self.status == MSG_DENIED: + self.data = self.reject = self.Reject(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.dir == CALL: + self.data = self.call = self.Call(self.data) + elif self.dir == REPLY: + self.data = self.reply = self.Reply(self.data) + + +def unpack_xdrlist(cls, buf): + l = [] + while buf: + if buf.startswith('\x00\x00\x00\x01'): + p = cls(buf[4:]) + l.append(p) + buf = p.data + elif buf.startswith('\x00\x00\x00\x00'): + break + else: + raise dpkt.UnpackError, 'invalid XDR list' + return l + + +def pack_xdrlist(*args): + return '\x00\x00\x00\x01'.join(map(str, args)) + '\x00\x00\x00\x00' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rtp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rtp.py new file mode 100644 index 00000000..9426d8c4 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rtp.py @@ -0,0 +1,127 @@ +# $Id: rtp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Real-Time Transport Protocol""" + +from dpkt import Packet +from decorators import deprecated + +# version 1100 0000 0000 0000 ! 0xC000 14 +# p 0010 0000 0000 0000 ! 0x2000 13 +# x 0001 0000 0000 0000 ! 0x1000 12 +# cc 0000 1111 0000 0000 ! 0x0F00 8 +# m 0000 0000 1000 0000 ! 0x0080 7 +# pt 0000 0000 0111 1111 ! 0x007F 0 +# + +_VERSION_MASK = 0xC000 +_P_MASK = 0x2000 +_X_MASK = 0x1000 +_CC_MASK = 0x0F00 +_M_MASK = 0x0080 +_PT_MASK = 0x007F +_VERSION_SHIFT = 14 +_P_SHIFT = 13 +_X_SHIFT = 12 +_CC_SHIFT = 8 +_M_SHIFT = 7 +_PT_SHIFT = 0 + +VERSION = 2 + + +class RTP(Packet): + __hdr__ = ( + ('_type', 'H', 0x8000), + ('seq', 'H', 0), + ('ts', 'I', 0), + ('ssrc', 'I', 0), + ) + csrc = '' + + @property + def version(self): return (self._type & _VERSION_MASK) >> _VERSION_SHIFT + + @version.setter + def version(self, ver): + self._type = (ver << _VERSION_SHIFT) | (self._type & ~_VERSION_MASK) + + @property + def p(self): return (self._type & _P_MASK) >> _P_SHIFT + + @p.setter + def p(self, p): self._type = (p << _P_SHIFT) | (self._type & ~_P_MASK) + + @property + def x(self): return (self._type & _X_MASK) >> _X_SHIFT + + @x.setter + def x(self, x): self._type = (x << _X_SHIFT) | (self._type & ~_X_MASK) + + @property + def cc(self): return (self._type & _CC_MASK) >> _CC_SHIFT + + @cc.setter + def cc(self, cc): self._type = (cc << _CC_SHIFT) | (self._type & ~_CC_MASK) + + @property + def m(self): return (self._type & _M_MASK) >> _M_SHIFT + + @m.setter + def m(self, m): self._type = (m << _M_SHIFT) | (self._type & ~_M_MASK) + + @property + def pt(self): return (self._type & _PT_MASK) >> _PT_SHIFT + + @pt.setter + def pt(self, m): self._type = (m << _PT_SHIFT) | (self._type & ~_PT_MASK) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_version(self): return self.version + + @deprecated + def _set_version(self, ver): self.version = ver + + @deprecated + def _get_p(self): return self.p + + @deprecated + def _set_p(self, p): self.p = p + + @deprecated + def _get_x(self): return self.x + + @deprecated + def _set_x(self, x): self.x = x + + @deprecated + def _get_cc(self): return self.cc + + @deprecated + def _set_cc(self, cc): self.cc = cc + + @deprecated + def _get_m(self): return self.m + + @deprecated + def _set_m(self, m): self.m = m + + @deprecated + def _get_pt(self): return self.pt + + @deprecated + def _set_pt(self, pt): self.pt = pt + # ================================================= + + def __len__(self): + return self.__hdr_len__ + len(self.csrc) + len(self.data) + + def __str__(self): + return self.pack_hdr() + self.csrc + str(self.data) + + def unpack(self, buf): + super(RTP, self).unpack(buf) + self.csrc = buf[self.__hdr_len__:self.__hdr_len__ + self.cc * 4] + self.data = buf[self.__hdr_len__ + self.cc * 4:] + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rx.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rx.py new file mode 100644 index 00000000..8535a350 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rx.py @@ -0,0 +1,45 @@ +# $Id: rx.py 23 2006-11-08 15:45:33Z jonojono $ +# -*- coding: utf-8 -*- +"""Rx Protocol.""" + +import dpkt + +# Types +DATA = 0x01 +ACK = 0x02 +BUSY = 0x03 +ABORT = 0x04 +ACKALL = 0x05 +CHALLENGE = 0x06 +RESPONSE = 0x07 +DEBUG = 0x08 + +# Flags +CLIENT_INITIATED = 0x01 +REQUEST_ACK = 0x02 +LAST_PACKET = 0x04 +MORE_PACKETS = 0x08 +SLOW_START_OK = 0x20 +JUMBO_PACKET = 0x20 + +# Security +SEC_NONE = 0x00 +SEC_BCRYPT = 0x01 +SEC_RXKAD = 0x02 +SEC_RXKAD_ENC = 0x03 + + +class Rx(dpkt.Packet): + __hdr__ = ( + ('epoch', 'I', 0), + ('cid', 'I', 0), + ('call', 'I', 1), + ('seq', 'I', 0), + ('serial', 'I', 1), + ('type', 'B', 0), + ('flags', 'B', CLIENT_INITIATED), + ('status', 'B', 0), + ('security', 'B', 0), + ('sum', 'H', 0), + ('service', 'H', 0) + ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sccp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sccp.py new file mode 100644 index 00000000..df862df3 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sccp.py @@ -0,0 +1,214 @@ +# $Id: sccp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Cisco Skinny Client Control Protocol.""" + +import dpkt + +KEYPAD_BUTTON = 0x00000003 +OFF_HOOK = 0x00000006 +ON_HOOK = 0x00000007 +OPEN_RECEIVE_CHANNEL_ACK = 0x00000022 +START_TONE = 0x00000082 +STOP_TONE = 0x00000083 +SET_LAMP = 0x00000086 +SET_SPEAKER_MODE = 0x00000088 +START_MEDIA_TRANSMIT = 0x0000008A +STOP_MEDIA_TRANSMIT = 0x0000008B +CALL_INFO = 0x0000008F +DEFINE_TIME_DATE = 0x00000094 +DISPLAY_TEXT = 0x00000099 +OPEN_RECEIVE_CHANNEL = 0x00000105 +CLOSE_RECEIVE_CHANNEL = 0x00000106 +SELECT_SOFTKEYS = 0x00000110 +CALL_STATE = 0x00000111 +DISPLAY_PROMPT_STATUS = 0x00000112 +CLEAR_PROMPT_STATUS = 0x00000113 +ACTIVATE_CALL_PLANE = 0x00000116 + + +class ActivateCallPlane(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('line_instance', 'I', 0), + ) + + +class CallInfo(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('calling_party_name', '40s', ''), + ('calling_party', '24s', ''), + ('called_party_name', '40s', ''), + ('called_party', '24s', ''), + ('line_instance', 'I', 0), + ('call_id', 'I', 0), + ('call_type', 'I', 0), + ('orig_called_party_name', '40s', ''), + ('orig_called_party', '24s', '') + ) + + +class CallState(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('call_state', 'I', 12), # 12: Proceed, 15: Connected + ('line_instance', 'I', 1), + ('call_id', 'I', 0) + ) + + +class ClearPromptStatus(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('line_instance', 'I', 1), + ('call_id', 'I', 0) + ) + + +class CloseReceiveChannel(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ) + + +class DisplayPromptStatus(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('msg_timeout', 'I', 0), + ('display_msg', '32s', ''), + ('line_instance', 'I', 1), + ('call_id', 'I', 0) + ) + + +class DisplayText(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('display_msg', '36s', ''), + ) + + +class KeypadButton(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('button', 'I', 0), + ) + + +class OpenReceiveChannel(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ('ms_packet', 'I', 0), + ('payload_capability', 'I', 4), # 4: G.711 u-law 64k + ('echo_cancel_type', 'I', 4), + ('g723_bitrate', 'I', 0), + ) + + +class OpenReceiveChannelAck(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('channel_status', 'I', 0), + ('ip', '4s', ''), + ('port', 'I', 0), + ('passthruparty_id', 'I', 0), + ) + + +class SelectStartKeys(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('line_id', 'I', 1), + ('call_id', 'I', 0), + ('softkey_set', 'I', 8), + ('softkey_map', 'I', 0xffffffffL) + ) + + +class SetLamp(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('stimulus', 'I', 9), # 9: Line + ('stimulus_instance', 'I', 1), + ('lamp_mode', 'I', 1), + ) + + +class SetSpeakerMode(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('speaker', 'I', 2), # 2: SpeakerOff + ) + + +class StartMediaTransmission(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ('remote_ip', '4s', ''), + ('remote_port', 'I', 0), + ('ms_packet', 'I', 0), + ('payload_capability', 'I', 4), # 4: G.711 u-law 64k + ('precedence', 'I', 0), + ('silence_suppression', 'I', 0), + ('max_frames_per_pkt', 'I', 1), + ('g723_bitrate', 'I', 0), + ) + + +class StartTone(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('tone', 'I', 0x24), # 0x24: AlertingTone + ) + + +class StopMediaTransmission(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ) + + +class SCCP(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('len', 'I', 0), + ('rsvd', 'I', 0), + ('msgid', 'I', 0), + ('msg', '0s', ''), + ) + _msgsw = { + KEYPAD_BUTTON: KeypadButton, + OPEN_RECEIVE_CHANNEL_ACK: OpenReceiveChannelAck, + START_TONE: StartTone, + SET_LAMP: SetLamp, + START_MEDIA_TRANSMIT: StartMediaTransmission, + STOP_MEDIA_TRANSMIT: StopMediaTransmission, + CALL_INFO: CallInfo, + DISPLAY_TEXT: DisplayText, + OPEN_RECEIVE_CHANNEL: OpenReceiveChannel, + CLOSE_RECEIVE_CHANNEL: CloseReceiveChannel, + CALL_STATE: CallState, + DISPLAY_PROMPT_STATUS: DisplayPromptStatus, + CLEAR_PROMPT_STATUS: ClearPromptStatus, + ACTIVATE_CALL_PLANE: ActivateCallPlane, + } + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + n = self.len - 4 + if n > len(self.data): + raise dpkt.NeedData('not enough data') + self.msg, self.data = self.data[:n], self.data[n:] + try: + p = self._msgsw[self.msgid](self.msg) + setattr(self, p.__class__.__name__.lower(), p) + except (KeyError, dpkt.UnpackError): + pass diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sctp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sctp.py new file mode 100644 index 00000000..4ef251c8 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sctp.py @@ -0,0 +1,95 @@ +# $Id: sctp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Stream Control Transmission Protocol.""" + +import dpkt +import crc32c + +# Stream Control Transmission Protocol +# http://tools.ietf.org/html/rfc2960 + +# Chunk Types +DATA = 0 +INIT = 1 +INIT_ACK = 2 +SACK = 3 +HEARTBEAT = 4 +HEARTBEAT_ACK = 5 +ABORT = 6 +SHUTDOWN = 7 +SHUTDOWN_ACK = 8 +ERROR = 9 +COOKIE_ECHO = 10 +COOKIE_ACK = 11 +ECNE = 12 +CWR = 13 +SHUTDOWN_COMPLETE = 14 + + +class SCTP(dpkt.Packet): + __hdr__ = ( + ('sport', 'H', 0), + ('dport', 'H', 0), + ('vtag', 'I', 0), + ('sum', 'I', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + while self.data: + chunk = Chunk(self.data) + l.append(chunk) + self.data = self.data[len(chunk):] + self.data = self.chunks = l + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + l = [str(x) for x in self.data] + if self.sum == 0: + s = crc32c.add(0xffffffffL, self.pack_hdr()) + for x in l: + s = crc32c.add(s, x) + self.sum = crc32c.done(s) + return self.pack_hdr() + ''.join(l) + + +class Chunk(dpkt.Packet): + __hdr__ = ( + ('type', 'B', INIT), + ('flags', 'B', 0), + ('len', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len - self.__hdr_len__] + + +__s = '\x80\x44\x00\x50\x00\x00\x00\x00\x30\xba\xef\x54\x01\x00\x00\x3c\x3b\xb9\x9c\x46\x00\x01\xa0\x00\x00\x0a\xff\xff\x2b\x2d\x7e\xb2\x00\x05\x00\x08\x9b\xe6\x18\x9b\x00\x05\x00\x08\x9b\xe6\x18\x9c\x00\x0c\x00\x06\x00\x05\x00\x00\x80\x00\x00\x04\xc0\x00\x00\x04\xc0\x06\x00\x08\x00\x00\x00\x00' + + +def test_sctp_pack(): + sctp = SCTP(__s) + assert (__s == str(sctp)) + sctp.sum = 0 + assert (__s == str(sctp)) + + +def test_sctp_unpack(): + sctp = SCTP(__s) + assert (sctp.sport == 32836) + assert (sctp.dport == 80) + assert (len(sctp.chunks) == 1) + assert (len(sctp) == 72) + chunk = sctp.chunks[0] + assert (chunk.type == INIT) + assert (chunk.len == 60) + + +if __name__ == '__main__': + test_sctp_pack() + test_sctp_unpack() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sip.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sip.py new file mode 100644 index 00000000..fef476da --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sip.py @@ -0,0 +1,33 @@ +# $Id: sip.py 48 2008-05-27 17:31:15Z yardley $ +# -*- coding: utf-8 -*- +"""Session Initiation Protocol.""" + +import http + + +class Request(http.Request): + """SIP request.""" + __hdr_defaults__ = { + 'method': 'INVITE', + 'uri': 'sip:user@example.com', + 'version': '2.0', + 'headers': {'To': '', 'From': '', 'Call-ID': '', 'CSeq': '', 'Contact': ''} + } + __methods = dict.fromkeys(( + 'ACK', 'BYE', 'CANCEL', 'INFO', 'INVITE', 'MESSAGE', 'NOTIFY', + 'OPTIONS', 'PRACK', 'PUBLISH', 'REFER', 'REGISTER', 'SUBSCRIBE', + 'UPDATE' + )) + __proto = 'SIP' + + +class Response(http.Response): + """SIP response.""" + __hdr_defaults__ = { + 'version': '2.0', + 'status': '200', + 'reason': 'OK', + 'headers': {'To': '', 'From': '', 'Call-ID': '', 'CSeq': '', 'Contact': ''} + } + __proto = 'SIP' + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sll.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sll.py new file mode 100644 index 00000000..3d1a1204 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sll.py @@ -0,0 +1,26 @@ +# $Id: sll.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Linux libpcap "cooked" capture encapsulation.""" + +import arp +import dpkt +import ethernet + + +class SLL(dpkt.Packet): + __hdr__ = ( + ('type', 'H', 0), # 0: to us, 1: bcast, 2: mcast, 3: other, 4: from us + ('hrd', 'H', arp.ARP_HRD_ETH), + ('hlen', 'H', 6), # hardware address length + ('hdr', '8s', ''), # first 8 bytes of link-layer header + ('ethtype', 'H', ethernet.ETH_TYPE_IP), + ) + _typesw = ethernet.Ethernet._typesw + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._typesw[self.ethtype](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + pass diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/smb.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/smb.py new file mode 100644 index 00000000..8517e64b --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/smb.py @@ -0,0 +1,20 @@ +# $Id: smb.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Server Message Block.""" + +import dpkt + + +class SMB(dpkt.Packet): + __hdr__ = [ + ('proto', '4s', ''), + ('cmd', 'B', 0), + ('err', 'I', 0), + ('flags1', 'B', 0), + ('flags2', 'B', 0), + ('pad', '6s', ''), + ('tid', 'H', 0), + ('pid', 'H', 0), + ('uid', 'H', 0), + ('mid', 'H', 0) + ] diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/snoop.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/snoop.py new file mode 100644 index 00000000..8090e855 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/snoop.py @@ -0,0 +1,122 @@ +# $Id$ +# -*- coding: utf-8 -*- +"""Snoop file format.""" + +import sys, time +import dpkt + +# RFC 1761 + +SNOOP_MAGIC = 0x736E6F6F70000000L + +SNOOP_VERSION = 2 + +SDL_8023 = 0 +SDL_8024 = 1 +SDL_8025 = 2 +SDL_8026 = 3 +SDL_ETHER = 4 +SDL_HDLC = 5 +SDL_CHSYNC = 6 +SDL_IBMCC = 7 +SDL_FDDI = 8 +SDL_OTHER = 9 + +dltoff = {SDL_ETHER: 14} + + +class PktHdr(dpkt.Packet): + """snoop packet header.""" + __byte_order__ = '!' + __hdr__ = ( + ('orig_len', 'I', 0), + ('incl_len', 'I', 0), + ('rec_len', 'I', 0), + ('cum_drops', 'I', 0), + ('ts_sec', 'I', 0), + ('ts_usec', 'I', 0), + ) + + +class FileHdr(dpkt.Packet): + """snoop file header.""" + __byte_order__ = '!' + __hdr__ = ( + ('magic', 'Q', SNOOP_MAGIC), + ('v', 'I', SNOOP_VERSION), + ('linktype', 'I', SDL_ETHER), + ) + + +class Writer(object): + """Simple snoop dumpfile writer.""" + + def __init__(self, fileobj, linktype=SDL_ETHER): + self.__f = fileobj + fh = FileHdr(linktype=linktype) + self.__f.write(str(fh)) + + def writepkt(self, pkt, ts=None): + if ts is None: + ts = time.time() + s = str(pkt) + n = len(s) + pad_len = 4 - n % 4 if n % 4 else 0 + ph = PktHdr(orig_len=n, incl_len=n, + rec_len=PktHdr.__hdr_len__ + n + pad_len, + ts_sec=int(ts), + ts_usec=int((int(ts) - float(ts)) * 1000000.0)) + self.__f.write(str(ph)) + self.__f.write(s + '\0' * pad_len) + + def close(self): + self.__f.close() + + +class Reader(object): + """Simple pypcap-compatible snoop file reader.""" + + def __init__(self, fileobj): + self.name = fileobj.name + self.fd = fileobj.fileno() + self.__f = fileobj + buf = self.__f.read(FileHdr.__hdr_len__) + self.__fh = FileHdr(buf) + self.__ph = PktHdr + if self.__fh.magic != SNOOP_MAGIC: + raise ValueError('invalid snoop header') + self.dloff = dltoff[self.__fh.linktype] + self.filter = '' + + def fileno(self): + return self.fd + + def datalink(self): + return self.__fh.linktype + + def setfilter(self, value, optimize=1): + return NotImplementedError + + def readpkts(self): + return list(self) + + def dispatch(self, cnt, callback, *args): + if cnt > 0: + for i in range(cnt): + ts, pkt = self.next() + callback(ts, pkt, *args) + else: + for ts, pkt in self: + callback(ts, pkt, *args) + + def loop(self, callback, *args): + self.dispatch(0, callback, *args) + + def __iter__(self): + self.__f.seek(FileHdr.__hdr_len__) + while 1: + buf = self.__f.read(PktHdr.__hdr_len__) + if not buf: break + hdr = self.__ph(buf) + buf = self.__f.read(hdr.rec_len - PktHdr.__hdr_len__) + yield (hdr.ts_sec + (hdr.ts_usec / 1000000.0), buf[:hdr.incl_len]) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl.py new file mode 100644 index 00000000..ea761552 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl.py @@ -0,0 +1,579 @@ +# $Id: ssl.py 90 2014-04-02 22:06:23Z andrewflnr@gmail.com $ +# Portion Copyright 2012 Google Inc. All rights reserved. +# -*- coding: utf-8 -*- +"""Secure Sockets Layer / Transport Layer Security.""" + +import dpkt +import ssl_ciphersuites +import struct +import binascii + +# +# Note from April 2011: cde...@gmail.com added code that parses SSL3/TLS messages more in depth. +# +# Jul 2012: afleenor@google.com modified and extended SSL support further. +# + + +class SSL2(dpkt.Packet): + __hdr__ = ( + ('len', 'H', 0), + ('msg', 's', ''), + ('pad', 's', ''), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.len & 0x8000: + n = self.len = self.len & 0x7FFF + self.msg, self.data = self.data[:n], self.data[n:] + else: + n = self.len = self.len & 0x3FFF + padlen = ord(self.data[0]) + self.msg = self.data[1:1 + n] + self.pad = self.data[1 + n:1 + n + padlen] + self.data = self.data[1 + n + padlen:] + + +# SSLv3/TLS versions +SSL3_V = 0x0300 +TLS1_V = 0x0301 +TLS11_V = 0x0302 +TLS12_V = 0x0303 + +ssl3_versions_str = { + SSL3_V: 'SSL3', + TLS1_V: 'TLS 1.0', + TLS11_V: 'TLS 1.1', + TLS12_V: 'TLS 1.2' +} + +SSL3_VERSION_BYTES = set(('\x03\x00', '\x03\x01', '\x03\x02', '\x03\x03')) + + +# Alert levels +SSL3_AD_WARNING = 1 +SSL3_AD_FATAL = 2 +alert_level_str = { + SSL3_AD_WARNING: 'SSL3_AD_WARNING', + SSL3_AD_FATAL: 'SSL3_AD_FATAL' +} + +# SSL3 alert descriptions +SSL3_AD_CLOSE_NOTIFY = 0 +SSL3_AD_UNEXPECTED_MESSAGE = 10 # fatal +SSL3_AD_BAD_RECORD_MAC = 20 # fatal +SSL3_AD_DECOMPRESSION_FAILURE = 30 # fatal +SSL3_AD_HANDSHAKE_FAILURE = 40 # fatal +SSL3_AD_NO_CERTIFICATE = 41 +SSL3_AD_BAD_CERTIFICATE = 42 +SSL3_AD_UNSUPPORTED_CERTIFICATE = 43 +SSL3_AD_CERTIFICATE_REVOKED = 44 +SSL3_AD_CERTIFICATE_EXPIRED = 45 +SSL3_AD_CERTIFICATE_UNKNOWN = 46 +SSL3_AD_ILLEGAL_PARAMETER = 47 # fatal + +# TLS1 alert descriptions +TLS1_AD_DECRYPTION_FAILED = 21 +TLS1_AD_RECORD_OVERFLOW = 22 +TLS1_AD_UNKNOWN_CA = 48 # fatal +TLS1_AD_ACCESS_DENIED = 49 # fatal +TLS1_AD_DECODE_ERROR = 50 # fatal +TLS1_AD_DECRYPT_ERROR = 51 +TLS1_AD_EXPORT_RESTRICTION = 60 # fatal +TLS1_AD_PROTOCOL_VERSION = 70 # fatal +TLS1_AD_INSUFFICIENT_SECURITY = 71 # fatal +TLS1_AD_INTERNAL_ERROR = 80 # fatal +TLS1_AD_USER_CANCELLED = 90 +TLS1_AD_NO_RENEGOTIATION = 100 +# /* codes 110-114 are from RFC3546 */ +TLS1_AD_UNSUPPORTED_EXTENSION = 110 +TLS1_AD_CERTIFICATE_UNOBTAINABLE = 111 +TLS1_AD_UNRECOGNIZED_NAME = 112 +TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE = 113 +TLS1_AD_BAD_CERTIFICATE_HASH_VALUE = 114 +TLS1_AD_UNKNOWN_PSK_IDENTITY = 115 # fatal + + +# Mapping alert types to strings +alert_description_str = { + SSL3_AD_CLOSE_NOTIFY: 'SSL3_AD_CLOSE_NOTIFY', + SSL3_AD_UNEXPECTED_MESSAGE: 'SSL3_AD_UNEXPECTED_MESSAGE', + SSL3_AD_BAD_RECORD_MAC: 'SSL3_AD_BAD_RECORD_MAC', + SSL3_AD_DECOMPRESSION_FAILURE: 'SSL3_AD_DECOMPRESSION_FAILURE', + SSL3_AD_HANDSHAKE_FAILURE: 'SSL3_AD_HANDSHAKE_FAILURE', + SSL3_AD_NO_CERTIFICATE: 'SSL3_AD_NO_CERTIFICATE', + SSL3_AD_BAD_CERTIFICATE: 'SSL3_AD_BAD_CERTIFICATE', + SSL3_AD_UNSUPPORTED_CERTIFICATE: 'SSL3_AD_UNSUPPORTED_CERTIFICATE', + SSL3_AD_CERTIFICATE_REVOKED: 'SSL3_AD_CERTIFICATE_REVOKED', + SSL3_AD_CERTIFICATE_EXPIRED: 'SSL3_AD_CERTIFICATE_EXPIRED', + SSL3_AD_CERTIFICATE_UNKNOWN: 'SSL3_AD_CERTIFICATE_UNKNOWN', + SSL3_AD_ILLEGAL_PARAMETER: 'SSL3_AD_ILLEGAL_PARAMETER', + TLS1_AD_DECRYPTION_FAILED: 'TLS1_AD_DECRYPTION_FAILED', + TLS1_AD_RECORD_OVERFLOW: 'TLS1_AD_RECORD_OVERFLOW', + TLS1_AD_UNKNOWN_CA: 'TLS1_AD_UNKNOWN_CA', + TLS1_AD_ACCESS_DENIED: 'TLS1_AD_ACCESS_DENIED', + TLS1_AD_DECODE_ERROR: 'TLS1_AD_DECODE_ERROR', + TLS1_AD_DECRYPT_ERROR: 'TLS1_AD_DECRYPT_ERROR', + TLS1_AD_EXPORT_RESTRICTION: 'TLS1_AD_EXPORT_RESTRICTION', + TLS1_AD_PROTOCOL_VERSION: 'TLS1_AD_PROTOCOL_VERSION', + TLS1_AD_INSUFFICIENT_SECURITY: 'TLS1_AD_INSUFFICIENT_SECURITY', + TLS1_AD_INTERNAL_ERROR: 'TLS1_AD_INTERNAL_ERROR', + TLS1_AD_USER_CANCELLED: 'TLS1_AD_USER_CANCELLED', + TLS1_AD_NO_RENEGOTIATION: 'TLS1_AD_NO_RENEGOTIATION', + TLS1_AD_UNSUPPORTED_EXTENSION: 'TLS1_AD_UNSUPPORTED_EXTENSION', + TLS1_AD_CERTIFICATE_UNOBTAINABLE: 'TLS1_AD_CERTIFICATE_UNOBTAINABLE', + TLS1_AD_UNRECOGNIZED_NAME: 'TLS1_AD_UNRECOGNIZED_NAME', + TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 'TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE', + TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 'TLS1_AD_BAD_CERTIFICATE_HASH_VALUE', + TLS1_AD_UNKNOWN_PSK_IDENTITY: 'TLS1_AD_UNKNOWN_PSK_IDENTITY' +} + + +# struct format strings for parsing buffer lengths +# don't forget, you have to pad a 3-byte value with \x00 +_SIZE_FORMATS = ['!B', '!H', '!I', '!I'] + + +def parse_variable_array(buf, lenbytes): + """ + Parse an array described using the 'Type name' syntax from the spec + Read a length at the start of buf, and returns that many bytes + after, in a tuple with the TOTAL bytes consumed (including the size). This + does not check that the array is the right length for any given datatype. + """ + # first have to figure out how to parse length + assert lenbytes <= 4 # pretty sure 4 is impossible, too + size_format = _SIZE_FORMATS[lenbytes - 1] + padding = '\x00' if lenbytes == 3 else '' + # read off the length + size = struct.unpack(size_format, padding + buf[:lenbytes])[0] + # read the actual data + data = buf[lenbytes:lenbytes + size] + # if len(data) != size: insufficient data + return data, size + lenbytes + + +class SSL3Exception(Exception): + pass + + +class TLSRecord(dpkt.Packet): + + """ + SSLv3 or TLSv1+ packet. + + In addition to the fields specified in the header, there are + compressed and decrypted fields, indicating whether, in the language + of the spec, this is a TLSPlaintext, TLSCompressed, or + TLSCiphertext. The application will have to figure out when it's + appropriate to change these values. + """ + + __hdr__ = ( + ('type', 'B', 0), + ('version', 'H', 0), + ('length', 'H', 0), + ) + + def __init__(self, *args, **kwargs): + # assume plaintext unless specified otherwise in arguments + self.compressed = kwargs.pop('compressed', False) + self.encrypted = kwargs.pop('encrypted', False) + # parent constructor + dpkt.Packet.__init__(self, *args, **kwargs) + # make sure length and data are consistent + self.length = len(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + header_length = self.__hdr_len__ + self.data = buf[header_length:header_length + self.length] + # make sure buffer was long enough + if len(self.data) != self.length: + raise dpkt.NeedData('TLSRecord data was too short.') + # assume compressed and encrypted when it's been parsed from + # raw data + self.compressed = True + self.encrypted = True + + +class TLSChangeCipherSpec(dpkt.Packet): + + """ + ChangeCipherSpec message is just a single byte with value 1 + """ + + __hdr__ = (('type', 'B', 1),) + + +class TLSAppData(str): + + """ + As far as TLSRecord is concerned, AppData is just an opaque blob. + """ + + pass + + +class TLSAlert(dpkt.Packet): + __hdr__ = ( + ('level', 'B', 1), + ('description', 'B', 0), + ) + + +class TLSHelloRequest(dpkt.Packet): + __hdr__ = tuple() + + +class TLSClientHello(dpkt.Packet): + __hdr__ = ( + ('version', 'H', 0x0301), + ('random', '32s', '\x00' * 32), + ) # the rest is variable-length and has to be done manually + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + # now session, cipher suites, extensions are in self.data + self.session_id, pointer = parse_variable_array(self.data, 1) + # print 'pointer',pointer + # handle ciphersuites + ciphersuites, parsed = parse_variable_array(self.data[pointer:], 2) + pointer += parsed + self.num_ciphersuites = len(ciphersuites) / 2 + # check len(ciphersuites) % 2 == 0 ? + # compression methods + compression_methods, parsed = parse_variable_array( + self.data[pointer:], 1) + pointer += parsed + self.num_compression_methods = parsed - 1 + self.compression_methods = map(ord, compression_methods) + # extensions + + +class TLSServerHello(dpkt.Packet): + __hdr__ = ( + ('version', 'H', '0x0301'), + ('random', '32s', '\x00' * 32), + ) # session is variable, forcing rest to be manual + + def unpack(self, buf): + try: + dpkt.Packet.unpack(self, buf) + self.session_id, pointer = parse_variable_array(self.data, 1) + # single cipher suite + self.cipher_suite = struct.unpack('!H', self.data[pointer:pointer + 2])[0] + pointer += 2 + # single compression method + self.compression = struct.unpack('!B', self.data[pointer:pointer + 1])[0] + pointer += 1 + # ignore extensions for now + except struct.error: + # probably data too short + raise dpkt.NeedData + + +class TLSUnknownHandshake(dpkt.Packet): + __hdr__ = tuple() + + +TLSCertificate = TLSUnknownHandshake +TLSServerKeyExchange = TLSUnknownHandshake +TLSCertificateRequest = TLSUnknownHandshake +TLSServerHelloDone = TLSUnknownHandshake +TLSCertificateVerify = TLSUnknownHandshake +TLSClientKeyExchange = TLSUnknownHandshake +TLSFinished = TLSUnknownHandshake + + +# mapping of handshake type ids to their names +# and the classes that implement them +HANDSHAKE_TYPES = { + 0: ('HelloRequest', TLSHelloRequest), + 1: ('ClientHello', TLSClientHello), + 2: ('ServerHello', TLSServerHello), + 11: ('Certificate', TLSCertificate), + 12: ('ServerKeyExchange', TLSServerKeyExchange), + 13: ('CertificateRequest', TLSCertificateRequest), + 14: ('ServerHelloDone', TLSServerHelloDone), + 15: ('CertificateVerify', TLSCertificateVerify), + 16: ('ClientKeyExchange', TLSClientKeyExchange), + 20: ('Finished', TLSFinished), +} + + +class TLSHandshake(dpkt.Packet): + + """ + A TLS Handshake message + + This goes for all messages encapsulated in the Record layer, but especially + important for handshakes and app data: A message may be spread across a + number of TLSRecords, in addition to the possibility of there being more + than one in a given Record. You have to put together the contents of + TLSRecord's yourself. + """ + + # struct.unpack can't handle the 3-byte int, so we parse it as bytes + # (and store it as bytes so dpkt doesn't get confused), and turn it into + # an int in a user-facing property + __hdr__ = ( + ('type', 'B', 0), + ('length_bytes', '3s', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + # Wait, might there be more than one message of self.type? + embedded_type = HANDSHAKE_TYPES.get(self.type, None) + if embedded_type is None: + raise SSL3Exception('Unknown or invalid handshake type %d' % + self.type) + # only take the right number of bytes + self.data = self.data[:self.length] + if len(self.data) != self.length: + raise dpkt.NeedData + # get class out of embedded_type tuple + self.data = embedded_type[1](self.data) + + @property + def length(self): + return struct.unpack('!I', '\x00' + self.length_bytes)[0] + + +RECORD_TYPES = { + 20: TLSChangeCipherSpec, + 21: TLSAlert, + 22: TLSHandshake, + 23: TLSAppData, +} + + +class SSLFactory(object): + def __new__(cls, buf): + v = buf[1:3] + if v in SSL3_VERSION_BYTES: + return TLSRecord(buf) + # SSL2 has no characteristic header or magic bytes, so we just assume + # that the msg is an SSL2 msg if it is not detected as SSL3+ + return SSL2(buf) + + +def tls_multi_factory(buf): + """ + Attempt to parse one or more TLSRecord's out of buf + + Args: + buf: string containing SSL/TLS messages. May have an incomplete record + on the end + + Returns: + [TLSRecord] + int, total bytes consumed, != len(buf) if an incomplete record was left at + the end. + + Raises SSL3Exception. + """ + i, n = 0, len(buf) + msgs = [] + while i < n: + v = buf[i + 1:i + 3] + if v in SSL3_VERSION_BYTES: + try: + msg = TLSRecord(buf[i:]) + msgs.append(msg) + except dpkt.NeedData: + break + else: + raise SSL3Exception('Bad TLS version in buf: %r' % buf[i:i + 5]) + i += len(msg) + return msgs, i + +_hexdecode = binascii.a2b_hex + + +class TestTLSRecord(object): + + """ + Test basic TLSRecord functionality + For this test, the contents of the record doesn't matter, since we're not parsing the next layer. + """ + + @classmethod + def setup_class(cls): + # add some extra data, to make sure length is parsed correctly + cls.p = TLSRecord('\x17\x03\x01\x00\x08abcdefghzzzzzzzzzzz') + + def test_content_type(self): + assert (self.p.type == 23) + + def test_version(self): + assert (self.p.version == 0x0301) + + def test_length(self): + assert (self.p.length == 8) + + def test_data(self): + assert (self.p.data == 'abcdefgh') + + def test_initial_flags(self): + assert (self.p.compressed == True) + assert (self.p.encrypted == True) + + def test_repack(self): + p2 = TLSRecord(type=23, version=0x0301, data='abcdefgh') + assert (p2.type == 23) + assert (p2.version == 0x0301) + assert (p2.length == 8) + assert (p2.data == 'abcdefgh') + assert (p2.pack() == self.p.pack()) + + def test_total_length(self): + # that len(p) includes header + assert (len(self.p) == 13) + + def test_raises_need_data_when_buf_is_short(self): + import pytest + pytest.raises(dpkt.NeedData, TLSRecord, '\x16\x03\x01\x00\x10abc') + + +class TestTLSChangeCipherSpec(object): + + """It's just a byte. This will be quick, I promise""" + + @classmethod + def setup_class(cls): + cls.p = TLSChangeCipherSpec('\x01') + + def test_parses(self): + assert (self.p.type == 1) + + def test_total_length(self): + assert (len(self.p) == 1) + + +class TestTLSAppData(object): + + """AppData is basically just a string""" + + def test_value(self): + d = TLSAppData('abcdefgh') + assert (d == 'abcdefgh') + + +class TestTLSHandshake(object): + @classmethod + def setup_class(cls): + cls.h = TLSHandshake('\x00\x00\x00\x01\xff') + + def test_created_inside_message(self): + assert (isinstance(self.h.data, TLSHelloRequest) == True) + + def test_length(self): + assert (self.h.length == 0x01) + + def test_raises_need_data(self): + import pytest + pytest.raises(dpkt.NeedData, TLSHandshake, '\x00\x00\x01\x01') + + +class TestClientHello(object): + + """This data is extracted from and verified by Wireshark""" + + @classmethod + def setup_class(cls): + cls.data = _hexdecode( + "01000199" # handshake header + "0301" # version + "5008220ce5e0e78b6891afe204498c9363feffbe03235a2d9e05b7d990eb708d" # rand + "2009bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed1" # session id + # cipher suites + "005400ffc00ac0140088008700390038c00fc00500840035c007c009c011c0130045004400330032c00cc00ec002c0040096004100050004002fc008c01200160013c00dc003feff000ac006c010c00bc00100020001" + "0100" # compresssion methods + # extensions + "00fc0000000e000c0000096c6f63616c686f7374000a00080006001700180019000b00020100002300d0a50b2e9f618a9ea9bf493ef49b421835cd2f6b05bbe1179d8edf70d58c33d656e8696d36d7e7e0b9d3ecc0e4de339552fa06c64c0fcb550a334bc43944e2739ca342d15a9ebbe981ac87a0d38160507d47af09bdc16c5f0ee4cdceea551539382333226048a026d3a90a0535f4a64236467db8fee22b041af986ad0f253bc369137cd8d8cd061925461d7f4d7895ca9a4181ab554dad50360ac31860e971483877c9335ac1300c5e78f3e56f3b8e0fc16358fcaceefd5c8d8aaae7b35be116f8832856ca61144fcdd95e071b94d0cf7233740000" + "FFFFFFFFFFFFFFFF") # random garbage + cls.p = TLSHandshake(cls.data) + + def test_client_hello_constructed(self): + """Make sure the correct class was constructed""" + # print self.p + assert (isinstance(self.p.data, TLSClientHello) == True) + + # def testClientDateCorrect(self): + # self.assertEqual(self.p.random_unixtime, 1342710284) + + def test_client_random_correct(self): + assert (self.p.data.random == _hexdecode('5008220ce5e0e78b6891afe204498c9363feffbe03235a2d9e05b7d990eb708d')) + + def test_cipher_suite_length(self): + # we won't bother testing the identity of each cipher suite in the list. + assert (self.p.data.num_ciphersuites == 42) + # self.assertEqual(len(self.p.ciphersuites), 42) + + def test_session_id(self): + assert (self.p.data.session_id == _hexdecode('09bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed1')) + + def test_compression_methods(self): + assert (self.p.data.num_compression_methods == 1) + + def test_total_length(self): + assert (len(self.p) == 413) + + +class TestServerHello(object): + + """Again, from Wireshark""" + + @classmethod + def setup_class(cls): + cls.data = _hexdecode( + '0200004d03015008220c8ec43c5462315a7c99f5d5b6bff009ad285b51dc18485f352e9fdecd2009bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed10002000005ff01000100') + cls.p = TLSHandshake(cls.data) + + def test_constructed(self): + assert (isinstance(self.p.data, TLSServerHello) == True) + + # def testDateCorrect(self): + # self.assertEqual(self.p.random_unixtime, 1342710284) + + def test_random_correct(self): + assert (self.p.data.random == _hexdecode('5008220c8ec43c5462315a7c99f5d5b6bff009ad285b51dc18485f352e9fdecd')) + + def test_cipher_suite(self): + assert (ssl_ciphersuites.BY_CODE[self.p.data.cipher_suite].name == 'TLS_RSA_WITH_NULL_SHA') + + def test_total_length(self): + assert (len(self.p) == 81) + + +class TestTLSMultiFactory(object): + + """Made up test data""" + + @classmethod + def setup_class(cls): + cls.data = _hexdecode('1703010010' # header 1 + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' # data 1 + '1703010010' # header 2 + 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' # data 2 + '1703010010' # header 3 + 'CCCCCCCC') # data 3 (incomplete) + cls.msgs, cls.bytes_parsed = tls_multi_factory(cls.data) + + def test_num_messages(self): + # only complete messages should be parsed, incomplete ones left + # in buffer + assert (len(self.msgs) == 2) + + def test_bytes_parsed(self): + assert (self.bytes_parsed == (5 + 16) * 2) + + def test_first_msg_data(self): + assert (self.msgs[0].data == _hexdecode('AA' * 16)) + + def test_second_msg_data(self): + assert (self.msgs[1].data == _hexdecode('BB' * 16)) + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py new file mode 100644 index 00000000..d5ee1b9d --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py @@ -0,0 +1,76 @@ +# Copyright 2012 Google Inc. All rights reserved. +# -*- coding: utf-8 -*- +""" +Nicely formatted cipher suite definitions for TLS + +A list of cipher suites in the form of CipherSuite objects. +These are supposed to be immutable; don't mess with them. +""" + + +class CipherSuite(object): + """ + Encapsulates a cipher suite. + + Members/args: + * code: two-byte ID code, as int + * name: as in 'TLS_RSA_WITH_RC4_40_MD5' + * kx: key exchange algorithm, string + * auth: authentication algorithm, string + * encoding: encoding algorithm + * mac: message authentication code algorithm + """ + + def __init__(self, code, name, kx, auth, encoding, mac): + self.code = code + self.name = name + self.kx = kx + self.auth = auth + self.encoding = encoding + self.mac = mac + + def __repr__(self): + return 'CipherSuite(%s)' % self.name + + MAC_SIZES = { + 'MD5': 16, + 'SHA': 20, + 'SHA256': 32, # I guess + } + + BLOCK_SIZES = { + 'AES_256_CBC': 16, + } + + @property + def mac_size(self): + """In bytes. Default to 0.""" + return self.MAC_SIZES.get(self.mac, 0) + + @property + def block_size(self): + """In bytes. Default to 1.""" + return self.BLOCK_SIZES.get(self.encoding, 1) + + +# master list of CipherSuite Objects +CIPHERSUITES = [ + # not a real cipher suite, can be ignored, see RFC5746 + CipherSuite(0xff, 'TLS_EMPTY_RENEGOTIATION_INFO', + 'NULL', 'NULL', 'NULL', 'NULL'), + CipherSuite(0x00, 'TLS_NULL_WITH_NULL_NULL', + 'NULL', 'NULL', 'NULL', 'NULL'), + CipherSuite(0x01, 'TLS_RSA_WITH_NULL_MD5', 'RSA', 'RSA', 'NULL', 'MD5'), + CipherSuite(0x02, 'TLS_RSA_WITH_NULL_SHA', 'RSA', 'RSA', 'NULL', 'SHA'), + CipherSuite(0x0039, 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA', + 'DHE', 'RSA', 'AES_256_CBC', 'SHA'), # not sure I got the kx/auth thing right. + CipherSuite(0xffff, 'UNKNOWN_CIPHER', '', '', '', '') +] + +BY_CODE = dict( + (cipher.code, cipher) for cipher in CIPHERSUITES) + +BY_NAME = dict( + (suite.name, suite) for suite in CIPHERSUITES) + +NULL_SUITE = BY_CODE[0x00] diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stp.py new file mode 100644 index 00000000..382318a4 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stp.py @@ -0,0 +1,22 @@ +# $Id: stp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Spanning Tree Protocol.""" + +import dpkt + + +class STP(dpkt.Packet): + __hdr__ = ( + ('proto_id', 'H', 0), + ('v', 'B', 0), + ('type', 'B', 0), + ('flags', 'B', 0), + ('root_id', '8s', ''), + ('root_path', 'I', 0), + ('bridge_id', '8s', ''), + ('port_id', 'H', 0), + ('age', 'H', 0), + ('max_age', 'H', 0), + ('hello', 'H', 0), + ('fd', 'H', 0) + ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stun.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stun.py new file mode 100644 index 00000000..e371350c --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stun.py @@ -0,0 +1,47 @@ +# $Id: stun.py 47 2008-05-27 02:10:00Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Simple Traversal of UDP through NAT.""" + +import struct +import dpkt + +# STUN - RFC 3489 +# http://tools.ietf.org/html/rfc3489 +# Each packet has a 20 byte header followed by 0 or more attribute TLVs. + +# Message Types +BINDING_REQUEST = 0x0001 +BINDING_RESPONSE = 0x0101 +BINDING_ERROR_RESPONSE = 0x0111 +SHARED_SECRET_REQUEST = 0x0002 +SHARED_SECRET_RESPONSE = 0x0102 +SHARED_SECRET_ERROR_RESPONSE = 0x0112 + +# Message Attributes +MAPPED_ADDRESS = 0x0001 +RESPONSE_ADDRESS = 0x0002 +CHANGE_REQUEST = 0x0003 +SOURCE_ADDRESS = 0x0004 +CHANGED_ADDRESS = 0x0005 +USERNAME = 0x0006 +PASSWORD = 0x0007 +MESSAGE_INTEGRITY = 0x0008 +ERROR_CODE = 0x0009 +UNKNOWN_ATTRIBUTES = 0x000a +REFLECTED_FROM = 0x000b + + +class STUN(dpkt.Packet): + __hdr__ = ( + ('type', 'H', 0), + ('len', 'H', 0), + ('xid', '16s', 0) + ) + + +def tlv(buf): + n = 4 + t, l = struct.unpack('>HH', buf[:n]) + v = buf[n:n + l] + buf = buf[n + l:] + return t, l, v, buf diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tcp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tcp.py new file mode 100644 index 00000000..fe1a3b97 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tcp.py @@ -0,0 +1,152 @@ +# $Id: tcp.py 42 2007-08-02 22:38:47Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Transmission Control Protocol.""" + +import dpkt +from decorators import deprecated + +# TCP control flags +TH_FIN = 0x01 # end of data +TH_SYN = 0x02 # synchronize sequence numbers +TH_RST = 0x04 # reset connection +TH_PUSH = 0x08 # push +TH_ACK = 0x10 # acknowledgment number set +TH_URG = 0x20 # urgent pointer set +TH_ECE = 0x40 # ECN echo, RFC 3168 +TH_CWR = 0x80 # congestion window reduced + +TCP_PORT_MAX = 65535 # maximum port +TCP_WIN_MAX = 65535 # maximum (unscaled) window + + +class TCP(dpkt.Packet): + __hdr__ = ( + ('sport', 'H', 0xdead), + ('dport', 'H', 0), + ('seq', 'I', 0xdeadbeefL), + ('ack', 'I', 0), + ('off_x2', 'B', ((5 << 4) | 0)), + ('flags', 'B', TH_SYN), + ('win', 'H', TCP_WIN_MAX), + ('sum', 'H', 0), + ('urp', 'H', 0) + ) + opts = '' + + @property + def off(self): return self.off_x2 >> 4 + + @off.setter + def off(self, off): self.off_x2 = (off << 4) | (self.off_x2 & 0xf) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_off(self): return self.off + + @deprecated + def _set_off(self, off): self.off = off + # ================================================= + + def __len__(self): + return self.__hdr_len__ + len(self.opts) + len(self.data) + + def __str__(self): + return self.pack_hdr() + self.opts + str(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + ol = ((self.off_x2 >> 4) << 2) - self.__hdr_len__ + if ol < 0: + raise dpkt.UnpackError, 'invalid header length' + self.opts = buf[self.__hdr_len__:self.__hdr_len__ + ol] + self.data = buf[self.__hdr_len__ + ol:] + +# Options (opt_type) - http://www.iana.org/assignments/tcp-parameters +TCP_OPT_EOL = 0 # end of option list +TCP_OPT_NOP = 1 # no operation +TCP_OPT_MSS = 2 # maximum segment size +TCP_OPT_WSCALE = 3 # window scale factor, RFC 1072 +TCP_OPT_SACKOK = 4 # SACK permitted, RFC 2018 +TCP_OPT_SACK = 5 # SACK, RFC 2018 +TCP_OPT_ECHO = 6 # echo (obsolete), RFC 1072 +TCP_OPT_ECHOREPLY = 7 # echo reply (obsolete), RFC 1072 +TCP_OPT_TIMESTAMP = 8 # timestamp, RFC 1323 +TCP_OPT_POCONN = 9 # partial order conn, RFC 1693 +TCP_OPT_POSVC = 10 # partial order service, RFC 1693 +TCP_OPT_CC = 11 # connection count, RFC 1644 +TCP_OPT_CCNEW = 12 # CC.NEW, RFC 1644 +TCP_OPT_CCECHO = 13 # CC.ECHO, RFC 1644 +TCP_OPT_ALTSUM = 14 # alt checksum request, RFC 1146 +TCP_OPT_ALTSUMDATA = 15 # alt checksum data, RFC 1146 +TCP_OPT_SKEETER = 16 # Skeeter +TCP_OPT_BUBBA = 17 # Bubba +TCP_OPT_TRAILSUM = 18 # trailer checksum +TCP_OPT_MD5 = 19 # MD5 signature, RFC 2385 +TCP_OPT_SCPS = 20 # SCPS capabilities +TCP_OPT_SNACK = 21 # selective negative acks +TCP_OPT_REC = 22 # record boundaries +TCP_OPT_CORRUPT = 23 # corruption experienced +TCP_OPT_SNAP = 24 # SNAP +TCP_OPT_TCPCOMP = 26 # TCP compression filter +TCP_OPT_MAX = 27 + + +def parse_opts(buf): + """Parse TCP option buffer into a list of (option, data) tuples.""" + opts = [] + while buf: + o = ord(buf[0]) + if o > TCP_OPT_NOP: + try: + # advance buffer at least 2 bytes = 1 type + 1 length + l = max(2, ord(buf[1])) + d, buf = buf[2:l], buf[l:] + except (IndexError, ValueError): + # print 'bad option', repr(str(buf)) + opts.append(None) # XXX + break + else: + # options 0 and 1 are not followed by length byte + d, buf = '', buf[1:] + opts.append((o, d)) + return opts + + +def test_parse_opts(): + # normal scenarios + buf = '\x02\x04\x23\x00\x01\x01\x04\x02' + opts = parse_opts(buf) + assert opts == [ + (TCP_OPT_MSS, '\x23\x00'), + (TCP_OPT_NOP, ''), + (TCP_OPT_NOP, ''), + (TCP_OPT_SACKOK, '') + ] + + buf = '\x01\x01\x05\x0a\x37\xf8\x19\x70\x37\xf8\x29\x78' + opts = parse_opts(buf) + assert opts == [ + (TCP_OPT_NOP, ''), + (TCP_OPT_NOP, ''), + (TCP_OPT_SACK, '\x37\xf8\x19\x70\x37\xf8\x29\x78') + ] + + # test a zero-length option + buf = '\x02\x00\x01' + opts = parse_opts(buf) + assert opts == [ + (TCP_OPT_MSS, ''), + (TCP_OPT_NOP, '') + ] + + # test a one-byte malformed option + buf = '\xff' + opts = parse_opts(buf) + assert opts == [None] + + +if __name__ == '__main__': + # Runs all the test associated with this class/file + test_parse_opts() + print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/telnet.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/telnet.py new file mode 100644 index 00000000..9a1d7f4c --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/telnet.py @@ -0,0 +1,80 @@ +# $Id: telnet.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Telnet.""" + +IAC = 255 # interpret as command: +DONT = 254 # you are not to use option +DO = 253 # please, you use option +WONT = 252 # I won't use option +WILL = 251 # I will use option +SB = 250 # interpret as subnegotiation +GA = 249 # you may reverse the line +EL = 248 # erase the current line +EC = 247 # erase the current character +AYT = 246 # are you there +AO = 245 # abort output--but let prog finish +IP = 244 # interrupt process--permanently +BREAK = 243 # break +DM = 242 # data mark--for connect. cleaning +NOP = 241 # nop +SE = 240 # end sub negotiation +EOR = 239 # end of record (transparent mode) +ABORT = 238 # Abort process +SUSP = 237 # Suspend process +xEOF = 236 # End of file: EOF is already used... + +SYNCH = 242 # for telfunc calls + + +def strip_options(buf): + """Return a list of lines and dict of options from telnet data.""" + l = buf.split(chr(IAC)) + # print l + b = [] + d = {} + subopt = False + for w in l: + if not w: + continue + o = ord(w[0]) + if o > SB: + # print 'WILL/WONT/DO/DONT/IAC', `w` + w = w[2:] + elif o == SE: + # print 'SE', `w` + w = w[1:] + subopt = False + elif o == SB: + # print 'SB', `w` + subopt = True + for opt in ('USER', 'DISPLAY', 'TERM'): + p = w.find(opt + '\x01') + if p != -1: + d[opt] = w[p + len(opt) + 1:].split('\x00', 1)[0] + w = None + elif subopt: + w = None + if w: + w = w.replace('\x00', '\n').splitlines() + if not w[-1]: w.pop() + b.extend(w) + return b, d + + +def test_telnet(): + l = [] + s = "\xff\xfb%\xff\xfa%\x00\x00\x00\xff\xf0\xff\xfd&\xff\xfa&\x05\xff\xf0\xff\xfa&\x01\x01\x02\xff\xf0\xff\xfb\x18\xff\xfb \xff\xfb#\xff\xfb'\xff\xfc$\xff\xfa \x0038400,38400\xff\xf0\xff\xfa#\x00doughboy.citi.umich.edu:0.0\xff\xf0\xff\xfa'\x00\x00DISPLAY\x01doughboy.citi.umich.edu:0.0\x00USER\x01dugsong\xff\xf0\xff\xfa\x18\x00XTERM\xff\xf0\xff\xfd\x03\xff\xfc\x01\xff\xfb\x1f\xff\xfa\x1f\x00P\x00(\xff\xf0\xff\xfd\x05\xff\xfb!\xff\xfd\x01fugly\r\x00yoda\r\x00bashtard\r\x00" + l.append(s) + s = '\xff\xfd\x01\xff\xfd\x03\xff\xfb\x18\xff\xfb\x1f\xff\xfa\x1f\x00X\x002\xff\xf0admin\r\x00\xff\xfa\x18\x00LINUX\xff\xf0foobar\r\x00enable\r\x00foobar\r\x00\r\x00show ip int Vlan 666\r\x00' + l.append(s) + s = '\xff\xfb%\xff\xfa%\x00\x00\x00\xff\xf0\xff\xfd&\xff\xfa&\x05\xff\xf0\xff\xfa&\x01\x01\x02\xff\xf0\xff\xfb&\xff\xfb\x18\xff\xfb \xff\xfb#\xff\xfb\'\xff\xfc$\xff\xfa \x0038400,38400\xff\xf0\xff\xfa#\x00doughboy.citi.umich.edu:0.0\xff\xf0\xff\xfa\'\x00\x00DISPLAY\x01doughboy.citi.umich.edu:0.0\x00USER\x01dugsong\xff\xf0\xff\xfa\x18\x00XTERM\xff\xf0\xff\xfd\x03\xff\xfc\x01\xff\xfb"\xff\xfa"\x03\x01\x03\x00\x03b\x03\x04\x02\x0f\x05\x00\xff\xff\x07b\x1c\x08\x02\x04\tB\x1a\n\x02\x7f\x0b\x02\x15\x0c\x02\x17\r\x02\x12\x0e\x02\x16\x0f\x02\x11\x10\x02\x13\x11\x00\xff\xff\x12\x00\xff\xff\xff\xf0\xff\xfb\x1f\xff\xfa\x1f\x00P\x00(\xff\xf0\xff\xfd\x05\xff\xfb!\xff\xfa"\x01\x0f\xff\xf0\xff\xfd\x01\xff\xfe\x01\xff\xfa"\x03\x01\x80\x00\xff\xf0\xff\xfd\x01werd\r\n\xff\xfe\x01yoda\r\n\xff\xfd\x01darthvader\r\n\xff\xfe\x01' + l.append(s) + exp = [(['fugly', 'yoda', 'bashtard'], {'USER': 'dugsong', 'DISPLAY': 'doughboy.citi.umich.edu:0.0'}), + (['admin', 'foobar', 'enable', 'foobar', '', 'show ip int Vlan 666'], {}), + (['werd', 'yoda', 'darthvader'], {'USER': 'dugsong', 'DISPLAY': 'doughboy.citi.umich.edu:0.0'})] + assert (map(strip_options, l) == exp) + + +if __name__ == '__main__': + test_telnet() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tftp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tftp.py new file mode 100644 index 00000000..928ee1e3 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tftp.py @@ -0,0 +1,56 @@ +# $Id: tftp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Trivial File Transfer Protocol.""" + +import struct +import dpkt + +# Opcodes +OP_RRQ = 1 # read request +OP_WRQ = 2 # write request +OP_DATA = 3 # data packet +OP_ACK = 4 # acknowledgment +OP_ERR = 5 # error code + +# Error codes +EUNDEF = 0 # not defined +ENOTFOUND = 1 # file not found +EACCESS = 2 # access violation +ENOSPACE = 3 # disk full or allocation exceeded +EBADOP = 4 # illegal TFTP operation +EBADID = 5 # unknown transfer ID +EEXISTS = 6 # file already exists +ENOUSER = 7 # no such user + + +class TFTP(dpkt.Packet): + __hdr__ = (('opcode', 'H', 1), ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.opcode in (OP_RRQ, OP_WRQ): + l = self.data.split('\x00') + self.filename = l[0] + self.mode = l[1] + self.data = '' + elif self.opcode in (OP_DATA, OP_ACK): + self.block = struct.unpack('>H', self.data[:2]) + self.data = self.data[2:] + elif self.opcode == OP_ERR: + self.errcode = struct.unpack('>H', self.data[:2]) + self.errmsg = self.data[2:].split('\x00')[0] + self.data = '' + + def __len__(self): + return len(str(self)) + + def __str__(self): + if self.opcode in (OP_RRQ, OP_WRQ): + s = '%s\x00%s\x00' % (self.filename, self.mode) + elif self.opcode in (OP_DATA, OP_ACK): + s = struct.pack('>H', self.block) + elif self.opcode == OP_ERR: + s = struct.pack('>H', self.errcode) + ('%s\x00' % self.errmsg) + else: + s = '' + return self.pack_hdr() + s + self.data diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tns.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tns.py new file mode 100644 index 00000000..931508e6 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tns.py @@ -0,0 +1,26 @@ +# $Id: tns.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Transparent Network Substrate.""" + +import dpkt + + +class TNS(dpkt.Packet): + __hdr__ = ( + ('length', 'H', 0), + ('pktsum', 'H', 0), + ('type', 'B', 0), + ('rsvd', 'B', 0), + ('hdrsum', 'H', 0), + ('msg', '0s', ''), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + n = self.length - self.__hdr_len__ + if n > len(self.data): + raise dpkt.NeedData('short message (missing %d bytes)' % + (n - len(self.data))) + self.msg = self.data[:n] + self.data = self.data[n:] + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tpkt.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tpkt.py new file mode 100644 index 00000000..d235833b --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tpkt.py @@ -0,0 +1,16 @@ +# $Id: tpkt.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""ISO Transport Service on top of the TCP (TPKT).""" + +import dpkt + +# TPKT - RFC 1006 Section 6 +# http://www.faqs.org/rfcs/rfc1006.html + + +class TPKT(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 3), + ('rsvd', 'B', 0), + ('len', 'H', 0) + ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/udp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/udp.py new file mode 100644 index 00000000..41a00e78 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/udp.py @@ -0,0 +1,17 @@ +# $Id: udp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""User Datagram Protocol.""" + +import dpkt + +UDP_HDR_LEN = 8 +UDP_PORT_MAX = 65535 + + +class UDP(dpkt.Packet): + __hdr__ = ( + ('sport', 'H', 0xdead), + ('dport', 'H', 0), + ('ulen', 'H', 8), + ('sum', 'H', 0) + ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/vrrp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/vrrp.py new file mode 100644 index 00000000..6bdff005 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/vrrp.py @@ -0,0 +1,70 @@ +# $Id: vrrp.py 88 2013-03-05 19:43:17Z andrewflnr@gmail.com $ +# -*- coding: utf-8 -*- +"""Virtual Router Redundancy Protocol.""" + +import dpkt +from decorators import deprecated + + +class VRRP(dpkt.Packet): + __hdr__ = ( + ('vtype', 'B', 0x21), + ('vrid', 'B', 0), + ('priority', 'B', 0), + ('count', 'B', 0), + ('atype', 'B', 0), + ('advtime', 'B', 0), + ('sum', 'H', 0), + ) + addrs = () + auth = '' + + @property + def v(self): + return self.vtype >> 4 + + @v.setter + def v(self, v): + self.vtype = (self.vtype & ~0xf) | (v << 4) + + @property + def type(self): + return self.vtype & 0xf + + @type.setter + def type(self, v): + self.vtype = (self.vtype & ~0xf0) | (v & 0xf) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): return self.v + + @deprecated + def _set_v(self, v): self.v = v + + @deprecated + def _get_type(self): return self.type + + @deprecated + def _set_type(self, v): self.type = v + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + off = 0 + for off in range(0, 4 * self.count, 4): + l.append(self.data[off:off + 4]) + self.addrs = l + self.auth = self.data[off + 4:] + self.data = '' + + def __len__(self): + return self.__hdr_len__ + (4 * self.count) + len(self.auth) + + def __str__(self): + data = ''.join(self.addrs) + self.auth + if not self.sum: + self.sum = dpkt.in_cksum(self.pack_hdr() + data) + return self.pack_hdr() + data diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/yahoo.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/yahoo.py new file mode 100644 index 00000000..6b871115 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/yahoo.py @@ -0,0 +1,30 @@ +# $Id: yahoo.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Yahoo Messenger.""" + +import dpkt + + +class YHOO(dpkt.Packet): + __hdr__ = [ + ('version', '8s', ' ' * 8), + ('length', 'I', 0), + ('service', 'I', 0), + ('connid', 'I', 0), + ('magic', 'I', 0), + ('unknown', 'I', 0), + ('type', 'I', 0), + ('nick1', '36s', ' ' * 36), + ('nick2', '36s', ' ' * 36) + ] + __byte_order__ = '<' + + +class YMSG(dpkt.Packet): + __hdr__ = [ + ('version', '8s', ' ' * 8), + ('length', 'H', 0), + ('type', 'H', 0), + ('unknown1', 'I', 0), + ('unknown2', 'I', 0) + ] diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.cfg b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.cfg new file mode 100644 index 00000000..56ffc205 --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.cfg @@ -0,0 +1,20 @@ +[bdist_wheel] +universal = 1 + +[aliases] +release = register clean --all sdist bdist_wheel upload + +[flake8] +max-line-length = 140 + +[pytest] +addopts = -v --cov-report term-missing +python_files = *.py +python_functions = test +norecursedirs = .tox .git *.egg-info __pycache__ dist build + +[egg_info] +tag_build = +tag_date = 0 +tag_svn_revision = 0 + diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.py new file mode 100644 index 00000000..f77cd97e --- /dev/null +++ b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.py @@ -0,0 +1,67 @@ +import os +import sys + +try: + from setuptools import setup, Command +except ImportError: + from distutils.core import setup, Command + +package_name = 'dpkt' +description = 'fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols' +readme = open('README.rst').read() +requirements = [] + +# PyPI Readme +long_description = open('README.rst').read() + +# Pull in the package +package = __import__(package_name) + + +class BuildDebPackage(Command): + """Build a Debian Package out of this Python Package""" + try: + import stdeb + except ImportError as exc: + print 'To build a Debian Package you must install stdeb (pip install stdeb)' + + description = "Build a Debian Package out of this Python Package" + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + os.system('python setup.py sdist') + sdist_file = os.path.join(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'dist'), + package_name + '-' + package.__version__ + '.tar.gz') + print sdist_file + os.system('py2dsc-deb ' + sdist_file) + + +setup(name=package_name, + version=package.__version__, + author=package.__author__, + author_email=package.__author_email__, + url=package.__url__, + description=description, + long_description=long_description, + packages=['dpkt'], + install_requires=requirements, + license='BSD', + zip_safe=False, + classifiers=[ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: BSD License', + 'Natural Language :: English', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: Implementation :: CPython', + 'Programming Language :: Python :: Implementation :: PyPy', + ], + cmdclass={'debian': BuildDebPackage} +) diff --git a/scripts/automation/trex_control_plane/server/extended_daemon_runner.py b/scripts/automation/trex_control_plane/server/extended_daemon_runner.py index 07eedd9f..a9b36e22 100755 --- a/scripts/automation/trex_control_plane/server/extended_daemon_runner.py +++ b/scripts/automation/trex_control_plane/server/extended_daemon_runner.py @@ -36,7 +36,7 @@ class ExtendedDaemonRunner(runner.DaemonRunner): help_menu = """Specify action command to be applied on server. (*) start : start the application in as a daemon process. - (*) show : prompt a updated status of daemon process (running/ not running). + (*) show : prompt an updated status of daemon process (running/ not running). (*) stop : exit the daemon process. (*) restart : stop, then start again the application as daemon process (*) start-live : start the application in live mode (no daemon process). -- cgit 1.2.3-korg From cdcc62972d42f009f55e6aeb2ca5c60c3acd75eb Mon Sep 17 00:00:00 2001 From: Dan Klein Date: Wed, 26 Aug 2015 14:27:43 +0300 Subject: added dpkt package, initial stateless client implementation --- external_libs/python/dpkt-1.8.6.2/AUTHORS | 60 ++ external_libs/python/dpkt-1.8.6.2/CHANGES | 71 ++ external_libs/python/dpkt-1.8.6.2/LICENSE | 28 + external_libs/python/dpkt-1.8.6.2/MANIFEST.in | 7 + external_libs/python/dpkt-1.8.6.2/PKG-INFO | 82 ++ external_libs/python/dpkt-1.8.6.2/README.md | 39 + external_libs/python/dpkt-1.8.6.2/README.rst | 64 ++ external_libs/python/dpkt-1.8.6.2/docs/Makefile | 153 ++++ .../python/dpkt-1.8.6.2/docs/api/api_auto.rst | 545 +++++++++++++ .../python/dpkt-1.8.6.2/docs/api/index.rst | 11 + external_libs/python/dpkt-1.8.6.2/docs/authors.rst | 7 + external_libs/python/dpkt-1.8.6.2/docs/badges.rst | 41 + .../python/dpkt-1.8.6.2/docs/changelog.rst | 4 + external_libs/python/dpkt-1.8.6.2/docs/conf.py | 76 ++ .../python/dpkt-1.8.6.2/docs/contributing.rst | 45 ++ .../python/dpkt-1.8.6.2/docs/examples.rst | 80 ++ external_libs/python/dpkt-1.8.6.2/docs/index.rst | 32 + .../python/dpkt-1.8.6.2/docs/installation.rst | 21 + external_libs/python/dpkt-1.8.6.2/docs/license.rst | 4 + external_libs/python/dpkt-1.8.6.2/docs/plans.rst | 13 + .../python/dpkt-1.8.6.2/docs/requirements.txt | 3 + .../python/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO | 82 ++ .../python/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt | 96 +++ .../dpkt.egg-info/dependency_links.txt | 1 + .../python/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe | 1 + .../dpkt-1.8.6.2/dpkt.egg-info/top_level.txt | 1 + external_libs/python/dpkt-1.8.6.2/dpkt/__init__.py | 71 ++ external_libs/python/dpkt-1.8.6.2/dpkt/ah.py | 35 + external_libs/python/dpkt-1.8.6.2/dpkt/aim.py | 52 ++ external_libs/python/dpkt-1.8.6.2/dpkt/aoe.py | 90 +++ external_libs/python/dpkt-1.8.6.2/dpkt/aoeata.py | 35 + external_libs/python/dpkt-1.8.6.2/dpkt/aoecfg.py | 25 + external_libs/python/dpkt-1.8.6.2/dpkt/arp.py | 32 + external_libs/python/dpkt-1.8.6.2/dpkt/asn1.py | 121 +++ external_libs/python/dpkt-1.8.6.2/dpkt/bgp.py | 789 +++++++++++++++++++ external_libs/python/dpkt-1.8.6.2/dpkt/cdp.py | 99 +++ external_libs/python/dpkt-1.8.6.2/dpkt/crc32c.py | 83 ++ .../python/dpkt-1.8.6.2/dpkt/decorators.py | 91 +++ external_libs/python/dpkt-1.8.6.2/dpkt/dhcp.py | 169 ++++ external_libs/python/dpkt-1.8.6.2/dpkt/diameter.py | 243 ++++++ external_libs/python/dpkt-1.8.6.2/dpkt/dns.py | 462 +++++++++++ external_libs/python/dpkt-1.8.6.2/dpkt/dpkt.py | 176 +++++ external_libs/python/dpkt-1.8.6.2/dpkt/dtp.py | 26 + external_libs/python/dpkt-1.8.6.2/dpkt/esp.py | 12 + external_libs/python/dpkt-1.8.6.2/dpkt/ethernet.py | 145 ++++ external_libs/python/dpkt-1.8.6.2/dpkt/gre.py | 127 +++ external_libs/python/dpkt-1.8.6.2/dpkt/gzip.py | 123 +++ external_libs/python/dpkt-1.8.6.2/dpkt/h225.py | 213 +++++ external_libs/python/dpkt-1.8.6.2/dpkt/hsrp.py | 33 + external_libs/python/dpkt-1.8.6.2/dpkt/http.py | 259 ++++++ external_libs/python/dpkt-1.8.6.2/dpkt/icmp.py | 127 +++ external_libs/python/dpkt-1.8.6.2/dpkt/icmp6.py | 77 ++ .../python/dpkt-1.8.6.2/dpkt/ieee80211.py | 875 +++++++++++++++++++++ external_libs/python/dpkt-1.8.6.2/dpkt/igmp.py | 19 + external_libs/python/dpkt-1.8.6.2/dpkt/ip.py | 359 +++++++++ external_libs/python/dpkt-1.8.6.2/dpkt/ip6.py | 383 +++++++++ external_libs/python/dpkt-1.8.6.2/dpkt/ipx.py | 18 + external_libs/python/dpkt-1.8.6.2/dpkt/llc.py | 56 ++ external_libs/python/dpkt-1.8.6.2/dpkt/loopback.py | 25 + external_libs/python/dpkt-1.8.6.2/dpkt/mrt.py | 96 +++ external_libs/python/dpkt-1.8.6.2/dpkt/netbios.py | 166 ++++ external_libs/python/dpkt-1.8.6.2/dpkt/netflow.py | 219 ++++++ external_libs/python/dpkt-1.8.6.2/dpkt/ntp.py | 113 +++ external_libs/python/dpkt-1.8.6.2/dpkt/ospf.py | 27 + external_libs/python/dpkt-1.8.6.2/dpkt/pcap.py | 172 ++++ external_libs/python/dpkt-1.8.6.2/dpkt/pim.py | 46 ++ external_libs/python/dpkt-1.8.6.2/dpkt/pmap.py | 18 + external_libs/python/dpkt-1.8.6.2/dpkt/ppp.py | 66 ++ external_libs/python/dpkt-1.8.6.2/dpkt/pppoe.py | 61 ++ external_libs/python/dpkt-1.8.6.2/dpkt/qq.py | 224 ++++++ external_libs/python/dpkt-1.8.6.2/dpkt/radiotap.py | 532 +++++++++++++ external_libs/python/dpkt-1.8.6.2/dpkt/radius.py | 91 +++ external_libs/python/dpkt-1.8.6.2/dpkt/rfb.py | 90 +++ external_libs/python/dpkt-1.8.6.2/dpkt/rip.py | 89 +++ external_libs/python/dpkt-1.8.6.2/dpkt/rpc.py | 161 ++++ external_libs/python/dpkt-1.8.6.2/dpkt/rtp.py | 127 +++ external_libs/python/dpkt-1.8.6.2/dpkt/rx.py | 45 ++ external_libs/python/dpkt-1.8.6.2/dpkt/sccp.py | 214 +++++ external_libs/python/dpkt-1.8.6.2/dpkt/sctp.py | 95 +++ external_libs/python/dpkt-1.8.6.2/dpkt/sip.py | 33 + external_libs/python/dpkt-1.8.6.2/dpkt/sll.py | 26 + external_libs/python/dpkt-1.8.6.2/dpkt/smb.py | 20 + external_libs/python/dpkt-1.8.6.2/dpkt/snoop.py | 122 +++ external_libs/python/dpkt-1.8.6.2/dpkt/ssl.py | 579 ++++++++++++++ .../python/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py | 76 ++ external_libs/python/dpkt-1.8.6.2/dpkt/stp.py | 22 + external_libs/python/dpkt-1.8.6.2/dpkt/stun.py | 47 ++ external_libs/python/dpkt-1.8.6.2/dpkt/tcp.py | 152 ++++ external_libs/python/dpkt-1.8.6.2/dpkt/telnet.py | 80 ++ external_libs/python/dpkt-1.8.6.2/dpkt/tftp.py | 56 ++ external_libs/python/dpkt-1.8.6.2/dpkt/tns.py | 26 + external_libs/python/dpkt-1.8.6.2/dpkt/tpkt.py | 16 + external_libs/python/dpkt-1.8.6.2/dpkt/udp.py | 17 + external_libs/python/dpkt-1.8.6.2/dpkt/vrrp.py | 70 ++ external_libs/python/dpkt-1.8.6.2/dpkt/yahoo.py | 30 + external_libs/python/dpkt-1.8.6.2/setup.cfg | 20 + external_libs/python/dpkt-1.8.6.2/setup.py | 67 ++ .../client/trex_stateless_client.py | 58 ++ .../client_utils/jsonrpc_client.py | 12 +- .../client_utils/outer_packages.py | 4 +- .../client_utils/packet_builder.py | 11 + .../examples/interactive_stateless.py | 74 +- .../python_lib/dpkt-1.8.6.2/AUTHORS | 60 -- .../python_lib/dpkt-1.8.6.2/CHANGES | 71 -- .../python_lib/dpkt-1.8.6.2/LICENSE | 28 - .../python_lib/dpkt-1.8.6.2/MANIFEST.in | 7 - .../python_lib/dpkt-1.8.6.2/PKG-INFO | 82 -- .../python_lib/dpkt-1.8.6.2/README.md | 39 - .../python_lib/dpkt-1.8.6.2/README.rst | 64 -- .../python_lib/dpkt-1.8.6.2/docs/Makefile | 153 ---- .../python_lib/dpkt-1.8.6.2/docs/api/api_auto.rst | 545 ------------- .../python_lib/dpkt-1.8.6.2/docs/api/index.rst | 11 - .../python_lib/dpkt-1.8.6.2/docs/authors.rst | 7 - .../python_lib/dpkt-1.8.6.2/docs/badges.rst | 41 - .../python_lib/dpkt-1.8.6.2/docs/changelog.rst | 4 - .../python_lib/dpkt-1.8.6.2/docs/conf.py | 76 -- .../python_lib/dpkt-1.8.6.2/docs/contributing.rst | 45 -- .../python_lib/dpkt-1.8.6.2/docs/examples.rst | 80 -- .../python_lib/dpkt-1.8.6.2/docs/index.rst | 32 - .../python_lib/dpkt-1.8.6.2/docs/installation.rst | 21 - .../python_lib/dpkt-1.8.6.2/docs/license.rst | 4 - .../python_lib/dpkt-1.8.6.2/docs/plans.rst | 13 - .../python_lib/dpkt-1.8.6.2/docs/requirements.txt | 3 - .../python_lib/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO | 82 -- .../dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt | 96 --- .../dpkt.egg-info/dependency_links.txt | 1 - .../dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe | 1 - .../dpkt-1.8.6.2/dpkt.egg-info/top_level.txt | 1 - .../python_lib/dpkt-1.8.6.2/dpkt/__init__.py | 71 -- .../python_lib/dpkt-1.8.6.2/dpkt/ah.py | 35 - .../python_lib/dpkt-1.8.6.2/dpkt/aim.py | 52 -- .../python_lib/dpkt-1.8.6.2/dpkt/aoe.py | 90 --- .../python_lib/dpkt-1.8.6.2/dpkt/aoeata.py | 35 - .../python_lib/dpkt-1.8.6.2/dpkt/aoecfg.py | 25 - .../python_lib/dpkt-1.8.6.2/dpkt/arp.py | 32 - .../python_lib/dpkt-1.8.6.2/dpkt/asn1.py | 121 --- .../python_lib/dpkt-1.8.6.2/dpkt/bgp.py | 789 ------------------- .../python_lib/dpkt-1.8.6.2/dpkt/cdp.py | 99 --- .../python_lib/dpkt-1.8.6.2/dpkt/crc32c.py | 83 -- .../python_lib/dpkt-1.8.6.2/dpkt/decorators.py | 91 --- .../python_lib/dpkt-1.8.6.2/dpkt/dhcp.py | 169 ---- .../python_lib/dpkt-1.8.6.2/dpkt/diameter.py | 243 ------ .../python_lib/dpkt-1.8.6.2/dpkt/dns.py | 462 ----------- .../python_lib/dpkt-1.8.6.2/dpkt/dpkt.py | 176 ----- .../python_lib/dpkt-1.8.6.2/dpkt/dtp.py | 26 - .../python_lib/dpkt-1.8.6.2/dpkt/esp.py | 12 - .../python_lib/dpkt-1.8.6.2/dpkt/ethernet.py | 145 ---- .../python_lib/dpkt-1.8.6.2/dpkt/gre.py | 127 --- .../python_lib/dpkt-1.8.6.2/dpkt/gzip.py | 123 --- .../python_lib/dpkt-1.8.6.2/dpkt/h225.py | 213 ----- .../python_lib/dpkt-1.8.6.2/dpkt/hsrp.py | 33 - .../python_lib/dpkt-1.8.6.2/dpkt/http.py | 259 ------ .../python_lib/dpkt-1.8.6.2/dpkt/icmp.py | 127 --- .../python_lib/dpkt-1.8.6.2/dpkt/icmp6.py | 77 -- .../python_lib/dpkt-1.8.6.2/dpkt/ieee80211.py | 875 --------------------- .../python_lib/dpkt-1.8.6.2/dpkt/igmp.py | 19 - .../python_lib/dpkt-1.8.6.2/dpkt/ip.py | 359 --------- .../python_lib/dpkt-1.8.6.2/dpkt/ip6.py | 383 --------- .../python_lib/dpkt-1.8.6.2/dpkt/ipx.py | 18 - .../python_lib/dpkt-1.8.6.2/dpkt/llc.py | 56 -- .../python_lib/dpkt-1.8.6.2/dpkt/loopback.py | 25 - .../python_lib/dpkt-1.8.6.2/dpkt/mrt.py | 96 --- .../python_lib/dpkt-1.8.6.2/dpkt/netbios.py | 166 ---- .../python_lib/dpkt-1.8.6.2/dpkt/netflow.py | 219 ------ .../python_lib/dpkt-1.8.6.2/dpkt/ntp.py | 113 --- .../python_lib/dpkt-1.8.6.2/dpkt/ospf.py | 27 - .../python_lib/dpkt-1.8.6.2/dpkt/pcap.py | 172 ---- .../python_lib/dpkt-1.8.6.2/dpkt/pim.py | 46 -- .../python_lib/dpkt-1.8.6.2/dpkt/pmap.py | 18 - .../python_lib/dpkt-1.8.6.2/dpkt/ppp.py | 66 -- .../python_lib/dpkt-1.8.6.2/dpkt/pppoe.py | 61 -- .../python_lib/dpkt-1.8.6.2/dpkt/qq.py | 224 ------ .../python_lib/dpkt-1.8.6.2/dpkt/radiotap.py | 532 ------------- .../python_lib/dpkt-1.8.6.2/dpkt/radius.py | 91 --- .../python_lib/dpkt-1.8.6.2/dpkt/rfb.py | 90 --- .../python_lib/dpkt-1.8.6.2/dpkt/rip.py | 89 --- .../python_lib/dpkt-1.8.6.2/dpkt/rpc.py | 161 ---- .../python_lib/dpkt-1.8.6.2/dpkt/rtp.py | 127 --- .../python_lib/dpkt-1.8.6.2/dpkt/rx.py | 45 -- .../python_lib/dpkt-1.8.6.2/dpkt/sccp.py | 214 ----- .../python_lib/dpkt-1.8.6.2/dpkt/sctp.py | 95 --- .../python_lib/dpkt-1.8.6.2/dpkt/sip.py | 33 - .../python_lib/dpkt-1.8.6.2/dpkt/sll.py | 26 - .../python_lib/dpkt-1.8.6.2/dpkt/smb.py | 20 - .../python_lib/dpkt-1.8.6.2/dpkt/snoop.py | 122 --- .../python_lib/dpkt-1.8.6.2/dpkt/ssl.py | 579 -------------- .../dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py | 76 -- .../python_lib/dpkt-1.8.6.2/dpkt/stp.py | 22 - .../python_lib/dpkt-1.8.6.2/dpkt/stun.py | 47 -- .../python_lib/dpkt-1.8.6.2/dpkt/tcp.py | 152 ---- .../python_lib/dpkt-1.8.6.2/dpkt/telnet.py | 80 -- .../python_lib/dpkt-1.8.6.2/dpkt/tftp.py | 56 -- .../python_lib/dpkt-1.8.6.2/dpkt/tns.py | 26 - .../python_lib/dpkt-1.8.6.2/dpkt/tpkt.py | 16 - .../python_lib/dpkt-1.8.6.2/dpkt/udp.py | 17 - .../python_lib/dpkt-1.8.6.2/dpkt/vrrp.py | 70 -- .../python_lib/dpkt-1.8.6.2/dpkt/yahoo.py | 30 - .../python_lib/dpkt-1.8.6.2/setup.cfg | 20 - .../python_lib/dpkt-1.8.6.2/setup.py | 67 -- 199 files changed, 11268 insertions(+), 11147 deletions(-) create mode 100644 external_libs/python/dpkt-1.8.6.2/AUTHORS create mode 100644 external_libs/python/dpkt-1.8.6.2/CHANGES create mode 100644 external_libs/python/dpkt-1.8.6.2/LICENSE create mode 100644 external_libs/python/dpkt-1.8.6.2/MANIFEST.in create mode 100644 external_libs/python/dpkt-1.8.6.2/PKG-INFO create mode 100644 external_libs/python/dpkt-1.8.6.2/README.md create mode 100644 external_libs/python/dpkt-1.8.6.2/README.rst create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/Makefile create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/api/api_auto.rst create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/api/index.rst create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/authors.rst create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/badges.rst create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/changelog.rst create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/conf.py create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/contributing.rst create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/examples.rst create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/index.rst create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/installation.rst create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/license.rst create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/plans.rst create mode 100644 external_libs/python/dpkt-1.8.6.2/docs/requirements.txt create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/__init__.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ah.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/aim.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/aoe.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/aoeata.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/aoecfg.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/arp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/asn1.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/bgp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/cdp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/crc32c.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/decorators.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/dhcp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/diameter.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/dns.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/dpkt.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/dtp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/esp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ethernet.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/gre.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/gzip.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/h225.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/hsrp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/http.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/icmp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/icmp6.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ieee80211.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/igmp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ip.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ip6.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ipx.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/llc.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/loopback.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/mrt.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/netbios.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/netflow.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ntp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ospf.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/pcap.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/pim.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/pmap.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ppp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/pppoe.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/qq.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/radiotap.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/radius.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/rfb.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/rip.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/rpc.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/rtp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/rx.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/sccp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/sctp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/sip.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/sll.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/smb.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/snoop.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ssl.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/stp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/stun.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/tcp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/telnet.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/tftp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/tns.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/tpkt.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/udp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/vrrp.py create mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/yahoo.py create mode 100644 external_libs/python/dpkt-1.8.6.2/setup.cfg create mode 100644 external_libs/python/dpkt-1.8.6.2/setup.py create mode 100644 scripts/automation/trex_control_plane/client/trex_stateless_client.py create mode 100644 scripts/automation/trex_control_plane/client_utils/packet_builder.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/AUTHORS delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/CHANGES delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/LICENSE delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/MANIFEST.in delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/PKG-INFO delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.md delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.rst delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/Makefile delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/api_auto.rst delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/index.rst delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/authors.rst delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/badges.rst delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/changelog.rst delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/conf.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/contributing.rst delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/examples.rst delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/index.rst delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/installation.rst delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/license.rst delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/plans.rst delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/requirements.txt delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/__init__.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ah.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aim.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoe.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoeata.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoecfg.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/arp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/asn1.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/bgp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/cdp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/crc32c.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/decorators.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dhcp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/diameter.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dns.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dpkt.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dtp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/esp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ethernet.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gre.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gzip.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/h225.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/hsrp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/http.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp6.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ieee80211.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/igmp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip6.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ipx.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/llc.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/loopback.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/mrt.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netbios.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netflow.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ntp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ospf.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pcap.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pim.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pmap.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ppp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pppoe.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/qq.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radiotap.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radius.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rfb.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rip.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rpc.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rtp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rx.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sccp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sctp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sip.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sll.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/smb.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/snoop.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stun.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tcp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/telnet.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tftp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tns.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tpkt.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/udp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/vrrp.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/yahoo.py delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.cfg delete mode 100644 scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.py diff --git a/external_libs/python/dpkt-1.8.6.2/AUTHORS b/external_libs/python/dpkt-1.8.6.2/AUTHORS new file mode 100644 index 00000000..dcefbef9 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/AUTHORS @@ -0,0 +1,60 @@ + +Original author +--------------- + +Dug Song + + +Contributors +------------ + +Timur Alperovich + radiotap module + +Nic Bellamy + HTTP header parsing fix + +the grugq + better RTP module + +David Helder + bug fixes + +Przemyslaw Karwasiecki + TABLE_DUMP in MRT module + +Reza Lotun + MetaPacket cleanup + +Jeff Nathan + bug fixes + +Tim Newsham + IPv6 bugfixing and improvements + +keisuke.nishimoto@gmail.com + Snoop file parser + +Jon Oberheide + STUN, H.225, TPKT, NTP, RIP, Diameter, SCTP, BGP, MRT, RX modules + +plotnikoff@gmail.com + handle dynamic imports from py2exe/freeze.py/zipped egg packages + +simdream@gmail.com + handle multiple cookie values in HTTP + +Owen Stephens + IP6 extension header support + +Robert Stone + Netflow and QQ modules + +Thomas Taranowski + dnet IP checksum bug on i386 + +Jirka Vejrazka + bug fixes + +Tim Yardley + DHCP definitions diff --git a/external_libs/python/dpkt-1.8.6.2/CHANGES b/external_libs/python/dpkt-1.8.6.2/CHANGES new file mode 100644 index 00000000..a5f05121 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/CHANGES @@ -0,0 +1,71 @@ +dpkg-1.8: + - fix a typo in vrrp.py + - fix IPv4 and IPv6 packet to correctly handle zero payload length + - store cipher_suite as int in TLSServerHello to allow app-specific messages + - improve SSL parsing + +dpkt-1.7: + - handle dynamic imports from py2exe/freeze.py/zipped egg + packages, from plotnikoff + - decode Ethernet MPLS labels, Cisco ISL VLAN tags, 802.2 LLC fields + - handle multiply-defined HTTP headers from simdream + - add IPv6 extension header support (minus ESP) from Owen Stephens + - add radiotap module from Timur Alperovich + - add IEEE80211 module from Jon Oberheide + - add RFB module from Jon Oberheide + - fix IP6 checksum to include options + - rename 'as' to 'asn' field in BGP header + - fix transport-layer checksum in IP6 + - handle improper TCP header offset + - fix SSL typo + - handle malformed ICMP headers + - added RX module from Jon Oberheide + - fixed loopback module IP/IP6 decoding + - set transport-layer (TCP, UDP) checksum in IP + - MRT module fixes + - fix pcap.Writer timestamp calculation + +dpkt-1.6: + - DNS RR packing fixed + - added STUN, H.225, TPKT, NTP, RIP, Diameter, SCTP, + BGP, and MRT modules from Jon Oberheide + - new dpkt.NeedData exception + +dpkt-1.5: + - IP6 checksum fix + - __getitem__() interface to Packet (e.g. ip['src'] == ip.src) + - faster Ethernet, IP, PPP module loading + - support any endianness capture file in pcap module, + and export a pypcap-compatible Reader + - additional CDP definitions + - replaced rtp module with the grugq's version + - added QQ module from Robert Stone + - added gzip module + - added PPPoE module + - added RADIUS module + +dpkt-1.4: + - fix IP checksum bug on i386, caught by Thomas Taranowski + +dpkt-1.3: + - autoload IP, Ethernet dispatch tables + - IP6 bugfixes from Tim Newsham + - additional DHCP definitions from Tim Yardley + - HTTP bugfixes and abstraction (see SIP) + - RPC bugfixes + - added pypcap-compatible PcapReader + - added Linux libpcap "cooked" capture module + - added preliminary SSL module + - added SIP module + - added SCCP module + - added RTP module + - added Portmap module + +dpkt-1.2: + - changed license from GPL to BSD + - added DTP module + - added HTTP module + - added DNS RR decodes + - added enough PPP to decode PPTP GRE encapsulation + +# $Id: CHANGES 379 2006-07-27 05:23:19Z dugsong $ diff --git a/external_libs/python/dpkt-1.8.6.2/LICENSE b/external_libs/python/dpkt-1.8.6.2/LICENSE new file mode 100644 index 00000000..99d14371 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/LICENSE @@ -0,0 +1,28 @@ + + Copyright (c) 2004 Dug Song + All rights reserved, all wrongs reversed. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The names of the authors and copyright holders may not be used to + endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/external_libs/python/dpkt-1.8.6.2/MANIFEST.in b/external_libs/python/dpkt-1.8.6.2/MANIFEST.in new file mode 100644 index 00000000..2d5c155a --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/MANIFEST.in @@ -0,0 +1,7 @@ + +include AUTHORS CHANGES README.rst LICENSE + +recursive-include docs * +prune docs/_build + +global-exclude __pycache__/* diff --git a/external_libs/python/dpkt-1.8.6.2/PKG-INFO b/external_libs/python/dpkt-1.8.6.2/PKG-INFO new file mode 100644 index 00000000..baf82a26 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/PKG-INFO @@ -0,0 +1,82 @@ +Metadata-Version: 1.1 +Name: dpkt +Version: 1.8.6.2 +Summary: fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols +Home-page: http://dpkt.googlecode.com/ +Author: Dug Song +Author-email: dugsong@monkey.org +License: BSD +Description: + ==== + dpkt + ==== + + | |travis| |coveralls| |landscape| |downloads| + | |version| |wheel| |supported-versions| |supported-implementations| + + .. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + + .. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + + .. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + + .. |version| image:: http://img.shields.io/pypi/v/dpkt.svg + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + + .. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + + .. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + + Installation + ============ + + :: + + pip install dpkt + + Documentation + ============= + + https://dpkt.readthedocs.org/ + + About + ===== + + This code is based on `dpkt code `__ lead by Dug Song and + is now being maintained and improved by an extended set of + `contributors `__ + and `developers `__. + + LICENSE + ------- + + BSD 3-Clause + +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Natural Language :: English +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy diff --git a/external_libs/python/dpkt-1.8.6.2/README.md b/external_libs/python/dpkt-1.8.6.2/README.md new file mode 100644 index 00000000..fc637836 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/README.md @@ -0,0 +1,39 @@ +dpkt +==== + +**A fast, simple packet creation/parsing python module with definitions for the basic TCP/IP protocols.** + +[![travis](http://img.shields.io/travis/kbandla/dpkt.svg)](https://travis-ci.org/kbandla/dpkt) +[![coveralls](http://img.shields.io/coveralls/kbandla/dpkt.svg)](https://coveralls.io/r/kbandla/dpkt) +[![landscape](https://landscape.io/github/kbandla/dpkt/master/landscape.svg)](https://landscape.io/github/kbandla/dpkt/master) +[![version](http://img.shields.io/pypi/v/dpkt.svg)](https://pypi.python.org/pypi/dpkt) +[![downloads](https://img.shields.io/pypi/dm/dpkt.svg)](https://pypi.python.org/pypi/dpkt) + +[![wheel](https://img.shields.io/pypi/wheel/dpkt.svg)](https://pypi.python.org/pypi/dpkt) +[![supported-versions](https://img.shields.io/pypi/pyversions/dpkt.svg)](https://pypi.python.org/pypi/dpkt) +[![supported-implementations](https://img.shields.io/pypi/implementation/dpkt.svg)](https://pypi.python.org/pypi/dpkt) +[![On Deck](https://badge.waffle.io/kbandla/dpkt.svg?label=on%20deck&title=On%20Deck)](http://waffle.io/kbandla/dpkt) +[![In Progress](https://badge.waffle.io/kbandla/dpkt.svg?label=in%20progress&title=In%20Progress)](http://waffle.io/kbandla/dpkt) + +Installation +------------ + + pip install dpkt + +Documentation +------------- + +**[dpkt.readthedocs.org](https://dpkt.readthedocs.org/)** + + +About +----- + +This code is based on [dpkt code](https://code.google.com/p/dpkt/) lead +by Dug Song and is now being maintained and improved by an extended set of [contributors](https://dpkt.readthedocs.org/en/latest/authors.html) + and [developers](https://github.com/kbandla/dpkt/graphs/contributors). + + +#### LICENSE + +BSD 3-Clause \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/README.rst b/external_libs/python/dpkt-1.8.6.2/README.rst new file mode 100644 index 00000000..b4e1b966 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/README.rst @@ -0,0 +1,64 @@ + +==== +dpkt +==== + +| |travis| |coveralls| |landscape| |downloads| +| |version| |wheel| |supported-versions| |supported-implementations| + +.. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + +.. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + +.. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + +.. |version| image:: http://img.shields.io/pypi/v/dpkt.svg + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + +.. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + +.. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + +Installation +============ + +:: + + pip install dpkt + +Documentation +============= + +https://dpkt.readthedocs.org/ + +About +===== + +This code is based on `dpkt code `__ lead by Dug Song and +is now being maintained and improved by an extended set of +`contributors `__ +and `developers `__. + +LICENSE +------- + +BSD 3-Clause diff --git a/external_libs/python/dpkt-1.8.6.2/docs/Makefile b/external_libs/python/dpkt-1.8.6.2/docs/Makefile new file mode 100644 index 00000000..2687c750 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/Makefile @@ -0,0 +1,153 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/pyspotify.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/pyspotify.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/pyspotify" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/pyspotify" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/external_libs/python/dpkt-1.8.6.2/docs/api/api_auto.rst b/external_libs/python/dpkt-1.8.6.2/docs/api/api_auto.rst new file mode 100644 index 00000000..3837c903 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/api/api_auto.rst @@ -0,0 +1,545 @@ + +dpkt.ah module +-------------- + +.. automodule:: dpkt.ah + :members: + :undoc-members: + :show-inheritance: + +dpkt.aim module +--------------- + +.. automodule:: dpkt.aim + :members: + :undoc-members: + :show-inheritance: + +dpkt.aoe module +--------------- + +.. automodule:: dpkt.aoe + :members: + :undoc-members: + :show-inheritance: + +dpkt.aoeata module +------------------ + +.. automodule:: dpkt.aoeata + :members: + :undoc-members: + :show-inheritance: + +dpkt.aoecfg module +------------------ + +.. automodule:: dpkt.aoecfg + :members: + :undoc-members: + :show-inheritance: + +dpkt.arp module +--------------- + +.. automodule:: dpkt.arp + :members: + :undoc-members: + :show-inheritance: + +dpkt.asn1 module +---------------- + +.. automodule:: dpkt.asn1 + :members: + :undoc-members: + :show-inheritance: + +dpkt.bgp module +--------------- + +.. automodule:: dpkt.bgp + :members: + :undoc-members: + :show-inheritance: + +dpkt.cdp module +--------------- + +.. automodule:: dpkt.cdp + :members: + :undoc-members: + :show-inheritance: + +dpkt.crc32c module +------------------ + +.. automodule:: dpkt.crc32c + :members: + :undoc-members: + :show-inheritance: + +dpkt.decorators module +---------------------- + +.. automodule:: dpkt.decorators + :members: + :undoc-members: + :show-inheritance: + +dpkt.dhcp module +---------------- + +.. automodule:: dpkt.dhcp + :members: + :undoc-members: + :show-inheritance: + +dpkt.diameter module +-------------------- + +.. automodule:: dpkt.diameter + :members: + :undoc-members: + :show-inheritance: + +dpkt.dns module +--------------- + +.. automodule:: dpkt.dns + :members: + :undoc-members: + :show-inheritance: + +dpkt.dpkt module +---------------- + +.. automodule:: dpkt.dpkt + :members: + :undoc-members: + :show-inheritance: + +dpkt.dtp module +--------------- + +.. automodule:: dpkt.dtp + :members: + :undoc-members: + :show-inheritance: + +dpkt.esp module +--------------- + +.. automodule:: dpkt.esp + :members: + :undoc-members: + :show-inheritance: + +dpkt.ethernet module +-------------------- + +.. automodule:: dpkt.ethernet + :members: + :undoc-members: + :show-inheritance: + +dpkt.gre module +--------------- + +.. automodule:: dpkt.gre + :members: + :undoc-members: + :show-inheritance: + +dpkt.gzip module +---------------- + +.. automodule:: dpkt.gzip + :members: + :undoc-members: + :show-inheritance: + +dpkt.h225 module +---------------- + +.. automodule:: dpkt.h225 + :members: + :undoc-members: + :show-inheritance: + +dpkt.hsrp module +---------------- + +.. automodule:: dpkt.hsrp + :members: + :undoc-members: + :show-inheritance: + +dpkt.http module +---------------- + +.. automodule:: dpkt.http + :members: + :undoc-members: + :show-inheritance: + +dpkt.icmp module +---------------- + +.. automodule:: dpkt.icmp + :members: + :undoc-members: + :show-inheritance: + +dpkt.icmp6 module +----------------- + +.. automodule:: dpkt.icmp6 + :members: + :undoc-members: + :show-inheritance: + +dpkt.ieee80211 module +--------------------- + +.. automodule:: dpkt.ieee80211 + :members: + :undoc-members: + :show-inheritance: + +dpkt.igmp module +---------------- + +.. automodule:: dpkt.igmp + :members: + :undoc-members: + :show-inheritance: + +dpkt.ip module +-------------- + +.. automodule:: dpkt.ip + :members: + :undoc-members: + :show-inheritance: + +dpkt.ip6 module +--------------- + +.. automodule:: dpkt.ip6 + :members: + :undoc-members: + :show-inheritance: + +dpkt.ipx module +--------------- + +.. automodule:: dpkt.ipx + :members: + :undoc-members: + :show-inheritance: + +dpkt.llc module +--------------- + +.. automodule:: dpkt.llc + :members: + :undoc-members: + :show-inheritance: + +dpkt.loopback module +-------------------- + +.. automodule:: dpkt.loopback + :members: + :undoc-members: + :show-inheritance: + +dpkt.mrt module +--------------- + +.. automodule:: dpkt.mrt + :members: + :undoc-members: + :show-inheritance: + +dpkt.netbios module +------------------- + +.. automodule:: dpkt.netbios + :members: + :undoc-members: + :show-inheritance: + +dpkt.netflow module +------------------- + +.. automodule:: dpkt.netflow + :members: + :undoc-members: + :show-inheritance: + +dpkt.ntp module +--------------- + +.. automodule:: dpkt.ntp + :members: + :undoc-members: + :show-inheritance: + +dpkt.ospf module +---------------- + +.. automodule:: dpkt.ospf + :members: + :undoc-members: + :show-inheritance: + +dpkt.pcap module +---------------- + +.. automodule:: dpkt.pcap + :members: + :undoc-members: + :show-inheritance: + +dpkt.pim module +--------------- + +.. automodule:: dpkt.pim + :members: + :undoc-members: + :show-inheritance: + +dpkt.pmap module +---------------- + +.. automodule:: dpkt.pmap + :members: + :undoc-members: + :show-inheritance: + +dpkt.ppp module +--------------- + +.. automodule:: dpkt.ppp + :members: + :undoc-members: + :show-inheritance: + +dpkt.pppoe module +----------------- + +.. automodule:: dpkt.pppoe + :members: + :undoc-members: + :show-inheritance: + +dpkt.qq module +-------------- + +.. automodule:: dpkt.qq + :members: + :undoc-members: + :show-inheritance: + +dpkt.radiotap module +-------------------- + +.. automodule:: dpkt.radiotap + :members: + :undoc-members: + :show-inheritance: + +dpkt.radius module +------------------ + +.. automodule:: dpkt.radius + :members: + :undoc-members: + :show-inheritance: + +dpkt.rfb module +--------------- + +.. automodule:: dpkt.rfb + :members: + :undoc-members: + :show-inheritance: + +dpkt.rip module +--------------- + +.. automodule:: dpkt.rip + :members: + :undoc-members: + :show-inheritance: + +dpkt.rpc module +--------------- + +.. automodule:: dpkt.rpc + :members: + :undoc-members: + :show-inheritance: + +dpkt.rtp module +--------------- + +.. automodule:: dpkt.rtp + :members: + :undoc-members: + :show-inheritance: + +dpkt.rx module +-------------- + +.. automodule:: dpkt.rx + :members: + :undoc-members: + :show-inheritance: + +dpkt.sccp module +---------------- + +.. automodule:: dpkt.sccp + :members: + :undoc-members: + :show-inheritance: + +dpkt.sctp module +---------------- + +.. automodule:: dpkt.sctp + :members: + :undoc-members: + :show-inheritance: + +dpkt.sip module +--------------- + +.. automodule:: dpkt.sip + :members: + :undoc-members: + :show-inheritance: + +dpkt.sll module +--------------- + +.. automodule:: dpkt.sll + :members: + :undoc-members: + :show-inheritance: + +dpkt.smb module +--------------- + +.. automodule:: dpkt.smb + :members: + :undoc-members: + :show-inheritance: + +dpkt.snoop module +----------------- + +.. automodule:: dpkt.snoop + :members: + :undoc-members: + :show-inheritance: + +dpkt.ssl module +--------------- + +.. automodule:: dpkt.ssl + :members: + :undoc-members: + :show-inheritance: + +dpkt.ssl_ciphersuites module +---------------------------- + +.. automodule:: dpkt.ssl_ciphersuites + :members: + :undoc-members: + :show-inheritance: + +dpkt.stp module +--------------- + +.. automodule:: dpkt.stp + :members: + :undoc-members: + :show-inheritance: + +dpkt.stun module +---------------- + +.. automodule:: dpkt.stun + :members: + :undoc-members: + :show-inheritance: + +dpkt.tcp module +--------------- + +.. automodule:: dpkt.tcp + :members: + :undoc-members: + :show-inheritance: + +dpkt.telnet module +------------------ + +.. automodule:: dpkt.telnet + :members: + :undoc-members: + :show-inheritance: + +dpkt.tftp module +---------------- + +.. automodule:: dpkt.tftp + :members: + :undoc-members: + :show-inheritance: + +dpkt.tns module +--------------- + +.. automodule:: dpkt.tns + :members: + :undoc-members: + :show-inheritance: + +dpkt.tpkt module +---------------- + +.. automodule:: dpkt.tpkt + :members: + :undoc-members: + :show-inheritance: + +dpkt.udp module +--------------- + +.. automodule:: dpkt.udp + :members: + :undoc-members: + :show-inheritance: + +dpkt.vrrp module +---------------- + +.. automodule:: dpkt.vrrp + :members: + :undoc-members: + :show-inheritance: + +dpkt.yahoo module +----------------- + +.. automodule:: dpkt.yahoo + :members: + :undoc-members: + :show-inheritance: + diff --git a/external_libs/python/dpkt-1.8.6.2/docs/api/index.rst b/external_libs/python/dpkt-1.8.6.2/docs/api/index.rst new file mode 100644 index 00000000..7d44785d --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/api/index.rst @@ -0,0 +1,11 @@ + +API Reference +============= +The dpkt API reference section is currently a work in progress, please have patience as we fill in and improve the documentation. + +**dpkt Modules** + +.. toctree:: + :maxdepth: 4 + + api_auto diff --git a/external_libs/python/dpkt-1.8.6.2/docs/authors.rst b/external_libs/python/dpkt-1.8.6.2/docs/authors.rst new file mode 100644 index 00000000..238aa6bb --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/authors.rst @@ -0,0 +1,7 @@ +******* +Authors +******* + +.. include:: ../AUTHORS + +If you want to contribute to dpkt, see :doc:`contributing`. diff --git a/external_libs/python/dpkt-1.8.6.2/docs/badges.rst b/external_libs/python/dpkt-1.8.6.2/docs/badges.rst new file mode 100644 index 00000000..906f8b7f --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/badges.rst @@ -0,0 +1,41 @@ + + +| |docs| |travis| |coveralls| |landscape| |version| +| |downloads| |wheel| |supported-versions| |supported-implementations| + +.. |docs| image:: https://readthedocs.org/projects/dpkt/badge/?style=flat + :target: https://readthedocs.org/projects/dpkt + :alt: Documentation Status + +.. |travis| image:: http://img.shields.io/travis/kbandla/dpkt/master.png?style=flat + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + +.. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt/master.png?style=flat + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + +.. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg?style=flat + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + +.. |version| image:: http://img.shields.io/pypi/v/dpkt.svg + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + +.. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + +.. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + diff --git a/external_libs/python/dpkt-1.8.6.2/docs/changelog.rst b/external_libs/python/dpkt-1.8.6.2/docs/changelog.rst new file mode 100644 index 00000000..ac7e2371 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/changelog.rst @@ -0,0 +1,4 @@ +********* +Changelog +********* + diff --git a/external_libs/python/dpkt-1.8.6.2/docs/conf.py b/external_libs/python/dpkt-1.8.6.2/docs/conf.py new file mode 100644 index 00000000..6dfc9fc4 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/conf.py @@ -0,0 +1,76 @@ +# encoding: utf-8 + +"""dpkt documentation build configuration file""" + +from __future__ import unicode_literals + +import os +import re +import sys +import types +import mock + + +def get_version(filename): + init_py = open(filename).read() + metadata = dict(re.findall("__([a-z]+)__ = '([^']+)'", init_py)) + return metadata['version'] + + +# -- Workarounds to have autodoc generate API docs ---------------------------- + +sys.path.insert(0, os.path.abspath('..')) + + +# Mock any objects that we might need to +foo = mock.Mock() +foo.__version__ = '0.1.1' +sys.modules['foo'] = foo + + +# -- General configuration ---------------------------------------------------- +needs_sphinx = '1.0' +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.extlinks', + 'sphinx.ext.intersphinx', + 'sphinx.ext.viewcode', + 'sphinx.ext.autosummary', + 'sphinxcontrib.napoleon' +] + +templates_path = ['_templates'] +source_suffix = '.rst' +master_doc = 'index' + +project = 'dpkt' +copyright = '2009-2015 Dug Song and contributors' + +release = get_version('../dpkt/__init__.py') +version = '.'.join(release.split('.')[:2]) + +exclude_patterns = ['_build'] + +pygments_style = 'sphinx' + +modindex_common_prefix = ['dpkt.'] + +autodoc_default_flags = ['members', 'undoc-members', 'show-inheritance'] +autodoc_member_order = 'bysource' + + +# -- Options for HTML output -------------------------------------------------- +html_theme = 'default' +html_static_path = ['_static'] + +html_use_modindex = True +html_use_index = True +html_split_index = False +html_show_sourcelink = True + +htmlhelp_basename = 'dpkt' + +# -- Options for extlink extension -------------------------------------------- +extlinks = { + 'issue': ('https://github.com/kbandla/dpkt/issues/%s', '#'), +} diff --git a/external_libs/python/dpkt-1.8.6.2/docs/contributing.rst b/external_libs/python/dpkt-1.8.6.2/docs/contributing.rst new file mode 100644 index 00000000..cae4acfe --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/contributing.rst @@ -0,0 +1,45 @@ +============ +Contributing +============ + +Report a Bug or Make a Feature Request +-------------------------------------- +Please go to the GitHub Issues page: https://github.com/kbandla/dpkt/issues. + +Checkout the Code +----------------- + +:: + + git clone https://github.com/kblandla/dpkt.git + + +Become a Developer +------------------ +dpkt uses the 'GitHub Flow' model: `GitHub Flow `_ + +- To work on something new, create a descriptively named branch off of master (ie: my-awesome) +- Commit to that branch locally and regularly push your work to the same named branch on the server +- When you need feedback or help, or you think the branch is ready for merging, open a pull request +- After someone else has reviewed and signed off on the feature, you can merge it into master + +Getting Started +~~~~~~~~~~~~~~~ + - Fork the repo on GitHub + - git clone git@github.com:your_name_here/dpkt.git + +New Feature or Bug +~~~~~~~~~~~~~~~~~~ + + :: + + $ git checkout -b my-awesome + $ git push -u origin my-awesome + $ ; git push + $ ; git push + $ tox (this will run all the tests) + + - Go to github and hit 'New pull request' + - Someone reviews it and says 'AOK' + - Merge the pull request (green button) + diff --git a/external_libs/python/dpkt-1.8.6.2/docs/examples.rst b/external_libs/python/dpkt-1.8.6.2/docs/examples.rst new file mode 100644 index 00000000..d99a0c2f --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/examples.rst @@ -0,0 +1,80 @@ + +Examples +======== + +Examples in dpkt/examples +------------------------- + +print_packets.py +~~~~~~~~~~~~~~~~ +.. automodule:: examples.print_packets + +**Code Excerpt** + +.. code-block:: python + + # For each packet in the pcap process the contents + for timestamp, buf in pcap: + + # Print out the timestamp in UTC + print 'Timestamp: ', str(datetime.datetime.utcfromtimestamp(timestamp)) + + # Unpack the Ethernet frame (mac src/dst, ethertype) + eth = dpkt.ethernet.Ethernet(buf) + print 'Ethernet Frame: ', mac_addr(eth.src), mac_addr(eth.dst), eth.type + + # Make sure the Ethernet frame contains an IP packet + # EtherType (IP, ARP, PPPoE, IP6... see http://en.wikipedia.org/wiki/EtherType) + if eth.type != dpkt.ethernet.ETH_TYPE_IP: + print 'Non IP Packet type not supported %s\n' % eth.data.__class__.__name__ + continue + + # Now unpack the data within the Ethernet frame (the IP packet) + # Pulling out src, dst, length, fragment info, TTL, and Protocol + ip = eth.data + + # Pull out fragment information (flags and offset all packed into off field, so use bitmasks) + do_not_fragment = bool(ip.off & dpkt.ip.IP_DF) + more_fragments = bool(ip.off & dpkt.ip.IP_MF) + fragment_offset = ip.off & dpkt.ip.IP_OFFMASK + + # Print out the info + print 'IP: %s -> %s (len=%d ttl=%d DF=%d MF=%d offset=%d)\n' % \ + (ip_to_str(ip.src), ip_to_str(ip.dst), ip.len, ip.ttl, do_not_fragment, more_fragments, fragment_offset) + +**Example Output** + +.. code-block:: json + + Timestamp: 2004-05-13 10:17:07.311224 + Ethernet Frame: 00:00:01:00:00:00 fe:ff:20:00:01:00 2048 + IP: 145.254.160.237 -> 65.208.228.223 (len=48 ttl=128 DF=1 MF=0 offset=0) + + Timestamp: 2004-05-13 10:17:08.222534 + Ethernet Frame: fe:ff:20:00:01:00 00:00:01:00:00:00 2048 + IP: 65.208.228.223 -> 145.254.160.237 (len=48 ttl=47 DF=1 MF=0 offset=0) + + ... + + + +Jon Oberheide's Examples +------------------------- +[@jonoberheide's](https://twitter.com/jonoberheide) old examples still +apply: + +- `dpkt Tutorial #1: ICMP + Echo `__ +- `dpkt Tutorial #2: Parsing a PCAP + File `__ +- `dpkt Tutorial #3: dns + spoofing `__ +- `dpkt Tutorial #4: AS Paths from + MRT/BGP `__ + +Jeff Silverman Docs/Code +------------------------ +`Jeff Silverman `__ has some +`code `__ and +`documentation `__. + diff --git a/external_libs/python/dpkt-1.8.6.2/docs/index.rst b/external_libs/python/dpkt-1.8.6.2/docs/index.rst new file mode 100644 index 00000000..31ef9251 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/index.rst @@ -0,0 +1,32 @@ +dpkt +==== +.. include:: badges.rst +dpkt is a python module for fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols + + +Getting Started +=============== +.. toctree:: + :maxdepth: 2 + + installation + examples + +API Reference +============= +.. toctree:: + :maxdepth: 1 + + api/index + +About dpkt +========== +.. toctree:: + :maxdepth: 2 + + authors + changelog + plans + contributing + license + diff --git a/external_libs/python/dpkt-1.8.6.2/docs/installation.rst b/external_libs/python/dpkt-1.8.6.2/docs/installation.rst new file mode 100644 index 00000000..2c93001b --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/installation.rst @@ -0,0 +1,21 @@ +============ +Installation +============ + +DKPT is now available directly from pypi :) + +Install the Code +---------------- + +:: + + pip install dpkt + +Checkout the Code +----------------- + +:: + + git clone https://github.com/kblandla/dpkt.git + + diff --git a/external_libs/python/dpkt-1.8.6.2/docs/license.rst b/external_libs/python/dpkt-1.8.6.2/docs/license.rst new file mode 100644 index 00000000..56c72381 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/license.rst @@ -0,0 +1,4 @@ + +License +======= +BSD 3-Clause License, as the upstream project diff --git a/external_libs/python/dpkt-1.8.6.2/docs/plans.rst b/external_libs/python/dpkt-1.8.6.2/docs/plans.rst new file mode 100644 index 00000000..a6b1ca35 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/plans.rst @@ -0,0 +1,13 @@ +***************** +Development plans +***************** + +Current plans +============= + +- Be Awesome + +Future plans +============ + +- Maintain the Awesome diff --git a/external_libs/python/dpkt-1.8.6.2/docs/requirements.txt b/external_libs/python/dpkt-1.8.6.2/docs/requirements.txt new file mode 100644 index 00000000..0e912345 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/docs/requirements.txt @@ -0,0 +1,3 @@ +mock >= 1.0 +Sphinx >= 1.0 +sphinxcontrib-napoleon diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO new file mode 100644 index 00000000..baf82a26 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO @@ -0,0 +1,82 @@ +Metadata-Version: 1.1 +Name: dpkt +Version: 1.8.6.2 +Summary: fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols +Home-page: http://dpkt.googlecode.com/ +Author: Dug Song +Author-email: dugsong@monkey.org +License: BSD +Description: + ==== + dpkt + ==== + + | |travis| |coveralls| |landscape| |downloads| + | |version| |wheel| |supported-versions| |supported-implementations| + + .. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + + .. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + + .. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + + .. |version| image:: http://img.shields.io/pypi/v/dpkt.svg + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + + .. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + + .. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + + Installation + ============ + + :: + + pip install dpkt + + Documentation + ============= + + https://dpkt.readthedocs.org/ + + About + ===== + + This code is based on `dpkt code `__ lead by Dug Song and + is now being maintained and improved by an extended set of + `contributors `__ + and `developers `__. + + LICENSE + ------- + + BSD 3-Clause + +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Natural Language :: English +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt new file mode 100644 index 00000000..8ac474c8 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt @@ -0,0 +1,96 @@ +AUTHORS +CHANGES +LICENSE +MANIFEST.in +README.md +README.rst +setup.cfg +setup.py +docs/Makefile +docs/authors.rst +docs/badges.rst +docs/changelog.rst +docs/conf.py +docs/contributing.rst +docs/examples.rst +docs/index.rst +docs/installation.rst +docs/license.rst +docs/plans.rst +docs/requirements.txt +docs/api/api_auto.rst +docs/api/index.rst +dpkt/__init__.py +dpkt/ah.py +dpkt/aim.py +dpkt/aoe.py +dpkt/aoeata.py +dpkt/aoecfg.py +dpkt/arp.py +dpkt/asn1.py +dpkt/bgp.py +dpkt/cdp.py +dpkt/crc32c.py +dpkt/decorators.py +dpkt/dhcp.py +dpkt/diameter.py +dpkt/dns.py +dpkt/dpkt.py +dpkt/dtp.py +dpkt/esp.py +dpkt/ethernet.py +dpkt/gre.py +dpkt/gzip.py +dpkt/h225.py +dpkt/hsrp.py +dpkt/http.py +dpkt/icmp.py +dpkt/icmp6.py +dpkt/ieee80211.py +dpkt/igmp.py +dpkt/ip.py +dpkt/ip6.py +dpkt/ipx.py +dpkt/llc.py +dpkt/loopback.py +dpkt/mrt.py +dpkt/netbios.py +dpkt/netflow.py +dpkt/ntp.py +dpkt/ospf.py +dpkt/pcap.py +dpkt/pim.py +dpkt/pmap.py +dpkt/ppp.py +dpkt/pppoe.py +dpkt/qq.py +dpkt/radiotap.py +dpkt/radius.py +dpkt/rfb.py +dpkt/rip.py +dpkt/rpc.py +dpkt/rtp.py +dpkt/rx.py +dpkt/sccp.py +dpkt/sctp.py +dpkt/sip.py +dpkt/sll.py +dpkt/smb.py +dpkt/snoop.py +dpkt/ssl.py +dpkt/ssl_ciphersuites.py +dpkt/stp.py +dpkt/stun.py +dpkt/tcp.py +dpkt/telnet.py +dpkt/tftp.py +dpkt/tns.py +dpkt/tpkt.py +dpkt/udp.py +dpkt/vrrp.py +dpkt/yahoo.py +dpkt.egg-info/PKG-INFO +dpkt.egg-info/SOURCES.txt +dpkt.egg-info/dependency_links.txt +dpkt.egg-info/not-zip-safe +dpkt.egg-info/top_level.txt \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt new file mode 100644 index 00000000..4daab81a --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt @@ -0,0 +1 @@ +dpkt diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/__init__.py b/external_libs/python/dpkt-1.8.6.2/dpkt/__init__.py new file mode 100644 index 00000000..09d28fb3 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/__init__.py @@ -0,0 +1,71 @@ +"""fast, simple packet creation and parsing.""" + +__author__ = 'Dug Song' +__author_email__ = 'dugsong@monkey.org' +__license__ = 'BSD' +__url__ = 'http://dpkt.googlecode.com/' +__version__ = '1.8.6.2' + +from dpkt import * + +import ah +import aoe +import aim +import arp +import asn1 +import bgp +import cdp +import dhcp +import diameter +import dns +import dtp +import esp +import ethernet +import gre +import gzip +import h225 +import hsrp +import http +import icmp +import icmp6 +import ieee80211 +import igmp +import ip +import ip6 +import ipx +import llc +import loopback +import mrt +import netbios +import netflow +import ntp +import ospf +import pcap +import pim +import pmap +import ppp +import pppoe +import qq +import radiotap +import radius +import rfb +import rip +import rpc +import rtp +import rx +import sccp +import sctp +import sip +import sll +import smb +import ssl +import stp +import stun +import tcp +import telnet +import tftp +import tns +import tpkt +import udp +import vrrp +import yahoo diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ah.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ah.py new file mode 100644 index 00000000..5ad29ad5 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/ah.py @@ -0,0 +1,35 @@ +# $Id: ah.py 34 2007-01-28 07:54:20Z dugsong $ +# -*- coding: utf-8 -*- + +"""Authentication Header.""" + +import dpkt + + +class AH(dpkt.Packet): + __hdr__ = ( + ('nxt', 'B', 0), + ('len', 'B', 0), # payload length + ('rsvd', 'H', 0), + ('spi', 'I', 0), + ('seq', 'I', 0) + ) + auth = '' + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.auth = self.data[:self.len] + buf = self.data[self.len:] + import ip + + try: + self.data = ip.IP.get_proto(self.nxt)(buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def __len__(self): + return self.__hdr_len__ + len(self.auth) + len(self.data) + + def __str__(self): + return self.pack_hdr() + str(self.auth) + str(self.data) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/aim.py b/external_libs/python/dpkt-1.8.6.2/dpkt/aim.py new file mode 100644 index 00000000..8250d69e --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/aim.py @@ -0,0 +1,52 @@ +# $Id: aim.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- + +"""AOL Instant Messenger.""" + +import dpkt +import struct + +# OSCAR: http://iserverd1.khstu.ru/oscar/ + + +class FLAP(dpkt.Packet): + __hdr__ = ( + ('ast', 'B', 0x2a), # '*' + ('type', 'B', 0), + ('seq', 'H', 0), + ('len', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.ast != 0x2a: + raise dpkt.UnpackError('invalid FLAP header') + if len(self.data) < self.len: + raise dpkt.NeedData, '%d left, %d needed' % (len(self.data), self.len) + + +class SNAC(dpkt.Packet): + __hdr__ = ( + ('family', 'H', 0), + ('subtype', 'H', 0), + ('flags', 'H', 0), + ('reqid', 'I', 0) + ) + + +def tlv(buf): + n = 4 + try: + t, l = struct.unpack('>HH', buf[:n]) + except struct.error: + raise dpkt.UnpackError + v = buf[n:n + l] + if len(v) < l: + raise dpkt.NeedData + buf = buf[n + l:] + return t, l, v, buf + +# TOC 1.0: http://jamwt.com/Py-TOC/PROTOCOL + +# TOC 2.0: http://www.firestuff.org/projects/firetalk/doc/toc2.txt + diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/aoe.py b/external_libs/python/dpkt-1.8.6.2/dpkt/aoe.py new file mode 100644 index 00000000..8fcf7c63 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/aoe.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- +"""ATA over Ethernet Protocol.""" + +import struct +import dpkt +from decorators import deprecated + + +class AOE(dpkt.Packet): + __hdr__ = ( + ('ver_fl', 'B', 0x10), + ('err', 'B', 0), + ('maj', 'H', 0), + ('min', 'B', 0), + ('cmd', 'B', 0), + ('tag', 'I', 0), + ) + _cmdsw = {} + + @property + def ver(self): return self.ver_fl >> 4 + + @ver.setter + def ver(self, ver): self.ver_fl = (ver << 4) | (self.ver_fl & 0xf) + + @property + def fl(self): return self.ver_fl & 0xf + + @fl.setter + def fl(self, fl): self.ver_fl = (self.ver_fl & 0xf0) | fl + + @classmethod + def set_cmd(cls, cmd, pktclass): + cls._cmdsw[cmd] = pktclass + + @classmethod + def get_cmd(cls, cmd): + return cls._cmdsw[cmd] + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._cmdsw[self.cmd](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, struct.error, dpkt.UnpackError): + pass + + def pack_hdr(self): + try: + return dpkt.Packet.pack_hdr(self) + except struct.error, e: + raise dpkt.PackError(str(e)) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_ver(self): return self.ver + + @deprecated + def _set_ver(self, ver): self.ver = ver + + @deprecated + def _get_fl(self): return self.fl + + @deprecated + def _set_fl(self, fl): self.fl = fl + # ================================================= + + + +AOE_CMD_ATA = 0 +AOE_CMD_CFG = 1 +AOE_FLAG_RSP = 1 << 3 + + +def __load_cmds(): + prefix = 'AOE_CMD_' + g = globals() + for k, v in g.iteritems(): + if k.startswith(prefix): + name = 'aoe' + k[len(prefix):].lower() + try: + mod = __import__(name, g) + except ImportError: + continue + AOE.set_cmd(v, getattr(mod, name.upper())) + + +if not AOE._cmdsw: + __load_cmds() diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/aoeata.py b/external_libs/python/dpkt-1.8.6.2/dpkt/aoeata.py new file mode 100644 index 00000000..1be917d3 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/aoeata.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +"""ATA over Ethernet ATA command""" + +import dpkt + +ATA_DEVICE_IDENTIFY = 0xec + + +class AOEATA(dpkt.Packet): + __hdr__ = ( + ('aflags', 'B', 0), + ('errfeat', 'B', 0), + ('scnt', 'B', 0), + ('cmdstat', 'B', ATA_DEVICE_IDENTIFY), + ('lba0', 'B', 0), + ('lba1', 'B', 0), + ('lba2', 'B', 0), + ('lba3', 'B', 0), + ('lba4', 'B', 0), + ('lba5', 'B', 0), + ('res', 'H', 0), + ) + + # XXX: in unpack, switch on ATA command like icmp does on type + + +def test_aoeata(): + s = '\x03\x0a\x6b\x19\x00\x00\x00\x00\x45\x00\x00\x28\x94\x1f\x00\x00\xe3\x06\x99\xb4\x23\x2b\x24\x00\xde\x8e\x84\x42\xab\xd1\x00\x50\x00\x35\xe1\x29\x20\xd9\x00\x00\x00\x22\x9b\xf0\xe2\x04\x65\x6b' + aoeata = AOEATA(s) + assert (str(aoeata) == s) + + +if __name__ == '__main__': + test_aoeata() + print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/aoecfg.py b/external_libs/python/dpkt-1.8.6.2/dpkt/aoecfg.py new file mode 100644 index 00000000..7643eddf --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/aoecfg.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +"""ATA over Ethernet ATA command""" + +import dpkt + + +class AOECFG(dpkt.Packet): + __hdr__ = ( + ('bufcnt', 'H', 0), + ('fwver', 'H', 0), + ('scnt', 'B', 0), + ('aoeccmd', 'B', 0), + ('cslen', 'H', 0), + ) + + +def test_aoecfg(): + s = '\x01\x02\x03\x04\x05\x06\x11\x12\x13\x14\x15\x16\x88\xa2\x10\x00\x00\x01\x02\x01\x80\x00\x00\x00\x12\x34\x00\x00\x00\x00\x04\x00' + '\0xed' * 1024 + aoecfg = AOECFG(s[14 + 10:]) + assert (aoecfg.bufcnt == 0x1234) + + +if __name__ == '__main__': + test_aoecfg() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/arp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/arp.py new file mode 100644 index 00000000..a6ae62f4 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/arp.py @@ -0,0 +1,32 @@ +# $Id: arp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Address Resolution Protocol.""" + +import dpkt + +# Hardware address format +ARP_HRD_ETH = 0x0001 # ethernet hardware +ARP_HRD_IEEE802 = 0x0006 # IEEE 802 hardware + +# Protocol address format +ARP_PRO_IP = 0x0800 # IP protocol + +# ARP operation +ARP_OP_REQUEST = 1 # request to resolve ha given pa +ARP_OP_REPLY = 2 # response giving hardware address +ARP_OP_REVREQUEST = 3 # request to resolve pa given ha +ARP_OP_REVREPLY = 4 # response giving protocol address + + +class ARP(dpkt.Packet): + __hdr__ = ( + ('hrd', 'H', ARP_HRD_ETH), + ('pro', 'H', ARP_PRO_IP), + ('hln', 'B', 6), # hardware address length + ('pln', 'B', 4), # protocol address length + ('op', 'H', ARP_OP_REQUEST), + ('sha', '6s', ''), + ('spa', '4s', ''), + ('tha', '6s', ''), + ('tpa', '4s', '') + ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/asn1.py b/external_libs/python/dpkt-1.8.6.2/dpkt/asn1.py new file mode 100644 index 00000000..7acae041 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/asn1.py @@ -0,0 +1,121 @@ +# $Id: asn1.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Abstract Syntax Notation #1.""" + +import struct +import time +import dpkt + +# Type class +CLASSMASK = 0xc0 +UNIVERSAL = 0x00 +APPLICATION = 0x40 +CONTEXT = 0x80 +PRIVATE = 0xc0 + +# Constructed (vs. primitive) +CONSTRUCTED = 0x20 + +# Universal-class tags +TAGMASK = 0x1f +INTEGER = 2 +BIT_STRING = 3 # arbitrary bit string +OCTET_STRING = 4 # arbitrary octet string +NULL = 5 +OID = 6 # object identifier +SEQUENCE = 16 # ordered collection of types +SET = 17 # unordered collection of types +PRINT_STRING = 19 # printable string +T61_STRING = 20 # T.61 (8-bit) character string +IA5_STRING = 22 # ASCII +UTC_TIME = 23 + + +def utctime(buf): + """Convert ASN.1 UTCTime string to UTC float.""" + yy = int(buf[:2]) + mn = int(buf[2:4]) + dd = int(buf[4:6]) + hh = int(buf[6:8]) + mm = int(buf[8:10]) + try: + ss = int(buf[10:12]) + buf = buf[12:] + except TypeError: + ss = 0 + buf = buf[10:] + if buf[0] == '+': + hh -= int(buf[1:3]) + mm -= int(buf[3:5]) + elif buf[0] == '-': + hh += int(buf[1:3]) + mm += int(buf[3:5]) + return time.mktime((2000 + yy, mn, dd, hh, mm, ss, 0, 0, 0)) + + +def decode(buf): + """Sleazy ASN.1 decoder. + Return list of (id, value) tuples from ASN.1 BER/DER encoded buffer. + """ + msg = [] + while buf: + t = ord(buf[0]) + constructed = t & CONSTRUCTED + tag = t & TAGMASK + l = ord(buf[1]) + c = 0 + if constructed and l == 128: + # XXX - constructed, indefinite length + msg.append((t, decode(buf[2:]))) + elif l >= 128: + c = l & 127 + if c == 1: + l = ord(buf[2]) + elif c == 2: + l = struct.unpack('>H', buf[2:4])[0] + elif c == 3: + l = struct.unpack('>I', buf[1:5])[0] & 0xfff + c = 2 + elif c == 4: + l = struct.unpack('>I', buf[2:6])[0] + else: + # XXX - can be up to 127 bytes, but... + raise dpkt.UnpackError('excessive long-form ASN.1 length %d' % l) + + # Skip type, length + buf = buf[2 + c:] + + # Parse content + if constructed: + msg.append((t, decode(buf))) + elif tag == INTEGER: + if l == 0: + n = 0 + elif l == 1: + n = ord(buf[0]) + elif l == 2: + n = struct.unpack('>H', buf[:2])[0] + elif l == 3: + n = struct.unpack('>I', buf[:4])[0] >> 8 + elif l == 4: + n = struct.unpack('>I', buf[:4])[0] + else: + raise dpkt.UnpackError('excessive integer length > %d bytes' % l) + msg.append((t, n)) + elif tag == UTC_TIME: + msg.append((t, utctime(buf[:l]))) + else: + msg.append((t, buf[:l])) + + # Skip content + buf = buf[l:] + return msg + + +def test_asn1(): + s = '0\x82\x02Q\x02\x01\x0bc\x82\x02J\x04xcn=Douglas J Song 1, ou=Information Technology Division, ou=Faculty and Staff, ou=People, o=University of Michigan, c=US\n\x01\x00\n\x01\x03\x02\x01\x00\x02\x01\x00\x01\x01\x00\x87\x0bobjectclass0\x82\x01\xb0\x04\rmemberOfGroup\x04\x03acl\x04\x02cn\x04\x05title\x04\rpostalAddress\x04\x0ftelephoneNumber\x04\x04mail\x04\x06member\x04\thomePhone\x04\x11homePostalAddress\x04\x0bobjectClass\x04\x0bdescription\x04\x18facsimileTelephoneNumber\x04\x05pager\x04\x03uid\x04\x0cuserPassword\x04\x08joinable\x04\x10associatedDomain\x04\x05owner\x04\x0erfc822ErrorsTo\x04\x08ErrorsTo\x04\x10rfc822RequestsTo\x04\nRequestsTo\x04\tmoderator\x04\nlabeledURL\x04\nonVacation\x04\x0fvacationMessage\x04\x05drink\x04\x0elastModifiedBy\x04\x10lastModifiedTime\x04\rmodifiersname\x04\x0fmodifytimestamp\x04\x0ccreatorsname\x04\x0fcreatetimestamp' + assert (decode(s) == [(48, [(2, 11), (99, [(4, 'cn=Douglas J Song 1, ou=Information Technology Division, ou=Faculty and Staff, ou=People, o=University of Michigan, c=US'), (10, '\x00'), (10, '\x03'), (2, 0), (2, 0), (1, '\x00'), (135, 'objectclass'), (48, [(4, 'memberOfGroup'), (4, 'acl'), (4, 'cn'), (4, 'title'), (4, 'postalAddress'), (4, 'telephoneNumber'), (4, 'mail'), (4, 'member'), (4, 'homePhone'), (4, 'homePostalAddress'), (4, 'objectClass'), (4, 'description'), (4, 'facsimileTelephoneNumber'), (4, 'pager'), (4, 'uid'), (4, 'userPassword'), (4, 'joinable'), (4, 'associatedDomain'), (4, 'owner'), (4, 'rfc822ErrorsTo'), (4, 'ErrorsTo'), (4, 'rfc822RequestsTo'), (4, 'RequestsTo'), (4, 'moderator'), (4, 'labeledURL'), (4, 'onVacation'), (4, 'vacationMessage'), (4, 'drink'), (4, 'lastModifiedBy'), (4, 'lastModifiedTime'), (4, 'modifiersname'), (4, 'modifytimestamp'), (4, 'creatorsname'), (4, 'createtimestamp')])])])]) + +if __name__ == '__main__': + test_asn1() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/bgp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/bgp.py new file mode 100644 index 00000000..7439a0e3 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/bgp.py @@ -0,0 +1,789 @@ +# $Id: bgp.py 76 2011-01-06 15:51:30Z dugsong $ +# -*- coding: utf-8 -*- +"""Border Gateway Protocol.""" + +import struct +import socket +import dpkt +from decorators import deprecated + + +# Border Gateway Protocol 4 - RFC 4271 +# Communities Attribute - RFC 1997 +# Capabilities - RFC 3392 +# Route Refresh - RFC 2918 +# Route Reflection - RFC 4456 +# Confederations - RFC 3065 +# Cease Subcodes - RFC 4486 +# NOPEER Community - RFC 3765 +# Multiprotocol Extensions - 2858 + +# Message Types +OPEN = 1 +UPDATE = 2 +NOTIFICATION = 3 +KEEPALIVE = 4 +ROUTE_REFRESH = 5 + +# Attribute Types +ORIGIN = 1 +AS_PATH = 2 +NEXT_HOP = 3 +MULTI_EXIT_DISC = 4 +LOCAL_PREF = 5 +ATOMIC_AGGREGATE = 6 +AGGREGATOR = 7 +COMMUNITIES = 8 +ORIGINATOR_ID = 9 +CLUSTER_LIST = 10 +MP_REACH_NLRI = 14 +MP_UNREACH_NLRI = 15 + +# Origin Types +ORIGIN_IGP = 0 +ORIGIN_EGP = 1 +INCOMPLETE = 2 + +# AS Path Types +AS_SET = 1 +AS_SEQUENCE = 2 +AS_CONFED_SEQUENCE = 3 +AS_CONFED_SET = 4 + +# Reserved Communities Types +NO_EXPORT = 0xffffff01L +NO_ADVERTISE = 0xffffff02L +NO_EXPORT_SUBCONFED = 0xffffff03L +NO_PEER = 0xffffff04L + +# Common AFI types +AFI_IPV4 = 1 +AFI_IPV6 = 2 + +# Multiprotocol SAFI types +SAFI_UNICAST = 1 +SAFI_MULTICAST = 2 +SAFI_UNICAST_MULTICAST = 3 + +# OPEN Message Optional Parameters +AUTHENTICATION = 1 +CAPABILITY = 2 + +# Capability Types +CAP_MULTIPROTOCOL = 1 +CAP_ROUTE_REFRESH = 2 + +# NOTIFICATION Error Codes +MESSAGE_HEADER_ERROR = 1 +OPEN_MESSAGE_ERROR = 2 +UPDATE_MESSAGE_ERROR = 3 +HOLD_TIMER_EXPIRED = 4 +FSM_ERROR = 5 +CEASE = 6 + +# Message Header Error Subcodes +CONNECTION_NOT_SYNCHRONIZED = 1 +BAD_MESSAGE_LENGTH = 2 +BAD_MESSAGE_TYPE = 3 + +# OPEN Message Error Subcodes +UNSUPPORTED_VERSION_NUMBER = 1 +BAD_PEER_AS = 2 +BAD_BGP_IDENTIFIER = 3 +UNSUPPORTED_OPTIONAL_PARAMETER = 4 +AUTHENTICATION_FAILURE = 5 +UNACCEPTABLE_HOLD_TIME = 6 +UNSUPPORTED_CAPABILITY = 7 + +# UPDATE Message Error Subcodes +MALFORMED_ATTRIBUTE_LIST = 1 +UNRECOGNIZED_ATTRIBUTE = 2 +MISSING_ATTRIBUTE = 3 +ATTRIBUTE_FLAGS_ERROR = 4 +ATTRIBUTE_LENGTH_ERROR = 5 +INVALID_ORIGIN_ATTRIBUTE = 6 +AS_ROUTING_LOOP = 7 +INVALID_NEXT_HOP_ATTRIBUTE = 8 +OPTIONAL_ATTRIBUTE_ERROR = 9 +INVALID_NETWORK_FIELD = 10 +MALFORMED_AS_PATH = 11 + +# Cease Error Subcodes +MAX_NUMBER_OF_PREFIXES_REACHED = 1 +ADMINISTRATIVE_SHUTDOWN = 2 +PEER_DECONFIGURED = 3 +ADMINISTRATIVE_RESET = 4 +CONNECTION_REJECTED = 5 +OTHER_CONFIGURATION_CHANGE = 6 +CONNECTION_COLLISION_RESOLUTION = 7 +OUT_OF_RESOURCES = 8 + + +class BGP(dpkt.Packet): + __hdr__ = ( + ('marker', '16s', '\xff' * 16), + ('len', 'H', 0), + ('type', 'B', OPEN) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len - self.__hdr_len__] + if self.type == OPEN: + self.data = self.open = self.Open(self.data) + elif self.type == UPDATE: + self.data = self.update = self.Update(self.data) + elif self.type == NOTIFICATION: + self.data = self.notifiation = self.Notification(self.data) + elif self.type == KEEPALIVE: + self.data = self.keepalive = self.Keepalive(self.data) + elif self.type == ROUTE_REFRESH: + self.data = self.route_refresh = self.RouteRefresh(self.data) + + class Open(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 4), + ('asn', 'H', 0), + ('holdtime', 'H', 0), + ('identifier', 'I', 0), + ('param_len', 'B', 0) + ) + __hdr_defaults__ = { + 'parameters': [] + } + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + plen = self.param_len + while plen > 0: + param = self.Parameter(self.data) + self.data = self.data[len(param):] + plen -= len(param) + l.append(param) + self.data = self.parameters = l + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.parameters)) + + def __str__(self): + params = ''.join(map(str, self.parameters)) + self.param_len = len(params) + return self.pack_hdr() + params + + class Parameter(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len] + + if self.type == AUTHENTICATION: + self.data = self.authentication = self.Authentication(self.data) + elif self.type == CAPABILITY: + self.data = self.capability = self.Capability(self.data) + + class Authentication(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ) + + class Capability(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len] + + class Update(dpkt.Packet): + __hdr_defaults__ = { + 'withdrawn': [], + 'attributes': [], + 'announced': [] + } + + def unpack(self, buf): + self.data = buf + + # Withdrawn Routes + wlen = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + l = [] + while wlen > 0: + route = RouteIPV4(self.data) + self.data = self.data[len(route):] + wlen -= len(route) + l.append(route) + self.withdrawn = l + + # Path Attributes + plen = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + l = [] + while plen > 0: + attr = self.Attribute(self.data) + self.data = self.data[len(attr):] + plen -= len(attr) + l.append(attr) + self.attributes = l + + # Announced Routes + l = [] + while self.data: + route = RouteIPV4(self.data) + self.data = self.data[len(route):] + l.append(route) + self.announced = l + + def __len__(self): + return 2 + sum(map(len, self.withdrawn)) + \ + 2 + sum(map(len, self.attributes)) + \ + sum(map(len, self.announced)) + + def __str__(self): + return struct.pack('>H', sum(map(len, self.withdrawn))) + \ + ''.join(map(str, self.withdrawn)) + \ + struct.pack('>H', sum(map(len, self.attributes))) + \ + ''.join(map(str, self.attributes)) + \ + ''.join(map(str, self.announced)) + + class Attribute(dpkt.Packet): + __hdr__ = ( + ('flags', 'B', 0), + ('type', 'B', 0) + ) + + @property + def optional(self): + return (self.flags >> 7) & 0x1 + + @optional.setter + def optional(self, o): + self.flags = (self.flags & ~0x80) | ((o & 0x1) << 7) + + @property + def transitive(self): + return (self.flags >> 6) & 0x1 + + @transitive.setter + def transitive(self, t): + self.flags = (self.flags & ~0x40) | ((t & 0x1) << 6) + + @property + def partial(self): + return (self.flags >> 5) & 0x1 + + @partial.setter + def partial(self, p): + self.flags = (self.flags & ~0x20) | ((p & 0x1) << 5) + + @property + def extended_length(self): + return (self.flags >> 4) & 0x1 + + @extended_length.setter + def extended_length(self, e): + self.flags = (self.flags & ~0x10) | ((e & 0x1) << 4) + + # Deprecated methods, will be removed in the future + # ====================================================== + @deprecated + def _get_o(self): + return self.optional + + @deprecated + def _set_o(self, o): + self.optional = o + + @deprecated + def _get_t(self): + return self.transitive + + @deprecated + def _set_t(self, t): + self.transitive = t + + @deprecated + def _get_p(self): + return self.partial + + @deprecated + def _set_p(self, p): + self.partial = p + + @deprecated + def _get_e(self): + return self.extended_length + + @deprecated + def _set_e(self, e): + self.extended_length = e + + # ====================================================== + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + if self.extended_length: + self.len = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + else: + self.len = struct.unpack('B', self.data[:1])[0] + self.data = self.data[1:] + + self.data = self.data[:self.len] + + if self.type == ORIGIN: + self.data = self.origin = self.Origin(self.data) + elif self.type == AS_PATH: + self.data = self.as_path = self.ASPath(self.data) + elif self.type == NEXT_HOP: + self.data = self.next_hop = self.NextHop(self.data) + elif self.type == MULTI_EXIT_DISC: + self.data = self.multi_exit_disc = self.MultiExitDisc(self.data) + elif self.type == LOCAL_PREF: + self.data = self.local_pref = self.LocalPref(self.data) + elif self.type == ATOMIC_AGGREGATE: + self.data = self.atomic_aggregate = self.AtomicAggregate(self.data) + elif self.type == AGGREGATOR: + self.data = self.aggregator = self.Aggregator(self.data) + elif self.type == COMMUNITIES: + self.data = self.communities = self.Communities(self.data) + elif self.type == ORIGINATOR_ID: + self.data = self.originator_id = self.OriginatorID(self.data) + elif self.type == CLUSTER_LIST: + self.data = self.cluster_list = self.ClusterList(self.data) + elif self.type == MP_REACH_NLRI: + self.data = self.mp_reach_nlri = self.MPReachNLRI(self.data) + elif self.type == MP_UNREACH_NLRI: + self.data = self.mp_unreach_nlri = self.MPUnreachNLRI(self.data) + + def __len__(self): + if self.extended_length: + attr_len = 2 + else: + attr_len = 1 + return self.__hdr_len__ + attr_len + len(self.data) + + def __str__(self): + if self.extended_length: + attr_len_str = struct.pack('>H', self.len) + else: + attr_len_str = struct.pack('B', self.len) + return self.pack_hdr() + attr_len_str + str(self.data) + + class Origin(dpkt.Packet): + __hdr__ = ( + ('type', 'B', ORIGIN_IGP), + ) + + class ASPath(dpkt.Packet): + __hdr_defaults__ = { + 'segments': [] + } + + def unpack(self, buf): + self.data = buf + l = [] + while self.data: + seg = self.ASPathSegment(self.data) + self.data = self.data[len(seg):] + l.append(seg) + self.data = self.segments = l + + def __len__(self): + return sum(map(len, self.data)) + + def __str__(self): + return ''.join(map(str, self.data)) + + class ASPathSegment(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + for i in range(self.len): + AS = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + l.append(AS) + self.data = self.path = l + + def __len__(self): + return self.__hdr_len__ + 2 * len(self.path) + + def __str__(self): + as_str = '' + for AS in self.path: + as_str += struct.pack('>H', AS) + return self.pack_hdr() + as_str + + class NextHop(dpkt.Packet): + __hdr__ = ( + ('ip', 'I', 0), + ) + + class MultiExitDisc(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class LocalPref(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class AtomicAggregate(dpkt.Packet): + def unpack(self, buf): + pass + + def __len__(self): + return 0 + + def __str__(self): + return '' + + class Aggregator(dpkt.Packet): + __hdr__ = ( + ('asn', 'H', 0), + ('ip', 'I', 0) + ) + + class Communities(dpkt.Packet): + __hdr_defaults__ = { + 'list': [] + } + + def unpack(self, buf): + self.data = buf + l = [] + while self.data: + val = struct.unpack('>I', self.data[:4])[0] + if (0x00000000L <= val <= 0x0000ffffL) or (0xffff0000L <= val <= 0xffffffffL): + comm = self.ReservedCommunity(self.data[:4]) + else: + comm = self.Community(self.data[:4]) + self.data = self.data[len(comm):] + l.append(comm) + self.data = self.list = l + + def __len__(self): + return sum(map(len, self.data)) + + def __str__(self): + return ''.join(map(str, self.data)) + + class Community(dpkt.Packet): + __hdr__ = ( + ('asn', 'H', 0), + ('value', 'H', 0) + ) + + class ReservedCommunity(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class OriginatorID(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class ClusterList(dpkt.Packet): + __hdr_defaults__ = { + 'list': [] + } + + def unpack(self, buf): + self.data = buf + l = [] + while self.data: + id = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:] + l.append(id) + self.data = self.list = l + + def __len__(self): + return 4 * len(self.list) + + def __str__(self): + cluster_str = '' + for val in self.list: + cluster_str += struct.pack('>I', val) + return cluster_str + + class MPReachNLRI(dpkt.Packet): + __hdr__ = ( + ('afi', 'H', AFI_IPV4), + ('safi', 'B', SAFI_UNICAST), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + # Next Hop + nlen = struct.unpack('B', self.data[:1])[0] + self.data = self.data[1:] + self.next_hop = self.data[:nlen] + self.data = self.data[nlen:] + + # SNPAs + l = [] + num_snpas = struct.unpack('B', self.data[:1])[0] + self.data = self.data[1:] + for i in range(num_snpas): + snpa = self.SNPA(self.data) + self.data = self.data[len(snpa):] + l.append(snpa) + self.snpas = l + + if self.afi == AFI_IPV4: + Route = RouteIPV4 + elif self.afi == AFI_IPV6: + Route = RouteIPV6 + else: + Route = RouteGeneric + + # Announced Routes + l = [] + while self.data: + route = Route(self.data) + self.data = self.data[len(route):] + l.append(route) + self.data = self.announced = l + + def __len__(self): + return self.__hdr_len__ + \ + 1 + len(self.next_hop) + \ + 1 + sum(map(len, self.snpas)) + \ + sum(map(len, self.announced)) + + def __str__(self): + return self.pack_hdr() + \ + struct.pack('B', len(self.next_hop)) + \ + str(self.next_hop) + \ + struct.pack('B', len(self.snpas)) + \ + ''.join(map(str, self.snpas)) + \ + ''.join(map(str, self.announced)) + + class SNPA(object): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:(self.len + 1) / 2] + + class MPUnreachNLRI(dpkt.Packet): + __hdr__ = ( + ('afi', 'H', AFI_IPV4), + ('safi', 'B', SAFI_UNICAST), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + if self.afi == AFI_IPV4: + Route = RouteIPV4 + elif self.afi == AFI_IPV6: + Route = RouteIPV6 + else: + Route = RouteGeneric + + # Withdrawn Routes + l = [] + while self.data: + route = Route(self.data) + self.data = self.data[len(route):] + l.append(route) + self.data = self.withdrawn = l + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + return self.pack_hdr() + ''.join(map(str, self.data)) + + class Notification(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ('subcode', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.error = self.data + + class Keepalive(dpkt.Packet): + def unpack(self, buf): + pass + + def __len__(self): + return 0 + + def __str__(self): + return '' + + class RouteRefresh(dpkt.Packet): + __hdr__ = ( + ('afi', 'H', AFI_IPV4), + ('rsvd', 'B', 0), + ('safi', 'B', SAFI_UNICAST) + ) + + +class RouteGeneric(dpkt.Packet): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.prefix = self.data[:(self.len + 7) / 8] + + +class RouteIPV4(dpkt.Packet): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + tmp = self.data[:(self.len + 7) / 8] + tmp += (4 - len(tmp)) * '\x00' + self.data = self.prefix = tmp + + def __repr__(self): + cidr = '%s/%d' % (socket.inet_ntoa(self.prefix), self.len) + return '%s(%s)' % (self.__class__.__name__, cidr) + + def __len__(self): + return self.__hdr_len__ + (self.len + 7) / 8 + + def __str__(self): + return self.pack_hdr() + self.prefix[:(self.len + 7) / 8] + + +class RouteIPV6(dpkt.Packet): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + tmp = self.data[:(self.len + 7) / 8] + tmp += (16 - len(tmp)) * '\x00' + self.data = self.prefix = tmp + + def __len__(self): + return self.__hdr_len__ + (self.len + 7) / 8 + + def __str__(self): + return self.pack_hdr() + self.prefix[:(self.len + 7) / 8] + + +__bgp1 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x13\x04' +__bgp2 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x63\x02\x00\x00\x00\x48\x40\x01\x01\x00\x40\x02\x0a\x01\x02\x01\xf4\x01\xf4\x02\x01\xfe\xbb\x40\x03\x04\xc0\xa8\x00\x0f\x40\x05\x04\x00\x00\x00\x64\x40\x06\x00\xc0\x07\x06\xfe\xba\xc0\xa8\x00\x0a\xc0\x08\x0c\xfe\xbf\x00\x01\x03\x16\x00\x04\x01\x54\x00\xfa\x80\x09\x04\xc0\xa8\x00\x0f\x80\x0a\x04\xc0\xa8\x00\xfa\x16\xc0\xa8\x04' +__bgp3 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x79\x02\x00\x00\x00\x62\x40\x01\x01\x00\x40\x02\x00\x40\x05\x04\x00\x00\x00\x64\xc0\x10\x08\x00\x02\x01\x2c\x00\x00\x01\x2c\xc0\x80\x24\x00\x00\xfd\xe9\x40\x01\x01\x00\x40\x02\x04\x02\x01\x15\xb3\x40\x05\x04\x00\x00\x00\x2c\x80\x09\x04\x16\x05\x05\x05\x80\x0a\x04\x16\x05\x05\x05\x90\x0e\x00\x1e\x00\x01\x80\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x04\x04\x04\x00\x60\x18\x77\x01\x00\x00\x01\xf4\x00\x00\x01\xf4\x85' +__bgp4 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x2d\x01\x04\x00\xed\x00\x5a\xc6\x6e\x83\x7d\x10\x02\x06\x01\x04\x00\x01\x00\x01\x02\x02\x80\x00\x02\x02\x02\x00' + + +def test_pack(): + assert (__bgp1 == str(BGP(__bgp1))) + assert (__bgp2 == str(BGP(__bgp2))) + assert (__bgp3 == str(BGP(__bgp3))) + assert (__bgp4 == str(BGP(__bgp4))) + + +def test_unpack(): + b1 = BGP(__bgp1) + assert (b1.len == 19) + assert (b1.type == KEEPALIVE) + assert (b1.keepalive is not None) + + b2 = BGP(__bgp2) + assert (b2.type == UPDATE) + assert (len(b2.update.withdrawn) == 0) + assert (len(b2.update.announced) == 1) + assert (len(b2.update.attributes) == 9) + a = b2.update.attributes[1] + assert (a.type == AS_PATH) + assert (a.len == 10) + assert (len(a.as_path.segments) == 2) + s = a.as_path.segments[0] + assert (s.type == AS_SET) + assert (s.len == 2) + assert (len(s.path) == 2) + assert (s.path[0] == 500) + + a = b2.update.attributes[6] + assert (a.type == COMMUNITIES) + assert (a.len == 12) + assert (len(a.communities.list) == 3) + c = a.communities.list[0] + assert (c.asn == 65215) + assert (c.value == 1) + r = b2.update.announced[0] + assert (r.len == 22) + assert (r.prefix == '\xc0\xa8\x04\x00') + + b3 = BGP(__bgp3) + assert (b3.type == UPDATE) + assert (len(b3.update.withdrawn) == 0) + assert (len(b3.update.announced) == 0) + assert (len(b3.update.attributes) == 6) + a = b3.update.attributes[0] + assert (a.optional == False) + assert (a.transitive == True) + assert (a.partial == False) + assert (a.extended_length == False) + assert (a.type == ORIGIN) + assert (a.len == 1) + o = a.origin + assert (o.type == ORIGIN_IGP) + a = b3.update.attributes[5] + assert (a.optional == True) + assert (a.transitive == False) + assert (a.partial == False) + assert (a.extended_length == True) + assert (a.type == MP_REACH_NLRI) + assert (a.len == 30) + m = a.mp_reach_nlri + assert (m.afi == AFI_IPV4) + assert (len(m.snpas) == 0) + assert (len(m.announced) == 1) + p = m.announced[0] + assert (p.len == 96) + + b4 = BGP(__bgp4) + assert (b4.len == 45) + assert (b4.type == OPEN) + assert (b4.open.asn == 237) + assert (b4.open.param_len == 16) + assert (len(b4.open.parameters) == 3) + p = b4.open.parameters[0] + assert (p.type == CAPABILITY) + assert (p.len == 6) + c = p.capability + assert (c.code == CAP_MULTIPROTOCOL) + assert (c.len == 4) + assert (c.data == '\x00\x01\x00\x01') + c = b4.open.parameters[2].capability + assert (c.code == CAP_ROUTE_REFRESH) + assert (c.len == 0) + + +if __name__ == '__main__': + test_pack() + test_unpack() + print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/cdp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/cdp.py new file mode 100644 index 00000000..43c6a564 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/cdp.py @@ -0,0 +1,99 @@ +# $Id: cdp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Cisco Discovery Protocol.""" + +import struct +import dpkt + +CDP_DEVID = 1 # string +CDP_ADDRESS = 2 +CDP_PORTID = 3 # string +CDP_CAPABILITIES = 4 # 32-bit bitmask +CDP_VERSION = 5 # string +CDP_PLATFORM = 6 # string +CDP_IPPREFIX = 7 + +CDP_VTP_MGMT_DOMAIN = 9 # string +CDP_NATIVE_VLAN = 10 # 16-bit integer +CDP_DUPLEX = 11 # 8-bit boolean +CDP_TRUST_BITMAP = 18 # 8-bit bitmask0x13 +CDP_UNTRUST_COS = 19 # 8-bit port +CDP_SYSTEM_NAME = 20 # string +CDP_SYSTEM_OID = 21 # 10-byte binary string +CDP_MGMT_ADDRESS = 22 # 32-bit number of addrs, Addresses +CDP_LOCATION = 23 # string + + +class CDP(dpkt.Packet): + __hdr__ = ( + ('version', 'B', 2), + ('ttl', 'B', 180), + ('sum', 'H', 0) + ) + + class Address(dpkt.Packet): + # XXX - only handle NLPID/IP for now + __hdr__ = ( + ('ptype', 'B', 1), # protocol type (NLPID) + ('plen', 'B', 1), # protocol length + ('p', 'B', 0xcc), # IP + ('alen', 'H', 4) # address length + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.alen] + + class TLV(dpkt.Packet): + __hdr__ = ( + ('type', 'H', 0), + ('len', 'H', 4) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len - 4] + if self.type == CDP_ADDRESS: + n = struct.unpack('>I', self.data[:4])[0] + buf = self.data[4:] + l = [] + for i in range(n): + a = CDP.Address(buf) + l.append(a) + buf = buf[len(a):] + self.data = l + + def __len__(self): + if self.type == CDP_ADDRESS: + n = 4 + sum(map(len, self.data)) + else: + n = len(self.data) + return self.__hdr_len__ + n + + def __str__(self): + self.len = len(self) + if self.type == CDP_ADDRESS: + s = struct.pack('>I', len(self.data)) + \ + ''.join(map(str, self.data)) + else: + s = self.data + return self.pack_hdr() + s + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = self.data + l = [] + while buf: + tlv = self.TLV(buf) + l.append(tlv) + buf = buf[len(tlv):] + self.data = l + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + data = ''.join(map(str, self.data)) + if not self.sum: + self.sum = dpkt.in_cksum(self.pack_hdr() + data) + return self.pack_hdr() + data diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/crc32c.py b/external_libs/python/dpkt-1.8.6.2/dpkt/crc32c.py new file mode 100644 index 00000000..aaf40e1f --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/crc32c.py @@ -0,0 +1,83 @@ +# $Id: crc32c.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +import array + +# CRC-32C Checksum +# http://tools.ietf.org/html/rfc3309 + +crc32c_table = ( + 0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L, 0xC79A971FL, + 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL, 0x8AD958CFL, 0x78B2DBCCL, + 0x6BE22838L, 0x9989AB3BL, 0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, + 0x5E133C24L, 0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL, + 0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L, 0x9A879FA0L, + 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L, 0x5D1D08BFL, 0xAF768BBCL, + 0xBC267848L, 0x4E4DFB4BL, 0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, + 0x33ED7D2AL, 0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L, + 0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L, 0x6DFE410EL, + 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL, 0x30E349B1L, 0xC288CAB2L, + 0xD1D83946L, 0x23B3BA45L, 0xF779DEAEL, 0x05125DADL, 0x1642AE59L, + 0xE4292D5AL, 0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL, + 0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L, 0x417B1DBCL, + 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L, 0x86E18AA3L, 0x748A09A0L, + 0x67DAFA54L, 0x95B17957L, 0xCBA24573L, 0x39C9C670L, 0x2A993584L, + 0xD8F2B687L, 0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L, + 0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L, 0x96BF4DCCL, + 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L, 0xDBFC821CL, 0x2997011FL, + 0x3AC7F2EBL, 0xC8AC71E8L, 0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, + 0x0F36E6F7L, 0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L, + 0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L, 0xEB1FCBADL, + 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L, 0x2C855CB2L, 0xDEEEDFB1L, + 0xCDBE2C45L, 0x3FD5AF46L, 0x7198540DL, 0x83F3D70EL, 0x90A324FAL, + 0x62C8A7F9L, 0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L, + 0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L, 0x3CDB9BDDL, + 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L, 0x82F63B78L, 0x709DB87BL, + 0x63CD4B8FL, 0x91A6C88CL, 0x456CAC67L, 0xB7072F64L, 0xA457DC90L, + 0x563C5F93L, 0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L, + 0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL, 0x92A8FC17L, + 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L, 0x55326B08L, 0xA759E80BL, + 0xB4091BFFL, 0x466298FCL, 0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, + 0x0B21572CL, 0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L, + 0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L, 0x65D122B9L, + 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL, 0x2892ED69L, 0xDAF96E6AL, + 0xC9A99D9EL, 0x3BC21E9DL, 0xEF087A76L, 0x1D63F975L, 0x0E330A81L, + 0xFC588982L, 0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL, + 0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L, 0x38CC2A06L, + 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L, 0xFF56BD19L, 0x0D3D3E1AL, + 0x1E6DCDEEL, 0xEC064EEDL, 0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, + 0xD0DDD530L, 0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL, + 0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL, 0x8ECEE914L, + 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L, 0xD3D3E1ABL, 0x21B862A8L, + 0x32E8915CL, 0xC083125FL, 0x144976B4L, 0xE622F5B7L, 0xF5720643L, + 0x07198540L, 0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L, + 0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL, 0xE330A81AL, + 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL, 0x24AA3F05L, 0xD6C1BC06L, + 0xC5914FF2L, 0x37FACCF1L, 0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, + 0x7AB90321L, 0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL, + 0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L, 0x34F4F86AL, + 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL, 0x79B737BAL, 0x8BDCB4B9L, + 0x988C474DL, 0x6AE7C44EL, 0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, + 0xAD7D5351L +) + + +def add(crc, buf): + buf = array.array('B', buf) + for b in buf: + crc = (crc >> 8) ^ crc32c_table[(crc ^ b) & 0xff] + return crc + + +def done(crc): + tmp = ~crc & 0xffffffffL + b0 = tmp & 0xff + b1 = (tmp >> 8) & 0xff + b2 = (tmp >> 16) & 0xff + b3 = (tmp >> 24) & 0xff + crc = (b0 << 24) | (b1 << 16) | (b2 << 8) | b3 + return crc + + +def cksum(buf): + """Return computed CRC-32c checksum.""" + return done(add(0xffffffffL, buf)) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/decorators.py b/external_libs/python/dpkt-1.8.6.2/dpkt/decorators.py new file mode 100644 index 00000000..08f78161 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/decorators.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +import warnings +from timeit import Timer +from test import pystone +from time import sleep + + +def decorator_with_args(decorator_to_enhance): + """ + This is decorator for decorator. It allows any decorator to get additional arguments + """ + def decorator_maker(*args, **kwargs): + def decorator_wrapper(func): + return decorator_to_enhance(func, *args, **kwargs) + return decorator_wrapper + return decorator_maker + + +def deprecated(deprecated_method): + def _deprecated(*args, **kwargs): + # Print only the first occurrence of the DeprecationWarning, regardless of location + warnings.simplefilter('once', DeprecationWarning) + # Display the deprecation warning message + warnings.warn("Call to deprecated method %s" % deprecated_method.__name__, + category=DeprecationWarning, stacklevel=2) + return deprecated_method(*args, **kwargs) # actually call the method + + return _deprecated + + +@decorator_with_args +def duration(function, repeat=10000): + def _duration(*args, **kwargs): + time = 0 + try: + time = Timer(lambda: function(*args, **kwargs)).timeit(repeat) + finally: + benchtime, pystones = pystone.pystones() + kstones = (pystones * time) / 1000 + print '%s : time = %f kstones = %f' % (function.__name__, time, kstones) + return function(*args, **kwargs) + + return _duration + + +class TestDeprecatedDecorator(object): + @deprecated + def deprecated_decorator(self): + return + + def test_deprecated_decorator(self): + import sys + from StringIO import StringIO + + saved_stderr = sys.stderr + try: + out = StringIO() + sys.stderr = out + self.deprecated_decorator() + assert ('DeprecationWarning: Call to deprecated method deprecated_decorator' in out.getvalue()) + # 'in' because message contains the filename, line, etc + finally: + sys.stderr = saved_stderr + + +class TestDurationDecorator(object): + @duration(1) + def duration_decorator(self): + sleep(0.05) + return + + def test_duration_decorator(self): + import sys + import re + from StringIO import StringIO + + saved_stdout = sys.stdout + try: + out = StringIO() + sys.stdout = out + self.duration_decorator() + assert (re.match('((.+?[0-9]+\.[0-9]+)\s?){2}', out.getvalue())) + finally: + sys.stdout = saved_stdout + +if __name__ == '__main__': + a = TestDeprecatedDecorator() + a.test_deprecated_decorator() + a = TestDurationDecorator() + a.test_duration_decorator() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/dhcp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/dhcp.py new file mode 100644 index 00000000..5332a1fc --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/dhcp.py @@ -0,0 +1,169 @@ +# $Id: dhcp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Dynamic Host Configuration Protocol.""" + +import arp +import dpkt + +DHCP_OP_REQUEST = 1 +DHCP_OP_REPLY = 2 + +DHCP_MAGIC = 0x63825363 + +# DHCP option codes +DHCP_OPT_NETMASK = 1 # I: subnet mask +DHCP_OPT_TIMEOFFSET = 2 +DHCP_OPT_ROUTER = 3 # s: list of router ips +DHCP_OPT_TIMESERVER = 4 +DHCP_OPT_NAMESERVER = 5 +DHCP_OPT_DNS_SVRS = 6 # s: list of DNS servers +DHCP_OPT_LOGSERV = 7 +DHCP_OPT_COOKIESERV = 8 +DHCP_OPT_LPRSERV = 9 +DHCP_OPT_IMPSERV = 10 +DHCP_OPT_RESSERV = 11 +DHCP_OPT_HOSTNAME = 12 # s: client hostname +DHCP_OPT_BOOTFILESIZE = 13 +DHCP_OPT_DUMPFILE = 14 +DHCP_OPT_DOMAIN = 15 # s: domain name +DHCP_OPT_SWAPSERV = 16 +DHCP_OPT_ROOTPATH = 17 +DHCP_OPT_EXTENPATH = 18 +DHCP_OPT_IPFORWARD = 19 +DHCP_OPT_SRCROUTE = 20 +DHCP_OPT_POLICYFILTER = 21 +DHCP_OPT_MAXASMSIZE = 22 +DHCP_OPT_IPTTL = 23 +DHCP_OPT_MTUTIMEOUT = 24 +DHCP_OPT_MTUTABLE = 25 +DHCP_OPT_MTUSIZE = 26 +DHCP_OPT_LOCALSUBNETS = 27 +DHCP_OPT_BROADCASTADDR = 28 +DHCP_OPT_DOMASKDISCOV = 29 +DHCP_OPT_MASKSUPPLY = 30 +DHCP_OPT_DOROUTEDISC = 31 +DHCP_OPT_ROUTERSOLICIT = 32 +DHCP_OPT_STATICROUTE = 33 +DHCP_OPT_TRAILERENCAP = 34 +DHCP_OPT_ARPTIMEOUT = 35 +DHCP_OPT_ETHERENCAP = 36 +DHCP_OPT_TCPTTL = 37 +DHCP_OPT_TCPKEEPALIVE = 38 +DHCP_OPT_TCPALIVEGARBAGE = 39 +DHCP_OPT_NISDOMAIN = 40 +DHCP_OPT_NISSERVERS = 41 +DHCP_OPT_NISTIMESERV = 42 +DHCP_OPT_VENDSPECIFIC = 43 +DHCP_OPT_NBNS = 44 +DHCP_OPT_NBDD = 45 +DHCP_OPT_NBTCPIP = 46 +DHCP_OPT_NBTCPSCOPE = 47 +DHCP_OPT_XFONT = 48 +DHCP_OPT_XDISPLAYMGR = 49 +DHCP_OPT_REQ_IP = 50 # I: IP address +DHCP_OPT_LEASE_SEC = 51 # I: lease seconds +DHCP_OPT_OPTIONOVERLOAD = 52 +DHCP_OPT_MSGTYPE = 53 # B: message type +DHCP_OPT_SERVER_ID = 54 # I: server IP address +DHCP_OPT_PARAM_REQ = 55 # s: list of option codes +DHCP_OPT_MESSAGE = 56 +DHCP_OPT_MAXMSGSIZE = 57 +DHCP_OPT_RENEWTIME = 58 +DHCP_OPT_REBINDTIME = 59 +DHCP_OPT_VENDOR_ID = 60 # s: vendor class id +DHCP_OPT_CLIENT_ID = 61 # Bs: idtype, id (idtype 0: FQDN, idtype 1: MAC) +DHCP_OPT_NISPLUSDOMAIN = 64 +DHCP_OPT_NISPLUSSERVERS = 65 +DHCP_OPT_MOBILEIPAGENT = 68 +DHCP_OPT_SMTPSERVER = 69 +DHCP_OPT_POP3SERVER = 70 +DHCP_OPT_NNTPSERVER = 71 +DHCP_OPT_WWWSERVER = 72 +DHCP_OPT_FINGERSERVER = 73 +DHCP_OPT_IRCSERVER = 74 +DHCP_OPT_STSERVER = 75 +DHCP_OPT_STDASERVER = 76 + +# DHCP message type values +DHCPDISCOVER = 1 +DHCPOFFER = 2 +DHCPREQUEST = 3 +DHCPDECLINE = 4 +DHCPACK = 5 +DHCPNAK = 6 +DHCPRELEASE = 7 +DHCPINFORM = 8 + + +class DHCP(dpkt.Packet): + __hdr__ = ( + ('op', 'B', DHCP_OP_REQUEST), + ('hrd', 'B', arp.ARP_HRD_ETH), # just like ARP.hrd + ('hln', 'B', 6), # and ARP.hln + ('hops', 'B', 0), + ('xid', 'I', 0xdeadbeefL), + ('secs', 'H', 0), + ('flags', 'H', 0), + ('ciaddr', 'I', 0), + ('yiaddr', 'I', 0), + ('siaddr', 'I', 0), + ('giaddr', 'I', 0), + ('chaddr', '16s', 16 * '\x00'), + ('sname', '64s', 64 * '\x00'), + ('file', '128s', 128 * '\x00'), + ('magic', 'I', DHCP_MAGIC), + ) + opts = ( + (DHCP_OPT_MSGTYPE, chr(DHCPDISCOVER)), + (DHCP_OPT_PARAM_REQ, ''.join(map(chr, (DHCP_OPT_REQ_IP, + DHCP_OPT_ROUTER, + DHCP_OPT_NETMASK, + DHCP_OPT_DNS_SVRS)))) + ) # list of (type, data) tuples + + def __len__(self): + return self.__hdr_len__ + \ + sum([2 + len(o[1]) for o in self.opts]) + 1 + len(self.data) + + def __str__(self): + return self.pack_hdr() + self.pack_opts() + str(self.data) + + def pack_opts(self): + """Return packed options string.""" + if not self.opts: + return '' + l = [] + for t, data in self.opts: + l.append('%s%s%s' % (chr(t), chr(len(data)), data)) + l.append('\xff') + return ''.join(l) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.chaddr = self.chaddr[:self.hln] + buf = self.data + l = [] + while buf: + t = ord(buf[0]) + if t == 0xff: + buf = buf[1:] + break + elif t == 0: + buf = buf[1:] + else: + n = ord(buf[1]) + l.append((t, buf[2:2 + n])) + buf = buf[2 + n:] + self.opts = l + self.data = buf + + +def test_dhcp(): + s = '\x01\x01\x06\x00\xadS\xc8c\xb8\x87\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02U\x82\xf3\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Sc5\x01\x01\xfb\x01\x01=\x07\x01\x00\x02U\x82\xf3\xa62\x04\n\x00\x01e\x0c\tGuinevere<\x08MSFT 5.07\n\x01\x0f\x03\x06,./\x1f!+\xff\x00\x00\x00\x00\x00' + dhcp = DHCP(s) + assert (s == str(dhcp)) + + +if __name__ == '__main__': + test_dhcp() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/diameter.py b/external_libs/python/dpkt-1.8.6.2/dpkt/diameter.py new file mode 100644 index 00000000..a6994276 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/diameter.py @@ -0,0 +1,243 @@ +# $Id: diameter.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Diameter.""" + +import struct +import dpkt +from decorators import deprecated + +# Diameter Base Protocol - RFC 3588 +# http://tools.ietf.org/html/rfc3588 + +# Request/Answer Command Codes +ABORT_SESSION = 274 +ACCOUTING = 271 +CAPABILITIES_EXCHANGE = 257 +DEVICE_WATCHDOG = 280 +DISCONNECT_PEER = 282 +RE_AUTH = 258 +SESSION_TERMINATION = 275 + + +class Diameter(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 1), + ('len', '3s', 0), + ('flags', 'B', 0), + ('cmd', '3s', 0), + ('app_id', 'I', 0), + ('hop_id', 'I', 0), + ('end_id', 'I', 0) + ) + + @property + def request_flag(self): + return (self.flags >> 7) & 0x1 + + @request_flag.setter + def request_flag(self, r): + self.flags = (self.flags & ~0x80) | ((r & 0x1) << 7) + + @property + def proxiable_flag(self): + return (self.flags >> 6) & 0x1 + + @proxiable_flag.setter + def proxiable_flag(self, p): + self.flags = (self.flags & ~0x40) | ((p & 0x1) << 6) + + @property + def error_flag(self): + return (self.flags >> 5) & 0x1 + + @error_flag.setter + def error_flag(self, e): + self.flags = (self.flags & ~0x20) | ((e & 0x1) << 5) + + @property + def retransmit_flag(self): + return (self.flags >> 4) & 0x1 + + @retransmit_flag.setter + def retransmit_flag(self, t): + self.flags = (self.flags & ~0x10) | ((t & 0x1) << 4) + + # Deprecated methods, will be removed in the future + # ====================================================== + @deprecated + def _get_r(self): return self.request_flag + + @deprecated + def _set_r(self, r): self.request_flag = r + + @deprecated + def _get_p(self): return self.proxiable_flag + + @deprecated + def _set_p(self, p): self.proxiable_flag = p + + @deprecated + def _get_e(self): return self.error_flag + + @deprecated + def _set_e(self, e): self.error_flag = e + + @deprecated + def _get_t(self): return self.request_flag + + @deprecated + def _set_t(self, t): self.request_flag = t + + # ====================================================== + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.cmd = (ord(self.cmd[0]) << 16) | (ord(self.cmd[1]) << 8) | (ord(self.cmd[2])) + self.len = (ord(self.len[0]) << 16) | (ord(self.len[1]) << 8) | (ord(self.len[2])) + self.data = self.data[:self.len - self.__hdr_len__] + + l = [] + while self.data: + avp = AVP(self.data) + l.append(avp) + self.data = self.data[len(avp):] + self.data = self.avps = l + + def pack_hdr(self): + self.len = chr((self.len >> 16) & 0xff) + chr((self.len >> 8) & 0xff) + chr(self.len & 0xff) + self.cmd = chr((self.cmd >> 16) & 0xff) + chr((self.cmd >> 8) & 0xff) + chr(self.cmd & 0xff) + return dpkt.Packet.pack_hdr(self) + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + return self.pack_hdr() + ''.join(map(str, self.data)) + + +class AVP(dpkt.Packet): + __hdr__ = ( + ('code', 'I', 0), + ('flags', 'B', 0), + ('len', '3s', 0), + ) + + @property + def vendor_flag(self): + return (self.flags >> 7) & 0x1 + + @vendor_flag.setter + def vendor_flag(self, v): + self.flags = (self.flags & ~0x80) | ((v & 0x1) << 7) + + @property + def mandatory_flag(self): + return (self.flags >> 6) & 0x1 + + @mandatory_flag.setter + def mandatory_flag(self, m): + self.flags = (self.flags & ~0x40) | ((m & 0x1) << 6) + + @property + def protected_flag(self): + return (self.flags >> 5) & 0x1 + + @protected_flag.setter + def protected_flag(self, p): + self.flags = (self.flags & ~0x20) | ((p & 0x1) << 5) + + # Deprecated methods, will be removed in the future + # ====================================================== + @deprecated + def _get_v(self): + return self.vendor_flag + + @deprecated + def _set_v(self, v): + self.vendor_flag = v + + @deprecated + def _get_m(self): + return self.mandatory_flag + + @deprecated + def _set_m(self, m): + self.mandatory_flag = m + + @deprecated + def _get_p(self): + return self.protected_flag + + @deprecated + def _set_p(self, p): + self.protected_flag = p + + # ====================================================== + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.len = (ord(self.len[0]) << 16) | (ord(self.len[1]) << 8) | (ord(self.len[2])) + + if self.vendor_flag: + self.vendor = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:self.len - self.__hdr_len__] + else: + self.data = self.data[:self.len - self.__hdr_len__] + + def pack_hdr(self): + self.len = chr((self.len >> 16) & 0xff) + chr((self.len >> 8) & 0xff) + chr(self.len & 0xff) + data = dpkt.Packet.pack_hdr(self) + if self.vendor_flag: + data += struct.pack('>I', self.vendor) + return data + + def __len__(self): + length = self.__hdr_len__ + sum(map(len, self.data)) + if self.vendor_flag: + length += 4 + return length + + +__s = '\x01\x00\x00\x28\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x41\xc8\x00\x00\x00\x0c\x00\x00\x01\x08\x40\x00\x00\x0c\x68\x30\x30\x32\x00\x00\x01\x28\x40\x00\x00\x08' +__t = '\x01\x00\x00\x2c\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x41\xc8\x00\x00\x00\x0c\x00\x00\x01\x08\xc0\x00\x00\x10\xde\xad\xbe\xef\x68\x30\x30\x32\x00\x00\x01\x28\x40\x00\x00\x08' + + +def test_pack(): + d = Diameter(__s) + assert (__s == str(d)) + d = Diameter(__t) + assert (__t == str(d)) + + +def test_unpack(): + d = Diameter(__s) + assert (d.len == 40) + # assert (d.cmd == DEVICE_WATCHDOG_REQUEST) + assert (d.request_flag == 1) + assert (d.error_flag == 0) + assert (len(d.avps) == 2) + + avp = d.avps[0] + # assert (avp.code == ORIGIN_HOST) + assert (avp.mandatory_flag == 1) + assert (avp.vendor_flag == 0) + assert (avp.len == 12) + assert (len(avp) == 12) + assert (avp.data == '\x68\x30\x30\x32') + + # also test the optional vendor id support + d = Diameter(__t) + assert (d.len == 44) + avp = d.avps[0] + assert (avp.vendor_flag == 1) + assert (avp.len == 16) + assert (len(avp) == 16) + assert (avp.vendor == 3735928559) + assert (avp.data == '\x68\x30\x30\x32') + + +if __name__ == '__main__': + test_pack() + test_unpack() + print 'Tests Successful...' + diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/dns.py b/external_libs/python/dpkt-1.8.6.2/dpkt/dns.py new file mode 100644 index 00000000..d4d08e47 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/dns.py @@ -0,0 +1,462 @@ +# $Id: dns.py 27 2006-11-21 01:22:52Z dahelder $ +# -*- coding: utf-8 -*- +"""Domain Name System.""" + +import struct +import dpkt +from decorators import deprecated + +DNS_Q = 0 +DNS_R = 1 + +# Opcodes +DNS_QUERY = 0 +DNS_IQUERY = 1 +DNS_STATUS = 2 +DNS_NOTIFY = 4 +DNS_UPDATE = 5 + +# Flags +DNS_CD = 0x0010 # checking disabled +DNS_AD = 0x0020 # authenticated data +DNS_Z = 0x0040 # unused +DNS_RA = 0x0080 # recursion available +DNS_RD = 0x0100 # recursion desired +DNS_TC = 0x0200 # truncated +DNS_AA = 0x0400 # authoritative answer +DNS_QR = 0x8000 # response ( query / response ) + +# Response codes +DNS_RCODE_NOERR = 0 +DNS_RCODE_FORMERR = 1 +DNS_RCODE_SERVFAIL = 2 +DNS_RCODE_NXDOMAIN = 3 +DNS_RCODE_NOTIMP = 4 +DNS_RCODE_REFUSED = 5 +DNS_RCODE_YXDOMAIN = 6 +DNS_RCODE_YXRRSET = 7 +DNS_RCODE_NXRRSET = 8 +DNS_RCODE_NOTAUTH = 9 +DNS_RCODE_NOTZONE = 10 + +# RR types +DNS_A = 1 +DNS_NS = 2 +DNS_CNAME = 5 +DNS_SOA = 6 +DNS_PTR = 12 +DNS_HINFO = 13 +DNS_MX = 15 +DNS_TXT = 16 +DNS_AAAA = 28 +DNS_SRV = 33 + +# RR classes +DNS_IN = 1 +DNS_CHAOS = 3 +DNS_HESIOD = 4 +DNS_ANY = 255 + + +def pack_name(name, off, label_ptrs): + if name: + labels = name.split('.') + else: + labels = [] + labels.append('') + buf = '' + for i, label in enumerate(labels): + key = '.'.join(labels[i:]).upper() + ptr = label_ptrs.get(key) + if not ptr: + if len(key) > 1: + ptr = off + len(buf) + if ptr < 0xc000: + label_ptrs[key] = ptr + i = len(label) + buf += chr(i) + label + else: + buf += struct.pack('>H', (0xc000 | ptr)) + break + return buf + + +def unpack_name(buf, off): + name = '' + saved_off = 0 + for _ in range(100): # XXX + n = ord(buf[off]) + if n == 0: + off += 1 + break + elif (n & 0xc0) == 0xc0: + ptr = struct.unpack('>H', buf[off:off + 2])[0] & 0x3fff + off += 2 + if not saved_off: + saved_off = off + # XXX - don't use recursion!@#$ + name = name + unpack_name(buf, ptr)[0] + '.' + break + else: + off += 1 + name = name + buf[off:off + n] + '.' + if len(name) > 255: + raise dpkt.UnpackError('name longer than 255 bytes') + off += n + return name.strip('.'), off + + +class DNS(dpkt.Packet): + __hdr__ = ( + ('id', 'H', 0), + ('op', 'H', DNS_RD), # recursive query + # XXX - lists of query, RR objects + ('qd', 'H', []), + ('an', 'H', []), + ('ns', 'H', []), + ('ar', 'H', []) + ) + + @property + def qr(self): + return int((self.op & DNS_QR) == DNS_QR) + + @qr.setter + def qr(self, v): + if v: + self.op |= DNS_QR + else: + self.op &= ~DNS_QR + + @property + def opcode(self): + return (self.op >> 11) & 0xf + + @opcode.setter + def opcode(self, v): + self.op = (self.op & ~0x7800) | ((v & 0xf) << 11) + + @property + def aa(self): + return int((self.op & DNS_AA) == DNS_AA) + + @aa.setter + def aa(self, v): + if v: + self.op |= DNS_AA + else: + self.op &= ~DNS_AA + + @property + def rd(self): + return int((self.op & DNS_RD) == DNS_RD) + + @rd.setter + def rd(self, v): + if v: + self.op |= DNS_RD + else: + self.op &= ~DNS_RD + + @property + def ra(self): + return int((self.op & DNS_RA) == DNS_RA) + + @ra.setter + def ra(self, v): + if v: + self.op |= DNS_RA + else: + self.op &= ~DNS_RA + + @property + def zero(self): + return int((self.op & DNS_Z) == DNS_Z) + + @zero.setter + def zero(self, v): + if v: + self.op |= DNS_Z + else: + self.op &= ~DNS_Z + + @property + def rcode(self): + return self.op & 0xf + + @rcode.setter + def rcode(self, v): + self.op = (self.op & ~0xf) | (v & 0xf) + + # Deprecated methods, will be removed in the future + # ====================================================== + @deprecated + def get_qr(self): + return self.qr + + @deprecated + def set_qr(self, v): + self.qr = v + + @deprecated + def get_opcode(self): + return self.opcode + + @deprecated + def set_opcode(self, v): + self.opcode = v + + @deprecated + def get_aa(self): + return self.aa + + @deprecated + def set_aa(self, v): + self.aa = v + + @deprecated + def get_rd(self): + return self.rd + + @deprecated + def set_rd(self, v): + self.rd = v + + @deprecated + def get_ra(self): + return self.ra + + @deprecated + def set_ra(self, v): + self.ra = v + + @deprecated + def get_zero(self): + return self.zero + + @deprecated + def set_zero(self, v): + self.zero = v + + @deprecated + def get_rcode(self): + return self.rcode + + @deprecated + def set_rcode(self, v): + self.rcode = v + + # ====================================================== + + class Q(dpkt.Packet): + """DNS question.""" + __hdr__ = ( + ('name', '1025s', ''), + ('type', 'H', DNS_A), + ('cls', 'H', DNS_IN) + ) + + # XXX - suk + def __len__(self): + raise NotImplementedError + + __str__ = __len__ + + def unpack(self, buf): + raise NotImplementedError + + class RR(Q): + """DNS resource record.""" + __hdr__ = ( + ('name', '1025s', ''), + ('type', 'H', DNS_A), + ('cls', 'H', DNS_IN), + ('ttl', 'I', 0), + ('rlen', 'H', 4), + ('rdata', 's', '') + ) + + def pack_rdata(self, off, label_ptrs): + # XXX - yeah, this sux + if self.rdata: + return self.rdata + if self.type == DNS_A: + return self.ip + elif self.type == DNS_NS: + return pack_name(self.nsname, off, label_ptrs) + elif self.type == DNS_CNAME: + return pack_name(self.cname, off, label_ptrs) + elif self.type == DNS_PTR: + return pack_name(self.ptrname, off, label_ptrs) + elif self.type == DNS_SOA: + l = [] + l.append(pack_name(self.mname, off, label_ptrs)) + l.append(pack_name(self.rname, off + len(l[0]), label_ptrs)) + l.append(struct.pack('>IIIII', self.serial, self.refresh, + self.retry, self.expire, self.minimum)) + return ''.join(l) + elif self.type == DNS_MX: + return struct.pack('>H', self.preference) + \ + pack_name(self.mxname, off + 2, label_ptrs) + elif self.type == DNS_TXT or self.type == DNS_HINFO: + return ''.join(['%s%s' % (chr(len(x)), x) + for x in self.text]) + elif self.type == DNS_AAAA: + return self.ip6 + elif self.type == DNS_SRV: + return struct.pack('>HHH', self.priority, self.weight, self.port) + \ + pack_name(self.srvname, off + 6, label_ptrs) + + def unpack_rdata(self, buf, off): + if self.type == DNS_A: + self.ip = self.rdata + elif self.type == DNS_NS: + self.nsname, off = unpack_name(buf, off) + elif self.type == DNS_CNAME: + self.cname, off = unpack_name(buf, off) + elif self.type == DNS_PTR: + self.ptrname, off = unpack_name(buf, off) + elif self.type == DNS_SOA: + self.mname, off = unpack_name(buf, off) + self.rname, off = unpack_name(buf, off) + self.serial, self.refresh, self.retry, self.expire, \ + self.minimum = struct.unpack('>IIIII', buf[off:off + 20]) + elif self.type == DNS_MX: + self.preference = struct.unpack('>H', self.rdata[:2]) + self.mxname, off = unpack_name(buf, off + 2) + elif self.type == DNS_TXT or self.type == DNS_HINFO: + self.text = [] + buf = self.rdata + while buf: + n = ord(buf[0]) + self.text.append(buf[1:1 + n]) + buf = buf[1 + n:] + elif self.type == DNS_AAAA: + self.ip6 = self.rdata + elif self.type == DNS_SRV: + self.priority, self.weight, self.port = struct.unpack('>HHH', self.rdata[:6]) + self.srvname, off = unpack_name(buf, off + 6) + + def pack_q(self, buf, q): + """Append packed DNS question and return buf.""" + return buf + pack_name(q.name, len(buf), self.label_ptrs) + struct.pack('>HH', q.type, q.cls) + + def unpack_q(self, buf, off): + """Return DNS question and new offset.""" + q = self.Q() + q.name, off = unpack_name(buf, off) + q.type, q.cls = struct.unpack('>HH', buf[off:off + 4]) + off += 4 + return q, off + + def pack_rr(self, buf, rr): + """Append packed DNS RR and return buf.""" + name = pack_name(rr.name, len(buf), self.label_ptrs) + rdata = rr.pack_rdata(len(buf) + len(name) + 10, self.label_ptrs) + return buf + name + struct.pack('>HHIH', rr.type, rr.cls, rr.ttl, len(rdata)) + rdata + + def unpack_rr(self, buf, off): + """Return DNS RR and new offset.""" + rr = self.RR() + rr.name, off = unpack_name(buf, off) + rr.type, rr.cls, rr.ttl, rdlen = struct.unpack('>HHIH', buf[off:off + 10]) + off += 10 + rr.rdata = buf[off:off + rdlen] + rr.unpack_rdata(buf, off) + off += rdlen + return rr, off + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + off = self.__hdr_len__ + cnt = self.qd # FIXME: This relies on this being properly set somewhere else + self.qd = [] + for _ in range(cnt): + q, off = self.unpack_q(buf, off) + self.qd.append(q) + for x in ('an', 'ns', 'ar'): + cnt = getattr(self, x, 0) + setattr(self, x, []) + for _ in range(cnt): + rr, off = self.unpack_rr(buf, off) + getattr(self, x).append(rr) + self.data = '' + + def __len__(self): + # XXX - cop out + return len(str(self)) + + def __str__(self): + # XXX - compress names on the fly + self.label_ptrs = {} + buf = struct.pack(self.__hdr_fmt__, self.id, self.op, len(self.qd), + len(self.an), len(self.ns), len(self.ar)) + for q in self.qd: + buf = self.pack_q(buf, q) + for x in ('an', 'ns', 'ar'): + for rr in getattr(self, x): + buf = self.pack_rr(buf, rr) + del self.label_ptrs + return buf + + +def test_basic(): + from ip import IP + + s = 'E\x00\x02\x08\xc15\x00\x00\x80\x11\x92aBk0\x01Bk0w\x005\xc07\x01\xf4\xda\xc2d\xd2\x81\x80\x00\x01\x00\x03\x00\x0b\x00\x0b\x03www\x06google\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x05\x00\x01\x00\x00\x03V\x00\x17\x03www\x06google\x06akadns\x03net\x00\xc0,\x00\x01\x00\x01\x00\x00\x01\xa3\x00\x04@\xe9\xabh\xc0,\x00\x01\x00\x01\x00\x00\x01\xa3\x00\x04@\xe9\xabc\xc07\x00\x02\x00\x01\x00\x00KG\x00\x0c\x04usw5\x04akam\xc0>\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04usw6\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04usw7\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x08\x05asia3\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02za\xc07\xc07\x00\x02\x00\x01\x00\x00KG\x00\x0f\x02zc\x06akadns\x03org\x00\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02zf\xc07\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02zh\xc0\xd5\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04eur3\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04use2\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04use4\xc0t\xc0\xc1\x00\x01\x00\x01\x00\x00\xfb4\x00\x04\xd0\xb9\x84\xb0\xc0\xd2\x00\x01\x00\x01\x00\x001\x0c\x00\x04?\xf1\xc76\xc0\xed\x00\x01\x00\x01\x00\x00\xfb4\x00\x04?\xd7\xc6S\xc0\xfe\x00\x01\x00\x01\x00\x001\x0c\x00\x04?\xd00.\xc1\x0f\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04\xc1-\x01g\xc1"\x00\x01\x00\x01\x00\x00\x101\x00\x04?\xd1\xaa\x88\xc15\x00\x01\x00\x01\x00\x00\r\x1a\x00\x04PCC\xb6\xc0o\x00\x01\x00\x01\x00\x00\x10\x7f\x00\x04?\xf1I\xd6\xc0\x87\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04\xce\x84dl\xc0\x9a\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04A\xcb\xea\x1b\xc0\xad\x00\x01\x00\x01\x00\x00\x0b)\x00\x04\xc1l\x9a\t' + ip = IP(s) + my_dns = DNS(ip.udp.data) + assert my_dns.qd[0].name == 'www.google.com' and my_dns.an[1].name == 'www.google.akadns.net' + s = '\x05\xf5\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x03cnn\x03com\x00\x00\x01\x00\x01' + my_dns = DNS(s) + assert s == str(my_dns) + + +def test_PTR(): + s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' + my_dns = DNS(s) + assert my_dns.qd[0].name == '1.1.211.141.in-addr.arpa' and \ + my_dns.an[0].ptrname == 'default.v-umce-ifs.umnet.umich.edu' and \ + my_dns.ns[0].nsname == 'shabby.ifs.umich.edu' and \ + my_dns.ns[1].ttl == 3382L and \ + my_dns.ns[2].nsname == 'dns2.itd.umich.edu' + assert s == str(my_dns) + + +def test_pack_name(): + # Empty name is \0 + x = pack_name('', 0, {}) + assert x == '\0' + + +def test_deprecated_methods(): + """Test deprecated methods. Note: when they are removed so should this test""" + s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' + my_dns = DNS(s) + my_dns.get_aa() + my_dns.get_opcode() + qr = my_dns.get_qr() + my_dns.set_qr(qr) + qr2 = my_dns.get_qr() + assert qr == qr2 + + +def test_deprecated_method_performance(): + """Test the performance hit for the deprecation decorator""" + from timeit import Timer + + s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' + my_dns = DNS(s) + t1 = Timer(lambda: my_dns.aa).timeit(10000) + t2 = Timer(my_dns.get_aa).timeit(10000) + print 'Performance of dns.aa vs. dns.get_aa(): %f %f' % (t1, t2) + + +if __name__ == '__main__': + # Runs all the test associated with this class/file + test_basic() + test_PTR() + test_pack_name() + test_deprecated_methods() + test_deprecated_method_performance() + print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/dpkt.py b/external_libs/python/dpkt-1.8.6.2/dpkt/dpkt.py new file mode 100644 index 00000000..0ed3780f --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/dpkt.py @@ -0,0 +1,176 @@ +# $Id: dpkt.py 43 2007-08-02 22:42:59Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Simple packet creation and parsing.""" + +import copy +import itertools +import socket +import struct +import array + + +class Error(Exception): pass + + +class UnpackError(Error): pass + + +class NeedData(UnpackError): pass + + +class PackError(Error): pass + + +class _MetaPacket(type): + def __new__(cls, clsname, clsbases, clsdict): + t = type.__new__(cls, clsname, clsbases, clsdict) + st = getattr(t, '__hdr__', None) + if st is not None: + # XXX - __slots__ only created in __new__() + clsdict['__slots__'] = [x[0] for x in st] + ['data'] + t = type.__new__(cls, clsname, clsbases, clsdict) + t.__hdr_fields__ = [x[0] for x in st] + t.__hdr_fmt__ = getattr(t, '__byte_order__', '>') + \ + ''.join([x[1] for x in st]) + t.__hdr_len__ = struct.calcsize(t.__hdr_fmt__) + t.__hdr_defaults__ = dict(zip( + t.__hdr_fields__, [x[2] for x in st])) + return t + + +class Packet(object): + """Base packet class, with metaclass magic to generate members from + self.__hdr__. + + __hdr__ should be defined as a list of (name, structfmt, default) tuples + __byte_order__ can be set to override the default ('>') + + Example:: + + >>> class Foo(Packet): + ... __hdr__ = (('foo', 'I', 1), ('bar', 'H', 2), ('baz', '4s', 'quux')) + ... + >>> foo = Foo(bar=3) + >>> foo + Foo(bar=3) + >>> str(foo) + '\x00\x00\x00\x01\x00\x03quux' + >>> foo.bar + 3 + >>> foo.baz + 'quux' + >>> foo.foo = 7 + >>> foo.baz = 'whee' + >>> foo + Foo(baz='whee', foo=7, bar=3) + >>> Foo('hello, world!') + Foo(baz=' wor', foo=1751477356L, bar=28460, data='ld!') + """ + __metaclass__ = _MetaPacket + + def __init__(self, *args, **kwargs): + """Packet constructor with ([buf], [field=val,...]) prototype. + + Arguments: + + buf -- optional packet buffer to unpack + + Optional keyword arguments correspond to members to set + (matching fields in self.__hdr__, or 'data'). + """ + self.data = '' + if args: + try: + self.unpack(args[0]) + except struct.error: + if len(args[0]) < self.__hdr_len__: + raise NeedData + raise UnpackError('invalid %s: %r' % + (self.__class__.__name__, args[0])) + else: + for k in self.__hdr_fields__: + setattr(self, k, copy.copy(self.__hdr_defaults__[k])) + for k, v in kwargs.iteritems(): + setattr(self, k, v) + + def __len__(self): + return self.__hdr_len__ + len(self.data) + + def __getitem__(self, k): + try: + return getattr(self, k) + except AttributeError: + raise KeyError + + def __repr__(self): + l = ['%s=%r' % (k, getattr(self, k)) + for k in self.__hdr_defaults__ + if getattr(self, k) != self.__hdr_defaults__[k]] + if self.data: + l.append('data=%r' % self.data) + return '%s(%s)' % (self.__class__.__name__, ', '.join(l)) + + def __str__(self): + return self.pack_hdr() + str(self.data) + + def pack_hdr(self): + """Return packed header string.""" + try: + return struct.pack(self.__hdr_fmt__, + *[getattr(self, k) for k in self.__hdr_fields__]) + except struct.error: + vals = [] + for k in self.__hdr_fields__: + v = getattr(self, k) + if isinstance(v, tuple): + vals.extend(v) + else: + vals.append(v) + try: + return struct.pack(self.__hdr_fmt__, *vals) + except struct.error, e: + raise PackError(str(e)) + + def pack(self): + """Return packed header + self.data string.""" + return str(self) + + def unpack(self, buf): + """Unpack packet header fields from buf, and set self.data.""" + for k, v in itertools.izip(self.__hdr_fields__, + struct.unpack(self.__hdr_fmt__, buf[:self.__hdr_len__])): + setattr(self, k, v) + self.data = buf[self.__hdr_len__:] + +# XXX - ''.join([(len(`chr(x)`)==3) and chr(x) or '.' for x in range(256)]) +__vis_filter = """................................ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[.]^_`abcdefghijklmnopqrstuvwxyz{|}~.................................................................................................................................""" + + +def hexdump(buf, length=16): + """Return a hexdump output string of the given buffer.""" + n = 0 + res = [] + while buf: + line, buf = buf[:length], buf[length:] + hexa = ' '.join(['%02x' % ord(x) for x in line]) + line = line.translate(__vis_filter) + res.append(' %04d: %-*s %s' % (n, length * 3, hexa, line)) + n += length + return '\n'.join(res) + +def in_cksum_add(s, buf): + n = len(buf) + cnt = (n / 2) * 2 + a = array.array('H', buf[:cnt]) + if cnt != n: + a.append(struct.unpack('H', buf[-1] + '\x00')[0]) + return s + sum(a) + +def in_cksum_done(s): + s = (s >> 16) + (s & 0xffff) + s += (s >> 16) + return socket.ntohs(~s & 0xffff) + +def in_cksum(buf): + """Return computed Internet checksum.""" + return in_cksum_done(in_cksum_add(0, buf)) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/dtp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/dtp.py new file mode 100644 index 00000000..9fc7ec9f --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/dtp.py @@ -0,0 +1,26 @@ +# $Id: dtp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Dynamic Trunking Protocol.""" + +import struct +import dpkt + + +class DTP(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 0), + ) # rest is TLVs + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = self.data + tvs = [] + while buf: + t, l = struct.unpack('>HH', buf[:4]) + v, buf = buf[4:4 + l], buf[4 + l:] + tvs.append((t, v)) + self.data = tvs + + +TRUNK_NAME = 0x01 +MAC_ADDR = 0x04 diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/esp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/esp.py new file mode 100644 index 00000000..94295d39 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/esp.py @@ -0,0 +1,12 @@ +# $Id: esp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Encapsulated Security Protocol.""" + +import dpkt + + +class ESP(dpkt.Packet): + __hdr__ = ( + ('spi', 'I', 0), + ('seq', 'I', 0) + ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ethernet.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ethernet.py new file mode 100644 index 00000000..d8d8700f --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/ethernet.py @@ -0,0 +1,145 @@ +# $Id: ethernet.py 65 2010-03-26 02:53:51Z dugsong $ +# -*- coding: utf-8 -*- +"""Ethernet II, LLC (802.3+802.2), LLC/SNAP, and Novell raw 802.3, +with automatic 802.1q, MPLS, PPPoE, and Cisco ISL decapsulation.""" + +import struct +import dpkt +import stp + + +ETH_CRC_LEN = 4 +ETH_HDR_LEN = 14 + +ETH_LEN_MIN = 64 # minimum frame length with CRC +ETH_LEN_MAX = 1518 # maximum frame length with CRC + +ETH_MTU = (ETH_LEN_MAX - ETH_HDR_LEN - ETH_CRC_LEN) +ETH_MIN = (ETH_LEN_MIN - ETH_HDR_LEN - ETH_CRC_LEN) + +# Ethernet payload types - http://standards.ieee.org/regauth/ethertype +ETH_TYPE_PUP = 0x0200 # PUP protocol +ETH_TYPE_IP = 0x0800 # IP protocol +ETH_TYPE_ARP = 0x0806 # address resolution protocol +ETH_TYPE_AOE = 0x88a2 # AoE protocol +ETH_TYPE_CDP = 0x2000 # Cisco Discovery Protocol +ETH_TYPE_DTP = 0x2004 # Cisco Dynamic Trunking Protocol +ETH_TYPE_REVARP = 0x8035 # reverse addr resolution protocol +ETH_TYPE_8021Q = 0x8100 # IEEE 802.1Q VLAN tagging +ETH_TYPE_IPX = 0x8137 # Internetwork Packet Exchange +ETH_TYPE_IP6 = 0x86DD # IPv6 protocol +ETH_TYPE_PPP = 0x880B # PPP +ETH_TYPE_MPLS = 0x8847 # MPLS +ETH_TYPE_MPLS_MCAST = 0x8848 # MPLS Multicast +ETH_TYPE_PPPoE_DISC = 0x8863 # PPP Over Ethernet Discovery Stage +ETH_TYPE_PPPoE = 0x8864 # PPP Over Ethernet Session Stage +ETH_TYPE_LLDP = 0x88CC # Link Layer Discovery Protocol + +# MPLS label stack fields +MPLS_LABEL_MASK = 0xfffff000 +MPLS_QOS_MASK = 0x00000e00 +MPLS_TTL_MASK = 0x000000ff +MPLS_LABEL_SHIFT = 12 +MPLS_QOS_SHIFT = 9 +MPLS_TTL_SHIFT = 0 +MPLS_STACK_BOTTOM = 0x0100 + + +class Ethernet(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', ''), + ('src', '6s', ''), + ('type', 'H', ETH_TYPE_IP) + ) + _typesw = {} + + def _unpack_data(self, buf): + if self.type == ETH_TYPE_8021Q: + self.tag, self.type = struct.unpack('>HH', buf[:4]) + buf = buf[4:] + elif self.type == ETH_TYPE_MPLS or self.type == ETH_TYPE_MPLS_MCAST: + # XXX - skip labels (max # of labels is undefined, just use 24) + self.labels = [] + for i in range(24): + entry = struct.unpack('>I', buf[i * 4:i * 4 + 4])[0] + label = ((entry & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT, + (entry & MPLS_QOS_MASK) >> MPLS_QOS_SHIFT, + (entry & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT) + self.labels.append(label) + if entry & MPLS_STACK_BOTTOM: + break + self.type = ETH_TYPE_IP + buf = buf[(i + 1) * 4:] + try: + self.data = self._typesw[self.type](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.type > 1500: + # Ethernet II + self._unpack_data(self.data) + elif self.dst.startswith('\x01\x00\x0c\x00\x00') or \ + self.dst.startswith('\x03\x00\x0c\x00\x00'): + # Cisco ISL + self.vlan = struct.unpack('>H', self.data[6:8])[0] + self.unpack(self.data[12:]) + elif self.data.startswith('\xff\xff'): + # Novell "raw" 802.3 + self.type = ETH_TYPE_IPX + self.data = self.ipx = self._typesw[ETH_TYPE_IPX](self.data[2:]) + else: + # 802.2 LLC + self.dsap, self.ssap, self.ctl = struct.unpack('BBB', self.data[:3]) + if self.data.startswith('\xaa\xaa'): + # SNAP + self.type = struct.unpack('>H', self.data[6:8])[0] + self._unpack_data(self.data[8:]) + else: + # non-SNAP + dsap = ord(self.data[0]) + if dsap == 0x06: # SAP_IP + self.data = self.ip = self._typesw[ETH_TYPE_IP](self.data[3:]) + elif dsap == 0x10 or dsap == 0xe0: # SAP_NETWARE{1,2} + self.data = self.ipx = self._typesw[ETH_TYPE_IPX](self.data[3:]) + elif dsap == 0x42: # SAP_STP + self.data = self.stp = stp.STP(self.data[3:]) + + @classmethod + def set_type(cls, t, pktclass): + cls._typesw[t] = pktclass + + @classmethod + def get_type(cls, t): + return cls._typesw[t] + + +# XXX - auto-load Ethernet dispatch table from ETH_TYPE_* definitions +def __load_types(): + g = globals() + for k, v in g.iteritems(): + if k.startswith('ETH_TYPE_'): + name = k[9:] + modname = name.lower() + try: + mod = __import__(modname, g) + except ImportError: + continue + Ethernet.set_type(v, getattr(mod, name)) + + +if not Ethernet._typesw: + __load_types() + + +def test_eth(): # TODO recheck this test + s = '\x00\xb0\xd0\xe1\x80r\x00\x11$\x8c\x11\xde\x86\xdd`\x00\x00\x00\x00(\x06@\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x11$\xff\xfe\x8c\x11\xde\xfe\x80\x00\x00\x00\x00\x00\x00\x02\xb0\xd0\xff\xfe\xe1\x80r\xcd\xd3\x00\x16\xffP\xd7\x13\x00\x00\x00\x00\xa0\x02\xff\xffg\xd3\x00\x00\x02\x04\x05\xa0\x01\x03\x03\x00\x01\x01\x08\n}\x18:a\x00\x00\x00\x00' + # eth = Ethernet(s) # Variable eth is not used + Ethernet(s) + + +if __name__ == '__main__': + test_eth() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/gre.py b/external_libs/python/dpkt-1.8.6.2/dpkt/gre.py new file mode 100644 index 00000000..d61e56ff --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/gre.py @@ -0,0 +1,127 @@ +# $Id: gre.py 75 2010-08-03 14:42:19Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Generic Routing Encapsulation.""" + +import struct +import dpkt +from decorators import deprecated + +GRE_CP = 0x8000 # Checksum Present +GRE_RP = 0x4000 # Routing Present +GRE_KP = 0x2000 # Key Present +GRE_SP = 0x1000 # Sequence Present +GRE_SS = 0x0800 # Strict Source Route +GRE_AP = 0x0080 # Acknowledgment Present + +GRE_opt_fields = ( + (GRE_CP | GRE_RP, 'sum', 'H'), (GRE_CP | GRE_RP, 'off', 'H'), + (GRE_KP, 'key', 'I'), (GRE_SP, 'seq', 'I'), (GRE_AP, 'ack', 'I') +) + + +class GRE(dpkt.Packet): + __hdr__ = ( + ('flags', 'H', 0), + ('p', 'H', 0x0800), # ETH_TYPE_IP + ) + _protosw = {} + sre = () + + @property + def v(self): + return self.flags & 0x7 + + @v.setter + def v(self, v): + self.flags = (self.flags & ~0x7) | (v & 0x7) + + @property + def recur(self): + return (self.flags >> 5) & 0x7 + + @recur.setter + def recur(self, v): + self.flags = (self.flags & ~0xe0) | ((v & 0x7) << 5) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def get_v(self): return self.v + + @deprecated + def set_v(self, v): self.v = v + + @deprecated + def get_recur(self): return self.recur + + @deprecated + def set_recur(self, v): self.recur = v + # ================================================= + + + class SRE(dpkt.Packet): + __hdr__ = [ + ('family', 'H', 0), + ('off', 'B', 0), + ('len', 'B', 0) + ] + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len] + + def opt_fields_fmts(self): + if self.v == 0: + fields, fmts = [], [] + opt_fields = GRE_opt_fields + else: + fields, fmts = ['len', 'callid'], ['H', 'H'] + opt_fields = GRE_opt_fields[-2:] + for flags, field, fmt in opt_fields: + if self.flags & flags: + fields.append(field) + fmts.append(fmt) + return fields, fmts + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + fields, fmts = self.opt_fields_fmts() + if fields: + fmt = ''.join(fmts) + fmtlen = struct.calcsize(fmt) + vals = struct.unpack(fmt, self.data[:fmtlen]) + self.data = self.data[fmtlen:] + self.__dict__.update(dict(zip(fields, vals))) + if self.flags & GRE_RP: + l = [] + while True: + sre = self.SRE(self.data) + self.data = self.data[len(sre):] + l.append(sre) + if not sre.len: + break + self.sre = l + self.data = ethernet.Ethernet._typesw[self.p](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + + def __len__(self): + opt_fmtlen = struct.calcsize(''.join(self.opt_fields_fmts()[1])) + return self.__hdr_len__ + opt_fmtlen + sum(map(len, self.sre)) + len(self.data) + + # XXX - need to fix up repr to display optional fields... + + def __str__(self): + fields, fmts = self.opt_fields_fmts() + if fields: + vals = [] + for f in fields: + vals.append(getattr(self, f)) + opt_s = struct.pack(''.join(fmts), *vals) + else: + opt_s = '' + return self.pack_hdr() + opt_s + ''.join(map(str, self.sre)) + str(self.data) + +# XXX - auto-load GRE dispatch table from Ethernet dispatch table +import ethernet + +GRE._protosw.update(ethernet.Ethernet._typesw) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/gzip.py b/external_libs/python/dpkt-1.8.6.2/dpkt/gzip.py new file mode 100644 index 00000000..e41165b2 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/gzip.py @@ -0,0 +1,123 @@ +# $Id: gzip.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""GNU zip.""" + +import struct +import zlib +import dpkt + + +# RFC 1952 +GZIP_MAGIC = '\x1f\x8b' + +# Compression methods +GZIP_MSTORED = 0 +GZIP_MCOMPRESS = 1 +GZIP_MPACKED = 2 +GZIP_MLZHED = 3 +GZIP_MDEFLATE = 8 + +# Flags +GZIP_FTEXT = 0x01 +GZIP_FHCRC = 0x02 +GZIP_FEXTRA = 0x04 +GZIP_FNAME = 0x08 +GZIP_FCOMMENT = 0x10 +GZIP_FENCRYPT = 0x20 +GZIP_FRESERVED = 0xC0 + +# OS +GZIP_OS_MSDOS = 0 +GZIP_OS_AMIGA = 1 +GZIP_OS_VMS = 2 +GZIP_OS_UNIX = 3 +GZIP_OS_VMCMS = 4 +GZIP_OS_ATARI = 5 +GZIP_OS_OS2 = 6 +GZIP_OS_MACOS = 7 +GZIP_OS_ZSYSTEM = 8 +GZIP_OS_CPM = 9 +GZIP_OS_TOPS20 = 10 +GZIP_OS_WIN32 = 11 +GZIP_OS_QDOS = 12 +GZIP_OS_RISCOS = 13 +GZIP_OS_UNKNOWN = 255 + +GZIP_FENCRYPT_LEN = 12 + + +class GzipExtra(dpkt.Packet): + __hdr__ = ( + ('id', '2s', ''), + ('len', 'H', 0) + ) + + +class Gzip(dpkt.Packet): + __hdr__ = ( + ('magic', '2s', GZIP_MAGIC), + ('method', 'B', GZIP_MDEFLATE), + ('flags', 'B', 0), + ('mtime', 'I', 0), + ('xflags', 'B', 0), + ('os', 'B', GZIP_OS_UNIX), + + ('extra', '0s', ''), # XXX - GZIP_FEXTRA + ('filename', '0s', ''), # XXX - GZIP_FNAME + ('comment', '0s', '') # XXX - GZIP_FCOMMENT + ) + + def unpack(self, buf): + super(Gzip, self).unpack(buf) + if self.flags & GZIP_FEXTRA: + n = struct.unpack(self.data[:2], '>H')[0] + self.extra = GzipExtra(self.data[2:2 + n]) + self.data = self.data[2 + n:] + if self.flags & GZIP_FNAME: + n = self.data.find('\x00') + self.filename = self.data[:n] + self.data = self.data[n + 1:] + if self.flags & GZIP_FCOMMENT: + n = self.data.find('\x00') + self.comment = self.data[:n] + self.data = self.data[n + 1:] + if self.flags & GZIP_FENCRYPT: + self.data = self.data[GZIP_FENCRYPT_LEN:] # XXX - skip + if self.flags & GZIP_FHCRC: + self.data = self.data[2:] # XXX - skip + + def pack_hdr(self): + l = [] + if self.extra: + self.flags |= GZIP_FEXTRA + s = str(self.extra) + l.append(struct.pack('>H', len(s))) + l.append(s) + if self.filename: + self.flags |= GZIP_FNAME + l.append(self.filename) + l.append('\x00') + if self.comment: + self.flags |= GZIP_FCOMMENT + l.append(self.comment) + l.append('\x00') + l.insert(0, super(Gzip, self).pack_hdr()) + return ''.join(l) + + def compress(self): + """Compress self.data.""" + c = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS, + zlib.DEF_MEM_LEVEL, 0) + self.data = c.compress(self.data) + + def decompress(self): + """Return decompressed payload.""" + d = zlib.decompressobj(-zlib.MAX_WBITS) + return d.decompress(self.data) + + +if __name__ == '__main__': + import sys + + gz = Gzip(open(sys.argv[1]).read()) + print `gz`, `gz.decompress()` diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/h225.py b/external_libs/python/dpkt-1.8.6.2/dpkt/h225.py new file mode 100644 index 00000000..d8b2d51f --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/h225.py @@ -0,0 +1,213 @@ +# $Id: h225.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""ITU-T H.225.0 Call Signaling.""" + +import struct +import dpkt +import tpkt + + +# H225 Call Signaling +# +# Call messages and information elements (IEs) are defined by Q.931: +# http://cvsup.de.openbsd.org/historic/comp/doc/standards/itu/Q/Q.931.ps.gz +# +# The User-to-User IEs of H225 are encoded by PER of ASN.1. + +# Call Establishment Messages +ALERTING = 1 +CALL_PROCEEDING = 2 +CONNECT = 7 +CONNECT_ACKNOWLEDGE = 15 +PROGRESS = 3 +SETUP = 5 +SETUP_ACKNOWLEDGE = 13 + +# Call Information Phase Messages +RESUME = 38 +RESUME_ACKNOWLEDGE = 46 +RESUME_REJECT = 34 +SUSPEND = 37 +SUSPEND_ACKNOWLEDGE = 45 +SUSPEND_REJECT = 33 +USER_INFORMATION = 32 + +# Call Clearing Messages +DISCONNECT = 69 +RELEASE = 77 +RELEASE_COMPLETE = 90 +RESTART = 70 +RESTART_ACKNOWLEDGE = 78 + +# Miscellaneous Messages +SEGMENT = 96 +CONGESTION_CONTROL = 121 +INFORMATION = 123 +NOTIFY = 110 +STATUS = 125 +STATUS_ENQUIRY = 117 + +# Type 1 Single Octet Information Element IDs +RESERVED = 128 +SHIFT = 144 +CONGESTION_LEVEL = 176 +REPEAT_INDICATOR = 208 + +# Type 2 Single Octet Information Element IDs +MORE_DATA = 160 +SENDING_COMPLETE = 161 + +# Variable Length Information Element IDs +SEGMENTED_MESSAGE = 0 +BEARER_CAPABILITY = 4 +CAUSE = 8 +CALL_IDENTITY = 16 +CALL_STATE = 20 +CHANNEL_IDENTIFICATION = 24 +PROGRESS_INDICATOR = 30 +NETWORK_SPECIFIC_FACILITIES = 32 +NOTIFICATION_INDICATOR = 39 +DISPLAY = 40 +DATE_TIME = 41 +KEYPAD_FACILITY = 44 +SIGNAL = 52 +INFORMATION_RATE = 64 +END_TO_END_TRANSIT_DELAY = 66 +TRANSIT_DELAY_SELECTION_AND_INDICATION = 67 +PACKET_LAYER_BINARY_PARAMETERS = 68 +PACKET_LAYER_WINDOW_SIZE = 69 +PACKET_SIZE = 70 +CLOSED_USER_GROUP = 71 +REVERSE_CHARGE_INDICATION = 74 +CALLING_PARTY_NUMBER = 108 +CALLING_PARTY_SUBADDRESS = 109 +CALLED_PARTY_NUMBER = 112 +CALLED_PARTY_SUBADDRESS = 113 +REDIRECTING_NUMBER = 116 +TRANSIT_NETWORK_SELECTION = 120 +RESTART_INDICATOR = 121 +LOW_LAYER_COMPATIBILITY = 124 +HIGH_LAYER_COMPATIBILITY = 125 +USER_TO_USER = 126 +ESCAPE_FOR_EXTENSION = 127 + + +class H225(dpkt.Packet): + __hdr__ = ( + ('proto', 'B', 8), + ('ref_len', 'B', 2) + ) + + def unpack(self, buf): + # TPKT header + self.tpkt = tpkt.TPKT(buf) + if self.tpkt.v != 3: + raise dpkt.UnpackError('invalid TPKT version') + if self.tpkt.rsvd != 0: + raise dpkt.UnpackError('invalid TPKT reserved value') + n = self.tpkt.len - self.tpkt.__hdr_len__ + if n > len(self.tpkt.data): + raise dpkt.UnpackError('invalid TPKT length') + buf = self.tpkt.data + + # Q.931 payload + dpkt.Packet.unpack(self, buf) + buf = buf[self.__hdr_len__:] + self.ref_val = buf[:self.ref_len] + buf = buf[self.ref_len:] + self.type = struct.unpack('B', buf[:1])[0] + buf = buf[1:] + + # Information Elements + l = [] + while buf: + ie = self.IE(buf) + l.append(ie) + buf = buf[len(ie):] + self.data = l + + def __len__(self): + return self.tpkt.__hdr_len__ + self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + return self.tpkt.pack_hdr() + self.pack_hdr() + self.ref_val + \ + struct.pack('B', self.type) + ''.join(map(str, self.data)) + + class IE(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = buf[self.__hdr_len__:] + + # single-byte IE + if self.type & 0x80: + self.len = 0 + self.data = None + # multi-byte IE + else: + # special PER-encoded UUIE + if self.type == USER_TO_USER: + self.len = struct.unpack('>H', buf[:2])[0] + buf = buf[2:] + # normal TLV-like IE + else: + self.len = struct.unpack('B', buf[:1])[0] + buf = buf[1:] + self.data = buf[:self.len] + + def __len__(self): + if self.type & 0x80: + n = 0 + else: + if self.type == USER_TO_USER: + n = 2 + else: + n = 1 + return self.__hdr_len__ + self.len + n + + def __str__(self): + if self.type & 0x80: + length_str = None + else: + if self.type == USER_TO_USER: + length_str = struct.pack('>H', self.len) + else: + length_str = struct.pack('B', self.len) + return struct.pack('B', self.type) + length_str + self.data + + +__s = '\x03\x00\x04\x11\x08\x02\x54\x2b\x05\x04\x03\x88\x93\xa5\x28\x0e\x4a\x6f\x6e\x20\x4f\x62\x65\x72\x68\x65\x69\x64\x65\x00\x7e\x03\xf0\x05\x20\xb8\x06\x00\x08\x91\x4a\x00\x04\x01\x40\x0c\x00\x4a\x00\x6f\x00\x6e\x00\x20\x00\x4f\x00\x62\x00\x65\x00\x72\x00\x68\x00\x65\x00\x69\x00\x64\x00\x65\x22\xc0\x09\x00\x00\x3d\x06\x65\x6b\x69\x67\x61\x00\x00\x14\x32\x2e\x30\x2e\x32\x20\x28\x4f\x50\x41\x4c\x20\x76\x32\x2e\x32\x2e\x32\x29\x00\x00\x00\x01\x40\x15\x00\x74\x00\x63\x00\x70\x00\x24\x00\x68\x00\x33\x00\x32\x00\x33\x00\x2e\x00\x76\x00\x6f\x00\x78\x00\x67\x00\x72\x00\x61\x00\x74\x00\x69\x00\x61\x00\x2e\x00\x6f\x00\x72\x00\x67\x00\x42\x87\x23\x2c\x06\xb8\x00\x6a\x8b\x1d\x0c\xb7\x06\xdb\x11\x9e\xca\x00\x10\xa4\x89\x6d\x6a\x00\xc5\x1d\x80\x04\x07\x00\x0a\x00\x01\x7a\x75\x30\x11\x00\x5e\x88\x1d\x0c\xb7\x06\xdb\x11\x9e\xca\x00\x10\xa4\x89\x6d\x6a\x82\x2b\x0e\x30\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x26\x00\x00\x64\x0c\x10\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x2a\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x20\x00\x00\x65\x0c\x10\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x20\x40\x00\x00\x06\x04\x01\x00\x4e\x0c\x03\x00\x83\x00\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x16\x00\x00\x66\x0e\x0c\x03\x00\x83\x00\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x4b\x40\x00\x00\x06\x04\x01\x00\x4c\x10\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x41\x00\x00\x67\x0c\x10\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x32\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x28\x00\x00\x68\x0c\x10\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x1d\x40\x00\x00\x06\x04\x01\x00\x4c\x60\x1d\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x13\x00\x00\x69\x0c\x60\x1d\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x1d\x40\x00\x00\x06\x04\x01\x00\x4c\x20\x1d\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x13\x00\x00\x6a\x0c\x20\x1d\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x01\x00\x01\x00\x01\x00\x01\x00\x81\x03\x02\x80\xf8\x02\x70\x01\x06\x00\x08\x81\x75\x00\x0b\x80\x13\x80\x01\xf4\x00\x01\x00\x00\x01\x00\x00\x01\x00\x00\x0c\xc0\x01\x00\x01\x80\x0b\x80\x00\x00\x20\x20\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x00\x01\x20\x20\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x00\x02\x24\x18\x03\x00\xe6\x00\x80\x00\x03\x20\x20\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x00\x04\x20\x20\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x00\x05\x20\xc0\xef\x80\x00\x06\x20\x40\xef\x80\x00\x07\x08\xe0\x03\x51\x00\x80\x01\x00\x80\x00\x08\x08\xd0\x03\x51\x00\x80\x01\x00\x80\x00\x09\x83\x01\x50\x80\x00\x0a\x83\x01\x10\x80\x00\x0b\x83\x01\x40\x00\x80\x01\x03\x06\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x01\x00\x07\x00\x08\x00\x00\x09\x01\x00\x0a\x00\x0b\x07\x01\x00\x32\x80\xa6\xff\x4c\x02\x80\x01\x80' + + +def test_pack(): + h = H225(__s) + assert (__s == str(h)) + + +def test_unpack(): + h = H225(__s) + assert (h.tpkt.v == 3) + assert (h.tpkt.rsvd == 0) + assert (h.tpkt.len == 1041) + assert (h.proto == 8) + assert (h.type == SETUP) + assert (len(h.data) == 3) + + ie = h.data[0] + assert (ie.type == BEARER_CAPABILITY) + assert (ie.len == 3) + ie = h.data[1] + assert (ie.type == DISPLAY) + assert (ie.len == 14) + ie = h.data[2] + assert (ie.type == USER_TO_USER) + assert (ie.len == 1008) + + +if __name__ == '__main__': + test_pack() + test_unpack() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/hsrp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/hsrp.py new file mode 100644 index 00000000..7581d3e4 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/hsrp.py @@ -0,0 +1,33 @@ +# $Id: hsrp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Cisco Hot Standby Router Protocol.""" + +import dpkt + +# Opcodes +HELLO = 0 +COUP = 1 +RESIGN = 2 + +# States +INITIAL = 0x00 +LEARN = 0x01 +LISTEN = 0x02 +SPEAK = 0x04 +STANDBY = 0x08 +ACTIVE = 0x10 + + +class HSRP(dpkt.Packet): + __hdr__ = ( + ('version', 'B', 0), + ('opcode', 'B', 0), + ('state', 'B', 0), + ('hello', 'B', 0), + ('hold', 'B', 0), + ('priority', 'B', 0), + ('group', 'B', 0), + ('rsvd', 'B', 0), + ('auth', '8s', 'cisco'), + ('vip', '4s', '') + ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/http.py b/external_libs/python/dpkt-1.8.6.2/dpkt/http.py new file mode 100644 index 00000000..59759ac6 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/http.py @@ -0,0 +1,259 @@ +# $Id: http.py 86 2013-03-05 19:25:19Z andrewflnr@gmail.com $ +# -*- coding: utf-8 -*- +"""Hypertext Transfer Protocol.""" + +import cStringIO +import dpkt + + +def parse_headers(f): + """Return dict of HTTP headers parsed from a file object.""" + d = {} + while 1: + line = f.readline() + if not line: + raise dpkt.NeedData('premature end of headers') + line = line.strip() + if not line: + break + l = line.split(':', 1) + if len(l[0].split()) != 1: + raise dpkt.UnpackError('invalid header: %r' % line) + k = l[0].lower() + v = len(l) != 1 and l[1].lstrip() or '' + if k in d: + if not type(d[k]) is list: + d[k] = [d[k]] + d[k].append(v) + else: + d[k] = v + return d + + +def parse_body(f, headers): + """Return HTTP body parsed from a file object, given HTTP header dict.""" + if headers.get('transfer-encoding', '').lower() == 'chunked': + l = [] + found_end = False + while 1: + try: + sz = f.readline().split(None, 1)[0] + except IndexError: + raise dpkt.UnpackError('missing chunk size') + n = int(sz, 16) + if n == 0: + found_end = True + buf = f.read(n) + if f.readline().strip(): + break + if n and len(buf) == n: + l.append(buf) + else: + break + if not found_end: + raise dpkt.NeedData('premature end of chunked body') + body = ''.join(l) + elif 'content-length' in headers: + n = int(headers['content-length']) + body = f.read(n) + if len(body) != n: + raise dpkt.NeedData('short body (missing %d bytes)' % (n - len(body))) + elif 'content-type' in headers: + body = f.read() + else: + # XXX - need to handle HTTP/0.9 + body = '' + return body + + +class Message(dpkt.Packet): + """Hypertext Transfer Protocol headers + body.""" + __metaclass__ = type + __hdr_defaults__ = {} + headers = None + body = None + + def __init__(self, *args, **kwargs): + if args: + self.unpack(args[0]) + else: + self.headers = {} + self.body = '' + for k, v in self.__hdr_defaults__.iteritems(): + setattr(self, k, v) + for k, v in kwargs.iteritems(): + setattr(self, k, v) + + def unpack(self, buf): + f = cStringIO.StringIO(buf) + # Parse headers + self.headers = parse_headers(f) + # Parse body + self.body = parse_body(f, self.headers) + # Save the rest + self.data = f.read() + + def pack_hdr(self): + return ''.join(['%s: %s\r\n' % t for t in self.headers.iteritems()]) + + def __len__(self): + return len(str(self)) + + def __str__(self): + return '%s\r\n%s' % (self.pack_hdr(), self.body) + + +class Request(Message): + """Hypertext Transfer Protocol Request.""" + __hdr_defaults__ = { + 'method': 'GET', + 'uri': '/', + 'version': '1.0', + } + __methods = dict.fromkeys(( + 'GET', 'PUT', 'ICY', + 'COPY', 'HEAD', 'LOCK', 'MOVE', 'POLL', 'POST', + 'BCOPY', 'BMOVE', 'MKCOL', 'TRACE', 'LABEL', 'MERGE', + 'DELETE', 'SEARCH', 'UNLOCK', 'REPORT', 'UPDATE', 'NOTIFY', + 'BDELETE', 'CONNECT', 'OPTIONS', 'CHECKIN', + 'PROPFIND', 'CHECKOUT', 'CCM_POST', + 'SUBSCRIBE', 'PROPPATCH', 'BPROPFIND', + 'BPROPPATCH', 'UNCHECKOUT', 'MKACTIVITY', + 'MKWORKSPACE', 'UNSUBSCRIBE', 'RPC_CONNECT', + 'VERSION-CONTROL', + 'BASELINE-CONTROL' + )) + __proto = 'HTTP' + + def unpack(self, buf): + f = cStringIO.StringIO(buf) + line = f.readline() + l = line.strip().split() + if len(l) < 2: + raise dpkt.UnpackError('invalid request: %r' % line) + if l[0] not in self.__methods: + raise dpkt.UnpackError('invalid http method: %r' % l[0]) + if len(l) == 2: + # HTTP/0.9 does not specify a version in the request line + self.version = '0.9' + else: + if not l[2].startswith(self.__proto): + raise dpkt.UnpackError('invalid http version: %r' % l[2]) + self.version = l[2][len(self.__proto) + 1:] + self.method = l[0] + self.uri = l[1] + Message.unpack(self, f.read()) + + def __str__(self): + return '%s %s %s/%s\r\n' % (self.method, self.uri, self.__proto, + self.version) + Message.__str__(self) + + +class Response(Message): + """Hypertext Transfer Protocol Response.""" + __hdr_defaults__ = { + 'version': '1.0', + 'status': '200', + 'reason': 'OK' + } + __proto = 'HTTP' + + def unpack(self, buf): + f = cStringIO.StringIO(buf) + line = f.readline() + l = line.strip().split(None, 2) + if len(l) < 2 or not l[0].startswith(self.__proto) or not l[1].isdigit(): + raise dpkt.UnpackError('invalid response: %r' % line) + self.version = l[0][len(self.__proto) + 1:] + self.status = l[1] + self.reason = l[2] if len(l) > 2 else '' + Message.unpack(self, f.read()) + + def __str__(self): + return '%s/%s %s %s\r\n' % (self.__proto, self.version, self.status, + self.reason) + Message.__str__(self) + + +def test_parse_request(): + s = """POST /main/redirect/ab/1,295,,00.html HTTP/1.0\r\nReferer: http://www.email.com/login/snap/login.jhtml\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.75 [en] (X11; U; OpenBSD 2.8 i386; Nav)\r\nHost: ltd.snap.com\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: 61\r\n\r\nsn=em&mn=dtest4&pw=this+is+atest&fr=true&login=Sign+in&od=www""" + r = Request(s) + assert r.method == 'POST' + assert r.uri == '/main/redirect/ab/1,295,,00.html' + assert r.body == 'sn=em&mn=dtest4&pw=this+is+atest&fr=true&login=Sign+in&od=www' + assert r.headers['content-type'] == 'application/x-www-form-urlencoded' + try: + Request(s[:60]) + assert 'invalid headers parsed!' + except dpkt.UnpackError: + pass + + +def test_format_request(): + r = Request() + assert str(r) == 'GET / HTTP/1.0\r\n\r\n' + r.method = 'POST' + r.uri = '/foo/bar/baz.html' + r.headers['content-type'] = 'text/plain' + r.headers['content-length'] = '5' + r.body = 'hello' + s = str(r) + assert s.startswith('POST /foo/bar/baz.html HTTP/1.0\r\n') + assert s.endswith('\r\n\r\nhello') + assert '\r\ncontent-length: 5\r\n' in s + assert '\r\ncontent-type: text/plain\r\n' in s + r = Request(str(r)) + assert str(r) == s + + +def test_chunked_response(): + s = """HTTP/1.1 200 OK\r\nCache-control: no-cache\r\nPragma: no-cache\r\nContent-Type: text/javascript; charset=utf-8\r\nContent-Encoding: gzip\r\nTransfer-Encoding: chunked\r\nSet-Cookie: S=gmail=agg:gmail_yj=v2s:gmproxy=JkU; Domain=.google.com; Path=/\r\nServer: GFE/1.3\r\nDate: Mon, 12 Dec 2005 22:33:23 GMT\r\n\r\na\r\n\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\r\n152\r\nm\x91MO\xc4 \x10\x86\xef\xfe\n\x82\xc9\x9eXJK\xe9\xb6\xee\xc1\xe8\x1e6\x9e4\xf1\xe0a5\x86R\xda\x12Yh\x80\xba\xfa\xef\x85\xee\x1a/\xf21\x99\x0c\xef0<\xc3\x81\xa0\xc3\x01\xe6\x10\xc1<\xa7eYT5\xa1\xa4\xac\xe1\xdb\x15:\xa4\x9d\x0c\xfa5K\x00\xf6.\xaa\xeb\x86\xd5y\xcdHY\x954\x8e\xbc*h\x8c\x8e!L7Y\xe6\'\xeb\x82WZ\xcf>8\x1ed\x87\x851X\xd8c\xe6\xbc\x17Z\x89\x8f\xac \x84e\xde\n!]\x96\x17i\xb5\x02{{\xc2z0\x1e\x0f#7\x9cw3v\x992\x9d\xfc\xc2c8\xea[/EP\xd6\xbc\xce\x84\xd0\xce\xab\xf7`\'\x1f\xacS\xd2\xc7\xd2\xfb\x94\x02N\xdc\x04\x0f\xee\xba\x19X\x03TtW\xd7\xb4\xd9\x92\n\xbcX\xa7;\xb0\x9b\'\x10$?F\xfd\xf3CzPt\x8aU\xef\xb8\xc8\x8b-\x18\xed\xec<\xe0\x83\x85\x08!\xf8"[\xb0\xd3j\x82h\x93\xb8\xcf\xd8\x9b\xba\xda\xd0\x92\x14\xa4a\rc\reM\xfd\x87=X;h\xd9j;\xe0db\x17\xc2\x02\xbd\xb0F\xc2in#\xfb:\xb6\xc4x\x15\xd6\x9f\x8a\xaf\xcf)\x0b^\xbc\xe7i\x11\x80\x8b\x00D\x01\xd8/\x82x\xf6\xd8\xf7J(\xae/\x11p\x1f+\xc4p\t:\xfe\xfd\xdf\xa3Y\xfa\xae4\x7f\x00\xc5\xa5\x95\xa1\xe2\x01\x00\x00\r\n0\r\n\r\n""" + r = Response(s) + assert r.version == '1.1' + assert r.status == '200' + assert r.reason == 'OK' + + +def test_multicookie_response(): + s = """HTTP/1.x 200 OK\r\nSet-Cookie: first_cookie=cookie1; path=/; domain=.example.com\r\nSet-Cookie: second_cookie=cookie2; path=/; domain=.example.com\r\nContent-Length: 0\r\n\r\n""" + r = Response(s) + assert type(r.headers['set-cookie']) is list + assert len(r.headers['set-cookie']) == 2 + + +def test_noreason_response(): + s = """HTTP/1.1 200 \r\n\r\n""" + r = Response(s) + assert r.reason == '' + assert str(r) == s + + +def test_request_version(): + s = """GET / HTTP/1.0\r\n\r\n""" + r = Request(s) + assert r.method == 'GET' + assert r.uri == '/' + assert r.version == '1.0' + + s = """GET /\r\n\r\n""" + r = Request(s) + assert r.method == 'GET' + assert r.uri == '/' + assert r.version == '0.9' + + s = """GET / CHEESE/1.0\r\n\r\n""" + try: + Request(s) + assert "invalid protocol version parsed!" + except: + pass + + +if __name__ == '__main__': + # Runs all the test associated with this class/file + test_parse_request() + test_format_request() + test_chunked_response() + test_multicookie_response() + test_noreason_response() + test_request_version() + print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/icmp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/icmp.py new file mode 100644 index 00000000..12e73728 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/icmp.py @@ -0,0 +1,127 @@ +# $Id: icmp.py 45 2007-08-03 00:05:22Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Internet Control Message Protocol.""" + +import dpkt +import ip + +# Types (icmp_type) and codes (icmp_code) - +# http://www.iana.org/assignments/icmp-parameters + +ICMP_CODE_NONE = 0 # for types without codes +ICMP_ECHOREPLY = 0 # echo reply +ICMP_UNREACH = 3 # dest unreachable, codes: +ICMP_UNREACH_NET = 0 # bad net +ICMP_UNREACH_HOST = 1 # bad host +ICMP_UNREACH_PROTO = 2 # bad protocol +ICMP_UNREACH_PORT = 3 # bad port +ICMP_UNREACH_NEEDFRAG = 4 # IP_DF caused drop +ICMP_UNREACH_SRCFAIL = 5 # src route failed +ICMP_UNREACH_NET_UNKNOWN = 6 # unknown net +ICMP_UNREACH_HOST_UNKNOWN = 7 # unknown host +ICMP_UNREACH_ISOLATED = 8 # src host isolated +ICMP_UNREACH_NET_PROHIB = 9 # for crypto devs +ICMP_UNREACH_HOST_PROHIB = 10 # ditto +ICMP_UNREACH_TOSNET = 11 # bad tos for net +ICMP_UNREACH_TOSHOST = 12 # bad tos for host +ICMP_UNREACH_FILTER_PROHIB = 13 # prohibited access +ICMP_UNREACH_HOST_PRECEDENCE = 14 # precedence error +ICMP_UNREACH_PRECEDENCE_CUTOFF = 15 # precedence cutoff +ICMP_SRCQUENCH = 4 # packet lost, slow down +ICMP_REDIRECT = 5 # shorter route, codes: +ICMP_REDIRECT_NET = 0 # for network +ICMP_REDIRECT_HOST = 1 # for host +ICMP_REDIRECT_TOSNET = 2 # for tos and net +ICMP_REDIRECT_TOSHOST = 3 # for tos and host +ICMP_ALTHOSTADDR = 6 # alternate host address +ICMP_ECHO = 8 # echo service +ICMP_RTRADVERT = 9 # router advertise, codes: +ICMP_RTRADVERT_NORMAL = 0 # normal +ICMP_RTRADVERT_NOROUTE_COMMON = 16 # selective routing +ICMP_RTRSOLICIT = 10 # router solicitation +ICMP_TIMEXCEED = 11 # time exceeded, code: +ICMP_TIMEXCEED_INTRANS = 0 # ttl==0 in transit +ICMP_TIMEXCEED_REASS = 1 # ttl==0 in reass +ICMP_PARAMPROB = 12 # ip header bad +ICMP_PARAMPROB_ERRATPTR = 0 # req. opt. absent +ICMP_PARAMPROB_OPTABSENT = 1 # req. opt. absent +ICMP_PARAMPROB_LENGTH = 2 # bad length +ICMP_TSTAMP = 13 # timestamp request +ICMP_TSTAMPREPLY = 14 # timestamp reply +ICMP_INFO = 15 # information request +ICMP_INFOREPLY = 16 # information reply +ICMP_MASK = 17 # address mask request +ICMP_MASKREPLY = 18 # address mask reply +ICMP_TRACEROUTE = 30 # traceroute +ICMP_DATACONVERR = 31 # data conversion error +ICMP_MOBILE_REDIRECT = 32 # mobile host redirect +ICMP_IP6_WHEREAREYOU = 33 # IPv6 where-are-you +ICMP_IP6_IAMHERE = 34 # IPv6 i-am-here +ICMP_MOBILE_REG = 35 # mobile registration req +ICMP_MOBILE_REGREPLY = 36 # mobile registration reply +ICMP_DNS = 37 # domain name request +ICMP_DNSREPLY = 38 # domain name reply +ICMP_SKIP = 39 # SKIP +ICMP_PHOTURIS = 40 # Photuris +ICMP_PHOTURIS_UNKNOWN_INDEX = 0 # unknown sec index +ICMP_PHOTURIS_AUTH_FAILED = 1 # auth failed +ICMP_PHOTURIS_DECOMPRESS_FAILED = 2 # decompress failed +ICMP_PHOTURIS_DECRYPT_FAILED = 3 # decrypt failed +ICMP_PHOTURIS_NEED_AUTHN = 4 # no authentication +ICMP_PHOTURIS_NEED_AUTHZ = 5 # no authorization +ICMP_TYPE_MAX = 40 + + +class ICMP(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 8), + ('code', 'B', 0), + ('sum', 'H', 0) + ) + + class Echo(dpkt.Packet): + __hdr__ = (('id', 'H', 0), ('seq', 'H', 0)) + + class Quote(dpkt.Packet): + __hdr__ = (('pad', 'I', 0),) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.ip = ip.IP(self.data) + + class Unreach(Quote): + __hdr__ = (('pad', 'H', 0), ('mtu', 'H', 0)) + + class Quench(Quote): pass + + class Redirect(Quote): + __hdr__ = (('gw', 'I', 0),) + + class ParamProbe(Quote): + __hdr__ = (('ptr', 'B', 0), ('pad1', 'B', 0), ('pad2', 'H', 0)) + + class TimeExceed(Quote): pass + + _typesw = {0: Echo, 3: Unreach, 4: Quench, 5: Redirect, 8: Echo, 11: TimeExceed} + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._typesw[self.type](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + pass + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) + + +def test_icmp(): + s = '\x03\x0a\x6b\x19\x00\x00\x00\x00\x45\x00\x00\x28\x94\x1f\x00\x00\xe3\x06\x99\xb4\x23\x2b\x24\x00\xde\x8e\x84\x42\xab\xd1\x00\x50\x00\x35\xe1\x29\x20\xd9\x00\x00\x00\x22\x9b\xf0\xe2\x04\x65\x6b' + assert (str(ICMP(s)) == s) + +if __name__ == '__main__': + test_icmp() + print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/icmp6.py b/external_libs/python/dpkt-1.8.6.2/dpkt/icmp6.py new file mode 100644 index 00000000..679bc6b4 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/icmp6.py @@ -0,0 +1,77 @@ +# $Id: icmp6.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Internet Control Message Protocol for IPv6.""" + +import dpkt +import ip6 + +ICMP6_DST_UNREACH = 1 # dest unreachable, codes: +ICMP6_PACKET_TOO_BIG = 2 # packet too big +ICMP6_TIME_EXCEEDED = 3 # time exceeded, code: +ICMP6_PARAM_PROB = 4 # ip6 header bad + +ICMP6_ECHO_REQUEST = 128 # echo service +ICMP6_ECHO_REPLY = 129 # echo reply +MLD_LISTENER_QUERY = 130 # multicast listener query +MLD_LISTENER_REPORT = 131 # multicast listener report +MLD_LISTENER_DONE = 132 # multicast listener done + +# RFC2292 decls +ICMP6_MEMBERSHIP_QUERY = 130 # group membership query +ICMP6_MEMBERSHIP_REPORT = 131 # group membership report +ICMP6_MEMBERSHIP_REDUCTION = 132 # group membership termination + +ND_ROUTER_SOLICIT = 133 # router solicitation +ND_ROUTER_ADVERT = 134 # router advertisment +ND_NEIGHBOR_SOLICIT = 135 # neighbor solicitation +ND_NEIGHBOR_ADVERT = 136 # neighbor advertisment +ND_REDIRECT = 137 # redirect + +ICMP6_ROUTER_RENUMBERING = 138 # router renumbering + +ICMP6_WRUREQUEST = 139 # who are you request +ICMP6_WRUREPLY = 140 # who are you reply +ICMP6_FQDN_QUERY = 139 # FQDN query +ICMP6_FQDN_REPLY = 140 # FQDN reply +ICMP6_NI_QUERY = 139 # node information request +ICMP6_NI_REPLY = 140 # node information reply + +ICMP6_MAXTYPE = 201 + + +class ICMP6(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('code', 'B', 0), + ('sum', 'H', 0) + ) + + class Error(dpkt.Packet): + __hdr__ = (('pad', 'I', 0), ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.ip6 = ip6.IP6(self.data) + + class Unreach(Error): pass + + class TooBig(Error): + __hdr__ = (('mtu', 'I', 1232), ) + + class TimeExceed(Error): pass + + class ParamProb(Error): + __hdr__ = (('ptr', 'I', 0), ) + + class Echo(dpkt.Packet): + __hdr__ = (('id', 'H', 0), ('seq', 'H', 0)) + + _typesw = {1: Unreach, 2: TooBig, 3: TimeExceed, 4: ParamProb, 128: Echo, 129: Echo} + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._typesw[self.type](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ieee80211.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ieee80211.py new file mode 100644 index 00000000..e18833fb --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/ieee80211.py @@ -0,0 +1,875 @@ +# $Id: 80211.py 53 2008-12-18 01:22:57Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""IEEE 802.11.""" + +import socket +import struct +import dpkt +from decorators import deprecated + +# Frame Types +MGMT_TYPE = 0 +CTL_TYPE = 1 +DATA_TYPE = 2 + +# Frame Sub-Types +M_ASSOC_REQ = 0 +M_ASSOC_RESP = 1 +M_REASSOC_REQ = 2 +M_REASSOC_RESP = 3 +M_PROBE_REQ = 4 +M_PROBE_RESP = 5 +M_BEACON = 8 +M_ATIM = 9 +M_DISASSOC = 10 +M_AUTH = 11 +M_DEAUTH = 12 +M_ACTION = 13 +C_BLOCK_ACK_REQ = 8 +C_BLOCK_ACK = 9 +C_PS_POLL = 10 +C_RTS = 11 +C_CTS = 12 +C_ACK = 13 +C_CF_END = 14 +C_CF_END_ACK = 15 +D_DATA = 0 +D_DATA_CF_ACK = 1 +D_DATA_CF_POLL = 2 +D_DATA_CF_ACK_POLL = 3 +D_NULL = 4 +D_CF_ACK = 5 +D_CF_POLL = 6 +D_CF_ACK_POLL = 7 +D_QOS_DATA = 8 +D_QOS_CF_ACK = 9 +D_QOS_CF_POLL = 10 +D_QOS_CF_ACK_POLL = 11 +D_QOS_NULL = 12 +D_QOS_CF_POLL_EMPTY = 14 + +TO_DS_FLAG = 10 +FROM_DS_FLAG = 1 +INTER_DS_FLAG = 11 + +# Bitshifts for Frame Control +_VERSION_MASK = 0x0300 +_TYPE_MASK = 0x0c00 +_SUBTYPE_MASK = 0xf000 +_TO_DS_MASK = 0x0001 +_FROM_DS_MASK = 0x0002 +_MORE_FRAG_MASK = 0x0004 +_RETRY_MASK = 0x0008 +_PWR_MGT_MASK = 0x0010 +_MORE_DATA_MASK = 0x0020 +_WEP_MASK = 0x0040 +_ORDER_MASK = 0x0080 +_VERSION_SHIFT = 8 +_TYPE_SHIFT = 10 +_SUBTYPE_SHIFT = 12 +_TO_DS_SHIFT = 0 +_FROM_DS_SHIFT = 1 +_MORE_FRAG_SHIFT = 2 +_RETRY_SHIFT = 3 +_PWR_MGT_SHIFT = 4 +_MORE_DATA_SHIFT = 5 +_WEP_SHIFT = 6 +_ORDER_SHIFT = 7 + +# IEs +IE_SSID = 0 +IE_RATES = 1 +IE_FH = 2 +IE_DS = 3 +IE_CF = 4 +IE_TIM = 5 +IE_IBSS = 6 +IE_HT_CAPA = 45 +IE_ESR = 50 +IE_HT_INFO = 61 + +FCS_LENGTH = 4 + +FRAMES_WITH_CAPABILITY = [M_BEACON, M_ASSOC_RESP, M_ASSOC_REQ, M_REASSOC_REQ, ] + +# Block Ack control constants +_ACK_POLICY_SHIFT = 0 +_MULTI_TID_SHIFT = 1 +_COMPRESSED_SHIFT = 2 +_TID_SHIFT = 12 + +_ACK_POLICY_MASK = 0x0001 +_MULTI_TID_MASK = 0x0002 +_COMPRESSED_MASK = 0x0004 +_TID_MASK = 0xf000 + +_COMPRESSED_BMP_LENGTH = 8 +_BMP_LENGTH = 128 + +# Action frame categories +BLOCK_ACK = 3 + +# Block ack category action codes +BLOCK_ACK_CODE_REQUEST = 0 +BLOCK_ACK_CODE_RESPONSE = 1 + + +class IEEE80211(dpkt.Packet): + __hdr__ = ( + ('framectl', 'H', 0), + ('duration', 'H', 0) + ) + + @property + def version(self): + return (self.framectl & _VERSION_MASK) >> _VERSION_SHIFT + + @version.setter + def version(self, val): + self.framectl = (val << _VERSION_SHIFT) | (self.framectl & ~_VERSION_MASK) + + @property + def type(self): + return (self.framectl & _TYPE_MASK) >> _TYPE_SHIFT + + @type.setter + def type(self, val): + self.framectl = (val << _TYPE_SHIFT) | (self.framectl & ~_TYPE_MASK) + + @property + def subtype(self): + return (self.framectl & _SUBTYPE_MASK) >> _SUBTYPE_SHIFT + + @subtype.setter + def subtype(self, val): + self.framectl = (val << _SUBTYPE_SHIFT) | (self.framectl & ~_SUBTYPE_MASK) + + @property + def to_ds(self): + return (self.framectl & _TO_DS_MASK) >> _TO_DS_SHIFT + + @to_ds.setter + def to_ds(self, val): + self.framectl = (val << _TO_DS_SHIFT) | (self.framectl & ~_TO_DS_MASK) + + @property + def from_ds(self): + return (self.framectl & _FROM_DS_MASK) >> _FROM_DS_SHIFT + + @from_ds.setter + def from_ds(self, val): + self.framectl = (val << _FROM_DS_SHIFT) | (self.framectl & ~_FROM_DS_MASK) + + @property + def more_frag(self): + return (self.framectl & _MORE_FRAG_MASK) >> _MORE_FRAG_SHIFT + + @more_frag.setter + def more_frag(self, val): + self.framectl = (val << _MORE_FRAG_SHIFT) | (self.framectl & ~_MORE_FRAG_MASK) + + @property + def retry(self): + return (self.framectl & _RETRY_MASK) >> _RETRY_SHIFT + + @retry.setter + def retry(self, val): + self.framectl = (val << _RETRY_SHIFT) | (self.framectl & ~_RETRY_MASK) + + @property + def pwr_mgt(self): + return (self.framectl & _PWR_MGT_MASK) >> _PWR_MGT_SHIFT + + @pwr_mgt.setter + def pwr_mgt(self, val): + self.framectl = (val << _PWR_MGT_SHIFT) | (self.framectl & ~_PWR_MGT_MASK) + + @property + def more_data(self): + return (self.framectl & _MORE_DATA_MASK) >> _MORE_DATA_SHIFT + + @more_data.setter + def more_data(self, val): + self.framectl = (val << _MORE_DATA_SHIFT) | (self.framectl & ~_MORE_DATA_MASK) + + @property + def wep(self): + return (self.framectl & _WEP_MASK) >> _WEP_SHIFT + + @wep.setter + def wep(self, val): + self.framectl = (val << _WEP_SHIFT) | (self.framectl & ~_WEP_MASK) + + @property + def order(self): + return (self.framectl & _ORDER_MASK) >> _ORDER_SHIFT + + @order.setter + def order(self, val): + self.framectl = (val << _ORDER_SHIFT) | (self.framectl & ~_ORDER_MASK) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_version(self): return self.version + + @deprecated + def _set_version(self, val): self.version = val + + @deprecated + def _get_type(self): return self.type + + @deprecated + def _set_type(self, val): self.type = val + + @deprecated + def _get_subtype(self): return self.subtype + + @deprecated + def _set_subtype(self, val): self.subtype = val + + @deprecated + def _get_to_ds(self): return self.to_ds + + @deprecated + def _set_to_ds(self, val): self.to_ds = val + + @deprecated + def _get_from_ds(self): return self.from_ds + + @deprecated + def _set_from_ds(self, val): self.from_ds = val + + @deprecated + def _get_more_frag(self): return self.more_frag + + @deprecated + def _set_more_frag(self, val): self.more_frag = val + + @deprecated + def _get_retry(self): return self.retry + + @deprecated + def _set_retry(self, val): self.retry = val + + @deprecated + def _get_pwr_mgt(self): return self.pwr_mgt + + @deprecated + def _set_pwr_mgt(self, val): self.pwr_mgt = val + + @deprecated + def _get_more_data(self): return self.more_data + + @deprecated + def _set_more_data(self, val): self.more_data = val + + @deprecated + def _get_wep(self): return self.wep + + @deprecated + def _set_wep(self, val): self.wep = val + + @deprecated + def _get_order(self): return self.order + + @deprecated + def _set_order(self, val): self.order = val + # ================================================= + + def unpack_ies(self, buf): + self.ies = [] + + ie_decoder = { + IE_SSID: ('ssid', self.IE), + IE_RATES: ('rate', self.IE), + IE_FH: ('fh', self.FH), + IE_DS: ('ds', self.DS), + IE_CF: ('cf', self.CF), + IE_TIM: ('tim', self.TIM), + IE_IBSS: ('ibss', self.IBSS), + IE_HT_CAPA: ('ht_capa', self.IE), + IE_ESR: ('esr', self.IE), + IE_HT_INFO: ('ht_info', self.IE) + } + + # each IE starts with an ID and a length + while len(buf) > FCS_LENGTH: + ie_id = struct.unpack('B', (buf[0]))[0] + try: + parser = ie_decoder[ie_id][1] + name = ie_decoder[ie_id][0] + except KeyError: + parser = self.IE + name = 'ie_' + str(ie_id) + ie = parser(buf) + + ie.data = buf[2:2 + ie.len] + setattr(self, name, ie) + self.ies.append(ie) + buf = buf[2 + ie.len:] + + class Capability(object): + def __init__(self, field): + self.ess = field & 1 + self.ibss = (field >> 1) & 1 + self.cf_poll = (field >> 2) & 1 + self.cf_poll_req = (field >> 3) & 1 + self.privacy = (field >> 4) & 1 + self.short_preamble = (field >> 5) & 1 + self.pbcc = (field >> 6) & 1 + self.hopping = (field >> 7) & 1 + self.spec_mgmt = (field >> 8) & 1 + self.qos = (field >> 9) & 1 + self.short_slot = (field >> 10) & 1 + self.apsd = (field >> 11) & 1 + self.dsss = (field >> 13) & 1 + self.delayed_blk_ack = (field >> 14) & 1 + self.imm_blk_ack = (field >> 15) & 1 + + def __init__(self, *args, **kwargs): + if kwargs and 'fcs' in kwargs: + self.fcs_present = kwargs.pop('fcs') + else: + self.fcs_present = False + + super(IEEE80211, self).__init__(*args, **kwargs) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = buf[self.__hdr_len__:] + + m_decoder = { + M_BEACON: ('beacon', self.Beacon), + M_ASSOC_REQ: ('assoc_req', self.Assoc_Req), + M_ASSOC_RESP: ('assoc_resp', self.Assoc_Resp), + M_DISASSOC: ('diassoc', self.Disassoc), + M_REASSOC_REQ: ('reassoc_req', self.Reassoc_Req), + M_REASSOC_RESP: ('reassoc_resp', self.Assoc_Resp), + M_AUTH: ('auth', self.Auth), + M_PROBE_RESP: ('probe_resp', self.Beacon), + M_DEAUTH: ('deauth', self.Deauth), + M_ACTION: ('action', self.Action) + } + + c_decoder = { + C_RTS: ('rts', self.RTS), + C_CTS: ('cts', self.CTS), + C_ACK: ('ack', self.ACK), + C_BLOCK_ACK_REQ: ('bar', self.BlockAckReq), + C_BLOCK_ACK: ('back', self.BlockAck), + C_CF_END: ('cf_end', self.CFEnd), + } + + d_dsData = { + 0: self.Data, + FROM_DS_FLAG: self.DataFromDS, + TO_DS_FLAG: self.DataToDS, + INTER_DS_FLAG: self.DataInterDS + } + + # For now decode everything with DATA. Haven't checked about other QoS + # additions + d_decoder = { + # modified the decoder to consider the ToDS and FromDS flags + # Omitting the 11 case for now + D_DATA: ('data_frame', d_dsData), + D_NULL: ('data_frame', d_dsData), + D_QOS_DATA: ('data_frame', d_dsData), + D_QOS_NULL: ('data_frame', d_dsData) + } + + decoder = { + MGMT_TYPE: m_decoder, + CTL_TYPE: c_decoder, + DATA_TYPE: d_decoder + } + + # Strip off the FCS field + if self.fcs_present: + self.fcs = struct.unpack('I', self.data[-1 * FCS_LENGTH:])[0] + self.data = self.data[0: -1 * FCS_LENGTH] + + if self.type == MGMT_TYPE: + self.mgmt = self.MGMT_Frame(self.data) + self.data = self.mgmt.data + if self.subtype == M_PROBE_REQ: + self.unpack_ies(self.data) + return + if self.subtype == M_ATIM: + return + + try: + parser = decoder[self.type][self.subtype][1] + name = decoder[self.type][self.subtype][0] + except KeyError: + print "Key error:", self.type, self.subtype + return + + if self.type == DATA_TYPE: + # need to grab the ToDS/FromDS info + parser = parser[self.to_ds * 10 + self.from_ds] + + if self.type == MGMT_TYPE: + field = parser(self.mgmt.data) + else: + field = parser(self.data) + self.data = field + + setattr(self, name, field) + + if self.type == MGMT_TYPE: + self.ies = self.unpack_ies(field.data) + if self.subtype in FRAMES_WITH_CAPABILITY: + self.capability = self.Capability(socket.ntohs(field.capability)) + + if self.type == DATA_TYPE and self.subtype == D_QOS_DATA: + self.qos_data = self.QoS_Data(field.data) + field.data = self.qos_data.data + + self.data = field.data + + class BlockAckReq(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('ctl', 'H', 0), + ('seq', 'H', 0), + ) + + class BlockAck(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('ctl', 'H', 0), + ('seq', 'H', 0), + ) + + @property + def compressed(self): + return (self.ctl & _COMPRESSED_MASK) >> _COMPRESSED_SHIFT + + @compressed.setter + def compressed(self, val): + self.ctl = (val << _COMPRESSED_SHIFT) | (self.ctl & ~_COMPRESSED_MASK) + + @property + def ack_policy(self): + return (self.ctl & _ACK_POLICY_MASK) >> _ACK_POLICY_SHIFT + + @ack_policy.setter + def ack_policy(self, val): + self.ctl = (val << _ACK_POLICY_SHIFT) | (self.ctl & ~_ACK_POLICY_MASK) + + @property + def multi_tid(self): + return (self.ctl & _MULTI_TID_MASK) >> _MULTI_TID_SHIFT + + @multi_tid.setter + def multi_tid(self, val): + self.ctl = (val << _MULTI_TID_SHIFT) | (self.ctl & ~_MULTI_TID_MASK) + + @property + def tid(self): + return (self.ctl & _TID_MASK) >> _TID_SHIFT + + @tid.setter + def tid(self, val): + self.ctl = (val << _TID_SHIFT) | (self.ctl & ~_TID_MASK) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_compressed(self): return self.compressed + + @deprecated + def _set_compressed(self, val): self.compressed = val + + @deprecated + def _get_ack_policy(self): return self.ack_policy + + @deprecated + def _set_ack_policy(self, val): self.ack_policy = val + + @deprecated + def _get_multi_tid(self): return self.multi_tid + + @deprecated + def _set_multi_tid(self, val): self.multi_tid = val + + @deprecated + def _get_tid(self): return self.tid + + @deprecated + def _set_tid(self, val): self.tid = val + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = buf[self.__hdr_len__:] + self.ctl = socket.ntohs(self.ctl) + + if self.compressed: + self.bmp = struct.unpack('8s', self.data[0:_COMPRESSED_BMP_LENGTH])[0] + else: + self.bmp = struct.unpack('128s', self.data[0:_BMP_LENGTH])[0] + self.data = self.data[len(self.__hdr__) + len(self.bmp):] + + class RTS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6) + ) + + class CTS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ) + + class ACK(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ) + + class CFEnd(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ) + + class MGMT_Frame(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('bssid', '6s', '\x00' * 6), + ('frag_seq', 'H', 0) + ) + + class Beacon(dpkt.Packet): + __hdr__ = ( + ('timestamp', 'Q', 0), + ('interval', 'H', 0), + ('capability', 'H', 0) + ) + + class Disassoc(dpkt.Packet): + __hdr__ = ( + ('reason', 'H', 0), + ) + + class Assoc_Req(dpkt.Packet): + __hdr__ = ( + ('capability', 'H', 0), + ('interval', 'H', 0) + ) + + class Assoc_Resp(dpkt.Packet): + __hdr__ = ( + ('capability', 'H', 0), + ('status', 'H', 0), + ('aid', 'H', 0) + ) + + class Reassoc_Req(dpkt.Packet): + __hdr__ = ( + ('capability', 'H', 0), + ('interval', 'H', 0), + ('current_ap', '6s', '\x00' * 6) + ) + + # This obviously doesn't support any of AUTH frames that use encryption + class Auth(dpkt.Packet): + __hdr__ = ( + ('algorithm', 'H', 0), + ('auth_seq', 'H', 0), + ) + + class Deauth(dpkt.Packet): + __hdr__ = ( + ('reason', 'H', 0), + ) + + class Action(dpkt.Packet): + __hdr__ = ( + ('category', 'B', 0), + ('code', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + action_parser = { + BLOCK_ACK: {BLOCK_ACK_CODE_REQUEST: ('block_ack_request', IEEE80211.BlockAckActionRequest), + BLOCK_ACK_CODE_RESPONSE: ('block_ack_response', IEEE80211.BlockAckActionResponse), + }, + } + + decoder = action_parser[self.category][self.code][1] + field_name = action_parser[self.category][self.code][0] + field = decoder(self.data) + setattr(self, field_name, field) + self.data = field.data + + class BlockAckActionRequest(dpkt.Packet): + __hdr__ = ( + ('dialog', 'B', 0), + ('parameters', 'H', 0), + ('timeout', 'H', 0), + ('starting_seq', 'H', 0), + ) + + class BlockAckActionResponse(dpkt.Packet): + __hdr__ = ( + ('dialog', 'B', 0), + ('status_code', 'H', 0), + ('parameters', 'H', 0), + ('timeout', 'H', 0), + ) + + class Data(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('bssid', '6s', '\x00' * 6), + ('frag_seq', 'H', 0) + ) + + class DataFromDS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('bssid', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('frag_seq', 'H', 0) + ) + + class DataToDS(dpkt.Packet): + __hdr__ = ( + ('bssid', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('dst', '6s', '\x00' * 6), + ('frag_seq', 'H', 0) + ) + + class DataInterDS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('da', '6s', '\x00' * 6), + ('frag_seq', 'H', 0), + ('sa', '6s', '\x00' * 6) + ) + + class QoS_Data(dpkt.Packet): + __hdr__ = ( + ('control', 'H', 0), + ) + + class IE(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.info = buf[2:self.len + 2] + + class FH(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('tu', 'H', 0), + ('hopset', 'B', 0), + ('hoppattern', 'B', 0), + ('hopindex', 'B', 0) + ) + + class DS(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('ch', 'B', 0) + ) + + class CF(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('count', 'B', 0), + ('period', 'B', 0), + ('max', 'H', 0), + ('dur', 'H', 0) + ) + + class TIM(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('count', 'B', 0), + ('period', 'B', 0), + ('ctrl', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.bitmap = buf[5:self.len + 2] + + class IBSS(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('atim', 'H', 0) + ) + +def test_802211_ack(): + s = '\xd4\x00\x00\x00\x00\x12\xf0\xb6\x1c\xa4\xff\xff\xff\xff' + ieee = IEEE80211(s, fcs=True) + assert ieee.version == 0 + assert ieee.type == CTL_TYPE + assert ieee.subtype == C_ACK + assert ieee.to_ds == 0 + assert ieee.from_ds == 0 + assert ieee.pwr_mgt == 0 + assert ieee.more_data == 0 + assert ieee.wep == 0 + assert ieee.order == 0 + assert ieee.ack.dst == '\x00\x12\xf0\xb6\x1c\xa4' + fcs = struct.unpack('I', s[-4:])[0] + assert ieee.fcs == fcs + +def test_80211_beacon(): + s = '\x80\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x26\xcb\x18\x6a\x30\x00\x26\xcb\x18\x6a\x30\xa0\xd0\x77\x09\x32\x03\x8f\x00\x00\x00\x66\x00\x31\x04\x00\x04\x43\x41\x45\x4e\x01\x08\x82\x84\x8b\x0c\x12\x96\x18\x24\x03\x01\x01\x05\x04\x00\x01\x00\x00\x07\x06\x55\x53\x20\x01\x0b\x1a\x0b\x05\x00\x00\x6e\x00\x00\x2a\x01\x02\x2d\x1a\x6e\x18\x1b\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x28\x00\x32\x04\x30\x48\x60\x6c\x36\x03\x51\x63\x03\x3d\x16\x01\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x1e\x05\x00\x8f\x00\x0f\x00\xff\x03\x59\x00\x63\x73\x65\x2d\x33\x39\x31\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x96\x06\x00\x40\x96\x00\x14\x00\xdd\x18\x00\x50\xf2\x02\x01\x01\x80\x00\x03\xa4\x00\x00\x27\xa4\x00\x00\x42\x43\x5e\x00\x62\x32\x2f\x00\xdd\x06\x00\x40\x96\x01\x01\x04\xdd\x05\x00\x40\x96\x03\x05\xdd\x05\x00\x40\x96\x0b\x09\xdd\x08\x00\x40\x96\x13\x01\x00\x34\x01\xdd\x05\x00\x40\x96\x14\x05' + ieee = IEEE80211(s, fcs=True) + assert ieee.version == 0 + assert ieee.type == MGMT_TYPE + assert ieee.subtype == M_BEACON + assert ieee.to_ds == 0 + assert ieee.from_ds == 0 + assert ieee.pwr_mgt == 0 + assert ieee.more_data == 0 + assert ieee.wep == 0 + assert ieee.order == 0 + assert ieee.mgmt.dst == '\xff\xff\xff\xff\xff\xff' + assert ieee.mgmt.src == '\x00\x26\xcb\x18\x6a\x30' + assert ieee.beacon.capability == 0x3104 + assert ieee.capability.privacy == 1 + assert ieee.ssid.data == 'CAEN' + assert ieee.rate.data == '\x82\x84\x8b\x0c\x12\x96\x18\x24' + assert ieee.ds.data == '\x01' + assert ieee.tim.data == '\x00\x01\x00\x00' + fcs = struct.unpack('I', s[-4:])[0] + assert ieee.fcs == fcs + +def test_80211_data(): + s = '\x08\x09\x20\x00\x00\x26\xcb\x17\x3d\x91\x00\x16\x44\xb0\xae\xc6\x00\x02\xb3\xd6\x26\x3c\x80\x7e\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04\xac\x17\x00\x00' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == DATA_TYPE + assert ieee.subtype == D_DATA + assert ieee.data_frame.dst == '\x00\x02\xb3\xd6\x26\x3c' + assert ieee.data_frame.src == '\x00\x16\x44\xb0\xae\xc6' + assert ieee.data_frame.frag_seq == 0x807e + assert ieee.data == '\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04' + assert ieee.fcs == struct.unpack('I', '\xac\x17\x00\x00')[0] + + import llc, ip + + llc_pkt = llc.LLC(ieee.data_frame.data) + ip_pkt = ip.IP(llc_pkt.data) + assert ip_pkt.dst == '\x3f\xf5\xd1\x69' + +def test_80211_data_qos(): + s = '\x88\x01\x3a\x01\x00\x26\xcb\x17\x44\xf0\x00\x23\xdf\xc9\xc0\x93\x00\x26\xcb\x17\x44\xf0\x20\x7b\x00\x00\xaa\xaa\x03\x00\x00\x00\x88\x8e\x01\x00\x00\x74\x02\x02\x00\x74\x19\x80\x00\x00\x00\x6a\x16\x03\x01\x00\x65\x01\x00\x00\x61\x03\x01\x4b\x4c\xa7\x7e\x27\x61\x6f\x02\x7b\x3c\x72\x39\xe3\x7b\xd7\x43\x59\x91\x7f\xaa\x22\x47\x51\xb6\x88\x9f\x85\x90\x87\x5a\xd1\x13\x20\xe0\x07\x00\x00\x68\xbd\xa4\x13\xb0\xd5\x82\x7e\xc7\xfb\xe7\xcc\xab\x6e\x5d\x5a\x51\x50\xd4\x45\xc5\xa1\x65\x53\xad\xb5\x88\x5b\x00\x1a\x00\x2f\x00\x05\x00\x04\x00\x35\x00\x0a\x00\x09\x00\x03\x00\x08\x00\x33\x00\x39\x00\x16\x00\x15\x00\x14\x01\x00\xff\xff\xff\xff' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == DATA_TYPE + assert ieee.subtype == D_QOS_DATA + assert ieee.data_frame.dst == '\x00\x26\xcb\x17\x44\xf0' + assert ieee.data_frame.src == '\x00\x23\xdf\xc9\xc0\x93' + assert ieee.data_frame.frag_seq == 0x207b + assert ieee.data == '\xaa\xaa\x03\x00\x00\x00\x88\x8e\x01\x00\x00\x74\x02\x02\x00\x74\x19\x80\x00\x00\x00\x6a\x16\x03\x01\x00\x65\x01\x00\x00\x61\x03\x01\x4b\x4c\xa7\x7e\x27\x61\x6f\x02\x7b\x3c\x72\x39\xe3\x7b\xd7\x43\x59\x91\x7f\xaa\x22\x47\x51\xb6\x88\x9f\x85\x90\x87\x5a\xd1\x13\x20\xe0\x07\x00\x00\x68\xbd\xa4\x13\xb0\xd5\x82\x7e\xc7\xfb\xe7\xcc\xab\x6e\x5d\x5a\x51\x50\xd4\x45\xc5\xa1\x65\x53\xad\xb5\x88\x5b\x00\x1a\x00\x2f\x00\x05\x00\x04\x00\x35\x00\x0a\x00\x09\x00\x03\x00\x08\x00\x33\x00\x39\x00\x16\x00\x15\x00\x14\x01\x00' + assert ieee.qos_data.control == 0x0 + assert ieee.fcs == struct.unpack('I', '\xff\xff\xff\xff')[0] + +def test_bug(): + s = '\x88\x41\x2c\x00\x00\x26\xcb\x17\x44\xf0\x00\x1e\x52\x97\x14\x11\x00\x1f\x6d\xe8\x18\x00\xd0\x07\x00\x00\x6f\x00\x00\x20\x00\x00\x00\x00' + ieee = IEEE80211(s) + assert ieee.wep == 1 + +def test_data_ds(): + # verifying the ToDS and FromDS fields and that we're getting the + # correct values + + s = '\x08\x03\x00\x00\x01\x0b\x85\x00\x00\x00\x00\x26\xcb\x18\x73\x50\x01\x0b\x85\x00\x00\x00\x00\x89\x00\x26\xcb\x18\x73\x50' + ieee = IEEE80211(s) + assert ieee.type == DATA_TYPE + assert ieee.to_ds == 1 + assert ieee.from_ds == 1 + assert ieee.data_frame.sa == '\x00\x26\xcb\x18\x73\x50' + assert ieee.data_frame.src == '\x00\x26\xcb\x18\x73\x50' + assert ieee.data_frame.dst == '\x01\x0b\x85\x00\x00\x00' + assert ieee.data_frame.da == '\x01\x0b\x85\x00\x00\x00' + + s = '\x88\x41\x50\x01\x00\x26\xcb\x17\x48\xc1\x00\x24\x2c\xe7\xfe\x8a\xff\xff\xff\xff\xff\xff\x80\xa0\x00\x00\x09\x1a\x00\x20\x00\x00\x00\x00' + ieee = IEEE80211(s) + assert ieee.type == DATA_TYPE + assert ieee.to_ds == 1 + assert ieee.from_ds == 0 + assert ieee.data_frame.bssid == '\x00\x26\xcb\x17\x48\xc1' + assert ieee.data_frame.src == '\x00\x24\x2c\xe7\xfe\x8a' + assert ieee.data_frame.dst == '\xff\xff\xff\xff\xff\xff' + + s = '\x08\x02\x02\x01\x00\x02\x44\xac\x27\x70\x00\x1f\x33\x39\x75\x44\x00\x1f\x33\x39\x75\x44\x90\xa4' + ieee = IEEE80211(s) + assert ieee.type == DATA_TYPE + assert ieee.to_ds == 0 + assert ieee.from_ds == 1 + assert ieee.data_frame.bssid == '\x00\x1f\x33\x39\x75\x44' + assert ieee.data_frame.src == '\x00\x1f\x33\x39\x75\x44' + assert ieee.data_frame.dst == '\x00\x02\x44\xac\x27\x70' + +def test_compressed_block_ack(): + s = '\x94\x00\x00\x00\x34\xc0\x59\xd6\x3f\x62\xb4\x75\x0e\x46\x83\xc1\x05\x50\x80\xee\x03\x00\x00\x00\x00\x00\x00\x00\xa2\xe4\x98\x45' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == CTL_TYPE + assert ieee.subtype == C_BLOCK_ACK + assert ieee.back.dst == '\x34\xc0\x59\xd6\x3f\x62' + assert ieee.back.src == '\xb4\x75\x0e\x46\x83\xc1' + assert ieee.back.compressed == 1 + assert len(ieee.back.bmp) == 8 + assert ieee.back.ack_policy == 1 + assert ieee.back.tid == 5 + +def test_action_block_ack_request(): + s = '\xd0\x00\x3a\x01\x00\x23\x14\x36\x52\x30\xb4\x75\x0e\x46\x83\xc1\xb4\x75\x0e\x46\x83\xc1\x70\x14\x03\x00\x0d\x02\x10\x00\x00\x40\x29\x06\x50\x33\x9e' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == MGMT_TYPE + assert ieee.subtype == M_ACTION + assert ieee.action.category == BLOCK_ACK + assert ieee.action.code == BLOCK_ACK_CODE_REQUEST + assert ieee.action.block_ack_request.timeout == 0 + parameters = struct.unpack('H', '\x10\x02')[0] + assert ieee.action.block_ack_request.parameters == parameters + +def test_action_block_ack_response(): + s = '\xd0\x00\x3c\x00\xb4\x75\x0e\x46\x83\xc1\x00\x23\x14\x36\x52\x30\xb4\x75\x0e\x46\x83\xc1\xd0\x68\x03\x01\x0d\x00\x00\x02\x10\x88\x13\x9f\xc0\x0b\x75' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == MGMT_TYPE + assert ieee.subtype == M_ACTION + assert ieee.action.category == BLOCK_ACK + assert ieee.action.code == BLOCK_ACK_CODE_RESPONSE + timeout = struct.unpack('H', '\x13\x88')[0] + assert ieee.action.block_ack_response.timeout == timeout + parameters = struct.unpack('H', '\x10\x02')[0] + assert ieee.action.block_ack_response.parameters == parameters + +if __name__ == '__main__': + # Runs all the test associated with this class/file + test_802211_ack() + test_80211_beacon() + test_80211_data() + test_80211_data_qos() + test_bug() + test_data_ds() + test_compressed_block_ack() + test_action_block_ack_request() + test_action_block_ack_response() + print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/igmp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/igmp.py new file mode 100644 index 00000000..5e5cb166 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/igmp.py @@ -0,0 +1,19 @@ +# $Id: igmp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Internet Group Management Protocol.""" + +import dpkt + + +class IGMP(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('maxresp', 'B', 0), + ('sum', 'H', 0), + ('group', 'I', 0) + ) + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ip.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ip.py new file mode 100644 index 00000000..0658ff6a --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/ip.py @@ -0,0 +1,359 @@ +# $Id: ip.py 87 2013-03-05 19:41:04Z andrewflnr@gmail.com $ +# -*- coding: utf-8 -*- +"""Internet Protocol.""" + +import dpkt +from decorators import deprecated + + +class IP(dpkt.Packet): + __hdr__ = ( + ('v_hl', 'B', (4 << 4) | (20 >> 2)), + ('tos', 'B', 0), + ('len', 'H', 20), + ('id', 'H', 0), + ('off', 'H', 0), + ('ttl', 'B', 64), + ('p', 'B', 0), + ('sum', 'H', 0), + ('src', '4s', '\x00' * 4), + ('dst', '4s', '\x00' * 4) + ) + _protosw = {} + opts = '' + + @property + def v(self): + return self.v_hl >> 4 + + @v.setter + def v(self, v): + self.v_hl = (v << 4) | (self.v_hl & 0xf) + + @property + def hl(self): + return self.v_hl & 0xf + + @hl.setter + def hl(self, hl): + self.v_hl = (self.v_hl & 0xf0) | hl + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): + return self.v + + @deprecated + def _set_v(self, v): + self.v = v + + @deprecated + def _get_hl(self): + return self.hl + + @deprecated + def _set_hl(self, hl): + self.hl = hl + + # ================================================= + + def __len__(self): + return self.__hdr_len__ + len(self.opts) + len(self.data) + + def __str__(self): + if self.sum == 0: + self.sum = dpkt.in_cksum(self.pack_hdr() + self.opts) + if (self.p == 6 or self.p == 17) and (self.off & (IP_MF | IP_OFFMASK)) == 0 and \ + isinstance(self.data, dpkt.Packet) and self.data.sum == 0: + # Set zeroed TCP and UDP checksums for non-fragments. + p = str(self.data) + s = dpkt.struct.pack('>4s4sxBH', self.src, self.dst, + self.p, len(p)) + s = dpkt.in_cksum_add(0, s) + s = dpkt.in_cksum_add(s, p) + self.data.sum = dpkt.in_cksum_done(s) + if self.p == 17 and self.data.sum == 0: + self.data.sum = 0xffff # RFC 768 + # XXX - skip transports which don't need the pseudoheader + return self.pack_hdr() + self.opts + str(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + ol = ((self.v_hl & 0xf) << 2) - self.__hdr_len__ + if ol < 0: + raise dpkt.UnpackError, 'invalid header length' + self.opts = buf[self.__hdr_len__:self.__hdr_len__ + ol] + if self.len: + buf = buf[self.__hdr_len__ + ol:self.len] + else: # very likely due to TCP segmentation offload + buf = buf[self.__hdr_len__ + ol:] + try: + self.data = self._protosw[self.p](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + @classmethod + def set_proto(cls, p, pktclass): + cls._protosw[p] = pktclass + + @classmethod + def get_proto(cls, p): + return cls._protosw[p] + +# IP Headers +IP_ADDR_LEN = 0x04 +IP_ADDR_BITS = 0x20 + +IP_HDR_LEN = 0x14 +IP_OPT_LEN = 0x02 +IP_OPT_LEN_MAX = 0x28 +IP_HDR_LEN_MAX = IP_HDR_LEN + IP_OPT_LEN_MAX + +IP_LEN_MAX = 0xffff +IP_LEN_MIN = IP_HDR_LEN + +# Reserved Addresses +IP_ADDR_ANY = "\x00\x00\x00\x00" # 0.0.0.0 +IP_ADDR_BROADCAST = "\xff\xff\xff\xff" # 255.255.255.255 +IP_ADDR_LOOPBACK = "\x7f\x00\x00\x01" # 127.0.0.1 +IP_ADDR_MCAST_ALL = "\xe0\x00\x00\x01" # 224.0.0.1 +IP_ADDR_MCAST_LOCAL = "\xe0\x00\x00\xff" # 224.0.0.255 + +# Type of service (ip_tos), RFC 1349 ("obsoleted by RFC 2474") +IP_TOS_DEFAULT = 0x00 # default +IP_TOS_LOWDELAY = 0x10 # low delay +IP_TOS_THROUGHPUT = 0x08 # high throughput +IP_TOS_RELIABILITY = 0x04 # high reliability +IP_TOS_LOWCOST = 0x02 # low monetary cost - XXX +IP_TOS_ECT = 0x02 # ECN-capable transport +IP_TOS_CE = 0x01 # congestion experienced + +# IP precedence (high 3 bits of ip_tos), hopefully unused +IP_TOS_PREC_ROUTINE = 0x00 +IP_TOS_PREC_PRIORITY = 0x20 +IP_TOS_PREC_IMMEDIATE = 0x40 +IP_TOS_PREC_FLASH = 0x60 +IP_TOS_PREC_FLASHOVERRIDE = 0x80 +IP_TOS_PREC_CRITIC_ECP = 0xa0 +IP_TOS_PREC_INTERNETCONTROL = 0xc0 +IP_TOS_PREC_NETCONTROL = 0xe0 + +# Fragmentation flags (ip_off) +IP_RF = 0x8000 # reserved +IP_DF = 0x4000 # don't fragment +IP_MF = 0x2000 # more fragments (not last frag) +IP_OFFMASK = 0x1fff # mask for fragment offset + +# Time-to-live (ip_ttl), seconds +IP_TTL_DEFAULT = 64 # default ttl, RFC 1122, RFC 1340 +IP_TTL_MAX = 255 # maximum ttl + +# Protocol (ip_p) - http://www.iana.org/assignments/protocol-numbers +IP_PROTO_IP = 0 # dummy for IP +IP_PROTO_HOPOPTS = IP_PROTO_IP # IPv6 hop-by-hop options +IP_PROTO_ICMP = 1 # ICMP +IP_PROTO_IGMP = 2 # IGMP +IP_PROTO_GGP = 3 # gateway-gateway protocol +IP_PROTO_IPIP = 4 # IP in IP +IP_PROTO_ST = 5 # ST datagram mode +IP_PROTO_TCP = 6 # TCP +IP_PROTO_CBT = 7 # CBT +IP_PROTO_EGP = 8 # exterior gateway protocol +IP_PROTO_IGP = 9 # interior gateway protocol +IP_PROTO_BBNRCC = 10 # BBN RCC monitoring +IP_PROTO_NVP = 11 # Network Voice Protocol +IP_PROTO_PUP = 12 # PARC universal packet +IP_PROTO_ARGUS = 13 # ARGUS +IP_PROTO_EMCON = 14 # EMCON +IP_PROTO_XNET = 15 # Cross Net Debugger +IP_PROTO_CHAOS = 16 # Chaos +IP_PROTO_UDP = 17 # UDP +IP_PROTO_MUX = 18 # multiplexing +IP_PROTO_DCNMEAS = 19 # DCN measurement +IP_PROTO_HMP = 20 # Host Monitoring Protocol +IP_PROTO_PRM = 21 # Packet Radio Measurement +IP_PROTO_IDP = 22 # Xerox NS IDP +IP_PROTO_TRUNK1 = 23 # Trunk-1 +IP_PROTO_TRUNK2 = 24 # Trunk-2 +IP_PROTO_LEAF1 = 25 # Leaf-1 +IP_PROTO_LEAF2 = 26 # Leaf-2 +IP_PROTO_RDP = 27 # "Reliable Datagram" proto +IP_PROTO_IRTP = 28 # Inet Reliable Transaction +IP_PROTO_TP = 29 # ISO TP class 4 +IP_PROTO_NETBLT = 30 # Bulk Data Transfer +IP_PROTO_MFPNSP = 31 # MFE Network Services +IP_PROTO_MERITINP = 32 # Merit Internodal Protocol +IP_PROTO_SEP = 33 # Sequential Exchange proto +IP_PROTO_3PC = 34 # Third Party Connect proto +IP_PROTO_IDPR = 35 # Interdomain Policy Route +IP_PROTO_XTP = 36 # Xpress Transfer Protocol +IP_PROTO_DDP = 37 # Datagram Delivery Proto +IP_PROTO_CMTP = 38 # IDPR Ctrl Message Trans +IP_PROTO_TPPP = 39 # TP++ Transport Protocol +IP_PROTO_IL = 40 # IL Transport Protocol +IP_PROTO_IP6 = 41 # IPv6 +IP_PROTO_SDRP = 42 # Source Demand Routing +IP_PROTO_ROUTING = 43 # IPv6 routing header +IP_PROTO_FRAGMENT = 44 # IPv6 fragmentation header +IP_PROTO_RSVP = 46 # Reservation protocol +IP_PROTO_GRE = 47 # General Routing Encap +IP_PROTO_MHRP = 48 # Mobile Host Routing +IP_PROTO_ENA = 49 # ENA +IP_PROTO_ESP = 50 # Encap Security Payload +IP_PROTO_AH = 51 # Authentication Header +IP_PROTO_INLSP = 52 # Integated Net Layer Sec +IP_PROTO_SWIPE = 53 # SWIPE +IP_PROTO_NARP = 54 # NBMA Address Resolution +IP_PROTO_MOBILE = 55 # Mobile IP, RFC 2004 +IP_PROTO_TLSP = 56 # Transport Layer Security +IP_PROTO_SKIP = 57 # SKIP +IP_PROTO_ICMP6 = 58 # ICMP for IPv6 +IP_PROTO_NONE = 59 # IPv6 no next header +IP_PROTO_DSTOPTS = 60 # IPv6 destination options +IP_PROTO_ANYHOST = 61 # any host internal proto +IP_PROTO_CFTP = 62 # CFTP +IP_PROTO_ANYNET = 63 # any local network +IP_PROTO_EXPAK = 64 # SATNET and Backroom EXPAK +IP_PROTO_KRYPTOLAN = 65 # Kryptolan +IP_PROTO_RVD = 66 # MIT Remote Virtual Disk +IP_PROTO_IPPC = 67 # Inet Pluribus Packet Core +IP_PROTO_DISTFS = 68 # any distributed fs +IP_PROTO_SATMON = 69 # SATNET Monitoring +IP_PROTO_VISA = 70 # VISA Protocol +IP_PROTO_IPCV = 71 # Inet Packet Core Utility +IP_PROTO_CPNX = 72 # Comp Proto Net Executive +IP_PROTO_CPHB = 73 # Comp Protocol Heart Beat +IP_PROTO_WSN = 74 # Wang Span Network +IP_PROTO_PVP = 75 # Packet Video Protocol +IP_PROTO_BRSATMON = 76 # Backroom SATNET Monitor +IP_PROTO_SUNND = 77 # SUN ND Protocol +IP_PROTO_WBMON = 78 # WIDEBAND Monitoring +IP_PROTO_WBEXPAK = 79 # WIDEBAND EXPAK +IP_PROTO_EON = 80 # ISO CNLP +IP_PROTO_VMTP = 81 # Versatile Msg Transport +IP_PROTO_SVMTP = 82 # Secure VMTP +IP_PROTO_VINES = 83 # VINES +IP_PROTO_TTP = 84 # TTP +IP_PROTO_NSFIGP = 85 # NSFNET-IGP +IP_PROTO_DGP = 86 # Dissimilar Gateway Proto +IP_PROTO_TCF = 87 # TCF +IP_PROTO_EIGRP = 88 # EIGRP +IP_PROTO_OSPF = 89 # Open Shortest Path First +IP_PROTO_SPRITERPC = 90 # Sprite RPC Protocol +IP_PROTO_LARP = 91 # Locus Address Resolution +IP_PROTO_MTP = 92 # Multicast Transport Proto +IP_PROTO_AX25 = 93 # AX.25 Frames +IP_PROTO_IPIPENCAP = 94 # yet-another IP encap +IP_PROTO_MICP = 95 # Mobile Internet Ctrl +IP_PROTO_SCCSP = 96 # Semaphore Comm Sec Proto +IP_PROTO_ETHERIP = 97 # Ethernet in IPv4 +IP_PROTO_ENCAP = 98 # encapsulation header +IP_PROTO_ANYENC = 99 # private encryption scheme +IP_PROTO_GMTP = 100 # GMTP +IP_PROTO_IFMP = 101 # Ipsilon Flow Mgmt Proto +IP_PROTO_PNNI = 102 # PNNI over IP +IP_PROTO_PIM = 103 # Protocol Indep Multicast +IP_PROTO_ARIS = 104 # ARIS +IP_PROTO_SCPS = 105 # SCPS +IP_PROTO_QNX = 106 # QNX +IP_PROTO_AN = 107 # Active Networks +IP_PROTO_IPCOMP = 108 # IP Payload Compression +IP_PROTO_SNP = 109 # Sitara Networks Protocol +IP_PROTO_COMPAQPEER = 110 # Compaq Peer Protocol +IP_PROTO_IPXIP = 111 # IPX in IP +IP_PROTO_VRRP = 112 # Virtual Router Redundancy +IP_PROTO_PGM = 113 # PGM Reliable Transport +IP_PROTO_ANY0HOP = 114 # 0-hop protocol +IP_PROTO_L2TP = 115 # Layer 2 Tunneling Proto +IP_PROTO_DDX = 116 # D-II Data Exchange (DDX) +IP_PROTO_IATP = 117 # Interactive Agent Xfer +IP_PROTO_STP = 118 # Schedule Transfer Proto +IP_PROTO_SRP = 119 # SpectraLink Radio Proto +IP_PROTO_UTI = 120 # UTI +IP_PROTO_SMP = 121 # Simple Message Protocol +IP_PROTO_SM = 122 # SM +IP_PROTO_PTP = 123 # Performance Transparency +IP_PROTO_ISIS = 124 # ISIS over IPv4 +IP_PROTO_FIRE = 125 # FIRE +IP_PROTO_CRTP = 126 # Combat Radio Transport +IP_PROTO_CRUDP = 127 # Combat Radio UDP +IP_PROTO_SSCOPMCE = 128 # SSCOPMCE +IP_PROTO_IPLT = 129 # IPLT +IP_PROTO_SPS = 130 # Secure Packet Shield +IP_PROTO_PIPE = 131 # Private IP Encap in IP +IP_PROTO_SCTP = 132 # Stream Ctrl Transmission +IP_PROTO_FC = 133 # Fibre Channel +IP_PROTO_RSVPIGN = 134 # RSVP-E2E-IGNORE +IP_PROTO_RAW = 255 # Raw IP packets +IP_PROTO_RESERVED = IP_PROTO_RAW # Reserved +IP_PROTO_MAX = 255 + +# XXX - auto-load IP dispatch table from IP_PROTO_* definitions + + +def __load_protos(): + g = globals() + for k, v in g.iteritems(): + if k.startswith('IP_PROTO_'): + name = k[9:].lower() + try: + mod = __import__(name, g) + except ImportError: + continue + IP.set_proto(v, getattr(mod, name.upper())) + + +if not IP._protosw: + __load_protos() + + +def test_ip(): + import udp + + s = 'E\x00\x00"\x00\x00\x00\x00@\x11r\xc0\x01\x02\x03\x04\x01\x02\x03\x04\x00o\x00\xde\x00\x0e\xbf5foobar' + ip = IP(id=0, src='\x01\x02\x03\x04', dst='\x01\x02\x03\x04', p=17) + u = udp.UDP(sport=111, dport=222) + u.data = 'foobar' + u.ulen += len(u.data) + ip.data = u + ip.len += len(u) + assert (str(ip) == s) + + ip = IP(s) + assert (str(ip) == s) + assert (ip.udp.sport == 111) + assert (ip.udp.data == 'foobar') + + +def test_hl(): # Todo chack this test method + s = 'BB\x03\x00\x00\x00\x00\x00\x00\x00\xd0\x00\xec\xbc\xa5\x00\x00\x00\x03\x80\x00\x00\xd0\x01\xf2\xac\xa5"0\x01\x00\x14\x00\x02\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00' + try: + IP(s) + except dpkt.UnpackError: + pass + + +def test_opt(): + s = '\x4f\x00\x00\x50\xae\x08\x00\x00\x40\x06\x17\xfc\xc0\xa8\x0a\x26\xc0\xa8\x0a\x01\x07\x27\x08\x01\x02\x03\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + ip = IP(s) + ip.sum = 0 + assert (str(ip) == s) + + +def test_zerolen(): + import tcp + d = 'X' * 2048 + s = 'E\x00\x00\x004\xce@\x00\x80\x06\x00\x00\x7f\x00\x00\x01\x7f\x00\x00\x01\xccN\x0c8`\xff\xc6N_\x8a\x12\x98P\x18@):\xa3\x00\x00' + d + ip = IP(s) + assert (isinstance(ip.data, tcp.TCP)) + assert (ip.tcp.data == d) + + +if __name__ == '__main__': + test_ip() + test_hl() + test_opt() + test_zerolen() + print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ip6.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ip6.py new file mode 100644 index 00000000..099abfcb --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/ip6.py @@ -0,0 +1,383 @@ +# $Id: ip6.py 87 2013-03-05 19:41:04Z andrewflnr@gmail.com $ +# -*- coding: utf-8 -*- +"""Internet Protocol, version 6.""" + +import dpkt +from decorators import deprecated + + +class IP6(dpkt.Packet): + __hdr__ = ( + ('v_fc_flow', 'I', 0x60000000L), + ('plen', 'H', 0), # payload length (not including header) + ('nxt', 'B', 0), # next header protocol + ('hlim', 'B', 0), # hop limit + ('src', '16s', ''), + ('dst', '16s', '') + ) + + # XXX - to be shared with IP. We cannot refer to the ip module + # right now because ip.__load_protos() expects the IP6 class to be + # defined. + _protosw = None + + @property + def v(self): + return self.v_fc_flow >> 28 + + @v.setter + def v(self, v): + self.v_fc_flow = (self.v_fc_flow & ~0xf0000000L) | (v << 28) + + @property + def fc(self): + return (self.v_fc_flow >> 20) & 0xff + + @fc.setter + def fc(self, v): + self.v_fc_flow = (self.v_fc_flow & ~0xff00000L) | (v << 20) + + @property + def flow(self): + return self.v_fc_flow & 0xfffff + + @flow.setter + def flow(self, v): + self.v_fc_flow = (self.v_fc_flow & ~0xfffff) | (v & 0xfffff) + + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): + return self.v + + @deprecated + def _set_v(self, v): + self.v = v + + @deprecated + def _get_fc(self): + return self.fc + + @deprecated + def _set_fc(self, v): + self.rc = v + + @deprecated + def _get_flow(self): + return self.flow + + @deprecated + def _set_flow(self, v): + self.flow = v + + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.extension_hdrs = dict(((i, None) for i in ext_hdrs)) + + if self.plen: + buf = self.data[:self.plen] + else: # due to jumbo payload or TSO + buf = self.data + + next = self.nxt + + while next in ext_hdrs: + ext = ext_hdrs_cls[next](buf) + self.extension_hdrs[next] = ext + buf = buf[ext.length:] + next = ext.nxt + + # set the payload protocol id + setattr(self, 'p', next) + + try: + self.data = self._protosw[next](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def headers_str(self): + """Output extension headers in order defined in RFC1883 (except dest opts)""" + + header_str = "" + + for hdr in ext_hdrs: + if not self.extension_hdrs[hdr] is None: + header_str += str(self.extension_hdrs[hdr]) + return header_str + + def __str__(self): + if (self.nxt == 6 or self.nxt == 17 or self.nxt == 58) and not self.data.sum: + # XXX - set TCP, UDP, and ICMPv6 checksums + p = str(self.data) + s = dpkt.struct.pack('>16s16sxBH', self.src, self.dst, self.nxt, len(p)) + s = dpkt.in_cksum_add(0, s) + s = dpkt.in_cksum_add(s, p) + try: + self.data.sum = dpkt.in_cksum_done(s) + except AttributeError: + pass + return self.pack_hdr() + self.headers_str() + str(self.data) + + @classmethod + def set_proto(cls, p, pktclass): + cls._protosw[p] = pktclass + + @classmethod + def get_proto(cls, p): + return cls._protosw[p] + + +import ip +# We are most likely still in the middle of ip.__load_protos() which +# implicitly loads this module through __import__(), so the content of +# ip.IP._protosw is still incomplete at the moment. By sharing the +# same dictionary by reference as opposed to making a copy, when +# ip.__load_protos() finishes, we will also automatically get the most +# up-to-date dictionary. +IP6._protosw = ip.IP._protosw + + +class IP6ExtensionHeader(dpkt.Packet): + """ + An extension header is very similar to a 'sub-packet'. + We just want to re-use all the hdr unpacking etc. + """ + pass + + +class IP6OptsHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('len', 'B', 0) # option data length in 8 octect units (ignoring first 8 octets) so, len 0 == 64bit header + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + setattr(self, 'length', (self.len + 1) * 8) + options = [] + + index = 0 + + while index < self.length - 2: + opt_type = ord(self.data[index]) + + # PAD1 option + if opt_type == 0: + index += 1 + continue + + opt_length = ord(self.data[index + 1]) + + if opt_type == 1: # PADN option + # PADN uses opt_length bytes in total + index += opt_length + 2 + continue + + options.append( + {'type': opt_type, 'opt_length': opt_length, 'data': self.data[index + 2:index + 2 + opt_length]}) + + # add the two chars and the option_length, to move to the next option + index += opt_length + 2 + + setattr(self, 'options', options) + + +class IP6HopOptsHeader(IP6OptsHeader): pass + + +class IP6DstOptsHeader(IP6OptsHeader): pass + + +class IP6RoutingHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('len', 'B', 0), # extension data length in 8 octect units (ignoring first 8 octets) (<= 46 for type 0) + ('type', 'B', 0), # routing type (currently, only 0 is used) + ('segs_left', 'B', 0), # remaining segments in route, until destination (<= 23) + ('rsvd_sl_bits', 'I', 0), # reserved (1 byte), strict/loose bitmap for addresses + ) + + @property + def sl_bits(self): + return self.rsvd_sl_bits & 0xffffff + + @sl_bits.setter + def sl_bits(self, v): + self.rsvd_sl_bits = (self.rsvd_sl_bits & ~0xfffff) | (v & 0xfffff) + + # Deprecated methods, will be removed in the future + # ================================================= + def _get_sl_bits(self): return self.sl_bits + + def _set_sl_bits(self, v): self.sl_bits = v + + # ================================================= + + def unpack(self, buf): + hdr_size = 8 + addr_size = 16 + + dpkt.Packet.unpack(self, buf) + + addresses = [] + num_addresses = self.len / 2 + buf = buf[hdr_size:hdr_size + num_addresses * addr_size] + + for i in range(num_addresses): + addresses.append(buf[i * addr_size: i * addr_size + addr_size]) + + self.data = buf + setattr(self, 'addresses', addresses) + setattr(self, 'length', self.len * 8 + 8) + + +class IP6FragmentHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('resv', 'B', 0), # reserved, set to 0 + ('frag_off_resv_m', 'H', 0), # frag offset (13 bits), reserved zero (2 bits), More frags flag + ('id', 'I', 0) # fragments id + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + setattr(self, 'length', self.__hdr_len__) + + @property + def frag_off(self): + return self.frag_off_resv_m >> 3 + + @frag_off.setter + def frag_off(self, v): + self.frag_off_resv_m = (self.frag_off_resv_m & ~0xfff8) | (v << 3) + + @property + def m_flag(self): + return self.frag_off_resv_m & 1 + + @m_flag.setter + def m_flag(self, v): + self.frag_off_resv_m = (self.frag_off_resv_m & ~0xfffe) | v + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_frag_off(self): return self.flag_off + + @deprecated + def _set_frag_off(self, v): self.flag_off = v + + @deprecated + def _get_m_flag(self): return self.m_flag + + @deprecated + def _set_m_flag(self, v): self.m_flag = v + + # ================================================= + + +class IP6AHHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('len', 'B', 0), # length of header in 4 octet units (ignoring first 2 units) + ('resv', 'H', 0), # reserved, 2 bytes of 0 + ('spi', 'I', 0), # SPI security parameter index + ('seq', 'I', 0) # sequence no. + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + setattr(self, 'length', (self.len + 2) * 4) + setattr(self, 'auth_data', self.data[:(self.len - 1) * 4]) + + +class IP6ESPHeader(IP6ExtensionHeader): + def unpack(self, buf): + raise NotImplementedError("ESP extension headers are not supported.") + + +ext_hdrs = [ip.IP_PROTO_HOPOPTS, ip.IP_PROTO_ROUTING, ip.IP_PROTO_FRAGMENT, ip.IP_PROTO_AH, ip.IP_PROTO_ESP, + ip.IP_PROTO_DSTOPTS] +ext_hdrs_cls = {ip.IP_PROTO_HOPOPTS: IP6HopOptsHeader, + ip.IP_PROTO_ROUTING: IP6RoutingHeader, + ip.IP_PROTO_FRAGMENT: IP6FragmentHeader, + ip.IP_PROTO_ESP: IP6ESPHeader, + ip.IP_PROTO_AH: IP6AHHeader, + ip.IP_PROTO_DSTOPTS: IP6DstOptsHeader} + + +def test_ipg(): + s = '`\x00\x00\x00\x00(\x06@\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x11$\xff\xfe\x8c\x11\xde\xfe\x80\x00\x00\x00\x00\x00\x00\x02\xb0\xd0\xff\xfe\xe1\x80r\xcd\xca\x00\x16\x04\x84F\xd5\x00\x00\x00\x00\xa0\x02\xff\xff\xf8\t\x00\x00\x02\x04\x05\xa0\x01\x03\x03\x00\x01\x01\x08\n}\x185?\x00\x00\x00\x00' + _ip = IP6(s) + # print `ip` + _ip.data.sum = 0 + s2 = str(_ip) + IP6(s) + # print `ip2` + assert (s == s2) + + +def test_ip6_routing_header(): + s = '`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x02\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' + ip = IP6(s) + s2 = str(ip) + # 43 is Routing header id + assert (len(ip.extension_hdrs[43].addresses) == 2) + assert (ip.tcp) + assert (s == s2) + + +def test_ip6_fragment_header(): + s = '\x06\xee\xff\xfb\x00\x00\xff\xff' + fh = IP6FragmentHeader(s) + # s2 = str(fh) variable 's2' is not used + str(fh) + assert (fh.nxt == 6) + assert (fh.id == 65535) + assert (fh.frag_off == 8191) + assert (fh.m_flag == 1) + + +def test_ip6_options_header(): + s = ';\x04\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x02\x00\x00' + options = IP6OptsHeader(s).options + assert (len(options) == 3) + + +def test_ip6_ah_header(): + s = ';\x04\x00\x00\x02\x02\x02\x02\x01\x01\x01\x01\x78\x78\x78\x78\x78\x78\x78\x78' + ah = IP6AHHeader(s) + assert (ah.length == 24) + assert (ah.auth_data == 'xxxxxxxx') + assert (ah.spi == 0x2020202) + assert (ah.seq == 0x1010101) + + +def test_ip6_extension_headers(): + p = '`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x02\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' + ip = IP6(p) + o = ';\x04\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x02\x00\x00' + options = IP6HopOptsHeader(o) + ip.extension_hdrs[0] = options + fh = '\x06\xee\xff\xfb\x00\x00\xff\xff' + ip.extension_hdrs[44] = IP6FragmentHeader(fh) + ah = ';\x04\x00\x00\x02\x02\x02\x02\x01\x01\x01\x01\x78\x78\x78\x78\x78\x78\x78\x78' + ip.extension_hdrs[51] = IP6AHHeader(ah) + do = ';\x02\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + ip.extension_hdrs[60] = IP6DstOptsHeader(do) + assert (len([k for k in ip.extension_hdrs if (not ip.extension_hdrs[k] is None)]) == 5) + + +if __name__ == '__main__': + test_ipg() + test_ip6_routing_header() + test_ip6_fragment_header() + test_ip6_options_header() + test_ip6_ah_header() + test_ip6_extension_headers() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ipx.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ipx.py new file mode 100644 index 00000000..b95ff0d9 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/ipx.py @@ -0,0 +1,18 @@ +# $Id: ipx.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Internetwork Packet Exchange.""" + +import dpkt + +IPX_HDR_LEN = 30 + + +class IPX(dpkt.Packet): + __hdr__ = ( + ('sum', 'H', 0xffff), + ('len', 'H', IPX_HDR_LEN), + ('tc', 'B', 0), + ('pt', 'B', 0), + ('dst', '12s', ''), + ('src', '12s', '') + ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/llc.py b/external_libs/python/dpkt-1.8.6.2/dpkt/llc.py new file mode 100644 index 00000000..ce7429f6 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/llc.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +import struct +import dpkt +import stp +import ethernet + + +class LLC(dpkt.Packet): + _typesw = {} + + def _unpack_data(self, buf): + if self.type == ethernet.ETH_TYPE_8021Q: + self.tag, self.type = struct.unpack('>HH', buf[:4]) + buf = buf[4:] + elif self.type == ethernet.ETH_TYPE_MPLS or self.type == ethernet.ETH_TYPE_MPLS_MCAST: + # XXX - skip labels + for i in range(24): + if struct.unpack('>I', buf[i:i + 4])[0] & 0x0100: # MPLS_STACK_BOTTOM + break + self.type = ethernet.ETH_TYPE_IP + buf = buf[(i + 1) * 4:] + try: + self.data = self._typesw[self.type](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def unpack(self, buf): + self.data = buf + if self.data.startswith('\xaa\xaa'): + # SNAP + self.type = struct.unpack('>H', self.data[6:8])[0] + self._unpack_data(self.data[8:]) + else: + # non-SNAP + dsap = ord(self.data[0]) + if dsap == 0x06: # SAP_IP + self.data = self.ip = self._typesw[ethernet.ETH_TYPE_IP](self.data[3:]) + elif dsap == 0x10 or dsap == 0xe0: # SAP_NETWARE{1,2} + self.data = self.ipx = self._typesw[ethernet.ETH_TYPE_IPX](self.data[3:]) + elif dsap == 0x42: # SAP_STP + self.data = self.stp = stp.STP(self.data[3:]) + + +def test_llc(): + s = '\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04\xac\x17\x00\x00' + import ip + llc_pkt = LLC(s) + ip_pkt = ip.IP(llc_pkt.data) + assert (llc_pkt.type == ethernet.ETH_TYPE_IP) + assert (ip_pkt.dst == '\x3f\xf5\xd1\x69') + +if __name__ == '__main__': + test_llc() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/loopback.py b/external_libs/python/dpkt-1.8.6.2/dpkt/loopback.py new file mode 100644 index 00000000..5bf24bf5 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/loopback.py @@ -0,0 +1,25 @@ +# $Id: loopback.py 38 2007-03-17 03:33:16Z dugsong $ +# -*- coding: utf-8 -*- +"""Platform-dependent loopback header.""" + +import dpkt +import ethernet +import ip +import ip6 + + +class Loopback(dpkt.Packet): + __hdr__ = (('family', 'I', 0), ) + __byte_order__ = '@' + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.family == 2: + self.data = ip.IP(self.data) + elif self.family == 0x02000000: + self.family = 2 + self.data = ip.IP(self.data) + elif self.family in (24, 28, 30): + self.data = ip6.IP6(self.data) + elif self.family > 1500: + self.data = ethernet.Ethernet(self.data) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/mrt.py b/external_libs/python/dpkt-1.8.6.2/dpkt/mrt.py new file mode 100644 index 00000000..aa1dc78a --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/mrt.py @@ -0,0 +1,96 @@ +# $Id: mrt.py 29 2007-01-26 02:29:07Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Multi-threaded Routing Toolkit.""" + +import dpkt +import bgp + +# Multi-threaded Routing Toolkit +# http://www.ietf.org/internet-drafts/draft-ietf-grow-mrt-03.txt + +# MRT Types +NULL = 0 +START = 1 +DIE = 2 +I_AM_DEAD = 3 +PEER_DOWN = 4 +BGP = 5 # Deprecated by BGP4MP +RIP = 6 +IDRP = 7 +RIPNG = 8 +BGP4PLUS = 9 # Deprecated by BGP4MP +BGP4PLUS_01 = 10 # Deprecated by BGP4MP +OSPF = 11 +TABLE_DUMP = 12 +BGP4MP = 16 +BGP4MP_ET = 17 +ISIS = 32 +ISIS_ET = 33 +OSPF_ET = 64 + +# BGP4MP Subtypes +BGP4MP_STATE_CHANGE = 0 +BGP4MP_MESSAGE = 1 +BGP4MP_ENTRY = 2 +BGP4MP_SNAPSHOT = 3 +BGP4MP_MESSAGE_32BIT_AS = 4 + +# Address Family Types +AFI_IPv4 = 1 +AFI_IPv6 = 2 + + +class MRTHeader(dpkt.Packet): + __hdr__ = ( + ('ts', 'I', 0), + ('type', 'H', 0), + ('subtype', 'H', 0), + ('len', 'I', 0) + ) + + +class TableDump(dpkt.Packet): + __hdr__ = ( + ('view', 'H', 0), + ('seq', 'H', 0), + ('prefix', 'I', 0), + ('prefix_len', 'B', 0), + ('status', 'B', 1), + ('originated_ts', 'I', 0), + ('peer_ip', 'I', 0), + ('peer_as', 'H', 0), + ('attr_len', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + plen = self.attr_len + l = [] + while plen > 0: + attr = bgp.BGP.Update.Attribute(self.data) + self.data = self.data[len(attr):] + plen -= len(attr) + l.append(attr) + self.attributes = l + + +class BGP4MPMessage(dpkt.Packet): + __hdr__ = ( + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('intf', 'H', 0), + ('family', 'H', AFI_IPv4), + ('src_ip', 'I', 0), + ('dst_ip', 'I', 0) + ) + + +class BGP4MPMessage_32(dpkt.Packet): + __hdr__ = ( + ('src_as', 'I', 0), + ('dst_as', 'I', 0), + ('intf', 'H', 0), + ('family', 'H', AFI_IPv4), + ('src_ip', 'I', 0), + ('dst_ip', 'I', 0) + ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/netbios.py b/external_libs/python/dpkt-1.8.6.2/dpkt/netbios.py new file mode 100644 index 00000000..54586327 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/netbios.py @@ -0,0 +1,166 @@ +# $Id: netbios.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Network Basic Input/Output System.""" + +import struct +import dpkt +import dns + + +def encode_name(name): + """Return the NetBIOS first-level encoded name.""" + l = [] + for c in struct.pack('16s', name): + c = ord(c) + l.append(chr((c >> 4) + 0x41)) + l.append(chr((c & 0xf) + 0x41)) + return ''.join(l) + + +def decode_name(nbname): + """Return the NetBIOS first-level decoded nbname.""" + if len(nbname) != 32: + return nbname + l = [] + for i in range(0, 32, 2): + l.append(chr(((ord(nbname[i]) - 0x41) << 4) | + ((ord(nbname[i + 1]) - 0x41) & 0xf))) + return ''.join(l).split('\x00', 1)[0] + +# RR types +NS_A = 0x01 # IP address +NS_NS = 0x02 # Name Server +NS_NULL = 0x0A # NULL +NS_NB = 0x20 # NetBIOS general Name Service +NS_NBSTAT = 0x21 # NetBIOS NODE STATUS + +# RR classes +NS_IN = 1 + +# NBSTAT name flags +NS_NAME_G = 0x8000 # group name (as opposed to unique) +NS_NAME_DRG = 0x1000 # deregister +NS_NAME_CNF = 0x0800 # conflict +NS_NAME_ACT = 0x0400 # active +NS_NAME_PRM = 0x0200 # permanent + +# NBSTAT service names +nbstat_svcs = { + # (service, unique): list of ordered (name prefix, service name) tuples + (0x00, 0): [('', 'Domain Name')], + (0x00, 1): [('IS~', 'IIS'), ('', 'Workstation Service')], + (0x01, 0): [('__MSBROWSE__', 'Master Browser')], + (0x01, 1): [('', 'Messenger Service')], + (0x03, 1): [('', 'Messenger Service')], + (0x06, 1): [('', 'RAS Server Service')], + (0x1B, 1): [('', 'Domain Master Browser')], + (0x1C, 0): [('INet~Services', 'IIS'), ('', 'Domain Controllers')], + (0x1D, 1): [('', 'Master Browser')], + (0x1E, 0): [('', 'Browser Service Elections')], + (0x1F, 1): [('', 'NetDDE Service')], + (0x20, 1): [('Forte_$ND800ZA', 'DCA IrmaLan Gateway Server Service'), + ('', 'File Server Service')], + (0x21, 1): [('', 'RAS Client Service')], + (0x22, 1): [('', 'Microsoft Exchange Interchange(MSMail Connector)')], + (0x23, 1): [('', 'Microsoft Exchange Store')], + (0x24, 1): [('', 'Microsoft Exchange Directory')], + (0x2B, 1): [('', 'Lotus Notes Server Service')], + (0x2F, 0): [('IRISMULTICAST', 'Lotus Notes')], + (0x30, 1): [('', 'Modem Sharing Server Service')], + (0x31, 1): [('', 'Modem Sharing Client Service')], + (0x33, 0): [('IRISNAMESERVER', 'Lotus Notes')], + (0x43, 1): [('', 'SMS Clients Remote Control')], + (0x44, 1): [('', 'SMS Administrators Remote Control Tool')], + (0x45, 1): [('', 'SMS Clients Remote Chat')], + (0x46, 1): [('', 'SMS Clients Remote Transfer')], + (0x4C, 1): [('', 'DEC Pathworks TCPIP service on Windows NT')], + (0x52, 1): [('', 'DEC Pathworks TCPIP service on Windows NT')], + (0x87, 1): [('', 'Microsoft Exchange MTA')], + (0x6A, 1): [('', 'Microsoft Exchange IMC')], + (0xBE, 1): [('', 'Network Monitor Agent')], + (0xBF, 1): [('', 'Network Monitor Application')] +} + + +def node_to_service_name((name, service, flags)): + try: + unique = int(flags & NS_NAME_G == 0) + for namepfx, svcname in nbstat_svcs[(service, unique)]: + if name.startswith(namepfx): + return svcname + except KeyError: + pass + return '' + + +class NS(dns.DNS): + """NetBIOS Name Service.""" + + class Q(dns.DNS.Q): + pass + + class RR(dns.DNS.RR): + """NetBIOS resource record.""" + + def unpack_rdata(self, buf, off): + if self.type == NS_A: + self.ip = self.rdata + elif self.type == NS_NBSTAT: + num = ord(self.rdata[0]) + off = 1 + l = [] + for i in range(num): + name = self.rdata[off:off + 15].split(None, 1)[0].split('\x00', 1)[0] + service = ord(self.rdata[off + 15]) + off += 16 + flags = struct.unpack('>H', self.rdata[off:off + 2])[0] + off += 2 + l.append((name, service, flags)) + self.nodenames = l + # XXX - skip stats + + def pack_name(self, buf, name): + return dns.DNS.pack_name(self, buf, encode_name(name)) + + def unpack_name(self, buf, off): + name, off = dns.DNS.unpack_name(self, buf, off) + return decode_name(name), off + + +class Session(dpkt.Packet): + """NetBIOS Session Service.""" + __hdr__ = ( + ('type', 'B', 0), + ('flags', 'B', 0), + ('len', 'H', 0) + ) + + +SSN_MESSAGE = 0 +SSN_REQUEST = 1 +SSN_POSITIVE = 2 +SSN_NEGATIVE = 3 +SSN_RETARGET = 4 +SSN_KEEPALIVE = 5 + + +class Datagram(dpkt.Packet): + """NetBIOS Datagram Service.""" + __hdr__ = ( + ('type', 'B', 0), + ('flags', 'B', 0), + ('id', 'H', 0), + ('src', 'I', 0), + ('sport', 'H', 0), + ('len', 'H', 0), + ('off', 'H', 0) + ) + + +DGRAM_UNIQUE = 0x10 +DGRAM_GROUP = 0x11 +DGRAM_BROADCAST = 0x12 +DGRAM_ERROR = 0x13 +DGRAM_QUERY = 0x14 +DGRAM_POSITIVE = 0x15 +DGRAM_NEGATIVE = 0x16 diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/netflow.py b/external_libs/python/dpkt-1.8.6.2/dpkt/netflow.py new file mode 100644 index 00000000..4e53ba79 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/netflow.py @@ -0,0 +1,219 @@ +# $Id: netflow.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Cisco Netflow.""" + +import itertools +import struct +import dpkt + + +class NetflowBase(dpkt.Packet): + """Base class for Cisco Netflow packets.""" + + __hdr__ = ( + ('version', 'H', 1), + ('count', 'H', 0), + ('sys_uptime', 'I', 0), + ('unix_sec', 'I', 0), + ('unix_nsec', 'I', 0) + ) + + def __len__(self): + return self.__hdr_len__ + (len(self.data[0]) * self.count) + + def __str__(self): + # for now, don't try to enforce any size limits + self.count = len(self.data) + return self.pack_hdr() + ''.join(map(str, self.data)) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = self.data + l = [] + while buf: + flow = self.NetflowRecord(buf) + l.append(flow) + buf = buf[len(flow):] + self.data = l + + class NetflowRecordBase(dpkt.Packet): + """Base class for netflow v1-v7 netflow records.""" + + # performance optimizations + def __len__(self): + # don't bother with data + return self.__hdr_len__ + + def __str__(self): + # don't bother with data + return self.pack_hdr() + + def unpack(self, buf): + # don't bother with data + for k, v in itertools.izip(self.__hdr_fields__, + struct.unpack(self.__hdr_fmt__, buf[:self.__hdr_len__])): + setattr(self, k, v) + self.data = "" + + +class Netflow1(NetflowBase): + """Netflow Version 1.""" + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v1 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('pad1', 'H', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('tcp_flags', 'B', 0), + ('pad2', 'B', 0), + ('pad3', 'H', 0), + ('reserved', 'I', 0) + ) + + +# FYI, versions 2-4 don't appear to have ever seen the light of day. + +class Netflow5(NetflowBase): + """Netflow Version 5.""" + __hdr__ = NetflowBase.__hdr__ + ( + ('flow_sequence', 'I', 0), + ('engine_type', 'B', 0), + ('engine_id', 'B', 0), + ('reserved', 'H', 0), + ) + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v5 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('pad1', 'B', 0), + ('tcp_flags', 'B', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('src_mask', 'B', 0), + ('dst_mask', 'B', 0), + ('pad2', 'H', 0), + ) + + +class Netflow6(NetflowBase): + """Netflow Version 6. + XXX - unsupported by Cisco, but may be found in the field. + """ + __hdr__ = Netflow5.__hdr__ + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v6 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('pad1', 'B', 0), + ('tcp_flags', 'B', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('src_mask', 'B', 0), + ('dst_mask', 'B', 0), + ('in_encaps', 'B', 0), + ('out_encaps', 'B', 0), + ('peer_nexthop', 'I', 0), + ) + + +class Netflow7(NetflowBase): + """Netflow Version 7.""" + __hdr__ = NetflowBase.__hdr__ + ( + ('flow_sequence', 'I', 0), + ('reserved', 'I', 0), + ) + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v7 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('flags', 'B', 0), + ('tcp_flags', 'B', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('src_mask', 'B', 0), + ('dst_mask', 'B', 0), + ('pad2', 'H', 0), + ('router_sc', 'I', 0), + ) + +# No support for v8 or v9 yet. + +__sample_v1 = "\x00\x01\x00\x18gza> 3) & 0x7 + + @v.setter + def v(self, v): + self.flags = (self.flags & ~0x38) | ((v & 0x7) << 3) + + @property + def li(self): + return (self.flags >> 6) & 0x3 + + @li.setter + def li(self, li): + self.flags = (self.flags & ~0xc0) | ((li & 0x3) << 6) + + @property + def mode(self): + return self.flags & 0x7 + + @mode.setter + def mode(self, mode): + self.flags = (self.flags & ~0x7) | (mode & 0x7) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): return self.v + + @deprecated + def _set_v(self, v): self.v = v + + @deprecated + def _get_li(self): return self.li + + @deprecated + def _set_li(self, li): self.li = li + + @deprecated + def _get_mode(self): return self.mode + + @deprecated + def _set_mode(self, mode): self.mode = mode + # ================================================= + +__s = '\x24\x02\x04\xef\x00\x00\x00\x84\x00\x00\x33\x27\xc1\x02\x04\x02\xc8\x90\xec\x11\x22\xae\x07\xe5\xc8\x90\xf9\xd9\xc0\x7e\x8c\xcd\xc8\x90\xf9\xd9\xda\xc5\xb0\x78\xc8\x90\xf9\xd9\xda\xc6\x8a\x93' + + +def test_ntp_pack(): + n = NTP(__s) + assert (__s == str(n)) + + +def test_ntp_unpack(): + n = NTP(__s) + assert (n.li == NO_WARNING) + assert (n.v == 4) + assert (n.mode == SERVER) + assert (n.stratum == 2) + assert (n.id == '\xc1\x02\x04\x02') + # test get/set functions + n.li = ALARM_CONDITION + n.v = 3 + n.mode = CLIENT + assert (n.li == ALARM_CONDITION) + assert (n.v == 3) + assert (n.mode == CLIENT) + +if __name__ == '__main__': + test_ntp_pack() + test_ntp_unpack() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ospf.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ospf.py new file mode 100644 index 00000000..cc47aae3 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/ospf.py @@ -0,0 +1,27 @@ +# $Id: ospf.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Open Shortest Path First.""" + +import dpkt + +AUTH_NONE = 0 +AUTH_PASSWORD = 1 +AUTH_CRYPTO = 2 + + +class OSPF(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 0), + ('type', 'B', 0), + ('len', 'H', 0), + ('router', 'I', 0), + ('area', 'I', 0), + ('sum', 'H', 0), + ('atype', 'H', 0), + ('auth', '8s', '') + ) + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/pcap.py b/external_libs/python/dpkt-1.8.6.2/dpkt/pcap.py new file mode 100644 index 00000000..c14ba6de --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/pcap.py @@ -0,0 +1,172 @@ +# $Id: pcap.py 77 2011-01-06 15:59:38Z dugsong $ +# -*- coding: utf-8 -*- +"""Libpcap file format.""" + +import sys +import time +import dpkt + + +TCPDUMP_MAGIC = 0xa1b2c3d4L +PMUDPCT_MAGIC = 0xd4c3b2a1L + +PCAP_VERSION_MAJOR = 2 +PCAP_VERSION_MINOR = 4 + +DLT_NULL = 0 +DLT_EN10MB = 1 +DLT_EN3MB = 2 +DLT_AX25 = 3 +DLT_PRONET = 4 +DLT_CHAOS = 5 +DLT_IEEE802 = 6 +DLT_ARCNET = 7 +DLT_SLIP = 8 +DLT_PPP = 9 +DLT_FDDI = 10 +DLT_PFSYNC = 18 +DLT_IEEE802_11 = 105 +DLT_LINUX_SLL = 113 +DLT_PFLOG = 117 +DLT_IEEE802_11_RADIO = 127 + +if sys.platform.find('openbsd') != -1: + DLT_LOOP = 12 + DLT_RAW = 14 +else: + DLT_LOOP = 108 + DLT_RAW = 12 + +dltoff = {DLT_NULL: 4, DLT_EN10MB: 14, DLT_IEEE802: 22, DLT_ARCNET: 6, + DLT_SLIP: 16, DLT_PPP: 4, DLT_FDDI: 21, DLT_PFLOG: 48, DLT_PFSYNC: 4, + DLT_LOOP: 4, DLT_LINUX_SLL: 16} + + +class PktHdr(dpkt.Packet): + """pcap packet header.""" + __hdr__ = ( + ('tv_sec', 'I', 0), + ('tv_usec', 'I', 0), + ('caplen', 'I', 0), + ('len', 'I', 0), + ) + + +class LEPktHdr(PktHdr): + __byte_order__ = '<' + + +class FileHdr(dpkt.Packet): + """pcap file header.""" + __hdr__ = ( + ('magic', 'I', TCPDUMP_MAGIC), + ('v_major', 'H', PCAP_VERSION_MAJOR), + ('v_minor', 'H', PCAP_VERSION_MINOR), + ('thiszone', 'I', 0), + ('sigfigs', 'I', 0), + ('snaplen', 'I', 1500), + ('linktype', 'I', 1), + ) + + +class LEFileHdr(FileHdr): + __byte_order__ = '<' + + +class Writer(object): + """Simple pcap dumpfile writer.""" + + def __init__(self, fileobj, snaplen=1500, linktype=DLT_EN10MB): + self.__f = fileobj + if sys.byteorder == 'little': + fh = LEFileHdr(snaplen=snaplen, linktype=linktype) + else: + fh = FileHdr(snaplen=snaplen, linktype=linktype) + self.__f.write(str(fh)) + + def writepkt(self, pkt, ts=None): + if ts is None: + ts = time.time() + s = str(pkt) + n = len(s) + if sys.byteorder == 'little': + ph = LEPktHdr(tv_sec=int(ts), + tv_usec=int((float(ts) - int(ts)) * 1000000.0), + caplen=n, len=n) + else: + ph = PktHdr(tv_sec=int(ts), + tv_usec=int((float(ts) - int(ts)) * 1000000.0), + caplen=n, len=n) + self.__f.write(str(ph)) + self.__f.write(s) + + def close(self): + self.__f.close() + + +class Reader(object): + """Simple pypcap-compatible pcap file reader.""" + + def __init__(self, fileobj): + self.name = fileobj.name + self.fd = fileobj.fileno() + self.__f = fileobj + buf = self.__f.read(FileHdr.__hdr_len__) + self.__fh = FileHdr(buf) + self.__ph = PktHdr + if self.__fh.magic == PMUDPCT_MAGIC: + self.__fh = LEFileHdr(buf) + self.__ph = LEPktHdr + elif self.__fh.magic != TCPDUMP_MAGIC: + raise ValueError('invalid tcpdump header') + if self.__fh.linktype in dltoff: + self.dloff = dltoff[self.__fh.linktype] + else: + self.dloff = 0 + self.snaplen = self.__fh.snaplen + self.filter = '' + + def fileno(self): + return self.fd + + def datalink(self): + return self.__fh.linktype + + def setfilter(self, value, optimize=1): + return NotImplementedError + + def readpkts(self): + return list(self) + + def dispatch(self, cnt, callback, *args): + if cnt > 0: + for i in range(cnt): + ts, pkt = self.next() + callback(ts, pkt, *args) + else: + for ts, pkt in self: + callback(ts, pkt, *args) + + def loop(self, callback, *args): + self.dispatch(0, callback, *args) + + def __iter__(self): + self.__f.seek(FileHdr.__hdr_len__) + while 1: + buf = self.__f.read(PktHdr.__hdr_len__) + if not buf: break + hdr = self.__ph(buf) + buf = self.__f.read(hdr.caplen) + yield (hdr.tv_sec + (hdr.tv_usec / 1000000.0), buf) + + +def test_pcap_endian(): + be = '\xa1\xb2\xc3\xd4\x00\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x01' + le = '\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x01\x00\x00\x00' + befh = FileHdr(be) + lefh = LEFileHdr(le) + assert (befh.linktype == lefh.linktype) + +if __name__ == '__main__': + test_pcap_endian() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/pim.py b/external_libs/python/dpkt-1.8.6.2/dpkt/pim.py new file mode 100644 index 00000000..6cd16a42 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/pim.py @@ -0,0 +1,46 @@ +# $Id: pim.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Protocol Independent Multicast.""" + +import dpkt +from decorators import deprecated + + +class PIM(dpkt.Packet): + __hdr__ = ( + ('v_type', 'B', 0x20), + ('rsvd', 'B', 0), + ('sum', 'H', 0) + ) + + @property + def v(self): return self.v_type >> 4 + + @v.setter + def v(self, v): self.v_type = (v << 4) | (self.v_type & 0xf) + + @property + def type(self): return self.v_type & 0xf + + @type.setter + def type(self, type): self.v_type = (self.v_type & 0xf0) | type + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): return self.v + + @deprecated + def _set_v(self, v): self.v = v + + @deprecated + def _get_type(self): return self.type + + @deprecated + def _set_type(self, type): self.type = type + # ================================================= + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/pmap.py b/external_libs/python/dpkt-1.8.6.2/dpkt/pmap.py new file mode 100644 index 00000000..0e57b64c --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/pmap.py @@ -0,0 +1,18 @@ +# $Id: pmap.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Portmap / rpcbind.""" + +import dpkt + +PMAP_PROG = 100000L +PMAP_PROCDUMP = 4 +PMAP_VERS = 2 + + +class Pmap(dpkt.Packet): + __hdr__ = ( + ('prog', 'I', 0), + ('vers', 'I', 0), + ('prot', 'I', 0), + ('port', 'I', 0), + ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ppp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ppp.py new file mode 100644 index 00000000..282bdd98 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/ppp.py @@ -0,0 +1,66 @@ +# $Id: ppp.py 65 2010-03-26 02:53:51Z dugsong $ +# -*- coding: utf-8 -*- +"""Point-to-Point Protocol.""" + +import struct +import dpkt + +# XXX - finish later + +# http://www.iana.org/assignments/ppp-numbers +PPP_IP = 0x21 # Internet Protocol +PPP_IP6 = 0x57 # Internet Protocol v6 + +# Protocol field compression +PFC_BIT = 0x01 + + +class PPP(dpkt.Packet): + __hdr__ = ( + ('p', 'B', PPP_IP), + ) + _protosw = {} + + @classmethod + def set_p(cls, p, pktclass): + cls._protosw[p] = pktclass + + @classmethod + def get_p(cls, p): + return cls._protosw[p] + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.p & PFC_BIT == 0: + self.p = struct.unpack('>H', buf[:2])[0] + self.data = self.data[1:] + try: + self.data = self._protosw[self.p](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, struct.error, dpkt.UnpackError): + pass + + def pack_hdr(self): + try: + if self.p > 0xff: + return struct.pack('>H', self.p) + return dpkt.Packet.pack_hdr(self) + except struct.error, e: + raise dpkt.PackError(str(e)) + + +def __load_protos(): + g = globals() + for k, v in g.iteritems(): + if k.startswith('PPP_'): + name = k[4:] + modname = name.lower() + try: + mod = __import__(modname, g) + except ImportError: + continue + PPP.set_p(v, getattr(mod, name)) + + +if not PPP._protosw: + __load_protos() diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/pppoe.py b/external_libs/python/dpkt-1.8.6.2/dpkt/pppoe.py new file mode 100644 index 00000000..72e7a31b --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/pppoe.py @@ -0,0 +1,61 @@ +# $Id: pppoe.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""PPP-over-Ethernet.""" + +import dpkt +import ppp +from decorators import deprecated + +# RFC 2516 codes +PPPoE_PADI = 0x09 +PPPoE_PADO = 0x07 +PPPoE_PADR = 0x19 +PPPoE_PADS = 0x65 +PPPoE_PADT = 0xA7 +PPPoE_SESSION = 0x00 + + +class PPPoE(dpkt.Packet): + __hdr__ = ( + ('v_type', 'B', 0x11), + ('code', 'B', 0), + ('session', 'H', 0), + ('len', 'H', 0) # payload length + ) + + @property + def v(self): return self.v_type >> 4 + + @v.setter + def v(self, v): self.v_type = (v << 4) | (self.v_type & 0xf) + + @property + def type(self): return self.v_type & 0xf + + @type.setter + def type(self, t): self.v_type = (self.v_type & 0xf0) | t + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): return self.v + + @deprecated + def _set_v(self, v): self.v = v + + @deprecated + def _get_type(self): return self.type + + @deprecated + def _set_type(self, t): self.type = t + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + if self.code == 0: + self.data = self.ppp = ppp.PPP(self.data) + except dpkt.UnpackError: + pass + +# XXX - TODO TLVs, etc. diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/qq.py b/external_libs/python/dpkt-1.8.6.2/dpkt/qq.py new file mode 100644 index 00000000..3399d882 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/qq.py @@ -0,0 +1,224 @@ +# $Id: qq.py 48 2008-05-27 17:31:15Z yardley $ +# -*- coding: utf-8 -*- +from dpkt import Packet + +# header_type +QQ_HEADER_BASIC_FAMILY = 0x02 +QQ_HEADER_P2P_FAMILY = 0x00 +QQ_HEADER_03_FAMILY = 0x03 +QQ_HEADER_04_FAMILY = 0x04 +QQ_HEADER_05_FAMILY = 0x05 + +header_type_str = [ + "QQ_HEADER_P2P_FAMILY", + "Unknown Type", + "QQ_HEADER_03_FAMILY", + "QQ_HEADER_04_FAMILY", + "QQ_HEADER_05_FAMILY", +] + +# command +QQ_CMD_LOGOUT = 0x0001 +QQ_CMD_KEEP_ALIVE = 0x0002 +QQ_CMD_MODIFY_INFO = 0x0004 +QQ_CMD_SEARCH_USER = 0x0005 +QQ_CMD_GET_USER_INFO = 0x0006 +QQ_CMD_ADD_FRIEND = 0x0009 +QQ_CMD_DELETE_FRIEND = 0x000A +QQ_CMD_ADD_FRIEND_AUTH = 0x000B +QQ_CMD_CHANGE_STATUS = 0x000D +QQ_CMD_ACK_SYS_MSG = 0x0012 +QQ_CMD_SEND_IM = 0x0016 +QQ_CMD_RECV_IM = 0x0017 +QQ_CMD_REMOVE_SELF = 0x001C +QQ_CMD_REQUEST_KEY = 0x001D +QQ_CMD_LOGIN = 0x0022 +QQ_CMD_GET_FRIEND_LIST = 0x0026 +QQ_CMD_GET_ONLINE_OP = 0x0027 +QQ_CMD_SEND_SMS = 0x002D +QQ_CMD_CLUSTER_CMD = 0x0030 +QQ_CMD_TEST = 0x0031 +QQ_CMD_GROUP_DATA_OP = 0x003C +QQ_CMD_UPLOAD_GROUP_FRIEND = 0x003D +QQ_CMD_FRIEND_DATA_OP = 0x003E +QQ_CMD_DOWNLOAD_GROUP_FRIEND = 0x0058 +QQ_CMD_FRIEND_LEVEL_OP = 0x005C +QQ_CMD_PRIVACY_DATA_OP = 0x005E +QQ_CMD_CLUSTER_DATA_OP = 0x005F +QQ_CMD_ADVANCED_SEARCH = 0x0061 +QQ_CMD_REQUEST_LOGIN_TOKEN = 0x0062 +QQ_CMD_USER_PROPERTY_OP = 0x0065 +QQ_CMD_TEMP_SESSION_OP = 0x0066 +QQ_CMD_SIGNATURE_OP = 0x0067 +QQ_CMD_RECV_MSG_SYS = 0x0080 +QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS = 0x0081 +QQ_CMD_WEATHER_OP = 0x00A6 +QQ_CMD_ADD_FRIEND_EX = 0x00A7 +QQ_CMD_AUTHORIZE = 0X00A8 +QQ_CMD_UNKNOWN = 0xFFFF +QQ_SUB_CMD_SEARCH_ME_BY_QQ_ONLY = 0x03 +QQ_SUB_CMD_SHARE_GEOGRAPHY = 0x04 +QQ_SUB_CMD_GET_FRIEND_LEVEL = 0x02 +QQ_SUB_CMD_GET_CLUSTER_ONLINE_MEMBER = 0x01 +QQ_05_CMD_REQUEST_AGENT = 0x0021 +QQ_05_CMD_REQUEST_FACE = 0x0022 +QQ_05_CMD_TRANSFER = 0x0023 +QQ_05_CMD_REQUEST_BEGIN = 0x0026 +QQ_CLUSTER_CMD_CREATE_CLUSTER = 0x01 +QQ_CLUSTER_CMD_MODIFY_MEMBER = 0x02 +QQ_CLUSTER_CMD_MODIFY_CLUSTER_INFO = 0x03 +QQ_CLUSTER_CMD_GET_CLUSTER_INFO = 0x04 +QQ_CLUSTER_CMD_ACTIVATE_CLUSTER = 0x05 +QQ_CLUSTER_CMD_SEARCH_CLUSTER = 0x06 +QQ_CLUSTER_CMD_JOIN_CLUSTER = 0x07 +QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH = 0x08 +QQ_CLUSTER_CMD_EXIT_CLUSTER = 0x09 +QQ_CLUSTER_CMD_SEND_IM = 0x0A +QQ_CLUSTER_CMD_GET_ONLINE_MEMBER = 0x0B +QQ_CLUSTER_CMD_GET_MEMBER_INFO = 0x0C +QQ_CLUSTER_CMD_MODIFY_CARD = 0x0E +QQ_CLUSTER_CMD_GET_CARD_BATCH = 0x0F +QQ_CLUSTER_CMD_GET_CARD = 0x10 +QQ_CLUSTER_CMD_COMMIT_ORGANIZATION = 0x11 +QQ_CLUSTER_CMD_UPDATE_ORGANIZATION = 0x12 +QQ_CLUSTER_CMD_COMMIT_MEMBER_ORGANIZATION = 0x13 +QQ_CLUSTER_CMD_GET_VERSION_ID = 0x19 +QQ_CLUSTER_CMD_SEND_IM_EX = 0x1A +QQ_CLUSTER_CMD_SET_ROLE = 0x1B +QQ_CLUSTER_CMD_TRANSFER_ROLE = 0x1C +QQ_CLUSTER_CMD_CREATE_TEMP = 0x30 +QQ_CLUSTER_CMD_MODIFY_TEMP_MEMBER = 0x31 +QQ_CLUSTER_CMD_EXIT_TEMP = 0x32 +QQ_CLUSTER_CMD_GET_TEMP_INFO = 0x33 +QQ_CLUSTER_CMD_MODIFY_TEMP_INFO = 0x34 +QQ_CLUSTER_CMD_SEND_TEMP_IM = 0x35 +QQ_CLUSTER_CMD_SUB_CLUSTER_OP = 0x36 +QQ_CLUSTER_CMD_ACTIVATE_TEMP = 0x37 + +QQ_CLUSTER_SUB_CMD_ADD_MEMBER = 0x01 +QQ_CLUSTER_SUB_CMD_REMOVE_MEMBER = 0x02 +QQ_CLUSTER_SUB_CMD_GET_SUBJECT_LIST = 0x02 +QQ_CLUSTER_SUB_CMD_GET_DIALOG_LIST = 0x01 + +QQ_SUB_CMD_GET_ONLINE_FRIEND = 0x2 +QQ_SUB_CMD_GET_ONLINE_SERVICE = 0x3 +QQ_SUB_CMD_UPLOAD_GROUP_NAME = 0x2 +QQ_SUB_CMD_DOWNLOAD_GROUP_NAME = 0x1 +QQ_SUB_CMD_SEND_TEMP_SESSION_IM = 0x01 +QQ_SUB_CMD_BATCH_DOWNLOAD_FRIEND_REMARK = 0x0 +QQ_SUB_CMD_UPLOAD_FRIEND_REMARK = 0x1 +QQ_SUB_CMD_REMOVE_FRIEND_FROM_LIST = 0x2 +QQ_SUB_CMD_DOWNLOAD_FRIEND_REMARK = 0x3 +QQ_SUB_CMD_MODIFY_SIGNATURE = 0x01 +QQ_SUB_CMD_DELETE_SIGNATURE = 0x02 +QQ_SUB_CMD_GET_SIGNATURE = 0x03 +QQ_SUB_CMD_GET_USER_PROPERTY = 0x01 +QQ_SUB_CMD_GET_WEATHER = 0x01 + +QQ_FILE_CMD_HEART_BEAT = 0x0001 +QQ_FILE_CMD_HEART_BEAT_ACK = 0x0002 +QQ_FILE_CMD_TRANSFER_FINISHED = 0x0003 +QQ_FILE_CMD_FILE_OP = 0x0007 +QQ_FILE_CMD_FILE_OP_ACK = 0x0008 +QQ_FILE_CMD_SENDER_SAY_HELLO = 0x0031 +QQ_FILE_CMD_SENDER_SAY_HELLO_ACK = 0x0032 +QQ_FILE_CMD_RECEIVER_SAY_HELLO = 0x0033 +QQ_FILE_CMD_RECEIVER_SAY_HELLO_ACK = 0x0034 +QQ_FILE_CMD_NOTIFY_IP_ACK = 0x003C +QQ_FILE_CMD_PING = 0x003D +QQ_FILE_CMD_PONG = 0x003E +QQ_FILE_CMD_YES_I_AM_BEHIND_FIREWALL = 0x0040 +QQ_FILE_CMD_REQUEST_AGENT = 0x0001 +QQ_FILE_CMD_CHECK_IN = 0x0002 +QQ_FILE_CMD_FORWARD = 0x0003 +QQ_FILE_CMD_FORWARD_FINISHED = 0x0004 +QQ_FILE_CMD_IT_IS_TIME = 0x0005 +QQ_FILE_CMD_I_AM_READY = 0x0006 + +command_str = { + 0x0001: "QQ_CMD_LOGOUT", + 0x0002: "QQ_CMD_KEEP_ALIVE", + 0x0004: "QQ_CMD_MODIFY_INFO", + 0x0005: "QQ_CMD_SEARCH_USER", + 0x0006: "QQ_CMD_GET_USER_INFO", + 0x0009: "QQ_CMD_ADD_FRIEND", + 0x000A: "QQ_CMD_DELETE_FRIEND", + 0x000B: "QQ_CMD_ADD_FRIEND_AUTH", + 0x000D: "QQ_CMD_CHANGE_STATUS", + 0x0012: "QQ_CMD_ACK_SYS_MSG", + 0x0016: "QQ_CMD_SEND_IM", + 0x0017: "QQ_CMD_RECV_IM", + 0x001C: "QQ_CMD_REMOVE_SELF", + 0x001D: "QQ_CMD_REQUEST_KEY", + 0x0022: "QQ_CMD_LOGIN", + 0x0026: "QQ_CMD_GET_FRIEND_LIST", + 0x0027: "QQ_CMD_GET_ONLINE_OP", + 0x002D: "QQ_CMD_SEND_SMS", + 0x0030: "QQ_CMD_CLUSTER_CMD", + 0x0031: "QQ_CMD_TEST", + 0x003C: "QQ_CMD_GROUP_DATA_OP", + 0x003D: "QQ_CMD_UPLOAD_GROUP_FRIEND", + 0x003E: "QQ_CMD_FRIEND_DATA_OP", + 0x0058: "QQ_CMD_DOWNLOAD_GROUP_FRIEND", + 0x005C: "QQ_CMD_FRIEND_LEVEL_OP", + 0x005E: "QQ_CMD_PRIVACY_DATA_OP", + 0x005F: "QQ_CMD_CLUSTER_DATA_OP", + 0x0061: "QQ_CMD_ADVANCED_SEARCH", + 0x0062: "QQ_CMD_REQUEST_LOGIN_TOKEN", + 0x0065: "QQ_CMD_USER_PROPERTY_OP", + 0x0066: "QQ_CMD_TEMP_SESSION_OP", + 0x0067: "QQ_CMD_SIGNATURE_OP", + 0x0080: "QQ_CMD_RECV_MSG_SYS", + 0x0081: "QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS", + 0x00A6: "QQ_CMD_WEATHER_OP", + 0x00A7: "QQ_CMD_ADD_FRIEND_EX", + 0x00A8: "QQ_CMD_AUTHORIZE", + 0xFFFF: "QQ_CMD_UNKNOWN", + 0x0021: "_CMD_REQUEST_AGENT", + 0x0022: "_CMD_REQUEST_FACE", + 0x0023: "_CMD_TRANSFER", + 0x0026: "_CMD_REQUEST_BEGIN", +} + + +class QQBasicPacket(Packet): + __hdr__ = ( + ('header_type', 'B', 2), + ('source', 'H', 0), + ('command', 'H', 0), + ('sequence', 'H', 0), + ('qqNum', 'L', 0), + ) + + +class QQ3Packet(Packet): + __hdr__ = ( + ('header_type', 'B', 3), + ('command', 'B', 0), + ('sequence', 'H', 0), + ('unknown1', 'L', 0), + ('unknown2', 'L', 0), + ('unknown3', 'L', 0), + ('unknown4', 'L', 0), + ('unknown5', 'L', 0), + ('unknown6', 'L', 0), + ('unknown7', 'L', 0), + ('unknown8', 'L', 0), + ('unknown9', 'L', 0), + ('unknown10', 'B', 1), + ('unknown11', 'B', 0), + ('unknown12', 'B', 0), + ('source', 'H', 0), + ('unknown13', 'B', 0), + ) + + +class QQ5Packet(Packet): + __hdr__ = ( + ('header_type', 'B', 5), + ('source', 'H', 0), + ('unknown', 'H', 0), + ('command', 'H', 0), + ('sequence', 'H', 0), + ('qqNum', 'L', 0), + ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/radiotap.py b/external_libs/python/dpkt-1.8.6.2/dpkt/radiotap.py new file mode 100644 index 00000000..76e6306b --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/radiotap.py @@ -0,0 +1,532 @@ +# -*- coding: utf-8 -*- +"""Radiotap""" + +import dpkt +import ieee80211 +import socket +from decorators import deprecated + +# Ref: http://www.radiotap.org +# Fields Ref: http://www.radiotap.org/defined-fields/all + +# Present flags +_TSFT_MASK = 0x1000000 +_FLAGS_MASK = 0x2000000 +_RATE_MASK = 0x4000000 +_CHANNEL_MASK = 0x8000000 +_FHSS_MASK = 0x10000000 +_ANT_SIG_MASK = 0x20000000 +_ANT_NOISE_MASK = 0x40000000 +_LOCK_QUAL_MASK = 0x80000000 +_TX_ATTN_MASK = 0x10000 +_DB_TX_ATTN_MASK = 0x20000 +_DBM_TX_POWER_MASK = 0x40000 +_ANTENNA_MASK = 0x80000 +_DB_ANT_SIG_MASK = 0x100000 +_DB_ANT_NOISE_MASK = 0x200000 +_RX_FLAGS_MASK = 0x400000 +_CHANNELPLUS_MASK = 0x200 +_EXT_MASK = 0x1 + +_TSFT_SHIFT = 24 +_FLAGS_SHIFT = 25 +_RATE_SHIFT = 26 +_CHANNEL_SHIFT = 27 +_FHSS_SHIFT = 28 +_ANT_SIG_SHIFT = 29 +_ANT_NOISE_SHIFT = 30 +_LOCK_QUAL_SHIFT = 31 +_TX_ATTN_SHIFT = 16 +_DB_TX_ATTN_SHIFT = 17 +_DBM_TX_POWER_SHIFT = 18 +_ANTENNA_SHIFT = 19 +_DB_ANT_SIG_SHIFT = 20 +_DB_ANT_NOISE_SHIFT = 21 +_RX_FLAGS_SHIFT = 22 +_CHANNELPLUS_SHIFT = 10 +_EXT_SHIFT = 0 + +# Flags elements +_FLAGS_SIZE = 2 +_CFP_FLAG_SHIFT = 0 +_PREAMBLE_SHIFT = 1 +_WEP_SHIFT = 2 +_FRAG_SHIFT = 3 +_FCS_SHIFT = 4 +_DATA_PAD_SHIFT = 5 +_BAD_FCS_SHIFT = 6 +_SHORT_GI_SHIFT = 7 + +# Channel type +_CHAN_TYPE_SIZE = 4 +_CHANNEL_TYPE_SHIFT = 4 +_CCK_SHIFT = 5 +_OFDM_SHIFT = 6 +_TWO_GHZ_SHIFT = 7 +_FIVE_GHZ_SHIFT = 8 +_PASSIVE_SHIFT = 9 +_DYN_CCK_OFDM_SHIFT = 10 +_GFSK_SHIFT = 11 +_GSM_SHIFT = 12 +_STATIC_TURBO_SHIFT = 13 +_HALF_RATE_SHIFT = 14 +_QUARTER_RATE_SHIFT = 15 + +# Flags offsets and masks +_FCS_SHIFT = 4 +_FCS_MASK = 0x10 + + +class Radiotap(dpkt.Packet): + __hdr__ = ( + ('version', 'B', 0), + ('pad', 'B', 0), + ('length', 'H', 0), + ('present_flags', 'I', 0) + ) + + @property + def tsft_present(self): + return (self.present_flags & _TSFT_MASK) >> _TSFT_SHIFT + + @tsft_present.setter + def tsft_present(self, val): + self.present_flags |= val << _TSFT_SHIFT + + @property + def flags_present(self): + return (self.present_flags & _FLAGS_MASK) >> _FLAGS_SHIFT + + @flags_present.setter + def flags_present(self, val): + self.present_flags |= val << _FLAGS_SHIFT + + @property + def rate_present(self): + return (self.present_flags & _RATE_MASK) >> _RATE_SHIFT + + @rate_present.setter + def rate_present(self, val): + self.present_flags |= val << _RATE_SHIFT + + @property + def channel_present(self): + return (self.present_flags & _CHANNEL_MASK) >> _CHANNEL_SHIFT + + @channel_present.setter + def channel_present(self, val): + self.present_flags |= val << _CHANNEL_SHIFT + + @property + def fhss_present(self): + return (self.present_flags & _FHSS_MASK) >> _FHSS_SHIFT + + @fhss_present.setter + def fhss_present(self, val): + self.present_flags |= val << _FHSS_SHIFT + + @property + def ant_sig_present(self): + return (self.present_flags & _ANT_SIG_MASK) >> _ANT_SIG_SHIFT + + @ant_sig_present.setter + def ant_sig_present(self, val): + self.present_flags |= val << _ANT_SIG_SHIFT + + @property + def ant_noise_present(self): + return (self.present_flags & _ANT_NOISE_MASK) >> _ANT_NOISE_SHIFT + + @ant_noise_present.setter + def ant_noise_present(self, val): + self.present_flags |= val << _ANT_NOISE_SHIFT + + @property + def lock_qual_present(self): + return (self.present_flags & _LOCK_QUAL_MASK) >> _LOCK_QUAL_SHIFT + + @lock_qual_present.setter + def lock_qual_present(self, val): + self.present_flags |= val << _LOCK_QUAL_SHIFT + + @property + def tx_attn_present(self): + return (self.present_flags & _TX_ATTN_MASK) >> _TX_ATTN_SHIFT + + @tx_attn_present.setter + def tx_attn_present(self, val): + self.present_flags |= val << _TX_ATTN_SHIFT + + @property + def db_tx_attn_present(self): + return (self.present_flags & _DB_TX_ATTN_MASK) >> _DB_TX_ATTN_SHIFT + + @db_tx_attn_present.setter + def db_tx_attn_present(self, val): + self.present_flags |= val << _DB_TX_ATTN_SHIFT + + @property + def dbm_tx_power_present(self): + return (self.present_flags & _DBM_TX_POWER_MASK) >> _DBM_TX_POWER_SHIFT + + @dbm_tx_power_present.setter + def dbm_tx_power_present(self, val): + self.present_flags |= val << _DBM_TX_POWER_SHIFT + + @property + def ant_present(self): + return (self.present_flags & _ANTENNA_MASK) >> _ANTENNA_SHIFT + + @ant_present.setter + def ant_present(self, val): + self.present_flags |= val << _ANTENNA_SHIFT + + @property + def db_ant_sig_present(self): + return (self.present_flags & _DB_ANT_SIG_MASK) >> _DB_ANT_SIG_SHIFT + + @db_ant_sig_present.setter + def db_ant_sig_present(self, val): + self.present_flags |= val << _DB_ANT_SIG_SHIFT + + @property + def db_ant_noise_present(self): + return (self.present_flags & _DB_ANT_NOISE_MASK) >> _DB_ANT_NOISE_SHIFT + + @db_ant_noise_present.setter + def db_ant_noise_present(self, val): + self.present_flags |= val << _DB_ANT_NOISE_SHIFT + + @property + def rx_flags_present(self): + return (self.present_flags & _RX_FLAGS_MASK) >> _RX_FLAGS_SHIFT + + @rx_flags_present.setter + def rx_flags_present(self, val): + self.present_flags |= val << _RX_FLAGS_SHIFT + + @property + def chanplus_present(self): + return (self.present_flags & _CHANNELPLUS_MASK) >> _CHANNELPLUS_SHIFT + + @chanplus_present.setter + def chanplus_present(self, val): + self.present_flags |= val << _CHANNELPLUS_SHIFT + + @property + def ext_present(self): + return (self.present_flags & _EXT_MASK) >> _EXT_SHIFT + + @ext_present.setter + def ext_present(self, val): + self.present_flags |= val << _EXT_SHIFT + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_tsft_present(self): + return self.tsft_present + + @deprecated + def _set_tsft_present(self, val): + self.tsft_present = val + + @deprecated + def _get_flags_present(self): + return self.flags_present + + @deprecated + def _set_flags_present(self, val): + self.flags_present = val + + @deprecated + def _get_rate_present(self): + return self.rate_present + + @deprecated + def _set_rate_present(self, val): + self.rate_present = val + + @deprecated + def _get_channel_present(self): + return self.channel_present + + @deprecated + def _set_channel_present(self, val): + self.channel_present = val + + @deprecated + def _get_fhss_present(self): + return self.fhss_present + + @deprecated + def _set_fhss_present(self, val): + self.fhss_present = val + + @deprecated + def _get_ant_sig_present(self): + return self.ant_sig_present + + @deprecated + def _set_ant_sig_present(self, val): + self.ant_sig_present = val + + @deprecated + def _get_ant_noise_present(self): + return self.ant_noise_present + + @deprecated + def _set_ant_noise_present(self, val): + self.ant_noise_present = val + + @deprecated + def _get_lock_qual_present(self): + return self.lock_qual_present + + @deprecated + def _set_lock_qual_present(self, val): + self.lock_qual_present = val + + @deprecated + def _get_tx_attn_present(self): + return self.tx_attn_present + + @deprecated + def _set_tx_attn_present(self, val): + self.tx_attn_present = val + + @deprecated + def _get_db_tx_attn_present(self): + return self.db_tx_attn_present + + @deprecated + def _set_db_tx_attn_present(self, val): + self.db_tx_attn_present = val + + @deprecated + def _get_dbm_power_present(self): + return self.dbm_tx_power_present + + @deprecated + def _set_dbm_power_present(self, val): + self.dbm_tx_power_present = val + + @deprecated + def _get_ant_present(self): + return self.ant_present + + @deprecated + def _set_ant_present(self, val): + self.ant_present = val + + @deprecated + def _get_db_ant_sig_present(self): + return self.db_ant_sig_present + + @deprecated + def _set_db_ant_sig_present(self, val): + self.db_ant_sig_present = val + + @deprecated + def _get_db_ant_noise_present(self): + return self.db_ant_noise_present + + @deprecated + def _set_db_ant_noise_present(self, val): + self.db_ant_noise_present = val + + @deprecated + def _get_rx_flags_present(self): + return self.rx_flags_present + + @deprecated + def _set_rx_flags_present(self, val): + self.rx_flags_present = val + + @deprecated + def _get_chanplus_present(self): + return self.chanplus_present + + @deprecated + def _set_chanplus_present(self, val): + self.chanplus_present = val + + @deprecated + def _get_ext_present(self): + return self.ext_present + + @deprecated + def _set_ext_present(self, val): + self.ext_present = val + + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = buf[socket.ntohs(self.length):] + + self.fields = [] + buf = buf[self.__hdr_len__:] + + # decode each field into self. (eg. self.tsft) as well as append it self.fields list + field_decoder = [ + ('tsft', self.tsft_present, self.TSFT), + ('flags', self.flags_present, self.Flags), + ('rate', self.rate_present, self.Rate), + ('channel', self.channel_present, self.Channel), + ('fhss', self.fhss_present, self.FHSS), + ('ant_sig', self.ant_sig_present, self.AntennaSignal), + ('ant_noise', self.ant_noise_present, self.AntennaNoise), + ('lock_qual', self.lock_qual_present, self.LockQuality), + ('tx_attn', self.tx_attn_present, self.TxAttenuation), + ('db_tx_attn', self.db_tx_attn_present, self.DbTxAttenuation), + ('dbm_tx_power', self.dbm_tx_power_present, self.DbmTxPower), + ('ant', self.ant_present, self.Antenna), + ('db_ant_sig', self.db_ant_sig_present, self.DbAntennaSignal), + ('db_ant_noise', self.db_ant_noise_present, self.DbAntennaNoise), + ('rx_flags', self.rx_flags_present, self.RxFlags) + ] + for name, present_bit, parser in field_decoder: + if present_bit: + field = parser(buf) + field.data = '' + setattr(self, name, field) + self.fields.append(field) + buf = buf[len(field):] + + if len(self.data) > 0: + if self.flags_present and self.flags.fcs: + self.data = ieee80211.IEEE80211(self.data, fcs=self.flags.fcs) + else: + self.data = ieee80211.IEEE80211(self.data) + + class Antenna(dpkt.Packet): + __hdr__ = ( + ('index', 'B', 0), + ) + + class AntennaNoise(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class AntennaSignal(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class Channel(dpkt.Packet): + __hdr__ = ( + ('freq', 'H', 0), + ('flags', 'H', 0), + ) + + class FHSS(dpkt.Packet): + __hdr__ = ( + ('set', 'B', 0), + ('pattern', 'B', 0), + ) + + class Flags(dpkt.Packet): + __hdr__ = ( + ('val', 'B', 0), + ) + + @property + def fcs(self): return (self.val & _FCS_MASK) >> _FCS_SHIFT + + # TODO statement seems to have no effect + @fcs.setter + def fcs(self, v): (v << _FCS_SHIFT) | (self.val & ~_FCS_MASK) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_fcs_present(self): return self.fcs + + @deprecated + def _set_fcs_present(self, v): self.fcs = v + + # ================================================= + + class LockQuality(dpkt.Packet): + __hdr__ = ( + ('val', 'H', 0), + ) + + class RxFlags(dpkt.Packet): + __hdr__ = ( + ('val', 'H', 0), + ) + + class Rate(dpkt.Packet): + __hdr__ = ( + ('val', 'B', 0), + ) + + class TSFT(dpkt.Packet): + __hdr__ = ( + ('usecs', 'Q', 0), + ) + + class TxAttenuation(dpkt.Packet): + __hdr__ = ( + ('val', 'H', 0), + ) + + class DbTxAttenuation(dpkt.Packet): + __hdr__ = ( + ('db', 'H', 0), + ) + + class DbAntennaNoise(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class DbAntennaSignal(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class DbmTxPower(dpkt.Packet): + __hdr__ = ( + ('dbm', 'B', 0), + ) + + +def test_Radiotap(): + s = '\x00\x00\x00\x18\x6e\x48\x00\x00\x00\x02\x6c\x09\xa0\x00\xa8\x81\x02\x00\x00\x00\x00\x00\x00\x00' + rad = Radiotap(s) + assert(rad.version == 0) + assert(rad.present_flags == 0x6e480000) + assert(rad.tsft_present == 0) + assert(rad.flags_present == 1) + assert(rad.rate_present == 1) + assert(rad.channel_present == 1) + assert(rad.fhss_present == 0) + assert(rad.ant_sig_present == 1) + assert(rad.ant_noise_present == 1) + assert(rad.lock_qual_present == 0) + assert(rad.db_tx_attn_present == 0) + assert(rad.dbm_tx_power_present == 0) + assert(rad.ant_present == 1) + assert(rad.db_ant_sig_present == 0) + assert(rad.db_ant_noise_present == 0) + assert(rad.rx_flags_present == 1) + assert(rad.channel.freq == 0x6c09) + assert(rad.channel.flags == 0xa000) + assert(len(rad.fields) == 7) + + +def test_fcs(): + s = '\x00\x00\x1a\x00\x2f\x48\x00\x00\x34\x8f\x71\x09\x00\x00\x00\x00\x10\x0c\x85\x09\xc0\x00\xcc\x01\x00\x00' + rt = Radiotap(s) + assert(rt.flags_present == 1) + assert(rt.flags.fcs == 1) + + +if __name__ == '__main__': + test_Radiotap() + test_fcs() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/radius.py b/external_libs/python/dpkt-1.8.6.2/dpkt/radius.py new file mode 100644 index 00000000..740d5cd7 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/radius.py @@ -0,0 +1,91 @@ +# $Id: radius.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Remote Authentication Dial-In User Service.""" + +import dpkt + +# http://www.untruth.org/~josh/security/radius/radius-auth.html +# RFC 2865 + + +class RADIUS(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ('id', 'B', 0), + ('len', 'H', 4), + ('auth', '16s', '') + ) + attrs = '' + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.attrs = parse_attrs(self.data) + self.data = '' + + +def parse_attrs(buf): + """Parse attributes buffer into a list of (type, data) tuples.""" + attrs = [] + while buf: + t = ord(buf[0]) + l = ord(buf[1]) + if l < 2: + break + d, buf = buf[2:l], buf[l:] + attrs.append((t, d)) + return attrs + +# Codes +RADIUS_ACCESS_REQUEST = 1 +RADIUS_ACCESS_ACCEPT = 2 +RADIUS_ACCESS_REJECT = 3 +RADIUS_ACCT_REQUEST = 4 +RADIUS_ACCT_RESPONSE = 5 +RADIUS_ACCT_STATUS = 6 +RADIUS_ACCESS_CHALLENGE = 11 + +# Attributes +RADIUS_USER_NAME = 1 +RADIUS_USER_PASSWORD = 2 +RADIUS_CHAP_PASSWORD = 3 +RADIUS_NAS_IP_ADDR = 4 +RADIUS_NAS_PORT = 5 +RADIUS_SERVICE_TYPE = 6 +RADIUS_FRAMED_PROTOCOL = 7 +RADIUS_FRAMED_IP_ADDR = 8 +RADIUS_FRAMED_IP_NETMASK = 9 +RADIUS_FRAMED_ROUTING = 10 +RADIUS_FILTER_ID = 11 +RADIUS_FRAMED_MTU = 12 +RADIUS_FRAMED_COMPRESSION = 13 +RADIUS_LOGIN_IP_HOST = 14 +RADIUS_LOGIN_SERVICE = 15 +RADIUS_LOGIN_TCP_PORT = 16 +# unassigned +RADIUS_REPLY_MESSAGE = 18 +RADIUS_CALLBACK_NUMBER = 19 +RADIUS_CALLBACK_ID = 20 +# unassigned +RADIUS_FRAMED_ROUTE = 22 +RADIUS_FRAMED_IPX_NETWORK = 23 +RADIUS_STATE = 24 +RADIUS_CLASS = 25 +RADIUS_VENDOR_SPECIFIC = 26 +RADIUS_SESSION_TIMEOUT = 27 +RADIUS_IDLE_TIMEOUT = 28 +RADIUS_TERMINATION_ACTION = 29 +RADIUS_CALLED_STATION_ID = 30 +RADIUS_CALLING_STATION_ID = 31 +RADIUS_NAS_ID = 32 +RADIUS_PROXY_STATE = 33 +RADIUS_LOGIN_LAT_SERVICE = 34 +RADIUS_LOGIN_LAT_NODE = 35 +RADIUS_LOGIN_LAT_GROUP = 36 +RADIUS_FRAMED_ATALK_LINK = 37 +RADIUS_FRAMED_ATALK_NETWORK = 38 +RADIUS_FRAMED_ATALK_ZONE = 39 +# 40-59 reserved for accounting +RADIUS_CHAP_CHALLENGE = 60 +RADIUS_NAS_PORT_TYPE = 61 +RADIUS_PORT_LIMIT = 62 +RADIUS_LOGIN_LAT_PORT = 63 diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/rfb.py b/external_libs/python/dpkt-1.8.6.2/dpkt/rfb.py new file mode 100644 index 00000000..6a69892f --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/rfb.py @@ -0,0 +1,90 @@ +# $Id: rfb.py 47 2008-05-27 02:10:00Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Remote Framebuffer Protocol.""" + +import dpkt + +# Remote Framebuffer Protocol +# http://www.realvnc.com/docs/rfbproto.pdf + +# Client to Server Messages +CLIENT_SET_PIXEL_FORMAT = 0 +CLIENT_SET_ENCODINGS = 2 +CLIENT_FRAMEBUFFER_UPDATE_REQUEST = 3 +CLIENT_KEY_EVENT = 4 +CLIENT_POINTER_EVENT = 5 +CLIENT_CUT_TEXT = 6 + +# Server to Client Messages +SERVER_FRAMEBUFFER_UPDATE = 0 +SERVER_SET_COLOUR_MAP_ENTRIES = 1 +SERVER_BELL = 2 +SERVER_CUT_TEXT = 3 + + +class RFB(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ) + + +class SetPixelFormat(dpkt.Packet): + __hdr__ = ( + ('pad', '3s', ''), + ('pixel_fmt', '16s', '') + ) + + +class SetEncodings(dpkt.Packet): + __hdr__ = ( + ('pad', '1s', ''), + ('num_encodings', 'H', 0) + ) + + +class FramebufferUpdateRequest(dpkt.Packet): + __hdr__ = ( + ('incremental', 'B', 0), + ('x_position', 'H', 0), + ('y_position', 'H', 0), + ('width', 'H', 0), + ('height', 'H', 0) + ) + + +class KeyEvent(dpkt.Packet): + __hdr__ = ( + ('down_flag', 'B', 0), + ('pad', '2s', ''), + ('key', 'I', 0) + ) + + +class PointerEvent(dpkt.Packet): + __hdr__ = ( + ('button_mask', 'B', 0), + ('x_position', 'H', 0), + ('y_position', 'H', 0) + ) + + +class FramebufferUpdate(dpkt.Packet): + __hdr__ = ( + ('pad', '1s', ''), + ('num_rects', 'H', 0) + ) + + +class SetColourMapEntries(dpkt.Packet): + __hdr__ = ( + ('pad', '1s', ''), + ('first_colour', 'H', 0), + ('num_colours', 'H', 0) + ) + + +class CutText(dpkt.Packet): + __hdr__ = ( + ('pad', '3s', ''), + ('length', 'I', 0) + ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/rip.py b/external_libs/python/dpkt-1.8.6.2/dpkt/rip.py new file mode 100644 index 00000000..83f29f62 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/rip.py @@ -0,0 +1,89 @@ +# $Id: rip.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Routing Information Protocol.""" + +import dpkt + +# RIP v2 - RFC 2453 +# http://tools.ietf.org/html/rfc2453 + +REQUEST = 1 +RESPONSE = 2 + + +class RIP(dpkt.Packet): + __hdr__ = ( + ('cmd', 'B', REQUEST), + ('v', 'B', 2), + ('rsvd', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + self.auth = None + while self.data: + rte = RTE(self.data[:20]) + if rte.family == 0xFFFF: + self.auth = Auth(self.data[:20]) + else: + l.append(rte) + self.data = self.data[20:] + self.data = self.rtes = l + + def __len__(self): + len = self.__hdr_len__ + if self.auth: + len += len(self.auth) + len += sum(map(len, self.rtes)) + return len + + def __str__(self): + auth = '' + if self.auth: + auth = str(self.auth) + return self.pack_hdr() + auth + ''.join(map(str, self.rtes)) + + +class RTE(dpkt.Packet): + __hdr__ = ( + ('family', 'H', 2), + ('route_tag', 'H', 0), + ('addr', 'I', 0), + ('subnet', 'I', 0), + ('next_hop', 'I', 0), + ('metric', 'I', 1) + ) + + +class Auth(dpkt.Packet): + __hdr__ = ( + ('rsvd', 'H', 0xFFFF), + ('type', 'H', 2), + ('auth', '16s', 0) + ) + + +__s = '\x02\x02\x00\x00\x00\x02\x00\x00\x01\x02\x03\x00\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x00\xc0\xa8\x01\x08\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x01' + + +def test_rtp_pack(): + r = RIP(__s) + assert (__s == str(r)) + + +def test_rtp_unpack(): + r = RIP(__s) + assert (r.auth is None) + assert (len(r.rtes) == 2) + + rte = r.rtes[1] + assert (rte.family == 2) + assert (rte.route_tag == 0) + assert (rte.metric == 1) + + +if __name__ == '__main__': + test_rtp_pack() + test_rtp_unpack() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/rpc.py b/external_libs/python/dpkt-1.8.6.2/dpkt/rpc.py new file mode 100644 index 00000000..f12bc83b --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/rpc.py @@ -0,0 +1,161 @@ +# $Id: rpc.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Remote Procedure Call.""" + +import struct +import dpkt + +# RPC.dir +CALL = 0 +REPLY = 1 + +# RPC.Auth.flavor +AUTH_NONE = AUTH_NULL = 0 +AUTH_UNIX = 1 +AUTH_SHORT = 2 +AUTH_DES = 3 + +# RPC.Reply.stat +MSG_ACCEPTED = 0 +MSG_DENIED = 1 + +# RPC.Reply.Accept.stat +SUCCESS = 0 +PROG_UNAVAIL = 1 +PROG_MISMATCH = 2 +PROC_UNAVAIL = 3 +GARBAGE_ARGS = 4 +SYSTEM_ERR = 5 + +# RPC.Reply.Reject.stat +RPC_MISMATCH = 0 +AUTH_ERROR = 1 + + +class RPC(dpkt.Packet): + __hdr__ = ( + ('xid', 'I', 0), + ('dir', 'I', CALL) + ) + + class Auth(dpkt.Packet): + __hdr__ = (('flavor', 'I', AUTH_NONE), ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + n = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:4 + n] + + def __len__(self): + return 8 + len(self.data) + + def __str__(self): + return self.pack_hdr() + struct.pack('>I', len(self.data)) + \ + str(self.data) + + class Call(dpkt.Packet): + __hdr__ = ( + ('rpcvers', 'I', 2), + ('prog', 'I', 0), + ('vers', 'I', 0), + ('proc', 'I', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.cred = RPC.Auth(self.data) + self.verf = RPC.Auth(self.data[len(self.cred):]) + self.data = self.data[len(self.cred) + len(self.verf):] + + def __len__(self): + return len(str(self)) # XXX + + def __str__(self): + return dpkt.Packet.__str__(self) + \ + str(getattr(self, 'cred', RPC.Auth())) + \ + str(getattr(self, 'verf', RPC.Auth())) + \ + str(self.data) + + class Reply(dpkt.Packet): + __hdr__ = (('stat', 'I', MSG_ACCEPTED), ) + + class Accept(dpkt.Packet): + __hdr__ = (('stat', 'I', SUCCESS), ) + + def unpack(self, buf): + self.verf = RPC.Auth(buf) + buf = buf[len(self.verf):] + self.stat = struct.unpack('>I', buf[:4])[0] + if self.stat == SUCCESS: + self.data = buf[4:] + elif self.stat == PROG_MISMATCH: + self.low, self.high = struct.unpack('>II', buf[4:12]) + self.data = buf[12:] + + def __len__(self): + if self.stat == PROG_MISMATCH: n = 8 + else: n = 0 + return len(self.verf) + 4 + n + len(self.data) + + def __str__(self): + if self.stat == PROG_MISMATCH: + return str(self.verf) + struct.pack('>III', self.stat, + self.low, self.high) + self.data + return str(self.verf) + dpkt.Packet.__str__(self) + + class Reject(dpkt.Packet): + __hdr__ = (('stat', 'I', AUTH_ERROR), ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.stat == RPC_MISMATCH: + self.low, self.high = struct.unpack('>II', self.data[:8]) + self.data = self.data[8:] + elif self.stat == AUTH_ERROR: + self.why = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:] + + def __len__(self): + if self.stat == RPC_MISMATCH: n = 8 + elif self.stat == AUTH_ERROR: n = 4 + else: n = 0 + return 4 + n + len(self.data) + + def __str__(self): + if self.stat == RPC_MISMATCH: + return struct.pack('>III', self.stat, self.low, self.high) + self.data + elif self.stat == AUTH_ERROR: + return struct.pack('>II', self.stat, self.why) + self.data + return dpkt.Packet.__str__(self) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.stat == MSG_ACCEPTED: + self.data = self.accept = self.Accept(self.data) + elif self.status == MSG_DENIED: + self.data = self.reject = self.Reject(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.dir == CALL: + self.data = self.call = self.Call(self.data) + elif self.dir == REPLY: + self.data = self.reply = self.Reply(self.data) + + +def unpack_xdrlist(cls, buf): + l = [] + while buf: + if buf.startswith('\x00\x00\x00\x01'): + p = cls(buf[4:]) + l.append(p) + buf = p.data + elif buf.startswith('\x00\x00\x00\x00'): + break + else: + raise dpkt.UnpackError, 'invalid XDR list' + return l + + +def pack_xdrlist(*args): + return '\x00\x00\x00\x01'.join(map(str, args)) + '\x00\x00\x00\x00' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/rtp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/rtp.py new file mode 100644 index 00000000..9426d8c4 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/rtp.py @@ -0,0 +1,127 @@ +# $Id: rtp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Real-Time Transport Protocol""" + +from dpkt import Packet +from decorators import deprecated + +# version 1100 0000 0000 0000 ! 0xC000 14 +# p 0010 0000 0000 0000 ! 0x2000 13 +# x 0001 0000 0000 0000 ! 0x1000 12 +# cc 0000 1111 0000 0000 ! 0x0F00 8 +# m 0000 0000 1000 0000 ! 0x0080 7 +# pt 0000 0000 0111 1111 ! 0x007F 0 +# + +_VERSION_MASK = 0xC000 +_P_MASK = 0x2000 +_X_MASK = 0x1000 +_CC_MASK = 0x0F00 +_M_MASK = 0x0080 +_PT_MASK = 0x007F +_VERSION_SHIFT = 14 +_P_SHIFT = 13 +_X_SHIFT = 12 +_CC_SHIFT = 8 +_M_SHIFT = 7 +_PT_SHIFT = 0 + +VERSION = 2 + + +class RTP(Packet): + __hdr__ = ( + ('_type', 'H', 0x8000), + ('seq', 'H', 0), + ('ts', 'I', 0), + ('ssrc', 'I', 0), + ) + csrc = '' + + @property + def version(self): return (self._type & _VERSION_MASK) >> _VERSION_SHIFT + + @version.setter + def version(self, ver): + self._type = (ver << _VERSION_SHIFT) | (self._type & ~_VERSION_MASK) + + @property + def p(self): return (self._type & _P_MASK) >> _P_SHIFT + + @p.setter + def p(self, p): self._type = (p << _P_SHIFT) | (self._type & ~_P_MASK) + + @property + def x(self): return (self._type & _X_MASK) >> _X_SHIFT + + @x.setter + def x(self, x): self._type = (x << _X_SHIFT) | (self._type & ~_X_MASK) + + @property + def cc(self): return (self._type & _CC_MASK) >> _CC_SHIFT + + @cc.setter + def cc(self, cc): self._type = (cc << _CC_SHIFT) | (self._type & ~_CC_MASK) + + @property + def m(self): return (self._type & _M_MASK) >> _M_SHIFT + + @m.setter + def m(self, m): self._type = (m << _M_SHIFT) | (self._type & ~_M_MASK) + + @property + def pt(self): return (self._type & _PT_MASK) >> _PT_SHIFT + + @pt.setter + def pt(self, m): self._type = (m << _PT_SHIFT) | (self._type & ~_PT_MASK) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_version(self): return self.version + + @deprecated + def _set_version(self, ver): self.version = ver + + @deprecated + def _get_p(self): return self.p + + @deprecated + def _set_p(self, p): self.p = p + + @deprecated + def _get_x(self): return self.x + + @deprecated + def _set_x(self, x): self.x = x + + @deprecated + def _get_cc(self): return self.cc + + @deprecated + def _set_cc(self, cc): self.cc = cc + + @deprecated + def _get_m(self): return self.m + + @deprecated + def _set_m(self, m): self.m = m + + @deprecated + def _get_pt(self): return self.pt + + @deprecated + def _set_pt(self, pt): self.pt = pt + # ================================================= + + def __len__(self): + return self.__hdr_len__ + len(self.csrc) + len(self.data) + + def __str__(self): + return self.pack_hdr() + self.csrc + str(self.data) + + def unpack(self, buf): + super(RTP, self).unpack(buf) + self.csrc = buf[self.__hdr_len__:self.__hdr_len__ + self.cc * 4] + self.data = buf[self.__hdr_len__ + self.cc * 4:] + diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/rx.py b/external_libs/python/dpkt-1.8.6.2/dpkt/rx.py new file mode 100644 index 00000000..8535a350 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/rx.py @@ -0,0 +1,45 @@ +# $Id: rx.py 23 2006-11-08 15:45:33Z jonojono $ +# -*- coding: utf-8 -*- +"""Rx Protocol.""" + +import dpkt + +# Types +DATA = 0x01 +ACK = 0x02 +BUSY = 0x03 +ABORT = 0x04 +ACKALL = 0x05 +CHALLENGE = 0x06 +RESPONSE = 0x07 +DEBUG = 0x08 + +# Flags +CLIENT_INITIATED = 0x01 +REQUEST_ACK = 0x02 +LAST_PACKET = 0x04 +MORE_PACKETS = 0x08 +SLOW_START_OK = 0x20 +JUMBO_PACKET = 0x20 + +# Security +SEC_NONE = 0x00 +SEC_BCRYPT = 0x01 +SEC_RXKAD = 0x02 +SEC_RXKAD_ENC = 0x03 + + +class Rx(dpkt.Packet): + __hdr__ = ( + ('epoch', 'I', 0), + ('cid', 'I', 0), + ('call', 'I', 1), + ('seq', 'I', 0), + ('serial', 'I', 1), + ('type', 'B', 0), + ('flags', 'B', CLIENT_INITIATED), + ('status', 'B', 0), + ('security', 'B', 0), + ('sum', 'H', 0), + ('service', 'H', 0) + ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/sccp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/sccp.py new file mode 100644 index 00000000..df862df3 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/sccp.py @@ -0,0 +1,214 @@ +# $Id: sccp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Cisco Skinny Client Control Protocol.""" + +import dpkt + +KEYPAD_BUTTON = 0x00000003 +OFF_HOOK = 0x00000006 +ON_HOOK = 0x00000007 +OPEN_RECEIVE_CHANNEL_ACK = 0x00000022 +START_TONE = 0x00000082 +STOP_TONE = 0x00000083 +SET_LAMP = 0x00000086 +SET_SPEAKER_MODE = 0x00000088 +START_MEDIA_TRANSMIT = 0x0000008A +STOP_MEDIA_TRANSMIT = 0x0000008B +CALL_INFO = 0x0000008F +DEFINE_TIME_DATE = 0x00000094 +DISPLAY_TEXT = 0x00000099 +OPEN_RECEIVE_CHANNEL = 0x00000105 +CLOSE_RECEIVE_CHANNEL = 0x00000106 +SELECT_SOFTKEYS = 0x00000110 +CALL_STATE = 0x00000111 +DISPLAY_PROMPT_STATUS = 0x00000112 +CLEAR_PROMPT_STATUS = 0x00000113 +ACTIVATE_CALL_PLANE = 0x00000116 + + +class ActivateCallPlane(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('line_instance', 'I', 0), + ) + + +class CallInfo(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('calling_party_name', '40s', ''), + ('calling_party', '24s', ''), + ('called_party_name', '40s', ''), + ('called_party', '24s', ''), + ('line_instance', 'I', 0), + ('call_id', 'I', 0), + ('call_type', 'I', 0), + ('orig_called_party_name', '40s', ''), + ('orig_called_party', '24s', '') + ) + + +class CallState(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('call_state', 'I', 12), # 12: Proceed, 15: Connected + ('line_instance', 'I', 1), + ('call_id', 'I', 0) + ) + + +class ClearPromptStatus(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('line_instance', 'I', 1), + ('call_id', 'I', 0) + ) + + +class CloseReceiveChannel(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ) + + +class DisplayPromptStatus(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('msg_timeout', 'I', 0), + ('display_msg', '32s', ''), + ('line_instance', 'I', 1), + ('call_id', 'I', 0) + ) + + +class DisplayText(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('display_msg', '36s', ''), + ) + + +class KeypadButton(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('button', 'I', 0), + ) + + +class OpenReceiveChannel(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ('ms_packet', 'I', 0), + ('payload_capability', 'I', 4), # 4: G.711 u-law 64k + ('echo_cancel_type', 'I', 4), + ('g723_bitrate', 'I', 0), + ) + + +class OpenReceiveChannelAck(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('channel_status', 'I', 0), + ('ip', '4s', ''), + ('port', 'I', 0), + ('passthruparty_id', 'I', 0), + ) + + +class SelectStartKeys(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('line_id', 'I', 1), + ('call_id', 'I', 0), + ('softkey_set', 'I', 8), + ('softkey_map', 'I', 0xffffffffL) + ) + + +class SetLamp(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('stimulus', 'I', 9), # 9: Line + ('stimulus_instance', 'I', 1), + ('lamp_mode', 'I', 1), + ) + + +class SetSpeakerMode(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('speaker', 'I', 2), # 2: SpeakerOff + ) + + +class StartMediaTransmission(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ('remote_ip', '4s', ''), + ('remote_port', 'I', 0), + ('ms_packet', 'I', 0), + ('payload_capability', 'I', 4), # 4: G.711 u-law 64k + ('precedence', 'I', 0), + ('silence_suppression', 'I', 0), + ('max_frames_per_pkt', 'I', 1), + ('g723_bitrate', 'I', 0), + ) + + +class StartTone(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('tone', 'I', 0x24), # 0x24: AlertingTone + ) + + +class StopMediaTransmission(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ) + + +class SCCP(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('len', 'I', 0), + ('rsvd', 'I', 0), + ('msgid', 'I', 0), + ('msg', '0s', ''), + ) + _msgsw = { + KEYPAD_BUTTON: KeypadButton, + OPEN_RECEIVE_CHANNEL_ACK: OpenReceiveChannelAck, + START_TONE: StartTone, + SET_LAMP: SetLamp, + START_MEDIA_TRANSMIT: StartMediaTransmission, + STOP_MEDIA_TRANSMIT: StopMediaTransmission, + CALL_INFO: CallInfo, + DISPLAY_TEXT: DisplayText, + OPEN_RECEIVE_CHANNEL: OpenReceiveChannel, + CLOSE_RECEIVE_CHANNEL: CloseReceiveChannel, + CALL_STATE: CallState, + DISPLAY_PROMPT_STATUS: DisplayPromptStatus, + CLEAR_PROMPT_STATUS: ClearPromptStatus, + ACTIVATE_CALL_PLANE: ActivateCallPlane, + } + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + n = self.len - 4 + if n > len(self.data): + raise dpkt.NeedData('not enough data') + self.msg, self.data = self.data[:n], self.data[n:] + try: + p = self._msgsw[self.msgid](self.msg) + setattr(self, p.__class__.__name__.lower(), p) + except (KeyError, dpkt.UnpackError): + pass diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/sctp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/sctp.py new file mode 100644 index 00000000..4ef251c8 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/sctp.py @@ -0,0 +1,95 @@ +# $Id: sctp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Stream Control Transmission Protocol.""" + +import dpkt +import crc32c + +# Stream Control Transmission Protocol +# http://tools.ietf.org/html/rfc2960 + +# Chunk Types +DATA = 0 +INIT = 1 +INIT_ACK = 2 +SACK = 3 +HEARTBEAT = 4 +HEARTBEAT_ACK = 5 +ABORT = 6 +SHUTDOWN = 7 +SHUTDOWN_ACK = 8 +ERROR = 9 +COOKIE_ECHO = 10 +COOKIE_ACK = 11 +ECNE = 12 +CWR = 13 +SHUTDOWN_COMPLETE = 14 + + +class SCTP(dpkt.Packet): + __hdr__ = ( + ('sport', 'H', 0), + ('dport', 'H', 0), + ('vtag', 'I', 0), + ('sum', 'I', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + while self.data: + chunk = Chunk(self.data) + l.append(chunk) + self.data = self.data[len(chunk):] + self.data = self.chunks = l + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + l = [str(x) for x in self.data] + if self.sum == 0: + s = crc32c.add(0xffffffffL, self.pack_hdr()) + for x in l: + s = crc32c.add(s, x) + self.sum = crc32c.done(s) + return self.pack_hdr() + ''.join(l) + + +class Chunk(dpkt.Packet): + __hdr__ = ( + ('type', 'B', INIT), + ('flags', 'B', 0), + ('len', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len - self.__hdr_len__] + + +__s = '\x80\x44\x00\x50\x00\x00\x00\x00\x30\xba\xef\x54\x01\x00\x00\x3c\x3b\xb9\x9c\x46\x00\x01\xa0\x00\x00\x0a\xff\xff\x2b\x2d\x7e\xb2\x00\x05\x00\x08\x9b\xe6\x18\x9b\x00\x05\x00\x08\x9b\xe6\x18\x9c\x00\x0c\x00\x06\x00\x05\x00\x00\x80\x00\x00\x04\xc0\x00\x00\x04\xc0\x06\x00\x08\x00\x00\x00\x00' + + +def test_sctp_pack(): + sctp = SCTP(__s) + assert (__s == str(sctp)) + sctp.sum = 0 + assert (__s == str(sctp)) + + +def test_sctp_unpack(): + sctp = SCTP(__s) + assert (sctp.sport == 32836) + assert (sctp.dport == 80) + assert (len(sctp.chunks) == 1) + assert (len(sctp) == 72) + chunk = sctp.chunks[0] + assert (chunk.type == INIT) + assert (chunk.len == 60) + + +if __name__ == '__main__': + test_sctp_pack() + test_sctp_unpack() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/sip.py b/external_libs/python/dpkt-1.8.6.2/dpkt/sip.py new file mode 100644 index 00000000..fef476da --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/sip.py @@ -0,0 +1,33 @@ +# $Id: sip.py 48 2008-05-27 17:31:15Z yardley $ +# -*- coding: utf-8 -*- +"""Session Initiation Protocol.""" + +import http + + +class Request(http.Request): + """SIP request.""" + __hdr_defaults__ = { + 'method': 'INVITE', + 'uri': 'sip:user@example.com', + 'version': '2.0', + 'headers': {'To': '', 'From': '', 'Call-ID': '', 'CSeq': '', 'Contact': ''} + } + __methods = dict.fromkeys(( + 'ACK', 'BYE', 'CANCEL', 'INFO', 'INVITE', 'MESSAGE', 'NOTIFY', + 'OPTIONS', 'PRACK', 'PUBLISH', 'REFER', 'REGISTER', 'SUBSCRIBE', + 'UPDATE' + )) + __proto = 'SIP' + + +class Response(http.Response): + """SIP response.""" + __hdr_defaults__ = { + 'version': '2.0', + 'status': '200', + 'reason': 'OK', + 'headers': {'To': '', 'From': '', 'Call-ID': '', 'CSeq': '', 'Contact': ''} + } + __proto = 'SIP' + diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/sll.py b/external_libs/python/dpkt-1.8.6.2/dpkt/sll.py new file mode 100644 index 00000000..3d1a1204 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/sll.py @@ -0,0 +1,26 @@ +# $Id: sll.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Linux libpcap "cooked" capture encapsulation.""" + +import arp +import dpkt +import ethernet + + +class SLL(dpkt.Packet): + __hdr__ = ( + ('type', 'H', 0), # 0: to us, 1: bcast, 2: mcast, 3: other, 4: from us + ('hrd', 'H', arp.ARP_HRD_ETH), + ('hlen', 'H', 6), # hardware address length + ('hdr', '8s', ''), # first 8 bytes of link-layer header + ('ethtype', 'H', ethernet.ETH_TYPE_IP), + ) + _typesw = ethernet.Ethernet._typesw + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._typesw[self.ethtype](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + pass diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/smb.py b/external_libs/python/dpkt-1.8.6.2/dpkt/smb.py new file mode 100644 index 00000000..8517e64b --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/smb.py @@ -0,0 +1,20 @@ +# $Id: smb.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Server Message Block.""" + +import dpkt + + +class SMB(dpkt.Packet): + __hdr__ = [ + ('proto', '4s', ''), + ('cmd', 'B', 0), + ('err', 'I', 0), + ('flags1', 'B', 0), + ('flags2', 'B', 0), + ('pad', '6s', ''), + ('tid', 'H', 0), + ('pid', 'H', 0), + ('uid', 'H', 0), + ('mid', 'H', 0) + ] diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/snoop.py b/external_libs/python/dpkt-1.8.6.2/dpkt/snoop.py new file mode 100644 index 00000000..8090e855 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/snoop.py @@ -0,0 +1,122 @@ +# $Id$ +# -*- coding: utf-8 -*- +"""Snoop file format.""" + +import sys, time +import dpkt + +# RFC 1761 + +SNOOP_MAGIC = 0x736E6F6F70000000L + +SNOOP_VERSION = 2 + +SDL_8023 = 0 +SDL_8024 = 1 +SDL_8025 = 2 +SDL_8026 = 3 +SDL_ETHER = 4 +SDL_HDLC = 5 +SDL_CHSYNC = 6 +SDL_IBMCC = 7 +SDL_FDDI = 8 +SDL_OTHER = 9 + +dltoff = {SDL_ETHER: 14} + + +class PktHdr(dpkt.Packet): + """snoop packet header.""" + __byte_order__ = '!' + __hdr__ = ( + ('orig_len', 'I', 0), + ('incl_len', 'I', 0), + ('rec_len', 'I', 0), + ('cum_drops', 'I', 0), + ('ts_sec', 'I', 0), + ('ts_usec', 'I', 0), + ) + + +class FileHdr(dpkt.Packet): + """snoop file header.""" + __byte_order__ = '!' + __hdr__ = ( + ('magic', 'Q', SNOOP_MAGIC), + ('v', 'I', SNOOP_VERSION), + ('linktype', 'I', SDL_ETHER), + ) + + +class Writer(object): + """Simple snoop dumpfile writer.""" + + def __init__(self, fileobj, linktype=SDL_ETHER): + self.__f = fileobj + fh = FileHdr(linktype=linktype) + self.__f.write(str(fh)) + + def writepkt(self, pkt, ts=None): + if ts is None: + ts = time.time() + s = str(pkt) + n = len(s) + pad_len = 4 - n % 4 if n % 4 else 0 + ph = PktHdr(orig_len=n, incl_len=n, + rec_len=PktHdr.__hdr_len__ + n + pad_len, + ts_sec=int(ts), + ts_usec=int((int(ts) - float(ts)) * 1000000.0)) + self.__f.write(str(ph)) + self.__f.write(s + '\0' * pad_len) + + def close(self): + self.__f.close() + + +class Reader(object): + """Simple pypcap-compatible snoop file reader.""" + + def __init__(self, fileobj): + self.name = fileobj.name + self.fd = fileobj.fileno() + self.__f = fileobj + buf = self.__f.read(FileHdr.__hdr_len__) + self.__fh = FileHdr(buf) + self.__ph = PktHdr + if self.__fh.magic != SNOOP_MAGIC: + raise ValueError('invalid snoop header') + self.dloff = dltoff[self.__fh.linktype] + self.filter = '' + + def fileno(self): + return self.fd + + def datalink(self): + return self.__fh.linktype + + def setfilter(self, value, optimize=1): + return NotImplementedError + + def readpkts(self): + return list(self) + + def dispatch(self, cnt, callback, *args): + if cnt > 0: + for i in range(cnt): + ts, pkt = self.next() + callback(ts, pkt, *args) + else: + for ts, pkt in self: + callback(ts, pkt, *args) + + def loop(self, callback, *args): + self.dispatch(0, callback, *args) + + def __iter__(self): + self.__f.seek(FileHdr.__hdr_len__) + while 1: + buf = self.__f.read(PktHdr.__hdr_len__) + if not buf: break + hdr = self.__ph(buf) + buf = self.__f.read(hdr.rec_len - PktHdr.__hdr_len__) + yield (hdr.ts_sec + (hdr.ts_usec / 1000000.0), buf[:hdr.incl_len]) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ssl.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ssl.py new file mode 100644 index 00000000..ea761552 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/ssl.py @@ -0,0 +1,579 @@ +# $Id: ssl.py 90 2014-04-02 22:06:23Z andrewflnr@gmail.com $ +# Portion Copyright 2012 Google Inc. All rights reserved. +# -*- coding: utf-8 -*- +"""Secure Sockets Layer / Transport Layer Security.""" + +import dpkt +import ssl_ciphersuites +import struct +import binascii + +# +# Note from April 2011: cde...@gmail.com added code that parses SSL3/TLS messages more in depth. +# +# Jul 2012: afleenor@google.com modified and extended SSL support further. +# + + +class SSL2(dpkt.Packet): + __hdr__ = ( + ('len', 'H', 0), + ('msg', 's', ''), + ('pad', 's', ''), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.len & 0x8000: + n = self.len = self.len & 0x7FFF + self.msg, self.data = self.data[:n], self.data[n:] + else: + n = self.len = self.len & 0x3FFF + padlen = ord(self.data[0]) + self.msg = self.data[1:1 + n] + self.pad = self.data[1 + n:1 + n + padlen] + self.data = self.data[1 + n + padlen:] + + +# SSLv3/TLS versions +SSL3_V = 0x0300 +TLS1_V = 0x0301 +TLS11_V = 0x0302 +TLS12_V = 0x0303 + +ssl3_versions_str = { + SSL3_V: 'SSL3', + TLS1_V: 'TLS 1.0', + TLS11_V: 'TLS 1.1', + TLS12_V: 'TLS 1.2' +} + +SSL3_VERSION_BYTES = set(('\x03\x00', '\x03\x01', '\x03\x02', '\x03\x03')) + + +# Alert levels +SSL3_AD_WARNING = 1 +SSL3_AD_FATAL = 2 +alert_level_str = { + SSL3_AD_WARNING: 'SSL3_AD_WARNING', + SSL3_AD_FATAL: 'SSL3_AD_FATAL' +} + +# SSL3 alert descriptions +SSL3_AD_CLOSE_NOTIFY = 0 +SSL3_AD_UNEXPECTED_MESSAGE = 10 # fatal +SSL3_AD_BAD_RECORD_MAC = 20 # fatal +SSL3_AD_DECOMPRESSION_FAILURE = 30 # fatal +SSL3_AD_HANDSHAKE_FAILURE = 40 # fatal +SSL3_AD_NO_CERTIFICATE = 41 +SSL3_AD_BAD_CERTIFICATE = 42 +SSL3_AD_UNSUPPORTED_CERTIFICATE = 43 +SSL3_AD_CERTIFICATE_REVOKED = 44 +SSL3_AD_CERTIFICATE_EXPIRED = 45 +SSL3_AD_CERTIFICATE_UNKNOWN = 46 +SSL3_AD_ILLEGAL_PARAMETER = 47 # fatal + +# TLS1 alert descriptions +TLS1_AD_DECRYPTION_FAILED = 21 +TLS1_AD_RECORD_OVERFLOW = 22 +TLS1_AD_UNKNOWN_CA = 48 # fatal +TLS1_AD_ACCESS_DENIED = 49 # fatal +TLS1_AD_DECODE_ERROR = 50 # fatal +TLS1_AD_DECRYPT_ERROR = 51 +TLS1_AD_EXPORT_RESTRICTION = 60 # fatal +TLS1_AD_PROTOCOL_VERSION = 70 # fatal +TLS1_AD_INSUFFICIENT_SECURITY = 71 # fatal +TLS1_AD_INTERNAL_ERROR = 80 # fatal +TLS1_AD_USER_CANCELLED = 90 +TLS1_AD_NO_RENEGOTIATION = 100 +# /* codes 110-114 are from RFC3546 */ +TLS1_AD_UNSUPPORTED_EXTENSION = 110 +TLS1_AD_CERTIFICATE_UNOBTAINABLE = 111 +TLS1_AD_UNRECOGNIZED_NAME = 112 +TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE = 113 +TLS1_AD_BAD_CERTIFICATE_HASH_VALUE = 114 +TLS1_AD_UNKNOWN_PSK_IDENTITY = 115 # fatal + + +# Mapping alert types to strings +alert_description_str = { + SSL3_AD_CLOSE_NOTIFY: 'SSL3_AD_CLOSE_NOTIFY', + SSL3_AD_UNEXPECTED_MESSAGE: 'SSL3_AD_UNEXPECTED_MESSAGE', + SSL3_AD_BAD_RECORD_MAC: 'SSL3_AD_BAD_RECORD_MAC', + SSL3_AD_DECOMPRESSION_FAILURE: 'SSL3_AD_DECOMPRESSION_FAILURE', + SSL3_AD_HANDSHAKE_FAILURE: 'SSL3_AD_HANDSHAKE_FAILURE', + SSL3_AD_NO_CERTIFICATE: 'SSL3_AD_NO_CERTIFICATE', + SSL3_AD_BAD_CERTIFICATE: 'SSL3_AD_BAD_CERTIFICATE', + SSL3_AD_UNSUPPORTED_CERTIFICATE: 'SSL3_AD_UNSUPPORTED_CERTIFICATE', + SSL3_AD_CERTIFICATE_REVOKED: 'SSL3_AD_CERTIFICATE_REVOKED', + SSL3_AD_CERTIFICATE_EXPIRED: 'SSL3_AD_CERTIFICATE_EXPIRED', + SSL3_AD_CERTIFICATE_UNKNOWN: 'SSL3_AD_CERTIFICATE_UNKNOWN', + SSL3_AD_ILLEGAL_PARAMETER: 'SSL3_AD_ILLEGAL_PARAMETER', + TLS1_AD_DECRYPTION_FAILED: 'TLS1_AD_DECRYPTION_FAILED', + TLS1_AD_RECORD_OVERFLOW: 'TLS1_AD_RECORD_OVERFLOW', + TLS1_AD_UNKNOWN_CA: 'TLS1_AD_UNKNOWN_CA', + TLS1_AD_ACCESS_DENIED: 'TLS1_AD_ACCESS_DENIED', + TLS1_AD_DECODE_ERROR: 'TLS1_AD_DECODE_ERROR', + TLS1_AD_DECRYPT_ERROR: 'TLS1_AD_DECRYPT_ERROR', + TLS1_AD_EXPORT_RESTRICTION: 'TLS1_AD_EXPORT_RESTRICTION', + TLS1_AD_PROTOCOL_VERSION: 'TLS1_AD_PROTOCOL_VERSION', + TLS1_AD_INSUFFICIENT_SECURITY: 'TLS1_AD_INSUFFICIENT_SECURITY', + TLS1_AD_INTERNAL_ERROR: 'TLS1_AD_INTERNAL_ERROR', + TLS1_AD_USER_CANCELLED: 'TLS1_AD_USER_CANCELLED', + TLS1_AD_NO_RENEGOTIATION: 'TLS1_AD_NO_RENEGOTIATION', + TLS1_AD_UNSUPPORTED_EXTENSION: 'TLS1_AD_UNSUPPORTED_EXTENSION', + TLS1_AD_CERTIFICATE_UNOBTAINABLE: 'TLS1_AD_CERTIFICATE_UNOBTAINABLE', + TLS1_AD_UNRECOGNIZED_NAME: 'TLS1_AD_UNRECOGNIZED_NAME', + TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 'TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE', + TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 'TLS1_AD_BAD_CERTIFICATE_HASH_VALUE', + TLS1_AD_UNKNOWN_PSK_IDENTITY: 'TLS1_AD_UNKNOWN_PSK_IDENTITY' +} + + +# struct format strings for parsing buffer lengths +# don't forget, you have to pad a 3-byte value with \x00 +_SIZE_FORMATS = ['!B', '!H', '!I', '!I'] + + +def parse_variable_array(buf, lenbytes): + """ + Parse an array described using the 'Type name' syntax from the spec + Read a length at the start of buf, and returns that many bytes + after, in a tuple with the TOTAL bytes consumed (including the size). This + does not check that the array is the right length for any given datatype. + """ + # first have to figure out how to parse length + assert lenbytes <= 4 # pretty sure 4 is impossible, too + size_format = _SIZE_FORMATS[lenbytes - 1] + padding = '\x00' if lenbytes == 3 else '' + # read off the length + size = struct.unpack(size_format, padding + buf[:lenbytes])[0] + # read the actual data + data = buf[lenbytes:lenbytes + size] + # if len(data) != size: insufficient data + return data, size + lenbytes + + +class SSL3Exception(Exception): + pass + + +class TLSRecord(dpkt.Packet): + + """ + SSLv3 or TLSv1+ packet. + + In addition to the fields specified in the header, there are + compressed and decrypted fields, indicating whether, in the language + of the spec, this is a TLSPlaintext, TLSCompressed, or + TLSCiphertext. The application will have to figure out when it's + appropriate to change these values. + """ + + __hdr__ = ( + ('type', 'B', 0), + ('version', 'H', 0), + ('length', 'H', 0), + ) + + def __init__(self, *args, **kwargs): + # assume plaintext unless specified otherwise in arguments + self.compressed = kwargs.pop('compressed', False) + self.encrypted = kwargs.pop('encrypted', False) + # parent constructor + dpkt.Packet.__init__(self, *args, **kwargs) + # make sure length and data are consistent + self.length = len(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + header_length = self.__hdr_len__ + self.data = buf[header_length:header_length + self.length] + # make sure buffer was long enough + if len(self.data) != self.length: + raise dpkt.NeedData('TLSRecord data was too short.') + # assume compressed and encrypted when it's been parsed from + # raw data + self.compressed = True + self.encrypted = True + + +class TLSChangeCipherSpec(dpkt.Packet): + + """ + ChangeCipherSpec message is just a single byte with value 1 + """ + + __hdr__ = (('type', 'B', 1),) + + +class TLSAppData(str): + + """ + As far as TLSRecord is concerned, AppData is just an opaque blob. + """ + + pass + + +class TLSAlert(dpkt.Packet): + __hdr__ = ( + ('level', 'B', 1), + ('description', 'B', 0), + ) + + +class TLSHelloRequest(dpkt.Packet): + __hdr__ = tuple() + + +class TLSClientHello(dpkt.Packet): + __hdr__ = ( + ('version', 'H', 0x0301), + ('random', '32s', '\x00' * 32), + ) # the rest is variable-length and has to be done manually + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + # now session, cipher suites, extensions are in self.data + self.session_id, pointer = parse_variable_array(self.data, 1) + # print 'pointer',pointer + # handle ciphersuites + ciphersuites, parsed = parse_variable_array(self.data[pointer:], 2) + pointer += parsed + self.num_ciphersuites = len(ciphersuites) / 2 + # check len(ciphersuites) % 2 == 0 ? + # compression methods + compression_methods, parsed = parse_variable_array( + self.data[pointer:], 1) + pointer += parsed + self.num_compression_methods = parsed - 1 + self.compression_methods = map(ord, compression_methods) + # extensions + + +class TLSServerHello(dpkt.Packet): + __hdr__ = ( + ('version', 'H', '0x0301'), + ('random', '32s', '\x00' * 32), + ) # session is variable, forcing rest to be manual + + def unpack(self, buf): + try: + dpkt.Packet.unpack(self, buf) + self.session_id, pointer = parse_variable_array(self.data, 1) + # single cipher suite + self.cipher_suite = struct.unpack('!H', self.data[pointer:pointer + 2])[0] + pointer += 2 + # single compression method + self.compression = struct.unpack('!B', self.data[pointer:pointer + 1])[0] + pointer += 1 + # ignore extensions for now + except struct.error: + # probably data too short + raise dpkt.NeedData + + +class TLSUnknownHandshake(dpkt.Packet): + __hdr__ = tuple() + + +TLSCertificate = TLSUnknownHandshake +TLSServerKeyExchange = TLSUnknownHandshake +TLSCertificateRequest = TLSUnknownHandshake +TLSServerHelloDone = TLSUnknownHandshake +TLSCertificateVerify = TLSUnknownHandshake +TLSClientKeyExchange = TLSUnknownHandshake +TLSFinished = TLSUnknownHandshake + + +# mapping of handshake type ids to their names +# and the classes that implement them +HANDSHAKE_TYPES = { + 0: ('HelloRequest', TLSHelloRequest), + 1: ('ClientHello', TLSClientHello), + 2: ('ServerHello', TLSServerHello), + 11: ('Certificate', TLSCertificate), + 12: ('ServerKeyExchange', TLSServerKeyExchange), + 13: ('CertificateRequest', TLSCertificateRequest), + 14: ('ServerHelloDone', TLSServerHelloDone), + 15: ('CertificateVerify', TLSCertificateVerify), + 16: ('ClientKeyExchange', TLSClientKeyExchange), + 20: ('Finished', TLSFinished), +} + + +class TLSHandshake(dpkt.Packet): + + """ + A TLS Handshake message + + This goes for all messages encapsulated in the Record layer, but especially + important for handshakes and app data: A message may be spread across a + number of TLSRecords, in addition to the possibility of there being more + than one in a given Record. You have to put together the contents of + TLSRecord's yourself. + """ + + # struct.unpack can't handle the 3-byte int, so we parse it as bytes + # (and store it as bytes so dpkt doesn't get confused), and turn it into + # an int in a user-facing property + __hdr__ = ( + ('type', 'B', 0), + ('length_bytes', '3s', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + # Wait, might there be more than one message of self.type? + embedded_type = HANDSHAKE_TYPES.get(self.type, None) + if embedded_type is None: + raise SSL3Exception('Unknown or invalid handshake type %d' % + self.type) + # only take the right number of bytes + self.data = self.data[:self.length] + if len(self.data) != self.length: + raise dpkt.NeedData + # get class out of embedded_type tuple + self.data = embedded_type[1](self.data) + + @property + def length(self): + return struct.unpack('!I', '\x00' + self.length_bytes)[0] + + +RECORD_TYPES = { + 20: TLSChangeCipherSpec, + 21: TLSAlert, + 22: TLSHandshake, + 23: TLSAppData, +} + + +class SSLFactory(object): + def __new__(cls, buf): + v = buf[1:3] + if v in SSL3_VERSION_BYTES: + return TLSRecord(buf) + # SSL2 has no characteristic header or magic bytes, so we just assume + # that the msg is an SSL2 msg if it is not detected as SSL3+ + return SSL2(buf) + + +def tls_multi_factory(buf): + """ + Attempt to parse one or more TLSRecord's out of buf + + Args: + buf: string containing SSL/TLS messages. May have an incomplete record + on the end + + Returns: + [TLSRecord] + int, total bytes consumed, != len(buf) if an incomplete record was left at + the end. + + Raises SSL3Exception. + """ + i, n = 0, len(buf) + msgs = [] + while i < n: + v = buf[i + 1:i + 3] + if v in SSL3_VERSION_BYTES: + try: + msg = TLSRecord(buf[i:]) + msgs.append(msg) + except dpkt.NeedData: + break + else: + raise SSL3Exception('Bad TLS version in buf: %r' % buf[i:i + 5]) + i += len(msg) + return msgs, i + +_hexdecode = binascii.a2b_hex + + +class TestTLSRecord(object): + + """ + Test basic TLSRecord functionality + For this test, the contents of the record doesn't matter, since we're not parsing the next layer. + """ + + @classmethod + def setup_class(cls): + # add some extra data, to make sure length is parsed correctly + cls.p = TLSRecord('\x17\x03\x01\x00\x08abcdefghzzzzzzzzzzz') + + def test_content_type(self): + assert (self.p.type == 23) + + def test_version(self): + assert (self.p.version == 0x0301) + + def test_length(self): + assert (self.p.length == 8) + + def test_data(self): + assert (self.p.data == 'abcdefgh') + + def test_initial_flags(self): + assert (self.p.compressed == True) + assert (self.p.encrypted == True) + + def test_repack(self): + p2 = TLSRecord(type=23, version=0x0301, data='abcdefgh') + assert (p2.type == 23) + assert (p2.version == 0x0301) + assert (p2.length == 8) + assert (p2.data == 'abcdefgh') + assert (p2.pack() == self.p.pack()) + + def test_total_length(self): + # that len(p) includes header + assert (len(self.p) == 13) + + def test_raises_need_data_when_buf_is_short(self): + import pytest + pytest.raises(dpkt.NeedData, TLSRecord, '\x16\x03\x01\x00\x10abc') + + +class TestTLSChangeCipherSpec(object): + + """It's just a byte. This will be quick, I promise""" + + @classmethod + def setup_class(cls): + cls.p = TLSChangeCipherSpec('\x01') + + def test_parses(self): + assert (self.p.type == 1) + + def test_total_length(self): + assert (len(self.p) == 1) + + +class TestTLSAppData(object): + + """AppData is basically just a string""" + + def test_value(self): + d = TLSAppData('abcdefgh') + assert (d == 'abcdefgh') + + +class TestTLSHandshake(object): + @classmethod + def setup_class(cls): + cls.h = TLSHandshake('\x00\x00\x00\x01\xff') + + def test_created_inside_message(self): + assert (isinstance(self.h.data, TLSHelloRequest) == True) + + def test_length(self): + assert (self.h.length == 0x01) + + def test_raises_need_data(self): + import pytest + pytest.raises(dpkt.NeedData, TLSHandshake, '\x00\x00\x01\x01') + + +class TestClientHello(object): + + """This data is extracted from and verified by Wireshark""" + + @classmethod + def setup_class(cls): + cls.data = _hexdecode( + "01000199" # handshake header + "0301" # version + "5008220ce5e0e78b6891afe204498c9363feffbe03235a2d9e05b7d990eb708d" # rand + "2009bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed1" # session id + # cipher suites + "005400ffc00ac0140088008700390038c00fc00500840035c007c009c011c0130045004400330032c00cc00ec002c0040096004100050004002fc008c01200160013c00dc003feff000ac006c010c00bc00100020001" + "0100" # compresssion methods + # extensions + "00fc0000000e000c0000096c6f63616c686f7374000a00080006001700180019000b00020100002300d0a50b2e9f618a9ea9bf493ef49b421835cd2f6b05bbe1179d8edf70d58c33d656e8696d36d7e7e0b9d3ecc0e4de339552fa06c64c0fcb550a334bc43944e2739ca342d15a9ebbe981ac87a0d38160507d47af09bdc16c5f0ee4cdceea551539382333226048a026d3a90a0535f4a64236467db8fee22b041af986ad0f253bc369137cd8d8cd061925461d7f4d7895ca9a4181ab554dad50360ac31860e971483877c9335ac1300c5e78f3e56f3b8e0fc16358fcaceefd5c8d8aaae7b35be116f8832856ca61144fcdd95e071b94d0cf7233740000" + "FFFFFFFFFFFFFFFF") # random garbage + cls.p = TLSHandshake(cls.data) + + def test_client_hello_constructed(self): + """Make sure the correct class was constructed""" + # print self.p + assert (isinstance(self.p.data, TLSClientHello) == True) + + # def testClientDateCorrect(self): + # self.assertEqual(self.p.random_unixtime, 1342710284) + + def test_client_random_correct(self): + assert (self.p.data.random == _hexdecode('5008220ce5e0e78b6891afe204498c9363feffbe03235a2d9e05b7d990eb708d')) + + def test_cipher_suite_length(self): + # we won't bother testing the identity of each cipher suite in the list. + assert (self.p.data.num_ciphersuites == 42) + # self.assertEqual(len(self.p.ciphersuites), 42) + + def test_session_id(self): + assert (self.p.data.session_id == _hexdecode('09bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed1')) + + def test_compression_methods(self): + assert (self.p.data.num_compression_methods == 1) + + def test_total_length(self): + assert (len(self.p) == 413) + + +class TestServerHello(object): + + """Again, from Wireshark""" + + @classmethod + def setup_class(cls): + cls.data = _hexdecode( + '0200004d03015008220c8ec43c5462315a7c99f5d5b6bff009ad285b51dc18485f352e9fdecd2009bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed10002000005ff01000100') + cls.p = TLSHandshake(cls.data) + + def test_constructed(self): + assert (isinstance(self.p.data, TLSServerHello) == True) + + # def testDateCorrect(self): + # self.assertEqual(self.p.random_unixtime, 1342710284) + + def test_random_correct(self): + assert (self.p.data.random == _hexdecode('5008220c8ec43c5462315a7c99f5d5b6bff009ad285b51dc18485f352e9fdecd')) + + def test_cipher_suite(self): + assert (ssl_ciphersuites.BY_CODE[self.p.data.cipher_suite].name == 'TLS_RSA_WITH_NULL_SHA') + + def test_total_length(self): + assert (len(self.p) == 81) + + +class TestTLSMultiFactory(object): + + """Made up test data""" + + @classmethod + def setup_class(cls): + cls.data = _hexdecode('1703010010' # header 1 + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' # data 1 + '1703010010' # header 2 + 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' # data 2 + '1703010010' # header 3 + 'CCCCCCCC') # data 3 (incomplete) + cls.msgs, cls.bytes_parsed = tls_multi_factory(cls.data) + + def test_num_messages(self): + # only complete messages should be parsed, incomplete ones left + # in buffer + assert (len(self.msgs) == 2) + + def test_bytes_parsed(self): + assert (self.bytes_parsed == (5 + 16) * 2) + + def test_first_msg_data(self): + assert (self.msgs[0].data == _hexdecode('AA' * 16)) + + def test_second_msg_data(self): + assert (self.msgs[1].data == _hexdecode('BB' * 16)) + diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py new file mode 100644 index 00000000..d5ee1b9d --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py @@ -0,0 +1,76 @@ +# Copyright 2012 Google Inc. All rights reserved. +# -*- coding: utf-8 -*- +""" +Nicely formatted cipher suite definitions for TLS + +A list of cipher suites in the form of CipherSuite objects. +These are supposed to be immutable; don't mess with them. +""" + + +class CipherSuite(object): + """ + Encapsulates a cipher suite. + + Members/args: + * code: two-byte ID code, as int + * name: as in 'TLS_RSA_WITH_RC4_40_MD5' + * kx: key exchange algorithm, string + * auth: authentication algorithm, string + * encoding: encoding algorithm + * mac: message authentication code algorithm + """ + + def __init__(self, code, name, kx, auth, encoding, mac): + self.code = code + self.name = name + self.kx = kx + self.auth = auth + self.encoding = encoding + self.mac = mac + + def __repr__(self): + return 'CipherSuite(%s)' % self.name + + MAC_SIZES = { + 'MD5': 16, + 'SHA': 20, + 'SHA256': 32, # I guess + } + + BLOCK_SIZES = { + 'AES_256_CBC': 16, + } + + @property + def mac_size(self): + """In bytes. Default to 0.""" + return self.MAC_SIZES.get(self.mac, 0) + + @property + def block_size(self): + """In bytes. Default to 1.""" + return self.BLOCK_SIZES.get(self.encoding, 1) + + +# master list of CipherSuite Objects +CIPHERSUITES = [ + # not a real cipher suite, can be ignored, see RFC5746 + CipherSuite(0xff, 'TLS_EMPTY_RENEGOTIATION_INFO', + 'NULL', 'NULL', 'NULL', 'NULL'), + CipherSuite(0x00, 'TLS_NULL_WITH_NULL_NULL', + 'NULL', 'NULL', 'NULL', 'NULL'), + CipherSuite(0x01, 'TLS_RSA_WITH_NULL_MD5', 'RSA', 'RSA', 'NULL', 'MD5'), + CipherSuite(0x02, 'TLS_RSA_WITH_NULL_SHA', 'RSA', 'RSA', 'NULL', 'SHA'), + CipherSuite(0x0039, 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA', + 'DHE', 'RSA', 'AES_256_CBC', 'SHA'), # not sure I got the kx/auth thing right. + CipherSuite(0xffff, 'UNKNOWN_CIPHER', '', '', '', '') +] + +BY_CODE = dict( + (cipher.code, cipher) for cipher in CIPHERSUITES) + +BY_NAME = dict( + (suite.name, suite) for suite in CIPHERSUITES) + +NULL_SUITE = BY_CODE[0x00] diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/stp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/stp.py new file mode 100644 index 00000000..382318a4 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/stp.py @@ -0,0 +1,22 @@ +# $Id: stp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Spanning Tree Protocol.""" + +import dpkt + + +class STP(dpkt.Packet): + __hdr__ = ( + ('proto_id', 'H', 0), + ('v', 'B', 0), + ('type', 'B', 0), + ('flags', 'B', 0), + ('root_id', '8s', ''), + ('root_path', 'I', 0), + ('bridge_id', '8s', ''), + ('port_id', 'H', 0), + ('age', 'H', 0), + ('max_age', 'H', 0), + ('hello', 'H', 0), + ('fd', 'H', 0) + ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/stun.py b/external_libs/python/dpkt-1.8.6.2/dpkt/stun.py new file mode 100644 index 00000000..e371350c --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/stun.py @@ -0,0 +1,47 @@ +# $Id: stun.py 47 2008-05-27 02:10:00Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Simple Traversal of UDP through NAT.""" + +import struct +import dpkt + +# STUN - RFC 3489 +# http://tools.ietf.org/html/rfc3489 +# Each packet has a 20 byte header followed by 0 or more attribute TLVs. + +# Message Types +BINDING_REQUEST = 0x0001 +BINDING_RESPONSE = 0x0101 +BINDING_ERROR_RESPONSE = 0x0111 +SHARED_SECRET_REQUEST = 0x0002 +SHARED_SECRET_RESPONSE = 0x0102 +SHARED_SECRET_ERROR_RESPONSE = 0x0112 + +# Message Attributes +MAPPED_ADDRESS = 0x0001 +RESPONSE_ADDRESS = 0x0002 +CHANGE_REQUEST = 0x0003 +SOURCE_ADDRESS = 0x0004 +CHANGED_ADDRESS = 0x0005 +USERNAME = 0x0006 +PASSWORD = 0x0007 +MESSAGE_INTEGRITY = 0x0008 +ERROR_CODE = 0x0009 +UNKNOWN_ATTRIBUTES = 0x000a +REFLECTED_FROM = 0x000b + + +class STUN(dpkt.Packet): + __hdr__ = ( + ('type', 'H', 0), + ('len', 'H', 0), + ('xid', '16s', 0) + ) + + +def tlv(buf): + n = 4 + t, l = struct.unpack('>HH', buf[:n]) + v = buf[n:n + l] + buf = buf[n + l:] + return t, l, v, buf diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/tcp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/tcp.py new file mode 100644 index 00000000..fe1a3b97 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/tcp.py @@ -0,0 +1,152 @@ +# $Id: tcp.py 42 2007-08-02 22:38:47Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Transmission Control Protocol.""" + +import dpkt +from decorators import deprecated + +# TCP control flags +TH_FIN = 0x01 # end of data +TH_SYN = 0x02 # synchronize sequence numbers +TH_RST = 0x04 # reset connection +TH_PUSH = 0x08 # push +TH_ACK = 0x10 # acknowledgment number set +TH_URG = 0x20 # urgent pointer set +TH_ECE = 0x40 # ECN echo, RFC 3168 +TH_CWR = 0x80 # congestion window reduced + +TCP_PORT_MAX = 65535 # maximum port +TCP_WIN_MAX = 65535 # maximum (unscaled) window + + +class TCP(dpkt.Packet): + __hdr__ = ( + ('sport', 'H', 0xdead), + ('dport', 'H', 0), + ('seq', 'I', 0xdeadbeefL), + ('ack', 'I', 0), + ('off_x2', 'B', ((5 << 4) | 0)), + ('flags', 'B', TH_SYN), + ('win', 'H', TCP_WIN_MAX), + ('sum', 'H', 0), + ('urp', 'H', 0) + ) + opts = '' + + @property + def off(self): return self.off_x2 >> 4 + + @off.setter + def off(self, off): self.off_x2 = (off << 4) | (self.off_x2 & 0xf) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_off(self): return self.off + + @deprecated + def _set_off(self, off): self.off = off + # ================================================= + + def __len__(self): + return self.__hdr_len__ + len(self.opts) + len(self.data) + + def __str__(self): + return self.pack_hdr() + self.opts + str(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + ol = ((self.off_x2 >> 4) << 2) - self.__hdr_len__ + if ol < 0: + raise dpkt.UnpackError, 'invalid header length' + self.opts = buf[self.__hdr_len__:self.__hdr_len__ + ol] + self.data = buf[self.__hdr_len__ + ol:] + +# Options (opt_type) - http://www.iana.org/assignments/tcp-parameters +TCP_OPT_EOL = 0 # end of option list +TCP_OPT_NOP = 1 # no operation +TCP_OPT_MSS = 2 # maximum segment size +TCP_OPT_WSCALE = 3 # window scale factor, RFC 1072 +TCP_OPT_SACKOK = 4 # SACK permitted, RFC 2018 +TCP_OPT_SACK = 5 # SACK, RFC 2018 +TCP_OPT_ECHO = 6 # echo (obsolete), RFC 1072 +TCP_OPT_ECHOREPLY = 7 # echo reply (obsolete), RFC 1072 +TCP_OPT_TIMESTAMP = 8 # timestamp, RFC 1323 +TCP_OPT_POCONN = 9 # partial order conn, RFC 1693 +TCP_OPT_POSVC = 10 # partial order service, RFC 1693 +TCP_OPT_CC = 11 # connection count, RFC 1644 +TCP_OPT_CCNEW = 12 # CC.NEW, RFC 1644 +TCP_OPT_CCECHO = 13 # CC.ECHO, RFC 1644 +TCP_OPT_ALTSUM = 14 # alt checksum request, RFC 1146 +TCP_OPT_ALTSUMDATA = 15 # alt checksum data, RFC 1146 +TCP_OPT_SKEETER = 16 # Skeeter +TCP_OPT_BUBBA = 17 # Bubba +TCP_OPT_TRAILSUM = 18 # trailer checksum +TCP_OPT_MD5 = 19 # MD5 signature, RFC 2385 +TCP_OPT_SCPS = 20 # SCPS capabilities +TCP_OPT_SNACK = 21 # selective negative acks +TCP_OPT_REC = 22 # record boundaries +TCP_OPT_CORRUPT = 23 # corruption experienced +TCP_OPT_SNAP = 24 # SNAP +TCP_OPT_TCPCOMP = 26 # TCP compression filter +TCP_OPT_MAX = 27 + + +def parse_opts(buf): + """Parse TCP option buffer into a list of (option, data) tuples.""" + opts = [] + while buf: + o = ord(buf[0]) + if o > TCP_OPT_NOP: + try: + # advance buffer at least 2 bytes = 1 type + 1 length + l = max(2, ord(buf[1])) + d, buf = buf[2:l], buf[l:] + except (IndexError, ValueError): + # print 'bad option', repr(str(buf)) + opts.append(None) # XXX + break + else: + # options 0 and 1 are not followed by length byte + d, buf = '', buf[1:] + opts.append((o, d)) + return opts + + +def test_parse_opts(): + # normal scenarios + buf = '\x02\x04\x23\x00\x01\x01\x04\x02' + opts = parse_opts(buf) + assert opts == [ + (TCP_OPT_MSS, '\x23\x00'), + (TCP_OPT_NOP, ''), + (TCP_OPT_NOP, ''), + (TCP_OPT_SACKOK, '') + ] + + buf = '\x01\x01\x05\x0a\x37\xf8\x19\x70\x37\xf8\x29\x78' + opts = parse_opts(buf) + assert opts == [ + (TCP_OPT_NOP, ''), + (TCP_OPT_NOP, ''), + (TCP_OPT_SACK, '\x37\xf8\x19\x70\x37\xf8\x29\x78') + ] + + # test a zero-length option + buf = '\x02\x00\x01' + opts = parse_opts(buf) + assert opts == [ + (TCP_OPT_MSS, ''), + (TCP_OPT_NOP, '') + ] + + # test a one-byte malformed option + buf = '\xff' + opts = parse_opts(buf) + assert opts == [None] + + +if __name__ == '__main__': + # Runs all the test associated with this class/file + test_parse_opts() + print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/telnet.py b/external_libs/python/dpkt-1.8.6.2/dpkt/telnet.py new file mode 100644 index 00000000..9a1d7f4c --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/telnet.py @@ -0,0 +1,80 @@ +# $Id: telnet.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Telnet.""" + +IAC = 255 # interpret as command: +DONT = 254 # you are not to use option +DO = 253 # please, you use option +WONT = 252 # I won't use option +WILL = 251 # I will use option +SB = 250 # interpret as subnegotiation +GA = 249 # you may reverse the line +EL = 248 # erase the current line +EC = 247 # erase the current character +AYT = 246 # are you there +AO = 245 # abort output--but let prog finish +IP = 244 # interrupt process--permanently +BREAK = 243 # break +DM = 242 # data mark--for connect. cleaning +NOP = 241 # nop +SE = 240 # end sub negotiation +EOR = 239 # end of record (transparent mode) +ABORT = 238 # Abort process +SUSP = 237 # Suspend process +xEOF = 236 # End of file: EOF is already used... + +SYNCH = 242 # for telfunc calls + + +def strip_options(buf): + """Return a list of lines and dict of options from telnet data.""" + l = buf.split(chr(IAC)) + # print l + b = [] + d = {} + subopt = False + for w in l: + if not w: + continue + o = ord(w[0]) + if o > SB: + # print 'WILL/WONT/DO/DONT/IAC', `w` + w = w[2:] + elif o == SE: + # print 'SE', `w` + w = w[1:] + subopt = False + elif o == SB: + # print 'SB', `w` + subopt = True + for opt in ('USER', 'DISPLAY', 'TERM'): + p = w.find(opt + '\x01') + if p != -1: + d[opt] = w[p + len(opt) + 1:].split('\x00', 1)[0] + w = None + elif subopt: + w = None + if w: + w = w.replace('\x00', '\n').splitlines() + if not w[-1]: w.pop() + b.extend(w) + return b, d + + +def test_telnet(): + l = [] + s = "\xff\xfb%\xff\xfa%\x00\x00\x00\xff\xf0\xff\xfd&\xff\xfa&\x05\xff\xf0\xff\xfa&\x01\x01\x02\xff\xf0\xff\xfb\x18\xff\xfb \xff\xfb#\xff\xfb'\xff\xfc$\xff\xfa \x0038400,38400\xff\xf0\xff\xfa#\x00doughboy.citi.umich.edu:0.0\xff\xf0\xff\xfa'\x00\x00DISPLAY\x01doughboy.citi.umich.edu:0.0\x00USER\x01dugsong\xff\xf0\xff\xfa\x18\x00XTERM\xff\xf0\xff\xfd\x03\xff\xfc\x01\xff\xfb\x1f\xff\xfa\x1f\x00P\x00(\xff\xf0\xff\xfd\x05\xff\xfb!\xff\xfd\x01fugly\r\x00yoda\r\x00bashtard\r\x00" + l.append(s) + s = '\xff\xfd\x01\xff\xfd\x03\xff\xfb\x18\xff\xfb\x1f\xff\xfa\x1f\x00X\x002\xff\xf0admin\r\x00\xff\xfa\x18\x00LINUX\xff\xf0foobar\r\x00enable\r\x00foobar\r\x00\r\x00show ip int Vlan 666\r\x00' + l.append(s) + s = '\xff\xfb%\xff\xfa%\x00\x00\x00\xff\xf0\xff\xfd&\xff\xfa&\x05\xff\xf0\xff\xfa&\x01\x01\x02\xff\xf0\xff\xfb&\xff\xfb\x18\xff\xfb \xff\xfb#\xff\xfb\'\xff\xfc$\xff\xfa \x0038400,38400\xff\xf0\xff\xfa#\x00doughboy.citi.umich.edu:0.0\xff\xf0\xff\xfa\'\x00\x00DISPLAY\x01doughboy.citi.umich.edu:0.0\x00USER\x01dugsong\xff\xf0\xff\xfa\x18\x00XTERM\xff\xf0\xff\xfd\x03\xff\xfc\x01\xff\xfb"\xff\xfa"\x03\x01\x03\x00\x03b\x03\x04\x02\x0f\x05\x00\xff\xff\x07b\x1c\x08\x02\x04\tB\x1a\n\x02\x7f\x0b\x02\x15\x0c\x02\x17\r\x02\x12\x0e\x02\x16\x0f\x02\x11\x10\x02\x13\x11\x00\xff\xff\x12\x00\xff\xff\xff\xf0\xff\xfb\x1f\xff\xfa\x1f\x00P\x00(\xff\xf0\xff\xfd\x05\xff\xfb!\xff\xfa"\x01\x0f\xff\xf0\xff\xfd\x01\xff\xfe\x01\xff\xfa"\x03\x01\x80\x00\xff\xf0\xff\xfd\x01werd\r\n\xff\xfe\x01yoda\r\n\xff\xfd\x01darthvader\r\n\xff\xfe\x01' + l.append(s) + exp = [(['fugly', 'yoda', 'bashtard'], {'USER': 'dugsong', 'DISPLAY': 'doughboy.citi.umich.edu:0.0'}), + (['admin', 'foobar', 'enable', 'foobar', '', 'show ip int Vlan 666'], {}), + (['werd', 'yoda', 'darthvader'], {'USER': 'dugsong', 'DISPLAY': 'doughboy.citi.umich.edu:0.0'})] + assert (map(strip_options, l) == exp) + + +if __name__ == '__main__': + test_telnet() + print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/tftp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/tftp.py new file mode 100644 index 00000000..928ee1e3 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/tftp.py @@ -0,0 +1,56 @@ +# $Id: tftp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Trivial File Transfer Protocol.""" + +import struct +import dpkt + +# Opcodes +OP_RRQ = 1 # read request +OP_WRQ = 2 # write request +OP_DATA = 3 # data packet +OP_ACK = 4 # acknowledgment +OP_ERR = 5 # error code + +# Error codes +EUNDEF = 0 # not defined +ENOTFOUND = 1 # file not found +EACCESS = 2 # access violation +ENOSPACE = 3 # disk full or allocation exceeded +EBADOP = 4 # illegal TFTP operation +EBADID = 5 # unknown transfer ID +EEXISTS = 6 # file already exists +ENOUSER = 7 # no such user + + +class TFTP(dpkt.Packet): + __hdr__ = (('opcode', 'H', 1), ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.opcode in (OP_RRQ, OP_WRQ): + l = self.data.split('\x00') + self.filename = l[0] + self.mode = l[1] + self.data = '' + elif self.opcode in (OP_DATA, OP_ACK): + self.block = struct.unpack('>H', self.data[:2]) + self.data = self.data[2:] + elif self.opcode == OP_ERR: + self.errcode = struct.unpack('>H', self.data[:2]) + self.errmsg = self.data[2:].split('\x00')[0] + self.data = '' + + def __len__(self): + return len(str(self)) + + def __str__(self): + if self.opcode in (OP_RRQ, OP_WRQ): + s = '%s\x00%s\x00' % (self.filename, self.mode) + elif self.opcode in (OP_DATA, OP_ACK): + s = struct.pack('>H', self.block) + elif self.opcode == OP_ERR: + s = struct.pack('>H', self.errcode) + ('%s\x00' % self.errmsg) + else: + s = '' + return self.pack_hdr() + s + self.data diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/tns.py b/external_libs/python/dpkt-1.8.6.2/dpkt/tns.py new file mode 100644 index 00000000..931508e6 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/tns.py @@ -0,0 +1,26 @@ +# $Id: tns.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Transparent Network Substrate.""" + +import dpkt + + +class TNS(dpkt.Packet): + __hdr__ = ( + ('length', 'H', 0), + ('pktsum', 'H', 0), + ('type', 'B', 0), + ('rsvd', 'B', 0), + ('hdrsum', 'H', 0), + ('msg', '0s', ''), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + n = self.length - self.__hdr_len__ + if n > len(self.data): + raise dpkt.NeedData('short message (missing %d bytes)' % + (n - len(self.data))) + self.msg = self.data[:n] + self.data = self.data[n:] + diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/tpkt.py b/external_libs/python/dpkt-1.8.6.2/dpkt/tpkt.py new file mode 100644 index 00000000..d235833b --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/tpkt.py @@ -0,0 +1,16 @@ +# $Id: tpkt.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""ISO Transport Service on top of the TCP (TPKT).""" + +import dpkt + +# TPKT - RFC 1006 Section 6 +# http://www.faqs.org/rfcs/rfc1006.html + + +class TPKT(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 3), + ('rsvd', 'B', 0), + ('len', 'H', 0) + ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/udp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/udp.py new file mode 100644 index 00000000..41a00e78 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/udp.py @@ -0,0 +1,17 @@ +# $Id: udp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""User Datagram Protocol.""" + +import dpkt + +UDP_HDR_LEN = 8 +UDP_PORT_MAX = 65535 + + +class UDP(dpkt.Packet): + __hdr__ = ( + ('sport', 'H', 0xdead), + ('dport', 'H', 0), + ('ulen', 'H', 8), + ('sum', 'H', 0) + ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/vrrp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/vrrp.py new file mode 100644 index 00000000..6bdff005 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/vrrp.py @@ -0,0 +1,70 @@ +# $Id: vrrp.py 88 2013-03-05 19:43:17Z andrewflnr@gmail.com $ +# -*- coding: utf-8 -*- +"""Virtual Router Redundancy Protocol.""" + +import dpkt +from decorators import deprecated + + +class VRRP(dpkt.Packet): + __hdr__ = ( + ('vtype', 'B', 0x21), + ('vrid', 'B', 0), + ('priority', 'B', 0), + ('count', 'B', 0), + ('atype', 'B', 0), + ('advtime', 'B', 0), + ('sum', 'H', 0), + ) + addrs = () + auth = '' + + @property + def v(self): + return self.vtype >> 4 + + @v.setter + def v(self, v): + self.vtype = (self.vtype & ~0xf) | (v << 4) + + @property + def type(self): + return self.vtype & 0xf + + @type.setter + def type(self, v): + self.vtype = (self.vtype & ~0xf0) | (v & 0xf) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): return self.v + + @deprecated + def _set_v(self, v): self.v = v + + @deprecated + def _get_type(self): return self.type + + @deprecated + def _set_type(self, v): self.type = v + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + off = 0 + for off in range(0, 4 * self.count, 4): + l.append(self.data[off:off + 4]) + self.addrs = l + self.auth = self.data[off + 4:] + self.data = '' + + def __len__(self): + return self.__hdr_len__ + (4 * self.count) + len(self.auth) + + def __str__(self): + data = ''.join(self.addrs) + self.auth + if not self.sum: + self.sum = dpkt.in_cksum(self.pack_hdr() + data) + return self.pack_hdr() + data diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/yahoo.py b/external_libs/python/dpkt-1.8.6.2/dpkt/yahoo.py new file mode 100644 index 00000000..6b871115 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/dpkt/yahoo.py @@ -0,0 +1,30 @@ +# $Id: yahoo.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Yahoo Messenger.""" + +import dpkt + + +class YHOO(dpkt.Packet): + __hdr__ = [ + ('version', '8s', ' ' * 8), + ('length', 'I', 0), + ('service', 'I', 0), + ('connid', 'I', 0), + ('magic', 'I', 0), + ('unknown', 'I', 0), + ('type', 'I', 0), + ('nick1', '36s', ' ' * 36), + ('nick2', '36s', ' ' * 36) + ] + __byte_order__ = '<' + + +class YMSG(dpkt.Packet): + __hdr__ = [ + ('version', '8s', ' ' * 8), + ('length', 'H', 0), + ('type', 'H', 0), + ('unknown1', 'I', 0), + ('unknown2', 'I', 0) + ] diff --git a/external_libs/python/dpkt-1.8.6.2/setup.cfg b/external_libs/python/dpkt-1.8.6.2/setup.cfg new file mode 100644 index 00000000..56ffc205 --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/setup.cfg @@ -0,0 +1,20 @@ +[bdist_wheel] +universal = 1 + +[aliases] +release = register clean --all sdist bdist_wheel upload + +[flake8] +max-line-length = 140 + +[pytest] +addopts = -v --cov-report term-missing +python_files = *.py +python_functions = test +norecursedirs = .tox .git *.egg-info __pycache__ dist build + +[egg_info] +tag_build = +tag_date = 0 +tag_svn_revision = 0 + diff --git a/external_libs/python/dpkt-1.8.6.2/setup.py b/external_libs/python/dpkt-1.8.6.2/setup.py new file mode 100644 index 00000000..f77cd97e --- /dev/null +++ b/external_libs/python/dpkt-1.8.6.2/setup.py @@ -0,0 +1,67 @@ +import os +import sys + +try: + from setuptools import setup, Command +except ImportError: + from distutils.core import setup, Command + +package_name = 'dpkt' +description = 'fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols' +readme = open('README.rst').read() +requirements = [] + +# PyPI Readme +long_description = open('README.rst').read() + +# Pull in the package +package = __import__(package_name) + + +class BuildDebPackage(Command): + """Build a Debian Package out of this Python Package""" + try: + import stdeb + except ImportError as exc: + print 'To build a Debian Package you must install stdeb (pip install stdeb)' + + description = "Build a Debian Package out of this Python Package" + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + os.system('python setup.py sdist') + sdist_file = os.path.join(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'dist'), + package_name + '-' + package.__version__ + '.tar.gz') + print sdist_file + os.system('py2dsc-deb ' + sdist_file) + + +setup(name=package_name, + version=package.__version__, + author=package.__author__, + author_email=package.__author_email__, + url=package.__url__, + description=description, + long_description=long_description, + packages=['dpkt'], + install_requires=requirements, + license='BSD', + zip_safe=False, + classifiers=[ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: BSD License', + 'Natural Language :: English', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: Implementation :: CPython', + 'Programming Language :: Python :: Implementation :: PyPy', + ], + cmdclass={'debian': BuildDebPackage} +) diff --git a/scripts/automation/trex_control_plane/client/trex_stateless_client.py b/scripts/automation/trex_control_plane/client/trex_stateless_client.py new file mode 100644 index 00000000..670eda1d --- /dev/null +++ b/scripts/automation/trex_control_plane/client/trex_stateless_client.py @@ -0,0 +1,58 @@ +#!/router/bin/python + +try: + # support import for Python 2 + import outer_packages +except ImportError: + # support import for Python 3 + import client.outer_packages +from client_utils.jsonrpc_client import JsonRpcClient + + + +class CTRexStatelessClient(object): + """docstring for CTRexStatelessClient""" + def __init__(self, server="localhost", port=5050, virtual=False): + super(CTRexStatelessClient, self).__init__() + self.tx_link = CTRexStatelessClient.CTxLink(server, port, virtual) + + + def transmit(self, method_name, params = {}): + return self.tx_link.transmit(method_name, params) + + + + class CTxLink(object): + """describes the connectivity of the stateless client method""" + def __init__(self, server="localhost", port=5050, virtual=False): + super(CTRexStatelessClient.CTxLink, self).__init__() + self.virtual = virtual + self.server = server + self.port = port + self.rpc_link = JsonRpcClient(self.server, self.port) + if not self.virtual: + self.rpc_link.connect() + + def transmit(self, method_name, params = {}): + if self.virtual: + print "Transmitting virtually over tcp://{server}:{port}".format( + server=self.server, + port=self.port) + id, msg = self.rpc_link.create_jsonrpc_v2(method_name, params) + print msg + return + else: + return self.rpc_link.invoke_rpc_method(method_name, params) + + + + + +class CTRexVM(object): + """docstring for CTRexVM""" + def __init__(self, arg): + super(CTRexVM, self).__init__() + self.arg = arg + +if __name__ == "__main__": + pass diff --git a/scripts/automation/trex_control_plane/client_utils/jsonrpc_client.py b/scripts/automation/trex_control_plane/client_utils/jsonrpc_client.py index 1631c494..89ac9127 100644 --- a/scripts/automation/trex_control_plane/client_utils/jsonrpc_client.py +++ b/scripts/automation/trex_control_plane/client_utils/jsonrpc_client.py @@ -34,16 +34,16 @@ class JsonRpcClient(object): print "[verbose] " + msg - def create_jsonrpc_v2 (self, method_name, params = {}, id = None): + def create_jsonrpc_v2 (self, method_name, params = {}): msg = {} msg["jsonrpc"] = "2.0" msg["method"] = method_name msg["params"] = params - msg["id"] = id + msg["id"] = self.id_gen.next() - return json.dumps(msg) + return id, json.dumps(msg) def invoke_rpc_method (self, method_name, params = {}, block = False): rc, msg = self._invoke_rpc_method(method_name, params, block) @@ -56,8 +56,7 @@ class JsonRpcClient(object): if not self.connected: return False, "Not connected to server" - id = self.id_gen.next() - msg = self.create_jsonrpc_v2(method_name, params, id = id) + id, msg = self.create_jsonrpc_v2(method_name, params) self.verbose_msg("Sending Request To Server:\n\n" + self.pretty_json(msg) + "\n") @@ -180,7 +179,8 @@ class JsonRpcClient(object): def __del__(self): print "Shutting down RPC client\n" - self.context.destroy(linger=0) + if hasattr(self, "context"): + self.context.destroy(linger=0) if __name__ == "__main__": pass diff --git a/scripts/automation/trex_control_plane/client_utils/outer_packages.py b/scripts/automation/trex_control_plane/client_utils/outer_packages.py index 53cce991..81672c91 100644 --- a/scripts/automation/trex_control_plane/client_utils/outer_packages.py +++ b/scripts/automation/trex_control_plane/client_utils/outer_packages.py @@ -9,7 +9,9 @@ ROOT_PATH = os.path.abspath(os.path.join(CURRENT_PATH, os.pardir)) PATH_TO_PYTHON_LIB = os.path.abspath(os.path.join(ROOT_PATH, os.pardir, os.pardir, os.pardir, 'external_libs', 'python')) -CLIENT_UTILS_MODULES = ['zmq'] +CLIENT_UTILS_MODULES = ['zmq', + 'dpkt-1.8.6.2' + ] def import_client_utils_modules(): diff --git a/scripts/automation/trex_control_plane/client_utils/packet_builder.py b/scripts/automation/trex_control_plane/client_utils/packet_builder.py new file mode 100644 index 00000000..c33444a7 --- /dev/null +++ b/scripts/automation/trex_control_plane/client_utils/packet_builder.py @@ -0,0 +1,11 @@ +#!/router/bin/python + + +import outer_packages +import dpkt + +class CTRexPktBuilder(object): + """docstring for CTRexPktBuilder""" + def __init__(self, arg): + super(CTRexPktBuilder, self).__init__() + self.arg = arg \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/examples/interactive_stateless.py b/scripts/automation/trex_control_plane/examples/interactive_stateless.py index c0fc51a7..016888d2 100644 --- a/scripts/automation/trex_control_plane/examples/interactive_stateless.py +++ b/scripts/automation/trex_control_plane/examples/interactive_stateless.py @@ -1,14 +1,17 @@ #!/router/bin/python import trex_root_path -from client.trex_client import * +from client.trex_stateless_client import * from common.trex_exceptions import * import cmd -from python_lib.termstyle import termstyle +from termstyle import termstyle +# import termstyle import os from argparse import ArgumentParser import socket import errno +import ast +import json class InteractiveStatelessTRex(cmd.Cmd): @@ -17,10 +20,12 @@ class InteractiveStatelessTRex(cmd.Cmd): \nType help to view available pre-defined scenarios\n(c) All rights reserved.\n") prompt = '> ' - def __init__(self, verbose_mode=False): + def __init__(self, trex_host, trex_port, virtual, verbose): cmd.Cmd.__init__(self) - self.verbose = verbose_mode - self.trex = None + + self.verbose = verbose + self.virtual = virtual + self.trex = CTRexStatelessClient(trex_host, trex_port, self.virtual) self.DEFAULT_RUN_PARAMS = dict(m=1.5, nc=True, p=True, @@ -29,6 +34,47 @@ class InteractiveStatelessTRex(cmd.Cmd): l=1000) self.run_params = dict(self.DEFAULT_RUN_PARAMS) + def do_transmit(self, line): + """Transmits a request over using a given link to server.\ + \nuse: transmit [method_name] [method_params]""" + if line == "": + print "\nUsage: [method name] [param dict as string]\n" + print "Example: rpc test_add {'x': 12, 'y': 17}\n" + return + + args = line.split(' ', 1) # args will have max length of 2 + method_name = args[0] + params = None + bad_parse = False + + try: + params = ast.literal_eval(args[1]) + if not isinstance(params, dict): + bad_parse = True + except ValueError as e1: + bad_parse = True + except SyntaxError as e2: + bad_parse = True + + if bad_parse: + print "\nValue should be a valid dict: '{0}'".format(args[1]) + print "\nUsage: [method name] [param dict as string]\n" + print "Example: rpc test_add {'x': 12, 'y': 17}\n" + return + + response = self.trex.transmit(method_name, params) + if not self.virtual: + # expect response + rc, msg = response + if rc: + print "\nServer Response:\n\n" + json.dumps(msg) + "\n" + else: + print "\n*** " + msg + "\n" + + + + + def do_push_files(self, filepaths): """Pushes a custom file to be stored locally on T-Rex server.\ \nPush multiple files by specifying their path separated by ' ' (space).""" @@ -52,21 +98,25 @@ if __name__ == "__main__": parser.add_argument('-v', '--version', action='version', version='%(prog)s 1.0 \t (C) Cisco Systems Inc.\n') - # parser.add_argument("-t", "--trex-host", required = True, dest="trex_host", - # action="store", help="Specify the hostname or ip to connect with T-Rex server.", - # metavar="HOST" ) - # parser.add_argument("-p", "--trex-port", type=int, default = 8090, metavar="PORT", dest="trex_port", - # help="Select port on which the T-Rex server listens. Default port is 8090.", action="store") + parser.add_argument("-t", "--trex-host", required = True, dest="trex_host", + action="store", help="Specify the hostname or ip to connect with T-Rex server.", + metavar="HOST" ) + parser.add_argument("-p", "--trex-port", type=int, default = 8090, metavar="PORT", dest="trex_port", + help="Select port on which the T-Rex server listens. Default port is 8090.", action="store") # parser.add_argument("-m", "--maxhist", type=int, default = 100, metavar="SIZE", dest="hist_size", # help="Specify maximum history size saved at client side. Default size is 100.", action="store") + parser.add_argument("--virtual", dest="virtual", + action="store_true", + help="Switch ON virtual option at TRex client. Default is: OFF.", + default=False) parser.add_argument("--verbose", dest="verbose", action="store_true", - help="Switch ON verbose option at T-Rex client. Default is: OFF.", + help="Switch ON verbose option at TRex client. Default is: OFF.", default=False) args = parser.parse_args() try: - InteractiveStatelessTRex(args.verbose).cmdloop() + InteractiveStatelessTRex(**vars(args)).cmdloop() except KeyboardInterrupt: print termstyle.cyan('Bye Bye!') diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/AUTHORS b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/AUTHORS deleted file mode 100644 index dcefbef9..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/AUTHORS +++ /dev/null @@ -1,60 +0,0 @@ - -Original author ---------------- - -Dug Song - - -Contributors ------------- - -Timur Alperovich - radiotap module - -Nic Bellamy - HTTP header parsing fix - -the grugq - better RTP module - -David Helder - bug fixes - -Przemyslaw Karwasiecki - TABLE_DUMP in MRT module - -Reza Lotun - MetaPacket cleanup - -Jeff Nathan - bug fixes - -Tim Newsham - IPv6 bugfixing and improvements - -keisuke.nishimoto@gmail.com - Snoop file parser - -Jon Oberheide - STUN, H.225, TPKT, NTP, RIP, Diameter, SCTP, BGP, MRT, RX modules - -plotnikoff@gmail.com - handle dynamic imports from py2exe/freeze.py/zipped egg packages - -simdream@gmail.com - handle multiple cookie values in HTTP - -Owen Stephens - IP6 extension header support - -Robert Stone - Netflow and QQ modules - -Thomas Taranowski - dnet IP checksum bug on i386 - -Jirka Vejrazka - bug fixes - -Tim Yardley - DHCP definitions diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/CHANGES b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/CHANGES deleted file mode 100644 index a5f05121..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/CHANGES +++ /dev/null @@ -1,71 +0,0 @@ -dpkg-1.8: - - fix a typo in vrrp.py - - fix IPv4 and IPv6 packet to correctly handle zero payload length - - store cipher_suite as int in TLSServerHello to allow app-specific messages - - improve SSL parsing - -dpkt-1.7: - - handle dynamic imports from py2exe/freeze.py/zipped egg - packages, from plotnikoff - - decode Ethernet MPLS labels, Cisco ISL VLAN tags, 802.2 LLC fields - - handle multiply-defined HTTP headers from simdream - - add IPv6 extension header support (minus ESP) from Owen Stephens - - add radiotap module from Timur Alperovich - - add IEEE80211 module from Jon Oberheide - - add RFB module from Jon Oberheide - - fix IP6 checksum to include options - - rename 'as' to 'asn' field in BGP header - - fix transport-layer checksum in IP6 - - handle improper TCP header offset - - fix SSL typo - - handle malformed ICMP headers - - added RX module from Jon Oberheide - - fixed loopback module IP/IP6 decoding - - set transport-layer (TCP, UDP) checksum in IP - - MRT module fixes - - fix pcap.Writer timestamp calculation - -dpkt-1.6: - - DNS RR packing fixed - - added STUN, H.225, TPKT, NTP, RIP, Diameter, SCTP, - BGP, and MRT modules from Jon Oberheide - - new dpkt.NeedData exception - -dpkt-1.5: - - IP6 checksum fix - - __getitem__() interface to Packet (e.g. ip['src'] == ip.src) - - faster Ethernet, IP, PPP module loading - - support any endianness capture file in pcap module, - and export a pypcap-compatible Reader - - additional CDP definitions - - replaced rtp module with the grugq's version - - added QQ module from Robert Stone - - added gzip module - - added PPPoE module - - added RADIUS module - -dpkt-1.4: - - fix IP checksum bug on i386, caught by Thomas Taranowski - -dpkt-1.3: - - autoload IP, Ethernet dispatch tables - - IP6 bugfixes from Tim Newsham - - additional DHCP definitions from Tim Yardley - - HTTP bugfixes and abstraction (see SIP) - - RPC bugfixes - - added pypcap-compatible PcapReader - - added Linux libpcap "cooked" capture module - - added preliminary SSL module - - added SIP module - - added SCCP module - - added RTP module - - added Portmap module - -dpkt-1.2: - - changed license from GPL to BSD - - added DTP module - - added HTTP module - - added DNS RR decodes - - added enough PPP to decode PPTP GRE encapsulation - -# $Id: CHANGES 379 2006-07-27 05:23:19Z dugsong $ diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/LICENSE b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/LICENSE deleted file mode 100644 index 99d14371..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ - - Copyright (c) 2004 Dug Song - All rights reserved, all wrongs reversed. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. The names of the authors and copyright holders may not be used to - endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/MANIFEST.in b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/MANIFEST.in deleted file mode 100644 index 2d5c155a..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/MANIFEST.in +++ /dev/null @@ -1,7 +0,0 @@ - -include AUTHORS CHANGES README.rst LICENSE - -recursive-include docs * -prune docs/_build - -global-exclude __pycache__/* diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/PKG-INFO b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/PKG-INFO deleted file mode 100644 index baf82a26..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/PKG-INFO +++ /dev/null @@ -1,82 +0,0 @@ -Metadata-Version: 1.1 -Name: dpkt -Version: 1.8.6.2 -Summary: fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols -Home-page: http://dpkt.googlecode.com/ -Author: Dug Song -Author-email: dugsong@monkey.org -License: BSD -Description: - ==== - dpkt - ==== - - | |travis| |coveralls| |landscape| |downloads| - | |version| |wheel| |supported-versions| |supported-implementations| - - .. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg - :alt: Travis-CI Build Status - :target: https://travis-ci.org/kbandla/dpkt - - .. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg - :alt: Coverage Status - :target: https://coveralls.io/r/kbandla/dpkt - - .. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg - :target: https://landscape.io/github/kbandla/dpkt/master - :alt: Code Quality Status - - .. |version| image:: http://img.shields.io/pypi/v/dpkt.svg - :alt: PyPI Package latest release - :target: https://pypi.python.org/pypi/dpkt - - .. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg - :alt: PyPI Package monthly downloads - :target: https://pypi.python.org/pypi/dpkt - - .. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg - :alt: PyPI Wheel - :target: https://pypi.python.org/pypi/dpkt - - .. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg - :alt: Supported versions - :target: https://pypi.python.org/pypi/dpkt - - .. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg - :alt: Supported implementations - :target: https://pypi.python.org/pypi/dpkt - - Installation - ============ - - :: - - pip install dpkt - - Documentation - ============= - - https://dpkt.readthedocs.org/ - - About - ===== - - This code is based on `dpkt code `__ lead by Dug Song and - is now being maintained and improved by an extended set of - `contributors `__ - and `developers `__. - - LICENSE - ------- - - BSD 3-Clause - -Platform: UNKNOWN -Classifier: Development Status :: 4 - Beta -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: BSD License -Classifier: Natural Language :: English -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.md b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.md deleted file mode 100644 index fc637836..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.md +++ /dev/null @@ -1,39 +0,0 @@ -dpkt -==== - -**A fast, simple packet creation/parsing python module with definitions for the basic TCP/IP protocols.** - -[![travis](http://img.shields.io/travis/kbandla/dpkt.svg)](https://travis-ci.org/kbandla/dpkt) -[![coveralls](http://img.shields.io/coveralls/kbandla/dpkt.svg)](https://coveralls.io/r/kbandla/dpkt) -[![landscape](https://landscape.io/github/kbandla/dpkt/master/landscape.svg)](https://landscape.io/github/kbandla/dpkt/master) -[![version](http://img.shields.io/pypi/v/dpkt.svg)](https://pypi.python.org/pypi/dpkt) -[![downloads](https://img.shields.io/pypi/dm/dpkt.svg)](https://pypi.python.org/pypi/dpkt) - -[![wheel](https://img.shields.io/pypi/wheel/dpkt.svg)](https://pypi.python.org/pypi/dpkt) -[![supported-versions](https://img.shields.io/pypi/pyversions/dpkt.svg)](https://pypi.python.org/pypi/dpkt) -[![supported-implementations](https://img.shields.io/pypi/implementation/dpkt.svg)](https://pypi.python.org/pypi/dpkt) -[![On Deck](https://badge.waffle.io/kbandla/dpkt.svg?label=on%20deck&title=On%20Deck)](http://waffle.io/kbandla/dpkt) -[![In Progress](https://badge.waffle.io/kbandla/dpkt.svg?label=in%20progress&title=In%20Progress)](http://waffle.io/kbandla/dpkt) - -Installation ------------- - - pip install dpkt - -Documentation -------------- - -**[dpkt.readthedocs.org](https://dpkt.readthedocs.org/)** - - -About ------ - -This code is based on [dpkt code](https://code.google.com/p/dpkt/) lead -by Dug Song and is now being maintained and improved by an extended set of [contributors](https://dpkt.readthedocs.org/en/latest/authors.html) - and [developers](https://github.com/kbandla/dpkt/graphs/contributors). - - -#### LICENSE - -BSD 3-Clause \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.rst deleted file mode 100644 index b4e1b966..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/README.rst +++ /dev/null @@ -1,64 +0,0 @@ - -==== -dpkt -==== - -| |travis| |coveralls| |landscape| |downloads| -| |version| |wheel| |supported-versions| |supported-implementations| - -.. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg - :alt: Travis-CI Build Status - :target: https://travis-ci.org/kbandla/dpkt - -.. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg - :alt: Coverage Status - :target: https://coveralls.io/r/kbandla/dpkt - -.. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg - :target: https://landscape.io/github/kbandla/dpkt/master - :alt: Code Quality Status - -.. |version| image:: http://img.shields.io/pypi/v/dpkt.svg - :alt: PyPI Package latest release - :target: https://pypi.python.org/pypi/dpkt - -.. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg - :alt: PyPI Package monthly downloads - :target: https://pypi.python.org/pypi/dpkt - -.. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg - :alt: PyPI Wheel - :target: https://pypi.python.org/pypi/dpkt - -.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg - :alt: Supported versions - :target: https://pypi.python.org/pypi/dpkt - -.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg - :alt: Supported implementations - :target: https://pypi.python.org/pypi/dpkt - -Installation -============ - -:: - - pip install dpkt - -Documentation -============= - -https://dpkt.readthedocs.org/ - -About -===== - -This code is based on `dpkt code `__ lead by Dug Song and -is now being maintained and improved by an extended set of -`contributors `__ -and `developers `__. - -LICENSE -------- - -BSD 3-Clause diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/Makefile b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/Makefile deleted file mode 100644 index 2687c750..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/Makefile +++ /dev/null @@ -1,153 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/pyspotify.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/pyspotify.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/pyspotify" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/pyspotify" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/api_auto.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/api_auto.rst deleted file mode 100644 index 3837c903..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/api_auto.rst +++ /dev/null @@ -1,545 +0,0 @@ - -dpkt.ah module --------------- - -.. automodule:: dpkt.ah - :members: - :undoc-members: - :show-inheritance: - -dpkt.aim module ---------------- - -.. automodule:: dpkt.aim - :members: - :undoc-members: - :show-inheritance: - -dpkt.aoe module ---------------- - -.. automodule:: dpkt.aoe - :members: - :undoc-members: - :show-inheritance: - -dpkt.aoeata module ------------------- - -.. automodule:: dpkt.aoeata - :members: - :undoc-members: - :show-inheritance: - -dpkt.aoecfg module ------------------- - -.. automodule:: dpkt.aoecfg - :members: - :undoc-members: - :show-inheritance: - -dpkt.arp module ---------------- - -.. automodule:: dpkt.arp - :members: - :undoc-members: - :show-inheritance: - -dpkt.asn1 module ----------------- - -.. automodule:: dpkt.asn1 - :members: - :undoc-members: - :show-inheritance: - -dpkt.bgp module ---------------- - -.. automodule:: dpkt.bgp - :members: - :undoc-members: - :show-inheritance: - -dpkt.cdp module ---------------- - -.. automodule:: dpkt.cdp - :members: - :undoc-members: - :show-inheritance: - -dpkt.crc32c module ------------------- - -.. automodule:: dpkt.crc32c - :members: - :undoc-members: - :show-inheritance: - -dpkt.decorators module ----------------------- - -.. automodule:: dpkt.decorators - :members: - :undoc-members: - :show-inheritance: - -dpkt.dhcp module ----------------- - -.. automodule:: dpkt.dhcp - :members: - :undoc-members: - :show-inheritance: - -dpkt.diameter module --------------------- - -.. automodule:: dpkt.diameter - :members: - :undoc-members: - :show-inheritance: - -dpkt.dns module ---------------- - -.. automodule:: dpkt.dns - :members: - :undoc-members: - :show-inheritance: - -dpkt.dpkt module ----------------- - -.. automodule:: dpkt.dpkt - :members: - :undoc-members: - :show-inheritance: - -dpkt.dtp module ---------------- - -.. automodule:: dpkt.dtp - :members: - :undoc-members: - :show-inheritance: - -dpkt.esp module ---------------- - -.. automodule:: dpkt.esp - :members: - :undoc-members: - :show-inheritance: - -dpkt.ethernet module --------------------- - -.. automodule:: dpkt.ethernet - :members: - :undoc-members: - :show-inheritance: - -dpkt.gre module ---------------- - -.. automodule:: dpkt.gre - :members: - :undoc-members: - :show-inheritance: - -dpkt.gzip module ----------------- - -.. automodule:: dpkt.gzip - :members: - :undoc-members: - :show-inheritance: - -dpkt.h225 module ----------------- - -.. automodule:: dpkt.h225 - :members: - :undoc-members: - :show-inheritance: - -dpkt.hsrp module ----------------- - -.. automodule:: dpkt.hsrp - :members: - :undoc-members: - :show-inheritance: - -dpkt.http module ----------------- - -.. automodule:: dpkt.http - :members: - :undoc-members: - :show-inheritance: - -dpkt.icmp module ----------------- - -.. automodule:: dpkt.icmp - :members: - :undoc-members: - :show-inheritance: - -dpkt.icmp6 module ------------------ - -.. automodule:: dpkt.icmp6 - :members: - :undoc-members: - :show-inheritance: - -dpkt.ieee80211 module ---------------------- - -.. automodule:: dpkt.ieee80211 - :members: - :undoc-members: - :show-inheritance: - -dpkt.igmp module ----------------- - -.. automodule:: dpkt.igmp - :members: - :undoc-members: - :show-inheritance: - -dpkt.ip module --------------- - -.. automodule:: dpkt.ip - :members: - :undoc-members: - :show-inheritance: - -dpkt.ip6 module ---------------- - -.. automodule:: dpkt.ip6 - :members: - :undoc-members: - :show-inheritance: - -dpkt.ipx module ---------------- - -.. automodule:: dpkt.ipx - :members: - :undoc-members: - :show-inheritance: - -dpkt.llc module ---------------- - -.. automodule:: dpkt.llc - :members: - :undoc-members: - :show-inheritance: - -dpkt.loopback module --------------------- - -.. automodule:: dpkt.loopback - :members: - :undoc-members: - :show-inheritance: - -dpkt.mrt module ---------------- - -.. automodule:: dpkt.mrt - :members: - :undoc-members: - :show-inheritance: - -dpkt.netbios module -------------------- - -.. automodule:: dpkt.netbios - :members: - :undoc-members: - :show-inheritance: - -dpkt.netflow module -------------------- - -.. automodule:: dpkt.netflow - :members: - :undoc-members: - :show-inheritance: - -dpkt.ntp module ---------------- - -.. automodule:: dpkt.ntp - :members: - :undoc-members: - :show-inheritance: - -dpkt.ospf module ----------------- - -.. automodule:: dpkt.ospf - :members: - :undoc-members: - :show-inheritance: - -dpkt.pcap module ----------------- - -.. automodule:: dpkt.pcap - :members: - :undoc-members: - :show-inheritance: - -dpkt.pim module ---------------- - -.. automodule:: dpkt.pim - :members: - :undoc-members: - :show-inheritance: - -dpkt.pmap module ----------------- - -.. automodule:: dpkt.pmap - :members: - :undoc-members: - :show-inheritance: - -dpkt.ppp module ---------------- - -.. automodule:: dpkt.ppp - :members: - :undoc-members: - :show-inheritance: - -dpkt.pppoe module ------------------ - -.. automodule:: dpkt.pppoe - :members: - :undoc-members: - :show-inheritance: - -dpkt.qq module --------------- - -.. automodule:: dpkt.qq - :members: - :undoc-members: - :show-inheritance: - -dpkt.radiotap module --------------------- - -.. automodule:: dpkt.radiotap - :members: - :undoc-members: - :show-inheritance: - -dpkt.radius module ------------------- - -.. automodule:: dpkt.radius - :members: - :undoc-members: - :show-inheritance: - -dpkt.rfb module ---------------- - -.. automodule:: dpkt.rfb - :members: - :undoc-members: - :show-inheritance: - -dpkt.rip module ---------------- - -.. automodule:: dpkt.rip - :members: - :undoc-members: - :show-inheritance: - -dpkt.rpc module ---------------- - -.. automodule:: dpkt.rpc - :members: - :undoc-members: - :show-inheritance: - -dpkt.rtp module ---------------- - -.. automodule:: dpkt.rtp - :members: - :undoc-members: - :show-inheritance: - -dpkt.rx module --------------- - -.. automodule:: dpkt.rx - :members: - :undoc-members: - :show-inheritance: - -dpkt.sccp module ----------------- - -.. automodule:: dpkt.sccp - :members: - :undoc-members: - :show-inheritance: - -dpkt.sctp module ----------------- - -.. automodule:: dpkt.sctp - :members: - :undoc-members: - :show-inheritance: - -dpkt.sip module ---------------- - -.. automodule:: dpkt.sip - :members: - :undoc-members: - :show-inheritance: - -dpkt.sll module ---------------- - -.. automodule:: dpkt.sll - :members: - :undoc-members: - :show-inheritance: - -dpkt.smb module ---------------- - -.. automodule:: dpkt.smb - :members: - :undoc-members: - :show-inheritance: - -dpkt.snoop module ------------------ - -.. automodule:: dpkt.snoop - :members: - :undoc-members: - :show-inheritance: - -dpkt.ssl module ---------------- - -.. automodule:: dpkt.ssl - :members: - :undoc-members: - :show-inheritance: - -dpkt.ssl_ciphersuites module ----------------------------- - -.. automodule:: dpkt.ssl_ciphersuites - :members: - :undoc-members: - :show-inheritance: - -dpkt.stp module ---------------- - -.. automodule:: dpkt.stp - :members: - :undoc-members: - :show-inheritance: - -dpkt.stun module ----------------- - -.. automodule:: dpkt.stun - :members: - :undoc-members: - :show-inheritance: - -dpkt.tcp module ---------------- - -.. automodule:: dpkt.tcp - :members: - :undoc-members: - :show-inheritance: - -dpkt.telnet module ------------------- - -.. automodule:: dpkt.telnet - :members: - :undoc-members: - :show-inheritance: - -dpkt.tftp module ----------------- - -.. automodule:: dpkt.tftp - :members: - :undoc-members: - :show-inheritance: - -dpkt.tns module ---------------- - -.. automodule:: dpkt.tns - :members: - :undoc-members: - :show-inheritance: - -dpkt.tpkt module ----------------- - -.. automodule:: dpkt.tpkt - :members: - :undoc-members: - :show-inheritance: - -dpkt.udp module ---------------- - -.. automodule:: dpkt.udp - :members: - :undoc-members: - :show-inheritance: - -dpkt.vrrp module ----------------- - -.. automodule:: dpkt.vrrp - :members: - :undoc-members: - :show-inheritance: - -dpkt.yahoo module ------------------ - -.. automodule:: dpkt.yahoo - :members: - :undoc-members: - :show-inheritance: - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/index.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/index.rst deleted file mode 100644 index 7d44785d..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/api/index.rst +++ /dev/null @@ -1,11 +0,0 @@ - -API Reference -============= -The dpkt API reference section is currently a work in progress, please have patience as we fill in and improve the documentation. - -**dpkt Modules** - -.. toctree:: - :maxdepth: 4 - - api_auto diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/authors.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/authors.rst deleted file mode 100644 index 238aa6bb..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/authors.rst +++ /dev/null @@ -1,7 +0,0 @@ -******* -Authors -******* - -.. include:: ../AUTHORS - -If you want to contribute to dpkt, see :doc:`contributing`. diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/badges.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/badges.rst deleted file mode 100644 index 906f8b7f..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/badges.rst +++ /dev/null @@ -1,41 +0,0 @@ - - -| |docs| |travis| |coveralls| |landscape| |version| -| |downloads| |wheel| |supported-versions| |supported-implementations| - -.. |docs| image:: https://readthedocs.org/projects/dpkt/badge/?style=flat - :target: https://readthedocs.org/projects/dpkt - :alt: Documentation Status - -.. |travis| image:: http://img.shields.io/travis/kbandla/dpkt/master.png?style=flat - :alt: Travis-CI Build Status - :target: https://travis-ci.org/kbandla/dpkt - -.. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt/master.png?style=flat - :alt: Coverage Status - :target: https://coveralls.io/r/kbandla/dpkt - -.. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg?style=flat - :target: https://landscape.io/github/kbandla/dpkt/master - :alt: Code Quality Status - -.. |version| image:: http://img.shields.io/pypi/v/dpkt.svg - :alt: PyPI Package latest release - :target: https://pypi.python.org/pypi/dpkt - -.. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg - :alt: PyPI Package monthly downloads - :target: https://pypi.python.org/pypi/dpkt - -.. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg - :alt: PyPI Wheel - :target: https://pypi.python.org/pypi/dpkt - -.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg - :alt: Supported versions - :target: https://pypi.python.org/pypi/dpkt - -.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg - :alt: Supported implementations - :target: https://pypi.python.org/pypi/dpkt - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/changelog.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/changelog.rst deleted file mode 100644 index ac7e2371..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/changelog.rst +++ /dev/null @@ -1,4 +0,0 @@ -********* -Changelog -********* - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/conf.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/conf.py deleted file mode 100644 index 6dfc9fc4..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/conf.py +++ /dev/null @@ -1,76 +0,0 @@ -# encoding: utf-8 - -"""dpkt documentation build configuration file""" - -from __future__ import unicode_literals - -import os -import re -import sys -import types -import mock - - -def get_version(filename): - init_py = open(filename).read() - metadata = dict(re.findall("__([a-z]+)__ = '([^']+)'", init_py)) - return metadata['version'] - - -# -- Workarounds to have autodoc generate API docs ---------------------------- - -sys.path.insert(0, os.path.abspath('..')) - - -# Mock any objects that we might need to -foo = mock.Mock() -foo.__version__ = '0.1.1' -sys.modules['foo'] = foo - - -# -- General configuration ---------------------------------------------------- -needs_sphinx = '1.0' -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.extlinks', - 'sphinx.ext.intersphinx', - 'sphinx.ext.viewcode', - 'sphinx.ext.autosummary', - 'sphinxcontrib.napoleon' -] - -templates_path = ['_templates'] -source_suffix = '.rst' -master_doc = 'index' - -project = 'dpkt' -copyright = '2009-2015 Dug Song and contributors' - -release = get_version('../dpkt/__init__.py') -version = '.'.join(release.split('.')[:2]) - -exclude_patterns = ['_build'] - -pygments_style = 'sphinx' - -modindex_common_prefix = ['dpkt.'] - -autodoc_default_flags = ['members', 'undoc-members', 'show-inheritance'] -autodoc_member_order = 'bysource' - - -# -- Options for HTML output -------------------------------------------------- -html_theme = 'default' -html_static_path = ['_static'] - -html_use_modindex = True -html_use_index = True -html_split_index = False -html_show_sourcelink = True - -htmlhelp_basename = 'dpkt' - -# -- Options for extlink extension -------------------------------------------- -extlinks = { - 'issue': ('https://github.com/kbandla/dpkt/issues/%s', '#'), -} diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/contributing.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/contributing.rst deleted file mode 100644 index cae4acfe..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/contributing.rst +++ /dev/null @@ -1,45 +0,0 @@ -============ -Contributing -============ - -Report a Bug or Make a Feature Request --------------------------------------- -Please go to the GitHub Issues page: https://github.com/kbandla/dpkt/issues. - -Checkout the Code ------------------ - -:: - - git clone https://github.com/kblandla/dpkt.git - - -Become a Developer ------------------- -dpkt uses the 'GitHub Flow' model: `GitHub Flow `_ - -- To work on something new, create a descriptively named branch off of master (ie: my-awesome) -- Commit to that branch locally and regularly push your work to the same named branch on the server -- When you need feedback or help, or you think the branch is ready for merging, open a pull request -- After someone else has reviewed and signed off on the feature, you can merge it into master - -Getting Started -~~~~~~~~~~~~~~~ - - Fork the repo on GitHub - - git clone git@github.com:your_name_here/dpkt.git - -New Feature or Bug -~~~~~~~~~~~~~~~~~~ - - :: - - $ git checkout -b my-awesome - $ git push -u origin my-awesome - $ ; git push - $ ; git push - $ tox (this will run all the tests) - - - Go to github and hit 'New pull request' - - Someone reviews it and says 'AOK' - - Merge the pull request (green button) - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/examples.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/examples.rst deleted file mode 100644 index d99a0c2f..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/examples.rst +++ /dev/null @@ -1,80 +0,0 @@ - -Examples -======== - -Examples in dpkt/examples -------------------------- - -print_packets.py -~~~~~~~~~~~~~~~~ -.. automodule:: examples.print_packets - -**Code Excerpt** - -.. code-block:: python - - # For each packet in the pcap process the contents - for timestamp, buf in pcap: - - # Print out the timestamp in UTC - print 'Timestamp: ', str(datetime.datetime.utcfromtimestamp(timestamp)) - - # Unpack the Ethernet frame (mac src/dst, ethertype) - eth = dpkt.ethernet.Ethernet(buf) - print 'Ethernet Frame: ', mac_addr(eth.src), mac_addr(eth.dst), eth.type - - # Make sure the Ethernet frame contains an IP packet - # EtherType (IP, ARP, PPPoE, IP6... see http://en.wikipedia.org/wiki/EtherType) - if eth.type != dpkt.ethernet.ETH_TYPE_IP: - print 'Non IP Packet type not supported %s\n' % eth.data.__class__.__name__ - continue - - # Now unpack the data within the Ethernet frame (the IP packet) - # Pulling out src, dst, length, fragment info, TTL, and Protocol - ip = eth.data - - # Pull out fragment information (flags and offset all packed into off field, so use bitmasks) - do_not_fragment = bool(ip.off & dpkt.ip.IP_DF) - more_fragments = bool(ip.off & dpkt.ip.IP_MF) - fragment_offset = ip.off & dpkt.ip.IP_OFFMASK - - # Print out the info - print 'IP: %s -> %s (len=%d ttl=%d DF=%d MF=%d offset=%d)\n' % \ - (ip_to_str(ip.src), ip_to_str(ip.dst), ip.len, ip.ttl, do_not_fragment, more_fragments, fragment_offset) - -**Example Output** - -.. code-block:: json - - Timestamp: 2004-05-13 10:17:07.311224 - Ethernet Frame: 00:00:01:00:00:00 fe:ff:20:00:01:00 2048 - IP: 145.254.160.237 -> 65.208.228.223 (len=48 ttl=128 DF=1 MF=0 offset=0) - - Timestamp: 2004-05-13 10:17:08.222534 - Ethernet Frame: fe:ff:20:00:01:00 00:00:01:00:00:00 2048 - IP: 65.208.228.223 -> 145.254.160.237 (len=48 ttl=47 DF=1 MF=0 offset=0) - - ... - - - -Jon Oberheide's Examples -------------------------- -[@jonoberheide's](https://twitter.com/jonoberheide) old examples still -apply: - -- `dpkt Tutorial #1: ICMP - Echo `__ -- `dpkt Tutorial #2: Parsing a PCAP - File `__ -- `dpkt Tutorial #3: dns - spoofing `__ -- `dpkt Tutorial #4: AS Paths from - MRT/BGP `__ - -Jeff Silverman Docs/Code ------------------------- -`Jeff Silverman `__ has some -`code `__ and -`documentation `__. - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/index.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/index.rst deleted file mode 100644 index 31ef9251..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/index.rst +++ /dev/null @@ -1,32 +0,0 @@ -dpkt -==== -.. include:: badges.rst -dpkt is a python module for fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols - - -Getting Started -=============== -.. toctree:: - :maxdepth: 2 - - installation - examples - -API Reference -============= -.. toctree:: - :maxdepth: 1 - - api/index - -About dpkt -========== -.. toctree:: - :maxdepth: 2 - - authors - changelog - plans - contributing - license - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/installation.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/installation.rst deleted file mode 100644 index 2c93001b..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/installation.rst +++ /dev/null @@ -1,21 +0,0 @@ -============ -Installation -============ - -DKPT is now available directly from pypi :) - -Install the Code ----------------- - -:: - - pip install dpkt - -Checkout the Code ------------------ - -:: - - git clone https://github.com/kblandla/dpkt.git - - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/license.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/license.rst deleted file mode 100644 index 56c72381..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/license.rst +++ /dev/null @@ -1,4 +0,0 @@ - -License -======= -BSD 3-Clause License, as the upstream project diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/plans.rst b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/plans.rst deleted file mode 100644 index a6b1ca35..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/plans.rst +++ /dev/null @@ -1,13 +0,0 @@ -***************** -Development plans -***************** - -Current plans -============= - -- Be Awesome - -Future plans -============ - -- Maintain the Awesome diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/requirements.txt b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/requirements.txt deleted file mode 100644 index 0e912345..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/docs/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -mock >= 1.0 -Sphinx >= 1.0 -sphinxcontrib-napoleon diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO deleted file mode 100644 index baf82a26..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO +++ /dev/null @@ -1,82 +0,0 @@ -Metadata-Version: 1.1 -Name: dpkt -Version: 1.8.6.2 -Summary: fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols -Home-page: http://dpkt.googlecode.com/ -Author: Dug Song -Author-email: dugsong@monkey.org -License: BSD -Description: - ==== - dpkt - ==== - - | |travis| |coveralls| |landscape| |downloads| - | |version| |wheel| |supported-versions| |supported-implementations| - - .. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg - :alt: Travis-CI Build Status - :target: https://travis-ci.org/kbandla/dpkt - - .. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg - :alt: Coverage Status - :target: https://coveralls.io/r/kbandla/dpkt - - .. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg - :target: https://landscape.io/github/kbandla/dpkt/master - :alt: Code Quality Status - - .. |version| image:: http://img.shields.io/pypi/v/dpkt.svg - :alt: PyPI Package latest release - :target: https://pypi.python.org/pypi/dpkt - - .. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg - :alt: PyPI Package monthly downloads - :target: https://pypi.python.org/pypi/dpkt - - .. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg - :alt: PyPI Wheel - :target: https://pypi.python.org/pypi/dpkt - - .. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg - :alt: Supported versions - :target: https://pypi.python.org/pypi/dpkt - - .. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg - :alt: Supported implementations - :target: https://pypi.python.org/pypi/dpkt - - Installation - ============ - - :: - - pip install dpkt - - Documentation - ============= - - https://dpkt.readthedocs.org/ - - About - ===== - - This code is based on `dpkt code `__ lead by Dug Song and - is now being maintained and improved by an extended set of - `contributors `__ - and `developers `__. - - LICENSE - ------- - - BSD 3-Clause - -Platform: UNKNOWN -Classifier: Development Status :: 4 - Beta -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: BSD License -Classifier: Natural Language :: English -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt deleted file mode 100644 index 8ac474c8..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt +++ /dev/null @@ -1,96 +0,0 @@ -AUTHORS -CHANGES -LICENSE -MANIFEST.in -README.md -README.rst -setup.cfg -setup.py -docs/Makefile -docs/authors.rst -docs/badges.rst -docs/changelog.rst -docs/conf.py -docs/contributing.rst -docs/examples.rst -docs/index.rst -docs/installation.rst -docs/license.rst -docs/plans.rst -docs/requirements.txt -docs/api/api_auto.rst -docs/api/index.rst -dpkt/__init__.py -dpkt/ah.py -dpkt/aim.py -dpkt/aoe.py -dpkt/aoeata.py -dpkt/aoecfg.py -dpkt/arp.py -dpkt/asn1.py -dpkt/bgp.py -dpkt/cdp.py -dpkt/crc32c.py -dpkt/decorators.py -dpkt/dhcp.py -dpkt/diameter.py -dpkt/dns.py -dpkt/dpkt.py -dpkt/dtp.py -dpkt/esp.py -dpkt/ethernet.py -dpkt/gre.py -dpkt/gzip.py -dpkt/h225.py -dpkt/hsrp.py -dpkt/http.py -dpkt/icmp.py -dpkt/icmp6.py -dpkt/ieee80211.py -dpkt/igmp.py -dpkt/ip.py -dpkt/ip6.py -dpkt/ipx.py -dpkt/llc.py -dpkt/loopback.py -dpkt/mrt.py -dpkt/netbios.py -dpkt/netflow.py -dpkt/ntp.py -dpkt/ospf.py -dpkt/pcap.py -dpkt/pim.py -dpkt/pmap.py -dpkt/ppp.py -dpkt/pppoe.py -dpkt/qq.py -dpkt/radiotap.py -dpkt/radius.py -dpkt/rfb.py -dpkt/rip.py -dpkt/rpc.py -dpkt/rtp.py -dpkt/rx.py -dpkt/sccp.py -dpkt/sctp.py -dpkt/sip.py -dpkt/sll.py -dpkt/smb.py -dpkt/snoop.py -dpkt/ssl.py -dpkt/ssl_ciphersuites.py -dpkt/stp.py -dpkt/stun.py -dpkt/tcp.py -dpkt/telnet.py -dpkt/tftp.py -dpkt/tns.py -dpkt/tpkt.py -dpkt/udp.py -dpkt/vrrp.py -dpkt/yahoo.py -dpkt.egg-info/PKG-INFO -dpkt.egg-info/SOURCES.txt -dpkt.egg-info/dependency_links.txt -dpkt.egg-info/not-zip-safe -dpkt.egg-info/top_level.txt \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt deleted file mode 100644 index 8b137891..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe deleted file mode 100644 index 8b137891..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt deleted file mode 100644 index 4daab81a..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -dpkt diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/__init__.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/__init__.py deleted file mode 100644 index 09d28fb3..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/__init__.py +++ /dev/null @@ -1,71 +0,0 @@ -"""fast, simple packet creation and parsing.""" - -__author__ = 'Dug Song' -__author_email__ = 'dugsong@monkey.org' -__license__ = 'BSD' -__url__ = 'http://dpkt.googlecode.com/' -__version__ = '1.8.6.2' - -from dpkt import * - -import ah -import aoe -import aim -import arp -import asn1 -import bgp -import cdp -import dhcp -import diameter -import dns -import dtp -import esp -import ethernet -import gre -import gzip -import h225 -import hsrp -import http -import icmp -import icmp6 -import ieee80211 -import igmp -import ip -import ip6 -import ipx -import llc -import loopback -import mrt -import netbios -import netflow -import ntp -import ospf -import pcap -import pim -import pmap -import ppp -import pppoe -import qq -import radiotap -import radius -import rfb -import rip -import rpc -import rtp -import rx -import sccp -import sctp -import sip -import sll -import smb -import ssl -import stp -import stun -import tcp -import telnet -import tftp -import tns -import tpkt -import udp -import vrrp -import yahoo diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ah.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ah.py deleted file mode 100644 index 5ad29ad5..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ah.py +++ /dev/null @@ -1,35 +0,0 @@ -# $Id: ah.py 34 2007-01-28 07:54:20Z dugsong $ -# -*- coding: utf-8 -*- - -"""Authentication Header.""" - -import dpkt - - -class AH(dpkt.Packet): - __hdr__ = ( - ('nxt', 'B', 0), - ('len', 'B', 0), # payload length - ('rsvd', 'H', 0), - ('spi', 'I', 0), - ('seq', 'I', 0) - ) - auth = '' - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.auth = self.data[:self.len] - buf = self.data[self.len:] - import ip - - try: - self.data = ip.IP.get_proto(self.nxt)(buf) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - self.data = buf - - def __len__(self): - return self.__hdr_len__ + len(self.auth) + len(self.data) - - def __str__(self): - return self.pack_hdr() + str(self.auth) + str(self.data) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aim.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aim.py deleted file mode 100644 index 8250d69e..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aim.py +++ /dev/null @@ -1,52 +0,0 @@ -# $Id: aim.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- - -"""AOL Instant Messenger.""" - -import dpkt -import struct - -# OSCAR: http://iserverd1.khstu.ru/oscar/ - - -class FLAP(dpkt.Packet): - __hdr__ = ( - ('ast', 'B', 0x2a), # '*' - ('type', 'B', 0), - ('seq', 'H', 0), - ('len', 'H', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.ast != 0x2a: - raise dpkt.UnpackError('invalid FLAP header') - if len(self.data) < self.len: - raise dpkt.NeedData, '%d left, %d needed' % (len(self.data), self.len) - - -class SNAC(dpkt.Packet): - __hdr__ = ( - ('family', 'H', 0), - ('subtype', 'H', 0), - ('flags', 'H', 0), - ('reqid', 'I', 0) - ) - - -def tlv(buf): - n = 4 - try: - t, l = struct.unpack('>HH', buf[:n]) - except struct.error: - raise dpkt.UnpackError - v = buf[n:n + l] - if len(v) < l: - raise dpkt.NeedData - buf = buf[n + l:] - return t, l, v, buf - -# TOC 1.0: http://jamwt.com/Py-TOC/PROTOCOL - -# TOC 2.0: http://www.firestuff.org/projects/firetalk/doc/toc2.txt - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoe.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoe.py deleted file mode 100644 index 8fcf7c63..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoe.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -"""ATA over Ethernet Protocol.""" - -import struct -import dpkt -from decorators import deprecated - - -class AOE(dpkt.Packet): - __hdr__ = ( - ('ver_fl', 'B', 0x10), - ('err', 'B', 0), - ('maj', 'H', 0), - ('min', 'B', 0), - ('cmd', 'B', 0), - ('tag', 'I', 0), - ) - _cmdsw = {} - - @property - def ver(self): return self.ver_fl >> 4 - - @ver.setter - def ver(self, ver): self.ver_fl = (ver << 4) | (self.ver_fl & 0xf) - - @property - def fl(self): return self.ver_fl & 0xf - - @fl.setter - def fl(self, fl): self.ver_fl = (self.ver_fl & 0xf0) | fl - - @classmethod - def set_cmd(cls, cmd, pktclass): - cls._cmdsw[cmd] = pktclass - - @classmethod - def get_cmd(cls, cmd): - return cls._cmdsw[cmd] - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - try: - self.data = self._cmdsw[self.cmd](self.data) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, struct.error, dpkt.UnpackError): - pass - - def pack_hdr(self): - try: - return dpkt.Packet.pack_hdr(self) - except struct.error, e: - raise dpkt.PackError(str(e)) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_ver(self): return self.ver - - @deprecated - def _set_ver(self, ver): self.ver = ver - - @deprecated - def _get_fl(self): return self.fl - - @deprecated - def _set_fl(self, fl): self.fl = fl - # ================================================= - - - -AOE_CMD_ATA = 0 -AOE_CMD_CFG = 1 -AOE_FLAG_RSP = 1 << 3 - - -def __load_cmds(): - prefix = 'AOE_CMD_' - g = globals() - for k, v in g.iteritems(): - if k.startswith(prefix): - name = 'aoe' + k[len(prefix):].lower() - try: - mod = __import__(name, g) - except ImportError: - continue - AOE.set_cmd(v, getattr(mod, name.upper())) - - -if not AOE._cmdsw: - __load_cmds() diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoeata.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoeata.py deleted file mode 100644 index 1be917d3..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoeata.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -"""ATA over Ethernet ATA command""" - -import dpkt - -ATA_DEVICE_IDENTIFY = 0xec - - -class AOEATA(dpkt.Packet): - __hdr__ = ( - ('aflags', 'B', 0), - ('errfeat', 'B', 0), - ('scnt', 'B', 0), - ('cmdstat', 'B', ATA_DEVICE_IDENTIFY), - ('lba0', 'B', 0), - ('lba1', 'B', 0), - ('lba2', 'B', 0), - ('lba3', 'B', 0), - ('lba4', 'B', 0), - ('lba5', 'B', 0), - ('res', 'H', 0), - ) - - # XXX: in unpack, switch on ATA command like icmp does on type - - -def test_aoeata(): - s = '\x03\x0a\x6b\x19\x00\x00\x00\x00\x45\x00\x00\x28\x94\x1f\x00\x00\xe3\x06\x99\xb4\x23\x2b\x24\x00\xde\x8e\x84\x42\xab\xd1\x00\x50\x00\x35\xe1\x29\x20\xd9\x00\x00\x00\x22\x9b\xf0\xe2\x04\x65\x6b' - aoeata = AOEATA(s) - assert (str(aoeata) == s) - - -if __name__ == '__main__': - test_aoeata() - print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoecfg.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoecfg.py deleted file mode 100644 index 7643eddf..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/aoecfg.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -"""ATA over Ethernet ATA command""" - -import dpkt - - -class AOECFG(dpkt.Packet): - __hdr__ = ( - ('bufcnt', 'H', 0), - ('fwver', 'H', 0), - ('scnt', 'B', 0), - ('aoeccmd', 'B', 0), - ('cslen', 'H', 0), - ) - - -def test_aoecfg(): - s = '\x01\x02\x03\x04\x05\x06\x11\x12\x13\x14\x15\x16\x88\xa2\x10\x00\x00\x01\x02\x01\x80\x00\x00\x00\x12\x34\x00\x00\x00\x00\x04\x00' + '\0xed' * 1024 - aoecfg = AOECFG(s[14 + 10:]) - assert (aoecfg.bufcnt == 0x1234) - - -if __name__ == '__main__': - test_aoecfg() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/arp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/arp.py deleted file mode 100644 index a6ae62f4..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/arp.py +++ /dev/null @@ -1,32 +0,0 @@ -# $Id: arp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Address Resolution Protocol.""" - -import dpkt - -# Hardware address format -ARP_HRD_ETH = 0x0001 # ethernet hardware -ARP_HRD_IEEE802 = 0x0006 # IEEE 802 hardware - -# Protocol address format -ARP_PRO_IP = 0x0800 # IP protocol - -# ARP operation -ARP_OP_REQUEST = 1 # request to resolve ha given pa -ARP_OP_REPLY = 2 # response giving hardware address -ARP_OP_REVREQUEST = 3 # request to resolve pa given ha -ARP_OP_REVREPLY = 4 # response giving protocol address - - -class ARP(dpkt.Packet): - __hdr__ = ( - ('hrd', 'H', ARP_HRD_ETH), - ('pro', 'H', ARP_PRO_IP), - ('hln', 'B', 6), # hardware address length - ('pln', 'B', 4), # protocol address length - ('op', 'H', ARP_OP_REQUEST), - ('sha', '6s', ''), - ('spa', '4s', ''), - ('tha', '6s', ''), - ('tpa', '4s', '') - ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/asn1.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/asn1.py deleted file mode 100644 index 7acae041..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/asn1.py +++ /dev/null @@ -1,121 +0,0 @@ -# $Id: asn1.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Abstract Syntax Notation #1.""" - -import struct -import time -import dpkt - -# Type class -CLASSMASK = 0xc0 -UNIVERSAL = 0x00 -APPLICATION = 0x40 -CONTEXT = 0x80 -PRIVATE = 0xc0 - -# Constructed (vs. primitive) -CONSTRUCTED = 0x20 - -# Universal-class tags -TAGMASK = 0x1f -INTEGER = 2 -BIT_STRING = 3 # arbitrary bit string -OCTET_STRING = 4 # arbitrary octet string -NULL = 5 -OID = 6 # object identifier -SEQUENCE = 16 # ordered collection of types -SET = 17 # unordered collection of types -PRINT_STRING = 19 # printable string -T61_STRING = 20 # T.61 (8-bit) character string -IA5_STRING = 22 # ASCII -UTC_TIME = 23 - - -def utctime(buf): - """Convert ASN.1 UTCTime string to UTC float.""" - yy = int(buf[:2]) - mn = int(buf[2:4]) - dd = int(buf[4:6]) - hh = int(buf[6:8]) - mm = int(buf[8:10]) - try: - ss = int(buf[10:12]) - buf = buf[12:] - except TypeError: - ss = 0 - buf = buf[10:] - if buf[0] == '+': - hh -= int(buf[1:3]) - mm -= int(buf[3:5]) - elif buf[0] == '-': - hh += int(buf[1:3]) - mm += int(buf[3:5]) - return time.mktime((2000 + yy, mn, dd, hh, mm, ss, 0, 0, 0)) - - -def decode(buf): - """Sleazy ASN.1 decoder. - Return list of (id, value) tuples from ASN.1 BER/DER encoded buffer. - """ - msg = [] - while buf: - t = ord(buf[0]) - constructed = t & CONSTRUCTED - tag = t & TAGMASK - l = ord(buf[1]) - c = 0 - if constructed and l == 128: - # XXX - constructed, indefinite length - msg.append((t, decode(buf[2:]))) - elif l >= 128: - c = l & 127 - if c == 1: - l = ord(buf[2]) - elif c == 2: - l = struct.unpack('>H', buf[2:4])[0] - elif c == 3: - l = struct.unpack('>I', buf[1:5])[0] & 0xfff - c = 2 - elif c == 4: - l = struct.unpack('>I', buf[2:6])[0] - else: - # XXX - can be up to 127 bytes, but... - raise dpkt.UnpackError('excessive long-form ASN.1 length %d' % l) - - # Skip type, length - buf = buf[2 + c:] - - # Parse content - if constructed: - msg.append((t, decode(buf))) - elif tag == INTEGER: - if l == 0: - n = 0 - elif l == 1: - n = ord(buf[0]) - elif l == 2: - n = struct.unpack('>H', buf[:2])[0] - elif l == 3: - n = struct.unpack('>I', buf[:4])[0] >> 8 - elif l == 4: - n = struct.unpack('>I', buf[:4])[0] - else: - raise dpkt.UnpackError('excessive integer length > %d bytes' % l) - msg.append((t, n)) - elif tag == UTC_TIME: - msg.append((t, utctime(buf[:l]))) - else: - msg.append((t, buf[:l])) - - # Skip content - buf = buf[l:] - return msg - - -def test_asn1(): - s = '0\x82\x02Q\x02\x01\x0bc\x82\x02J\x04xcn=Douglas J Song 1, ou=Information Technology Division, ou=Faculty and Staff, ou=People, o=University of Michigan, c=US\n\x01\x00\n\x01\x03\x02\x01\x00\x02\x01\x00\x01\x01\x00\x87\x0bobjectclass0\x82\x01\xb0\x04\rmemberOfGroup\x04\x03acl\x04\x02cn\x04\x05title\x04\rpostalAddress\x04\x0ftelephoneNumber\x04\x04mail\x04\x06member\x04\thomePhone\x04\x11homePostalAddress\x04\x0bobjectClass\x04\x0bdescription\x04\x18facsimileTelephoneNumber\x04\x05pager\x04\x03uid\x04\x0cuserPassword\x04\x08joinable\x04\x10associatedDomain\x04\x05owner\x04\x0erfc822ErrorsTo\x04\x08ErrorsTo\x04\x10rfc822RequestsTo\x04\nRequestsTo\x04\tmoderator\x04\nlabeledURL\x04\nonVacation\x04\x0fvacationMessage\x04\x05drink\x04\x0elastModifiedBy\x04\x10lastModifiedTime\x04\rmodifiersname\x04\x0fmodifytimestamp\x04\x0ccreatorsname\x04\x0fcreatetimestamp' - assert (decode(s) == [(48, [(2, 11), (99, [(4, 'cn=Douglas J Song 1, ou=Information Technology Division, ou=Faculty and Staff, ou=People, o=University of Michigan, c=US'), (10, '\x00'), (10, '\x03'), (2, 0), (2, 0), (1, '\x00'), (135, 'objectclass'), (48, [(4, 'memberOfGroup'), (4, 'acl'), (4, 'cn'), (4, 'title'), (4, 'postalAddress'), (4, 'telephoneNumber'), (4, 'mail'), (4, 'member'), (4, 'homePhone'), (4, 'homePostalAddress'), (4, 'objectClass'), (4, 'description'), (4, 'facsimileTelephoneNumber'), (4, 'pager'), (4, 'uid'), (4, 'userPassword'), (4, 'joinable'), (4, 'associatedDomain'), (4, 'owner'), (4, 'rfc822ErrorsTo'), (4, 'ErrorsTo'), (4, 'rfc822RequestsTo'), (4, 'RequestsTo'), (4, 'moderator'), (4, 'labeledURL'), (4, 'onVacation'), (4, 'vacationMessage'), (4, 'drink'), (4, 'lastModifiedBy'), (4, 'lastModifiedTime'), (4, 'modifiersname'), (4, 'modifytimestamp'), (4, 'creatorsname'), (4, 'createtimestamp')])])])]) - -if __name__ == '__main__': - test_asn1() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/bgp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/bgp.py deleted file mode 100644 index 7439a0e3..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/bgp.py +++ /dev/null @@ -1,789 +0,0 @@ -# $Id: bgp.py 76 2011-01-06 15:51:30Z dugsong $ -# -*- coding: utf-8 -*- -"""Border Gateway Protocol.""" - -import struct -import socket -import dpkt -from decorators import deprecated - - -# Border Gateway Protocol 4 - RFC 4271 -# Communities Attribute - RFC 1997 -# Capabilities - RFC 3392 -# Route Refresh - RFC 2918 -# Route Reflection - RFC 4456 -# Confederations - RFC 3065 -# Cease Subcodes - RFC 4486 -# NOPEER Community - RFC 3765 -# Multiprotocol Extensions - 2858 - -# Message Types -OPEN = 1 -UPDATE = 2 -NOTIFICATION = 3 -KEEPALIVE = 4 -ROUTE_REFRESH = 5 - -# Attribute Types -ORIGIN = 1 -AS_PATH = 2 -NEXT_HOP = 3 -MULTI_EXIT_DISC = 4 -LOCAL_PREF = 5 -ATOMIC_AGGREGATE = 6 -AGGREGATOR = 7 -COMMUNITIES = 8 -ORIGINATOR_ID = 9 -CLUSTER_LIST = 10 -MP_REACH_NLRI = 14 -MP_UNREACH_NLRI = 15 - -# Origin Types -ORIGIN_IGP = 0 -ORIGIN_EGP = 1 -INCOMPLETE = 2 - -# AS Path Types -AS_SET = 1 -AS_SEQUENCE = 2 -AS_CONFED_SEQUENCE = 3 -AS_CONFED_SET = 4 - -# Reserved Communities Types -NO_EXPORT = 0xffffff01L -NO_ADVERTISE = 0xffffff02L -NO_EXPORT_SUBCONFED = 0xffffff03L -NO_PEER = 0xffffff04L - -# Common AFI types -AFI_IPV4 = 1 -AFI_IPV6 = 2 - -# Multiprotocol SAFI types -SAFI_UNICAST = 1 -SAFI_MULTICAST = 2 -SAFI_UNICAST_MULTICAST = 3 - -# OPEN Message Optional Parameters -AUTHENTICATION = 1 -CAPABILITY = 2 - -# Capability Types -CAP_MULTIPROTOCOL = 1 -CAP_ROUTE_REFRESH = 2 - -# NOTIFICATION Error Codes -MESSAGE_HEADER_ERROR = 1 -OPEN_MESSAGE_ERROR = 2 -UPDATE_MESSAGE_ERROR = 3 -HOLD_TIMER_EXPIRED = 4 -FSM_ERROR = 5 -CEASE = 6 - -# Message Header Error Subcodes -CONNECTION_NOT_SYNCHRONIZED = 1 -BAD_MESSAGE_LENGTH = 2 -BAD_MESSAGE_TYPE = 3 - -# OPEN Message Error Subcodes -UNSUPPORTED_VERSION_NUMBER = 1 -BAD_PEER_AS = 2 -BAD_BGP_IDENTIFIER = 3 -UNSUPPORTED_OPTIONAL_PARAMETER = 4 -AUTHENTICATION_FAILURE = 5 -UNACCEPTABLE_HOLD_TIME = 6 -UNSUPPORTED_CAPABILITY = 7 - -# UPDATE Message Error Subcodes -MALFORMED_ATTRIBUTE_LIST = 1 -UNRECOGNIZED_ATTRIBUTE = 2 -MISSING_ATTRIBUTE = 3 -ATTRIBUTE_FLAGS_ERROR = 4 -ATTRIBUTE_LENGTH_ERROR = 5 -INVALID_ORIGIN_ATTRIBUTE = 6 -AS_ROUTING_LOOP = 7 -INVALID_NEXT_HOP_ATTRIBUTE = 8 -OPTIONAL_ATTRIBUTE_ERROR = 9 -INVALID_NETWORK_FIELD = 10 -MALFORMED_AS_PATH = 11 - -# Cease Error Subcodes -MAX_NUMBER_OF_PREFIXES_REACHED = 1 -ADMINISTRATIVE_SHUTDOWN = 2 -PEER_DECONFIGURED = 3 -ADMINISTRATIVE_RESET = 4 -CONNECTION_REJECTED = 5 -OTHER_CONFIGURATION_CHANGE = 6 -CONNECTION_COLLISION_RESOLUTION = 7 -OUT_OF_RESOURCES = 8 - - -class BGP(dpkt.Packet): - __hdr__ = ( - ('marker', '16s', '\xff' * 16), - ('len', 'H', 0), - ('type', 'B', OPEN) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.len - self.__hdr_len__] - if self.type == OPEN: - self.data = self.open = self.Open(self.data) - elif self.type == UPDATE: - self.data = self.update = self.Update(self.data) - elif self.type == NOTIFICATION: - self.data = self.notifiation = self.Notification(self.data) - elif self.type == KEEPALIVE: - self.data = self.keepalive = self.Keepalive(self.data) - elif self.type == ROUTE_REFRESH: - self.data = self.route_refresh = self.RouteRefresh(self.data) - - class Open(dpkt.Packet): - __hdr__ = ( - ('v', 'B', 4), - ('asn', 'H', 0), - ('holdtime', 'H', 0), - ('identifier', 'I', 0), - ('param_len', 'B', 0) - ) - __hdr_defaults__ = { - 'parameters': [] - } - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - l = [] - plen = self.param_len - while plen > 0: - param = self.Parameter(self.data) - self.data = self.data[len(param):] - plen -= len(param) - l.append(param) - self.data = self.parameters = l - - def __len__(self): - return self.__hdr_len__ + sum(map(len, self.parameters)) - - def __str__(self): - params = ''.join(map(str, self.parameters)) - self.param_len = len(params) - return self.pack_hdr() + params - - class Parameter(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 0), - ('len', 'B', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.len] - - if self.type == AUTHENTICATION: - self.data = self.authentication = self.Authentication(self.data) - elif self.type == CAPABILITY: - self.data = self.capability = self.Capability(self.data) - - class Authentication(dpkt.Packet): - __hdr__ = ( - ('code', 'B', 0), - ) - - class Capability(dpkt.Packet): - __hdr__ = ( - ('code', 'B', 0), - ('len', 'B', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.len] - - class Update(dpkt.Packet): - __hdr_defaults__ = { - 'withdrawn': [], - 'attributes': [], - 'announced': [] - } - - def unpack(self, buf): - self.data = buf - - # Withdrawn Routes - wlen = struct.unpack('>H', self.data[:2])[0] - self.data = self.data[2:] - l = [] - while wlen > 0: - route = RouteIPV4(self.data) - self.data = self.data[len(route):] - wlen -= len(route) - l.append(route) - self.withdrawn = l - - # Path Attributes - plen = struct.unpack('>H', self.data[:2])[0] - self.data = self.data[2:] - l = [] - while plen > 0: - attr = self.Attribute(self.data) - self.data = self.data[len(attr):] - plen -= len(attr) - l.append(attr) - self.attributes = l - - # Announced Routes - l = [] - while self.data: - route = RouteIPV4(self.data) - self.data = self.data[len(route):] - l.append(route) - self.announced = l - - def __len__(self): - return 2 + sum(map(len, self.withdrawn)) + \ - 2 + sum(map(len, self.attributes)) + \ - sum(map(len, self.announced)) - - def __str__(self): - return struct.pack('>H', sum(map(len, self.withdrawn))) + \ - ''.join(map(str, self.withdrawn)) + \ - struct.pack('>H', sum(map(len, self.attributes))) + \ - ''.join(map(str, self.attributes)) + \ - ''.join(map(str, self.announced)) - - class Attribute(dpkt.Packet): - __hdr__ = ( - ('flags', 'B', 0), - ('type', 'B', 0) - ) - - @property - def optional(self): - return (self.flags >> 7) & 0x1 - - @optional.setter - def optional(self, o): - self.flags = (self.flags & ~0x80) | ((o & 0x1) << 7) - - @property - def transitive(self): - return (self.flags >> 6) & 0x1 - - @transitive.setter - def transitive(self, t): - self.flags = (self.flags & ~0x40) | ((t & 0x1) << 6) - - @property - def partial(self): - return (self.flags >> 5) & 0x1 - - @partial.setter - def partial(self, p): - self.flags = (self.flags & ~0x20) | ((p & 0x1) << 5) - - @property - def extended_length(self): - return (self.flags >> 4) & 0x1 - - @extended_length.setter - def extended_length(self, e): - self.flags = (self.flags & ~0x10) | ((e & 0x1) << 4) - - # Deprecated methods, will be removed in the future - # ====================================================== - @deprecated - def _get_o(self): - return self.optional - - @deprecated - def _set_o(self, o): - self.optional = o - - @deprecated - def _get_t(self): - return self.transitive - - @deprecated - def _set_t(self, t): - self.transitive = t - - @deprecated - def _get_p(self): - return self.partial - - @deprecated - def _set_p(self, p): - self.partial = p - - @deprecated - def _get_e(self): - return self.extended_length - - @deprecated - def _set_e(self, e): - self.extended_length = e - - # ====================================================== - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - - if self.extended_length: - self.len = struct.unpack('>H', self.data[:2])[0] - self.data = self.data[2:] - else: - self.len = struct.unpack('B', self.data[:1])[0] - self.data = self.data[1:] - - self.data = self.data[:self.len] - - if self.type == ORIGIN: - self.data = self.origin = self.Origin(self.data) - elif self.type == AS_PATH: - self.data = self.as_path = self.ASPath(self.data) - elif self.type == NEXT_HOP: - self.data = self.next_hop = self.NextHop(self.data) - elif self.type == MULTI_EXIT_DISC: - self.data = self.multi_exit_disc = self.MultiExitDisc(self.data) - elif self.type == LOCAL_PREF: - self.data = self.local_pref = self.LocalPref(self.data) - elif self.type == ATOMIC_AGGREGATE: - self.data = self.atomic_aggregate = self.AtomicAggregate(self.data) - elif self.type == AGGREGATOR: - self.data = self.aggregator = self.Aggregator(self.data) - elif self.type == COMMUNITIES: - self.data = self.communities = self.Communities(self.data) - elif self.type == ORIGINATOR_ID: - self.data = self.originator_id = self.OriginatorID(self.data) - elif self.type == CLUSTER_LIST: - self.data = self.cluster_list = self.ClusterList(self.data) - elif self.type == MP_REACH_NLRI: - self.data = self.mp_reach_nlri = self.MPReachNLRI(self.data) - elif self.type == MP_UNREACH_NLRI: - self.data = self.mp_unreach_nlri = self.MPUnreachNLRI(self.data) - - def __len__(self): - if self.extended_length: - attr_len = 2 - else: - attr_len = 1 - return self.__hdr_len__ + attr_len + len(self.data) - - def __str__(self): - if self.extended_length: - attr_len_str = struct.pack('>H', self.len) - else: - attr_len_str = struct.pack('B', self.len) - return self.pack_hdr() + attr_len_str + str(self.data) - - class Origin(dpkt.Packet): - __hdr__ = ( - ('type', 'B', ORIGIN_IGP), - ) - - class ASPath(dpkt.Packet): - __hdr_defaults__ = { - 'segments': [] - } - - def unpack(self, buf): - self.data = buf - l = [] - while self.data: - seg = self.ASPathSegment(self.data) - self.data = self.data[len(seg):] - l.append(seg) - self.data = self.segments = l - - def __len__(self): - return sum(map(len, self.data)) - - def __str__(self): - return ''.join(map(str, self.data)) - - class ASPathSegment(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 0), - ('len', 'B', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - l = [] - for i in range(self.len): - AS = struct.unpack('>H', self.data[:2])[0] - self.data = self.data[2:] - l.append(AS) - self.data = self.path = l - - def __len__(self): - return self.__hdr_len__ + 2 * len(self.path) - - def __str__(self): - as_str = '' - for AS in self.path: - as_str += struct.pack('>H', AS) - return self.pack_hdr() + as_str - - class NextHop(dpkt.Packet): - __hdr__ = ( - ('ip', 'I', 0), - ) - - class MultiExitDisc(dpkt.Packet): - __hdr__ = ( - ('value', 'I', 0), - ) - - class LocalPref(dpkt.Packet): - __hdr__ = ( - ('value', 'I', 0), - ) - - class AtomicAggregate(dpkt.Packet): - def unpack(self, buf): - pass - - def __len__(self): - return 0 - - def __str__(self): - return '' - - class Aggregator(dpkt.Packet): - __hdr__ = ( - ('asn', 'H', 0), - ('ip', 'I', 0) - ) - - class Communities(dpkt.Packet): - __hdr_defaults__ = { - 'list': [] - } - - def unpack(self, buf): - self.data = buf - l = [] - while self.data: - val = struct.unpack('>I', self.data[:4])[0] - if (0x00000000L <= val <= 0x0000ffffL) or (0xffff0000L <= val <= 0xffffffffL): - comm = self.ReservedCommunity(self.data[:4]) - else: - comm = self.Community(self.data[:4]) - self.data = self.data[len(comm):] - l.append(comm) - self.data = self.list = l - - def __len__(self): - return sum(map(len, self.data)) - - def __str__(self): - return ''.join(map(str, self.data)) - - class Community(dpkt.Packet): - __hdr__ = ( - ('asn', 'H', 0), - ('value', 'H', 0) - ) - - class ReservedCommunity(dpkt.Packet): - __hdr__ = ( - ('value', 'I', 0), - ) - - class OriginatorID(dpkt.Packet): - __hdr__ = ( - ('value', 'I', 0), - ) - - class ClusterList(dpkt.Packet): - __hdr_defaults__ = { - 'list': [] - } - - def unpack(self, buf): - self.data = buf - l = [] - while self.data: - id = struct.unpack('>I', self.data[:4])[0] - self.data = self.data[4:] - l.append(id) - self.data = self.list = l - - def __len__(self): - return 4 * len(self.list) - - def __str__(self): - cluster_str = '' - for val in self.list: - cluster_str += struct.pack('>I', val) - return cluster_str - - class MPReachNLRI(dpkt.Packet): - __hdr__ = ( - ('afi', 'H', AFI_IPV4), - ('safi', 'B', SAFI_UNICAST), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - - # Next Hop - nlen = struct.unpack('B', self.data[:1])[0] - self.data = self.data[1:] - self.next_hop = self.data[:nlen] - self.data = self.data[nlen:] - - # SNPAs - l = [] - num_snpas = struct.unpack('B', self.data[:1])[0] - self.data = self.data[1:] - for i in range(num_snpas): - snpa = self.SNPA(self.data) - self.data = self.data[len(snpa):] - l.append(snpa) - self.snpas = l - - if self.afi == AFI_IPV4: - Route = RouteIPV4 - elif self.afi == AFI_IPV6: - Route = RouteIPV6 - else: - Route = RouteGeneric - - # Announced Routes - l = [] - while self.data: - route = Route(self.data) - self.data = self.data[len(route):] - l.append(route) - self.data = self.announced = l - - def __len__(self): - return self.__hdr_len__ + \ - 1 + len(self.next_hop) + \ - 1 + sum(map(len, self.snpas)) + \ - sum(map(len, self.announced)) - - def __str__(self): - return self.pack_hdr() + \ - struct.pack('B', len(self.next_hop)) + \ - str(self.next_hop) + \ - struct.pack('B', len(self.snpas)) + \ - ''.join(map(str, self.snpas)) + \ - ''.join(map(str, self.announced)) - - class SNPA(object): - __hdr__ = ( - ('len', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:(self.len + 1) / 2] - - class MPUnreachNLRI(dpkt.Packet): - __hdr__ = ( - ('afi', 'H', AFI_IPV4), - ('safi', 'B', SAFI_UNICAST), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - - if self.afi == AFI_IPV4: - Route = RouteIPV4 - elif self.afi == AFI_IPV6: - Route = RouteIPV6 - else: - Route = RouteGeneric - - # Withdrawn Routes - l = [] - while self.data: - route = Route(self.data) - self.data = self.data[len(route):] - l.append(route) - self.data = self.withdrawn = l - - def __len__(self): - return self.__hdr_len__ + sum(map(len, self.data)) - - def __str__(self): - return self.pack_hdr() + ''.join(map(str, self.data)) - - class Notification(dpkt.Packet): - __hdr__ = ( - ('code', 'B', 0), - ('subcode', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.error = self.data - - class Keepalive(dpkt.Packet): - def unpack(self, buf): - pass - - def __len__(self): - return 0 - - def __str__(self): - return '' - - class RouteRefresh(dpkt.Packet): - __hdr__ = ( - ('afi', 'H', AFI_IPV4), - ('rsvd', 'B', 0), - ('safi', 'B', SAFI_UNICAST) - ) - - -class RouteGeneric(dpkt.Packet): - __hdr__ = ( - ('len', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.prefix = self.data[:(self.len + 7) / 8] - - -class RouteIPV4(dpkt.Packet): - __hdr__ = ( - ('len', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - tmp = self.data[:(self.len + 7) / 8] - tmp += (4 - len(tmp)) * '\x00' - self.data = self.prefix = tmp - - def __repr__(self): - cidr = '%s/%d' % (socket.inet_ntoa(self.prefix), self.len) - return '%s(%s)' % (self.__class__.__name__, cidr) - - def __len__(self): - return self.__hdr_len__ + (self.len + 7) / 8 - - def __str__(self): - return self.pack_hdr() + self.prefix[:(self.len + 7) / 8] - - -class RouteIPV6(dpkt.Packet): - __hdr__ = ( - ('len', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - tmp = self.data[:(self.len + 7) / 8] - tmp += (16 - len(tmp)) * '\x00' - self.data = self.prefix = tmp - - def __len__(self): - return self.__hdr_len__ + (self.len + 7) / 8 - - def __str__(self): - return self.pack_hdr() + self.prefix[:(self.len + 7) / 8] - - -__bgp1 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x13\x04' -__bgp2 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x63\x02\x00\x00\x00\x48\x40\x01\x01\x00\x40\x02\x0a\x01\x02\x01\xf4\x01\xf4\x02\x01\xfe\xbb\x40\x03\x04\xc0\xa8\x00\x0f\x40\x05\x04\x00\x00\x00\x64\x40\x06\x00\xc0\x07\x06\xfe\xba\xc0\xa8\x00\x0a\xc0\x08\x0c\xfe\xbf\x00\x01\x03\x16\x00\x04\x01\x54\x00\xfa\x80\x09\x04\xc0\xa8\x00\x0f\x80\x0a\x04\xc0\xa8\x00\xfa\x16\xc0\xa8\x04' -__bgp3 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x79\x02\x00\x00\x00\x62\x40\x01\x01\x00\x40\x02\x00\x40\x05\x04\x00\x00\x00\x64\xc0\x10\x08\x00\x02\x01\x2c\x00\x00\x01\x2c\xc0\x80\x24\x00\x00\xfd\xe9\x40\x01\x01\x00\x40\x02\x04\x02\x01\x15\xb3\x40\x05\x04\x00\x00\x00\x2c\x80\x09\x04\x16\x05\x05\x05\x80\x0a\x04\x16\x05\x05\x05\x90\x0e\x00\x1e\x00\x01\x80\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x04\x04\x04\x00\x60\x18\x77\x01\x00\x00\x01\xf4\x00\x00\x01\xf4\x85' -__bgp4 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x2d\x01\x04\x00\xed\x00\x5a\xc6\x6e\x83\x7d\x10\x02\x06\x01\x04\x00\x01\x00\x01\x02\x02\x80\x00\x02\x02\x02\x00' - - -def test_pack(): - assert (__bgp1 == str(BGP(__bgp1))) - assert (__bgp2 == str(BGP(__bgp2))) - assert (__bgp3 == str(BGP(__bgp3))) - assert (__bgp4 == str(BGP(__bgp4))) - - -def test_unpack(): - b1 = BGP(__bgp1) - assert (b1.len == 19) - assert (b1.type == KEEPALIVE) - assert (b1.keepalive is not None) - - b2 = BGP(__bgp2) - assert (b2.type == UPDATE) - assert (len(b2.update.withdrawn) == 0) - assert (len(b2.update.announced) == 1) - assert (len(b2.update.attributes) == 9) - a = b2.update.attributes[1] - assert (a.type == AS_PATH) - assert (a.len == 10) - assert (len(a.as_path.segments) == 2) - s = a.as_path.segments[0] - assert (s.type == AS_SET) - assert (s.len == 2) - assert (len(s.path) == 2) - assert (s.path[0] == 500) - - a = b2.update.attributes[6] - assert (a.type == COMMUNITIES) - assert (a.len == 12) - assert (len(a.communities.list) == 3) - c = a.communities.list[0] - assert (c.asn == 65215) - assert (c.value == 1) - r = b2.update.announced[0] - assert (r.len == 22) - assert (r.prefix == '\xc0\xa8\x04\x00') - - b3 = BGP(__bgp3) - assert (b3.type == UPDATE) - assert (len(b3.update.withdrawn) == 0) - assert (len(b3.update.announced) == 0) - assert (len(b3.update.attributes) == 6) - a = b3.update.attributes[0] - assert (a.optional == False) - assert (a.transitive == True) - assert (a.partial == False) - assert (a.extended_length == False) - assert (a.type == ORIGIN) - assert (a.len == 1) - o = a.origin - assert (o.type == ORIGIN_IGP) - a = b3.update.attributes[5] - assert (a.optional == True) - assert (a.transitive == False) - assert (a.partial == False) - assert (a.extended_length == True) - assert (a.type == MP_REACH_NLRI) - assert (a.len == 30) - m = a.mp_reach_nlri - assert (m.afi == AFI_IPV4) - assert (len(m.snpas) == 0) - assert (len(m.announced) == 1) - p = m.announced[0] - assert (p.len == 96) - - b4 = BGP(__bgp4) - assert (b4.len == 45) - assert (b4.type == OPEN) - assert (b4.open.asn == 237) - assert (b4.open.param_len == 16) - assert (len(b4.open.parameters) == 3) - p = b4.open.parameters[0] - assert (p.type == CAPABILITY) - assert (p.len == 6) - c = p.capability - assert (c.code == CAP_MULTIPROTOCOL) - assert (c.len == 4) - assert (c.data == '\x00\x01\x00\x01') - c = b4.open.parameters[2].capability - assert (c.code == CAP_ROUTE_REFRESH) - assert (c.len == 0) - - -if __name__ == '__main__': - test_pack() - test_unpack() - print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/cdp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/cdp.py deleted file mode 100644 index 43c6a564..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/cdp.py +++ /dev/null @@ -1,99 +0,0 @@ -# $Id: cdp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Cisco Discovery Protocol.""" - -import struct -import dpkt - -CDP_DEVID = 1 # string -CDP_ADDRESS = 2 -CDP_PORTID = 3 # string -CDP_CAPABILITIES = 4 # 32-bit bitmask -CDP_VERSION = 5 # string -CDP_PLATFORM = 6 # string -CDP_IPPREFIX = 7 - -CDP_VTP_MGMT_DOMAIN = 9 # string -CDP_NATIVE_VLAN = 10 # 16-bit integer -CDP_DUPLEX = 11 # 8-bit boolean -CDP_TRUST_BITMAP = 18 # 8-bit bitmask0x13 -CDP_UNTRUST_COS = 19 # 8-bit port -CDP_SYSTEM_NAME = 20 # string -CDP_SYSTEM_OID = 21 # 10-byte binary string -CDP_MGMT_ADDRESS = 22 # 32-bit number of addrs, Addresses -CDP_LOCATION = 23 # string - - -class CDP(dpkt.Packet): - __hdr__ = ( - ('version', 'B', 2), - ('ttl', 'B', 180), - ('sum', 'H', 0) - ) - - class Address(dpkt.Packet): - # XXX - only handle NLPID/IP for now - __hdr__ = ( - ('ptype', 'B', 1), # protocol type (NLPID) - ('plen', 'B', 1), # protocol length - ('p', 'B', 0xcc), # IP - ('alen', 'H', 4) # address length - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.alen] - - class TLV(dpkt.Packet): - __hdr__ = ( - ('type', 'H', 0), - ('len', 'H', 4) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.len - 4] - if self.type == CDP_ADDRESS: - n = struct.unpack('>I', self.data[:4])[0] - buf = self.data[4:] - l = [] - for i in range(n): - a = CDP.Address(buf) - l.append(a) - buf = buf[len(a):] - self.data = l - - def __len__(self): - if self.type == CDP_ADDRESS: - n = 4 + sum(map(len, self.data)) - else: - n = len(self.data) - return self.__hdr_len__ + n - - def __str__(self): - self.len = len(self) - if self.type == CDP_ADDRESS: - s = struct.pack('>I', len(self.data)) + \ - ''.join(map(str, self.data)) - else: - s = self.data - return self.pack_hdr() + s - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - buf = self.data - l = [] - while buf: - tlv = self.TLV(buf) - l.append(tlv) - buf = buf[len(tlv):] - self.data = l - - def __len__(self): - return self.__hdr_len__ + sum(map(len, self.data)) - - def __str__(self): - data = ''.join(map(str, self.data)) - if not self.sum: - self.sum = dpkt.in_cksum(self.pack_hdr() + data) - return self.pack_hdr() + data diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/crc32c.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/crc32c.py deleted file mode 100644 index aaf40e1f..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/crc32c.py +++ /dev/null @@ -1,83 +0,0 @@ -# $Id: crc32c.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -import array - -# CRC-32C Checksum -# http://tools.ietf.org/html/rfc3309 - -crc32c_table = ( - 0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L, 0xC79A971FL, - 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL, 0x8AD958CFL, 0x78B2DBCCL, - 0x6BE22838L, 0x9989AB3BL, 0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, - 0x5E133C24L, 0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL, - 0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L, 0x9A879FA0L, - 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L, 0x5D1D08BFL, 0xAF768BBCL, - 0xBC267848L, 0x4E4DFB4BL, 0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, - 0x33ED7D2AL, 0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L, - 0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L, 0x6DFE410EL, - 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL, 0x30E349B1L, 0xC288CAB2L, - 0xD1D83946L, 0x23B3BA45L, 0xF779DEAEL, 0x05125DADL, 0x1642AE59L, - 0xE4292D5AL, 0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL, - 0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L, 0x417B1DBCL, - 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L, 0x86E18AA3L, 0x748A09A0L, - 0x67DAFA54L, 0x95B17957L, 0xCBA24573L, 0x39C9C670L, 0x2A993584L, - 0xD8F2B687L, 0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L, - 0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L, 0x96BF4DCCL, - 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L, 0xDBFC821CL, 0x2997011FL, - 0x3AC7F2EBL, 0xC8AC71E8L, 0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, - 0x0F36E6F7L, 0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L, - 0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L, 0xEB1FCBADL, - 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L, 0x2C855CB2L, 0xDEEEDFB1L, - 0xCDBE2C45L, 0x3FD5AF46L, 0x7198540DL, 0x83F3D70EL, 0x90A324FAL, - 0x62C8A7F9L, 0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L, - 0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L, 0x3CDB9BDDL, - 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L, 0x82F63B78L, 0x709DB87BL, - 0x63CD4B8FL, 0x91A6C88CL, 0x456CAC67L, 0xB7072F64L, 0xA457DC90L, - 0x563C5F93L, 0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L, - 0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL, 0x92A8FC17L, - 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L, 0x55326B08L, 0xA759E80BL, - 0xB4091BFFL, 0x466298FCL, 0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, - 0x0B21572CL, 0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L, - 0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L, 0x65D122B9L, - 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL, 0x2892ED69L, 0xDAF96E6AL, - 0xC9A99D9EL, 0x3BC21E9DL, 0xEF087A76L, 0x1D63F975L, 0x0E330A81L, - 0xFC588982L, 0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL, - 0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L, 0x38CC2A06L, - 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L, 0xFF56BD19L, 0x0D3D3E1AL, - 0x1E6DCDEEL, 0xEC064EEDL, 0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, - 0xD0DDD530L, 0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL, - 0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL, 0x8ECEE914L, - 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L, 0xD3D3E1ABL, 0x21B862A8L, - 0x32E8915CL, 0xC083125FL, 0x144976B4L, 0xE622F5B7L, 0xF5720643L, - 0x07198540L, 0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L, - 0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL, 0xE330A81AL, - 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL, 0x24AA3F05L, 0xD6C1BC06L, - 0xC5914FF2L, 0x37FACCF1L, 0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, - 0x7AB90321L, 0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL, - 0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L, 0x34F4F86AL, - 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL, 0x79B737BAL, 0x8BDCB4B9L, - 0x988C474DL, 0x6AE7C44EL, 0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, - 0xAD7D5351L -) - - -def add(crc, buf): - buf = array.array('B', buf) - for b in buf: - crc = (crc >> 8) ^ crc32c_table[(crc ^ b) & 0xff] - return crc - - -def done(crc): - tmp = ~crc & 0xffffffffL - b0 = tmp & 0xff - b1 = (tmp >> 8) & 0xff - b2 = (tmp >> 16) & 0xff - b3 = (tmp >> 24) & 0xff - crc = (b0 << 24) | (b1 << 16) | (b2 << 8) | b3 - return crc - - -def cksum(buf): - """Return computed CRC-32c checksum.""" - return done(add(0xffffffffL, buf)) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/decorators.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/decorators.py deleted file mode 100644 index 08f78161..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/decorators.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- coding: utf-8 -*- -import warnings -from timeit import Timer -from test import pystone -from time import sleep - - -def decorator_with_args(decorator_to_enhance): - """ - This is decorator for decorator. It allows any decorator to get additional arguments - """ - def decorator_maker(*args, **kwargs): - def decorator_wrapper(func): - return decorator_to_enhance(func, *args, **kwargs) - return decorator_wrapper - return decorator_maker - - -def deprecated(deprecated_method): - def _deprecated(*args, **kwargs): - # Print only the first occurrence of the DeprecationWarning, regardless of location - warnings.simplefilter('once', DeprecationWarning) - # Display the deprecation warning message - warnings.warn("Call to deprecated method %s" % deprecated_method.__name__, - category=DeprecationWarning, stacklevel=2) - return deprecated_method(*args, **kwargs) # actually call the method - - return _deprecated - - -@decorator_with_args -def duration(function, repeat=10000): - def _duration(*args, **kwargs): - time = 0 - try: - time = Timer(lambda: function(*args, **kwargs)).timeit(repeat) - finally: - benchtime, pystones = pystone.pystones() - kstones = (pystones * time) / 1000 - print '%s : time = %f kstones = %f' % (function.__name__, time, kstones) - return function(*args, **kwargs) - - return _duration - - -class TestDeprecatedDecorator(object): - @deprecated - def deprecated_decorator(self): - return - - def test_deprecated_decorator(self): - import sys - from StringIO import StringIO - - saved_stderr = sys.stderr - try: - out = StringIO() - sys.stderr = out - self.deprecated_decorator() - assert ('DeprecationWarning: Call to deprecated method deprecated_decorator' in out.getvalue()) - # 'in' because message contains the filename, line, etc - finally: - sys.stderr = saved_stderr - - -class TestDurationDecorator(object): - @duration(1) - def duration_decorator(self): - sleep(0.05) - return - - def test_duration_decorator(self): - import sys - import re - from StringIO import StringIO - - saved_stdout = sys.stdout - try: - out = StringIO() - sys.stdout = out - self.duration_decorator() - assert (re.match('((.+?[0-9]+\.[0-9]+)\s?){2}', out.getvalue())) - finally: - sys.stdout = saved_stdout - -if __name__ == '__main__': - a = TestDeprecatedDecorator() - a.test_deprecated_decorator() - a = TestDurationDecorator() - a.test_duration_decorator() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dhcp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dhcp.py deleted file mode 100644 index 5332a1fc..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dhcp.py +++ /dev/null @@ -1,169 +0,0 @@ -# $Id: dhcp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Dynamic Host Configuration Protocol.""" - -import arp -import dpkt - -DHCP_OP_REQUEST = 1 -DHCP_OP_REPLY = 2 - -DHCP_MAGIC = 0x63825363 - -# DHCP option codes -DHCP_OPT_NETMASK = 1 # I: subnet mask -DHCP_OPT_TIMEOFFSET = 2 -DHCP_OPT_ROUTER = 3 # s: list of router ips -DHCP_OPT_TIMESERVER = 4 -DHCP_OPT_NAMESERVER = 5 -DHCP_OPT_DNS_SVRS = 6 # s: list of DNS servers -DHCP_OPT_LOGSERV = 7 -DHCP_OPT_COOKIESERV = 8 -DHCP_OPT_LPRSERV = 9 -DHCP_OPT_IMPSERV = 10 -DHCP_OPT_RESSERV = 11 -DHCP_OPT_HOSTNAME = 12 # s: client hostname -DHCP_OPT_BOOTFILESIZE = 13 -DHCP_OPT_DUMPFILE = 14 -DHCP_OPT_DOMAIN = 15 # s: domain name -DHCP_OPT_SWAPSERV = 16 -DHCP_OPT_ROOTPATH = 17 -DHCP_OPT_EXTENPATH = 18 -DHCP_OPT_IPFORWARD = 19 -DHCP_OPT_SRCROUTE = 20 -DHCP_OPT_POLICYFILTER = 21 -DHCP_OPT_MAXASMSIZE = 22 -DHCP_OPT_IPTTL = 23 -DHCP_OPT_MTUTIMEOUT = 24 -DHCP_OPT_MTUTABLE = 25 -DHCP_OPT_MTUSIZE = 26 -DHCP_OPT_LOCALSUBNETS = 27 -DHCP_OPT_BROADCASTADDR = 28 -DHCP_OPT_DOMASKDISCOV = 29 -DHCP_OPT_MASKSUPPLY = 30 -DHCP_OPT_DOROUTEDISC = 31 -DHCP_OPT_ROUTERSOLICIT = 32 -DHCP_OPT_STATICROUTE = 33 -DHCP_OPT_TRAILERENCAP = 34 -DHCP_OPT_ARPTIMEOUT = 35 -DHCP_OPT_ETHERENCAP = 36 -DHCP_OPT_TCPTTL = 37 -DHCP_OPT_TCPKEEPALIVE = 38 -DHCP_OPT_TCPALIVEGARBAGE = 39 -DHCP_OPT_NISDOMAIN = 40 -DHCP_OPT_NISSERVERS = 41 -DHCP_OPT_NISTIMESERV = 42 -DHCP_OPT_VENDSPECIFIC = 43 -DHCP_OPT_NBNS = 44 -DHCP_OPT_NBDD = 45 -DHCP_OPT_NBTCPIP = 46 -DHCP_OPT_NBTCPSCOPE = 47 -DHCP_OPT_XFONT = 48 -DHCP_OPT_XDISPLAYMGR = 49 -DHCP_OPT_REQ_IP = 50 # I: IP address -DHCP_OPT_LEASE_SEC = 51 # I: lease seconds -DHCP_OPT_OPTIONOVERLOAD = 52 -DHCP_OPT_MSGTYPE = 53 # B: message type -DHCP_OPT_SERVER_ID = 54 # I: server IP address -DHCP_OPT_PARAM_REQ = 55 # s: list of option codes -DHCP_OPT_MESSAGE = 56 -DHCP_OPT_MAXMSGSIZE = 57 -DHCP_OPT_RENEWTIME = 58 -DHCP_OPT_REBINDTIME = 59 -DHCP_OPT_VENDOR_ID = 60 # s: vendor class id -DHCP_OPT_CLIENT_ID = 61 # Bs: idtype, id (idtype 0: FQDN, idtype 1: MAC) -DHCP_OPT_NISPLUSDOMAIN = 64 -DHCP_OPT_NISPLUSSERVERS = 65 -DHCP_OPT_MOBILEIPAGENT = 68 -DHCP_OPT_SMTPSERVER = 69 -DHCP_OPT_POP3SERVER = 70 -DHCP_OPT_NNTPSERVER = 71 -DHCP_OPT_WWWSERVER = 72 -DHCP_OPT_FINGERSERVER = 73 -DHCP_OPT_IRCSERVER = 74 -DHCP_OPT_STSERVER = 75 -DHCP_OPT_STDASERVER = 76 - -# DHCP message type values -DHCPDISCOVER = 1 -DHCPOFFER = 2 -DHCPREQUEST = 3 -DHCPDECLINE = 4 -DHCPACK = 5 -DHCPNAK = 6 -DHCPRELEASE = 7 -DHCPINFORM = 8 - - -class DHCP(dpkt.Packet): - __hdr__ = ( - ('op', 'B', DHCP_OP_REQUEST), - ('hrd', 'B', arp.ARP_HRD_ETH), # just like ARP.hrd - ('hln', 'B', 6), # and ARP.hln - ('hops', 'B', 0), - ('xid', 'I', 0xdeadbeefL), - ('secs', 'H', 0), - ('flags', 'H', 0), - ('ciaddr', 'I', 0), - ('yiaddr', 'I', 0), - ('siaddr', 'I', 0), - ('giaddr', 'I', 0), - ('chaddr', '16s', 16 * '\x00'), - ('sname', '64s', 64 * '\x00'), - ('file', '128s', 128 * '\x00'), - ('magic', 'I', DHCP_MAGIC), - ) - opts = ( - (DHCP_OPT_MSGTYPE, chr(DHCPDISCOVER)), - (DHCP_OPT_PARAM_REQ, ''.join(map(chr, (DHCP_OPT_REQ_IP, - DHCP_OPT_ROUTER, - DHCP_OPT_NETMASK, - DHCP_OPT_DNS_SVRS)))) - ) # list of (type, data) tuples - - def __len__(self): - return self.__hdr_len__ + \ - sum([2 + len(o[1]) for o in self.opts]) + 1 + len(self.data) - - def __str__(self): - return self.pack_hdr() + self.pack_opts() + str(self.data) - - def pack_opts(self): - """Return packed options string.""" - if not self.opts: - return '' - l = [] - for t, data in self.opts: - l.append('%s%s%s' % (chr(t), chr(len(data)), data)) - l.append('\xff') - return ''.join(l) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.chaddr = self.chaddr[:self.hln] - buf = self.data - l = [] - while buf: - t = ord(buf[0]) - if t == 0xff: - buf = buf[1:] - break - elif t == 0: - buf = buf[1:] - else: - n = ord(buf[1]) - l.append((t, buf[2:2 + n])) - buf = buf[2 + n:] - self.opts = l - self.data = buf - - -def test_dhcp(): - s = '\x01\x01\x06\x00\xadS\xc8c\xb8\x87\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02U\x82\xf3\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Sc5\x01\x01\xfb\x01\x01=\x07\x01\x00\x02U\x82\xf3\xa62\x04\n\x00\x01e\x0c\tGuinevere<\x08MSFT 5.07\n\x01\x0f\x03\x06,./\x1f!+\xff\x00\x00\x00\x00\x00' - dhcp = DHCP(s) - assert (s == str(dhcp)) - - -if __name__ == '__main__': - test_dhcp() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/diameter.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/diameter.py deleted file mode 100644 index a6994276..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/diameter.py +++ /dev/null @@ -1,243 +0,0 @@ -# $Id: diameter.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Diameter.""" - -import struct -import dpkt -from decorators import deprecated - -# Diameter Base Protocol - RFC 3588 -# http://tools.ietf.org/html/rfc3588 - -# Request/Answer Command Codes -ABORT_SESSION = 274 -ACCOUTING = 271 -CAPABILITIES_EXCHANGE = 257 -DEVICE_WATCHDOG = 280 -DISCONNECT_PEER = 282 -RE_AUTH = 258 -SESSION_TERMINATION = 275 - - -class Diameter(dpkt.Packet): - __hdr__ = ( - ('v', 'B', 1), - ('len', '3s', 0), - ('flags', 'B', 0), - ('cmd', '3s', 0), - ('app_id', 'I', 0), - ('hop_id', 'I', 0), - ('end_id', 'I', 0) - ) - - @property - def request_flag(self): - return (self.flags >> 7) & 0x1 - - @request_flag.setter - def request_flag(self, r): - self.flags = (self.flags & ~0x80) | ((r & 0x1) << 7) - - @property - def proxiable_flag(self): - return (self.flags >> 6) & 0x1 - - @proxiable_flag.setter - def proxiable_flag(self, p): - self.flags = (self.flags & ~0x40) | ((p & 0x1) << 6) - - @property - def error_flag(self): - return (self.flags >> 5) & 0x1 - - @error_flag.setter - def error_flag(self, e): - self.flags = (self.flags & ~0x20) | ((e & 0x1) << 5) - - @property - def retransmit_flag(self): - return (self.flags >> 4) & 0x1 - - @retransmit_flag.setter - def retransmit_flag(self, t): - self.flags = (self.flags & ~0x10) | ((t & 0x1) << 4) - - # Deprecated methods, will be removed in the future - # ====================================================== - @deprecated - def _get_r(self): return self.request_flag - - @deprecated - def _set_r(self, r): self.request_flag = r - - @deprecated - def _get_p(self): return self.proxiable_flag - - @deprecated - def _set_p(self, p): self.proxiable_flag = p - - @deprecated - def _get_e(self): return self.error_flag - - @deprecated - def _set_e(self, e): self.error_flag = e - - @deprecated - def _get_t(self): return self.request_flag - - @deprecated - def _set_t(self, t): self.request_flag = t - - # ====================================================== - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.cmd = (ord(self.cmd[0]) << 16) | (ord(self.cmd[1]) << 8) | (ord(self.cmd[2])) - self.len = (ord(self.len[0]) << 16) | (ord(self.len[1]) << 8) | (ord(self.len[2])) - self.data = self.data[:self.len - self.__hdr_len__] - - l = [] - while self.data: - avp = AVP(self.data) - l.append(avp) - self.data = self.data[len(avp):] - self.data = self.avps = l - - def pack_hdr(self): - self.len = chr((self.len >> 16) & 0xff) + chr((self.len >> 8) & 0xff) + chr(self.len & 0xff) - self.cmd = chr((self.cmd >> 16) & 0xff) + chr((self.cmd >> 8) & 0xff) + chr(self.cmd & 0xff) - return dpkt.Packet.pack_hdr(self) - - def __len__(self): - return self.__hdr_len__ + sum(map(len, self.data)) - - def __str__(self): - return self.pack_hdr() + ''.join(map(str, self.data)) - - -class AVP(dpkt.Packet): - __hdr__ = ( - ('code', 'I', 0), - ('flags', 'B', 0), - ('len', '3s', 0), - ) - - @property - def vendor_flag(self): - return (self.flags >> 7) & 0x1 - - @vendor_flag.setter - def vendor_flag(self, v): - self.flags = (self.flags & ~0x80) | ((v & 0x1) << 7) - - @property - def mandatory_flag(self): - return (self.flags >> 6) & 0x1 - - @mandatory_flag.setter - def mandatory_flag(self, m): - self.flags = (self.flags & ~0x40) | ((m & 0x1) << 6) - - @property - def protected_flag(self): - return (self.flags >> 5) & 0x1 - - @protected_flag.setter - def protected_flag(self, p): - self.flags = (self.flags & ~0x20) | ((p & 0x1) << 5) - - # Deprecated methods, will be removed in the future - # ====================================================== - @deprecated - def _get_v(self): - return self.vendor_flag - - @deprecated - def _set_v(self, v): - self.vendor_flag = v - - @deprecated - def _get_m(self): - return self.mandatory_flag - - @deprecated - def _set_m(self, m): - self.mandatory_flag = m - - @deprecated - def _get_p(self): - return self.protected_flag - - @deprecated - def _set_p(self, p): - self.protected_flag = p - - # ====================================================== - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.len = (ord(self.len[0]) << 16) | (ord(self.len[1]) << 8) | (ord(self.len[2])) - - if self.vendor_flag: - self.vendor = struct.unpack('>I', self.data[:4])[0] - self.data = self.data[4:self.len - self.__hdr_len__] - else: - self.data = self.data[:self.len - self.__hdr_len__] - - def pack_hdr(self): - self.len = chr((self.len >> 16) & 0xff) + chr((self.len >> 8) & 0xff) + chr(self.len & 0xff) - data = dpkt.Packet.pack_hdr(self) - if self.vendor_flag: - data += struct.pack('>I', self.vendor) - return data - - def __len__(self): - length = self.__hdr_len__ + sum(map(len, self.data)) - if self.vendor_flag: - length += 4 - return length - - -__s = '\x01\x00\x00\x28\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x41\xc8\x00\x00\x00\x0c\x00\x00\x01\x08\x40\x00\x00\x0c\x68\x30\x30\x32\x00\x00\x01\x28\x40\x00\x00\x08' -__t = '\x01\x00\x00\x2c\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x41\xc8\x00\x00\x00\x0c\x00\x00\x01\x08\xc0\x00\x00\x10\xde\xad\xbe\xef\x68\x30\x30\x32\x00\x00\x01\x28\x40\x00\x00\x08' - - -def test_pack(): - d = Diameter(__s) - assert (__s == str(d)) - d = Diameter(__t) - assert (__t == str(d)) - - -def test_unpack(): - d = Diameter(__s) - assert (d.len == 40) - # assert (d.cmd == DEVICE_WATCHDOG_REQUEST) - assert (d.request_flag == 1) - assert (d.error_flag == 0) - assert (len(d.avps) == 2) - - avp = d.avps[0] - # assert (avp.code == ORIGIN_HOST) - assert (avp.mandatory_flag == 1) - assert (avp.vendor_flag == 0) - assert (avp.len == 12) - assert (len(avp) == 12) - assert (avp.data == '\x68\x30\x30\x32') - - # also test the optional vendor id support - d = Diameter(__t) - assert (d.len == 44) - avp = d.avps[0] - assert (avp.vendor_flag == 1) - assert (avp.len == 16) - assert (len(avp) == 16) - assert (avp.vendor == 3735928559) - assert (avp.data == '\x68\x30\x30\x32') - - -if __name__ == '__main__': - test_pack() - test_unpack() - print 'Tests Successful...' - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dns.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dns.py deleted file mode 100644 index d4d08e47..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dns.py +++ /dev/null @@ -1,462 +0,0 @@ -# $Id: dns.py 27 2006-11-21 01:22:52Z dahelder $ -# -*- coding: utf-8 -*- -"""Domain Name System.""" - -import struct -import dpkt -from decorators import deprecated - -DNS_Q = 0 -DNS_R = 1 - -# Opcodes -DNS_QUERY = 0 -DNS_IQUERY = 1 -DNS_STATUS = 2 -DNS_NOTIFY = 4 -DNS_UPDATE = 5 - -# Flags -DNS_CD = 0x0010 # checking disabled -DNS_AD = 0x0020 # authenticated data -DNS_Z = 0x0040 # unused -DNS_RA = 0x0080 # recursion available -DNS_RD = 0x0100 # recursion desired -DNS_TC = 0x0200 # truncated -DNS_AA = 0x0400 # authoritative answer -DNS_QR = 0x8000 # response ( query / response ) - -# Response codes -DNS_RCODE_NOERR = 0 -DNS_RCODE_FORMERR = 1 -DNS_RCODE_SERVFAIL = 2 -DNS_RCODE_NXDOMAIN = 3 -DNS_RCODE_NOTIMP = 4 -DNS_RCODE_REFUSED = 5 -DNS_RCODE_YXDOMAIN = 6 -DNS_RCODE_YXRRSET = 7 -DNS_RCODE_NXRRSET = 8 -DNS_RCODE_NOTAUTH = 9 -DNS_RCODE_NOTZONE = 10 - -# RR types -DNS_A = 1 -DNS_NS = 2 -DNS_CNAME = 5 -DNS_SOA = 6 -DNS_PTR = 12 -DNS_HINFO = 13 -DNS_MX = 15 -DNS_TXT = 16 -DNS_AAAA = 28 -DNS_SRV = 33 - -# RR classes -DNS_IN = 1 -DNS_CHAOS = 3 -DNS_HESIOD = 4 -DNS_ANY = 255 - - -def pack_name(name, off, label_ptrs): - if name: - labels = name.split('.') - else: - labels = [] - labels.append('') - buf = '' - for i, label in enumerate(labels): - key = '.'.join(labels[i:]).upper() - ptr = label_ptrs.get(key) - if not ptr: - if len(key) > 1: - ptr = off + len(buf) - if ptr < 0xc000: - label_ptrs[key] = ptr - i = len(label) - buf += chr(i) + label - else: - buf += struct.pack('>H', (0xc000 | ptr)) - break - return buf - - -def unpack_name(buf, off): - name = '' - saved_off = 0 - for _ in range(100): # XXX - n = ord(buf[off]) - if n == 0: - off += 1 - break - elif (n & 0xc0) == 0xc0: - ptr = struct.unpack('>H', buf[off:off + 2])[0] & 0x3fff - off += 2 - if not saved_off: - saved_off = off - # XXX - don't use recursion!@#$ - name = name + unpack_name(buf, ptr)[0] + '.' - break - else: - off += 1 - name = name + buf[off:off + n] + '.' - if len(name) > 255: - raise dpkt.UnpackError('name longer than 255 bytes') - off += n - return name.strip('.'), off - - -class DNS(dpkt.Packet): - __hdr__ = ( - ('id', 'H', 0), - ('op', 'H', DNS_RD), # recursive query - # XXX - lists of query, RR objects - ('qd', 'H', []), - ('an', 'H', []), - ('ns', 'H', []), - ('ar', 'H', []) - ) - - @property - def qr(self): - return int((self.op & DNS_QR) == DNS_QR) - - @qr.setter - def qr(self, v): - if v: - self.op |= DNS_QR - else: - self.op &= ~DNS_QR - - @property - def opcode(self): - return (self.op >> 11) & 0xf - - @opcode.setter - def opcode(self, v): - self.op = (self.op & ~0x7800) | ((v & 0xf) << 11) - - @property - def aa(self): - return int((self.op & DNS_AA) == DNS_AA) - - @aa.setter - def aa(self, v): - if v: - self.op |= DNS_AA - else: - self.op &= ~DNS_AA - - @property - def rd(self): - return int((self.op & DNS_RD) == DNS_RD) - - @rd.setter - def rd(self, v): - if v: - self.op |= DNS_RD - else: - self.op &= ~DNS_RD - - @property - def ra(self): - return int((self.op & DNS_RA) == DNS_RA) - - @ra.setter - def ra(self, v): - if v: - self.op |= DNS_RA - else: - self.op &= ~DNS_RA - - @property - def zero(self): - return int((self.op & DNS_Z) == DNS_Z) - - @zero.setter - def zero(self, v): - if v: - self.op |= DNS_Z - else: - self.op &= ~DNS_Z - - @property - def rcode(self): - return self.op & 0xf - - @rcode.setter - def rcode(self, v): - self.op = (self.op & ~0xf) | (v & 0xf) - - # Deprecated methods, will be removed in the future - # ====================================================== - @deprecated - def get_qr(self): - return self.qr - - @deprecated - def set_qr(self, v): - self.qr = v - - @deprecated - def get_opcode(self): - return self.opcode - - @deprecated - def set_opcode(self, v): - self.opcode = v - - @deprecated - def get_aa(self): - return self.aa - - @deprecated - def set_aa(self, v): - self.aa = v - - @deprecated - def get_rd(self): - return self.rd - - @deprecated - def set_rd(self, v): - self.rd = v - - @deprecated - def get_ra(self): - return self.ra - - @deprecated - def set_ra(self, v): - self.ra = v - - @deprecated - def get_zero(self): - return self.zero - - @deprecated - def set_zero(self, v): - self.zero = v - - @deprecated - def get_rcode(self): - return self.rcode - - @deprecated - def set_rcode(self, v): - self.rcode = v - - # ====================================================== - - class Q(dpkt.Packet): - """DNS question.""" - __hdr__ = ( - ('name', '1025s', ''), - ('type', 'H', DNS_A), - ('cls', 'H', DNS_IN) - ) - - # XXX - suk - def __len__(self): - raise NotImplementedError - - __str__ = __len__ - - def unpack(self, buf): - raise NotImplementedError - - class RR(Q): - """DNS resource record.""" - __hdr__ = ( - ('name', '1025s', ''), - ('type', 'H', DNS_A), - ('cls', 'H', DNS_IN), - ('ttl', 'I', 0), - ('rlen', 'H', 4), - ('rdata', 's', '') - ) - - def pack_rdata(self, off, label_ptrs): - # XXX - yeah, this sux - if self.rdata: - return self.rdata - if self.type == DNS_A: - return self.ip - elif self.type == DNS_NS: - return pack_name(self.nsname, off, label_ptrs) - elif self.type == DNS_CNAME: - return pack_name(self.cname, off, label_ptrs) - elif self.type == DNS_PTR: - return pack_name(self.ptrname, off, label_ptrs) - elif self.type == DNS_SOA: - l = [] - l.append(pack_name(self.mname, off, label_ptrs)) - l.append(pack_name(self.rname, off + len(l[0]), label_ptrs)) - l.append(struct.pack('>IIIII', self.serial, self.refresh, - self.retry, self.expire, self.minimum)) - return ''.join(l) - elif self.type == DNS_MX: - return struct.pack('>H', self.preference) + \ - pack_name(self.mxname, off + 2, label_ptrs) - elif self.type == DNS_TXT or self.type == DNS_HINFO: - return ''.join(['%s%s' % (chr(len(x)), x) - for x in self.text]) - elif self.type == DNS_AAAA: - return self.ip6 - elif self.type == DNS_SRV: - return struct.pack('>HHH', self.priority, self.weight, self.port) + \ - pack_name(self.srvname, off + 6, label_ptrs) - - def unpack_rdata(self, buf, off): - if self.type == DNS_A: - self.ip = self.rdata - elif self.type == DNS_NS: - self.nsname, off = unpack_name(buf, off) - elif self.type == DNS_CNAME: - self.cname, off = unpack_name(buf, off) - elif self.type == DNS_PTR: - self.ptrname, off = unpack_name(buf, off) - elif self.type == DNS_SOA: - self.mname, off = unpack_name(buf, off) - self.rname, off = unpack_name(buf, off) - self.serial, self.refresh, self.retry, self.expire, \ - self.minimum = struct.unpack('>IIIII', buf[off:off + 20]) - elif self.type == DNS_MX: - self.preference = struct.unpack('>H', self.rdata[:2]) - self.mxname, off = unpack_name(buf, off + 2) - elif self.type == DNS_TXT or self.type == DNS_HINFO: - self.text = [] - buf = self.rdata - while buf: - n = ord(buf[0]) - self.text.append(buf[1:1 + n]) - buf = buf[1 + n:] - elif self.type == DNS_AAAA: - self.ip6 = self.rdata - elif self.type == DNS_SRV: - self.priority, self.weight, self.port = struct.unpack('>HHH', self.rdata[:6]) - self.srvname, off = unpack_name(buf, off + 6) - - def pack_q(self, buf, q): - """Append packed DNS question and return buf.""" - return buf + pack_name(q.name, len(buf), self.label_ptrs) + struct.pack('>HH', q.type, q.cls) - - def unpack_q(self, buf, off): - """Return DNS question and new offset.""" - q = self.Q() - q.name, off = unpack_name(buf, off) - q.type, q.cls = struct.unpack('>HH', buf[off:off + 4]) - off += 4 - return q, off - - def pack_rr(self, buf, rr): - """Append packed DNS RR and return buf.""" - name = pack_name(rr.name, len(buf), self.label_ptrs) - rdata = rr.pack_rdata(len(buf) + len(name) + 10, self.label_ptrs) - return buf + name + struct.pack('>HHIH', rr.type, rr.cls, rr.ttl, len(rdata)) + rdata - - def unpack_rr(self, buf, off): - """Return DNS RR and new offset.""" - rr = self.RR() - rr.name, off = unpack_name(buf, off) - rr.type, rr.cls, rr.ttl, rdlen = struct.unpack('>HHIH', buf[off:off + 10]) - off += 10 - rr.rdata = buf[off:off + rdlen] - rr.unpack_rdata(buf, off) - off += rdlen - return rr, off - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - off = self.__hdr_len__ - cnt = self.qd # FIXME: This relies on this being properly set somewhere else - self.qd = [] - for _ in range(cnt): - q, off = self.unpack_q(buf, off) - self.qd.append(q) - for x in ('an', 'ns', 'ar'): - cnt = getattr(self, x, 0) - setattr(self, x, []) - for _ in range(cnt): - rr, off = self.unpack_rr(buf, off) - getattr(self, x).append(rr) - self.data = '' - - def __len__(self): - # XXX - cop out - return len(str(self)) - - def __str__(self): - # XXX - compress names on the fly - self.label_ptrs = {} - buf = struct.pack(self.__hdr_fmt__, self.id, self.op, len(self.qd), - len(self.an), len(self.ns), len(self.ar)) - for q in self.qd: - buf = self.pack_q(buf, q) - for x in ('an', 'ns', 'ar'): - for rr in getattr(self, x): - buf = self.pack_rr(buf, rr) - del self.label_ptrs - return buf - - -def test_basic(): - from ip import IP - - s = 'E\x00\x02\x08\xc15\x00\x00\x80\x11\x92aBk0\x01Bk0w\x005\xc07\x01\xf4\xda\xc2d\xd2\x81\x80\x00\x01\x00\x03\x00\x0b\x00\x0b\x03www\x06google\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x05\x00\x01\x00\x00\x03V\x00\x17\x03www\x06google\x06akadns\x03net\x00\xc0,\x00\x01\x00\x01\x00\x00\x01\xa3\x00\x04@\xe9\xabh\xc0,\x00\x01\x00\x01\x00\x00\x01\xa3\x00\x04@\xe9\xabc\xc07\x00\x02\x00\x01\x00\x00KG\x00\x0c\x04usw5\x04akam\xc0>\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04usw6\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04usw7\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x08\x05asia3\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02za\xc07\xc07\x00\x02\x00\x01\x00\x00KG\x00\x0f\x02zc\x06akadns\x03org\x00\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02zf\xc07\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02zh\xc0\xd5\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04eur3\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04use2\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04use4\xc0t\xc0\xc1\x00\x01\x00\x01\x00\x00\xfb4\x00\x04\xd0\xb9\x84\xb0\xc0\xd2\x00\x01\x00\x01\x00\x001\x0c\x00\x04?\xf1\xc76\xc0\xed\x00\x01\x00\x01\x00\x00\xfb4\x00\x04?\xd7\xc6S\xc0\xfe\x00\x01\x00\x01\x00\x001\x0c\x00\x04?\xd00.\xc1\x0f\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04\xc1-\x01g\xc1"\x00\x01\x00\x01\x00\x00\x101\x00\x04?\xd1\xaa\x88\xc15\x00\x01\x00\x01\x00\x00\r\x1a\x00\x04PCC\xb6\xc0o\x00\x01\x00\x01\x00\x00\x10\x7f\x00\x04?\xf1I\xd6\xc0\x87\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04\xce\x84dl\xc0\x9a\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04A\xcb\xea\x1b\xc0\xad\x00\x01\x00\x01\x00\x00\x0b)\x00\x04\xc1l\x9a\t' - ip = IP(s) - my_dns = DNS(ip.udp.data) - assert my_dns.qd[0].name == 'www.google.com' and my_dns.an[1].name == 'www.google.akadns.net' - s = '\x05\xf5\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x03cnn\x03com\x00\x00\x01\x00\x01' - my_dns = DNS(s) - assert s == str(my_dns) - - -def test_PTR(): - s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' - my_dns = DNS(s) - assert my_dns.qd[0].name == '1.1.211.141.in-addr.arpa' and \ - my_dns.an[0].ptrname == 'default.v-umce-ifs.umnet.umich.edu' and \ - my_dns.ns[0].nsname == 'shabby.ifs.umich.edu' and \ - my_dns.ns[1].ttl == 3382L and \ - my_dns.ns[2].nsname == 'dns2.itd.umich.edu' - assert s == str(my_dns) - - -def test_pack_name(): - # Empty name is \0 - x = pack_name('', 0, {}) - assert x == '\0' - - -def test_deprecated_methods(): - """Test deprecated methods. Note: when they are removed so should this test""" - s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' - my_dns = DNS(s) - my_dns.get_aa() - my_dns.get_opcode() - qr = my_dns.get_qr() - my_dns.set_qr(qr) - qr2 = my_dns.get_qr() - assert qr == qr2 - - -def test_deprecated_method_performance(): - """Test the performance hit for the deprecation decorator""" - from timeit import Timer - - s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' - my_dns = DNS(s) - t1 = Timer(lambda: my_dns.aa).timeit(10000) - t2 = Timer(my_dns.get_aa).timeit(10000) - print 'Performance of dns.aa vs. dns.get_aa(): %f %f' % (t1, t2) - - -if __name__ == '__main__': - # Runs all the test associated with this class/file - test_basic() - test_PTR() - test_pack_name() - test_deprecated_methods() - test_deprecated_method_performance() - print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dpkt.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dpkt.py deleted file mode 100644 index 0ed3780f..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dpkt.py +++ /dev/null @@ -1,176 +0,0 @@ -# $Id: dpkt.py 43 2007-08-02 22:42:59Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Simple packet creation and parsing.""" - -import copy -import itertools -import socket -import struct -import array - - -class Error(Exception): pass - - -class UnpackError(Error): pass - - -class NeedData(UnpackError): pass - - -class PackError(Error): pass - - -class _MetaPacket(type): - def __new__(cls, clsname, clsbases, clsdict): - t = type.__new__(cls, clsname, clsbases, clsdict) - st = getattr(t, '__hdr__', None) - if st is not None: - # XXX - __slots__ only created in __new__() - clsdict['__slots__'] = [x[0] for x in st] + ['data'] - t = type.__new__(cls, clsname, clsbases, clsdict) - t.__hdr_fields__ = [x[0] for x in st] - t.__hdr_fmt__ = getattr(t, '__byte_order__', '>') + \ - ''.join([x[1] for x in st]) - t.__hdr_len__ = struct.calcsize(t.__hdr_fmt__) - t.__hdr_defaults__ = dict(zip( - t.__hdr_fields__, [x[2] for x in st])) - return t - - -class Packet(object): - """Base packet class, with metaclass magic to generate members from - self.__hdr__. - - __hdr__ should be defined as a list of (name, structfmt, default) tuples - __byte_order__ can be set to override the default ('>') - - Example:: - - >>> class Foo(Packet): - ... __hdr__ = (('foo', 'I', 1), ('bar', 'H', 2), ('baz', '4s', 'quux')) - ... - >>> foo = Foo(bar=3) - >>> foo - Foo(bar=3) - >>> str(foo) - '\x00\x00\x00\x01\x00\x03quux' - >>> foo.bar - 3 - >>> foo.baz - 'quux' - >>> foo.foo = 7 - >>> foo.baz = 'whee' - >>> foo - Foo(baz='whee', foo=7, bar=3) - >>> Foo('hello, world!') - Foo(baz=' wor', foo=1751477356L, bar=28460, data='ld!') - """ - __metaclass__ = _MetaPacket - - def __init__(self, *args, **kwargs): - """Packet constructor with ([buf], [field=val,...]) prototype. - - Arguments: - - buf -- optional packet buffer to unpack - - Optional keyword arguments correspond to members to set - (matching fields in self.__hdr__, or 'data'). - """ - self.data = '' - if args: - try: - self.unpack(args[0]) - except struct.error: - if len(args[0]) < self.__hdr_len__: - raise NeedData - raise UnpackError('invalid %s: %r' % - (self.__class__.__name__, args[0])) - else: - for k in self.__hdr_fields__: - setattr(self, k, copy.copy(self.__hdr_defaults__[k])) - for k, v in kwargs.iteritems(): - setattr(self, k, v) - - def __len__(self): - return self.__hdr_len__ + len(self.data) - - def __getitem__(self, k): - try: - return getattr(self, k) - except AttributeError: - raise KeyError - - def __repr__(self): - l = ['%s=%r' % (k, getattr(self, k)) - for k in self.__hdr_defaults__ - if getattr(self, k) != self.__hdr_defaults__[k]] - if self.data: - l.append('data=%r' % self.data) - return '%s(%s)' % (self.__class__.__name__, ', '.join(l)) - - def __str__(self): - return self.pack_hdr() + str(self.data) - - def pack_hdr(self): - """Return packed header string.""" - try: - return struct.pack(self.__hdr_fmt__, - *[getattr(self, k) for k in self.__hdr_fields__]) - except struct.error: - vals = [] - for k in self.__hdr_fields__: - v = getattr(self, k) - if isinstance(v, tuple): - vals.extend(v) - else: - vals.append(v) - try: - return struct.pack(self.__hdr_fmt__, *vals) - except struct.error, e: - raise PackError(str(e)) - - def pack(self): - """Return packed header + self.data string.""" - return str(self) - - def unpack(self, buf): - """Unpack packet header fields from buf, and set self.data.""" - for k, v in itertools.izip(self.__hdr_fields__, - struct.unpack(self.__hdr_fmt__, buf[:self.__hdr_len__])): - setattr(self, k, v) - self.data = buf[self.__hdr_len__:] - -# XXX - ''.join([(len(`chr(x)`)==3) and chr(x) or '.' for x in range(256)]) -__vis_filter = """................................ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[.]^_`abcdefghijklmnopqrstuvwxyz{|}~.................................................................................................................................""" - - -def hexdump(buf, length=16): - """Return a hexdump output string of the given buffer.""" - n = 0 - res = [] - while buf: - line, buf = buf[:length], buf[length:] - hexa = ' '.join(['%02x' % ord(x) for x in line]) - line = line.translate(__vis_filter) - res.append(' %04d: %-*s %s' % (n, length * 3, hexa, line)) - n += length - return '\n'.join(res) - -def in_cksum_add(s, buf): - n = len(buf) - cnt = (n / 2) * 2 - a = array.array('H', buf[:cnt]) - if cnt != n: - a.append(struct.unpack('H', buf[-1] + '\x00')[0]) - return s + sum(a) - -def in_cksum_done(s): - s = (s >> 16) + (s & 0xffff) - s += (s >> 16) - return socket.ntohs(~s & 0xffff) - -def in_cksum(buf): - """Return computed Internet checksum.""" - return in_cksum_done(in_cksum_add(0, buf)) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dtp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dtp.py deleted file mode 100644 index 9fc7ec9f..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/dtp.py +++ /dev/null @@ -1,26 +0,0 @@ -# $Id: dtp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Dynamic Trunking Protocol.""" - -import struct -import dpkt - - -class DTP(dpkt.Packet): - __hdr__ = ( - ('v', 'B', 0), - ) # rest is TLVs - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - buf = self.data - tvs = [] - while buf: - t, l = struct.unpack('>HH', buf[:4]) - v, buf = buf[4:4 + l], buf[4 + l:] - tvs.append((t, v)) - self.data = tvs - - -TRUNK_NAME = 0x01 -MAC_ADDR = 0x04 diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/esp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/esp.py deleted file mode 100644 index 94295d39..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/esp.py +++ /dev/null @@ -1,12 +0,0 @@ -# $Id: esp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Encapsulated Security Protocol.""" - -import dpkt - - -class ESP(dpkt.Packet): - __hdr__ = ( - ('spi', 'I', 0), - ('seq', 'I', 0) - ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ethernet.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ethernet.py deleted file mode 100644 index d8d8700f..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ethernet.py +++ /dev/null @@ -1,145 +0,0 @@ -# $Id: ethernet.py 65 2010-03-26 02:53:51Z dugsong $ -# -*- coding: utf-8 -*- -"""Ethernet II, LLC (802.3+802.2), LLC/SNAP, and Novell raw 802.3, -with automatic 802.1q, MPLS, PPPoE, and Cisco ISL decapsulation.""" - -import struct -import dpkt -import stp - - -ETH_CRC_LEN = 4 -ETH_HDR_LEN = 14 - -ETH_LEN_MIN = 64 # minimum frame length with CRC -ETH_LEN_MAX = 1518 # maximum frame length with CRC - -ETH_MTU = (ETH_LEN_MAX - ETH_HDR_LEN - ETH_CRC_LEN) -ETH_MIN = (ETH_LEN_MIN - ETH_HDR_LEN - ETH_CRC_LEN) - -# Ethernet payload types - http://standards.ieee.org/regauth/ethertype -ETH_TYPE_PUP = 0x0200 # PUP protocol -ETH_TYPE_IP = 0x0800 # IP protocol -ETH_TYPE_ARP = 0x0806 # address resolution protocol -ETH_TYPE_AOE = 0x88a2 # AoE protocol -ETH_TYPE_CDP = 0x2000 # Cisco Discovery Protocol -ETH_TYPE_DTP = 0x2004 # Cisco Dynamic Trunking Protocol -ETH_TYPE_REVARP = 0x8035 # reverse addr resolution protocol -ETH_TYPE_8021Q = 0x8100 # IEEE 802.1Q VLAN tagging -ETH_TYPE_IPX = 0x8137 # Internetwork Packet Exchange -ETH_TYPE_IP6 = 0x86DD # IPv6 protocol -ETH_TYPE_PPP = 0x880B # PPP -ETH_TYPE_MPLS = 0x8847 # MPLS -ETH_TYPE_MPLS_MCAST = 0x8848 # MPLS Multicast -ETH_TYPE_PPPoE_DISC = 0x8863 # PPP Over Ethernet Discovery Stage -ETH_TYPE_PPPoE = 0x8864 # PPP Over Ethernet Session Stage -ETH_TYPE_LLDP = 0x88CC # Link Layer Discovery Protocol - -# MPLS label stack fields -MPLS_LABEL_MASK = 0xfffff000 -MPLS_QOS_MASK = 0x00000e00 -MPLS_TTL_MASK = 0x000000ff -MPLS_LABEL_SHIFT = 12 -MPLS_QOS_SHIFT = 9 -MPLS_TTL_SHIFT = 0 -MPLS_STACK_BOTTOM = 0x0100 - - -class Ethernet(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', ''), - ('src', '6s', ''), - ('type', 'H', ETH_TYPE_IP) - ) - _typesw = {} - - def _unpack_data(self, buf): - if self.type == ETH_TYPE_8021Q: - self.tag, self.type = struct.unpack('>HH', buf[:4]) - buf = buf[4:] - elif self.type == ETH_TYPE_MPLS or self.type == ETH_TYPE_MPLS_MCAST: - # XXX - skip labels (max # of labels is undefined, just use 24) - self.labels = [] - for i in range(24): - entry = struct.unpack('>I', buf[i * 4:i * 4 + 4])[0] - label = ((entry & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT, - (entry & MPLS_QOS_MASK) >> MPLS_QOS_SHIFT, - (entry & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT) - self.labels.append(label) - if entry & MPLS_STACK_BOTTOM: - break - self.type = ETH_TYPE_IP - buf = buf[(i + 1) * 4:] - try: - self.data = self._typesw[self.type](buf) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - self.data = buf - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.type > 1500: - # Ethernet II - self._unpack_data(self.data) - elif self.dst.startswith('\x01\x00\x0c\x00\x00') or \ - self.dst.startswith('\x03\x00\x0c\x00\x00'): - # Cisco ISL - self.vlan = struct.unpack('>H', self.data[6:8])[0] - self.unpack(self.data[12:]) - elif self.data.startswith('\xff\xff'): - # Novell "raw" 802.3 - self.type = ETH_TYPE_IPX - self.data = self.ipx = self._typesw[ETH_TYPE_IPX](self.data[2:]) - else: - # 802.2 LLC - self.dsap, self.ssap, self.ctl = struct.unpack('BBB', self.data[:3]) - if self.data.startswith('\xaa\xaa'): - # SNAP - self.type = struct.unpack('>H', self.data[6:8])[0] - self._unpack_data(self.data[8:]) - else: - # non-SNAP - dsap = ord(self.data[0]) - if dsap == 0x06: # SAP_IP - self.data = self.ip = self._typesw[ETH_TYPE_IP](self.data[3:]) - elif dsap == 0x10 or dsap == 0xe0: # SAP_NETWARE{1,2} - self.data = self.ipx = self._typesw[ETH_TYPE_IPX](self.data[3:]) - elif dsap == 0x42: # SAP_STP - self.data = self.stp = stp.STP(self.data[3:]) - - @classmethod - def set_type(cls, t, pktclass): - cls._typesw[t] = pktclass - - @classmethod - def get_type(cls, t): - return cls._typesw[t] - - -# XXX - auto-load Ethernet dispatch table from ETH_TYPE_* definitions -def __load_types(): - g = globals() - for k, v in g.iteritems(): - if k.startswith('ETH_TYPE_'): - name = k[9:] - modname = name.lower() - try: - mod = __import__(modname, g) - except ImportError: - continue - Ethernet.set_type(v, getattr(mod, name)) - - -if not Ethernet._typesw: - __load_types() - - -def test_eth(): # TODO recheck this test - s = '\x00\xb0\xd0\xe1\x80r\x00\x11$\x8c\x11\xde\x86\xdd`\x00\x00\x00\x00(\x06@\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x11$\xff\xfe\x8c\x11\xde\xfe\x80\x00\x00\x00\x00\x00\x00\x02\xb0\xd0\xff\xfe\xe1\x80r\xcd\xd3\x00\x16\xffP\xd7\x13\x00\x00\x00\x00\xa0\x02\xff\xffg\xd3\x00\x00\x02\x04\x05\xa0\x01\x03\x03\x00\x01\x01\x08\n}\x18:a\x00\x00\x00\x00' - # eth = Ethernet(s) # Variable eth is not used - Ethernet(s) - - -if __name__ == '__main__': - test_eth() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gre.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gre.py deleted file mode 100644 index d61e56ff..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gre.py +++ /dev/null @@ -1,127 +0,0 @@ -# $Id: gre.py 75 2010-08-03 14:42:19Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Generic Routing Encapsulation.""" - -import struct -import dpkt -from decorators import deprecated - -GRE_CP = 0x8000 # Checksum Present -GRE_RP = 0x4000 # Routing Present -GRE_KP = 0x2000 # Key Present -GRE_SP = 0x1000 # Sequence Present -GRE_SS = 0x0800 # Strict Source Route -GRE_AP = 0x0080 # Acknowledgment Present - -GRE_opt_fields = ( - (GRE_CP | GRE_RP, 'sum', 'H'), (GRE_CP | GRE_RP, 'off', 'H'), - (GRE_KP, 'key', 'I'), (GRE_SP, 'seq', 'I'), (GRE_AP, 'ack', 'I') -) - - -class GRE(dpkt.Packet): - __hdr__ = ( - ('flags', 'H', 0), - ('p', 'H', 0x0800), # ETH_TYPE_IP - ) - _protosw = {} - sre = () - - @property - def v(self): - return self.flags & 0x7 - - @v.setter - def v(self, v): - self.flags = (self.flags & ~0x7) | (v & 0x7) - - @property - def recur(self): - return (self.flags >> 5) & 0x7 - - @recur.setter - def recur(self, v): - self.flags = (self.flags & ~0xe0) | ((v & 0x7) << 5) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def get_v(self): return self.v - - @deprecated - def set_v(self, v): self.v = v - - @deprecated - def get_recur(self): return self.recur - - @deprecated - def set_recur(self, v): self.recur = v - # ================================================= - - - class SRE(dpkt.Packet): - __hdr__ = [ - ('family', 'H', 0), - ('off', 'B', 0), - ('len', 'B', 0) - ] - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.len] - - def opt_fields_fmts(self): - if self.v == 0: - fields, fmts = [], [] - opt_fields = GRE_opt_fields - else: - fields, fmts = ['len', 'callid'], ['H', 'H'] - opt_fields = GRE_opt_fields[-2:] - for flags, field, fmt in opt_fields: - if self.flags & flags: - fields.append(field) - fmts.append(fmt) - return fields, fmts - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - fields, fmts = self.opt_fields_fmts() - if fields: - fmt = ''.join(fmts) - fmtlen = struct.calcsize(fmt) - vals = struct.unpack(fmt, self.data[:fmtlen]) - self.data = self.data[fmtlen:] - self.__dict__.update(dict(zip(fields, vals))) - if self.flags & GRE_RP: - l = [] - while True: - sre = self.SRE(self.data) - self.data = self.data[len(sre):] - l.append(sre) - if not sre.len: - break - self.sre = l - self.data = ethernet.Ethernet._typesw[self.p](self.data) - setattr(self, self.data.__class__.__name__.lower(), self.data) - - def __len__(self): - opt_fmtlen = struct.calcsize(''.join(self.opt_fields_fmts()[1])) - return self.__hdr_len__ + opt_fmtlen + sum(map(len, self.sre)) + len(self.data) - - # XXX - need to fix up repr to display optional fields... - - def __str__(self): - fields, fmts = self.opt_fields_fmts() - if fields: - vals = [] - for f in fields: - vals.append(getattr(self, f)) - opt_s = struct.pack(''.join(fmts), *vals) - else: - opt_s = '' - return self.pack_hdr() + opt_s + ''.join(map(str, self.sre)) + str(self.data) - -# XXX - auto-load GRE dispatch table from Ethernet dispatch table -import ethernet - -GRE._protosw.update(ethernet.Ethernet._typesw) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gzip.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gzip.py deleted file mode 100644 index e41165b2..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/gzip.py +++ /dev/null @@ -1,123 +0,0 @@ -# $Id: gzip.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""GNU zip.""" - -import struct -import zlib -import dpkt - - -# RFC 1952 -GZIP_MAGIC = '\x1f\x8b' - -# Compression methods -GZIP_MSTORED = 0 -GZIP_MCOMPRESS = 1 -GZIP_MPACKED = 2 -GZIP_MLZHED = 3 -GZIP_MDEFLATE = 8 - -# Flags -GZIP_FTEXT = 0x01 -GZIP_FHCRC = 0x02 -GZIP_FEXTRA = 0x04 -GZIP_FNAME = 0x08 -GZIP_FCOMMENT = 0x10 -GZIP_FENCRYPT = 0x20 -GZIP_FRESERVED = 0xC0 - -# OS -GZIP_OS_MSDOS = 0 -GZIP_OS_AMIGA = 1 -GZIP_OS_VMS = 2 -GZIP_OS_UNIX = 3 -GZIP_OS_VMCMS = 4 -GZIP_OS_ATARI = 5 -GZIP_OS_OS2 = 6 -GZIP_OS_MACOS = 7 -GZIP_OS_ZSYSTEM = 8 -GZIP_OS_CPM = 9 -GZIP_OS_TOPS20 = 10 -GZIP_OS_WIN32 = 11 -GZIP_OS_QDOS = 12 -GZIP_OS_RISCOS = 13 -GZIP_OS_UNKNOWN = 255 - -GZIP_FENCRYPT_LEN = 12 - - -class GzipExtra(dpkt.Packet): - __hdr__ = ( - ('id', '2s', ''), - ('len', 'H', 0) - ) - - -class Gzip(dpkt.Packet): - __hdr__ = ( - ('magic', '2s', GZIP_MAGIC), - ('method', 'B', GZIP_MDEFLATE), - ('flags', 'B', 0), - ('mtime', 'I', 0), - ('xflags', 'B', 0), - ('os', 'B', GZIP_OS_UNIX), - - ('extra', '0s', ''), # XXX - GZIP_FEXTRA - ('filename', '0s', ''), # XXX - GZIP_FNAME - ('comment', '0s', '') # XXX - GZIP_FCOMMENT - ) - - def unpack(self, buf): - super(Gzip, self).unpack(buf) - if self.flags & GZIP_FEXTRA: - n = struct.unpack(self.data[:2], '>H')[0] - self.extra = GzipExtra(self.data[2:2 + n]) - self.data = self.data[2 + n:] - if self.flags & GZIP_FNAME: - n = self.data.find('\x00') - self.filename = self.data[:n] - self.data = self.data[n + 1:] - if self.flags & GZIP_FCOMMENT: - n = self.data.find('\x00') - self.comment = self.data[:n] - self.data = self.data[n + 1:] - if self.flags & GZIP_FENCRYPT: - self.data = self.data[GZIP_FENCRYPT_LEN:] # XXX - skip - if self.flags & GZIP_FHCRC: - self.data = self.data[2:] # XXX - skip - - def pack_hdr(self): - l = [] - if self.extra: - self.flags |= GZIP_FEXTRA - s = str(self.extra) - l.append(struct.pack('>H', len(s))) - l.append(s) - if self.filename: - self.flags |= GZIP_FNAME - l.append(self.filename) - l.append('\x00') - if self.comment: - self.flags |= GZIP_FCOMMENT - l.append(self.comment) - l.append('\x00') - l.insert(0, super(Gzip, self).pack_hdr()) - return ''.join(l) - - def compress(self): - """Compress self.data.""" - c = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS, - zlib.DEF_MEM_LEVEL, 0) - self.data = c.compress(self.data) - - def decompress(self): - """Return decompressed payload.""" - d = zlib.decompressobj(-zlib.MAX_WBITS) - return d.decompress(self.data) - - -if __name__ == '__main__': - import sys - - gz = Gzip(open(sys.argv[1]).read()) - print `gz`, `gz.decompress()` diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/h225.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/h225.py deleted file mode 100644 index d8b2d51f..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/h225.py +++ /dev/null @@ -1,213 +0,0 @@ -# $Id: h225.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""ITU-T H.225.0 Call Signaling.""" - -import struct -import dpkt -import tpkt - - -# H225 Call Signaling -# -# Call messages and information elements (IEs) are defined by Q.931: -# http://cvsup.de.openbsd.org/historic/comp/doc/standards/itu/Q/Q.931.ps.gz -# -# The User-to-User IEs of H225 are encoded by PER of ASN.1. - -# Call Establishment Messages -ALERTING = 1 -CALL_PROCEEDING = 2 -CONNECT = 7 -CONNECT_ACKNOWLEDGE = 15 -PROGRESS = 3 -SETUP = 5 -SETUP_ACKNOWLEDGE = 13 - -# Call Information Phase Messages -RESUME = 38 -RESUME_ACKNOWLEDGE = 46 -RESUME_REJECT = 34 -SUSPEND = 37 -SUSPEND_ACKNOWLEDGE = 45 -SUSPEND_REJECT = 33 -USER_INFORMATION = 32 - -# Call Clearing Messages -DISCONNECT = 69 -RELEASE = 77 -RELEASE_COMPLETE = 90 -RESTART = 70 -RESTART_ACKNOWLEDGE = 78 - -# Miscellaneous Messages -SEGMENT = 96 -CONGESTION_CONTROL = 121 -INFORMATION = 123 -NOTIFY = 110 -STATUS = 125 -STATUS_ENQUIRY = 117 - -# Type 1 Single Octet Information Element IDs -RESERVED = 128 -SHIFT = 144 -CONGESTION_LEVEL = 176 -REPEAT_INDICATOR = 208 - -# Type 2 Single Octet Information Element IDs -MORE_DATA = 160 -SENDING_COMPLETE = 161 - -# Variable Length Information Element IDs -SEGMENTED_MESSAGE = 0 -BEARER_CAPABILITY = 4 -CAUSE = 8 -CALL_IDENTITY = 16 -CALL_STATE = 20 -CHANNEL_IDENTIFICATION = 24 -PROGRESS_INDICATOR = 30 -NETWORK_SPECIFIC_FACILITIES = 32 -NOTIFICATION_INDICATOR = 39 -DISPLAY = 40 -DATE_TIME = 41 -KEYPAD_FACILITY = 44 -SIGNAL = 52 -INFORMATION_RATE = 64 -END_TO_END_TRANSIT_DELAY = 66 -TRANSIT_DELAY_SELECTION_AND_INDICATION = 67 -PACKET_LAYER_BINARY_PARAMETERS = 68 -PACKET_LAYER_WINDOW_SIZE = 69 -PACKET_SIZE = 70 -CLOSED_USER_GROUP = 71 -REVERSE_CHARGE_INDICATION = 74 -CALLING_PARTY_NUMBER = 108 -CALLING_PARTY_SUBADDRESS = 109 -CALLED_PARTY_NUMBER = 112 -CALLED_PARTY_SUBADDRESS = 113 -REDIRECTING_NUMBER = 116 -TRANSIT_NETWORK_SELECTION = 120 -RESTART_INDICATOR = 121 -LOW_LAYER_COMPATIBILITY = 124 -HIGH_LAYER_COMPATIBILITY = 125 -USER_TO_USER = 126 -ESCAPE_FOR_EXTENSION = 127 - - -class H225(dpkt.Packet): - __hdr__ = ( - ('proto', 'B', 8), - ('ref_len', 'B', 2) - ) - - def unpack(self, buf): - # TPKT header - self.tpkt = tpkt.TPKT(buf) - if self.tpkt.v != 3: - raise dpkt.UnpackError('invalid TPKT version') - if self.tpkt.rsvd != 0: - raise dpkt.UnpackError('invalid TPKT reserved value') - n = self.tpkt.len - self.tpkt.__hdr_len__ - if n > len(self.tpkt.data): - raise dpkt.UnpackError('invalid TPKT length') - buf = self.tpkt.data - - # Q.931 payload - dpkt.Packet.unpack(self, buf) - buf = buf[self.__hdr_len__:] - self.ref_val = buf[:self.ref_len] - buf = buf[self.ref_len:] - self.type = struct.unpack('B', buf[:1])[0] - buf = buf[1:] - - # Information Elements - l = [] - while buf: - ie = self.IE(buf) - l.append(ie) - buf = buf[len(ie):] - self.data = l - - def __len__(self): - return self.tpkt.__hdr_len__ + self.__hdr_len__ + sum(map(len, self.data)) - - def __str__(self): - return self.tpkt.pack_hdr() + self.pack_hdr() + self.ref_val + \ - struct.pack('B', self.type) + ''.join(map(str, self.data)) - - class IE(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - buf = buf[self.__hdr_len__:] - - # single-byte IE - if self.type & 0x80: - self.len = 0 - self.data = None - # multi-byte IE - else: - # special PER-encoded UUIE - if self.type == USER_TO_USER: - self.len = struct.unpack('>H', buf[:2])[0] - buf = buf[2:] - # normal TLV-like IE - else: - self.len = struct.unpack('B', buf[:1])[0] - buf = buf[1:] - self.data = buf[:self.len] - - def __len__(self): - if self.type & 0x80: - n = 0 - else: - if self.type == USER_TO_USER: - n = 2 - else: - n = 1 - return self.__hdr_len__ + self.len + n - - def __str__(self): - if self.type & 0x80: - length_str = None - else: - if self.type == USER_TO_USER: - length_str = struct.pack('>H', self.len) - else: - length_str = struct.pack('B', self.len) - return struct.pack('B', self.type) + length_str + self.data - - -__s = '\x03\x00\x04\x11\x08\x02\x54\x2b\x05\x04\x03\x88\x93\xa5\x28\x0e\x4a\x6f\x6e\x20\x4f\x62\x65\x72\x68\x65\x69\x64\x65\x00\x7e\x03\xf0\x05\x20\xb8\x06\x00\x08\x91\x4a\x00\x04\x01\x40\x0c\x00\x4a\x00\x6f\x00\x6e\x00\x20\x00\x4f\x00\x62\x00\x65\x00\x72\x00\x68\x00\x65\x00\x69\x00\x64\x00\x65\x22\xc0\x09\x00\x00\x3d\x06\x65\x6b\x69\x67\x61\x00\x00\x14\x32\x2e\x30\x2e\x32\x20\x28\x4f\x50\x41\x4c\x20\x76\x32\x2e\x32\x2e\x32\x29\x00\x00\x00\x01\x40\x15\x00\x74\x00\x63\x00\x70\x00\x24\x00\x68\x00\x33\x00\x32\x00\x33\x00\x2e\x00\x76\x00\x6f\x00\x78\x00\x67\x00\x72\x00\x61\x00\x74\x00\x69\x00\x61\x00\x2e\x00\x6f\x00\x72\x00\x67\x00\x42\x87\x23\x2c\x06\xb8\x00\x6a\x8b\x1d\x0c\xb7\x06\xdb\x11\x9e\xca\x00\x10\xa4\x89\x6d\x6a\x00\xc5\x1d\x80\x04\x07\x00\x0a\x00\x01\x7a\x75\x30\x11\x00\x5e\x88\x1d\x0c\xb7\x06\xdb\x11\x9e\xca\x00\x10\xa4\x89\x6d\x6a\x82\x2b\x0e\x30\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x26\x00\x00\x64\x0c\x10\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x2a\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x20\x00\x00\x65\x0c\x10\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x20\x40\x00\x00\x06\x04\x01\x00\x4e\x0c\x03\x00\x83\x00\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x16\x00\x00\x66\x0e\x0c\x03\x00\x83\x00\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x4b\x40\x00\x00\x06\x04\x01\x00\x4c\x10\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x41\x00\x00\x67\x0c\x10\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x32\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x28\x00\x00\x68\x0c\x10\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x1d\x40\x00\x00\x06\x04\x01\x00\x4c\x60\x1d\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x13\x00\x00\x69\x0c\x60\x1d\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x1d\x40\x00\x00\x06\x04\x01\x00\x4c\x20\x1d\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x13\x00\x00\x6a\x0c\x20\x1d\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x01\x00\x01\x00\x01\x00\x01\x00\x81\x03\x02\x80\xf8\x02\x70\x01\x06\x00\x08\x81\x75\x00\x0b\x80\x13\x80\x01\xf4\x00\x01\x00\x00\x01\x00\x00\x01\x00\x00\x0c\xc0\x01\x00\x01\x80\x0b\x80\x00\x00\x20\x20\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x00\x01\x20\x20\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x00\x02\x24\x18\x03\x00\xe6\x00\x80\x00\x03\x20\x20\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x00\x04\x20\x20\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x00\x05\x20\xc0\xef\x80\x00\x06\x20\x40\xef\x80\x00\x07\x08\xe0\x03\x51\x00\x80\x01\x00\x80\x00\x08\x08\xd0\x03\x51\x00\x80\x01\x00\x80\x00\x09\x83\x01\x50\x80\x00\x0a\x83\x01\x10\x80\x00\x0b\x83\x01\x40\x00\x80\x01\x03\x06\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x01\x00\x07\x00\x08\x00\x00\x09\x01\x00\x0a\x00\x0b\x07\x01\x00\x32\x80\xa6\xff\x4c\x02\x80\x01\x80' - - -def test_pack(): - h = H225(__s) - assert (__s == str(h)) - - -def test_unpack(): - h = H225(__s) - assert (h.tpkt.v == 3) - assert (h.tpkt.rsvd == 0) - assert (h.tpkt.len == 1041) - assert (h.proto == 8) - assert (h.type == SETUP) - assert (len(h.data) == 3) - - ie = h.data[0] - assert (ie.type == BEARER_CAPABILITY) - assert (ie.len == 3) - ie = h.data[1] - assert (ie.type == DISPLAY) - assert (ie.len == 14) - ie = h.data[2] - assert (ie.type == USER_TO_USER) - assert (ie.len == 1008) - - -if __name__ == '__main__': - test_pack() - test_unpack() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/hsrp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/hsrp.py deleted file mode 100644 index 7581d3e4..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/hsrp.py +++ /dev/null @@ -1,33 +0,0 @@ -# $Id: hsrp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Cisco Hot Standby Router Protocol.""" - -import dpkt - -# Opcodes -HELLO = 0 -COUP = 1 -RESIGN = 2 - -# States -INITIAL = 0x00 -LEARN = 0x01 -LISTEN = 0x02 -SPEAK = 0x04 -STANDBY = 0x08 -ACTIVE = 0x10 - - -class HSRP(dpkt.Packet): - __hdr__ = ( - ('version', 'B', 0), - ('opcode', 'B', 0), - ('state', 'B', 0), - ('hello', 'B', 0), - ('hold', 'B', 0), - ('priority', 'B', 0), - ('group', 'B', 0), - ('rsvd', 'B', 0), - ('auth', '8s', 'cisco'), - ('vip', '4s', '') - ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/http.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/http.py deleted file mode 100644 index 59759ac6..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/http.py +++ /dev/null @@ -1,259 +0,0 @@ -# $Id: http.py 86 2013-03-05 19:25:19Z andrewflnr@gmail.com $ -# -*- coding: utf-8 -*- -"""Hypertext Transfer Protocol.""" - -import cStringIO -import dpkt - - -def parse_headers(f): - """Return dict of HTTP headers parsed from a file object.""" - d = {} - while 1: - line = f.readline() - if not line: - raise dpkt.NeedData('premature end of headers') - line = line.strip() - if not line: - break - l = line.split(':', 1) - if len(l[0].split()) != 1: - raise dpkt.UnpackError('invalid header: %r' % line) - k = l[0].lower() - v = len(l) != 1 and l[1].lstrip() or '' - if k in d: - if not type(d[k]) is list: - d[k] = [d[k]] - d[k].append(v) - else: - d[k] = v - return d - - -def parse_body(f, headers): - """Return HTTP body parsed from a file object, given HTTP header dict.""" - if headers.get('transfer-encoding', '').lower() == 'chunked': - l = [] - found_end = False - while 1: - try: - sz = f.readline().split(None, 1)[0] - except IndexError: - raise dpkt.UnpackError('missing chunk size') - n = int(sz, 16) - if n == 0: - found_end = True - buf = f.read(n) - if f.readline().strip(): - break - if n and len(buf) == n: - l.append(buf) - else: - break - if not found_end: - raise dpkt.NeedData('premature end of chunked body') - body = ''.join(l) - elif 'content-length' in headers: - n = int(headers['content-length']) - body = f.read(n) - if len(body) != n: - raise dpkt.NeedData('short body (missing %d bytes)' % (n - len(body))) - elif 'content-type' in headers: - body = f.read() - else: - # XXX - need to handle HTTP/0.9 - body = '' - return body - - -class Message(dpkt.Packet): - """Hypertext Transfer Protocol headers + body.""" - __metaclass__ = type - __hdr_defaults__ = {} - headers = None - body = None - - def __init__(self, *args, **kwargs): - if args: - self.unpack(args[0]) - else: - self.headers = {} - self.body = '' - for k, v in self.__hdr_defaults__.iteritems(): - setattr(self, k, v) - for k, v in kwargs.iteritems(): - setattr(self, k, v) - - def unpack(self, buf): - f = cStringIO.StringIO(buf) - # Parse headers - self.headers = parse_headers(f) - # Parse body - self.body = parse_body(f, self.headers) - # Save the rest - self.data = f.read() - - def pack_hdr(self): - return ''.join(['%s: %s\r\n' % t for t in self.headers.iteritems()]) - - def __len__(self): - return len(str(self)) - - def __str__(self): - return '%s\r\n%s' % (self.pack_hdr(), self.body) - - -class Request(Message): - """Hypertext Transfer Protocol Request.""" - __hdr_defaults__ = { - 'method': 'GET', - 'uri': '/', - 'version': '1.0', - } - __methods = dict.fromkeys(( - 'GET', 'PUT', 'ICY', - 'COPY', 'HEAD', 'LOCK', 'MOVE', 'POLL', 'POST', - 'BCOPY', 'BMOVE', 'MKCOL', 'TRACE', 'LABEL', 'MERGE', - 'DELETE', 'SEARCH', 'UNLOCK', 'REPORT', 'UPDATE', 'NOTIFY', - 'BDELETE', 'CONNECT', 'OPTIONS', 'CHECKIN', - 'PROPFIND', 'CHECKOUT', 'CCM_POST', - 'SUBSCRIBE', 'PROPPATCH', 'BPROPFIND', - 'BPROPPATCH', 'UNCHECKOUT', 'MKACTIVITY', - 'MKWORKSPACE', 'UNSUBSCRIBE', 'RPC_CONNECT', - 'VERSION-CONTROL', - 'BASELINE-CONTROL' - )) - __proto = 'HTTP' - - def unpack(self, buf): - f = cStringIO.StringIO(buf) - line = f.readline() - l = line.strip().split() - if len(l) < 2: - raise dpkt.UnpackError('invalid request: %r' % line) - if l[0] not in self.__methods: - raise dpkt.UnpackError('invalid http method: %r' % l[0]) - if len(l) == 2: - # HTTP/0.9 does not specify a version in the request line - self.version = '0.9' - else: - if not l[2].startswith(self.__proto): - raise dpkt.UnpackError('invalid http version: %r' % l[2]) - self.version = l[2][len(self.__proto) + 1:] - self.method = l[0] - self.uri = l[1] - Message.unpack(self, f.read()) - - def __str__(self): - return '%s %s %s/%s\r\n' % (self.method, self.uri, self.__proto, - self.version) + Message.__str__(self) - - -class Response(Message): - """Hypertext Transfer Protocol Response.""" - __hdr_defaults__ = { - 'version': '1.0', - 'status': '200', - 'reason': 'OK' - } - __proto = 'HTTP' - - def unpack(self, buf): - f = cStringIO.StringIO(buf) - line = f.readline() - l = line.strip().split(None, 2) - if len(l) < 2 or not l[0].startswith(self.__proto) or not l[1].isdigit(): - raise dpkt.UnpackError('invalid response: %r' % line) - self.version = l[0][len(self.__proto) + 1:] - self.status = l[1] - self.reason = l[2] if len(l) > 2 else '' - Message.unpack(self, f.read()) - - def __str__(self): - return '%s/%s %s %s\r\n' % (self.__proto, self.version, self.status, - self.reason) + Message.__str__(self) - - -def test_parse_request(): - s = """POST /main/redirect/ab/1,295,,00.html HTTP/1.0\r\nReferer: http://www.email.com/login/snap/login.jhtml\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.75 [en] (X11; U; OpenBSD 2.8 i386; Nav)\r\nHost: ltd.snap.com\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: 61\r\n\r\nsn=em&mn=dtest4&pw=this+is+atest&fr=true&login=Sign+in&od=www""" - r = Request(s) - assert r.method == 'POST' - assert r.uri == '/main/redirect/ab/1,295,,00.html' - assert r.body == 'sn=em&mn=dtest4&pw=this+is+atest&fr=true&login=Sign+in&od=www' - assert r.headers['content-type'] == 'application/x-www-form-urlencoded' - try: - Request(s[:60]) - assert 'invalid headers parsed!' - except dpkt.UnpackError: - pass - - -def test_format_request(): - r = Request() - assert str(r) == 'GET / HTTP/1.0\r\n\r\n' - r.method = 'POST' - r.uri = '/foo/bar/baz.html' - r.headers['content-type'] = 'text/plain' - r.headers['content-length'] = '5' - r.body = 'hello' - s = str(r) - assert s.startswith('POST /foo/bar/baz.html HTTP/1.0\r\n') - assert s.endswith('\r\n\r\nhello') - assert '\r\ncontent-length: 5\r\n' in s - assert '\r\ncontent-type: text/plain\r\n' in s - r = Request(str(r)) - assert str(r) == s - - -def test_chunked_response(): - s = """HTTP/1.1 200 OK\r\nCache-control: no-cache\r\nPragma: no-cache\r\nContent-Type: text/javascript; charset=utf-8\r\nContent-Encoding: gzip\r\nTransfer-Encoding: chunked\r\nSet-Cookie: S=gmail=agg:gmail_yj=v2s:gmproxy=JkU; Domain=.google.com; Path=/\r\nServer: GFE/1.3\r\nDate: Mon, 12 Dec 2005 22:33:23 GMT\r\n\r\na\r\n\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\r\n152\r\nm\x91MO\xc4 \x10\x86\xef\xfe\n\x82\xc9\x9eXJK\xe9\xb6\xee\xc1\xe8\x1e6\x9e4\xf1\xe0a5\x86R\xda\x12Yh\x80\xba\xfa\xef\x85\xee\x1a/\xf21\x99\x0c\xef0<\xc3\x81\xa0\xc3\x01\xe6\x10\xc1<\xa7eYT5\xa1\xa4\xac\xe1\xdb\x15:\xa4\x9d\x0c\xfa5K\x00\xf6.\xaa\xeb\x86\xd5y\xcdHY\x954\x8e\xbc*h\x8c\x8e!L7Y\xe6\'\xeb\x82WZ\xcf>8\x1ed\x87\x851X\xd8c\xe6\xbc\x17Z\x89\x8f\xac \x84e\xde\n!]\x96\x17i\xb5\x02{{\xc2z0\x1e\x0f#7\x9cw3v\x992\x9d\xfc\xc2c8\xea[/EP\xd6\xbc\xce\x84\xd0\xce\xab\xf7`\'\x1f\xacS\xd2\xc7\xd2\xfb\x94\x02N\xdc\x04\x0f\xee\xba\x19X\x03TtW\xd7\xb4\xd9\x92\n\xbcX\xa7;\xb0\x9b\'\x10$?F\xfd\xf3CzPt\x8aU\xef\xb8\xc8\x8b-\x18\xed\xec<\xe0\x83\x85\x08!\xf8"[\xb0\xd3j\x82h\x93\xb8\xcf\xd8\x9b\xba\xda\xd0\x92\x14\xa4a\rc\reM\xfd\x87=X;h\xd9j;\xe0db\x17\xc2\x02\xbd\xb0F\xc2in#\xfb:\xb6\xc4x\x15\xd6\x9f\x8a\xaf\xcf)\x0b^\xbc\xe7i\x11\x80\x8b\x00D\x01\xd8/\x82x\xf6\xd8\xf7J(\xae/\x11p\x1f+\xc4p\t:\xfe\xfd\xdf\xa3Y\xfa\xae4\x7f\x00\xc5\xa5\x95\xa1\xe2\x01\x00\x00\r\n0\r\n\r\n""" - r = Response(s) - assert r.version == '1.1' - assert r.status == '200' - assert r.reason == 'OK' - - -def test_multicookie_response(): - s = """HTTP/1.x 200 OK\r\nSet-Cookie: first_cookie=cookie1; path=/; domain=.example.com\r\nSet-Cookie: second_cookie=cookie2; path=/; domain=.example.com\r\nContent-Length: 0\r\n\r\n""" - r = Response(s) - assert type(r.headers['set-cookie']) is list - assert len(r.headers['set-cookie']) == 2 - - -def test_noreason_response(): - s = """HTTP/1.1 200 \r\n\r\n""" - r = Response(s) - assert r.reason == '' - assert str(r) == s - - -def test_request_version(): - s = """GET / HTTP/1.0\r\n\r\n""" - r = Request(s) - assert r.method == 'GET' - assert r.uri == '/' - assert r.version == '1.0' - - s = """GET /\r\n\r\n""" - r = Request(s) - assert r.method == 'GET' - assert r.uri == '/' - assert r.version == '0.9' - - s = """GET / CHEESE/1.0\r\n\r\n""" - try: - Request(s) - assert "invalid protocol version parsed!" - except: - pass - - -if __name__ == '__main__': - # Runs all the test associated with this class/file - test_parse_request() - test_format_request() - test_chunked_response() - test_multicookie_response() - test_noreason_response() - test_request_version() - print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp.py deleted file mode 100644 index 12e73728..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp.py +++ /dev/null @@ -1,127 +0,0 @@ -# $Id: icmp.py 45 2007-08-03 00:05:22Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Internet Control Message Protocol.""" - -import dpkt -import ip - -# Types (icmp_type) and codes (icmp_code) - -# http://www.iana.org/assignments/icmp-parameters - -ICMP_CODE_NONE = 0 # for types without codes -ICMP_ECHOREPLY = 0 # echo reply -ICMP_UNREACH = 3 # dest unreachable, codes: -ICMP_UNREACH_NET = 0 # bad net -ICMP_UNREACH_HOST = 1 # bad host -ICMP_UNREACH_PROTO = 2 # bad protocol -ICMP_UNREACH_PORT = 3 # bad port -ICMP_UNREACH_NEEDFRAG = 4 # IP_DF caused drop -ICMP_UNREACH_SRCFAIL = 5 # src route failed -ICMP_UNREACH_NET_UNKNOWN = 6 # unknown net -ICMP_UNREACH_HOST_UNKNOWN = 7 # unknown host -ICMP_UNREACH_ISOLATED = 8 # src host isolated -ICMP_UNREACH_NET_PROHIB = 9 # for crypto devs -ICMP_UNREACH_HOST_PROHIB = 10 # ditto -ICMP_UNREACH_TOSNET = 11 # bad tos for net -ICMP_UNREACH_TOSHOST = 12 # bad tos for host -ICMP_UNREACH_FILTER_PROHIB = 13 # prohibited access -ICMP_UNREACH_HOST_PRECEDENCE = 14 # precedence error -ICMP_UNREACH_PRECEDENCE_CUTOFF = 15 # precedence cutoff -ICMP_SRCQUENCH = 4 # packet lost, slow down -ICMP_REDIRECT = 5 # shorter route, codes: -ICMP_REDIRECT_NET = 0 # for network -ICMP_REDIRECT_HOST = 1 # for host -ICMP_REDIRECT_TOSNET = 2 # for tos and net -ICMP_REDIRECT_TOSHOST = 3 # for tos and host -ICMP_ALTHOSTADDR = 6 # alternate host address -ICMP_ECHO = 8 # echo service -ICMP_RTRADVERT = 9 # router advertise, codes: -ICMP_RTRADVERT_NORMAL = 0 # normal -ICMP_RTRADVERT_NOROUTE_COMMON = 16 # selective routing -ICMP_RTRSOLICIT = 10 # router solicitation -ICMP_TIMEXCEED = 11 # time exceeded, code: -ICMP_TIMEXCEED_INTRANS = 0 # ttl==0 in transit -ICMP_TIMEXCEED_REASS = 1 # ttl==0 in reass -ICMP_PARAMPROB = 12 # ip header bad -ICMP_PARAMPROB_ERRATPTR = 0 # req. opt. absent -ICMP_PARAMPROB_OPTABSENT = 1 # req. opt. absent -ICMP_PARAMPROB_LENGTH = 2 # bad length -ICMP_TSTAMP = 13 # timestamp request -ICMP_TSTAMPREPLY = 14 # timestamp reply -ICMP_INFO = 15 # information request -ICMP_INFOREPLY = 16 # information reply -ICMP_MASK = 17 # address mask request -ICMP_MASKREPLY = 18 # address mask reply -ICMP_TRACEROUTE = 30 # traceroute -ICMP_DATACONVERR = 31 # data conversion error -ICMP_MOBILE_REDIRECT = 32 # mobile host redirect -ICMP_IP6_WHEREAREYOU = 33 # IPv6 where-are-you -ICMP_IP6_IAMHERE = 34 # IPv6 i-am-here -ICMP_MOBILE_REG = 35 # mobile registration req -ICMP_MOBILE_REGREPLY = 36 # mobile registration reply -ICMP_DNS = 37 # domain name request -ICMP_DNSREPLY = 38 # domain name reply -ICMP_SKIP = 39 # SKIP -ICMP_PHOTURIS = 40 # Photuris -ICMP_PHOTURIS_UNKNOWN_INDEX = 0 # unknown sec index -ICMP_PHOTURIS_AUTH_FAILED = 1 # auth failed -ICMP_PHOTURIS_DECOMPRESS_FAILED = 2 # decompress failed -ICMP_PHOTURIS_DECRYPT_FAILED = 3 # decrypt failed -ICMP_PHOTURIS_NEED_AUTHN = 4 # no authentication -ICMP_PHOTURIS_NEED_AUTHZ = 5 # no authorization -ICMP_TYPE_MAX = 40 - - -class ICMP(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 8), - ('code', 'B', 0), - ('sum', 'H', 0) - ) - - class Echo(dpkt.Packet): - __hdr__ = (('id', 'H', 0), ('seq', 'H', 0)) - - class Quote(dpkt.Packet): - __hdr__ = (('pad', 'I', 0),) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.ip = ip.IP(self.data) - - class Unreach(Quote): - __hdr__ = (('pad', 'H', 0), ('mtu', 'H', 0)) - - class Quench(Quote): pass - - class Redirect(Quote): - __hdr__ = (('gw', 'I', 0),) - - class ParamProbe(Quote): - __hdr__ = (('ptr', 'B', 0), ('pad1', 'B', 0), ('pad2', 'H', 0)) - - class TimeExceed(Quote): pass - - _typesw = {0: Echo, 3: Unreach, 4: Quench, 5: Redirect, 8: Echo, 11: TimeExceed} - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - try: - self.data = self._typesw[self.type](self.data) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - pass - - def __str__(self): - if not self.sum: - self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) - return dpkt.Packet.__str__(self) - - -def test_icmp(): - s = '\x03\x0a\x6b\x19\x00\x00\x00\x00\x45\x00\x00\x28\x94\x1f\x00\x00\xe3\x06\x99\xb4\x23\x2b\x24\x00\xde\x8e\x84\x42\xab\xd1\x00\x50\x00\x35\xe1\x29\x20\xd9\x00\x00\x00\x22\x9b\xf0\xe2\x04\x65\x6b' - assert (str(ICMP(s)) == s) - -if __name__ == '__main__': - test_icmp() - print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp6.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp6.py deleted file mode 100644 index 679bc6b4..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/icmp6.py +++ /dev/null @@ -1,77 +0,0 @@ -# $Id: icmp6.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Internet Control Message Protocol for IPv6.""" - -import dpkt -import ip6 - -ICMP6_DST_UNREACH = 1 # dest unreachable, codes: -ICMP6_PACKET_TOO_BIG = 2 # packet too big -ICMP6_TIME_EXCEEDED = 3 # time exceeded, code: -ICMP6_PARAM_PROB = 4 # ip6 header bad - -ICMP6_ECHO_REQUEST = 128 # echo service -ICMP6_ECHO_REPLY = 129 # echo reply -MLD_LISTENER_QUERY = 130 # multicast listener query -MLD_LISTENER_REPORT = 131 # multicast listener report -MLD_LISTENER_DONE = 132 # multicast listener done - -# RFC2292 decls -ICMP6_MEMBERSHIP_QUERY = 130 # group membership query -ICMP6_MEMBERSHIP_REPORT = 131 # group membership report -ICMP6_MEMBERSHIP_REDUCTION = 132 # group membership termination - -ND_ROUTER_SOLICIT = 133 # router solicitation -ND_ROUTER_ADVERT = 134 # router advertisment -ND_NEIGHBOR_SOLICIT = 135 # neighbor solicitation -ND_NEIGHBOR_ADVERT = 136 # neighbor advertisment -ND_REDIRECT = 137 # redirect - -ICMP6_ROUTER_RENUMBERING = 138 # router renumbering - -ICMP6_WRUREQUEST = 139 # who are you request -ICMP6_WRUREPLY = 140 # who are you reply -ICMP6_FQDN_QUERY = 139 # FQDN query -ICMP6_FQDN_REPLY = 140 # FQDN reply -ICMP6_NI_QUERY = 139 # node information request -ICMP6_NI_REPLY = 140 # node information reply - -ICMP6_MAXTYPE = 201 - - -class ICMP6(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 0), - ('code', 'B', 0), - ('sum', 'H', 0) - ) - - class Error(dpkt.Packet): - __hdr__ = (('pad', 'I', 0), ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.ip6 = ip6.IP6(self.data) - - class Unreach(Error): pass - - class TooBig(Error): - __hdr__ = (('mtu', 'I', 1232), ) - - class TimeExceed(Error): pass - - class ParamProb(Error): - __hdr__ = (('ptr', 'I', 0), ) - - class Echo(dpkt.Packet): - __hdr__ = (('id', 'H', 0), ('seq', 'H', 0)) - - _typesw = {1: Unreach, 2: TooBig, 3: TimeExceed, 4: ParamProb, 128: Echo, 129: Echo} - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - try: - self.data = self._typesw[self.type](self.data) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - self.data = buf diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ieee80211.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ieee80211.py deleted file mode 100644 index e18833fb..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ieee80211.py +++ /dev/null @@ -1,875 +0,0 @@ -# $Id: 80211.py 53 2008-12-18 01:22:57Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""IEEE 802.11.""" - -import socket -import struct -import dpkt -from decorators import deprecated - -# Frame Types -MGMT_TYPE = 0 -CTL_TYPE = 1 -DATA_TYPE = 2 - -# Frame Sub-Types -M_ASSOC_REQ = 0 -M_ASSOC_RESP = 1 -M_REASSOC_REQ = 2 -M_REASSOC_RESP = 3 -M_PROBE_REQ = 4 -M_PROBE_RESP = 5 -M_BEACON = 8 -M_ATIM = 9 -M_DISASSOC = 10 -M_AUTH = 11 -M_DEAUTH = 12 -M_ACTION = 13 -C_BLOCK_ACK_REQ = 8 -C_BLOCK_ACK = 9 -C_PS_POLL = 10 -C_RTS = 11 -C_CTS = 12 -C_ACK = 13 -C_CF_END = 14 -C_CF_END_ACK = 15 -D_DATA = 0 -D_DATA_CF_ACK = 1 -D_DATA_CF_POLL = 2 -D_DATA_CF_ACK_POLL = 3 -D_NULL = 4 -D_CF_ACK = 5 -D_CF_POLL = 6 -D_CF_ACK_POLL = 7 -D_QOS_DATA = 8 -D_QOS_CF_ACK = 9 -D_QOS_CF_POLL = 10 -D_QOS_CF_ACK_POLL = 11 -D_QOS_NULL = 12 -D_QOS_CF_POLL_EMPTY = 14 - -TO_DS_FLAG = 10 -FROM_DS_FLAG = 1 -INTER_DS_FLAG = 11 - -# Bitshifts for Frame Control -_VERSION_MASK = 0x0300 -_TYPE_MASK = 0x0c00 -_SUBTYPE_MASK = 0xf000 -_TO_DS_MASK = 0x0001 -_FROM_DS_MASK = 0x0002 -_MORE_FRAG_MASK = 0x0004 -_RETRY_MASK = 0x0008 -_PWR_MGT_MASK = 0x0010 -_MORE_DATA_MASK = 0x0020 -_WEP_MASK = 0x0040 -_ORDER_MASK = 0x0080 -_VERSION_SHIFT = 8 -_TYPE_SHIFT = 10 -_SUBTYPE_SHIFT = 12 -_TO_DS_SHIFT = 0 -_FROM_DS_SHIFT = 1 -_MORE_FRAG_SHIFT = 2 -_RETRY_SHIFT = 3 -_PWR_MGT_SHIFT = 4 -_MORE_DATA_SHIFT = 5 -_WEP_SHIFT = 6 -_ORDER_SHIFT = 7 - -# IEs -IE_SSID = 0 -IE_RATES = 1 -IE_FH = 2 -IE_DS = 3 -IE_CF = 4 -IE_TIM = 5 -IE_IBSS = 6 -IE_HT_CAPA = 45 -IE_ESR = 50 -IE_HT_INFO = 61 - -FCS_LENGTH = 4 - -FRAMES_WITH_CAPABILITY = [M_BEACON, M_ASSOC_RESP, M_ASSOC_REQ, M_REASSOC_REQ, ] - -# Block Ack control constants -_ACK_POLICY_SHIFT = 0 -_MULTI_TID_SHIFT = 1 -_COMPRESSED_SHIFT = 2 -_TID_SHIFT = 12 - -_ACK_POLICY_MASK = 0x0001 -_MULTI_TID_MASK = 0x0002 -_COMPRESSED_MASK = 0x0004 -_TID_MASK = 0xf000 - -_COMPRESSED_BMP_LENGTH = 8 -_BMP_LENGTH = 128 - -# Action frame categories -BLOCK_ACK = 3 - -# Block ack category action codes -BLOCK_ACK_CODE_REQUEST = 0 -BLOCK_ACK_CODE_RESPONSE = 1 - - -class IEEE80211(dpkt.Packet): - __hdr__ = ( - ('framectl', 'H', 0), - ('duration', 'H', 0) - ) - - @property - def version(self): - return (self.framectl & _VERSION_MASK) >> _VERSION_SHIFT - - @version.setter - def version(self, val): - self.framectl = (val << _VERSION_SHIFT) | (self.framectl & ~_VERSION_MASK) - - @property - def type(self): - return (self.framectl & _TYPE_MASK) >> _TYPE_SHIFT - - @type.setter - def type(self, val): - self.framectl = (val << _TYPE_SHIFT) | (self.framectl & ~_TYPE_MASK) - - @property - def subtype(self): - return (self.framectl & _SUBTYPE_MASK) >> _SUBTYPE_SHIFT - - @subtype.setter - def subtype(self, val): - self.framectl = (val << _SUBTYPE_SHIFT) | (self.framectl & ~_SUBTYPE_MASK) - - @property - def to_ds(self): - return (self.framectl & _TO_DS_MASK) >> _TO_DS_SHIFT - - @to_ds.setter - def to_ds(self, val): - self.framectl = (val << _TO_DS_SHIFT) | (self.framectl & ~_TO_DS_MASK) - - @property - def from_ds(self): - return (self.framectl & _FROM_DS_MASK) >> _FROM_DS_SHIFT - - @from_ds.setter - def from_ds(self, val): - self.framectl = (val << _FROM_DS_SHIFT) | (self.framectl & ~_FROM_DS_MASK) - - @property - def more_frag(self): - return (self.framectl & _MORE_FRAG_MASK) >> _MORE_FRAG_SHIFT - - @more_frag.setter - def more_frag(self, val): - self.framectl = (val << _MORE_FRAG_SHIFT) | (self.framectl & ~_MORE_FRAG_MASK) - - @property - def retry(self): - return (self.framectl & _RETRY_MASK) >> _RETRY_SHIFT - - @retry.setter - def retry(self, val): - self.framectl = (val << _RETRY_SHIFT) | (self.framectl & ~_RETRY_MASK) - - @property - def pwr_mgt(self): - return (self.framectl & _PWR_MGT_MASK) >> _PWR_MGT_SHIFT - - @pwr_mgt.setter - def pwr_mgt(self, val): - self.framectl = (val << _PWR_MGT_SHIFT) | (self.framectl & ~_PWR_MGT_MASK) - - @property - def more_data(self): - return (self.framectl & _MORE_DATA_MASK) >> _MORE_DATA_SHIFT - - @more_data.setter - def more_data(self, val): - self.framectl = (val << _MORE_DATA_SHIFT) | (self.framectl & ~_MORE_DATA_MASK) - - @property - def wep(self): - return (self.framectl & _WEP_MASK) >> _WEP_SHIFT - - @wep.setter - def wep(self, val): - self.framectl = (val << _WEP_SHIFT) | (self.framectl & ~_WEP_MASK) - - @property - def order(self): - return (self.framectl & _ORDER_MASK) >> _ORDER_SHIFT - - @order.setter - def order(self, val): - self.framectl = (val << _ORDER_SHIFT) | (self.framectl & ~_ORDER_MASK) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_version(self): return self.version - - @deprecated - def _set_version(self, val): self.version = val - - @deprecated - def _get_type(self): return self.type - - @deprecated - def _set_type(self, val): self.type = val - - @deprecated - def _get_subtype(self): return self.subtype - - @deprecated - def _set_subtype(self, val): self.subtype = val - - @deprecated - def _get_to_ds(self): return self.to_ds - - @deprecated - def _set_to_ds(self, val): self.to_ds = val - - @deprecated - def _get_from_ds(self): return self.from_ds - - @deprecated - def _set_from_ds(self, val): self.from_ds = val - - @deprecated - def _get_more_frag(self): return self.more_frag - - @deprecated - def _set_more_frag(self, val): self.more_frag = val - - @deprecated - def _get_retry(self): return self.retry - - @deprecated - def _set_retry(self, val): self.retry = val - - @deprecated - def _get_pwr_mgt(self): return self.pwr_mgt - - @deprecated - def _set_pwr_mgt(self, val): self.pwr_mgt = val - - @deprecated - def _get_more_data(self): return self.more_data - - @deprecated - def _set_more_data(self, val): self.more_data = val - - @deprecated - def _get_wep(self): return self.wep - - @deprecated - def _set_wep(self, val): self.wep = val - - @deprecated - def _get_order(self): return self.order - - @deprecated - def _set_order(self, val): self.order = val - # ================================================= - - def unpack_ies(self, buf): - self.ies = [] - - ie_decoder = { - IE_SSID: ('ssid', self.IE), - IE_RATES: ('rate', self.IE), - IE_FH: ('fh', self.FH), - IE_DS: ('ds', self.DS), - IE_CF: ('cf', self.CF), - IE_TIM: ('tim', self.TIM), - IE_IBSS: ('ibss', self.IBSS), - IE_HT_CAPA: ('ht_capa', self.IE), - IE_ESR: ('esr', self.IE), - IE_HT_INFO: ('ht_info', self.IE) - } - - # each IE starts with an ID and a length - while len(buf) > FCS_LENGTH: - ie_id = struct.unpack('B', (buf[0]))[0] - try: - parser = ie_decoder[ie_id][1] - name = ie_decoder[ie_id][0] - except KeyError: - parser = self.IE - name = 'ie_' + str(ie_id) - ie = parser(buf) - - ie.data = buf[2:2 + ie.len] - setattr(self, name, ie) - self.ies.append(ie) - buf = buf[2 + ie.len:] - - class Capability(object): - def __init__(self, field): - self.ess = field & 1 - self.ibss = (field >> 1) & 1 - self.cf_poll = (field >> 2) & 1 - self.cf_poll_req = (field >> 3) & 1 - self.privacy = (field >> 4) & 1 - self.short_preamble = (field >> 5) & 1 - self.pbcc = (field >> 6) & 1 - self.hopping = (field >> 7) & 1 - self.spec_mgmt = (field >> 8) & 1 - self.qos = (field >> 9) & 1 - self.short_slot = (field >> 10) & 1 - self.apsd = (field >> 11) & 1 - self.dsss = (field >> 13) & 1 - self.delayed_blk_ack = (field >> 14) & 1 - self.imm_blk_ack = (field >> 15) & 1 - - def __init__(self, *args, **kwargs): - if kwargs and 'fcs' in kwargs: - self.fcs_present = kwargs.pop('fcs') - else: - self.fcs_present = False - - super(IEEE80211, self).__init__(*args, **kwargs) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = buf[self.__hdr_len__:] - - m_decoder = { - M_BEACON: ('beacon', self.Beacon), - M_ASSOC_REQ: ('assoc_req', self.Assoc_Req), - M_ASSOC_RESP: ('assoc_resp', self.Assoc_Resp), - M_DISASSOC: ('diassoc', self.Disassoc), - M_REASSOC_REQ: ('reassoc_req', self.Reassoc_Req), - M_REASSOC_RESP: ('reassoc_resp', self.Assoc_Resp), - M_AUTH: ('auth', self.Auth), - M_PROBE_RESP: ('probe_resp', self.Beacon), - M_DEAUTH: ('deauth', self.Deauth), - M_ACTION: ('action', self.Action) - } - - c_decoder = { - C_RTS: ('rts', self.RTS), - C_CTS: ('cts', self.CTS), - C_ACK: ('ack', self.ACK), - C_BLOCK_ACK_REQ: ('bar', self.BlockAckReq), - C_BLOCK_ACK: ('back', self.BlockAck), - C_CF_END: ('cf_end', self.CFEnd), - } - - d_dsData = { - 0: self.Data, - FROM_DS_FLAG: self.DataFromDS, - TO_DS_FLAG: self.DataToDS, - INTER_DS_FLAG: self.DataInterDS - } - - # For now decode everything with DATA. Haven't checked about other QoS - # additions - d_decoder = { - # modified the decoder to consider the ToDS and FromDS flags - # Omitting the 11 case for now - D_DATA: ('data_frame', d_dsData), - D_NULL: ('data_frame', d_dsData), - D_QOS_DATA: ('data_frame', d_dsData), - D_QOS_NULL: ('data_frame', d_dsData) - } - - decoder = { - MGMT_TYPE: m_decoder, - CTL_TYPE: c_decoder, - DATA_TYPE: d_decoder - } - - # Strip off the FCS field - if self.fcs_present: - self.fcs = struct.unpack('I', self.data[-1 * FCS_LENGTH:])[0] - self.data = self.data[0: -1 * FCS_LENGTH] - - if self.type == MGMT_TYPE: - self.mgmt = self.MGMT_Frame(self.data) - self.data = self.mgmt.data - if self.subtype == M_PROBE_REQ: - self.unpack_ies(self.data) - return - if self.subtype == M_ATIM: - return - - try: - parser = decoder[self.type][self.subtype][1] - name = decoder[self.type][self.subtype][0] - except KeyError: - print "Key error:", self.type, self.subtype - return - - if self.type == DATA_TYPE: - # need to grab the ToDS/FromDS info - parser = parser[self.to_ds * 10 + self.from_ds] - - if self.type == MGMT_TYPE: - field = parser(self.mgmt.data) - else: - field = parser(self.data) - self.data = field - - setattr(self, name, field) - - if self.type == MGMT_TYPE: - self.ies = self.unpack_ies(field.data) - if self.subtype in FRAMES_WITH_CAPABILITY: - self.capability = self.Capability(socket.ntohs(field.capability)) - - if self.type == DATA_TYPE and self.subtype == D_QOS_DATA: - self.qos_data = self.QoS_Data(field.data) - field.data = self.qos_data.data - - self.data = field.data - - class BlockAckReq(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('ctl', 'H', 0), - ('seq', 'H', 0), - ) - - class BlockAck(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('ctl', 'H', 0), - ('seq', 'H', 0), - ) - - @property - def compressed(self): - return (self.ctl & _COMPRESSED_MASK) >> _COMPRESSED_SHIFT - - @compressed.setter - def compressed(self, val): - self.ctl = (val << _COMPRESSED_SHIFT) | (self.ctl & ~_COMPRESSED_MASK) - - @property - def ack_policy(self): - return (self.ctl & _ACK_POLICY_MASK) >> _ACK_POLICY_SHIFT - - @ack_policy.setter - def ack_policy(self, val): - self.ctl = (val << _ACK_POLICY_SHIFT) | (self.ctl & ~_ACK_POLICY_MASK) - - @property - def multi_tid(self): - return (self.ctl & _MULTI_TID_MASK) >> _MULTI_TID_SHIFT - - @multi_tid.setter - def multi_tid(self, val): - self.ctl = (val << _MULTI_TID_SHIFT) | (self.ctl & ~_MULTI_TID_MASK) - - @property - def tid(self): - return (self.ctl & _TID_MASK) >> _TID_SHIFT - - @tid.setter - def tid(self, val): - self.ctl = (val << _TID_SHIFT) | (self.ctl & ~_TID_MASK) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_compressed(self): return self.compressed - - @deprecated - def _set_compressed(self, val): self.compressed = val - - @deprecated - def _get_ack_policy(self): return self.ack_policy - - @deprecated - def _set_ack_policy(self, val): self.ack_policy = val - - @deprecated - def _get_multi_tid(self): return self.multi_tid - - @deprecated - def _set_multi_tid(self, val): self.multi_tid = val - - @deprecated - def _get_tid(self): return self.tid - - @deprecated - def _set_tid(self, val): self.tid = val - # ================================================= - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = buf[self.__hdr_len__:] - self.ctl = socket.ntohs(self.ctl) - - if self.compressed: - self.bmp = struct.unpack('8s', self.data[0:_COMPRESSED_BMP_LENGTH])[0] - else: - self.bmp = struct.unpack('128s', self.data[0:_BMP_LENGTH])[0] - self.data = self.data[len(self.__hdr__) + len(self.bmp):] - - class RTS(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6) - ) - - class CTS(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ) - - class ACK(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ) - - class CFEnd(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ) - - class MGMT_Frame(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('bssid', '6s', '\x00' * 6), - ('frag_seq', 'H', 0) - ) - - class Beacon(dpkt.Packet): - __hdr__ = ( - ('timestamp', 'Q', 0), - ('interval', 'H', 0), - ('capability', 'H', 0) - ) - - class Disassoc(dpkt.Packet): - __hdr__ = ( - ('reason', 'H', 0), - ) - - class Assoc_Req(dpkt.Packet): - __hdr__ = ( - ('capability', 'H', 0), - ('interval', 'H', 0) - ) - - class Assoc_Resp(dpkt.Packet): - __hdr__ = ( - ('capability', 'H', 0), - ('status', 'H', 0), - ('aid', 'H', 0) - ) - - class Reassoc_Req(dpkt.Packet): - __hdr__ = ( - ('capability', 'H', 0), - ('interval', 'H', 0), - ('current_ap', '6s', '\x00' * 6) - ) - - # This obviously doesn't support any of AUTH frames that use encryption - class Auth(dpkt.Packet): - __hdr__ = ( - ('algorithm', 'H', 0), - ('auth_seq', 'H', 0), - ) - - class Deauth(dpkt.Packet): - __hdr__ = ( - ('reason', 'H', 0), - ) - - class Action(dpkt.Packet): - __hdr__ = ( - ('category', 'B', 0), - ('code', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - - action_parser = { - BLOCK_ACK: {BLOCK_ACK_CODE_REQUEST: ('block_ack_request', IEEE80211.BlockAckActionRequest), - BLOCK_ACK_CODE_RESPONSE: ('block_ack_response', IEEE80211.BlockAckActionResponse), - }, - } - - decoder = action_parser[self.category][self.code][1] - field_name = action_parser[self.category][self.code][0] - field = decoder(self.data) - setattr(self, field_name, field) - self.data = field.data - - class BlockAckActionRequest(dpkt.Packet): - __hdr__ = ( - ('dialog', 'B', 0), - ('parameters', 'H', 0), - ('timeout', 'H', 0), - ('starting_seq', 'H', 0), - ) - - class BlockAckActionResponse(dpkt.Packet): - __hdr__ = ( - ('dialog', 'B', 0), - ('status_code', 'H', 0), - ('parameters', 'H', 0), - ('timeout', 'H', 0), - ) - - class Data(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('bssid', '6s', '\x00' * 6), - ('frag_seq', 'H', 0) - ) - - class DataFromDS(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('bssid', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('frag_seq', 'H', 0) - ) - - class DataToDS(dpkt.Packet): - __hdr__ = ( - ('bssid', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('dst', '6s', '\x00' * 6), - ('frag_seq', 'H', 0) - ) - - class DataInterDS(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('da', '6s', '\x00' * 6), - ('frag_seq', 'H', 0), - ('sa', '6s', '\x00' * 6) - ) - - class QoS_Data(dpkt.Packet): - __hdr__ = ( - ('control', 'H', 0), - ) - - class IE(dpkt.Packet): - __hdr__ = ( - ('id', 'B', 0), - ('len', 'B', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.info = buf[2:self.len + 2] - - class FH(dpkt.Packet): - __hdr__ = ( - ('id', 'B', 0), - ('len', 'B', 0), - ('tu', 'H', 0), - ('hopset', 'B', 0), - ('hoppattern', 'B', 0), - ('hopindex', 'B', 0) - ) - - class DS(dpkt.Packet): - __hdr__ = ( - ('id', 'B', 0), - ('len', 'B', 0), - ('ch', 'B', 0) - ) - - class CF(dpkt.Packet): - __hdr__ = ( - ('id', 'B', 0), - ('len', 'B', 0), - ('count', 'B', 0), - ('period', 'B', 0), - ('max', 'H', 0), - ('dur', 'H', 0) - ) - - class TIM(dpkt.Packet): - __hdr__ = ( - ('id', 'B', 0), - ('len', 'B', 0), - ('count', 'B', 0), - ('period', 'B', 0), - ('ctrl', 'H', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.bitmap = buf[5:self.len + 2] - - class IBSS(dpkt.Packet): - __hdr__ = ( - ('id', 'B', 0), - ('len', 'B', 0), - ('atim', 'H', 0) - ) - -def test_802211_ack(): - s = '\xd4\x00\x00\x00\x00\x12\xf0\xb6\x1c\xa4\xff\xff\xff\xff' - ieee = IEEE80211(s, fcs=True) - assert ieee.version == 0 - assert ieee.type == CTL_TYPE - assert ieee.subtype == C_ACK - assert ieee.to_ds == 0 - assert ieee.from_ds == 0 - assert ieee.pwr_mgt == 0 - assert ieee.more_data == 0 - assert ieee.wep == 0 - assert ieee.order == 0 - assert ieee.ack.dst == '\x00\x12\xf0\xb6\x1c\xa4' - fcs = struct.unpack('I', s[-4:])[0] - assert ieee.fcs == fcs - -def test_80211_beacon(): - s = '\x80\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x26\xcb\x18\x6a\x30\x00\x26\xcb\x18\x6a\x30\xa0\xd0\x77\x09\x32\x03\x8f\x00\x00\x00\x66\x00\x31\x04\x00\x04\x43\x41\x45\x4e\x01\x08\x82\x84\x8b\x0c\x12\x96\x18\x24\x03\x01\x01\x05\x04\x00\x01\x00\x00\x07\x06\x55\x53\x20\x01\x0b\x1a\x0b\x05\x00\x00\x6e\x00\x00\x2a\x01\x02\x2d\x1a\x6e\x18\x1b\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x28\x00\x32\x04\x30\x48\x60\x6c\x36\x03\x51\x63\x03\x3d\x16\x01\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x1e\x05\x00\x8f\x00\x0f\x00\xff\x03\x59\x00\x63\x73\x65\x2d\x33\x39\x31\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x96\x06\x00\x40\x96\x00\x14\x00\xdd\x18\x00\x50\xf2\x02\x01\x01\x80\x00\x03\xa4\x00\x00\x27\xa4\x00\x00\x42\x43\x5e\x00\x62\x32\x2f\x00\xdd\x06\x00\x40\x96\x01\x01\x04\xdd\x05\x00\x40\x96\x03\x05\xdd\x05\x00\x40\x96\x0b\x09\xdd\x08\x00\x40\x96\x13\x01\x00\x34\x01\xdd\x05\x00\x40\x96\x14\x05' - ieee = IEEE80211(s, fcs=True) - assert ieee.version == 0 - assert ieee.type == MGMT_TYPE - assert ieee.subtype == M_BEACON - assert ieee.to_ds == 0 - assert ieee.from_ds == 0 - assert ieee.pwr_mgt == 0 - assert ieee.more_data == 0 - assert ieee.wep == 0 - assert ieee.order == 0 - assert ieee.mgmt.dst == '\xff\xff\xff\xff\xff\xff' - assert ieee.mgmt.src == '\x00\x26\xcb\x18\x6a\x30' - assert ieee.beacon.capability == 0x3104 - assert ieee.capability.privacy == 1 - assert ieee.ssid.data == 'CAEN' - assert ieee.rate.data == '\x82\x84\x8b\x0c\x12\x96\x18\x24' - assert ieee.ds.data == '\x01' - assert ieee.tim.data == '\x00\x01\x00\x00' - fcs = struct.unpack('I', s[-4:])[0] - assert ieee.fcs == fcs - -def test_80211_data(): - s = '\x08\x09\x20\x00\x00\x26\xcb\x17\x3d\x91\x00\x16\x44\xb0\xae\xc6\x00\x02\xb3\xd6\x26\x3c\x80\x7e\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04\xac\x17\x00\x00' - ieee = IEEE80211(s, fcs=True) - assert ieee.type == DATA_TYPE - assert ieee.subtype == D_DATA - assert ieee.data_frame.dst == '\x00\x02\xb3\xd6\x26\x3c' - assert ieee.data_frame.src == '\x00\x16\x44\xb0\xae\xc6' - assert ieee.data_frame.frag_seq == 0x807e - assert ieee.data == '\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04' - assert ieee.fcs == struct.unpack('I', '\xac\x17\x00\x00')[0] - - import llc, ip - - llc_pkt = llc.LLC(ieee.data_frame.data) - ip_pkt = ip.IP(llc_pkt.data) - assert ip_pkt.dst == '\x3f\xf5\xd1\x69' - -def test_80211_data_qos(): - s = '\x88\x01\x3a\x01\x00\x26\xcb\x17\x44\xf0\x00\x23\xdf\xc9\xc0\x93\x00\x26\xcb\x17\x44\xf0\x20\x7b\x00\x00\xaa\xaa\x03\x00\x00\x00\x88\x8e\x01\x00\x00\x74\x02\x02\x00\x74\x19\x80\x00\x00\x00\x6a\x16\x03\x01\x00\x65\x01\x00\x00\x61\x03\x01\x4b\x4c\xa7\x7e\x27\x61\x6f\x02\x7b\x3c\x72\x39\xe3\x7b\xd7\x43\x59\x91\x7f\xaa\x22\x47\x51\xb6\x88\x9f\x85\x90\x87\x5a\xd1\x13\x20\xe0\x07\x00\x00\x68\xbd\xa4\x13\xb0\xd5\x82\x7e\xc7\xfb\xe7\xcc\xab\x6e\x5d\x5a\x51\x50\xd4\x45\xc5\xa1\x65\x53\xad\xb5\x88\x5b\x00\x1a\x00\x2f\x00\x05\x00\x04\x00\x35\x00\x0a\x00\x09\x00\x03\x00\x08\x00\x33\x00\x39\x00\x16\x00\x15\x00\x14\x01\x00\xff\xff\xff\xff' - ieee = IEEE80211(s, fcs=True) - assert ieee.type == DATA_TYPE - assert ieee.subtype == D_QOS_DATA - assert ieee.data_frame.dst == '\x00\x26\xcb\x17\x44\xf0' - assert ieee.data_frame.src == '\x00\x23\xdf\xc9\xc0\x93' - assert ieee.data_frame.frag_seq == 0x207b - assert ieee.data == '\xaa\xaa\x03\x00\x00\x00\x88\x8e\x01\x00\x00\x74\x02\x02\x00\x74\x19\x80\x00\x00\x00\x6a\x16\x03\x01\x00\x65\x01\x00\x00\x61\x03\x01\x4b\x4c\xa7\x7e\x27\x61\x6f\x02\x7b\x3c\x72\x39\xe3\x7b\xd7\x43\x59\x91\x7f\xaa\x22\x47\x51\xb6\x88\x9f\x85\x90\x87\x5a\xd1\x13\x20\xe0\x07\x00\x00\x68\xbd\xa4\x13\xb0\xd5\x82\x7e\xc7\xfb\xe7\xcc\xab\x6e\x5d\x5a\x51\x50\xd4\x45\xc5\xa1\x65\x53\xad\xb5\x88\x5b\x00\x1a\x00\x2f\x00\x05\x00\x04\x00\x35\x00\x0a\x00\x09\x00\x03\x00\x08\x00\x33\x00\x39\x00\x16\x00\x15\x00\x14\x01\x00' - assert ieee.qos_data.control == 0x0 - assert ieee.fcs == struct.unpack('I', '\xff\xff\xff\xff')[0] - -def test_bug(): - s = '\x88\x41\x2c\x00\x00\x26\xcb\x17\x44\xf0\x00\x1e\x52\x97\x14\x11\x00\x1f\x6d\xe8\x18\x00\xd0\x07\x00\x00\x6f\x00\x00\x20\x00\x00\x00\x00' - ieee = IEEE80211(s) - assert ieee.wep == 1 - -def test_data_ds(): - # verifying the ToDS and FromDS fields and that we're getting the - # correct values - - s = '\x08\x03\x00\x00\x01\x0b\x85\x00\x00\x00\x00\x26\xcb\x18\x73\x50\x01\x0b\x85\x00\x00\x00\x00\x89\x00\x26\xcb\x18\x73\x50' - ieee = IEEE80211(s) - assert ieee.type == DATA_TYPE - assert ieee.to_ds == 1 - assert ieee.from_ds == 1 - assert ieee.data_frame.sa == '\x00\x26\xcb\x18\x73\x50' - assert ieee.data_frame.src == '\x00\x26\xcb\x18\x73\x50' - assert ieee.data_frame.dst == '\x01\x0b\x85\x00\x00\x00' - assert ieee.data_frame.da == '\x01\x0b\x85\x00\x00\x00' - - s = '\x88\x41\x50\x01\x00\x26\xcb\x17\x48\xc1\x00\x24\x2c\xe7\xfe\x8a\xff\xff\xff\xff\xff\xff\x80\xa0\x00\x00\x09\x1a\x00\x20\x00\x00\x00\x00' - ieee = IEEE80211(s) - assert ieee.type == DATA_TYPE - assert ieee.to_ds == 1 - assert ieee.from_ds == 0 - assert ieee.data_frame.bssid == '\x00\x26\xcb\x17\x48\xc1' - assert ieee.data_frame.src == '\x00\x24\x2c\xe7\xfe\x8a' - assert ieee.data_frame.dst == '\xff\xff\xff\xff\xff\xff' - - s = '\x08\x02\x02\x01\x00\x02\x44\xac\x27\x70\x00\x1f\x33\x39\x75\x44\x00\x1f\x33\x39\x75\x44\x90\xa4' - ieee = IEEE80211(s) - assert ieee.type == DATA_TYPE - assert ieee.to_ds == 0 - assert ieee.from_ds == 1 - assert ieee.data_frame.bssid == '\x00\x1f\x33\x39\x75\x44' - assert ieee.data_frame.src == '\x00\x1f\x33\x39\x75\x44' - assert ieee.data_frame.dst == '\x00\x02\x44\xac\x27\x70' - -def test_compressed_block_ack(): - s = '\x94\x00\x00\x00\x34\xc0\x59\xd6\x3f\x62\xb4\x75\x0e\x46\x83\xc1\x05\x50\x80\xee\x03\x00\x00\x00\x00\x00\x00\x00\xa2\xe4\x98\x45' - ieee = IEEE80211(s, fcs=True) - assert ieee.type == CTL_TYPE - assert ieee.subtype == C_BLOCK_ACK - assert ieee.back.dst == '\x34\xc0\x59\xd6\x3f\x62' - assert ieee.back.src == '\xb4\x75\x0e\x46\x83\xc1' - assert ieee.back.compressed == 1 - assert len(ieee.back.bmp) == 8 - assert ieee.back.ack_policy == 1 - assert ieee.back.tid == 5 - -def test_action_block_ack_request(): - s = '\xd0\x00\x3a\x01\x00\x23\x14\x36\x52\x30\xb4\x75\x0e\x46\x83\xc1\xb4\x75\x0e\x46\x83\xc1\x70\x14\x03\x00\x0d\x02\x10\x00\x00\x40\x29\x06\x50\x33\x9e' - ieee = IEEE80211(s, fcs=True) - assert ieee.type == MGMT_TYPE - assert ieee.subtype == M_ACTION - assert ieee.action.category == BLOCK_ACK - assert ieee.action.code == BLOCK_ACK_CODE_REQUEST - assert ieee.action.block_ack_request.timeout == 0 - parameters = struct.unpack('H', '\x10\x02')[0] - assert ieee.action.block_ack_request.parameters == parameters - -def test_action_block_ack_response(): - s = '\xd0\x00\x3c\x00\xb4\x75\x0e\x46\x83\xc1\x00\x23\x14\x36\x52\x30\xb4\x75\x0e\x46\x83\xc1\xd0\x68\x03\x01\x0d\x00\x00\x02\x10\x88\x13\x9f\xc0\x0b\x75' - ieee = IEEE80211(s, fcs=True) - assert ieee.type == MGMT_TYPE - assert ieee.subtype == M_ACTION - assert ieee.action.category == BLOCK_ACK - assert ieee.action.code == BLOCK_ACK_CODE_RESPONSE - timeout = struct.unpack('H', '\x13\x88')[0] - assert ieee.action.block_ack_response.timeout == timeout - parameters = struct.unpack('H', '\x10\x02')[0] - assert ieee.action.block_ack_response.parameters == parameters - -if __name__ == '__main__': - # Runs all the test associated with this class/file - test_802211_ack() - test_80211_beacon() - test_80211_data() - test_80211_data_qos() - test_bug() - test_data_ds() - test_compressed_block_ack() - test_action_block_ack_request() - test_action_block_ack_response() - print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/igmp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/igmp.py deleted file mode 100644 index 5e5cb166..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/igmp.py +++ /dev/null @@ -1,19 +0,0 @@ -# $Id: igmp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Internet Group Management Protocol.""" - -import dpkt - - -class IGMP(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 0), - ('maxresp', 'B', 0), - ('sum', 'H', 0), - ('group', 'I', 0) - ) - - def __str__(self): - if not self.sum: - self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) - return dpkt.Packet.__str__(self) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip.py deleted file mode 100644 index 0658ff6a..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip.py +++ /dev/null @@ -1,359 +0,0 @@ -# $Id: ip.py 87 2013-03-05 19:41:04Z andrewflnr@gmail.com $ -# -*- coding: utf-8 -*- -"""Internet Protocol.""" - -import dpkt -from decorators import deprecated - - -class IP(dpkt.Packet): - __hdr__ = ( - ('v_hl', 'B', (4 << 4) | (20 >> 2)), - ('tos', 'B', 0), - ('len', 'H', 20), - ('id', 'H', 0), - ('off', 'H', 0), - ('ttl', 'B', 64), - ('p', 'B', 0), - ('sum', 'H', 0), - ('src', '4s', '\x00' * 4), - ('dst', '4s', '\x00' * 4) - ) - _protosw = {} - opts = '' - - @property - def v(self): - return self.v_hl >> 4 - - @v.setter - def v(self, v): - self.v_hl = (v << 4) | (self.v_hl & 0xf) - - @property - def hl(self): - return self.v_hl & 0xf - - @hl.setter - def hl(self, hl): - self.v_hl = (self.v_hl & 0xf0) | hl - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_v(self): - return self.v - - @deprecated - def _set_v(self, v): - self.v = v - - @deprecated - def _get_hl(self): - return self.hl - - @deprecated - def _set_hl(self, hl): - self.hl = hl - - # ================================================= - - def __len__(self): - return self.__hdr_len__ + len(self.opts) + len(self.data) - - def __str__(self): - if self.sum == 0: - self.sum = dpkt.in_cksum(self.pack_hdr() + self.opts) - if (self.p == 6 or self.p == 17) and (self.off & (IP_MF | IP_OFFMASK)) == 0 and \ - isinstance(self.data, dpkt.Packet) and self.data.sum == 0: - # Set zeroed TCP and UDP checksums for non-fragments. - p = str(self.data) - s = dpkt.struct.pack('>4s4sxBH', self.src, self.dst, - self.p, len(p)) - s = dpkt.in_cksum_add(0, s) - s = dpkt.in_cksum_add(s, p) - self.data.sum = dpkt.in_cksum_done(s) - if self.p == 17 and self.data.sum == 0: - self.data.sum = 0xffff # RFC 768 - # XXX - skip transports which don't need the pseudoheader - return self.pack_hdr() + self.opts + str(self.data) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - ol = ((self.v_hl & 0xf) << 2) - self.__hdr_len__ - if ol < 0: - raise dpkt.UnpackError, 'invalid header length' - self.opts = buf[self.__hdr_len__:self.__hdr_len__ + ol] - if self.len: - buf = buf[self.__hdr_len__ + ol:self.len] - else: # very likely due to TCP segmentation offload - buf = buf[self.__hdr_len__ + ol:] - try: - self.data = self._protosw[self.p](buf) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - self.data = buf - - @classmethod - def set_proto(cls, p, pktclass): - cls._protosw[p] = pktclass - - @classmethod - def get_proto(cls, p): - return cls._protosw[p] - -# IP Headers -IP_ADDR_LEN = 0x04 -IP_ADDR_BITS = 0x20 - -IP_HDR_LEN = 0x14 -IP_OPT_LEN = 0x02 -IP_OPT_LEN_MAX = 0x28 -IP_HDR_LEN_MAX = IP_HDR_LEN + IP_OPT_LEN_MAX - -IP_LEN_MAX = 0xffff -IP_LEN_MIN = IP_HDR_LEN - -# Reserved Addresses -IP_ADDR_ANY = "\x00\x00\x00\x00" # 0.0.0.0 -IP_ADDR_BROADCAST = "\xff\xff\xff\xff" # 255.255.255.255 -IP_ADDR_LOOPBACK = "\x7f\x00\x00\x01" # 127.0.0.1 -IP_ADDR_MCAST_ALL = "\xe0\x00\x00\x01" # 224.0.0.1 -IP_ADDR_MCAST_LOCAL = "\xe0\x00\x00\xff" # 224.0.0.255 - -# Type of service (ip_tos), RFC 1349 ("obsoleted by RFC 2474") -IP_TOS_DEFAULT = 0x00 # default -IP_TOS_LOWDELAY = 0x10 # low delay -IP_TOS_THROUGHPUT = 0x08 # high throughput -IP_TOS_RELIABILITY = 0x04 # high reliability -IP_TOS_LOWCOST = 0x02 # low monetary cost - XXX -IP_TOS_ECT = 0x02 # ECN-capable transport -IP_TOS_CE = 0x01 # congestion experienced - -# IP precedence (high 3 bits of ip_tos), hopefully unused -IP_TOS_PREC_ROUTINE = 0x00 -IP_TOS_PREC_PRIORITY = 0x20 -IP_TOS_PREC_IMMEDIATE = 0x40 -IP_TOS_PREC_FLASH = 0x60 -IP_TOS_PREC_FLASHOVERRIDE = 0x80 -IP_TOS_PREC_CRITIC_ECP = 0xa0 -IP_TOS_PREC_INTERNETCONTROL = 0xc0 -IP_TOS_PREC_NETCONTROL = 0xe0 - -# Fragmentation flags (ip_off) -IP_RF = 0x8000 # reserved -IP_DF = 0x4000 # don't fragment -IP_MF = 0x2000 # more fragments (not last frag) -IP_OFFMASK = 0x1fff # mask for fragment offset - -# Time-to-live (ip_ttl), seconds -IP_TTL_DEFAULT = 64 # default ttl, RFC 1122, RFC 1340 -IP_TTL_MAX = 255 # maximum ttl - -# Protocol (ip_p) - http://www.iana.org/assignments/protocol-numbers -IP_PROTO_IP = 0 # dummy for IP -IP_PROTO_HOPOPTS = IP_PROTO_IP # IPv6 hop-by-hop options -IP_PROTO_ICMP = 1 # ICMP -IP_PROTO_IGMP = 2 # IGMP -IP_PROTO_GGP = 3 # gateway-gateway protocol -IP_PROTO_IPIP = 4 # IP in IP -IP_PROTO_ST = 5 # ST datagram mode -IP_PROTO_TCP = 6 # TCP -IP_PROTO_CBT = 7 # CBT -IP_PROTO_EGP = 8 # exterior gateway protocol -IP_PROTO_IGP = 9 # interior gateway protocol -IP_PROTO_BBNRCC = 10 # BBN RCC monitoring -IP_PROTO_NVP = 11 # Network Voice Protocol -IP_PROTO_PUP = 12 # PARC universal packet -IP_PROTO_ARGUS = 13 # ARGUS -IP_PROTO_EMCON = 14 # EMCON -IP_PROTO_XNET = 15 # Cross Net Debugger -IP_PROTO_CHAOS = 16 # Chaos -IP_PROTO_UDP = 17 # UDP -IP_PROTO_MUX = 18 # multiplexing -IP_PROTO_DCNMEAS = 19 # DCN measurement -IP_PROTO_HMP = 20 # Host Monitoring Protocol -IP_PROTO_PRM = 21 # Packet Radio Measurement -IP_PROTO_IDP = 22 # Xerox NS IDP -IP_PROTO_TRUNK1 = 23 # Trunk-1 -IP_PROTO_TRUNK2 = 24 # Trunk-2 -IP_PROTO_LEAF1 = 25 # Leaf-1 -IP_PROTO_LEAF2 = 26 # Leaf-2 -IP_PROTO_RDP = 27 # "Reliable Datagram" proto -IP_PROTO_IRTP = 28 # Inet Reliable Transaction -IP_PROTO_TP = 29 # ISO TP class 4 -IP_PROTO_NETBLT = 30 # Bulk Data Transfer -IP_PROTO_MFPNSP = 31 # MFE Network Services -IP_PROTO_MERITINP = 32 # Merit Internodal Protocol -IP_PROTO_SEP = 33 # Sequential Exchange proto -IP_PROTO_3PC = 34 # Third Party Connect proto -IP_PROTO_IDPR = 35 # Interdomain Policy Route -IP_PROTO_XTP = 36 # Xpress Transfer Protocol -IP_PROTO_DDP = 37 # Datagram Delivery Proto -IP_PROTO_CMTP = 38 # IDPR Ctrl Message Trans -IP_PROTO_TPPP = 39 # TP++ Transport Protocol -IP_PROTO_IL = 40 # IL Transport Protocol -IP_PROTO_IP6 = 41 # IPv6 -IP_PROTO_SDRP = 42 # Source Demand Routing -IP_PROTO_ROUTING = 43 # IPv6 routing header -IP_PROTO_FRAGMENT = 44 # IPv6 fragmentation header -IP_PROTO_RSVP = 46 # Reservation protocol -IP_PROTO_GRE = 47 # General Routing Encap -IP_PROTO_MHRP = 48 # Mobile Host Routing -IP_PROTO_ENA = 49 # ENA -IP_PROTO_ESP = 50 # Encap Security Payload -IP_PROTO_AH = 51 # Authentication Header -IP_PROTO_INLSP = 52 # Integated Net Layer Sec -IP_PROTO_SWIPE = 53 # SWIPE -IP_PROTO_NARP = 54 # NBMA Address Resolution -IP_PROTO_MOBILE = 55 # Mobile IP, RFC 2004 -IP_PROTO_TLSP = 56 # Transport Layer Security -IP_PROTO_SKIP = 57 # SKIP -IP_PROTO_ICMP6 = 58 # ICMP for IPv6 -IP_PROTO_NONE = 59 # IPv6 no next header -IP_PROTO_DSTOPTS = 60 # IPv6 destination options -IP_PROTO_ANYHOST = 61 # any host internal proto -IP_PROTO_CFTP = 62 # CFTP -IP_PROTO_ANYNET = 63 # any local network -IP_PROTO_EXPAK = 64 # SATNET and Backroom EXPAK -IP_PROTO_KRYPTOLAN = 65 # Kryptolan -IP_PROTO_RVD = 66 # MIT Remote Virtual Disk -IP_PROTO_IPPC = 67 # Inet Pluribus Packet Core -IP_PROTO_DISTFS = 68 # any distributed fs -IP_PROTO_SATMON = 69 # SATNET Monitoring -IP_PROTO_VISA = 70 # VISA Protocol -IP_PROTO_IPCV = 71 # Inet Packet Core Utility -IP_PROTO_CPNX = 72 # Comp Proto Net Executive -IP_PROTO_CPHB = 73 # Comp Protocol Heart Beat -IP_PROTO_WSN = 74 # Wang Span Network -IP_PROTO_PVP = 75 # Packet Video Protocol -IP_PROTO_BRSATMON = 76 # Backroom SATNET Monitor -IP_PROTO_SUNND = 77 # SUN ND Protocol -IP_PROTO_WBMON = 78 # WIDEBAND Monitoring -IP_PROTO_WBEXPAK = 79 # WIDEBAND EXPAK -IP_PROTO_EON = 80 # ISO CNLP -IP_PROTO_VMTP = 81 # Versatile Msg Transport -IP_PROTO_SVMTP = 82 # Secure VMTP -IP_PROTO_VINES = 83 # VINES -IP_PROTO_TTP = 84 # TTP -IP_PROTO_NSFIGP = 85 # NSFNET-IGP -IP_PROTO_DGP = 86 # Dissimilar Gateway Proto -IP_PROTO_TCF = 87 # TCF -IP_PROTO_EIGRP = 88 # EIGRP -IP_PROTO_OSPF = 89 # Open Shortest Path First -IP_PROTO_SPRITERPC = 90 # Sprite RPC Protocol -IP_PROTO_LARP = 91 # Locus Address Resolution -IP_PROTO_MTP = 92 # Multicast Transport Proto -IP_PROTO_AX25 = 93 # AX.25 Frames -IP_PROTO_IPIPENCAP = 94 # yet-another IP encap -IP_PROTO_MICP = 95 # Mobile Internet Ctrl -IP_PROTO_SCCSP = 96 # Semaphore Comm Sec Proto -IP_PROTO_ETHERIP = 97 # Ethernet in IPv4 -IP_PROTO_ENCAP = 98 # encapsulation header -IP_PROTO_ANYENC = 99 # private encryption scheme -IP_PROTO_GMTP = 100 # GMTP -IP_PROTO_IFMP = 101 # Ipsilon Flow Mgmt Proto -IP_PROTO_PNNI = 102 # PNNI over IP -IP_PROTO_PIM = 103 # Protocol Indep Multicast -IP_PROTO_ARIS = 104 # ARIS -IP_PROTO_SCPS = 105 # SCPS -IP_PROTO_QNX = 106 # QNX -IP_PROTO_AN = 107 # Active Networks -IP_PROTO_IPCOMP = 108 # IP Payload Compression -IP_PROTO_SNP = 109 # Sitara Networks Protocol -IP_PROTO_COMPAQPEER = 110 # Compaq Peer Protocol -IP_PROTO_IPXIP = 111 # IPX in IP -IP_PROTO_VRRP = 112 # Virtual Router Redundancy -IP_PROTO_PGM = 113 # PGM Reliable Transport -IP_PROTO_ANY0HOP = 114 # 0-hop protocol -IP_PROTO_L2TP = 115 # Layer 2 Tunneling Proto -IP_PROTO_DDX = 116 # D-II Data Exchange (DDX) -IP_PROTO_IATP = 117 # Interactive Agent Xfer -IP_PROTO_STP = 118 # Schedule Transfer Proto -IP_PROTO_SRP = 119 # SpectraLink Radio Proto -IP_PROTO_UTI = 120 # UTI -IP_PROTO_SMP = 121 # Simple Message Protocol -IP_PROTO_SM = 122 # SM -IP_PROTO_PTP = 123 # Performance Transparency -IP_PROTO_ISIS = 124 # ISIS over IPv4 -IP_PROTO_FIRE = 125 # FIRE -IP_PROTO_CRTP = 126 # Combat Radio Transport -IP_PROTO_CRUDP = 127 # Combat Radio UDP -IP_PROTO_SSCOPMCE = 128 # SSCOPMCE -IP_PROTO_IPLT = 129 # IPLT -IP_PROTO_SPS = 130 # Secure Packet Shield -IP_PROTO_PIPE = 131 # Private IP Encap in IP -IP_PROTO_SCTP = 132 # Stream Ctrl Transmission -IP_PROTO_FC = 133 # Fibre Channel -IP_PROTO_RSVPIGN = 134 # RSVP-E2E-IGNORE -IP_PROTO_RAW = 255 # Raw IP packets -IP_PROTO_RESERVED = IP_PROTO_RAW # Reserved -IP_PROTO_MAX = 255 - -# XXX - auto-load IP dispatch table from IP_PROTO_* definitions - - -def __load_protos(): - g = globals() - for k, v in g.iteritems(): - if k.startswith('IP_PROTO_'): - name = k[9:].lower() - try: - mod = __import__(name, g) - except ImportError: - continue - IP.set_proto(v, getattr(mod, name.upper())) - - -if not IP._protosw: - __load_protos() - - -def test_ip(): - import udp - - s = 'E\x00\x00"\x00\x00\x00\x00@\x11r\xc0\x01\x02\x03\x04\x01\x02\x03\x04\x00o\x00\xde\x00\x0e\xbf5foobar' - ip = IP(id=0, src='\x01\x02\x03\x04', dst='\x01\x02\x03\x04', p=17) - u = udp.UDP(sport=111, dport=222) - u.data = 'foobar' - u.ulen += len(u.data) - ip.data = u - ip.len += len(u) - assert (str(ip) == s) - - ip = IP(s) - assert (str(ip) == s) - assert (ip.udp.sport == 111) - assert (ip.udp.data == 'foobar') - - -def test_hl(): # Todo chack this test method - s = 'BB\x03\x00\x00\x00\x00\x00\x00\x00\xd0\x00\xec\xbc\xa5\x00\x00\x00\x03\x80\x00\x00\xd0\x01\xf2\xac\xa5"0\x01\x00\x14\x00\x02\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00' - try: - IP(s) - except dpkt.UnpackError: - pass - - -def test_opt(): - s = '\x4f\x00\x00\x50\xae\x08\x00\x00\x40\x06\x17\xfc\xc0\xa8\x0a\x26\xc0\xa8\x0a\x01\x07\x27\x08\x01\x02\x03\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - ip = IP(s) - ip.sum = 0 - assert (str(ip) == s) - - -def test_zerolen(): - import tcp - d = 'X' * 2048 - s = 'E\x00\x00\x004\xce@\x00\x80\x06\x00\x00\x7f\x00\x00\x01\x7f\x00\x00\x01\xccN\x0c8`\xff\xc6N_\x8a\x12\x98P\x18@):\xa3\x00\x00' + d - ip = IP(s) - assert (isinstance(ip.data, tcp.TCP)) - assert (ip.tcp.data == d) - - -if __name__ == '__main__': - test_ip() - test_hl() - test_opt() - test_zerolen() - print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip6.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip6.py deleted file mode 100644 index 099abfcb..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ip6.py +++ /dev/null @@ -1,383 +0,0 @@ -# $Id: ip6.py 87 2013-03-05 19:41:04Z andrewflnr@gmail.com $ -# -*- coding: utf-8 -*- -"""Internet Protocol, version 6.""" - -import dpkt -from decorators import deprecated - - -class IP6(dpkt.Packet): - __hdr__ = ( - ('v_fc_flow', 'I', 0x60000000L), - ('plen', 'H', 0), # payload length (not including header) - ('nxt', 'B', 0), # next header protocol - ('hlim', 'B', 0), # hop limit - ('src', '16s', ''), - ('dst', '16s', '') - ) - - # XXX - to be shared with IP. We cannot refer to the ip module - # right now because ip.__load_protos() expects the IP6 class to be - # defined. - _protosw = None - - @property - def v(self): - return self.v_fc_flow >> 28 - - @v.setter - def v(self, v): - self.v_fc_flow = (self.v_fc_flow & ~0xf0000000L) | (v << 28) - - @property - def fc(self): - return (self.v_fc_flow >> 20) & 0xff - - @fc.setter - def fc(self, v): - self.v_fc_flow = (self.v_fc_flow & ~0xff00000L) | (v << 20) - - @property - def flow(self): - return self.v_fc_flow & 0xfffff - - @flow.setter - def flow(self, v): - self.v_fc_flow = (self.v_fc_flow & ~0xfffff) | (v & 0xfffff) - - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_v(self): - return self.v - - @deprecated - def _set_v(self, v): - self.v = v - - @deprecated - def _get_fc(self): - return self.fc - - @deprecated - def _set_fc(self, v): - self.rc = v - - @deprecated - def _get_flow(self): - return self.flow - - @deprecated - def _set_flow(self, v): - self.flow = v - - # ================================================= - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.extension_hdrs = dict(((i, None) for i in ext_hdrs)) - - if self.plen: - buf = self.data[:self.plen] - else: # due to jumbo payload or TSO - buf = self.data - - next = self.nxt - - while next in ext_hdrs: - ext = ext_hdrs_cls[next](buf) - self.extension_hdrs[next] = ext - buf = buf[ext.length:] - next = ext.nxt - - # set the payload protocol id - setattr(self, 'p', next) - - try: - self.data = self._protosw[next](buf) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - self.data = buf - - def headers_str(self): - """Output extension headers in order defined in RFC1883 (except dest opts)""" - - header_str = "" - - for hdr in ext_hdrs: - if not self.extension_hdrs[hdr] is None: - header_str += str(self.extension_hdrs[hdr]) - return header_str - - def __str__(self): - if (self.nxt == 6 or self.nxt == 17 or self.nxt == 58) and not self.data.sum: - # XXX - set TCP, UDP, and ICMPv6 checksums - p = str(self.data) - s = dpkt.struct.pack('>16s16sxBH', self.src, self.dst, self.nxt, len(p)) - s = dpkt.in_cksum_add(0, s) - s = dpkt.in_cksum_add(s, p) - try: - self.data.sum = dpkt.in_cksum_done(s) - except AttributeError: - pass - return self.pack_hdr() + self.headers_str() + str(self.data) - - @classmethod - def set_proto(cls, p, pktclass): - cls._protosw[p] = pktclass - - @classmethod - def get_proto(cls, p): - return cls._protosw[p] - - -import ip -# We are most likely still in the middle of ip.__load_protos() which -# implicitly loads this module through __import__(), so the content of -# ip.IP._protosw is still incomplete at the moment. By sharing the -# same dictionary by reference as opposed to making a copy, when -# ip.__load_protos() finishes, we will also automatically get the most -# up-to-date dictionary. -IP6._protosw = ip.IP._protosw - - -class IP6ExtensionHeader(dpkt.Packet): - """ - An extension header is very similar to a 'sub-packet'. - We just want to re-use all the hdr unpacking etc. - """ - pass - - -class IP6OptsHeader(IP6ExtensionHeader): - __hdr__ = ( - ('nxt', 'B', 0), # next extension header protocol - ('len', 'B', 0) # option data length in 8 octect units (ignoring first 8 octets) so, len 0 == 64bit header - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - setattr(self, 'length', (self.len + 1) * 8) - options = [] - - index = 0 - - while index < self.length - 2: - opt_type = ord(self.data[index]) - - # PAD1 option - if opt_type == 0: - index += 1 - continue - - opt_length = ord(self.data[index + 1]) - - if opt_type == 1: # PADN option - # PADN uses opt_length bytes in total - index += opt_length + 2 - continue - - options.append( - {'type': opt_type, 'opt_length': opt_length, 'data': self.data[index + 2:index + 2 + opt_length]}) - - # add the two chars and the option_length, to move to the next option - index += opt_length + 2 - - setattr(self, 'options', options) - - -class IP6HopOptsHeader(IP6OptsHeader): pass - - -class IP6DstOptsHeader(IP6OptsHeader): pass - - -class IP6RoutingHeader(IP6ExtensionHeader): - __hdr__ = ( - ('nxt', 'B', 0), # next extension header protocol - ('len', 'B', 0), # extension data length in 8 octect units (ignoring first 8 octets) (<= 46 for type 0) - ('type', 'B', 0), # routing type (currently, only 0 is used) - ('segs_left', 'B', 0), # remaining segments in route, until destination (<= 23) - ('rsvd_sl_bits', 'I', 0), # reserved (1 byte), strict/loose bitmap for addresses - ) - - @property - def sl_bits(self): - return self.rsvd_sl_bits & 0xffffff - - @sl_bits.setter - def sl_bits(self, v): - self.rsvd_sl_bits = (self.rsvd_sl_bits & ~0xfffff) | (v & 0xfffff) - - # Deprecated methods, will be removed in the future - # ================================================= - def _get_sl_bits(self): return self.sl_bits - - def _set_sl_bits(self, v): self.sl_bits = v - - # ================================================= - - def unpack(self, buf): - hdr_size = 8 - addr_size = 16 - - dpkt.Packet.unpack(self, buf) - - addresses = [] - num_addresses = self.len / 2 - buf = buf[hdr_size:hdr_size + num_addresses * addr_size] - - for i in range(num_addresses): - addresses.append(buf[i * addr_size: i * addr_size + addr_size]) - - self.data = buf - setattr(self, 'addresses', addresses) - setattr(self, 'length', self.len * 8 + 8) - - -class IP6FragmentHeader(IP6ExtensionHeader): - __hdr__ = ( - ('nxt', 'B', 0), # next extension header protocol - ('resv', 'B', 0), # reserved, set to 0 - ('frag_off_resv_m', 'H', 0), # frag offset (13 bits), reserved zero (2 bits), More frags flag - ('id', 'I', 0) # fragments id - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - setattr(self, 'length', self.__hdr_len__) - - @property - def frag_off(self): - return self.frag_off_resv_m >> 3 - - @frag_off.setter - def frag_off(self, v): - self.frag_off_resv_m = (self.frag_off_resv_m & ~0xfff8) | (v << 3) - - @property - def m_flag(self): - return self.frag_off_resv_m & 1 - - @m_flag.setter - def m_flag(self, v): - self.frag_off_resv_m = (self.frag_off_resv_m & ~0xfffe) | v - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_frag_off(self): return self.flag_off - - @deprecated - def _set_frag_off(self, v): self.flag_off = v - - @deprecated - def _get_m_flag(self): return self.m_flag - - @deprecated - def _set_m_flag(self, v): self.m_flag = v - - # ================================================= - - -class IP6AHHeader(IP6ExtensionHeader): - __hdr__ = ( - ('nxt', 'B', 0), # next extension header protocol - ('len', 'B', 0), # length of header in 4 octet units (ignoring first 2 units) - ('resv', 'H', 0), # reserved, 2 bytes of 0 - ('spi', 'I', 0), # SPI security parameter index - ('seq', 'I', 0) # sequence no. - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - setattr(self, 'length', (self.len + 2) * 4) - setattr(self, 'auth_data', self.data[:(self.len - 1) * 4]) - - -class IP6ESPHeader(IP6ExtensionHeader): - def unpack(self, buf): - raise NotImplementedError("ESP extension headers are not supported.") - - -ext_hdrs = [ip.IP_PROTO_HOPOPTS, ip.IP_PROTO_ROUTING, ip.IP_PROTO_FRAGMENT, ip.IP_PROTO_AH, ip.IP_PROTO_ESP, - ip.IP_PROTO_DSTOPTS] -ext_hdrs_cls = {ip.IP_PROTO_HOPOPTS: IP6HopOptsHeader, - ip.IP_PROTO_ROUTING: IP6RoutingHeader, - ip.IP_PROTO_FRAGMENT: IP6FragmentHeader, - ip.IP_PROTO_ESP: IP6ESPHeader, - ip.IP_PROTO_AH: IP6AHHeader, - ip.IP_PROTO_DSTOPTS: IP6DstOptsHeader} - - -def test_ipg(): - s = '`\x00\x00\x00\x00(\x06@\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x11$\xff\xfe\x8c\x11\xde\xfe\x80\x00\x00\x00\x00\x00\x00\x02\xb0\xd0\xff\xfe\xe1\x80r\xcd\xca\x00\x16\x04\x84F\xd5\x00\x00\x00\x00\xa0\x02\xff\xff\xf8\t\x00\x00\x02\x04\x05\xa0\x01\x03\x03\x00\x01\x01\x08\n}\x185?\x00\x00\x00\x00' - _ip = IP6(s) - # print `ip` - _ip.data.sum = 0 - s2 = str(_ip) - IP6(s) - # print `ip2` - assert (s == s2) - - -def test_ip6_routing_header(): - s = '`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x02\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' - ip = IP6(s) - s2 = str(ip) - # 43 is Routing header id - assert (len(ip.extension_hdrs[43].addresses) == 2) - assert (ip.tcp) - assert (s == s2) - - -def test_ip6_fragment_header(): - s = '\x06\xee\xff\xfb\x00\x00\xff\xff' - fh = IP6FragmentHeader(s) - # s2 = str(fh) variable 's2' is not used - str(fh) - assert (fh.nxt == 6) - assert (fh.id == 65535) - assert (fh.frag_off == 8191) - assert (fh.m_flag == 1) - - -def test_ip6_options_header(): - s = ';\x04\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x02\x00\x00' - options = IP6OptsHeader(s).options - assert (len(options) == 3) - - -def test_ip6_ah_header(): - s = ';\x04\x00\x00\x02\x02\x02\x02\x01\x01\x01\x01\x78\x78\x78\x78\x78\x78\x78\x78' - ah = IP6AHHeader(s) - assert (ah.length == 24) - assert (ah.auth_data == 'xxxxxxxx') - assert (ah.spi == 0x2020202) - assert (ah.seq == 0x1010101) - - -def test_ip6_extension_headers(): - p = '`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x02\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' - ip = IP6(p) - o = ';\x04\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x02\x00\x00' - options = IP6HopOptsHeader(o) - ip.extension_hdrs[0] = options - fh = '\x06\xee\xff\xfb\x00\x00\xff\xff' - ip.extension_hdrs[44] = IP6FragmentHeader(fh) - ah = ';\x04\x00\x00\x02\x02\x02\x02\x01\x01\x01\x01\x78\x78\x78\x78\x78\x78\x78\x78' - ip.extension_hdrs[51] = IP6AHHeader(ah) - do = ';\x02\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - ip.extension_hdrs[60] = IP6DstOptsHeader(do) - assert (len([k for k in ip.extension_hdrs if (not ip.extension_hdrs[k] is None)]) == 5) - - -if __name__ == '__main__': - test_ipg() - test_ip6_routing_header() - test_ip6_fragment_header() - test_ip6_options_header() - test_ip6_ah_header() - test_ip6_extension_headers() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ipx.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ipx.py deleted file mode 100644 index b95ff0d9..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ipx.py +++ /dev/null @@ -1,18 +0,0 @@ -# $Id: ipx.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Internetwork Packet Exchange.""" - -import dpkt - -IPX_HDR_LEN = 30 - - -class IPX(dpkt.Packet): - __hdr__ = ( - ('sum', 'H', 0xffff), - ('len', 'H', IPX_HDR_LEN), - ('tc', 'B', 0), - ('pt', 'B', 0), - ('dst', '12s', ''), - ('src', '12s', '') - ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/llc.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/llc.py deleted file mode 100644 index ce7429f6..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/llc.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- - -import struct -import dpkt -import stp -import ethernet - - -class LLC(dpkt.Packet): - _typesw = {} - - def _unpack_data(self, buf): - if self.type == ethernet.ETH_TYPE_8021Q: - self.tag, self.type = struct.unpack('>HH', buf[:4]) - buf = buf[4:] - elif self.type == ethernet.ETH_TYPE_MPLS or self.type == ethernet.ETH_TYPE_MPLS_MCAST: - # XXX - skip labels - for i in range(24): - if struct.unpack('>I', buf[i:i + 4])[0] & 0x0100: # MPLS_STACK_BOTTOM - break - self.type = ethernet.ETH_TYPE_IP - buf = buf[(i + 1) * 4:] - try: - self.data = self._typesw[self.type](buf) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - self.data = buf - - def unpack(self, buf): - self.data = buf - if self.data.startswith('\xaa\xaa'): - # SNAP - self.type = struct.unpack('>H', self.data[6:8])[0] - self._unpack_data(self.data[8:]) - else: - # non-SNAP - dsap = ord(self.data[0]) - if dsap == 0x06: # SAP_IP - self.data = self.ip = self._typesw[ethernet.ETH_TYPE_IP](self.data[3:]) - elif dsap == 0x10 or dsap == 0xe0: # SAP_NETWARE{1,2} - self.data = self.ipx = self._typesw[ethernet.ETH_TYPE_IPX](self.data[3:]) - elif dsap == 0x42: # SAP_STP - self.data = self.stp = stp.STP(self.data[3:]) - - -def test_llc(): - s = '\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04\xac\x17\x00\x00' - import ip - llc_pkt = LLC(s) - ip_pkt = ip.IP(llc_pkt.data) - assert (llc_pkt.type == ethernet.ETH_TYPE_IP) - assert (ip_pkt.dst == '\x3f\xf5\xd1\x69') - -if __name__ == '__main__': - test_llc() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/loopback.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/loopback.py deleted file mode 100644 index 5bf24bf5..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/loopback.py +++ /dev/null @@ -1,25 +0,0 @@ -# $Id: loopback.py 38 2007-03-17 03:33:16Z dugsong $ -# -*- coding: utf-8 -*- -"""Platform-dependent loopback header.""" - -import dpkt -import ethernet -import ip -import ip6 - - -class Loopback(dpkt.Packet): - __hdr__ = (('family', 'I', 0), ) - __byte_order__ = '@' - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.family == 2: - self.data = ip.IP(self.data) - elif self.family == 0x02000000: - self.family = 2 - self.data = ip.IP(self.data) - elif self.family in (24, 28, 30): - self.data = ip6.IP6(self.data) - elif self.family > 1500: - self.data = ethernet.Ethernet(self.data) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/mrt.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/mrt.py deleted file mode 100644 index aa1dc78a..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/mrt.py +++ /dev/null @@ -1,96 +0,0 @@ -# $Id: mrt.py 29 2007-01-26 02:29:07Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Multi-threaded Routing Toolkit.""" - -import dpkt -import bgp - -# Multi-threaded Routing Toolkit -# http://www.ietf.org/internet-drafts/draft-ietf-grow-mrt-03.txt - -# MRT Types -NULL = 0 -START = 1 -DIE = 2 -I_AM_DEAD = 3 -PEER_DOWN = 4 -BGP = 5 # Deprecated by BGP4MP -RIP = 6 -IDRP = 7 -RIPNG = 8 -BGP4PLUS = 9 # Deprecated by BGP4MP -BGP4PLUS_01 = 10 # Deprecated by BGP4MP -OSPF = 11 -TABLE_DUMP = 12 -BGP4MP = 16 -BGP4MP_ET = 17 -ISIS = 32 -ISIS_ET = 33 -OSPF_ET = 64 - -# BGP4MP Subtypes -BGP4MP_STATE_CHANGE = 0 -BGP4MP_MESSAGE = 1 -BGP4MP_ENTRY = 2 -BGP4MP_SNAPSHOT = 3 -BGP4MP_MESSAGE_32BIT_AS = 4 - -# Address Family Types -AFI_IPv4 = 1 -AFI_IPv6 = 2 - - -class MRTHeader(dpkt.Packet): - __hdr__ = ( - ('ts', 'I', 0), - ('type', 'H', 0), - ('subtype', 'H', 0), - ('len', 'I', 0) - ) - - -class TableDump(dpkt.Packet): - __hdr__ = ( - ('view', 'H', 0), - ('seq', 'H', 0), - ('prefix', 'I', 0), - ('prefix_len', 'B', 0), - ('status', 'B', 1), - ('originated_ts', 'I', 0), - ('peer_ip', 'I', 0), - ('peer_as', 'H', 0), - ('attr_len', 'H', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - plen = self.attr_len - l = [] - while plen > 0: - attr = bgp.BGP.Update.Attribute(self.data) - self.data = self.data[len(attr):] - plen -= len(attr) - l.append(attr) - self.attributes = l - - -class BGP4MPMessage(dpkt.Packet): - __hdr__ = ( - ('src_as', 'H', 0), - ('dst_as', 'H', 0), - ('intf', 'H', 0), - ('family', 'H', AFI_IPv4), - ('src_ip', 'I', 0), - ('dst_ip', 'I', 0) - ) - - -class BGP4MPMessage_32(dpkt.Packet): - __hdr__ = ( - ('src_as', 'I', 0), - ('dst_as', 'I', 0), - ('intf', 'H', 0), - ('family', 'H', AFI_IPv4), - ('src_ip', 'I', 0), - ('dst_ip', 'I', 0) - ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netbios.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netbios.py deleted file mode 100644 index 54586327..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netbios.py +++ /dev/null @@ -1,166 +0,0 @@ -# $Id: netbios.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Network Basic Input/Output System.""" - -import struct -import dpkt -import dns - - -def encode_name(name): - """Return the NetBIOS first-level encoded name.""" - l = [] - for c in struct.pack('16s', name): - c = ord(c) - l.append(chr((c >> 4) + 0x41)) - l.append(chr((c & 0xf) + 0x41)) - return ''.join(l) - - -def decode_name(nbname): - """Return the NetBIOS first-level decoded nbname.""" - if len(nbname) != 32: - return nbname - l = [] - for i in range(0, 32, 2): - l.append(chr(((ord(nbname[i]) - 0x41) << 4) | - ((ord(nbname[i + 1]) - 0x41) & 0xf))) - return ''.join(l).split('\x00', 1)[0] - -# RR types -NS_A = 0x01 # IP address -NS_NS = 0x02 # Name Server -NS_NULL = 0x0A # NULL -NS_NB = 0x20 # NetBIOS general Name Service -NS_NBSTAT = 0x21 # NetBIOS NODE STATUS - -# RR classes -NS_IN = 1 - -# NBSTAT name flags -NS_NAME_G = 0x8000 # group name (as opposed to unique) -NS_NAME_DRG = 0x1000 # deregister -NS_NAME_CNF = 0x0800 # conflict -NS_NAME_ACT = 0x0400 # active -NS_NAME_PRM = 0x0200 # permanent - -# NBSTAT service names -nbstat_svcs = { - # (service, unique): list of ordered (name prefix, service name) tuples - (0x00, 0): [('', 'Domain Name')], - (0x00, 1): [('IS~', 'IIS'), ('', 'Workstation Service')], - (0x01, 0): [('__MSBROWSE__', 'Master Browser')], - (0x01, 1): [('', 'Messenger Service')], - (0x03, 1): [('', 'Messenger Service')], - (0x06, 1): [('', 'RAS Server Service')], - (0x1B, 1): [('', 'Domain Master Browser')], - (0x1C, 0): [('INet~Services', 'IIS'), ('', 'Domain Controllers')], - (0x1D, 1): [('', 'Master Browser')], - (0x1E, 0): [('', 'Browser Service Elections')], - (0x1F, 1): [('', 'NetDDE Service')], - (0x20, 1): [('Forte_$ND800ZA', 'DCA IrmaLan Gateway Server Service'), - ('', 'File Server Service')], - (0x21, 1): [('', 'RAS Client Service')], - (0x22, 1): [('', 'Microsoft Exchange Interchange(MSMail Connector)')], - (0x23, 1): [('', 'Microsoft Exchange Store')], - (0x24, 1): [('', 'Microsoft Exchange Directory')], - (0x2B, 1): [('', 'Lotus Notes Server Service')], - (0x2F, 0): [('IRISMULTICAST', 'Lotus Notes')], - (0x30, 1): [('', 'Modem Sharing Server Service')], - (0x31, 1): [('', 'Modem Sharing Client Service')], - (0x33, 0): [('IRISNAMESERVER', 'Lotus Notes')], - (0x43, 1): [('', 'SMS Clients Remote Control')], - (0x44, 1): [('', 'SMS Administrators Remote Control Tool')], - (0x45, 1): [('', 'SMS Clients Remote Chat')], - (0x46, 1): [('', 'SMS Clients Remote Transfer')], - (0x4C, 1): [('', 'DEC Pathworks TCPIP service on Windows NT')], - (0x52, 1): [('', 'DEC Pathworks TCPIP service on Windows NT')], - (0x87, 1): [('', 'Microsoft Exchange MTA')], - (0x6A, 1): [('', 'Microsoft Exchange IMC')], - (0xBE, 1): [('', 'Network Monitor Agent')], - (0xBF, 1): [('', 'Network Monitor Application')] -} - - -def node_to_service_name((name, service, flags)): - try: - unique = int(flags & NS_NAME_G == 0) - for namepfx, svcname in nbstat_svcs[(service, unique)]: - if name.startswith(namepfx): - return svcname - except KeyError: - pass - return '' - - -class NS(dns.DNS): - """NetBIOS Name Service.""" - - class Q(dns.DNS.Q): - pass - - class RR(dns.DNS.RR): - """NetBIOS resource record.""" - - def unpack_rdata(self, buf, off): - if self.type == NS_A: - self.ip = self.rdata - elif self.type == NS_NBSTAT: - num = ord(self.rdata[0]) - off = 1 - l = [] - for i in range(num): - name = self.rdata[off:off + 15].split(None, 1)[0].split('\x00', 1)[0] - service = ord(self.rdata[off + 15]) - off += 16 - flags = struct.unpack('>H', self.rdata[off:off + 2])[0] - off += 2 - l.append((name, service, flags)) - self.nodenames = l - # XXX - skip stats - - def pack_name(self, buf, name): - return dns.DNS.pack_name(self, buf, encode_name(name)) - - def unpack_name(self, buf, off): - name, off = dns.DNS.unpack_name(self, buf, off) - return decode_name(name), off - - -class Session(dpkt.Packet): - """NetBIOS Session Service.""" - __hdr__ = ( - ('type', 'B', 0), - ('flags', 'B', 0), - ('len', 'H', 0) - ) - - -SSN_MESSAGE = 0 -SSN_REQUEST = 1 -SSN_POSITIVE = 2 -SSN_NEGATIVE = 3 -SSN_RETARGET = 4 -SSN_KEEPALIVE = 5 - - -class Datagram(dpkt.Packet): - """NetBIOS Datagram Service.""" - __hdr__ = ( - ('type', 'B', 0), - ('flags', 'B', 0), - ('id', 'H', 0), - ('src', 'I', 0), - ('sport', 'H', 0), - ('len', 'H', 0), - ('off', 'H', 0) - ) - - -DGRAM_UNIQUE = 0x10 -DGRAM_GROUP = 0x11 -DGRAM_BROADCAST = 0x12 -DGRAM_ERROR = 0x13 -DGRAM_QUERY = 0x14 -DGRAM_POSITIVE = 0x15 -DGRAM_NEGATIVE = 0x16 diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netflow.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netflow.py deleted file mode 100644 index 4e53ba79..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/netflow.py +++ /dev/null @@ -1,219 +0,0 @@ -# $Id: netflow.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Cisco Netflow.""" - -import itertools -import struct -import dpkt - - -class NetflowBase(dpkt.Packet): - """Base class for Cisco Netflow packets.""" - - __hdr__ = ( - ('version', 'H', 1), - ('count', 'H', 0), - ('sys_uptime', 'I', 0), - ('unix_sec', 'I', 0), - ('unix_nsec', 'I', 0) - ) - - def __len__(self): - return self.__hdr_len__ + (len(self.data[0]) * self.count) - - def __str__(self): - # for now, don't try to enforce any size limits - self.count = len(self.data) - return self.pack_hdr() + ''.join(map(str, self.data)) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - buf = self.data - l = [] - while buf: - flow = self.NetflowRecord(buf) - l.append(flow) - buf = buf[len(flow):] - self.data = l - - class NetflowRecordBase(dpkt.Packet): - """Base class for netflow v1-v7 netflow records.""" - - # performance optimizations - def __len__(self): - # don't bother with data - return self.__hdr_len__ - - def __str__(self): - # don't bother with data - return self.pack_hdr() - - def unpack(self, buf): - # don't bother with data - for k, v in itertools.izip(self.__hdr_fields__, - struct.unpack(self.__hdr_fmt__, buf[:self.__hdr_len__])): - setattr(self, k, v) - self.data = "" - - -class Netflow1(NetflowBase): - """Netflow Version 1.""" - - class NetflowRecord(NetflowBase.NetflowRecordBase): - """Netflow v1 flow record.""" - __hdr__ = ( - ('src_addr', 'I', 0), - ('dst_addr', 'I', 0), - ('next_hop', 'I', 0), - ('input_iface', 'H', 0), - ('output_iface', 'H', 0), - ('pkts_sent', 'I', 0), - ('bytes_sent', 'I', 0), - ('start_time', 'I', 0), - ('end_time', 'I', 0), - ('src_port', 'H', 0), - ('dst_port', 'H', 0), - ('pad1', 'H', 0), - ('ip_proto', 'B', 0), - ('tos', 'B', 0), - ('tcp_flags', 'B', 0), - ('pad2', 'B', 0), - ('pad3', 'H', 0), - ('reserved', 'I', 0) - ) - - -# FYI, versions 2-4 don't appear to have ever seen the light of day. - -class Netflow5(NetflowBase): - """Netflow Version 5.""" - __hdr__ = NetflowBase.__hdr__ + ( - ('flow_sequence', 'I', 0), - ('engine_type', 'B', 0), - ('engine_id', 'B', 0), - ('reserved', 'H', 0), - ) - - class NetflowRecord(NetflowBase.NetflowRecordBase): - """Netflow v5 flow record.""" - __hdr__ = ( - ('src_addr', 'I', 0), - ('dst_addr', 'I', 0), - ('next_hop', 'I', 0), - ('input_iface', 'H', 0), - ('output_iface', 'H', 0), - ('pkts_sent', 'I', 0), - ('bytes_sent', 'I', 0), - ('start_time', 'I', 0), - ('end_time', 'I', 0), - ('src_port', 'H', 0), - ('dst_port', 'H', 0), - ('pad1', 'B', 0), - ('tcp_flags', 'B', 0), - ('ip_proto', 'B', 0), - ('tos', 'B', 0), - ('src_as', 'H', 0), - ('dst_as', 'H', 0), - ('src_mask', 'B', 0), - ('dst_mask', 'B', 0), - ('pad2', 'H', 0), - ) - - -class Netflow6(NetflowBase): - """Netflow Version 6. - XXX - unsupported by Cisco, but may be found in the field. - """ - __hdr__ = Netflow5.__hdr__ - - class NetflowRecord(NetflowBase.NetflowRecordBase): - """Netflow v6 flow record.""" - __hdr__ = ( - ('src_addr', 'I', 0), - ('dst_addr', 'I', 0), - ('next_hop', 'I', 0), - ('input_iface', 'H', 0), - ('output_iface', 'H', 0), - ('pkts_sent', 'I', 0), - ('bytes_sent', 'I', 0), - ('start_time', 'I', 0), - ('end_time', 'I', 0), - ('src_port', 'H', 0), - ('dst_port', 'H', 0), - ('pad1', 'B', 0), - ('tcp_flags', 'B', 0), - ('ip_proto', 'B', 0), - ('tos', 'B', 0), - ('src_as', 'H', 0), - ('dst_as', 'H', 0), - ('src_mask', 'B', 0), - ('dst_mask', 'B', 0), - ('in_encaps', 'B', 0), - ('out_encaps', 'B', 0), - ('peer_nexthop', 'I', 0), - ) - - -class Netflow7(NetflowBase): - """Netflow Version 7.""" - __hdr__ = NetflowBase.__hdr__ + ( - ('flow_sequence', 'I', 0), - ('reserved', 'I', 0), - ) - - class NetflowRecord(NetflowBase.NetflowRecordBase): - """Netflow v7 flow record.""" - __hdr__ = ( - ('src_addr', 'I', 0), - ('dst_addr', 'I', 0), - ('next_hop', 'I', 0), - ('input_iface', 'H', 0), - ('output_iface', 'H', 0), - ('pkts_sent', 'I', 0), - ('bytes_sent', 'I', 0), - ('start_time', 'I', 0), - ('end_time', 'I', 0), - ('src_port', 'H', 0), - ('dst_port', 'H', 0), - ('flags', 'B', 0), - ('tcp_flags', 'B', 0), - ('ip_proto', 'B', 0), - ('tos', 'B', 0), - ('src_as', 'H', 0), - ('dst_as', 'H', 0), - ('src_mask', 'B', 0), - ('dst_mask', 'B', 0), - ('pad2', 'H', 0), - ('router_sc', 'I', 0), - ) - -# No support for v8 or v9 yet. - -__sample_v1 = "\x00\x01\x00\x18gza> 3) & 0x7 - - @v.setter - def v(self, v): - self.flags = (self.flags & ~0x38) | ((v & 0x7) << 3) - - @property - def li(self): - return (self.flags >> 6) & 0x3 - - @li.setter - def li(self, li): - self.flags = (self.flags & ~0xc0) | ((li & 0x3) << 6) - - @property - def mode(self): - return self.flags & 0x7 - - @mode.setter - def mode(self, mode): - self.flags = (self.flags & ~0x7) | (mode & 0x7) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_v(self): return self.v - - @deprecated - def _set_v(self, v): self.v = v - - @deprecated - def _get_li(self): return self.li - - @deprecated - def _set_li(self, li): self.li = li - - @deprecated - def _get_mode(self): return self.mode - - @deprecated - def _set_mode(self, mode): self.mode = mode - # ================================================= - -__s = '\x24\x02\x04\xef\x00\x00\x00\x84\x00\x00\x33\x27\xc1\x02\x04\x02\xc8\x90\xec\x11\x22\xae\x07\xe5\xc8\x90\xf9\xd9\xc0\x7e\x8c\xcd\xc8\x90\xf9\xd9\xda\xc5\xb0\x78\xc8\x90\xf9\xd9\xda\xc6\x8a\x93' - - -def test_ntp_pack(): - n = NTP(__s) - assert (__s == str(n)) - - -def test_ntp_unpack(): - n = NTP(__s) - assert (n.li == NO_WARNING) - assert (n.v == 4) - assert (n.mode == SERVER) - assert (n.stratum == 2) - assert (n.id == '\xc1\x02\x04\x02') - # test get/set functions - n.li = ALARM_CONDITION - n.v = 3 - n.mode = CLIENT - assert (n.li == ALARM_CONDITION) - assert (n.v == 3) - assert (n.mode == CLIENT) - -if __name__ == '__main__': - test_ntp_pack() - test_ntp_unpack() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ospf.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ospf.py deleted file mode 100644 index cc47aae3..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ospf.py +++ /dev/null @@ -1,27 +0,0 @@ -# $Id: ospf.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Open Shortest Path First.""" - -import dpkt - -AUTH_NONE = 0 -AUTH_PASSWORD = 1 -AUTH_CRYPTO = 2 - - -class OSPF(dpkt.Packet): - __hdr__ = ( - ('v', 'B', 0), - ('type', 'B', 0), - ('len', 'H', 0), - ('router', 'I', 0), - ('area', 'I', 0), - ('sum', 'H', 0), - ('atype', 'H', 0), - ('auth', '8s', '') - ) - - def __str__(self): - if not self.sum: - self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) - return dpkt.Packet.__str__(self) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pcap.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pcap.py deleted file mode 100644 index c14ba6de..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pcap.py +++ /dev/null @@ -1,172 +0,0 @@ -# $Id: pcap.py 77 2011-01-06 15:59:38Z dugsong $ -# -*- coding: utf-8 -*- -"""Libpcap file format.""" - -import sys -import time -import dpkt - - -TCPDUMP_MAGIC = 0xa1b2c3d4L -PMUDPCT_MAGIC = 0xd4c3b2a1L - -PCAP_VERSION_MAJOR = 2 -PCAP_VERSION_MINOR = 4 - -DLT_NULL = 0 -DLT_EN10MB = 1 -DLT_EN3MB = 2 -DLT_AX25 = 3 -DLT_PRONET = 4 -DLT_CHAOS = 5 -DLT_IEEE802 = 6 -DLT_ARCNET = 7 -DLT_SLIP = 8 -DLT_PPP = 9 -DLT_FDDI = 10 -DLT_PFSYNC = 18 -DLT_IEEE802_11 = 105 -DLT_LINUX_SLL = 113 -DLT_PFLOG = 117 -DLT_IEEE802_11_RADIO = 127 - -if sys.platform.find('openbsd') != -1: - DLT_LOOP = 12 - DLT_RAW = 14 -else: - DLT_LOOP = 108 - DLT_RAW = 12 - -dltoff = {DLT_NULL: 4, DLT_EN10MB: 14, DLT_IEEE802: 22, DLT_ARCNET: 6, - DLT_SLIP: 16, DLT_PPP: 4, DLT_FDDI: 21, DLT_PFLOG: 48, DLT_PFSYNC: 4, - DLT_LOOP: 4, DLT_LINUX_SLL: 16} - - -class PktHdr(dpkt.Packet): - """pcap packet header.""" - __hdr__ = ( - ('tv_sec', 'I', 0), - ('tv_usec', 'I', 0), - ('caplen', 'I', 0), - ('len', 'I', 0), - ) - - -class LEPktHdr(PktHdr): - __byte_order__ = '<' - - -class FileHdr(dpkt.Packet): - """pcap file header.""" - __hdr__ = ( - ('magic', 'I', TCPDUMP_MAGIC), - ('v_major', 'H', PCAP_VERSION_MAJOR), - ('v_minor', 'H', PCAP_VERSION_MINOR), - ('thiszone', 'I', 0), - ('sigfigs', 'I', 0), - ('snaplen', 'I', 1500), - ('linktype', 'I', 1), - ) - - -class LEFileHdr(FileHdr): - __byte_order__ = '<' - - -class Writer(object): - """Simple pcap dumpfile writer.""" - - def __init__(self, fileobj, snaplen=1500, linktype=DLT_EN10MB): - self.__f = fileobj - if sys.byteorder == 'little': - fh = LEFileHdr(snaplen=snaplen, linktype=linktype) - else: - fh = FileHdr(snaplen=snaplen, linktype=linktype) - self.__f.write(str(fh)) - - def writepkt(self, pkt, ts=None): - if ts is None: - ts = time.time() - s = str(pkt) - n = len(s) - if sys.byteorder == 'little': - ph = LEPktHdr(tv_sec=int(ts), - tv_usec=int((float(ts) - int(ts)) * 1000000.0), - caplen=n, len=n) - else: - ph = PktHdr(tv_sec=int(ts), - tv_usec=int((float(ts) - int(ts)) * 1000000.0), - caplen=n, len=n) - self.__f.write(str(ph)) - self.__f.write(s) - - def close(self): - self.__f.close() - - -class Reader(object): - """Simple pypcap-compatible pcap file reader.""" - - def __init__(self, fileobj): - self.name = fileobj.name - self.fd = fileobj.fileno() - self.__f = fileobj - buf = self.__f.read(FileHdr.__hdr_len__) - self.__fh = FileHdr(buf) - self.__ph = PktHdr - if self.__fh.magic == PMUDPCT_MAGIC: - self.__fh = LEFileHdr(buf) - self.__ph = LEPktHdr - elif self.__fh.magic != TCPDUMP_MAGIC: - raise ValueError('invalid tcpdump header') - if self.__fh.linktype in dltoff: - self.dloff = dltoff[self.__fh.linktype] - else: - self.dloff = 0 - self.snaplen = self.__fh.snaplen - self.filter = '' - - def fileno(self): - return self.fd - - def datalink(self): - return self.__fh.linktype - - def setfilter(self, value, optimize=1): - return NotImplementedError - - def readpkts(self): - return list(self) - - def dispatch(self, cnt, callback, *args): - if cnt > 0: - for i in range(cnt): - ts, pkt = self.next() - callback(ts, pkt, *args) - else: - for ts, pkt in self: - callback(ts, pkt, *args) - - def loop(self, callback, *args): - self.dispatch(0, callback, *args) - - def __iter__(self): - self.__f.seek(FileHdr.__hdr_len__) - while 1: - buf = self.__f.read(PktHdr.__hdr_len__) - if not buf: break - hdr = self.__ph(buf) - buf = self.__f.read(hdr.caplen) - yield (hdr.tv_sec + (hdr.tv_usec / 1000000.0), buf) - - -def test_pcap_endian(): - be = '\xa1\xb2\xc3\xd4\x00\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x01' - le = '\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x01\x00\x00\x00' - befh = FileHdr(be) - lefh = LEFileHdr(le) - assert (befh.linktype == lefh.linktype) - -if __name__ == '__main__': - test_pcap_endian() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pim.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pim.py deleted file mode 100644 index 6cd16a42..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pim.py +++ /dev/null @@ -1,46 +0,0 @@ -# $Id: pim.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Protocol Independent Multicast.""" - -import dpkt -from decorators import deprecated - - -class PIM(dpkt.Packet): - __hdr__ = ( - ('v_type', 'B', 0x20), - ('rsvd', 'B', 0), - ('sum', 'H', 0) - ) - - @property - def v(self): return self.v_type >> 4 - - @v.setter - def v(self, v): self.v_type = (v << 4) | (self.v_type & 0xf) - - @property - def type(self): return self.v_type & 0xf - - @type.setter - def type(self, type): self.v_type = (self.v_type & 0xf0) | type - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_v(self): return self.v - - @deprecated - def _set_v(self, v): self.v = v - - @deprecated - def _get_type(self): return self.type - - @deprecated - def _set_type(self, type): self.type = type - # ================================================= - - def __str__(self): - if not self.sum: - self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) - return dpkt.Packet.__str__(self) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pmap.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pmap.py deleted file mode 100644 index 0e57b64c..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pmap.py +++ /dev/null @@ -1,18 +0,0 @@ -# $Id: pmap.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Portmap / rpcbind.""" - -import dpkt - -PMAP_PROG = 100000L -PMAP_PROCDUMP = 4 -PMAP_VERS = 2 - - -class Pmap(dpkt.Packet): - __hdr__ = ( - ('prog', 'I', 0), - ('vers', 'I', 0), - ('prot', 'I', 0), - ('port', 'I', 0), - ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ppp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ppp.py deleted file mode 100644 index 282bdd98..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ppp.py +++ /dev/null @@ -1,66 +0,0 @@ -# $Id: ppp.py 65 2010-03-26 02:53:51Z dugsong $ -# -*- coding: utf-8 -*- -"""Point-to-Point Protocol.""" - -import struct -import dpkt - -# XXX - finish later - -# http://www.iana.org/assignments/ppp-numbers -PPP_IP = 0x21 # Internet Protocol -PPP_IP6 = 0x57 # Internet Protocol v6 - -# Protocol field compression -PFC_BIT = 0x01 - - -class PPP(dpkt.Packet): - __hdr__ = ( - ('p', 'B', PPP_IP), - ) - _protosw = {} - - @classmethod - def set_p(cls, p, pktclass): - cls._protosw[p] = pktclass - - @classmethod - def get_p(cls, p): - return cls._protosw[p] - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.p & PFC_BIT == 0: - self.p = struct.unpack('>H', buf[:2])[0] - self.data = self.data[1:] - try: - self.data = self._protosw[self.p](self.data) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, struct.error, dpkt.UnpackError): - pass - - def pack_hdr(self): - try: - if self.p > 0xff: - return struct.pack('>H', self.p) - return dpkt.Packet.pack_hdr(self) - except struct.error, e: - raise dpkt.PackError(str(e)) - - -def __load_protos(): - g = globals() - for k, v in g.iteritems(): - if k.startswith('PPP_'): - name = k[4:] - modname = name.lower() - try: - mod = __import__(modname, g) - except ImportError: - continue - PPP.set_p(v, getattr(mod, name)) - - -if not PPP._protosw: - __load_protos() diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pppoe.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pppoe.py deleted file mode 100644 index 72e7a31b..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/pppoe.py +++ /dev/null @@ -1,61 +0,0 @@ -# $Id: pppoe.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""PPP-over-Ethernet.""" - -import dpkt -import ppp -from decorators import deprecated - -# RFC 2516 codes -PPPoE_PADI = 0x09 -PPPoE_PADO = 0x07 -PPPoE_PADR = 0x19 -PPPoE_PADS = 0x65 -PPPoE_PADT = 0xA7 -PPPoE_SESSION = 0x00 - - -class PPPoE(dpkt.Packet): - __hdr__ = ( - ('v_type', 'B', 0x11), - ('code', 'B', 0), - ('session', 'H', 0), - ('len', 'H', 0) # payload length - ) - - @property - def v(self): return self.v_type >> 4 - - @v.setter - def v(self, v): self.v_type = (v << 4) | (self.v_type & 0xf) - - @property - def type(self): return self.v_type & 0xf - - @type.setter - def type(self, t): self.v_type = (self.v_type & 0xf0) | t - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_v(self): return self.v - - @deprecated - def _set_v(self, v): self.v = v - - @deprecated - def _get_type(self): return self.type - - @deprecated - def _set_type(self, t): self.type = t - # ================================================= - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - try: - if self.code == 0: - self.data = self.ppp = ppp.PPP(self.data) - except dpkt.UnpackError: - pass - -# XXX - TODO TLVs, etc. diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/qq.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/qq.py deleted file mode 100644 index 3399d882..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/qq.py +++ /dev/null @@ -1,224 +0,0 @@ -# $Id: qq.py 48 2008-05-27 17:31:15Z yardley $ -# -*- coding: utf-8 -*- -from dpkt import Packet - -# header_type -QQ_HEADER_BASIC_FAMILY = 0x02 -QQ_HEADER_P2P_FAMILY = 0x00 -QQ_HEADER_03_FAMILY = 0x03 -QQ_HEADER_04_FAMILY = 0x04 -QQ_HEADER_05_FAMILY = 0x05 - -header_type_str = [ - "QQ_HEADER_P2P_FAMILY", - "Unknown Type", - "QQ_HEADER_03_FAMILY", - "QQ_HEADER_04_FAMILY", - "QQ_HEADER_05_FAMILY", -] - -# command -QQ_CMD_LOGOUT = 0x0001 -QQ_CMD_KEEP_ALIVE = 0x0002 -QQ_CMD_MODIFY_INFO = 0x0004 -QQ_CMD_SEARCH_USER = 0x0005 -QQ_CMD_GET_USER_INFO = 0x0006 -QQ_CMD_ADD_FRIEND = 0x0009 -QQ_CMD_DELETE_FRIEND = 0x000A -QQ_CMD_ADD_FRIEND_AUTH = 0x000B -QQ_CMD_CHANGE_STATUS = 0x000D -QQ_CMD_ACK_SYS_MSG = 0x0012 -QQ_CMD_SEND_IM = 0x0016 -QQ_CMD_RECV_IM = 0x0017 -QQ_CMD_REMOVE_SELF = 0x001C -QQ_CMD_REQUEST_KEY = 0x001D -QQ_CMD_LOGIN = 0x0022 -QQ_CMD_GET_FRIEND_LIST = 0x0026 -QQ_CMD_GET_ONLINE_OP = 0x0027 -QQ_CMD_SEND_SMS = 0x002D -QQ_CMD_CLUSTER_CMD = 0x0030 -QQ_CMD_TEST = 0x0031 -QQ_CMD_GROUP_DATA_OP = 0x003C -QQ_CMD_UPLOAD_GROUP_FRIEND = 0x003D -QQ_CMD_FRIEND_DATA_OP = 0x003E -QQ_CMD_DOWNLOAD_GROUP_FRIEND = 0x0058 -QQ_CMD_FRIEND_LEVEL_OP = 0x005C -QQ_CMD_PRIVACY_DATA_OP = 0x005E -QQ_CMD_CLUSTER_DATA_OP = 0x005F -QQ_CMD_ADVANCED_SEARCH = 0x0061 -QQ_CMD_REQUEST_LOGIN_TOKEN = 0x0062 -QQ_CMD_USER_PROPERTY_OP = 0x0065 -QQ_CMD_TEMP_SESSION_OP = 0x0066 -QQ_CMD_SIGNATURE_OP = 0x0067 -QQ_CMD_RECV_MSG_SYS = 0x0080 -QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS = 0x0081 -QQ_CMD_WEATHER_OP = 0x00A6 -QQ_CMD_ADD_FRIEND_EX = 0x00A7 -QQ_CMD_AUTHORIZE = 0X00A8 -QQ_CMD_UNKNOWN = 0xFFFF -QQ_SUB_CMD_SEARCH_ME_BY_QQ_ONLY = 0x03 -QQ_SUB_CMD_SHARE_GEOGRAPHY = 0x04 -QQ_SUB_CMD_GET_FRIEND_LEVEL = 0x02 -QQ_SUB_CMD_GET_CLUSTER_ONLINE_MEMBER = 0x01 -QQ_05_CMD_REQUEST_AGENT = 0x0021 -QQ_05_CMD_REQUEST_FACE = 0x0022 -QQ_05_CMD_TRANSFER = 0x0023 -QQ_05_CMD_REQUEST_BEGIN = 0x0026 -QQ_CLUSTER_CMD_CREATE_CLUSTER = 0x01 -QQ_CLUSTER_CMD_MODIFY_MEMBER = 0x02 -QQ_CLUSTER_CMD_MODIFY_CLUSTER_INFO = 0x03 -QQ_CLUSTER_CMD_GET_CLUSTER_INFO = 0x04 -QQ_CLUSTER_CMD_ACTIVATE_CLUSTER = 0x05 -QQ_CLUSTER_CMD_SEARCH_CLUSTER = 0x06 -QQ_CLUSTER_CMD_JOIN_CLUSTER = 0x07 -QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH = 0x08 -QQ_CLUSTER_CMD_EXIT_CLUSTER = 0x09 -QQ_CLUSTER_CMD_SEND_IM = 0x0A -QQ_CLUSTER_CMD_GET_ONLINE_MEMBER = 0x0B -QQ_CLUSTER_CMD_GET_MEMBER_INFO = 0x0C -QQ_CLUSTER_CMD_MODIFY_CARD = 0x0E -QQ_CLUSTER_CMD_GET_CARD_BATCH = 0x0F -QQ_CLUSTER_CMD_GET_CARD = 0x10 -QQ_CLUSTER_CMD_COMMIT_ORGANIZATION = 0x11 -QQ_CLUSTER_CMD_UPDATE_ORGANIZATION = 0x12 -QQ_CLUSTER_CMD_COMMIT_MEMBER_ORGANIZATION = 0x13 -QQ_CLUSTER_CMD_GET_VERSION_ID = 0x19 -QQ_CLUSTER_CMD_SEND_IM_EX = 0x1A -QQ_CLUSTER_CMD_SET_ROLE = 0x1B -QQ_CLUSTER_CMD_TRANSFER_ROLE = 0x1C -QQ_CLUSTER_CMD_CREATE_TEMP = 0x30 -QQ_CLUSTER_CMD_MODIFY_TEMP_MEMBER = 0x31 -QQ_CLUSTER_CMD_EXIT_TEMP = 0x32 -QQ_CLUSTER_CMD_GET_TEMP_INFO = 0x33 -QQ_CLUSTER_CMD_MODIFY_TEMP_INFO = 0x34 -QQ_CLUSTER_CMD_SEND_TEMP_IM = 0x35 -QQ_CLUSTER_CMD_SUB_CLUSTER_OP = 0x36 -QQ_CLUSTER_CMD_ACTIVATE_TEMP = 0x37 - -QQ_CLUSTER_SUB_CMD_ADD_MEMBER = 0x01 -QQ_CLUSTER_SUB_CMD_REMOVE_MEMBER = 0x02 -QQ_CLUSTER_SUB_CMD_GET_SUBJECT_LIST = 0x02 -QQ_CLUSTER_SUB_CMD_GET_DIALOG_LIST = 0x01 - -QQ_SUB_CMD_GET_ONLINE_FRIEND = 0x2 -QQ_SUB_CMD_GET_ONLINE_SERVICE = 0x3 -QQ_SUB_CMD_UPLOAD_GROUP_NAME = 0x2 -QQ_SUB_CMD_DOWNLOAD_GROUP_NAME = 0x1 -QQ_SUB_CMD_SEND_TEMP_SESSION_IM = 0x01 -QQ_SUB_CMD_BATCH_DOWNLOAD_FRIEND_REMARK = 0x0 -QQ_SUB_CMD_UPLOAD_FRIEND_REMARK = 0x1 -QQ_SUB_CMD_REMOVE_FRIEND_FROM_LIST = 0x2 -QQ_SUB_CMD_DOWNLOAD_FRIEND_REMARK = 0x3 -QQ_SUB_CMD_MODIFY_SIGNATURE = 0x01 -QQ_SUB_CMD_DELETE_SIGNATURE = 0x02 -QQ_SUB_CMD_GET_SIGNATURE = 0x03 -QQ_SUB_CMD_GET_USER_PROPERTY = 0x01 -QQ_SUB_CMD_GET_WEATHER = 0x01 - -QQ_FILE_CMD_HEART_BEAT = 0x0001 -QQ_FILE_CMD_HEART_BEAT_ACK = 0x0002 -QQ_FILE_CMD_TRANSFER_FINISHED = 0x0003 -QQ_FILE_CMD_FILE_OP = 0x0007 -QQ_FILE_CMD_FILE_OP_ACK = 0x0008 -QQ_FILE_CMD_SENDER_SAY_HELLO = 0x0031 -QQ_FILE_CMD_SENDER_SAY_HELLO_ACK = 0x0032 -QQ_FILE_CMD_RECEIVER_SAY_HELLO = 0x0033 -QQ_FILE_CMD_RECEIVER_SAY_HELLO_ACK = 0x0034 -QQ_FILE_CMD_NOTIFY_IP_ACK = 0x003C -QQ_FILE_CMD_PING = 0x003D -QQ_FILE_CMD_PONG = 0x003E -QQ_FILE_CMD_YES_I_AM_BEHIND_FIREWALL = 0x0040 -QQ_FILE_CMD_REQUEST_AGENT = 0x0001 -QQ_FILE_CMD_CHECK_IN = 0x0002 -QQ_FILE_CMD_FORWARD = 0x0003 -QQ_FILE_CMD_FORWARD_FINISHED = 0x0004 -QQ_FILE_CMD_IT_IS_TIME = 0x0005 -QQ_FILE_CMD_I_AM_READY = 0x0006 - -command_str = { - 0x0001: "QQ_CMD_LOGOUT", - 0x0002: "QQ_CMD_KEEP_ALIVE", - 0x0004: "QQ_CMD_MODIFY_INFO", - 0x0005: "QQ_CMD_SEARCH_USER", - 0x0006: "QQ_CMD_GET_USER_INFO", - 0x0009: "QQ_CMD_ADD_FRIEND", - 0x000A: "QQ_CMD_DELETE_FRIEND", - 0x000B: "QQ_CMD_ADD_FRIEND_AUTH", - 0x000D: "QQ_CMD_CHANGE_STATUS", - 0x0012: "QQ_CMD_ACK_SYS_MSG", - 0x0016: "QQ_CMD_SEND_IM", - 0x0017: "QQ_CMD_RECV_IM", - 0x001C: "QQ_CMD_REMOVE_SELF", - 0x001D: "QQ_CMD_REQUEST_KEY", - 0x0022: "QQ_CMD_LOGIN", - 0x0026: "QQ_CMD_GET_FRIEND_LIST", - 0x0027: "QQ_CMD_GET_ONLINE_OP", - 0x002D: "QQ_CMD_SEND_SMS", - 0x0030: "QQ_CMD_CLUSTER_CMD", - 0x0031: "QQ_CMD_TEST", - 0x003C: "QQ_CMD_GROUP_DATA_OP", - 0x003D: "QQ_CMD_UPLOAD_GROUP_FRIEND", - 0x003E: "QQ_CMD_FRIEND_DATA_OP", - 0x0058: "QQ_CMD_DOWNLOAD_GROUP_FRIEND", - 0x005C: "QQ_CMD_FRIEND_LEVEL_OP", - 0x005E: "QQ_CMD_PRIVACY_DATA_OP", - 0x005F: "QQ_CMD_CLUSTER_DATA_OP", - 0x0061: "QQ_CMD_ADVANCED_SEARCH", - 0x0062: "QQ_CMD_REQUEST_LOGIN_TOKEN", - 0x0065: "QQ_CMD_USER_PROPERTY_OP", - 0x0066: "QQ_CMD_TEMP_SESSION_OP", - 0x0067: "QQ_CMD_SIGNATURE_OP", - 0x0080: "QQ_CMD_RECV_MSG_SYS", - 0x0081: "QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS", - 0x00A6: "QQ_CMD_WEATHER_OP", - 0x00A7: "QQ_CMD_ADD_FRIEND_EX", - 0x00A8: "QQ_CMD_AUTHORIZE", - 0xFFFF: "QQ_CMD_UNKNOWN", - 0x0021: "_CMD_REQUEST_AGENT", - 0x0022: "_CMD_REQUEST_FACE", - 0x0023: "_CMD_TRANSFER", - 0x0026: "_CMD_REQUEST_BEGIN", -} - - -class QQBasicPacket(Packet): - __hdr__ = ( - ('header_type', 'B', 2), - ('source', 'H', 0), - ('command', 'H', 0), - ('sequence', 'H', 0), - ('qqNum', 'L', 0), - ) - - -class QQ3Packet(Packet): - __hdr__ = ( - ('header_type', 'B', 3), - ('command', 'B', 0), - ('sequence', 'H', 0), - ('unknown1', 'L', 0), - ('unknown2', 'L', 0), - ('unknown3', 'L', 0), - ('unknown4', 'L', 0), - ('unknown5', 'L', 0), - ('unknown6', 'L', 0), - ('unknown7', 'L', 0), - ('unknown8', 'L', 0), - ('unknown9', 'L', 0), - ('unknown10', 'B', 1), - ('unknown11', 'B', 0), - ('unknown12', 'B', 0), - ('source', 'H', 0), - ('unknown13', 'B', 0), - ) - - -class QQ5Packet(Packet): - __hdr__ = ( - ('header_type', 'B', 5), - ('source', 'H', 0), - ('unknown', 'H', 0), - ('command', 'H', 0), - ('sequence', 'H', 0), - ('qqNum', 'L', 0), - ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radiotap.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radiotap.py deleted file mode 100644 index 76e6306b..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radiotap.py +++ /dev/null @@ -1,532 +0,0 @@ -# -*- coding: utf-8 -*- -"""Radiotap""" - -import dpkt -import ieee80211 -import socket -from decorators import deprecated - -# Ref: http://www.radiotap.org -# Fields Ref: http://www.radiotap.org/defined-fields/all - -# Present flags -_TSFT_MASK = 0x1000000 -_FLAGS_MASK = 0x2000000 -_RATE_MASK = 0x4000000 -_CHANNEL_MASK = 0x8000000 -_FHSS_MASK = 0x10000000 -_ANT_SIG_MASK = 0x20000000 -_ANT_NOISE_MASK = 0x40000000 -_LOCK_QUAL_MASK = 0x80000000 -_TX_ATTN_MASK = 0x10000 -_DB_TX_ATTN_MASK = 0x20000 -_DBM_TX_POWER_MASK = 0x40000 -_ANTENNA_MASK = 0x80000 -_DB_ANT_SIG_MASK = 0x100000 -_DB_ANT_NOISE_MASK = 0x200000 -_RX_FLAGS_MASK = 0x400000 -_CHANNELPLUS_MASK = 0x200 -_EXT_MASK = 0x1 - -_TSFT_SHIFT = 24 -_FLAGS_SHIFT = 25 -_RATE_SHIFT = 26 -_CHANNEL_SHIFT = 27 -_FHSS_SHIFT = 28 -_ANT_SIG_SHIFT = 29 -_ANT_NOISE_SHIFT = 30 -_LOCK_QUAL_SHIFT = 31 -_TX_ATTN_SHIFT = 16 -_DB_TX_ATTN_SHIFT = 17 -_DBM_TX_POWER_SHIFT = 18 -_ANTENNA_SHIFT = 19 -_DB_ANT_SIG_SHIFT = 20 -_DB_ANT_NOISE_SHIFT = 21 -_RX_FLAGS_SHIFT = 22 -_CHANNELPLUS_SHIFT = 10 -_EXT_SHIFT = 0 - -# Flags elements -_FLAGS_SIZE = 2 -_CFP_FLAG_SHIFT = 0 -_PREAMBLE_SHIFT = 1 -_WEP_SHIFT = 2 -_FRAG_SHIFT = 3 -_FCS_SHIFT = 4 -_DATA_PAD_SHIFT = 5 -_BAD_FCS_SHIFT = 6 -_SHORT_GI_SHIFT = 7 - -# Channel type -_CHAN_TYPE_SIZE = 4 -_CHANNEL_TYPE_SHIFT = 4 -_CCK_SHIFT = 5 -_OFDM_SHIFT = 6 -_TWO_GHZ_SHIFT = 7 -_FIVE_GHZ_SHIFT = 8 -_PASSIVE_SHIFT = 9 -_DYN_CCK_OFDM_SHIFT = 10 -_GFSK_SHIFT = 11 -_GSM_SHIFT = 12 -_STATIC_TURBO_SHIFT = 13 -_HALF_RATE_SHIFT = 14 -_QUARTER_RATE_SHIFT = 15 - -# Flags offsets and masks -_FCS_SHIFT = 4 -_FCS_MASK = 0x10 - - -class Radiotap(dpkt.Packet): - __hdr__ = ( - ('version', 'B', 0), - ('pad', 'B', 0), - ('length', 'H', 0), - ('present_flags', 'I', 0) - ) - - @property - def tsft_present(self): - return (self.present_flags & _TSFT_MASK) >> _TSFT_SHIFT - - @tsft_present.setter - def tsft_present(self, val): - self.present_flags |= val << _TSFT_SHIFT - - @property - def flags_present(self): - return (self.present_flags & _FLAGS_MASK) >> _FLAGS_SHIFT - - @flags_present.setter - def flags_present(self, val): - self.present_flags |= val << _FLAGS_SHIFT - - @property - def rate_present(self): - return (self.present_flags & _RATE_MASK) >> _RATE_SHIFT - - @rate_present.setter - def rate_present(self, val): - self.present_flags |= val << _RATE_SHIFT - - @property - def channel_present(self): - return (self.present_flags & _CHANNEL_MASK) >> _CHANNEL_SHIFT - - @channel_present.setter - def channel_present(self, val): - self.present_flags |= val << _CHANNEL_SHIFT - - @property - def fhss_present(self): - return (self.present_flags & _FHSS_MASK) >> _FHSS_SHIFT - - @fhss_present.setter - def fhss_present(self, val): - self.present_flags |= val << _FHSS_SHIFT - - @property - def ant_sig_present(self): - return (self.present_flags & _ANT_SIG_MASK) >> _ANT_SIG_SHIFT - - @ant_sig_present.setter - def ant_sig_present(self, val): - self.present_flags |= val << _ANT_SIG_SHIFT - - @property - def ant_noise_present(self): - return (self.present_flags & _ANT_NOISE_MASK) >> _ANT_NOISE_SHIFT - - @ant_noise_present.setter - def ant_noise_present(self, val): - self.present_flags |= val << _ANT_NOISE_SHIFT - - @property - def lock_qual_present(self): - return (self.present_flags & _LOCK_QUAL_MASK) >> _LOCK_QUAL_SHIFT - - @lock_qual_present.setter - def lock_qual_present(self, val): - self.present_flags |= val << _LOCK_QUAL_SHIFT - - @property - def tx_attn_present(self): - return (self.present_flags & _TX_ATTN_MASK) >> _TX_ATTN_SHIFT - - @tx_attn_present.setter - def tx_attn_present(self, val): - self.present_flags |= val << _TX_ATTN_SHIFT - - @property - def db_tx_attn_present(self): - return (self.present_flags & _DB_TX_ATTN_MASK) >> _DB_TX_ATTN_SHIFT - - @db_tx_attn_present.setter - def db_tx_attn_present(self, val): - self.present_flags |= val << _DB_TX_ATTN_SHIFT - - @property - def dbm_tx_power_present(self): - return (self.present_flags & _DBM_TX_POWER_MASK) >> _DBM_TX_POWER_SHIFT - - @dbm_tx_power_present.setter - def dbm_tx_power_present(self, val): - self.present_flags |= val << _DBM_TX_POWER_SHIFT - - @property - def ant_present(self): - return (self.present_flags & _ANTENNA_MASK) >> _ANTENNA_SHIFT - - @ant_present.setter - def ant_present(self, val): - self.present_flags |= val << _ANTENNA_SHIFT - - @property - def db_ant_sig_present(self): - return (self.present_flags & _DB_ANT_SIG_MASK) >> _DB_ANT_SIG_SHIFT - - @db_ant_sig_present.setter - def db_ant_sig_present(self, val): - self.present_flags |= val << _DB_ANT_SIG_SHIFT - - @property - def db_ant_noise_present(self): - return (self.present_flags & _DB_ANT_NOISE_MASK) >> _DB_ANT_NOISE_SHIFT - - @db_ant_noise_present.setter - def db_ant_noise_present(self, val): - self.present_flags |= val << _DB_ANT_NOISE_SHIFT - - @property - def rx_flags_present(self): - return (self.present_flags & _RX_FLAGS_MASK) >> _RX_FLAGS_SHIFT - - @rx_flags_present.setter - def rx_flags_present(self, val): - self.present_flags |= val << _RX_FLAGS_SHIFT - - @property - def chanplus_present(self): - return (self.present_flags & _CHANNELPLUS_MASK) >> _CHANNELPLUS_SHIFT - - @chanplus_present.setter - def chanplus_present(self, val): - self.present_flags |= val << _CHANNELPLUS_SHIFT - - @property - def ext_present(self): - return (self.present_flags & _EXT_MASK) >> _EXT_SHIFT - - @ext_present.setter - def ext_present(self, val): - self.present_flags |= val << _EXT_SHIFT - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_tsft_present(self): - return self.tsft_present - - @deprecated - def _set_tsft_present(self, val): - self.tsft_present = val - - @deprecated - def _get_flags_present(self): - return self.flags_present - - @deprecated - def _set_flags_present(self, val): - self.flags_present = val - - @deprecated - def _get_rate_present(self): - return self.rate_present - - @deprecated - def _set_rate_present(self, val): - self.rate_present = val - - @deprecated - def _get_channel_present(self): - return self.channel_present - - @deprecated - def _set_channel_present(self, val): - self.channel_present = val - - @deprecated - def _get_fhss_present(self): - return self.fhss_present - - @deprecated - def _set_fhss_present(self, val): - self.fhss_present = val - - @deprecated - def _get_ant_sig_present(self): - return self.ant_sig_present - - @deprecated - def _set_ant_sig_present(self, val): - self.ant_sig_present = val - - @deprecated - def _get_ant_noise_present(self): - return self.ant_noise_present - - @deprecated - def _set_ant_noise_present(self, val): - self.ant_noise_present = val - - @deprecated - def _get_lock_qual_present(self): - return self.lock_qual_present - - @deprecated - def _set_lock_qual_present(self, val): - self.lock_qual_present = val - - @deprecated - def _get_tx_attn_present(self): - return self.tx_attn_present - - @deprecated - def _set_tx_attn_present(self, val): - self.tx_attn_present = val - - @deprecated - def _get_db_tx_attn_present(self): - return self.db_tx_attn_present - - @deprecated - def _set_db_tx_attn_present(self, val): - self.db_tx_attn_present = val - - @deprecated - def _get_dbm_power_present(self): - return self.dbm_tx_power_present - - @deprecated - def _set_dbm_power_present(self, val): - self.dbm_tx_power_present = val - - @deprecated - def _get_ant_present(self): - return self.ant_present - - @deprecated - def _set_ant_present(self, val): - self.ant_present = val - - @deprecated - def _get_db_ant_sig_present(self): - return self.db_ant_sig_present - - @deprecated - def _set_db_ant_sig_present(self, val): - self.db_ant_sig_present = val - - @deprecated - def _get_db_ant_noise_present(self): - return self.db_ant_noise_present - - @deprecated - def _set_db_ant_noise_present(self, val): - self.db_ant_noise_present = val - - @deprecated - def _get_rx_flags_present(self): - return self.rx_flags_present - - @deprecated - def _set_rx_flags_present(self, val): - self.rx_flags_present = val - - @deprecated - def _get_chanplus_present(self): - return self.chanplus_present - - @deprecated - def _set_chanplus_present(self, val): - self.chanplus_present = val - - @deprecated - def _get_ext_present(self): - return self.ext_present - - @deprecated - def _set_ext_present(self, val): - self.ext_present = val - - # ================================================= - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = buf[socket.ntohs(self.length):] - - self.fields = [] - buf = buf[self.__hdr_len__:] - - # decode each field into self. (eg. self.tsft) as well as append it self.fields list - field_decoder = [ - ('tsft', self.tsft_present, self.TSFT), - ('flags', self.flags_present, self.Flags), - ('rate', self.rate_present, self.Rate), - ('channel', self.channel_present, self.Channel), - ('fhss', self.fhss_present, self.FHSS), - ('ant_sig', self.ant_sig_present, self.AntennaSignal), - ('ant_noise', self.ant_noise_present, self.AntennaNoise), - ('lock_qual', self.lock_qual_present, self.LockQuality), - ('tx_attn', self.tx_attn_present, self.TxAttenuation), - ('db_tx_attn', self.db_tx_attn_present, self.DbTxAttenuation), - ('dbm_tx_power', self.dbm_tx_power_present, self.DbmTxPower), - ('ant', self.ant_present, self.Antenna), - ('db_ant_sig', self.db_ant_sig_present, self.DbAntennaSignal), - ('db_ant_noise', self.db_ant_noise_present, self.DbAntennaNoise), - ('rx_flags', self.rx_flags_present, self.RxFlags) - ] - for name, present_bit, parser in field_decoder: - if present_bit: - field = parser(buf) - field.data = '' - setattr(self, name, field) - self.fields.append(field) - buf = buf[len(field):] - - if len(self.data) > 0: - if self.flags_present and self.flags.fcs: - self.data = ieee80211.IEEE80211(self.data, fcs=self.flags.fcs) - else: - self.data = ieee80211.IEEE80211(self.data) - - class Antenna(dpkt.Packet): - __hdr__ = ( - ('index', 'B', 0), - ) - - class AntennaNoise(dpkt.Packet): - __hdr__ = ( - ('db', 'B', 0), - ) - - class AntennaSignal(dpkt.Packet): - __hdr__ = ( - ('db', 'B', 0), - ) - - class Channel(dpkt.Packet): - __hdr__ = ( - ('freq', 'H', 0), - ('flags', 'H', 0), - ) - - class FHSS(dpkt.Packet): - __hdr__ = ( - ('set', 'B', 0), - ('pattern', 'B', 0), - ) - - class Flags(dpkt.Packet): - __hdr__ = ( - ('val', 'B', 0), - ) - - @property - def fcs(self): return (self.val & _FCS_MASK) >> _FCS_SHIFT - - # TODO statement seems to have no effect - @fcs.setter - def fcs(self, v): (v << _FCS_SHIFT) | (self.val & ~_FCS_MASK) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_fcs_present(self): return self.fcs - - @deprecated - def _set_fcs_present(self, v): self.fcs = v - - # ================================================= - - class LockQuality(dpkt.Packet): - __hdr__ = ( - ('val', 'H', 0), - ) - - class RxFlags(dpkt.Packet): - __hdr__ = ( - ('val', 'H', 0), - ) - - class Rate(dpkt.Packet): - __hdr__ = ( - ('val', 'B', 0), - ) - - class TSFT(dpkt.Packet): - __hdr__ = ( - ('usecs', 'Q', 0), - ) - - class TxAttenuation(dpkt.Packet): - __hdr__ = ( - ('val', 'H', 0), - ) - - class DbTxAttenuation(dpkt.Packet): - __hdr__ = ( - ('db', 'H', 0), - ) - - class DbAntennaNoise(dpkt.Packet): - __hdr__ = ( - ('db', 'B', 0), - ) - - class DbAntennaSignal(dpkt.Packet): - __hdr__ = ( - ('db', 'B', 0), - ) - - class DbmTxPower(dpkt.Packet): - __hdr__ = ( - ('dbm', 'B', 0), - ) - - -def test_Radiotap(): - s = '\x00\x00\x00\x18\x6e\x48\x00\x00\x00\x02\x6c\x09\xa0\x00\xa8\x81\x02\x00\x00\x00\x00\x00\x00\x00' - rad = Radiotap(s) - assert(rad.version == 0) - assert(rad.present_flags == 0x6e480000) - assert(rad.tsft_present == 0) - assert(rad.flags_present == 1) - assert(rad.rate_present == 1) - assert(rad.channel_present == 1) - assert(rad.fhss_present == 0) - assert(rad.ant_sig_present == 1) - assert(rad.ant_noise_present == 1) - assert(rad.lock_qual_present == 0) - assert(rad.db_tx_attn_present == 0) - assert(rad.dbm_tx_power_present == 0) - assert(rad.ant_present == 1) - assert(rad.db_ant_sig_present == 0) - assert(rad.db_ant_noise_present == 0) - assert(rad.rx_flags_present == 1) - assert(rad.channel.freq == 0x6c09) - assert(rad.channel.flags == 0xa000) - assert(len(rad.fields) == 7) - - -def test_fcs(): - s = '\x00\x00\x1a\x00\x2f\x48\x00\x00\x34\x8f\x71\x09\x00\x00\x00\x00\x10\x0c\x85\x09\xc0\x00\xcc\x01\x00\x00' - rt = Radiotap(s) - assert(rt.flags_present == 1) - assert(rt.flags.fcs == 1) - - -if __name__ == '__main__': - test_Radiotap() - test_fcs() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radius.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radius.py deleted file mode 100644 index 740d5cd7..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/radius.py +++ /dev/null @@ -1,91 +0,0 @@ -# $Id: radius.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Remote Authentication Dial-In User Service.""" - -import dpkt - -# http://www.untruth.org/~josh/security/radius/radius-auth.html -# RFC 2865 - - -class RADIUS(dpkt.Packet): - __hdr__ = ( - ('code', 'B', 0), - ('id', 'B', 0), - ('len', 'H', 4), - ('auth', '16s', '') - ) - attrs = '' - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.attrs = parse_attrs(self.data) - self.data = '' - - -def parse_attrs(buf): - """Parse attributes buffer into a list of (type, data) tuples.""" - attrs = [] - while buf: - t = ord(buf[0]) - l = ord(buf[1]) - if l < 2: - break - d, buf = buf[2:l], buf[l:] - attrs.append((t, d)) - return attrs - -# Codes -RADIUS_ACCESS_REQUEST = 1 -RADIUS_ACCESS_ACCEPT = 2 -RADIUS_ACCESS_REJECT = 3 -RADIUS_ACCT_REQUEST = 4 -RADIUS_ACCT_RESPONSE = 5 -RADIUS_ACCT_STATUS = 6 -RADIUS_ACCESS_CHALLENGE = 11 - -# Attributes -RADIUS_USER_NAME = 1 -RADIUS_USER_PASSWORD = 2 -RADIUS_CHAP_PASSWORD = 3 -RADIUS_NAS_IP_ADDR = 4 -RADIUS_NAS_PORT = 5 -RADIUS_SERVICE_TYPE = 6 -RADIUS_FRAMED_PROTOCOL = 7 -RADIUS_FRAMED_IP_ADDR = 8 -RADIUS_FRAMED_IP_NETMASK = 9 -RADIUS_FRAMED_ROUTING = 10 -RADIUS_FILTER_ID = 11 -RADIUS_FRAMED_MTU = 12 -RADIUS_FRAMED_COMPRESSION = 13 -RADIUS_LOGIN_IP_HOST = 14 -RADIUS_LOGIN_SERVICE = 15 -RADIUS_LOGIN_TCP_PORT = 16 -# unassigned -RADIUS_REPLY_MESSAGE = 18 -RADIUS_CALLBACK_NUMBER = 19 -RADIUS_CALLBACK_ID = 20 -# unassigned -RADIUS_FRAMED_ROUTE = 22 -RADIUS_FRAMED_IPX_NETWORK = 23 -RADIUS_STATE = 24 -RADIUS_CLASS = 25 -RADIUS_VENDOR_SPECIFIC = 26 -RADIUS_SESSION_TIMEOUT = 27 -RADIUS_IDLE_TIMEOUT = 28 -RADIUS_TERMINATION_ACTION = 29 -RADIUS_CALLED_STATION_ID = 30 -RADIUS_CALLING_STATION_ID = 31 -RADIUS_NAS_ID = 32 -RADIUS_PROXY_STATE = 33 -RADIUS_LOGIN_LAT_SERVICE = 34 -RADIUS_LOGIN_LAT_NODE = 35 -RADIUS_LOGIN_LAT_GROUP = 36 -RADIUS_FRAMED_ATALK_LINK = 37 -RADIUS_FRAMED_ATALK_NETWORK = 38 -RADIUS_FRAMED_ATALK_ZONE = 39 -# 40-59 reserved for accounting -RADIUS_CHAP_CHALLENGE = 60 -RADIUS_NAS_PORT_TYPE = 61 -RADIUS_PORT_LIMIT = 62 -RADIUS_LOGIN_LAT_PORT = 63 diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rfb.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rfb.py deleted file mode 100644 index 6a69892f..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rfb.py +++ /dev/null @@ -1,90 +0,0 @@ -# $Id: rfb.py 47 2008-05-27 02:10:00Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Remote Framebuffer Protocol.""" - -import dpkt - -# Remote Framebuffer Protocol -# http://www.realvnc.com/docs/rfbproto.pdf - -# Client to Server Messages -CLIENT_SET_PIXEL_FORMAT = 0 -CLIENT_SET_ENCODINGS = 2 -CLIENT_FRAMEBUFFER_UPDATE_REQUEST = 3 -CLIENT_KEY_EVENT = 4 -CLIENT_POINTER_EVENT = 5 -CLIENT_CUT_TEXT = 6 - -# Server to Client Messages -SERVER_FRAMEBUFFER_UPDATE = 0 -SERVER_SET_COLOUR_MAP_ENTRIES = 1 -SERVER_BELL = 2 -SERVER_CUT_TEXT = 3 - - -class RFB(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 0), - ) - - -class SetPixelFormat(dpkt.Packet): - __hdr__ = ( - ('pad', '3s', ''), - ('pixel_fmt', '16s', '') - ) - - -class SetEncodings(dpkt.Packet): - __hdr__ = ( - ('pad', '1s', ''), - ('num_encodings', 'H', 0) - ) - - -class FramebufferUpdateRequest(dpkt.Packet): - __hdr__ = ( - ('incremental', 'B', 0), - ('x_position', 'H', 0), - ('y_position', 'H', 0), - ('width', 'H', 0), - ('height', 'H', 0) - ) - - -class KeyEvent(dpkt.Packet): - __hdr__ = ( - ('down_flag', 'B', 0), - ('pad', '2s', ''), - ('key', 'I', 0) - ) - - -class PointerEvent(dpkt.Packet): - __hdr__ = ( - ('button_mask', 'B', 0), - ('x_position', 'H', 0), - ('y_position', 'H', 0) - ) - - -class FramebufferUpdate(dpkt.Packet): - __hdr__ = ( - ('pad', '1s', ''), - ('num_rects', 'H', 0) - ) - - -class SetColourMapEntries(dpkt.Packet): - __hdr__ = ( - ('pad', '1s', ''), - ('first_colour', 'H', 0), - ('num_colours', 'H', 0) - ) - - -class CutText(dpkt.Packet): - __hdr__ = ( - ('pad', '3s', ''), - ('length', 'I', 0) - ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rip.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rip.py deleted file mode 100644 index 83f29f62..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rip.py +++ /dev/null @@ -1,89 +0,0 @@ -# $Id: rip.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Routing Information Protocol.""" - -import dpkt - -# RIP v2 - RFC 2453 -# http://tools.ietf.org/html/rfc2453 - -REQUEST = 1 -RESPONSE = 2 - - -class RIP(dpkt.Packet): - __hdr__ = ( - ('cmd', 'B', REQUEST), - ('v', 'B', 2), - ('rsvd', 'H', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - l = [] - self.auth = None - while self.data: - rte = RTE(self.data[:20]) - if rte.family == 0xFFFF: - self.auth = Auth(self.data[:20]) - else: - l.append(rte) - self.data = self.data[20:] - self.data = self.rtes = l - - def __len__(self): - len = self.__hdr_len__ - if self.auth: - len += len(self.auth) - len += sum(map(len, self.rtes)) - return len - - def __str__(self): - auth = '' - if self.auth: - auth = str(self.auth) - return self.pack_hdr() + auth + ''.join(map(str, self.rtes)) - - -class RTE(dpkt.Packet): - __hdr__ = ( - ('family', 'H', 2), - ('route_tag', 'H', 0), - ('addr', 'I', 0), - ('subnet', 'I', 0), - ('next_hop', 'I', 0), - ('metric', 'I', 1) - ) - - -class Auth(dpkt.Packet): - __hdr__ = ( - ('rsvd', 'H', 0xFFFF), - ('type', 'H', 2), - ('auth', '16s', 0) - ) - - -__s = '\x02\x02\x00\x00\x00\x02\x00\x00\x01\x02\x03\x00\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x00\xc0\xa8\x01\x08\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x01' - - -def test_rtp_pack(): - r = RIP(__s) - assert (__s == str(r)) - - -def test_rtp_unpack(): - r = RIP(__s) - assert (r.auth is None) - assert (len(r.rtes) == 2) - - rte = r.rtes[1] - assert (rte.family == 2) - assert (rte.route_tag == 0) - assert (rte.metric == 1) - - -if __name__ == '__main__': - test_rtp_pack() - test_rtp_unpack() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rpc.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rpc.py deleted file mode 100644 index f12bc83b..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rpc.py +++ /dev/null @@ -1,161 +0,0 @@ -# $Id: rpc.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Remote Procedure Call.""" - -import struct -import dpkt - -# RPC.dir -CALL = 0 -REPLY = 1 - -# RPC.Auth.flavor -AUTH_NONE = AUTH_NULL = 0 -AUTH_UNIX = 1 -AUTH_SHORT = 2 -AUTH_DES = 3 - -# RPC.Reply.stat -MSG_ACCEPTED = 0 -MSG_DENIED = 1 - -# RPC.Reply.Accept.stat -SUCCESS = 0 -PROG_UNAVAIL = 1 -PROG_MISMATCH = 2 -PROC_UNAVAIL = 3 -GARBAGE_ARGS = 4 -SYSTEM_ERR = 5 - -# RPC.Reply.Reject.stat -RPC_MISMATCH = 0 -AUTH_ERROR = 1 - - -class RPC(dpkt.Packet): - __hdr__ = ( - ('xid', 'I', 0), - ('dir', 'I', CALL) - ) - - class Auth(dpkt.Packet): - __hdr__ = (('flavor', 'I', AUTH_NONE), ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - n = struct.unpack('>I', self.data[:4])[0] - self.data = self.data[4:4 + n] - - def __len__(self): - return 8 + len(self.data) - - def __str__(self): - return self.pack_hdr() + struct.pack('>I', len(self.data)) + \ - str(self.data) - - class Call(dpkt.Packet): - __hdr__ = ( - ('rpcvers', 'I', 2), - ('prog', 'I', 0), - ('vers', 'I', 0), - ('proc', 'I', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.cred = RPC.Auth(self.data) - self.verf = RPC.Auth(self.data[len(self.cred):]) - self.data = self.data[len(self.cred) + len(self.verf):] - - def __len__(self): - return len(str(self)) # XXX - - def __str__(self): - return dpkt.Packet.__str__(self) + \ - str(getattr(self, 'cred', RPC.Auth())) + \ - str(getattr(self, 'verf', RPC.Auth())) + \ - str(self.data) - - class Reply(dpkt.Packet): - __hdr__ = (('stat', 'I', MSG_ACCEPTED), ) - - class Accept(dpkt.Packet): - __hdr__ = (('stat', 'I', SUCCESS), ) - - def unpack(self, buf): - self.verf = RPC.Auth(buf) - buf = buf[len(self.verf):] - self.stat = struct.unpack('>I', buf[:4])[0] - if self.stat == SUCCESS: - self.data = buf[4:] - elif self.stat == PROG_MISMATCH: - self.low, self.high = struct.unpack('>II', buf[4:12]) - self.data = buf[12:] - - def __len__(self): - if self.stat == PROG_MISMATCH: n = 8 - else: n = 0 - return len(self.verf) + 4 + n + len(self.data) - - def __str__(self): - if self.stat == PROG_MISMATCH: - return str(self.verf) + struct.pack('>III', self.stat, - self.low, self.high) + self.data - return str(self.verf) + dpkt.Packet.__str__(self) - - class Reject(dpkt.Packet): - __hdr__ = (('stat', 'I', AUTH_ERROR), ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.stat == RPC_MISMATCH: - self.low, self.high = struct.unpack('>II', self.data[:8]) - self.data = self.data[8:] - elif self.stat == AUTH_ERROR: - self.why = struct.unpack('>I', self.data[:4])[0] - self.data = self.data[4:] - - def __len__(self): - if self.stat == RPC_MISMATCH: n = 8 - elif self.stat == AUTH_ERROR: n = 4 - else: n = 0 - return 4 + n + len(self.data) - - def __str__(self): - if self.stat == RPC_MISMATCH: - return struct.pack('>III', self.stat, self.low, self.high) + self.data - elif self.stat == AUTH_ERROR: - return struct.pack('>II', self.stat, self.why) + self.data - return dpkt.Packet.__str__(self) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.stat == MSG_ACCEPTED: - self.data = self.accept = self.Accept(self.data) - elif self.status == MSG_DENIED: - self.data = self.reject = self.Reject(self.data) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.dir == CALL: - self.data = self.call = self.Call(self.data) - elif self.dir == REPLY: - self.data = self.reply = self.Reply(self.data) - - -def unpack_xdrlist(cls, buf): - l = [] - while buf: - if buf.startswith('\x00\x00\x00\x01'): - p = cls(buf[4:]) - l.append(p) - buf = p.data - elif buf.startswith('\x00\x00\x00\x00'): - break - else: - raise dpkt.UnpackError, 'invalid XDR list' - return l - - -def pack_xdrlist(*args): - return '\x00\x00\x00\x01'.join(map(str, args)) + '\x00\x00\x00\x00' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rtp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rtp.py deleted file mode 100644 index 9426d8c4..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rtp.py +++ /dev/null @@ -1,127 +0,0 @@ -# $Id: rtp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Real-Time Transport Protocol""" - -from dpkt import Packet -from decorators import deprecated - -# version 1100 0000 0000 0000 ! 0xC000 14 -# p 0010 0000 0000 0000 ! 0x2000 13 -# x 0001 0000 0000 0000 ! 0x1000 12 -# cc 0000 1111 0000 0000 ! 0x0F00 8 -# m 0000 0000 1000 0000 ! 0x0080 7 -# pt 0000 0000 0111 1111 ! 0x007F 0 -# - -_VERSION_MASK = 0xC000 -_P_MASK = 0x2000 -_X_MASK = 0x1000 -_CC_MASK = 0x0F00 -_M_MASK = 0x0080 -_PT_MASK = 0x007F -_VERSION_SHIFT = 14 -_P_SHIFT = 13 -_X_SHIFT = 12 -_CC_SHIFT = 8 -_M_SHIFT = 7 -_PT_SHIFT = 0 - -VERSION = 2 - - -class RTP(Packet): - __hdr__ = ( - ('_type', 'H', 0x8000), - ('seq', 'H', 0), - ('ts', 'I', 0), - ('ssrc', 'I', 0), - ) - csrc = '' - - @property - def version(self): return (self._type & _VERSION_MASK) >> _VERSION_SHIFT - - @version.setter - def version(self, ver): - self._type = (ver << _VERSION_SHIFT) | (self._type & ~_VERSION_MASK) - - @property - def p(self): return (self._type & _P_MASK) >> _P_SHIFT - - @p.setter - def p(self, p): self._type = (p << _P_SHIFT) | (self._type & ~_P_MASK) - - @property - def x(self): return (self._type & _X_MASK) >> _X_SHIFT - - @x.setter - def x(self, x): self._type = (x << _X_SHIFT) | (self._type & ~_X_MASK) - - @property - def cc(self): return (self._type & _CC_MASK) >> _CC_SHIFT - - @cc.setter - def cc(self, cc): self._type = (cc << _CC_SHIFT) | (self._type & ~_CC_MASK) - - @property - def m(self): return (self._type & _M_MASK) >> _M_SHIFT - - @m.setter - def m(self, m): self._type = (m << _M_SHIFT) | (self._type & ~_M_MASK) - - @property - def pt(self): return (self._type & _PT_MASK) >> _PT_SHIFT - - @pt.setter - def pt(self, m): self._type = (m << _PT_SHIFT) | (self._type & ~_PT_MASK) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_version(self): return self.version - - @deprecated - def _set_version(self, ver): self.version = ver - - @deprecated - def _get_p(self): return self.p - - @deprecated - def _set_p(self, p): self.p = p - - @deprecated - def _get_x(self): return self.x - - @deprecated - def _set_x(self, x): self.x = x - - @deprecated - def _get_cc(self): return self.cc - - @deprecated - def _set_cc(self, cc): self.cc = cc - - @deprecated - def _get_m(self): return self.m - - @deprecated - def _set_m(self, m): self.m = m - - @deprecated - def _get_pt(self): return self.pt - - @deprecated - def _set_pt(self, pt): self.pt = pt - # ================================================= - - def __len__(self): - return self.__hdr_len__ + len(self.csrc) + len(self.data) - - def __str__(self): - return self.pack_hdr() + self.csrc + str(self.data) - - def unpack(self, buf): - super(RTP, self).unpack(buf) - self.csrc = buf[self.__hdr_len__:self.__hdr_len__ + self.cc * 4] - self.data = buf[self.__hdr_len__ + self.cc * 4:] - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rx.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rx.py deleted file mode 100644 index 8535a350..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/rx.py +++ /dev/null @@ -1,45 +0,0 @@ -# $Id: rx.py 23 2006-11-08 15:45:33Z jonojono $ -# -*- coding: utf-8 -*- -"""Rx Protocol.""" - -import dpkt - -# Types -DATA = 0x01 -ACK = 0x02 -BUSY = 0x03 -ABORT = 0x04 -ACKALL = 0x05 -CHALLENGE = 0x06 -RESPONSE = 0x07 -DEBUG = 0x08 - -# Flags -CLIENT_INITIATED = 0x01 -REQUEST_ACK = 0x02 -LAST_PACKET = 0x04 -MORE_PACKETS = 0x08 -SLOW_START_OK = 0x20 -JUMBO_PACKET = 0x20 - -# Security -SEC_NONE = 0x00 -SEC_BCRYPT = 0x01 -SEC_RXKAD = 0x02 -SEC_RXKAD_ENC = 0x03 - - -class Rx(dpkt.Packet): - __hdr__ = ( - ('epoch', 'I', 0), - ('cid', 'I', 0), - ('call', 'I', 1), - ('seq', 'I', 0), - ('serial', 'I', 1), - ('type', 'B', 0), - ('flags', 'B', CLIENT_INITIATED), - ('status', 'B', 0), - ('security', 'B', 0), - ('sum', 'H', 0), - ('service', 'H', 0) - ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sccp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sccp.py deleted file mode 100644 index df862df3..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sccp.py +++ /dev/null @@ -1,214 +0,0 @@ -# $Id: sccp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Cisco Skinny Client Control Protocol.""" - -import dpkt - -KEYPAD_BUTTON = 0x00000003 -OFF_HOOK = 0x00000006 -ON_HOOK = 0x00000007 -OPEN_RECEIVE_CHANNEL_ACK = 0x00000022 -START_TONE = 0x00000082 -STOP_TONE = 0x00000083 -SET_LAMP = 0x00000086 -SET_SPEAKER_MODE = 0x00000088 -START_MEDIA_TRANSMIT = 0x0000008A -STOP_MEDIA_TRANSMIT = 0x0000008B -CALL_INFO = 0x0000008F -DEFINE_TIME_DATE = 0x00000094 -DISPLAY_TEXT = 0x00000099 -OPEN_RECEIVE_CHANNEL = 0x00000105 -CLOSE_RECEIVE_CHANNEL = 0x00000106 -SELECT_SOFTKEYS = 0x00000110 -CALL_STATE = 0x00000111 -DISPLAY_PROMPT_STATUS = 0x00000112 -CLEAR_PROMPT_STATUS = 0x00000113 -ACTIVATE_CALL_PLANE = 0x00000116 - - -class ActivateCallPlane(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('line_instance', 'I', 0), - ) - - -class CallInfo(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('calling_party_name', '40s', ''), - ('calling_party', '24s', ''), - ('called_party_name', '40s', ''), - ('called_party', '24s', ''), - ('line_instance', 'I', 0), - ('call_id', 'I', 0), - ('call_type', 'I', 0), - ('orig_called_party_name', '40s', ''), - ('orig_called_party', '24s', '') - ) - - -class CallState(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('call_state', 'I', 12), # 12: Proceed, 15: Connected - ('line_instance', 'I', 1), - ('call_id', 'I', 0) - ) - - -class ClearPromptStatus(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('line_instance', 'I', 1), - ('call_id', 'I', 0) - ) - - -class CloseReceiveChannel(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('conference_id', 'I', 0), - ('passthruparty_id', 'I', 0), - ) - - -class DisplayPromptStatus(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('msg_timeout', 'I', 0), - ('display_msg', '32s', ''), - ('line_instance', 'I', 1), - ('call_id', 'I', 0) - ) - - -class DisplayText(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('display_msg', '36s', ''), - ) - - -class KeypadButton(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('button', 'I', 0), - ) - - -class OpenReceiveChannel(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('conference_id', 'I', 0), - ('passthruparty_id', 'I', 0), - ('ms_packet', 'I', 0), - ('payload_capability', 'I', 4), # 4: G.711 u-law 64k - ('echo_cancel_type', 'I', 4), - ('g723_bitrate', 'I', 0), - ) - - -class OpenReceiveChannelAck(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('channel_status', 'I', 0), - ('ip', '4s', ''), - ('port', 'I', 0), - ('passthruparty_id', 'I', 0), - ) - - -class SelectStartKeys(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('line_id', 'I', 1), - ('call_id', 'I', 0), - ('softkey_set', 'I', 8), - ('softkey_map', 'I', 0xffffffffL) - ) - - -class SetLamp(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('stimulus', 'I', 9), # 9: Line - ('stimulus_instance', 'I', 1), - ('lamp_mode', 'I', 1), - ) - - -class SetSpeakerMode(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('speaker', 'I', 2), # 2: SpeakerOff - ) - - -class StartMediaTransmission(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('conference_id', 'I', 0), - ('passthruparty_id', 'I', 0), - ('remote_ip', '4s', ''), - ('remote_port', 'I', 0), - ('ms_packet', 'I', 0), - ('payload_capability', 'I', 4), # 4: G.711 u-law 64k - ('precedence', 'I', 0), - ('silence_suppression', 'I', 0), - ('max_frames_per_pkt', 'I', 1), - ('g723_bitrate', 'I', 0), - ) - - -class StartTone(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('tone', 'I', 0x24), # 0x24: AlertingTone - ) - - -class StopMediaTransmission(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('conference_id', 'I', 0), - ('passthruparty_id', 'I', 0), - ) - - -class SCCP(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('len', 'I', 0), - ('rsvd', 'I', 0), - ('msgid', 'I', 0), - ('msg', '0s', ''), - ) - _msgsw = { - KEYPAD_BUTTON: KeypadButton, - OPEN_RECEIVE_CHANNEL_ACK: OpenReceiveChannelAck, - START_TONE: StartTone, - SET_LAMP: SetLamp, - START_MEDIA_TRANSMIT: StartMediaTransmission, - STOP_MEDIA_TRANSMIT: StopMediaTransmission, - CALL_INFO: CallInfo, - DISPLAY_TEXT: DisplayText, - OPEN_RECEIVE_CHANNEL: OpenReceiveChannel, - CLOSE_RECEIVE_CHANNEL: CloseReceiveChannel, - CALL_STATE: CallState, - DISPLAY_PROMPT_STATUS: DisplayPromptStatus, - CLEAR_PROMPT_STATUS: ClearPromptStatus, - ACTIVATE_CALL_PLANE: ActivateCallPlane, - } - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - n = self.len - 4 - if n > len(self.data): - raise dpkt.NeedData('not enough data') - self.msg, self.data = self.data[:n], self.data[n:] - try: - p = self._msgsw[self.msgid](self.msg) - setattr(self, p.__class__.__name__.lower(), p) - except (KeyError, dpkt.UnpackError): - pass diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sctp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sctp.py deleted file mode 100644 index 4ef251c8..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sctp.py +++ /dev/null @@ -1,95 +0,0 @@ -# $Id: sctp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Stream Control Transmission Protocol.""" - -import dpkt -import crc32c - -# Stream Control Transmission Protocol -# http://tools.ietf.org/html/rfc2960 - -# Chunk Types -DATA = 0 -INIT = 1 -INIT_ACK = 2 -SACK = 3 -HEARTBEAT = 4 -HEARTBEAT_ACK = 5 -ABORT = 6 -SHUTDOWN = 7 -SHUTDOWN_ACK = 8 -ERROR = 9 -COOKIE_ECHO = 10 -COOKIE_ACK = 11 -ECNE = 12 -CWR = 13 -SHUTDOWN_COMPLETE = 14 - - -class SCTP(dpkt.Packet): - __hdr__ = ( - ('sport', 'H', 0), - ('dport', 'H', 0), - ('vtag', 'I', 0), - ('sum', 'I', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - l = [] - while self.data: - chunk = Chunk(self.data) - l.append(chunk) - self.data = self.data[len(chunk):] - self.data = self.chunks = l - - def __len__(self): - return self.__hdr_len__ + sum(map(len, self.data)) - - def __str__(self): - l = [str(x) for x in self.data] - if self.sum == 0: - s = crc32c.add(0xffffffffL, self.pack_hdr()) - for x in l: - s = crc32c.add(s, x) - self.sum = crc32c.done(s) - return self.pack_hdr() + ''.join(l) - - -class Chunk(dpkt.Packet): - __hdr__ = ( - ('type', 'B', INIT), - ('flags', 'B', 0), - ('len', 'H', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.len - self.__hdr_len__] - - -__s = '\x80\x44\x00\x50\x00\x00\x00\x00\x30\xba\xef\x54\x01\x00\x00\x3c\x3b\xb9\x9c\x46\x00\x01\xa0\x00\x00\x0a\xff\xff\x2b\x2d\x7e\xb2\x00\x05\x00\x08\x9b\xe6\x18\x9b\x00\x05\x00\x08\x9b\xe6\x18\x9c\x00\x0c\x00\x06\x00\x05\x00\x00\x80\x00\x00\x04\xc0\x00\x00\x04\xc0\x06\x00\x08\x00\x00\x00\x00' - - -def test_sctp_pack(): - sctp = SCTP(__s) - assert (__s == str(sctp)) - sctp.sum = 0 - assert (__s == str(sctp)) - - -def test_sctp_unpack(): - sctp = SCTP(__s) - assert (sctp.sport == 32836) - assert (sctp.dport == 80) - assert (len(sctp.chunks) == 1) - assert (len(sctp) == 72) - chunk = sctp.chunks[0] - assert (chunk.type == INIT) - assert (chunk.len == 60) - - -if __name__ == '__main__': - test_sctp_pack() - test_sctp_unpack() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sip.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sip.py deleted file mode 100644 index fef476da..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sip.py +++ /dev/null @@ -1,33 +0,0 @@ -# $Id: sip.py 48 2008-05-27 17:31:15Z yardley $ -# -*- coding: utf-8 -*- -"""Session Initiation Protocol.""" - -import http - - -class Request(http.Request): - """SIP request.""" - __hdr_defaults__ = { - 'method': 'INVITE', - 'uri': 'sip:user@example.com', - 'version': '2.0', - 'headers': {'To': '', 'From': '', 'Call-ID': '', 'CSeq': '', 'Contact': ''} - } - __methods = dict.fromkeys(( - 'ACK', 'BYE', 'CANCEL', 'INFO', 'INVITE', 'MESSAGE', 'NOTIFY', - 'OPTIONS', 'PRACK', 'PUBLISH', 'REFER', 'REGISTER', 'SUBSCRIBE', - 'UPDATE' - )) - __proto = 'SIP' - - -class Response(http.Response): - """SIP response.""" - __hdr_defaults__ = { - 'version': '2.0', - 'status': '200', - 'reason': 'OK', - 'headers': {'To': '', 'From': '', 'Call-ID': '', 'CSeq': '', 'Contact': ''} - } - __proto = 'SIP' - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sll.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sll.py deleted file mode 100644 index 3d1a1204..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/sll.py +++ /dev/null @@ -1,26 +0,0 @@ -# $Id: sll.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Linux libpcap "cooked" capture encapsulation.""" - -import arp -import dpkt -import ethernet - - -class SLL(dpkt.Packet): - __hdr__ = ( - ('type', 'H', 0), # 0: to us, 1: bcast, 2: mcast, 3: other, 4: from us - ('hrd', 'H', arp.ARP_HRD_ETH), - ('hlen', 'H', 6), # hardware address length - ('hdr', '8s', ''), # first 8 bytes of link-layer header - ('ethtype', 'H', ethernet.ETH_TYPE_IP), - ) - _typesw = ethernet.Ethernet._typesw - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - try: - self.data = self._typesw[self.ethtype](self.data) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - pass diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/smb.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/smb.py deleted file mode 100644 index 8517e64b..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/smb.py +++ /dev/null @@ -1,20 +0,0 @@ -# $Id: smb.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Server Message Block.""" - -import dpkt - - -class SMB(dpkt.Packet): - __hdr__ = [ - ('proto', '4s', ''), - ('cmd', 'B', 0), - ('err', 'I', 0), - ('flags1', 'B', 0), - ('flags2', 'B', 0), - ('pad', '6s', ''), - ('tid', 'H', 0), - ('pid', 'H', 0), - ('uid', 'H', 0), - ('mid', 'H', 0) - ] diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/snoop.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/snoop.py deleted file mode 100644 index 8090e855..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/snoop.py +++ /dev/null @@ -1,122 +0,0 @@ -# $Id$ -# -*- coding: utf-8 -*- -"""Snoop file format.""" - -import sys, time -import dpkt - -# RFC 1761 - -SNOOP_MAGIC = 0x736E6F6F70000000L - -SNOOP_VERSION = 2 - -SDL_8023 = 0 -SDL_8024 = 1 -SDL_8025 = 2 -SDL_8026 = 3 -SDL_ETHER = 4 -SDL_HDLC = 5 -SDL_CHSYNC = 6 -SDL_IBMCC = 7 -SDL_FDDI = 8 -SDL_OTHER = 9 - -dltoff = {SDL_ETHER: 14} - - -class PktHdr(dpkt.Packet): - """snoop packet header.""" - __byte_order__ = '!' - __hdr__ = ( - ('orig_len', 'I', 0), - ('incl_len', 'I', 0), - ('rec_len', 'I', 0), - ('cum_drops', 'I', 0), - ('ts_sec', 'I', 0), - ('ts_usec', 'I', 0), - ) - - -class FileHdr(dpkt.Packet): - """snoop file header.""" - __byte_order__ = '!' - __hdr__ = ( - ('magic', 'Q', SNOOP_MAGIC), - ('v', 'I', SNOOP_VERSION), - ('linktype', 'I', SDL_ETHER), - ) - - -class Writer(object): - """Simple snoop dumpfile writer.""" - - def __init__(self, fileobj, linktype=SDL_ETHER): - self.__f = fileobj - fh = FileHdr(linktype=linktype) - self.__f.write(str(fh)) - - def writepkt(self, pkt, ts=None): - if ts is None: - ts = time.time() - s = str(pkt) - n = len(s) - pad_len = 4 - n % 4 if n % 4 else 0 - ph = PktHdr(orig_len=n, incl_len=n, - rec_len=PktHdr.__hdr_len__ + n + pad_len, - ts_sec=int(ts), - ts_usec=int((int(ts) - float(ts)) * 1000000.0)) - self.__f.write(str(ph)) - self.__f.write(s + '\0' * pad_len) - - def close(self): - self.__f.close() - - -class Reader(object): - """Simple pypcap-compatible snoop file reader.""" - - def __init__(self, fileobj): - self.name = fileobj.name - self.fd = fileobj.fileno() - self.__f = fileobj - buf = self.__f.read(FileHdr.__hdr_len__) - self.__fh = FileHdr(buf) - self.__ph = PktHdr - if self.__fh.magic != SNOOP_MAGIC: - raise ValueError('invalid snoop header') - self.dloff = dltoff[self.__fh.linktype] - self.filter = '' - - def fileno(self): - return self.fd - - def datalink(self): - return self.__fh.linktype - - def setfilter(self, value, optimize=1): - return NotImplementedError - - def readpkts(self): - return list(self) - - def dispatch(self, cnt, callback, *args): - if cnt > 0: - for i in range(cnt): - ts, pkt = self.next() - callback(ts, pkt, *args) - else: - for ts, pkt in self: - callback(ts, pkt, *args) - - def loop(self, callback, *args): - self.dispatch(0, callback, *args) - - def __iter__(self): - self.__f.seek(FileHdr.__hdr_len__) - while 1: - buf = self.__f.read(PktHdr.__hdr_len__) - if not buf: break - hdr = self.__ph(buf) - buf = self.__f.read(hdr.rec_len - PktHdr.__hdr_len__) - yield (hdr.ts_sec + (hdr.ts_usec / 1000000.0), buf[:hdr.incl_len]) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl.py deleted file mode 100644 index ea761552..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl.py +++ /dev/null @@ -1,579 +0,0 @@ -# $Id: ssl.py 90 2014-04-02 22:06:23Z andrewflnr@gmail.com $ -# Portion Copyright 2012 Google Inc. All rights reserved. -# -*- coding: utf-8 -*- -"""Secure Sockets Layer / Transport Layer Security.""" - -import dpkt -import ssl_ciphersuites -import struct -import binascii - -# -# Note from April 2011: cde...@gmail.com added code that parses SSL3/TLS messages more in depth. -# -# Jul 2012: afleenor@google.com modified and extended SSL support further. -# - - -class SSL2(dpkt.Packet): - __hdr__ = ( - ('len', 'H', 0), - ('msg', 's', ''), - ('pad', 's', ''), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.len & 0x8000: - n = self.len = self.len & 0x7FFF - self.msg, self.data = self.data[:n], self.data[n:] - else: - n = self.len = self.len & 0x3FFF - padlen = ord(self.data[0]) - self.msg = self.data[1:1 + n] - self.pad = self.data[1 + n:1 + n + padlen] - self.data = self.data[1 + n + padlen:] - - -# SSLv3/TLS versions -SSL3_V = 0x0300 -TLS1_V = 0x0301 -TLS11_V = 0x0302 -TLS12_V = 0x0303 - -ssl3_versions_str = { - SSL3_V: 'SSL3', - TLS1_V: 'TLS 1.0', - TLS11_V: 'TLS 1.1', - TLS12_V: 'TLS 1.2' -} - -SSL3_VERSION_BYTES = set(('\x03\x00', '\x03\x01', '\x03\x02', '\x03\x03')) - - -# Alert levels -SSL3_AD_WARNING = 1 -SSL3_AD_FATAL = 2 -alert_level_str = { - SSL3_AD_WARNING: 'SSL3_AD_WARNING', - SSL3_AD_FATAL: 'SSL3_AD_FATAL' -} - -# SSL3 alert descriptions -SSL3_AD_CLOSE_NOTIFY = 0 -SSL3_AD_UNEXPECTED_MESSAGE = 10 # fatal -SSL3_AD_BAD_RECORD_MAC = 20 # fatal -SSL3_AD_DECOMPRESSION_FAILURE = 30 # fatal -SSL3_AD_HANDSHAKE_FAILURE = 40 # fatal -SSL3_AD_NO_CERTIFICATE = 41 -SSL3_AD_BAD_CERTIFICATE = 42 -SSL3_AD_UNSUPPORTED_CERTIFICATE = 43 -SSL3_AD_CERTIFICATE_REVOKED = 44 -SSL3_AD_CERTIFICATE_EXPIRED = 45 -SSL3_AD_CERTIFICATE_UNKNOWN = 46 -SSL3_AD_ILLEGAL_PARAMETER = 47 # fatal - -# TLS1 alert descriptions -TLS1_AD_DECRYPTION_FAILED = 21 -TLS1_AD_RECORD_OVERFLOW = 22 -TLS1_AD_UNKNOWN_CA = 48 # fatal -TLS1_AD_ACCESS_DENIED = 49 # fatal -TLS1_AD_DECODE_ERROR = 50 # fatal -TLS1_AD_DECRYPT_ERROR = 51 -TLS1_AD_EXPORT_RESTRICTION = 60 # fatal -TLS1_AD_PROTOCOL_VERSION = 70 # fatal -TLS1_AD_INSUFFICIENT_SECURITY = 71 # fatal -TLS1_AD_INTERNAL_ERROR = 80 # fatal -TLS1_AD_USER_CANCELLED = 90 -TLS1_AD_NO_RENEGOTIATION = 100 -# /* codes 110-114 are from RFC3546 */ -TLS1_AD_UNSUPPORTED_EXTENSION = 110 -TLS1_AD_CERTIFICATE_UNOBTAINABLE = 111 -TLS1_AD_UNRECOGNIZED_NAME = 112 -TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE = 113 -TLS1_AD_BAD_CERTIFICATE_HASH_VALUE = 114 -TLS1_AD_UNKNOWN_PSK_IDENTITY = 115 # fatal - - -# Mapping alert types to strings -alert_description_str = { - SSL3_AD_CLOSE_NOTIFY: 'SSL3_AD_CLOSE_NOTIFY', - SSL3_AD_UNEXPECTED_MESSAGE: 'SSL3_AD_UNEXPECTED_MESSAGE', - SSL3_AD_BAD_RECORD_MAC: 'SSL3_AD_BAD_RECORD_MAC', - SSL3_AD_DECOMPRESSION_FAILURE: 'SSL3_AD_DECOMPRESSION_FAILURE', - SSL3_AD_HANDSHAKE_FAILURE: 'SSL3_AD_HANDSHAKE_FAILURE', - SSL3_AD_NO_CERTIFICATE: 'SSL3_AD_NO_CERTIFICATE', - SSL3_AD_BAD_CERTIFICATE: 'SSL3_AD_BAD_CERTIFICATE', - SSL3_AD_UNSUPPORTED_CERTIFICATE: 'SSL3_AD_UNSUPPORTED_CERTIFICATE', - SSL3_AD_CERTIFICATE_REVOKED: 'SSL3_AD_CERTIFICATE_REVOKED', - SSL3_AD_CERTIFICATE_EXPIRED: 'SSL3_AD_CERTIFICATE_EXPIRED', - SSL3_AD_CERTIFICATE_UNKNOWN: 'SSL3_AD_CERTIFICATE_UNKNOWN', - SSL3_AD_ILLEGAL_PARAMETER: 'SSL3_AD_ILLEGAL_PARAMETER', - TLS1_AD_DECRYPTION_FAILED: 'TLS1_AD_DECRYPTION_FAILED', - TLS1_AD_RECORD_OVERFLOW: 'TLS1_AD_RECORD_OVERFLOW', - TLS1_AD_UNKNOWN_CA: 'TLS1_AD_UNKNOWN_CA', - TLS1_AD_ACCESS_DENIED: 'TLS1_AD_ACCESS_DENIED', - TLS1_AD_DECODE_ERROR: 'TLS1_AD_DECODE_ERROR', - TLS1_AD_DECRYPT_ERROR: 'TLS1_AD_DECRYPT_ERROR', - TLS1_AD_EXPORT_RESTRICTION: 'TLS1_AD_EXPORT_RESTRICTION', - TLS1_AD_PROTOCOL_VERSION: 'TLS1_AD_PROTOCOL_VERSION', - TLS1_AD_INSUFFICIENT_SECURITY: 'TLS1_AD_INSUFFICIENT_SECURITY', - TLS1_AD_INTERNAL_ERROR: 'TLS1_AD_INTERNAL_ERROR', - TLS1_AD_USER_CANCELLED: 'TLS1_AD_USER_CANCELLED', - TLS1_AD_NO_RENEGOTIATION: 'TLS1_AD_NO_RENEGOTIATION', - TLS1_AD_UNSUPPORTED_EXTENSION: 'TLS1_AD_UNSUPPORTED_EXTENSION', - TLS1_AD_CERTIFICATE_UNOBTAINABLE: 'TLS1_AD_CERTIFICATE_UNOBTAINABLE', - TLS1_AD_UNRECOGNIZED_NAME: 'TLS1_AD_UNRECOGNIZED_NAME', - TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 'TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE', - TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 'TLS1_AD_BAD_CERTIFICATE_HASH_VALUE', - TLS1_AD_UNKNOWN_PSK_IDENTITY: 'TLS1_AD_UNKNOWN_PSK_IDENTITY' -} - - -# struct format strings for parsing buffer lengths -# don't forget, you have to pad a 3-byte value with \x00 -_SIZE_FORMATS = ['!B', '!H', '!I', '!I'] - - -def parse_variable_array(buf, lenbytes): - """ - Parse an array described using the 'Type name' syntax from the spec - Read a length at the start of buf, and returns that many bytes - after, in a tuple with the TOTAL bytes consumed (including the size). This - does not check that the array is the right length for any given datatype. - """ - # first have to figure out how to parse length - assert lenbytes <= 4 # pretty sure 4 is impossible, too - size_format = _SIZE_FORMATS[lenbytes - 1] - padding = '\x00' if lenbytes == 3 else '' - # read off the length - size = struct.unpack(size_format, padding + buf[:lenbytes])[0] - # read the actual data - data = buf[lenbytes:lenbytes + size] - # if len(data) != size: insufficient data - return data, size + lenbytes - - -class SSL3Exception(Exception): - pass - - -class TLSRecord(dpkt.Packet): - - """ - SSLv3 or TLSv1+ packet. - - In addition to the fields specified in the header, there are - compressed and decrypted fields, indicating whether, in the language - of the spec, this is a TLSPlaintext, TLSCompressed, or - TLSCiphertext. The application will have to figure out when it's - appropriate to change these values. - """ - - __hdr__ = ( - ('type', 'B', 0), - ('version', 'H', 0), - ('length', 'H', 0), - ) - - def __init__(self, *args, **kwargs): - # assume plaintext unless specified otherwise in arguments - self.compressed = kwargs.pop('compressed', False) - self.encrypted = kwargs.pop('encrypted', False) - # parent constructor - dpkt.Packet.__init__(self, *args, **kwargs) - # make sure length and data are consistent - self.length = len(self.data) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - header_length = self.__hdr_len__ - self.data = buf[header_length:header_length + self.length] - # make sure buffer was long enough - if len(self.data) != self.length: - raise dpkt.NeedData('TLSRecord data was too short.') - # assume compressed and encrypted when it's been parsed from - # raw data - self.compressed = True - self.encrypted = True - - -class TLSChangeCipherSpec(dpkt.Packet): - - """ - ChangeCipherSpec message is just a single byte with value 1 - """ - - __hdr__ = (('type', 'B', 1),) - - -class TLSAppData(str): - - """ - As far as TLSRecord is concerned, AppData is just an opaque blob. - """ - - pass - - -class TLSAlert(dpkt.Packet): - __hdr__ = ( - ('level', 'B', 1), - ('description', 'B', 0), - ) - - -class TLSHelloRequest(dpkt.Packet): - __hdr__ = tuple() - - -class TLSClientHello(dpkt.Packet): - __hdr__ = ( - ('version', 'H', 0x0301), - ('random', '32s', '\x00' * 32), - ) # the rest is variable-length and has to be done manually - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - # now session, cipher suites, extensions are in self.data - self.session_id, pointer = parse_variable_array(self.data, 1) - # print 'pointer',pointer - # handle ciphersuites - ciphersuites, parsed = parse_variable_array(self.data[pointer:], 2) - pointer += parsed - self.num_ciphersuites = len(ciphersuites) / 2 - # check len(ciphersuites) % 2 == 0 ? - # compression methods - compression_methods, parsed = parse_variable_array( - self.data[pointer:], 1) - pointer += parsed - self.num_compression_methods = parsed - 1 - self.compression_methods = map(ord, compression_methods) - # extensions - - -class TLSServerHello(dpkt.Packet): - __hdr__ = ( - ('version', 'H', '0x0301'), - ('random', '32s', '\x00' * 32), - ) # session is variable, forcing rest to be manual - - def unpack(self, buf): - try: - dpkt.Packet.unpack(self, buf) - self.session_id, pointer = parse_variable_array(self.data, 1) - # single cipher suite - self.cipher_suite = struct.unpack('!H', self.data[pointer:pointer + 2])[0] - pointer += 2 - # single compression method - self.compression = struct.unpack('!B', self.data[pointer:pointer + 1])[0] - pointer += 1 - # ignore extensions for now - except struct.error: - # probably data too short - raise dpkt.NeedData - - -class TLSUnknownHandshake(dpkt.Packet): - __hdr__ = tuple() - - -TLSCertificate = TLSUnknownHandshake -TLSServerKeyExchange = TLSUnknownHandshake -TLSCertificateRequest = TLSUnknownHandshake -TLSServerHelloDone = TLSUnknownHandshake -TLSCertificateVerify = TLSUnknownHandshake -TLSClientKeyExchange = TLSUnknownHandshake -TLSFinished = TLSUnknownHandshake - - -# mapping of handshake type ids to their names -# and the classes that implement them -HANDSHAKE_TYPES = { - 0: ('HelloRequest', TLSHelloRequest), - 1: ('ClientHello', TLSClientHello), - 2: ('ServerHello', TLSServerHello), - 11: ('Certificate', TLSCertificate), - 12: ('ServerKeyExchange', TLSServerKeyExchange), - 13: ('CertificateRequest', TLSCertificateRequest), - 14: ('ServerHelloDone', TLSServerHelloDone), - 15: ('CertificateVerify', TLSCertificateVerify), - 16: ('ClientKeyExchange', TLSClientKeyExchange), - 20: ('Finished', TLSFinished), -} - - -class TLSHandshake(dpkt.Packet): - - """ - A TLS Handshake message - - This goes for all messages encapsulated in the Record layer, but especially - important for handshakes and app data: A message may be spread across a - number of TLSRecords, in addition to the possibility of there being more - than one in a given Record. You have to put together the contents of - TLSRecord's yourself. - """ - - # struct.unpack can't handle the 3-byte int, so we parse it as bytes - # (and store it as bytes so dpkt doesn't get confused), and turn it into - # an int in a user-facing property - __hdr__ = ( - ('type', 'B', 0), - ('length_bytes', '3s', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - # Wait, might there be more than one message of self.type? - embedded_type = HANDSHAKE_TYPES.get(self.type, None) - if embedded_type is None: - raise SSL3Exception('Unknown or invalid handshake type %d' % - self.type) - # only take the right number of bytes - self.data = self.data[:self.length] - if len(self.data) != self.length: - raise dpkt.NeedData - # get class out of embedded_type tuple - self.data = embedded_type[1](self.data) - - @property - def length(self): - return struct.unpack('!I', '\x00' + self.length_bytes)[0] - - -RECORD_TYPES = { - 20: TLSChangeCipherSpec, - 21: TLSAlert, - 22: TLSHandshake, - 23: TLSAppData, -} - - -class SSLFactory(object): - def __new__(cls, buf): - v = buf[1:3] - if v in SSL3_VERSION_BYTES: - return TLSRecord(buf) - # SSL2 has no characteristic header or magic bytes, so we just assume - # that the msg is an SSL2 msg if it is not detected as SSL3+ - return SSL2(buf) - - -def tls_multi_factory(buf): - """ - Attempt to parse one or more TLSRecord's out of buf - - Args: - buf: string containing SSL/TLS messages. May have an incomplete record - on the end - - Returns: - [TLSRecord] - int, total bytes consumed, != len(buf) if an incomplete record was left at - the end. - - Raises SSL3Exception. - """ - i, n = 0, len(buf) - msgs = [] - while i < n: - v = buf[i + 1:i + 3] - if v in SSL3_VERSION_BYTES: - try: - msg = TLSRecord(buf[i:]) - msgs.append(msg) - except dpkt.NeedData: - break - else: - raise SSL3Exception('Bad TLS version in buf: %r' % buf[i:i + 5]) - i += len(msg) - return msgs, i - -_hexdecode = binascii.a2b_hex - - -class TestTLSRecord(object): - - """ - Test basic TLSRecord functionality - For this test, the contents of the record doesn't matter, since we're not parsing the next layer. - """ - - @classmethod - def setup_class(cls): - # add some extra data, to make sure length is parsed correctly - cls.p = TLSRecord('\x17\x03\x01\x00\x08abcdefghzzzzzzzzzzz') - - def test_content_type(self): - assert (self.p.type == 23) - - def test_version(self): - assert (self.p.version == 0x0301) - - def test_length(self): - assert (self.p.length == 8) - - def test_data(self): - assert (self.p.data == 'abcdefgh') - - def test_initial_flags(self): - assert (self.p.compressed == True) - assert (self.p.encrypted == True) - - def test_repack(self): - p2 = TLSRecord(type=23, version=0x0301, data='abcdefgh') - assert (p2.type == 23) - assert (p2.version == 0x0301) - assert (p2.length == 8) - assert (p2.data == 'abcdefgh') - assert (p2.pack() == self.p.pack()) - - def test_total_length(self): - # that len(p) includes header - assert (len(self.p) == 13) - - def test_raises_need_data_when_buf_is_short(self): - import pytest - pytest.raises(dpkt.NeedData, TLSRecord, '\x16\x03\x01\x00\x10abc') - - -class TestTLSChangeCipherSpec(object): - - """It's just a byte. This will be quick, I promise""" - - @classmethod - def setup_class(cls): - cls.p = TLSChangeCipherSpec('\x01') - - def test_parses(self): - assert (self.p.type == 1) - - def test_total_length(self): - assert (len(self.p) == 1) - - -class TestTLSAppData(object): - - """AppData is basically just a string""" - - def test_value(self): - d = TLSAppData('abcdefgh') - assert (d == 'abcdefgh') - - -class TestTLSHandshake(object): - @classmethod - def setup_class(cls): - cls.h = TLSHandshake('\x00\x00\x00\x01\xff') - - def test_created_inside_message(self): - assert (isinstance(self.h.data, TLSHelloRequest) == True) - - def test_length(self): - assert (self.h.length == 0x01) - - def test_raises_need_data(self): - import pytest - pytest.raises(dpkt.NeedData, TLSHandshake, '\x00\x00\x01\x01') - - -class TestClientHello(object): - - """This data is extracted from and verified by Wireshark""" - - @classmethod - def setup_class(cls): - cls.data = _hexdecode( - "01000199" # handshake header - "0301" # version - "5008220ce5e0e78b6891afe204498c9363feffbe03235a2d9e05b7d990eb708d" # rand - "2009bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed1" # session id - # cipher suites - "005400ffc00ac0140088008700390038c00fc00500840035c007c009c011c0130045004400330032c00cc00ec002c0040096004100050004002fc008c01200160013c00dc003feff000ac006c010c00bc00100020001" - "0100" # compresssion methods - # extensions - "00fc0000000e000c0000096c6f63616c686f7374000a00080006001700180019000b00020100002300d0a50b2e9f618a9ea9bf493ef49b421835cd2f6b05bbe1179d8edf70d58c33d656e8696d36d7e7e0b9d3ecc0e4de339552fa06c64c0fcb550a334bc43944e2739ca342d15a9ebbe981ac87a0d38160507d47af09bdc16c5f0ee4cdceea551539382333226048a026d3a90a0535f4a64236467db8fee22b041af986ad0f253bc369137cd8d8cd061925461d7f4d7895ca9a4181ab554dad50360ac31860e971483877c9335ac1300c5e78f3e56f3b8e0fc16358fcaceefd5c8d8aaae7b35be116f8832856ca61144fcdd95e071b94d0cf7233740000" - "FFFFFFFFFFFFFFFF") # random garbage - cls.p = TLSHandshake(cls.data) - - def test_client_hello_constructed(self): - """Make sure the correct class was constructed""" - # print self.p - assert (isinstance(self.p.data, TLSClientHello) == True) - - # def testClientDateCorrect(self): - # self.assertEqual(self.p.random_unixtime, 1342710284) - - def test_client_random_correct(self): - assert (self.p.data.random == _hexdecode('5008220ce5e0e78b6891afe204498c9363feffbe03235a2d9e05b7d990eb708d')) - - def test_cipher_suite_length(self): - # we won't bother testing the identity of each cipher suite in the list. - assert (self.p.data.num_ciphersuites == 42) - # self.assertEqual(len(self.p.ciphersuites), 42) - - def test_session_id(self): - assert (self.p.data.session_id == _hexdecode('09bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed1')) - - def test_compression_methods(self): - assert (self.p.data.num_compression_methods == 1) - - def test_total_length(self): - assert (len(self.p) == 413) - - -class TestServerHello(object): - - """Again, from Wireshark""" - - @classmethod - def setup_class(cls): - cls.data = _hexdecode( - '0200004d03015008220c8ec43c5462315a7c99f5d5b6bff009ad285b51dc18485f352e9fdecd2009bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed10002000005ff01000100') - cls.p = TLSHandshake(cls.data) - - def test_constructed(self): - assert (isinstance(self.p.data, TLSServerHello) == True) - - # def testDateCorrect(self): - # self.assertEqual(self.p.random_unixtime, 1342710284) - - def test_random_correct(self): - assert (self.p.data.random == _hexdecode('5008220c8ec43c5462315a7c99f5d5b6bff009ad285b51dc18485f352e9fdecd')) - - def test_cipher_suite(self): - assert (ssl_ciphersuites.BY_CODE[self.p.data.cipher_suite].name == 'TLS_RSA_WITH_NULL_SHA') - - def test_total_length(self): - assert (len(self.p) == 81) - - -class TestTLSMultiFactory(object): - - """Made up test data""" - - @classmethod - def setup_class(cls): - cls.data = _hexdecode('1703010010' # header 1 - 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' # data 1 - '1703010010' # header 2 - 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' # data 2 - '1703010010' # header 3 - 'CCCCCCCC') # data 3 (incomplete) - cls.msgs, cls.bytes_parsed = tls_multi_factory(cls.data) - - def test_num_messages(self): - # only complete messages should be parsed, incomplete ones left - # in buffer - assert (len(self.msgs) == 2) - - def test_bytes_parsed(self): - assert (self.bytes_parsed == (5 + 16) * 2) - - def test_first_msg_data(self): - assert (self.msgs[0].data == _hexdecode('AA' * 16)) - - def test_second_msg_data(self): - assert (self.msgs[1].data == _hexdecode('BB' * 16)) - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py deleted file mode 100644 index d5ee1b9d..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py +++ /dev/null @@ -1,76 +0,0 @@ -# Copyright 2012 Google Inc. All rights reserved. -# -*- coding: utf-8 -*- -""" -Nicely formatted cipher suite definitions for TLS - -A list of cipher suites in the form of CipherSuite objects. -These are supposed to be immutable; don't mess with them. -""" - - -class CipherSuite(object): - """ - Encapsulates a cipher suite. - - Members/args: - * code: two-byte ID code, as int - * name: as in 'TLS_RSA_WITH_RC4_40_MD5' - * kx: key exchange algorithm, string - * auth: authentication algorithm, string - * encoding: encoding algorithm - * mac: message authentication code algorithm - """ - - def __init__(self, code, name, kx, auth, encoding, mac): - self.code = code - self.name = name - self.kx = kx - self.auth = auth - self.encoding = encoding - self.mac = mac - - def __repr__(self): - return 'CipherSuite(%s)' % self.name - - MAC_SIZES = { - 'MD5': 16, - 'SHA': 20, - 'SHA256': 32, # I guess - } - - BLOCK_SIZES = { - 'AES_256_CBC': 16, - } - - @property - def mac_size(self): - """In bytes. Default to 0.""" - return self.MAC_SIZES.get(self.mac, 0) - - @property - def block_size(self): - """In bytes. Default to 1.""" - return self.BLOCK_SIZES.get(self.encoding, 1) - - -# master list of CipherSuite Objects -CIPHERSUITES = [ - # not a real cipher suite, can be ignored, see RFC5746 - CipherSuite(0xff, 'TLS_EMPTY_RENEGOTIATION_INFO', - 'NULL', 'NULL', 'NULL', 'NULL'), - CipherSuite(0x00, 'TLS_NULL_WITH_NULL_NULL', - 'NULL', 'NULL', 'NULL', 'NULL'), - CipherSuite(0x01, 'TLS_RSA_WITH_NULL_MD5', 'RSA', 'RSA', 'NULL', 'MD5'), - CipherSuite(0x02, 'TLS_RSA_WITH_NULL_SHA', 'RSA', 'RSA', 'NULL', 'SHA'), - CipherSuite(0x0039, 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA', - 'DHE', 'RSA', 'AES_256_CBC', 'SHA'), # not sure I got the kx/auth thing right. - CipherSuite(0xffff, 'UNKNOWN_CIPHER', '', '', '', '') -] - -BY_CODE = dict( - (cipher.code, cipher) for cipher in CIPHERSUITES) - -BY_NAME = dict( - (suite.name, suite) for suite in CIPHERSUITES) - -NULL_SUITE = BY_CODE[0x00] diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stp.py deleted file mode 100644 index 382318a4..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stp.py +++ /dev/null @@ -1,22 +0,0 @@ -# $Id: stp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Spanning Tree Protocol.""" - -import dpkt - - -class STP(dpkt.Packet): - __hdr__ = ( - ('proto_id', 'H', 0), - ('v', 'B', 0), - ('type', 'B', 0), - ('flags', 'B', 0), - ('root_id', '8s', ''), - ('root_path', 'I', 0), - ('bridge_id', '8s', ''), - ('port_id', 'H', 0), - ('age', 'H', 0), - ('max_age', 'H', 0), - ('hello', 'H', 0), - ('fd', 'H', 0) - ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stun.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stun.py deleted file mode 100644 index e371350c..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/stun.py +++ /dev/null @@ -1,47 +0,0 @@ -# $Id: stun.py 47 2008-05-27 02:10:00Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Simple Traversal of UDP through NAT.""" - -import struct -import dpkt - -# STUN - RFC 3489 -# http://tools.ietf.org/html/rfc3489 -# Each packet has a 20 byte header followed by 0 or more attribute TLVs. - -# Message Types -BINDING_REQUEST = 0x0001 -BINDING_RESPONSE = 0x0101 -BINDING_ERROR_RESPONSE = 0x0111 -SHARED_SECRET_REQUEST = 0x0002 -SHARED_SECRET_RESPONSE = 0x0102 -SHARED_SECRET_ERROR_RESPONSE = 0x0112 - -# Message Attributes -MAPPED_ADDRESS = 0x0001 -RESPONSE_ADDRESS = 0x0002 -CHANGE_REQUEST = 0x0003 -SOURCE_ADDRESS = 0x0004 -CHANGED_ADDRESS = 0x0005 -USERNAME = 0x0006 -PASSWORD = 0x0007 -MESSAGE_INTEGRITY = 0x0008 -ERROR_CODE = 0x0009 -UNKNOWN_ATTRIBUTES = 0x000a -REFLECTED_FROM = 0x000b - - -class STUN(dpkt.Packet): - __hdr__ = ( - ('type', 'H', 0), - ('len', 'H', 0), - ('xid', '16s', 0) - ) - - -def tlv(buf): - n = 4 - t, l = struct.unpack('>HH', buf[:n]) - v = buf[n:n + l] - buf = buf[n + l:] - return t, l, v, buf diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tcp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tcp.py deleted file mode 100644 index fe1a3b97..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tcp.py +++ /dev/null @@ -1,152 +0,0 @@ -# $Id: tcp.py 42 2007-08-02 22:38:47Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Transmission Control Protocol.""" - -import dpkt -from decorators import deprecated - -# TCP control flags -TH_FIN = 0x01 # end of data -TH_SYN = 0x02 # synchronize sequence numbers -TH_RST = 0x04 # reset connection -TH_PUSH = 0x08 # push -TH_ACK = 0x10 # acknowledgment number set -TH_URG = 0x20 # urgent pointer set -TH_ECE = 0x40 # ECN echo, RFC 3168 -TH_CWR = 0x80 # congestion window reduced - -TCP_PORT_MAX = 65535 # maximum port -TCP_WIN_MAX = 65535 # maximum (unscaled) window - - -class TCP(dpkt.Packet): - __hdr__ = ( - ('sport', 'H', 0xdead), - ('dport', 'H', 0), - ('seq', 'I', 0xdeadbeefL), - ('ack', 'I', 0), - ('off_x2', 'B', ((5 << 4) | 0)), - ('flags', 'B', TH_SYN), - ('win', 'H', TCP_WIN_MAX), - ('sum', 'H', 0), - ('urp', 'H', 0) - ) - opts = '' - - @property - def off(self): return self.off_x2 >> 4 - - @off.setter - def off(self, off): self.off_x2 = (off << 4) | (self.off_x2 & 0xf) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_off(self): return self.off - - @deprecated - def _set_off(self, off): self.off = off - # ================================================= - - def __len__(self): - return self.__hdr_len__ + len(self.opts) + len(self.data) - - def __str__(self): - return self.pack_hdr() + self.opts + str(self.data) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - ol = ((self.off_x2 >> 4) << 2) - self.__hdr_len__ - if ol < 0: - raise dpkt.UnpackError, 'invalid header length' - self.opts = buf[self.__hdr_len__:self.__hdr_len__ + ol] - self.data = buf[self.__hdr_len__ + ol:] - -# Options (opt_type) - http://www.iana.org/assignments/tcp-parameters -TCP_OPT_EOL = 0 # end of option list -TCP_OPT_NOP = 1 # no operation -TCP_OPT_MSS = 2 # maximum segment size -TCP_OPT_WSCALE = 3 # window scale factor, RFC 1072 -TCP_OPT_SACKOK = 4 # SACK permitted, RFC 2018 -TCP_OPT_SACK = 5 # SACK, RFC 2018 -TCP_OPT_ECHO = 6 # echo (obsolete), RFC 1072 -TCP_OPT_ECHOREPLY = 7 # echo reply (obsolete), RFC 1072 -TCP_OPT_TIMESTAMP = 8 # timestamp, RFC 1323 -TCP_OPT_POCONN = 9 # partial order conn, RFC 1693 -TCP_OPT_POSVC = 10 # partial order service, RFC 1693 -TCP_OPT_CC = 11 # connection count, RFC 1644 -TCP_OPT_CCNEW = 12 # CC.NEW, RFC 1644 -TCP_OPT_CCECHO = 13 # CC.ECHO, RFC 1644 -TCP_OPT_ALTSUM = 14 # alt checksum request, RFC 1146 -TCP_OPT_ALTSUMDATA = 15 # alt checksum data, RFC 1146 -TCP_OPT_SKEETER = 16 # Skeeter -TCP_OPT_BUBBA = 17 # Bubba -TCP_OPT_TRAILSUM = 18 # trailer checksum -TCP_OPT_MD5 = 19 # MD5 signature, RFC 2385 -TCP_OPT_SCPS = 20 # SCPS capabilities -TCP_OPT_SNACK = 21 # selective negative acks -TCP_OPT_REC = 22 # record boundaries -TCP_OPT_CORRUPT = 23 # corruption experienced -TCP_OPT_SNAP = 24 # SNAP -TCP_OPT_TCPCOMP = 26 # TCP compression filter -TCP_OPT_MAX = 27 - - -def parse_opts(buf): - """Parse TCP option buffer into a list of (option, data) tuples.""" - opts = [] - while buf: - o = ord(buf[0]) - if o > TCP_OPT_NOP: - try: - # advance buffer at least 2 bytes = 1 type + 1 length - l = max(2, ord(buf[1])) - d, buf = buf[2:l], buf[l:] - except (IndexError, ValueError): - # print 'bad option', repr(str(buf)) - opts.append(None) # XXX - break - else: - # options 0 and 1 are not followed by length byte - d, buf = '', buf[1:] - opts.append((o, d)) - return opts - - -def test_parse_opts(): - # normal scenarios - buf = '\x02\x04\x23\x00\x01\x01\x04\x02' - opts = parse_opts(buf) - assert opts == [ - (TCP_OPT_MSS, '\x23\x00'), - (TCP_OPT_NOP, ''), - (TCP_OPT_NOP, ''), - (TCP_OPT_SACKOK, '') - ] - - buf = '\x01\x01\x05\x0a\x37\xf8\x19\x70\x37\xf8\x29\x78' - opts = parse_opts(buf) - assert opts == [ - (TCP_OPT_NOP, ''), - (TCP_OPT_NOP, ''), - (TCP_OPT_SACK, '\x37\xf8\x19\x70\x37\xf8\x29\x78') - ] - - # test a zero-length option - buf = '\x02\x00\x01' - opts = parse_opts(buf) - assert opts == [ - (TCP_OPT_MSS, ''), - (TCP_OPT_NOP, '') - ] - - # test a one-byte malformed option - buf = '\xff' - opts = parse_opts(buf) - assert opts == [None] - - -if __name__ == '__main__': - # Runs all the test associated with this class/file - test_parse_opts() - print 'Tests Successful...' diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/telnet.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/telnet.py deleted file mode 100644 index 9a1d7f4c..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/telnet.py +++ /dev/null @@ -1,80 +0,0 @@ -# $Id: telnet.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Telnet.""" - -IAC = 255 # interpret as command: -DONT = 254 # you are not to use option -DO = 253 # please, you use option -WONT = 252 # I won't use option -WILL = 251 # I will use option -SB = 250 # interpret as subnegotiation -GA = 249 # you may reverse the line -EL = 248 # erase the current line -EC = 247 # erase the current character -AYT = 246 # are you there -AO = 245 # abort output--but let prog finish -IP = 244 # interrupt process--permanently -BREAK = 243 # break -DM = 242 # data mark--for connect. cleaning -NOP = 241 # nop -SE = 240 # end sub negotiation -EOR = 239 # end of record (transparent mode) -ABORT = 238 # Abort process -SUSP = 237 # Suspend process -xEOF = 236 # End of file: EOF is already used... - -SYNCH = 242 # for telfunc calls - - -def strip_options(buf): - """Return a list of lines and dict of options from telnet data.""" - l = buf.split(chr(IAC)) - # print l - b = [] - d = {} - subopt = False - for w in l: - if not w: - continue - o = ord(w[0]) - if o > SB: - # print 'WILL/WONT/DO/DONT/IAC', `w` - w = w[2:] - elif o == SE: - # print 'SE', `w` - w = w[1:] - subopt = False - elif o == SB: - # print 'SB', `w` - subopt = True - for opt in ('USER', 'DISPLAY', 'TERM'): - p = w.find(opt + '\x01') - if p != -1: - d[opt] = w[p + len(opt) + 1:].split('\x00', 1)[0] - w = None - elif subopt: - w = None - if w: - w = w.replace('\x00', '\n').splitlines() - if not w[-1]: w.pop() - b.extend(w) - return b, d - - -def test_telnet(): - l = [] - s = "\xff\xfb%\xff\xfa%\x00\x00\x00\xff\xf0\xff\xfd&\xff\xfa&\x05\xff\xf0\xff\xfa&\x01\x01\x02\xff\xf0\xff\xfb\x18\xff\xfb \xff\xfb#\xff\xfb'\xff\xfc$\xff\xfa \x0038400,38400\xff\xf0\xff\xfa#\x00doughboy.citi.umich.edu:0.0\xff\xf0\xff\xfa'\x00\x00DISPLAY\x01doughboy.citi.umich.edu:0.0\x00USER\x01dugsong\xff\xf0\xff\xfa\x18\x00XTERM\xff\xf0\xff\xfd\x03\xff\xfc\x01\xff\xfb\x1f\xff\xfa\x1f\x00P\x00(\xff\xf0\xff\xfd\x05\xff\xfb!\xff\xfd\x01fugly\r\x00yoda\r\x00bashtard\r\x00" - l.append(s) - s = '\xff\xfd\x01\xff\xfd\x03\xff\xfb\x18\xff\xfb\x1f\xff\xfa\x1f\x00X\x002\xff\xf0admin\r\x00\xff\xfa\x18\x00LINUX\xff\xf0foobar\r\x00enable\r\x00foobar\r\x00\r\x00show ip int Vlan 666\r\x00' - l.append(s) - s = '\xff\xfb%\xff\xfa%\x00\x00\x00\xff\xf0\xff\xfd&\xff\xfa&\x05\xff\xf0\xff\xfa&\x01\x01\x02\xff\xf0\xff\xfb&\xff\xfb\x18\xff\xfb \xff\xfb#\xff\xfb\'\xff\xfc$\xff\xfa \x0038400,38400\xff\xf0\xff\xfa#\x00doughboy.citi.umich.edu:0.0\xff\xf0\xff\xfa\'\x00\x00DISPLAY\x01doughboy.citi.umich.edu:0.0\x00USER\x01dugsong\xff\xf0\xff\xfa\x18\x00XTERM\xff\xf0\xff\xfd\x03\xff\xfc\x01\xff\xfb"\xff\xfa"\x03\x01\x03\x00\x03b\x03\x04\x02\x0f\x05\x00\xff\xff\x07b\x1c\x08\x02\x04\tB\x1a\n\x02\x7f\x0b\x02\x15\x0c\x02\x17\r\x02\x12\x0e\x02\x16\x0f\x02\x11\x10\x02\x13\x11\x00\xff\xff\x12\x00\xff\xff\xff\xf0\xff\xfb\x1f\xff\xfa\x1f\x00P\x00(\xff\xf0\xff\xfd\x05\xff\xfb!\xff\xfa"\x01\x0f\xff\xf0\xff\xfd\x01\xff\xfe\x01\xff\xfa"\x03\x01\x80\x00\xff\xf0\xff\xfd\x01werd\r\n\xff\xfe\x01yoda\r\n\xff\xfd\x01darthvader\r\n\xff\xfe\x01' - l.append(s) - exp = [(['fugly', 'yoda', 'bashtard'], {'USER': 'dugsong', 'DISPLAY': 'doughboy.citi.umich.edu:0.0'}), - (['admin', 'foobar', 'enable', 'foobar', '', 'show ip int Vlan 666'], {}), - (['werd', 'yoda', 'darthvader'], {'USER': 'dugsong', 'DISPLAY': 'doughboy.citi.umich.edu:0.0'})] - assert (map(strip_options, l) == exp) - - -if __name__ == '__main__': - test_telnet() - print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tftp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tftp.py deleted file mode 100644 index 928ee1e3..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tftp.py +++ /dev/null @@ -1,56 +0,0 @@ -# $Id: tftp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Trivial File Transfer Protocol.""" - -import struct -import dpkt - -# Opcodes -OP_RRQ = 1 # read request -OP_WRQ = 2 # write request -OP_DATA = 3 # data packet -OP_ACK = 4 # acknowledgment -OP_ERR = 5 # error code - -# Error codes -EUNDEF = 0 # not defined -ENOTFOUND = 1 # file not found -EACCESS = 2 # access violation -ENOSPACE = 3 # disk full or allocation exceeded -EBADOP = 4 # illegal TFTP operation -EBADID = 5 # unknown transfer ID -EEXISTS = 6 # file already exists -ENOUSER = 7 # no such user - - -class TFTP(dpkt.Packet): - __hdr__ = (('opcode', 'H', 1), ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.opcode in (OP_RRQ, OP_WRQ): - l = self.data.split('\x00') - self.filename = l[0] - self.mode = l[1] - self.data = '' - elif self.opcode in (OP_DATA, OP_ACK): - self.block = struct.unpack('>H', self.data[:2]) - self.data = self.data[2:] - elif self.opcode == OP_ERR: - self.errcode = struct.unpack('>H', self.data[:2]) - self.errmsg = self.data[2:].split('\x00')[0] - self.data = '' - - def __len__(self): - return len(str(self)) - - def __str__(self): - if self.opcode in (OP_RRQ, OP_WRQ): - s = '%s\x00%s\x00' % (self.filename, self.mode) - elif self.opcode in (OP_DATA, OP_ACK): - s = struct.pack('>H', self.block) - elif self.opcode == OP_ERR: - s = struct.pack('>H', self.errcode) + ('%s\x00' % self.errmsg) - else: - s = '' - return self.pack_hdr() + s + self.data diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tns.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tns.py deleted file mode 100644 index 931508e6..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tns.py +++ /dev/null @@ -1,26 +0,0 @@ -# $Id: tns.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Transparent Network Substrate.""" - -import dpkt - - -class TNS(dpkt.Packet): - __hdr__ = ( - ('length', 'H', 0), - ('pktsum', 'H', 0), - ('type', 'B', 0), - ('rsvd', 'B', 0), - ('hdrsum', 'H', 0), - ('msg', '0s', ''), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - n = self.length - self.__hdr_len__ - if n > len(self.data): - raise dpkt.NeedData('short message (missing %d bytes)' % - (n - len(self.data))) - self.msg = self.data[:n] - self.data = self.data[n:] - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tpkt.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tpkt.py deleted file mode 100644 index d235833b..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/tpkt.py +++ /dev/null @@ -1,16 +0,0 @@ -# $Id: tpkt.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""ISO Transport Service on top of the TCP (TPKT).""" - -import dpkt - -# TPKT - RFC 1006 Section 6 -# http://www.faqs.org/rfcs/rfc1006.html - - -class TPKT(dpkt.Packet): - __hdr__ = ( - ('v', 'B', 3), - ('rsvd', 'B', 0), - ('len', 'H', 0) - ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/udp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/udp.py deleted file mode 100644 index 41a00e78..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/udp.py +++ /dev/null @@ -1,17 +0,0 @@ -# $Id: udp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""User Datagram Protocol.""" - -import dpkt - -UDP_HDR_LEN = 8 -UDP_PORT_MAX = 65535 - - -class UDP(dpkt.Packet): - __hdr__ = ( - ('sport', 'H', 0xdead), - ('dport', 'H', 0), - ('ulen', 'H', 8), - ('sum', 'H', 0) - ) diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/vrrp.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/vrrp.py deleted file mode 100644 index 6bdff005..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/vrrp.py +++ /dev/null @@ -1,70 +0,0 @@ -# $Id: vrrp.py 88 2013-03-05 19:43:17Z andrewflnr@gmail.com $ -# -*- coding: utf-8 -*- -"""Virtual Router Redundancy Protocol.""" - -import dpkt -from decorators import deprecated - - -class VRRP(dpkt.Packet): - __hdr__ = ( - ('vtype', 'B', 0x21), - ('vrid', 'B', 0), - ('priority', 'B', 0), - ('count', 'B', 0), - ('atype', 'B', 0), - ('advtime', 'B', 0), - ('sum', 'H', 0), - ) - addrs = () - auth = '' - - @property - def v(self): - return self.vtype >> 4 - - @v.setter - def v(self, v): - self.vtype = (self.vtype & ~0xf) | (v << 4) - - @property - def type(self): - return self.vtype & 0xf - - @type.setter - def type(self, v): - self.vtype = (self.vtype & ~0xf0) | (v & 0xf) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_v(self): return self.v - - @deprecated - def _set_v(self, v): self.v = v - - @deprecated - def _get_type(self): return self.type - - @deprecated - def _set_type(self, v): self.type = v - # ================================================= - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - l = [] - off = 0 - for off in range(0, 4 * self.count, 4): - l.append(self.data[off:off + 4]) - self.addrs = l - self.auth = self.data[off + 4:] - self.data = '' - - def __len__(self): - return self.__hdr_len__ + (4 * self.count) + len(self.auth) - - def __str__(self): - data = ''.join(self.addrs) + self.auth - if not self.sum: - self.sum = dpkt.in_cksum(self.pack_hdr() + data) - return self.pack_hdr() + data diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/yahoo.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/yahoo.py deleted file mode 100644 index 6b871115..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/dpkt/yahoo.py +++ /dev/null @@ -1,30 +0,0 @@ -# $Id: yahoo.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Yahoo Messenger.""" - -import dpkt - - -class YHOO(dpkt.Packet): - __hdr__ = [ - ('version', '8s', ' ' * 8), - ('length', 'I', 0), - ('service', 'I', 0), - ('connid', 'I', 0), - ('magic', 'I', 0), - ('unknown', 'I', 0), - ('type', 'I', 0), - ('nick1', '36s', ' ' * 36), - ('nick2', '36s', ' ' * 36) - ] - __byte_order__ = '<' - - -class YMSG(dpkt.Packet): - __hdr__ = [ - ('version', '8s', ' ' * 8), - ('length', 'H', 0), - ('type', 'H', 0), - ('unknown1', 'I', 0), - ('unknown2', 'I', 0) - ] diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.cfg b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.cfg deleted file mode 100644 index 56ffc205..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.cfg +++ /dev/null @@ -1,20 +0,0 @@ -[bdist_wheel] -universal = 1 - -[aliases] -release = register clean --all sdist bdist_wheel upload - -[flake8] -max-line-length = 140 - -[pytest] -addopts = -v --cov-report term-missing -python_files = *.py -python_functions = test -norecursedirs = .tox .git *.egg-info __pycache__ dist build - -[egg_info] -tag_build = -tag_date = 0 -tag_svn_revision = 0 - diff --git a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.py b/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.py deleted file mode 100644 index f77cd97e..00000000 --- a/scripts/automation/trex_control_plane/python_lib/dpkt-1.8.6.2/setup.py +++ /dev/null @@ -1,67 +0,0 @@ -import os -import sys - -try: - from setuptools import setup, Command -except ImportError: - from distutils.core import setup, Command - -package_name = 'dpkt' -description = 'fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols' -readme = open('README.rst').read() -requirements = [] - -# PyPI Readme -long_description = open('README.rst').read() - -# Pull in the package -package = __import__(package_name) - - -class BuildDebPackage(Command): - """Build a Debian Package out of this Python Package""" - try: - import stdeb - except ImportError as exc: - print 'To build a Debian Package you must install stdeb (pip install stdeb)' - - description = "Build a Debian Package out of this Python Package" - user_options = [] - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - os.system('python setup.py sdist') - sdist_file = os.path.join(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'dist'), - package_name + '-' + package.__version__ + '.tar.gz') - print sdist_file - os.system('py2dsc-deb ' + sdist_file) - - -setup(name=package_name, - version=package.__version__, - author=package.__author__, - author_email=package.__author_email__, - url=package.__url__, - description=description, - long_description=long_description, - packages=['dpkt'], - install_requires=requirements, - license='BSD', - zip_safe=False, - classifiers=[ - 'Development Status :: 4 - Beta', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: BSD License', - 'Natural Language :: English', - 'Programming Language :: Python :: 2.6', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: Implementation :: CPython', - 'Programming Language :: Python :: Implementation :: PyPy', - ], - cmdclass={'debian': BuildDebPackage} -) -- cgit 1.2.3-korg From c2154c0d362ced8f8b5181799c369e1497c958e1 Mon Sep 17 00:00:00 2001 From: Dan Klein Date: Thu, 27 Aug 2015 10:58:01 +0300 Subject: reverting to dpkt v1.8.6 instead of 1.8.6.2 to avoid importing error of pystone modue --- external_libs/python/dpkt-1.8.6.2/AUTHORS | 60 -- external_libs/python/dpkt-1.8.6.2/CHANGES | 71 -- external_libs/python/dpkt-1.8.6.2/LICENSE | 28 - external_libs/python/dpkt-1.8.6.2/MANIFEST.in | 7 - external_libs/python/dpkt-1.8.6.2/PKG-INFO | 82 -- external_libs/python/dpkt-1.8.6.2/README.md | 39 - external_libs/python/dpkt-1.8.6.2/README.rst | 64 -- external_libs/python/dpkt-1.8.6.2/docs/Makefile | 153 ---- .../python/dpkt-1.8.6.2/docs/api/api_auto.rst | 545 ------------- .../python/dpkt-1.8.6.2/docs/api/index.rst | 11 - external_libs/python/dpkt-1.8.6.2/docs/authors.rst | 7 - external_libs/python/dpkt-1.8.6.2/docs/badges.rst | 41 - .../python/dpkt-1.8.6.2/docs/changelog.rst | 4 - external_libs/python/dpkt-1.8.6.2/docs/conf.py | 76 -- .../python/dpkt-1.8.6.2/docs/contributing.rst | 45 -- .../python/dpkt-1.8.6.2/docs/examples.rst | 80 -- external_libs/python/dpkt-1.8.6.2/docs/index.rst | 32 - .../python/dpkt-1.8.6.2/docs/installation.rst | 21 - external_libs/python/dpkt-1.8.6.2/docs/license.rst | 4 - external_libs/python/dpkt-1.8.6.2/docs/plans.rst | 13 - .../python/dpkt-1.8.6.2/docs/requirements.txt | 3 - .../python/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO | 82 -- .../python/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt | 96 --- .../dpkt.egg-info/dependency_links.txt | 1 - .../python/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe | 1 - .../dpkt-1.8.6.2/dpkt.egg-info/top_level.txt | 1 - external_libs/python/dpkt-1.8.6.2/dpkt/__init__.py | 71 -- external_libs/python/dpkt-1.8.6.2/dpkt/ah.py | 35 - external_libs/python/dpkt-1.8.6.2/dpkt/aim.py | 52 -- external_libs/python/dpkt-1.8.6.2/dpkt/aoe.py | 90 --- external_libs/python/dpkt-1.8.6.2/dpkt/aoeata.py | 35 - external_libs/python/dpkt-1.8.6.2/dpkt/aoecfg.py | 25 - external_libs/python/dpkt-1.8.6.2/dpkt/arp.py | 32 - external_libs/python/dpkt-1.8.6.2/dpkt/asn1.py | 121 --- external_libs/python/dpkt-1.8.6.2/dpkt/bgp.py | 789 ------------------- external_libs/python/dpkt-1.8.6.2/dpkt/cdp.py | 99 --- external_libs/python/dpkt-1.8.6.2/dpkt/crc32c.py | 83 -- .../python/dpkt-1.8.6.2/dpkt/decorators.py | 91 --- external_libs/python/dpkt-1.8.6.2/dpkt/dhcp.py | 169 ---- external_libs/python/dpkt-1.8.6.2/dpkt/diameter.py | 243 ------ external_libs/python/dpkt-1.8.6.2/dpkt/dns.py | 462 ----------- external_libs/python/dpkt-1.8.6.2/dpkt/dpkt.py | 176 ----- external_libs/python/dpkt-1.8.6.2/dpkt/dtp.py | 26 - external_libs/python/dpkt-1.8.6.2/dpkt/esp.py | 12 - external_libs/python/dpkt-1.8.6.2/dpkt/ethernet.py | 145 ---- external_libs/python/dpkt-1.8.6.2/dpkt/gre.py | 127 --- external_libs/python/dpkt-1.8.6.2/dpkt/gzip.py | 123 --- external_libs/python/dpkt-1.8.6.2/dpkt/h225.py | 213 ----- external_libs/python/dpkt-1.8.6.2/dpkt/hsrp.py | 33 - external_libs/python/dpkt-1.8.6.2/dpkt/http.py | 259 ------ external_libs/python/dpkt-1.8.6.2/dpkt/icmp.py | 127 --- external_libs/python/dpkt-1.8.6.2/dpkt/icmp6.py | 77 -- .../python/dpkt-1.8.6.2/dpkt/ieee80211.py | 875 --------------------- external_libs/python/dpkt-1.8.6.2/dpkt/igmp.py | 19 - external_libs/python/dpkt-1.8.6.2/dpkt/ip.py | 359 --------- external_libs/python/dpkt-1.8.6.2/dpkt/ip6.py | 383 --------- external_libs/python/dpkt-1.8.6.2/dpkt/ipx.py | 18 - external_libs/python/dpkt-1.8.6.2/dpkt/llc.py | 56 -- external_libs/python/dpkt-1.8.6.2/dpkt/loopback.py | 25 - external_libs/python/dpkt-1.8.6.2/dpkt/mrt.py | 96 --- external_libs/python/dpkt-1.8.6.2/dpkt/netbios.py | 166 ---- external_libs/python/dpkt-1.8.6.2/dpkt/netflow.py | 219 ------ external_libs/python/dpkt-1.8.6.2/dpkt/ntp.py | 113 --- external_libs/python/dpkt-1.8.6.2/dpkt/ospf.py | 27 - external_libs/python/dpkt-1.8.6.2/dpkt/pcap.py | 172 ---- external_libs/python/dpkt-1.8.6.2/dpkt/pim.py | 46 -- external_libs/python/dpkt-1.8.6.2/dpkt/pmap.py | 18 - external_libs/python/dpkt-1.8.6.2/dpkt/ppp.py | 66 -- external_libs/python/dpkt-1.8.6.2/dpkt/pppoe.py | 61 -- external_libs/python/dpkt-1.8.6.2/dpkt/qq.py | 224 ------ external_libs/python/dpkt-1.8.6.2/dpkt/radiotap.py | 532 ------------- external_libs/python/dpkt-1.8.6.2/dpkt/radius.py | 91 --- external_libs/python/dpkt-1.8.6.2/dpkt/rfb.py | 90 --- external_libs/python/dpkt-1.8.6.2/dpkt/rip.py | 89 --- external_libs/python/dpkt-1.8.6.2/dpkt/rpc.py | 161 ---- external_libs/python/dpkt-1.8.6.2/dpkt/rtp.py | 127 --- external_libs/python/dpkt-1.8.6.2/dpkt/rx.py | 45 -- external_libs/python/dpkt-1.8.6.2/dpkt/sccp.py | 214 ----- external_libs/python/dpkt-1.8.6.2/dpkt/sctp.py | 95 --- external_libs/python/dpkt-1.8.6.2/dpkt/sip.py | 33 - external_libs/python/dpkt-1.8.6.2/dpkt/sll.py | 26 - external_libs/python/dpkt-1.8.6.2/dpkt/smb.py | 20 - external_libs/python/dpkt-1.8.6.2/dpkt/snoop.py | 122 --- external_libs/python/dpkt-1.8.6.2/dpkt/ssl.py | 579 -------------- .../python/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py | 76 -- external_libs/python/dpkt-1.8.6.2/dpkt/stp.py | 22 - external_libs/python/dpkt-1.8.6.2/dpkt/stun.py | 47 -- external_libs/python/dpkt-1.8.6.2/dpkt/tcp.py | 152 ---- external_libs/python/dpkt-1.8.6.2/dpkt/telnet.py | 80 -- external_libs/python/dpkt-1.8.6.2/dpkt/tftp.py | 56 -- external_libs/python/dpkt-1.8.6.2/dpkt/tns.py | 26 - external_libs/python/dpkt-1.8.6.2/dpkt/tpkt.py | 16 - external_libs/python/dpkt-1.8.6.2/dpkt/udp.py | 17 - external_libs/python/dpkt-1.8.6.2/dpkt/vrrp.py | 70 -- external_libs/python/dpkt-1.8.6.2/dpkt/yahoo.py | 30 - external_libs/python/dpkt-1.8.6.2/setup.cfg | 20 - external_libs/python/dpkt-1.8.6.2/setup.py | 67 -- scripts/external_libs/dpkt-1.8.6.2/AUTHORS | 60 ++ scripts/external_libs/dpkt-1.8.6.2/CHANGES | 71 ++ scripts/external_libs/dpkt-1.8.6.2/LICENSE | 28 + scripts/external_libs/dpkt-1.8.6.2/MANIFEST.in | 7 + scripts/external_libs/dpkt-1.8.6.2/PKG-INFO | 82 ++ scripts/external_libs/dpkt-1.8.6.2/README.md | 39 + scripts/external_libs/dpkt-1.8.6.2/README.rst | 64 ++ scripts/external_libs/dpkt-1.8.6.2/docs/Makefile | 153 ++++ .../dpkt-1.8.6.2/docs/api/api_auto.rst | 545 +++++++++++++ .../external_libs/dpkt-1.8.6.2/docs/api/index.rst | 11 + .../external_libs/dpkt-1.8.6.2/docs/authors.rst | 7 + scripts/external_libs/dpkt-1.8.6.2/docs/badges.rst | 41 + .../external_libs/dpkt-1.8.6.2/docs/changelog.rst | 4 + scripts/external_libs/dpkt-1.8.6.2/docs/conf.py | 76 ++ .../dpkt-1.8.6.2/docs/contributing.rst | 45 ++ .../external_libs/dpkt-1.8.6.2/docs/examples.rst | 80 ++ scripts/external_libs/dpkt-1.8.6.2/docs/index.rst | 32 + .../dpkt-1.8.6.2/docs/installation.rst | 21 + .../external_libs/dpkt-1.8.6.2/docs/license.rst | 4 + scripts/external_libs/dpkt-1.8.6.2/docs/plans.rst | 13 + .../dpkt-1.8.6.2/docs/requirements.txt | 3 + .../dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO | 82 ++ .../dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt | 96 +++ .../dpkt.egg-info/dependency_links.txt | 1 + .../dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe | 1 + .../dpkt-1.8.6.2/dpkt.egg-info/top_level.txt | 1 + .../external_libs/dpkt-1.8.6.2/dpkt/__init__.py | 71 ++ scripts/external_libs/dpkt-1.8.6.2/dpkt/ah.py | 35 + scripts/external_libs/dpkt-1.8.6.2/dpkt/aim.py | 52 ++ scripts/external_libs/dpkt-1.8.6.2/dpkt/aoe.py | 90 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/aoeata.py | 35 + scripts/external_libs/dpkt-1.8.6.2/dpkt/aoecfg.py | 25 + scripts/external_libs/dpkt-1.8.6.2/dpkt/arp.py | 32 + scripts/external_libs/dpkt-1.8.6.2/dpkt/asn1.py | 121 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/bgp.py | 789 +++++++++++++++++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/cdp.py | 99 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/crc32c.py | 83 ++ .../external_libs/dpkt-1.8.6.2/dpkt/decorators.py | 91 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/dhcp.py | 169 ++++ .../external_libs/dpkt-1.8.6.2/dpkt/diameter.py | 243 ++++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/dns.py | 462 +++++++++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/dpkt.py | 176 +++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/dtp.py | 26 + scripts/external_libs/dpkt-1.8.6.2/dpkt/esp.py | 12 + .../external_libs/dpkt-1.8.6.2/dpkt/ethernet.py | 145 ++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/gre.py | 127 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/gzip.py | 123 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/h225.py | 213 +++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/hsrp.py | 33 + scripts/external_libs/dpkt-1.8.6.2/dpkt/http.py | 259 ++++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/icmp.py | 127 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/icmp6.py | 77 ++ .../external_libs/dpkt-1.8.6.2/dpkt/ieee80211.py | 875 +++++++++++++++++++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/igmp.py | 19 + scripts/external_libs/dpkt-1.8.6.2/dpkt/ip.py | 359 +++++++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/ip6.py | 383 +++++++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/ipx.py | 18 + scripts/external_libs/dpkt-1.8.6.2/dpkt/llc.py | 56 ++ .../external_libs/dpkt-1.8.6.2/dpkt/loopback.py | 25 + scripts/external_libs/dpkt-1.8.6.2/dpkt/mrt.py | 96 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/netbios.py | 166 ++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/netflow.py | 219 ++++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/ntp.py | 113 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/ospf.py | 27 + scripts/external_libs/dpkt-1.8.6.2/dpkt/pcap.py | 172 ++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/pim.py | 46 ++ scripts/external_libs/dpkt-1.8.6.2/dpkt/pmap.py | 18 + scripts/external_libs/dpkt-1.8.6.2/dpkt/ppp.py | 66 ++ scripts/external_libs/dpkt-1.8.6.2/dpkt/pppoe.py | 61 ++ scripts/external_libs/dpkt-1.8.6.2/dpkt/qq.py | 224 ++++++ .../external_libs/dpkt-1.8.6.2/dpkt/radiotap.py | 532 +++++++++++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/radius.py | 91 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/rfb.py | 90 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/rip.py | 89 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/rpc.py | 161 ++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/rtp.py | 127 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/rx.py | 45 ++ scripts/external_libs/dpkt-1.8.6.2/dpkt/sccp.py | 214 +++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/sctp.py | 95 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/sip.py | 33 + scripts/external_libs/dpkt-1.8.6.2/dpkt/sll.py | 26 + scripts/external_libs/dpkt-1.8.6.2/dpkt/smb.py | 20 + scripts/external_libs/dpkt-1.8.6.2/dpkt/snoop.py | 122 +++ scripts/external_libs/dpkt-1.8.6.2/dpkt/ssl.py | 579 ++++++++++++++ .../dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py | 76 ++ scripts/external_libs/dpkt-1.8.6.2/dpkt/stp.py | 22 + scripts/external_libs/dpkt-1.8.6.2/dpkt/stun.py | 47 ++ scripts/external_libs/dpkt-1.8.6.2/dpkt/tcp.py | 152 ++++ scripts/external_libs/dpkt-1.8.6.2/dpkt/telnet.py | 80 ++ scripts/external_libs/dpkt-1.8.6.2/dpkt/tftp.py | 56 ++ scripts/external_libs/dpkt-1.8.6.2/dpkt/tns.py | 26 + scripts/external_libs/dpkt-1.8.6.2/dpkt/tpkt.py | 16 + scripts/external_libs/dpkt-1.8.6.2/dpkt/udp.py | 17 + scripts/external_libs/dpkt-1.8.6.2/dpkt/vrrp.py | 70 ++ scripts/external_libs/dpkt-1.8.6.2/dpkt/yahoo.py | 30 + scripts/external_libs/dpkt-1.8.6.2/setup.cfg | 20 + scripts/external_libs/dpkt-1.8.6.2/setup.py | 67 ++ scripts/external_libs/dpkt-1.8.6/AUTHORS | 60 ++ scripts/external_libs/dpkt-1.8.6/CHANGES | 71 ++ scripts/external_libs/dpkt-1.8.6/LICENSE | 28 + scripts/external_libs/dpkt-1.8.6/MANIFEST.in | 2 + scripts/external_libs/dpkt-1.8.6/PKG-INFO | 122 +++ scripts/external_libs/dpkt-1.8.6/README.rst | 104 +++ .../dpkt-1.8.6/dpkt.egg-info/PKG-INFO | 122 +++ .../dpkt-1.8.6/dpkt.egg-info/SOURCES.txt | 80 ++ .../dpkt-1.8.6/dpkt.egg-info/dependency_links.txt | 1 + .../dpkt-1.8.6/dpkt.egg-info/not-zip-safe | 1 + .../dpkt-1.8.6/dpkt.egg-info/top_level.txt | 1 + scripts/external_libs/dpkt-1.8.6/dpkt/__init__.py | 70 ++ scripts/external_libs/dpkt-1.8.6/dpkt/ah.py | 31 + scripts/external_libs/dpkt-1.8.6/dpkt/aim.py | 47 ++ scripts/external_libs/dpkt-1.8.6/dpkt/aoe.py | 70 ++ scripts/external_libs/dpkt-1.8.6/dpkt/aoeata.py | 34 + scripts/external_libs/dpkt-1.8.6/dpkt/aoecfg.py | 24 + scripts/external_libs/dpkt-1.8.6/dpkt/arp.py | 31 + scripts/external_libs/dpkt-1.8.6/dpkt/asn1.py | 119 +++ scripts/external_libs/dpkt-1.8.6/dpkt/bgp.py | 760 ++++++++++++++++++ scripts/external_libs/dpkt-1.8.6/dpkt/cdp.py | 95 +++ scripts/external_libs/dpkt-1.8.6/dpkt/crc32c.py | 80 ++ scripts/external_libs/dpkt-1.8.6/dpkt/dhcp.py | 168 ++++ scripts/external_libs/dpkt-1.8.6/dpkt/diameter.py | 181 +++++ scripts/external_libs/dpkt-1.8.6/dpkt/dns.py | 342 ++++++++ scripts/external_libs/dpkt-1.8.6/dpkt/dpkt.py | 168 ++++ scripts/external_libs/dpkt-1.8.6/dpkt/dtp.py | 23 + scripts/external_libs/dpkt-1.8.6/dpkt/esp.py | 11 + scripts/external_libs/dpkt-1.8.6/dpkt/ethernet.py | 140 ++++ scripts/external_libs/dpkt-1.8.6/dpkt/gre.py | 103 +++ scripts/external_libs/dpkt-1.8.6/dpkt/gzip.py | 117 +++ scripts/external_libs/dpkt-1.8.6/dpkt/h225.py | 217 +++++ scripts/external_libs/dpkt-1.8.6/dpkt/hsrp.py | 32 + scripts/external_libs/dpkt-1.8.6/dpkt/http.py | 237 ++++++ scripts/external_libs/dpkt-1.8.6/dpkt/icmp.py | 122 +++ scripts/external_libs/dpkt-1.8.6/dpkt/icmp6.py | 72 ++ scripts/external_libs/dpkt-1.8.6/dpkt/ieee80211.py | 706 +++++++++++++++++ scripts/external_libs/dpkt-1.8.6/dpkt/igmp.py | 17 + scripts/external_libs/dpkt-1.8.6/dpkt/ip.py | 301 +++++++ scripts/external_libs/dpkt-1.8.6/dpkt/ip6.py | 307 ++++++++ scripts/external_libs/dpkt-1.8.6/dpkt/ipx.py | 17 + scripts/external_libs/dpkt-1.8.6/dpkt/llc.py | 55 ++ scripts/external_libs/dpkt-1.8.6/dpkt/loopback.py | 20 + scripts/external_libs/dpkt-1.8.6/dpkt/mrt.py | 92 +++ scripts/external_libs/dpkt-1.8.6/dpkt/netbios.py | 154 ++++ scripts/external_libs/dpkt-1.8.6/dpkt/netflow.py | 214 +++++ scripts/external_libs/dpkt-1.8.6/dpkt/ntp.py | 83 ++ scripts/external_libs/dpkt-1.8.6/dpkt/ospf.py | 25 + scripts/external_libs/dpkt-1.8.6/dpkt/pcap.py | 164 ++++ scripts/external_libs/dpkt-1.8.6/dpkt/pim.py | 24 + scripts/external_libs/dpkt-1.8.6/dpkt/pmap.py | 17 + scripts/external_libs/dpkt-1.8.6/dpkt/ppp.py | 63 ++ scripts/external_libs/dpkt-1.8.6/dpkt/pppoe.py | 38 + scripts/external_libs/dpkt-1.8.6/dpkt/qq.py | 224 ++++++ scripts/external_libs/dpkt-1.8.6/dpkt/radiotap.py | 292 +++++++ scripts/external_libs/dpkt-1.8.6/dpkt/radius.py | 88 +++ scripts/external_libs/dpkt-1.8.6/dpkt/rfb.py | 81 ++ scripts/external_libs/dpkt-1.8.6/dpkt/rip.py | 84 ++ scripts/external_libs/dpkt-1.8.6/dpkt/rpc.py | 146 ++++ scripts/external_libs/dpkt-1.8.6/dpkt/rtp.py | 70 ++ scripts/external_libs/dpkt-1.8.6/dpkt/rx.py | 44 ++ scripts/external_libs/dpkt-1.8.6/dpkt/sccp.py | 196 +++++ scripts/external_libs/dpkt-1.8.6/dpkt/sctp.py | 90 +++ scripts/external_libs/dpkt-1.8.6/dpkt/sip.py | 32 + scripts/external_libs/dpkt-1.8.6/dpkt/sll.py | 23 + scripts/external_libs/dpkt-1.8.6/dpkt/smb.py | 19 + scripts/external_libs/dpkt-1.8.6/dpkt/snoop.py | 118 +++ scripts/external_libs/dpkt-1.8.6/dpkt/ssl.py | 560 +++++++++++++ .../dpkt-1.8.6/dpkt/ssl_ciphersuites.py | 76 ++ scripts/external_libs/dpkt-1.8.6/dpkt/stp.py | 21 + scripts/external_libs/dpkt-1.8.6/dpkt/stun.py | 45 ++ scripts/external_libs/dpkt-1.8.6/dpkt/tcp.py | 98 +++ scripts/external_libs/dpkt-1.8.6/dpkt/telnet.py | 77 ++ scripts/external_libs/dpkt-1.8.6/dpkt/tftp.py | 55 ++ scripts/external_libs/dpkt-1.8.6/dpkt/tns.py | 24 + scripts/external_libs/dpkt-1.8.6/dpkt/tpkt.py | 15 + scripts/external_libs/dpkt-1.8.6/dpkt/udp.py | 15 + scripts/external_libs/dpkt-1.8.6/dpkt/vrrp.py | 48 ++ scripts/external_libs/dpkt-1.8.6/dpkt/yahoo.py | 29 + scripts/external_libs/dpkt-1.8.6/setup.cfg | 20 + scripts/external_libs/dpkt-1.8.6/setup.py | 40 + 275 files changed, 19941 insertions(+), 11128 deletions(-) delete mode 100644 external_libs/python/dpkt-1.8.6.2/AUTHORS delete mode 100644 external_libs/python/dpkt-1.8.6.2/CHANGES delete mode 100644 external_libs/python/dpkt-1.8.6.2/LICENSE delete mode 100644 external_libs/python/dpkt-1.8.6.2/MANIFEST.in delete mode 100644 external_libs/python/dpkt-1.8.6.2/PKG-INFO delete mode 100644 external_libs/python/dpkt-1.8.6.2/README.md delete mode 100644 external_libs/python/dpkt-1.8.6.2/README.rst delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/Makefile delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/api/api_auto.rst delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/api/index.rst delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/authors.rst delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/badges.rst delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/changelog.rst delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/conf.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/contributing.rst delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/examples.rst delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/index.rst delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/installation.rst delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/license.rst delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/plans.rst delete mode 100644 external_libs/python/dpkt-1.8.6.2/docs/requirements.txt delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/__init__.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ah.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/aim.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/aoe.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/aoeata.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/aoecfg.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/arp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/asn1.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/bgp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/cdp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/crc32c.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/decorators.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/dhcp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/diameter.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/dns.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/dpkt.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/dtp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/esp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ethernet.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/gre.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/gzip.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/h225.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/hsrp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/http.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/icmp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/icmp6.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ieee80211.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/igmp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ip.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ip6.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ipx.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/llc.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/loopback.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/mrt.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/netbios.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/netflow.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ntp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ospf.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/pcap.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/pim.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/pmap.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ppp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/pppoe.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/qq.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/radiotap.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/radius.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/rfb.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/rip.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/rpc.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/rtp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/rx.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/sccp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/sctp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/sip.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/sll.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/smb.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/snoop.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ssl.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/stp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/stun.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/tcp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/telnet.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/tftp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/tns.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/tpkt.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/udp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/vrrp.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/dpkt/yahoo.py delete mode 100644 external_libs/python/dpkt-1.8.6.2/setup.cfg delete mode 100644 external_libs/python/dpkt-1.8.6.2/setup.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/AUTHORS create mode 100644 scripts/external_libs/dpkt-1.8.6.2/CHANGES create mode 100644 scripts/external_libs/dpkt-1.8.6.2/LICENSE create mode 100644 scripts/external_libs/dpkt-1.8.6.2/MANIFEST.in create mode 100644 scripts/external_libs/dpkt-1.8.6.2/PKG-INFO create mode 100644 scripts/external_libs/dpkt-1.8.6.2/README.md create mode 100644 scripts/external_libs/dpkt-1.8.6.2/README.rst create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/Makefile create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/api/api_auto.rst create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/api/index.rst create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/authors.rst create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/badges.rst create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/changelog.rst create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/conf.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/contributing.rst create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/examples.rst create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/index.rst create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/installation.rst create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/license.rst create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/plans.rst create mode 100644 scripts/external_libs/dpkt-1.8.6.2/docs/requirements.txt create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/__init__.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/ah.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/aim.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/aoe.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/aoeata.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/aoecfg.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/arp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/asn1.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/bgp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/cdp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/crc32c.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/decorators.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/dhcp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/diameter.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/dns.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/dpkt.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/dtp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/esp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/ethernet.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/gre.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/gzip.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/h225.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/hsrp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/http.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/icmp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/icmp6.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/ieee80211.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/igmp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/ip.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/ip6.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/ipx.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/llc.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/loopback.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/mrt.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/netbios.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/netflow.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/ntp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/ospf.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/pcap.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/pim.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/pmap.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/ppp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/pppoe.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/qq.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/radiotap.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/radius.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/rfb.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/rip.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/rpc.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/rtp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/rx.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/sccp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/sctp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/sip.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/sll.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/smb.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/snoop.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/ssl.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/stp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/stun.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/tcp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/telnet.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/tftp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/tns.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/tpkt.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/udp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/vrrp.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/dpkt/yahoo.py create mode 100644 scripts/external_libs/dpkt-1.8.6.2/setup.cfg create mode 100644 scripts/external_libs/dpkt-1.8.6.2/setup.py create mode 100644 scripts/external_libs/dpkt-1.8.6/AUTHORS create mode 100644 scripts/external_libs/dpkt-1.8.6/CHANGES create mode 100644 scripts/external_libs/dpkt-1.8.6/LICENSE create mode 100644 scripts/external_libs/dpkt-1.8.6/MANIFEST.in create mode 100644 scripts/external_libs/dpkt-1.8.6/PKG-INFO create mode 100644 scripts/external_libs/dpkt-1.8.6/README.rst create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/PKG-INFO create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/SOURCES.txt create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/dependency_links.txt create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/not-zip-safe create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/top_level.txt create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/__init__.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/ah.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/aim.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/aoe.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/aoeata.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/aoecfg.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/arp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/asn1.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/bgp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/cdp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/crc32c.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/dhcp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/diameter.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/dns.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/dpkt.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/dtp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/esp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/ethernet.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/gre.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/gzip.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/h225.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/hsrp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/http.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/icmp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/icmp6.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/ieee80211.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/igmp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/ip.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/ip6.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/ipx.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/llc.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/loopback.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/mrt.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/netbios.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/netflow.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/ntp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/ospf.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/pcap.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/pim.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/pmap.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/ppp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/pppoe.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/qq.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/radiotap.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/radius.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/rfb.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/rip.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/rpc.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/rtp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/rx.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/sccp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/sctp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/sip.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/sll.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/smb.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/snoop.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/ssl.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/ssl_ciphersuites.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/stp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/stun.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/tcp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/telnet.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/tftp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/tns.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/tpkt.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/udp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/vrrp.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/yahoo.py create mode 100644 scripts/external_libs/dpkt-1.8.6/setup.cfg create mode 100644 scripts/external_libs/dpkt-1.8.6/setup.py diff --git a/external_libs/python/dpkt-1.8.6.2/AUTHORS b/external_libs/python/dpkt-1.8.6.2/AUTHORS deleted file mode 100644 index dcefbef9..00000000 --- a/external_libs/python/dpkt-1.8.6.2/AUTHORS +++ /dev/null @@ -1,60 +0,0 @@ - -Original author ---------------- - -Dug Song - - -Contributors ------------- - -Timur Alperovich - radiotap module - -Nic Bellamy - HTTP header parsing fix - -the grugq - better RTP module - -David Helder - bug fixes - -Przemyslaw Karwasiecki - TABLE_DUMP in MRT module - -Reza Lotun - MetaPacket cleanup - -Jeff Nathan - bug fixes - -Tim Newsham - IPv6 bugfixing and improvements - -keisuke.nishimoto@gmail.com - Snoop file parser - -Jon Oberheide - STUN, H.225, TPKT, NTP, RIP, Diameter, SCTP, BGP, MRT, RX modules - -plotnikoff@gmail.com - handle dynamic imports from py2exe/freeze.py/zipped egg packages - -simdream@gmail.com - handle multiple cookie values in HTTP - -Owen Stephens - IP6 extension header support - -Robert Stone - Netflow and QQ modules - -Thomas Taranowski - dnet IP checksum bug on i386 - -Jirka Vejrazka - bug fixes - -Tim Yardley - DHCP definitions diff --git a/external_libs/python/dpkt-1.8.6.2/CHANGES b/external_libs/python/dpkt-1.8.6.2/CHANGES deleted file mode 100644 index a5f05121..00000000 --- a/external_libs/python/dpkt-1.8.6.2/CHANGES +++ /dev/null @@ -1,71 +0,0 @@ -dpkg-1.8: - - fix a typo in vrrp.py - - fix IPv4 and IPv6 packet to correctly handle zero payload length - - store cipher_suite as int in TLSServerHello to allow app-specific messages - - improve SSL parsing - -dpkt-1.7: - - handle dynamic imports from py2exe/freeze.py/zipped egg - packages, from plotnikoff - - decode Ethernet MPLS labels, Cisco ISL VLAN tags, 802.2 LLC fields - - handle multiply-defined HTTP headers from simdream - - add IPv6 extension header support (minus ESP) from Owen Stephens - - add radiotap module from Timur Alperovich - - add IEEE80211 module from Jon Oberheide - - add RFB module from Jon Oberheide - - fix IP6 checksum to include options - - rename 'as' to 'asn' field in BGP header - - fix transport-layer checksum in IP6 - - handle improper TCP header offset - - fix SSL typo - - handle malformed ICMP headers - - added RX module from Jon Oberheide - - fixed loopback module IP/IP6 decoding - - set transport-layer (TCP, UDP) checksum in IP - - MRT module fixes - - fix pcap.Writer timestamp calculation - -dpkt-1.6: - - DNS RR packing fixed - - added STUN, H.225, TPKT, NTP, RIP, Diameter, SCTP, - BGP, and MRT modules from Jon Oberheide - - new dpkt.NeedData exception - -dpkt-1.5: - - IP6 checksum fix - - __getitem__() interface to Packet (e.g. ip['src'] == ip.src) - - faster Ethernet, IP, PPP module loading - - support any endianness capture file in pcap module, - and export a pypcap-compatible Reader - - additional CDP definitions - - replaced rtp module with the grugq's version - - added QQ module from Robert Stone - - added gzip module - - added PPPoE module - - added RADIUS module - -dpkt-1.4: - - fix IP checksum bug on i386, caught by Thomas Taranowski - -dpkt-1.3: - - autoload IP, Ethernet dispatch tables - - IP6 bugfixes from Tim Newsham - - additional DHCP definitions from Tim Yardley - - HTTP bugfixes and abstraction (see SIP) - - RPC bugfixes - - added pypcap-compatible PcapReader - - added Linux libpcap "cooked" capture module - - added preliminary SSL module - - added SIP module - - added SCCP module - - added RTP module - - added Portmap module - -dpkt-1.2: - - changed license from GPL to BSD - - added DTP module - - added HTTP module - - added DNS RR decodes - - added enough PPP to decode PPTP GRE encapsulation - -# $Id: CHANGES 379 2006-07-27 05:23:19Z dugsong $ diff --git a/external_libs/python/dpkt-1.8.6.2/LICENSE b/external_libs/python/dpkt-1.8.6.2/LICENSE deleted file mode 100644 index 99d14371..00000000 --- a/external_libs/python/dpkt-1.8.6.2/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ - - Copyright (c) 2004 Dug Song - All rights reserved, all wrongs reversed. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. The names of the authors and copyright holders may not be used to - endorse or promote products derived from this software without - specific prior written permission. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/external_libs/python/dpkt-1.8.6.2/MANIFEST.in b/external_libs/python/dpkt-1.8.6.2/MANIFEST.in deleted file mode 100644 index 2d5c155a..00000000 --- a/external_libs/python/dpkt-1.8.6.2/MANIFEST.in +++ /dev/null @@ -1,7 +0,0 @@ - -include AUTHORS CHANGES README.rst LICENSE - -recursive-include docs * -prune docs/_build - -global-exclude __pycache__/* diff --git a/external_libs/python/dpkt-1.8.6.2/PKG-INFO b/external_libs/python/dpkt-1.8.6.2/PKG-INFO deleted file mode 100644 index baf82a26..00000000 --- a/external_libs/python/dpkt-1.8.6.2/PKG-INFO +++ /dev/null @@ -1,82 +0,0 @@ -Metadata-Version: 1.1 -Name: dpkt -Version: 1.8.6.2 -Summary: fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols -Home-page: http://dpkt.googlecode.com/ -Author: Dug Song -Author-email: dugsong@monkey.org -License: BSD -Description: - ==== - dpkt - ==== - - | |travis| |coveralls| |landscape| |downloads| - | |version| |wheel| |supported-versions| |supported-implementations| - - .. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg - :alt: Travis-CI Build Status - :target: https://travis-ci.org/kbandla/dpkt - - .. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg - :alt: Coverage Status - :target: https://coveralls.io/r/kbandla/dpkt - - .. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg - :target: https://landscape.io/github/kbandla/dpkt/master - :alt: Code Quality Status - - .. |version| image:: http://img.shields.io/pypi/v/dpkt.svg - :alt: PyPI Package latest release - :target: https://pypi.python.org/pypi/dpkt - - .. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg - :alt: PyPI Package monthly downloads - :target: https://pypi.python.org/pypi/dpkt - - .. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg - :alt: PyPI Wheel - :target: https://pypi.python.org/pypi/dpkt - - .. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg - :alt: Supported versions - :target: https://pypi.python.org/pypi/dpkt - - .. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg - :alt: Supported implementations - :target: https://pypi.python.org/pypi/dpkt - - Installation - ============ - - :: - - pip install dpkt - - Documentation - ============= - - https://dpkt.readthedocs.org/ - - About - ===== - - This code is based on `dpkt code `__ lead by Dug Song and - is now being maintained and improved by an extended set of - `contributors `__ - and `developers `__. - - LICENSE - ------- - - BSD 3-Clause - -Platform: UNKNOWN -Classifier: Development Status :: 4 - Beta -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: BSD License -Classifier: Natural Language :: English -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy diff --git a/external_libs/python/dpkt-1.8.6.2/README.md b/external_libs/python/dpkt-1.8.6.2/README.md deleted file mode 100644 index fc637836..00000000 --- a/external_libs/python/dpkt-1.8.6.2/README.md +++ /dev/null @@ -1,39 +0,0 @@ -dpkt -==== - -**A fast, simple packet creation/parsing python module with definitions for the basic TCP/IP protocols.** - -[![travis](http://img.shields.io/travis/kbandla/dpkt.svg)](https://travis-ci.org/kbandla/dpkt) -[![coveralls](http://img.shields.io/coveralls/kbandla/dpkt.svg)](https://coveralls.io/r/kbandla/dpkt) -[![landscape](https://landscape.io/github/kbandla/dpkt/master/landscape.svg)](https://landscape.io/github/kbandla/dpkt/master) -[![version](http://img.shields.io/pypi/v/dpkt.svg)](https://pypi.python.org/pypi/dpkt) -[![downloads](https://img.shields.io/pypi/dm/dpkt.svg)](https://pypi.python.org/pypi/dpkt) - -[![wheel](https://img.shields.io/pypi/wheel/dpkt.svg)](https://pypi.python.org/pypi/dpkt) -[![supported-versions](https://img.shields.io/pypi/pyversions/dpkt.svg)](https://pypi.python.org/pypi/dpkt) -[![supported-implementations](https://img.shields.io/pypi/implementation/dpkt.svg)](https://pypi.python.org/pypi/dpkt) -[![On Deck](https://badge.waffle.io/kbandla/dpkt.svg?label=on%20deck&title=On%20Deck)](http://waffle.io/kbandla/dpkt) -[![In Progress](https://badge.waffle.io/kbandla/dpkt.svg?label=in%20progress&title=In%20Progress)](http://waffle.io/kbandla/dpkt) - -Installation ------------- - - pip install dpkt - -Documentation -------------- - -**[dpkt.readthedocs.org](https://dpkt.readthedocs.org/)** - - -About ------ - -This code is based on [dpkt code](https://code.google.com/p/dpkt/) lead -by Dug Song and is now being maintained and improved by an extended set of [contributors](https://dpkt.readthedocs.org/en/latest/authors.html) - and [developers](https://github.com/kbandla/dpkt/graphs/contributors). - - -#### LICENSE - -BSD 3-Clause \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/README.rst b/external_libs/python/dpkt-1.8.6.2/README.rst deleted file mode 100644 index b4e1b966..00000000 --- a/external_libs/python/dpkt-1.8.6.2/README.rst +++ /dev/null @@ -1,64 +0,0 @@ - -==== -dpkt -==== - -| |travis| |coveralls| |landscape| |downloads| -| |version| |wheel| |supported-versions| |supported-implementations| - -.. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg - :alt: Travis-CI Build Status - :target: https://travis-ci.org/kbandla/dpkt - -.. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg - :alt: Coverage Status - :target: https://coveralls.io/r/kbandla/dpkt - -.. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg - :target: https://landscape.io/github/kbandla/dpkt/master - :alt: Code Quality Status - -.. |version| image:: http://img.shields.io/pypi/v/dpkt.svg - :alt: PyPI Package latest release - :target: https://pypi.python.org/pypi/dpkt - -.. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg - :alt: PyPI Package monthly downloads - :target: https://pypi.python.org/pypi/dpkt - -.. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg - :alt: PyPI Wheel - :target: https://pypi.python.org/pypi/dpkt - -.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg - :alt: Supported versions - :target: https://pypi.python.org/pypi/dpkt - -.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg - :alt: Supported implementations - :target: https://pypi.python.org/pypi/dpkt - -Installation -============ - -:: - - pip install dpkt - -Documentation -============= - -https://dpkt.readthedocs.org/ - -About -===== - -This code is based on `dpkt code `__ lead by Dug Song and -is now being maintained and improved by an extended set of -`contributors `__ -and `developers `__. - -LICENSE -------- - -BSD 3-Clause diff --git a/external_libs/python/dpkt-1.8.6.2/docs/Makefile b/external_libs/python/dpkt-1.8.6.2/docs/Makefile deleted file mode 100644 index 2687c750..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/Makefile +++ /dev/null @@ -1,153 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/pyspotify.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/pyspotify.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/pyspotify" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/pyspotify" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." diff --git a/external_libs/python/dpkt-1.8.6.2/docs/api/api_auto.rst b/external_libs/python/dpkt-1.8.6.2/docs/api/api_auto.rst deleted file mode 100644 index 3837c903..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/api/api_auto.rst +++ /dev/null @@ -1,545 +0,0 @@ - -dpkt.ah module --------------- - -.. automodule:: dpkt.ah - :members: - :undoc-members: - :show-inheritance: - -dpkt.aim module ---------------- - -.. automodule:: dpkt.aim - :members: - :undoc-members: - :show-inheritance: - -dpkt.aoe module ---------------- - -.. automodule:: dpkt.aoe - :members: - :undoc-members: - :show-inheritance: - -dpkt.aoeata module ------------------- - -.. automodule:: dpkt.aoeata - :members: - :undoc-members: - :show-inheritance: - -dpkt.aoecfg module ------------------- - -.. automodule:: dpkt.aoecfg - :members: - :undoc-members: - :show-inheritance: - -dpkt.arp module ---------------- - -.. automodule:: dpkt.arp - :members: - :undoc-members: - :show-inheritance: - -dpkt.asn1 module ----------------- - -.. automodule:: dpkt.asn1 - :members: - :undoc-members: - :show-inheritance: - -dpkt.bgp module ---------------- - -.. automodule:: dpkt.bgp - :members: - :undoc-members: - :show-inheritance: - -dpkt.cdp module ---------------- - -.. automodule:: dpkt.cdp - :members: - :undoc-members: - :show-inheritance: - -dpkt.crc32c module ------------------- - -.. automodule:: dpkt.crc32c - :members: - :undoc-members: - :show-inheritance: - -dpkt.decorators module ----------------------- - -.. automodule:: dpkt.decorators - :members: - :undoc-members: - :show-inheritance: - -dpkt.dhcp module ----------------- - -.. automodule:: dpkt.dhcp - :members: - :undoc-members: - :show-inheritance: - -dpkt.diameter module --------------------- - -.. automodule:: dpkt.diameter - :members: - :undoc-members: - :show-inheritance: - -dpkt.dns module ---------------- - -.. automodule:: dpkt.dns - :members: - :undoc-members: - :show-inheritance: - -dpkt.dpkt module ----------------- - -.. automodule:: dpkt.dpkt - :members: - :undoc-members: - :show-inheritance: - -dpkt.dtp module ---------------- - -.. automodule:: dpkt.dtp - :members: - :undoc-members: - :show-inheritance: - -dpkt.esp module ---------------- - -.. automodule:: dpkt.esp - :members: - :undoc-members: - :show-inheritance: - -dpkt.ethernet module --------------------- - -.. automodule:: dpkt.ethernet - :members: - :undoc-members: - :show-inheritance: - -dpkt.gre module ---------------- - -.. automodule:: dpkt.gre - :members: - :undoc-members: - :show-inheritance: - -dpkt.gzip module ----------------- - -.. automodule:: dpkt.gzip - :members: - :undoc-members: - :show-inheritance: - -dpkt.h225 module ----------------- - -.. automodule:: dpkt.h225 - :members: - :undoc-members: - :show-inheritance: - -dpkt.hsrp module ----------------- - -.. automodule:: dpkt.hsrp - :members: - :undoc-members: - :show-inheritance: - -dpkt.http module ----------------- - -.. automodule:: dpkt.http - :members: - :undoc-members: - :show-inheritance: - -dpkt.icmp module ----------------- - -.. automodule:: dpkt.icmp - :members: - :undoc-members: - :show-inheritance: - -dpkt.icmp6 module ------------------ - -.. automodule:: dpkt.icmp6 - :members: - :undoc-members: - :show-inheritance: - -dpkt.ieee80211 module ---------------------- - -.. automodule:: dpkt.ieee80211 - :members: - :undoc-members: - :show-inheritance: - -dpkt.igmp module ----------------- - -.. automodule:: dpkt.igmp - :members: - :undoc-members: - :show-inheritance: - -dpkt.ip module --------------- - -.. automodule:: dpkt.ip - :members: - :undoc-members: - :show-inheritance: - -dpkt.ip6 module ---------------- - -.. automodule:: dpkt.ip6 - :members: - :undoc-members: - :show-inheritance: - -dpkt.ipx module ---------------- - -.. automodule:: dpkt.ipx - :members: - :undoc-members: - :show-inheritance: - -dpkt.llc module ---------------- - -.. automodule:: dpkt.llc - :members: - :undoc-members: - :show-inheritance: - -dpkt.loopback module --------------------- - -.. automodule:: dpkt.loopback - :members: - :undoc-members: - :show-inheritance: - -dpkt.mrt module ---------------- - -.. automodule:: dpkt.mrt - :members: - :undoc-members: - :show-inheritance: - -dpkt.netbios module -------------------- - -.. automodule:: dpkt.netbios - :members: - :undoc-members: - :show-inheritance: - -dpkt.netflow module -------------------- - -.. automodule:: dpkt.netflow - :members: - :undoc-members: - :show-inheritance: - -dpkt.ntp module ---------------- - -.. automodule:: dpkt.ntp - :members: - :undoc-members: - :show-inheritance: - -dpkt.ospf module ----------------- - -.. automodule:: dpkt.ospf - :members: - :undoc-members: - :show-inheritance: - -dpkt.pcap module ----------------- - -.. automodule:: dpkt.pcap - :members: - :undoc-members: - :show-inheritance: - -dpkt.pim module ---------------- - -.. automodule:: dpkt.pim - :members: - :undoc-members: - :show-inheritance: - -dpkt.pmap module ----------------- - -.. automodule:: dpkt.pmap - :members: - :undoc-members: - :show-inheritance: - -dpkt.ppp module ---------------- - -.. automodule:: dpkt.ppp - :members: - :undoc-members: - :show-inheritance: - -dpkt.pppoe module ------------------ - -.. automodule:: dpkt.pppoe - :members: - :undoc-members: - :show-inheritance: - -dpkt.qq module --------------- - -.. automodule:: dpkt.qq - :members: - :undoc-members: - :show-inheritance: - -dpkt.radiotap module --------------------- - -.. automodule:: dpkt.radiotap - :members: - :undoc-members: - :show-inheritance: - -dpkt.radius module ------------------- - -.. automodule:: dpkt.radius - :members: - :undoc-members: - :show-inheritance: - -dpkt.rfb module ---------------- - -.. automodule:: dpkt.rfb - :members: - :undoc-members: - :show-inheritance: - -dpkt.rip module ---------------- - -.. automodule:: dpkt.rip - :members: - :undoc-members: - :show-inheritance: - -dpkt.rpc module ---------------- - -.. automodule:: dpkt.rpc - :members: - :undoc-members: - :show-inheritance: - -dpkt.rtp module ---------------- - -.. automodule:: dpkt.rtp - :members: - :undoc-members: - :show-inheritance: - -dpkt.rx module --------------- - -.. automodule:: dpkt.rx - :members: - :undoc-members: - :show-inheritance: - -dpkt.sccp module ----------------- - -.. automodule:: dpkt.sccp - :members: - :undoc-members: - :show-inheritance: - -dpkt.sctp module ----------------- - -.. automodule:: dpkt.sctp - :members: - :undoc-members: - :show-inheritance: - -dpkt.sip module ---------------- - -.. automodule:: dpkt.sip - :members: - :undoc-members: - :show-inheritance: - -dpkt.sll module ---------------- - -.. automodule:: dpkt.sll - :members: - :undoc-members: - :show-inheritance: - -dpkt.smb module ---------------- - -.. automodule:: dpkt.smb - :members: - :undoc-members: - :show-inheritance: - -dpkt.snoop module ------------------ - -.. automodule:: dpkt.snoop - :members: - :undoc-members: - :show-inheritance: - -dpkt.ssl module ---------------- - -.. automodule:: dpkt.ssl - :members: - :undoc-members: - :show-inheritance: - -dpkt.ssl_ciphersuites module ----------------------------- - -.. automodule:: dpkt.ssl_ciphersuites - :members: - :undoc-members: - :show-inheritance: - -dpkt.stp module ---------------- - -.. automodule:: dpkt.stp - :members: - :undoc-members: - :show-inheritance: - -dpkt.stun module ----------------- - -.. automodule:: dpkt.stun - :members: - :undoc-members: - :show-inheritance: - -dpkt.tcp module ---------------- - -.. automodule:: dpkt.tcp - :members: - :undoc-members: - :show-inheritance: - -dpkt.telnet module ------------------- - -.. automodule:: dpkt.telnet - :members: - :undoc-members: - :show-inheritance: - -dpkt.tftp module ----------------- - -.. automodule:: dpkt.tftp - :members: - :undoc-members: - :show-inheritance: - -dpkt.tns module ---------------- - -.. automodule:: dpkt.tns - :members: - :undoc-members: - :show-inheritance: - -dpkt.tpkt module ----------------- - -.. automodule:: dpkt.tpkt - :members: - :undoc-members: - :show-inheritance: - -dpkt.udp module ---------------- - -.. automodule:: dpkt.udp - :members: - :undoc-members: - :show-inheritance: - -dpkt.vrrp module ----------------- - -.. automodule:: dpkt.vrrp - :members: - :undoc-members: - :show-inheritance: - -dpkt.yahoo module ------------------ - -.. automodule:: dpkt.yahoo - :members: - :undoc-members: - :show-inheritance: - diff --git a/external_libs/python/dpkt-1.8.6.2/docs/api/index.rst b/external_libs/python/dpkt-1.8.6.2/docs/api/index.rst deleted file mode 100644 index 7d44785d..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/api/index.rst +++ /dev/null @@ -1,11 +0,0 @@ - -API Reference -============= -The dpkt API reference section is currently a work in progress, please have patience as we fill in and improve the documentation. - -**dpkt Modules** - -.. toctree:: - :maxdepth: 4 - - api_auto diff --git a/external_libs/python/dpkt-1.8.6.2/docs/authors.rst b/external_libs/python/dpkt-1.8.6.2/docs/authors.rst deleted file mode 100644 index 238aa6bb..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/authors.rst +++ /dev/null @@ -1,7 +0,0 @@ -******* -Authors -******* - -.. include:: ../AUTHORS - -If you want to contribute to dpkt, see :doc:`contributing`. diff --git a/external_libs/python/dpkt-1.8.6.2/docs/badges.rst b/external_libs/python/dpkt-1.8.6.2/docs/badges.rst deleted file mode 100644 index 906f8b7f..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/badges.rst +++ /dev/null @@ -1,41 +0,0 @@ - - -| |docs| |travis| |coveralls| |landscape| |version| -| |downloads| |wheel| |supported-versions| |supported-implementations| - -.. |docs| image:: https://readthedocs.org/projects/dpkt/badge/?style=flat - :target: https://readthedocs.org/projects/dpkt - :alt: Documentation Status - -.. |travis| image:: http://img.shields.io/travis/kbandla/dpkt/master.png?style=flat - :alt: Travis-CI Build Status - :target: https://travis-ci.org/kbandla/dpkt - -.. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt/master.png?style=flat - :alt: Coverage Status - :target: https://coveralls.io/r/kbandla/dpkt - -.. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg?style=flat - :target: https://landscape.io/github/kbandla/dpkt/master - :alt: Code Quality Status - -.. |version| image:: http://img.shields.io/pypi/v/dpkt.svg - :alt: PyPI Package latest release - :target: https://pypi.python.org/pypi/dpkt - -.. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg - :alt: PyPI Package monthly downloads - :target: https://pypi.python.org/pypi/dpkt - -.. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg - :alt: PyPI Wheel - :target: https://pypi.python.org/pypi/dpkt - -.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg - :alt: Supported versions - :target: https://pypi.python.org/pypi/dpkt - -.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg - :alt: Supported implementations - :target: https://pypi.python.org/pypi/dpkt - diff --git a/external_libs/python/dpkt-1.8.6.2/docs/changelog.rst b/external_libs/python/dpkt-1.8.6.2/docs/changelog.rst deleted file mode 100644 index ac7e2371..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/changelog.rst +++ /dev/null @@ -1,4 +0,0 @@ -********* -Changelog -********* - diff --git a/external_libs/python/dpkt-1.8.6.2/docs/conf.py b/external_libs/python/dpkt-1.8.6.2/docs/conf.py deleted file mode 100644 index 6dfc9fc4..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/conf.py +++ /dev/null @@ -1,76 +0,0 @@ -# encoding: utf-8 - -"""dpkt documentation build configuration file""" - -from __future__ import unicode_literals - -import os -import re -import sys -import types -import mock - - -def get_version(filename): - init_py = open(filename).read() - metadata = dict(re.findall("__([a-z]+)__ = '([^']+)'", init_py)) - return metadata['version'] - - -# -- Workarounds to have autodoc generate API docs ---------------------------- - -sys.path.insert(0, os.path.abspath('..')) - - -# Mock any objects that we might need to -foo = mock.Mock() -foo.__version__ = '0.1.1' -sys.modules['foo'] = foo - - -# -- General configuration ---------------------------------------------------- -needs_sphinx = '1.0' -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.extlinks', - 'sphinx.ext.intersphinx', - 'sphinx.ext.viewcode', - 'sphinx.ext.autosummary', - 'sphinxcontrib.napoleon' -] - -templates_path = ['_templates'] -source_suffix = '.rst' -master_doc = 'index' - -project = 'dpkt' -copyright = '2009-2015 Dug Song and contributors' - -release = get_version('../dpkt/__init__.py') -version = '.'.join(release.split('.')[:2]) - -exclude_patterns = ['_build'] - -pygments_style = 'sphinx' - -modindex_common_prefix = ['dpkt.'] - -autodoc_default_flags = ['members', 'undoc-members', 'show-inheritance'] -autodoc_member_order = 'bysource' - - -# -- Options for HTML output -------------------------------------------------- -html_theme = 'default' -html_static_path = ['_static'] - -html_use_modindex = True -html_use_index = True -html_split_index = False -html_show_sourcelink = True - -htmlhelp_basename = 'dpkt' - -# -- Options for extlink extension -------------------------------------------- -extlinks = { - 'issue': ('https://github.com/kbandla/dpkt/issues/%s', '#'), -} diff --git a/external_libs/python/dpkt-1.8.6.2/docs/contributing.rst b/external_libs/python/dpkt-1.8.6.2/docs/contributing.rst deleted file mode 100644 index cae4acfe..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/contributing.rst +++ /dev/null @@ -1,45 +0,0 @@ -============ -Contributing -============ - -Report a Bug or Make a Feature Request --------------------------------------- -Please go to the GitHub Issues page: https://github.com/kbandla/dpkt/issues. - -Checkout the Code ------------------ - -:: - - git clone https://github.com/kblandla/dpkt.git - - -Become a Developer ------------------- -dpkt uses the 'GitHub Flow' model: `GitHub Flow `_ - -- To work on something new, create a descriptively named branch off of master (ie: my-awesome) -- Commit to that branch locally and regularly push your work to the same named branch on the server -- When you need feedback or help, or you think the branch is ready for merging, open a pull request -- After someone else has reviewed and signed off on the feature, you can merge it into master - -Getting Started -~~~~~~~~~~~~~~~ - - Fork the repo on GitHub - - git clone git@github.com:your_name_here/dpkt.git - -New Feature or Bug -~~~~~~~~~~~~~~~~~~ - - :: - - $ git checkout -b my-awesome - $ git push -u origin my-awesome - $ ; git push - $ ; git push - $ tox (this will run all the tests) - - - Go to github and hit 'New pull request' - - Someone reviews it and says 'AOK' - - Merge the pull request (green button) - diff --git a/external_libs/python/dpkt-1.8.6.2/docs/examples.rst b/external_libs/python/dpkt-1.8.6.2/docs/examples.rst deleted file mode 100644 index d99a0c2f..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/examples.rst +++ /dev/null @@ -1,80 +0,0 @@ - -Examples -======== - -Examples in dpkt/examples -------------------------- - -print_packets.py -~~~~~~~~~~~~~~~~ -.. automodule:: examples.print_packets - -**Code Excerpt** - -.. code-block:: python - - # For each packet in the pcap process the contents - for timestamp, buf in pcap: - - # Print out the timestamp in UTC - print 'Timestamp: ', str(datetime.datetime.utcfromtimestamp(timestamp)) - - # Unpack the Ethernet frame (mac src/dst, ethertype) - eth = dpkt.ethernet.Ethernet(buf) - print 'Ethernet Frame: ', mac_addr(eth.src), mac_addr(eth.dst), eth.type - - # Make sure the Ethernet frame contains an IP packet - # EtherType (IP, ARP, PPPoE, IP6... see http://en.wikipedia.org/wiki/EtherType) - if eth.type != dpkt.ethernet.ETH_TYPE_IP: - print 'Non IP Packet type not supported %s\n' % eth.data.__class__.__name__ - continue - - # Now unpack the data within the Ethernet frame (the IP packet) - # Pulling out src, dst, length, fragment info, TTL, and Protocol - ip = eth.data - - # Pull out fragment information (flags and offset all packed into off field, so use bitmasks) - do_not_fragment = bool(ip.off & dpkt.ip.IP_DF) - more_fragments = bool(ip.off & dpkt.ip.IP_MF) - fragment_offset = ip.off & dpkt.ip.IP_OFFMASK - - # Print out the info - print 'IP: %s -> %s (len=%d ttl=%d DF=%d MF=%d offset=%d)\n' % \ - (ip_to_str(ip.src), ip_to_str(ip.dst), ip.len, ip.ttl, do_not_fragment, more_fragments, fragment_offset) - -**Example Output** - -.. code-block:: json - - Timestamp: 2004-05-13 10:17:07.311224 - Ethernet Frame: 00:00:01:00:00:00 fe:ff:20:00:01:00 2048 - IP: 145.254.160.237 -> 65.208.228.223 (len=48 ttl=128 DF=1 MF=0 offset=0) - - Timestamp: 2004-05-13 10:17:08.222534 - Ethernet Frame: fe:ff:20:00:01:00 00:00:01:00:00:00 2048 - IP: 65.208.228.223 -> 145.254.160.237 (len=48 ttl=47 DF=1 MF=0 offset=0) - - ... - - - -Jon Oberheide's Examples -------------------------- -[@jonoberheide's](https://twitter.com/jonoberheide) old examples still -apply: - -- `dpkt Tutorial #1: ICMP - Echo `__ -- `dpkt Tutorial #2: Parsing a PCAP - File `__ -- `dpkt Tutorial #3: dns - spoofing `__ -- `dpkt Tutorial #4: AS Paths from - MRT/BGP `__ - -Jeff Silverman Docs/Code ------------------------- -`Jeff Silverman `__ has some -`code `__ and -`documentation `__. - diff --git a/external_libs/python/dpkt-1.8.6.2/docs/index.rst b/external_libs/python/dpkt-1.8.6.2/docs/index.rst deleted file mode 100644 index 31ef9251..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/index.rst +++ /dev/null @@ -1,32 +0,0 @@ -dpkt -==== -.. include:: badges.rst -dpkt is a python module for fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols - - -Getting Started -=============== -.. toctree:: - :maxdepth: 2 - - installation - examples - -API Reference -============= -.. toctree:: - :maxdepth: 1 - - api/index - -About dpkt -========== -.. toctree:: - :maxdepth: 2 - - authors - changelog - plans - contributing - license - diff --git a/external_libs/python/dpkt-1.8.6.2/docs/installation.rst b/external_libs/python/dpkt-1.8.6.2/docs/installation.rst deleted file mode 100644 index 2c93001b..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/installation.rst +++ /dev/null @@ -1,21 +0,0 @@ -============ -Installation -============ - -DKPT is now available directly from pypi :) - -Install the Code ----------------- - -:: - - pip install dpkt - -Checkout the Code ------------------ - -:: - - git clone https://github.com/kblandla/dpkt.git - - diff --git a/external_libs/python/dpkt-1.8.6.2/docs/license.rst b/external_libs/python/dpkt-1.8.6.2/docs/license.rst deleted file mode 100644 index 56c72381..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/license.rst +++ /dev/null @@ -1,4 +0,0 @@ - -License -======= -BSD 3-Clause License, as the upstream project diff --git a/external_libs/python/dpkt-1.8.6.2/docs/plans.rst b/external_libs/python/dpkt-1.8.6.2/docs/plans.rst deleted file mode 100644 index a6b1ca35..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/plans.rst +++ /dev/null @@ -1,13 +0,0 @@ -***************** -Development plans -***************** - -Current plans -============= - -- Be Awesome - -Future plans -============ - -- Maintain the Awesome diff --git a/external_libs/python/dpkt-1.8.6.2/docs/requirements.txt b/external_libs/python/dpkt-1.8.6.2/docs/requirements.txt deleted file mode 100644 index 0e912345..00000000 --- a/external_libs/python/dpkt-1.8.6.2/docs/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -mock >= 1.0 -Sphinx >= 1.0 -sphinxcontrib-napoleon diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO deleted file mode 100644 index baf82a26..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO +++ /dev/null @@ -1,82 +0,0 @@ -Metadata-Version: 1.1 -Name: dpkt -Version: 1.8.6.2 -Summary: fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols -Home-page: http://dpkt.googlecode.com/ -Author: Dug Song -Author-email: dugsong@monkey.org -License: BSD -Description: - ==== - dpkt - ==== - - | |travis| |coveralls| |landscape| |downloads| - | |version| |wheel| |supported-versions| |supported-implementations| - - .. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg - :alt: Travis-CI Build Status - :target: https://travis-ci.org/kbandla/dpkt - - .. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg - :alt: Coverage Status - :target: https://coveralls.io/r/kbandla/dpkt - - .. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg - :target: https://landscape.io/github/kbandla/dpkt/master - :alt: Code Quality Status - - .. |version| image:: http://img.shields.io/pypi/v/dpkt.svg - :alt: PyPI Package latest release - :target: https://pypi.python.org/pypi/dpkt - - .. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg - :alt: PyPI Package monthly downloads - :target: https://pypi.python.org/pypi/dpkt - - .. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg - :alt: PyPI Wheel - :target: https://pypi.python.org/pypi/dpkt - - .. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg - :alt: Supported versions - :target: https://pypi.python.org/pypi/dpkt - - .. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg - :alt: Supported implementations - :target: https://pypi.python.org/pypi/dpkt - - Installation - ============ - - :: - - pip install dpkt - - Documentation - ============= - - https://dpkt.readthedocs.org/ - - About - ===== - - This code is based on `dpkt code `__ lead by Dug Song and - is now being maintained and improved by an extended set of - `contributors `__ - and `developers `__. - - LICENSE - ------- - - BSD 3-Clause - -Platform: UNKNOWN -Classifier: Development Status :: 4 - Beta -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: BSD License -Classifier: Natural Language :: English -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt deleted file mode 100644 index 8ac474c8..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt +++ /dev/null @@ -1,96 +0,0 @@ -AUTHORS -CHANGES -LICENSE -MANIFEST.in -README.md -README.rst -setup.cfg -setup.py -docs/Makefile -docs/authors.rst -docs/badges.rst -docs/changelog.rst -docs/conf.py -docs/contributing.rst -docs/examples.rst -docs/index.rst -docs/installation.rst -docs/license.rst -docs/plans.rst -docs/requirements.txt -docs/api/api_auto.rst -docs/api/index.rst -dpkt/__init__.py -dpkt/ah.py -dpkt/aim.py -dpkt/aoe.py -dpkt/aoeata.py -dpkt/aoecfg.py -dpkt/arp.py -dpkt/asn1.py -dpkt/bgp.py -dpkt/cdp.py -dpkt/crc32c.py -dpkt/decorators.py -dpkt/dhcp.py -dpkt/diameter.py -dpkt/dns.py -dpkt/dpkt.py -dpkt/dtp.py -dpkt/esp.py -dpkt/ethernet.py -dpkt/gre.py -dpkt/gzip.py -dpkt/h225.py -dpkt/hsrp.py -dpkt/http.py -dpkt/icmp.py -dpkt/icmp6.py -dpkt/ieee80211.py -dpkt/igmp.py -dpkt/ip.py -dpkt/ip6.py -dpkt/ipx.py -dpkt/llc.py -dpkt/loopback.py -dpkt/mrt.py -dpkt/netbios.py -dpkt/netflow.py -dpkt/ntp.py -dpkt/ospf.py -dpkt/pcap.py -dpkt/pim.py -dpkt/pmap.py -dpkt/ppp.py -dpkt/pppoe.py -dpkt/qq.py -dpkt/radiotap.py -dpkt/radius.py -dpkt/rfb.py -dpkt/rip.py -dpkt/rpc.py -dpkt/rtp.py -dpkt/rx.py -dpkt/sccp.py -dpkt/sctp.py -dpkt/sip.py -dpkt/sll.py -dpkt/smb.py -dpkt/snoop.py -dpkt/ssl.py -dpkt/ssl_ciphersuites.py -dpkt/stp.py -dpkt/stun.py -dpkt/tcp.py -dpkt/telnet.py -dpkt/tftp.py -dpkt/tns.py -dpkt/tpkt.py -dpkt/udp.py -dpkt/vrrp.py -dpkt/yahoo.py -dpkt.egg-info/PKG-INFO -dpkt.egg-info/SOURCES.txt -dpkt.egg-info/dependency_links.txt -dpkt.egg-info/not-zip-safe -dpkt.egg-info/top_level.txt \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt deleted file mode 100644 index 8b137891..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe deleted file mode 100644 index 8b137891..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt b/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt deleted file mode 100644 index 4daab81a..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -dpkt diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/__init__.py b/external_libs/python/dpkt-1.8.6.2/dpkt/__init__.py deleted file mode 100644 index 09d28fb3..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/__init__.py +++ /dev/null @@ -1,71 +0,0 @@ -"""fast, simple packet creation and parsing.""" - -__author__ = 'Dug Song' -__author_email__ = 'dugsong@monkey.org' -__license__ = 'BSD' -__url__ = 'http://dpkt.googlecode.com/' -__version__ = '1.8.6.2' - -from dpkt import * - -import ah -import aoe -import aim -import arp -import asn1 -import bgp -import cdp -import dhcp -import diameter -import dns -import dtp -import esp -import ethernet -import gre -import gzip -import h225 -import hsrp -import http -import icmp -import icmp6 -import ieee80211 -import igmp -import ip -import ip6 -import ipx -import llc -import loopback -import mrt -import netbios -import netflow -import ntp -import ospf -import pcap -import pim -import pmap -import ppp -import pppoe -import qq -import radiotap -import radius -import rfb -import rip -import rpc -import rtp -import rx -import sccp -import sctp -import sip -import sll -import smb -import ssl -import stp -import stun -import tcp -import telnet -import tftp -import tns -import tpkt -import udp -import vrrp -import yahoo diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ah.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ah.py deleted file mode 100644 index 5ad29ad5..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/ah.py +++ /dev/null @@ -1,35 +0,0 @@ -# $Id: ah.py 34 2007-01-28 07:54:20Z dugsong $ -# -*- coding: utf-8 -*- - -"""Authentication Header.""" - -import dpkt - - -class AH(dpkt.Packet): - __hdr__ = ( - ('nxt', 'B', 0), - ('len', 'B', 0), # payload length - ('rsvd', 'H', 0), - ('spi', 'I', 0), - ('seq', 'I', 0) - ) - auth = '' - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.auth = self.data[:self.len] - buf = self.data[self.len:] - import ip - - try: - self.data = ip.IP.get_proto(self.nxt)(buf) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - self.data = buf - - def __len__(self): - return self.__hdr_len__ + len(self.auth) + len(self.data) - - def __str__(self): - return self.pack_hdr() + str(self.auth) + str(self.data) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/aim.py b/external_libs/python/dpkt-1.8.6.2/dpkt/aim.py deleted file mode 100644 index 8250d69e..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/aim.py +++ /dev/null @@ -1,52 +0,0 @@ -# $Id: aim.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- - -"""AOL Instant Messenger.""" - -import dpkt -import struct - -# OSCAR: http://iserverd1.khstu.ru/oscar/ - - -class FLAP(dpkt.Packet): - __hdr__ = ( - ('ast', 'B', 0x2a), # '*' - ('type', 'B', 0), - ('seq', 'H', 0), - ('len', 'H', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.ast != 0x2a: - raise dpkt.UnpackError('invalid FLAP header') - if len(self.data) < self.len: - raise dpkt.NeedData, '%d left, %d needed' % (len(self.data), self.len) - - -class SNAC(dpkt.Packet): - __hdr__ = ( - ('family', 'H', 0), - ('subtype', 'H', 0), - ('flags', 'H', 0), - ('reqid', 'I', 0) - ) - - -def tlv(buf): - n = 4 - try: - t, l = struct.unpack('>HH', buf[:n]) - except struct.error: - raise dpkt.UnpackError - v = buf[n:n + l] - if len(v) < l: - raise dpkt.NeedData - buf = buf[n + l:] - return t, l, v, buf - -# TOC 1.0: http://jamwt.com/Py-TOC/PROTOCOL - -# TOC 2.0: http://www.firestuff.org/projects/firetalk/doc/toc2.txt - diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/aoe.py b/external_libs/python/dpkt-1.8.6.2/dpkt/aoe.py deleted file mode 100644 index 8fcf7c63..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/aoe.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -"""ATA over Ethernet Protocol.""" - -import struct -import dpkt -from decorators import deprecated - - -class AOE(dpkt.Packet): - __hdr__ = ( - ('ver_fl', 'B', 0x10), - ('err', 'B', 0), - ('maj', 'H', 0), - ('min', 'B', 0), - ('cmd', 'B', 0), - ('tag', 'I', 0), - ) - _cmdsw = {} - - @property - def ver(self): return self.ver_fl >> 4 - - @ver.setter - def ver(self, ver): self.ver_fl = (ver << 4) | (self.ver_fl & 0xf) - - @property - def fl(self): return self.ver_fl & 0xf - - @fl.setter - def fl(self, fl): self.ver_fl = (self.ver_fl & 0xf0) | fl - - @classmethod - def set_cmd(cls, cmd, pktclass): - cls._cmdsw[cmd] = pktclass - - @classmethod - def get_cmd(cls, cmd): - return cls._cmdsw[cmd] - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - try: - self.data = self._cmdsw[self.cmd](self.data) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, struct.error, dpkt.UnpackError): - pass - - def pack_hdr(self): - try: - return dpkt.Packet.pack_hdr(self) - except struct.error, e: - raise dpkt.PackError(str(e)) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_ver(self): return self.ver - - @deprecated - def _set_ver(self, ver): self.ver = ver - - @deprecated - def _get_fl(self): return self.fl - - @deprecated - def _set_fl(self, fl): self.fl = fl - # ================================================= - - - -AOE_CMD_ATA = 0 -AOE_CMD_CFG = 1 -AOE_FLAG_RSP = 1 << 3 - - -def __load_cmds(): - prefix = 'AOE_CMD_' - g = globals() - for k, v in g.iteritems(): - if k.startswith(prefix): - name = 'aoe' + k[len(prefix):].lower() - try: - mod = __import__(name, g) - except ImportError: - continue - AOE.set_cmd(v, getattr(mod, name.upper())) - - -if not AOE._cmdsw: - __load_cmds() diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/aoeata.py b/external_libs/python/dpkt-1.8.6.2/dpkt/aoeata.py deleted file mode 100644 index 1be917d3..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/aoeata.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -"""ATA over Ethernet ATA command""" - -import dpkt - -ATA_DEVICE_IDENTIFY = 0xec - - -class AOEATA(dpkt.Packet): - __hdr__ = ( - ('aflags', 'B', 0), - ('errfeat', 'B', 0), - ('scnt', 'B', 0), - ('cmdstat', 'B', ATA_DEVICE_IDENTIFY), - ('lba0', 'B', 0), - ('lba1', 'B', 0), - ('lba2', 'B', 0), - ('lba3', 'B', 0), - ('lba4', 'B', 0), - ('lba5', 'B', 0), - ('res', 'H', 0), - ) - - # XXX: in unpack, switch on ATA command like icmp does on type - - -def test_aoeata(): - s = '\x03\x0a\x6b\x19\x00\x00\x00\x00\x45\x00\x00\x28\x94\x1f\x00\x00\xe3\x06\x99\xb4\x23\x2b\x24\x00\xde\x8e\x84\x42\xab\xd1\x00\x50\x00\x35\xe1\x29\x20\xd9\x00\x00\x00\x22\x9b\xf0\xe2\x04\x65\x6b' - aoeata = AOEATA(s) - assert (str(aoeata) == s) - - -if __name__ == '__main__': - test_aoeata() - print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/aoecfg.py b/external_libs/python/dpkt-1.8.6.2/dpkt/aoecfg.py deleted file mode 100644 index 7643eddf..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/aoecfg.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -"""ATA over Ethernet ATA command""" - -import dpkt - - -class AOECFG(dpkt.Packet): - __hdr__ = ( - ('bufcnt', 'H', 0), - ('fwver', 'H', 0), - ('scnt', 'B', 0), - ('aoeccmd', 'B', 0), - ('cslen', 'H', 0), - ) - - -def test_aoecfg(): - s = '\x01\x02\x03\x04\x05\x06\x11\x12\x13\x14\x15\x16\x88\xa2\x10\x00\x00\x01\x02\x01\x80\x00\x00\x00\x12\x34\x00\x00\x00\x00\x04\x00' + '\0xed' * 1024 - aoecfg = AOECFG(s[14 + 10:]) - assert (aoecfg.bufcnt == 0x1234) - - -if __name__ == '__main__': - test_aoecfg() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/arp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/arp.py deleted file mode 100644 index a6ae62f4..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/arp.py +++ /dev/null @@ -1,32 +0,0 @@ -# $Id: arp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Address Resolution Protocol.""" - -import dpkt - -# Hardware address format -ARP_HRD_ETH = 0x0001 # ethernet hardware -ARP_HRD_IEEE802 = 0x0006 # IEEE 802 hardware - -# Protocol address format -ARP_PRO_IP = 0x0800 # IP protocol - -# ARP operation -ARP_OP_REQUEST = 1 # request to resolve ha given pa -ARP_OP_REPLY = 2 # response giving hardware address -ARP_OP_REVREQUEST = 3 # request to resolve pa given ha -ARP_OP_REVREPLY = 4 # response giving protocol address - - -class ARP(dpkt.Packet): - __hdr__ = ( - ('hrd', 'H', ARP_HRD_ETH), - ('pro', 'H', ARP_PRO_IP), - ('hln', 'B', 6), # hardware address length - ('pln', 'B', 4), # protocol address length - ('op', 'H', ARP_OP_REQUEST), - ('sha', '6s', ''), - ('spa', '4s', ''), - ('tha', '6s', ''), - ('tpa', '4s', '') - ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/asn1.py b/external_libs/python/dpkt-1.8.6.2/dpkt/asn1.py deleted file mode 100644 index 7acae041..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/asn1.py +++ /dev/null @@ -1,121 +0,0 @@ -# $Id: asn1.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Abstract Syntax Notation #1.""" - -import struct -import time -import dpkt - -# Type class -CLASSMASK = 0xc0 -UNIVERSAL = 0x00 -APPLICATION = 0x40 -CONTEXT = 0x80 -PRIVATE = 0xc0 - -# Constructed (vs. primitive) -CONSTRUCTED = 0x20 - -# Universal-class tags -TAGMASK = 0x1f -INTEGER = 2 -BIT_STRING = 3 # arbitrary bit string -OCTET_STRING = 4 # arbitrary octet string -NULL = 5 -OID = 6 # object identifier -SEQUENCE = 16 # ordered collection of types -SET = 17 # unordered collection of types -PRINT_STRING = 19 # printable string -T61_STRING = 20 # T.61 (8-bit) character string -IA5_STRING = 22 # ASCII -UTC_TIME = 23 - - -def utctime(buf): - """Convert ASN.1 UTCTime string to UTC float.""" - yy = int(buf[:2]) - mn = int(buf[2:4]) - dd = int(buf[4:6]) - hh = int(buf[6:8]) - mm = int(buf[8:10]) - try: - ss = int(buf[10:12]) - buf = buf[12:] - except TypeError: - ss = 0 - buf = buf[10:] - if buf[0] == '+': - hh -= int(buf[1:3]) - mm -= int(buf[3:5]) - elif buf[0] == '-': - hh += int(buf[1:3]) - mm += int(buf[3:5]) - return time.mktime((2000 + yy, mn, dd, hh, mm, ss, 0, 0, 0)) - - -def decode(buf): - """Sleazy ASN.1 decoder. - Return list of (id, value) tuples from ASN.1 BER/DER encoded buffer. - """ - msg = [] - while buf: - t = ord(buf[0]) - constructed = t & CONSTRUCTED - tag = t & TAGMASK - l = ord(buf[1]) - c = 0 - if constructed and l == 128: - # XXX - constructed, indefinite length - msg.append((t, decode(buf[2:]))) - elif l >= 128: - c = l & 127 - if c == 1: - l = ord(buf[2]) - elif c == 2: - l = struct.unpack('>H', buf[2:4])[0] - elif c == 3: - l = struct.unpack('>I', buf[1:5])[0] & 0xfff - c = 2 - elif c == 4: - l = struct.unpack('>I', buf[2:6])[0] - else: - # XXX - can be up to 127 bytes, but... - raise dpkt.UnpackError('excessive long-form ASN.1 length %d' % l) - - # Skip type, length - buf = buf[2 + c:] - - # Parse content - if constructed: - msg.append((t, decode(buf))) - elif tag == INTEGER: - if l == 0: - n = 0 - elif l == 1: - n = ord(buf[0]) - elif l == 2: - n = struct.unpack('>H', buf[:2])[0] - elif l == 3: - n = struct.unpack('>I', buf[:4])[0] >> 8 - elif l == 4: - n = struct.unpack('>I', buf[:4])[0] - else: - raise dpkt.UnpackError('excessive integer length > %d bytes' % l) - msg.append((t, n)) - elif tag == UTC_TIME: - msg.append((t, utctime(buf[:l]))) - else: - msg.append((t, buf[:l])) - - # Skip content - buf = buf[l:] - return msg - - -def test_asn1(): - s = '0\x82\x02Q\x02\x01\x0bc\x82\x02J\x04xcn=Douglas J Song 1, ou=Information Technology Division, ou=Faculty and Staff, ou=People, o=University of Michigan, c=US\n\x01\x00\n\x01\x03\x02\x01\x00\x02\x01\x00\x01\x01\x00\x87\x0bobjectclass0\x82\x01\xb0\x04\rmemberOfGroup\x04\x03acl\x04\x02cn\x04\x05title\x04\rpostalAddress\x04\x0ftelephoneNumber\x04\x04mail\x04\x06member\x04\thomePhone\x04\x11homePostalAddress\x04\x0bobjectClass\x04\x0bdescription\x04\x18facsimileTelephoneNumber\x04\x05pager\x04\x03uid\x04\x0cuserPassword\x04\x08joinable\x04\x10associatedDomain\x04\x05owner\x04\x0erfc822ErrorsTo\x04\x08ErrorsTo\x04\x10rfc822RequestsTo\x04\nRequestsTo\x04\tmoderator\x04\nlabeledURL\x04\nonVacation\x04\x0fvacationMessage\x04\x05drink\x04\x0elastModifiedBy\x04\x10lastModifiedTime\x04\rmodifiersname\x04\x0fmodifytimestamp\x04\x0ccreatorsname\x04\x0fcreatetimestamp' - assert (decode(s) == [(48, [(2, 11), (99, [(4, 'cn=Douglas J Song 1, ou=Information Technology Division, ou=Faculty and Staff, ou=People, o=University of Michigan, c=US'), (10, '\x00'), (10, '\x03'), (2, 0), (2, 0), (1, '\x00'), (135, 'objectclass'), (48, [(4, 'memberOfGroup'), (4, 'acl'), (4, 'cn'), (4, 'title'), (4, 'postalAddress'), (4, 'telephoneNumber'), (4, 'mail'), (4, 'member'), (4, 'homePhone'), (4, 'homePostalAddress'), (4, 'objectClass'), (4, 'description'), (4, 'facsimileTelephoneNumber'), (4, 'pager'), (4, 'uid'), (4, 'userPassword'), (4, 'joinable'), (4, 'associatedDomain'), (4, 'owner'), (4, 'rfc822ErrorsTo'), (4, 'ErrorsTo'), (4, 'rfc822RequestsTo'), (4, 'RequestsTo'), (4, 'moderator'), (4, 'labeledURL'), (4, 'onVacation'), (4, 'vacationMessage'), (4, 'drink'), (4, 'lastModifiedBy'), (4, 'lastModifiedTime'), (4, 'modifiersname'), (4, 'modifytimestamp'), (4, 'creatorsname'), (4, 'createtimestamp')])])])]) - -if __name__ == '__main__': - test_asn1() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/bgp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/bgp.py deleted file mode 100644 index 7439a0e3..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/bgp.py +++ /dev/null @@ -1,789 +0,0 @@ -# $Id: bgp.py 76 2011-01-06 15:51:30Z dugsong $ -# -*- coding: utf-8 -*- -"""Border Gateway Protocol.""" - -import struct -import socket -import dpkt -from decorators import deprecated - - -# Border Gateway Protocol 4 - RFC 4271 -# Communities Attribute - RFC 1997 -# Capabilities - RFC 3392 -# Route Refresh - RFC 2918 -# Route Reflection - RFC 4456 -# Confederations - RFC 3065 -# Cease Subcodes - RFC 4486 -# NOPEER Community - RFC 3765 -# Multiprotocol Extensions - 2858 - -# Message Types -OPEN = 1 -UPDATE = 2 -NOTIFICATION = 3 -KEEPALIVE = 4 -ROUTE_REFRESH = 5 - -# Attribute Types -ORIGIN = 1 -AS_PATH = 2 -NEXT_HOP = 3 -MULTI_EXIT_DISC = 4 -LOCAL_PREF = 5 -ATOMIC_AGGREGATE = 6 -AGGREGATOR = 7 -COMMUNITIES = 8 -ORIGINATOR_ID = 9 -CLUSTER_LIST = 10 -MP_REACH_NLRI = 14 -MP_UNREACH_NLRI = 15 - -# Origin Types -ORIGIN_IGP = 0 -ORIGIN_EGP = 1 -INCOMPLETE = 2 - -# AS Path Types -AS_SET = 1 -AS_SEQUENCE = 2 -AS_CONFED_SEQUENCE = 3 -AS_CONFED_SET = 4 - -# Reserved Communities Types -NO_EXPORT = 0xffffff01L -NO_ADVERTISE = 0xffffff02L -NO_EXPORT_SUBCONFED = 0xffffff03L -NO_PEER = 0xffffff04L - -# Common AFI types -AFI_IPV4 = 1 -AFI_IPV6 = 2 - -# Multiprotocol SAFI types -SAFI_UNICAST = 1 -SAFI_MULTICAST = 2 -SAFI_UNICAST_MULTICAST = 3 - -# OPEN Message Optional Parameters -AUTHENTICATION = 1 -CAPABILITY = 2 - -# Capability Types -CAP_MULTIPROTOCOL = 1 -CAP_ROUTE_REFRESH = 2 - -# NOTIFICATION Error Codes -MESSAGE_HEADER_ERROR = 1 -OPEN_MESSAGE_ERROR = 2 -UPDATE_MESSAGE_ERROR = 3 -HOLD_TIMER_EXPIRED = 4 -FSM_ERROR = 5 -CEASE = 6 - -# Message Header Error Subcodes -CONNECTION_NOT_SYNCHRONIZED = 1 -BAD_MESSAGE_LENGTH = 2 -BAD_MESSAGE_TYPE = 3 - -# OPEN Message Error Subcodes -UNSUPPORTED_VERSION_NUMBER = 1 -BAD_PEER_AS = 2 -BAD_BGP_IDENTIFIER = 3 -UNSUPPORTED_OPTIONAL_PARAMETER = 4 -AUTHENTICATION_FAILURE = 5 -UNACCEPTABLE_HOLD_TIME = 6 -UNSUPPORTED_CAPABILITY = 7 - -# UPDATE Message Error Subcodes -MALFORMED_ATTRIBUTE_LIST = 1 -UNRECOGNIZED_ATTRIBUTE = 2 -MISSING_ATTRIBUTE = 3 -ATTRIBUTE_FLAGS_ERROR = 4 -ATTRIBUTE_LENGTH_ERROR = 5 -INVALID_ORIGIN_ATTRIBUTE = 6 -AS_ROUTING_LOOP = 7 -INVALID_NEXT_HOP_ATTRIBUTE = 8 -OPTIONAL_ATTRIBUTE_ERROR = 9 -INVALID_NETWORK_FIELD = 10 -MALFORMED_AS_PATH = 11 - -# Cease Error Subcodes -MAX_NUMBER_OF_PREFIXES_REACHED = 1 -ADMINISTRATIVE_SHUTDOWN = 2 -PEER_DECONFIGURED = 3 -ADMINISTRATIVE_RESET = 4 -CONNECTION_REJECTED = 5 -OTHER_CONFIGURATION_CHANGE = 6 -CONNECTION_COLLISION_RESOLUTION = 7 -OUT_OF_RESOURCES = 8 - - -class BGP(dpkt.Packet): - __hdr__ = ( - ('marker', '16s', '\xff' * 16), - ('len', 'H', 0), - ('type', 'B', OPEN) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.len - self.__hdr_len__] - if self.type == OPEN: - self.data = self.open = self.Open(self.data) - elif self.type == UPDATE: - self.data = self.update = self.Update(self.data) - elif self.type == NOTIFICATION: - self.data = self.notifiation = self.Notification(self.data) - elif self.type == KEEPALIVE: - self.data = self.keepalive = self.Keepalive(self.data) - elif self.type == ROUTE_REFRESH: - self.data = self.route_refresh = self.RouteRefresh(self.data) - - class Open(dpkt.Packet): - __hdr__ = ( - ('v', 'B', 4), - ('asn', 'H', 0), - ('holdtime', 'H', 0), - ('identifier', 'I', 0), - ('param_len', 'B', 0) - ) - __hdr_defaults__ = { - 'parameters': [] - } - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - l = [] - plen = self.param_len - while plen > 0: - param = self.Parameter(self.data) - self.data = self.data[len(param):] - plen -= len(param) - l.append(param) - self.data = self.parameters = l - - def __len__(self): - return self.__hdr_len__ + sum(map(len, self.parameters)) - - def __str__(self): - params = ''.join(map(str, self.parameters)) - self.param_len = len(params) - return self.pack_hdr() + params - - class Parameter(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 0), - ('len', 'B', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.len] - - if self.type == AUTHENTICATION: - self.data = self.authentication = self.Authentication(self.data) - elif self.type == CAPABILITY: - self.data = self.capability = self.Capability(self.data) - - class Authentication(dpkt.Packet): - __hdr__ = ( - ('code', 'B', 0), - ) - - class Capability(dpkt.Packet): - __hdr__ = ( - ('code', 'B', 0), - ('len', 'B', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.len] - - class Update(dpkt.Packet): - __hdr_defaults__ = { - 'withdrawn': [], - 'attributes': [], - 'announced': [] - } - - def unpack(self, buf): - self.data = buf - - # Withdrawn Routes - wlen = struct.unpack('>H', self.data[:2])[0] - self.data = self.data[2:] - l = [] - while wlen > 0: - route = RouteIPV4(self.data) - self.data = self.data[len(route):] - wlen -= len(route) - l.append(route) - self.withdrawn = l - - # Path Attributes - plen = struct.unpack('>H', self.data[:2])[0] - self.data = self.data[2:] - l = [] - while plen > 0: - attr = self.Attribute(self.data) - self.data = self.data[len(attr):] - plen -= len(attr) - l.append(attr) - self.attributes = l - - # Announced Routes - l = [] - while self.data: - route = RouteIPV4(self.data) - self.data = self.data[len(route):] - l.append(route) - self.announced = l - - def __len__(self): - return 2 + sum(map(len, self.withdrawn)) + \ - 2 + sum(map(len, self.attributes)) + \ - sum(map(len, self.announced)) - - def __str__(self): - return struct.pack('>H', sum(map(len, self.withdrawn))) + \ - ''.join(map(str, self.withdrawn)) + \ - struct.pack('>H', sum(map(len, self.attributes))) + \ - ''.join(map(str, self.attributes)) + \ - ''.join(map(str, self.announced)) - - class Attribute(dpkt.Packet): - __hdr__ = ( - ('flags', 'B', 0), - ('type', 'B', 0) - ) - - @property - def optional(self): - return (self.flags >> 7) & 0x1 - - @optional.setter - def optional(self, o): - self.flags = (self.flags & ~0x80) | ((o & 0x1) << 7) - - @property - def transitive(self): - return (self.flags >> 6) & 0x1 - - @transitive.setter - def transitive(self, t): - self.flags = (self.flags & ~0x40) | ((t & 0x1) << 6) - - @property - def partial(self): - return (self.flags >> 5) & 0x1 - - @partial.setter - def partial(self, p): - self.flags = (self.flags & ~0x20) | ((p & 0x1) << 5) - - @property - def extended_length(self): - return (self.flags >> 4) & 0x1 - - @extended_length.setter - def extended_length(self, e): - self.flags = (self.flags & ~0x10) | ((e & 0x1) << 4) - - # Deprecated methods, will be removed in the future - # ====================================================== - @deprecated - def _get_o(self): - return self.optional - - @deprecated - def _set_o(self, o): - self.optional = o - - @deprecated - def _get_t(self): - return self.transitive - - @deprecated - def _set_t(self, t): - self.transitive = t - - @deprecated - def _get_p(self): - return self.partial - - @deprecated - def _set_p(self, p): - self.partial = p - - @deprecated - def _get_e(self): - return self.extended_length - - @deprecated - def _set_e(self, e): - self.extended_length = e - - # ====================================================== - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - - if self.extended_length: - self.len = struct.unpack('>H', self.data[:2])[0] - self.data = self.data[2:] - else: - self.len = struct.unpack('B', self.data[:1])[0] - self.data = self.data[1:] - - self.data = self.data[:self.len] - - if self.type == ORIGIN: - self.data = self.origin = self.Origin(self.data) - elif self.type == AS_PATH: - self.data = self.as_path = self.ASPath(self.data) - elif self.type == NEXT_HOP: - self.data = self.next_hop = self.NextHop(self.data) - elif self.type == MULTI_EXIT_DISC: - self.data = self.multi_exit_disc = self.MultiExitDisc(self.data) - elif self.type == LOCAL_PREF: - self.data = self.local_pref = self.LocalPref(self.data) - elif self.type == ATOMIC_AGGREGATE: - self.data = self.atomic_aggregate = self.AtomicAggregate(self.data) - elif self.type == AGGREGATOR: - self.data = self.aggregator = self.Aggregator(self.data) - elif self.type == COMMUNITIES: - self.data = self.communities = self.Communities(self.data) - elif self.type == ORIGINATOR_ID: - self.data = self.originator_id = self.OriginatorID(self.data) - elif self.type == CLUSTER_LIST: - self.data = self.cluster_list = self.ClusterList(self.data) - elif self.type == MP_REACH_NLRI: - self.data = self.mp_reach_nlri = self.MPReachNLRI(self.data) - elif self.type == MP_UNREACH_NLRI: - self.data = self.mp_unreach_nlri = self.MPUnreachNLRI(self.data) - - def __len__(self): - if self.extended_length: - attr_len = 2 - else: - attr_len = 1 - return self.__hdr_len__ + attr_len + len(self.data) - - def __str__(self): - if self.extended_length: - attr_len_str = struct.pack('>H', self.len) - else: - attr_len_str = struct.pack('B', self.len) - return self.pack_hdr() + attr_len_str + str(self.data) - - class Origin(dpkt.Packet): - __hdr__ = ( - ('type', 'B', ORIGIN_IGP), - ) - - class ASPath(dpkt.Packet): - __hdr_defaults__ = { - 'segments': [] - } - - def unpack(self, buf): - self.data = buf - l = [] - while self.data: - seg = self.ASPathSegment(self.data) - self.data = self.data[len(seg):] - l.append(seg) - self.data = self.segments = l - - def __len__(self): - return sum(map(len, self.data)) - - def __str__(self): - return ''.join(map(str, self.data)) - - class ASPathSegment(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 0), - ('len', 'B', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - l = [] - for i in range(self.len): - AS = struct.unpack('>H', self.data[:2])[0] - self.data = self.data[2:] - l.append(AS) - self.data = self.path = l - - def __len__(self): - return self.__hdr_len__ + 2 * len(self.path) - - def __str__(self): - as_str = '' - for AS in self.path: - as_str += struct.pack('>H', AS) - return self.pack_hdr() + as_str - - class NextHop(dpkt.Packet): - __hdr__ = ( - ('ip', 'I', 0), - ) - - class MultiExitDisc(dpkt.Packet): - __hdr__ = ( - ('value', 'I', 0), - ) - - class LocalPref(dpkt.Packet): - __hdr__ = ( - ('value', 'I', 0), - ) - - class AtomicAggregate(dpkt.Packet): - def unpack(self, buf): - pass - - def __len__(self): - return 0 - - def __str__(self): - return '' - - class Aggregator(dpkt.Packet): - __hdr__ = ( - ('asn', 'H', 0), - ('ip', 'I', 0) - ) - - class Communities(dpkt.Packet): - __hdr_defaults__ = { - 'list': [] - } - - def unpack(self, buf): - self.data = buf - l = [] - while self.data: - val = struct.unpack('>I', self.data[:4])[0] - if (0x00000000L <= val <= 0x0000ffffL) or (0xffff0000L <= val <= 0xffffffffL): - comm = self.ReservedCommunity(self.data[:4]) - else: - comm = self.Community(self.data[:4]) - self.data = self.data[len(comm):] - l.append(comm) - self.data = self.list = l - - def __len__(self): - return sum(map(len, self.data)) - - def __str__(self): - return ''.join(map(str, self.data)) - - class Community(dpkt.Packet): - __hdr__ = ( - ('asn', 'H', 0), - ('value', 'H', 0) - ) - - class ReservedCommunity(dpkt.Packet): - __hdr__ = ( - ('value', 'I', 0), - ) - - class OriginatorID(dpkt.Packet): - __hdr__ = ( - ('value', 'I', 0), - ) - - class ClusterList(dpkt.Packet): - __hdr_defaults__ = { - 'list': [] - } - - def unpack(self, buf): - self.data = buf - l = [] - while self.data: - id = struct.unpack('>I', self.data[:4])[0] - self.data = self.data[4:] - l.append(id) - self.data = self.list = l - - def __len__(self): - return 4 * len(self.list) - - def __str__(self): - cluster_str = '' - for val in self.list: - cluster_str += struct.pack('>I', val) - return cluster_str - - class MPReachNLRI(dpkt.Packet): - __hdr__ = ( - ('afi', 'H', AFI_IPV4), - ('safi', 'B', SAFI_UNICAST), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - - # Next Hop - nlen = struct.unpack('B', self.data[:1])[0] - self.data = self.data[1:] - self.next_hop = self.data[:nlen] - self.data = self.data[nlen:] - - # SNPAs - l = [] - num_snpas = struct.unpack('B', self.data[:1])[0] - self.data = self.data[1:] - for i in range(num_snpas): - snpa = self.SNPA(self.data) - self.data = self.data[len(snpa):] - l.append(snpa) - self.snpas = l - - if self.afi == AFI_IPV4: - Route = RouteIPV4 - elif self.afi == AFI_IPV6: - Route = RouteIPV6 - else: - Route = RouteGeneric - - # Announced Routes - l = [] - while self.data: - route = Route(self.data) - self.data = self.data[len(route):] - l.append(route) - self.data = self.announced = l - - def __len__(self): - return self.__hdr_len__ + \ - 1 + len(self.next_hop) + \ - 1 + sum(map(len, self.snpas)) + \ - sum(map(len, self.announced)) - - def __str__(self): - return self.pack_hdr() + \ - struct.pack('B', len(self.next_hop)) + \ - str(self.next_hop) + \ - struct.pack('B', len(self.snpas)) + \ - ''.join(map(str, self.snpas)) + \ - ''.join(map(str, self.announced)) - - class SNPA(object): - __hdr__ = ( - ('len', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:(self.len + 1) / 2] - - class MPUnreachNLRI(dpkt.Packet): - __hdr__ = ( - ('afi', 'H', AFI_IPV4), - ('safi', 'B', SAFI_UNICAST), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - - if self.afi == AFI_IPV4: - Route = RouteIPV4 - elif self.afi == AFI_IPV6: - Route = RouteIPV6 - else: - Route = RouteGeneric - - # Withdrawn Routes - l = [] - while self.data: - route = Route(self.data) - self.data = self.data[len(route):] - l.append(route) - self.data = self.withdrawn = l - - def __len__(self): - return self.__hdr_len__ + sum(map(len, self.data)) - - def __str__(self): - return self.pack_hdr() + ''.join(map(str, self.data)) - - class Notification(dpkt.Packet): - __hdr__ = ( - ('code', 'B', 0), - ('subcode', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.error = self.data - - class Keepalive(dpkt.Packet): - def unpack(self, buf): - pass - - def __len__(self): - return 0 - - def __str__(self): - return '' - - class RouteRefresh(dpkt.Packet): - __hdr__ = ( - ('afi', 'H', AFI_IPV4), - ('rsvd', 'B', 0), - ('safi', 'B', SAFI_UNICAST) - ) - - -class RouteGeneric(dpkt.Packet): - __hdr__ = ( - ('len', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.prefix = self.data[:(self.len + 7) / 8] - - -class RouteIPV4(dpkt.Packet): - __hdr__ = ( - ('len', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - tmp = self.data[:(self.len + 7) / 8] - tmp += (4 - len(tmp)) * '\x00' - self.data = self.prefix = tmp - - def __repr__(self): - cidr = '%s/%d' % (socket.inet_ntoa(self.prefix), self.len) - return '%s(%s)' % (self.__class__.__name__, cidr) - - def __len__(self): - return self.__hdr_len__ + (self.len + 7) / 8 - - def __str__(self): - return self.pack_hdr() + self.prefix[:(self.len + 7) / 8] - - -class RouteIPV6(dpkt.Packet): - __hdr__ = ( - ('len', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - tmp = self.data[:(self.len + 7) / 8] - tmp += (16 - len(tmp)) * '\x00' - self.data = self.prefix = tmp - - def __len__(self): - return self.__hdr_len__ + (self.len + 7) / 8 - - def __str__(self): - return self.pack_hdr() + self.prefix[:(self.len + 7) / 8] - - -__bgp1 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x13\x04' -__bgp2 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x63\x02\x00\x00\x00\x48\x40\x01\x01\x00\x40\x02\x0a\x01\x02\x01\xf4\x01\xf4\x02\x01\xfe\xbb\x40\x03\x04\xc0\xa8\x00\x0f\x40\x05\x04\x00\x00\x00\x64\x40\x06\x00\xc0\x07\x06\xfe\xba\xc0\xa8\x00\x0a\xc0\x08\x0c\xfe\xbf\x00\x01\x03\x16\x00\x04\x01\x54\x00\xfa\x80\x09\x04\xc0\xa8\x00\x0f\x80\x0a\x04\xc0\xa8\x00\xfa\x16\xc0\xa8\x04' -__bgp3 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x79\x02\x00\x00\x00\x62\x40\x01\x01\x00\x40\x02\x00\x40\x05\x04\x00\x00\x00\x64\xc0\x10\x08\x00\x02\x01\x2c\x00\x00\x01\x2c\xc0\x80\x24\x00\x00\xfd\xe9\x40\x01\x01\x00\x40\x02\x04\x02\x01\x15\xb3\x40\x05\x04\x00\x00\x00\x2c\x80\x09\x04\x16\x05\x05\x05\x80\x0a\x04\x16\x05\x05\x05\x90\x0e\x00\x1e\x00\x01\x80\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x04\x04\x04\x00\x60\x18\x77\x01\x00\x00\x01\xf4\x00\x00\x01\xf4\x85' -__bgp4 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x2d\x01\x04\x00\xed\x00\x5a\xc6\x6e\x83\x7d\x10\x02\x06\x01\x04\x00\x01\x00\x01\x02\x02\x80\x00\x02\x02\x02\x00' - - -def test_pack(): - assert (__bgp1 == str(BGP(__bgp1))) - assert (__bgp2 == str(BGP(__bgp2))) - assert (__bgp3 == str(BGP(__bgp3))) - assert (__bgp4 == str(BGP(__bgp4))) - - -def test_unpack(): - b1 = BGP(__bgp1) - assert (b1.len == 19) - assert (b1.type == KEEPALIVE) - assert (b1.keepalive is not None) - - b2 = BGP(__bgp2) - assert (b2.type == UPDATE) - assert (len(b2.update.withdrawn) == 0) - assert (len(b2.update.announced) == 1) - assert (len(b2.update.attributes) == 9) - a = b2.update.attributes[1] - assert (a.type == AS_PATH) - assert (a.len == 10) - assert (len(a.as_path.segments) == 2) - s = a.as_path.segments[0] - assert (s.type == AS_SET) - assert (s.len == 2) - assert (len(s.path) == 2) - assert (s.path[0] == 500) - - a = b2.update.attributes[6] - assert (a.type == COMMUNITIES) - assert (a.len == 12) - assert (len(a.communities.list) == 3) - c = a.communities.list[0] - assert (c.asn == 65215) - assert (c.value == 1) - r = b2.update.announced[0] - assert (r.len == 22) - assert (r.prefix == '\xc0\xa8\x04\x00') - - b3 = BGP(__bgp3) - assert (b3.type == UPDATE) - assert (len(b3.update.withdrawn) == 0) - assert (len(b3.update.announced) == 0) - assert (len(b3.update.attributes) == 6) - a = b3.update.attributes[0] - assert (a.optional == False) - assert (a.transitive == True) - assert (a.partial == False) - assert (a.extended_length == False) - assert (a.type == ORIGIN) - assert (a.len == 1) - o = a.origin - assert (o.type == ORIGIN_IGP) - a = b3.update.attributes[5] - assert (a.optional == True) - assert (a.transitive == False) - assert (a.partial == False) - assert (a.extended_length == True) - assert (a.type == MP_REACH_NLRI) - assert (a.len == 30) - m = a.mp_reach_nlri - assert (m.afi == AFI_IPV4) - assert (len(m.snpas) == 0) - assert (len(m.announced) == 1) - p = m.announced[0] - assert (p.len == 96) - - b4 = BGP(__bgp4) - assert (b4.len == 45) - assert (b4.type == OPEN) - assert (b4.open.asn == 237) - assert (b4.open.param_len == 16) - assert (len(b4.open.parameters) == 3) - p = b4.open.parameters[0] - assert (p.type == CAPABILITY) - assert (p.len == 6) - c = p.capability - assert (c.code == CAP_MULTIPROTOCOL) - assert (c.len == 4) - assert (c.data == '\x00\x01\x00\x01') - c = b4.open.parameters[2].capability - assert (c.code == CAP_ROUTE_REFRESH) - assert (c.len == 0) - - -if __name__ == '__main__': - test_pack() - test_unpack() - print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/cdp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/cdp.py deleted file mode 100644 index 43c6a564..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/cdp.py +++ /dev/null @@ -1,99 +0,0 @@ -# $Id: cdp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Cisco Discovery Protocol.""" - -import struct -import dpkt - -CDP_DEVID = 1 # string -CDP_ADDRESS = 2 -CDP_PORTID = 3 # string -CDP_CAPABILITIES = 4 # 32-bit bitmask -CDP_VERSION = 5 # string -CDP_PLATFORM = 6 # string -CDP_IPPREFIX = 7 - -CDP_VTP_MGMT_DOMAIN = 9 # string -CDP_NATIVE_VLAN = 10 # 16-bit integer -CDP_DUPLEX = 11 # 8-bit boolean -CDP_TRUST_BITMAP = 18 # 8-bit bitmask0x13 -CDP_UNTRUST_COS = 19 # 8-bit port -CDP_SYSTEM_NAME = 20 # string -CDP_SYSTEM_OID = 21 # 10-byte binary string -CDP_MGMT_ADDRESS = 22 # 32-bit number of addrs, Addresses -CDP_LOCATION = 23 # string - - -class CDP(dpkt.Packet): - __hdr__ = ( - ('version', 'B', 2), - ('ttl', 'B', 180), - ('sum', 'H', 0) - ) - - class Address(dpkt.Packet): - # XXX - only handle NLPID/IP for now - __hdr__ = ( - ('ptype', 'B', 1), # protocol type (NLPID) - ('plen', 'B', 1), # protocol length - ('p', 'B', 0xcc), # IP - ('alen', 'H', 4) # address length - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.alen] - - class TLV(dpkt.Packet): - __hdr__ = ( - ('type', 'H', 0), - ('len', 'H', 4) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.len - 4] - if self.type == CDP_ADDRESS: - n = struct.unpack('>I', self.data[:4])[0] - buf = self.data[4:] - l = [] - for i in range(n): - a = CDP.Address(buf) - l.append(a) - buf = buf[len(a):] - self.data = l - - def __len__(self): - if self.type == CDP_ADDRESS: - n = 4 + sum(map(len, self.data)) - else: - n = len(self.data) - return self.__hdr_len__ + n - - def __str__(self): - self.len = len(self) - if self.type == CDP_ADDRESS: - s = struct.pack('>I', len(self.data)) + \ - ''.join(map(str, self.data)) - else: - s = self.data - return self.pack_hdr() + s - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - buf = self.data - l = [] - while buf: - tlv = self.TLV(buf) - l.append(tlv) - buf = buf[len(tlv):] - self.data = l - - def __len__(self): - return self.__hdr_len__ + sum(map(len, self.data)) - - def __str__(self): - data = ''.join(map(str, self.data)) - if not self.sum: - self.sum = dpkt.in_cksum(self.pack_hdr() + data) - return self.pack_hdr() + data diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/crc32c.py b/external_libs/python/dpkt-1.8.6.2/dpkt/crc32c.py deleted file mode 100644 index aaf40e1f..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/crc32c.py +++ /dev/null @@ -1,83 +0,0 @@ -# $Id: crc32c.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -import array - -# CRC-32C Checksum -# http://tools.ietf.org/html/rfc3309 - -crc32c_table = ( - 0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L, 0xC79A971FL, - 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL, 0x8AD958CFL, 0x78B2DBCCL, - 0x6BE22838L, 0x9989AB3BL, 0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, - 0x5E133C24L, 0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL, - 0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L, 0x9A879FA0L, - 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L, 0x5D1D08BFL, 0xAF768BBCL, - 0xBC267848L, 0x4E4DFB4BL, 0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, - 0x33ED7D2AL, 0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L, - 0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L, 0x6DFE410EL, - 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL, 0x30E349B1L, 0xC288CAB2L, - 0xD1D83946L, 0x23B3BA45L, 0xF779DEAEL, 0x05125DADL, 0x1642AE59L, - 0xE4292D5AL, 0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL, - 0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L, 0x417B1DBCL, - 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L, 0x86E18AA3L, 0x748A09A0L, - 0x67DAFA54L, 0x95B17957L, 0xCBA24573L, 0x39C9C670L, 0x2A993584L, - 0xD8F2B687L, 0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L, - 0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L, 0x96BF4DCCL, - 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L, 0xDBFC821CL, 0x2997011FL, - 0x3AC7F2EBL, 0xC8AC71E8L, 0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, - 0x0F36E6F7L, 0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L, - 0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L, 0xEB1FCBADL, - 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L, 0x2C855CB2L, 0xDEEEDFB1L, - 0xCDBE2C45L, 0x3FD5AF46L, 0x7198540DL, 0x83F3D70EL, 0x90A324FAL, - 0x62C8A7F9L, 0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L, - 0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L, 0x3CDB9BDDL, - 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L, 0x82F63B78L, 0x709DB87BL, - 0x63CD4B8FL, 0x91A6C88CL, 0x456CAC67L, 0xB7072F64L, 0xA457DC90L, - 0x563C5F93L, 0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L, - 0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL, 0x92A8FC17L, - 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L, 0x55326B08L, 0xA759E80BL, - 0xB4091BFFL, 0x466298FCL, 0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, - 0x0B21572CL, 0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L, - 0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L, 0x65D122B9L, - 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL, 0x2892ED69L, 0xDAF96E6AL, - 0xC9A99D9EL, 0x3BC21E9DL, 0xEF087A76L, 0x1D63F975L, 0x0E330A81L, - 0xFC588982L, 0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL, - 0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L, 0x38CC2A06L, - 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L, 0xFF56BD19L, 0x0D3D3E1AL, - 0x1E6DCDEEL, 0xEC064EEDL, 0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, - 0xD0DDD530L, 0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL, - 0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL, 0x8ECEE914L, - 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L, 0xD3D3E1ABL, 0x21B862A8L, - 0x32E8915CL, 0xC083125FL, 0x144976B4L, 0xE622F5B7L, 0xF5720643L, - 0x07198540L, 0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L, - 0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL, 0xE330A81AL, - 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL, 0x24AA3F05L, 0xD6C1BC06L, - 0xC5914FF2L, 0x37FACCF1L, 0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, - 0x7AB90321L, 0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL, - 0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L, 0x34F4F86AL, - 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL, 0x79B737BAL, 0x8BDCB4B9L, - 0x988C474DL, 0x6AE7C44EL, 0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, - 0xAD7D5351L -) - - -def add(crc, buf): - buf = array.array('B', buf) - for b in buf: - crc = (crc >> 8) ^ crc32c_table[(crc ^ b) & 0xff] - return crc - - -def done(crc): - tmp = ~crc & 0xffffffffL - b0 = tmp & 0xff - b1 = (tmp >> 8) & 0xff - b2 = (tmp >> 16) & 0xff - b3 = (tmp >> 24) & 0xff - crc = (b0 << 24) | (b1 << 16) | (b2 << 8) | b3 - return crc - - -def cksum(buf): - """Return computed CRC-32c checksum.""" - return done(add(0xffffffffL, buf)) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/decorators.py b/external_libs/python/dpkt-1.8.6.2/dpkt/decorators.py deleted file mode 100644 index 08f78161..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/decorators.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- coding: utf-8 -*- -import warnings -from timeit import Timer -from test import pystone -from time import sleep - - -def decorator_with_args(decorator_to_enhance): - """ - This is decorator for decorator. It allows any decorator to get additional arguments - """ - def decorator_maker(*args, **kwargs): - def decorator_wrapper(func): - return decorator_to_enhance(func, *args, **kwargs) - return decorator_wrapper - return decorator_maker - - -def deprecated(deprecated_method): - def _deprecated(*args, **kwargs): - # Print only the first occurrence of the DeprecationWarning, regardless of location - warnings.simplefilter('once', DeprecationWarning) - # Display the deprecation warning message - warnings.warn("Call to deprecated method %s" % deprecated_method.__name__, - category=DeprecationWarning, stacklevel=2) - return deprecated_method(*args, **kwargs) # actually call the method - - return _deprecated - - -@decorator_with_args -def duration(function, repeat=10000): - def _duration(*args, **kwargs): - time = 0 - try: - time = Timer(lambda: function(*args, **kwargs)).timeit(repeat) - finally: - benchtime, pystones = pystone.pystones() - kstones = (pystones * time) / 1000 - print '%s : time = %f kstones = %f' % (function.__name__, time, kstones) - return function(*args, **kwargs) - - return _duration - - -class TestDeprecatedDecorator(object): - @deprecated - def deprecated_decorator(self): - return - - def test_deprecated_decorator(self): - import sys - from StringIO import StringIO - - saved_stderr = sys.stderr - try: - out = StringIO() - sys.stderr = out - self.deprecated_decorator() - assert ('DeprecationWarning: Call to deprecated method deprecated_decorator' in out.getvalue()) - # 'in' because message contains the filename, line, etc - finally: - sys.stderr = saved_stderr - - -class TestDurationDecorator(object): - @duration(1) - def duration_decorator(self): - sleep(0.05) - return - - def test_duration_decorator(self): - import sys - import re - from StringIO import StringIO - - saved_stdout = sys.stdout - try: - out = StringIO() - sys.stdout = out - self.duration_decorator() - assert (re.match('((.+?[0-9]+\.[0-9]+)\s?){2}', out.getvalue())) - finally: - sys.stdout = saved_stdout - -if __name__ == '__main__': - a = TestDeprecatedDecorator() - a.test_deprecated_decorator() - a = TestDurationDecorator() - a.test_duration_decorator() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/dhcp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/dhcp.py deleted file mode 100644 index 5332a1fc..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/dhcp.py +++ /dev/null @@ -1,169 +0,0 @@ -# $Id: dhcp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Dynamic Host Configuration Protocol.""" - -import arp -import dpkt - -DHCP_OP_REQUEST = 1 -DHCP_OP_REPLY = 2 - -DHCP_MAGIC = 0x63825363 - -# DHCP option codes -DHCP_OPT_NETMASK = 1 # I: subnet mask -DHCP_OPT_TIMEOFFSET = 2 -DHCP_OPT_ROUTER = 3 # s: list of router ips -DHCP_OPT_TIMESERVER = 4 -DHCP_OPT_NAMESERVER = 5 -DHCP_OPT_DNS_SVRS = 6 # s: list of DNS servers -DHCP_OPT_LOGSERV = 7 -DHCP_OPT_COOKIESERV = 8 -DHCP_OPT_LPRSERV = 9 -DHCP_OPT_IMPSERV = 10 -DHCP_OPT_RESSERV = 11 -DHCP_OPT_HOSTNAME = 12 # s: client hostname -DHCP_OPT_BOOTFILESIZE = 13 -DHCP_OPT_DUMPFILE = 14 -DHCP_OPT_DOMAIN = 15 # s: domain name -DHCP_OPT_SWAPSERV = 16 -DHCP_OPT_ROOTPATH = 17 -DHCP_OPT_EXTENPATH = 18 -DHCP_OPT_IPFORWARD = 19 -DHCP_OPT_SRCROUTE = 20 -DHCP_OPT_POLICYFILTER = 21 -DHCP_OPT_MAXASMSIZE = 22 -DHCP_OPT_IPTTL = 23 -DHCP_OPT_MTUTIMEOUT = 24 -DHCP_OPT_MTUTABLE = 25 -DHCP_OPT_MTUSIZE = 26 -DHCP_OPT_LOCALSUBNETS = 27 -DHCP_OPT_BROADCASTADDR = 28 -DHCP_OPT_DOMASKDISCOV = 29 -DHCP_OPT_MASKSUPPLY = 30 -DHCP_OPT_DOROUTEDISC = 31 -DHCP_OPT_ROUTERSOLICIT = 32 -DHCP_OPT_STATICROUTE = 33 -DHCP_OPT_TRAILERENCAP = 34 -DHCP_OPT_ARPTIMEOUT = 35 -DHCP_OPT_ETHERENCAP = 36 -DHCP_OPT_TCPTTL = 37 -DHCP_OPT_TCPKEEPALIVE = 38 -DHCP_OPT_TCPALIVEGARBAGE = 39 -DHCP_OPT_NISDOMAIN = 40 -DHCP_OPT_NISSERVERS = 41 -DHCP_OPT_NISTIMESERV = 42 -DHCP_OPT_VENDSPECIFIC = 43 -DHCP_OPT_NBNS = 44 -DHCP_OPT_NBDD = 45 -DHCP_OPT_NBTCPIP = 46 -DHCP_OPT_NBTCPSCOPE = 47 -DHCP_OPT_XFONT = 48 -DHCP_OPT_XDISPLAYMGR = 49 -DHCP_OPT_REQ_IP = 50 # I: IP address -DHCP_OPT_LEASE_SEC = 51 # I: lease seconds -DHCP_OPT_OPTIONOVERLOAD = 52 -DHCP_OPT_MSGTYPE = 53 # B: message type -DHCP_OPT_SERVER_ID = 54 # I: server IP address -DHCP_OPT_PARAM_REQ = 55 # s: list of option codes -DHCP_OPT_MESSAGE = 56 -DHCP_OPT_MAXMSGSIZE = 57 -DHCP_OPT_RENEWTIME = 58 -DHCP_OPT_REBINDTIME = 59 -DHCP_OPT_VENDOR_ID = 60 # s: vendor class id -DHCP_OPT_CLIENT_ID = 61 # Bs: idtype, id (idtype 0: FQDN, idtype 1: MAC) -DHCP_OPT_NISPLUSDOMAIN = 64 -DHCP_OPT_NISPLUSSERVERS = 65 -DHCP_OPT_MOBILEIPAGENT = 68 -DHCP_OPT_SMTPSERVER = 69 -DHCP_OPT_POP3SERVER = 70 -DHCP_OPT_NNTPSERVER = 71 -DHCP_OPT_WWWSERVER = 72 -DHCP_OPT_FINGERSERVER = 73 -DHCP_OPT_IRCSERVER = 74 -DHCP_OPT_STSERVER = 75 -DHCP_OPT_STDASERVER = 76 - -# DHCP message type values -DHCPDISCOVER = 1 -DHCPOFFER = 2 -DHCPREQUEST = 3 -DHCPDECLINE = 4 -DHCPACK = 5 -DHCPNAK = 6 -DHCPRELEASE = 7 -DHCPINFORM = 8 - - -class DHCP(dpkt.Packet): - __hdr__ = ( - ('op', 'B', DHCP_OP_REQUEST), - ('hrd', 'B', arp.ARP_HRD_ETH), # just like ARP.hrd - ('hln', 'B', 6), # and ARP.hln - ('hops', 'B', 0), - ('xid', 'I', 0xdeadbeefL), - ('secs', 'H', 0), - ('flags', 'H', 0), - ('ciaddr', 'I', 0), - ('yiaddr', 'I', 0), - ('siaddr', 'I', 0), - ('giaddr', 'I', 0), - ('chaddr', '16s', 16 * '\x00'), - ('sname', '64s', 64 * '\x00'), - ('file', '128s', 128 * '\x00'), - ('magic', 'I', DHCP_MAGIC), - ) - opts = ( - (DHCP_OPT_MSGTYPE, chr(DHCPDISCOVER)), - (DHCP_OPT_PARAM_REQ, ''.join(map(chr, (DHCP_OPT_REQ_IP, - DHCP_OPT_ROUTER, - DHCP_OPT_NETMASK, - DHCP_OPT_DNS_SVRS)))) - ) # list of (type, data) tuples - - def __len__(self): - return self.__hdr_len__ + \ - sum([2 + len(o[1]) for o in self.opts]) + 1 + len(self.data) - - def __str__(self): - return self.pack_hdr() + self.pack_opts() + str(self.data) - - def pack_opts(self): - """Return packed options string.""" - if not self.opts: - return '' - l = [] - for t, data in self.opts: - l.append('%s%s%s' % (chr(t), chr(len(data)), data)) - l.append('\xff') - return ''.join(l) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.chaddr = self.chaddr[:self.hln] - buf = self.data - l = [] - while buf: - t = ord(buf[0]) - if t == 0xff: - buf = buf[1:] - break - elif t == 0: - buf = buf[1:] - else: - n = ord(buf[1]) - l.append((t, buf[2:2 + n])) - buf = buf[2 + n:] - self.opts = l - self.data = buf - - -def test_dhcp(): - s = '\x01\x01\x06\x00\xadS\xc8c\xb8\x87\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02U\x82\xf3\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Sc5\x01\x01\xfb\x01\x01=\x07\x01\x00\x02U\x82\xf3\xa62\x04\n\x00\x01e\x0c\tGuinevere<\x08MSFT 5.07\n\x01\x0f\x03\x06,./\x1f!+\xff\x00\x00\x00\x00\x00' - dhcp = DHCP(s) - assert (s == str(dhcp)) - - -if __name__ == '__main__': - test_dhcp() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/diameter.py b/external_libs/python/dpkt-1.8.6.2/dpkt/diameter.py deleted file mode 100644 index a6994276..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/diameter.py +++ /dev/null @@ -1,243 +0,0 @@ -# $Id: diameter.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Diameter.""" - -import struct -import dpkt -from decorators import deprecated - -# Diameter Base Protocol - RFC 3588 -# http://tools.ietf.org/html/rfc3588 - -# Request/Answer Command Codes -ABORT_SESSION = 274 -ACCOUTING = 271 -CAPABILITIES_EXCHANGE = 257 -DEVICE_WATCHDOG = 280 -DISCONNECT_PEER = 282 -RE_AUTH = 258 -SESSION_TERMINATION = 275 - - -class Diameter(dpkt.Packet): - __hdr__ = ( - ('v', 'B', 1), - ('len', '3s', 0), - ('flags', 'B', 0), - ('cmd', '3s', 0), - ('app_id', 'I', 0), - ('hop_id', 'I', 0), - ('end_id', 'I', 0) - ) - - @property - def request_flag(self): - return (self.flags >> 7) & 0x1 - - @request_flag.setter - def request_flag(self, r): - self.flags = (self.flags & ~0x80) | ((r & 0x1) << 7) - - @property - def proxiable_flag(self): - return (self.flags >> 6) & 0x1 - - @proxiable_flag.setter - def proxiable_flag(self, p): - self.flags = (self.flags & ~0x40) | ((p & 0x1) << 6) - - @property - def error_flag(self): - return (self.flags >> 5) & 0x1 - - @error_flag.setter - def error_flag(self, e): - self.flags = (self.flags & ~0x20) | ((e & 0x1) << 5) - - @property - def retransmit_flag(self): - return (self.flags >> 4) & 0x1 - - @retransmit_flag.setter - def retransmit_flag(self, t): - self.flags = (self.flags & ~0x10) | ((t & 0x1) << 4) - - # Deprecated methods, will be removed in the future - # ====================================================== - @deprecated - def _get_r(self): return self.request_flag - - @deprecated - def _set_r(self, r): self.request_flag = r - - @deprecated - def _get_p(self): return self.proxiable_flag - - @deprecated - def _set_p(self, p): self.proxiable_flag = p - - @deprecated - def _get_e(self): return self.error_flag - - @deprecated - def _set_e(self, e): self.error_flag = e - - @deprecated - def _get_t(self): return self.request_flag - - @deprecated - def _set_t(self, t): self.request_flag = t - - # ====================================================== - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.cmd = (ord(self.cmd[0]) << 16) | (ord(self.cmd[1]) << 8) | (ord(self.cmd[2])) - self.len = (ord(self.len[0]) << 16) | (ord(self.len[1]) << 8) | (ord(self.len[2])) - self.data = self.data[:self.len - self.__hdr_len__] - - l = [] - while self.data: - avp = AVP(self.data) - l.append(avp) - self.data = self.data[len(avp):] - self.data = self.avps = l - - def pack_hdr(self): - self.len = chr((self.len >> 16) & 0xff) + chr((self.len >> 8) & 0xff) + chr(self.len & 0xff) - self.cmd = chr((self.cmd >> 16) & 0xff) + chr((self.cmd >> 8) & 0xff) + chr(self.cmd & 0xff) - return dpkt.Packet.pack_hdr(self) - - def __len__(self): - return self.__hdr_len__ + sum(map(len, self.data)) - - def __str__(self): - return self.pack_hdr() + ''.join(map(str, self.data)) - - -class AVP(dpkt.Packet): - __hdr__ = ( - ('code', 'I', 0), - ('flags', 'B', 0), - ('len', '3s', 0), - ) - - @property - def vendor_flag(self): - return (self.flags >> 7) & 0x1 - - @vendor_flag.setter - def vendor_flag(self, v): - self.flags = (self.flags & ~0x80) | ((v & 0x1) << 7) - - @property - def mandatory_flag(self): - return (self.flags >> 6) & 0x1 - - @mandatory_flag.setter - def mandatory_flag(self, m): - self.flags = (self.flags & ~0x40) | ((m & 0x1) << 6) - - @property - def protected_flag(self): - return (self.flags >> 5) & 0x1 - - @protected_flag.setter - def protected_flag(self, p): - self.flags = (self.flags & ~0x20) | ((p & 0x1) << 5) - - # Deprecated methods, will be removed in the future - # ====================================================== - @deprecated - def _get_v(self): - return self.vendor_flag - - @deprecated - def _set_v(self, v): - self.vendor_flag = v - - @deprecated - def _get_m(self): - return self.mandatory_flag - - @deprecated - def _set_m(self, m): - self.mandatory_flag = m - - @deprecated - def _get_p(self): - return self.protected_flag - - @deprecated - def _set_p(self, p): - self.protected_flag = p - - # ====================================================== - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.len = (ord(self.len[0]) << 16) | (ord(self.len[1]) << 8) | (ord(self.len[2])) - - if self.vendor_flag: - self.vendor = struct.unpack('>I', self.data[:4])[0] - self.data = self.data[4:self.len - self.__hdr_len__] - else: - self.data = self.data[:self.len - self.__hdr_len__] - - def pack_hdr(self): - self.len = chr((self.len >> 16) & 0xff) + chr((self.len >> 8) & 0xff) + chr(self.len & 0xff) - data = dpkt.Packet.pack_hdr(self) - if self.vendor_flag: - data += struct.pack('>I', self.vendor) - return data - - def __len__(self): - length = self.__hdr_len__ + sum(map(len, self.data)) - if self.vendor_flag: - length += 4 - return length - - -__s = '\x01\x00\x00\x28\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x41\xc8\x00\x00\x00\x0c\x00\x00\x01\x08\x40\x00\x00\x0c\x68\x30\x30\x32\x00\x00\x01\x28\x40\x00\x00\x08' -__t = '\x01\x00\x00\x2c\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x41\xc8\x00\x00\x00\x0c\x00\x00\x01\x08\xc0\x00\x00\x10\xde\xad\xbe\xef\x68\x30\x30\x32\x00\x00\x01\x28\x40\x00\x00\x08' - - -def test_pack(): - d = Diameter(__s) - assert (__s == str(d)) - d = Diameter(__t) - assert (__t == str(d)) - - -def test_unpack(): - d = Diameter(__s) - assert (d.len == 40) - # assert (d.cmd == DEVICE_WATCHDOG_REQUEST) - assert (d.request_flag == 1) - assert (d.error_flag == 0) - assert (len(d.avps) == 2) - - avp = d.avps[0] - # assert (avp.code == ORIGIN_HOST) - assert (avp.mandatory_flag == 1) - assert (avp.vendor_flag == 0) - assert (avp.len == 12) - assert (len(avp) == 12) - assert (avp.data == '\x68\x30\x30\x32') - - # also test the optional vendor id support - d = Diameter(__t) - assert (d.len == 44) - avp = d.avps[0] - assert (avp.vendor_flag == 1) - assert (avp.len == 16) - assert (len(avp) == 16) - assert (avp.vendor == 3735928559) - assert (avp.data == '\x68\x30\x30\x32') - - -if __name__ == '__main__': - test_pack() - test_unpack() - print 'Tests Successful...' - diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/dns.py b/external_libs/python/dpkt-1.8.6.2/dpkt/dns.py deleted file mode 100644 index d4d08e47..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/dns.py +++ /dev/null @@ -1,462 +0,0 @@ -# $Id: dns.py 27 2006-11-21 01:22:52Z dahelder $ -# -*- coding: utf-8 -*- -"""Domain Name System.""" - -import struct -import dpkt -from decorators import deprecated - -DNS_Q = 0 -DNS_R = 1 - -# Opcodes -DNS_QUERY = 0 -DNS_IQUERY = 1 -DNS_STATUS = 2 -DNS_NOTIFY = 4 -DNS_UPDATE = 5 - -# Flags -DNS_CD = 0x0010 # checking disabled -DNS_AD = 0x0020 # authenticated data -DNS_Z = 0x0040 # unused -DNS_RA = 0x0080 # recursion available -DNS_RD = 0x0100 # recursion desired -DNS_TC = 0x0200 # truncated -DNS_AA = 0x0400 # authoritative answer -DNS_QR = 0x8000 # response ( query / response ) - -# Response codes -DNS_RCODE_NOERR = 0 -DNS_RCODE_FORMERR = 1 -DNS_RCODE_SERVFAIL = 2 -DNS_RCODE_NXDOMAIN = 3 -DNS_RCODE_NOTIMP = 4 -DNS_RCODE_REFUSED = 5 -DNS_RCODE_YXDOMAIN = 6 -DNS_RCODE_YXRRSET = 7 -DNS_RCODE_NXRRSET = 8 -DNS_RCODE_NOTAUTH = 9 -DNS_RCODE_NOTZONE = 10 - -# RR types -DNS_A = 1 -DNS_NS = 2 -DNS_CNAME = 5 -DNS_SOA = 6 -DNS_PTR = 12 -DNS_HINFO = 13 -DNS_MX = 15 -DNS_TXT = 16 -DNS_AAAA = 28 -DNS_SRV = 33 - -# RR classes -DNS_IN = 1 -DNS_CHAOS = 3 -DNS_HESIOD = 4 -DNS_ANY = 255 - - -def pack_name(name, off, label_ptrs): - if name: - labels = name.split('.') - else: - labels = [] - labels.append('') - buf = '' - for i, label in enumerate(labels): - key = '.'.join(labels[i:]).upper() - ptr = label_ptrs.get(key) - if not ptr: - if len(key) > 1: - ptr = off + len(buf) - if ptr < 0xc000: - label_ptrs[key] = ptr - i = len(label) - buf += chr(i) + label - else: - buf += struct.pack('>H', (0xc000 | ptr)) - break - return buf - - -def unpack_name(buf, off): - name = '' - saved_off = 0 - for _ in range(100): # XXX - n = ord(buf[off]) - if n == 0: - off += 1 - break - elif (n & 0xc0) == 0xc0: - ptr = struct.unpack('>H', buf[off:off + 2])[0] & 0x3fff - off += 2 - if not saved_off: - saved_off = off - # XXX - don't use recursion!@#$ - name = name + unpack_name(buf, ptr)[0] + '.' - break - else: - off += 1 - name = name + buf[off:off + n] + '.' - if len(name) > 255: - raise dpkt.UnpackError('name longer than 255 bytes') - off += n - return name.strip('.'), off - - -class DNS(dpkt.Packet): - __hdr__ = ( - ('id', 'H', 0), - ('op', 'H', DNS_RD), # recursive query - # XXX - lists of query, RR objects - ('qd', 'H', []), - ('an', 'H', []), - ('ns', 'H', []), - ('ar', 'H', []) - ) - - @property - def qr(self): - return int((self.op & DNS_QR) == DNS_QR) - - @qr.setter - def qr(self, v): - if v: - self.op |= DNS_QR - else: - self.op &= ~DNS_QR - - @property - def opcode(self): - return (self.op >> 11) & 0xf - - @opcode.setter - def opcode(self, v): - self.op = (self.op & ~0x7800) | ((v & 0xf) << 11) - - @property - def aa(self): - return int((self.op & DNS_AA) == DNS_AA) - - @aa.setter - def aa(self, v): - if v: - self.op |= DNS_AA - else: - self.op &= ~DNS_AA - - @property - def rd(self): - return int((self.op & DNS_RD) == DNS_RD) - - @rd.setter - def rd(self, v): - if v: - self.op |= DNS_RD - else: - self.op &= ~DNS_RD - - @property - def ra(self): - return int((self.op & DNS_RA) == DNS_RA) - - @ra.setter - def ra(self, v): - if v: - self.op |= DNS_RA - else: - self.op &= ~DNS_RA - - @property - def zero(self): - return int((self.op & DNS_Z) == DNS_Z) - - @zero.setter - def zero(self, v): - if v: - self.op |= DNS_Z - else: - self.op &= ~DNS_Z - - @property - def rcode(self): - return self.op & 0xf - - @rcode.setter - def rcode(self, v): - self.op = (self.op & ~0xf) | (v & 0xf) - - # Deprecated methods, will be removed in the future - # ====================================================== - @deprecated - def get_qr(self): - return self.qr - - @deprecated - def set_qr(self, v): - self.qr = v - - @deprecated - def get_opcode(self): - return self.opcode - - @deprecated - def set_opcode(self, v): - self.opcode = v - - @deprecated - def get_aa(self): - return self.aa - - @deprecated - def set_aa(self, v): - self.aa = v - - @deprecated - def get_rd(self): - return self.rd - - @deprecated - def set_rd(self, v): - self.rd = v - - @deprecated - def get_ra(self): - return self.ra - - @deprecated - def set_ra(self, v): - self.ra = v - - @deprecated - def get_zero(self): - return self.zero - - @deprecated - def set_zero(self, v): - self.zero = v - - @deprecated - def get_rcode(self): - return self.rcode - - @deprecated - def set_rcode(self, v): - self.rcode = v - - # ====================================================== - - class Q(dpkt.Packet): - """DNS question.""" - __hdr__ = ( - ('name', '1025s', ''), - ('type', 'H', DNS_A), - ('cls', 'H', DNS_IN) - ) - - # XXX - suk - def __len__(self): - raise NotImplementedError - - __str__ = __len__ - - def unpack(self, buf): - raise NotImplementedError - - class RR(Q): - """DNS resource record.""" - __hdr__ = ( - ('name', '1025s', ''), - ('type', 'H', DNS_A), - ('cls', 'H', DNS_IN), - ('ttl', 'I', 0), - ('rlen', 'H', 4), - ('rdata', 's', '') - ) - - def pack_rdata(self, off, label_ptrs): - # XXX - yeah, this sux - if self.rdata: - return self.rdata - if self.type == DNS_A: - return self.ip - elif self.type == DNS_NS: - return pack_name(self.nsname, off, label_ptrs) - elif self.type == DNS_CNAME: - return pack_name(self.cname, off, label_ptrs) - elif self.type == DNS_PTR: - return pack_name(self.ptrname, off, label_ptrs) - elif self.type == DNS_SOA: - l = [] - l.append(pack_name(self.mname, off, label_ptrs)) - l.append(pack_name(self.rname, off + len(l[0]), label_ptrs)) - l.append(struct.pack('>IIIII', self.serial, self.refresh, - self.retry, self.expire, self.minimum)) - return ''.join(l) - elif self.type == DNS_MX: - return struct.pack('>H', self.preference) + \ - pack_name(self.mxname, off + 2, label_ptrs) - elif self.type == DNS_TXT or self.type == DNS_HINFO: - return ''.join(['%s%s' % (chr(len(x)), x) - for x in self.text]) - elif self.type == DNS_AAAA: - return self.ip6 - elif self.type == DNS_SRV: - return struct.pack('>HHH', self.priority, self.weight, self.port) + \ - pack_name(self.srvname, off + 6, label_ptrs) - - def unpack_rdata(self, buf, off): - if self.type == DNS_A: - self.ip = self.rdata - elif self.type == DNS_NS: - self.nsname, off = unpack_name(buf, off) - elif self.type == DNS_CNAME: - self.cname, off = unpack_name(buf, off) - elif self.type == DNS_PTR: - self.ptrname, off = unpack_name(buf, off) - elif self.type == DNS_SOA: - self.mname, off = unpack_name(buf, off) - self.rname, off = unpack_name(buf, off) - self.serial, self.refresh, self.retry, self.expire, \ - self.minimum = struct.unpack('>IIIII', buf[off:off + 20]) - elif self.type == DNS_MX: - self.preference = struct.unpack('>H', self.rdata[:2]) - self.mxname, off = unpack_name(buf, off + 2) - elif self.type == DNS_TXT or self.type == DNS_HINFO: - self.text = [] - buf = self.rdata - while buf: - n = ord(buf[0]) - self.text.append(buf[1:1 + n]) - buf = buf[1 + n:] - elif self.type == DNS_AAAA: - self.ip6 = self.rdata - elif self.type == DNS_SRV: - self.priority, self.weight, self.port = struct.unpack('>HHH', self.rdata[:6]) - self.srvname, off = unpack_name(buf, off + 6) - - def pack_q(self, buf, q): - """Append packed DNS question and return buf.""" - return buf + pack_name(q.name, len(buf), self.label_ptrs) + struct.pack('>HH', q.type, q.cls) - - def unpack_q(self, buf, off): - """Return DNS question and new offset.""" - q = self.Q() - q.name, off = unpack_name(buf, off) - q.type, q.cls = struct.unpack('>HH', buf[off:off + 4]) - off += 4 - return q, off - - def pack_rr(self, buf, rr): - """Append packed DNS RR and return buf.""" - name = pack_name(rr.name, len(buf), self.label_ptrs) - rdata = rr.pack_rdata(len(buf) + len(name) + 10, self.label_ptrs) - return buf + name + struct.pack('>HHIH', rr.type, rr.cls, rr.ttl, len(rdata)) + rdata - - def unpack_rr(self, buf, off): - """Return DNS RR and new offset.""" - rr = self.RR() - rr.name, off = unpack_name(buf, off) - rr.type, rr.cls, rr.ttl, rdlen = struct.unpack('>HHIH', buf[off:off + 10]) - off += 10 - rr.rdata = buf[off:off + rdlen] - rr.unpack_rdata(buf, off) - off += rdlen - return rr, off - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - off = self.__hdr_len__ - cnt = self.qd # FIXME: This relies on this being properly set somewhere else - self.qd = [] - for _ in range(cnt): - q, off = self.unpack_q(buf, off) - self.qd.append(q) - for x in ('an', 'ns', 'ar'): - cnt = getattr(self, x, 0) - setattr(self, x, []) - for _ in range(cnt): - rr, off = self.unpack_rr(buf, off) - getattr(self, x).append(rr) - self.data = '' - - def __len__(self): - # XXX - cop out - return len(str(self)) - - def __str__(self): - # XXX - compress names on the fly - self.label_ptrs = {} - buf = struct.pack(self.__hdr_fmt__, self.id, self.op, len(self.qd), - len(self.an), len(self.ns), len(self.ar)) - for q in self.qd: - buf = self.pack_q(buf, q) - for x in ('an', 'ns', 'ar'): - for rr in getattr(self, x): - buf = self.pack_rr(buf, rr) - del self.label_ptrs - return buf - - -def test_basic(): - from ip import IP - - s = 'E\x00\x02\x08\xc15\x00\x00\x80\x11\x92aBk0\x01Bk0w\x005\xc07\x01\xf4\xda\xc2d\xd2\x81\x80\x00\x01\x00\x03\x00\x0b\x00\x0b\x03www\x06google\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x05\x00\x01\x00\x00\x03V\x00\x17\x03www\x06google\x06akadns\x03net\x00\xc0,\x00\x01\x00\x01\x00\x00\x01\xa3\x00\x04@\xe9\xabh\xc0,\x00\x01\x00\x01\x00\x00\x01\xa3\x00\x04@\xe9\xabc\xc07\x00\x02\x00\x01\x00\x00KG\x00\x0c\x04usw5\x04akam\xc0>\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04usw6\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04usw7\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x08\x05asia3\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02za\xc07\xc07\x00\x02\x00\x01\x00\x00KG\x00\x0f\x02zc\x06akadns\x03org\x00\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02zf\xc07\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02zh\xc0\xd5\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04eur3\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04use2\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04use4\xc0t\xc0\xc1\x00\x01\x00\x01\x00\x00\xfb4\x00\x04\xd0\xb9\x84\xb0\xc0\xd2\x00\x01\x00\x01\x00\x001\x0c\x00\x04?\xf1\xc76\xc0\xed\x00\x01\x00\x01\x00\x00\xfb4\x00\x04?\xd7\xc6S\xc0\xfe\x00\x01\x00\x01\x00\x001\x0c\x00\x04?\xd00.\xc1\x0f\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04\xc1-\x01g\xc1"\x00\x01\x00\x01\x00\x00\x101\x00\x04?\xd1\xaa\x88\xc15\x00\x01\x00\x01\x00\x00\r\x1a\x00\x04PCC\xb6\xc0o\x00\x01\x00\x01\x00\x00\x10\x7f\x00\x04?\xf1I\xd6\xc0\x87\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04\xce\x84dl\xc0\x9a\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04A\xcb\xea\x1b\xc0\xad\x00\x01\x00\x01\x00\x00\x0b)\x00\x04\xc1l\x9a\t' - ip = IP(s) - my_dns = DNS(ip.udp.data) - assert my_dns.qd[0].name == 'www.google.com' and my_dns.an[1].name == 'www.google.akadns.net' - s = '\x05\xf5\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x03cnn\x03com\x00\x00\x01\x00\x01' - my_dns = DNS(s) - assert s == str(my_dns) - - -def test_PTR(): - s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' - my_dns = DNS(s) - assert my_dns.qd[0].name == '1.1.211.141.in-addr.arpa' and \ - my_dns.an[0].ptrname == 'default.v-umce-ifs.umnet.umich.edu' and \ - my_dns.ns[0].nsname == 'shabby.ifs.umich.edu' and \ - my_dns.ns[1].ttl == 3382L and \ - my_dns.ns[2].nsname == 'dns2.itd.umich.edu' - assert s == str(my_dns) - - -def test_pack_name(): - # Empty name is \0 - x = pack_name('', 0, {}) - assert x == '\0' - - -def test_deprecated_methods(): - """Test deprecated methods. Note: when they are removed so should this test""" - s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' - my_dns = DNS(s) - my_dns.get_aa() - my_dns.get_opcode() - qr = my_dns.get_qr() - my_dns.set_qr(qr) - qr2 = my_dns.get_qr() - assert qr == qr2 - - -def test_deprecated_method_performance(): - """Test the performance hit for the deprecation decorator""" - from timeit import Timer - - s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' - my_dns = DNS(s) - t1 = Timer(lambda: my_dns.aa).timeit(10000) - t2 = Timer(my_dns.get_aa).timeit(10000) - print 'Performance of dns.aa vs. dns.get_aa(): %f %f' % (t1, t2) - - -if __name__ == '__main__': - # Runs all the test associated with this class/file - test_basic() - test_PTR() - test_pack_name() - test_deprecated_methods() - test_deprecated_method_performance() - print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/dpkt.py b/external_libs/python/dpkt-1.8.6.2/dpkt/dpkt.py deleted file mode 100644 index 0ed3780f..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/dpkt.py +++ /dev/null @@ -1,176 +0,0 @@ -# $Id: dpkt.py 43 2007-08-02 22:42:59Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Simple packet creation and parsing.""" - -import copy -import itertools -import socket -import struct -import array - - -class Error(Exception): pass - - -class UnpackError(Error): pass - - -class NeedData(UnpackError): pass - - -class PackError(Error): pass - - -class _MetaPacket(type): - def __new__(cls, clsname, clsbases, clsdict): - t = type.__new__(cls, clsname, clsbases, clsdict) - st = getattr(t, '__hdr__', None) - if st is not None: - # XXX - __slots__ only created in __new__() - clsdict['__slots__'] = [x[0] for x in st] + ['data'] - t = type.__new__(cls, clsname, clsbases, clsdict) - t.__hdr_fields__ = [x[0] for x in st] - t.__hdr_fmt__ = getattr(t, '__byte_order__', '>') + \ - ''.join([x[1] for x in st]) - t.__hdr_len__ = struct.calcsize(t.__hdr_fmt__) - t.__hdr_defaults__ = dict(zip( - t.__hdr_fields__, [x[2] for x in st])) - return t - - -class Packet(object): - """Base packet class, with metaclass magic to generate members from - self.__hdr__. - - __hdr__ should be defined as a list of (name, structfmt, default) tuples - __byte_order__ can be set to override the default ('>') - - Example:: - - >>> class Foo(Packet): - ... __hdr__ = (('foo', 'I', 1), ('bar', 'H', 2), ('baz', '4s', 'quux')) - ... - >>> foo = Foo(bar=3) - >>> foo - Foo(bar=3) - >>> str(foo) - '\x00\x00\x00\x01\x00\x03quux' - >>> foo.bar - 3 - >>> foo.baz - 'quux' - >>> foo.foo = 7 - >>> foo.baz = 'whee' - >>> foo - Foo(baz='whee', foo=7, bar=3) - >>> Foo('hello, world!') - Foo(baz=' wor', foo=1751477356L, bar=28460, data='ld!') - """ - __metaclass__ = _MetaPacket - - def __init__(self, *args, **kwargs): - """Packet constructor with ([buf], [field=val,...]) prototype. - - Arguments: - - buf -- optional packet buffer to unpack - - Optional keyword arguments correspond to members to set - (matching fields in self.__hdr__, or 'data'). - """ - self.data = '' - if args: - try: - self.unpack(args[0]) - except struct.error: - if len(args[0]) < self.__hdr_len__: - raise NeedData - raise UnpackError('invalid %s: %r' % - (self.__class__.__name__, args[0])) - else: - for k in self.__hdr_fields__: - setattr(self, k, copy.copy(self.__hdr_defaults__[k])) - for k, v in kwargs.iteritems(): - setattr(self, k, v) - - def __len__(self): - return self.__hdr_len__ + len(self.data) - - def __getitem__(self, k): - try: - return getattr(self, k) - except AttributeError: - raise KeyError - - def __repr__(self): - l = ['%s=%r' % (k, getattr(self, k)) - for k in self.__hdr_defaults__ - if getattr(self, k) != self.__hdr_defaults__[k]] - if self.data: - l.append('data=%r' % self.data) - return '%s(%s)' % (self.__class__.__name__, ', '.join(l)) - - def __str__(self): - return self.pack_hdr() + str(self.data) - - def pack_hdr(self): - """Return packed header string.""" - try: - return struct.pack(self.__hdr_fmt__, - *[getattr(self, k) for k in self.__hdr_fields__]) - except struct.error: - vals = [] - for k in self.__hdr_fields__: - v = getattr(self, k) - if isinstance(v, tuple): - vals.extend(v) - else: - vals.append(v) - try: - return struct.pack(self.__hdr_fmt__, *vals) - except struct.error, e: - raise PackError(str(e)) - - def pack(self): - """Return packed header + self.data string.""" - return str(self) - - def unpack(self, buf): - """Unpack packet header fields from buf, and set self.data.""" - for k, v in itertools.izip(self.__hdr_fields__, - struct.unpack(self.__hdr_fmt__, buf[:self.__hdr_len__])): - setattr(self, k, v) - self.data = buf[self.__hdr_len__:] - -# XXX - ''.join([(len(`chr(x)`)==3) and chr(x) or '.' for x in range(256)]) -__vis_filter = """................................ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[.]^_`abcdefghijklmnopqrstuvwxyz{|}~.................................................................................................................................""" - - -def hexdump(buf, length=16): - """Return a hexdump output string of the given buffer.""" - n = 0 - res = [] - while buf: - line, buf = buf[:length], buf[length:] - hexa = ' '.join(['%02x' % ord(x) for x in line]) - line = line.translate(__vis_filter) - res.append(' %04d: %-*s %s' % (n, length * 3, hexa, line)) - n += length - return '\n'.join(res) - -def in_cksum_add(s, buf): - n = len(buf) - cnt = (n / 2) * 2 - a = array.array('H', buf[:cnt]) - if cnt != n: - a.append(struct.unpack('H', buf[-1] + '\x00')[0]) - return s + sum(a) - -def in_cksum_done(s): - s = (s >> 16) + (s & 0xffff) - s += (s >> 16) - return socket.ntohs(~s & 0xffff) - -def in_cksum(buf): - """Return computed Internet checksum.""" - return in_cksum_done(in_cksum_add(0, buf)) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/dtp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/dtp.py deleted file mode 100644 index 9fc7ec9f..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/dtp.py +++ /dev/null @@ -1,26 +0,0 @@ -# $Id: dtp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Dynamic Trunking Protocol.""" - -import struct -import dpkt - - -class DTP(dpkt.Packet): - __hdr__ = ( - ('v', 'B', 0), - ) # rest is TLVs - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - buf = self.data - tvs = [] - while buf: - t, l = struct.unpack('>HH', buf[:4]) - v, buf = buf[4:4 + l], buf[4 + l:] - tvs.append((t, v)) - self.data = tvs - - -TRUNK_NAME = 0x01 -MAC_ADDR = 0x04 diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/esp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/esp.py deleted file mode 100644 index 94295d39..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/esp.py +++ /dev/null @@ -1,12 +0,0 @@ -# $Id: esp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Encapsulated Security Protocol.""" - -import dpkt - - -class ESP(dpkt.Packet): - __hdr__ = ( - ('spi', 'I', 0), - ('seq', 'I', 0) - ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ethernet.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ethernet.py deleted file mode 100644 index d8d8700f..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/ethernet.py +++ /dev/null @@ -1,145 +0,0 @@ -# $Id: ethernet.py 65 2010-03-26 02:53:51Z dugsong $ -# -*- coding: utf-8 -*- -"""Ethernet II, LLC (802.3+802.2), LLC/SNAP, and Novell raw 802.3, -with automatic 802.1q, MPLS, PPPoE, and Cisco ISL decapsulation.""" - -import struct -import dpkt -import stp - - -ETH_CRC_LEN = 4 -ETH_HDR_LEN = 14 - -ETH_LEN_MIN = 64 # minimum frame length with CRC -ETH_LEN_MAX = 1518 # maximum frame length with CRC - -ETH_MTU = (ETH_LEN_MAX - ETH_HDR_LEN - ETH_CRC_LEN) -ETH_MIN = (ETH_LEN_MIN - ETH_HDR_LEN - ETH_CRC_LEN) - -# Ethernet payload types - http://standards.ieee.org/regauth/ethertype -ETH_TYPE_PUP = 0x0200 # PUP protocol -ETH_TYPE_IP = 0x0800 # IP protocol -ETH_TYPE_ARP = 0x0806 # address resolution protocol -ETH_TYPE_AOE = 0x88a2 # AoE protocol -ETH_TYPE_CDP = 0x2000 # Cisco Discovery Protocol -ETH_TYPE_DTP = 0x2004 # Cisco Dynamic Trunking Protocol -ETH_TYPE_REVARP = 0x8035 # reverse addr resolution protocol -ETH_TYPE_8021Q = 0x8100 # IEEE 802.1Q VLAN tagging -ETH_TYPE_IPX = 0x8137 # Internetwork Packet Exchange -ETH_TYPE_IP6 = 0x86DD # IPv6 protocol -ETH_TYPE_PPP = 0x880B # PPP -ETH_TYPE_MPLS = 0x8847 # MPLS -ETH_TYPE_MPLS_MCAST = 0x8848 # MPLS Multicast -ETH_TYPE_PPPoE_DISC = 0x8863 # PPP Over Ethernet Discovery Stage -ETH_TYPE_PPPoE = 0x8864 # PPP Over Ethernet Session Stage -ETH_TYPE_LLDP = 0x88CC # Link Layer Discovery Protocol - -# MPLS label stack fields -MPLS_LABEL_MASK = 0xfffff000 -MPLS_QOS_MASK = 0x00000e00 -MPLS_TTL_MASK = 0x000000ff -MPLS_LABEL_SHIFT = 12 -MPLS_QOS_SHIFT = 9 -MPLS_TTL_SHIFT = 0 -MPLS_STACK_BOTTOM = 0x0100 - - -class Ethernet(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', ''), - ('src', '6s', ''), - ('type', 'H', ETH_TYPE_IP) - ) - _typesw = {} - - def _unpack_data(self, buf): - if self.type == ETH_TYPE_8021Q: - self.tag, self.type = struct.unpack('>HH', buf[:4]) - buf = buf[4:] - elif self.type == ETH_TYPE_MPLS or self.type == ETH_TYPE_MPLS_MCAST: - # XXX - skip labels (max # of labels is undefined, just use 24) - self.labels = [] - for i in range(24): - entry = struct.unpack('>I', buf[i * 4:i * 4 + 4])[0] - label = ((entry & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT, - (entry & MPLS_QOS_MASK) >> MPLS_QOS_SHIFT, - (entry & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT) - self.labels.append(label) - if entry & MPLS_STACK_BOTTOM: - break - self.type = ETH_TYPE_IP - buf = buf[(i + 1) * 4:] - try: - self.data = self._typesw[self.type](buf) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - self.data = buf - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.type > 1500: - # Ethernet II - self._unpack_data(self.data) - elif self.dst.startswith('\x01\x00\x0c\x00\x00') or \ - self.dst.startswith('\x03\x00\x0c\x00\x00'): - # Cisco ISL - self.vlan = struct.unpack('>H', self.data[6:8])[0] - self.unpack(self.data[12:]) - elif self.data.startswith('\xff\xff'): - # Novell "raw" 802.3 - self.type = ETH_TYPE_IPX - self.data = self.ipx = self._typesw[ETH_TYPE_IPX](self.data[2:]) - else: - # 802.2 LLC - self.dsap, self.ssap, self.ctl = struct.unpack('BBB', self.data[:3]) - if self.data.startswith('\xaa\xaa'): - # SNAP - self.type = struct.unpack('>H', self.data[6:8])[0] - self._unpack_data(self.data[8:]) - else: - # non-SNAP - dsap = ord(self.data[0]) - if dsap == 0x06: # SAP_IP - self.data = self.ip = self._typesw[ETH_TYPE_IP](self.data[3:]) - elif dsap == 0x10 or dsap == 0xe0: # SAP_NETWARE{1,2} - self.data = self.ipx = self._typesw[ETH_TYPE_IPX](self.data[3:]) - elif dsap == 0x42: # SAP_STP - self.data = self.stp = stp.STP(self.data[3:]) - - @classmethod - def set_type(cls, t, pktclass): - cls._typesw[t] = pktclass - - @classmethod - def get_type(cls, t): - return cls._typesw[t] - - -# XXX - auto-load Ethernet dispatch table from ETH_TYPE_* definitions -def __load_types(): - g = globals() - for k, v in g.iteritems(): - if k.startswith('ETH_TYPE_'): - name = k[9:] - modname = name.lower() - try: - mod = __import__(modname, g) - except ImportError: - continue - Ethernet.set_type(v, getattr(mod, name)) - - -if not Ethernet._typesw: - __load_types() - - -def test_eth(): # TODO recheck this test - s = '\x00\xb0\xd0\xe1\x80r\x00\x11$\x8c\x11\xde\x86\xdd`\x00\x00\x00\x00(\x06@\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x11$\xff\xfe\x8c\x11\xde\xfe\x80\x00\x00\x00\x00\x00\x00\x02\xb0\xd0\xff\xfe\xe1\x80r\xcd\xd3\x00\x16\xffP\xd7\x13\x00\x00\x00\x00\xa0\x02\xff\xffg\xd3\x00\x00\x02\x04\x05\xa0\x01\x03\x03\x00\x01\x01\x08\n}\x18:a\x00\x00\x00\x00' - # eth = Ethernet(s) # Variable eth is not used - Ethernet(s) - - -if __name__ == '__main__': - test_eth() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/gre.py b/external_libs/python/dpkt-1.8.6.2/dpkt/gre.py deleted file mode 100644 index d61e56ff..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/gre.py +++ /dev/null @@ -1,127 +0,0 @@ -# $Id: gre.py 75 2010-08-03 14:42:19Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Generic Routing Encapsulation.""" - -import struct -import dpkt -from decorators import deprecated - -GRE_CP = 0x8000 # Checksum Present -GRE_RP = 0x4000 # Routing Present -GRE_KP = 0x2000 # Key Present -GRE_SP = 0x1000 # Sequence Present -GRE_SS = 0x0800 # Strict Source Route -GRE_AP = 0x0080 # Acknowledgment Present - -GRE_opt_fields = ( - (GRE_CP | GRE_RP, 'sum', 'H'), (GRE_CP | GRE_RP, 'off', 'H'), - (GRE_KP, 'key', 'I'), (GRE_SP, 'seq', 'I'), (GRE_AP, 'ack', 'I') -) - - -class GRE(dpkt.Packet): - __hdr__ = ( - ('flags', 'H', 0), - ('p', 'H', 0x0800), # ETH_TYPE_IP - ) - _protosw = {} - sre = () - - @property - def v(self): - return self.flags & 0x7 - - @v.setter - def v(self, v): - self.flags = (self.flags & ~0x7) | (v & 0x7) - - @property - def recur(self): - return (self.flags >> 5) & 0x7 - - @recur.setter - def recur(self, v): - self.flags = (self.flags & ~0xe0) | ((v & 0x7) << 5) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def get_v(self): return self.v - - @deprecated - def set_v(self, v): self.v = v - - @deprecated - def get_recur(self): return self.recur - - @deprecated - def set_recur(self, v): self.recur = v - # ================================================= - - - class SRE(dpkt.Packet): - __hdr__ = [ - ('family', 'H', 0), - ('off', 'B', 0), - ('len', 'B', 0) - ] - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.len] - - def opt_fields_fmts(self): - if self.v == 0: - fields, fmts = [], [] - opt_fields = GRE_opt_fields - else: - fields, fmts = ['len', 'callid'], ['H', 'H'] - opt_fields = GRE_opt_fields[-2:] - for flags, field, fmt in opt_fields: - if self.flags & flags: - fields.append(field) - fmts.append(fmt) - return fields, fmts - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - fields, fmts = self.opt_fields_fmts() - if fields: - fmt = ''.join(fmts) - fmtlen = struct.calcsize(fmt) - vals = struct.unpack(fmt, self.data[:fmtlen]) - self.data = self.data[fmtlen:] - self.__dict__.update(dict(zip(fields, vals))) - if self.flags & GRE_RP: - l = [] - while True: - sre = self.SRE(self.data) - self.data = self.data[len(sre):] - l.append(sre) - if not sre.len: - break - self.sre = l - self.data = ethernet.Ethernet._typesw[self.p](self.data) - setattr(self, self.data.__class__.__name__.lower(), self.data) - - def __len__(self): - opt_fmtlen = struct.calcsize(''.join(self.opt_fields_fmts()[1])) - return self.__hdr_len__ + opt_fmtlen + sum(map(len, self.sre)) + len(self.data) - - # XXX - need to fix up repr to display optional fields... - - def __str__(self): - fields, fmts = self.opt_fields_fmts() - if fields: - vals = [] - for f in fields: - vals.append(getattr(self, f)) - opt_s = struct.pack(''.join(fmts), *vals) - else: - opt_s = '' - return self.pack_hdr() + opt_s + ''.join(map(str, self.sre)) + str(self.data) - -# XXX - auto-load GRE dispatch table from Ethernet dispatch table -import ethernet - -GRE._protosw.update(ethernet.Ethernet._typesw) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/gzip.py b/external_libs/python/dpkt-1.8.6.2/dpkt/gzip.py deleted file mode 100644 index e41165b2..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/gzip.py +++ /dev/null @@ -1,123 +0,0 @@ -# $Id: gzip.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""GNU zip.""" - -import struct -import zlib -import dpkt - - -# RFC 1952 -GZIP_MAGIC = '\x1f\x8b' - -# Compression methods -GZIP_MSTORED = 0 -GZIP_MCOMPRESS = 1 -GZIP_MPACKED = 2 -GZIP_MLZHED = 3 -GZIP_MDEFLATE = 8 - -# Flags -GZIP_FTEXT = 0x01 -GZIP_FHCRC = 0x02 -GZIP_FEXTRA = 0x04 -GZIP_FNAME = 0x08 -GZIP_FCOMMENT = 0x10 -GZIP_FENCRYPT = 0x20 -GZIP_FRESERVED = 0xC0 - -# OS -GZIP_OS_MSDOS = 0 -GZIP_OS_AMIGA = 1 -GZIP_OS_VMS = 2 -GZIP_OS_UNIX = 3 -GZIP_OS_VMCMS = 4 -GZIP_OS_ATARI = 5 -GZIP_OS_OS2 = 6 -GZIP_OS_MACOS = 7 -GZIP_OS_ZSYSTEM = 8 -GZIP_OS_CPM = 9 -GZIP_OS_TOPS20 = 10 -GZIP_OS_WIN32 = 11 -GZIP_OS_QDOS = 12 -GZIP_OS_RISCOS = 13 -GZIP_OS_UNKNOWN = 255 - -GZIP_FENCRYPT_LEN = 12 - - -class GzipExtra(dpkt.Packet): - __hdr__ = ( - ('id', '2s', ''), - ('len', 'H', 0) - ) - - -class Gzip(dpkt.Packet): - __hdr__ = ( - ('magic', '2s', GZIP_MAGIC), - ('method', 'B', GZIP_MDEFLATE), - ('flags', 'B', 0), - ('mtime', 'I', 0), - ('xflags', 'B', 0), - ('os', 'B', GZIP_OS_UNIX), - - ('extra', '0s', ''), # XXX - GZIP_FEXTRA - ('filename', '0s', ''), # XXX - GZIP_FNAME - ('comment', '0s', '') # XXX - GZIP_FCOMMENT - ) - - def unpack(self, buf): - super(Gzip, self).unpack(buf) - if self.flags & GZIP_FEXTRA: - n = struct.unpack(self.data[:2], '>H')[0] - self.extra = GzipExtra(self.data[2:2 + n]) - self.data = self.data[2 + n:] - if self.flags & GZIP_FNAME: - n = self.data.find('\x00') - self.filename = self.data[:n] - self.data = self.data[n + 1:] - if self.flags & GZIP_FCOMMENT: - n = self.data.find('\x00') - self.comment = self.data[:n] - self.data = self.data[n + 1:] - if self.flags & GZIP_FENCRYPT: - self.data = self.data[GZIP_FENCRYPT_LEN:] # XXX - skip - if self.flags & GZIP_FHCRC: - self.data = self.data[2:] # XXX - skip - - def pack_hdr(self): - l = [] - if self.extra: - self.flags |= GZIP_FEXTRA - s = str(self.extra) - l.append(struct.pack('>H', len(s))) - l.append(s) - if self.filename: - self.flags |= GZIP_FNAME - l.append(self.filename) - l.append('\x00') - if self.comment: - self.flags |= GZIP_FCOMMENT - l.append(self.comment) - l.append('\x00') - l.insert(0, super(Gzip, self).pack_hdr()) - return ''.join(l) - - def compress(self): - """Compress self.data.""" - c = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS, - zlib.DEF_MEM_LEVEL, 0) - self.data = c.compress(self.data) - - def decompress(self): - """Return decompressed payload.""" - d = zlib.decompressobj(-zlib.MAX_WBITS) - return d.decompress(self.data) - - -if __name__ == '__main__': - import sys - - gz = Gzip(open(sys.argv[1]).read()) - print `gz`, `gz.decompress()` diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/h225.py b/external_libs/python/dpkt-1.8.6.2/dpkt/h225.py deleted file mode 100644 index d8b2d51f..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/h225.py +++ /dev/null @@ -1,213 +0,0 @@ -# $Id: h225.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""ITU-T H.225.0 Call Signaling.""" - -import struct -import dpkt -import tpkt - - -# H225 Call Signaling -# -# Call messages and information elements (IEs) are defined by Q.931: -# http://cvsup.de.openbsd.org/historic/comp/doc/standards/itu/Q/Q.931.ps.gz -# -# The User-to-User IEs of H225 are encoded by PER of ASN.1. - -# Call Establishment Messages -ALERTING = 1 -CALL_PROCEEDING = 2 -CONNECT = 7 -CONNECT_ACKNOWLEDGE = 15 -PROGRESS = 3 -SETUP = 5 -SETUP_ACKNOWLEDGE = 13 - -# Call Information Phase Messages -RESUME = 38 -RESUME_ACKNOWLEDGE = 46 -RESUME_REJECT = 34 -SUSPEND = 37 -SUSPEND_ACKNOWLEDGE = 45 -SUSPEND_REJECT = 33 -USER_INFORMATION = 32 - -# Call Clearing Messages -DISCONNECT = 69 -RELEASE = 77 -RELEASE_COMPLETE = 90 -RESTART = 70 -RESTART_ACKNOWLEDGE = 78 - -# Miscellaneous Messages -SEGMENT = 96 -CONGESTION_CONTROL = 121 -INFORMATION = 123 -NOTIFY = 110 -STATUS = 125 -STATUS_ENQUIRY = 117 - -# Type 1 Single Octet Information Element IDs -RESERVED = 128 -SHIFT = 144 -CONGESTION_LEVEL = 176 -REPEAT_INDICATOR = 208 - -# Type 2 Single Octet Information Element IDs -MORE_DATA = 160 -SENDING_COMPLETE = 161 - -# Variable Length Information Element IDs -SEGMENTED_MESSAGE = 0 -BEARER_CAPABILITY = 4 -CAUSE = 8 -CALL_IDENTITY = 16 -CALL_STATE = 20 -CHANNEL_IDENTIFICATION = 24 -PROGRESS_INDICATOR = 30 -NETWORK_SPECIFIC_FACILITIES = 32 -NOTIFICATION_INDICATOR = 39 -DISPLAY = 40 -DATE_TIME = 41 -KEYPAD_FACILITY = 44 -SIGNAL = 52 -INFORMATION_RATE = 64 -END_TO_END_TRANSIT_DELAY = 66 -TRANSIT_DELAY_SELECTION_AND_INDICATION = 67 -PACKET_LAYER_BINARY_PARAMETERS = 68 -PACKET_LAYER_WINDOW_SIZE = 69 -PACKET_SIZE = 70 -CLOSED_USER_GROUP = 71 -REVERSE_CHARGE_INDICATION = 74 -CALLING_PARTY_NUMBER = 108 -CALLING_PARTY_SUBADDRESS = 109 -CALLED_PARTY_NUMBER = 112 -CALLED_PARTY_SUBADDRESS = 113 -REDIRECTING_NUMBER = 116 -TRANSIT_NETWORK_SELECTION = 120 -RESTART_INDICATOR = 121 -LOW_LAYER_COMPATIBILITY = 124 -HIGH_LAYER_COMPATIBILITY = 125 -USER_TO_USER = 126 -ESCAPE_FOR_EXTENSION = 127 - - -class H225(dpkt.Packet): - __hdr__ = ( - ('proto', 'B', 8), - ('ref_len', 'B', 2) - ) - - def unpack(self, buf): - # TPKT header - self.tpkt = tpkt.TPKT(buf) - if self.tpkt.v != 3: - raise dpkt.UnpackError('invalid TPKT version') - if self.tpkt.rsvd != 0: - raise dpkt.UnpackError('invalid TPKT reserved value') - n = self.tpkt.len - self.tpkt.__hdr_len__ - if n > len(self.tpkt.data): - raise dpkt.UnpackError('invalid TPKT length') - buf = self.tpkt.data - - # Q.931 payload - dpkt.Packet.unpack(self, buf) - buf = buf[self.__hdr_len__:] - self.ref_val = buf[:self.ref_len] - buf = buf[self.ref_len:] - self.type = struct.unpack('B', buf[:1])[0] - buf = buf[1:] - - # Information Elements - l = [] - while buf: - ie = self.IE(buf) - l.append(ie) - buf = buf[len(ie):] - self.data = l - - def __len__(self): - return self.tpkt.__hdr_len__ + self.__hdr_len__ + sum(map(len, self.data)) - - def __str__(self): - return self.tpkt.pack_hdr() + self.pack_hdr() + self.ref_val + \ - struct.pack('B', self.type) + ''.join(map(str, self.data)) - - class IE(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - buf = buf[self.__hdr_len__:] - - # single-byte IE - if self.type & 0x80: - self.len = 0 - self.data = None - # multi-byte IE - else: - # special PER-encoded UUIE - if self.type == USER_TO_USER: - self.len = struct.unpack('>H', buf[:2])[0] - buf = buf[2:] - # normal TLV-like IE - else: - self.len = struct.unpack('B', buf[:1])[0] - buf = buf[1:] - self.data = buf[:self.len] - - def __len__(self): - if self.type & 0x80: - n = 0 - else: - if self.type == USER_TO_USER: - n = 2 - else: - n = 1 - return self.__hdr_len__ + self.len + n - - def __str__(self): - if self.type & 0x80: - length_str = None - else: - if self.type == USER_TO_USER: - length_str = struct.pack('>H', self.len) - else: - length_str = struct.pack('B', self.len) - return struct.pack('B', self.type) + length_str + self.data - - -__s = '\x03\x00\x04\x11\x08\x02\x54\x2b\x05\x04\x03\x88\x93\xa5\x28\x0e\x4a\x6f\x6e\x20\x4f\x62\x65\x72\x68\x65\x69\x64\x65\x00\x7e\x03\xf0\x05\x20\xb8\x06\x00\x08\x91\x4a\x00\x04\x01\x40\x0c\x00\x4a\x00\x6f\x00\x6e\x00\x20\x00\x4f\x00\x62\x00\x65\x00\x72\x00\x68\x00\x65\x00\x69\x00\x64\x00\x65\x22\xc0\x09\x00\x00\x3d\x06\x65\x6b\x69\x67\x61\x00\x00\x14\x32\x2e\x30\x2e\x32\x20\x28\x4f\x50\x41\x4c\x20\x76\x32\x2e\x32\x2e\x32\x29\x00\x00\x00\x01\x40\x15\x00\x74\x00\x63\x00\x70\x00\x24\x00\x68\x00\x33\x00\x32\x00\x33\x00\x2e\x00\x76\x00\x6f\x00\x78\x00\x67\x00\x72\x00\x61\x00\x74\x00\x69\x00\x61\x00\x2e\x00\x6f\x00\x72\x00\x67\x00\x42\x87\x23\x2c\x06\xb8\x00\x6a\x8b\x1d\x0c\xb7\x06\xdb\x11\x9e\xca\x00\x10\xa4\x89\x6d\x6a\x00\xc5\x1d\x80\x04\x07\x00\x0a\x00\x01\x7a\x75\x30\x11\x00\x5e\x88\x1d\x0c\xb7\x06\xdb\x11\x9e\xca\x00\x10\xa4\x89\x6d\x6a\x82\x2b\x0e\x30\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x26\x00\x00\x64\x0c\x10\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x2a\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x20\x00\x00\x65\x0c\x10\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x20\x40\x00\x00\x06\x04\x01\x00\x4e\x0c\x03\x00\x83\x00\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x16\x00\x00\x66\x0e\x0c\x03\x00\x83\x00\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x4b\x40\x00\x00\x06\x04\x01\x00\x4c\x10\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x41\x00\x00\x67\x0c\x10\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x32\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x28\x00\x00\x68\x0c\x10\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x1d\x40\x00\x00\x06\x04\x01\x00\x4c\x60\x1d\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x13\x00\x00\x69\x0c\x60\x1d\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x1d\x40\x00\x00\x06\x04\x01\x00\x4c\x20\x1d\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x13\x00\x00\x6a\x0c\x20\x1d\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x01\x00\x01\x00\x01\x00\x01\x00\x81\x03\x02\x80\xf8\x02\x70\x01\x06\x00\x08\x81\x75\x00\x0b\x80\x13\x80\x01\xf4\x00\x01\x00\x00\x01\x00\x00\x01\x00\x00\x0c\xc0\x01\x00\x01\x80\x0b\x80\x00\x00\x20\x20\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x00\x01\x20\x20\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x00\x02\x24\x18\x03\x00\xe6\x00\x80\x00\x03\x20\x20\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x00\x04\x20\x20\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x00\x05\x20\xc0\xef\x80\x00\x06\x20\x40\xef\x80\x00\x07\x08\xe0\x03\x51\x00\x80\x01\x00\x80\x00\x08\x08\xd0\x03\x51\x00\x80\x01\x00\x80\x00\x09\x83\x01\x50\x80\x00\x0a\x83\x01\x10\x80\x00\x0b\x83\x01\x40\x00\x80\x01\x03\x06\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x01\x00\x07\x00\x08\x00\x00\x09\x01\x00\x0a\x00\x0b\x07\x01\x00\x32\x80\xa6\xff\x4c\x02\x80\x01\x80' - - -def test_pack(): - h = H225(__s) - assert (__s == str(h)) - - -def test_unpack(): - h = H225(__s) - assert (h.tpkt.v == 3) - assert (h.tpkt.rsvd == 0) - assert (h.tpkt.len == 1041) - assert (h.proto == 8) - assert (h.type == SETUP) - assert (len(h.data) == 3) - - ie = h.data[0] - assert (ie.type == BEARER_CAPABILITY) - assert (ie.len == 3) - ie = h.data[1] - assert (ie.type == DISPLAY) - assert (ie.len == 14) - ie = h.data[2] - assert (ie.type == USER_TO_USER) - assert (ie.len == 1008) - - -if __name__ == '__main__': - test_pack() - test_unpack() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/hsrp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/hsrp.py deleted file mode 100644 index 7581d3e4..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/hsrp.py +++ /dev/null @@ -1,33 +0,0 @@ -# $Id: hsrp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Cisco Hot Standby Router Protocol.""" - -import dpkt - -# Opcodes -HELLO = 0 -COUP = 1 -RESIGN = 2 - -# States -INITIAL = 0x00 -LEARN = 0x01 -LISTEN = 0x02 -SPEAK = 0x04 -STANDBY = 0x08 -ACTIVE = 0x10 - - -class HSRP(dpkt.Packet): - __hdr__ = ( - ('version', 'B', 0), - ('opcode', 'B', 0), - ('state', 'B', 0), - ('hello', 'B', 0), - ('hold', 'B', 0), - ('priority', 'B', 0), - ('group', 'B', 0), - ('rsvd', 'B', 0), - ('auth', '8s', 'cisco'), - ('vip', '4s', '') - ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/http.py b/external_libs/python/dpkt-1.8.6.2/dpkt/http.py deleted file mode 100644 index 59759ac6..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/http.py +++ /dev/null @@ -1,259 +0,0 @@ -# $Id: http.py 86 2013-03-05 19:25:19Z andrewflnr@gmail.com $ -# -*- coding: utf-8 -*- -"""Hypertext Transfer Protocol.""" - -import cStringIO -import dpkt - - -def parse_headers(f): - """Return dict of HTTP headers parsed from a file object.""" - d = {} - while 1: - line = f.readline() - if not line: - raise dpkt.NeedData('premature end of headers') - line = line.strip() - if not line: - break - l = line.split(':', 1) - if len(l[0].split()) != 1: - raise dpkt.UnpackError('invalid header: %r' % line) - k = l[0].lower() - v = len(l) != 1 and l[1].lstrip() or '' - if k in d: - if not type(d[k]) is list: - d[k] = [d[k]] - d[k].append(v) - else: - d[k] = v - return d - - -def parse_body(f, headers): - """Return HTTP body parsed from a file object, given HTTP header dict.""" - if headers.get('transfer-encoding', '').lower() == 'chunked': - l = [] - found_end = False - while 1: - try: - sz = f.readline().split(None, 1)[0] - except IndexError: - raise dpkt.UnpackError('missing chunk size') - n = int(sz, 16) - if n == 0: - found_end = True - buf = f.read(n) - if f.readline().strip(): - break - if n and len(buf) == n: - l.append(buf) - else: - break - if not found_end: - raise dpkt.NeedData('premature end of chunked body') - body = ''.join(l) - elif 'content-length' in headers: - n = int(headers['content-length']) - body = f.read(n) - if len(body) != n: - raise dpkt.NeedData('short body (missing %d bytes)' % (n - len(body))) - elif 'content-type' in headers: - body = f.read() - else: - # XXX - need to handle HTTP/0.9 - body = '' - return body - - -class Message(dpkt.Packet): - """Hypertext Transfer Protocol headers + body.""" - __metaclass__ = type - __hdr_defaults__ = {} - headers = None - body = None - - def __init__(self, *args, **kwargs): - if args: - self.unpack(args[0]) - else: - self.headers = {} - self.body = '' - for k, v in self.__hdr_defaults__.iteritems(): - setattr(self, k, v) - for k, v in kwargs.iteritems(): - setattr(self, k, v) - - def unpack(self, buf): - f = cStringIO.StringIO(buf) - # Parse headers - self.headers = parse_headers(f) - # Parse body - self.body = parse_body(f, self.headers) - # Save the rest - self.data = f.read() - - def pack_hdr(self): - return ''.join(['%s: %s\r\n' % t for t in self.headers.iteritems()]) - - def __len__(self): - return len(str(self)) - - def __str__(self): - return '%s\r\n%s' % (self.pack_hdr(), self.body) - - -class Request(Message): - """Hypertext Transfer Protocol Request.""" - __hdr_defaults__ = { - 'method': 'GET', - 'uri': '/', - 'version': '1.0', - } - __methods = dict.fromkeys(( - 'GET', 'PUT', 'ICY', - 'COPY', 'HEAD', 'LOCK', 'MOVE', 'POLL', 'POST', - 'BCOPY', 'BMOVE', 'MKCOL', 'TRACE', 'LABEL', 'MERGE', - 'DELETE', 'SEARCH', 'UNLOCK', 'REPORT', 'UPDATE', 'NOTIFY', - 'BDELETE', 'CONNECT', 'OPTIONS', 'CHECKIN', - 'PROPFIND', 'CHECKOUT', 'CCM_POST', - 'SUBSCRIBE', 'PROPPATCH', 'BPROPFIND', - 'BPROPPATCH', 'UNCHECKOUT', 'MKACTIVITY', - 'MKWORKSPACE', 'UNSUBSCRIBE', 'RPC_CONNECT', - 'VERSION-CONTROL', - 'BASELINE-CONTROL' - )) - __proto = 'HTTP' - - def unpack(self, buf): - f = cStringIO.StringIO(buf) - line = f.readline() - l = line.strip().split() - if len(l) < 2: - raise dpkt.UnpackError('invalid request: %r' % line) - if l[0] not in self.__methods: - raise dpkt.UnpackError('invalid http method: %r' % l[0]) - if len(l) == 2: - # HTTP/0.9 does not specify a version in the request line - self.version = '0.9' - else: - if not l[2].startswith(self.__proto): - raise dpkt.UnpackError('invalid http version: %r' % l[2]) - self.version = l[2][len(self.__proto) + 1:] - self.method = l[0] - self.uri = l[1] - Message.unpack(self, f.read()) - - def __str__(self): - return '%s %s %s/%s\r\n' % (self.method, self.uri, self.__proto, - self.version) + Message.__str__(self) - - -class Response(Message): - """Hypertext Transfer Protocol Response.""" - __hdr_defaults__ = { - 'version': '1.0', - 'status': '200', - 'reason': 'OK' - } - __proto = 'HTTP' - - def unpack(self, buf): - f = cStringIO.StringIO(buf) - line = f.readline() - l = line.strip().split(None, 2) - if len(l) < 2 or not l[0].startswith(self.__proto) or not l[1].isdigit(): - raise dpkt.UnpackError('invalid response: %r' % line) - self.version = l[0][len(self.__proto) + 1:] - self.status = l[1] - self.reason = l[2] if len(l) > 2 else '' - Message.unpack(self, f.read()) - - def __str__(self): - return '%s/%s %s %s\r\n' % (self.__proto, self.version, self.status, - self.reason) + Message.__str__(self) - - -def test_parse_request(): - s = """POST /main/redirect/ab/1,295,,00.html HTTP/1.0\r\nReferer: http://www.email.com/login/snap/login.jhtml\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.75 [en] (X11; U; OpenBSD 2.8 i386; Nav)\r\nHost: ltd.snap.com\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: 61\r\n\r\nsn=em&mn=dtest4&pw=this+is+atest&fr=true&login=Sign+in&od=www""" - r = Request(s) - assert r.method == 'POST' - assert r.uri == '/main/redirect/ab/1,295,,00.html' - assert r.body == 'sn=em&mn=dtest4&pw=this+is+atest&fr=true&login=Sign+in&od=www' - assert r.headers['content-type'] == 'application/x-www-form-urlencoded' - try: - Request(s[:60]) - assert 'invalid headers parsed!' - except dpkt.UnpackError: - pass - - -def test_format_request(): - r = Request() - assert str(r) == 'GET / HTTP/1.0\r\n\r\n' - r.method = 'POST' - r.uri = '/foo/bar/baz.html' - r.headers['content-type'] = 'text/plain' - r.headers['content-length'] = '5' - r.body = 'hello' - s = str(r) - assert s.startswith('POST /foo/bar/baz.html HTTP/1.0\r\n') - assert s.endswith('\r\n\r\nhello') - assert '\r\ncontent-length: 5\r\n' in s - assert '\r\ncontent-type: text/plain\r\n' in s - r = Request(str(r)) - assert str(r) == s - - -def test_chunked_response(): - s = """HTTP/1.1 200 OK\r\nCache-control: no-cache\r\nPragma: no-cache\r\nContent-Type: text/javascript; charset=utf-8\r\nContent-Encoding: gzip\r\nTransfer-Encoding: chunked\r\nSet-Cookie: S=gmail=agg:gmail_yj=v2s:gmproxy=JkU; Domain=.google.com; Path=/\r\nServer: GFE/1.3\r\nDate: Mon, 12 Dec 2005 22:33:23 GMT\r\n\r\na\r\n\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\r\n152\r\nm\x91MO\xc4 \x10\x86\xef\xfe\n\x82\xc9\x9eXJK\xe9\xb6\xee\xc1\xe8\x1e6\x9e4\xf1\xe0a5\x86R\xda\x12Yh\x80\xba\xfa\xef\x85\xee\x1a/\xf21\x99\x0c\xef0<\xc3\x81\xa0\xc3\x01\xe6\x10\xc1<\xa7eYT5\xa1\xa4\xac\xe1\xdb\x15:\xa4\x9d\x0c\xfa5K\x00\xf6.\xaa\xeb\x86\xd5y\xcdHY\x954\x8e\xbc*h\x8c\x8e!L7Y\xe6\'\xeb\x82WZ\xcf>8\x1ed\x87\x851X\xd8c\xe6\xbc\x17Z\x89\x8f\xac \x84e\xde\n!]\x96\x17i\xb5\x02{{\xc2z0\x1e\x0f#7\x9cw3v\x992\x9d\xfc\xc2c8\xea[/EP\xd6\xbc\xce\x84\xd0\xce\xab\xf7`\'\x1f\xacS\xd2\xc7\xd2\xfb\x94\x02N\xdc\x04\x0f\xee\xba\x19X\x03TtW\xd7\xb4\xd9\x92\n\xbcX\xa7;\xb0\x9b\'\x10$?F\xfd\xf3CzPt\x8aU\xef\xb8\xc8\x8b-\x18\xed\xec<\xe0\x83\x85\x08!\xf8"[\xb0\xd3j\x82h\x93\xb8\xcf\xd8\x9b\xba\xda\xd0\x92\x14\xa4a\rc\reM\xfd\x87=X;h\xd9j;\xe0db\x17\xc2\x02\xbd\xb0F\xc2in#\xfb:\xb6\xc4x\x15\xd6\x9f\x8a\xaf\xcf)\x0b^\xbc\xe7i\x11\x80\x8b\x00D\x01\xd8/\x82x\xf6\xd8\xf7J(\xae/\x11p\x1f+\xc4p\t:\xfe\xfd\xdf\xa3Y\xfa\xae4\x7f\x00\xc5\xa5\x95\xa1\xe2\x01\x00\x00\r\n0\r\n\r\n""" - r = Response(s) - assert r.version == '1.1' - assert r.status == '200' - assert r.reason == 'OK' - - -def test_multicookie_response(): - s = """HTTP/1.x 200 OK\r\nSet-Cookie: first_cookie=cookie1; path=/; domain=.example.com\r\nSet-Cookie: second_cookie=cookie2; path=/; domain=.example.com\r\nContent-Length: 0\r\n\r\n""" - r = Response(s) - assert type(r.headers['set-cookie']) is list - assert len(r.headers['set-cookie']) == 2 - - -def test_noreason_response(): - s = """HTTP/1.1 200 \r\n\r\n""" - r = Response(s) - assert r.reason == '' - assert str(r) == s - - -def test_request_version(): - s = """GET / HTTP/1.0\r\n\r\n""" - r = Request(s) - assert r.method == 'GET' - assert r.uri == '/' - assert r.version == '1.0' - - s = """GET /\r\n\r\n""" - r = Request(s) - assert r.method == 'GET' - assert r.uri == '/' - assert r.version == '0.9' - - s = """GET / CHEESE/1.0\r\n\r\n""" - try: - Request(s) - assert "invalid protocol version parsed!" - except: - pass - - -if __name__ == '__main__': - # Runs all the test associated with this class/file - test_parse_request() - test_format_request() - test_chunked_response() - test_multicookie_response() - test_noreason_response() - test_request_version() - print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/icmp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/icmp.py deleted file mode 100644 index 12e73728..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/icmp.py +++ /dev/null @@ -1,127 +0,0 @@ -# $Id: icmp.py 45 2007-08-03 00:05:22Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Internet Control Message Protocol.""" - -import dpkt -import ip - -# Types (icmp_type) and codes (icmp_code) - -# http://www.iana.org/assignments/icmp-parameters - -ICMP_CODE_NONE = 0 # for types without codes -ICMP_ECHOREPLY = 0 # echo reply -ICMP_UNREACH = 3 # dest unreachable, codes: -ICMP_UNREACH_NET = 0 # bad net -ICMP_UNREACH_HOST = 1 # bad host -ICMP_UNREACH_PROTO = 2 # bad protocol -ICMP_UNREACH_PORT = 3 # bad port -ICMP_UNREACH_NEEDFRAG = 4 # IP_DF caused drop -ICMP_UNREACH_SRCFAIL = 5 # src route failed -ICMP_UNREACH_NET_UNKNOWN = 6 # unknown net -ICMP_UNREACH_HOST_UNKNOWN = 7 # unknown host -ICMP_UNREACH_ISOLATED = 8 # src host isolated -ICMP_UNREACH_NET_PROHIB = 9 # for crypto devs -ICMP_UNREACH_HOST_PROHIB = 10 # ditto -ICMP_UNREACH_TOSNET = 11 # bad tos for net -ICMP_UNREACH_TOSHOST = 12 # bad tos for host -ICMP_UNREACH_FILTER_PROHIB = 13 # prohibited access -ICMP_UNREACH_HOST_PRECEDENCE = 14 # precedence error -ICMP_UNREACH_PRECEDENCE_CUTOFF = 15 # precedence cutoff -ICMP_SRCQUENCH = 4 # packet lost, slow down -ICMP_REDIRECT = 5 # shorter route, codes: -ICMP_REDIRECT_NET = 0 # for network -ICMP_REDIRECT_HOST = 1 # for host -ICMP_REDIRECT_TOSNET = 2 # for tos and net -ICMP_REDIRECT_TOSHOST = 3 # for tos and host -ICMP_ALTHOSTADDR = 6 # alternate host address -ICMP_ECHO = 8 # echo service -ICMP_RTRADVERT = 9 # router advertise, codes: -ICMP_RTRADVERT_NORMAL = 0 # normal -ICMP_RTRADVERT_NOROUTE_COMMON = 16 # selective routing -ICMP_RTRSOLICIT = 10 # router solicitation -ICMP_TIMEXCEED = 11 # time exceeded, code: -ICMP_TIMEXCEED_INTRANS = 0 # ttl==0 in transit -ICMP_TIMEXCEED_REASS = 1 # ttl==0 in reass -ICMP_PARAMPROB = 12 # ip header bad -ICMP_PARAMPROB_ERRATPTR = 0 # req. opt. absent -ICMP_PARAMPROB_OPTABSENT = 1 # req. opt. absent -ICMP_PARAMPROB_LENGTH = 2 # bad length -ICMP_TSTAMP = 13 # timestamp request -ICMP_TSTAMPREPLY = 14 # timestamp reply -ICMP_INFO = 15 # information request -ICMP_INFOREPLY = 16 # information reply -ICMP_MASK = 17 # address mask request -ICMP_MASKREPLY = 18 # address mask reply -ICMP_TRACEROUTE = 30 # traceroute -ICMP_DATACONVERR = 31 # data conversion error -ICMP_MOBILE_REDIRECT = 32 # mobile host redirect -ICMP_IP6_WHEREAREYOU = 33 # IPv6 where-are-you -ICMP_IP6_IAMHERE = 34 # IPv6 i-am-here -ICMP_MOBILE_REG = 35 # mobile registration req -ICMP_MOBILE_REGREPLY = 36 # mobile registration reply -ICMP_DNS = 37 # domain name request -ICMP_DNSREPLY = 38 # domain name reply -ICMP_SKIP = 39 # SKIP -ICMP_PHOTURIS = 40 # Photuris -ICMP_PHOTURIS_UNKNOWN_INDEX = 0 # unknown sec index -ICMP_PHOTURIS_AUTH_FAILED = 1 # auth failed -ICMP_PHOTURIS_DECOMPRESS_FAILED = 2 # decompress failed -ICMP_PHOTURIS_DECRYPT_FAILED = 3 # decrypt failed -ICMP_PHOTURIS_NEED_AUTHN = 4 # no authentication -ICMP_PHOTURIS_NEED_AUTHZ = 5 # no authorization -ICMP_TYPE_MAX = 40 - - -class ICMP(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 8), - ('code', 'B', 0), - ('sum', 'H', 0) - ) - - class Echo(dpkt.Packet): - __hdr__ = (('id', 'H', 0), ('seq', 'H', 0)) - - class Quote(dpkt.Packet): - __hdr__ = (('pad', 'I', 0),) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.ip = ip.IP(self.data) - - class Unreach(Quote): - __hdr__ = (('pad', 'H', 0), ('mtu', 'H', 0)) - - class Quench(Quote): pass - - class Redirect(Quote): - __hdr__ = (('gw', 'I', 0),) - - class ParamProbe(Quote): - __hdr__ = (('ptr', 'B', 0), ('pad1', 'B', 0), ('pad2', 'H', 0)) - - class TimeExceed(Quote): pass - - _typesw = {0: Echo, 3: Unreach, 4: Quench, 5: Redirect, 8: Echo, 11: TimeExceed} - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - try: - self.data = self._typesw[self.type](self.data) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - pass - - def __str__(self): - if not self.sum: - self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) - return dpkt.Packet.__str__(self) - - -def test_icmp(): - s = '\x03\x0a\x6b\x19\x00\x00\x00\x00\x45\x00\x00\x28\x94\x1f\x00\x00\xe3\x06\x99\xb4\x23\x2b\x24\x00\xde\x8e\x84\x42\xab\xd1\x00\x50\x00\x35\xe1\x29\x20\xd9\x00\x00\x00\x22\x9b\xf0\xe2\x04\x65\x6b' - assert (str(ICMP(s)) == s) - -if __name__ == '__main__': - test_icmp() - print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/icmp6.py b/external_libs/python/dpkt-1.8.6.2/dpkt/icmp6.py deleted file mode 100644 index 679bc6b4..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/icmp6.py +++ /dev/null @@ -1,77 +0,0 @@ -# $Id: icmp6.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Internet Control Message Protocol for IPv6.""" - -import dpkt -import ip6 - -ICMP6_DST_UNREACH = 1 # dest unreachable, codes: -ICMP6_PACKET_TOO_BIG = 2 # packet too big -ICMP6_TIME_EXCEEDED = 3 # time exceeded, code: -ICMP6_PARAM_PROB = 4 # ip6 header bad - -ICMP6_ECHO_REQUEST = 128 # echo service -ICMP6_ECHO_REPLY = 129 # echo reply -MLD_LISTENER_QUERY = 130 # multicast listener query -MLD_LISTENER_REPORT = 131 # multicast listener report -MLD_LISTENER_DONE = 132 # multicast listener done - -# RFC2292 decls -ICMP6_MEMBERSHIP_QUERY = 130 # group membership query -ICMP6_MEMBERSHIP_REPORT = 131 # group membership report -ICMP6_MEMBERSHIP_REDUCTION = 132 # group membership termination - -ND_ROUTER_SOLICIT = 133 # router solicitation -ND_ROUTER_ADVERT = 134 # router advertisment -ND_NEIGHBOR_SOLICIT = 135 # neighbor solicitation -ND_NEIGHBOR_ADVERT = 136 # neighbor advertisment -ND_REDIRECT = 137 # redirect - -ICMP6_ROUTER_RENUMBERING = 138 # router renumbering - -ICMP6_WRUREQUEST = 139 # who are you request -ICMP6_WRUREPLY = 140 # who are you reply -ICMP6_FQDN_QUERY = 139 # FQDN query -ICMP6_FQDN_REPLY = 140 # FQDN reply -ICMP6_NI_QUERY = 139 # node information request -ICMP6_NI_REPLY = 140 # node information reply - -ICMP6_MAXTYPE = 201 - - -class ICMP6(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 0), - ('code', 'B', 0), - ('sum', 'H', 0) - ) - - class Error(dpkt.Packet): - __hdr__ = (('pad', 'I', 0), ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.ip6 = ip6.IP6(self.data) - - class Unreach(Error): pass - - class TooBig(Error): - __hdr__ = (('mtu', 'I', 1232), ) - - class TimeExceed(Error): pass - - class ParamProb(Error): - __hdr__ = (('ptr', 'I', 0), ) - - class Echo(dpkt.Packet): - __hdr__ = (('id', 'H', 0), ('seq', 'H', 0)) - - _typesw = {1: Unreach, 2: TooBig, 3: TimeExceed, 4: ParamProb, 128: Echo, 129: Echo} - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - try: - self.data = self._typesw[self.type](self.data) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - self.data = buf diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ieee80211.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ieee80211.py deleted file mode 100644 index e18833fb..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/ieee80211.py +++ /dev/null @@ -1,875 +0,0 @@ -# $Id: 80211.py 53 2008-12-18 01:22:57Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""IEEE 802.11.""" - -import socket -import struct -import dpkt -from decorators import deprecated - -# Frame Types -MGMT_TYPE = 0 -CTL_TYPE = 1 -DATA_TYPE = 2 - -# Frame Sub-Types -M_ASSOC_REQ = 0 -M_ASSOC_RESP = 1 -M_REASSOC_REQ = 2 -M_REASSOC_RESP = 3 -M_PROBE_REQ = 4 -M_PROBE_RESP = 5 -M_BEACON = 8 -M_ATIM = 9 -M_DISASSOC = 10 -M_AUTH = 11 -M_DEAUTH = 12 -M_ACTION = 13 -C_BLOCK_ACK_REQ = 8 -C_BLOCK_ACK = 9 -C_PS_POLL = 10 -C_RTS = 11 -C_CTS = 12 -C_ACK = 13 -C_CF_END = 14 -C_CF_END_ACK = 15 -D_DATA = 0 -D_DATA_CF_ACK = 1 -D_DATA_CF_POLL = 2 -D_DATA_CF_ACK_POLL = 3 -D_NULL = 4 -D_CF_ACK = 5 -D_CF_POLL = 6 -D_CF_ACK_POLL = 7 -D_QOS_DATA = 8 -D_QOS_CF_ACK = 9 -D_QOS_CF_POLL = 10 -D_QOS_CF_ACK_POLL = 11 -D_QOS_NULL = 12 -D_QOS_CF_POLL_EMPTY = 14 - -TO_DS_FLAG = 10 -FROM_DS_FLAG = 1 -INTER_DS_FLAG = 11 - -# Bitshifts for Frame Control -_VERSION_MASK = 0x0300 -_TYPE_MASK = 0x0c00 -_SUBTYPE_MASK = 0xf000 -_TO_DS_MASK = 0x0001 -_FROM_DS_MASK = 0x0002 -_MORE_FRAG_MASK = 0x0004 -_RETRY_MASK = 0x0008 -_PWR_MGT_MASK = 0x0010 -_MORE_DATA_MASK = 0x0020 -_WEP_MASK = 0x0040 -_ORDER_MASK = 0x0080 -_VERSION_SHIFT = 8 -_TYPE_SHIFT = 10 -_SUBTYPE_SHIFT = 12 -_TO_DS_SHIFT = 0 -_FROM_DS_SHIFT = 1 -_MORE_FRAG_SHIFT = 2 -_RETRY_SHIFT = 3 -_PWR_MGT_SHIFT = 4 -_MORE_DATA_SHIFT = 5 -_WEP_SHIFT = 6 -_ORDER_SHIFT = 7 - -# IEs -IE_SSID = 0 -IE_RATES = 1 -IE_FH = 2 -IE_DS = 3 -IE_CF = 4 -IE_TIM = 5 -IE_IBSS = 6 -IE_HT_CAPA = 45 -IE_ESR = 50 -IE_HT_INFO = 61 - -FCS_LENGTH = 4 - -FRAMES_WITH_CAPABILITY = [M_BEACON, M_ASSOC_RESP, M_ASSOC_REQ, M_REASSOC_REQ, ] - -# Block Ack control constants -_ACK_POLICY_SHIFT = 0 -_MULTI_TID_SHIFT = 1 -_COMPRESSED_SHIFT = 2 -_TID_SHIFT = 12 - -_ACK_POLICY_MASK = 0x0001 -_MULTI_TID_MASK = 0x0002 -_COMPRESSED_MASK = 0x0004 -_TID_MASK = 0xf000 - -_COMPRESSED_BMP_LENGTH = 8 -_BMP_LENGTH = 128 - -# Action frame categories -BLOCK_ACK = 3 - -# Block ack category action codes -BLOCK_ACK_CODE_REQUEST = 0 -BLOCK_ACK_CODE_RESPONSE = 1 - - -class IEEE80211(dpkt.Packet): - __hdr__ = ( - ('framectl', 'H', 0), - ('duration', 'H', 0) - ) - - @property - def version(self): - return (self.framectl & _VERSION_MASK) >> _VERSION_SHIFT - - @version.setter - def version(self, val): - self.framectl = (val << _VERSION_SHIFT) | (self.framectl & ~_VERSION_MASK) - - @property - def type(self): - return (self.framectl & _TYPE_MASK) >> _TYPE_SHIFT - - @type.setter - def type(self, val): - self.framectl = (val << _TYPE_SHIFT) | (self.framectl & ~_TYPE_MASK) - - @property - def subtype(self): - return (self.framectl & _SUBTYPE_MASK) >> _SUBTYPE_SHIFT - - @subtype.setter - def subtype(self, val): - self.framectl = (val << _SUBTYPE_SHIFT) | (self.framectl & ~_SUBTYPE_MASK) - - @property - def to_ds(self): - return (self.framectl & _TO_DS_MASK) >> _TO_DS_SHIFT - - @to_ds.setter - def to_ds(self, val): - self.framectl = (val << _TO_DS_SHIFT) | (self.framectl & ~_TO_DS_MASK) - - @property - def from_ds(self): - return (self.framectl & _FROM_DS_MASK) >> _FROM_DS_SHIFT - - @from_ds.setter - def from_ds(self, val): - self.framectl = (val << _FROM_DS_SHIFT) | (self.framectl & ~_FROM_DS_MASK) - - @property - def more_frag(self): - return (self.framectl & _MORE_FRAG_MASK) >> _MORE_FRAG_SHIFT - - @more_frag.setter - def more_frag(self, val): - self.framectl = (val << _MORE_FRAG_SHIFT) | (self.framectl & ~_MORE_FRAG_MASK) - - @property - def retry(self): - return (self.framectl & _RETRY_MASK) >> _RETRY_SHIFT - - @retry.setter - def retry(self, val): - self.framectl = (val << _RETRY_SHIFT) | (self.framectl & ~_RETRY_MASK) - - @property - def pwr_mgt(self): - return (self.framectl & _PWR_MGT_MASK) >> _PWR_MGT_SHIFT - - @pwr_mgt.setter - def pwr_mgt(self, val): - self.framectl = (val << _PWR_MGT_SHIFT) | (self.framectl & ~_PWR_MGT_MASK) - - @property - def more_data(self): - return (self.framectl & _MORE_DATA_MASK) >> _MORE_DATA_SHIFT - - @more_data.setter - def more_data(self, val): - self.framectl = (val << _MORE_DATA_SHIFT) | (self.framectl & ~_MORE_DATA_MASK) - - @property - def wep(self): - return (self.framectl & _WEP_MASK) >> _WEP_SHIFT - - @wep.setter - def wep(self, val): - self.framectl = (val << _WEP_SHIFT) | (self.framectl & ~_WEP_MASK) - - @property - def order(self): - return (self.framectl & _ORDER_MASK) >> _ORDER_SHIFT - - @order.setter - def order(self, val): - self.framectl = (val << _ORDER_SHIFT) | (self.framectl & ~_ORDER_MASK) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_version(self): return self.version - - @deprecated - def _set_version(self, val): self.version = val - - @deprecated - def _get_type(self): return self.type - - @deprecated - def _set_type(self, val): self.type = val - - @deprecated - def _get_subtype(self): return self.subtype - - @deprecated - def _set_subtype(self, val): self.subtype = val - - @deprecated - def _get_to_ds(self): return self.to_ds - - @deprecated - def _set_to_ds(self, val): self.to_ds = val - - @deprecated - def _get_from_ds(self): return self.from_ds - - @deprecated - def _set_from_ds(self, val): self.from_ds = val - - @deprecated - def _get_more_frag(self): return self.more_frag - - @deprecated - def _set_more_frag(self, val): self.more_frag = val - - @deprecated - def _get_retry(self): return self.retry - - @deprecated - def _set_retry(self, val): self.retry = val - - @deprecated - def _get_pwr_mgt(self): return self.pwr_mgt - - @deprecated - def _set_pwr_mgt(self, val): self.pwr_mgt = val - - @deprecated - def _get_more_data(self): return self.more_data - - @deprecated - def _set_more_data(self, val): self.more_data = val - - @deprecated - def _get_wep(self): return self.wep - - @deprecated - def _set_wep(self, val): self.wep = val - - @deprecated - def _get_order(self): return self.order - - @deprecated - def _set_order(self, val): self.order = val - # ================================================= - - def unpack_ies(self, buf): - self.ies = [] - - ie_decoder = { - IE_SSID: ('ssid', self.IE), - IE_RATES: ('rate', self.IE), - IE_FH: ('fh', self.FH), - IE_DS: ('ds', self.DS), - IE_CF: ('cf', self.CF), - IE_TIM: ('tim', self.TIM), - IE_IBSS: ('ibss', self.IBSS), - IE_HT_CAPA: ('ht_capa', self.IE), - IE_ESR: ('esr', self.IE), - IE_HT_INFO: ('ht_info', self.IE) - } - - # each IE starts with an ID and a length - while len(buf) > FCS_LENGTH: - ie_id = struct.unpack('B', (buf[0]))[0] - try: - parser = ie_decoder[ie_id][1] - name = ie_decoder[ie_id][0] - except KeyError: - parser = self.IE - name = 'ie_' + str(ie_id) - ie = parser(buf) - - ie.data = buf[2:2 + ie.len] - setattr(self, name, ie) - self.ies.append(ie) - buf = buf[2 + ie.len:] - - class Capability(object): - def __init__(self, field): - self.ess = field & 1 - self.ibss = (field >> 1) & 1 - self.cf_poll = (field >> 2) & 1 - self.cf_poll_req = (field >> 3) & 1 - self.privacy = (field >> 4) & 1 - self.short_preamble = (field >> 5) & 1 - self.pbcc = (field >> 6) & 1 - self.hopping = (field >> 7) & 1 - self.spec_mgmt = (field >> 8) & 1 - self.qos = (field >> 9) & 1 - self.short_slot = (field >> 10) & 1 - self.apsd = (field >> 11) & 1 - self.dsss = (field >> 13) & 1 - self.delayed_blk_ack = (field >> 14) & 1 - self.imm_blk_ack = (field >> 15) & 1 - - def __init__(self, *args, **kwargs): - if kwargs and 'fcs' in kwargs: - self.fcs_present = kwargs.pop('fcs') - else: - self.fcs_present = False - - super(IEEE80211, self).__init__(*args, **kwargs) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = buf[self.__hdr_len__:] - - m_decoder = { - M_BEACON: ('beacon', self.Beacon), - M_ASSOC_REQ: ('assoc_req', self.Assoc_Req), - M_ASSOC_RESP: ('assoc_resp', self.Assoc_Resp), - M_DISASSOC: ('diassoc', self.Disassoc), - M_REASSOC_REQ: ('reassoc_req', self.Reassoc_Req), - M_REASSOC_RESP: ('reassoc_resp', self.Assoc_Resp), - M_AUTH: ('auth', self.Auth), - M_PROBE_RESP: ('probe_resp', self.Beacon), - M_DEAUTH: ('deauth', self.Deauth), - M_ACTION: ('action', self.Action) - } - - c_decoder = { - C_RTS: ('rts', self.RTS), - C_CTS: ('cts', self.CTS), - C_ACK: ('ack', self.ACK), - C_BLOCK_ACK_REQ: ('bar', self.BlockAckReq), - C_BLOCK_ACK: ('back', self.BlockAck), - C_CF_END: ('cf_end', self.CFEnd), - } - - d_dsData = { - 0: self.Data, - FROM_DS_FLAG: self.DataFromDS, - TO_DS_FLAG: self.DataToDS, - INTER_DS_FLAG: self.DataInterDS - } - - # For now decode everything with DATA. Haven't checked about other QoS - # additions - d_decoder = { - # modified the decoder to consider the ToDS and FromDS flags - # Omitting the 11 case for now - D_DATA: ('data_frame', d_dsData), - D_NULL: ('data_frame', d_dsData), - D_QOS_DATA: ('data_frame', d_dsData), - D_QOS_NULL: ('data_frame', d_dsData) - } - - decoder = { - MGMT_TYPE: m_decoder, - CTL_TYPE: c_decoder, - DATA_TYPE: d_decoder - } - - # Strip off the FCS field - if self.fcs_present: - self.fcs = struct.unpack('I', self.data[-1 * FCS_LENGTH:])[0] - self.data = self.data[0: -1 * FCS_LENGTH] - - if self.type == MGMT_TYPE: - self.mgmt = self.MGMT_Frame(self.data) - self.data = self.mgmt.data - if self.subtype == M_PROBE_REQ: - self.unpack_ies(self.data) - return - if self.subtype == M_ATIM: - return - - try: - parser = decoder[self.type][self.subtype][1] - name = decoder[self.type][self.subtype][0] - except KeyError: - print "Key error:", self.type, self.subtype - return - - if self.type == DATA_TYPE: - # need to grab the ToDS/FromDS info - parser = parser[self.to_ds * 10 + self.from_ds] - - if self.type == MGMT_TYPE: - field = parser(self.mgmt.data) - else: - field = parser(self.data) - self.data = field - - setattr(self, name, field) - - if self.type == MGMT_TYPE: - self.ies = self.unpack_ies(field.data) - if self.subtype in FRAMES_WITH_CAPABILITY: - self.capability = self.Capability(socket.ntohs(field.capability)) - - if self.type == DATA_TYPE and self.subtype == D_QOS_DATA: - self.qos_data = self.QoS_Data(field.data) - field.data = self.qos_data.data - - self.data = field.data - - class BlockAckReq(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('ctl', 'H', 0), - ('seq', 'H', 0), - ) - - class BlockAck(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('ctl', 'H', 0), - ('seq', 'H', 0), - ) - - @property - def compressed(self): - return (self.ctl & _COMPRESSED_MASK) >> _COMPRESSED_SHIFT - - @compressed.setter - def compressed(self, val): - self.ctl = (val << _COMPRESSED_SHIFT) | (self.ctl & ~_COMPRESSED_MASK) - - @property - def ack_policy(self): - return (self.ctl & _ACK_POLICY_MASK) >> _ACK_POLICY_SHIFT - - @ack_policy.setter - def ack_policy(self, val): - self.ctl = (val << _ACK_POLICY_SHIFT) | (self.ctl & ~_ACK_POLICY_MASK) - - @property - def multi_tid(self): - return (self.ctl & _MULTI_TID_MASK) >> _MULTI_TID_SHIFT - - @multi_tid.setter - def multi_tid(self, val): - self.ctl = (val << _MULTI_TID_SHIFT) | (self.ctl & ~_MULTI_TID_MASK) - - @property - def tid(self): - return (self.ctl & _TID_MASK) >> _TID_SHIFT - - @tid.setter - def tid(self, val): - self.ctl = (val << _TID_SHIFT) | (self.ctl & ~_TID_MASK) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_compressed(self): return self.compressed - - @deprecated - def _set_compressed(self, val): self.compressed = val - - @deprecated - def _get_ack_policy(self): return self.ack_policy - - @deprecated - def _set_ack_policy(self, val): self.ack_policy = val - - @deprecated - def _get_multi_tid(self): return self.multi_tid - - @deprecated - def _set_multi_tid(self, val): self.multi_tid = val - - @deprecated - def _get_tid(self): return self.tid - - @deprecated - def _set_tid(self, val): self.tid = val - # ================================================= - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = buf[self.__hdr_len__:] - self.ctl = socket.ntohs(self.ctl) - - if self.compressed: - self.bmp = struct.unpack('8s', self.data[0:_COMPRESSED_BMP_LENGTH])[0] - else: - self.bmp = struct.unpack('128s', self.data[0:_BMP_LENGTH])[0] - self.data = self.data[len(self.__hdr__) + len(self.bmp):] - - class RTS(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6) - ) - - class CTS(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ) - - class ACK(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ) - - class CFEnd(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ) - - class MGMT_Frame(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('bssid', '6s', '\x00' * 6), - ('frag_seq', 'H', 0) - ) - - class Beacon(dpkt.Packet): - __hdr__ = ( - ('timestamp', 'Q', 0), - ('interval', 'H', 0), - ('capability', 'H', 0) - ) - - class Disassoc(dpkt.Packet): - __hdr__ = ( - ('reason', 'H', 0), - ) - - class Assoc_Req(dpkt.Packet): - __hdr__ = ( - ('capability', 'H', 0), - ('interval', 'H', 0) - ) - - class Assoc_Resp(dpkt.Packet): - __hdr__ = ( - ('capability', 'H', 0), - ('status', 'H', 0), - ('aid', 'H', 0) - ) - - class Reassoc_Req(dpkt.Packet): - __hdr__ = ( - ('capability', 'H', 0), - ('interval', 'H', 0), - ('current_ap', '6s', '\x00' * 6) - ) - - # This obviously doesn't support any of AUTH frames that use encryption - class Auth(dpkt.Packet): - __hdr__ = ( - ('algorithm', 'H', 0), - ('auth_seq', 'H', 0), - ) - - class Deauth(dpkt.Packet): - __hdr__ = ( - ('reason', 'H', 0), - ) - - class Action(dpkt.Packet): - __hdr__ = ( - ('category', 'B', 0), - ('code', 'B', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - - action_parser = { - BLOCK_ACK: {BLOCK_ACK_CODE_REQUEST: ('block_ack_request', IEEE80211.BlockAckActionRequest), - BLOCK_ACK_CODE_RESPONSE: ('block_ack_response', IEEE80211.BlockAckActionResponse), - }, - } - - decoder = action_parser[self.category][self.code][1] - field_name = action_parser[self.category][self.code][0] - field = decoder(self.data) - setattr(self, field_name, field) - self.data = field.data - - class BlockAckActionRequest(dpkt.Packet): - __hdr__ = ( - ('dialog', 'B', 0), - ('parameters', 'H', 0), - ('timeout', 'H', 0), - ('starting_seq', 'H', 0), - ) - - class BlockAckActionResponse(dpkt.Packet): - __hdr__ = ( - ('dialog', 'B', 0), - ('status_code', 'H', 0), - ('parameters', 'H', 0), - ('timeout', 'H', 0), - ) - - class Data(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('bssid', '6s', '\x00' * 6), - ('frag_seq', 'H', 0) - ) - - class DataFromDS(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('bssid', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('frag_seq', 'H', 0) - ) - - class DataToDS(dpkt.Packet): - __hdr__ = ( - ('bssid', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('dst', '6s', '\x00' * 6), - ('frag_seq', 'H', 0) - ) - - class DataInterDS(dpkt.Packet): - __hdr__ = ( - ('dst', '6s', '\x00' * 6), - ('src', '6s', '\x00' * 6), - ('da', '6s', '\x00' * 6), - ('frag_seq', 'H', 0), - ('sa', '6s', '\x00' * 6) - ) - - class QoS_Data(dpkt.Packet): - __hdr__ = ( - ('control', 'H', 0), - ) - - class IE(dpkt.Packet): - __hdr__ = ( - ('id', 'B', 0), - ('len', 'B', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.info = buf[2:self.len + 2] - - class FH(dpkt.Packet): - __hdr__ = ( - ('id', 'B', 0), - ('len', 'B', 0), - ('tu', 'H', 0), - ('hopset', 'B', 0), - ('hoppattern', 'B', 0), - ('hopindex', 'B', 0) - ) - - class DS(dpkt.Packet): - __hdr__ = ( - ('id', 'B', 0), - ('len', 'B', 0), - ('ch', 'B', 0) - ) - - class CF(dpkt.Packet): - __hdr__ = ( - ('id', 'B', 0), - ('len', 'B', 0), - ('count', 'B', 0), - ('period', 'B', 0), - ('max', 'H', 0), - ('dur', 'H', 0) - ) - - class TIM(dpkt.Packet): - __hdr__ = ( - ('id', 'B', 0), - ('len', 'B', 0), - ('count', 'B', 0), - ('period', 'B', 0), - ('ctrl', 'H', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.bitmap = buf[5:self.len + 2] - - class IBSS(dpkt.Packet): - __hdr__ = ( - ('id', 'B', 0), - ('len', 'B', 0), - ('atim', 'H', 0) - ) - -def test_802211_ack(): - s = '\xd4\x00\x00\x00\x00\x12\xf0\xb6\x1c\xa4\xff\xff\xff\xff' - ieee = IEEE80211(s, fcs=True) - assert ieee.version == 0 - assert ieee.type == CTL_TYPE - assert ieee.subtype == C_ACK - assert ieee.to_ds == 0 - assert ieee.from_ds == 0 - assert ieee.pwr_mgt == 0 - assert ieee.more_data == 0 - assert ieee.wep == 0 - assert ieee.order == 0 - assert ieee.ack.dst == '\x00\x12\xf0\xb6\x1c\xa4' - fcs = struct.unpack('I', s[-4:])[0] - assert ieee.fcs == fcs - -def test_80211_beacon(): - s = '\x80\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x26\xcb\x18\x6a\x30\x00\x26\xcb\x18\x6a\x30\xa0\xd0\x77\x09\x32\x03\x8f\x00\x00\x00\x66\x00\x31\x04\x00\x04\x43\x41\x45\x4e\x01\x08\x82\x84\x8b\x0c\x12\x96\x18\x24\x03\x01\x01\x05\x04\x00\x01\x00\x00\x07\x06\x55\x53\x20\x01\x0b\x1a\x0b\x05\x00\x00\x6e\x00\x00\x2a\x01\x02\x2d\x1a\x6e\x18\x1b\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x28\x00\x32\x04\x30\x48\x60\x6c\x36\x03\x51\x63\x03\x3d\x16\x01\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x1e\x05\x00\x8f\x00\x0f\x00\xff\x03\x59\x00\x63\x73\x65\x2d\x33\x39\x31\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x96\x06\x00\x40\x96\x00\x14\x00\xdd\x18\x00\x50\xf2\x02\x01\x01\x80\x00\x03\xa4\x00\x00\x27\xa4\x00\x00\x42\x43\x5e\x00\x62\x32\x2f\x00\xdd\x06\x00\x40\x96\x01\x01\x04\xdd\x05\x00\x40\x96\x03\x05\xdd\x05\x00\x40\x96\x0b\x09\xdd\x08\x00\x40\x96\x13\x01\x00\x34\x01\xdd\x05\x00\x40\x96\x14\x05' - ieee = IEEE80211(s, fcs=True) - assert ieee.version == 0 - assert ieee.type == MGMT_TYPE - assert ieee.subtype == M_BEACON - assert ieee.to_ds == 0 - assert ieee.from_ds == 0 - assert ieee.pwr_mgt == 0 - assert ieee.more_data == 0 - assert ieee.wep == 0 - assert ieee.order == 0 - assert ieee.mgmt.dst == '\xff\xff\xff\xff\xff\xff' - assert ieee.mgmt.src == '\x00\x26\xcb\x18\x6a\x30' - assert ieee.beacon.capability == 0x3104 - assert ieee.capability.privacy == 1 - assert ieee.ssid.data == 'CAEN' - assert ieee.rate.data == '\x82\x84\x8b\x0c\x12\x96\x18\x24' - assert ieee.ds.data == '\x01' - assert ieee.tim.data == '\x00\x01\x00\x00' - fcs = struct.unpack('I', s[-4:])[0] - assert ieee.fcs == fcs - -def test_80211_data(): - s = '\x08\x09\x20\x00\x00\x26\xcb\x17\x3d\x91\x00\x16\x44\xb0\xae\xc6\x00\x02\xb3\xd6\x26\x3c\x80\x7e\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04\xac\x17\x00\x00' - ieee = IEEE80211(s, fcs=True) - assert ieee.type == DATA_TYPE - assert ieee.subtype == D_DATA - assert ieee.data_frame.dst == '\x00\x02\xb3\xd6\x26\x3c' - assert ieee.data_frame.src == '\x00\x16\x44\xb0\xae\xc6' - assert ieee.data_frame.frag_seq == 0x807e - assert ieee.data == '\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04' - assert ieee.fcs == struct.unpack('I', '\xac\x17\x00\x00')[0] - - import llc, ip - - llc_pkt = llc.LLC(ieee.data_frame.data) - ip_pkt = ip.IP(llc_pkt.data) - assert ip_pkt.dst == '\x3f\xf5\xd1\x69' - -def test_80211_data_qos(): - s = '\x88\x01\x3a\x01\x00\x26\xcb\x17\x44\xf0\x00\x23\xdf\xc9\xc0\x93\x00\x26\xcb\x17\x44\xf0\x20\x7b\x00\x00\xaa\xaa\x03\x00\x00\x00\x88\x8e\x01\x00\x00\x74\x02\x02\x00\x74\x19\x80\x00\x00\x00\x6a\x16\x03\x01\x00\x65\x01\x00\x00\x61\x03\x01\x4b\x4c\xa7\x7e\x27\x61\x6f\x02\x7b\x3c\x72\x39\xe3\x7b\xd7\x43\x59\x91\x7f\xaa\x22\x47\x51\xb6\x88\x9f\x85\x90\x87\x5a\xd1\x13\x20\xe0\x07\x00\x00\x68\xbd\xa4\x13\xb0\xd5\x82\x7e\xc7\xfb\xe7\xcc\xab\x6e\x5d\x5a\x51\x50\xd4\x45\xc5\xa1\x65\x53\xad\xb5\x88\x5b\x00\x1a\x00\x2f\x00\x05\x00\x04\x00\x35\x00\x0a\x00\x09\x00\x03\x00\x08\x00\x33\x00\x39\x00\x16\x00\x15\x00\x14\x01\x00\xff\xff\xff\xff' - ieee = IEEE80211(s, fcs=True) - assert ieee.type == DATA_TYPE - assert ieee.subtype == D_QOS_DATA - assert ieee.data_frame.dst == '\x00\x26\xcb\x17\x44\xf0' - assert ieee.data_frame.src == '\x00\x23\xdf\xc9\xc0\x93' - assert ieee.data_frame.frag_seq == 0x207b - assert ieee.data == '\xaa\xaa\x03\x00\x00\x00\x88\x8e\x01\x00\x00\x74\x02\x02\x00\x74\x19\x80\x00\x00\x00\x6a\x16\x03\x01\x00\x65\x01\x00\x00\x61\x03\x01\x4b\x4c\xa7\x7e\x27\x61\x6f\x02\x7b\x3c\x72\x39\xe3\x7b\xd7\x43\x59\x91\x7f\xaa\x22\x47\x51\xb6\x88\x9f\x85\x90\x87\x5a\xd1\x13\x20\xe0\x07\x00\x00\x68\xbd\xa4\x13\xb0\xd5\x82\x7e\xc7\xfb\xe7\xcc\xab\x6e\x5d\x5a\x51\x50\xd4\x45\xc5\xa1\x65\x53\xad\xb5\x88\x5b\x00\x1a\x00\x2f\x00\x05\x00\x04\x00\x35\x00\x0a\x00\x09\x00\x03\x00\x08\x00\x33\x00\x39\x00\x16\x00\x15\x00\x14\x01\x00' - assert ieee.qos_data.control == 0x0 - assert ieee.fcs == struct.unpack('I', '\xff\xff\xff\xff')[0] - -def test_bug(): - s = '\x88\x41\x2c\x00\x00\x26\xcb\x17\x44\xf0\x00\x1e\x52\x97\x14\x11\x00\x1f\x6d\xe8\x18\x00\xd0\x07\x00\x00\x6f\x00\x00\x20\x00\x00\x00\x00' - ieee = IEEE80211(s) - assert ieee.wep == 1 - -def test_data_ds(): - # verifying the ToDS and FromDS fields and that we're getting the - # correct values - - s = '\x08\x03\x00\x00\x01\x0b\x85\x00\x00\x00\x00\x26\xcb\x18\x73\x50\x01\x0b\x85\x00\x00\x00\x00\x89\x00\x26\xcb\x18\x73\x50' - ieee = IEEE80211(s) - assert ieee.type == DATA_TYPE - assert ieee.to_ds == 1 - assert ieee.from_ds == 1 - assert ieee.data_frame.sa == '\x00\x26\xcb\x18\x73\x50' - assert ieee.data_frame.src == '\x00\x26\xcb\x18\x73\x50' - assert ieee.data_frame.dst == '\x01\x0b\x85\x00\x00\x00' - assert ieee.data_frame.da == '\x01\x0b\x85\x00\x00\x00' - - s = '\x88\x41\x50\x01\x00\x26\xcb\x17\x48\xc1\x00\x24\x2c\xe7\xfe\x8a\xff\xff\xff\xff\xff\xff\x80\xa0\x00\x00\x09\x1a\x00\x20\x00\x00\x00\x00' - ieee = IEEE80211(s) - assert ieee.type == DATA_TYPE - assert ieee.to_ds == 1 - assert ieee.from_ds == 0 - assert ieee.data_frame.bssid == '\x00\x26\xcb\x17\x48\xc1' - assert ieee.data_frame.src == '\x00\x24\x2c\xe7\xfe\x8a' - assert ieee.data_frame.dst == '\xff\xff\xff\xff\xff\xff' - - s = '\x08\x02\x02\x01\x00\x02\x44\xac\x27\x70\x00\x1f\x33\x39\x75\x44\x00\x1f\x33\x39\x75\x44\x90\xa4' - ieee = IEEE80211(s) - assert ieee.type == DATA_TYPE - assert ieee.to_ds == 0 - assert ieee.from_ds == 1 - assert ieee.data_frame.bssid == '\x00\x1f\x33\x39\x75\x44' - assert ieee.data_frame.src == '\x00\x1f\x33\x39\x75\x44' - assert ieee.data_frame.dst == '\x00\x02\x44\xac\x27\x70' - -def test_compressed_block_ack(): - s = '\x94\x00\x00\x00\x34\xc0\x59\xd6\x3f\x62\xb4\x75\x0e\x46\x83\xc1\x05\x50\x80\xee\x03\x00\x00\x00\x00\x00\x00\x00\xa2\xe4\x98\x45' - ieee = IEEE80211(s, fcs=True) - assert ieee.type == CTL_TYPE - assert ieee.subtype == C_BLOCK_ACK - assert ieee.back.dst == '\x34\xc0\x59\xd6\x3f\x62' - assert ieee.back.src == '\xb4\x75\x0e\x46\x83\xc1' - assert ieee.back.compressed == 1 - assert len(ieee.back.bmp) == 8 - assert ieee.back.ack_policy == 1 - assert ieee.back.tid == 5 - -def test_action_block_ack_request(): - s = '\xd0\x00\x3a\x01\x00\x23\x14\x36\x52\x30\xb4\x75\x0e\x46\x83\xc1\xb4\x75\x0e\x46\x83\xc1\x70\x14\x03\x00\x0d\x02\x10\x00\x00\x40\x29\x06\x50\x33\x9e' - ieee = IEEE80211(s, fcs=True) - assert ieee.type == MGMT_TYPE - assert ieee.subtype == M_ACTION - assert ieee.action.category == BLOCK_ACK - assert ieee.action.code == BLOCK_ACK_CODE_REQUEST - assert ieee.action.block_ack_request.timeout == 0 - parameters = struct.unpack('H', '\x10\x02')[0] - assert ieee.action.block_ack_request.parameters == parameters - -def test_action_block_ack_response(): - s = '\xd0\x00\x3c\x00\xb4\x75\x0e\x46\x83\xc1\x00\x23\x14\x36\x52\x30\xb4\x75\x0e\x46\x83\xc1\xd0\x68\x03\x01\x0d\x00\x00\x02\x10\x88\x13\x9f\xc0\x0b\x75' - ieee = IEEE80211(s, fcs=True) - assert ieee.type == MGMT_TYPE - assert ieee.subtype == M_ACTION - assert ieee.action.category == BLOCK_ACK - assert ieee.action.code == BLOCK_ACK_CODE_RESPONSE - timeout = struct.unpack('H', '\x13\x88')[0] - assert ieee.action.block_ack_response.timeout == timeout - parameters = struct.unpack('H', '\x10\x02')[0] - assert ieee.action.block_ack_response.parameters == parameters - -if __name__ == '__main__': - # Runs all the test associated with this class/file - test_802211_ack() - test_80211_beacon() - test_80211_data() - test_80211_data_qos() - test_bug() - test_data_ds() - test_compressed_block_ack() - test_action_block_ack_request() - test_action_block_ack_response() - print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/igmp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/igmp.py deleted file mode 100644 index 5e5cb166..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/igmp.py +++ /dev/null @@ -1,19 +0,0 @@ -# $Id: igmp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Internet Group Management Protocol.""" - -import dpkt - - -class IGMP(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 0), - ('maxresp', 'B', 0), - ('sum', 'H', 0), - ('group', 'I', 0) - ) - - def __str__(self): - if not self.sum: - self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) - return dpkt.Packet.__str__(self) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ip.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ip.py deleted file mode 100644 index 0658ff6a..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/ip.py +++ /dev/null @@ -1,359 +0,0 @@ -# $Id: ip.py 87 2013-03-05 19:41:04Z andrewflnr@gmail.com $ -# -*- coding: utf-8 -*- -"""Internet Protocol.""" - -import dpkt -from decorators import deprecated - - -class IP(dpkt.Packet): - __hdr__ = ( - ('v_hl', 'B', (4 << 4) | (20 >> 2)), - ('tos', 'B', 0), - ('len', 'H', 20), - ('id', 'H', 0), - ('off', 'H', 0), - ('ttl', 'B', 64), - ('p', 'B', 0), - ('sum', 'H', 0), - ('src', '4s', '\x00' * 4), - ('dst', '4s', '\x00' * 4) - ) - _protosw = {} - opts = '' - - @property - def v(self): - return self.v_hl >> 4 - - @v.setter - def v(self, v): - self.v_hl = (v << 4) | (self.v_hl & 0xf) - - @property - def hl(self): - return self.v_hl & 0xf - - @hl.setter - def hl(self, hl): - self.v_hl = (self.v_hl & 0xf0) | hl - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_v(self): - return self.v - - @deprecated - def _set_v(self, v): - self.v = v - - @deprecated - def _get_hl(self): - return self.hl - - @deprecated - def _set_hl(self, hl): - self.hl = hl - - # ================================================= - - def __len__(self): - return self.__hdr_len__ + len(self.opts) + len(self.data) - - def __str__(self): - if self.sum == 0: - self.sum = dpkt.in_cksum(self.pack_hdr() + self.opts) - if (self.p == 6 or self.p == 17) and (self.off & (IP_MF | IP_OFFMASK)) == 0 and \ - isinstance(self.data, dpkt.Packet) and self.data.sum == 0: - # Set zeroed TCP and UDP checksums for non-fragments. - p = str(self.data) - s = dpkt.struct.pack('>4s4sxBH', self.src, self.dst, - self.p, len(p)) - s = dpkt.in_cksum_add(0, s) - s = dpkt.in_cksum_add(s, p) - self.data.sum = dpkt.in_cksum_done(s) - if self.p == 17 and self.data.sum == 0: - self.data.sum = 0xffff # RFC 768 - # XXX - skip transports which don't need the pseudoheader - return self.pack_hdr() + self.opts + str(self.data) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - ol = ((self.v_hl & 0xf) << 2) - self.__hdr_len__ - if ol < 0: - raise dpkt.UnpackError, 'invalid header length' - self.opts = buf[self.__hdr_len__:self.__hdr_len__ + ol] - if self.len: - buf = buf[self.__hdr_len__ + ol:self.len] - else: # very likely due to TCP segmentation offload - buf = buf[self.__hdr_len__ + ol:] - try: - self.data = self._protosw[self.p](buf) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - self.data = buf - - @classmethod - def set_proto(cls, p, pktclass): - cls._protosw[p] = pktclass - - @classmethod - def get_proto(cls, p): - return cls._protosw[p] - -# IP Headers -IP_ADDR_LEN = 0x04 -IP_ADDR_BITS = 0x20 - -IP_HDR_LEN = 0x14 -IP_OPT_LEN = 0x02 -IP_OPT_LEN_MAX = 0x28 -IP_HDR_LEN_MAX = IP_HDR_LEN + IP_OPT_LEN_MAX - -IP_LEN_MAX = 0xffff -IP_LEN_MIN = IP_HDR_LEN - -# Reserved Addresses -IP_ADDR_ANY = "\x00\x00\x00\x00" # 0.0.0.0 -IP_ADDR_BROADCAST = "\xff\xff\xff\xff" # 255.255.255.255 -IP_ADDR_LOOPBACK = "\x7f\x00\x00\x01" # 127.0.0.1 -IP_ADDR_MCAST_ALL = "\xe0\x00\x00\x01" # 224.0.0.1 -IP_ADDR_MCAST_LOCAL = "\xe0\x00\x00\xff" # 224.0.0.255 - -# Type of service (ip_tos), RFC 1349 ("obsoleted by RFC 2474") -IP_TOS_DEFAULT = 0x00 # default -IP_TOS_LOWDELAY = 0x10 # low delay -IP_TOS_THROUGHPUT = 0x08 # high throughput -IP_TOS_RELIABILITY = 0x04 # high reliability -IP_TOS_LOWCOST = 0x02 # low monetary cost - XXX -IP_TOS_ECT = 0x02 # ECN-capable transport -IP_TOS_CE = 0x01 # congestion experienced - -# IP precedence (high 3 bits of ip_tos), hopefully unused -IP_TOS_PREC_ROUTINE = 0x00 -IP_TOS_PREC_PRIORITY = 0x20 -IP_TOS_PREC_IMMEDIATE = 0x40 -IP_TOS_PREC_FLASH = 0x60 -IP_TOS_PREC_FLASHOVERRIDE = 0x80 -IP_TOS_PREC_CRITIC_ECP = 0xa0 -IP_TOS_PREC_INTERNETCONTROL = 0xc0 -IP_TOS_PREC_NETCONTROL = 0xe0 - -# Fragmentation flags (ip_off) -IP_RF = 0x8000 # reserved -IP_DF = 0x4000 # don't fragment -IP_MF = 0x2000 # more fragments (not last frag) -IP_OFFMASK = 0x1fff # mask for fragment offset - -# Time-to-live (ip_ttl), seconds -IP_TTL_DEFAULT = 64 # default ttl, RFC 1122, RFC 1340 -IP_TTL_MAX = 255 # maximum ttl - -# Protocol (ip_p) - http://www.iana.org/assignments/protocol-numbers -IP_PROTO_IP = 0 # dummy for IP -IP_PROTO_HOPOPTS = IP_PROTO_IP # IPv6 hop-by-hop options -IP_PROTO_ICMP = 1 # ICMP -IP_PROTO_IGMP = 2 # IGMP -IP_PROTO_GGP = 3 # gateway-gateway protocol -IP_PROTO_IPIP = 4 # IP in IP -IP_PROTO_ST = 5 # ST datagram mode -IP_PROTO_TCP = 6 # TCP -IP_PROTO_CBT = 7 # CBT -IP_PROTO_EGP = 8 # exterior gateway protocol -IP_PROTO_IGP = 9 # interior gateway protocol -IP_PROTO_BBNRCC = 10 # BBN RCC monitoring -IP_PROTO_NVP = 11 # Network Voice Protocol -IP_PROTO_PUP = 12 # PARC universal packet -IP_PROTO_ARGUS = 13 # ARGUS -IP_PROTO_EMCON = 14 # EMCON -IP_PROTO_XNET = 15 # Cross Net Debugger -IP_PROTO_CHAOS = 16 # Chaos -IP_PROTO_UDP = 17 # UDP -IP_PROTO_MUX = 18 # multiplexing -IP_PROTO_DCNMEAS = 19 # DCN measurement -IP_PROTO_HMP = 20 # Host Monitoring Protocol -IP_PROTO_PRM = 21 # Packet Radio Measurement -IP_PROTO_IDP = 22 # Xerox NS IDP -IP_PROTO_TRUNK1 = 23 # Trunk-1 -IP_PROTO_TRUNK2 = 24 # Trunk-2 -IP_PROTO_LEAF1 = 25 # Leaf-1 -IP_PROTO_LEAF2 = 26 # Leaf-2 -IP_PROTO_RDP = 27 # "Reliable Datagram" proto -IP_PROTO_IRTP = 28 # Inet Reliable Transaction -IP_PROTO_TP = 29 # ISO TP class 4 -IP_PROTO_NETBLT = 30 # Bulk Data Transfer -IP_PROTO_MFPNSP = 31 # MFE Network Services -IP_PROTO_MERITINP = 32 # Merit Internodal Protocol -IP_PROTO_SEP = 33 # Sequential Exchange proto -IP_PROTO_3PC = 34 # Third Party Connect proto -IP_PROTO_IDPR = 35 # Interdomain Policy Route -IP_PROTO_XTP = 36 # Xpress Transfer Protocol -IP_PROTO_DDP = 37 # Datagram Delivery Proto -IP_PROTO_CMTP = 38 # IDPR Ctrl Message Trans -IP_PROTO_TPPP = 39 # TP++ Transport Protocol -IP_PROTO_IL = 40 # IL Transport Protocol -IP_PROTO_IP6 = 41 # IPv6 -IP_PROTO_SDRP = 42 # Source Demand Routing -IP_PROTO_ROUTING = 43 # IPv6 routing header -IP_PROTO_FRAGMENT = 44 # IPv6 fragmentation header -IP_PROTO_RSVP = 46 # Reservation protocol -IP_PROTO_GRE = 47 # General Routing Encap -IP_PROTO_MHRP = 48 # Mobile Host Routing -IP_PROTO_ENA = 49 # ENA -IP_PROTO_ESP = 50 # Encap Security Payload -IP_PROTO_AH = 51 # Authentication Header -IP_PROTO_INLSP = 52 # Integated Net Layer Sec -IP_PROTO_SWIPE = 53 # SWIPE -IP_PROTO_NARP = 54 # NBMA Address Resolution -IP_PROTO_MOBILE = 55 # Mobile IP, RFC 2004 -IP_PROTO_TLSP = 56 # Transport Layer Security -IP_PROTO_SKIP = 57 # SKIP -IP_PROTO_ICMP6 = 58 # ICMP for IPv6 -IP_PROTO_NONE = 59 # IPv6 no next header -IP_PROTO_DSTOPTS = 60 # IPv6 destination options -IP_PROTO_ANYHOST = 61 # any host internal proto -IP_PROTO_CFTP = 62 # CFTP -IP_PROTO_ANYNET = 63 # any local network -IP_PROTO_EXPAK = 64 # SATNET and Backroom EXPAK -IP_PROTO_KRYPTOLAN = 65 # Kryptolan -IP_PROTO_RVD = 66 # MIT Remote Virtual Disk -IP_PROTO_IPPC = 67 # Inet Pluribus Packet Core -IP_PROTO_DISTFS = 68 # any distributed fs -IP_PROTO_SATMON = 69 # SATNET Monitoring -IP_PROTO_VISA = 70 # VISA Protocol -IP_PROTO_IPCV = 71 # Inet Packet Core Utility -IP_PROTO_CPNX = 72 # Comp Proto Net Executive -IP_PROTO_CPHB = 73 # Comp Protocol Heart Beat -IP_PROTO_WSN = 74 # Wang Span Network -IP_PROTO_PVP = 75 # Packet Video Protocol -IP_PROTO_BRSATMON = 76 # Backroom SATNET Monitor -IP_PROTO_SUNND = 77 # SUN ND Protocol -IP_PROTO_WBMON = 78 # WIDEBAND Monitoring -IP_PROTO_WBEXPAK = 79 # WIDEBAND EXPAK -IP_PROTO_EON = 80 # ISO CNLP -IP_PROTO_VMTP = 81 # Versatile Msg Transport -IP_PROTO_SVMTP = 82 # Secure VMTP -IP_PROTO_VINES = 83 # VINES -IP_PROTO_TTP = 84 # TTP -IP_PROTO_NSFIGP = 85 # NSFNET-IGP -IP_PROTO_DGP = 86 # Dissimilar Gateway Proto -IP_PROTO_TCF = 87 # TCF -IP_PROTO_EIGRP = 88 # EIGRP -IP_PROTO_OSPF = 89 # Open Shortest Path First -IP_PROTO_SPRITERPC = 90 # Sprite RPC Protocol -IP_PROTO_LARP = 91 # Locus Address Resolution -IP_PROTO_MTP = 92 # Multicast Transport Proto -IP_PROTO_AX25 = 93 # AX.25 Frames -IP_PROTO_IPIPENCAP = 94 # yet-another IP encap -IP_PROTO_MICP = 95 # Mobile Internet Ctrl -IP_PROTO_SCCSP = 96 # Semaphore Comm Sec Proto -IP_PROTO_ETHERIP = 97 # Ethernet in IPv4 -IP_PROTO_ENCAP = 98 # encapsulation header -IP_PROTO_ANYENC = 99 # private encryption scheme -IP_PROTO_GMTP = 100 # GMTP -IP_PROTO_IFMP = 101 # Ipsilon Flow Mgmt Proto -IP_PROTO_PNNI = 102 # PNNI over IP -IP_PROTO_PIM = 103 # Protocol Indep Multicast -IP_PROTO_ARIS = 104 # ARIS -IP_PROTO_SCPS = 105 # SCPS -IP_PROTO_QNX = 106 # QNX -IP_PROTO_AN = 107 # Active Networks -IP_PROTO_IPCOMP = 108 # IP Payload Compression -IP_PROTO_SNP = 109 # Sitara Networks Protocol -IP_PROTO_COMPAQPEER = 110 # Compaq Peer Protocol -IP_PROTO_IPXIP = 111 # IPX in IP -IP_PROTO_VRRP = 112 # Virtual Router Redundancy -IP_PROTO_PGM = 113 # PGM Reliable Transport -IP_PROTO_ANY0HOP = 114 # 0-hop protocol -IP_PROTO_L2TP = 115 # Layer 2 Tunneling Proto -IP_PROTO_DDX = 116 # D-II Data Exchange (DDX) -IP_PROTO_IATP = 117 # Interactive Agent Xfer -IP_PROTO_STP = 118 # Schedule Transfer Proto -IP_PROTO_SRP = 119 # SpectraLink Radio Proto -IP_PROTO_UTI = 120 # UTI -IP_PROTO_SMP = 121 # Simple Message Protocol -IP_PROTO_SM = 122 # SM -IP_PROTO_PTP = 123 # Performance Transparency -IP_PROTO_ISIS = 124 # ISIS over IPv4 -IP_PROTO_FIRE = 125 # FIRE -IP_PROTO_CRTP = 126 # Combat Radio Transport -IP_PROTO_CRUDP = 127 # Combat Radio UDP -IP_PROTO_SSCOPMCE = 128 # SSCOPMCE -IP_PROTO_IPLT = 129 # IPLT -IP_PROTO_SPS = 130 # Secure Packet Shield -IP_PROTO_PIPE = 131 # Private IP Encap in IP -IP_PROTO_SCTP = 132 # Stream Ctrl Transmission -IP_PROTO_FC = 133 # Fibre Channel -IP_PROTO_RSVPIGN = 134 # RSVP-E2E-IGNORE -IP_PROTO_RAW = 255 # Raw IP packets -IP_PROTO_RESERVED = IP_PROTO_RAW # Reserved -IP_PROTO_MAX = 255 - -# XXX - auto-load IP dispatch table from IP_PROTO_* definitions - - -def __load_protos(): - g = globals() - for k, v in g.iteritems(): - if k.startswith('IP_PROTO_'): - name = k[9:].lower() - try: - mod = __import__(name, g) - except ImportError: - continue - IP.set_proto(v, getattr(mod, name.upper())) - - -if not IP._protosw: - __load_protos() - - -def test_ip(): - import udp - - s = 'E\x00\x00"\x00\x00\x00\x00@\x11r\xc0\x01\x02\x03\x04\x01\x02\x03\x04\x00o\x00\xde\x00\x0e\xbf5foobar' - ip = IP(id=0, src='\x01\x02\x03\x04', dst='\x01\x02\x03\x04', p=17) - u = udp.UDP(sport=111, dport=222) - u.data = 'foobar' - u.ulen += len(u.data) - ip.data = u - ip.len += len(u) - assert (str(ip) == s) - - ip = IP(s) - assert (str(ip) == s) - assert (ip.udp.sport == 111) - assert (ip.udp.data == 'foobar') - - -def test_hl(): # Todo chack this test method - s = 'BB\x03\x00\x00\x00\x00\x00\x00\x00\xd0\x00\xec\xbc\xa5\x00\x00\x00\x03\x80\x00\x00\xd0\x01\xf2\xac\xa5"0\x01\x00\x14\x00\x02\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00' - try: - IP(s) - except dpkt.UnpackError: - pass - - -def test_opt(): - s = '\x4f\x00\x00\x50\xae\x08\x00\x00\x40\x06\x17\xfc\xc0\xa8\x0a\x26\xc0\xa8\x0a\x01\x07\x27\x08\x01\x02\x03\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - ip = IP(s) - ip.sum = 0 - assert (str(ip) == s) - - -def test_zerolen(): - import tcp - d = 'X' * 2048 - s = 'E\x00\x00\x004\xce@\x00\x80\x06\x00\x00\x7f\x00\x00\x01\x7f\x00\x00\x01\xccN\x0c8`\xff\xc6N_\x8a\x12\x98P\x18@):\xa3\x00\x00' + d - ip = IP(s) - assert (isinstance(ip.data, tcp.TCP)) - assert (ip.tcp.data == d) - - -if __name__ == '__main__': - test_ip() - test_hl() - test_opt() - test_zerolen() - print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ip6.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ip6.py deleted file mode 100644 index 099abfcb..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/ip6.py +++ /dev/null @@ -1,383 +0,0 @@ -# $Id: ip6.py 87 2013-03-05 19:41:04Z andrewflnr@gmail.com $ -# -*- coding: utf-8 -*- -"""Internet Protocol, version 6.""" - -import dpkt -from decorators import deprecated - - -class IP6(dpkt.Packet): - __hdr__ = ( - ('v_fc_flow', 'I', 0x60000000L), - ('plen', 'H', 0), # payload length (not including header) - ('nxt', 'B', 0), # next header protocol - ('hlim', 'B', 0), # hop limit - ('src', '16s', ''), - ('dst', '16s', '') - ) - - # XXX - to be shared with IP. We cannot refer to the ip module - # right now because ip.__load_protos() expects the IP6 class to be - # defined. - _protosw = None - - @property - def v(self): - return self.v_fc_flow >> 28 - - @v.setter - def v(self, v): - self.v_fc_flow = (self.v_fc_flow & ~0xf0000000L) | (v << 28) - - @property - def fc(self): - return (self.v_fc_flow >> 20) & 0xff - - @fc.setter - def fc(self, v): - self.v_fc_flow = (self.v_fc_flow & ~0xff00000L) | (v << 20) - - @property - def flow(self): - return self.v_fc_flow & 0xfffff - - @flow.setter - def flow(self, v): - self.v_fc_flow = (self.v_fc_flow & ~0xfffff) | (v & 0xfffff) - - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_v(self): - return self.v - - @deprecated - def _set_v(self, v): - self.v = v - - @deprecated - def _get_fc(self): - return self.fc - - @deprecated - def _set_fc(self, v): - self.rc = v - - @deprecated - def _get_flow(self): - return self.flow - - @deprecated - def _set_flow(self, v): - self.flow = v - - # ================================================= - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.extension_hdrs = dict(((i, None) for i in ext_hdrs)) - - if self.plen: - buf = self.data[:self.plen] - else: # due to jumbo payload or TSO - buf = self.data - - next = self.nxt - - while next in ext_hdrs: - ext = ext_hdrs_cls[next](buf) - self.extension_hdrs[next] = ext - buf = buf[ext.length:] - next = ext.nxt - - # set the payload protocol id - setattr(self, 'p', next) - - try: - self.data = self._protosw[next](buf) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - self.data = buf - - def headers_str(self): - """Output extension headers in order defined in RFC1883 (except dest opts)""" - - header_str = "" - - for hdr in ext_hdrs: - if not self.extension_hdrs[hdr] is None: - header_str += str(self.extension_hdrs[hdr]) - return header_str - - def __str__(self): - if (self.nxt == 6 or self.nxt == 17 or self.nxt == 58) and not self.data.sum: - # XXX - set TCP, UDP, and ICMPv6 checksums - p = str(self.data) - s = dpkt.struct.pack('>16s16sxBH', self.src, self.dst, self.nxt, len(p)) - s = dpkt.in_cksum_add(0, s) - s = dpkt.in_cksum_add(s, p) - try: - self.data.sum = dpkt.in_cksum_done(s) - except AttributeError: - pass - return self.pack_hdr() + self.headers_str() + str(self.data) - - @classmethod - def set_proto(cls, p, pktclass): - cls._protosw[p] = pktclass - - @classmethod - def get_proto(cls, p): - return cls._protosw[p] - - -import ip -# We are most likely still in the middle of ip.__load_protos() which -# implicitly loads this module through __import__(), so the content of -# ip.IP._protosw is still incomplete at the moment. By sharing the -# same dictionary by reference as opposed to making a copy, when -# ip.__load_protos() finishes, we will also automatically get the most -# up-to-date dictionary. -IP6._protosw = ip.IP._protosw - - -class IP6ExtensionHeader(dpkt.Packet): - """ - An extension header is very similar to a 'sub-packet'. - We just want to re-use all the hdr unpacking etc. - """ - pass - - -class IP6OptsHeader(IP6ExtensionHeader): - __hdr__ = ( - ('nxt', 'B', 0), # next extension header protocol - ('len', 'B', 0) # option data length in 8 octect units (ignoring first 8 octets) so, len 0 == 64bit header - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - setattr(self, 'length', (self.len + 1) * 8) - options = [] - - index = 0 - - while index < self.length - 2: - opt_type = ord(self.data[index]) - - # PAD1 option - if opt_type == 0: - index += 1 - continue - - opt_length = ord(self.data[index + 1]) - - if opt_type == 1: # PADN option - # PADN uses opt_length bytes in total - index += opt_length + 2 - continue - - options.append( - {'type': opt_type, 'opt_length': opt_length, 'data': self.data[index + 2:index + 2 + opt_length]}) - - # add the two chars and the option_length, to move to the next option - index += opt_length + 2 - - setattr(self, 'options', options) - - -class IP6HopOptsHeader(IP6OptsHeader): pass - - -class IP6DstOptsHeader(IP6OptsHeader): pass - - -class IP6RoutingHeader(IP6ExtensionHeader): - __hdr__ = ( - ('nxt', 'B', 0), # next extension header protocol - ('len', 'B', 0), # extension data length in 8 octect units (ignoring first 8 octets) (<= 46 for type 0) - ('type', 'B', 0), # routing type (currently, only 0 is used) - ('segs_left', 'B', 0), # remaining segments in route, until destination (<= 23) - ('rsvd_sl_bits', 'I', 0), # reserved (1 byte), strict/loose bitmap for addresses - ) - - @property - def sl_bits(self): - return self.rsvd_sl_bits & 0xffffff - - @sl_bits.setter - def sl_bits(self, v): - self.rsvd_sl_bits = (self.rsvd_sl_bits & ~0xfffff) | (v & 0xfffff) - - # Deprecated methods, will be removed in the future - # ================================================= - def _get_sl_bits(self): return self.sl_bits - - def _set_sl_bits(self, v): self.sl_bits = v - - # ================================================= - - def unpack(self, buf): - hdr_size = 8 - addr_size = 16 - - dpkt.Packet.unpack(self, buf) - - addresses = [] - num_addresses = self.len / 2 - buf = buf[hdr_size:hdr_size + num_addresses * addr_size] - - for i in range(num_addresses): - addresses.append(buf[i * addr_size: i * addr_size + addr_size]) - - self.data = buf - setattr(self, 'addresses', addresses) - setattr(self, 'length', self.len * 8 + 8) - - -class IP6FragmentHeader(IP6ExtensionHeader): - __hdr__ = ( - ('nxt', 'B', 0), # next extension header protocol - ('resv', 'B', 0), # reserved, set to 0 - ('frag_off_resv_m', 'H', 0), # frag offset (13 bits), reserved zero (2 bits), More frags flag - ('id', 'I', 0) # fragments id - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - setattr(self, 'length', self.__hdr_len__) - - @property - def frag_off(self): - return self.frag_off_resv_m >> 3 - - @frag_off.setter - def frag_off(self, v): - self.frag_off_resv_m = (self.frag_off_resv_m & ~0xfff8) | (v << 3) - - @property - def m_flag(self): - return self.frag_off_resv_m & 1 - - @m_flag.setter - def m_flag(self, v): - self.frag_off_resv_m = (self.frag_off_resv_m & ~0xfffe) | v - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_frag_off(self): return self.flag_off - - @deprecated - def _set_frag_off(self, v): self.flag_off = v - - @deprecated - def _get_m_flag(self): return self.m_flag - - @deprecated - def _set_m_flag(self, v): self.m_flag = v - - # ================================================= - - -class IP6AHHeader(IP6ExtensionHeader): - __hdr__ = ( - ('nxt', 'B', 0), # next extension header protocol - ('len', 'B', 0), # length of header in 4 octet units (ignoring first 2 units) - ('resv', 'H', 0), # reserved, 2 bytes of 0 - ('spi', 'I', 0), # SPI security parameter index - ('seq', 'I', 0) # sequence no. - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - setattr(self, 'length', (self.len + 2) * 4) - setattr(self, 'auth_data', self.data[:(self.len - 1) * 4]) - - -class IP6ESPHeader(IP6ExtensionHeader): - def unpack(self, buf): - raise NotImplementedError("ESP extension headers are not supported.") - - -ext_hdrs = [ip.IP_PROTO_HOPOPTS, ip.IP_PROTO_ROUTING, ip.IP_PROTO_FRAGMENT, ip.IP_PROTO_AH, ip.IP_PROTO_ESP, - ip.IP_PROTO_DSTOPTS] -ext_hdrs_cls = {ip.IP_PROTO_HOPOPTS: IP6HopOptsHeader, - ip.IP_PROTO_ROUTING: IP6RoutingHeader, - ip.IP_PROTO_FRAGMENT: IP6FragmentHeader, - ip.IP_PROTO_ESP: IP6ESPHeader, - ip.IP_PROTO_AH: IP6AHHeader, - ip.IP_PROTO_DSTOPTS: IP6DstOptsHeader} - - -def test_ipg(): - s = '`\x00\x00\x00\x00(\x06@\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x11$\xff\xfe\x8c\x11\xde\xfe\x80\x00\x00\x00\x00\x00\x00\x02\xb0\xd0\xff\xfe\xe1\x80r\xcd\xca\x00\x16\x04\x84F\xd5\x00\x00\x00\x00\xa0\x02\xff\xff\xf8\t\x00\x00\x02\x04\x05\xa0\x01\x03\x03\x00\x01\x01\x08\n}\x185?\x00\x00\x00\x00' - _ip = IP6(s) - # print `ip` - _ip.data.sum = 0 - s2 = str(_ip) - IP6(s) - # print `ip2` - assert (s == s2) - - -def test_ip6_routing_header(): - s = '`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x02\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' - ip = IP6(s) - s2 = str(ip) - # 43 is Routing header id - assert (len(ip.extension_hdrs[43].addresses) == 2) - assert (ip.tcp) - assert (s == s2) - - -def test_ip6_fragment_header(): - s = '\x06\xee\xff\xfb\x00\x00\xff\xff' - fh = IP6FragmentHeader(s) - # s2 = str(fh) variable 's2' is not used - str(fh) - assert (fh.nxt == 6) - assert (fh.id == 65535) - assert (fh.frag_off == 8191) - assert (fh.m_flag == 1) - - -def test_ip6_options_header(): - s = ';\x04\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x02\x00\x00' - options = IP6OptsHeader(s).options - assert (len(options) == 3) - - -def test_ip6_ah_header(): - s = ';\x04\x00\x00\x02\x02\x02\x02\x01\x01\x01\x01\x78\x78\x78\x78\x78\x78\x78\x78' - ah = IP6AHHeader(s) - assert (ah.length == 24) - assert (ah.auth_data == 'xxxxxxxx') - assert (ah.spi == 0x2020202) - assert (ah.seq == 0x1010101) - - -def test_ip6_extension_headers(): - p = '`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x02\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' - ip = IP6(p) - o = ';\x04\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x02\x00\x00' - options = IP6HopOptsHeader(o) - ip.extension_hdrs[0] = options - fh = '\x06\xee\xff\xfb\x00\x00\xff\xff' - ip.extension_hdrs[44] = IP6FragmentHeader(fh) - ah = ';\x04\x00\x00\x02\x02\x02\x02\x01\x01\x01\x01\x78\x78\x78\x78\x78\x78\x78\x78' - ip.extension_hdrs[51] = IP6AHHeader(ah) - do = ';\x02\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - ip.extension_hdrs[60] = IP6DstOptsHeader(do) - assert (len([k for k in ip.extension_hdrs if (not ip.extension_hdrs[k] is None)]) == 5) - - -if __name__ == '__main__': - test_ipg() - test_ip6_routing_header() - test_ip6_fragment_header() - test_ip6_options_header() - test_ip6_ah_header() - test_ip6_extension_headers() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ipx.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ipx.py deleted file mode 100644 index b95ff0d9..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/ipx.py +++ /dev/null @@ -1,18 +0,0 @@ -# $Id: ipx.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Internetwork Packet Exchange.""" - -import dpkt - -IPX_HDR_LEN = 30 - - -class IPX(dpkt.Packet): - __hdr__ = ( - ('sum', 'H', 0xffff), - ('len', 'H', IPX_HDR_LEN), - ('tc', 'B', 0), - ('pt', 'B', 0), - ('dst', '12s', ''), - ('src', '12s', '') - ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/llc.py b/external_libs/python/dpkt-1.8.6.2/dpkt/llc.py deleted file mode 100644 index ce7429f6..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/llc.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- - -import struct -import dpkt -import stp -import ethernet - - -class LLC(dpkt.Packet): - _typesw = {} - - def _unpack_data(self, buf): - if self.type == ethernet.ETH_TYPE_8021Q: - self.tag, self.type = struct.unpack('>HH', buf[:4]) - buf = buf[4:] - elif self.type == ethernet.ETH_TYPE_MPLS or self.type == ethernet.ETH_TYPE_MPLS_MCAST: - # XXX - skip labels - for i in range(24): - if struct.unpack('>I', buf[i:i + 4])[0] & 0x0100: # MPLS_STACK_BOTTOM - break - self.type = ethernet.ETH_TYPE_IP - buf = buf[(i + 1) * 4:] - try: - self.data = self._typesw[self.type](buf) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - self.data = buf - - def unpack(self, buf): - self.data = buf - if self.data.startswith('\xaa\xaa'): - # SNAP - self.type = struct.unpack('>H', self.data[6:8])[0] - self._unpack_data(self.data[8:]) - else: - # non-SNAP - dsap = ord(self.data[0]) - if dsap == 0x06: # SAP_IP - self.data = self.ip = self._typesw[ethernet.ETH_TYPE_IP](self.data[3:]) - elif dsap == 0x10 or dsap == 0xe0: # SAP_NETWARE{1,2} - self.data = self.ipx = self._typesw[ethernet.ETH_TYPE_IPX](self.data[3:]) - elif dsap == 0x42: # SAP_STP - self.data = self.stp = stp.STP(self.data[3:]) - - -def test_llc(): - s = '\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04\xac\x17\x00\x00' - import ip - llc_pkt = LLC(s) - ip_pkt = ip.IP(llc_pkt.data) - assert (llc_pkt.type == ethernet.ETH_TYPE_IP) - assert (ip_pkt.dst == '\x3f\xf5\xd1\x69') - -if __name__ == '__main__': - test_llc() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/loopback.py b/external_libs/python/dpkt-1.8.6.2/dpkt/loopback.py deleted file mode 100644 index 5bf24bf5..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/loopback.py +++ /dev/null @@ -1,25 +0,0 @@ -# $Id: loopback.py 38 2007-03-17 03:33:16Z dugsong $ -# -*- coding: utf-8 -*- -"""Platform-dependent loopback header.""" - -import dpkt -import ethernet -import ip -import ip6 - - -class Loopback(dpkt.Packet): - __hdr__ = (('family', 'I', 0), ) - __byte_order__ = '@' - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.family == 2: - self.data = ip.IP(self.data) - elif self.family == 0x02000000: - self.family = 2 - self.data = ip.IP(self.data) - elif self.family in (24, 28, 30): - self.data = ip6.IP6(self.data) - elif self.family > 1500: - self.data = ethernet.Ethernet(self.data) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/mrt.py b/external_libs/python/dpkt-1.8.6.2/dpkt/mrt.py deleted file mode 100644 index aa1dc78a..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/mrt.py +++ /dev/null @@ -1,96 +0,0 @@ -# $Id: mrt.py 29 2007-01-26 02:29:07Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Multi-threaded Routing Toolkit.""" - -import dpkt -import bgp - -# Multi-threaded Routing Toolkit -# http://www.ietf.org/internet-drafts/draft-ietf-grow-mrt-03.txt - -# MRT Types -NULL = 0 -START = 1 -DIE = 2 -I_AM_DEAD = 3 -PEER_DOWN = 4 -BGP = 5 # Deprecated by BGP4MP -RIP = 6 -IDRP = 7 -RIPNG = 8 -BGP4PLUS = 9 # Deprecated by BGP4MP -BGP4PLUS_01 = 10 # Deprecated by BGP4MP -OSPF = 11 -TABLE_DUMP = 12 -BGP4MP = 16 -BGP4MP_ET = 17 -ISIS = 32 -ISIS_ET = 33 -OSPF_ET = 64 - -# BGP4MP Subtypes -BGP4MP_STATE_CHANGE = 0 -BGP4MP_MESSAGE = 1 -BGP4MP_ENTRY = 2 -BGP4MP_SNAPSHOT = 3 -BGP4MP_MESSAGE_32BIT_AS = 4 - -# Address Family Types -AFI_IPv4 = 1 -AFI_IPv6 = 2 - - -class MRTHeader(dpkt.Packet): - __hdr__ = ( - ('ts', 'I', 0), - ('type', 'H', 0), - ('subtype', 'H', 0), - ('len', 'I', 0) - ) - - -class TableDump(dpkt.Packet): - __hdr__ = ( - ('view', 'H', 0), - ('seq', 'H', 0), - ('prefix', 'I', 0), - ('prefix_len', 'B', 0), - ('status', 'B', 1), - ('originated_ts', 'I', 0), - ('peer_ip', 'I', 0), - ('peer_as', 'H', 0), - ('attr_len', 'H', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - plen = self.attr_len - l = [] - while plen > 0: - attr = bgp.BGP.Update.Attribute(self.data) - self.data = self.data[len(attr):] - plen -= len(attr) - l.append(attr) - self.attributes = l - - -class BGP4MPMessage(dpkt.Packet): - __hdr__ = ( - ('src_as', 'H', 0), - ('dst_as', 'H', 0), - ('intf', 'H', 0), - ('family', 'H', AFI_IPv4), - ('src_ip', 'I', 0), - ('dst_ip', 'I', 0) - ) - - -class BGP4MPMessage_32(dpkt.Packet): - __hdr__ = ( - ('src_as', 'I', 0), - ('dst_as', 'I', 0), - ('intf', 'H', 0), - ('family', 'H', AFI_IPv4), - ('src_ip', 'I', 0), - ('dst_ip', 'I', 0) - ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/netbios.py b/external_libs/python/dpkt-1.8.6.2/dpkt/netbios.py deleted file mode 100644 index 54586327..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/netbios.py +++ /dev/null @@ -1,166 +0,0 @@ -# $Id: netbios.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Network Basic Input/Output System.""" - -import struct -import dpkt -import dns - - -def encode_name(name): - """Return the NetBIOS first-level encoded name.""" - l = [] - for c in struct.pack('16s', name): - c = ord(c) - l.append(chr((c >> 4) + 0x41)) - l.append(chr((c & 0xf) + 0x41)) - return ''.join(l) - - -def decode_name(nbname): - """Return the NetBIOS first-level decoded nbname.""" - if len(nbname) != 32: - return nbname - l = [] - for i in range(0, 32, 2): - l.append(chr(((ord(nbname[i]) - 0x41) << 4) | - ((ord(nbname[i + 1]) - 0x41) & 0xf))) - return ''.join(l).split('\x00', 1)[0] - -# RR types -NS_A = 0x01 # IP address -NS_NS = 0x02 # Name Server -NS_NULL = 0x0A # NULL -NS_NB = 0x20 # NetBIOS general Name Service -NS_NBSTAT = 0x21 # NetBIOS NODE STATUS - -# RR classes -NS_IN = 1 - -# NBSTAT name flags -NS_NAME_G = 0x8000 # group name (as opposed to unique) -NS_NAME_DRG = 0x1000 # deregister -NS_NAME_CNF = 0x0800 # conflict -NS_NAME_ACT = 0x0400 # active -NS_NAME_PRM = 0x0200 # permanent - -# NBSTAT service names -nbstat_svcs = { - # (service, unique): list of ordered (name prefix, service name) tuples - (0x00, 0): [('', 'Domain Name')], - (0x00, 1): [('IS~', 'IIS'), ('', 'Workstation Service')], - (0x01, 0): [('__MSBROWSE__', 'Master Browser')], - (0x01, 1): [('', 'Messenger Service')], - (0x03, 1): [('', 'Messenger Service')], - (0x06, 1): [('', 'RAS Server Service')], - (0x1B, 1): [('', 'Domain Master Browser')], - (0x1C, 0): [('INet~Services', 'IIS'), ('', 'Domain Controllers')], - (0x1D, 1): [('', 'Master Browser')], - (0x1E, 0): [('', 'Browser Service Elections')], - (0x1F, 1): [('', 'NetDDE Service')], - (0x20, 1): [('Forte_$ND800ZA', 'DCA IrmaLan Gateway Server Service'), - ('', 'File Server Service')], - (0x21, 1): [('', 'RAS Client Service')], - (0x22, 1): [('', 'Microsoft Exchange Interchange(MSMail Connector)')], - (0x23, 1): [('', 'Microsoft Exchange Store')], - (0x24, 1): [('', 'Microsoft Exchange Directory')], - (0x2B, 1): [('', 'Lotus Notes Server Service')], - (0x2F, 0): [('IRISMULTICAST', 'Lotus Notes')], - (0x30, 1): [('', 'Modem Sharing Server Service')], - (0x31, 1): [('', 'Modem Sharing Client Service')], - (0x33, 0): [('IRISNAMESERVER', 'Lotus Notes')], - (0x43, 1): [('', 'SMS Clients Remote Control')], - (0x44, 1): [('', 'SMS Administrators Remote Control Tool')], - (0x45, 1): [('', 'SMS Clients Remote Chat')], - (0x46, 1): [('', 'SMS Clients Remote Transfer')], - (0x4C, 1): [('', 'DEC Pathworks TCPIP service on Windows NT')], - (0x52, 1): [('', 'DEC Pathworks TCPIP service on Windows NT')], - (0x87, 1): [('', 'Microsoft Exchange MTA')], - (0x6A, 1): [('', 'Microsoft Exchange IMC')], - (0xBE, 1): [('', 'Network Monitor Agent')], - (0xBF, 1): [('', 'Network Monitor Application')] -} - - -def node_to_service_name((name, service, flags)): - try: - unique = int(flags & NS_NAME_G == 0) - for namepfx, svcname in nbstat_svcs[(service, unique)]: - if name.startswith(namepfx): - return svcname - except KeyError: - pass - return '' - - -class NS(dns.DNS): - """NetBIOS Name Service.""" - - class Q(dns.DNS.Q): - pass - - class RR(dns.DNS.RR): - """NetBIOS resource record.""" - - def unpack_rdata(self, buf, off): - if self.type == NS_A: - self.ip = self.rdata - elif self.type == NS_NBSTAT: - num = ord(self.rdata[0]) - off = 1 - l = [] - for i in range(num): - name = self.rdata[off:off + 15].split(None, 1)[0].split('\x00', 1)[0] - service = ord(self.rdata[off + 15]) - off += 16 - flags = struct.unpack('>H', self.rdata[off:off + 2])[0] - off += 2 - l.append((name, service, flags)) - self.nodenames = l - # XXX - skip stats - - def pack_name(self, buf, name): - return dns.DNS.pack_name(self, buf, encode_name(name)) - - def unpack_name(self, buf, off): - name, off = dns.DNS.unpack_name(self, buf, off) - return decode_name(name), off - - -class Session(dpkt.Packet): - """NetBIOS Session Service.""" - __hdr__ = ( - ('type', 'B', 0), - ('flags', 'B', 0), - ('len', 'H', 0) - ) - - -SSN_MESSAGE = 0 -SSN_REQUEST = 1 -SSN_POSITIVE = 2 -SSN_NEGATIVE = 3 -SSN_RETARGET = 4 -SSN_KEEPALIVE = 5 - - -class Datagram(dpkt.Packet): - """NetBIOS Datagram Service.""" - __hdr__ = ( - ('type', 'B', 0), - ('flags', 'B', 0), - ('id', 'H', 0), - ('src', 'I', 0), - ('sport', 'H', 0), - ('len', 'H', 0), - ('off', 'H', 0) - ) - - -DGRAM_UNIQUE = 0x10 -DGRAM_GROUP = 0x11 -DGRAM_BROADCAST = 0x12 -DGRAM_ERROR = 0x13 -DGRAM_QUERY = 0x14 -DGRAM_POSITIVE = 0x15 -DGRAM_NEGATIVE = 0x16 diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/netflow.py b/external_libs/python/dpkt-1.8.6.2/dpkt/netflow.py deleted file mode 100644 index 4e53ba79..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/netflow.py +++ /dev/null @@ -1,219 +0,0 @@ -# $Id: netflow.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Cisco Netflow.""" - -import itertools -import struct -import dpkt - - -class NetflowBase(dpkt.Packet): - """Base class for Cisco Netflow packets.""" - - __hdr__ = ( - ('version', 'H', 1), - ('count', 'H', 0), - ('sys_uptime', 'I', 0), - ('unix_sec', 'I', 0), - ('unix_nsec', 'I', 0) - ) - - def __len__(self): - return self.__hdr_len__ + (len(self.data[0]) * self.count) - - def __str__(self): - # for now, don't try to enforce any size limits - self.count = len(self.data) - return self.pack_hdr() + ''.join(map(str, self.data)) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - buf = self.data - l = [] - while buf: - flow = self.NetflowRecord(buf) - l.append(flow) - buf = buf[len(flow):] - self.data = l - - class NetflowRecordBase(dpkt.Packet): - """Base class for netflow v1-v7 netflow records.""" - - # performance optimizations - def __len__(self): - # don't bother with data - return self.__hdr_len__ - - def __str__(self): - # don't bother with data - return self.pack_hdr() - - def unpack(self, buf): - # don't bother with data - for k, v in itertools.izip(self.__hdr_fields__, - struct.unpack(self.__hdr_fmt__, buf[:self.__hdr_len__])): - setattr(self, k, v) - self.data = "" - - -class Netflow1(NetflowBase): - """Netflow Version 1.""" - - class NetflowRecord(NetflowBase.NetflowRecordBase): - """Netflow v1 flow record.""" - __hdr__ = ( - ('src_addr', 'I', 0), - ('dst_addr', 'I', 0), - ('next_hop', 'I', 0), - ('input_iface', 'H', 0), - ('output_iface', 'H', 0), - ('pkts_sent', 'I', 0), - ('bytes_sent', 'I', 0), - ('start_time', 'I', 0), - ('end_time', 'I', 0), - ('src_port', 'H', 0), - ('dst_port', 'H', 0), - ('pad1', 'H', 0), - ('ip_proto', 'B', 0), - ('tos', 'B', 0), - ('tcp_flags', 'B', 0), - ('pad2', 'B', 0), - ('pad3', 'H', 0), - ('reserved', 'I', 0) - ) - - -# FYI, versions 2-4 don't appear to have ever seen the light of day. - -class Netflow5(NetflowBase): - """Netflow Version 5.""" - __hdr__ = NetflowBase.__hdr__ + ( - ('flow_sequence', 'I', 0), - ('engine_type', 'B', 0), - ('engine_id', 'B', 0), - ('reserved', 'H', 0), - ) - - class NetflowRecord(NetflowBase.NetflowRecordBase): - """Netflow v5 flow record.""" - __hdr__ = ( - ('src_addr', 'I', 0), - ('dst_addr', 'I', 0), - ('next_hop', 'I', 0), - ('input_iface', 'H', 0), - ('output_iface', 'H', 0), - ('pkts_sent', 'I', 0), - ('bytes_sent', 'I', 0), - ('start_time', 'I', 0), - ('end_time', 'I', 0), - ('src_port', 'H', 0), - ('dst_port', 'H', 0), - ('pad1', 'B', 0), - ('tcp_flags', 'B', 0), - ('ip_proto', 'B', 0), - ('tos', 'B', 0), - ('src_as', 'H', 0), - ('dst_as', 'H', 0), - ('src_mask', 'B', 0), - ('dst_mask', 'B', 0), - ('pad2', 'H', 0), - ) - - -class Netflow6(NetflowBase): - """Netflow Version 6. - XXX - unsupported by Cisco, but may be found in the field. - """ - __hdr__ = Netflow5.__hdr__ - - class NetflowRecord(NetflowBase.NetflowRecordBase): - """Netflow v6 flow record.""" - __hdr__ = ( - ('src_addr', 'I', 0), - ('dst_addr', 'I', 0), - ('next_hop', 'I', 0), - ('input_iface', 'H', 0), - ('output_iface', 'H', 0), - ('pkts_sent', 'I', 0), - ('bytes_sent', 'I', 0), - ('start_time', 'I', 0), - ('end_time', 'I', 0), - ('src_port', 'H', 0), - ('dst_port', 'H', 0), - ('pad1', 'B', 0), - ('tcp_flags', 'B', 0), - ('ip_proto', 'B', 0), - ('tos', 'B', 0), - ('src_as', 'H', 0), - ('dst_as', 'H', 0), - ('src_mask', 'B', 0), - ('dst_mask', 'B', 0), - ('in_encaps', 'B', 0), - ('out_encaps', 'B', 0), - ('peer_nexthop', 'I', 0), - ) - - -class Netflow7(NetflowBase): - """Netflow Version 7.""" - __hdr__ = NetflowBase.__hdr__ + ( - ('flow_sequence', 'I', 0), - ('reserved', 'I', 0), - ) - - class NetflowRecord(NetflowBase.NetflowRecordBase): - """Netflow v7 flow record.""" - __hdr__ = ( - ('src_addr', 'I', 0), - ('dst_addr', 'I', 0), - ('next_hop', 'I', 0), - ('input_iface', 'H', 0), - ('output_iface', 'H', 0), - ('pkts_sent', 'I', 0), - ('bytes_sent', 'I', 0), - ('start_time', 'I', 0), - ('end_time', 'I', 0), - ('src_port', 'H', 0), - ('dst_port', 'H', 0), - ('flags', 'B', 0), - ('tcp_flags', 'B', 0), - ('ip_proto', 'B', 0), - ('tos', 'B', 0), - ('src_as', 'H', 0), - ('dst_as', 'H', 0), - ('src_mask', 'B', 0), - ('dst_mask', 'B', 0), - ('pad2', 'H', 0), - ('router_sc', 'I', 0), - ) - -# No support for v8 or v9 yet. - -__sample_v1 = "\x00\x01\x00\x18gza> 3) & 0x7 - - @v.setter - def v(self, v): - self.flags = (self.flags & ~0x38) | ((v & 0x7) << 3) - - @property - def li(self): - return (self.flags >> 6) & 0x3 - - @li.setter - def li(self, li): - self.flags = (self.flags & ~0xc0) | ((li & 0x3) << 6) - - @property - def mode(self): - return self.flags & 0x7 - - @mode.setter - def mode(self, mode): - self.flags = (self.flags & ~0x7) | (mode & 0x7) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_v(self): return self.v - - @deprecated - def _set_v(self, v): self.v = v - - @deprecated - def _get_li(self): return self.li - - @deprecated - def _set_li(self, li): self.li = li - - @deprecated - def _get_mode(self): return self.mode - - @deprecated - def _set_mode(self, mode): self.mode = mode - # ================================================= - -__s = '\x24\x02\x04\xef\x00\x00\x00\x84\x00\x00\x33\x27\xc1\x02\x04\x02\xc8\x90\xec\x11\x22\xae\x07\xe5\xc8\x90\xf9\xd9\xc0\x7e\x8c\xcd\xc8\x90\xf9\xd9\xda\xc5\xb0\x78\xc8\x90\xf9\xd9\xda\xc6\x8a\x93' - - -def test_ntp_pack(): - n = NTP(__s) - assert (__s == str(n)) - - -def test_ntp_unpack(): - n = NTP(__s) - assert (n.li == NO_WARNING) - assert (n.v == 4) - assert (n.mode == SERVER) - assert (n.stratum == 2) - assert (n.id == '\xc1\x02\x04\x02') - # test get/set functions - n.li = ALARM_CONDITION - n.v = 3 - n.mode = CLIENT - assert (n.li == ALARM_CONDITION) - assert (n.v == 3) - assert (n.mode == CLIENT) - -if __name__ == '__main__': - test_ntp_pack() - test_ntp_unpack() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ospf.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ospf.py deleted file mode 100644 index cc47aae3..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/ospf.py +++ /dev/null @@ -1,27 +0,0 @@ -# $Id: ospf.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Open Shortest Path First.""" - -import dpkt - -AUTH_NONE = 0 -AUTH_PASSWORD = 1 -AUTH_CRYPTO = 2 - - -class OSPF(dpkt.Packet): - __hdr__ = ( - ('v', 'B', 0), - ('type', 'B', 0), - ('len', 'H', 0), - ('router', 'I', 0), - ('area', 'I', 0), - ('sum', 'H', 0), - ('atype', 'H', 0), - ('auth', '8s', '') - ) - - def __str__(self): - if not self.sum: - self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) - return dpkt.Packet.__str__(self) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/pcap.py b/external_libs/python/dpkt-1.8.6.2/dpkt/pcap.py deleted file mode 100644 index c14ba6de..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/pcap.py +++ /dev/null @@ -1,172 +0,0 @@ -# $Id: pcap.py 77 2011-01-06 15:59:38Z dugsong $ -# -*- coding: utf-8 -*- -"""Libpcap file format.""" - -import sys -import time -import dpkt - - -TCPDUMP_MAGIC = 0xa1b2c3d4L -PMUDPCT_MAGIC = 0xd4c3b2a1L - -PCAP_VERSION_MAJOR = 2 -PCAP_VERSION_MINOR = 4 - -DLT_NULL = 0 -DLT_EN10MB = 1 -DLT_EN3MB = 2 -DLT_AX25 = 3 -DLT_PRONET = 4 -DLT_CHAOS = 5 -DLT_IEEE802 = 6 -DLT_ARCNET = 7 -DLT_SLIP = 8 -DLT_PPP = 9 -DLT_FDDI = 10 -DLT_PFSYNC = 18 -DLT_IEEE802_11 = 105 -DLT_LINUX_SLL = 113 -DLT_PFLOG = 117 -DLT_IEEE802_11_RADIO = 127 - -if sys.platform.find('openbsd') != -1: - DLT_LOOP = 12 - DLT_RAW = 14 -else: - DLT_LOOP = 108 - DLT_RAW = 12 - -dltoff = {DLT_NULL: 4, DLT_EN10MB: 14, DLT_IEEE802: 22, DLT_ARCNET: 6, - DLT_SLIP: 16, DLT_PPP: 4, DLT_FDDI: 21, DLT_PFLOG: 48, DLT_PFSYNC: 4, - DLT_LOOP: 4, DLT_LINUX_SLL: 16} - - -class PktHdr(dpkt.Packet): - """pcap packet header.""" - __hdr__ = ( - ('tv_sec', 'I', 0), - ('tv_usec', 'I', 0), - ('caplen', 'I', 0), - ('len', 'I', 0), - ) - - -class LEPktHdr(PktHdr): - __byte_order__ = '<' - - -class FileHdr(dpkt.Packet): - """pcap file header.""" - __hdr__ = ( - ('magic', 'I', TCPDUMP_MAGIC), - ('v_major', 'H', PCAP_VERSION_MAJOR), - ('v_minor', 'H', PCAP_VERSION_MINOR), - ('thiszone', 'I', 0), - ('sigfigs', 'I', 0), - ('snaplen', 'I', 1500), - ('linktype', 'I', 1), - ) - - -class LEFileHdr(FileHdr): - __byte_order__ = '<' - - -class Writer(object): - """Simple pcap dumpfile writer.""" - - def __init__(self, fileobj, snaplen=1500, linktype=DLT_EN10MB): - self.__f = fileobj - if sys.byteorder == 'little': - fh = LEFileHdr(snaplen=snaplen, linktype=linktype) - else: - fh = FileHdr(snaplen=snaplen, linktype=linktype) - self.__f.write(str(fh)) - - def writepkt(self, pkt, ts=None): - if ts is None: - ts = time.time() - s = str(pkt) - n = len(s) - if sys.byteorder == 'little': - ph = LEPktHdr(tv_sec=int(ts), - tv_usec=int((float(ts) - int(ts)) * 1000000.0), - caplen=n, len=n) - else: - ph = PktHdr(tv_sec=int(ts), - tv_usec=int((float(ts) - int(ts)) * 1000000.0), - caplen=n, len=n) - self.__f.write(str(ph)) - self.__f.write(s) - - def close(self): - self.__f.close() - - -class Reader(object): - """Simple pypcap-compatible pcap file reader.""" - - def __init__(self, fileobj): - self.name = fileobj.name - self.fd = fileobj.fileno() - self.__f = fileobj - buf = self.__f.read(FileHdr.__hdr_len__) - self.__fh = FileHdr(buf) - self.__ph = PktHdr - if self.__fh.magic == PMUDPCT_MAGIC: - self.__fh = LEFileHdr(buf) - self.__ph = LEPktHdr - elif self.__fh.magic != TCPDUMP_MAGIC: - raise ValueError('invalid tcpdump header') - if self.__fh.linktype in dltoff: - self.dloff = dltoff[self.__fh.linktype] - else: - self.dloff = 0 - self.snaplen = self.__fh.snaplen - self.filter = '' - - def fileno(self): - return self.fd - - def datalink(self): - return self.__fh.linktype - - def setfilter(self, value, optimize=1): - return NotImplementedError - - def readpkts(self): - return list(self) - - def dispatch(self, cnt, callback, *args): - if cnt > 0: - for i in range(cnt): - ts, pkt = self.next() - callback(ts, pkt, *args) - else: - for ts, pkt in self: - callback(ts, pkt, *args) - - def loop(self, callback, *args): - self.dispatch(0, callback, *args) - - def __iter__(self): - self.__f.seek(FileHdr.__hdr_len__) - while 1: - buf = self.__f.read(PktHdr.__hdr_len__) - if not buf: break - hdr = self.__ph(buf) - buf = self.__f.read(hdr.caplen) - yield (hdr.tv_sec + (hdr.tv_usec / 1000000.0), buf) - - -def test_pcap_endian(): - be = '\xa1\xb2\xc3\xd4\x00\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x01' - le = '\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x01\x00\x00\x00' - befh = FileHdr(be) - lefh = LEFileHdr(le) - assert (befh.linktype == lefh.linktype) - -if __name__ == '__main__': - test_pcap_endian() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/pim.py b/external_libs/python/dpkt-1.8.6.2/dpkt/pim.py deleted file mode 100644 index 6cd16a42..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/pim.py +++ /dev/null @@ -1,46 +0,0 @@ -# $Id: pim.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Protocol Independent Multicast.""" - -import dpkt -from decorators import deprecated - - -class PIM(dpkt.Packet): - __hdr__ = ( - ('v_type', 'B', 0x20), - ('rsvd', 'B', 0), - ('sum', 'H', 0) - ) - - @property - def v(self): return self.v_type >> 4 - - @v.setter - def v(self, v): self.v_type = (v << 4) | (self.v_type & 0xf) - - @property - def type(self): return self.v_type & 0xf - - @type.setter - def type(self, type): self.v_type = (self.v_type & 0xf0) | type - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_v(self): return self.v - - @deprecated - def _set_v(self, v): self.v = v - - @deprecated - def _get_type(self): return self.type - - @deprecated - def _set_type(self, type): self.type = type - # ================================================= - - def __str__(self): - if not self.sum: - self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) - return dpkt.Packet.__str__(self) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/pmap.py b/external_libs/python/dpkt-1.8.6.2/dpkt/pmap.py deleted file mode 100644 index 0e57b64c..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/pmap.py +++ /dev/null @@ -1,18 +0,0 @@ -# $Id: pmap.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Portmap / rpcbind.""" - -import dpkt - -PMAP_PROG = 100000L -PMAP_PROCDUMP = 4 -PMAP_VERS = 2 - - -class Pmap(dpkt.Packet): - __hdr__ = ( - ('prog', 'I', 0), - ('vers', 'I', 0), - ('prot', 'I', 0), - ('port', 'I', 0), - ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ppp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ppp.py deleted file mode 100644 index 282bdd98..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/ppp.py +++ /dev/null @@ -1,66 +0,0 @@ -# $Id: ppp.py 65 2010-03-26 02:53:51Z dugsong $ -# -*- coding: utf-8 -*- -"""Point-to-Point Protocol.""" - -import struct -import dpkt - -# XXX - finish later - -# http://www.iana.org/assignments/ppp-numbers -PPP_IP = 0x21 # Internet Protocol -PPP_IP6 = 0x57 # Internet Protocol v6 - -# Protocol field compression -PFC_BIT = 0x01 - - -class PPP(dpkt.Packet): - __hdr__ = ( - ('p', 'B', PPP_IP), - ) - _protosw = {} - - @classmethod - def set_p(cls, p, pktclass): - cls._protosw[p] = pktclass - - @classmethod - def get_p(cls, p): - return cls._protosw[p] - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.p & PFC_BIT == 0: - self.p = struct.unpack('>H', buf[:2])[0] - self.data = self.data[1:] - try: - self.data = self._protosw[self.p](self.data) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, struct.error, dpkt.UnpackError): - pass - - def pack_hdr(self): - try: - if self.p > 0xff: - return struct.pack('>H', self.p) - return dpkt.Packet.pack_hdr(self) - except struct.error, e: - raise dpkt.PackError(str(e)) - - -def __load_protos(): - g = globals() - for k, v in g.iteritems(): - if k.startswith('PPP_'): - name = k[4:] - modname = name.lower() - try: - mod = __import__(modname, g) - except ImportError: - continue - PPP.set_p(v, getattr(mod, name)) - - -if not PPP._protosw: - __load_protos() diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/pppoe.py b/external_libs/python/dpkt-1.8.6.2/dpkt/pppoe.py deleted file mode 100644 index 72e7a31b..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/pppoe.py +++ /dev/null @@ -1,61 +0,0 @@ -# $Id: pppoe.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""PPP-over-Ethernet.""" - -import dpkt -import ppp -from decorators import deprecated - -# RFC 2516 codes -PPPoE_PADI = 0x09 -PPPoE_PADO = 0x07 -PPPoE_PADR = 0x19 -PPPoE_PADS = 0x65 -PPPoE_PADT = 0xA7 -PPPoE_SESSION = 0x00 - - -class PPPoE(dpkt.Packet): - __hdr__ = ( - ('v_type', 'B', 0x11), - ('code', 'B', 0), - ('session', 'H', 0), - ('len', 'H', 0) # payload length - ) - - @property - def v(self): return self.v_type >> 4 - - @v.setter - def v(self, v): self.v_type = (v << 4) | (self.v_type & 0xf) - - @property - def type(self): return self.v_type & 0xf - - @type.setter - def type(self, t): self.v_type = (self.v_type & 0xf0) | t - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_v(self): return self.v - - @deprecated - def _set_v(self, v): self.v = v - - @deprecated - def _get_type(self): return self.type - - @deprecated - def _set_type(self, t): self.type = t - # ================================================= - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - try: - if self.code == 0: - self.data = self.ppp = ppp.PPP(self.data) - except dpkt.UnpackError: - pass - -# XXX - TODO TLVs, etc. diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/qq.py b/external_libs/python/dpkt-1.8.6.2/dpkt/qq.py deleted file mode 100644 index 3399d882..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/qq.py +++ /dev/null @@ -1,224 +0,0 @@ -# $Id: qq.py 48 2008-05-27 17:31:15Z yardley $ -# -*- coding: utf-8 -*- -from dpkt import Packet - -# header_type -QQ_HEADER_BASIC_FAMILY = 0x02 -QQ_HEADER_P2P_FAMILY = 0x00 -QQ_HEADER_03_FAMILY = 0x03 -QQ_HEADER_04_FAMILY = 0x04 -QQ_HEADER_05_FAMILY = 0x05 - -header_type_str = [ - "QQ_HEADER_P2P_FAMILY", - "Unknown Type", - "QQ_HEADER_03_FAMILY", - "QQ_HEADER_04_FAMILY", - "QQ_HEADER_05_FAMILY", -] - -# command -QQ_CMD_LOGOUT = 0x0001 -QQ_CMD_KEEP_ALIVE = 0x0002 -QQ_CMD_MODIFY_INFO = 0x0004 -QQ_CMD_SEARCH_USER = 0x0005 -QQ_CMD_GET_USER_INFO = 0x0006 -QQ_CMD_ADD_FRIEND = 0x0009 -QQ_CMD_DELETE_FRIEND = 0x000A -QQ_CMD_ADD_FRIEND_AUTH = 0x000B -QQ_CMD_CHANGE_STATUS = 0x000D -QQ_CMD_ACK_SYS_MSG = 0x0012 -QQ_CMD_SEND_IM = 0x0016 -QQ_CMD_RECV_IM = 0x0017 -QQ_CMD_REMOVE_SELF = 0x001C -QQ_CMD_REQUEST_KEY = 0x001D -QQ_CMD_LOGIN = 0x0022 -QQ_CMD_GET_FRIEND_LIST = 0x0026 -QQ_CMD_GET_ONLINE_OP = 0x0027 -QQ_CMD_SEND_SMS = 0x002D -QQ_CMD_CLUSTER_CMD = 0x0030 -QQ_CMD_TEST = 0x0031 -QQ_CMD_GROUP_DATA_OP = 0x003C -QQ_CMD_UPLOAD_GROUP_FRIEND = 0x003D -QQ_CMD_FRIEND_DATA_OP = 0x003E -QQ_CMD_DOWNLOAD_GROUP_FRIEND = 0x0058 -QQ_CMD_FRIEND_LEVEL_OP = 0x005C -QQ_CMD_PRIVACY_DATA_OP = 0x005E -QQ_CMD_CLUSTER_DATA_OP = 0x005F -QQ_CMD_ADVANCED_SEARCH = 0x0061 -QQ_CMD_REQUEST_LOGIN_TOKEN = 0x0062 -QQ_CMD_USER_PROPERTY_OP = 0x0065 -QQ_CMD_TEMP_SESSION_OP = 0x0066 -QQ_CMD_SIGNATURE_OP = 0x0067 -QQ_CMD_RECV_MSG_SYS = 0x0080 -QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS = 0x0081 -QQ_CMD_WEATHER_OP = 0x00A6 -QQ_CMD_ADD_FRIEND_EX = 0x00A7 -QQ_CMD_AUTHORIZE = 0X00A8 -QQ_CMD_UNKNOWN = 0xFFFF -QQ_SUB_CMD_SEARCH_ME_BY_QQ_ONLY = 0x03 -QQ_SUB_CMD_SHARE_GEOGRAPHY = 0x04 -QQ_SUB_CMD_GET_FRIEND_LEVEL = 0x02 -QQ_SUB_CMD_GET_CLUSTER_ONLINE_MEMBER = 0x01 -QQ_05_CMD_REQUEST_AGENT = 0x0021 -QQ_05_CMD_REQUEST_FACE = 0x0022 -QQ_05_CMD_TRANSFER = 0x0023 -QQ_05_CMD_REQUEST_BEGIN = 0x0026 -QQ_CLUSTER_CMD_CREATE_CLUSTER = 0x01 -QQ_CLUSTER_CMD_MODIFY_MEMBER = 0x02 -QQ_CLUSTER_CMD_MODIFY_CLUSTER_INFO = 0x03 -QQ_CLUSTER_CMD_GET_CLUSTER_INFO = 0x04 -QQ_CLUSTER_CMD_ACTIVATE_CLUSTER = 0x05 -QQ_CLUSTER_CMD_SEARCH_CLUSTER = 0x06 -QQ_CLUSTER_CMD_JOIN_CLUSTER = 0x07 -QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH = 0x08 -QQ_CLUSTER_CMD_EXIT_CLUSTER = 0x09 -QQ_CLUSTER_CMD_SEND_IM = 0x0A -QQ_CLUSTER_CMD_GET_ONLINE_MEMBER = 0x0B -QQ_CLUSTER_CMD_GET_MEMBER_INFO = 0x0C -QQ_CLUSTER_CMD_MODIFY_CARD = 0x0E -QQ_CLUSTER_CMD_GET_CARD_BATCH = 0x0F -QQ_CLUSTER_CMD_GET_CARD = 0x10 -QQ_CLUSTER_CMD_COMMIT_ORGANIZATION = 0x11 -QQ_CLUSTER_CMD_UPDATE_ORGANIZATION = 0x12 -QQ_CLUSTER_CMD_COMMIT_MEMBER_ORGANIZATION = 0x13 -QQ_CLUSTER_CMD_GET_VERSION_ID = 0x19 -QQ_CLUSTER_CMD_SEND_IM_EX = 0x1A -QQ_CLUSTER_CMD_SET_ROLE = 0x1B -QQ_CLUSTER_CMD_TRANSFER_ROLE = 0x1C -QQ_CLUSTER_CMD_CREATE_TEMP = 0x30 -QQ_CLUSTER_CMD_MODIFY_TEMP_MEMBER = 0x31 -QQ_CLUSTER_CMD_EXIT_TEMP = 0x32 -QQ_CLUSTER_CMD_GET_TEMP_INFO = 0x33 -QQ_CLUSTER_CMD_MODIFY_TEMP_INFO = 0x34 -QQ_CLUSTER_CMD_SEND_TEMP_IM = 0x35 -QQ_CLUSTER_CMD_SUB_CLUSTER_OP = 0x36 -QQ_CLUSTER_CMD_ACTIVATE_TEMP = 0x37 - -QQ_CLUSTER_SUB_CMD_ADD_MEMBER = 0x01 -QQ_CLUSTER_SUB_CMD_REMOVE_MEMBER = 0x02 -QQ_CLUSTER_SUB_CMD_GET_SUBJECT_LIST = 0x02 -QQ_CLUSTER_SUB_CMD_GET_DIALOG_LIST = 0x01 - -QQ_SUB_CMD_GET_ONLINE_FRIEND = 0x2 -QQ_SUB_CMD_GET_ONLINE_SERVICE = 0x3 -QQ_SUB_CMD_UPLOAD_GROUP_NAME = 0x2 -QQ_SUB_CMD_DOWNLOAD_GROUP_NAME = 0x1 -QQ_SUB_CMD_SEND_TEMP_SESSION_IM = 0x01 -QQ_SUB_CMD_BATCH_DOWNLOAD_FRIEND_REMARK = 0x0 -QQ_SUB_CMD_UPLOAD_FRIEND_REMARK = 0x1 -QQ_SUB_CMD_REMOVE_FRIEND_FROM_LIST = 0x2 -QQ_SUB_CMD_DOWNLOAD_FRIEND_REMARK = 0x3 -QQ_SUB_CMD_MODIFY_SIGNATURE = 0x01 -QQ_SUB_CMD_DELETE_SIGNATURE = 0x02 -QQ_SUB_CMD_GET_SIGNATURE = 0x03 -QQ_SUB_CMD_GET_USER_PROPERTY = 0x01 -QQ_SUB_CMD_GET_WEATHER = 0x01 - -QQ_FILE_CMD_HEART_BEAT = 0x0001 -QQ_FILE_CMD_HEART_BEAT_ACK = 0x0002 -QQ_FILE_CMD_TRANSFER_FINISHED = 0x0003 -QQ_FILE_CMD_FILE_OP = 0x0007 -QQ_FILE_CMD_FILE_OP_ACK = 0x0008 -QQ_FILE_CMD_SENDER_SAY_HELLO = 0x0031 -QQ_FILE_CMD_SENDER_SAY_HELLO_ACK = 0x0032 -QQ_FILE_CMD_RECEIVER_SAY_HELLO = 0x0033 -QQ_FILE_CMD_RECEIVER_SAY_HELLO_ACK = 0x0034 -QQ_FILE_CMD_NOTIFY_IP_ACK = 0x003C -QQ_FILE_CMD_PING = 0x003D -QQ_FILE_CMD_PONG = 0x003E -QQ_FILE_CMD_YES_I_AM_BEHIND_FIREWALL = 0x0040 -QQ_FILE_CMD_REQUEST_AGENT = 0x0001 -QQ_FILE_CMD_CHECK_IN = 0x0002 -QQ_FILE_CMD_FORWARD = 0x0003 -QQ_FILE_CMD_FORWARD_FINISHED = 0x0004 -QQ_FILE_CMD_IT_IS_TIME = 0x0005 -QQ_FILE_CMD_I_AM_READY = 0x0006 - -command_str = { - 0x0001: "QQ_CMD_LOGOUT", - 0x0002: "QQ_CMD_KEEP_ALIVE", - 0x0004: "QQ_CMD_MODIFY_INFO", - 0x0005: "QQ_CMD_SEARCH_USER", - 0x0006: "QQ_CMD_GET_USER_INFO", - 0x0009: "QQ_CMD_ADD_FRIEND", - 0x000A: "QQ_CMD_DELETE_FRIEND", - 0x000B: "QQ_CMD_ADD_FRIEND_AUTH", - 0x000D: "QQ_CMD_CHANGE_STATUS", - 0x0012: "QQ_CMD_ACK_SYS_MSG", - 0x0016: "QQ_CMD_SEND_IM", - 0x0017: "QQ_CMD_RECV_IM", - 0x001C: "QQ_CMD_REMOVE_SELF", - 0x001D: "QQ_CMD_REQUEST_KEY", - 0x0022: "QQ_CMD_LOGIN", - 0x0026: "QQ_CMD_GET_FRIEND_LIST", - 0x0027: "QQ_CMD_GET_ONLINE_OP", - 0x002D: "QQ_CMD_SEND_SMS", - 0x0030: "QQ_CMD_CLUSTER_CMD", - 0x0031: "QQ_CMD_TEST", - 0x003C: "QQ_CMD_GROUP_DATA_OP", - 0x003D: "QQ_CMD_UPLOAD_GROUP_FRIEND", - 0x003E: "QQ_CMD_FRIEND_DATA_OP", - 0x0058: "QQ_CMD_DOWNLOAD_GROUP_FRIEND", - 0x005C: "QQ_CMD_FRIEND_LEVEL_OP", - 0x005E: "QQ_CMD_PRIVACY_DATA_OP", - 0x005F: "QQ_CMD_CLUSTER_DATA_OP", - 0x0061: "QQ_CMD_ADVANCED_SEARCH", - 0x0062: "QQ_CMD_REQUEST_LOGIN_TOKEN", - 0x0065: "QQ_CMD_USER_PROPERTY_OP", - 0x0066: "QQ_CMD_TEMP_SESSION_OP", - 0x0067: "QQ_CMD_SIGNATURE_OP", - 0x0080: "QQ_CMD_RECV_MSG_SYS", - 0x0081: "QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS", - 0x00A6: "QQ_CMD_WEATHER_OP", - 0x00A7: "QQ_CMD_ADD_FRIEND_EX", - 0x00A8: "QQ_CMD_AUTHORIZE", - 0xFFFF: "QQ_CMD_UNKNOWN", - 0x0021: "_CMD_REQUEST_AGENT", - 0x0022: "_CMD_REQUEST_FACE", - 0x0023: "_CMD_TRANSFER", - 0x0026: "_CMD_REQUEST_BEGIN", -} - - -class QQBasicPacket(Packet): - __hdr__ = ( - ('header_type', 'B', 2), - ('source', 'H', 0), - ('command', 'H', 0), - ('sequence', 'H', 0), - ('qqNum', 'L', 0), - ) - - -class QQ3Packet(Packet): - __hdr__ = ( - ('header_type', 'B', 3), - ('command', 'B', 0), - ('sequence', 'H', 0), - ('unknown1', 'L', 0), - ('unknown2', 'L', 0), - ('unknown3', 'L', 0), - ('unknown4', 'L', 0), - ('unknown5', 'L', 0), - ('unknown6', 'L', 0), - ('unknown7', 'L', 0), - ('unknown8', 'L', 0), - ('unknown9', 'L', 0), - ('unknown10', 'B', 1), - ('unknown11', 'B', 0), - ('unknown12', 'B', 0), - ('source', 'H', 0), - ('unknown13', 'B', 0), - ) - - -class QQ5Packet(Packet): - __hdr__ = ( - ('header_type', 'B', 5), - ('source', 'H', 0), - ('unknown', 'H', 0), - ('command', 'H', 0), - ('sequence', 'H', 0), - ('qqNum', 'L', 0), - ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/radiotap.py b/external_libs/python/dpkt-1.8.6.2/dpkt/radiotap.py deleted file mode 100644 index 76e6306b..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/radiotap.py +++ /dev/null @@ -1,532 +0,0 @@ -# -*- coding: utf-8 -*- -"""Radiotap""" - -import dpkt -import ieee80211 -import socket -from decorators import deprecated - -# Ref: http://www.radiotap.org -# Fields Ref: http://www.radiotap.org/defined-fields/all - -# Present flags -_TSFT_MASK = 0x1000000 -_FLAGS_MASK = 0x2000000 -_RATE_MASK = 0x4000000 -_CHANNEL_MASK = 0x8000000 -_FHSS_MASK = 0x10000000 -_ANT_SIG_MASK = 0x20000000 -_ANT_NOISE_MASK = 0x40000000 -_LOCK_QUAL_MASK = 0x80000000 -_TX_ATTN_MASK = 0x10000 -_DB_TX_ATTN_MASK = 0x20000 -_DBM_TX_POWER_MASK = 0x40000 -_ANTENNA_MASK = 0x80000 -_DB_ANT_SIG_MASK = 0x100000 -_DB_ANT_NOISE_MASK = 0x200000 -_RX_FLAGS_MASK = 0x400000 -_CHANNELPLUS_MASK = 0x200 -_EXT_MASK = 0x1 - -_TSFT_SHIFT = 24 -_FLAGS_SHIFT = 25 -_RATE_SHIFT = 26 -_CHANNEL_SHIFT = 27 -_FHSS_SHIFT = 28 -_ANT_SIG_SHIFT = 29 -_ANT_NOISE_SHIFT = 30 -_LOCK_QUAL_SHIFT = 31 -_TX_ATTN_SHIFT = 16 -_DB_TX_ATTN_SHIFT = 17 -_DBM_TX_POWER_SHIFT = 18 -_ANTENNA_SHIFT = 19 -_DB_ANT_SIG_SHIFT = 20 -_DB_ANT_NOISE_SHIFT = 21 -_RX_FLAGS_SHIFT = 22 -_CHANNELPLUS_SHIFT = 10 -_EXT_SHIFT = 0 - -# Flags elements -_FLAGS_SIZE = 2 -_CFP_FLAG_SHIFT = 0 -_PREAMBLE_SHIFT = 1 -_WEP_SHIFT = 2 -_FRAG_SHIFT = 3 -_FCS_SHIFT = 4 -_DATA_PAD_SHIFT = 5 -_BAD_FCS_SHIFT = 6 -_SHORT_GI_SHIFT = 7 - -# Channel type -_CHAN_TYPE_SIZE = 4 -_CHANNEL_TYPE_SHIFT = 4 -_CCK_SHIFT = 5 -_OFDM_SHIFT = 6 -_TWO_GHZ_SHIFT = 7 -_FIVE_GHZ_SHIFT = 8 -_PASSIVE_SHIFT = 9 -_DYN_CCK_OFDM_SHIFT = 10 -_GFSK_SHIFT = 11 -_GSM_SHIFT = 12 -_STATIC_TURBO_SHIFT = 13 -_HALF_RATE_SHIFT = 14 -_QUARTER_RATE_SHIFT = 15 - -# Flags offsets and masks -_FCS_SHIFT = 4 -_FCS_MASK = 0x10 - - -class Radiotap(dpkt.Packet): - __hdr__ = ( - ('version', 'B', 0), - ('pad', 'B', 0), - ('length', 'H', 0), - ('present_flags', 'I', 0) - ) - - @property - def tsft_present(self): - return (self.present_flags & _TSFT_MASK) >> _TSFT_SHIFT - - @tsft_present.setter - def tsft_present(self, val): - self.present_flags |= val << _TSFT_SHIFT - - @property - def flags_present(self): - return (self.present_flags & _FLAGS_MASK) >> _FLAGS_SHIFT - - @flags_present.setter - def flags_present(self, val): - self.present_flags |= val << _FLAGS_SHIFT - - @property - def rate_present(self): - return (self.present_flags & _RATE_MASK) >> _RATE_SHIFT - - @rate_present.setter - def rate_present(self, val): - self.present_flags |= val << _RATE_SHIFT - - @property - def channel_present(self): - return (self.present_flags & _CHANNEL_MASK) >> _CHANNEL_SHIFT - - @channel_present.setter - def channel_present(self, val): - self.present_flags |= val << _CHANNEL_SHIFT - - @property - def fhss_present(self): - return (self.present_flags & _FHSS_MASK) >> _FHSS_SHIFT - - @fhss_present.setter - def fhss_present(self, val): - self.present_flags |= val << _FHSS_SHIFT - - @property - def ant_sig_present(self): - return (self.present_flags & _ANT_SIG_MASK) >> _ANT_SIG_SHIFT - - @ant_sig_present.setter - def ant_sig_present(self, val): - self.present_flags |= val << _ANT_SIG_SHIFT - - @property - def ant_noise_present(self): - return (self.present_flags & _ANT_NOISE_MASK) >> _ANT_NOISE_SHIFT - - @ant_noise_present.setter - def ant_noise_present(self, val): - self.present_flags |= val << _ANT_NOISE_SHIFT - - @property - def lock_qual_present(self): - return (self.present_flags & _LOCK_QUAL_MASK) >> _LOCK_QUAL_SHIFT - - @lock_qual_present.setter - def lock_qual_present(self, val): - self.present_flags |= val << _LOCK_QUAL_SHIFT - - @property - def tx_attn_present(self): - return (self.present_flags & _TX_ATTN_MASK) >> _TX_ATTN_SHIFT - - @tx_attn_present.setter - def tx_attn_present(self, val): - self.present_flags |= val << _TX_ATTN_SHIFT - - @property - def db_tx_attn_present(self): - return (self.present_flags & _DB_TX_ATTN_MASK) >> _DB_TX_ATTN_SHIFT - - @db_tx_attn_present.setter - def db_tx_attn_present(self, val): - self.present_flags |= val << _DB_TX_ATTN_SHIFT - - @property - def dbm_tx_power_present(self): - return (self.present_flags & _DBM_TX_POWER_MASK) >> _DBM_TX_POWER_SHIFT - - @dbm_tx_power_present.setter - def dbm_tx_power_present(self, val): - self.present_flags |= val << _DBM_TX_POWER_SHIFT - - @property - def ant_present(self): - return (self.present_flags & _ANTENNA_MASK) >> _ANTENNA_SHIFT - - @ant_present.setter - def ant_present(self, val): - self.present_flags |= val << _ANTENNA_SHIFT - - @property - def db_ant_sig_present(self): - return (self.present_flags & _DB_ANT_SIG_MASK) >> _DB_ANT_SIG_SHIFT - - @db_ant_sig_present.setter - def db_ant_sig_present(self, val): - self.present_flags |= val << _DB_ANT_SIG_SHIFT - - @property - def db_ant_noise_present(self): - return (self.present_flags & _DB_ANT_NOISE_MASK) >> _DB_ANT_NOISE_SHIFT - - @db_ant_noise_present.setter - def db_ant_noise_present(self, val): - self.present_flags |= val << _DB_ANT_NOISE_SHIFT - - @property - def rx_flags_present(self): - return (self.present_flags & _RX_FLAGS_MASK) >> _RX_FLAGS_SHIFT - - @rx_flags_present.setter - def rx_flags_present(self, val): - self.present_flags |= val << _RX_FLAGS_SHIFT - - @property - def chanplus_present(self): - return (self.present_flags & _CHANNELPLUS_MASK) >> _CHANNELPLUS_SHIFT - - @chanplus_present.setter - def chanplus_present(self, val): - self.present_flags |= val << _CHANNELPLUS_SHIFT - - @property - def ext_present(self): - return (self.present_flags & _EXT_MASK) >> _EXT_SHIFT - - @ext_present.setter - def ext_present(self, val): - self.present_flags |= val << _EXT_SHIFT - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_tsft_present(self): - return self.tsft_present - - @deprecated - def _set_tsft_present(self, val): - self.tsft_present = val - - @deprecated - def _get_flags_present(self): - return self.flags_present - - @deprecated - def _set_flags_present(self, val): - self.flags_present = val - - @deprecated - def _get_rate_present(self): - return self.rate_present - - @deprecated - def _set_rate_present(self, val): - self.rate_present = val - - @deprecated - def _get_channel_present(self): - return self.channel_present - - @deprecated - def _set_channel_present(self, val): - self.channel_present = val - - @deprecated - def _get_fhss_present(self): - return self.fhss_present - - @deprecated - def _set_fhss_present(self, val): - self.fhss_present = val - - @deprecated - def _get_ant_sig_present(self): - return self.ant_sig_present - - @deprecated - def _set_ant_sig_present(self, val): - self.ant_sig_present = val - - @deprecated - def _get_ant_noise_present(self): - return self.ant_noise_present - - @deprecated - def _set_ant_noise_present(self, val): - self.ant_noise_present = val - - @deprecated - def _get_lock_qual_present(self): - return self.lock_qual_present - - @deprecated - def _set_lock_qual_present(self, val): - self.lock_qual_present = val - - @deprecated - def _get_tx_attn_present(self): - return self.tx_attn_present - - @deprecated - def _set_tx_attn_present(self, val): - self.tx_attn_present = val - - @deprecated - def _get_db_tx_attn_present(self): - return self.db_tx_attn_present - - @deprecated - def _set_db_tx_attn_present(self, val): - self.db_tx_attn_present = val - - @deprecated - def _get_dbm_power_present(self): - return self.dbm_tx_power_present - - @deprecated - def _set_dbm_power_present(self, val): - self.dbm_tx_power_present = val - - @deprecated - def _get_ant_present(self): - return self.ant_present - - @deprecated - def _set_ant_present(self, val): - self.ant_present = val - - @deprecated - def _get_db_ant_sig_present(self): - return self.db_ant_sig_present - - @deprecated - def _set_db_ant_sig_present(self, val): - self.db_ant_sig_present = val - - @deprecated - def _get_db_ant_noise_present(self): - return self.db_ant_noise_present - - @deprecated - def _set_db_ant_noise_present(self, val): - self.db_ant_noise_present = val - - @deprecated - def _get_rx_flags_present(self): - return self.rx_flags_present - - @deprecated - def _set_rx_flags_present(self, val): - self.rx_flags_present = val - - @deprecated - def _get_chanplus_present(self): - return self.chanplus_present - - @deprecated - def _set_chanplus_present(self, val): - self.chanplus_present = val - - @deprecated - def _get_ext_present(self): - return self.ext_present - - @deprecated - def _set_ext_present(self, val): - self.ext_present = val - - # ================================================= - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = buf[socket.ntohs(self.length):] - - self.fields = [] - buf = buf[self.__hdr_len__:] - - # decode each field into self. (eg. self.tsft) as well as append it self.fields list - field_decoder = [ - ('tsft', self.tsft_present, self.TSFT), - ('flags', self.flags_present, self.Flags), - ('rate', self.rate_present, self.Rate), - ('channel', self.channel_present, self.Channel), - ('fhss', self.fhss_present, self.FHSS), - ('ant_sig', self.ant_sig_present, self.AntennaSignal), - ('ant_noise', self.ant_noise_present, self.AntennaNoise), - ('lock_qual', self.lock_qual_present, self.LockQuality), - ('tx_attn', self.tx_attn_present, self.TxAttenuation), - ('db_tx_attn', self.db_tx_attn_present, self.DbTxAttenuation), - ('dbm_tx_power', self.dbm_tx_power_present, self.DbmTxPower), - ('ant', self.ant_present, self.Antenna), - ('db_ant_sig', self.db_ant_sig_present, self.DbAntennaSignal), - ('db_ant_noise', self.db_ant_noise_present, self.DbAntennaNoise), - ('rx_flags', self.rx_flags_present, self.RxFlags) - ] - for name, present_bit, parser in field_decoder: - if present_bit: - field = parser(buf) - field.data = '' - setattr(self, name, field) - self.fields.append(field) - buf = buf[len(field):] - - if len(self.data) > 0: - if self.flags_present and self.flags.fcs: - self.data = ieee80211.IEEE80211(self.data, fcs=self.flags.fcs) - else: - self.data = ieee80211.IEEE80211(self.data) - - class Antenna(dpkt.Packet): - __hdr__ = ( - ('index', 'B', 0), - ) - - class AntennaNoise(dpkt.Packet): - __hdr__ = ( - ('db', 'B', 0), - ) - - class AntennaSignal(dpkt.Packet): - __hdr__ = ( - ('db', 'B', 0), - ) - - class Channel(dpkt.Packet): - __hdr__ = ( - ('freq', 'H', 0), - ('flags', 'H', 0), - ) - - class FHSS(dpkt.Packet): - __hdr__ = ( - ('set', 'B', 0), - ('pattern', 'B', 0), - ) - - class Flags(dpkt.Packet): - __hdr__ = ( - ('val', 'B', 0), - ) - - @property - def fcs(self): return (self.val & _FCS_MASK) >> _FCS_SHIFT - - # TODO statement seems to have no effect - @fcs.setter - def fcs(self, v): (v << _FCS_SHIFT) | (self.val & ~_FCS_MASK) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_fcs_present(self): return self.fcs - - @deprecated - def _set_fcs_present(self, v): self.fcs = v - - # ================================================= - - class LockQuality(dpkt.Packet): - __hdr__ = ( - ('val', 'H', 0), - ) - - class RxFlags(dpkt.Packet): - __hdr__ = ( - ('val', 'H', 0), - ) - - class Rate(dpkt.Packet): - __hdr__ = ( - ('val', 'B', 0), - ) - - class TSFT(dpkt.Packet): - __hdr__ = ( - ('usecs', 'Q', 0), - ) - - class TxAttenuation(dpkt.Packet): - __hdr__ = ( - ('val', 'H', 0), - ) - - class DbTxAttenuation(dpkt.Packet): - __hdr__ = ( - ('db', 'H', 0), - ) - - class DbAntennaNoise(dpkt.Packet): - __hdr__ = ( - ('db', 'B', 0), - ) - - class DbAntennaSignal(dpkt.Packet): - __hdr__ = ( - ('db', 'B', 0), - ) - - class DbmTxPower(dpkt.Packet): - __hdr__ = ( - ('dbm', 'B', 0), - ) - - -def test_Radiotap(): - s = '\x00\x00\x00\x18\x6e\x48\x00\x00\x00\x02\x6c\x09\xa0\x00\xa8\x81\x02\x00\x00\x00\x00\x00\x00\x00' - rad = Radiotap(s) - assert(rad.version == 0) - assert(rad.present_flags == 0x6e480000) - assert(rad.tsft_present == 0) - assert(rad.flags_present == 1) - assert(rad.rate_present == 1) - assert(rad.channel_present == 1) - assert(rad.fhss_present == 0) - assert(rad.ant_sig_present == 1) - assert(rad.ant_noise_present == 1) - assert(rad.lock_qual_present == 0) - assert(rad.db_tx_attn_present == 0) - assert(rad.dbm_tx_power_present == 0) - assert(rad.ant_present == 1) - assert(rad.db_ant_sig_present == 0) - assert(rad.db_ant_noise_present == 0) - assert(rad.rx_flags_present == 1) - assert(rad.channel.freq == 0x6c09) - assert(rad.channel.flags == 0xa000) - assert(len(rad.fields) == 7) - - -def test_fcs(): - s = '\x00\x00\x1a\x00\x2f\x48\x00\x00\x34\x8f\x71\x09\x00\x00\x00\x00\x10\x0c\x85\x09\xc0\x00\xcc\x01\x00\x00' - rt = Radiotap(s) - assert(rt.flags_present == 1) - assert(rt.flags.fcs == 1) - - -if __name__ == '__main__': - test_Radiotap() - test_fcs() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/radius.py b/external_libs/python/dpkt-1.8.6.2/dpkt/radius.py deleted file mode 100644 index 740d5cd7..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/radius.py +++ /dev/null @@ -1,91 +0,0 @@ -# $Id: radius.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Remote Authentication Dial-In User Service.""" - -import dpkt - -# http://www.untruth.org/~josh/security/radius/radius-auth.html -# RFC 2865 - - -class RADIUS(dpkt.Packet): - __hdr__ = ( - ('code', 'B', 0), - ('id', 'B', 0), - ('len', 'H', 4), - ('auth', '16s', '') - ) - attrs = '' - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.attrs = parse_attrs(self.data) - self.data = '' - - -def parse_attrs(buf): - """Parse attributes buffer into a list of (type, data) tuples.""" - attrs = [] - while buf: - t = ord(buf[0]) - l = ord(buf[1]) - if l < 2: - break - d, buf = buf[2:l], buf[l:] - attrs.append((t, d)) - return attrs - -# Codes -RADIUS_ACCESS_REQUEST = 1 -RADIUS_ACCESS_ACCEPT = 2 -RADIUS_ACCESS_REJECT = 3 -RADIUS_ACCT_REQUEST = 4 -RADIUS_ACCT_RESPONSE = 5 -RADIUS_ACCT_STATUS = 6 -RADIUS_ACCESS_CHALLENGE = 11 - -# Attributes -RADIUS_USER_NAME = 1 -RADIUS_USER_PASSWORD = 2 -RADIUS_CHAP_PASSWORD = 3 -RADIUS_NAS_IP_ADDR = 4 -RADIUS_NAS_PORT = 5 -RADIUS_SERVICE_TYPE = 6 -RADIUS_FRAMED_PROTOCOL = 7 -RADIUS_FRAMED_IP_ADDR = 8 -RADIUS_FRAMED_IP_NETMASK = 9 -RADIUS_FRAMED_ROUTING = 10 -RADIUS_FILTER_ID = 11 -RADIUS_FRAMED_MTU = 12 -RADIUS_FRAMED_COMPRESSION = 13 -RADIUS_LOGIN_IP_HOST = 14 -RADIUS_LOGIN_SERVICE = 15 -RADIUS_LOGIN_TCP_PORT = 16 -# unassigned -RADIUS_REPLY_MESSAGE = 18 -RADIUS_CALLBACK_NUMBER = 19 -RADIUS_CALLBACK_ID = 20 -# unassigned -RADIUS_FRAMED_ROUTE = 22 -RADIUS_FRAMED_IPX_NETWORK = 23 -RADIUS_STATE = 24 -RADIUS_CLASS = 25 -RADIUS_VENDOR_SPECIFIC = 26 -RADIUS_SESSION_TIMEOUT = 27 -RADIUS_IDLE_TIMEOUT = 28 -RADIUS_TERMINATION_ACTION = 29 -RADIUS_CALLED_STATION_ID = 30 -RADIUS_CALLING_STATION_ID = 31 -RADIUS_NAS_ID = 32 -RADIUS_PROXY_STATE = 33 -RADIUS_LOGIN_LAT_SERVICE = 34 -RADIUS_LOGIN_LAT_NODE = 35 -RADIUS_LOGIN_LAT_GROUP = 36 -RADIUS_FRAMED_ATALK_LINK = 37 -RADIUS_FRAMED_ATALK_NETWORK = 38 -RADIUS_FRAMED_ATALK_ZONE = 39 -# 40-59 reserved for accounting -RADIUS_CHAP_CHALLENGE = 60 -RADIUS_NAS_PORT_TYPE = 61 -RADIUS_PORT_LIMIT = 62 -RADIUS_LOGIN_LAT_PORT = 63 diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/rfb.py b/external_libs/python/dpkt-1.8.6.2/dpkt/rfb.py deleted file mode 100644 index 6a69892f..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/rfb.py +++ /dev/null @@ -1,90 +0,0 @@ -# $Id: rfb.py 47 2008-05-27 02:10:00Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Remote Framebuffer Protocol.""" - -import dpkt - -# Remote Framebuffer Protocol -# http://www.realvnc.com/docs/rfbproto.pdf - -# Client to Server Messages -CLIENT_SET_PIXEL_FORMAT = 0 -CLIENT_SET_ENCODINGS = 2 -CLIENT_FRAMEBUFFER_UPDATE_REQUEST = 3 -CLIENT_KEY_EVENT = 4 -CLIENT_POINTER_EVENT = 5 -CLIENT_CUT_TEXT = 6 - -# Server to Client Messages -SERVER_FRAMEBUFFER_UPDATE = 0 -SERVER_SET_COLOUR_MAP_ENTRIES = 1 -SERVER_BELL = 2 -SERVER_CUT_TEXT = 3 - - -class RFB(dpkt.Packet): - __hdr__ = ( - ('type', 'B', 0), - ) - - -class SetPixelFormat(dpkt.Packet): - __hdr__ = ( - ('pad', '3s', ''), - ('pixel_fmt', '16s', '') - ) - - -class SetEncodings(dpkt.Packet): - __hdr__ = ( - ('pad', '1s', ''), - ('num_encodings', 'H', 0) - ) - - -class FramebufferUpdateRequest(dpkt.Packet): - __hdr__ = ( - ('incremental', 'B', 0), - ('x_position', 'H', 0), - ('y_position', 'H', 0), - ('width', 'H', 0), - ('height', 'H', 0) - ) - - -class KeyEvent(dpkt.Packet): - __hdr__ = ( - ('down_flag', 'B', 0), - ('pad', '2s', ''), - ('key', 'I', 0) - ) - - -class PointerEvent(dpkt.Packet): - __hdr__ = ( - ('button_mask', 'B', 0), - ('x_position', 'H', 0), - ('y_position', 'H', 0) - ) - - -class FramebufferUpdate(dpkt.Packet): - __hdr__ = ( - ('pad', '1s', ''), - ('num_rects', 'H', 0) - ) - - -class SetColourMapEntries(dpkt.Packet): - __hdr__ = ( - ('pad', '1s', ''), - ('first_colour', 'H', 0), - ('num_colours', 'H', 0) - ) - - -class CutText(dpkt.Packet): - __hdr__ = ( - ('pad', '3s', ''), - ('length', 'I', 0) - ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/rip.py b/external_libs/python/dpkt-1.8.6.2/dpkt/rip.py deleted file mode 100644 index 83f29f62..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/rip.py +++ /dev/null @@ -1,89 +0,0 @@ -# $Id: rip.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Routing Information Protocol.""" - -import dpkt - -# RIP v2 - RFC 2453 -# http://tools.ietf.org/html/rfc2453 - -REQUEST = 1 -RESPONSE = 2 - - -class RIP(dpkt.Packet): - __hdr__ = ( - ('cmd', 'B', REQUEST), - ('v', 'B', 2), - ('rsvd', 'H', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - l = [] - self.auth = None - while self.data: - rte = RTE(self.data[:20]) - if rte.family == 0xFFFF: - self.auth = Auth(self.data[:20]) - else: - l.append(rte) - self.data = self.data[20:] - self.data = self.rtes = l - - def __len__(self): - len = self.__hdr_len__ - if self.auth: - len += len(self.auth) - len += sum(map(len, self.rtes)) - return len - - def __str__(self): - auth = '' - if self.auth: - auth = str(self.auth) - return self.pack_hdr() + auth + ''.join(map(str, self.rtes)) - - -class RTE(dpkt.Packet): - __hdr__ = ( - ('family', 'H', 2), - ('route_tag', 'H', 0), - ('addr', 'I', 0), - ('subnet', 'I', 0), - ('next_hop', 'I', 0), - ('metric', 'I', 1) - ) - - -class Auth(dpkt.Packet): - __hdr__ = ( - ('rsvd', 'H', 0xFFFF), - ('type', 'H', 2), - ('auth', '16s', 0) - ) - - -__s = '\x02\x02\x00\x00\x00\x02\x00\x00\x01\x02\x03\x00\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x00\xc0\xa8\x01\x08\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x01' - - -def test_rtp_pack(): - r = RIP(__s) - assert (__s == str(r)) - - -def test_rtp_unpack(): - r = RIP(__s) - assert (r.auth is None) - assert (len(r.rtes) == 2) - - rte = r.rtes[1] - assert (rte.family == 2) - assert (rte.route_tag == 0) - assert (rte.metric == 1) - - -if __name__ == '__main__': - test_rtp_pack() - test_rtp_unpack() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/rpc.py b/external_libs/python/dpkt-1.8.6.2/dpkt/rpc.py deleted file mode 100644 index f12bc83b..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/rpc.py +++ /dev/null @@ -1,161 +0,0 @@ -# $Id: rpc.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Remote Procedure Call.""" - -import struct -import dpkt - -# RPC.dir -CALL = 0 -REPLY = 1 - -# RPC.Auth.flavor -AUTH_NONE = AUTH_NULL = 0 -AUTH_UNIX = 1 -AUTH_SHORT = 2 -AUTH_DES = 3 - -# RPC.Reply.stat -MSG_ACCEPTED = 0 -MSG_DENIED = 1 - -# RPC.Reply.Accept.stat -SUCCESS = 0 -PROG_UNAVAIL = 1 -PROG_MISMATCH = 2 -PROC_UNAVAIL = 3 -GARBAGE_ARGS = 4 -SYSTEM_ERR = 5 - -# RPC.Reply.Reject.stat -RPC_MISMATCH = 0 -AUTH_ERROR = 1 - - -class RPC(dpkt.Packet): - __hdr__ = ( - ('xid', 'I', 0), - ('dir', 'I', CALL) - ) - - class Auth(dpkt.Packet): - __hdr__ = (('flavor', 'I', AUTH_NONE), ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - n = struct.unpack('>I', self.data[:4])[0] - self.data = self.data[4:4 + n] - - def __len__(self): - return 8 + len(self.data) - - def __str__(self): - return self.pack_hdr() + struct.pack('>I', len(self.data)) + \ - str(self.data) - - class Call(dpkt.Packet): - __hdr__ = ( - ('rpcvers', 'I', 2), - ('prog', 'I', 0), - ('vers', 'I', 0), - ('proc', 'I', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.cred = RPC.Auth(self.data) - self.verf = RPC.Auth(self.data[len(self.cred):]) - self.data = self.data[len(self.cred) + len(self.verf):] - - def __len__(self): - return len(str(self)) # XXX - - def __str__(self): - return dpkt.Packet.__str__(self) + \ - str(getattr(self, 'cred', RPC.Auth())) + \ - str(getattr(self, 'verf', RPC.Auth())) + \ - str(self.data) - - class Reply(dpkt.Packet): - __hdr__ = (('stat', 'I', MSG_ACCEPTED), ) - - class Accept(dpkt.Packet): - __hdr__ = (('stat', 'I', SUCCESS), ) - - def unpack(self, buf): - self.verf = RPC.Auth(buf) - buf = buf[len(self.verf):] - self.stat = struct.unpack('>I', buf[:4])[0] - if self.stat == SUCCESS: - self.data = buf[4:] - elif self.stat == PROG_MISMATCH: - self.low, self.high = struct.unpack('>II', buf[4:12]) - self.data = buf[12:] - - def __len__(self): - if self.stat == PROG_MISMATCH: n = 8 - else: n = 0 - return len(self.verf) + 4 + n + len(self.data) - - def __str__(self): - if self.stat == PROG_MISMATCH: - return str(self.verf) + struct.pack('>III', self.stat, - self.low, self.high) + self.data - return str(self.verf) + dpkt.Packet.__str__(self) - - class Reject(dpkt.Packet): - __hdr__ = (('stat', 'I', AUTH_ERROR), ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.stat == RPC_MISMATCH: - self.low, self.high = struct.unpack('>II', self.data[:8]) - self.data = self.data[8:] - elif self.stat == AUTH_ERROR: - self.why = struct.unpack('>I', self.data[:4])[0] - self.data = self.data[4:] - - def __len__(self): - if self.stat == RPC_MISMATCH: n = 8 - elif self.stat == AUTH_ERROR: n = 4 - else: n = 0 - return 4 + n + len(self.data) - - def __str__(self): - if self.stat == RPC_MISMATCH: - return struct.pack('>III', self.stat, self.low, self.high) + self.data - elif self.stat == AUTH_ERROR: - return struct.pack('>II', self.stat, self.why) + self.data - return dpkt.Packet.__str__(self) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.stat == MSG_ACCEPTED: - self.data = self.accept = self.Accept(self.data) - elif self.status == MSG_DENIED: - self.data = self.reject = self.Reject(self.data) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.dir == CALL: - self.data = self.call = self.Call(self.data) - elif self.dir == REPLY: - self.data = self.reply = self.Reply(self.data) - - -def unpack_xdrlist(cls, buf): - l = [] - while buf: - if buf.startswith('\x00\x00\x00\x01'): - p = cls(buf[4:]) - l.append(p) - buf = p.data - elif buf.startswith('\x00\x00\x00\x00'): - break - else: - raise dpkt.UnpackError, 'invalid XDR list' - return l - - -def pack_xdrlist(*args): - return '\x00\x00\x00\x01'.join(map(str, args)) + '\x00\x00\x00\x00' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/rtp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/rtp.py deleted file mode 100644 index 9426d8c4..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/rtp.py +++ /dev/null @@ -1,127 +0,0 @@ -# $Id: rtp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Real-Time Transport Protocol""" - -from dpkt import Packet -from decorators import deprecated - -# version 1100 0000 0000 0000 ! 0xC000 14 -# p 0010 0000 0000 0000 ! 0x2000 13 -# x 0001 0000 0000 0000 ! 0x1000 12 -# cc 0000 1111 0000 0000 ! 0x0F00 8 -# m 0000 0000 1000 0000 ! 0x0080 7 -# pt 0000 0000 0111 1111 ! 0x007F 0 -# - -_VERSION_MASK = 0xC000 -_P_MASK = 0x2000 -_X_MASK = 0x1000 -_CC_MASK = 0x0F00 -_M_MASK = 0x0080 -_PT_MASK = 0x007F -_VERSION_SHIFT = 14 -_P_SHIFT = 13 -_X_SHIFT = 12 -_CC_SHIFT = 8 -_M_SHIFT = 7 -_PT_SHIFT = 0 - -VERSION = 2 - - -class RTP(Packet): - __hdr__ = ( - ('_type', 'H', 0x8000), - ('seq', 'H', 0), - ('ts', 'I', 0), - ('ssrc', 'I', 0), - ) - csrc = '' - - @property - def version(self): return (self._type & _VERSION_MASK) >> _VERSION_SHIFT - - @version.setter - def version(self, ver): - self._type = (ver << _VERSION_SHIFT) | (self._type & ~_VERSION_MASK) - - @property - def p(self): return (self._type & _P_MASK) >> _P_SHIFT - - @p.setter - def p(self, p): self._type = (p << _P_SHIFT) | (self._type & ~_P_MASK) - - @property - def x(self): return (self._type & _X_MASK) >> _X_SHIFT - - @x.setter - def x(self, x): self._type = (x << _X_SHIFT) | (self._type & ~_X_MASK) - - @property - def cc(self): return (self._type & _CC_MASK) >> _CC_SHIFT - - @cc.setter - def cc(self, cc): self._type = (cc << _CC_SHIFT) | (self._type & ~_CC_MASK) - - @property - def m(self): return (self._type & _M_MASK) >> _M_SHIFT - - @m.setter - def m(self, m): self._type = (m << _M_SHIFT) | (self._type & ~_M_MASK) - - @property - def pt(self): return (self._type & _PT_MASK) >> _PT_SHIFT - - @pt.setter - def pt(self, m): self._type = (m << _PT_SHIFT) | (self._type & ~_PT_MASK) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_version(self): return self.version - - @deprecated - def _set_version(self, ver): self.version = ver - - @deprecated - def _get_p(self): return self.p - - @deprecated - def _set_p(self, p): self.p = p - - @deprecated - def _get_x(self): return self.x - - @deprecated - def _set_x(self, x): self.x = x - - @deprecated - def _get_cc(self): return self.cc - - @deprecated - def _set_cc(self, cc): self.cc = cc - - @deprecated - def _get_m(self): return self.m - - @deprecated - def _set_m(self, m): self.m = m - - @deprecated - def _get_pt(self): return self.pt - - @deprecated - def _set_pt(self, pt): self.pt = pt - # ================================================= - - def __len__(self): - return self.__hdr_len__ + len(self.csrc) + len(self.data) - - def __str__(self): - return self.pack_hdr() + self.csrc + str(self.data) - - def unpack(self, buf): - super(RTP, self).unpack(buf) - self.csrc = buf[self.__hdr_len__:self.__hdr_len__ + self.cc * 4] - self.data = buf[self.__hdr_len__ + self.cc * 4:] - diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/rx.py b/external_libs/python/dpkt-1.8.6.2/dpkt/rx.py deleted file mode 100644 index 8535a350..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/rx.py +++ /dev/null @@ -1,45 +0,0 @@ -# $Id: rx.py 23 2006-11-08 15:45:33Z jonojono $ -# -*- coding: utf-8 -*- -"""Rx Protocol.""" - -import dpkt - -# Types -DATA = 0x01 -ACK = 0x02 -BUSY = 0x03 -ABORT = 0x04 -ACKALL = 0x05 -CHALLENGE = 0x06 -RESPONSE = 0x07 -DEBUG = 0x08 - -# Flags -CLIENT_INITIATED = 0x01 -REQUEST_ACK = 0x02 -LAST_PACKET = 0x04 -MORE_PACKETS = 0x08 -SLOW_START_OK = 0x20 -JUMBO_PACKET = 0x20 - -# Security -SEC_NONE = 0x00 -SEC_BCRYPT = 0x01 -SEC_RXKAD = 0x02 -SEC_RXKAD_ENC = 0x03 - - -class Rx(dpkt.Packet): - __hdr__ = ( - ('epoch', 'I', 0), - ('cid', 'I', 0), - ('call', 'I', 1), - ('seq', 'I', 0), - ('serial', 'I', 1), - ('type', 'B', 0), - ('flags', 'B', CLIENT_INITIATED), - ('status', 'B', 0), - ('security', 'B', 0), - ('sum', 'H', 0), - ('service', 'H', 0) - ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/sccp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/sccp.py deleted file mode 100644 index df862df3..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/sccp.py +++ /dev/null @@ -1,214 +0,0 @@ -# $Id: sccp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Cisco Skinny Client Control Protocol.""" - -import dpkt - -KEYPAD_BUTTON = 0x00000003 -OFF_HOOK = 0x00000006 -ON_HOOK = 0x00000007 -OPEN_RECEIVE_CHANNEL_ACK = 0x00000022 -START_TONE = 0x00000082 -STOP_TONE = 0x00000083 -SET_LAMP = 0x00000086 -SET_SPEAKER_MODE = 0x00000088 -START_MEDIA_TRANSMIT = 0x0000008A -STOP_MEDIA_TRANSMIT = 0x0000008B -CALL_INFO = 0x0000008F -DEFINE_TIME_DATE = 0x00000094 -DISPLAY_TEXT = 0x00000099 -OPEN_RECEIVE_CHANNEL = 0x00000105 -CLOSE_RECEIVE_CHANNEL = 0x00000106 -SELECT_SOFTKEYS = 0x00000110 -CALL_STATE = 0x00000111 -DISPLAY_PROMPT_STATUS = 0x00000112 -CLEAR_PROMPT_STATUS = 0x00000113 -ACTIVATE_CALL_PLANE = 0x00000116 - - -class ActivateCallPlane(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('line_instance', 'I', 0), - ) - - -class CallInfo(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('calling_party_name', '40s', ''), - ('calling_party', '24s', ''), - ('called_party_name', '40s', ''), - ('called_party', '24s', ''), - ('line_instance', 'I', 0), - ('call_id', 'I', 0), - ('call_type', 'I', 0), - ('orig_called_party_name', '40s', ''), - ('orig_called_party', '24s', '') - ) - - -class CallState(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('call_state', 'I', 12), # 12: Proceed, 15: Connected - ('line_instance', 'I', 1), - ('call_id', 'I', 0) - ) - - -class ClearPromptStatus(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('line_instance', 'I', 1), - ('call_id', 'I', 0) - ) - - -class CloseReceiveChannel(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('conference_id', 'I', 0), - ('passthruparty_id', 'I', 0), - ) - - -class DisplayPromptStatus(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('msg_timeout', 'I', 0), - ('display_msg', '32s', ''), - ('line_instance', 'I', 1), - ('call_id', 'I', 0) - ) - - -class DisplayText(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('display_msg', '36s', ''), - ) - - -class KeypadButton(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('button', 'I', 0), - ) - - -class OpenReceiveChannel(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('conference_id', 'I', 0), - ('passthruparty_id', 'I', 0), - ('ms_packet', 'I', 0), - ('payload_capability', 'I', 4), # 4: G.711 u-law 64k - ('echo_cancel_type', 'I', 4), - ('g723_bitrate', 'I', 0), - ) - - -class OpenReceiveChannelAck(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('channel_status', 'I', 0), - ('ip', '4s', ''), - ('port', 'I', 0), - ('passthruparty_id', 'I', 0), - ) - - -class SelectStartKeys(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('line_id', 'I', 1), - ('call_id', 'I', 0), - ('softkey_set', 'I', 8), - ('softkey_map', 'I', 0xffffffffL) - ) - - -class SetLamp(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('stimulus', 'I', 9), # 9: Line - ('stimulus_instance', 'I', 1), - ('lamp_mode', 'I', 1), - ) - - -class SetSpeakerMode(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('speaker', 'I', 2), # 2: SpeakerOff - ) - - -class StartMediaTransmission(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('conference_id', 'I', 0), - ('passthruparty_id', 'I', 0), - ('remote_ip', '4s', ''), - ('remote_port', 'I', 0), - ('ms_packet', 'I', 0), - ('payload_capability', 'I', 4), # 4: G.711 u-law 64k - ('precedence', 'I', 0), - ('silence_suppression', 'I', 0), - ('max_frames_per_pkt', 'I', 1), - ('g723_bitrate', 'I', 0), - ) - - -class StartTone(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('tone', 'I', 0x24), # 0x24: AlertingTone - ) - - -class StopMediaTransmission(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('conference_id', 'I', 0), - ('passthruparty_id', 'I', 0), - ) - - -class SCCP(dpkt.Packet): - __byte_order__ = '<' - __hdr__ = ( - ('len', 'I', 0), - ('rsvd', 'I', 0), - ('msgid', 'I', 0), - ('msg', '0s', ''), - ) - _msgsw = { - KEYPAD_BUTTON: KeypadButton, - OPEN_RECEIVE_CHANNEL_ACK: OpenReceiveChannelAck, - START_TONE: StartTone, - SET_LAMP: SetLamp, - START_MEDIA_TRANSMIT: StartMediaTransmission, - STOP_MEDIA_TRANSMIT: StopMediaTransmission, - CALL_INFO: CallInfo, - DISPLAY_TEXT: DisplayText, - OPEN_RECEIVE_CHANNEL: OpenReceiveChannel, - CLOSE_RECEIVE_CHANNEL: CloseReceiveChannel, - CALL_STATE: CallState, - DISPLAY_PROMPT_STATUS: DisplayPromptStatus, - CLEAR_PROMPT_STATUS: ClearPromptStatus, - ACTIVATE_CALL_PLANE: ActivateCallPlane, - } - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - n = self.len - 4 - if n > len(self.data): - raise dpkt.NeedData('not enough data') - self.msg, self.data = self.data[:n], self.data[n:] - try: - p = self._msgsw[self.msgid](self.msg) - setattr(self, p.__class__.__name__.lower(), p) - except (KeyError, dpkt.UnpackError): - pass diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/sctp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/sctp.py deleted file mode 100644 index 4ef251c8..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/sctp.py +++ /dev/null @@ -1,95 +0,0 @@ -# $Id: sctp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Stream Control Transmission Protocol.""" - -import dpkt -import crc32c - -# Stream Control Transmission Protocol -# http://tools.ietf.org/html/rfc2960 - -# Chunk Types -DATA = 0 -INIT = 1 -INIT_ACK = 2 -SACK = 3 -HEARTBEAT = 4 -HEARTBEAT_ACK = 5 -ABORT = 6 -SHUTDOWN = 7 -SHUTDOWN_ACK = 8 -ERROR = 9 -COOKIE_ECHO = 10 -COOKIE_ACK = 11 -ECNE = 12 -CWR = 13 -SHUTDOWN_COMPLETE = 14 - - -class SCTP(dpkt.Packet): - __hdr__ = ( - ('sport', 'H', 0), - ('dport', 'H', 0), - ('vtag', 'I', 0), - ('sum', 'I', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - l = [] - while self.data: - chunk = Chunk(self.data) - l.append(chunk) - self.data = self.data[len(chunk):] - self.data = self.chunks = l - - def __len__(self): - return self.__hdr_len__ + sum(map(len, self.data)) - - def __str__(self): - l = [str(x) for x in self.data] - if self.sum == 0: - s = crc32c.add(0xffffffffL, self.pack_hdr()) - for x in l: - s = crc32c.add(s, x) - self.sum = crc32c.done(s) - return self.pack_hdr() + ''.join(l) - - -class Chunk(dpkt.Packet): - __hdr__ = ( - ('type', 'B', INIT), - ('flags', 'B', 0), - ('len', 'H', 0) - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - self.data = self.data[:self.len - self.__hdr_len__] - - -__s = '\x80\x44\x00\x50\x00\x00\x00\x00\x30\xba\xef\x54\x01\x00\x00\x3c\x3b\xb9\x9c\x46\x00\x01\xa0\x00\x00\x0a\xff\xff\x2b\x2d\x7e\xb2\x00\x05\x00\x08\x9b\xe6\x18\x9b\x00\x05\x00\x08\x9b\xe6\x18\x9c\x00\x0c\x00\x06\x00\x05\x00\x00\x80\x00\x00\x04\xc0\x00\x00\x04\xc0\x06\x00\x08\x00\x00\x00\x00' - - -def test_sctp_pack(): - sctp = SCTP(__s) - assert (__s == str(sctp)) - sctp.sum = 0 - assert (__s == str(sctp)) - - -def test_sctp_unpack(): - sctp = SCTP(__s) - assert (sctp.sport == 32836) - assert (sctp.dport == 80) - assert (len(sctp.chunks) == 1) - assert (len(sctp) == 72) - chunk = sctp.chunks[0] - assert (chunk.type == INIT) - assert (chunk.len == 60) - - -if __name__ == '__main__': - test_sctp_pack() - test_sctp_unpack() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/sip.py b/external_libs/python/dpkt-1.8.6.2/dpkt/sip.py deleted file mode 100644 index fef476da..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/sip.py +++ /dev/null @@ -1,33 +0,0 @@ -# $Id: sip.py 48 2008-05-27 17:31:15Z yardley $ -# -*- coding: utf-8 -*- -"""Session Initiation Protocol.""" - -import http - - -class Request(http.Request): - """SIP request.""" - __hdr_defaults__ = { - 'method': 'INVITE', - 'uri': 'sip:user@example.com', - 'version': '2.0', - 'headers': {'To': '', 'From': '', 'Call-ID': '', 'CSeq': '', 'Contact': ''} - } - __methods = dict.fromkeys(( - 'ACK', 'BYE', 'CANCEL', 'INFO', 'INVITE', 'MESSAGE', 'NOTIFY', - 'OPTIONS', 'PRACK', 'PUBLISH', 'REFER', 'REGISTER', 'SUBSCRIBE', - 'UPDATE' - )) - __proto = 'SIP' - - -class Response(http.Response): - """SIP response.""" - __hdr_defaults__ = { - 'version': '2.0', - 'status': '200', - 'reason': 'OK', - 'headers': {'To': '', 'From': '', 'Call-ID': '', 'CSeq': '', 'Contact': ''} - } - __proto = 'SIP' - diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/sll.py b/external_libs/python/dpkt-1.8.6.2/dpkt/sll.py deleted file mode 100644 index 3d1a1204..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/sll.py +++ /dev/null @@ -1,26 +0,0 @@ -# $Id: sll.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Linux libpcap "cooked" capture encapsulation.""" - -import arp -import dpkt -import ethernet - - -class SLL(dpkt.Packet): - __hdr__ = ( - ('type', 'H', 0), # 0: to us, 1: bcast, 2: mcast, 3: other, 4: from us - ('hrd', 'H', arp.ARP_HRD_ETH), - ('hlen', 'H', 6), # hardware address length - ('hdr', '8s', ''), # first 8 bytes of link-layer header - ('ethtype', 'H', ethernet.ETH_TYPE_IP), - ) - _typesw = ethernet.Ethernet._typesw - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - try: - self.data = self._typesw[self.ethtype](self.data) - setattr(self, self.data.__class__.__name__.lower(), self.data) - except (KeyError, dpkt.UnpackError): - pass diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/smb.py b/external_libs/python/dpkt-1.8.6.2/dpkt/smb.py deleted file mode 100644 index 8517e64b..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/smb.py +++ /dev/null @@ -1,20 +0,0 @@ -# $Id: smb.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Server Message Block.""" - -import dpkt - - -class SMB(dpkt.Packet): - __hdr__ = [ - ('proto', '4s', ''), - ('cmd', 'B', 0), - ('err', 'I', 0), - ('flags1', 'B', 0), - ('flags2', 'B', 0), - ('pad', '6s', ''), - ('tid', 'H', 0), - ('pid', 'H', 0), - ('uid', 'H', 0), - ('mid', 'H', 0) - ] diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/snoop.py b/external_libs/python/dpkt-1.8.6.2/dpkt/snoop.py deleted file mode 100644 index 8090e855..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/snoop.py +++ /dev/null @@ -1,122 +0,0 @@ -# $Id$ -# -*- coding: utf-8 -*- -"""Snoop file format.""" - -import sys, time -import dpkt - -# RFC 1761 - -SNOOP_MAGIC = 0x736E6F6F70000000L - -SNOOP_VERSION = 2 - -SDL_8023 = 0 -SDL_8024 = 1 -SDL_8025 = 2 -SDL_8026 = 3 -SDL_ETHER = 4 -SDL_HDLC = 5 -SDL_CHSYNC = 6 -SDL_IBMCC = 7 -SDL_FDDI = 8 -SDL_OTHER = 9 - -dltoff = {SDL_ETHER: 14} - - -class PktHdr(dpkt.Packet): - """snoop packet header.""" - __byte_order__ = '!' - __hdr__ = ( - ('orig_len', 'I', 0), - ('incl_len', 'I', 0), - ('rec_len', 'I', 0), - ('cum_drops', 'I', 0), - ('ts_sec', 'I', 0), - ('ts_usec', 'I', 0), - ) - - -class FileHdr(dpkt.Packet): - """snoop file header.""" - __byte_order__ = '!' - __hdr__ = ( - ('magic', 'Q', SNOOP_MAGIC), - ('v', 'I', SNOOP_VERSION), - ('linktype', 'I', SDL_ETHER), - ) - - -class Writer(object): - """Simple snoop dumpfile writer.""" - - def __init__(self, fileobj, linktype=SDL_ETHER): - self.__f = fileobj - fh = FileHdr(linktype=linktype) - self.__f.write(str(fh)) - - def writepkt(self, pkt, ts=None): - if ts is None: - ts = time.time() - s = str(pkt) - n = len(s) - pad_len = 4 - n % 4 if n % 4 else 0 - ph = PktHdr(orig_len=n, incl_len=n, - rec_len=PktHdr.__hdr_len__ + n + pad_len, - ts_sec=int(ts), - ts_usec=int((int(ts) - float(ts)) * 1000000.0)) - self.__f.write(str(ph)) - self.__f.write(s + '\0' * pad_len) - - def close(self): - self.__f.close() - - -class Reader(object): - """Simple pypcap-compatible snoop file reader.""" - - def __init__(self, fileobj): - self.name = fileobj.name - self.fd = fileobj.fileno() - self.__f = fileobj - buf = self.__f.read(FileHdr.__hdr_len__) - self.__fh = FileHdr(buf) - self.__ph = PktHdr - if self.__fh.magic != SNOOP_MAGIC: - raise ValueError('invalid snoop header') - self.dloff = dltoff[self.__fh.linktype] - self.filter = '' - - def fileno(self): - return self.fd - - def datalink(self): - return self.__fh.linktype - - def setfilter(self, value, optimize=1): - return NotImplementedError - - def readpkts(self): - return list(self) - - def dispatch(self, cnt, callback, *args): - if cnt > 0: - for i in range(cnt): - ts, pkt = self.next() - callback(ts, pkt, *args) - else: - for ts, pkt in self: - callback(ts, pkt, *args) - - def loop(self, callback, *args): - self.dispatch(0, callback, *args) - - def __iter__(self): - self.__f.seek(FileHdr.__hdr_len__) - while 1: - buf = self.__f.read(PktHdr.__hdr_len__) - if not buf: break - hdr = self.__ph(buf) - buf = self.__f.read(hdr.rec_len - PktHdr.__hdr_len__) - yield (hdr.ts_sec + (hdr.ts_usec / 1000000.0), buf[:hdr.incl_len]) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ssl.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ssl.py deleted file mode 100644 index ea761552..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/ssl.py +++ /dev/null @@ -1,579 +0,0 @@ -# $Id: ssl.py 90 2014-04-02 22:06:23Z andrewflnr@gmail.com $ -# Portion Copyright 2012 Google Inc. All rights reserved. -# -*- coding: utf-8 -*- -"""Secure Sockets Layer / Transport Layer Security.""" - -import dpkt -import ssl_ciphersuites -import struct -import binascii - -# -# Note from April 2011: cde...@gmail.com added code that parses SSL3/TLS messages more in depth. -# -# Jul 2012: afleenor@google.com modified and extended SSL support further. -# - - -class SSL2(dpkt.Packet): - __hdr__ = ( - ('len', 'H', 0), - ('msg', 's', ''), - ('pad', 's', ''), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.len & 0x8000: - n = self.len = self.len & 0x7FFF - self.msg, self.data = self.data[:n], self.data[n:] - else: - n = self.len = self.len & 0x3FFF - padlen = ord(self.data[0]) - self.msg = self.data[1:1 + n] - self.pad = self.data[1 + n:1 + n + padlen] - self.data = self.data[1 + n + padlen:] - - -# SSLv3/TLS versions -SSL3_V = 0x0300 -TLS1_V = 0x0301 -TLS11_V = 0x0302 -TLS12_V = 0x0303 - -ssl3_versions_str = { - SSL3_V: 'SSL3', - TLS1_V: 'TLS 1.0', - TLS11_V: 'TLS 1.1', - TLS12_V: 'TLS 1.2' -} - -SSL3_VERSION_BYTES = set(('\x03\x00', '\x03\x01', '\x03\x02', '\x03\x03')) - - -# Alert levels -SSL3_AD_WARNING = 1 -SSL3_AD_FATAL = 2 -alert_level_str = { - SSL3_AD_WARNING: 'SSL3_AD_WARNING', - SSL3_AD_FATAL: 'SSL3_AD_FATAL' -} - -# SSL3 alert descriptions -SSL3_AD_CLOSE_NOTIFY = 0 -SSL3_AD_UNEXPECTED_MESSAGE = 10 # fatal -SSL3_AD_BAD_RECORD_MAC = 20 # fatal -SSL3_AD_DECOMPRESSION_FAILURE = 30 # fatal -SSL3_AD_HANDSHAKE_FAILURE = 40 # fatal -SSL3_AD_NO_CERTIFICATE = 41 -SSL3_AD_BAD_CERTIFICATE = 42 -SSL3_AD_UNSUPPORTED_CERTIFICATE = 43 -SSL3_AD_CERTIFICATE_REVOKED = 44 -SSL3_AD_CERTIFICATE_EXPIRED = 45 -SSL3_AD_CERTIFICATE_UNKNOWN = 46 -SSL3_AD_ILLEGAL_PARAMETER = 47 # fatal - -# TLS1 alert descriptions -TLS1_AD_DECRYPTION_FAILED = 21 -TLS1_AD_RECORD_OVERFLOW = 22 -TLS1_AD_UNKNOWN_CA = 48 # fatal -TLS1_AD_ACCESS_DENIED = 49 # fatal -TLS1_AD_DECODE_ERROR = 50 # fatal -TLS1_AD_DECRYPT_ERROR = 51 -TLS1_AD_EXPORT_RESTRICTION = 60 # fatal -TLS1_AD_PROTOCOL_VERSION = 70 # fatal -TLS1_AD_INSUFFICIENT_SECURITY = 71 # fatal -TLS1_AD_INTERNAL_ERROR = 80 # fatal -TLS1_AD_USER_CANCELLED = 90 -TLS1_AD_NO_RENEGOTIATION = 100 -# /* codes 110-114 are from RFC3546 */ -TLS1_AD_UNSUPPORTED_EXTENSION = 110 -TLS1_AD_CERTIFICATE_UNOBTAINABLE = 111 -TLS1_AD_UNRECOGNIZED_NAME = 112 -TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE = 113 -TLS1_AD_BAD_CERTIFICATE_HASH_VALUE = 114 -TLS1_AD_UNKNOWN_PSK_IDENTITY = 115 # fatal - - -# Mapping alert types to strings -alert_description_str = { - SSL3_AD_CLOSE_NOTIFY: 'SSL3_AD_CLOSE_NOTIFY', - SSL3_AD_UNEXPECTED_MESSAGE: 'SSL3_AD_UNEXPECTED_MESSAGE', - SSL3_AD_BAD_RECORD_MAC: 'SSL3_AD_BAD_RECORD_MAC', - SSL3_AD_DECOMPRESSION_FAILURE: 'SSL3_AD_DECOMPRESSION_FAILURE', - SSL3_AD_HANDSHAKE_FAILURE: 'SSL3_AD_HANDSHAKE_FAILURE', - SSL3_AD_NO_CERTIFICATE: 'SSL3_AD_NO_CERTIFICATE', - SSL3_AD_BAD_CERTIFICATE: 'SSL3_AD_BAD_CERTIFICATE', - SSL3_AD_UNSUPPORTED_CERTIFICATE: 'SSL3_AD_UNSUPPORTED_CERTIFICATE', - SSL3_AD_CERTIFICATE_REVOKED: 'SSL3_AD_CERTIFICATE_REVOKED', - SSL3_AD_CERTIFICATE_EXPIRED: 'SSL3_AD_CERTIFICATE_EXPIRED', - SSL3_AD_CERTIFICATE_UNKNOWN: 'SSL3_AD_CERTIFICATE_UNKNOWN', - SSL3_AD_ILLEGAL_PARAMETER: 'SSL3_AD_ILLEGAL_PARAMETER', - TLS1_AD_DECRYPTION_FAILED: 'TLS1_AD_DECRYPTION_FAILED', - TLS1_AD_RECORD_OVERFLOW: 'TLS1_AD_RECORD_OVERFLOW', - TLS1_AD_UNKNOWN_CA: 'TLS1_AD_UNKNOWN_CA', - TLS1_AD_ACCESS_DENIED: 'TLS1_AD_ACCESS_DENIED', - TLS1_AD_DECODE_ERROR: 'TLS1_AD_DECODE_ERROR', - TLS1_AD_DECRYPT_ERROR: 'TLS1_AD_DECRYPT_ERROR', - TLS1_AD_EXPORT_RESTRICTION: 'TLS1_AD_EXPORT_RESTRICTION', - TLS1_AD_PROTOCOL_VERSION: 'TLS1_AD_PROTOCOL_VERSION', - TLS1_AD_INSUFFICIENT_SECURITY: 'TLS1_AD_INSUFFICIENT_SECURITY', - TLS1_AD_INTERNAL_ERROR: 'TLS1_AD_INTERNAL_ERROR', - TLS1_AD_USER_CANCELLED: 'TLS1_AD_USER_CANCELLED', - TLS1_AD_NO_RENEGOTIATION: 'TLS1_AD_NO_RENEGOTIATION', - TLS1_AD_UNSUPPORTED_EXTENSION: 'TLS1_AD_UNSUPPORTED_EXTENSION', - TLS1_AD_CERTIFICATE_UNOBTAINABLE: 'TLS1_AD_CERTIFICATE_UNOBTAINABLE', - TLS1_AD_UNRECOGNIZED_NAME: 'TLS1_AD_UNRECOGNIZED_NAME', - TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 'TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE', - TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 'TLS1_AD_BAD_CERTIFICATE_HASH_VALUE', - TLS1_AD_UNKNOWN_PSK_IDENTITY: 'TLS1_AD_UNKNOWN_PSK_IDENTITY' -} - - -# struct format strings for parsing buffer lengths -# don't forget, you have to pad a 3-byte value with \x00 -_SIZE_FORMATS = ['!B', '!H', '!I', '!I'] - - -def parse_variable_array(buf, lenbytes): - """ - Parse an array described using the 'Type name' syntax from the spec - Read a length at the start of buf, and returns that many bytes - after, in a tuple with the TOTAL bytes consumed (including the size). This - does not check that the array is the right length for any given datatype. - """ - # first have to figure out how to parse length - assert lenbytes <= 4 # pretty sure 4 is impossible, too - size_format = _SIZE_FORMATS[lenbytes - 1] - padding = '\x00' if lenbytes == 3 else '' - # read off the length - size = struct.unpack(size_format, padding + buf[:lenbytes])[0] - # read the actual data - data = buf[lenbytes:lenbytes + size] - # if len(data) != size: insufficient data - return data, size + lenbytes - - -class SSL3Exception(Exception): - pass - - -class TLSRecord(dpkt.Packet): - - """ - SSLv3 or TLSv1+ packet. - - In addition to the fields specified in the header, there are - compressed and decrypted fields, indicating whether, in the language - of the spec, this is a TLSPlaintext, TLSCompressed, or - TLSCiphertext. The application will have to figure out when it's - appropriate to change these values. - """ - - __hdr__ = ( - ('type', 'B', 0), - ('version', 'H', 0), - ('length', 'H', 0), - ) - - def __init__(self, *args, **kwargs): - # assume plaintext unless specified otherwise in arguments - self.compressed = kwargs.pop('compressed', False) - self.encrypted = kwargs.pop('encrypted', False) - # parent constructor - dpkt.Packet.__init__(self, *args, **kwargs) - # make sure length and data are consistent - self.length = len(self.data) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - header_length = self.__hdr_len__ - self.data = buf[header_length:header_length + self.length] - # make sure buffer was long enough - if len(self.data) != self.length: - raise dpkt.NeedData('TLSRecord data was too short.') - # assume compressed and encrypted when it's been parsed from - # raw data - self.compressed = True - self.encrypted = True - - -class TLSChangeCipherSpec(dpkt.Packet): - - """ - ChangeCipherSpec message is just a single byte with value 1 - """ - - __hdr__ = (('type', 'B', 1),) - - -class TLSAppData(str): - - """ - As far as TLSRecord is concerned, AppData is just an opaque blob. - """ - - pass - - -class TLSAlert(dpkt.Packet): - __hdr__ = ( - ('level', 'B', 1), - ('description', 'B', 0), - ) - - -class TLSHelloRequest(dpkt.Packet): - __hdr__ = tuple() - - -class TLSClientHello(dpkt.Packet): - __hdr__ = ( - ('version', 'H', 0x0301), - ('random', '32s', '\x00' * 32), - ) # the rest is variable-length and has to be done manually - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - # now session, cipher suites, extensions are in self.data - self.session_id, pointer = parse_variable_array(self.data, 1) - # print 'pointer',pointer - # handle ciphersuites - ciphersuites, parsed = parse_variable_array(self.data[pointer:], 2) - pointer += parsed - self.num_ciphersuites = len(ciphersuites) / 2 - # check len(ciphersuites) % 2 == 0 ? - # compression methods - compression_methods, parsed = parse_variable_array( - self.data[pointer:], 1) - pointer += parsed - self.num_compression_methods = parsed - 1 - self.compression_methods = map(ord, compression_methods) - # extensions - - -class TLSServerHello(dpkt.Packet): - __hdr__ = ( - ('version', 'H', '0x0301'), - ('random', '32s', '\x00' * 32), - ) # session is variable, forcing rest to be manual - - def unpack(self, buf): - try: - dpkt.Packet.unpack(self, buf) - self.session_id, pointer = parse_variable_array(self.data, 1) - # single cipher suite - self.cipher_suite = struct.unpack('!H', self.data[pointer:pointer + 2])[0] - pointer += 2 - # single compression method - self.compression = struct.unpack('!B', self.data[pointer:pointer + 1])[0] - pointer += 1 - # ignore extensions for now - except struct.error: - # probably data too short - raise dpkt.NeedData - - -class TLSUnknownHandshake(dpkt.Packet): - __hdr__ = tuple() - - -TLSCertificate = TLSUnknownHandshake -TLSServerKeyExchange = TLSUnknownHandshake -TLSCertificateRequest = TLSUnknownHandshake -TLSServerHelloDone = TLSUnknownHandshake -TLSCertificateVerify = TLSUnknownHandshake -TLSClientKeyExchange = TLSUnknownHandshake -TLSFinished = TLSUnknownHandshake - - -# mapping of handshake type ids to their names -# and the classes that implement them -HANDSHAKE_TYPES = { - 0: ('HelloRequest', TLSHelloRequest), - 1: ('ClientHello', TLSClientHello), - 2: ('ServerHello', TLSServerHello), - 11: ('Certificate', TLSCertificate), - 12: ('ServerKeyExchange', TLSServerKeyExchange), - 13: ('CertificateRequest', TLSCertificateRequest), - 14: ('ServerHelloDone', TLSServerHelloDone), - 15: ('CertificateVerify', TLSCertificateVerify), - 16: ('ClientKeyExchange', TLSClientKeyExchange), - 20: ('Finished', TLSFinished), -} - - -class TLSHandshake(dpkt.Packet): - - """ - A TLS Handshake message - - This goes for all messages encapsulated in the Record layer, but especially - important for handshakes and app data: A message may be spread across a - number of TLSRecords, in addition to the possibility of there being more - than one in a given Record. You have to put together the contents of - TLSRecord's yourself. - """ - - # struct.unpack can't handle the 3-byte int, so we parse it as bytes - # (and store it as bytes so dpkt doesn't get confused), and turn it into - # an int in a user-facing property - __hdr__ = ( - ('type', 'B', 0), - ('length_bytes', '3s', 0), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - # Wait, might there be more than one message of self.type? - embedded_type = HANDSHAKE_TYPES.get(self.type, None) - if embedded_type is None: - raise SSL3Exception('Unknown or invalid handshake type %d' % - self.type) - # only take the right number of bytes - self.data = self.data[:self.length] - if len(self.data) != self.length: - raise dpkt.NeedData - # get class out of embedded_type tuple - self.data = embedded_type[1](self.data) - - @property - def length(self): - return struct.unpack('!I', '\x00' + self.length_bytes)[0] - - -RECORD_TYPES = { - 20: TLSChangeCipherSpec, - 21: TLSAlert, - 22: TLSHandshake, - 23: TLSAppData, -} - - -class SSLFactory(object): - def __new__(cls, buf): - v = buf[1:3] - if v in SSL3_VERSION_BYTES: - return TLSRecord(buf) - # SSL2 has no characteristic header or magic bytes, so we just assume - # that the msg is an SSL2 msg if it is not detected as SSL3+ - return SSL2(buf) - - -def tls_multi_factory(buf): - """ - Attempt to parse one or more TLSRecord's out of buf - - Args: - buf: string containing SSL/TLS messages. May have an incomplete record - on the end - - Returns: - [TLSRecord] - int, total bytes consumed, != len(buf) if an incomplete record was left at - the end. - - Raises SSL3Exception. - """ - i, n = 0, len(buf) - msgs = [] - while i < n: - v = buf[i + 1:i + 3] - if v in SSL3_VERSION_BYTES: - try: - msg = TLSRecord(buf[i:]) - msgs.append(msg) - except dpkt.NeedData: - break - else: - raise SSL3Exception('Bad TLS version in buf: %r' % buf[i:i + 5]) - i += len(msg) - return msgs, i - -_hexdecode = binascii.a2b_hex - - -class TestTLSRecord(object): - - """ - Test basic TLSRecord functionality - For this test, the contents of the record doesn't matter, since we're not parsing the next layer. - """ - - @classmethod - def setup_class(cls): - # add some extra data, to make sure length is parsed correctly - cls.p = TLSRecord('\x17\x03\x01\x00\x08abcdefghzzzzzzzzzzz') - - def test_content_type(self): - assert (self.p.type == 23) - - def test_version(self): - assert (self.p.version == 0x0301) - - def test_length(self): - assert (self.p.length == 8) - - def test_data(self): - assert (self.p.data == 'abcdefgh') - - def test_initial_flags(self): - assert (self.p.compressed == True) - assert (self.p.encrypted == True) - - def test_repack(self): - p2 = TLSRecord(type=23, version=0x0301, data='abcdefgh') - assert (p2.type == 23) - assert (p2.version == 0x0301) - assert (p2.length == 8) - assert (p2.data == 'abcdefgh') - assert (p2.pack() == self.p.pack()) - - def test_total_length(self): - # that len(p) includes header - assert (len(self.p) == 13) - - def test_raises_need_data_when_buf_is_short(self): - import pytest - pytest.raises(dpkt.NeedData, TLSRecord, '\x16\x03\x01\x00\x10abc') - - -class TestTLSChangeCipherSpec(object): - - """It's just a byte. This will be quick, I promise""" - - @classmethod - def setup_class(cls): - cls.p = TLSChangeCipherSpec('\x01') - - def test_parses(self): - assert (self.p.type == 1) - - def test_total_length(self): - assert (len(self.p) == 1) - - -class TestTLSAppData(object): - - """AppData is basically just a string""" - - def test_value(self): - d = TLSAppData('abcdefgh') - assert (d == 'abcdefgh') - - -class TestTLSHandshake(object): - @classmethod - def setup_class(cls): - cls.h = TLSHandshake('\x00\x00\x00\x01\xff') - - def test_created_inside_message(self): - assert (isinstance(self.h.data, TLSHelloRequest) == True) - - def test_length(self): - assert (self.h.length == 0x01) - - def test_raises_need_data(self): - import pytest - pytest.raises(dpkt.NeedData, TLSHandshake, '\x00\x00\x01\x01') - - -class TestClientHello(object): - - """This data is extracted from and verified by Wireshark""" - - @classmethod - def setup_class(cls): - cls.data = _hexdecode( - "01000199" # handshake header - "0301" # version - "5008220ce5e0e78b6891afe204498c9363feffbe03235a2d9e05b7d990eb708d" # rand - "2009bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed1" # session id - # cipher suites - "005400ffc00ac0140088008700390038c00fc00500840035c007c009c011c0130045004400330032c00cc00ec002c0040096004100050004002fc008c01200160013c00dc003feff000ac006c010c00bc00100020001" - "0100" # compresssion methods - # extensions - "00fc0000000e000c0000096c6f63616c686f7374000a00080006001700180019000b00020100002300d0a50b2e9f618a9ea9bf493ef49b421835cd2f6b05bbe1179d8edf70d58c33d656e8696d36d7e7e0b9d3ecc0e4de339552fa06c64c0fcb550a334bc43944e2739ca342d15a9ebbe981ac87a0d38160507d47af09bdc16c5f0ee4cdceea551539382333226048a026d3a90a0535f4a64236467db8fee22b041af986ad0f253bc369137cd8d8cd061925461d7f4d7895ca9a4181ab554dad50360ac31860e971483877c9335ac1300c5e78f3e56f3b8e0fc16358fcaceefd5c8d8aaae7b35be116f8832856ca61144fcdd95e071b94d0cf7233740000" - "FFFFFFFFFFFFFFFF") # random garbage - cls.p = TLSHandshake(cls.data) - - def test_client_hello_constructed(self): - """Make sure the correct class was constructed""" - # print self.p - assert (isinstance(self.p.data, TLSClientHello) == True) - - # def testClientDateCorrect(self): - # self.assertEqual(self.p.random_unixtime, 1342710284) - - def test_client_random_correct(self): - assert (self.p.data.random == _hexdecode('5008220ce5e0e78b6891afe204498c9363feffbe03235a2d9e05b7d990eb708d')) - - def test_cipher_suite_length(self): - # we won't bother testing the identity of each cipher suite in the list. - assert (self.p.data.num_ciphersuites == 42) - # self.assertEqual(len(self.p.ciphersuites), 42) - - def test_session_id(self): - assert (self.p.data.session_id == _hexdecode('09bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed1')) - - def test_compression_methods(self): - assert (self.p.data.num_compression_methods == 1) - - def test_total_length(self): - assert (len(self.p) == 413) - - -class TestServerHello(object): - - """Again, from Wireshark""" - - @classmethod - def setup_class(cls): - cls.data = _hexdecode( - '0200004d03015008220c8ec43c5462315a7c99f5d5b6bff009ad285b51dc18485f352e9fdecd2009bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed10002000005ff01000100') - cls.p = TLSHandshake(cls.data) - - def test_constructed(self): - assert (isinstance(self.p.data, TLSServerHello) == True) - - # def testDateCorrect(self): - # self.assertEqual(self.p.random_unixtime, 1342710284) - - def test_random_correct(self): - assert (self.p.data.random == _hexdecode('5008220c8ec43c5462315a7c99f5d5b6bff009ad285b51dc18485f352e9fdecd')) - - def test_cipher_suite(self): - assert (ssl_ciphersuites.BY_CODE[self.p.data.cipher_suite].name == 'TLS_RSA_WITH_NULL_SHA') - - def test_total_length(self): - assert (len(self.p) == 81) - - -class TestTLSMultiFactory(object): - - """Made up test data""" - - @classmethod - def setup_class(cls): - cls.data = _hexdecode('1703010010' # header 1 - 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' # data 1 - '1703010010' # header 2 - 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' # data 2 - '1703010010' # header 3 - 'CCCCCCCC') # data 3 (incomplete) - cls.msgs, cls.bytes_parsed = tls_multi_factory(cls.data) - - def test_num_messages(self): - # only complete messages should be parsed, incomplete ones left - # in buffer - assert (len(self.msgs) == 2) - - def test_bytes_parsed(self): - assert (self.bytes_parsed == (5 + 16) * 2) - - def test_first_msg_data(self): - assert (self.msgs[0].data == _hexdecode('AA' * 16)) - - def test_second_msg_data(self): - assert (self.msgs[1].data == _hexdecode('BB' * 16)) - diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py b/external_libs/python/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py deleted file mode 100644 index d5ee1b9d..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py +++ /dev/null @@ -1,76 +0,0 @@ -# Copyright 2012 Google Inc. All rights reserved. -# -*- coding: utf-8 -*- -""" -Nicely formatted cipher suite definitions for TLS - -A list of cipher suites in the form of CipherSuite objects. -These are supposed to be immutable; don't mess with them. -""" - - -class CipherSuite(object): - """ - Encapsulates a cipher suite. - - Members/args: - * code: two-byte ID code, as int - * name: as in 'TLS_RSA_WITH_RC4_40_MD5' - * kx: key exchange algorithm, string - * auth: authentication algorithm, string - * encoding: encoding algorithm - * mac: message authentication code algorithm - """ - - def __init__(self, code, name, kx, auth, encoding, mac): - self.code = code - self.name = name - self.kx = kx - self.auth = auth - self.encoding = encoding - self.mac = mac - - def __repr__(self): - return 'CipherSuite(%s)' % self.name - - MAC_SIZES = { - 'MD5': 16, - 'SHA': 20, - 'SHA256': 32, # I guess - } - - BLOCK_SIZES = { - 'AES_256_CBC': 16, - } - - @property - def mac_size(self): - """In bytes. Default to 0.""" - return self.MAC_SIZES.get(self.mac, 0) - - @property - def block_size(self): - """In bytes. Default to 1.""" - return self.BLOCK_SIZES.get(self.encoding, 1) - - -# master list of CipherSuite Objects -CIPHERSUITES = [ - # not a real cipher suite, can be ignored, see RFC5746 - CipherSuite(0xff, 'TLS_EMPTY_RENEGOTIATION_INFO', - 'NULL', 'NULL', 'NULL', 'NULL'), - CipherSuite(0x00, 'TLS_NULL_WITH_NULL_NULL', - 'NULL', 'NULL', 'NULL', 'NULL'), - CipherSuite(0x01, 'TLS_RSA_WITH_NULL_MD5', 'RSA', 'RSA', 'NULL', 'MD5'), - CipherSuite(0x02, 'TLS_RSA_WITH_NULL_SHA', 'RSA', 'RSA', 'NULL', 'SHA'), - CipherSuite(0x0039, 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA', - 'DHE', 'RSA', 'AES_256_CBC', 'SHA'), # not sure I got the kx/auth thing right. - CipherSuite(0xffff, 'UNKNOWN_CIPHER', '', '', '', '') -] - -BY_CODE = dict( - (cipher.code, cipher) for cipher in CIPHERSUITES) - -BY_NAME = dict( - (suite.name, suite) for suite in CIPHERSUITES) - -NULL_SUITE = BY_CODE[0x00] diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/stp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/stp.py deleted file mode 100644 index 382318a4..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/stp.py +++ /dev/null @@ -1,22 +0,0 @@ -# $Id: stp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Spanning Tree Protocol.""" - -import dpkt - - -class STP(dpkt.Packet): - __hdr__ = ( - ('proto_id', 'H', 0), - ('v', 'B', 0), - ('type', 'B', 0), - ('flags', 'B', 0), - ('root_id', '8s', ''), - ('root_path', 'I', 0), - ('bridge_id', '8s', ''), - ('port_id', 'H', 0), - ('age', 'H', 0), - ('max_age', 'H', 0), - ('hello', 'H', 0), - ('fd', 'H', 0) - ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/stun.py b/external_libs/python/dpkt-1.8.6.2/dpkt/stun.py deleted file mode 100644 index e371350c..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/stun.py +++ /dev/null @@ -1,47 +0,0 @@ -# $Id: stun.py 47 2008-05-27 02:10:00Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Simple Traversal of UDP through NAT.""" - -import struct -import dpkt - -# STUN - RFC 3489 -# http://tools.ietf.org/html/rfc3489 -# Each packet has a 20 byte header followed by 0 or more attribute TLVs. - -# Message Types -BINDING_REQUEST = 0x0001 -BINDING_RESPONSE = 0x0101 -BINDING_ERROR_RESPONSE = 0x0111 -SHARED_SECRET_REQUEST = 0x0002 -SHARED_SECRET_RESPONSE = 0x0102 -SHARED_SECRET_ERROR_RESPONSE = 0x0112 - -# Message Attributes -MAPPED_ADDRESS = 0x0001 -RESPONSE_ADDRESS = 0x0002 -CHANGE_REQUEST = 0x0003 -SOURCE_ADDRESS = 0x0004 -CHANGED_ADDRESS = 0x0005 -USERNAME = 0x0006 -PASSWORD = 0x0007 -MESSAGE_INTEGRITY = 0x0008 -ERROR_CODE = 0x0009 -UNKNOWN_ATTRIBUTES = 0x000a -REFLECTED_FROM = 0x000b - - -class STUN(dpkt.Packet): - __hdr__ = ( - ('type', 'H', 0), - ('len', 'H', 0), - ('xid', '16s', 0) - ) - - -def tlv(buf): - n = 4 - t, l = struct.unpack('>HH', buf[:n]) - v = buf[n:n + l] - buf = buf[n + l:] - return t, l, v, buf diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/tcp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/tcp.py deleted file mode 100644 index fe1a3b97..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/tcp.py +++ /dev/null @@ -1,152 +0,0 @@ -# $Id: tcp.py 42 2007-08-02 22:38:47Z jon.oberheide $ -# -*- coding: utf-8 -*- -"""Transmission Control Protocol.""" - -import dpkt -from decorators import deprecated - -# TCP control flags -TH_FIN = 0x01 # end of data -TH_SYN = 0x02 # synchronize sequence numbers -TH_RST = 0x04 # reset connection -TH_PUSH = 0x08 # push -TH_ACK = 0x10 # acknowledgment number set -TH_URG = 0x20 # urgent pointer set -TH_ECE = 0x40 # ECN echo, RFC 3168 -TH_CWR = 0x80 # congestion window reduced - -TCP_PORT_MAX = 65535 # maximum port -TCP_WIN_MAX = 65535 # maximum (unscaled) window - - -class TCP(dpkt.Packet): - __hdr__ = ( - ('sport', 'H', 0xdead), - ('dport', 'H', 0), - ('seq', 'I', 0xdeadbeefL), - ('ack', 'I', 0), - ('off_x2', 'B', ((5 << 4) | 0)), - ('flags', 'B', TH_SYN), - ('win', 'H', TCP_WIN_MAX), - ('sum', 'H', 0), - ('urp', 'H', 0) - ) - opts = '' - - @property - def off(self): return self.off_x2 >> 4 - - @off.setter - def off(self, off): self.off_x2 = (off << 4) | (self.off_x2 & 0xf) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_off(self): return self.off - - @deprecated - def _set_off(self, off): self.off = off - # ================================================= - - def __len__(self): - return self.__hdr_len__ + len(self.opts) + len(self.data) - - def __str__(self): - return self.pack_hdr() + self.opts + str(self.data) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - ol = ((self.off_x2 >> 4) << 2) - self.__hdr_len__ - if ol < 0: - raise dpkt.UnpackError, 'invalid header length' - self.opts = buf[self.__hdr_len__:self.__hdr_len__ + ol] - self.data = buf[self.__hdr_len__ + ol:] - -# Options (opt_type) - http://www.iana.org/assignments/tcp-parameters -TCP_OPT_EOL = 0 # end of option list -TCP_OPT_NOP = 1 # no operation -TCP_OPT_MSS = 2 # maximum segment size -TCP_OPT_WSCALE = 3 # window scale factor, RFC 1072 -TCP_OPT_SACKOK = 4 # SACK permitted, RFC 2018 -TCP_OPT_SACK = 5 # SACK, RFC 2018 -TCP_OPT_ECHO = 6 # echo (obsolete), RFC 1072 -TCP_OPT_ECHOREPLY = 7 # echo reply (obsolete), RFC 1072 -TCP_OPT_TIMESTAMP = 8 # timestamp, RFC 1323 -TCP_OPT_POCONN = 9 # partial order conn, RFC 1693 -TCP_OPT_POSVC = 10 # partial order service, RFC 1693 -TCP_OPT_CC = 11 # connection count, RFC 1644 -TCP_OPT_CCNEW = 12 # CC.NEW, RFC 1644 -TCP_OPT_CCECHO = 13 # CC.ECHO, RFC 1644 -TCP_OPT_ALTSUM = 14 # alt checksum request, RFC 1146 -TCP_OPT_ALTSUMDATA = 15 # alt checksum data, RFC 1146 -TCP_OPT_SKEETER = 16 # Skeeter -TCP_OPT_BUBBA = 17 # Bubba -TCP_OPT_TRAILSUM = 18 # trailer checksum -TCP_OPT_MD5 = 19 # MD5 signature, RFC 2385 -TCP_OPT_SCPS = 20 # SCPS capabilities -TCP_OPT_SNACK = 21 # selective negative acks -TCP_OPT_REC = 22 # record boundaries -TCP_OPT_CORRUPT = 23 # corruption experienced -TCP_OPT_SNAP = 24 # SNAP -TCP_OPT_TCPCOMP = 26 # TCP compression filter -TCP_OPT_MAX = 27 - - -def parse_opts(buf): - """Parse TCP option buffer into a list of (option, data) tuples.""" - opts = [] - while buf: - o = ord(buf[0]) - if o > TCP_OPT_NOP: - try: - # advance buffer at least 2 bytes = 1 type + 1 length - l = max(2, ord(buf[1])) - d, buf = buf[2:l], buf[l:] - except (IndexError, ValueError): - # print 'bad option', repr(str(buf)) - opts.append(None) # XXX - break - else: - # options 0 and 1 are not followed by length byte - d, buf = '', buf[1:] - opts.append((o, d)) - return opts - - -def test_parse_opts(): - # normal scenarios - buf = '\x02\x04\x23\x00\x01\x01\x04\x02' - opts = parse_opts(buf) - assert opts == [ - (TCP_OPT_MSS, '\x23\x00'), - (TCP_OPT_NOP, ''), - (TCP_OPT_NOP, ''), - (TCP_OPT_SACKOK, '') - ] - - buf = '\x01\x01\x05\x0a\x37\xf8\x19\x70\x37\xf8\x29\x78' - opts = parse_opts(buf) - assert opts == [ - (TCP_OPT_NOP, ''), - (TCP_OPT_NOP, ''), - (TCP_OPT_SACK, '\x37\xf8\x19\x70\x37\xf8\x29\x78') - ] - - # test a zero-length option - buf = '\x02\x00\x01' - opts = parse_opts(buf) - assert opts == [ - (TCP_OPT_MSS, ''), - (TCP_OPT_NOP, '') - ] - - # test a one-byte malformed option - buf = '\xff' - opts = parse_opts(buf) - assert opts == [None] - - -if __name__ == '__main__': - # Runs all the test associated with this class/file - test_parse_opts() - print 'Tests Successful...' diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/telnet.py b/external_libs/python/dpkt-1.8.6.2/dpkt/telnet.py deleted file mode 100644 index 9a1d7f4c..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/telnet.py +++ /dev/null @@ -1,80 +0,0 @@ -# $Id: telnet.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Telnet.""" - -IAC = 255 # interpret as command: -DONT = 254 # you are not to use option -DO = 253 # please, you use option -WONT = 252 # I won't use option -WILL = 251 # I will use option -SB = 250 # interpret as subnegotiation -GA = 249 # you may reverse the line -EL = 248 # erase the current line -EC = 247 # erase the current character -AYT = 246 # are you there -AO = 245 # abort output--but let prog finish -IP = 244 # interrupt process--permanently -BREAK = 243 # break -DM = 242 # data mark--for connect. cleaning -NOP = 241 # nop -SE = 240 # end sub negotiation -EOR = 239 # end of record (transparent mode) -ABORT = 238 # Abort process -SUSP = 237 # Suspend process -xEOF = 236 # End of file: EOF is already used... - -SYNCH = 242 # for telfunc calls - - -def strip_options(buf): - """Return a list of lines and dict of options from telnet data.""" - l = buf.split(chr(IAC)) - # print l - b = [] - d = {} - subopt = False - for w in l: - if not w: - continue - o = ord(w[0]) - if o > SB: - # print 'WILL/WONT/DO/DONT/IAC', `w` - w = w[2:] - elif o == SE: - # print 'SE', `w` - w = w[1:] - subopt = False - elif o == SB: - # print 'SB', `w` - subopt = True - for opt in ('USER', 'DISPLAY', 'TERM'): - p = w.find(opt + '\x01') - if p != -1: - d[opt] = w[p + len(opt) + 1:].split('\x00', 1)[0] - w = None - elif subopt: - w = None - if w: - w = w.replace('\x00', '\n').splitlines() - if not w[-1]: w.pop() - b.extend(w) - return b, d - - -def test_telnet(): - l = [] - s = "\xff\xfb%\xff\xfa%\x00\x00\x00\xff\xf0\xff\xfd&\xff\xfa&\x05\xff\xf0\xff\xfa&\x01\x01\x02\xff\xf0\xff\xfb\x18\xff\xfb \xff\xfb#\xff\xfb'\xff\xfc$\xff\xfa \x0038400,38400\xff\xf0\xff\xfa#\x00doughboy.citi.umich.edu:0.0\xff\xf0\xff\xfa'\x00\x00DISPLAY\x01doughboy.citi.umich.edu:0.0\x00USER\x01dugsong\xff\xf0\xff\xfa\x18\x00XTERM\xff\xf0\xff\xfd\x03\xff\xfc\x01\xff\xfb\x1f\xff\xfa\x1f\x00P\x00(\xff\xf0\xff\xfd\x05\xff\xfb!\xff\xfd\x01fugly\r\x00yoda\r\x00bashtard\r\x00" - l.append(s) - s = '\xff\xfd\x01\xff\xfd\x03\xff\xfb\x18\xff\xfb\x1f\xff\xfa\x1f\x00X\x002\xff\xf0admin\r\x00\xff\xfa\x18\x00LINUX\xff\xf0foobar\r\x00enable\r\x00foobar\r\x00\r\x00show ip int Vlan 666\r\x00' - l.append(s) - s = '\xff\xfb%\xff\xfa%\x00\x00\x00\xff\xf0\xff\xfd&\xff\xfa&\x05\xff\xf0\xff\xfa&\x01\x01\x02\xff\xf0\xff\xfb&\xff\xfb\x18\xff\xfb \xff\xfb#\xff\xfb\'\xff\xfc$\xff\xfa \x0038400,38400\xff\xf0\xff\xfa#\x00doughboy.citi.umich.edu:0.0\xff\xf0\xff\xfa\'\x00\x00DISPLAY\x01doughboy.citi.umich.edu:0.0\x00USER\x01dugsong\xff\xf0\xff\xfa\x18\x00XTERM\xff\xf0\xff\xfd\x03\xff\xfc\x01\xff\xfb"\xff\xfa"\x03\x01\x03\x00\x03b\x03\x04\x02\x0f\x05\x00\xff\xff\x07b\x1c\x08\x02\x04\tB\x1a\n\x02\x7f\x0b\x02\x15\x0c\x02\x17\r\x02\x12\x0e\x02\x16\x0f\x02\x11\x10\x02\x13\x11\x00\xff\xff\x12\x00\xff\xff\xff\xf0\xff\xfb\x1f\xff\xfa\x1f\x00P\x00(\xff\xf0\xff\xfd\x05\xff\xfb!\xff\xfa"\x01\x0f\xff\xf0\xff\xfd\x01\xff\xfe\x01\xff\xfa"\x03\x01\x80\x00\xff\xf0\xff\xfd\x01werd\r\n\xff\xfe\x01yoda\r\n\xff\xfd\x01darthvader\r\n\xff\xfe\x01' - l.append(s) - exp = [(['fugly', 'yoda', 'bashtard'], {'USER': 'dugsong', 'DISPLAY': 'doughboy.citi.umich.edu:0.0'}), - (['admin', 'foobar', 'enable', 'foobar', '', 'show ip int Vlan 666'], {}), - (['werd', 'yoda', 'darthvader'], {'USER': 'dugsong', 'DISPLAY': 'doughboy.citi.umich.edu:0.0'})] - assert (map(strip_options, l) == exp) - - -if __name__ == '__main__': - test_telnet() - print 'Tests Successful...' \ No newline at end of file diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/tftp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/tftp.py deleted file mode 100644 index 928ee1e3..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/tftp.py +++ /dev/null @@ -1,56 +0,0 @@ -# $Id: tftp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Trivial File Transfer Protocol.""" - -import struct -import dpkt - -# Opcodes -OP_RRQ = 1 # read request -OP_WRQ = 2 # write request -OP_DATA = 3 # data packet -OP_ACK = 4 # acknowledgment -OP_ERR = 5 # error code - -# Error codes -EUNDEF = 0 # not defined -ENOTFOUND = 1 # file not found -EACCESS = 2 # access violation -ENOSPACE = 3 # disk full or allocation exceeded -EBADOP = 4 # illegal TFTP operation -EBADID = 5 # unknown transfer ID -EEXISTS = 6 # file already exists -ENOUSER = 7 # no such user - - -class TFTP(dpkt.Packet): - __hdr__ = (('opcode', 'H', 1), ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - if self.opcode in (OP_RRQ, OP_WRQ): - l = self.data.split('\x00') - self.filename = l[0] - self.mode = l[1] - self.data = '' - elif self.opcode in (OP_DATA, OP_ACK): - self.block = struct.unpack('>H', self.data[:2]) - self.data = self.data[2:] - elif self.opcode == OP_ERR: - self.errcode = struct.unpack('>H', self.data[:2]) - self.errmsg = self.data[2:].split('\x00')[0] - self.data = '' - - def __len__(self): - return len(str(self)) - - def __str__(self): - if self.opcode in (OP_RRQ, OP_WRQ): - s = '%s\x00%s\x00' % (self.filename, self.mode) - elif self.opcode in (OP_DATA, OP_ACK): - s = struct.pack('>H', self.block) - elif self.opcode == OP_ERR: - s = struct.pack('>H', self.errcode) + ('%s\x00' % self.errmsg) - else: - s = '' - return self.pack_hdr() + s + self.data diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/tns.py b/external_libs/python/dpkt-1.8.6.2/dpkt/tns.py deleted file mode 100644 index 931508e6..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/tns.py +++ /dev/null @@ -1,26 +0,0 @@ -# $Id: tns.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Transparent Network Substrate.""" - -import dpkt - - -class TNS(dpkt.Packet): - __hdr__ = ( - ('length', 'H', 0), - ('pktsum', 'H', 0), - ('type', 'B', 0), - ('rsvd', 'B', 0), - ('hdrsum', 'H', 0), - ('msg', '0s', ''), - ) - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - n = self.length - self.__hdr_len__ - if n > len(self.data): - raise dpkt.NeedData('short message (missing %d bytes)' % - (n - len(self.data))) - self.msg = self.data[:n] - self.data = self.data[n:] - diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/tpkt.py b/external_libs/python/dpkt-1.8.6.2/dpkt/tpkt.py deleted file mode 100644 index d235833b..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/tpkt.py +++ /dev/null @@ -1,16 +0,0 @@ -# $Id: tpkt.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""ISO Transport Service on top of the TCP (TPKT).""" - -import dpkt - -# TPKT - RFC 1006 Section 6 -# http://www.faqs.org/rfcs/rfc1006.html - - -class TPKT(dpkt.Packet): - __hdr__ = ( - ('v', 'B', 3), - ('rsvd', 'B', 0), - ('len', 'H', 0) - ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/udp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/udp.py deleted file mode 100644 index 41a00e78..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/udp.py +++ /dev/null @@ -1,17 +0,0 @@ -# $Id: udp.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""User Datagram Protocol.""" - -import dpkt - -UDP_HDR_LEN = 8 -UDP_PORT_MAX = 65535 - - -class UDP(dpkt.Packet): - __hdr__ = ( - ('sport', 'H', 0xdead), - ('dport', 'H', 0), - ('ulen', 'H', 8), - ('sum', 'H', 0) - ) diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/vrrp.py b/external_libs/python/dpkt-1.8.6.2/dpkt/vrrp.py deleted file mode 100644 index 6bdff005..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/vrrp.py +++ /dev/null @@ -1,70 +0,0 @@ -# $Id: vrrp.py 88 2013-03-05 19:43:17Z andrewflnr@gmail.com $ -# -*- coding: utf-8 -*- -"""Virtual Router Redundancy Protocol.""" - -import dpkt -from decorators import deprecated - - -class VRRP(dpkt.Packet): - __hdr__ = ( - ('vtype', 'B', 0x21), - ('vrid', 'B', 0), - ('priority', 'B', 0), - ('count', 'B', 0), - ('atype', 'B', 0), - ('advtime', 'B', 0), - ('sum', 'H', 0), - ) - addrs = () - auth = '' - - @property - def v(self): - return self.vtype >> 4 - - @v.setter - def v(self, v): - self.vtype = (self.vtype & ~0xf) | (v << 4) - - @property - def type(self): - return self.vtype & 0xf - - @type.setter - def type(self, v): - self.vtype = (self.vtype & ~0xf0) | (v & 0xf) - - # Deprecated methods, will be removed in the future - # ================================================= - @deprecated - def _get_v(self): return self.v - - @deprecated - def _set_v(self, v): self.v = v - - @deprecated - def _get_type(self): return self.type - - @deprecated - def _set_type(self, v): self.type = v - # ================================================= - - def unpack(self, buf): - dpkt.Packet.unpack(self, buf) - l = [] - off = 0 - for off in range(0, 4 * self.count, 4): - l.append(self.data[off:off + 4]) - self.addrs = l - self.auth = self.data[off + 4:] - self.data = '' - - def __len__(self): - return self.__hdr_len__ + (4 * self.count) + len(self.auth) - - def __str__(self): - data = ''.join(self.addrs) + self.auth - if not self.sum: - self.sum = dpkt.in_cksum(self.pack_hdr() + data) - return self.pack_hdr() + data diff --git a/external_libs/python/dpkt-1.8.6.2/dpkt/yahoo.py b/external_libs/python/dpkt-1.8.6.2/dpkt/yahoo.py deleted file mode 100644 index 6b871115..00000000 --- a/external_libs/python/dpkt-1.8.6.2/dpkt/yahoo.py +++ /dev/null @@ -1,30 +0,0 @@ -# $Id: yahoo.py 23 2006-11-08 15:45:33Z dugsong $ -# -*- coding: utf-8 -*- -"""Yahoo Messenger.""" - -import dpkt - - -class YHOO(dpkt.Packet): - __hdr__ = [ - ('version', '8s', ' ' * 8), - ('length', 'I', 0), - ('service', 'I', 0), - ('connid', 'I', 0), - ('magic', 'I', 0), - ('unknown', 'I', 0), - ('type', 'I', 0), - ('nick1', '36s', ' ' * 36), - ('nick2', '36s', ' ' * 36) - ] - __byte_order__ = '<' - - -class YMSG(dpkt.Packet): - __hdr__ = [ - ('version', '8s', ' ' * 8), - ('length', 'H', 0), - ('type', 'H', 0), - ('unknown1', 'I', 0), - ('unknown2', 'I', 0) - ] diff --git a/external_libs/python/dpkt-1.8.6.2/setup.cfg b/external_libs/python/dpkt-1.8.6.2/setup.cfg deleted file mode 100644 index 56ffc205..00000000 --- a/external_libs/python/dpkt-1.8.6.2/setup.cfg +++ /dev/null @@ -1,20 +0,0 @@ -[bdist_wheel] -universal = 1 - -[aliases] -release = register clean --all sdist bdist_wheel upload - -[flake8] -max-line-length = 140 - -[pytest] -addopts = -v --cov-report term-missing -python_files = *.py -python_functions = test -norecursedirs = .tox .git *.egg-info __pycache__ dist build - -[egg_info] -tag_build = -tag_date = 0 -tag_svn_revision = 0 - diff --git a/external_libs/python/dpkt-1.8.6.2/setup.py b/external_libs/python/dpkt-1.8.6.2/setup.py deleted file mode 100644 index f77cd97e..00000000 --- a/external_libs/python/dpkt-1.8.6.2/setup.py +++ /dev/null @@ -1,67 +0,0 @@ -import os -import sys - -try: - from setuptools import setup, Command -except ImportError: - from distutils.core import setup, Command - -package_name = 'dpkt' -description = 'fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols' -readme = open('README.rst').read() -requirements = [] - -# PyPI Readme -long_description = open('README.rst').read() - -# Pull in the package -package = __import__(package_name) - - -class BuildDebPackage(Command): - """Build a Debian Package out of this Python Package""" - try: - import stdeb - except ImportError as exc: - print 'To build a Debian Package you must install stdeb (pip install stdeb)' - - description = "Build a Debian Package out of this Python Package" - user_options = [] - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - os.system('python setup.py sdist') - sdist_file = os.path.join(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'dist'), - package_name + '-' + package.__version__ + '.tar.gz') - print sdist_file - os.system('py2dsc-deb ' + sdist_file) - - -setup(name=package_name, - version=package.__version__, - author=package.__author__, - author_email=package.__author_email__, - url=package.__url__, - description=description, - long_description=long_description, - packages=['dpkt'], - install_requires=requirements, - license='BSD', - zip_safe=False, - classifiers=[ - 'Development Status :: 4 - Beta', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: BSD License', - 'Natural Language :: English', - 'Programming Language :: Python :: 2.6', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: Implementation :: CPython', - 'Programming Language :: Python :: Implementation :: PyPy', - ], - cmdclass={'debian': BuildDebPackage} -) diff --git a/scripts/external_libs/dpkt-1.8.6.2/AUTHORS b/scripts/external_libs/dpkt-1.8.6.2/AUTHORS new file mode 100644 index 00000000..dcefbef9 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/AUTHORS @@ -0,0 +1,60 @@ + +Original author +--------------- + +Dug Song + + +Contributors +------------ + +Timur Alperovich + radiotap module + +Nic Bellamy + HTTP header parsing fix + +the grugq + better RTP module + +David Helder + bug fixes + +Przemyslaw Karwasiecki + TABLE_DUMP in MRT module + +Reza Lotun + MetaPacket cleanup + +Jeff Nathan + bug fixes + +Tim Newsham + IPv6 bugfixing and improvements + +keisuke.nishimoto@gmail.com + Snoop file parser + +Jon Oberheide + STUN, H.225, TPKT, NTP, RIP, Diameter, SCTP, BGP, MRT, RX modules + +plotnikoff@gmail.com + handle dynamic imports from py2exe/freeze.py/zipped egg packages + +simdream@gmail.com + handle multiple cookie values in HTTP + +Owen Stephens + IP6 extension header support + +Robert Stone + Netflow and QQ modules + +Thomas Taranowski + dnet IP checksum bug on i386 + +Jirka Vejrazka + bug fixes + +Tim Yardley + DHCP definitions diff --git a/scripts/external_libs/dpkt-1.8.6.2/CHANGES b/scripts/external_libs/dpkt-1.8.6.2/CHANGES new file mode 100644 index 00000000..a5f05121 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/CHANGES @@ -0,0 +1,71 @@ +dpkg-1.8: + - fix a typo in vrrp.py + - fix IPv4 and IPv6 packet to correctly handle zero payload length + - store cipher_suite as int in TLSServerHello to allow app-specific messages + - improve SSL parsing + +dpkt-1.7: + - handle dynamic imports from py2exe/freeze.py/zipped egg + packages, from plotnikoff + - decode Ethernet MPLS labels, Cisco ISL VLAN tags, 802.2 LLC fields + - handle multiply-defined HTTP headers from simdream + - add IPv6 extension header support (minus ESP) from Owen Stephens + - add radiotap module from Timur Alperovich + - add IEEE80211 module from Jon Oberheide + - add RFB module from Jon Oberheide + - fix IP6 checksum to include options + - rename 'as' to 'asn' field in BGP header + - fix transport-layer checksum in IP6 + - handle improper TCP header offset + - fix SSL typo + - handle malformed ICMP headers + - added RX module from Jon Oberheide + - fixed loopback module IP/IP6 decoding + - set transport-layer (TCP, UDP) checksum in IP + - MRT module fixes + - fix pcap.Writer timestamp calculation + +dpkt-1.6: + - DNS RR packing fixed + - added STUN, H.225, TPKT, NTP, RIP, Diameter, SCTP, + BGP, and MRT modules from Jon Oberheide + - new dpkt.NeedData exception + +dpkt-1.5: + - IP6 checksum fix + - __getitem__() interface to Packet (e.g. ip['src'] == ip.src) + - faster Ethernet, IP, PPP module loading + - support any endianness capture file in pcap module, + and export a pypcap-compatible Reader + - additional CDP definitions + - replaced rtp module with the grugq's version + - added QQ module from Robert Stone + - added gzip module + - added PPPoE module + - added RADIUS module + +dpkt-1.4: + - fix IP checksum bug on i386, caught by Thomas Taranowski + +dpkt-1.3: + - autoload IP, Ethernet dispatch tables + - IP6 bugfixes from Tim Newsham + - additional DHCP definitions from Tim Yardley + - HTTP bugfixes and abstraction (see SIP) + - RPC bugfixes + - added pypcap-compatible PcapReader + - added Linux libpcap "cooked" capture module + - added preliminary SSL module + - added SIP module + - added SCCP module + - added RTP module + - added Portmap module + +dpkt-1.2: + - changed license from GPL to BSD + - added DTP module + - added HTTP module + - added DNS RR decodes + - added enough PPP to decode PPTP GRE encapsulation + +# $Id: CHANGES 379 2006-07-27 05:23:19Z dugsong $ diff --git a/scripts/external_libs/dpkt-1.8.6.2/LICENSE b/scripts/external_libs/dpkt-1.8.6.2/LICENSE new file mode 100644 index 00000000..99d14371 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/LICENSE @@ -0,0 +1,28 @@ + + Copyright (c) 2004 Dug Song + All rights reserved, all wrongs reversed. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The names of the authors and copyright holders may not be used to + endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/scripts/external_libs/dpkt-1.8.6.2/MANIFEST.in b/scripts/external_libs/dpkt-1.8.6.2/MANIFEST.in new file mode 100644 index 00000000..2d5c155a --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/MANIFEST.in @@ -0,0 +1,7 @@ + +include AUTHORS CHANGES README.rst LICENSE + +recursive-include docs * +prune docs/_build + +global-exclude __pycache__/* diff --git a/scripts/external_libs/dpkt-1.8.6.2/PKG-INFO b/scripts/external_libs/dpkt-1.8.6.2/PKG-INFO new file mode 100644 index 00000000..baf82a26 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/PKG-INFO @@ -0,0 +1,82 @@ +Metadata-Version: 1.1 +Name: dpkt +Version: 1.8.6.2 +Summary: fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols +Home-page: http://dpkt.googlecode.com/ +Author: Dug Song +Author-email: dugsong@monkey.org +License: BSD +Description: + ==== + dpkt + ==== + + | |travis| |coveralls| |landscape| |downloads| + | |version| |wheel| |supported-versions| |supported-implementations| + + .. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + + .. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + + .. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + + .. |version| image:: http://img.shields.io/pypi/v/dpkt.svg + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + + .. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + + .. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + + Installation + ============ + + :: + + pip install dpkt + + Documentation + ============= + + https://dpkt.readthedocs.org/ + + About + ===== + + This code is based on `dpkt code `__ lead by Dug Song and + is now being maintained and improved by an extended set of + `contributors `__ + and `developers `__. + + LICENSE + ------- + + BSD 3-Clause + +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Natural Language :: English +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy diff --git a/scripts/external_libs/dpkt-1.8.6.2/README.md b/scripts/external_libs/dpkt-1.8.6.2/README.md new file mode 100644 index 00000000..fc637836 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/README.md @@ -0,0 +1,39 @@ +dpkt +==== + +**A fast, simple packet creation/parsing python module with definitions for the basic TCP/IP protocols.** + +[![travis](http://img.shields.io/travis/kbandla/dpkt.svg)](https://travis-ci.org/kbandla/dpkt) +[![coveralls](http://img.shields.io/coveralls/kbandla/dpkt.svg)](https://coveralls.io/r/kbandla/dpkt) +[![landscape](https://landscape.io/github/kbandla/dpkt/master/landscape.svg)](https://landscape.io/github/kbandla/dpkt/master) +[![version](http://img.shields.io/pypi/v/dpkt.svg)](https://pypi.python.org/pypi/dpkt) +[![downloads](https://img.shields.io/pypi/dm/dpkt.svg)](https://pypi.python.org/pypi/dpkt) + +[![wheel](https://img.shields.io/pypi/wheel/dpkt.svg)](https://pypi.python.org/pypi/dpkt) +[![supported-versions](https://img.shields.io/pypi/pyversions/dpkt.svg)](https://pypi.python.org/pypi/dpkt) +[![supported-implementations](https://img.shields.io/pypi/implementation/dpkt.svg)](https://pypi.python.org/pypi/dpkt) +[![On Deck](https://badge.waffle.io/kbandla/dpkt.svg?label=on%20deck&title=On%20Deck)](http://waffle.io/kbandla/dpkt) +[![In Progress](https://badge.waffle.io/kbandla/dpkt.svg?label=in%20progress&title=In%20Progress)](http://waffle.io/kbandla/dpkt) + +Installation +------------ + + pip install dpkt + +Documentation +------------- + +**[dpkt.readthedocs.org](https://dpkt.readthedocs.org/)** + + +About +----- + +This code is based on [dpkt code](https://code.google.com/p/dpkt/) lead +by Dug Song and is now being maintained and improved by an extended set of [contributors](https://dpkt.readthedocs.org/en/latest/authors.html) + and [developers](https://github.com/kbandla/dpkt/graphs/contributors). + + +#### LICENSE + +BSD 3-Clause \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/README.rst b/scripts/external_libs/dpkt-1.8.6.2/README.rst new file mode 100644 index 00000000..b4e1b966 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/README.rst @@ -0,0 +1,64 @@ + +==== +dpkt +==== + +| |travis| |coveralls| |landscape| |downloads| +| |version| |wheel| |supported-versions| |supported-implementations| + +.. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + +.. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + +.. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + +.. |version| image:: http://img.shields.io/pypi/v/dpkt.svg + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + +.. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + +.. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + +Installation +============ + +:: + + pip install dpkt + +Documentation +============= + +https://dpkt.readthedocs.org/ + +About +===== + +This code is based on `dpkt code `__ lead by Dug Song and +is now being maintained and improved by an extended set of +`contributors `__ +and `developers `__. + +LICENSE +------- + +BSD 3-Clause diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/Makefile b/scripts/external_libs/dpkt-1.8.6.2/docs/Makefile new file mode 100644 index 00000000..2687c750 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/Makefile @@ -0,0 +1,153 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/pyspotify.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/pyspotify.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/pyspotify" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/pyspotify" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/api/api_auto.rst b/scripts/external_libs/dpkt-1.8.6.2/docs/api/api_auto.rst new file mode 100644 index 00000000..3837c903 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/api/api_auto.rst @@ -0,0 +1,545 @@ + +dpkt.ah module +-------------- + +.. automodule:: dpkt.ah + :members: + :undoc-members: + :show-inheritance: + +dpkt.aim module +--------------- + +.. automodule:: dpkt.aim + :members: + :undoc-members: + :show-inheritance: + +dpkt.aoe module +--------------- + +.. automodule:: dpkt.aoe + :members: + :undoc-members: + :show-inheritance: + +dpkt.aoeata module +------------------ + +.. automodule:: dpkt.aoeata + :members: + :undoc-members: + :show-inheritance: + +dpkt.aoecfg module +------------------ + +.. automodule:: dpkt.aoecfg + :members: + :undoc-members: + :show-inheritance: + +dpkt.arp module +--------------- + +.. automodule:: dpkt.arp + :members: + :undoc-members: + :show-inheritance: + +dpkt.asn1 module +---------------- + +.. automodule:: dpkt.asn1 + :members: + :undoc-members: + :show-inheritance: + +dpkt.bgp module +--------------- + +.. automodule:: dpkt.bgp + :members: + :undoc-members: + :show-inheritance: + +dpkt.cdp module +--------------- + +.. automodule:: dpkt.cdp + :members: + :undoc-members: + :show-inheritance: + +dpkt.crc32c module +------------------ + +.. automodule:: dpkt.crc32c + :members: + :undoc-members: + :show-inheritance: + +dpkt.decorators module +---------------------- + +.. automodule:: dpkt.decorators + :members: + :undoc-members: + :show-inheritance: + +dpkt.dhcp module +---------------- + +.. automodule:: dpkt.dhcp + :members: + :undoc-members: + :show-inheritance: + +dpkt.diameter module +-------------------- + +.. automodule:: dpkt.diameter + :members: + :undoc-members: + :show-inheritance: + +dpkt.dns module +--------------- + +.. automodule:: dpkt.dns + :members: + :undoc-members: + :show-inheritance: + +dpkt.dpkt module +---------------- + +.. automodule:: dpkt.dpkt + :members: + :undoc-members: + :show-inheritance: + +dpkt.dtp module +--------------- + +.. automodule:: dpkt.dtp + :members: + :undoc-members: + :show-inheritance: + +dpkt.esp module +--------------- + +.. automodule:: dpkt.esp + :members: + :undoc-members: + :show-inheritance: + +dpkt.ethernet module +-------------------- + +.. automodule:: dpkt.ethernet + :members: + :undoc-members: + :show-inheritance: + +dpkt.gre module +--------------- + +.. automodule:: dpkt.gre + :members: + :undoc-members: + :show-inheritance: + +dpkt.gzip module +---------------- + +.. automodule:: dpkt.gzip + :members: + :undoc-members: + :show-inheritance: + +dpkt.h225 module +---------------- + +.. automodule:: dpkt.h225 + :members: + :undoc-members: + :show-inheritance: + +dpkt.hsrp module +---------------- + +.. automodule:: dpkt.hsrp + :members: + :undoc-members: + :show-inheritance: + +dpkt.http module +---------------- + +.. automodule:: dpkt.http + :members: + :undoc-members: + :show-inheritance: + +dpkt.icmp module +---------------- + +.. automodule:: dpkt.icmp + :members: + :undoc-members: + :show-inheritance: + +dpkt.icmp6 module +----------------- + +.. automodule:: dpkt.icmp6 + :members: + :undoc-members: + :show-inheritance: + +dpkt.ieee80211 module +--------------------- + +.. automodule:: dpkt.ieee80211 + :members: + :undoc-members: + :show-inheritance: + +dpkt.igmp module +---------------- + +.. automodule:: dpkt.igmp + :members: + :undoc-members: + :show-inheritance: + +dpkt.ip module +-------------- + +.. automodule:: dpkt.ip + :members: + :undoc-members: + :show-inheritance: + +dpkt.ip6 module +--------------- + +.. automodule:: dpkt.ip6 + :members: + :undoc-members: + :show-inheritance: + +dpkt.ipx module +--------------- + +.. automodule:: dpkt.ipx + :members: + :undoc-members: + :show-inheritance: + +dpkt.llc module +--------------- + +.. automodule:: dpkt.llc + :members: + :undoc-members: + :show-inheritance: + +dpkt.loopback module +-------------------- + +.. automodule:: dpkt.loopback + :members: + :undoc-members: + :show-inheritance: + +dpkt.mrt module +--------------- + +.. automodule:: dpkt.mrt + :members: + :undoc-members: + :show-inheritance: + +dpkt.netbios module +------------------- + +.. automodule:: dpkt.netbios + :members: + :undoc-members: + :show-inheritance: + +dpkt.netflow module +------------------- + +.. automodule:: dpkt.netflow + :members: + :undoc-members: + :show-inheritance: + +dpkt.ntp module +--------------- + +.. automodule:: dpkt.ntp + :members: + :undoc-members: + :show-inheritance: + +dpkt.ospf module +---------------- + +.. automodule:: dpkt.ospf + :members: + :undoc-members: + :show-inheritance: + +dpkt.pcap module +---------------- + +.. automodule:: dpkt.pcap + :members: + :undoc-members: + :show-inheritance: + +dpkt.pim module +--------------- + +.. automodule:: dpkt.pim + :members: + :undoc-members: + :show-inheritance: + +dpkt.pmap module +---------------- + +.. automodule:: dpkt.pmap + :members: + :undoc-members: + :show-inheritance: + +dpkt.ppp module +--------------- + +.. automodule:: dpkt.ppp + :members: + :undoc-members: + :show-inheritance: + +dpkt.pppoe module +----------------- + +.. automodule:: dpkt.pppoe + :members: + :undoc-members: + :show-inheritance: + +dpkt.qq module +-------------- + +.. automodule:: dpkt.qq + :members: + :undoc-members: + :show-inheritance: + +dpkt.radiotap module +-------------------- + +.. automodule:: dpkt.radiotap + :members: + :undoc-members: + :show-inheritance: + +dpkt.radius module +------------------ + +.. automodule:: dpkt.radius + :members: + :undoc-members: + :show-inheritance: + +dpkt.rfb module +--------------- + +.. automodule:: dpkt.rfb + :members: + :undoc-members: + :show-inheritance: + +dpkt.rip module +--------------- + +.. automodule:: dpkt.rip + :members: + :undoc-members: + :show-inheritance: + +dpkt.rpc module +--------------- + +.. automodule:: dpkt.rpc + :members: + :undoc-members: + :show-inheritance: + +dpkt.rtp module +--------------- + +.. automodule:: dpkt.rtp + :members: + :undoc-members: + :show-inheritance: + +dpkt.rx module +-------------- + +.. automodule:: dpkt.rx + :members: + :undoc-members: + :show-inheritance: + +dpkt.sccp module +---------------- + +.. automodule:: dpkt.sccp + :members: + :undoc-members: + :show-inheritance: + +dpkt.sctp module +---------------- + +.. automodule:: dpkt.sctp + :members: + :undoc-members: + :show-inheritance: + +dpkt.sip module +--------------- + +.. automodule:: dpkt.sip + :members: + :undoc-members: + :show-inheritance: + +dpkt.sll module +--------------- + +.. automodule:: dpkt.sll + :members: + :undoc-members: + :show-inheritance: + +dpkt.smb module +--------------- + +.. automodule:: dpkt.smb + :members: + :undoc-members: + :show-inheritance: + +dpkt.snoop module +----------------- + +.. automodule:: dpkt.snoop + :members: + :undoc-members: + :show-inheritance: + +dpkt.ssl module +--------------- + +.. automodule:: dpkt.ssl + :members: + :undoc-members: + :show-inheritance: + +dpkt.ssl_ciphersuites module +---------------------------- + +.. automodule:: dpkt.ssl_ciphersuites + :members: + :undoc-members: + :show-inheritance: + +dpkt.stp module +--------------- + +.. automodule:: dpkt.stp + :members: + :undoc-members: + :show-inheritance: + +dpkt.stun module +---------------- + +.. automodule:: dpkt.stun + :members: + :undoc-members: + :show-inheritance: + +dpkt.tcp module +--------------- + +.. automodule:: dpkt.tcp + :members: + :undoc-members: + :show-inheritance: + +dpkt.telnet module +------------------ + +.. automodule:: dpkt.telnet + :members: + :undoc-members: + :show-inheritance: + +dpkt.tftp module +---------------- + +.. automodule:: dpkt.tftp + :members: + :undoc-members: + :show-inheritance: + +dpkt.tns module +--------------- + +.. automodule:: dpkt.tns + :members: + :undoc-members: + :show-inheritance: + +dpkt.tpkt module +---------------- + +.. automodule:: dpkt.tpkt + :members: + :undoc-members: + :show-inheritance: + +dpkt.udp module +--------------- + +.. automodule:: dpkt.udp + :members: + :undoc-members: + :show-inheritance: + +dpkt.vrrp module +---------------- + +.. automodule:: dpkt.vrrp + :members: + :undoc-members: + :show-inheritance: + +dpkt.yahoo module +----------------- + +.. automodule:: dpkt.yahoo + :members: + :undoc-members: + :show-inheritance: + diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/api/index.rst b/scripts/external_libs/dpkt-1.8.6.2/docs/api/index.rst new file mode 100644 index 00000000..7d44785d --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/api/index.rst @@ -0,0 +1,11 @@ + +API Reference +============= +The dpkt API reference section is currently a work in progress, please have patience as we fill in and improve the documentation. + +**dpkt Modules** + +.. toctree:: + :maxdepth: 4 + + api_auto diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/authors.rst b/scripts/external_libs/dpkt-1.8.6.2/docs/authors.rst new file mode 100644 index 00000000..238aa6bb --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/authors.rst @@ -0,0 +1,7 @@ +******* +Authors +******* + +.. include:: ../AUTHORS + +If you want to contribute to dpkt, see :doc:`contributing`. diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/badges.rst b/scripts/external_libs/dpkt-1.8.6.2/docs/badges.rst new file mode 100644 index 00000000..906f8b7f --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/badges.rst @@ -0,0 +1,41 @@ + + +| |docs| |travis| |coveralls| |landscape| |version| +| |downloads| |wheel| |supported-versions| |supported-implementations| + +.. |docs| image:: https://readthedocs.org/projects/dpkt/badge/?style=flat + :target: https://readthedocs.org/projects/dpkt + :alt: Documentation Status + +.. |travis| image:: http://img.shields.io/travis/kbandla/dpkt/master.png?style=flat + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + +.. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt/master.png?style=flat + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + +.. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg?style=flat + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + +.. |version| image:: http://img.shields.io/pypi/v/dpkt.svg + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + +.. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + +.. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/changelog.rst b/scripts/external_libs/dpkt-1.8.6.2/docs/changelog.rst new file mode 100644 index 00000000..ac7e2371 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/changelog.rst @@ -0,0 +1,4 @@ +********* +Changelog +********* + diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/conf.py b/scripts/external_libs/dpkt-1.8.6.2/docs/conf.py new file mode 100644 index 00000000..6dfc9fc4 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/conf.py @@ -0,0 +1,76 @@ +# encoding: utf-8 + +"""dpkt documentation build configuration file""" + +from __future__ import unicode_literals + +import os +import re +import sys +import types +import mock + + +def get_version(filename): + init_py = open(filename).read() + metadata = dict(re.findall("__([a-z]+)__ = '([^']+)'", init_py)) + return metadata['version'] + + +# -- Workarounds to have autodoc generate API docs ---------------------------- + +sys.path.insert(0, os.path.abspath('..')) + + +# Mock any objects that we might need to +foo = mock.Mock() +foo.__version__ = '0.1.1' +sys.modules['foo'] = foo + + +# -- General configuration ---------------------------------------------------- +needs_sphinx = '1.0' +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.extlinks', + 'sphinx.ext.intersphinx', + 'sphinx.ext.viewcode', + 'sphinx.ext.autosummary', + 'sphinxcontrib.napoleon' +] + +templates_path = ['_templates'] +source_suffix = '.rst' +master_doc = 'index' + +project = 'dpkt' +copyright = '2009-2015 Dug Song and contributors' + +release = get_version('../dpkt/__init__.py') +version = '.'.join(release.split('.')[:2]) + +exclude_patterns = ['_build'] + +pygments_style = 'sphinx' + +modindex_common_prefix = ['dpkt.'] + +autodoc_default_flags = ['members', 'undoc-members', 'show-inheritance'] +autodoc_member_order = 'bysource' + + +# -- Options for HTML output -------------------------------------------------- +html_theme = 'default' +html_static_path = ['_static'] + +html_use_modindex = True +html_use_index = True +html_split_index = False +html_show_sourcelink = True + +htmlhelp_basename = 'dpkt' + +# -- Options for extlink extension -------------------------------------------- +extlinks = { + 'issue': ('https://github.com/kbandla/dpkt/issues/%s', '#'), +} diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/contributing.rst b/scripts/external_libs/dpkt-1.8.6.2/docs/contributing.rst new file mode 100644 index 00000000..cae4acfe --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/contributing.rst @@ -0,0 +1,45 @@ +============ +Contributing +============ + +Report a Bug or Make a Feature Request +-------------------------------------- +Please go to the GitHub Issues page: https://github.com/kbandla/dpkt/issues. + +Checkout the Code +----------------- + +:: + + git clone https://github.com/kblandla/dpkt.git + + +Become a Developer +------------------ +dpkt uses the 'GitHub Flow' model: `GitHub Flow `_ + +- To work on something new, create a descriptively named branch off of master (ie: my-awesome) +- Commit to that branch locally and regularly push your work to the same named branch on the server +- When you need feedback or help, or you think the branch is ready for merging, open a pull request +- After someone else has reviewed and signed off on the feature, you can merge it into master + +Getting Started +~~~~~~~~~~~~~~~ + - Fork the repo on GitHub + - git clone git@github.com:your_name_here/dpkt.git + +New Feature or Bug +~~~~~~~~~~~~~~~~~~ + + :: + + $ git checkout -b my-awesome + $ git push -u origin my-awesome + $ ; git push + $ ; git push + $ tox (this will run all the tests) + + - Go to github and hit 'New pull request' + - Someone reviews it and says 'AOK' + - Merge the pull request (green button) + diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/examples.rst b/scripts/external_libs/dpkt-1.8.6.2/docs/examples.rst new file mode 100644 index 00000000..d99a0c2f --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/examples.rst @@ -0,0 +1,80 @@ + +Examples +======== + +Examples in dpkt/examples +------------------------- + +print_packets.py +~~~~~~~~~~~~~~~~ +.. automodule:: examples.print_packets + +**Code Excerpt** + +.. code-block:: python + + # For each packet in the pcap process the contents + for timestamp, buf in pcap: + + # Print out the timestamp in UTC + print 'Timestamp: ', str(datetime.datetime.utcfromtimestamp(timestamp)) + + # Unpack the Ethernet frame (mac src/dst, ethertype) + eth = dpkt.ethernet.Ethernet(buf) + print 'Ethernet Frame: ', mac_addr(eth.src), mac_addr(eth.dst), eth.type + + # Make sure the Ethernet frame contains an IP packet + # EtherType (IP, ARP, PPPoE, IP6... see http://en.wikipedia.org/wiki/EtherType) + if eth.type != dpkt.ethernet.ETH_TYPE_IP: + print 'Non IP Packet type not supported %s\n' % eth.data.__class__.__name__ + continue + + # Now unpack the data within the Ethernet frame (the IP packet) + # Pulling out src, dst, length, fragment info, TTL, and Protocol + ip = eth.data + + # Pull out fragment information (flags and offset all packed into off field, so use bitmasks) + do_not_fragment = bool(ip.off & dpkt.ip.IP_DF) + more_fragments = bool(ip.off & dpkt.ip.IP_MF) + fragment_offset = ip.off & dpkt.ip.IP_OFFMASK + + # Print out the info + print 'IP: %s -> %s (len=%d ttl=%d DF=%d MF=%d offset=%d)\n' % \ + (ip_to_str(ip.src), ip_to_str(ip.dst), ip.len, ip.ttl, do_not_fragment, more_fragments, fragment_offset) + +**Example Output** + +.. code-block:: json + + Timestamp: 2004-05-13 10:17:07.311224 + Ethernet Frame: 00:00:01:00:00:00 fe:ff:20:00:01:00 2048 + IP: 145.254.160.237 -> 65.208.228.223 (len=48 ttl=128 DF=1 MF=0 offset=0) + + Timestamp: 2004-05-13 10:17:08.222534 + Ethernet Frame: fe:ff:20:00:01:00 00:00:01:00:00:00 2048 + IP: 65.208.228.223 -> 145.254.160.237 (len=48 ttl=47 DF=1 MF=0 offset=0) + + ... + + + +Jon Oberheide's Examples +------------------------- +[@jonoberheide's](https://twitter.com/jonoberheide) old examples still +apply: + +- `dpkt Tutorial #1: ICMP + Echo `__ +- `dpkt Tutorial #2: Parsing a PCAP + File `__ +- `dpkt Tutorial #3: dns + spoofing `__ +- `dpkt Tutorial #4: AS Paths from + MRT/BGP `__ + +Jeff Silverman Docs/Code +------------------------ +`Jeff Silverman `__ has some +`code `__ and +`documentation `__. + diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/index.rst b/scripts/external_libs/dpkt-1.8.6.2/docs/index.rst new file mode 100644 index 00000000..31ef9251 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/index.rst @@ -0,0 +1,32 @@ +dpkt +==== +.. include:: badges.rst +dpkt is a python module for fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols + + +Getting Started +=============== +.. toctree:: + :maxdepth: 2 + + installation + examples + +API Reference +============= +.. toctree:: + :maxdepth: 1 + + api/index + +About dpkt +========== +.. toctree:: + :maxdepth: 2 + + authors + changelog + plans + contributing + license + diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/installation.rst b/scripts/external_libs/dpkt-1.8.6.2/docs/installation.rst new file mode 100644 index 00000000..2c93001b --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/installation.rst @@ -0,0 +1,21 @@ +============ +Installation +============ + +DKPT is now available directly from pypi :) + +Install the Code +---------------- + +:: + + pip install dpkt + +Checkout the Code +----------------- + +:: + + git clone https://github.com/kblandla/dpkt.git + + diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/license.rst b/scripts/external_libs/dpkt-1.8.6.2/docs/license.rst new file mode 100644 index 00000000..56c72381 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/license.rst @@ -0,0 +1,4 @@ + +License +======= +BSD 3-Clause License, as the upstream project diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/plans.rst b/scripts/external_libs/dpkt-1.8.6.2/docs/plans.rst new file mode 100644 index 00000000..a6b1ca35 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/plans.rst @@ -0,0 +1,13 @@ +***************** +Development plans +***************** + +Current plans +============= + +- Be Awesome + +Future plans +============ + +- Maintain the Awesome diff --git a/scripts/external_libs/dpkt-1.8.6.2/docs/requirements.txt b/scripts/external_libs/dpkt-1.8.6.2/docs/requirements.txt new file mode 100644 index 00000000..0e912345 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/docs/requirements.txt @@ -0,0 +1,3 @@ +mock >= 1.0 +Sphinx >= 1.0 +sphinxcontrib-napoleon diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO b/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO new file mode 100644 index 00000000..baf82a26 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/PKG-INFO @@ -0,0 +1,82 @@ +Metadata-Version: 1.1 +Name: dpkt +Version: 1.8.6.2 +Summary: fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols +Home-page: http://dpkt.googlecode.com/ +Author: Dug Song +Author-email: dugsong@monkey.org +License: BSD +Description: + ==== + dpkt + ==== + + | |travis| |coveralls| |landscape| |downloads| + | |version| |wheel| |supported-versions| |supported-implementations| + + .. |travis| image:: http://img.shields.io/travis/kbandla/dpkt.svg + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + + .. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt.svg + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + + .. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + + .. |version| image:: http://img.shields.io/pypi/v/dpkt.svg + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + + .. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.svg + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + + .. |wheel| image:: https://img.shields.io/pypi/wheel/dpkt.svg + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-versions| image:: https://img.shields.io/pypi/pyversions/dpkt.svg + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-implementations| image:: https://img.shields.io/pypi/implementation/dpkt.svg + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + + Installation + ============ + + :: + + pip install dpkt + + Documentation + ============= + + https://dpkt.readthedocs.org/ + + About + ===== + + This code is based on `dpkt code `__ lead by Dug Song and + is now being maintained and improved by an extended set of + `contributors `__ + and `developers `__. + + LICENSE + ------- + + BSD 3-Clause + +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Natural Language :: English +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt b/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt new file mode 100644 index 00000000..8ac474c8 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/SOURCES.txt @@ -0,0 +1,96 @@ +AUTHORS +CHANGES +LICENSE +MANIFEST.in +README.md +README.rst +setup.cfg +setup.py +docs/Makefile +docs/authors.rst +docs/badges.rst +docs/changelog.rst +docs/conf.py +docs/contributing.rst +docs/examples.rst +docs/index.rst +docs/installation.rst +docs/license.rst +docs/plans.rst +docs/requirements.txt +docs/api/api_auto.rst +docs/api/index.rst +dpkt/__init__.py +dpkt/ah.py +dpkt/aim.py +dpkt/aoe.py +dpkt/aoeata.py +dpkt/aoecfg.py +dpkt/arp.py +dpkt/asn1.py +dpkt/bgp.py +dpkt/cdp.py +dpkt/crc32c.py +dpkt/decorators.py +dpkt/dhcp.py +dpkt/diameter.py +dpkt/dns.py +dpkt/dpkt.py +dpkt/dtp.py +dpkt/esp.py +dpkt/ethernet.py +dpkt/gre.py +dpkt/gzip.py +dpkt/h225.py +dpkt/hsrp.py +dpkt/http.py +dpkt/icmp.py +dpkt/icmp6.py +dpkt/ieee80211.py +dpkt/igmp.py +dpkt/ip.py +dpkt/ip6.py +dpkt/ipx.py +dpkt/llc.py +dpkt/loopback.py +dpkt/mrt.py +dpkt/netbios.py +dpkt/netflow.py +dpkt/ntp.py +dpkt/ospf.py +dpkt/pcap.py +dpkt/pim.py +dpkt/pmap.py +dpkt/ppp.py +dpkt/pppoe.py +dpkt/qq.py +dpkt/radiotap.py +dpkt/radius.py +dpkt/rfb.py +dpkt/rip.py +dpkt/rpc.py +dpkt/rtp.py +dpkt/rx.py +dpkt/sccp.py +dpkt/sctp.py +dpkt/sip.py +dpkt/sll.py +dpkt/smb.py +dpkt/snoop.py +dpkt/ssl.py +dpkt/ssl_ciphersuites.py +dpkt/stp.py +dpkt/stun.py +dpkt/tcp.py +dpkt/telnet.py +dpkt/tftp.py +dpkt/tns.py +dpkt/tpkt.py +dpkt/udp.py +dpkt/vrrp.py +dpkt/yahoo.py +dpkt.egg-info/PKG-INFO +dpkt.egg-info/SOURCES.txt +dpkt.egg-info/dependency_links.txt +dpkt.egg-info/not-zip-safe +dpkt.egg-info/top_level.txt \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt b/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe b/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt b/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt new file mode 100644 index 00000000..4daab81a --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt.egg-info/top_level.txt @@ -0,0 +1 @@ +dpkt diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/__init__.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/__init__.py new file mode 100644 index 00000000..09d28fb3 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/__init__.py @@ -0,0 +1,71 @@ +"""fast, simple packet creation and parsing.""" + +__author__ = 'Dug Song' +__author_email__ = 'dugsong@monkey.org' +__license__ = 'BSD' +__url__ = 'http://dpkt.googlecode.com/' +__version__ = '1.8.6.2' + +from dpkt import * + +import ah +import aoe +import aim +import arp +import asn1 +import bgp +import cdp +import dhcp +import diameter +import dns +import dtp +import esp +import ethernet +import gre +import gzip +import h225 +import hsrp +import http +import icmp +import icmp6 +import ieee80211 +import igmp +import ip +import ip6 +import ipx +import llc +import loopback +import mrt +import netbios +import netflow +import ntp +import ospf +import pcap +import pim +import pmap +import ppp +import pppoe +import qq +import radiotap +import radius +import rfb +import rip +import rpc +import rtp +import rx +import sccp +import sctp +import sip +import sll +import smb +import ssl +import stp +import stun +import tcp +import telnet +import tftp +import tns +import tpkt +import udp +import vrrp +import yahoo diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/ah.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ah.py new file mode 100644 index 00000000..5ad29ad5 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ah.py @@ -0,0 +1,35 @@ +# $Id: ah.py 34 2007-01-28 07:54:20Z dugsong $ +# -*- coding: utf-8 -*- + +"""Authentication Header.""" + +import dpkt + + +class AH(dpkt.Packet): + __hdr__ = ( + ('nxt', 'B', 0), + ('len', 'B', 0), # payload length + ('rsvd', 'H', 0), + ('spi', 'I', 0), + ('seq', 'I', 0) + ) + auth = '' + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.auth = self.data[:self.len] + buf = self.data[self.len:] + import ip + + try: + self.data = ip.IP.get_proto(self.nxt)(buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def __len__(self): + return self.__hdr_len__ + len(self.auth) + len(self.data) + + def __str__(self): + return self.pack_hdr() + str(self.auth) + str(self.data) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/aim.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/aim.py new file mode 100644 index 00000000..8250d69e --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/aim.py @@ -0,0 +1,52 @@ +# $Id: aim.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- + +"""AOL Instant Messenger.""" + +import dpkt +import struct + +# OSCAR: http://iserverd1.khstu.ru/oscar/ + + +class FLAP(dpkt.Packet): + __hdr__ = ( + ('ast', 'B', 0x2a), # '*' + ('type', 'B', 0), + ('seq', 'H', 0), + ('len', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.ast != 0x2a: + raise dpkt.UnpackError('invalid FLAP header') + if len(self.data) < self.len: + raise dpkt.NeedData, '%d left, %d needed' % (len(self.data), self.len) + + +class SNAC(dpkt.Packet): + __hdr__ = ( + ('family', 'H', 0), + ('subtype', 'H', 0), + ('flags', 'H', 0), + ('reqid', 'I', 0) + ) + + +def tlv(buf): + n = 4 + try: + t, l = struct.unpack('>HH', buf[:n]) + except struct.error: + raise dpkt.UnpackError + v = buf[n:n + l] + if len(v) < l: + raise dpkt.NeedData + buf = buf[n + l:] + return t, l, v, buf + +# TOC 1.0: http://jamwt.com/Py-TOC/PROTOCOL + +# TOC 2.0: http://www.firestuff.org/projects/firetalk/doc/toc2.txt + diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/aoe.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/aoe.py new file mode 100644 index 00000000..8fcf7c63 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/aoe.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- +"""ATA over Ethernet Protocol.""" + +import struct +import dpkt +from decorators import deprecated + + +class AOE(dpkt.Packet): + __hdr__ = ( + ('ver_fl', 'B', 0x10), + ('err', 'B', 0), + ('maj', 'H', 0), + ('min', 'B', 0), + ('cmd', 'B', 0), + ('tag', 'I', 0), + ) + _cmdsw = {} + + @property + def ver(self): return self.ver_fl >> 4 + + @ver.setter + def ver(self, ver): self.ver_fl = (ver << 4) | (self.ver_fl & 0xf) + + @property + def fl(self): return self.ver_fl & 0xf + + @fl.setter + def fl(self, fl): self.ver_fl = (self.ver_fl & 0xf0) | fl + + @classmethod + def set_cmd(cls, cmd, pktclass): + cls._cmdsw[cmd] = pktclass + + @classmethod + def get_cmd(cls, cmd): + return cls._cmdsw[cmd] + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._cmdsw[self.cmd](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, struct.error, dpkt.UnpackError): + pass + + def pack_hdr(self): + try: + return dpkt.Packet.pack_hdr(self) + except struct.error, e: + raise dpkt.PackError(str(e)) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_ver(self): return self.ver + + @deprecated + def _set_ver(self, ver): self.ver = ver + + @deprecated + def _get_fl(self): return self.fl + + @deprecated + def _set_fl(self, fl): self.fl = fl + # ================================================= + + + +AOE_CMD_ATA = 0 +AOE_CMD_CFG = 1 +AOE_FLAG_RSP = 1 << 3 + + +def __load_cmds(): + prefix = 'AOE_CMD_' + g = globals() + for k, v in g.iteritems(): + if k.startswith(prefix): + name = 'aoe' + k[len(prefix):].lower() + try: + mod = __import__(name, g) + except ImportError: + continue + AOE.set_cmd(v, getattr(mod, name.upper())) + + +if not AOE._cmdsw: + __load_cmds() diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/aoeata.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/aoeata.py new file mode 100644 index 00000000..1be917d3 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/aoeata.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +"""ATA over Ethernet ATA command""" + +import dpkt + +ATA_DEVICE_IDENTIFY = 0xec + + +class AOEATA(dpkt.Packet): + __hdr__ = ( + ('aflags', 'B', 0), + ('errfeat', 'B', 0), + ('scnt', 'B', 0), + ('cmdstat', 'B', ATA_DEVICE_IDENTIFY), + ('lba0', 'B', 0), + ('lba1', 'B', 0), + ('lba2', 'B', 0), + ('lba3', 'B', 0), + ('lba4', 'B', 0), + ('lba5', 'B', 0), + ('res', 'H', 0), + ) + + # XXX: in unpack, switch on ATA command like icmp does on type + + +def test_aoeata(): + s = '\x03\x0a\x6b\x19\x00\x00\x00\x00\x45\x00\x00\x28\x94\x1f\x00\x00\xe3\x06\x99\xb4\x23\x2b\x24\x00\xde\x8e\x84\x42\xab\xd1\x00\x50\x00\x35\xe1\x29\x20\xd9\x00\x00\x00\x22\x9b\xf0\xe2\x04\x65\x6b' + aoeata = AOEATA(s) + assert (str(aoeata) == s) + + +if __name__ == '__main__': + test_aoeata() + print 'Tests Successful...' diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/aoecfg.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/aoecfg.py new file mode 100644 index 00000000..7643eddf --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/aoecfg.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +"""ATA over Ethernet ATA command""" + +import dpkt + + +class AOECFG(dpkt.Packet): + __hdr__ = ( + ('bufcnt', 'H', 0), + ('fwver', 'H', 0), + ('scnt', 'B', 0), + ('aoeccmd', 'B', 0), + ('cslen', 'H', 0), + ) + + +def test_aoecfg(): + s = '\x01\x02\x03\x04\x05\x06\x11\x12\x13\x14\x15\x16\x88\xa2\x10\x00\x00\x01\x02\x01\x80\x00\x00\x00\x12\x34\x00\x00\x00\x00\x04\x00' + '\0xed' * 1024 + aoecfg = AOECFG(s[14 + 10:]) + assert (aoecfg.bufcnt == 0x1234) + + +if __name__ == '__main__': + test_aoecfg() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/arp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/arp.py new file mode 100644 index 00000000..a6ae62f4 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/arp.py @@ -0,0 +1,32 @@ +# $Id: arp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Address Resolution Protocol.""" + +import dpkt + +# Hardware address format +ARP_HRD_ETH = 0x0001 # ethernet hardware +ARP_HRD_IEEE802 = 0x0006 # IEEE 802 hardware + +# Protocol address format +ARP_PRO_IP = 0x0800 # IP protocol + +# ARP operation +ARP_OP_REQUEST = 1 # request to resolve ha given pa +ARP_OP_REPLY = 2 # response giving hardware address +ARP_OP_REVREQUEST = 3 # request to resolve pa given ha +ARP_OP_REVREPLY = 4 # response giving protocol address + + +class ARP(dpkt.Packet): + __hdr__ = ( + ('hrd', 'H', ARP_HRD_ETH), + ('pro', 'H', ARP_PRO_IP), + ('hln', 'B', 6), # hardware address length + ('pln', 'B', 4), # protocol address length + ('op', 'H', ARP_OP_REQUEST), + ('sha', '6s', ''), + ('spa', '4s', ''), + ('tha', '6s', ''), + ('tpa', '4s', '') + ) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/asn1.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/asn1.py new file mode 100644 index 00000000..7acae041 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/asn1.py @@ -0,0 +1,121 @@ +# $Id: asn1.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Abstract Syntax Notation #1.""" + +import struct +import time +import dpkt + +# Type class +CLASSMASK = 0xc0 +UNIVERSAL = 0x00 +APPLICATION = 0x40 +CONTEXT = 0x80 +PRIVATE = 0xc0 + +# Constructed (vs. primitive) +CONSTRUCTED = 0x20 + +# Universal-class tags +TAGMASK = 0x1f +INTEGER = 2 +BIT_STRING = 3 # arbitrary bit string +OCTET_STRING = 4 # arbitrary octet string +NULL = 5 +OID = 6 # object identifier +SEQUENCE = 16 # ordered collection of types +SET = 17 # unordered collection of types +PRINT_STRING = 19 # printable string +T61_STRING = 20 # T.61 (8-bit) character string +IA5_STRING = 22 # ASCII +UTC_TIME = 23 + + +def utctime(buf): + """Convert ASN.1 UTCTime string to UTC float.""" + yy = int(buf[:2]) + mn = int(buf[2:4]) + dd = int(buf[4:6]) + hh = int(buf[6:8]) + mm = int(buf[8:10]) + try: + ss = int(buf[10:12]) + buf = buf[12:] + except TypeError: + ss = 0 + buf = buf[10:] + if buf[0] == '+': + hh -= int(buf[1:3]) + mm -= int(buf[3:5]) + elif buf[0] == '-': + hh += int(buf[1:3]) + mm += int(buf[3:5]) + return time.mktime((2000 + yy, mn, dd, hh, mm, ss, 0, 0, 0)) + + +def decode(buf): + """Sleazy ASN.1 decoder. + Return list of (id, value) tuples from ASN.1 BER/DER encoded buffer. + """ + msg = [] + while buf: + t = ord(buf[0]) + constructed = t & CONSTRUCTED + tag = t & TAGMASK + l = ord(buf[1]) + c = 0 + if constructed and l == 128: + # XXX - constructed, indefinite length + msg.append((t, decode(buf[2:]))) + elif l >= 128: + c = l & 127 + if c == 1: + l = ord(buf[2]) + elif c == 2: + l = struct.unpack('>H', buf[2:4])[0] + elif c == 3: + l = struct.unpack('>I', buf[1:5])[0] & 0xfff + c = 2 + elif c == 4: + l = struct.unpack('>I', buf[2:6])[0] + else: + # XXX - can be up to 127 bytes, but... + raise dpkt.UnpackError('excessive long-form ASN.1 length %d' % l) + + # Skip type, length + buf = buf[2 + c:] + + # Parse content + if constructed: + msg.append((t, decode(buf))) + elif tag == INTEGER: + if l == 0: + n = 0 + elif l == 1: + n = ord(buf[0]) + elif l == 2: + n = struct.unpack('>H', buf[:2])[0] + elif l == 3: + n = struct.unpack('>I', buf[:4])[0] >> 8 + elif l == 4: + n = struct.unpack('>I', buf[:4])[0] + else: + raise dpkt.UnpackError('excessive integer length > %d bytes' % l) + msg.append((t, n)) + elif tag == UTC_TIME: + msg.append((t, utctime(buf[:l]))) + else: + msg.append((t, buf[:l])) + + # Skip content + buf = buf[l:] + return msg + + +def test_asn1(): + s = '0\x82\x02Q\x02\x01\x0bc\x82\x02J\x04xcn=Douglas J Song 1, ou=Information Technology Division, ou=Faculty and Staff, ou=People, o=University of Michigan, c=US\n\x01\x00\n\x01\x03\x02\x01\x00\x02\x01\x00\x01\x01\x00\x87\x0bobjectclass0\x82\x01\xb0\x04\rmemberOfGroup\x04\x03acl\x04\x02cn\x04\x05title\x04\rpostalAddress\x04\x0ftelephoneNumber\x04\x04mail\x04\x06member\x04\thomePhone\x04\x11homePostalAddress\x04\x0bobjectClass\x04\x0bdescription\x04\x18facsimileTelephoneNumber\x04\x05pager\x04\x03uid\x04\x0cuserPassword\x04\x08joinable\x04\x10associatedDomain\x04\x05owner\x04\x0erfc822ErrorsTo\x04\x08ErrorsTo\x04\x10rfc822RequestsTo\x04\nRequestsTo\x04\tmoderator\x04\nlabeledURL\x04\nonVacation\x04\x0fvacationMessage\x04\x05drink\x04\x0elastModifiedBy\x04\x10lastModifiedTime\x04\rmodifiersname\x04\x0fmodifytimestamp\x04\x0ccreatorsname\x04\x0fcreatetimestamp' + assert (decode(s) == [(48, [(2, 11), (99, [(4, 'cn=Douglas J Song 1, ou=Information Technology Division, ou=Faculty and Staff, ou=People, o=University of Michigan, c=US'), (10, '\x00'), (10, '\x03'), (2, 0), (2, 0), (1, '\x00'), (135, 'objectclass'), (48, [(4, 'memberOfGroup'), (4, 'acl'), (4, 'cn'), (4, 'title'), (4, 'postalAddress'), (4, 'telephoneNumber'), (4, 'mail'), (4, 'member'), (4, 'homePhone'), (4, 'homePostalAddress'), (4, 'objectClass'), (4, 'description'), (4, 'facsimileTelephoneNumber'), (4, 'pager'), (4, 'uid'), (4, 'userPassword'), (4, 'joinable'), (4, 'associatedDomain'), (4, 'owner'), (4, 'rfc822ErrorsTo'), (4, 'ErrorsTo'), (4, 'rfc822RequestsTo'), (4, 'RequestsTo'), (4, 'moderator'), (4, 'labeledURL'), (4, 'onVacation'), (4, 'vacationMessage'), (4, 'drink'), (4, 'lastModifiedBy'), (4, 'lastModifiedTime'), (4, 'modifiersname'), (4, 'modifytimestamp'), (4, 'creatorsname'), (4, 'createtimestamp')])])])]) + +if __name__ == '__main__': + test_asn1() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/bgp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/bgp.py new file mode 100644 index 00000000..7439a0e3 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/bgp.py @@ -0,0 +1,789 @@ +# $Id: bgp.py 76 2011-01-06 15:51:30Z dugsong $ +# -*- coding: utf-8 -*- +"""Border Gateway Protocol.""" + +import struct +import socket +import dpkt +from decorators import deprecated + + +# Border Gateway Protocol 4 - RFC 4271 +# Communities Attribute - RFC 1997 +# Capabilities - RFC 3392 +# Route Refresh - RFC 2918 +# Route Reflection - RFC 4456 +# Confederations - RFC 3065 +# Cease Subcodes - RFC 4486 +# NOPEER Community - RFC 3765 +# Multiprotocol Extensions - 2858 + +# Message Types +OPEN = 1 +UPDATE = 2 +NOTIFICATION = 3 +KEEPALIVE = 4 +ROUTE_REFRESH = 5 + +# Attribute Types +ORIGIN = 1 +AS_PATH = 2 +NEXT_HOP = 3 +MULTI_EXIT_DISC = 4 +LOCAL_PREF = 5 +ATOMIC_AGGREGATE = 6 +AGGREGATOR = 7 +COMMUNITIES = 8 +ORIGINATOR_ID = 9 +CLUSTER_LIST = 10 +MP_REACH_NLRI = 14 +MP_UNREACH_NLRI = 15 + +# Origin Types +ORIGIN_IGP = 0 +ORIGIN_EGP = 1 +INCOMPLETE = 2 + +# AS Path Types +AS_SET = 1 +AS_SEQUENCE = 2 +AS_CONFED_SEQUENCE = 3 +AS_CONFED_SET = 4 + +# Reserved Communities Types +NO_EXPORT = 0xffffff01L +NO_ADVERTISE = 0xffffff02L +NO_EXPORT_SUBCONFED = 0xffffff03L +NO_PEER = 0xffffff04L + +# Common AFI types +AFI_IPV4 = 1 +AFI_IPV6 = 2 + +# Multiprotocol SAFI types +SAFI_UNICAST = 1 +SAFI_MULTICAST = 2 +SAFI_UNICAST_MULTICAST = 3 + +# OPEN Message Optional Parameters +AUTHENTICATION = 1 +CAPABILITY = 2 + +# Capability Types +CAP_MULTIPROTOCOL = 1 +CAP_ROUTE_REFRESH = 2 + +# NOTIFICATION Error Codes +MESSAGE_HEADER_ERROR = 1 +OPEN_MESSAGE_ERROR = 2 +UPDATE_MESSAGE_ERROR = 3 +HOLD_TIMER_EXPIRED = 4 +FSM_ERROR = 5 +CEASE = 6 + +# Message Header Error Subcodes +CONNECTION_NOT_SYNCHRONIZED = 1 +BAD_MESSAGE_LENGTH = 2 +BAD_MESSAGE_TYPE = 3 + +# OPEN Message Error Subcodes +UNSUPPORTED_VERSION_NUMBER = 1 +BAD_PEER_AS = 2 +BAD_BGP_IDENTIFIER = 3 +UNSUPPORTED_OPTIONAL_PARAMETER = 4 +AUTHENTICATION_FAILURE = 5 +UNACCEPTABLE_HOLD_TIME = 6 +UNSUPPORTED_CAPABILITY = 7 + +# UPDATE Message Error Subcodes +MALFORMED_ATTRIBUTE_LIST = 1 +UNRECOGNIZED_ATTRIBUTE = 2 +MISSING_ATTRIBUTE = 3 +ATTRIBUTE_FLAGS_ERROR = 4 +ATTRIBUTE_LENGTH_ERROR = 5 +INVALID_ORIGIN_ATTRIBUTE = 6 +AS_ROUTING_LOOP = 7 +INVALID_NEXT_HOP_ATTRIBUTE = 8 +OPTIONAL_ATTRIBUTE_ERROR = 9 +INVALID_NETWORK_FIELD = 10 +MALFORMED_AS_PATH = 11 + +# Cease Error Subcodes +MAX_NUMBER_OF_PREFIXES_REACHED = 1 +ADMINISTRATIVE_SHUTDOWN = 2 +PEER_DECONFIGURED = 3 +ADMINISTRATIVE_RESET = 4 +CONNECTION_REJECTED = 5 +OTHER_CONFIGURATION_CHANGE = 6 +CONNECTION_COLLISION_RESOLUTION = 7 +OUT_OF_RESOURCES = 8 + + +class BGP(dpkt.Packet): + __hdr__ = ( + ('marker', '16s', '\xff' * 16), + ('len', 'H', 0), + ('type', 'B', OPEN) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len - self.__hdr_len__] + if self.type == OPEN: + self.data = self.open = self.Open(self.data) + elif self.type == UPDATE: + self.data = self.update = self.Update(self.data) + elif self.type == NOTIFICATION: + self.data = self.notifiation = self.Notification(self.data) + elif self.type == KEEPALIVE: + self.data = self.keepalive = self.Keepalive(self.data) + elif self.type == ROUTE_REFRESH: + self.data = self.route_refresh = self.RouteRefresh(self.data) + + class Open(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 4), + ('asn', 'H', 0), + ('holdtime', 'H', 0), + ('identifier', 'I', 0), + ('param_len', 'B', 0) + ) + __hdr_defaults__ = { + 'parameters': [] + } + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + plen = self.param_len + while plen > 0: + param = self.Parameter(self.data) + self.data = self.data[len(param):] + plen -= len(param) + l.append(param) + self.data = self.parameters = l + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.parameters)) + + def __str__(self): + params = ''.join(map(str, self.parameters)) + self.param_len = len(params) + return self.pack_hdr() + params + + class Parameter(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len] + + if self.type == AUTHENTICATION: + self.data = self.authentication = self.Authentication(self.data) + elif self.type == CAPABILITY: + self.data = self.capability = self.Capability(self.data) + + class Authentication(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ) + + class Capability(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len] + + class Update(dpkt.Packet): + __hdr_defaults__ = { + 'withdrawn': [], + 'attributes': [], + 'announced': [] + } + + def unpack(self, buf): + self.data = buf + + # Withdrawn Routes + wlen = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + l = [] + while wlen > 0: + route = RouteIPV4(self.data) + self.data = self.data[len(route):] + wlen -= len(route) + l.append(route) + self.withdrawn = l + + # Path Attributes + plen = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + l = [] + while plen > 0: + attr = self.Attribute(self.data) + self.data = self.data[len(attr):] + plen -= len(attr) + l.append(attr) + self.attributes = l + + # Announced Routes + l = [] + while self.data: + route = RouteIPV4(self.data) + self.data = self.data[len(route):] + l.append(route) + self.announced = l + + def __len__(self): + return 2 + sum(map(len, self.withdrawn)) + \ + 2 + sum(map(len, self.attributes)) + \ + sum(map(len, self.announced)) + + def __str__(self): + return struct.pack('>H', sum(map(len, self.withdrawn))) + \ + ''.join(map(str, self.withdrawn)) + \ + struct.pack('>H', sum(map(len, self.attributes))) + \ + ''.join(map(str, self.attributes)) + \ + ''.join(map(str, self.announced)) + + class Attribute(dpkt.Packet): + __hdr__ = ( + ('flags', 'B', 0), + ('type', 'B', 0) + ) + + @property + def optional(self): + return (self.flags >> 7) & 0x1 + + @optional.setter + def optional(self, o): + self.flags = (self.flags & ~0x80) | ((o & 0x1) << 7) + + @property + def transitive(self): + return (self.flags >> 6) & 0x1 + + @transitive.setter + def transitive(self, t): + self.flags = (self.flags & ~0x40) | ((t & 0x1) << 6) + + @property + def partial(self): + return (self.flags >> 5) & 0x1 + + @partial.setter + def partial(self, p): + self.flags = (self.flags & ~0x20) | ((p & 0x1) << 5) + + @property + def extended_length(self): + return (self.flags >> 4) & 0x1 + + @extended_length.setter + def extended_length(self, e): + self.flags = (self.flags & ~0x10) | ((e & 0x1) << 4) + + # Deprecated methods, will be removed in the future + # ====================================================== + @deprecated + def _get_o(self): + return self.optional + + @deprecated + def _set_o(self, o): + self.optional = o + + @deprecated + def _get_t(self): + return self.transitive + + @deprecated + def _set_t(self, t): + self.transitive = t + + @deprecated + def _get_p(self): + return self.partial + + @deprecated + def _set_p(self, p): + self.partial = p + + @deprecated + def _get_e(self): + return self.extended_length + + @deprecated + def _set_e(self, e): + self.extended_length = e + + # ====================================================== + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + if self.extended_length: + self.len = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + else: + self.len = struct.unpack('B', self.data[:1])[0] + self.data = self.data[1:] + + self.data = self.data[:self.len] + + if self.type == ORIGIN: + self.data = self.origin = self.Origin(self.data) + elif self.type == AS_PATH: + self.data = self.as_path = self.ASPath(self.data) + elif self.type == NEXT_HOP: + self.data = self.next_hop = self.NextHop(self.data) + elif self.type == MULTI_EXIT_DISC: + self.data = self.multi_exit_disc = self.MultiExitDisc(self.data) + elif self.type == LOCAL_PREF: + self.data = self.local_pref = self.LocalPref(self.data) + elif self.type == ATOMIC_AGGREGATE: + self.data = self.atomic_aggregate = self.AtomicAggregate(self.data) + elif self.type == AGGREGATOR: + self.data = self.aggregator = self.Aggregator(self.data) + elif self.type == COMMUNITIES: + self.data = self.communities = self.Communities(self.data) + elif self.type == ORIGINATOR_ID: + self.data = self.originator_id = self.OriginatorID(self.data) + elif self.type == CLUSTER_LIST: + self.data = self.cluster_list = self.ClusterList(self.data) + elif self.type == MP_REACH_NLRI: + self.data = self.mp_reach_nlri = self.MPReachNLRI(self.data) + elif self.type == MP_UNREACH_NLRI: + self.data = self.mp_unreach_nlri = self.MPUnreachNLRI(self.data) + + def __len__(self): + if self.extended_length: + attr_len = 2 + else: + attr_len = 1 + return self.__hdr_len__ + attr_len + len(self.data) + + def __str__(self): + if self.extended_length: + attr_len_str = struct.pack('>H', self.len) + else: + attr_len_str = struct.pack('B', self.len) + return self.pack_hdr() + attr_len_str + str(self.data) + + class Origin(dpkt.Packet): + __hdr__ = ( + ('type', 'B', ORIGIN_IGP), + ) + + class ASPath(dpkt.Packet): + __hdr_defaults__ = { + 'segments': [] + } + + def unpack(self, buf): + self.data = buf + l = [] + while self.data: + seg = self.ASPathSegment(self.data) + self.data = self.data[len(seg):] + l.append(seg) + self.data = self.segments = l + + def __len__(self): + return sum(map(len, self.data)) + + def __str__(self): + return ''.join(map(str, self.data)) + + class ASPathSegment(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + for i in range(self.len): + AS = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + l.append(AS) + self.data = self.path = l + + def __len__(self): + return self.__hdr_len__ + 2 * len(self.path) + + def __str__(self): + as_str = '' + for AS in self.path: + as_str += struct.pack('>H', AS) + return self.pack_hdr() + as_str + + class NextHop(dpkt.Packet): + __hdr__ = ( + ('ip', 'I', 0), + ) + + class MultiExitDisc(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class LocalPref(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class AtomicAggregate(dpkt.Packet): + def unpack(self, buf): + pass + + def __len__(self): + return 0 + + def __str__(self): + return '' + + class Aggregator(dpkt.Packet): + __hdr__ = ( + ('asn', 'H', 0), + ('ip', 'I', 0) + ) + + class Communities(dpkt.Packet): + __hdr_defaults__ = { + 'list': [] + } + + def unpack(self, buf): + self.data = buf + l = [] + while self.data: + val = struct.unpack('>I', self.data[:4])[0] + if (0x00000000L <= val <= 0x0000ffffL) or (0xffff0000L <= val <= 0xffffffffL): + comm = self.ReservedCommunity(self.data[:4]) + else: + comm = self.Community(self.data[:4]) + self.data = self.data[len(comm):] + l.append(comm) + self.data = self.list = l + + def __len__(self): + return sum(map(len, self.data)) + + def __str__(self): + return ''.join(map(str, self.data)) + + class Community(dpkt.Packet): + __hdr__ = ( + ('asn', 'H', 0), + ('value', 'H', 0) + ) + + class ReservedCommunity(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class OriginatorID(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class ClusterList(dpkt.Packet): + __hdr_defaults__ = { + 'list': [] + } + + def unpack(self, buf): + self.data = buf + l = [] + while self.data: + id = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:] + l.append(id) + self.data = self.list = l + + def __len__(self): + return 4 * len(self.list) + + def __str__(self): + cluster_str = '' + for val in self.list: + cluster_str += struct.pack('>I', val) + return cluster_str + + class MPReachNLRI(dpkt.Packet): + __hdr__ = ( + ('afi', 'H', AFI_IPV4), + ('safi', 'B', SAFI_UNICAST), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + # Next Hop + nlen = struct.unpack('B', self.data[:1])[0] + self.data = self.data[1:] + self.next_hop = self.data[:nlen] + self.data = self.data[nlen:] + + # SNPAs + l = [] + num_snpas = struct.unpack('B', self.data[:1])[0] + self.data = self.data[1:] + for i in range(num_snpas): + snpa = self.SNPA(self.data) + self.data = self.data[len(snpa):] + l.append(snpa) + self.snpas = l + + if self.afi == AFI_IPV4: + Route = RouteIPV4 + elif self.afi == AFI_IPV6: + Route = RouteIPV6 + else: + Route = RouteGeneric + + # Announced Routes + l = [] + while self.data: + route = Route(self.data) + self.data = self.data[len(route):] + l.append(route) + self.data = self.announced = l + + def __len__(self): + return self.__hdr_len__ + \ + 1 + len(self.next_hop) + \ + 1 + sum(map(len, self.snpas)) + \ + sum(map(len, self.announced)) + + def __str__(self): + return self.pack_hdr() + \ + struct.pack('B', len(self.next_hop)) + \ + str(self.next_hop) + \ + struct.pack('B', len(self.snpas)) + \ + ''.join(map(str, self.snpas)) + \ + ''.join(map(str, self.announced)) + + class SNPA(object): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:(self.len + 1) / 2] + + class MPUnreachNLRI(dpkt.Packet): + __hdr__ = ( + ('afi', 'H', AFI_IPV4), + ('safi', 'B', SAFI_UNICAST), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + if self.afi == AFI_IPV4: + Route = RouteIPV4 + elif self.afi == AFI_IPV6: + Route = RouteIPV6 + else: + Route = RouteGeneric + + # Withdrawn Routes + l = [] + while self.data: + route = Route(self.data) + self.data = self.data[len(route):] + l.append(route) + self.data = self.withdrawn = l + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + return self.pack_hdr() + ''.join(map(str, self.data)) + + class Notification(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ('subcode', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.error = self.data + + class Keepalive(dpkt.Packet): + def unpack(self, buf): + pass + + def __len__(self): + return 0 + + def __str__(self): + return '' + + class RouteRefresh(dpkt.Packet): + __hdr__ = ( + ('afi', 'H', AFI_IPV4), + ('rsvd', 'B', 0), + ('safi', 'B', SAFI_UNICAST) + ) + + +class RouteGeneric(dpkt.Packet): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.prefix = self.data[:(self.len + 7) / 8] + + +class RouteIPV4(dpkt.Packet): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + tmp = self.data[:(self.len + 7) / 8] + tmp += (4 - len(tmp)) * '\x00' + self.data = self.prefix = tmp + + def __repr__(self): + cidr = '%s/%d' % (socket.inet_ntoa(self.prefix), self.len) + return '%s(%s)' % (self.__class__.__name__, cidr) + + def __len__(self): + return self.__hdr_len__ + (self.len + 7) / 8 + + def __str__(self): + return self.pack_hdr() + self.prefix[:(self.len + 7) / 8] + + +class RouteIPV6(dpkt.Packet): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + tmp = self.data[:(self.len + 7) / 8] + tmp += (16 - len(tmp)) * '\x00' + self.data = self.prefix = tmp + + def __len__(self): + return self.__hdr_len__ + (self.len + 7) / 8 + + def __str__(self): + return self.pack_hdr() + self.prefix[:(self.len + 7) / 8] + + +__bgp1 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x13\x04' +__bgp2 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x63\x02\x00\x00\x00\x48\x40\x01\x01\x00\x40\x02\x0a\x01\x02\x01\xf4\x01\xf4\x02\x01\xfe\xbb\x40\x03\x04\xc0\xa8\x00\x0f\x40\x05\x04\x00\x00\x00\x64\x40\x06\x00\xc0\x07\x06\xfe\xba\xc0\xa8\x00\x0a\xc0\x08\x0c\xfe\xbf\x00\x01\x03\x16\x00\x04\x01\x54\x00\xfa\x80\x09\x04\xc0\xa8\x00\x0f\x80\x0a\x04\xc0\xa8\x00\xfa\x16\xc0\xa8\x04' +__bgp3 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x79\x02\x00\x00\x00\x62\x40\x01\x01\x00\x40\x02\x00\x40\x05\x04\x00\x00\x00\x64\xc0\x10\x08\x00\x02\x01\x2c\x00\x00\x01\x2c\xc0\x80\x24\x00\x00\xfd\xe9\x40\x01\x01\x00\x40\x02\x04\x02\x01\x15\xb3\x40\x05\x04\x00\x00\x00\x2c\x80\x09\x04\x16\x05\x05\x05\x80\x0a\x04\x16\x05\x05\x05\x90\x0e\x00\x1e\x00\x01\x80\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x04\x04\x04\x00\x60\x18\x77\x01\x00\x00\x01\xf4\x00\x00\x01\xf4\x85' +__bgp4 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x2d\x01\x04\x00\xed\x00\x5a\xc6\x6e\x83\x7d\x10\x02\x06\x01\x04\x00\x01\x00\x01\x02\x02\x80\x00\x02\x02\x02\x00' + + +def test_pack(): + assert (__bgp1 == str(BGP(__bgp1))) + assert (__bgp2 == str(BGP(__bgp2))) + assert (__bgp3 == str(BGP(__bgp3))) + assert (__bgp4 == str(BGP(__bgp4))) + + +def test_unpack(): + b1 = BGP(__bgp1) + assert (b1.len == 19) + assert (b1.type == KEEPALIVE) + assert (b1.keepalive is not None) + + b2 = BGP(__bgp2) + assert (b2.type == UPDATE) + assert (len(b2.update.withdrawn) == 0) + assert (len(b2.update.announced) == 1) + assert (len(b2.update.attributes) == 9) + a = b2.update.attributes[1] + assert (a.type == AS_PATH) + assert (a.len == 10) + assert (len(a.as_path.segments) == 2) + s = a.as_path.segments[0] + assert (s.type == AS_SET) + assert (s.len == 2) + assert (len(s.path) == 2) + assert (s.path[0] == 500) + + a = b2.update.attributes[6] + assert (a.type == COMMUNITIES) + assert (a.len == 12) + assert (len(a.communities.list) == 3) + c = a.communities.list[0] + assert (c.asn == 65215) + assert (c.value == 1) + r = b2.update.announced[0] + assert (r.len == 22) + assert (r.prefix == '\xc0\xa8\x04\x00') + + b3 = BGP(__bgp3) + assert (b3.type == UPDATE) + assert (len(b3.update.withdrawn) == 0) + assert (len(b3.update.announced) == 0) + assert (len(b3.update.attributes) == 6) + a = b3.update.attributes[0] + assert (a.optional == False) + assert (a.transitive == True) + assert (a.partial == False) + assert (a.extended_length == False) + assert (a.type == ORIGIN) + assert (a.len == 1) + o = a.origin + assert (o.type == ORIGIN_IGP) + a = b3.update.attributes[5] + assert (a.optional == True) + assert (a.transitive == False) + assert (a.partial == False) + assert (a.extended_length == True) + assert (a.type == MP_REACH_NLRI) + assert (a.len == 30) + m = a.mp_reach_nlri + assert (m.afi == AFI_IPV4) + assert (len(m.snpas) == 0) + assert (len(m.announced) == 1) + p = m.announced[0] + assert (p.len == 96) + + b4 = BGP(__bgp4) + assert (b4.len == 45) + assert (b4.type == OPEN) + assert (b4.open.asn == 237) + assert (b4.open.param_len == 16) + assert (len(b4.open.parameters) == 3) + p = b4.open.parameters[0] + assert (p.type == CAPABILITY) + assert (p.len == 6) + c = p.capability + assert (c.code == CAP_MULTIPROTOCOL) + assert (c.len == 4) + assert (c.data == '\x00\x01\x00\x01') + c = b4.open.parameters[2].capability + assert (c.code == CAP_ROUTE_REFRESH) + assert (c.len == 0) + + +if __name__ == '__main__': + test_pack() + test_unpack() + print 'Tests Successful...' diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/cdp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/cdp.py new file mode 100644 index 00000000..43c6a564 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/cdp.py @@ -0,0 +1,99 @@ +# $Id: cdp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Cisco Discovery Protocol.""" + +import struct +import dpkt + +CDP_DEVID = 1 # string +CDP_ADDRESS = 2 +CDP_PORTID = 3 # string +CDP_CAPABILITIES = 4 # 32-bit bitmask +CDP_VERSION = 5 # string +CDP_PLATFORM = 6 # string +CDP_IPPREFIX = 7 + +CDP_VTP_MGMT_DOMAIN = 9 # string +CDP_NATIVE_VLAN = 10 # 16-bit integer +CDP_DUPLEX = 11 # 8-bit boolean +CDP_TRUST_BITMAP = 18 # 8-bit bitmask0x13 +CDP_UNTRUST_COS = 19 # 8-bit port +CDP_SYSTEM_NAME = 20 # string +CDP_SYSTEM_OID = 21 # 10-byte binary string +CDP_MGMT_ADDRESS = 22 # 32-bit number of addrs, Addresses +CDP_LOCATION = 23 # string + + +class CDP(dpkt.Packet): + __hdr__ = ( + ('version', 'B', 2), + ('ttl', 'B', 180), + ('sum', 'H', 0) + ) + + class Address(dpkt.Packet): + # XXX - only handle NLPID/IP for now + __hdr__ = ( + ('ptype', 'B', 1), # protocol type (NLPID) + ('plen', 'B', 1), # protocol length + ('p', 'B', 0xcc), # IP + ('alen', 'H', 4) # address length + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.alen] + + class TLV(dpkt.Packet): + __hdr__ = ( + ('type', 'H', 0), + ('len', 'H', 4) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len - 4] + if self.type == CDP_ADDRESS: + n = struct.unpack('>I', self.data[:4])[0] + buf = self.data[4:] + l = [] + for i in range(n): + a = CDP.Address(buf) + l.append(a) + buf = buf[len(a):] + self.data = l + + def __len__(self): + if self.type == CDP_ADDRESS: + n = 4 + sum(map(len, self.data)) + else: + n = len(self.data) + return self.__hdr_len__ + n + + def __str__(self): + self.len = len(self) + if self.type == CDP_ADDRESS: + s = struct.pack('>I', len(self.data)) + \ + ''.join(map(str, self.data)) + else: + s = self.data + return self.pack_hdr() + s + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = self.data + l = [] + while buf: + tlv = self.TLV(buf) + l.append(tlv) + buf = buf[len(tlv):] + self.data = l + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + data = ''.join(map(str, self.data)) + if not self.sum: + self.sum = dpkt.in_cksum(self.pack_hdr() + data) + return self.pack_hdr() + data diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/crc32c.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/crc32c.py new file mode 100644 index 00000000..aaf40e1f --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/crc32c.py @@ -0,0 +1,83 @@ +# $Id: crc32c.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +import array + +# CRC-32C Checksum +# http://tools.ietf.org/html/rfc3309 + +crc32c_table = ( + 0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L, 0xC79A971FL, + 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL, 0x8AD958CFL, 0x78B2DBCCL, + 0x6BE22838L, 0x9989AB3BL, 0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, + 0x5E133C24L, 0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL, + 0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L, 0x9A879FA0L, + 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L, 0x5D1D08BFL, 0xAF768BBCL, + 0xBC267848L, 0x4E4DFB4BL, 0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, + 0x33ED7D2AL, 0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L, + 0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L, 0x6DFE410EL, + 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL, 0x30E349B1L, 0xC288CAB2L, + 0xD1D83946L, 0x23B3BA45L, 0xF779DEAEL, 0x05125DADL, 0x1642AE59L, + 0xE4292D5AL, 0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL, + 0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L, 0x417B1DBCL, + 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L, 0x86E18AA3L, 0x748A09A0L, + 0x67DAFA54L, 0x95B17957L, 0xCBA24573L, 0x39C9C670L, 0x2A993584L, + 0xD8F2B687L, 0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L, + 0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L, 0x96BF4DCCL, + 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L, 0xDBFC821CL, 0x2997011FL, + 0x3AC7F2EBL, 0xC8AC71E8L, 0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, + 0x0F36E6F7L, 0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L, + 0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L, 0xEB1FCBADL, + 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L, 0x2C855CB2L, 0xDEEEDFB1L, + 0xCDBE2C45L, 0x3FD5AF46L, 0x7198540DL, 0x83F3D70EL, 0x90A324FAL, + 0x62C8A7F9L, 0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L, + 0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L, 0x3CDB9BDDL, + 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L, 0x82F63B78L, 0x709DB87BL, + 0x63CD4B8FL, 0x91A6C88CL, 0x456CAC67L, 0xB7072F64L, 0xA457DC90L, + 0x563C5F93L, 0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L, + 0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL, 0x92A8FC17L, + 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L, 0x55326B08L, 0xA759E80BL, + 0xB4091BFFL, 0x466298FCL, 0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, + 0x0B21572CL, 0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L, + 0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L, 0x65D122B9L, + 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL, 0x2892ED69L, 0xDAF96E6AL, + 0xC9A99D9EL, 0x3BC21E9DL, 0xEF087A76L, 0x1D63F975L, 0x0E330A81L, + 0xFC588982L, 0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL, + 0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L, 0x38CC2A06L, + 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L, 0xFF56BD19L, 0x0D3D3E1AL, + 0x1E6DCDEEL, 0xEC064EEDL, 0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, + 0xD0DDD530L, 0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL, + 0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL, 0x8ECEE914L, + 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L, 0xD3D3E1ABL, 0x21B862A8L, + 0x32E8915CL, 0xC083125FL, 0x144976B4L, 0xE622F5B7L, 0xF5720643L, + 0x07198540L, 0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L, + 0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL, 0xE330A81AL, + 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL, 0x24AA3F05L, 0xD6C1BC06L, + 0xC5914FF2L, 0x37FACCF1L, 0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, + 0x7AB90321L, 0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL, + 0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L, 0x34F4F86AL, + 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL, 0x79B737BAL, 0x8BDCB4B9L, + 0x988C474DL, 0x6AE7C44EL, 0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, + 0xAD7D5351L +) + + +def add(crc, buf): + buf = array.array('B', buf) + for b in buf: + crc = (crc >> 8) ^ crc32c_table[(crc ^ b) & 0xff] + return crc + + +def done(crc): + tmp = ~crc & 0xffffffffL + b0 = tmp & 0xff + b1 = (tmp >> 8) & 0xff + b2 = (tmp >> 16) & 0xff + b3 = (tmp >> 24) & 0xff + crc = (b0 << 24) | (b1 << 16) | (b2 << 8) | b3 + return crc + + +def cksum(buf): + """Return computed CRC-32c checksum.""" + return done(add(0xffffffffL, buf)) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/decorators.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/decorators.py new file mode 100644 index 00000000..08f78161 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/decorators.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +import warnings +from timeit import Timer +from test import pystone +from time import sleep + + +def decorator_with_args(decorator_to_enhance): + """ + This is decorator for decorator. It allows any decorator to get additional arguments + """ + def decorator_maker(*args, **kwargs): + def decorator_wrapper(func): + return decorator_to_enhance(func, *args, **kwargs) + return decorator_wrapper + return decorator_maker + + +def deprecated(deprecated_method): + def _deprecated(*args, **kwargs): + # Print only the first occurrence of the DeprecationWarning, regardless of location + warnings.simplefilter('once', DeprecationWarning) + # Display the deprecation warning message + warnings.warn("Call to deprecated method %s" % deprecated_method.__name__, + category=DeprecationWarning, stacklevel=2) + return deprecated_method(*args, **kwargs) # actually call the method + + return _deprecated + + +@decorator_with_args +def duration(function, repeat=10000): + def _duration(*args, **kwargs): + time = 0 + try: + time = Timer(lambda: function(*args, **kwargs)).timeit(repeat) + finally: + benchtime, pystones = pystone.pystones() + kstones = (pystones * time) / 1000 + print '%s : time = %f kstones = %f' % (function.__name__, time, kstones) + return function(*args, **kwargs) + + return _duration + + +class TestDeprecatedDecorator(object): + @deprecated + def deprecated_decorator(self): + return + + def test_deprecated_decorator(self): + import sys + from StringIO import StringIO + + saved_stderr = sys.stderr + try: + out = StringIO() + sys.stderr = out + self.deprecated_decorator() + assert ('DeprecationWarning: Call to deprecated method deprecated_decorator' in out.getvalue()) + # 'in' because message contains the filename, line, etc + finally: + sys.stderr = saved_stderr + + +class TestDurationDecorator(object): + @duration(1) + def duration_decorator(self): + sleep(0.05) + return + + def test_duration_decorator(self): + import sys + import re + from StringIO import StringIO + + saved_stdout = sys.stdout + try: + out = StringIO() + sys.stdout = out + self.duration_decorator() + assert (re.match('((.+?[0-9]+\.[0-9]+)\s?){2}', out.getvalue())) + finally: + sys.stdout = saved_stdout + +if __name__ == '__main__': + a = TestDeprecatedDecorator() + a.test_deprecated_decorator() + a = TestDurationDecorator() + a.test_duration_decorator() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/dhcp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/dhcp.py new file mode 100644 index 00000000..5332a1fc --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/dhcp.py @@ -0,0 +1,169 @@ +# $Id: dhcp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Dynamic Host Configuration Protocol.""" + +import arp +import dpkt + +DHCP_OP_REQUEST = 1 +DHCP_OP_REPLY = 2 + +DHCP_MAGIC = 0x63825363 + +# DHCP option codes +DHCP_OPT_NETMASK = 1 # I: subnet mask +DHCP_OPT_TIMEOFFSET = 2 +DHCP_OPT_ROUTER = 3 # s: list of router ips +DHCP_OPT_TIMESERVER = 4 +DHCP_OPT_NAMESERVER = 5 +DHCP_OPT_DNS_SVRS = 6 # s: list of DNS servers +DHCP_OPT_LOGSERV = 7 +DHCP_OPT_COOKIESERV = 8 +DHCP_OPT_LPRSERV = 9 +DHCP_OPT_IMPSERV = 10 +DHCP_OPT_RESSERV = 11 +DHCP_OPT_HOSTNAME = 12 # s: client hostname +DHCP_OPT_BOOTFILESIZE = 13 +DHCP_OPT_DUMPFILE = 14 +DHCP_OPT_DOMAIN = 15 # s: domain name +DHCP_OPT_SWAPSERV = 16 +DHCP_OPT_ROOTPATH = 17 +DHCP_OPT_EXTENPATH = 18 +DHCP_OPT_IPFORWARD = 19 +DHCP_OPT_SRCROUTE = 20 +DHCP_OPT_POLICYFILTER = 21 +DHCP_OPT_MAXASMSIZE = 22 +DHCP_OPT_IPTTL = 23 +DHCP_OPT_MTUTIMEOUT = 24 +DHCP_OPT_MTUTABLE = 25 +DHCP_OPT_MTUSIZE = 26 +DHCP_OPT_LOCALSUBNETS = 27 +DHCP_OPT_BROADCASTADDR = 28 +DHCP_OPT_DOMASKDISCOV = 29 +DHCP_OPT_MASKSUPPLY = 30 +DHCP_OPT_DOROUTEDISC = 31 +DHCP_OPT_ROUTERSOLICIT = 32 +DHCP_OPT_STATICROUTE = 33 +DHCP_OPT_TRAILERENCAP = 34 +DHCP_OPT_ARPTIMEOUT = 35 +DHCP_OPT_ETHERENCAP = 36 +DHCP_OPT_TCPTTL = 37 +DHCP_OPT_TCPKEEPALIVE = 38 +DHCP_OPT_TCPALIVEGARBAGE = 39 +DHCP_OPT_NISDOMAIN = 40 +DHCP_OPT_NISSERVERS = 41 +DHCP_OPT_NISTIMESERV = 42 +DHCP_OPT_VENDSPECIFIC = 43 +DHCP_OPT_NBNS = 44 +DHCP_OPT_NBDD = 45 +DHCP_OPT_NBTCPIP = 46 +DHCP_OPT_NBTCPSCOPE = 47 +DHCP_OPT_XFONT = 48 +DHCP_OPT_XDISPLAYMGR = 49 +DHCP_OPT_REQ_IP = 50 # I: IP address +DHCP_OPT_LEASE_SEC = 51 # I: lease seconds +DHCP_OPT_OPTIONOVERLOAD = 52 +DHCP_OPT_MSGTYPE = 53 # B: message type +DHCP_OPT_SERVER_ID = 54 # I: server IP address +DHCP_OPT_PARAM_REQ = 55 # s: list of option codes +DHCP_OPT_MESSAGE = 56 +DHCP_OPT_MAXMSGSIZE = 57 +DHCP_OPT_RENEWTIME = 58 +DHCP_OPT_REBINDTIME = 59 +DHCP_OPT_VENDOR_ID = 60 # s: vendor class id +DHCP_OPT_CLIENT_ID = 61 # Bs: idtype, id (idtype 0: FQDN, idtype 1: MAC) +DHCP_OPT_NISPLUSDOMAIN = 64 +DHCP_OPT_NISPLUSSERVERS = 65 +DHCP_OPT_MOBILEIPAGENT = 68 +DHCP_OPT_SMTPSERVER = 69 +DHCP_OPT_POP3SERVER = 70 +DHCP_OPT_NNTPSERVER = 71 +DHCP_OPT_WWWSERVER = 72 +DHCP_OPT_FINGERSERVER = 73 +DHCP_OPT_IRCSERVER = 74 +DHCP_OPT_STSERVER = 75 +DHCP_OPT_STDASERVER = 76 + +# DHCP message type values +DHCPDISCOVER = 1 +DHCPOFFER = 2 +DHCPREQUEST = 3 +DHCPDECLINE = 4 +DHCPACK = 5 +DHCPNAK = 6 +DHCPRELEASE = 7 +DHCPINFORM = 8 + + +class DHCP(dpkt.Packet): + __hdr__ = ( + ('op', 'B', DHCP_OP_REQUEST), + ('hrd', 'B', arp.ARP_HRD_ETH), # just like ARP.hrd + ('hln', 'B', 6), # and ARP.hln + ('hops', 'B', 0), + ('xid', 'I', 0xdeadbeefL), + ('secs', 'H', 0), + ('flags', 'H', 0), + ('ciaddr', 'I', 0), + ('yiaddr', 'I', 0), + ('siaddr', 'I', 0), + ('giaddr', 'I', 0), + ('chaddr', '16s', 16 * '\x00'), + ('sname', '64s', 64 * '\x00'), + ('file', '128s', 128 * '\x00'), + ('magic', 'I', DHCP_MAGIC), + ) + opts = ( + (DHCP_OPT_MSGTYPE, chr(DHCPDISCOVER)), + (DHCP_OPT_PARAM_REQ, ''.join(map(chr, (DHCP_OPT_REQ_IP, + DHCP_OPT_ROUTER, + DHCP_OPT_NETMASK, + DHCP_OPT_DNS_SVRS)))) + ) # list of (type, data) tuples + + def __len__(self): + return self.__hdr_len__ + \ + sum([2 + len(o[1]) for o in self.opts]) + 1 + len(self.data) + + def __str__(self): + return self.pack_hdr() + self.pack_opts() + str(self.data) + + def pack_opts(self): + """Return packed options string.""" + if not self.opts: + return '' + l = [] + for t, data in self.opts: + l.append('%s%s%s' % (chr(t), chr(len(data)), data)) + l.append('\xff') + return ''.join(l) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.chaddr = self.chaddr[:self.hln] + buf = self.data + l = [] + while buf: + t = ord(buf[0]) + if t == 0xff: + buf = buf[1:] + break + elif t == 0: + buf = buf[1:] + else: + n = ord(buf[1]) + l.append((t, buf[2:2 + n])) + buf = buf[2 + n:] + self.opts = l + self.data = buf + + +def test_dhcp(): + s = '\x01\x01\x06\x00\xadS\xc8c\xb8\x87\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02U\x82\xf3\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Sc5\x01\x01\xfb\x01\x01=\x07\x01\x00\x02U\x82\xf3\xa62\x04\n\x00\x01e\x0c\tGuinevere<\x08MSFT 5.07\n\x01\x0f\x03\x06,./\x1f!+\xff\x00\x00\x00\x00\x00' + dhcp = DHCP(s) + assert (s == str(dhcp)) + + +if __name__ == '__main__': + test_dhcp() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/diameter.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/diameter.py new file mode 100644 index 00000000..a6994276 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/diameter.py @@ -0,0 +1,243 @@ +# $Id: diameter.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Diameter.""" + +import struct +import dpkt +from decorators import deprecated + +# Diameter Base Protocol - RFC 3588 +# http://tools.ietf.org/html/rfc3588 + +# Request/Answer Command Codes +ABORT_SESSION = 274 +ACCOUTING = 271 +CAPABILITIES_EXCHANGE = 257 +DEVICE_WATCHDOG = 280 +DISCONNECT_PEER = 282 +RE_AUTH = 258 +SESSION_TERMINATION = 275 + + +class Diameter(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 1), + ('len', '3s', 0), + ('flags', 'B', 0), + ('cmd', '3s', 0), + ('app_id', 'I', 0), + ('hop_id', 'I', 0), + ('end_id', 'I', 0) + ) + + @property + def request_flag(self): + return (self.flags >> 7) & 0x1 + + @request_flag.setter + def request_flag(self, r): + self.flags = (self.flags & ~0x80) | ((r & 0x1) << 7) + + @property + def proxiable_flag(self): + return (self.flags >> 6) & 0x1 + + @proxiable_flag.setter + def proxiable_flag(self, p): + self.flags = (self.flags & ~0x40) | ((p & 0x1) << 6) + + @property + def error_flag(self): + return (self.flags >> 5) & 0x1 + + @error_flag.setter + def error_flag(self, e): + self.flags = (self.flags & ~0x20) | ((e & 0x1) << 5) + + @property + def retransmit_flag(self): + return (self.flags >> 4) & 0x1 + + @retransmit_flag.setter + def retransmit_flag(self, t): + self.flags = (self.flags & ~0x10) | ((t & 0x1) << 4) + + # Deprecated methods, will be removed in the future + # ====================================================== + @deprecated + def _get_r(self): return self.request_flag + + @deprecated + def _set_r(self, r): self.request_flag = r + + @deprecated + def _get_p(self): return self.proxiable_flag + + @deprecated + def _set_p(self, p): self.proxiable_flag = p + + @deprecated + def _get_e(self): return self.error_flag + + @deprecated + def _set_e(self, e): self.error_flag = e + + @deprecated + def _get_t(self): return self.request_flag + + @deprecated + def _set_t(self, t): self.request_flag = t + + # ====================================================== + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.cmd = (ord(self.cmd[0]) << 16) | (ord(self.cmd[1]) << 8) | (ord(self.cmd[2])) + self.len = (ord(self.len[0]) << 16) | (ord(self.len[1]) << 8) | (ord(self.len[2])) + self.data = self.data[:self.len - self.__hdr_len__] + + l = [] + while self.data: + avp = AVP(self.data) + l.append(avp) + self.data = self.data[len(avp):] + self.data = self.avps = l + + def pack_hdr(self): + self.len = chr((self.len >> 16) & 0xff) + chr((self.len >> 8) & 0xff) + chr(self.len & 0xff) + self.cmd = chr((self.cmd >> 16) & 0xff) + chr((self.cmd >> 8) & 0xff) + chr(self.cmd & 0xff) + return dpkt.Packet.pack_hdr(self) + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + return self.pack_hdr() + ''.join(map(str, self.data)) + + +class AVP(dpkt.Packet): + __hdr__ = ( + ('code', 'I', 0), + ('flags', 'B', 0), + ('len', '3s', 0), + ) + + @property + def vendor_flag(self): + return (self.flags >> 7) & 0x1 + + @vendor_flag.setter + def vendor_flag(self, v): + self.flags = (self.flags & ~0x80) | ((v & 0x1) << 7) + + @property + def mandatory_flag(self): + return (self.flags >> 6) & 0x1 + + @mandatory_flag.setter + def mandatory_flag(self, m): + self.flags = (self.flags & ~0x40) | ((m & 0x1) << 6) + + @property + def protected_flag(self): + return (self.flags >> 5) & 0x1 + + @protected_flag.setter + def protected_flag(self, p): + self.flags = (self.flags & ~0x20) | ((p & 0x1) << 5) + + # Deprecated methods, will be removed in the future + # ====================================================== + @deprecated + def _get_v(self): + return self.vendor_flag + + @deprecated + def _set_v(self, v): + self.vendor_flag = v + + @deprecated + def _get_m(self): + return self.mandatory_flag + + @deprecated + def _set_m(self, m): + self.mandatory_flag = m + + @deprecated + def _get_p(self): + return self.protected_flag + + @deprecated + def _set_p(self, p): + self.protected_flag = p + + # ====================================================== + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.len = (ord(self.len[0]) << 16) | (ord(self.len[1]) << 8) | (ord(self.len[2])) + + if self.vendor_flag: + self.vendor = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:self.len - self.__hdr_len__] + else: + self.data = self.data[:self.len - self.__hdr_len__] + + def pack_hdr(self): + self.len = chr((self.len >> 16) & 0xff) + chr((self.len >> 8) & 0xff) + chr(self.len & 0xff) + data = dpkt.Packet.pack_hdr(self) + if self.vendor_flag: + data += struct.pack('>I', self.vendor) + return data + + def __len__(self): + length = self.__hdr_len__ + sum(map(len, self.data)) + if self.vendor_flag: + length += 4 + return length + + +__s = '\x01\x00\x00\x28\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x41\xc8\x00\x00\x00\x0c\x00\x00\x01\x08\x40\x00\x00\x0c\x68\x30\x30\x32\x00\x00\x01\x28\x40\x00\x00\x08' +__t = '\x01\x00\x00\x2c\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x41\xc8\x00\x00\x00\x0c\x00\x00\x01\x08\xc0\x00\x00\x10\xde\xad\xbe\xef\x68\x30\x30\x32\x00\x00\x01\x28\x40\x00\x00\x08' + + +def test_pack(): + d = Diameter(__s) + assert (__s == str(d)) + d = Diameter(__t) + assert (__t == str(d)) + + +def test_unpack(): + d = Diameter(__s) + assert (d.len == 40) + # assert (d.cmd == DEVICE_WATCHDOG_REQUEST) + assert (d.request_flag == 1) + assert (d.error_flag == 0) + assert (len(d.avps) == 2) + + avp = d.avps[0] + # assert (avp.code == ORIGIN_HOST) + assert (avp.mandatory_flag == 1) + assert (avp.vendor_flag == 0) + assert (avp.len == 12) + assert (len(avp) == 12) + assert (avp.data == '\x68\x30\x30\x32') + + # also test the optional vendor id support + d = Diameter(__t) + assert (d.len == 44) + avp = d.avps[0] + assert (avp.vendor_flag == 1) + assert (avp.len == 16) + assert (len(avp) == 16) + assert (avp.vendor == 3735928559) + assert (avp.data == '\x68\x30\x30\x32') + + +if __name__ == '__main__': + test_pack() + test_unpack() + print 'Tests Successful...' + diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/dns.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/dns.py new file mode 100644 index 00000000..d4d08e47 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/dns.py @@ -0,0 +1,462 @@ +# $Id: dns.py 27 2006-11-21 01:22:52Z dahelder $ +# -*- coding: utf-8 -*- +"""Domain Name System.""" + +import struct +import dpkt +from decorators import deprecated + +DNS_Q = 0 +DNS_R = 1 + +# Opcodes +DNS_QUERY = 0 +DNS_IQUERY = 1 +DNS_STATUS = 2 +DNS_NOTIFY = 4 +DNS_UPDATE = 5 + +# Flags +DNS_CD = 0x0010 # checking disabled +DNS_AD = 0x0020 # authenticated data +DNS_Z = 0x0040 # unused +DNS_RA = 0x0080 # recursion available +DNS_RD = 0x0100 # recursion desired +DNS_TC = 0x0200 # truncated +DNS_AA = 0x0400 # authoritative answer +DNS_QR = 0x8000 # response ( query / response ) + +# Response codes +DNS_RCODE_NOERR = 0 +DNS_RCODE_FORMERR = 1 +DNS_RCODE_SERVFAIL = 2 +DNS_RCODE_NXDOMAIN = 3 +DNS_RCODE_NOTIMP = 4 +DNS_RCODE_REFUSED = 5 +DNS_RCODE_YXDOMAIN = 6 +DNS_RCODE_YXRRSET = 7 +DNS_RCODE_NXRRSET = 8 +DNS_RCODE_NOTAUTH = 9 +DNS_RCODE_NOTZONE = 10 + +# RR types +DNS_A = 1 +DNS_NS = 2 +DNS_CNAME = 5 +DNS_SOA = 6 +DNS_PTR = 12 +DNS_HINFO = 13 +DNS_MX = 15 +DNS_TXT = 16 +DNS_AAAA = 28 +DNS_SRV = 33 + +# RR classes +DNS_IN = 1 +DNS_CHAOS = 3 +DNS_HESIOD = 4 +DNS_ANY = 255 + + +def pack_name(name, off, label_ptrs): + if name: + labels = name.split('.') + else: + labels = [] + labels.append('') + buf = '' + for i, label in enumerate(labels): + key = '.'.join(labels[i:]).upper() + ptr = label_ptrs.get(key) + if not ptr: + if len(key) > 1: + ptr = off + len(buf) + if ptr < 0xc000: + label_ptrs[key] = ptr + i = len(label) + buf += chr(i) + label + else: + buf += struct.pack('>H', (0xc000 | ptr)) + break + return buf + + +def unpack_name(buf, off): + name = '' + saved_off = 0 + for _ in range(100): # XXX + n = ord(buf[off]) + if n == 0: + off += 1 + break + elif (n & 0xc0) == 0xc0: + ptr = struct.unpack('>H', buf[off:off + 2])[0] & 0x3fff + off += 2 + if not saved_off: + saved_off = off + # XXX - don't use recursion!@#$ + name = name + unpack_name(buf, ptr)[0] + '.' + break + else: + off += 1 + name = name + buf[off:off + n] + '.' + if len(name) > 255: + raise dpkt.UnpackError('name longer than 255 bytes') + off += n + return name.strip('.'), off + + +class DNS(dpkt.Packet): + __hdr__ = ( + ('id', 'H', 0), + ('op', 'H', DNS_RD), # recursive query + # XXX - lists of query, RR objects + ('qd', 'H', []), + ('an', 'H', []), + ('ns', 'H', []), + ('ar', 'H', []) + ) + + @property + def qr(self): + return int((self.op & DNS_QR) == DNS_QR) + + @qr.setter + def qr(self, v): + if v: + self.op |= DNS_QR + else: + self.op &= ~DNS_QR + + @property + def opcode(self): + return (self.op >> 11) & 0xf + + @opcode.setter + def opcode(self, v): + self.op = (self.op & ~0x7800) | ((v & 0xf) << 11) + + @property + def aa(self): + return int((self.op & DNS_AA) == DNS_AA) + + @aa.setter + def aa(self, v): + if v: + self.op |= DNS_AA + else: + self.op &= ~DNS_AA + + @property + def rd(self): + return int((self.op & DNS_RD) == DNS_RD) + + @rd.setter + def rd(self, v): + if v: + self.op |= DNS_RD + else: + self.op &= ~DNS_RD + + @property + def ra(self): + return int((self.op & DNS_RA) == DNS_RA) + + @ra.setter + def ra(self, v): + if v: + self.op |= DNS_RA + else: + self.op &= ~DNS_RA + + @property + def zero(self): + return int((self.op & DNS_Z) == DNS_Z) + + @zero.setter + def zero(self, v): + if v: + self.op |= DNS_Z + else: + self.op &= ~DNS_Z + + @property + def rcode(self): + return self.op & 0xf + + @rcode.setter + def rcode(self, v): + self.op = (self.op & ~0xf) | (v & 0xf) + + # Deprecated methods, will be removed in the future + # ====================================================== + @deprecated + def get_qr(self): + return self.qr + + @deprecated + def set_qr(self, v): + self.qr = v + + @deprecated + def get_opcode(self): + return self.opcode + + @deprecated + def set_opcode(self, v): + self.opcode = v + + @deprecated + def get_aa(self): + return self.aa + + @deprecated + def set_aa(self, v): + self.aa = v + + @deprecated + def get_rd(self): + return self.rd + + @deprecated + def set_rd(self, v): + self.rd = v + + @deprecated + def get_ra(self): + return self.ra + + @deprecated + def set_ra(self, v): + self.ra = v + + @deprecated + def get_zero(self): + return self.zero + + @deprecated + def set_zero(self, v): + self.zero = v + + @deprecated + def get_rcode(self): + return self.rcode + + @deprecated + def set_rcode(self, v): + self.rcode = v + + # ====================================================== + + class Q(dpkt.Packet): + """DNS question.""" + __hdr__ = ( + ('name', '1025s', ''), + ('type', 'H', DNS_A), + ('cls', 'H', DNS_IN) + ) + + # XXX - suk + def __len__(self): + raise NotImplementedError + + __str__ = __len__ + + def unpack(self, buf): + raise NotImplementedError + + class RR(Q): + """DNS resource record.""" + __hdr__ = ( + ('name', '1025s', ''), + ('type', 'H', DNS_A), + ('cls', 'H', DNS_IN), + ('ttl', 'I', 0), + ('rlen', 'H', 4), + ('rdata', 's', '') + ) + + def pack_rdata(self, off, label_ptrs): + # XXX - yeah, this sux + if self.rdata: + return self.rdata + if self.type == DNS_A: + return self.ip + elif self.type == DNS_NS: + return pack_name(self.nsname, off, label_ptrs) + elif self.type == DNS_CNAME: + return pack_name(self.cname, off, label_ptrs) + elif self.type == DNS_PTR: + return pack_name(self.ptrname, off, label_ptrs) + elif self.type == DNS_SOA: + l = [] + l.append(pack_name(self.mname, off, label_ptrs)) + l.append(pack_name(self.rname, off + len(l[0]), label_ptrs)) + l.append(struct.pack('>IIIII', self.serial, self.refresh, + self.retry, self.expire, self.minimum)) + return ''.join(l) + elif self.type == DNS_MX: + return struct.pack('>H', self.preference) + \ + pack_name(self.mxname, off + 2, label_ptrs) + elif self.type == DNS_TXT or self.type == DNS_HINFO: + return ''.join(['%s%s' % (chr(len(x)), x) + for x in self.text]) + elif self.type == DNS_AAAA: + return self.ip6 + elif self.type == DNS_SRV: + return struct.pack('>HHH', self.priority, self.weight, self.port) + \ + pack_name(self.srvname, off + 6, label_ptrs) + + def unpack_rdata(self, buf, off): + if self.type == DNS_A: + self.ip = self.rdata + elif self.type == DNS_NS: + self.nsname, off = unpack_name(buf, off) + elif self.type == DNS_CNAME: + self.cname, off = unpack_name(buf, off) + elif self.type == DNS_PTR: + self.ptrname, off = unpack_name(buf, off) + elif self.type == DNS_SOA: + self.mname, off = unpack_name(buf, off) + self.rname, off = unpack_name(buf, off) + self.serial, self.refresh, self.retry, self.expire, \ + self.minimum = struct.unpack('>IIIII', buf[off:off + 20]) + elif self.type == DNS_MX: + self.preference = struct.unpack('>H', self.rdata[:2]) + self.mxname, off = unpack_name(buf, off + 2) + elif self.type == DNS_TXT or self.type == DNS_HINFO: + self.text = [] + buf = self.rdata + while buf: + n = ord(buf[0]) + self.text.append(buf[1:1 + n]) + buf = buf[1 + n:] + elif self.type == DNS_AAAA: + self.ip6 = self.rdata + elif self.type == DNS_SRV: + self.priority, self.weight, self.port = struct.unpack('>HHH', self.rdata[:6]) + self.srvname, off = unpack_name(buf, off + 6) + + def pack_q(self, buf, q): + """Append packed DNS question and return buf.""" + return buf + pack_name(q.name, len(buf), self.label_ptrs) + struct.pack('>HH', q.type, q.cls) + + def unpack_q(self, buf, off): + """Return DNS question and new offset.""" + q = self.Q() + q.name, off = unpack_name(buf, off) + q.type, q.cls = struct.unpack('>HH', buf[off:off + 4]) + off += 4 + return q, off + + def pack_rr(self, buf, rr): + """Append packed DNS RR and return buf.""" + name = pack_name(rr.name, len(buf), self.label_ptrs) + rdata = rr.pack_rdata(len(buf) + len(name) + 10, self.label_ptrs) + return buf + name + struct.pack('>HHIH', rr.type, rr.cls, rr.ttl, len(rdata)) + rdata + + def unpack_rr(self, buf, off): + """Return DNS RR and new offset.""" + rr = self.RR() + rr.name, off = unpack_name(buf, off) + rr.type, rr.cls, rr.ttl, rdlen = struct.unpack('>HHIH', buf[off:off + 10]) + off += 10 + rr.rdata = buf[off:off + rdlen] + rr.unpack_rdata(buf, off) + off += rdlen + return rr, off + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + off = self.__hdr_len__ + cnt = self.qd # FIXME: This relies on this being properly set somewhere else + self.qd = [] + for _ in range(cnt): + q, off = self.unpack_q(buf, off) + self.qd.append(q) + for x in ('an', 'ns', 'ar'): + cnt = getattr(self, x, 0) + setattr(self, x, []) + for _ in range(cnt): + rr, off = self.unpack_rr(buf, off) + getattr(self, x).append(rr) + self.data = '' + + def __len__(self): + # XXX - cop out + return len(str(self)) + + def __str__(self): + # XXX - compress names on the fly + self.label_ptrs = {} + buf = struct.pack(self.__hdr_fmt__, self.id, self.op, len(self.qd), + len(self.an), len(self.ns), len(self.ar)) + for q in self.qd: + buf = self.pack_q(buf, q) + for x in ('an', 'ns', 'ar'): + for rr in getattr(self, x): + buf = self.pack_rr(buf, rr) + del self.label_ptrs + return buf + + +def test_basic(): + from ip import IP + + s = 'E\x00\x02\x08\xc15\x00\x00\x80\x11\x92aBk0\x01Bk0w\x005\xc07\x01\xf4\xda\xc2d\xd2\x81\x80\x00\x01\x00\x03\x00\x0b\x00\x0b\x03www\x06google\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x05\x00\x01\x00\x00\x03V\x00\x17\x03www\x06google\x06akadns\x03net\x00\xc0,\x00\x01\x00\x01\x00\x00\x01\xa3\x00\x04@\xe9\xabh\xc0,\x00\x01\x00\x01\x00\x00\x01\xa3\x00\x04@\xe9\xabc\xc07\x00\x02\x00\x01\x00\x00KG\x00\x0c\x04usw5\x04akam\xc0>\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04usw6\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04usw7\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x08\x05asia3\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02za\xc07\xc07\x00\x02\x00\x01\x00\x00KG\x00\x0f\x02zc\x06akadns\x03org\x00\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02zf\xc07\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02zh\xc0\xd5\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04eur3\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04use2\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04use4\xc0t\xc0\xc1\x00\x01\x00\x01\x00\x00\xfb4\x00\x04\xd0\xb9\x84\xb0\xc0\xd2\x00\x01\x00\x01\x00\x001\x0c\x00\x04?\xf1\xc76\xc0\xed\x00\x01\x00\x01\x00\x00\xfb4\x00\x04?\xd7\xc6S\xc0\xfe\x00\x01\x00\x01\x00\x001\x0c\x00\x04?\xd00.\xc1\x0f\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04\xc1-\x01g\xc1"\x00\x01\x00\x01\x00\x00\x101\x00\x04?\xd1\xaa\x88\xc15\x00\x01\x00\x01\x00\x00\r\x1a\x00\x04PCC\xb6\xc0o\x00\x01\x00\x01\x00\x00\x10\x7f\x00\x04?\xf1I\xd6\xc0\x87\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04\xce\x84dl\xc0\x9a\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04A\xcb\xea\x1b\xc0\xad\x00\x01\x00\x01\x00\x00\x0b)\x00\x04\xc1l\x9a\t' + ip = IP(s) + my_dns = DNS(ip.udp.data) + assert my_dns.qd[0].name == 'www.google.com' and my_dns.an[1].name == 'www.google.akadns.net' + s = '\x05\xf5\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x03cnn\x03com\x00\x00\x01\x00\x01' + my_dns = DNS(s) + assert s == str(my_dns) + + +def test_PTR(): + s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' + my_dns = DNS(s) + assert my_dns.qd[0].name == '1.1.211.141.in-addr.arpa' and \ + my_dns.an[0].ptrname == 'default.v-umce-ifs.umnet.umich.edu' and \ + my_dns.ns[0].nsname == 'shabby.ifs.umich.edu' and \ + my_dns.ns[1].ttl == 3382L and \ + my_dns.ns[2].nsname == 'dns2.itd.umich.edu' + assert s == str(my_dns) + + +def test_pack_name(): + # Empty name is \0 + x = pack_name('', 0, {}) + assert x == '\0' + + +def test_deprecated_methods(): + """Test deprecated methods. Note: when they are removed so should this test""" + s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' + my_dns = DNS(s) + my_dns.get_aa() + my_dns.get_opcode() + qr = my_dns.get_qr() + my_dns.set_qr(qr) + qr2 = my_dns.get_qr() + assert qr == qr2 + + +def test_deprecated_method_performance(): + """Test the performance hit for the deprecation decorator""" + from timeit import Timer + + s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' + my_dns = DNS(s) + t1 = Timer(lambda: my_dns.aa).timeit(10000) + t2 = Timer(my_dns.get_aa).timeit(10000) + print 'Performance of dns.aa vs. dns.get_aa(): %f %f' % (t1, t2) + + +if __name__ == '__main__': + # Runs all the test associated with this class/file + test_basic() + test_PTR() + test_pack_name() + test_deprecated_methods() + test_deprecated_method_performance() + print 'Tests Successful...' diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/dpkt.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/dpkt.py new file mode 100644 index 00000000..0ed3780f --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/dpkt.py @@ -0,0 +1,176 @@ +# $Id: dpkt.py 43 2007-08-02 22:42:59Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Simple packet creation and parsing.""" + +import copy +import itertools +import socket +import struct +import array + + +class Error(Exception): pass + + +class UnpackError(Error): pass + + +class NeedData(UnpackError): pass + + +class PackError(Error): pass + + +class _MetaPacket(type): + def __new__(cls, clsname, clsbases, clsdict): + t = type.__new__(cls, clsname, clsbases, clsdict) + st = getattr(t, '__hdr__', None) + if st is not None: + # XXX - __slots__ only created in __new__() + clsdict['__slots__'] = [x[0] for x in st] + ['data'] + t = type.__new__(cls, clsname, clsbases, clsdict) + t.__hdr_fields__ = [x[0] for x in st] + t.__hdr_fmt__ = getattr(t, '__byte_order__', '>') + \ + ''.join([x[1] for x in st]) + t.__hdr_len__ = struct.calcsize(t.__hdr_fmt__) + t.__hdr_defaults__ = dict(zip( + t.__hdr_fields__, [x[2] for x in st])) + return t + + +class Packet(object): + """Base packet class, with metaclass magic to generate members from + self.__hdr__. + + __hdr__ should be defined as a list of (name, structfmt, default) tuples + __byte_order__ can be set to override the default ('>') + + Example:: + + >>> class Foo(Packet): + ... __hdr__ = (('foo', 'I', 1), ('bar', 'H', 2), ('baz', '4s', 'quux')) + ... + >>> foo = Foo(bar=3) + >>> foo + Foo(bar=3) + >>> str(foo) + '\x00\x00\x00\x01\x00\x03quux' + >>> foo.bar + 3 + >>> foo.baz + 'quux' + >>> foo.foo = 7 + >>> foo.baz = 'whee' + >>> foo + Foo(baz='whee', foo=7, bar=3) + >>> Foo('hello, world!') + Foo(baz=' wor', foo=1751477356L, bar=28460, data='ld!') + """ + __metaclass__ = _MetaPacket + + def __init__(self, *args, **kwargs): + """Packet constructor with ([buf], [field=val,...]) prototype. + + Arguments: + + buf -- optional packet buffer to unpack + + Optional keyword arguments correspond to members to set + (matching fields in self.__hdr__, or 'data'). + """ + self.data = '' + if args: + try: + self.unpack(args[0]) + except struct.error: + if len(args[0]) < self.__hdr_len__: + raise NeedData + raise UnpackError('invalid %s: %r' % + (self.__class__.__name__, args[0])) + else: + for k in self.__hdr_fields__: + setattr(self, k, copy.copy(self.__hdr_defaults__[k])) + for k, v in kwargs.iteritems(): + setattr(self, k, v) + + def __len__(self): + return self.__hdr_len__ + len(self.data) + + def __getitem__(self, k): + try: + return getattr(self, k) + except AttributeError: + raise KeyError + + def __repr__(self): + l = ['%s=%r' % (k, getattr(self, k)) + for k in self.__hdr_defaults__ + if getattr(self, k) != self.__hdr_defaults__[k]] + if self.data: + l.append('data=%r' % self.data) + return '%s(%s)' % (self.__class__.__name__, ', '.join(l)) + + def __str__(self): + return self.pack_hdr() + str(self.data) + + def pack_hdr(self): + """Return packed header string.""" + try: + return struct.pack(self.__hdr_fmt__, + *[getattr(self, k) for k in self.__hdr_fields__]) + except struct.error: + vals = [] + for k in self.__hdr_fields__: + v = getattr(self, k) + if isinstance(v, tuple): + vals.extend(v) + else: + vals.append(v) + try: + return struct.pack(self.__hdr_fmt__, *vals) + except struct.error, e: + raise PackError(str(e)) + + def pack(self): + """Return packed header + self.data string.""" + return str(self) + + def unpack(self, buf): + """Unpack packet header fields from buf, and set self.data.""" + for k, v in itertools.izip(self.__hdr_fields__, + struct.unpack(self.__hdr_fmt__, buf[:self.__hdr_len__])): + setattr(self, k, v) + self.data = buf[self.__hdr_len__:] + +# XXX - ''.join([(len(`chr(x)`)==3) and chr(x) or '.' for x in range(256)]) +__vis_filter = """................................ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[.]^_`abcdefghijklmnopqrstuvwxyz{|}~.................................................................................................................................""" + + +def hexdump(buf, length=16): + """Return a hexdump output string of the given buffer.""" + n = 0 + res = [] + while buf: + line, buf = buf[:length], buf[length:] + hexa = ' '.join(['%02x' % ord(x) for x in line]) + line = line.translate(__vis_filter) + res.append(' %04d: %-*s %s' % (n, length * 3, hexa, line)) + n += length + return '\n'.join(res) + +def in_cksum_add(s, buf): + n = len(buf) + cnt = (n / 2) * 2 + a = array.array('H', buf[:cnt]) + if cnt != n: + a.append(struct.unpack('H', buf[-1] + '\x00')[0]) + return s + sum(a) + +def in_cksum_done(s): + s = (s >> 16) + (s & 0xffff) + s += (s >> 16) + return socket.ntohs(~s & 0xffff) + +def in_cksum(buf): + """Return computed Internet checksum.""" + return in_cksum_done(in_cksum_add(0, buf)) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/dtp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/dtp.py new file mode 100644 index 00000000..9fc7ec9f --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/dtp.py @@ -0,0 +1,26 @@ +# $Id: dtp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Dynamic Trunking Protocol.""" + +import struct +import dpkt + + +class DTP(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 0), + ) # rest is TLVs + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = self.data + tvs = [] + while buf: + t, l = struct.unpack('>HH', buf[:4]) + v, buf = buf[4:4 + l], buf[4 + l:] + tvs.append((t, v)) + self.data = tvs + + +TRUNK_NAME = 0x01 +MAC_ADDR = 0x04 diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/esp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/esp.py new file mode 100644 index 00000000..94295d39 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/esp.py @@ -0,0 +1,12 @@ +# $Id: esp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Encapsulated Security Protocol.""" + +import dpkt + + +class ESP(dpkt.Packet): + __hdr__ = ( + ('spi', 'I', 0), + ('seq', 'I', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/ethernet.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ethernet.py new file mode 100644 index 00000000..d8d8700f --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ethernet.py @@ -0,0 +1,145 @@ +# $Id: ethernet.py 65 2010-03-26 02:53:51Z dugsong $ +# -*- coding: utf-8 -*- +"""Ethernet II, LLC (802.3+802.2), LLC/SNAP, and Novell raw 802.3, +with automatic 802.1q, MPLS, PPPoE, and Cisco ISL decapsulation.""" + +import struct +import dpkt +import stp + + +ETH_CRC_LEN = 4 +ETH_HDR_LEN = 14 + +ETH_LEN_MIN = 64 # minimum frame length with CRC +ETH_LEN_MAX = 1518 # maximum frame length with CRC + +ETH_MTU = (ETH_LEN_MAX - ETH_HDR_LEN - ETH_CRC_LEN) +ETH_MIN = (ETH_LEN_MIN - ETH_HDR_LEN - ETH_CRC_LEN) + +# Ethernet payload types - http://standards.ieee.org/regauth/ethertype +ETH_TYPE_PUP = 0x0200 # PUP protocol +ETH_TYPE_IP = 0x0800 # IP protocol +ETH_TYPE_ARP = 0x0806 # address resolution protocol +ETH_TYPE_AOE = 0x88a2 # AoE protocol +ETH_TYPE_CDP = 0x2000 # Cisco Discovery Protocol +ETH_TYPE_DTP = 0x2004 # Cisco Dynamic Trunking Protocol +ETH_TYPE_REVARP = 0x8035 # reverse addr resolution protocol +ETH_TYPE_8021Q = 0x8100 # IEEE 802.1Q VLAN tagging +ETH_TYPE_IPX = 0x8137 # Internetwork Packet Exchange +ETH_TYPE_IP6 = 0x86DD # IPv6 protocol +ETH_TYPE_PPP = 0x880B # PPP +ETH_TYPE_MPLS = 0x8847 # MPLS +ETH_TYPE_MPLS_MCAST = 0x8848 # MPLS Multicast +ETH_TYPE_PPPoE_DISC = 0x8863 # PPP Over Ethernet Discovery Stage +ETH_TYPE_PPPoE = 0x8864 # PPP Over Ethernet Session Stage +ETH_TYPE_LLDP = 0x88CC # Link Layer Discovery Protocol + +# MPLS label stack fields +MPLS_LABEL_MASK = 0xfffff000 +MPLS_QOS_MASK = 0x00000e00 +MPLS_TTL_MASK = 0x000000ff +MPLS_LABEL_SHIFT = 12 +MPLS_QOS_SHIFT = 9 +MPLS_TTL_SHIFT = 0 +MPLS_STACK_BOTTOM = 0x0100 + + +class Ethernet(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', ''), + ('src', '6s', ''), + ('type', 'H', ETH_TYPE_IP) + ) + _typesw = {} + + def _unpack_data(self, buf): + if self.type == ETH_TYPE_8021Q: + self.tag, self.type = struct.unpack('>HH', buf[:4]) + buf = buf[4:] + elif self.type == ETH_TYPE_MPLS or self.type == ETH_TYPE_MPLS_MCAST: + # XXX - skip labels (max # of labels is undefined, just use 24) + self.labels = [] + for i in range(24): + entry = struct.unpack('>I', buf[i * 4:i * 4 + 4])[0] + label = ((entry & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT, + (entry & MPLS_QOS_MASK) >> MPLS_QOS_SHIFT, + (entry & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT) + self.labels.append(label) + if entry & MPLS_STACK_BOTTOM: + break + self.type = ETH_TYPE_IP + buf = buf[(i + 1) * 4:] + try: + self.data = self._typesw[self.type](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.type > 1500: + # Ethernet II + self._unpack_data(self.data) + elif self.dst.startswith('\x01\x00\x0c\x00\x00') or \ + self.dst.startswith('\x03\x00\x0c\x00\x00'): + # Cisco ISL + self.vlan = struct.unpack('>H', self.data[6:8])[0] + self.unpack(self.data[12:]) + elif self.data.startswith('\xff\xff'): + # Novell "raw" 802.3 + self.type = ETH_TYPE_IPX + self.data = self.ipx = self._typesw[ETH_TYPE_IPX](self.data[2:]) + else: + # 802.2 LLC + self.dsap, self.ssap, self.ctl = struct.unpack('BBB', self.data[:3]) + if self.data.startswith('\xaa\xaa'): + # SNAP + self.type = struct.unpack('>H', self.data[6:8])[0] + self._unpack_data(self.data[8:]) + else: + # non-SNAP + dsap = ord(self.data[0]) + if dsap == 0x06: # SAP_IP + self.data = self.ip = self._typesw[ETH_TYPE_IP](self.data[3:]) + elif dsap == 0x10 or dsap == 0xe0: # SAP_NETWARE{1,2} + self.data = self.ipx = self._typesw[ETH_TYPE_IPX](self.data[3:]) + elif dsap == 0x42: # SAP_STP + self.data = self.stp = stp.STP(self.data[3:]) + + @classmethod + def set_type(cls, t, pktclass): + cls._typesw[t] = pktclass + + @classmethod + def get_type(cls, t): + return cls._typesw[t] + + +# XXX - auto-load Ethernet dispatch table from ETH_TYPE_* definitions +def __load_types(): + g = globals() + for k, v in g.iteritems(): + if k.startswith('ETH_TYPE_'): + name = k[9:] + modname = name.lower() + try: + mod = __import__(modname, g) + except ImportError: + continue + Ethernet.set_type(v, getattr(mod, name)) + + +if not Ethernet._typesw: + __load_types() + + +def test_eth(): # TODO recheck this test + s = '\x00\xb0\xd0\xe1\x80r\x00\x11$\x8c\x11\xde\x86\xdd`\x00\x00\x00\x00(\x06@\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x11$\xff\xfe\x8c\x11\xde\xfe\x80\x00\x00\x00\x00\x00\x00\x02\xb0\xd0\xff\xfe\xe1\x80r\xcd\xd3\x00\x16\xffP\xd7\x13\x00\x00\x00\x00\xa0\x02\xff\xffg\xd3\x00\x00\x02\x04\x05\xa0\x01\x03\x03\x00\x01\x01\x08\n}\x18:a\x00\x00\x00\x00' + # eth = Ethernet(s) # Variable eth is not used + Ethernet(s) + + +if __name__ == '__main__': + test_eth() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/gre.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/gre.py new file mode 100644 index 00000000..d61e56ff --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/gre.py @@ -0,0 +1,127 @@ +# $Id: gre.py 75 2010-08-03 14:42:19Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Generic Routing Encapsulation.""" + +import struct +import dpkt +from decorators import deprecated + +GRE_CP = 0x8000 # Checksum Present +GRE_RP = 0x4000 # Routing Present +GRE_KP = 0x2000 # Key Present +GRE_SP = 0x1000 # Sequence Present +GRE_SS = 0x0800 # Strict Source Route +GRE_AP = 0x0080 # Acknowledgment Present + +GRE_opt_fields = ( + (GRE_CP | GRE_RP, 'sum', 'H'), (GRE_CP | GRE_RP, 'off', 'H'), + (GRE_KP, 'key', 'I'), (GRE_SP, 'seq', 'I'), (GRE_AP, 'ack', 'I') +) + + +class GRE(dpkt.Packet): + __hdr__ = ( + ('flags', 'H', 0), + ('p', 'H', 0x0800), # ETH_TYPE_IP + ) + _protosw = {} + sre = () + + @property + def v(self): + return self.flags & 0x7 + + @v.setter + def v(self, v): + self.flags = (self.flags & ~0x7) | (v & 0x7) + + @property + def recur(self): + return (self.flags >> 5) & 0x7 + + @recur.setter + def recur(self, v): + self.flags = (self.flags & ~0xe0) | ((v & 0x7) << 5) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def get_v(self): return self.v + + @deprecated + def set_v(self, v): self.v = v + + @deprecated + def get_recur(self): return self.recur + + @deprecated + def set_recur(self, v): self.recur = v + # ================================================= + + + class SRE(dpkt.Packet): + __hdr__ = [ + ('family', 'H', 0), + ('off', 'B', 0), + ('len', 'B', 0) + ] + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len] + + def opt_fields_fmts(self): + if self.v == 0: + fields, fmts = [], [] + opt_fields = GRE_opt_fields + else: + fields, fmts = ['len', 'callid'], ['H', 'H'] + opt_fields = GRE_opt_fields[-2:] + for flags, field, fmt in opt_fields: + if self.flags & flags: + fields.append(field) + fmts.append(fmt) + return fields, fmts + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + fields, fmts = self.opt_fields_fmts() + if fields: + fmt = ''.join(fmts) + fmtlen = struct.calcsize(fmt) + vals = struct.unpack(fmt, self.data[:fmtlen]) + self.data = self.data[fmtlen:] + self.__dict__.update(dict(zip(fields, vals))) + if self.flags & GRE_RP: + l = [] + while True: + sre = self.SRE(self.data) + self.data = self.data[len(sre):] + l.append(sre) + if not sre.len: + break + self.sre = l + self.data = ethernet.Ethernet._typesw[self.p](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + + def __len__(self): + opt_fmtlen = struct.calcsize(''.join(self.opt_fields_fmts()[1])) + return self.__hdr_len__ + opt_fmtlen + sum(map(len, self.sre)) + len(self.data) + + # XXX - need to fix up repr to display optional fields... + + def __str__(self): + fields, fmts = self.opt_fields_fmts() + if fields: + vals = [] + for f in fields: + vals.append(getattr(self, f)) + opt_s = struct.pack(''.join(fmts), *vals) + else: + opt_s = '' + return self.pack_hdr() + opt_s + ''.join(map(str, self.sre)) + str(self.data) + +# XXX - auto-load GRE dispatch table from Ethernet dispatch table +import ethernet + +GRE._protosw.update(ethernet.Ethernet._typesw) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/gzip.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/gzip.py new file mode 100644 index 00000000..e41165b2 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/gzip.py @@ -0,0 +1,123 @@ +# $Id: gzip.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""GNU zip.""" + +import struct +import zlib +import dpkt + + +# RFC 1952 +GZIP_MAGIC = '\x1f\x8b' + +# Compression methods +GZIP_MSTORED = 0 +GZIP_MCOMPRESS = 1 +GZIP_MPACKED = 2 +GZIP_MLZHED = 3 +GZIP_MDEFLATE = 8 + +# Flags +GZIP_FTEXT = 0x01 +GZIP_FHCRC = 0x02 +GZIP_FEXTRA = 0x04 +GZIP_FNAME = 0x08 +GZIP_FCOMMENT = 0x10 +GZIP_FENCRYPT = 0x20 +GZIP_FRESERVED = 0xC0 + +# OS +GZIP_OS_MSDOS = 0 +GZIP_OS_AMIGA = 1 +GZIP_OS_VMS = 2 +GZIP_OS_UNIX = 3 +GZIP_OS_VMCMS = 4 +GZIP_OS_ATARI = 5 +GZIP_OS_OS2 = 6 +GZIP_OS_MACOS = 7 +GZIP_OS_ZSYSTEM = 8 +GZIP_OS_CPM = 9 +GZIP_OS_TOPS20 = 10 +GZIP_OS_WIN32 = 11 +GZIP_OS_QDOS = 12 +GZIP_OS_RISCOS = 13 +GZIP_OS_UNKNOWN = 255 + +GZIP_FENCRYPT_LEN = 12 + + +class GzipExtra(dpkt.Packet): + __hdr__ = ( + ('id', '2s', ''), + ('len', 'H', 0) + ) + + +class Gzip(dpkt.Packet): + __hdr__ = ( + ('magic', '2s', GZIP_MAGIC), + ('method', 'B', GZIP_MDEFLATE), + ('flags', 'B', 0), + ('mtime', 'I', 0), + ('xflags', 'B', 0), + ('os', 'B', GZIP_OS_UNIX), + + ('extra', '0s', ''), # XXX - GZIP_FEXTRA + ('filename', '0s', ''), # XXX - GZIP_FNAME + ('comment', '0s', '') # XXX - GZIP_FCOMMENT + ) + + def unpack(self, buf): + super(Gzip, self).unpack(buf) + if self.flags & GZIP_FEXTRA: + n = struct.unpack(self.data[:2], '>H')[0] + self.extra = GzipExtra(self.data[2:2 + n]) + self.data = self.data[2 + n:] + if self.flags & GZIP_FNAME: + n = self.data.find('\x00') + self.filename = self.data[:n] + self.data = self.data[n + 1:] + if self.flags & GZIP_FCOMMENT: + n = self.data.find('\x00') + self.comment = self.data[:n] + self.data = self.data[n + 1:] + if self.flags & GZIP_FENCRYPT: + self.data = self.data[GZIP_FENCRYPT_LEN:] # XXX - skip + if self.flags & GZIP_FHCRC: + self.data = self.data[2:] # XXX - skip + + def pack_hdr(self): + l = [] + if self.extra: + self.flags |= GZIP_FEXTRA + s = str(self.extra) + l.append(struct.pack('>H', len(s))) + l.append(s) + if self.filename: + self.flags |= GZIP_FNAME + l.append(self.filename) + l.append('\x00') + if self.comment: + self.flags |= GZIP_FCOMMENT + l.append(self.comment) + l.append('\x00') + l.insert(0, super(Gzip, self).pack_hdr()) + return ''.join(l) + + def compress(self): + """Compress self.data.""" + c = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS, + zlib.DEF_MEM_LEVEL, 0) + self.data = c.compress(self.data) + + def decompress(self): + """Return decompressed payload.""" + d = zlib.decompressobj(-zlib.MAX_WBITS) + return d.decompress(self.data) + + +if __name__ == '__main__': + import sys + + gz = Gzip(open(sys.argv[1]).read()) + print `gz`, `gz.decompress()` diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/h225.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/h225.py new file mode 100644 index 00000000..d8b2d51f --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/h225.py @@ -0,0 +1,213 @@ +# $Id: h225.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""ITU-T H.225.0 Call Signaling.""" + +import struct +import dpkt +import tpkt + + +# H225 Call Signaling +# +# Call messages and information elements (IEs) are defined by Q.931: +# http://cvsup.de.openbsd.org/historic/comp/doc/standards/itu/Q/Q.931.ps.gz +# +# The User-to-User IEs of H225 are encoded by PER of ASN.1. + +# Call Establishment Messages +ALERTING = 1 +CALL_PROCEEDING = 2 +CONNECT = 7 +CONNECT_ACKNOWLEDGE = 15 +PROGRESS = 3 +SETUP = 5 +SETUP_ACKNOWLEDGE = 13 + +# Call Information Phase Messages +RESUME = 38 +RESUME_ACKNOWLEDGE = 46 +RESUME_REJECT = 34 +SUSPEND = 37 +SUSPEND_ACKNOWLEDGE = 45 +SUSPEND_REJECT = 33 +USER_INFORMATION = 32 + +# Call Clearing Messages +DISCONNECT = 69 +RELEASE = 77 +RELEASE_COMPLETE = 90 +RESTART = 70 +RESTART_ACKNOWLEDGE = 78 + +# Miscellaneous Messages +SEGMENT = 96 +CONGESTION_CONTROL = 121 +INFORMATION = 123 +NOTIFY = 110 +STATUS = 125 +STATUS_ENQUIRY = 117 + +# Type 1 Single Octet Information Element IDs +RESERVED = 128 +SHIFT = 144 +CONGESTION_LEVEL = 176 +REPEAT_INDICATOR = 208 + +# Type 2 Single Octet Information Element IDs +MORE_DATA = 160 +SENDING_COMPLETE = 161 + +# Variable Length Information Element IDs +SEGMENTED_MESSAGE = 0 +BEARER_CAPABILITY = 4 +CAUSE = 8 +CALL_IDENTITY = 16 +CALL_STATE = 20 +CHANNEL_IDENTIFICATION = 24 +PROGRESS_INDICATOR = 30 +NETWORK_SPECIFIC_FACILITIES = 32 +NOTIFICATION_INDICATOR = 39 +DISPLAY = 40 +DATE_TIME = 41 +KEYPAD_FACILITY = 44 +SIGNAL = 52 +INFORMATION_RATE = 64 +END_TO_END_TRANSIT_DELAY = 66 +TRANSIT_DELAY_SELECTION_AND_INDICATION = 67 +PACKET_LAYER_BINARY_PARAMETERS = 68 +PACKET_LAYER_WINDOW_SIZE = 69 +PACKET_SIZE = 70 +CLOSED_USER_GROUP = 71 +REVERSE_CHARGE_INDICATION = 74 +CALLING_PARTY_NUMBER = 108 +CALLING_PARTY_SUBADDRESS = 109 +CALLED_PARTY_NUMBER = 112 +CALLED_PARTY_SUBADDRESS = 113 +REDIRECTING_NUMBER = 116 +TRANSIT_NETWORK_SELECTION = 120 +RESTART_INDICATOR = 121 +LOW_LAYER_COMPATIBILITY = 124 +HIGH_LAYER_COMPATIBILITY = 125 +USER_TO_USER = 126 +ESCAPE_FOR_EXTENSION = 127 + + +class H225(dpkt.Packet): + __hdr__ = ( + ('proto', 'B', 8), + ('ref_len', 'B', 2) + ) + + def unpack(self, buf): + # TPKT header + self.tpkt = tpkt.TPKT(buf) + if self.tpkt.v != 3: + raise dpkt.UnpackError('invalid TPKT version') + if self.tpkt.rsvd != 0: + raise dpkt.UnpackError('invalid TPKT reserved value') + n = self.tpkt.len - self.tpkt.__hdr_len__ + if n > len(self.tpkt.data): + raise dpkt.UnpackError('invalid TPKT length') + buf = self.tpkt.data + + # Q.931 payload + dpkt.Packet.unpack(self, buf) + buf = buf[self.__hdr_len__:] + self.ref_val = buf[:self.ref_len] + buf = buf[self.ref_len:] + self.type = struct.unpack('B', buf[:1])[0] + buf = buf[1:] + + # Information Elements + l = [] + while buf: + ie = self.IE(buf) + l.append(ie) + buf = buf[len(ie):] + self.data = l + + def __len__(self): + return self.tpkt.__hdr_len__ + self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + return self.tpkt.pack_hdr() + self.pack_hdr() + self.ref_val + \ + struct.pack('B', self.type) + ''.join(map(str, self.data)) + + class IE(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = buf[self.__hdr_len__:] + + # single-byte IE + if self.type & 0x80: + self.len = 0 + self.data = None + # multi-byte IE + else: + # special PER-encoded UUIE + if self.type == USER_TO_USER: + self.len = struct.unpack('>H', buf[:2])[0] + buf = buf[2:] + # normal TLV-like IE + else: + self.len = struct.unpack('B', buf[:1])[0] + buf = buf[1:] + self.data = buf[:self.len] + + def __len__(self): + if self.type & 0x80: + n = 0 + else: + if self.type == USER_TO_USER: + n = 2 + else: + n = 1 + return self.__hdr_len__ + self.len + n + + def __str__(self): + if self.type & 0x80: + length_str = None + else: + if self.type == USER_TO_USER: + length_str = struct.pack('>H', self.len) + else: + length_str = struct.pack('B', self.len) + return struct.pack('B', self.type) + length_str + self.data + + +__s = '\x03\x00\x04\x11\x08\x02\x54\x2b\x05\x04\x03\x88\x93\xa5\x28\x0e\x4a\x6f\x6e\x20\x4f\x62\x65\x72\x68\x65\x69\x64\x65\x00\x7e\x03\xf0\x05\x20\xb8\x06\x00\x08\x91\x4a\x00\x04\x01\x40\x0c\x00\x4a\x00\x6f\x00\x6e\x00\x20\x00\x4f\x00\x62\x00\x65\x00\x72\x00\x68\x00\x65\x00\x69\x00\x64\x00\x65\x22\xc0\x09\x00\x00\x3d\x06\x65\x6b\x69\x67\x61\x00\x00\x14\x32\x2e\x30\x2e\x32\x20\x28\x4f\x50\x41\x4c\x20\x76\x32\x2e\x32\x2e\x32\x29\x00\x00\x00\x01\x40\x15\x00\x74\x00\x63\x00\x70\x00\x24\x00\x68\x00\x33\x00\x32\x00\x33\x00\x2e\x00\x76\x00\x6f\x00\x78\x00\x67\x00\x72\x00\x61\x00\x74\x00\x69\x00\x61\x00\x2e\x00\x6f\x00\x72\x00\x67\x00\x42\x87\x23\x2c\x06\xb8\x00\x6a\x8b\x1d\x0c\xb7\x06\xdb\x11\x9e\xca\x00\x10\xa4\x89\x6d\x6a\x00\xc5\x1d\x80\x04\x07\x00\x0a\x00\x01\x7a\x75\x30\x11\x00\x5e\x88\x1d\x0c\xb7\x06\xdb\x11\x9e\xca\x00\x10\xa4\x89\x6d\x6a\x82\x2b\x0e\x30\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x26\x00\x00\x64\x0c\x10\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x2a\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x20\x00\x00\x65\x0c\x10\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x20\x40\x00\x00\x06\x04\x01\x00\x4e\x0c\x03\x00\x83\x00\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x16\x00\x00\x66\x0e\x0c\x03\x00\x83\x00\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x4b\x40\x00\x00\x06\x04\x01\x00\x4c\x10\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x41\x00\x00\x67\x0c\x10\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x32\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x28\x00\x00\x68\x0c\x10\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x1d\x40\x00\x00\x06\x04\x01\x00\x4c\x60\x1d\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x13\x00\x00\x69\x0c\x60\x1d\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x1d\x40\x00\x00\x06\x04\x01\x00\x4c\x20\x1d\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x13\x00\x00\x6a\x0c\x20\x1d\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x01\x00\x01\x00\x01\x00\x01\x00\x81\x03\x02\x80\xf8\x02\x70\x01\x06\x00\x08\x81\x75\x00\x0b\x80\x13\x80\x01\xf4\x00\x01\x00\x00\x01\x00\x00\x01\x00\x00\x0c\xc0\x01\x00\x01\x80\x0b\x80\x00\x00\x20\x20\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x00\x01\x20\x20\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x00\x02\x24\x18\x03\x00\xe6\x00\x80\x00\x03\x20\x20\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x00\x04\x20\x20\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x00\x05\x20\xc0\xef\x80\x00\x06\x20\x40\xef\x80\x00\x07\x08\xe0\x03\x51\x00\x80\x01\x00\x80\x00\x08\x08\xd0\x03\x51\x00\x80\x01\x00\x80\x00\x09\x83\x01\x50\x80\x00\x0a\x83\x01\x10\x80\x00\x0b\x83\x01\x40\x00\x80\x01\x03\x06\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x01\x00\x07\x00\x08\x00\x00\x09\x01\x00\x0a\x00\x0b\x07\x01\x00\x32\x80\xa6\xff\x4c\x02\x80\x01\x80' + + +def test_pack(): + h = H225(__s) + assert (__s == str(h)) + + +def test_unpack(): + h = H225(__s) + assert (h.tpkt.v == 3) + assert (h.tpkt.rsvd == 0) + assert (h.tpkt.len == 1041) + assert (h.proto == 8) + assert (h.type == SETUP) + assert (len(h.data) == 3) + + ie = h.data[0] + assert (ie.type == BEARER_CAPABILITY) + assert (ie.len == 3) + ie = h.data[1] + assert (ie.type == DISPLAY) + assert (ie.len == 14) + ie = h.data[2] + assert (ie.type == USER_TO_USER) + assert (ie.len == 1008) + + +if __name__ == '__main__': + test_pack() + test_unpack() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/hsrp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/hsrp.py new file mode 100644 index 00000000..7581d3e4 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/hsrp.py @@ -0,0 +1,33 @@ +# $Id: hsrp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Cisco Hot Standby Router Protocol.""" + +import dpkt + +# Opcodes +HELLO = 0 +COUP = 1 +RESIGN = 2 + +# States +INITIAL = 0x00 +LEARN = 0x01 +LISTEN = 0x02 +SPEAK = 0x04 +STANDBY = 0x08 +ACTIVE = 0x10 + + +class HSRP(dpkt.Packet): + __hdr__ = ( + ('version', 'B', 0), + ('opcode', 'B', 0), + ('state', 'B', 0), + ('hello', 'B', 0), + ('hold', 'B', 0), + ('priority', 'B', 0), + ('group', 'B', 0), + ('rsvd', 'B', 0), + ('auth', '8s', 'cisco'), + ('vip', '4s', '') + ) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/http.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/http.py new file mode 100644 index 00000000..59759ac6 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/http.py @@ -0,0 +1,259 @@ +# $Id: http.py 86 2013-03-05 19:25:19Z andrewflnr@gmail.com $ +# -*- coding: utf-8 -*- +"""Hypertext Transfer Protocol.""" + +import cStringIO +import dpkt + + +def parse_headers(f): + """Return dict of HTTP headers parsed from a file object.""" + d = {} + while 1: + line = f.readline() + if not line: + raise dpkt.NeedData('premature end of headers') + line = line.strip() + if not line: + break + l = line.split(':', 1) + if len(l[0].split()) != 1: + raise dpkt.UnpackError('invalid header: %r' % line) + k = l[0].lower() + v = len(l) != 1 and l[1].lstrip() or '' + if k in d: + if not type(d[k]) is list: + d[k] = [d[k]] + d[k].append(v) + else: + d[k] = v + return d + + +def parse_body(f, headers): + """Return HTTP body parsed from a file object, given HTTP header dict.""" + if headers.get('transfer-encoding', '').lower() == 'chunked': + l = [] + found_end = False + while 1: + try: + sz = f.readline().split(None, 1)[0] + except IndexError: + raise dpkt.UnpackError('missing chunk size') + n = int(sz, 16) + if n == 0: + found_end = True + buf = f.read(n) + if f.readline().strip(): + break + if n and len(buf) == n: + l.append(buf) + else: + break + if not found_end: + raise dpkt.NeedData('premature end of chunked body') + body = ''.join(l) + elif 'content-length' in headers: + n = int(headers['content-length']) + body = f.read(n) + if len(body) != n: + raise dpkt.NeedData('short body (missing %d bytes)' % (n - len(body))) + elif 'content-type' in headers: + body = f.read() + else: + # XXX - need to handle HTTP/0.9 + body = '' + return body + + +class Message(dpkt.Packet): + """Hypertext Transfer Protocol headers + body.""" + __metaclass__ = type + __hdr_defaults__ = {} + headers = None + body = None + + def __init__(self, *args, **kwargs): + if args: + self.unpack(args[0]) + else: + self.headers = {} + self.body = '' + for k, v in self.__hdr_defaults__.iteritems(): + setattr(self, k, v) + for k, v in kwargs.iteritems(): + setattr(self, k, v) + + def unpack(self, buf): + f = cStringIO.StringIO(buf) + # Parse headers + self.headers = parse_headers(f) + # Parse body + self.body = parse_body(f, self.headers) + # Save the rest + self.data = f.read() + + def pack_hdr(self): + return ''.join(['%s: %s\r\n' % t for t in self.headers.iteritems()]) + + def __len__(self): + return len(str(self)) + + def __str__(self): + return '%s\r\n%s' % (self.pack_hdr(), self.body) + + +class Request(Message): + """Hypertext Transfer Protocol Request.""" + __hdr_defaults__ = { + 'method': 'GET', + 'uri': '/', + 'version': '1.0', + } + __methods = dict.fromkeys(( + 'GET', 'PUT', 'ICY', + 'COPY', 'HEAD', 'LOCK', 'MOVE', 'POLL', 'POST', + 'BCOPY', 'BMOVE', 'MKCOL', 'TRACE', 'LABEL', 'MERGE', + 'DELETE', 'SEARCH', 'UNLOCK', 'REPORT', 'UPDATE', 'NOTIFY', + 'BDELETE', 'CONNECT', 'OPTIONS', 'CHECKIN', + 'PROPFIND', 'CHECKOUT', 'CCM_POST', + 'SUBSCRIBE', 'PROPPATCH', 'BPROPFIND', + 'BPROPPATCH', 'UNCHECKOUT', 'MKACTIVITY', + 'MKWORKSPACE', 'UNSUBSCRIBE', 'RPC_CONNECT', + 'VERSION-CONTROL', + 'BASELINE-CONTROL' + )) + __proto = 'HTTP' + + def unpack(self, buf): + f = cStringIO.StringIO(buf) + line = f.readline() + l = line.strip().split() + if len(l) < 2: + raise dpkt.UnpackError('invalid request: %r' % line) + if l[0] not in self.__methods: + raise dpkt.UnpackError('invalid http method: %r' % l[0]) + if len(l) == 2: + # HTTP/0.9 does not specify a version in the request line + self.version = '0.9' + else: + if not l[2].startswith(self.__proto): + raise dpkt.UnpackError('invalid http version: %r' % l[2]) + self.version = l[2][len(self.__proto) + 1:] + self.method = l[0] + self.uri = l[1] + Message.unpack(self, f.read()) + + def __str__(self): + return '%s %s %s/%s\r\n' % (self.method, self.uri, self.__proto, + self.version) + Message.__str__(self) + + +class Response(Message): + """Hypertext Transfer Protocol Response.""" + __hdr_defaults__ = { + 'version': '1.0', + 'status': '200', + 'reason': 'OK' + } + __proto = 'HTTP' + + def unpack(self, buf): + f = cStringIO.StringIO(buf) + line = f.readline() + l = line.strip().split(None, 2) + if len(l) < 2 or not l[0].startswith(self.__proto) or not l[1].isdigit(): + raise dpkt.UnpackError('invalid response: %r' % line) + self.version = l[0][len(self.__proto) + 1:] + self.status = l[1] + self.reason = l[2] if len(l) > 2 else '' + Message.unpack(self, f.read()) + + def __str__(self): + return '%s/%s %s %s\r\n' % (self.__proto, self.version, self.status, + self.reason) + Message.__str__(self) + + +def test_parse_request(): + s = """POST /main/redirect/ab/1,295,,00.html HTTP/1.0\r\nReferer: http://www.email.com/login/snap/login.jhtml\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.75 [en] (X11; U; OpenBSD 2.8 i386; Nav)\r\nHost: ltd.snap.com\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: 61\r\n\r\nsn=em&mn=dtest4&pw=this+is+atest&fr=true&login=Sign+in&od=www""" + r = Request(s) + assert r.method == 'POST' + assert r.uri == '/main/redirect/ab/1,295,,00.html' + assert r.body == 'sn=em&mn=dtest4&pw=this+is+atest&fr=true&login=Sign+in&od=www' + assert r.headers['content-type'] == 'application/x-www-form-urlencoded' + try: + Request(s[:60]) + assert 'invalid headers parsed!' + except dpkt.UnpackError: + pass + + +def test_format_request(): + r = Request() + assert str(r) == 'GET / HTTP/1.0\r\n\r\n' + r.method = 'POST' + r.uri = '/foo/bar/baz.html' + r.headers['content-type'] = 'text/plain' + r.headers['content-length'] = '5' + r.body = 'hello' + s = str(r) + assert s.startswith('POST /foo/bar/baz.html HTTP/1.0\r\n') + assert s.endswith('\r\n\r\nhello') + assert '\r\ncontent-length: 5\r\n' in s + assert '\r\ncontent-type: text/plain\r\n' in s + r = Request(str(r)) + assert str(r) == s + + +def test_chunked_response(): + s = """HTTP/1.1 200 OK\r\nCache-control: no-cache\r\nPragma: no-cache\r\nContent-Type: text/javascript; charset=utf-8\r\nContent-Encoding: gzip\r\nTransfer-Encoding: chunked\r\nSet-Cookie: S=gmail=agg:gmail_yj=v2s:gmproxy=JkU; Domain=.google.com; Path=/\r\nServer: GFE/1.3\r\nDate: Mon, 12 Dec 2005 22:33:23 GMT\r\n\r\na\r\n\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\r\n152\r\nm\x91MO\xc4 \x10\x86\xef\xfe\n\x82\xc9\x9eXJK\xe9\xb6\xee\xc1\xe8\x1e6\x9e4\xf1\xe0a5\x86R\xda\x12Yh\x80\xba\xfa\xef\x85\xee\x1a/\xf21\x99\x0c\xef0<\xc3\x81\xa0\xc3\x01\xe6\x10\xc1<\xa7eYT5\xa1\xa4\xac\xe1\xdb\x15:\xa4\x9d\x0c\xfa5K\x00\xf6.\xaa\xeb\x86\xd5y\xcdHY\x954\x8e\xbc*h\x8c\x8e!L7Y\xe6\'\xeb\x82WZ\xcf>8\x1ed\x87\x851X\xd8c\xe6\xbc\x17Z\x89\x8f\xac \x84e\xde\n!]\x96\x17i\xb5\x02{{\xc2z0\x1e\x0f#7\x9cw3v\x992\x9d\xfc\xc2c8\xea[/EP\xd6\xbc\xce\x84\xd0\xce\xab\xf7`\'\x1f\xacS\xd2\xc7\xd2\xfb\x94\x02N\xdc\x04\x0f\xee\xba\x19X\x03TtW\xd7\xb4\xd9\x92\n\xbcX\xa7;\xb0\x9b\'\x10$?F\xfd\xf3CzPt\x8aU\xef\xb8\xc8\x8b-\x18\xed\xec<\xe0\x83\x85\x08!\xf8"[\xb0\xd3j\x82h\x93\xb8\xcf\xd8\x9b\xba\xda\xd0\x92\x14\xa4a\rc\reM\xfd\x87=X;h\xd9j;\xe0db\x17\xc2\x02\xbd\xb0F\xc2in#\xfb:\xb6\xc4x\x15\xd6\x9f\x8a\xaf\xcf)\x0b^\xbc\xe7i\x11\x80\x8b\x00D\x01\xd8/\x82x\xf6\xd8\xf7J(\xae/\x11p\x1f+\xc4p\t:\xfe\xfd\xdf\xa3Y\xfa\xae4\x7f\x00\xc5\xa5\x95\xa1\xe2\x01\x00\x00\r\n0\r\n\r\n""" + r = Response(s) + assert r.version == '1.1' + assert r.status == '200' + assert r.reason == 'OK' + + +def test_multicookie_response(): + s = """HTTP/1.x 200 OK\r\nSet-Cookie: first_cookie=cookie1; path=/; domain=.example.com\r\nSet-Cookie: second_cookie=cookie2; path=/; domain=.example.com\r\nContent-Length: 0\r\n\r\n""" + r = Response(s) + assert type(r.headers['set-cookie']) is list + assert len(r.headers['set-cookie']) == 2 + + +def test_noreason_response(): + s = """HTTP/1.1 200 \r\n\r\n""" + r = Response(s) + assert r.reason == '' + assert str(r) == s + + +def test_request_version(): + s = """GET / HTTP/1.0\r\n\r\n""" + r = Request(s) + assert r.method == 'GET' + assert r.uri == '/' + assert r.version == '1.0' + + s = """GET /\r\n\r\n""" + r = Request(s) + assert r.method == 'GET' + assert r.uri == '/' + assert r.version == '0.9' + + s = """GET / CHEESE/1.0\r\n\r\n""" + try: + Request(s) + assert "invalid protocol version parsed!" + except: + pass + + +if __name__ == '__main__': + # Runs all the test associated with this class/file + test_parse_request() + test_format_request() + test_chunked_response() + test_multicookie_response() + test_noreason_response() + test_request_version() + print 'Tests Successful...' diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/icmp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/icmp.py new file mode 100644 index 00000000..12e73728 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/icmp.py @@ -0,0 +1,127 @@ +# $Id: icmp.py 45 2007-08-03 00:05:22Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Internet Control Message Protocol.""" + +import dpkt +import ip + +# Types (icmp_type) and codes (icmp_code) - +# http://www.iana.org/assignments/icmp-parameters + +ICMP_CODE_NONE = 0 # for types without codes +ICMP_ECHOREPLY = 0 # echo reply +ICMP_UNREACH = 3 # dest unreachable, codes: +ICMP_UNREACH_NET = 0 # bad net +ICMP_UNREACH_HOST = 1 # bad host +ICMP_UNREACH_PROTO = 2 # bad protocol +ICMP_UNREACH_PORT = 3 # bad port +ICMP_UNREACH_NEEDFRAG = 4 # IP_DF caused drop +ICMP_UNREACH_SRCFAIL = 5 # src route failed +ICMP_UNREACH_NET_UNKNOWN = 6 # unknown net +ICMP_UNREACH_HOST_UNKNOWN = 7 # unknown host +ICMP_UNREACH_ISOLATED = 8 # src host isolated +ICMP_UNREACH_NET_PROHIB = 9 # for crypto devs +ICMP_UNREACH_HOST_PROHIB = 10 # ditto +ICMP_UNREACH_TOSNET = 11 # bad tos for net +ICMP_UNREACH_TOSHOST = 12 # bad tos for host +ICMP_UNREACH_FILTER_PROHIB = 13 # prohibited access +ICMP_UNREACH_HOST_PRECEDENCE = 14 # precedence error +ICMP_UNREACH_PRECEDENCE_CUTOFF = 15 # precedence cutoff +ICMP_SRCQUENCH = 4 # packet lost, slow down +ICMP_REDIRECT = 5 # shorter route, codes: +ICMP_REDIRECT_NET = 0 # for network +ICMP_REDIRECT_HOST = 1 # for host +ICMP_REDIRECT_TOSNET = 2 # for tos and net +ICMP_REDIRECT_TOSHOST = 3 # for tos and host +ICMP_ALTHOSTADDR = 6 # alternate host address +ICMP_ECHO = 8 # echo service +ICMP_RTRADVERT = 9 # router advertise, codes: +ICMP_RTRADVERT_NORMAL = 0 # normal +ICMP_RTRADVERT_NOROUTE_COMMON = 16 # selective routing +ICMP_RTRSOLICIT = 10 # router solicitation +ICMP_TIMEXCEED = 11 # time exceeded, code: +ICMP_TIMEXCEED_INTRANS = 0 # ttl==0 in transit +ICMP_TIMEXCEED_REASS = 1 # ttl==0 in reass +ICMP_PARAMPROB = 12 # ip header bad +ICMP_PARAMPROB_ERRATPTR = 0 # req. opt. absent +ICMP_PARAMPROB_OPTABSENT = 1 # req. opt. absent +ICMP_PARAMPROB_LENGTH = 2 # bad length +ICMP_TSTAMP = 13 # timestamp request +ICMP_TSTAMPREPLY = 14 # timestamp reply +ICMP_INFO = 15 # information request +ICMP_INFOREPLY = 16 # information reply +ICMP_MASK = 17 # address mask request +ICMP_MASKREPLY = 18 # address mask reply +ICMP_TRACEROUTE = 30 # traceroute +ICMP_DATACONVERR = 31 # data conversion error +ICMP_MOBILE_REDIRECT = 32 # mobile host redirect +ICMP_IP6_WHEREAREYOU = 33 # IPv6 where-are-you +ICMP_IP6_IAMHERE = 34 # IPv6 i-am-here +ICMP_MOBILE_REG = 35 # mobile registration req +ICMP_MOBILE_REGREPLY = 36 # mobile registration reply +ICMP_DNS = 37 # domain name request +ICMP_DNSREPLY = 38 # domain name reply +ICMP_SKIP = 39 # SKIP +ICMP_PHOTURIS = 40 # Photuris +ICMP_PHOTURIS_UNKNOWN_INDEX = 0 # unknown sec index +ICMP_PHOTURIS_AUTH_FAILED = 1 # auth failed +ICMP_PHOTURIS_DECOMPRESS_FAILED = 2 # decompress failed +ICMP_PHOTURIS_DECRYPT_FAILED = 3 # decrypt failed +ICMP_PHOTURIS_NEED_AUTHN = 4 # no authentication +ICMP_PHOTURIS_NEED_AUTHZ = 5 # no authorization +ICMP_TYPE_MAX = 40 + + +class ICMP(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 8), + ('code', 'B', 0), + ('sum', 'H', 0) + ) + + class Echo(dpkt.Packet): + __hdr__ = (('id', 'H', 0), ('seq', 'H', 0)) + + class Quote(dpkt.Packet): + __hdr__ = (('pad', 'I', 0),) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.ip = ip.IP(self.data) + + class Unreach(Quote): + __hdr__ = (('pad', 'H', 0), ('mtu', 'H', 0)) + + class Quench(Quote): pass + + class Redirect(Quote): + __hdr__ = (('gw', 'I', 0),) + + class ParamProbe(Quote): + __hdr__ = (('ptr', 'B', 0), ('pad1', 'B', 0), ('pad2', 'H', 0)) + + class TimeExceed(Quote): pass + + _typesw = {0: Echo, 3: Unreach, 4: Quench, 5: Redirect, 8: Echo, 11: TimeExceed} + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._typesw[self.type](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + pass + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) + + +def test_icmp(): + s = '\x03\x0a\x6b\x19\x00\x00\x00\x00\x45\x00\x00\x28\x94\x1f\x00\x00\xe3\x06\x99\xb4\x23\x2b\x24\x00\xde\x8e\x84\x42\xab\xd1\x00\x50\x00\x35\xe1\x29\x20\xd9\x00\x00\x00\x22\x9b\xf0\xe2\x04\x65\x6b' + assert (str(ICMP(s)) == s) + +if __name__ == '__main__': + test_icmp() + print 'Tests Successful...' diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/icmp6.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/icmp6.py new file mode 100644 index 00000000..679bc6b4 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/icmp6.py @@ -0,0 +1,77 @@ +# $Id: icmp6.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Internet Control Message Protocol for IPv6.""" + +import dpkt +import ip6 + +ICMP6_DST_UNREACH = 1 # dest unreachable, codes: +ICMP6_PACKET_TOO_BIG = 2 # packet too big +ICMP6_TIME_EXCEEDED = 3 # time exceeded, code: +ICMP6_PARAM_PROB = 4 # ip6 header bad + +ICMP6_ECHO_REQUEST = 128 # echo service +ICMP6_ECHO_REPLY = 129 # echo reply +MLD_LISTENER_QUERY = 130 # multicast listener query +MLD_LISTENER_REPORT = 131 # multicast listener report +MLD_LISTENER_DONE = 132 # multicast listener done + +# RFC2292 decls +ICMP6_MEMBERSHIP_QUERY = 130 # group membership query +ICMP6_MEMBERSHIP_REPORT = 131 # group membership report +ICMP6_MEMBERSHIP_REDUCTION = 132 # group membership termination + +ND_ROUTER_SOLICIT = 133 # router solicitation +ND_ROUTER_ADVERT = 134 # router advertisment +ND_NEIGHBOR_SOLICIT = 135 # neighbor solicitation +ND_NEIGHBOR_ADVERT = 136 # neighbor advertisment +ND_REDIRECT = 137 # redirect + +ICMP6_ROUTER_RENUMBERING = 138 # router renumbering + +ICMP6_WRUREQUEST = 139 # who are you request +ICMP6_WRUREPLY = 140 # who are you reply +ICMP6_FQDN_QUERY = 139 # FQDN query +ICMP6_FQDN_REPLY = 140 # FQDN reply +ICMP6_NI_QUERY = 139 # node information request +ICMP6_NI_REPLY = 140 # node information reply + +ICMP6_MAXTYPE = 201 + + +class ICMP6(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('code', 'B', 0), + ('sum', 'H', 0) + ) + + class Error(dpkt.Packet): + __hdr__ = (('pad', 'I', 0), ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.ip6 = ip6.IP6(self.data) + + class Unreach(Error): pass + + class TooBig(Error): + __hdr__ = (('mtu', 'I', 1232), ) + + class TimeExceed(Error): pass + + class ParamProb(Error): + __hdr__ = (('ptr', 'I', 0), ) + + class Echo(dpkt.Packet): + __hdr__ = (('id', 'H', 0), ('seq', 'H', 0)) + + _typesw = {1: Unreach, 2: TooBig, 3: TimeExceed, 4: ParamProb, 128: Echo, 129: Echo} + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._typesw[self.type](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/ieee80211.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ieee80211.py new file mode 100644 index 00000000..e18833fb --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ieee80211.py @@ -0,0 +1,875 @@ +# $Id: 80211.py 53 2008-12-18 01:22:57Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""IEEE 802.11.""" + +import socket +import struct +import dpkt +from decorators import deprecated + +# Frame Types +MGMT_TYPE = 0 +CTL_TYPE = 1 +DATA_TYPE = 2 + +# Frame Sub-Types +M_ASSOC_REQ = 0 +M_ASSOC_RESP = 1 +M_REASSOC_REQ = 2 +M_REASSOC_RESP = 3 +M_PROBE_REQ = 4 +M_PROBE_RESP = 5 +M_BEACON = 8 +M_ATIM = 9 +M_DISASSOC = 10 +M_AUTH = 11 +M_DEAUTH = 12 +M_ACTION = 13 +C_BLOCK_ACK_REQ = 8 +C_BLOCK_ACK = 9 +C_PS_POLL = 10 +C_RTS = 11 +C_CTS = 12 +C_ACK = 13 +C_CF_END = 14 +C_CF_END_ACK = 15 +D_DATA = 0 +D_DATA_CF_ACK = 1 +D_DATA_CF_POLL = 2 +D_DATA_CF_ACK_POLL = 3 +D_NULL = 4 +D_CF_ACK = 5 +D_CF_POLL = 6 +D_CF_ACK_POLL = 7 +D_QOS_DATA = 8 +D_QOS_CF_ACK = 9 +D_QOS_CF_POLL = 10 +D_QOS_CF_ACK_POLL = 11 +D_QOS_NULL = 12 +D_QOS_CF_POLL_EMPTY = 14 + +TO_DS_FLAG = 10 +FROM_DS_FLAG = 1 +INTER_DS_FLAG = 11 + +# Bitshifts for Frame Control +_VERSION_MASK = 0x0300 +_TYPE_MASK = 0x0c00 +_SUBTYPE_MASK = 0xf000 +_TO_DS_MASK = 0x0001 +_FROM_DS_MASK = 0x0002 +_MORE_FRAG_MASK = 0x0004 +_RETRY_MASK = 0x0008 +_PWR_MGT_MASK = 0x0010 +_MORE_DATA_MASK = 0x0020 +_WEP_MASK = 0x0040 +_ORDER_MASK = 0x0080 +_VERSION_SHIFT = 8 +_TYPE_SHIFT = 10 +_SUBTYPE_SHIFT = 12 +_TO_DS_SHIFT = 0 +_FROM_DS_SHIFT = 1 +_MORE_FRAG_SHIFT = 2 +_RETRY_SHIFT = 3 +_PWR_MGT_SHIFT = 4 +_MORE_DATA_SHIFT = 5 +_WEP_SHIFT = 6 +_ORDER_SHIFT = 7 + +# IEs +IE_SSID = 0 +IE_RATES = 1 +IE_FH = 2 +IE_DS = 3 +IE_CF = 4 +IE_TIM = 5 +IE_IBSS = 6 +IE_HT_CAPA = 45 +IE_ESR = 50 +IE_HT_INFO = 61 + +FCS_LENGTH = 4 + +FRAMES_WITH_CAPABILITY = [M_BEACON, M_ASSOC_RESP, M_ASSOC_REQ, M_REASSOC_REQ, ] + +# Block Ack control constants +_ACK_POLICY_SHIFT = 0 +_MULTI_TID_SHIFT = 1 +_COMPRESSED_SHIFT = 2 +_TID_SHIFT = 12 + +_ACK_POLICY_MASK = 0x0001 +_MULTI_TID_MASK = 0x0002 +_COMPRESSED_MASK = 0x0004 +_TID_MASK = 0xf000 + +_COMPRESSED_BMP_LENGTH = 8 +_BMP_LENGTH = 128 + +# Action frame categories +BLOCK_ACK = 3 + +# Block ack category action codes +BLOCK_ACK_CODE_REQUEST = 0 +BLOCK_ACK_CODE_RESPONSE = 1 + + +class IEEE80211(dpkt.Packet): + __hdr__ = ( + ('framectl', 'H', 0), + ('duration', 'H', 0) + ) + + @property + def version(self): + return (self.framectl & _VERSION_MASK) >> _VERSION_SHIFT + + @version.setter + def version(self, val): + self.framectl = (val << _VERSION_SHIFT) | (self.framectl & ~_VERSION_MASK) + + @property + def type(self): + return (self.framectl & _TYPE_MASK) >> _TYPE_SHIFT + + @type.setter + def type(self, val): + self.framectl = (val << _TYPE_SHIFT) | (self.framectl & ~_TYPE_MASK) + + @property + def subtype(self): + return (self.framectl & _SUBTYPE_MASK) >> _SUBTYPE_SHIFT + + @subtype.setter + def subtype(self, val): + self.framectl = (val << _SUBTYPE_SHIFT) | (self.framectl & ~_SUBTYPE_MASK) + + @property + def to_ds(self): + return (self.framectl & _TO_DS_MASK) >> _TO_DS_SHIFT + + @to_ds.setter + def to_ds(self, val): + self.framectl = (val << _TO_DS_SHIFT) | (self.framectl & ~_TO_DS_MASK) + + @property + def from_ds(self): + return (self.framectl & _FROM_DS_MASK) >> _FROM_DS_SHIFT + + @from_ds.setter + def from_ds(self, val): + self.framectl = (val << _FROM_DS_SHIFT) | (self.framectl & ~_FROM_DS_MASK) + + @property + def more_frag(self): + return (self.framectl & _MORE_FRAG_MASK) >> _MORE_FRAG_SHIFT + + @more_frag.setter + def more_frag(self, val): + self.framectl = (val << _MORE_FRAG_SHIFT) | (self.framectl & ~_MORE_FRAG_MASK) + + @property + def retry(self): + return (self.framectl & _RETRY_MASK) >> _RETRY_SHIFT + + @retry.setter + def retry(self, val): + self.framectl = (val << _RETRY_SHIFT) | (self.framectl & ~_RETRY_MASK) + + @property + def pwr_mgt(self): + return (self.framectl & _PWR_MGT_MASK) >> _PWR_MGT_SHIFT + + @pwr_mgt.setter + def pwr_mgt(self, val): + self.framectl = (val << _PWR_MGT_SHIFT) | (self.framectl & ~_PWR_MGT_MASK) + + @property + def more_data(self): + return (self.framectl & _MORE_DATA_MASK) >> _MORE_DATA_SHIFT + + @more_data.setter + def more_data(self, val): + self.framectl = (val << _MORE_DATA_SHIFT) | (self.framectl & ~_MORE_DATA_MASK) + + @property + def wep(self): + return (self.framectl & _WEP_MASK) >> _WEP_SHIFT + + @wep.setter + def wep(self, val): + self.framectl = (val << _WEP_SHIFT) | (self.framectl & ~_WEP_MASK) + + @property + def order(self): + return (self.framectl & _ORDER_MASK) >> _ORDER_SHIFT + + @order.setter + def order(self, val): + self.framectl = (val << _ORDER_SHIFT) | (self.framectl & ~_ORDER_MASK) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_version(self): return self.version + + @deprecated + def _set_version(self, val): self.version = val + + @deprecated + def _get_type(self): return self.type + + @deprecated + def _set_type(self, val): self.type = val + + @deprecated + def _get_subtype(self): return self.subtype + + @deprecated + def _set_subtype(self, val): self.subtype = val + + @deprecated + def _get_to_ds(self): return self.to_ds + + @deprecated + def _set_to_ds(self, val): self.to_ds = val + + @deprecated + def _get_from_ds(self): return self.from_ds + + @deprecated + def _set_from_ds(self, val): self.from_ds = val + + @deprecated + def _get_more_frag(self): return self.more_frag + + @deprecated + def _set_more_frag(self, val): self.more_frag = val + + @deprecated + def _get_retry(self): return self.retry + + @deprecated + def _set_retry(self, val): self.retry = val + + @deprecated + def _get_pwr_mgt(self): return self.pwr_mgt + + @deprecated + def _set_pwr_mgt(self, val): self.pwr_mgt = val + + @deprecated + def _get_more_data(self): return self.more_data + + @deprecated + def _set_more_data(self, val): self.more_data = val + + @deprecated + def _get_wep(self): return self.wep + + @deprecated + def _set_wep(self, val): self.wep = val + + @deprecated + def _get_order(self): return self.order + + @deprecated + def _set_order(self, val): self.order = val + # ================================================= + + def unpack_ies(self, buf): + self.ies = [] + + ie_decoder = { + IE_SSID: ('ssid', self.IE), + IE_RATES: ('rate', self.IE), + IE_FH: ('fh', self.FH), + IE_DS: ('ds', self.DS), + IE_CF: ('cf', self.CF), + IE_TIM: ('tim', self.TIM), + IE_IBSS: ('ibss', self.IBSS), + IE_HT_CAPA: ('ht_capa', self.IE), + IE_ESR: ('esr', self.IE), + IE_HT_INFO: ('ht_info', self.IE) + } + + # each IE starts with an ID and a length + while len(buf) > FCS_LENGTH: + ie_id = struct.unpack('B', (buf[0]))[0] + try: + parser = ie_decoder[ie_id][1] + name = ie_decoder[ie_id][0] + except KeyError: + parser = self.IE + name = 'ie_' + str(ie_id) + ie = parser(buf) + + ie.data = buf[2:2 + ie.len] + setattr(self, name, ie) + self.ies.append(ie) + buf = buf[2 + ie.len:] + + class Capability(object): + def __init__(self, field): + self.ess = field & 1 + self.ibss = (field >> 1) & 1 + self.cf_poll = (field >> 2) & 1 + self.cf_poll_req = (field >> 3) & 1 + self.privacy = (field >> 4) & 1 + self.short_preamble = (field >> 5) & 1 + self.pbcc = (field >> 6) & 1 + self.hopping = (field >> 7) & 1 + self.spec_mgmt = (field >> 8) & 1 + self.qos = (field >> 9) & 1 + self.short_slot = (field >> 10) & 1 + self.apsd = (field >> 11) & 1 + self.dsss = (field >> 13) & 1 + self.delayed_blk_ack = (field >> 14) & 1 + self.imm_blk_ack = (field >> 15) & 1 + + def __init__(self, *args, **kwargs): + if kwargs and 'fcs' in kwargs: + self.fcs_present = kwargs.pop('fcs') + else: + self.fcs_present = False + + super(IEEE80211, self).__init__(*args, **kwargs) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = buf[self.__hdr_len__:] + + m_decoder = { + M_BEACON: ('beacon', self.Beacon), + M_ASSOC_REQ: ('assoc_req', self.Assoc_Req), + M_ASSOC_RESP: ('assoc_resp', self.Assoc_Resp), + M_DISASSOC: ('diassoc', self.Disassoc), + M_REASSOC_REQ: ('reassoc_req', self.Reassoc_Req), + M_REASSOC_RESP: ('reassoc_resp', self.Assoc_Resp), + M_AUTH: ('auth', self.Auth), + M_PROBE_RESP: ('probe_resp', self.Beacon), + M_DEAUTH: ('deauth', self.Deauth), + M_ACTION: ('action', self.Action) + } + + c_decoder = { + C_RTS: ('rts', self.RTS), + C_CTS: ('cts', self.CTS), + C_ACK: ('ack', self.ACK), + C_BLOCK_ACK_REQ: ('bar', self.BlockAckReq), + C_BLOCK_ACK: ('back', self.BlockAck), + C_CF_END: ('cf_end', self.CFEnd), + } + + d_dsData = { + 0: self.Data, + FROM_DS_FLAG: self.DataFromDS, + TO_DS_FLAG: self.DataToDS, + INTER_DS_FLAG: self.DataInterDS + } + + # For now decode everything with DATA. Haven't checked about other QoS + # additions + d_decoder = { + # modified the decoder to consider the ToDS and FromDS flags + # Omitting the 11 case for now + D_DATA: ('data_frame', d_dsData), + D_NULL: ('data_frame', d_dsData), + D_QOS_DATA: ('data_frame', d_dsData), + D_QOS_NULL: ('data_frame', d_dsData) + } + + decoder = { + MGMT_TYPE: m_decoder, + CTL_TYPE: c_decoder, + DATA_TYPE: d_decoder + } + + # Strip off the FCS field + if self.fcs_present: + self.fcs = struct.unpack('I', self.data[-1 * FCS_LENGTH:])[0] + self.data = self.data[0: -1 * FCS_LENGTH] + + if self.type == MGMT_TYPE: + self.mgmt = self.MGMT_Frame(self.data) + self.data = self.mgmt.data + if self.subtype == M_PROBE_REQ: + self.unpack_ies(self.data) + return + if self.subtype == M_ATIM: + return + + try: + parser = decoder[self.type][self.subtype][1] + name = decoder[self.type][self.subtype][0] + except KeyError: + print "Key error:", self.type, self.subtype + return + + if self.type == DATA_TYPE: + # need to grab the ToDS/FromDS info + parser = parser[self.to_ds * 10 + self.from_ds] + + if self.type == MGMT_TYPE: + field = parser(self.mgmt.data) + else: + field = parser(self.data) + self.data = field + + setattr(self, name, field) + + if self.type == MGMT_TYPE: + self.ies = self.unpack_ies(field.data) + if self.subtype in FRAMES_WITH_CAPABILITY: + self.capability = self.Capability(socket.ntohs(field.capability)) + + if self.type == DATA_TYPE and self.subtype == D_QOS_DATA: + self.qos_data = self.QoS_Data(field.data) + field.data = self.qos_data.data + + self.data = field.data + + class BlockAckReq(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('ctl', 'H', 0), + ('seq', 'H', 0), + ) + + class BlockAck(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('ctl', 'H', 0), + ('seq', 'H', 0), + ) + + @property + def compressed(self): + return (self.ctl & _COMPRESSED_MASK) >> _COMPRESSED_SHIFT + + @compressed.setter + def compressed(self, val): + self.ctl = (val << _COMPRESSED_SHIFT) | (self.ctl & ~_COMPRESSED_MASK) + + @property + def ack_policy(self): + return (self.ctl & _ACK_POLICY_MASK) >> _ACK_POLICY_SHIFT + + @ack_policy.setter + def ack_policy(self, val): + self.ctl = (val << _ACK_POLICY_SHIFT) | (self.ctl & ~_ACK_POLICY_MASK) + + @property + def multi_tid(self): + return (self.ctl & _MULTI_TID_MASK) >> _MULTI_TID_SHIFT + + @multi_tid.setter + def multi_tid(self, val): + self.ctl = (val << _MULTI_TID_SHIFT) | (self.ctl & ~_MULTI_TID_MASK) + + @property + def tid(self): + return (self.ctl & _TID_MASK) >> _TID_SHIFT + + @tid.setter + def tid(self, val): + self.ctl = (val << _TID_SHIFT) | (self.ctl & ~_TID_MASK) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_compressed(self): return self.compressed + + @deprecated + def _set_compressed(self, val): self.compressed = val + + @deprecated + def _get_ack_policy(self): return self.ack_policy + + @deprecated + def _set_ack_policy(self, val): self.ack_policy = val + + @deprecated + def _get_multi_tid(self): return self.multi_tid + + @deprecated + def _set_multi_tid(self, val): self.multi_tid = val + + @deprecated + def _get_tid(self): return self.tid + + @deprecated + def _set_tid(self, val): self.tid = val + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = buf[self.__hdr_len__:] + self.ctl = socket.ntohs(self.ctl) + + if self.compressed: + self.bmp = struct.unpack('8s', self.data[0:_COMPRESSED_BMP_LENGTH])[0] + else: + self.bmp = struct.unpack('128s', self.data[0:_BMP_LENGTH])[0] + self.data = self.data[len(self.__hdr__) + len(self.bmp):] + + class RTS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6) + ) + + class CTS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ) + + class ACK(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ) + + class CFEnd(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ) + + class MGMT_Frame(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('bssid', '6s', '\x00' * 6), + ('frag_seq', 'H', 0) + ) + + class Beacon(dpkt.Packet): + __hdr__ = ( + ('timestamp', 'Q', 0), + ('interval', 'H', 0), + ('capability', 'H', 0) + ) + + class Disassoc(dpkt.Packet): + __hdr__ = ( + ('reason', 'H', 0), + ) + + class Assoc_Req(dpkt.Packet): + __hdr__ = ( + ('capability', 'H', 0), + ('interval', 'H', 0) + ) + + class Assoc_Resp(dpkt.Packet): + __hdr__ = ( + ('capability', 'H', 0), + ('status', 'H', 0), + ('aid', 'H', 0) + ) + + class Reassoc_Req(dpkt.Packet): + __hdr__ = ( + ('capability', 'H', 0), + ('interval', 'H', 0), + ('current_ap', '6s', '\x00' * 6) + ) + + # This obviously doesn't support any of AUTH frames that use encryption + class Auth(dpkt.Packet): + __hdr__ = ( + ('algorithm', 'H', 0), + ('auth_seq', 'H', 0), + ) + + class Deauth(dpkt.Packet): + __hdr__ = ( + ('reason', 'H', 0), + ) + + class Action(dpkt.Packet): + __hdr__ = ( + ('category', 'B', 0), + ('code', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + action_parser = { + BLOCK_ACK: {BLOCK_ACK_CODE_REQUEST: ('block_ack_request', IEEE80211.BlockAckActionRequest), + BLOCK_ACK_CODE_RESPONSE: ('block_ack_response', IEEE80211.BlockAckActionResponse), + }, + } + + decoder = action_parser[self.category][self.code][1] + field_name = action_parser[self.category][self.code][0] + field = decoder(self.data) + setattr(self, field_name, field) + self.data = field.data + + class BlockAckActionRequest(dpkt.Packet): + __hdr__ = ( + ('dialog', 'B', 0), + ('parameters', 'H', 0), + ('timeout', 'H', 0), + ('starting_seq', 'H', 0), + ) + + class BlockAckActionResponse(dpkt.Packet): + __hdr__ = ( + ('dialog', 'B', 0), + ('status_code', 'H', 0), + ('parameters', 'H', 0), + ('timeout', 'H', 0), + ) + + class Data(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('bssid', '6s', '\x00' * 6), + ('frag_seq', 'H', 0) + ) + + class DataFromDS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('bssid', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('frag_seq', 'H', 0) + ) + + class DataToDS(dpkt.Packet): + __hdr__ = ( + ('bssid', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('dst', '6s', '\x00' * 6), + ('frag_seq', 'H', 0) + ) + + class DataInterDS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('da', '6s', '\x00' * 6), + ('frag_seq', 'H', 0), + ('sa', '6s', '\x00' * 6) + ) + + class QoS_Data(dpkt.Packet): + __hdr__ = ( + ('control', 'H', 0), + ) + + class IE(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.info = buf[2:self.len + 2] + + class FH(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('tu', 'H', 0), + ('hopset', 'B', 0), + ('hoppattern', 'B', 0), + ('hopindex', 'B', 0) + ) + + class DS(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('ch', 'B', 0) + ) + + class CF(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('count', 'B', 0), + ('period', 'B', 0), + ('max', 'H', 0), + ('dur', 'H', 0) + ) + + class TIM(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('count', 'B', 0), + ('period', 'B', 0), + ('ctrl', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.bitmap = buf[5:self.len + 2] + + class IBSS(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('atim', 'H', 0) + ) + +def test_802211_ack(): + s = '\xd4\x00\x00\x00\x00\x12\xf0\xb6\x1c\xa4\xff\xff\xff\xff' + ieee = IEEE80211(s, fcs=True) + assert ieee.version == 0 + assert ieee.type == CTL_TYPE + assert ieee.subtype == C_ACK + assert ieee.to_ds == 0 + assert ieee.from_ds == 0 + assert ieee.pwr_mgt == 0 + assert ieee.more_data == 0 + assert ieee.wep == 0 + assert ieee.order == 0 + assert ieee.ack.dst == '\x00\x12\xf0\xb6\x1c\xa4' + fcs = struct.unpack('I', s[-4:])[0] + assert ieee.fcs == fcs + +def test_80211_beacon(): + s = '\x80\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x26\xcb\x18\x6a\x30\x00\x26\xcb\x18\x6a\x30\xa0\xd0\x77\x09\x32\x03\x8f\x00\x00\x00\x66\x00\x31\x04\x00\x04\x43\x41\x45\x4e\x01\x08\x82\x84\x8b\x0c\x12\x96\x18\x24\x03\x01\x01\x05\x04\x00\x01\x00\x00\x07\x06\x55\x53\x20\x01\x0b\x1a\x0b\x05\x00\x00\x6e\x00\x00\x2a\x01\x02\x2d\x1a\x6e\x18\x1b\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x28\x00\x32\x04\x30\x48\x60\x6c\x36\x03\x51\x63\x03\x3d\x16\x01\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x1e\x05\x00\x8f\x00\x0f\x00\xff\x03\x59\x00\x63\x73\x65\x2d\x33\x39\x31\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x96\x06\x00\x40\x96\x00\x14\x00\xdd\x18\x00\x50\xf2\x02\x01\x01\x80\x00\x03\xa4\x00\x00\x27\xa4\x00\x00\x42\x43\x5e\x00\x62\x32\x2f\x00\xdd\x06\x00\x40\x96\x01\x01\x04\xdd\x05\x00\x40\x96\x03\x05\xdd\x05\x00\x40\x96\x0b\x09\xdd\x08\x00\x40\x96\x13\x01\x00\x34\x01\xdd\x05\x00\x40\x96\x14\x05' + ieee = IEEE80211(s, fcs=True) + assert ieee.version == 0 + assert ieee.type == MGMT_TYPE + assert ieee.subtype == M_BEACON + assert ieee.to_ds == 0 + assert ieee.from_ds == 0 + assert ieee.pwr_mgt == 0 + assert ieee.more_data == 0 + assert ieee.wep == 0 + assert ieee.order == 0 + assert ieee.mgmt.dst == '\xff\xff\xff\xff\xff\xff' + assert ieee.mgmt.src == '\x00\x26\xcb\x18\x6a\x30' + assert ieee.beacon.capability == 0x3104 + assert ieee.capability.privacy == 1 + assert ieee.ssid.data == 'CAEN' + assert ieee.rate.data == '\x82\x84\x8b\x0c\x12\x96\x18\x24' + assert ieee.ds.data == '\x01' + assert ieee.tim.data == '\x00\x01\x00\x00' + fcs = struct.unpack('I', s[-4:])[0] + assert ieee.fcs == fcs + +def test_80211_data(): + s = '\x08\x09\x20\x00\x00\x26\xcb\x17\x3d\x91\x00\x16\x44\xb0\xae\xc6\x00\x02\xb3\xd6\x26\x3c\x80\x7e\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04\xac\x17\x00\x00' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == DATA_TYPE + assert ieee.subtype == D_DATA + assert ieee.data_frame.dst == '\x00\x02\xb3\xd6\x26\x3c' + assert ieee.data_frame.src == '\x00\x16\x44\xb0\xae\xc6' + assert ieee.data_frame.frag_seq == 0x807e + assert ieee.data == '\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04' + assert ieee.fcs == struct.unpack('I', '\xac\x17\x00\x00')[0] + + import llc, ip + + llc_pkt = llc.LLC(ieee.data_frame.data) + ip_pkt = ip.IP(llc_pkt.data) + assert ip_pkt.dst == '\x3f\xf5\xd1\x69' + +def test_80211_data_qos(): + s = '\x88\x01\x3a\x01\x00\x26\xcb\x17\x44\xf0\x00\x23\xdf\xc9\xc0\x93\x00\x26\xcb\x17\x44\xf0\x20\x7b\x00\x00\xaa\xaa\x03\x00\x00\x00\x88\x8e\x01\x00\x00\x74\x02\x02\x00\x74\x19\x80\x00\x00\x00\x6a\x16\x03\x01\x00\x65\x01\x00\x00\x61\x03\x01\x4b\x4c\xa7\x7e\x27\x61\x6f\x02\x7b\x3c\x72\x39\xe3\x7b\xd7\x43\x59\x91\x7f\xaa\x22\x47\x51\xb6\x88\x9f\x85\x90\x87\x5a\xd1\x13\x20\xe0\x07\x00\x00\x68\xbd\xa4\x13\xb0\xd5\x82\x7e\xc7\xfb\xe7\xcc\xab\x6e\x5d\x5a\x51\x50\xd4\x45\xc5\xa1\x65\x53\xad\xb5\x88\x5b\x00\x1a\x00\x2f\x00\x05\x00\x04\x00\x35\x00\x0a\x00\x09\x00\x03\x00\x08\x00\x33\x00\x39\x00\x16\x00\x15\x00\x14\x01\x00\xff\xff\xff\xff' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == DATA_TYPE + assert ieee.subtype == D_QOS_DATA + assert ieee.data_frame.dst == '\x00\x26\xcb\x17\x44\xf0' + assert ieee.data_frame.src == '\x00\x23\xdf\xc9\xc0\x93' + assert ieee.data_frame.frag_seq == 0x207b + assert ieee.data == '\xaa\xaa\x03\x00\x00\x00\x88\x8e\x01\x00\x00\x74\x02\x02\x00\x74\x19\x80\x00\x00\x00\x6a\x16\x03\x01\x00\x65\x01\x00\x00\x61\x03\x01\x4b\x4c\xa7\x7e\x27\x61\x6f\x02\x7b\x3c\x72\x39\xe3\x7b\xd7\x43\x59\x91\x7f\xaa\x22\x47\x51\xb6\x88\x9f\x85\x90\x87\x5a\xd1\x13\x20\xe0\x07\x00\x00\x68\xbd\xa4\x13\xb0\xd5\x82\x7e\xc7\xfb\xe7\xcc\xab\x6e\x5d\x5a\x51\x50\xd4\x45\xc5\xa1\x65\x53\xad\xb5\x88\x5b\x00\x1a\x00\x2f\x00\x05\x00\x04\x00\x35\x00\x0a\x00\x09\x00\x03\x00\x08\x00\x33\x00\x39\x00\x16\x00\x15\x00\x14\x01\x00' + assert ieee.qos_data.control == 0x0 + assert ieee.fcs == struct.unpack('I', '\xff\xff\xff\xff')[0] + +def test_bug(): + s = '\x88\x41\x2c\x00\x00\x26\xcb\x17\x44\xf0\x00\x1e\x52\x97\x14\x11\x00\x1f\x6d\xe8\x18\x00\xd0\x07\x00\x00\x6f\x00\x00\x20\x00\x00\x00\x00' + ieee = IEEE80211(s) + assert ieee.wep == 1 + +def test_data_ds(): + # verifying the ToDS and FromDS fields and that we're getting the + # correct values + + s = '\x08\x03\x00\x00\x01\x0b\x85\x00\x00\x00\x00\x26\xcb\x18\x73\x50\x01\x0b\x85\x00\x00\x00\x00\x89\x00\x26\xcb\x18\x73\x50' + ieee = IEEE80211(s) + assert ieee.type == DATA_TYPE + assert ieee.to_ds == 1 + assert ieee.from_ds == 1 + assert ieee.data_frame.sa == '\x00\x26\xcb\x18\x73\x50' + assert ieee.data_frame.src == '\x00\x26\xcb\x18\x73\x50' + assert ieee.data_frame.dst == '\x01\x0b\x85\x00\x00\x00' + assert ieee.data_frame.da == '\x01\x0b\x85\x00\x00\x00' + + s = '\x88\x41\x50\x01\x00\x26\xcb\x17\x48\xc1\x00\x24\x2c\xe7\xfe\x8a\xff\xff\xff\xff\xff\xff\x80\xa0\x00\x00\x09\x1a\x00\x20\x00\x00\x00\x00' + ieee = IEEE80211(s) + assert ieee.type == DATA_TYPE + assert ieee.to_ds == 1 + assert ieee.from_ds == 0 + assert ieee.data_frame.bssid == '\x00\x26\xcb\x17\x48\xc1' + assert ieee.data_frame.src == '\x00\x24\x2c\xe7\xfe\x8a' + assert ieee.data_frame.dst == '\xff\xff\xff\xff\xff\xff' + + s = '\x08\x02\x02\x01\x00\x02\x44\xac\x27\x70\x00\x1f\x33\x39\x75\x44\x00\x1f\x33\x39\x75\x44\x90\xa4' + ieee = IEEE80211(s) + assert ieee.type == DATA_TYPE + assert ieee.to_ds == 0 + assert ieee.from_ds == 1 + assert ieee.data_frame.bssid == '\x00\x1f\x33\x39\x75\x44' + assert ieee.data_frame.src == '\x00\x1f\x33\x39\x75\x44' + assert ieee.data_frame.dst == '\x00\x02\x44\xac\x27\x70' + +def test_compressed_block_ack(): + s = '\x94\x00\x00\x00\x34\xc0\x59\xd6\x3f\x62\xb4\x75\x0e\x46\x83\xc1\x05\x50\x80\xee\x03\x00\x00\x00\x00\x00\x00\x00\xa2\xe4\x98\x45' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == CTL_TYPE + assert ieee.subtype == C_BLOCK_ACK + assert ieee.back.dst == '\x34\xc0\x59\xd6\x3f\x62' + assert ieee.back.src == '\xb4\x75\x0e\x46\x83\xc1' + assert ieee.back.compressed == 1 + assert len(ieee.back.bmp) == 8 + assert ieee.back.ack_policy == 1 + assert ieee.back.tid == 5 + +def test_action_block_ack_request(): + s = '\xd0\x00\x3a\x01\x00\x23\x14\x36\x52\x30\xb4\x75\x0e\x46\x83\xc1\xb4\x75\x0e\x46\x83\xc1\x70\x14\x03\x00\x0d\x02\x10\x00\x00\x40\x29\x06\x50\x33\x9e' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == MGMT_TYPE + assert ieee.subtype == M_ACTION + assert ieee.action.category == BLOCK_ACK + assert ieee.action.code == BLOCK_ACK_CODE_REQUEST + assert ieee.action.block_ack_request.timeout == 0 + parameters = struct.unpack('H', '\x10\x02')[0] + assert ieee.action.block_ack_request.parameters == parameters + +def test_action_block_ack_response(): + s = '\xd0\x00\x3c\x00\xb4\x75\x0e\x46\x83\xc1\x00\x23\x14\x36\x52\x30\xb4\x75\x0e\x46\x83\xc1\xd0\x68\x03\x01\x0d\x00\x00\x02\x10\x88\x13\x9f\xc0\x0b\x75' + ieee = IEEE80211(s, fcs=True) + assert ieee.type == MGMT_TYPE + assert ieee.subtype == M_ACTION + assert ieee.action.category == BLOCK_ACK + assert ieee.action.code == BLOCK_ACK_CODE_RESPONSE + timeout = struct.unpack('H', '\x13\x88')[0] + assert ieee.action.block_ack_response.timeout == timeout + parameters = struct.unpack('H', '\x10\x02')[0] + assert ieee.action.block_ack_response.parameters == parameters + +if __name__ == '__main__': + # Runs all the test associated with this class/file + test_802211_ack() + test_80211_beacon() + test_80211_data() + test_80211_data_qos() + test_bug() + test_data_ds() + test_compressed_block_ack() + test_action_block_ack_request() + test_action_block_ack_response() + print 'Tests Successful...' diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/igmp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/igmp.py new file mode 100644 index 00000000..5e5cb166 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/igmp.py @@ -0,0 +1,19 @@ +# $Id: igmp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Internet Group Management Protocol.""" + +import dpkt + + +class IGMP(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('maxresp', 'B', 0), + ('sum', 'H', 0), + ('group', 'I', 0) + ) + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/ip.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ip.py new file mode 100644 index 00000000..0658ff6a --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ip.py @@ -0,0 +1,359 @@ +# $Id: ip.py 87 2013-03-05 19:41:04Z andrewflnr@gmail.com $ +# -*- coding: utf-8 -*- +"""Internet Protocol.""" + +import dpkt +from decorators import deprecated + + +class IP(dpkt.Packet): + __hdr__ = ( + ('v_hl', 'B', (4 << 4) | (20 >> 2)), + ('tos', 'B', 0), + ('len', 'H', 20), + ('id', 'H', 0), + ('off', 'H', 0), + ('ttl', 'B', 64), + ('p', 'B', 0), + ('sum', 'H', 0), + ('src', '4s', '\x00' * 4), + ('dst', '4s', '\x00' * 4) + ) + _protosw = {} + opts = '' + + @property + def v(self): + return self.v_hl >> 4 + + @v.setter + def v(self, v): + self.v_hl = (v << 4) | (self.v_hl & 0xf) + + @property + def hl(self): + return self.v_hl & 0xf + + @hl.setter + def hl(self, hl): + self.v_hl = (self.v_hl & 0xf0) | hl + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): + return self.v + + @deprecated + def _set_v(self, v): + self.v = v + + @deprecated + def _get_hl(self): + return self.hl + + @deprecated + def _set_hl(self, hl): + self.hl = hl + + # ================================================= + + def __len__(self): + return self.__hdr_len__ + len(self.opts) + len(self.data) + + def __str__(self): + if self.sum == 0: + self.sum = dpkt.in_cksum(self.pack_hdr() + self.opts) + if (self.p == 6 or self.p == 17) and (self.off & (IP_MF | IP_OFFMASK)) == 0 and \ + isinstance(self.data, dpkt.Packet) and self.data.sum == 0: + # Set zeroed TCP and UDP checksums for non-fragments. + p = str(self.data) + s = dpkt.struct.pack('>4s4sxBH', self.src, self.dst, + self.p, len(p)) + s = dpkt.in_cksum_add(0, s) + s = dpkt.in_cksum_add(s, p) + self.data.sum = dpkt.in_cksum_done(s) + if self.p == 17 and self.data.sum == 0: + self.data.sum = 0xffff # RFC 768 + # XXX - skip transports which don't need the pseudoheader + return self.pack_hdr() + self.opts + str(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + ol = ((self.v_hl & 0xf) << 2) - self.__hdr_len__ + if ol < 0: + raise dpkt.UnpackError, 'invalid header length' + self.opts = buf[self.__hdr_len__:self.__hdr_len__ + ol] + if self.len: + buf = buf[self.__hdr_len__ + ol:self.len] + else: # very likely due to TCP segmentation offload + buf = buf[self.__hdr_len__ + ol:] + try: + self.data = self._protosw[self.p](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + @classmethod + def set_proto(cls, p, pktclass): + cls._protosw[p] = pktclass + + @classmethod + def get_proto(cls, p): + return cls._protosw[p] + +# IP Headers +IP_ADDR_LEN = 0x04 +IP_ADDR_BITS = 0x20 + +IP_HDR_LEN = 0x14 +IP_OPT_LEN = 0x02 +IP_OPT_LEN_MAX = 0x28 +IP_HDR_LEN_MAX = IP_HDR_LEN + IP_OPT_LEN_MAX + +IP_LEN_MAX = 0xffff +IP_LEN_MIN = IP_HDR_LEN + +# Reserved Addresses +IP_ADDR_ANY = "\x00\x00\x00\x00" # 0.0.0.0 +IP_ADDR_BROADCAST = "\xff\xff\xff\xff" # 255.255.255.255 +IP_ADDR_LOOPBACK = "\x7f\x00\x00\x01" # 127.0.0.1 +IP_ADDR_MCAST_ALL = "\xe0\x00\x00\x01" # 224.0.0.1 +IP_ADDR_MCAST_LOCAL = "\xe0\x00\x00\xff" # 224.0.0.255 + +# Type of service (ip_tos), RFC 1349 ("obsoleted by RFC 2474") +IP_TOS_DEFAULT = 0x00 # default +IP_TOS_LOWDELAY = 0x10 # low delay +IP_TOS_THROUGHPUT = 0x08 # high throughput +IP_TOS_RELIABILITY = 0x04 # high reliability +IP_TOS_LOWCOST = 0x02 # low monetary cost - XXX +IP_TOS_ECT = 0x02 # ECN-capable transport +IP_TOS_CE = 0x01 # congestion experienced + +# IP precedence (high 3 bits of ip_tos), hopefully unused +IP_TOS_PREC_ROUTINE = 0x00 +IP_TOS_PREC_PRIORITY = 0x20 +IP_TOS_PREC_IMMEDIATE = 0x40 +IP_TOS_PREC_FLASH = 0x60 +IP_TOS_PREC_FLASHOVERRIDE = 0x80 +IP_TOS_PREC_CRITIC_ECP = 0xa0 +IP_TOS_PREC_INTERNETCONTROL = 0xc0 +IP_TOS_PREC_NETCONTROL = 0xe0 + +# Fragmentation flags (ip_off) +IP_RF = 0x8000 # reserved +IP_DF = 0x4000 # don't fragment +IP_MF = 0x2000 # more fragments (not last frag) +IP_OFFMASK = 0x1fff # mask for fragment offset + +# Time-to-live (ip_ttl), seconds +IP_TTL_DEFAULT = 64 # default ttl, RFC 1122, RFC 1340 +IP_TTL_MAX = 255 # maximum ttl + +# Protocol (ip_p) - http://www.iana.org/assignments/protocol-numbers +IP_PROTO_IP = 0 # dummy for IP +IP_PROTO_HOPOPTS = IP_PROTO_IP # IPv6 hop-by-hop options +IP_PROTO_ICMP = 1 # ICMP +IP_PROTO_IGMP = 2 # IGMP +IP_PROTO_GGP = 3 # gateway-gateway protocol +IP_PROTO_IPIP = 4 # IP in IP +IP_PROTO_ST = 5 # ST datagram mode +IP_PROTO_TCP = 6 # TCP +IP_PROTO_CBT = 7 # CBT +IP_PROTO_EGP = 8 # exterior gateway protocol +IP_PROTO_IGP = 9 # interior gateway protocol +IP_PROTO_BBNRCC = 10 # BBN RCC monitoring +IP_PROTO_NVP = 11 # Network Voice Protocol +IP_PROTO_PUP = 12 # PARC universal packet +IP_PROTO_ARGUS = 13 # ARGUS +IP_PROTO_EMCON = 14 # EMCON +IP_PROTO_XNET = 15 # Cross Net Debugger +IP_PROTO_CHAOS = 16 # Chaos +IP_PROTO_UDP = 17 # UDP +IP_PROTO_MUX = 18 # multiplexing +IP_PROTO_DCNMEAS = 19 # DCN measurement +IP_PROTO_HMP = 20 # Host Monitoring Protocol +IP_PROTO_PRM = 21 # Packet Radio Measurement +IP_PROTO_IDP = 22 # Xerox NS IDP +IP_PROTO_TRUNK1 = 23 # Trunk-1 +IP_PROTO_TRUNK2 = 24 # Trunk-2 +IP_PROTO_LEAF1 = 25 # Leaf-1 +IP_PROTO_LEAF2 = 26 # Leaf-2 +IP_PROTO_RDP = 27 # "Reliable Datagram" proto +IP_PROTO_IRTP = 28 # Inet Reliable Transaction +IP_PROTO_TP = 29 # ISO TP class 4 +IP_PROTO_NETBLT = 30 # Bulk Data Transfer +IP_PROTO_MFPNSP = 31 # MFE Network Services +IP_PROTO_MERITINP = 32 # Merit Internodal Protocol +IP_PROTO_SEP = 33 # Sequential Exchange proto +IP_PROTO_3PC = 34 # Third Party Connect proto +IP_PROTO_IDPR = 35 # Interdomain Policy Route +IP_PROTO_XTP = 36 # Xpress Transfer Protocol +IP_PROTO_DDP = 37 # Datagram Delivery Proto +IP_PROTO_CMTP = 38 # IDPR Ctrl Message Trans +IP_PROTO_TPPP = 39 # TP++ Transport Protocol +IP_PROTO_IL = 40 # IL Transport Protocol +IP_PROTO_IP6 = 41 # IPv6 +IP_PROTO_SDRP = 42 # Source Demand Routing +IP_PROTO_ROUTING = 43 # IPv6 routing header +IP_PROTO_FRAGMENT = 44 # IPv6 fragmentation header +IP_PROTO_RSVP = 46 # Reservation protocol +IP_PROTO_GRE = 47 # General Routing Encap +IP_PROTO_MHRP = 48 # Mobile Host Routing +IP_PROTO_ENA = 49 # ENA +IP_PROTO_ESP = 50 # Encap Security Payload +IP_PROTO_AH = 51 # Authentication Header +IP_PROTO_INLSP = 52 # Integated Net Layer Sec +IP_PROTO_SWIPE = 53 # SWIPE +IP_PROTO_NARP = 54 # NBMA Address Resolution +IP_PROTO_MOBILE = 55 # Mobile IP, RFC 2004 +IP_PROTO_TLSP = 56 # Transport Layer Security +IP_PROTO_SKIP = 57 # SKIP +IP_PROTO_ICMP6 = 58 # ICMP for IPv6 +IP_PROTO_NONE = 59 # IPv6 no next header +IP_PROTO_DSTOPTS = 60 # IPv6 destination options +IP_PROTO_ANYHOST = 61 # any host internal proto +IP_PROTO_CFTP = 62 # CFTP +IP_PROTO_ANYNET = 63 # any local network +IP_PROTO_EXPAK = 64 # SATNET and Backroom EXPAK +IP_PROTO_KRYPTOLAN = 65 # Kryptolan +IP_PROTO_RVD = 66 # MIT Remote Virtual Disk +IP_PROTO_IPPC = 67 # Inet Pluribus Packet Core +IP_PROTO_DISTFS = 68 # any distributed fs +IP_PROTO_SATMON = 69 # SATNET Monitoring +IP_PROTO_VISA = 70 # VISA Protocol +IP_PROTO_IPCV = 71 # Inet Packet Core Utility +IP_PROTO_CPNX = 72 # Comp Proto Net Executive +IP_PROTO_CPHB = 73 # Comp Protocol Heart Beat +IP_PROTO_WSN = 74 # Wang Span Network +IP_PROTO_PVP = 75 # Packet Video Protocol +IP_PROTO_BRSATMON = 76 # Backroom SATNET Monitor +IP_PROTO_SUNND = 77 # SUN ND Protocol +IP_PROTO_WBMON = 78 # WIDEBAND Monitoring +IP_PROTO_WBEXPAK = 79 # WIDEBAND EXPAK +IP_PROTO_EON = 80 # ISO CNLP +IP_PROTO_VMTP = 81 # Versatile Msg Transport +IP_PROTO_SVMTP = 82 # Secure VMTP +IP_PROTO_VINES = 83 # VINES +IP_PROTO_TTP = 84 # TTP +IP_PROTO_NSFIGP = 85 # NSFNET-IGP +IP_PROTO_DGP = 86 # Dissimilar Gateway Proto +IP_PROTO_TCF = 87 # TCF +IP_PROTO_EIGRP = 88 # EIGRP +IP_PROTO_OSPF = 89 # Open Shortest Path First +IP_PROTO_SPRITERPC = 90 # Sprite RPC Protocol +IP_PROTO_LARP = 91 # Locus Address Resolution +IP_PROTO_MTP = 92 # Multicast Transport Proto +IP_PROTO_AX25 = 93 # AX.25 Frames +IP_PROTO_IPIPENCAP = 94 # yet-another IP encap +IP_PROTO_MICP = 95 # Mobile Internet Ctrl +IP_PROTO_SCCSP = 96 # Semaphore Comm Sec Proto +IP_PROTO_ETHERIP = 97 # Ethernet in IPv4 +IP_PROTO_ENCAP = 98 # encapsulation header +IP_PROTO_ANYENC = 99 # private encryption scheme +IP_PROTO_GMTP = 100 # GMTP +IP_PROTO_IFMP = 101 # Ipsilon Flow Mgmt Proto +IP_PROTO_PNNI = 102 # PNNI over IP +IP_PROTO_PIM = 103 # Protocol Indep Multicast +IP_PROTO_ARIS = 104 # ARIS +IP_PROTO_SCPS = 105 # SCPS +IP_PROTO_QNX = 106 # QNX +IP_PROTO_AN = 107 # Active Networks +IP_PROTO_IPCOMP = 108 # IP Payload Compression +IP_PROTO_SNP = 109 # Sitara Networks Protocol +IP_PROTO_COMPAQPEER = 110 # Compaq Peer Protocol +IP_PROTO_IPXIP = 111 # IPX in IP +IP_PROTO_VRRP = 112 # Virtual Router Redundancy +IP_PROTO_PGM = 113 # PGM Reliable Transport +IP_PROTO_ANY0HOP = 114 # 0-hop protocol +IP_PROTO_L2TP = 115 # Layer 2 Tunneling Proto +IP_PROTO_DDX = 116 # D-II Data Exchange (DDX) +IP_PROTO_IATP = 117 # Interactive Agent Xfer +IP_PROTO_STP = 118 # Schedule Transfer Proto +IP_PROTO_SRP = 119 # SpectraLink Radio Proto +IP_PROTO_UTI = 120 # UTI +IP_PROTO_SMP = 121 # Simple Message Protocol +IP_PROTO_SM = 122 # SM +IP_PROTO_PTP = 123 # Performance Transparency +IP_PROTO_ISIS = 124 # ISIS over IPv4 +IP_PROTO_FIRE = 125 # FIRE +IP_PROTO_CRTP = 126 # Combat Radio Transport +IP_PROTO_CRUDP = 127 # Combat Radio UDP +IP_PROTO_SSCOPMCE = 128 # SSCOPMCE +IP_PROTO_IPLT = 129 # IPLT +IP_PROTO_SPS = 130 # Secure Packet Shield +IP_PROTO_PIPE = 131 # Private IP Encap in IP +IP_PROTO_SCTP = 132 # Stream Ctrl Transmission +IP_PROTO_FC = 133 # Fibre Channel +IP_PROTO_RSVPIGN = 134 # RSVP-E2E-IGNORE +IP_PROTO_RAW = 255 # Raw IP packets +IP_PROTO_RESERVED = IP_PROTO_RAW # Reserved +IP_PROTO_MAX = 255 + +# XXX - auto-load IP dispatch table from IP_PROTO_* definitions + + +def __load_protos(): + g = globals() + for k, v in g.iteritems(): + if k.startswith('IP_PROTO_'): + name = k[9:].lower() + try: + mod = __import__(name, g) + except ImportError: + continue + IP.set_proto(v, getattr(mod, name.upper())) + + +if not IP._protosw: + __load_protos() + + +def test_ip(): + import udp + + s = 'E\x00\x00"\x00\x00\x00\x00@\x11r\xc0\x01\x02\x03\x04\x01\x02\x03\x04\x00o\x00\xde\x00\x0e\xbf5foobar' + ip = IP(id=0, src='\x01\x02\x03\x04', dst='\x01\x02\x03\x04', p=17) + u = udp.UDP(sport=111, dport=222) + u.data = 'foobar' + u.ulen += len(u.data) + ip.data = u + ip.len += len(u) + assert (str(ip) == s) + + ip = IP(s) + assert (str(ip) == s) + assert (ip.udp.sport == 111) + assert (ip.udp.data == 'foobar') + + +def test_hl(): # Todo chack this test method + s = 'BB\x03\x00\x00\x00\x00\x00\x00\x00\xd0\x00\xec\xbc\xa5\x00\x00\x00\x03\x80\x00\x00\xd0\x01\xf2\xac\xa5"0\x01\x00\x14\x00\x02\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00' + try: + IP(s) + except dpkt.UnpackError: + pass + + +def test_opt(): + s = '\x4f\x00\x00\x50\xae\x08\x00\x00\x40\x06\x17\xfc\xc0\xa8\x0a\x26\xc0\xa8\x0a\x01\x07\x27\x08\x01\x02\x03\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + ip = IP(s) + ip.sum = 0 + assert (str(ip) == s) + + +def test_zerolen(): + import tcp + d = 'X' * 2048 + s = 'E\x00\x00\x004\xce@\x00\x80\x06\x00\x00\x7f\x00\x00\x01\x7f\x00\x00\x01\xccN\x0c8`\xff\xc6N_\x8a\x12\x98P\x18@):\xa3\x00\x00' + d + ip = IP(s) + assert (isinstance(ip.data, tcp.TCP)) + assert (ip.tcp.data == d) + + +if __name__ == '__main__': + test_ip() + test_hl() + test_opt() + test_zerolen() + print 'Tests Successful...' diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/ip6.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ip6.py new file mode 100644 index 00000000..099abfcb --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ip6.py @@ -0,0 +1,383 @@ +# $Id: ip6.py 87 2013-03-05 19:41:04Z andrewflnr@gmail.com $ +# -*- coding: utf-8 -*- +"""Internet Protocol, version 6.""" + +import dpkt +from decorators import deprecated + + +class IP6(dpkt.Packet): + __hdr__ = ( + ('v_fc_flow', 'I', 0x60000000L), + ('plen', 'H', 0), # payload length (not including header) + ('nxt', 'B', 0), # next header protocol + ('hlim', 'B', 0), # hop limit + ('src', '16s', ''), + ('dst', '16s', '') + ) + + # XXX - to be shared with IP. We cannot refer to the ip module + # right now because ip.__load_protos() expects the IP6 class to be + # defined. + _protosw = None + + @property + def v(self): + return self.v_fc_flow >> 28 + + @v.setter + def v(self, v): + self.v_fc_flow = (self.v_fc_flow & ~0xf0000000L) | (v << 28) + + @property + def fc(self): + return (self.v_fc_flow >> 20) & 0xff + + @fc.setter + def fc(self, v): + self.v_fc_flow = (self.v_fc_flow & ~0xff00000L) | (v << 20) + + @property + def flow(self): + return self.v_fc_flow & 0xfffff + + @flow.setter + def flow(self, v): + self.v_fc_flow = (self.v_fc_flow & ~0xfffff) | (v & 0xfffff) + + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): + return self.v + + @deprecated + def _set_v(self, v): + self.v = v + + @deprecated + def _get_fc(self): + return self.fc + + @deprecated + def _set_fc(self, v): + self.rc = v + + @deprecated + def _get_flow(self): + return self.flow + + @deprecated + def _set_flow(self, v): + self.flow = v + + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.extension_hdrs = dict(((i, None) for i in ext_hdrs)) + + if self.plen: + buf = self.data[:self.plen] + else: # due to jumbo payload or TSO + buf = self.data + + next = self.nxt + + while next in ext_hdrs: + ext = ext_hdrs_cls[next](buf) + self.extension_hdrs[next] = ext + buf = buf[ext.length:] + next = ext.nxt + + # set the payload protocol id + setattr(self, 'p', next) + + try: + self.data = self._protosw[next](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def headers_str(self): + """Output extension headers in order defined in RFC1883 (except dest opts)""" + + header_str = "" + + for hdr in ext_hdrs: + if not self.extension_hdrs[hdr] is None: + header_str += str(self.extension_hdrs[hdr]) + return header_str + + def __str__(self): + if (self.nxt == 6 or self.nxt == 17 or self.nxt == 58) and not self.data.sum: + # XXX - set TCP, UDP, and ICMPv6 checksums + p = str(self.data) + s = dpkt.struct.pack('>16s16sxBH', self.src, self.dst, self.nxt, len(p)) + s = dpkt.in_cksum_add(0, s) + s = dpkt.in_cksum_add(s, p) + try: + self.data.sum = dpkt.in_cksum_done(s) + except AttributeError: + pass + return self.pack_hdr() + self.headers_str() + str(self.data) + + @classmethod + def set_proto(cls, p, pktclass): + cls._protosw[p] = pktclass + + @classmethod + def get_proto(cls, p): + return cls._protosw[p] + + +import ip +# We are most likely still in the middle of ip.__load_protos() which +# implicitly loads this module through __import__(), so the content of +# ip.IP._protosw is still incomplete at the moment. By sharing the +# same dictionary by reference as opposed to making a copy, when +# ip.__load_protos() finishes, we will also automatically get the most +# up-to-date dictionary. +IP6._protosw = ip.IP._protosw + + +class IP6ExtensionHeader(dpkt.Packet): + """ + An extension header is very similar to a 'sub-packet'. + We just want to re-use all the hdr unpacking etc. + """ + pass + + +class IP6OptsHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('len', 'B', 0) # option data length in 8 octect units (ignoring first 8 octets) so, len 0 == 64bit header + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + setattr(self, 'length', (self.len + 1) * 8) + options = [] + + index = 0 + + while index < self.length - 2: + opt_type = ord(self.data[index]) + + # PAD1 option + if opt_type == 0: + index += 1 + continue + + opt_length = ord(self.data[index + 1]) + + if opt_type == 1: # PADN option + # PADN uses opt_length bytes in total + index += opt_length + 2 + continue + + options.append( + {'type': opt_type, 'opt_length': opt_length, 'data': self.data[index + 2:index + 2 + opt_length]}) + + # add the two chars and the option_length, to move to the next option + index += opt_length + 2 + + setattr(self, 'options', options) + + +class IP6HopOptsHeader(IP6OptsHeader): pass + + +class IP6DstOptsHeader(IP6OptsHeader): pass + + +class IP6RoutingHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('len', 'B', 0), # extension data length in 8 octect units (ignoring first 8 octets) (<= 46 for type 0) + ('type', 'B', 0), # routing type (currently, only 0 is used) + ('segs_left', 'B', 0), # remaining segments in route, until destination (<= 23) + ('rsvd_sl_bits', 'I', 0), # reserved (1 byte), strict/loose bitmap for addresses + ) + + @property + def sl_bits(self): + return self.rsvd_sl_bits & 0xffffff + + @sl_bits.setter + def sl_bits(self, v): + self.rsvd_sl_bits = (self.rsvd_sl_bits & ~0xfffff) | (v & 0xfffff) + + # Deprecated methods, will be removed in the future + # ================================================= + def _get_sl_bits(self): return self.sl_bits + + def _set_sl_bits(self, v): self.sl_bits = v + + # ================================================= + + def unpack(self, buf): + hdr_size = 8 + addr_size = 16 + + dpkt.Packet.unpack(self, buf) + + addresses = [] + num_addresses = self.len / 2 + buf = buf[hdr_size:hdr_size + num_addresses * addr_size] + + for i in range(num_addresses): + addresses.append(buf[i * addr_size: i * addr_size + addr_size]) + + self.data = buf + setattr(self, 'addresses', addresses) + setattr(self, 'length', self.len * 8 + 8) + + +class IP6FragmentHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('resv', 'B', 0), # reserved, set to 0 + ('frag_off_resv_m', 'H', 0), # frag offset (13 bits), reserved zero (2 bits), More frags flag + ('id', 'I', 0) # fragments id + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + setattr(self, 'length', self.__hdr_len__) + + @property + def frag_off(self): + return self.frag_off_resv_m >> 3 + + @frag_off.setter + def frag_off(self, v): + self.frag_off_resv_m = (self.frag_off_resv_m & ~0xfff8) | (v << 3) + + @property + def m_flag(self): + return self.frag_off_resv_m & 1 + + @m_flag.setter + def m_flag(self, v): + self.frag_off_resv_m = (self.frag_off_resv_m & ~0xfffe) | v + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_frag_off(self): return self.flag_off + + @deprecated + def _set_frag_off(self, v): self.flag_off = v + + @deprecated + def _get_m_flag(self): return self.m_flag + + @deprecated + def _set_m_flag(self, v): self.m_flag = v + + # ================================================= + + +class IP6AHHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('len', 'B', 0), # length of header in 4 octet units (ignoring first 2 units) + ('resv', 'H', 0), # reserved, 2 bytes of 0 + ('spi', 'I', 0), # SPI security parameter index + ('seq', 'I', 0) # sequence no. + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + setattr(self, 'length', (self.len + 2) * 4) + setattr(self, 'auth_data', self.data[:(self.len - 1) * 4]) + + +class IP6ESPHeader(IP6ExtensionHeader): + def unpack(self, buf): + raise NotImplementedError("ESP extension headers are not supported.") + + +ext_hdrs = [ip.IP_PROTO_HOPOPTS, ip.IP_PROTO_ROUTING, ip.IP_PROTO_FRAGMENT, ip.IP_PROTO_AH, ip.IP_PROTO_ESP, + ip.IP_PROTO_DSTOPTS] +ext_hdrs_cls = {ip.IP_PROTO_HOPOPTS: IP6HopOptsHeader, + ip.IP_PROTO_ROUTING: IP6RoutingHeader, + ip.IP_PROTO_FRAGMENT: IP6FragmentHeader, + ip.IP_PROTO_ESP: IP6ESPHeader, + ip.IP_PROTO_AH: IP6AHHeader, + ip.IP_PROTO_DSTOPTS: IP6DstOptsHeader} + + +def test_ipg(): + s = '`\x00\x00\x00\x00(\x06@\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x11$\xff\xfe\x8c\x11\xde\xfe\x80\x00\x00\x00\x00\x00\x00\x02\xb0\xd0\xff\xfe\xe1\x80r\xcd\xca\x00\x16\x04\x84F\xd5\x00\x00\x00\x00\xa0\x02\xff\xff\xf8\t\x00\x00\x02\x04\x05\xa0\x01\x03\x03\x00\x01\x01\x08\n}\x185?\x00\x00\x00\x00' + _ip = IP6(s) + # print `ip` + _ip.data.sum = 0 + s2 = str(_ip) + IP6(s) + # print `ip2` + assert (s == s2) + + +def test_ip6_routing_header(): + s = '`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x02\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' + ip = IP6(s) + s2 = str(ip) + # 43 is Routing header id + assert (len(ip.extension_hdrs[43].addresses) == 2) + assert (ip.tcp) + assert (s == s2) + + +def test_ip6_fragment_header(): + s = '\x06\xee\xff\xfb\x00\x00\xff\xff' + fh = IP6FragmentHeader(s) + # s2 = str(fh) variable 's2' is not used + str(fh) + assert (fh.nxt == 6) + assert (fh.id == 65535) + assert (fh.frag_off == 8191) + assert (fh.m_flag == 1) + + +def test_ip6_options_header(): + s = ';\x04\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x02\x00\x00' + options = IP6OptsHeader(s).options + assert (len(options) == 3) + + +def test_ip6_ah_header(): + s = ';\x04\x00\x00\x02\x02\x02\x02\x01\x01\x01\x01\x78\x78\x78\x78\x78\x78\x78\x78' + ah = IP6AHHeader(s) + assert (ah.length == 24) + assert (ah.auth_data == 'xxxxxxxx') + assert (ah.spi == 0x2020202) + assert (ah.seq == 0x1010101) + + +def test_ip6_extension_headers(): + p = '`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x02\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' + ip = IP6(p) + o = ';\x04\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x02\x00\x00' + options = IP6HopOptsHeader(o) + ip.extension_hdrs[0] = options + fh = '\x06\xee\xff\xfb\x00\x00\xff\xff' + ip.extension_hdrs[44] = IP6FragmentHeader(fh) + ah = ';\x04\x00\x00\x02\x02\x02\x02\x01\x01\x01\x01\x78\x78\x78\x78\x78\x78\x78\x78' + ip.extension_hdrs[51] = IP6AHHeader(ah) + do = ';\x02\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + ip.extension_hdrs[60] = IP6DstOptsHeader(do) + assert (len([k for k in ip.extension_hdrs if (not ip.extension_hdrs[k] is None)]) == 5) + + +if __name__ == '__main__': + test_ipg() + test_ip6_routing_header() + test_ip6_fragment_header() + test_ip6_options_header() + test_ip6_ah_header() + test_ip6_extension_headers() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/ipx.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ipx.py new file mode 100644 index 00000000..b95ff0d9 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ipx.py @@ -0,0 +1,18 @@ +# $Id: ipx.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Internetwork Packet Exchange.""" + +import dpkt + +IPX_HDR_LEN = 30 + + +class IPX(dpkt.Packet): + __hdr__ = ( + ('sum', 'H', 0xffff), + ('len', 'H', IPX_HDR_LEN), + ('tc', 'B', 0), + ('pt', 'B', 0), + ('dst', '12s', ''), + ('src', '12s', '') + ) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/llc.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/llc.py new file mode 100644 index 00000000..ce7429f6 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/llc.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +import struct +import dpkt +import stp +import ethernet + + +class LLC(dpkt.Packet): + _typesw = {} + + def _unpack_data(self, buf): + if self.type == ethernet.ETH_TYPE_8021Q: + self.tag, self.type = struct.unpack('>HH', buf[:4]) + buf = buf[4:] + elif self.type == ethernet.ETH_TYPE_MPLS or self.type == ethernet.ETH_TYPE_MPLS_MCAST: + # XXX - skip labels + for i in range(24): + if struct.unpack('>I', buf[i:i + 4])[0] & 0x0100: # MPLS_STACK_BOTTOM + break + self.type = ethernet.ETH_TYPE_IP + buf = buf[(i + 1) * 4:] + try: + self.data = self._typesw[self.type](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def unpack(self, buf): + self.data = buf + if self.data.startswith('\xaa\xaa'): + # SNAP + self.type = struct.unpack('>H', self.data[6:8])[0] + self._unpack_data(self.data[8:]) + else: + # non-SNAP + dsap = ord(self.data[0]) + if dsap == 0x06: # SAP_IP + self.data = self.ip = self._typesw[ethernet.ETH_TYPE_IP](self.data[3:]) + elif dsap == 0x10 or dsap == 0xe0: # SAP_NETWARE{1,2} + self.data = self.ipx = self._typesw[ethernet.ETH_TYPE_IPX](self.data[3:]) + elif dsap == 0x42: # SAP_STP + self.data = self.stp = stp.STP(self.data[3:]) + + +def test_llc(): + s = '\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04\xac\x17\x00\x00' + import ip + llc_pkt = LLC(s) + ip_pkt = ip.IP(llc_pkt.data) + assert (llc_pkt.type == ethernet.ETH_TYPE_IP) + assert (ip_pkt.dst == '\x3f\xf5\xd1\x69') + +if __name__ == '__main__': + test_llc() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/loopback.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/loopback.py new file mode 100644 index 00000000..5bf24bf5 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/loopback.py @@ -0,0 +1,25 @@ +# $Id: loopback.py 38 2007-03-17 03:33:16Z dugsong $ +# -*- coding: utf-8 -*- +"""Platform-dependent loopback header.""" + +import dpkt +import ethernet +import ip +import ip6 + + +class Loopback(dpkt.Packet): + __hdr__ = (('family', 'I', 0), ) + __byte_order__ = '@' + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.family == 2: + self.data = ip.IP(self.data) + elif self.family == 0x02000000: + self.family = 2 + self.data = ip.IP(self.data) + elif self.family in (24, 28, 30): + self.data = ip6.IP6(self.data) + elif self.family > 1500: + self.data = ethernet.Ethernet(self.data) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/mrt.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/mrt.py new file mode 100644 index 00000000..aa1dc78a --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/mrt.py @@ -0,0 +1,96 @@ +# $Id: mrt.py 29 2007-01-26 02:29:07Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Multi-threaded Routing Toolkit.""" + +import dpkt +import bgp + +# Multi-threaded Routing Toolkit +# http://www.ietf.org/internet-drafts/draft-ietf-grow-mrt-03.txt + +# MRT Types +NULL = 0 +START = 1 +DIE = 2 +I_AM_DEAD = 3 +PEER_DOWN = 4 +BGP = 5 # Deprecated by BGP4MP +RIP = 6 +IDRP = 7 +RIPNG = 8 +BGP4PLUS = 9 # Deprecated by BGP4MP +BGP4PLUS_01 = 10 # Deprecated by BGP4MP +OSPF = 11 +TABLE_DUMP = 12 +BGP4MP = 16 +BGP4MP_ET = 17 +ISIS = 32 +ISIS_ET = 33 +OSPF_ET = 64 + +# BGP4MP Subtypes +BGP4MP_STATE_CHANGE = 0 +BGP4MP_MESSAGE = 1 +BGP4MP_ENTRY = 2 +BGP4MP_SNAPSHOT = 3 +BGP4MP_MESSAGE_32BIT_AS = 4 + +# Address Family Types +AFI_IPv4 = 1 +AFI_IPv6 = 2 + + +class MRTHeader(dpkt.Packet): + __hdr__ = ( + ('ts', 'I', 0), + ('type', 'H', 0), + ('subtype', 'H', 0), + ('len', 'I', 0) + ) + + +class TableDump(dpkt.Packet): + __hdr__ = ( + ('view', 'H', 0), + ('seq', 'H', 0), + ('prefix', 'I', 0), + ('prefix_len', 'B', 0), + ('status', 'B', 1), + ('originated_ts', 'I', 0), + ('peer_ip', 'I', 0), + ('peer_as', 'H', 0), + ('attr_len', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + plen = self.attr_len + l = [] + while plen > 0: + attr = bgp.BGP.Update.Attribute(self.data) + self.data = self.data[len(attr):] + plen -= len(attr) + l.append(attr) + self.attributes = l + + +class BGP4MPMessage(dpkt.Packet): + __hdr__ = ( + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('intf', 'H', 0), + ('family', 'H', AFI_IPv4), + ('src_ip', 'I', 0), + ('dst_ip', 'I', 0) + ) + + +class BGP4MPMessage_32(dpkt.Packet): + __hdr__ = ( + ('src_as', 'I', 0), + ('dst_as', 'I', 0), + ('intf', 'H', 0), + ('family', 'H', AFI_IPv4), + ('src_ip', 'I', 0), + ('dst_ip', 'I', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/netbios.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/netbios.py new file mode 100644 index 00000000..54586327 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/netbios.py @@ -0,0 +1,166 @@ +# $Id: netbios.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Network Basic Input/Output System.""" + +import struct +import dpkt +import dns + + +def encode_name(name): + """Return the NetBIOS first-level encoded name.""" + l = [] + for c in struct.pack('16s', name): + c = ord(c) + l.append(chr((c >> 4) + 0x41)) + l.append(chr((c & 0xf) + 0x41)) + return ''.join(l) + + +def decode_name(nbname): + """Return the NetBIOS first-level decoded nbname.""" + if len(nbname) != 32: + return nbname + l = [] + for i in range(0, 32, 2): + l.append(chr(((ord(nbname[i]) - 0x41) << 4) | + ((ord(nbname[i + 1]) - 0x41) & 0xf))) + return ''.join(l).split('\x00', 1)[0] + +# RR types +NS_A = 0x01 # IP address +NS_NS = 0x02 # Name Server +NS_NULL = 0x0A # NULL +NS_NB = 0x20 # NetBIOS general Name Service +NS_NBSTAT = 0x21 # NetBIOS NODE STATUS + +# RR classes +NS_IN = 1 + +# NBSTAT name flags +NS_NAME_G = 0x8000 # group name (as opposed to unique) +NS_NAME_DRG = 0x1000 # deregister +NS_NAME_CNF = 0x0800 # conflict +NS_NAME_ACT = 0x0400 # active +NS_NAME_PRM = 0x0200 # permanent + +# NBSTAT service names +nbstat_svcs = { + # (service, unique): list of ordered (name prefix, service name) tuples + (0x00, 0): [('', 'Domain Name')], + (0x00, 1): [('IS~', 'IIS'), ('', 'Workstation Service')], + (0x01, 0): [('__MSBROWSE__', 'Master Browser')], + (0x01, 1): [('', 'Messenger Service')], + (0x03, 1): [('', 'Messenger Service')], + (0x06, 1): [('', 'RAS Server Service')], + (0x1B, 1): [('', 'Domain Master Browser')], + (0x1C, 0): [('INet~Services', 'IIS'), ('', 'Domain Controllers')], + (0x1D, 1): [('', 'Master Browser')], + (0x1E, 0): [('', 'Browser Service Elections')], + (0x1F, 1): [('', 'NetDDE Service')], + (0x20, 1): [('Forte_$ND800ZA', 'DCA IrmaLan Gateway Server Service'), + ('', 'File Server Service')], + (0x21, 1): [('', 'RAS Client Service')], + (0x22, 1): [('', 'Microsoft Exchange Interchange(MSMail Connector)')], + (0x23, 1): [('', 'Microsoft Exchange Store')], + (0x24, 1): [('', 'Microsoft Exchange Directory')], + (0x2B, 1): [('', 'Lotus Notes Server Service')], + (0x2F, 0): [('IRISMULTICAST', 'Lotus Notes')], + (0x30, 1): [('', 'Modem Sharing Server Service')], + (0x31, 1): [('', 'Modem Sharing Client Service')], + (0x33, 0): [('IRISNAMESERVER', 'Lotus Notes')], + (0x43, 1): [('', 'SMS Clients Remote Control')], + (0x44, 1): [('', 'SMS Administrators Remote Control Tool')], + (0x45, 1): [('', 'SMS Clients Remote Chat')], + (0x46, 1): [('', 'SMS Clients Remote Transfer')], + (0x4C, 1): [('', 'DEC Pathworks TCPIP service on Windows NT')], + (0x52, 1): [('', 'DEC Pathworks TCPIP service on Windows NT')], + (0x87, 1): [('', 'Microsoft Exchange MTA')], + (0x6A, 1): [('', 'Microsoft Exchange IMC')], + (0xBE, 1): [('', 'Network Monitor Agent')], + (0xBF, 1): [('', 'Network Monitor Application')] +} + + +def node_to_service_name((name, service, flags)): + try: + unique = int(flags & NS_NAME_G == 0) + for namepfx, svcname in nbstat_svcs[(service, unique)]: + if name.startswith(namepfx): + return svcname + except KeyError: + pass + return '' + + +class NS(dns.DNS): + """NetBIOS Name Service.""" + + class Q(dns.DNS.Q): + pass + + class RR(dns.DNS.RR): + """NetBIOS resource record.""" + + def unpack_rdata(self, buf, off): + if self.type == NS_A: + self.ip = self.rdata + elif self.type == NS_NBSTAT: + num = ord(self.rdata[0]) + off = 1 + l = [] + for i in range(num): + name = self.rdata[off:off + 15].split(None, 1)[0].split('\x00', 1)[0] + service = ord(self.rdata[off + 15]) + off += 16 + flags = struct.unpack('>H', self.rdata[off:off + 2])[0] + off += 2 + l.append((name, service, flags)) + self.nodenames = l + # XXX - skip stats + + def pack_name(self, buf, name): + return dns.DNS.pack_name(self, buf, encode_name(name)) + + def unpack_name(self, buf, off): + name, off = dns.DNS.unpack_name(self, buf, off) + return decode_name(name), off + + +class Session(dpkt.Packet): + """NetBIOS Session Service.""" + __hdr__ = ( + ('type', 'B', 0), + ('flags', 'B', 0), + ('len', 'H', 0) + ) + + +SSN_MESSAGE = 0 +SSN_REQUEST = 1 +SSN_POSITIVE = 2 +SSN_NEGATIVE = 3 +SSN_RETARGET = 4 +SSN_KEEPALIVE = 5 + + +class Datagram(dpkt.Packet): + """NetBIOS Datagram Service.""" + __hdr__ = ( + ('type', 'B', 0), + ('flags', 'B', 0), + ('id', 'H', 0), + ('src', 'I', 0), + ('sport', 'H', 0), + ('len', 'H', 0), + ('off', 'H', 0) + ) + + +DGRAM_UNIQUE = 0x10 +DGRAM_GROUP = 0x11 +DGRAM_BROADCAST = 0x12 +DGRAM_ERROR = 0x13 +DGRAM_QUERY = 0x14 +DGRAM_POSITIVE = 0x15 +DGRAM_NEGATIVE = 0x16 diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/netflow.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/netflow.py new file mode 100644 index 00000000..4e53ba79 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/netflow.py @@ -0,0 +1,219 @@ +# $Id: netflow.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Cisco Netflow.""" + +import itertools +import struct +import dpkt + + +class NetflowBase(dpkt.Packet): + """Base class for Cisco Netflow packets.""" + + __hdr__ = ( + ('version', 'H', 1), + ('count', 'H', 0), + ('sys_uptime', 'I', 0), + ('unix_sec', 'I', 0), + ('unix_nsec', 'I', 0) + ) + + def __len__(self): + return self.__hdr_len__ + (len(self.data[0]) * self.count) + + def __str__(self): + # for now, don't try to enforce any size limits + self.count = len(self.data) + return self.pack_hdr() + ''.join(map(str, self.data)) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = self.data + l = [] + while buf: + flow = self.NetflowRecord(buf) + l.append(flow) + buf = buf[len(flow):] + self.data = l + + class NetflowRecordBase(dpkt.Packet): + """Base class for netflow v1-v7 netflow records.""" + + # performance optimizations + def __len__(self): + # don't bother with data + return self.__hdr_len__ + + def __str__(self): + # don't bother with data + return self.pack_hdr() + + def unpack(self, buf): + # don't bother with data + for k, v in itertools.izip(self.__hdr_fields__, + struct.unpack(self.__hdr_fmt__, buf[:self.__hdr_len__])): + setattr(self, k, v) + self.data = "" + + +class Netflow1(NetflowBase): + """Netflow Version 1.""" + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v1 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('pad1', 'H', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('tcp_flags', 'B', 0), + ('pad2', 'B', 0), + ('pad3', 'H', 0), + ('reserved', 'I', 0) + ) + + +# FYI, versions 2-4 don't appear to have ever seen the light of day. + +class Netflow5(NetflowBase): + """Netflow Version 5.""" + __hdr__ = NetflowBase.__hdr__ + ( + ('flow_sequence', 'I', 0), + ('engine_type', 'B', 0), + ('engine_id', 'B', 0), + ('reserved', 'H', 0), + ) + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v5 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('pad1', 'B', 0), + ('tcp_flags', 'B', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('src_mask', 'B', 0), + ('dst_mask', 'B', 0), + ('pad2', 'H', 0), + ) + + +class Netflow6(NetflowBase): + """Netflow Version 6. + XXX - unsupported by Cisco, but may be found in the field. + """ + __hdr__ = Netflow5.__hdr__ + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v6 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('pad1', 'B', 0), + ('tcp_flags', 'B', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('src_mask', 'B', 0), + ('dst_mask', 'B', 0), + ('in_encaps', 'B', 0), + ('out_encaps', 'B', 0), + ('peer_nexthop', 'I', 0), + ) + + +class Netflow7(NetflowBase): + """Netflow Version 7.""" + __hdr__ = NetflowBase.__hdr__ + ( + ('flow_sequence', 'I', 0), + ('reserved', 'I', 0), + ) + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v7 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('flags', 'B', 0), + ('tcp_flags', 'B', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('src_mask', 'B', 0), + ('dst_mask', 'B', 0), + ('pad2', 'H', 0), + ('router_sc', 'I', 0), + ) + +# No support for v8 or v9 yet. + +__sample_v1 = "\x00\x01\x00\x18gza> 3) & 0x7 + + @v.setter + def v(self, v): + self.flags = (self.flags & ~0x38) | ((v & 0x7) << 3) + + @property + def li(self): + return (self.flags >> 6) & 0x3 + + @li.setter + def li(self, li): + self.flags = (self.flags & ~0xc0) | ((li & 0x3) << 6) + + @property + def mode(self): + return self.flags & 0x7 + + @mode.setter + def mode(self, mode): + self.flags = (self.flags & ~0x7) | (mode & 0x7) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): return self.v + + @deprecated + def _set_v(self, v): self.v = v + + @deprecated + def _get_li(self): return self.li + + @deprecated + def _set_li(self, li): self.li = li + + @deprecated + def _get_mode(self): return self.mode + + @deprecated + def _set_mode(self, mode): self.mode = mode + # ================================================= + +__s = '\x24\x02\x04\xef\x00\x00\x00\x84\x00\x00\x33\x27\xc1\x02\x04\x02\xc8\x90\xec\x11\x22\xae\x07\xe5\xc8\x90\xf9\xd9\xc0\x7e\x8c\xcd\xc8\x90\xf9\xd9\xda\xc5\xb0\x78\xc8\x90\xf9\xd9\xda\xc6\x8a\x93' + + +def test_ntp_pack(): + n = NTP(__s) + assert (__s == str(n)) + + +def test_ntp_unpack(): + n = NTP(__s) + assert (n.li == NO_WARNING) + assert (n.v == 4) + assert (n.mode == SERVER) + assert (n.stratum == 2) + assert (n.id == '\xc1\x02\x04\x02') + # test get/set functions + n.li = ALARM_CONDITION + n.v = 3 + n.mode = CLIENT + assert (n.li == ALARM_CONDITION) + assert (n.v == 3) + assert (n.mode == CLIENT) + +if __name__ == '__main__': + test_ntp_pack() + test_ntp_unpack() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/ospf.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ospf.py new file mode 100644 index 00000000..cc47aae3 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ospf.py @@ -0,0 +1,27 @@ +# $Id: ospf.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Open Shortest Path First.""" + +import dpkt + +AUTH_NONE = 0 +AUTH_PASSWORD = 1 +AUTH_CRYPTO = 2 + + +class OSPF(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 0), + ('type', 'B', 0), + ('len', 'H', 0), + ('router', 'I', 0), + ('area', 'I', 0), + ('sum', 'H', 0), + ('atype', 'H', 0), + ('auth', '8s', '') + ) + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/pcap.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/pcap.py new file mode 100644 index 00000000..c14ba6de --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/pcap.py @@ -0,0 +1,172 @@ +# $Id: pcap.py 77 2011-01-06 15:59:38Z dugsong $ +# -*- coding: utf-8 -*- +"""Libpcap file format.""" + +import sys +import time +import dpkt + + +TCPDUMP_MAGIC = 0xa1b2c3d4L +PMUDPCT_MAGIC = 0xd4c3b2a1L + +PCAP_VERSION_MAJOR = 2 +PCAP_VERSION_MINOR = 4 + +DLT_NULL = 0 +DLT_EN10MB = 1 +DLT_EN3MB = 2 +DLT_AX25 = 3 +DLT_PRONET = 4 +DLT_CHAOS = 5 +DLT_IEEE802 = 6 +DLT_ARCNET = 7 +DLT_SLIP = 8 +DLT_PPP = 9 +DLT_FDDI = 10 +DLT_PFSYNC = 18 +DLT_IEEE802_11 = 105 +DLT_LINUX_SLL = 113 +DLT_PFLOG = 117 +DLT_IEEE802_11_RADIO = 127 + +if sys.platform.find('openbsd') != -1: + DLT_LOOP = 12 + DLT_RAW = 14 +else: + DLT_LOOP = 108 + DLT_RAW = 12 + +dltoff = {DLT_NULL: 4, DLT_EN10MB: 14, DLT_IEEE802: 22, DLT_ARCNET: 6, + DLT_SLIP: 16, DLT_PPP: 4, DLT_FDDI: 21, DLT_PFLOG: 48, DLT_PFSYNC: 4, + DLT_LOOP: 4, DLT_LINUX_SLL: 16} + + +class PktHdr(dpkt.Packet): + """pcap packet header.""" + __hdr__ = ( + ('tv_sec', 'I', 0), + ('tv_usec', 'I', 0), + ('caplen', 'I', 0), + ('len', 'I', 0), + ) + + +class LEPktHdr(PktHdr): + __byte_order__ = '<' + + +class FileHdr(dpkt.Packet): + """pcap file header.""" + __hdr__ = ( + ('magic', 'I', TCPDUMP_MAGIC), + ('v_major', 'H', PCAP_VERSION_MAJOR), + ('v_minor', 'H', PCAP_VERSION_MINOR), + ('thiszone', 'I', 0), + ('sigfigs', 'I', 0), + ('snaplen', 'I', 1500), + ('linktype', 'I', 1), + ) + + +class LEFileHdr(FileHdr): + __byte_order__ = '<' + + +class Writer(object): + """Simple pcap dumpfile writer.""" + + def __init__(self, fileobj, snaplen=1500, linktype=DLT_EN10MB): + self.__f = fileobj + if sys.byteorder == 'little': + fh = LEFileHdr(snaplen=snaplen, linktype=linktype) + else: + fh = FileHdr(snaplen=snaplen, linktype=linktype) + self.__f.write(str(fh)) + + def writepkt(self, pkt, ts=None): + if ts is None: + ts = time.time() + s = str(pkt) + n = len(s) + if sys.byteorder == 'little': + ph = LEPktHdr(tv_sec=int(ts), + tv_usec=int((float(ts) - int(ts)) * 1000000.0), + caplen=n, len=n) + else: + ph = PktHdr(tv_sec=int(ts), + tv_usec=int((float(ts) - int(ts)) * 1000000.0), + caplen=n, len=n) + self.__f.write(str(ph)) + self.__f.write(s) + + def close(self): + self.__f.close() + + +class Reader(object): + """Simple pypcap-compatible pcap file reader.""" + + def __init__(self, fileobj): + self.name = fileobj.name + self.fd = fileobj.fileno() + self.__f = fileobj + buf = self.__f.read(FileHdr.__hdr_len__) + self.__fh = FileHdr(buf) + self.__ph = PktHdr + if self.__fh.magic == PMUDPCT_MAGIC: + self.__fh = LEFileHdr(buf) + self.__ph = LEPktHdr + elif self.__fh.magic != TCPDUMP_MAGIC: + raise ValueError('invalid tcpdump header') + if self.__fh.linktype in dltoff: + self.dloff = dltoff[self.__fh.linktype] + else: + self.dloff = 0 + self.snaplen = self.__fh.snaplen + self.filter = '' + + def fileno(self): + return self.fd + + def datalink(self): + return self.__fh.linktype + + def setfilter(self, value, optimize=1): + return NotImplementedError + + def readpkts(self): + return list(self) + + def dispatch(self, cnt, callback, *args): + if cnt > 0: + for i in range(cnt): + ts, pkt = self.next() + callback(ts, pkt, *args) + else: + for ts, pkt in self: + callback(ts, pkt, *args) + + def loop(self, callback, *args): + self.dispatch(0, callback, *args) + + def __iter__(self): + self.__f.seek(FileHdr.__hdr_len__) + while 1: + buf = self.__f.read(PktHdr.__hdr_len__) + if not buf: break + hdr = self.__ph(buf) + buf = self.__f.read(hdr.caplen) + yield (hdr.tv_sec + (hdr.tv_usec / 1000000.0), buf) + + +def test_pcap_endian(): + be = '\xa1\xb2\xc3\xd4\x00\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x01' + le = '\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x01\x00\x00\x00' + befh = FileHdr(be) + lefh = LEFileHdr(le) + assert (befh.linktype == lefh.linktype) + +if __name__ == '__main__': + test_pcap_endian() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/pim.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/pim.py new file mode 100644 index 00000000..6cd16a42 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/pim.py @@ -0,0 +1,46 @@ +# $Id: pim.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Protocol Independent Multicast.""" + +import dpkt +from decorators import deprecated + + +class PIM(dpkt.Packet): + __hdr__ = ( + ('v_type', 'B', 0x20), + ('rsvd', 'B', 0), + ('sum', 'H', 0) + ) + + @property + def v(self): return self.v_type >> 4 + + @v.setter + def v(self, v): self.v_type = (v << 4) | (self.v_type & 0xf) + + @property + def type(self): return self.v_type & 0xf + + @type.setter + def type(self, type): self.v_type = (self.v_type & 0xf0) | type + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): return self.v + + @deprecated + def _set_v(self, v): self.v = v + + @deprecated + def _get_type(self): return self.type + + @deprecated + def _set_type(self, type): self.type = type + # ================================================= + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/pmap.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/pmap.py new file mode 100644 index 00000000..0e57b64c --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/pmap.py @@ -0,0 +1,18 @@ +# $Id: pmap.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Portmap / rpcbind.""" + +import dpkt + +PMAP_PROG = 100000L +PMAP_PROCDUMP = 4 +PMAP_VERS = 2 + + +class Pmap(dpkt.Packet): + __hdr__ = ( + ('prog', 'I', 0), + ('vers', 'I', 0), + ('prot', 'I', 0), + ('port', 'I', 0), + ) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/ppp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ppp.py new file mode 100644 index 00000000..282bdd98 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ppp.py @@ -0,0 +1,66 @@ +# $Id: ppp.py 65 2010-03-26 02:53:51Z dugsong $ +# -*- coding: utf-8 -*- +"""Point-to-Point Protocol.""" + +import struct +import dpkt + +# XXX - finish later + +# http://www.iana.org/assignments/ppp-numbers +PPP_IP = 0x21 # Internet Protocol +PPP_IP6 = 0x57 # Internet Protocol v6 + +# Protocol field compression +PFC_BIT = 0x01 + + +class PPP(dpkt.Packet): + __hdr__ = ( + ('p', 'B', PPP_IP), + ) + _protosw = {} + + @classmethod + def set_p(cls, p, pktclass): + cls._protosw[p] = pktclass + + @classmethod + def get_p(cls, p): + return cls._protosw[p] + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.p & PFC_BIT == 0: + self.p = struct.unpack('>H', buf[:2])[0] + self.data = self.data[1:] + try: + self.data = self._protosw[self.p](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, struct.error, dpkt.UnpackError): + pass + + def pack_hdr(self): + try: + if self.p > 0xff: + return struct.pack('>H', self.p) + return dpkt.Packet.pack_hdr(self) + except struct.error, e: + raise dpkt.PackError(str(e)) + + +def __load_protos(): + g = globals() + for k, v in g.iteritems(): + if k.startswith('PPP_'): + name = k[4:] + modname = name.lower() + try: + mod = __import__(modname, g) + except ImportError: + continue + PPP.set_p(v, getattr(mod, name)) + + +if not PPP._protosw: + __load_protos() diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/pppoe.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/pppoe.py new file mode 100644 index 00000000..72e7a31b --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/pppoe.py @@ -0,0 +1,61 @@ +# $Id: pppoe.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""PPP-over-Ethernet.""" + +import dpkt +import ppp +from decorators import deprecated + +# RFC 2516 codes +PPPoE_PADI = 0x09 +PPPoE_PADO = 0x07 +PPPoE_PADR = 0x19 +PPPoE_PADS = 0x65 +PPPoE_PADT = 0xA7 +PPPoE_SESSION = 0x00 + + +class PPPoE(dpkt.Packet): + __hdr__ = ( + ('v_type', 'B', 0x11), + ('code', 'B', 0), + ('session', 'H', 0), + ('len', 'H', 0) # payload length + ) + + @property + def v(self): return self.v_type >> 4 + + @v.setter + def v(self, v): self.v_type = (v << 4) | (self.v_type & 0xf) + + @property + def type(self): return self.v_type & 0xf + + @type.setter + def type(self, t): self.v_type = (self.v_type & 0xf0) | t + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): return self.v + + @deprecated + def _set_v(self, v): self.v = v + + @deprecated + def _get_type(self): return self.type + + @deprecated + def _set_type(self, t): self.type = t + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + if self.code == 0: + self.data = self.ppp = ppp.PPP(self.data) + except dpkt.UnpackError: + pass + +# XXX - TODO TLVs, etc. diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/qq.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/qq.py new file mode 100644 index 00000000..3399d882 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/qq.py @@ -0,0 +1,224 @@ +# $Id: qq.py 48 2008-05-27 17:31:15Z yardley $ +# -*- coding: utf-8 -*- +from dpkt import Packet + +# header_type +QQ_HEADER_BASIC_FAMILY = 0x02 +QQ_HEADER_P2P_FAMILY = 0x00 +QQ_HEADER_03_FAMILY = 0x03 +QQ_HEADER_04_FAMILY = 0x04 +QQ_HEADER_05_FAMILY = 0x05 + +header_type_str = [ + "QQ_HEADER_P2P_FAMILY", + "Unknown Type", + "QQ_HEADER_03_FAMILY", + "QQ_HEADER_04_FAMILY", + "QQ_HEADER_05_FAMILY", +] + +# command +QQ_CMD_LOGOUT = 0x0001 +QQ_CMD_KEEP_ALIVE = 0x0002 +QQ_CMD_MODIFY_INFO = 0x0004 +QQ_CMD_SEARCH_USER = 0x0005 +QQ_CMD_GET_USER_INFO = 0x0006 +QQ_CMD_ADD_FRIEND = 0x0009 +QQ_CMD_DELETE_FRIEND = 0x000A +QQ_CMD_ADD_FRIEND_AUTH = 0x000B +QQ_CMD_CHANGE_STATUS = 0x000D +QQ_CMD_ACK_SYS_MSG = 0x0012 +QQ_CMD_SEND_IM = 0x0016 +QQ_CMD_RECV_IM = 0x0017 +QQ_CMD_REMOVE_SELF = 0x001C +QQ_CMD_REQUEST_KEY = 0x001D +QQ_CMD_LOGIN = 0x0022 +QQ_CMD_GET_FRIEND_LIST = 0x0026 +QQ_CMD_GET_ONLINE_OP = 0x0027 +QQ_CMD_SEND_SMS = 0x002D +QQ_CMD_CLUSTER_CMD = 0x0030 +QQ_CMD_TEST = 0x0031 +QQ_CMD_GROUP_DATA_OP = 0x003C +QQ_CMD_UPLOAD_GROUP_FRIEND = 0x003D +QQ_CMD_FRIEND_DATA_OP = 0x003E +QQ_CMD_DOWNLOAD_GROUP_FRIEND = 0x0058 +QQ_CMD_FRIEND_LEVEL_OP = 0x005C +QQ_CMD_PRIVACY_DATA_OP = 0x005E +QQ_CMD_CLUSTER_DATA_OP = 0x005F +QQ_CMD_ADVANCED_SEARCH = 0x0061 +QQ_CMD_REQUEST_LOGIN_TOKEN = 0x0062 +QQ_CMD_USER_PROPERTY_OP = 0x0065 +QQ_CMD_TEMP_SESSION_OP = 0x0066 +QQ_CMD_SIGNATURE_OP = 0x0067 +QQ_CMD_RECV_MSG_SYS = 0x0080 +QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS = 0x0081 +QQ_CMD_WEATHER_OP = 0x00A6 +QQ_CMD_ADD_FRIEND_EX = 0x00A7 +QQ_CMD_AUTHORIZE = 0X00A8 +QQ_CMD_UNKNOWN = 0xFFFF +QQ_SUB_CMD_SEARCH_ME_BY_QQ_ONLY = 0x03 +QQ_SUB_CMD_SHARE_GEOGRAPHY = 0x04 +QQ_SUB_CMD_GET_FRIEND_LEVEL = 0x02 +QQ_SUB_CMD_GET_CLUSTER_ONLINE_MEMBER = 0x01 +QQ_05_CMD_REQUEST_AGENT = 0x0021 +QQ_05_CMD_REQUEST_FACE = 0x0022 +QQ_05_CMD_TRANSFER = 0x0023 +QQ_05_CMD_REQUEST_BEGIN = 0x0026 +QQ_CLUSTER_CMD_CREATE_CLUSTER = 0x01 +QQ_CLUSTER_CMD_MODIFY_MEMBER = 0x02 +QQ_CLUSTER_CMD_MODIFY_CLUSTER_INFO = 0x03 +QQ_CLUSTER_CMD_GET_CLUSTER_INFO = 0x04 +QQ_CLUSTER_CMD_ACTIVATE_CLUSTER = 0x05 +QQ_CLUSTER_CMD_SEARCH_CLUSTER = 0x06 +QQ_CLUSTER_CMD_JOIN_CLUSTER = 0x07 +QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH = 0x08 +QQ_CLUSTER_CMD_EXIT_CLUSTER = 0x09 +QQ_CLUSTER_CMD_SEND_IM = 0x0A +QQ_CLUSTER_CMD_GET_ONLINE_MEMBER = 0x0B +QQ_CLUSTER_CMD_GET_MEMBER_INFO = 0x0C +QQ_CLUSTER_CMD_MODIFY_CARD = 0x0E +QQ_CLUSTER_CMD_GET_CARD_BATCH = 0x0F +QQ_CLUSTER_CMD_GET_CARD = 0x10 +QQ_CLUSTER_CMD_COMMIT_ORGANIZATION = 0x11 +QQ_CLUSTER_CMD_UPDATE_ORGANIZATION = 0x12 +QQ_CLUSTER_CMD_COMMIT_MEMBER_ORGANIZATION = 0x13 +QQ_CLUSTER_CMD_GET_VERSION_ID = 0x19 +QQ_CLUSTER_CMD_SEND_IM_EX = 0x1A +QQ_CLUSTER_CMD_SET_ROLE = 0x1B +QQ_CLUSTER_CMD_TRANSFER_ROLE = 0x1C +QQ_CLUSTER_CMD_CREATE_TEMP = 0x30 +QQ_CLUSTER_CMD_MODIFY_TEMP_MEMBER = 0x31 +QQ_CLUSTER_CMD_EXIT_TEMP = 0x32 +QQ_CLUSTER_CMD_GET_TEMP_INFO = 0x33 +QQ_CLUSTER_CMD_MODIFY_TEMP_INFO = 0x34 +QQ_CLUSTER_CMD_SEND_TEMP_IM = 0x35 +QQ_CLUSTER_CMD_SUB_CLUSTER_OP = 0x36 +QQ_CLUSTER_CMD_ACTIVATE_TEMP = 0x37 + +QQ_CLUSTER_SUB_CMD_ADD_MEMBER = 0x01 +QQ_CLUSTER_SUB_CMD_REMOVE_MEMBER = 0x02 +QQ_CLUSTER_SUB_CMD_GET_SUBJECT_LIST = 0x02 +QQ_CLUSTER_SUB_CMD_GET_DIALOG_LIST = 0x01 + +QQ_SUB_CMD_GET_ONLINE_FRIEND = 0x2 +QQ_SUB_CMD_GET_ONLINE_SERVICE = 0x3 +QQ_SUB_CMD_UPLOAD_GROUP_NAME = 0x2 +QQ_SUB_CMD_DOWNLOAD_GROUP_NAME = 0x1 +QQ_SUB_CMD_SEND_TEMP_SESSION_IM = 0x01 +QQ_SUB_CMD_BATCH_DOWNLOAD_FRIEND_REMARK = 0x0 +QQ_SUB_CMD_UPLOAD_FRIEND_REMARK = 0x1 +QQ_SUB_CMD_REMOVE_FRIEND_FROM_LIST = 0x2 +QQ_SUB_CMD_DOWNLOAD_FRIEND_REMARK = 0x3 +QQ_SUB_CMD_MODIFY_SIGNATURE = 0x01 +QQ_SUB_CMD_DELETE_SIGNATURE = 0x02 +QQ_SUB_CMD_GET_SIGNATURE = 0x03 +QQ_SUB_CMD_GET_USER_PROPERTY = 0x01 +QQ_SUB_CMD_GET_WEATHER = 0x01 + +QQ_FILE_CMD_HEART_BEAT = 0x0001 +QQ_FILE_CMD_HEART_BEAT_ACK = 0x0002 +QQ_FILE_CMD_TRANSFER_FINISHED = 0x0003 +QQ_FILE_CMD_FILE_OP = 0x0007 +QQ_FILE_CMD_FILE_OP_ACK = 0x0008 +QQ_FILE_CMD_SENDER_SAY_HELLO = 0x0031 +QQ_FILE_CMD_SENDER_SAY_HELLO_ACK = 0x0032 +QQ_FILE_CMD_RECEIVER_SAY_HELLO = 0x0033 +QQ_FILE_CMD_RECEIVER_SAY_HELLO_ACK = 0x0034 +QQ_FILE_CMD_NOTIFY_IP_ACK = 0x003C +QQ_FILE_CMD_PING = 0x003D +QQ_FILE_CMD_PONG = 0x003E +QQ_FILE_CMD_YES_I_AM_BEHIND_FIREWALL = 0x0040 +QQ_FILE_CMD_REQUEST_AGENT = 0x0001 +QQ_FILE_CMD_CHECK_IN = 0x0002 +QQ_FILE_CMD_FORWARD = 0x0003 +QQ_FILE_CMD_FORWARD_FINISHED = 0x0004 +QQ_FILE_CMD_IT_IS_TIME = 0x0005 +QQ_FILE_CMD_I_AM_READY = 0x0006 + +command_str = { + 0x0001: "QQ_CMD_LOGOUT", + 0x0002: "QQ_CMD_KEEP_ALIVE", + 0x0004: "QQ_CMD_MODIFY_INFO", + 0x0005: "QQ_CMD_SEARCH_USER", + 0x0006: "QQ_CMD_GET_USER_INFO", + 0x0009: "QQ_CMD_ADD_FRIEND", + 0x000A: "QQ_CMD_DELETE_FRIEND", + 0x000B: "QQ_CMD_ADD_FRIEND_AUTH", + 0x000D: "QQ_CMD_CHANGE_STATUS", + 0x0012: "QQ_CMD_ACK_SYS_MSG", + 0x0016: "QQ_CMD_SEND_IM", + 0x0017: "QQ_CMD_RECV_IM", + 0x001C: "QQ_CMD_REMOVE_SELF", + 0x001D: "QQ_CMD_REQUEST_KEY", + 0x0022: "QQ_CMD_LOGIN", + 0x0026: "QQ_CMD_GET_FRIEND_LIST", + 0x0027: "QQ_CMD_GET_ONLINE_OP", + 0x002D: "QQ_CMD_SEND_SMS", + 0x0030: "QQ_CMD_CLUSTER_CMD", + 0x0031: "QQ_CMD_TEST", + 0x003C: "QQ_CMD_GROUP_DATA_OP", + 0x003D: "QQ_CMD_UPLOAD_GROUP_FRIEND", + 0x003E: "QQ_CMD_FRIEND_DATA_OP", + 0x0058: "QQ_CMD_DOWNLOAD_GROUP_FRIEND", + 0x005C: "QQ_CMD_FRIEND_LEVEL_OP", + 0x005E: "QQ_CMD_PRIVACY_DATA_OP", + 0x005F: "QQ_CMD_CLUSTER_DATA_OP", + 0x0061: "QQ_CMD_ADVANCED_SEARCH", + 0x0062: "QQ_CMD_REQUEST_LOGIN_TOKEN", + 0x0065: "QQ_CMD_USER_PROPERTY_OP", + 0x0066: "QQ_CMD_TEMP_SESSION_OP", + 0x0067: "QQ_CMD_SIGNATURE_OP", + 0x0080: "QQ_CMD_RECV_MSG_SYS", + 0x0081: "QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS", + 0x00A6: "QQ_CMD_WEATHER_OP", + 0x00A7: "QQ_CMD_ADD_FRIEND_EX", + 0x00A8: "QQ_CMD_AUTHORIZE", + 0xFFFF: "QQ_CMD_UNKNOWN", + 0x0021: "_CMD_REQUEST_AGENT", + 0x0022: "_CMD_REQUEST_FACE", + 0x0023: "_CMD_TRANSFER", + 0x0026: "_CMD_REQUEST_BEGIN", +} + + +class QQBasicPacket(Packet): + __hdr__ = ( + ('header_type', 'B', 2), + ('source', 'H', 0), + ('command', 'H', 0), + ('sequence', 'H', 0), + ('qqNum', 'L', 0), + ) + + +class QQ3Packet(Packet): + __hdr__ = ( + ('header_type', 'B', 3), + ('command', 'B', 0), + ('sequence', 'H', 0), + ('unknown1', 'L', 0), + ('unknown2', 'L', 0), + ('unknown3', 'L', 0), + ('unknown4', 'L', 0), + ('unknown5', 'L', 0), + ('unknown6', 'L', 0), + ('unknown7', 'L', 0), + ('unknown8', 'L', 0), + ('unknown9', 'L', 0), + ('unknown10', 'B', 1), + ('unknown11', 'B', 0), + ('unknown12', 'B', 0), + ('source', 'H', 0), + ('unknown13', 'B', 0), + ) + + +class QQ5Packet(Packet): + __hdr__ = ( + ('header_type', 'B', 5), + ('source', 'H', 0), + ('unknown', 'H', 0), + ('command', 'H', 0), + ('sequence', 'H', 0), + ('qqNum', 'L', 0), + ) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/radiotap.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/radiotap.py new file mode 100644 index 00000000..76e6306b --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/radiotap.py @@ -0,0 +1,532 @@ +# -*- coding: utf-8 -*- +"""Radiotap""" + +import dpkt +import ieee80211 +import socket +from decorators import deprecated + +# Ref: http://www.radiotap.org +# Fields Ref: http://www.radiotap.org/defined-fields/all + +# Present flags +_TSFT_MASK = 0x1000000 +_FLAGS_MASK = 0x2000000 +_RATE_MASK = 0x4000000 +_CHANNEL_MASK = 0x8000000 +_FHSS_MASK = 0x10000000 +_ANT_SIG_MASK = 0x20000000 +_ANT_NOISE_MASK = 0x40000000 +_LOCK_QUAL_MASK = 0x80000000 +_TX_ATTN_MASK = 0x10000 +_DB_TX_ATTN_MASK = 0x20000 +_DBM_TX_POWER_MASK = 0x40000 +_ANTENNA_MASK = 0x80000 +_DB_ANT_SIG_MASK = 0x100000 +_DB_ANT_NOISE_MASK = 0x200000 +_RX_FLAGS_MASK = 0x400000 +_CHANNELPLUS_MASK = 0x200 +_EXT_MASK = 0x1 + +_TSFT_SHIFT = 24 +_FLAGS_SHIFT = 25 +_RATE_SHIFT = 26 +_CHANNEL_SHIFT = 27 +_FHSS_SHIFT = 28 +_ANT_SIG_SHIFT = 29 +_ANT_NOISE_SHIFT = 30 +_LOCK_QUAL_SHIFT = 31 +_TX_ATTN_SHIFT = 16 +_DB_TX_ATTN_SHIFT = 17 +_DBM_TX_POWER_SHIFT = 18 +_ANTENNA_SHIFT = 19 +_DB_ANT_SIG_SHIFT = 20 +_DB_ANT_NOISE_SHIFT = 21 +_RX_FLAGS_SHIFT = 22 +_CHANNELPLUS_SHIFT = 10 +_EXT_SHIFT = 0 + +# Flags elements +_FLAGS_SIZE = 2 +_CFP_FLAG_SHIFT = 0 +_PREAMBLE_SHIFT = 1 +_WEP_SHIFT = 2 +_FRAG_SHIFT = 3 +_FCS_SHIFT = 4 +_DATA_PAD_SHIFT = 5 +_BAD_FCS_SHIFT = 6 +_SHORT_GI_SHIFT = 7 + +# Channel type +_CHAN_TYPE_SIZE = 4 +_CHANNEL_TYPE_SHIFT = 4 +_CCK_SHIFT = 5 +_OFDM_SHIFT = 6 +_TWO_GHZ_SHIFT = 7 +_FIVE_GHZ_SHIFT = 8 +_PASSIVE_SHIFT = 9 +_DYN_CCK_OFDM_SHIFT = 10 +_GFSK_SHIFT = 11 +_GSM_SHIFT = 12 +_STATIC_TURBO_SHIFT = 13 +_HALF_RATE_SHIFT = 14 +_QUARTER_RATE_SHIFT = 15 + +# Flags offsets and masks +_FCS_SHIFT = 4 +_FCS_MASK = 0x10 + + +class Radiotap(dpkt.Packet): + __hdr__ = ( + ('version', 'B', 0), + ('pad', 'B', 0), + ('length', 'H', 0), + ('present_flags', 'I', 0) + ) + + @property + def tsft_present(self): + return (self.present_flags & _TSFT_MASK) >> _TSFT_SHIFT + + @tsft_present.setter + def tsft_present(self, val): + self.present_flags |= val << _TSFT_SHIFT + + @property + def flags_present(self): + return (self.present_flags & _FLAGS_MASK) >> _FLAGS_SHIFT + + @flags_present.setter + def flags_present(self, val): + self.present_flags |= val << _FLAGS_SHIFT + + @property + def rate_present(self): + return (self.present_flags & _RATE_MASK) >> _RATE_SHIFT + + @rate_present.setter + def rate_present(self, val): + self.present_flags |= val << _RATE_SHIFT + + @property + def channel_present(self): + return (self.present_flags & _CHANNEL_MASK) >> _CHANNEL_SHIFT + + @channel_present.setter + def channel_present(self, val): + self.present_flags |= val << _CHANNEL_SHIFT + + @property + def fhss_present(self): + return (self.present_flags & _FHSS_MASK) >> _FHSS_SHIFT + + @fhss_present.setter + def fhss_present(self, val): + self.present_flags |= val << _FHSS_SHIFT + + @property + def ant_sig_present(self): + return (self.present_flags & _ANT_SIG_MASK) >> _ANT_SIG_SHIFT + + @ant_sig_present.setter + def ant_sig_present(self, val): + self.present_flags |= val << _ANT_SIG_SHIFT + + @property + def ant_noise_present(self): + return (self.present_flags & _ANT_NOISE_MASK) >> _ANT_NOISE_SHIFT + + @ant_noise_present.setter + def ant_noise_present(self, val): + self.present_flags |= val << _ANT_NOISE_SHIFT + + @property + def lock_qual_present(self): + return (self.present_flags & _LOCK_QUAL_MASK) >> _LOCK_QUAL_SHIFT + + @lock_qual_present.setter + def lock_qual_present(self, val): + self.present_flags |= val << _LOCK_QUAL_SHIFT + + @property + def tx_attn_present(self): + return (self.present_flags & _TX_ATTN_MASK) >> _TX_ATTN_SHIFT + + @tx_attn_present.setter + def tx_attn_present(self, val): + self.present_flags |= val << _TX_ATTN_SHIFT + + @property + def db_tx_attn_present(self): + return (self.present_flags & _DB_TX_ATTN_MASK) >> _DB_TX_ATTN_SHIFT + + @db_tx_attn_present.setter + def db_tx_attn_present(self, val): + self.present_flags |= val << _DB_TX_ATTN_SHIFT + + @property + def dbm_tx_power_present(self): + return (self.present_flags & _DBM_TX_POWER_MASK) >> _DBM_TX_POWER_SHIFT + + @dbm_tx_power_present.setter + def dbm_tx_power_present(self, val): + self.present_flags |= val << _DBM_TX_POWER_SHIFT + + @property + def ant_present(self): + return (self.present_flags & _ANTENNA_MASK) >> _ANTENNA_SHIFT + + @ant_present.setter + def ant_present(self, val): + self.present_flags |= val << _ANTENNA_SHIFT + + @property + def db_ant_sig_present(self): + return (self.present_flags & _DB_ANT_SIG_MASK) >> _DB_ANT_SIG_SHIFT + + @db_ant_sig_present.setter + def db_ant_sig_present(self, val): + self.present_flags |= val << _DB_ANT_SIG_SHIFT + + @property + def db_ant_noise_present(self): + return (self.present_flags & _DB_ANT_NOISE_MASK) >> _DB_ANT_NOISE_SHIFT + + @db_ant_noise_present.setter + def db_ant_noise_present(self, val): + self.present_flags |= val << _DB_ANT_NOISE_SHIFT + + @property + def rx_flags_present(self): + return (self.present_flags & _RX_FLAGS_MASK) >> _RX_FLAGS_SHIFT + + @rx_flags_present.setter + def rx_flags_present(self, val): + self.present_flags |= val << _RX_FLAGS_SHIFT + + @property + def chanplus_present(self): + return (self.present_flags & _CHANNELPLUS_MASK) >> _CHANNELPLUS_SHIFT + + @chanplus_present.setter + def chanplus_present(self, val): + self.present_flags |= val << _CHANNELPLUS_SHIFT + + @property + def ext_present(self): + return (self.present_flags & _EXT_MASK) >> _EXT_SHIFT + + @ext_present.setter + def ext_present(self, val): + self.present_flags |= val << _EXT_SHIFT + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_tsft_present(self): + return self.tsft_present + + @deprecated + def _set_tsft_present(self, val): + self.tsft_present = val + + @deprecated + def _get_flags_present(self): + return self.flags_present + + @deprecated + def _set_flags_present(self, val): + self.flags_present = val + + @deprecated + def _get_rate_present(self): + return self.rate_present + + @deprecated + def _set_rate_present(self, val): + self.rate_present = val + + @deprecated + def _get_channel_present(self): + return self.channel_present + + @deprecated + def _set_channel_present(self, val): + self.channel_present = val + + @deprecated + def _get_fhss_present(self): + return self.fhss_present + + @deprecated + def _set_fhss_present(self, val): + self.fhss_present = val + + @deprecated + def _get_ant_sig_present(self): + return self.ant_sig_present + + @deprecated + def _set_ant_sig_present(self, val): + self.ant_sig_present = val + + @deprecated + def _get_ant_noise_present(self): + return self.ant_noise_present + + @deprecated + def _set_ant_noise_present(self, val): + self.ant_noise_present = val + + @deprecated + def _get_lock_qual_present(self): + return self.lock_qual_present + + @deprecated + def _set_lock_qual_present(self, val): + self.lock_qual_present = val + + @deprecated + def _get_tx_attn_present(self): + return self.tx_attn_present + + @deprecated + def _set_tx_attn_present(self, val): + self.tx_attn_present = val + + @deprecated + def _get_db_tx_attn_present(self): + return self.db_tx_attn_present + + @deprecated + def _set_db_tx_attn_present(self, val): + self.db_tx_attn_present = val + + @deprecated + def _get_dbm_power_present(self): + return self.dbm_tx_power_present + + @deprecated + def _set_dbm_power_present(self, val): + self.dbm_tx_power_present = val + + @deprecated + def _get_ant_present(self): + return self.ant_present + + @deprecated + def _set_ant_present(self, val): + self.ant_present = val + + @deprecated + def _get_db_ant_sig_present(self): + return self.db_ant_sig_present + + @deprecated + def _set_db_ant_sig_present(self, val): + self.db_ant_sig_present = val + + @deprecated + def _get_db_ant_noise_present(self): + return self.db_ant_noise_present + + @deprecated + def _set_db_ant_noise_present(self, val): + self.db_ant_noise_present = val + + @deprecated + def _get_rx_flags_present(self): + return self.rx_flags_present + + @deprecated + def _set_rx_flags_present(self, val): + self.rx_flags_present = val + + @deprecated + def _get_chanplus_present(self): + return self.chanplus_present + + @deprecated + def _set_chanplus_present(self, val): + self.chanplus_present = val + + @deprecated + def _get_ext_present(self): + return self.ext_present + + @deprecated + def _set_ext_present(self, val): + self.ext_present = val + + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = buf[socket.ntohs(self.length):] + + self.fields = [] + buf = buf[self.__hdr_len__:] + + # decode each field into self. (eg. self.tsft) as well as append it self.fields list + field_decoder = [ + ('tsft', self.tsft_present, self.TSFT), + ('flags', self.flags_present, self.Flags), + ('rate', self.rate_present, self.Rate), + ('channel', self.channel_present, self.Channel), + ('fhss', self.fhss_present, self.FHSS), + ('ant_sig', self.ant_sig_present, self.AntennaSignal), + ('ant_noise', self.ant_noise_present, self.AntennaNoise), + ('lock_qual', self.lock_qual_present, self.LockQuality), + ('tx_attn', self.tx_attn_present, self.TxAttenuation), + ('db_tx_attn', self.db_tx_attn_present, self.DbTxAttenuation), + ('dbm_tx_power', self.dbm_tx_power_present, self.DbmTxPower), + ('ant', self.ant_present, self.Antenna), + ('db_ant_sig', self.db_ant_sig_present, self.DbAntennaSignal), + ('db_ant_noise', self.db_ant_noise_present, self.DbAntennaNoise), + ('rx_flags', self.rx_flags_present, self.RxFlags) + ] + for name, present_bit, parser in field_decoder: + if present_bit: + field = parser(buf) + field.data = '' + setattr(self, name, field) + self.fields.append(field) + buf = buf[len(field):] + + if len(self.data) > 0: + if self.flags_present and self.flags.fcs: + self.data = ieee80211.IEEE80211(self.data, fcs=self.flags.fcs) + else: + self.data = ieee80211.IEEE80211(self.data) + + class Antenna(dpkt.Packet): + __hdr__ = ( + ('index', 'B', 0), + ) + + class AntennaNoise(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class AntennaSignal(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class Channel(dpkt.Packet): + __hdr__ = ( + ('freq', 'H', 0), + ('flags', 'H', 0), + ) + + class FHSS(dpkt.Packet): + __hdr__ = ( + ('set', 'B', 0), + ('pattern', 'B', 0), + ) + + class Flags(dpkt.Packet): + __hdr__ = ( + ('val', 'B', 0), + ) + + @property + def fcs(self): return (self.val & _FCS_MASK) >> _FCS_SHIFT + + # TODO statement seems to have no effect + @fcs.setter + def fcs(self, v): (v << _FCS_SHIFT) | (self.val & ~_FCS_MASK) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_fcs_present(self): return self.fcs + + @deprecated + def _set_fcs_present(self, v): self.fcs = v + + # ================================================= + + class LockQuality(dpkt.Packet): + __hdr__ = ( + ('val', 'H', 0), + ) + + class RxFlags(dpkt.Packet): + __hdr__ = ( + ('val', 'H', 0), + ) + + class Rate(dpkt.Packet): + __hdr__ = ( + ('val', 'B', 0), + ) + + class TSFT(dpkt.Packet): + __hdr__ = ( + ('usecs', 'Q', 0), + ) + + class TxAttenuation(dpkt.Packet): + __hdr__ = ( + ('val', 'H', 0), + ) + + class DbTxAttenuation(dpkt.Packet): + __hdr__ = ( + ('db', 'H', 0), + ) + + class DbAntennaNoise(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class DbAntennaSignal(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class DbmTxPower(dpkt.Packet): + __hdr__ = ( + ('dbm', 'B', 0), + ) + + +def test_Radiotap(): + s = '\x00\x00\x00\x18\x6e\x48\x00\x00\x00\x02\x6c\x09\xa0\x00\xa8\x81\x02\x00\x00\x00\x00\x00\x00\x00' + rad = Radiotap(s) + assert(rad.version == 0) + assert(rad.present_flags == 0x6e480000) + assert(rad.tsft_present == 0) + assert(rad.flags_present == 1) + assert(rad.rate_present == 1) + assert(rad.channel_present == 1) + assert(rad.fhss_present == 0) + assert(rad.ant_sig_present == 1) + assert(rad.ant_noise_present == 1) + assert(rad.lock_qual_present == 0) + assert(rad.db_tx_attn_present == 0) + assert(rad.dbm_tx_power_present == 0) + assert(rad.ant_present == 1) + assert(rad.db_ant_sig_present == 0) + assert(rad.db_ant_noise_present == 0) + assert(rad.rx_flags_present == 1) + assert(rad.channel.freq == 0x6c09) + assert(rad.channel.flags == 0xa000) + assert(len(rad.fields) == 7) + + +def test_fcs(): + s = '\x00\x00\x1a\x00\x2f\x48\x00\x00\x34\x8f\x71\x09\x00\x00\x00\x00\x10\x0c\x85\x09\xc0\x00\xcc\x01\x00\x00' + rt = Radiotap(s) + assert(rt.flags_present == 1) + assert(rt.flags.fcs == 1) + + +if __name__ == '__main__': + test_Radiotap() + test_fcs() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/radius.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/radius.py new file mode 100644 index 00000000..740d5cd7 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/radius.py @@ -0,0 +1,91 @@ +# $Id: radius.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Remote Authentication Dial-In User Service.""" + +import dpkt + +# http://www.untruth.org/~josh/security/radius/radius-auth.html +# RFC 2865 + + +class RADIUS(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ('id', 'B', 0), + ('len', 'H', 4), + ('auth', '16s', '') + ) + attrs = '' + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.attrs = parse_attrs(self.data) + self.data = '' + + +def parse_attrs(buf): + """Parse attributes buffer into a list of (type, data) tuples.""" + attrs = [] + while buf: + t = ord(buf[0]) + l = ord(buf[1]) + if l < 2: + break + d, buf = buf[2:l], buf[l:] + attrs.append((t, d)) + return attrs + +# Codes +RADIUS_ACCESS_REQUEST = 1 +RADIUS_ACCESS_ACCEPT = 2 +RADIUS_ACCESS_REJECT = 3 +RADIUS_ACCT_REQUEST = 4 +RADIUS_ACCT_RESPONSE = 5 +RADIUS_ACCT_STATUS = 6 +RADIUS_ACCESS_CHALLENGE = 11 + +# Attributes +RADIUS_USER_NAME = 1 +RADIUS_USER_PASSWORD = 2 +RADIUS_CHAP_PASSWORD = 3 +RADIUS_NAS_IP_ADDR = 4 +RADIUS_NAS_PORT = 5 +RADIUS_SERVICE_TYPE = 6 +RADIUS_FRAMED_PROTOCOL = 7 +RADIUS_FRAMED_IP_ADDR = 8 +RADIUS_FRAMED_IP_NETMASK = 9 +RADIUS_FRAMED_ROUTING = 10 +RADIUS_FILTER_ID = 11 +RADIUS_FRAMED_MTU = 12 +RADIUS_FRAMED_COMPRESSION = 13 +RADIUS_LOGIN_IP_HOST = 14 +RADIUS_LOGIN_SERVICE = 15 +RADIUS_LOGIN_TCP_PORT = 16 +# unassigned +RADIUS_REPLY_MESSAGE = 18 +RADIUS_CALLBACK_NUMBER = 19 +RADIUS_CALLBACK_ID = 20 +# unassigned +RADIUS_FRAMED_ROUTE = 22 +RADIUS_FRAMED_IPX_NETWORK = 23 +RADIUS_STATE = 24 +RADIUS_CLASS = 25 +RADIUS_VENDOR_SPECIFIC = 26 +RADIUS_SESSION_TIMEOUT = 27 +RADIUS_IDLE_TIMEOUT = 28 +RADIUS_TERMINATION_ACTION = 29 +RADIUS_CALLED_STATION_ID = 30 +RADIUS_CALLING_STATION_ID = 31 +RADIUS_NAS_ID = 32 +RADIUS_PROXY_STATE = 33 +RADIUS_LOGIN_LAT_SERVICE = 34 +RADIUS_LOGIN_LAT_NODE = 35 +RADIUS_LOGIN_LAT_GROUP = 36 +RADIUS_FRAMED_ATALK_LINK = 37 +RADIUS_FRAMED_ATALK_NETWORK = 38 +RADIUS_FRAMED_ATALK_ZONE = 39 +# 40-59 reserved for accounting +RADIUS_CHAP_CHALLENGE = 60 +RADIUS_NAS_PORT_TYPE = 61 +RADIUS_PORT_LIMIT = 62 +RADIUS_LOGIN_LAT_PORT = 63 diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/rfb.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/rfb.py new file mode 100644 index 00000000..6a69892f --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/rfb.py @@ -0,0 +1,90 @@ +# $Id: rfb.py 47 2008-05-27 02:10:00Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Remote Framebuffer Protocol.""" + +import dpkt + +# Remote Framebuffer Protocol +# http://www.realvnc.com/docs/rfbproto.pdf + +# Client to Server Messages +CLIENT_SET_PIXEL_FORMAT = 0 +CLIENT_SET_ENCODINGS = 2 +CLIENT_FRAMEBUFFER_UPDATE_REQUEST = 3 +CLIENT_KEY_EVENT = 4 +CLIENT_POINTER_EVENT = 5 +CLIENT_CUT_TEXT = 6 + +# Server to Client Messages +SERVER_FRAMEBUFFER_UPDATE = 0 +SERVER_SET_COLOUR_MAP_ENTRIES = 1 +SERVER_BELL = 2 +SERVER_CUT_TEXT = 3 + + +class RFB(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ) + + +class SetPixelFormat(dpkt.Packet): + __hdr__ = ( + ('pad', '3s', ''), + ('pixel_fmt', '16s', '') + ) + + +class SetEncodings(dpkt.Packet): + __hdr__ = ( + ('pad', '1s', ''), + ('num_encodings', 'H', 0) + ) + + +class FramebufferUpdateRequest(dpkt.Packet): + __hdr__ = ( + ('incremental', 'B', 0), + ('x_position', 'H', 0), + ('y_position', 'H', 0), + ('width', 'H', 0), + ('height', 'H', 0) + ) + + +class KeyEvent(dpkt.Packet): + __hdr__ = ( + ('down_flag', 'B', 0), + ('pad', '2s', ''), + ('key', 'I', 0) + ) + + +class PointerEvent(dpkt.Packet): + __hdr__ = ( + ('button_mask', 'B', 0), + ('x_position', 'H', 0), + ('y_position', 'H', 0) + ) + + +class FramebufferUpdate(dpkt.Packet): + __hdr__ = ( + ('pad', '1s', ''), + ('num_rects', 'H', 0) + ) + + +class SetColourMapEntries(dpkt.Packet): + __hdr__ = ( + ('pad', '1s', ''), + ('first_colour', 'H', 0), + ('num_colours', 'H', 0) + ) + + +class CutText(dpkt.Packet): + __hdr__ = ( + ('pad', '3s', ''), + ('length', 'I', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/rip.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/rip.py new file mode 100644 index 00000000..83f29f62 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/rip.py @@ -0,0 +1,89 @@ +# $Id: rip.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Routing Information Protocol.""" + +import dpkt + +# RIP v2 - RFC 2453 +# http://tools.ietf.org/html/rfc2453 + +REQUEST = 1 +RESPONSE = 2 + + +class RIP(dpkt.Packet): + __hdr__ = ( + ('cmd', 'B', REQUEST), + ('v', 'B', 2), + ('rsvd', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + self.auth = None + while self.data: + rte = RTE(self.data[:20]) + if rte.family == 0xFFFF: + self.auth = Auth(self.data[:20]) + else: + l.append(rte) + self.data = self.data[20:] + self.data = self.rtes = l + + def __len__(self): + len = self.__hdr_len__ + if self.auth: + len += len(self.auth) + len += sum(map(len, self.rtes)) + return len + + def __str__(self): + auth = '' + if self.auth: + auth = str(self.auth) + return self.pack_hdr() + auth + ''.join(map(str, self.rtes)) + + +class RTE(dpkt.Packet): + __hdr__ = ( + ('family', 'H', 2), + ('route_tag', 'H', 0), + ('addr', 'I', 0), + ('subnet', 'I', 0), + ('next_hop', 'I', 0), + ('metric', 'I', 1) + ) + + +class Auth(dpkt.Packet): + __hdr__ = ( + ('rsvd', 'H', 0xFFFF), + ('type', 'H', 2), + ('auth', '16s', 0) + ) + + +__s = '\x02\x02\x00\x00\x00\x02\x00\x00\x01\x02\x03\x00\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x00\xc0\xa8\x01\x08\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x01' + + +def test_rtp_pack(): + r = RIP(__s) + assert (__s == str(r)) + + +def test_rtp_unpack(): + r = RIP(__s) + assert (r.auth is None) + assert (len(r.rtes) == 2) + + rte = r.rtes[1] + assert (rte.family == 2) + assert (rte.route_tag == 0) + assert (rte.metric == 1) + + +if __name__ == '__main__': + test_rtp_pack() + test_rtp_unpack() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/rpc.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/rpc.py new file mode 100644 index 00000000..f12bc83b --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/rpc.py @@ -0,0 +1,161 @@ +# $Id: rpc.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Remote Procedure Call.""" + +import struct +import dpkt + +# RPC.dir +CALL = 0 +REPLY = 1 + +# RPC.Auth.flavor +AUTH_NONE = AUTH_NULL = 0 +AUTH_UNIX = 1 +AUTH_SHORT = 2 +AUTH_DES = 3 + +# RPC.Reply.stat +MSG_ACCEPTED = 0 +MSG_DENIED = 1 + +# RPC.Reply.Accept.stat +SUCCESS = 0 +PROG_UNAVAIL = 1 +PROG_MISMATCH = 2 +PROC_UNAVAIL = 3 +GARBAGE_ARGS = 4 +SYSTEM_ERR = 5 + +# RPC.Reply.Reject.stat +RPC_MISMATCH = 0 +AUTH_ERROR = 1 + + +class RPC(dpkt.Packet): + __hdr__ = ( + ('xid', 'I', 0), + ('dir', 'I', CALL) + ) + + class Auth(dpkt.Packet): + __hdr__ = (('flavor', 'I', AUTH_NONE), ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + n = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:4 + n] + + def __len__(self): + return 8 + len(self.data) + + def __str__(self): + return self.pack_hdr() + struct.pack('>I', len(self.data)) + \ + str(self.data) + + class Call(dpkt.Packet): + __hdr__ = ( + ('rpcvers', 'I', 2), + ('prog', 'I', 0), + ('vers', 'I', 0), + ('proc', 'I', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.cred = RPC.Auth(self.data) + self.verf = RPC.Auth(self.data[len(self.cred):]) + self.data = self.data[len(self.cred) + len(self.verf):] + + def __len__(self): + return len(str(self)) # XXX + + def __str__(self): + return dpkt.Packet.__str__(self) + \ + str(getattr(self, 'cred', RPC.Auth())) + \ + str(getattr(self, 'verf', RPC.Auth())) + \ + str(self.data) + + class Reply(dpkt.Packet): + __hdr__ = (('stat', 'I', MSG_ACCEPTED), ) + + class Accept(dpkt.Packet): + __hdr__ = (('stat', 'I', SUCCESS), ) + + def unpack(self, buf): + self.verf = RPC.Auth(buf) + buf = buf[len(self.verf):] + self.stat = struct.unpack('>I', buf[:4])[0] + if self.stat == SUCCESS: + self.data = buf[4:] + elif self.stat == PROG_MISMATCH: + self.low, self.high = struct.unpack('>II', buf[4:12]) + self.data = buf[12:] + + def __len__(self): + if self.stat == PROG_MISMATCH: n = 8 + else: n = 0 + return len(self.verf) + 4 + n + len(self.data) + + def __str__(self): + if self.stat == PROG_MISMATCH: + return str(self.verf) + struct.pack('>III', self.stat, + self.low, self.high) + self.data + return str(self.verf) + dpkt.Packet.__str__(self) + + class Reject(dpkt.Packet): + __hdr__ = (('stat', 'I', AUTH_ERROR), ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.stat == RPC_MISMATCH: + self.low, self.high = struct.unpack('>II', self.data[:8]) + self.data = self.data[8:] + elif self.stat == AUTH_ERROR: + self.why = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:] + + def __len__(self): + if self.stat == RPC_MISMATCH: n = 8 + elif self.stat == AUTH_ERROR: n = 4 + else: n = 0 + return 4 + n + len(self.data) + + def __str__(self): + if self.stat == RPC_MISMATCH: + return struct.pack('>III', self.stat, self.low, self.high) + self.data + elif self.stat == AUTH_ERROR: + return struct.pack('>II', self.stat, self.why) + self.data + return dpkt.Packet.__str__(self) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.stat == MSG_ACCEPTED: + self.data = self.accept = self.Accept(self.data) + elif self.status == MSG_DENIED: + self.data = self.reject = self.Reject(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.dir == CALL: + self.data = self.call = self.Call(self.data) + elif self.dir == REPLY: + self.data = self.reply = self.Reply(self.data) + + +def unpack_xdrlist(cls, buf): + l = [] + while buf: + if buf.startswith('\x00\x00\x00\x01'): + p = cls(buf[4:]) + l.append(p) + buf = p.data + elif buf.startswith('\x00\x00\x00\x00'): + break + else: + raise dpkt.UnpackError, 'invalid XDR list' + return l + + +def pack_xdrlist(*args): + return '\x00\x00\x00\x01'.join(map(str, args)) + '\x00\x00\x00\x00' diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/rtp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/rtp.py new file mode 100644 index 00000000..9426d8c4 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/rtp.py @@ -0,0 +1,127 @@ +# $Id: rtp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Real-Time Transport Protocol""" + +from dpkt import Packet +from decorators import deprecated + +# version 1100 0000 0000 0000 ! 0xC000 14 +# p 0010 0000 0000 0000 ! 0x2000 13 +# x 0001 0000 0000 0000 ! 0x1000 12 +# cc 0000 1111 0000 0000 ! 0x0F00 8 +# m 0000 0000 1000 0000 ! 0x0080 7 +# pt 0000 0000 0111 1111 ! 0x007F 0 +# + +_VERSION_MASK = 0xC000 +_P_MASK = 0x2000 +_X_MASK = 0x1000 +_CC_MASK = 0x0F00 +_M_MASK = 0x0080 +_PT_MASK = 0x007F +_VERSION_SHIFT = 14 +_P_SHIFT = 13 +_X_SHIFT = 12 +_CC_SHIFT = 8 +_M_SHIFT = 7 +_PT_SHIFT = 0 + +VERSION = 2 + + +class RTP(Packet): + __hdr__ = ( + ('_type', 'H', 0x8000), + ('seq', 'H', 0), + ('ts', 'I', 0), + ('ssrc', 'I', 0), + ) + csrc = '' + + @property + def version(self): return (self._type & _VERSION_MASK) >> _VERSION_SHIFT + + @version.setter + def version(self, ver): + self._type = (ver << _VERSION_SHIFT) | (self._type & ~_VERSION_MASK) + + @property + def p(self): return (self._type & _P_MASK) >> _P_SHIFT + + @p.setter + def p(self, p): self._type = (p << _P_SHIFT) | (self._type & ~_P_MASK) + + @property + def x(self): return (self._type & _X_MASK) >> _X_SHIFT + + @x.setter + def x(self, x): self._type = (x << _X_SHIFT) | (self._type & ~_X_MASK) + + @property + def cc(self): return (self._type & _CC_MASK) >> _CC_SHIFT + + @cc.setter + def cc(self, cc): self._type = (cc << _CC_SHIFT) | (self._type & ~_CC_MASK) + + @property + def m(self): return (self._type & _M_MASK) >> _M_SHIFT + + @m.setter + def m(self, m): self._type = (m << _M_SHIFT) | (self._type & ~_M_MASK) + + @property + def pt(self): return (self._type & _PT_MASK) >> _PT_SHIFT + + @pt.setter + def pt(self, m): self._type = (m << _PT_SHIFT) | (self._type & ~_PT_MASK) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_version(self): return self.version + + @deprecated + def _set_version(self, ver): self.version = ver + + @deprecated + def _get_p(self): return self.p + + @deprecated + def _set_p(self, p): self.p = p + + @deprecated + def _get_x(self): return self.x + + @deprecated + def _set_x(self, x): self.x = x + + @deprecated + def _get_cc(self): return self.cc + + @deprecated + def _set_cc(self, cc): self.cc = cc + + @deprecated + def _get_m(self): return self.m + + @deprecated + def _set_m(self, m): self.m = m + + @deprecated + def _get_pt(self): return self.pt + + @deprecated + def _set_pt(self, pt): self.pt = pt + # ================================================= + + def __len__(self): + return self.__hdr_len__ + len(self.csrc) + len(self.data) + + def __str__(self): + return self.pack_hdr() + self.csrc + str(self.data) + + def unpack(self, buf): + super(RTP, self).unpack(buf) + self.csrc = buf[self.__hdr_len__:self.__hdr_len__ + self.cc * 4] + self.data = buf[self.__hdr_len__ + self.cc * 4:] + diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/rx.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/rx.py new file mode 100644 index 00000000..8535a350 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/rx.py @@ -0,0 +1,45 @@ +# $Id: rx.py 23 2006-11-08 15:45:33Z jonojono $ +# -*- coding: utf-8 -*- +"""Rx Protocol.""" + +import dpkt + +# Types +DATA = 0x01 +ACK = 0x02 +BUSY = 0x03 +ABORT = 0x04 +ACKALL = 0x05 +CHALLENGE = 0x06 +RESPONSE = 0x07 +DEBUG = 0x08 + +# Flags +CLIENT_INITIATED = 0x01 +REQUEST_ACK = 0x02 +LAST_PACKET = 0x04 +MORE_PACKETS = 0x08 +SLOW_START_OK = 0x20 +JUMBO_PACKET = 0x20 + +# Security +SEC_NONE = 0x00 +SEC_BCRYPT = 0x01 +SEC_RXKAD = 0x02 +SEC_RXKAD_ENC = 0x03 + + +class Rx(dpkt.Packet): + __hdr__ = ( + ('epoch', 'I', 0), + ('cid', 'I', 0), + ('call', 'I', 1), + ('seq', 'I', 0), + ('serial', 'I', 1), + ('type', 'B', 0), + ('flags', 'B', CLIENT_INITIATED), + ('status', 'B', 0), + ('security', 'B', 0), + ('sum', 'H', 0), + ('service', 'H', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/sccp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/sccp.py new file mode 100644 index 00000000..df862df3 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/sccp.py @@ -0,0 +1,214 @@ +# $Id: sccp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Cisco Skinny Client Control Protocol.""" + +import dpkt + +KEYPAD_BUTTON = 0x00000003 +OFF_HOOK = 0x00000006 +ON_HOOK = 0x00000007 +OPEN_RECEIVE_CHANNEL_ACK = 0x00000022 +START_TONE = 0x00000082 +STOP_TONE = 0x00000083 +SET_LAMP = 0x00000086 +SET_SPEAKER_MODE = 0x00000088 +START_MEDIA_TRANSMIT = 0x0000008A +STOP_MEDIA_TRANSMIT = 0x0000008B +CALL_INFO = 0x0000008F +DEFINE_TIME_DATE = 0x00000094 +DISPLAY_TEXT = 0x00000099 +OPEN_RECEIVE_CHANNEL = 0x00000105 +CLOSE_RECEIVE_CHANNEL = 0x00000106 +SELECT_SOFTKEYS = 0x00000110 +CALL_STATE = 0x00000111 +DISPLAY_PROMPT_STATUS = 0x00000112 +CLEAR_PROMPT_STATUS = 0x00000113 +ACTIVATE_CALL_PLANE = 0x00000116 + + +class ActivateCallPlane(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('line_instance', 'I', 0), + ) + + +class CallInfo(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('calling_party_name', '40s', ''), + ('calling_party', '24s', ''), + ('called_party_name', '40s', ''), + ('called_party', '24s', ''), + ('line_instance', 'I', 0), + ('call_id', 'I', 0), + ('call_type', 'I', 0), + ('orig_called_party_name', '40s', ''), + ('orig_called_party', '24s', '') + ) + + +class CallState(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('call_state', 'I', 12), # 12: Proceed, 15: Connected + ('line_instance', 'I', 1), + ('call_id', 'I', 0) + ) + + +class ClearPromptStatus(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('line_instance', 'I', 1), + ('call_id', 'I', 0) + ) + + +class CloseReceiveChannel(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ) + + +class DisplayPromptStatus(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('msg_timeout', 'I', 0), + ('display_msg', '32s', ''), + ('line_instance', 'I', 1), + ('call_id', 'I', 0) + ) + + +class DisplayText(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('display_msg', '36s', ''), + ) + + +class KeypadButton(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('button', 'I', 0), + ) + + +class OpenReceiveChannel(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ('ms_packet', 'I', 0), + ('payload_capability', 'I', 4), # 4: G.711 u-law 64k + ('echo_cancel_type', 'I', 4), + ('g723_bitrate', 'I', 0), + ) + + +class OpenReceiveChannelAck(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('channel_status', 'I', 0), + ('ip', '4s', ''), + ('port', 'I', 0), + ('passthruparty_id', 'I', 0), + ) + + +class SelectStartKeys(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('line_id', 'I', 1), + ('call_id', 'I', 0), + ('softkey_set', 'I', 8), + ('softkey_map', 'I', 0xffffffffL) + ) + + +class SetLamp(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('stimulus', 'I', 9), # 9: Line + ('stimulus_instance', 'I', 1), + ('lamp_mode', 'I', 1), + ) + + +class SetSpeakerMode(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('speaker', 'I', 2), # 2: SpeakerOff + ) + + +class StartMediaTransmission(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ('remote_ip', '4s', ''), + ('remote_port', 'I', 0), + ('ms_packet', 'I', 0), + ('payload_capability', 'I', 4), # 4: G.711 u-law 64k + ('precedence', 'I', 0), + ('silence_suppression', 'I', 0), + ('max_frames_per_pkt', 'I', 1), + ('g723_bitrate', 'I', 0), + ) + + +class StartTone(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('tone', 'I', 0x24), # 0x24: AlertingTone + ) + + +class StopMediaTransmission(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ) + + +class SCCP(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('len', 'I', 0), + ('rsvd', 'I', 0), + ('msgid', 'I', 0), + ('msg', '0s', ''), + ) + _msgsw = { + KEYPAD_BUTTON: KeypadButton, + OPEN_RECEIVE_CHANNEL_ACK: OpenReceiveChannelAck, + START_TONE: StartTone, + SET_LAMP: SetLamp, + START_MEDIA_TRANSMIT: StartMediaTransmission, + STOP_MEDIA_TRANSMIT: StopMediaTransmission, + CALL_INFO: CallInfo, + DISPLAY_TEXT: DisplayText, + OPEN_RECEIVE_CHANNEL: OpenReceiveChannel, + CLOSE_RECEIVE_CHANNEL: CloseReceiveChannel, + CALL_STATE: CallState, + DISPLAY_PROMPT_STATUS: DisplayPromptStatus, + CLEAR_PROMPT_STATUS: ClearPromptStatus, + ACTIVATE_CALL_PLANE: ActivateCallPlane, + } + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + n = self.len - 4 + if n > len(self.data): + raise dpkt.NeedData('not enough data') + self.msg, self.data = self.data[:n], self.data[n:] + try: + p = self._msgsw[self.msgid](self.msg) + setattr(self, p.__class__.__name__.lower(), p) + except (KeyError, dpkt.UnpackError): + pass diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/sctp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/sctp.py new file mode 100644 index 00000000..4ef251c8 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/sctp.py @@ -0,0 +1,95 @@ +# $Id: sctp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Stream Control Transmission Protocol.""" + +import dpkt +import crc32c + +# Stream Control Transmission Protocol +# http://tools.ietf.org/html/rfc2960 + +# Chunk Types +DATA = 0 +INIT = 1 +INIT_ACK = 2 +SACK = 3 +HEARTBEAT = 4 +HEARTBEAT_ACK = 5 +ABORT = 6 +SHUTDOWN = 7 +SHUTDOWN_ACK = 8 +ERROR = 9 +COOKIE_ECHO = 10 +COOKIE_ACK = 11 +ECNE = 12 +CWR = 13 +SHUTDOWN_COMPLETE = 14 + + +class SCTP(dpkt.Packet): + __hdr__ = ( + ('sport', 'H', 0), + ('dport', 'H', 0), + ('vtag', 'I', 0), + ('sum', 'I', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + while self.data: + chunk = Chunk(self.data) + l.append(chunk) + self.data = self.data[len(chunk):] + self.data = self.chunks = l + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + l = [str(x) for x in self.data] + if self.sum == 0: + s = crc32c.add(0xffffffffL, self.pack_hdr()) + for x in l: + s = crc32c.add(s, x) + self.sum = crc32c.done(s) + return self.pack_hdr() + ''.join(l) + + +class Chunk(dpkt.Packet): + __hdr__ = ( + ('type', 'B', INIT), + ('flags', 'B', 0), + ('len', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len - self.__hdr_len__] + + +__s = '\x80\x44\x00\x50\x00\x00\x00\x00\x30\xba\xef\x54\x01\x00\x00\x3c\x3b\xb9\x9c\x46\x00\x01\xa0\x00\x00\x0a\xff\xff\x2b\x2d\x7e\xb2\x00\x05\x00\x08\x9b\xe6\x18\x9b\x00\x05\x00\x08\x9b\xe6\x18\x9c\x00\x0c\x00\x06\x00\x05\x00\x00\x80\x00\x00\x04\xc0\x00\x00\x04\xc0\x06\x00\x08\x00\x00\x00\x00' + + +def test_sctp_pack(): + sctp = SCTP(__s) + assert (__s == str(sctp)) + sctp.sum = 0 + assert (__s == str(sctp)) + + +def test_sctp_unpack(): + sctp = SCTP(__s) + assert (sctp.sport == 32836) + assert (sctp.dport == 80) + assert (len(sctp.chunks) == 1) + assert (len(sctp) == 72) + chunk = sctp.chunks[0] + assert (chunk.type == INIT) + assert (chunk.len == 60) + + +if __name__ == '__main__': + test_sctp_pack() + test_sctp_unpack() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/sip.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/sip.py new file mode 100644 index 00000000..fef476da --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/sip.py @@ -0,0 +1,33 @@ +# $Id: sip.py 48 2008-05-27 17:31:15Z yardley $ +# -*- coding: utf-8 -*- +"""Session Initiation Protocol.""" + +import http + + +class Request(http.Request): + """SIP request.""" + __hdr_defaults__ = { + 'method': 'INVITE', + 'uri': 'sip:user@example.com', + 'version': '2.0', + 'headers': {'To': '', 'From': '', 'Call-ID': '', 'CSeq': '', 'Contact': ''} + } + __methods = dict.fromkeys(( + 'ACK', 'BYE', 'CANCEL', 'INFO', 'INVITE', 'MESSAGE', 'NOTIFY', + 'OPTIONS', 'PRACK', 'PUBLISH', 'REFER', 'REGISTER', 'SUBSCRIBE', + 'UPDATE' + )) + __proto = 'SIP' + + +class Response(http.Response): + """SIP response.""" + __hdr_defaults__ = { + 'version': '2.0', + 'status': '200', + 'reason': 'OK', + 'headers': {'To': '', 'From': '', 'Call-ID': '', 'CSeq': '', 'Contact': ''} + } + __proto = 'SIP' + diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/sll.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/sll.py new file mode 100644 index 00000000..3d1a1204 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/sll.py @@ -0,0 +1,26 @@ +# $Id: sll.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Linux libpcap "cooked" capture encapsulation.""" + +import arp +import dpkt +import ethernet + + +class SLL(dpkt.Packet): + __hdr__ = ( + ('type', 'H', 0), # 0: to us, 1: bcast, 2: mcast, 3: other, 4: from us + ('hrd', 'H', arp.ARP_HRD_ETH), + ('hlen', 'H', 6), # hardware address length + ('hdr', '8s', ''), # first 8 bytes of link-layer header + ('ethtype', 'H', ethernet.ETH_TYPE_IP), + ) + _typesw = ethernet.Ethernet._typesw + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._typesw[self.ethtype](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + pass diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/smb.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/smb.py new file mode 100644 index 00000000..8517e64b --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/smb.py @@ -0,0 +1,20 @@ +# $Id: smb.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Server Message Block.""" + +import dpkt + + +class SMB(dpkt.Packet): + __hdr__ = [ + ('proto', '4s', ''), + ('cmd', 'B', 0), + ('err', 'I', 0), + ('flags1', 'B', 0), + ('flags2', 'B', 0), + ('pad', '6s', ''), + ('tid', 'H', 0), + ('pid', 'H', 0), + ('uid', 'H', 0), + ('mid', 'H', 0) + ] diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/snoop.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/snoop.py new file mode 100644 index 00000000..8090e855 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/snoop.py @@ -0,0 +1,122 @@ +# $Id$ +# -*- coding: utf-8 -*- +"""Snoop file format.""" + +import sys, time +import dpkt + +# RFC 1761 + +SNOOP_MAGIC = 0x736E6F6F70000000L + +SNOOP_VERSION = 2 + +SDL_8023 = 0 +SDL_8024 = 1 +SDL_8025 = 2 +SDL_8026 = 3 +SDL_ETHER = 4 +SDL_HDLC = 5 +SDL_CHSYNC = 6 +SDL_IBMCC = 7 +SDL_FDDI = 8 +SDL_OTHER = 9 + +dltoff = {SDL_ETHER: 14} + + +class PktHdr(dpkt.Packet): + """snoop packet header.""" + __byte_order__ = '!' + __hdr__ = ( + ('orig_len', 'I', 0), + ('incl_len', 'I', 0), + ('rec_len', 'I', 0), + ('cum_drops', 'I', 0), + ('ts_sec', 'I', 0), + ('ts_usec', 'I', 0), + ) + + +class FileHdr(dpkt.Packet): + """snoop file header.""" + __byte_order__ = '!' + __hdr__ = ( + ('magic', 'Q', SNOOP_MAGIC), + ('v', 'I', SNOOP_VERSION), + ('linktype', 'I', SDL_ETHER), + ) + + +class Writer(object): + """Simple snoop dumpfile writer.""" + + def __init__(self, fileobj, linktype=SDL_ETHER): + self.__f = fileobj + fh = FileHdr(linktype=linktype) + self.__f.write(str(fh)) + + def writepkt(self, pkt, ts=None): + if ts is None: + ts = time.time() + s = str(pkt) + n = len(s) + pad_len = 4 - n % 4 if n % 4 else 0 + ph = PktHdr(orig_len=n, incl_len=n, + rec_len=PktHdr.__hdr_len__ + n + pad_len, + ts_sec=int(ts), + ts_usec=int((int(ts) - float(ts)) * 1000000.0)) + self.__f.write(str(ph)) + self.__f.write(s + '\0' * pad_len) + + def close(self): + self.__f.close() + + +class Reader(object): + """Simple pypcap-compatible snoop file reader.""" + + def __init__(self, fileobj): + self.name = fileobj.name + self.fd = fileobj.fileno() + self.__f = fileobj + buf = self.__f.read(FileHdr.__hdr_len__) + self.__fh = FileHdr(buf) + self.__ph = PktHdr + if self.__fh.magic != SNOOP_MAGIC: + raise ValueError('invalid snoop header') + self.dloff = dltoff[self.__fh.linktype] + self.filter = '' + + def fileno(self): + return self.fd + + def datalink(self): + return self.__fh.linktype + + def setfilter(self, value, optimize=1): + return NotImplementedError + + def readpkts(self): + return list(self) + + def dispatch(self, cnt, callback, *args): + if cnt > 0: + for i in range(cnt): + ts, pkt = self.next() + callback(ts, pkt, *args) + else: + for ts, pkt in self: + callback(ts, pkt, *args) + + def loop(self, callback, *args): + self.dispatch(0, callback, *args) + + def __iter__(self): + self.__f.seek(FileHdr.__hdr_len__) + while 1: + buf = self.__f.read(PktHdr.__hdr_len__) + if not buf: break + hdr = self.__ph(buf) + buf = self.__f.read(hdr.rec_len - PktHdr.__hdr_len__) + yield (hdr.ts_sec + (hdr.ts_usec / 1000000.0), buf[:hdr.incl_len]) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/ssl.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ssl.py new file mode 100644 index 00000000..ea761552 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ssl.py @@ -0,0 +1,579 @@ +# $Id: ssl.py 90 2014-04-02 22:06:23Z andrewflnr@gmail.com $ +# Portion Copyright 2012 Google Inc. All rights reserved. +# -*- coding: utf-8 -*- +"""Secure Sockets Layer / Transport Layer Security.""" + +import dpkt +import ssl_ciphersuites +import struct +import binascii + +# +# Note from April 2011: cde...@gmail.com added code that parses SSL3/TLS messages more in depth. +# +# Jul 2012: afleenor@google.com modified and extended SSL support further. +# + + +class SSL2(dpkt.Packet): + __hdr__ = ( + ('len', 'H', 0), + ('msg', 's', ''), + ('pad', 's', ''), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.len & 0x8000: + n = self.len = self.len & 0x7FFF + self.msg, self.data = self.data[:n], self.data[n:] + else: + n = self.len = self.len & 0x3FFF + padlen = ord(self.data[0]) + self.msg = self.data[1:1 + n] + self.pad = self.data[1 + n:1 + n + padlen] + self.data = self.data[1 + n + padlen:] + + +# SSLv3/TLS versions +SSL3_V = 0x0300 +TLS1_V = 0x0301 +TLS11_V = 0x0302 +TLS12_V = 0x0303 + +ssl3_versions_str = { + SSL3_V: 'SSL3', + TLS1_V: 'TLS 1.0', + TLS11_V: 'TLS 1.1', + TLS12_V: 'TLS 1.2' +} + +SSL3_VERSION_BYTES = set(('\x03\x00', '\x03\x01', '\x03\x02', '\x03\x03')) + + +# Alert levels +SSL3_AD_WARNING = 1 +SSL3_AD_FATAL = 2 +alert_level_str = { + SSL3_AD_WARNING: 'SSL3_AD_WARNING', + SSL3_AD_FATAL: 'SSL3_AD_FATAL' +} + +# SSL3 alert descriptions +SSL3_AD_CLOSE_NOTIFY = 0 +SSL3_AD_UNEXPECTED_MESSAGE = 10 # fatal +SSL3_AD_BAD_RECORD_MAC = 20 # fatal +SSL3_AD_DECOMPRESSION_FAILURE = 30 # fatal +SSL3_AD_HANDSHAKE_FAILURE = 40 # fatal +SSL3_AD_NO_CERTIFICATE = 41 +SSL3_AD_BAD_CERTIFICATE = 42 +SSL3_AD_UNSUPPORTED_CERTIFICATE = 43 +SSL3_AD_CERTIFICATE_REVOKED = 44 +SSL3_AD_CERTIFICATE_EXPIRED = 45 +SSL3_AD_CERTIFICATE_UNKNOWN = 46 +SSL3_AD_ILLEGAL_PARAMETER = 47 # fatal + +# TLS1 alert descriptions +TLS1_AD_DECRYPTION_FAILED = 21 +TLS1_AD_RECORD_OVERFLOW = 22 +TLS1_AD_UNKNOWN_CA = 48 # fatal +TLS1_AD_ACCESS_DENIED = 49 # fatal +TLS1_AD_DECODE_ERROR = 50 # fatal +TLS1_AD_DECRYPT_ERROR = 51 +TLS1_AD_EXPORT_RESTRICTION = 60 # fatal +TLS1_AD_PROTOCOL_VERSION = 70 # fatal +TLS1_AD_INSUFFICIENT_SECURITY = 71 # fatal +TLS1_AD_INTERNAL_ERROR = 80 # fatal +TLS1_AD_USER_CANCELLED = 90 +TLS1_AD_NO_RENEGOTIATION = 100 +# /* codes 110-114 are from RFC3546 */ +TLS1_AD_UNSUPPORTED_EXTENSION = 110 +TLS1_AD_CERTIFICATE_UNOBTAINABLE = 111 +TLS1_AD_UNRECOGNIZED_NAME = 112 +TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE = 113 +TLS1_AD_BAD_CERTIFICATE_HASH_VALUE = 114 +TLS1_AD_UNKNOWN_PSK_IDENTITY = 115 # fatal + + +# Mapping alert types to strings +alert_description_str = { + SSL3_AD_CLOSE_NOTIFY: 'SSL3_AD_CLOSE_NOTIFY', + SSL3_AD_UNEXPECTED_MESSAGE: 'SSL3_AD_UNEXPECTED_MESSAGE', + SSL3_AD_BAD_RECORD_MAC: 'SSL3_AD_BAD_RECORD_MAC', + SSL3_AD_DECOMPRESSION_FAILURE: 'SSL3_AD_DECOMPRESSION_FAILURE', + SSL3_AD_HANDSHAKE_FAILURE: 'SSL3_AD_HANDSHAKE_FAILURE', + SSL3_AD_NO_CERTIFICATE: 'SSL3_AD_NO_CERTIFICATE', + SSL3_AD_BAD_CERTIFICATE: 'SSL3_AD_BAD_CERTIFICATE', + SSL3_AD_UNSUPPORTED_CERTIFICATE: 'SSL3_AD_UNSUPPORTED_CERTIFICATE', + SSL3_AD_CERTIFICATE_REVOKED: 'SSL3_AD_CERTIFICATE_REVOKED', + SSL3_AD_CERTIFICATE_EXPIRED: 'SSL3_AD_CERTIFICATE_EXPIRED', + SSL3_AD_CERTIFICATE_UNKNOWN: 'SSL3_AD_CERTIFICATE_UNKNOWN', + SSL3_AD_ILLEGAL_PARAMETER: 'SSL3_AD_ILLEGAL_PARAMETER', + TLS1_AD_DECRYPTION_FAILED: 'TLS1_AD_DECRYPTION_FAILED', + TLS1_AD_RECORD_OVERFLOW: 'TLS1_AD_RECORD_OVERFLOW', + TLS1_AD_UNKNOWN_CA: 'TLS1_AD_UNKNOWN_CA', + TLS1_AD_ACCESS_DENIED: 'TLS1_AD_ACCESS_DENIED', + TLS1_AD_DECODE_ERROR: 'TLS1_AD_DECODE_ERROR', + TLS1_AD_DECRYPT_ERROR: 'TLS1_AD_DECRYPT_ERROR', + TLS1_AD_EXPORT_RESTRICTION: 'TLS1_AD_EXPORT_RESTRICTION', + TLS1_AD_PROTOCOL_VERSION: 'TLS1_AD_PROTOCOL_VERSION', + TLS1_AD_INSUFFICIENT_SECURITY: 'TLS1_AD_INSUFFICIENT_SECURITY', + TLS1_AD_INTERNAL_ERROR: 'TLS1_AD_INTERNAL_ERROR', + TLS1_AD_USER_CANCELLED: 'TLS1_AD_USER_CANCELLED', + TLS1_AD_NO_RENEGOTIATION: 'TLS1_AD_NO_RENEGOTIATION', + TLS1_AD_UNSUPPORTED_EXTENSION: 'TLS1_AD_UNSUPPORTED_EXTENSION', + TLS1_AD_CERTIFICATE_UNOBTAINABLE: 'TLS1_AD_CERTIFICATE_UNOBTAINABLE', + TLS1_AD_UNRECOGNIZED_NAME: 'TLS1_AD_UNRECOGNIZED_NAME', + TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 'TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE', + TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 'TLS1_AD_BAD_CERTIFICATE_HASH_VALUE', + TLS1_AD_UNKNOWN_PSK_IDENTITY: 'TLS1_AD_UNKNOWN_PSK_IDENTITY' +} + + +# struct format strings for parsing buffer lengths +# don't forget, you have to pad a 3-byte value with \x00 +_SIZE_FORMATS = ['!B', '!H', '!I', '!I'] + + +def parse_variable_array(buf, lenbytes): + """ + Parse an array described using the 'Type name' syntax from the spec + Read a length at the start of buf, and returns that many bytes + after, in a tuple with the TOTAL bytes consumed (including the size). This + does not check that the array is the right length for any given datatype. + """ + # first have to figure out how to parse length + assert lenbytes <= 4 # pretty sure 4 is impossible, too + size_format = _SIZE_FORMATS[lenbytes - 1] + padding = '\x00' if lenbytes == 3 else '' + # read off the length + size = struct.unpack(size_format, padding + buf[:lenbytes])[0] + # read the actual data + data = buf[lenbytes:lenbytes + size] + # if len(data) != size: insufficient data + return data, size + lenbytes + + +class SSL3Exception(Exception): + pass + + +class TLSRecord(dpkt.Packet): + + """ + SSLv3 or TLSv1+ packet. + + In addition to the fields specified in the header, there are + compressed and decrypted fields, indicating whether, in the language + of the spec, this is a TLSPlaintext, TLSCompressed, or + TLSCiphertext. The application will have to figure out when it's + appropriate to change these values. + """ + + __hdr__ = ( + ('type', 'B', 0), + ('version', 'H', 0), + ('length', 'H', 0), + ) + + def __init__(self, *args, **kwargs): + # assume plaintext unless specified otherwise in arguments + self.compressed = kwargs.pop('compressed', False) + self.encrypted = kwargs.pop('encrypted', False) + # parent constructor + dpkt.Packet.__init__(self, *args, **kwargs) + # make sure length and data are consistent + self.length = len(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + header_length = self.__hdr_len__ + self.data = buf[header_length:header_length + self.length] + # make sure buffer was long enough + if len(self.data) != self.length: + raise dpkt.NeedData('TLSRecord data was too short.') + # assume compressed and encrypted when it's been parsed from + # raw data + self.compressed = True + self.encrypted = True + + +class TLSChangeCipherSpec(dpkt.Packet): + + """ + ChangeCipherSpec message is just a single byte with value 1 + """ + + __hdr__ = (('type', 'B', 1),) + + +class TLSAppData(str): + + """ + As far as TLSRecord is concerned, AppData is just an opaque blob. + """ + + pass + + +class TLSAlert(dpkt.Packet): + __hdr__ = ( + ('level', 'B', 1), + ('description', 'B', 0), + ) + + +class TLSHelloRequest(dpkt.Packet): + __hdr__ = tuple() + + +class TLSClientHello(dpkt.Packet): + __hdr__ = ( + ('version', 'H', 0x0301), + ('random', '32s', '\x00' * 32), + ) # the rest is variable-length and has to be done manually + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + # now session, cipher suites, extensions are in self.data + self.session_id, pointer = parse_variable_array(self.data, 1) + # print 'pointer',pointer + # handle ciphersuites + ciphersuites, parsed = parse_variable_array(self.data[pointer:], 2) + pointer += parsed + self.num_ciphersuites = len(ciphersuites) / 2 + # check len(ciphersuites) % 2 == 0 ? + # compression methods + compression_methods, parsed = parse_variable_array( + self.data[pointer:], 1) + pointer += parsed + self.num_compression_methods = parsed - 1 + self.compression_methods = map(ord, compression_methods) + # extensions + + +class TLSServerHello(dpkt.Packet): + __hdr__ = ( + ('version', 'H', '0x0301'), + ('random', '32s', '\x00' * 32), + ) # session is variable, forcing rest to be manual + + def unpack(self, buf): + try: + dpkt.Packet.unpack(self, buf) + self.session_id, pointer = parse_variable_array(self.data, 1) + # single cipher suite + self.cipher_suite = struct.unpack('!H', self.data[pointer:pointer + 2])[0] + pointer += 2 + # single compression method + self.compression = struct.unpack('!B', self.data[pointer:pointer + 1])[0] + pointer += 1 + # ignore extensions for now + except struct.error: + # probably data too short + raise dpkt.NeedData + + +class TLSUnknownHandshake(dpkt.Packet): + __hdr__ = tuple() + + +TLSCertificate = TLSUnknownHandshake +TLSServerKeyExchange = TLSUnknownHandshake +TLSCertificateRequest = TLSUnknownHandshake +TLSServerHelloDone = TLSUnknownHandshake +TLSCertificateVerify = TLSUnknownHandshake +TLSClientKeyExchange = TLSUnknownHandshake +TLSFinished = TLSUnknownHandshake + + +# mapping of handshake type ids to their names +# and the classes that implement them +HANDSHAKE_TYPES = { + 0: ('HelloRequest', TLSHelloRequest), + 1: ('ClientHello', TLSClientHello), + 2: ('ServerHello', TLSServerHello), + 11: ('Certificate', TLSCertificate), + 12: ('ServerKeyExchange', TLSServerKeyExchange), + 13: ('CertificateRequest', TLSCertificateRequest), + 14: ('ServerHelloDone', TLSServerHelloDone), + 15: ('CertificateVerify', TLSCertificateVerify), + 16: ('ClientKeyExchange', TLSClientKeyExchange), + 20: ('Finished', TLSFinished), +} + + +class TLSHandshake(dpkt.Packet): + + """ + A TLS Handshake message + + This goes for all messages encapsulated in the Record layer, but especially + important for handshakes and app data: A message may be spread across a + number of TLSRecords, in addition to the possibility of there being more + than one in a given Record. You have to put together the contents of + TLSRecord's yourself. + """ + + # struct.unpack can't handle the 3-byte int, so we parse it as bytes + # (and store it as bytes so dpkt doesn't get confused), and turn it into + # an int in a user-facing property + __hdr__ = ( + ('type', 'B', 0), + ('length_bytes', '3s', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + # Wait, might there be more than one message of self.type? + embedded_type = HANDSHAKE_TYPES.get(self.type, None) + if embedded_type is None: + raise SSL3Exception('Unknown or invalid handshake type %d' % + self.type) + # only take the right number of bytes + self.data = self.data[:self.length] + if len(self.data) != self.length: + raise dpkt.NeedData + # get class out of embedded_type tuple + self.data = embedded_type[1](self.data) + + @property + def length(self): + return struct.unpack('!I', '\x00' + self.length_bytes)[0] + + +RECORD_TYPES = { + 20: TLSChangeCipherSpec, + 21: TLSAlert, + 22: TLSHandshake, + 23: TLSAppData, +} + + +class SSLFactory(object): + def __new__(cls, buf): + v = buf[1:3] + if v in SSL3_VERSION_BYTES: + return TLSRecord(buf) + # SSL2 has no characteristic header or magic bytes, so we just assume + # that the msg is an SSL2 msg if it is not detected as SSL3+ + return SSL2(buf) + + +def tls_multi_factory(buf): + """ + Attempt to parse one or more TLSRecord's out of buf + + Args: + buf: string containing SSL/TLS messages. May have an incomplete record + on the end + + Returns: + [TLSRecord] + int, total bytes consumed, != len(buf) if an incomplete record was left at + the end. + + Raises SSL3Exception. + """ + i, n = 0, len(buf) + msgs = [] + while i < n: + v = buf[i + 1:i + 3] + if v in SSL3_VERSION_BYTES: + try: + msg = TLSRecord(buf[i:]) + msgs.append(msg) + except dpkt.NeedData: + break + else: + raise SSL3Exception('Bad TLS version in buf: %r' % buf[i:i + 5]) + i += len(msg) + return msgs, i + +_hexdecode = binascii.a2b_hex + + +class TestTLSRecord(object): + + """ + Test basic TLSRecord functionality + For this test, the contents of the record doesn't matter, since we're not parsing the next layer. + """ + + @classmethod + def setup_class(cls): + # add some extra data, to make sure length is parsed correctly + cls.p = TLSRecord('\x17\x03\x01\x00\x08abcdefghzzzzzzzzzzz') + + def test_content_type(self): + assert (self.p.type == 23) + + def test_version(self): + assert (self.p.version == 0x0301) + + def test_length(self): + assert (self.p.length == 8) + + def test_data(self): + assert (self.p.data == 'abcdefgh') + + def test_initial_flags(self): + assert (self.p.compressed == True) + assert (self.p.encrypted == True) + + def test_repack(self): + p2 = TLSRecord(type=23, version=0x0301, data='abcdefgh') + assert (p2.type == 23) + assert (p2.version == 0x0301) + assert (p2.length == 8) + assert (p2.data == 'abcdefgh') + assert (p2.pack() == self.p.pack()) + + def test_total_length(self): + # that len(p) includes header + assert (len(self.p) == 13) + + def test_raises_need_data_when_buf_is_short(self): + import pytest + pytest.raises(dpkt.NeedData, TLSRecord, '\x16\x03\x01\x00\x10abc') + + +class TestTLSChangeCipherSpec(object): + + """It's just a byte. This will be quick, I promise""" + + @classmethod + def setup_class(cls): + cls.p = TLSChangeCipherSpec('\x01') + + def test_parses(self): + assert (self.p.type == 1) + + def test_total_length(self): + assert (len(self.p) == 1) + + +class TestTLSAppData(object): + + """AppData is basically just a string""" + + def test_value(self): + d = TLSAppData('abcdefgh') + assert (d == 'abcdefgh') + + +class TestTLSHandshake(object): + @classmethod + def setup_class(cls): + cls.h = TLSHandshake('\x00\x00\x00\x01\xff') + + def test_created_inside_message(self): + assert (isinstance(self.h.data, TLSHelloRequest) == True) + + def test_length(self): + assert (self.h.length == 0x01) + + def test_raises_need_data(self): + import pytest + pytest.raises(dpkt.NeedData, TLSHandshake, '\x00\x00\x01\x01') + + +class TestClientHello(object): + + """This data is extracted from and verified by Wireshark""" + + @classmethod + def setup_class(cls): + cls.data = _hexdecode( + "01000199" # handshake header + "0301" # version + "5008220ce5e0e78b6891afe204498c9363feffbe03235a2d9e05b7d990eb708d" # rand + "2009bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed1" # session id + # cipher suites + "005400ffc00ac0140088008700390038c00fc00500840035c007c009c011c0130045004400330032c00cc00ec002c0040096004100050004002fc008c01200160013c00dc003feff000ac006c010c00bc00100020001" + "0100" # compresssion methods + # extensions + "00fc0000000e000c0000096c6f63616c686f7374000a00080006001700180019000b00020100002300d0a50b2e9f618a9ea9bf493ef49b421835cd2f6b05bbe1179d8edf70d58c33d656e8696d36d7e7e0b9d3ecc0e4de339552fa06c64c0fcb550a334bc43944e2739ca342d15a9ebbe981ac87a0d38160507d47af09bdc16c5f0ee4cdceea551539382333226048a026d3a90a0535f4a64236467db8fee22b041af986ad0f253bc369137cd8d8cd061925461d7f4d7895ca9a4181ab554dad50360ac31860e971483877c9335ac1300c5e78f3e56f3b8e0fc16358fcaceefd5c8d8aaae7b35be116f8832856ca61144fcdd95e071b94d0cf7233740000" + "FFFFFFFFFFFFFFFF") # random garbage + cls.p = TLSHandshake(cls.data) + + def test_client_hello_constructed(self): + """Make sure the correct class was constructed""" + # print self.p + assert (isinstance(self.p.data, TLSClientHello) == True) + + # def testClientDateCorrect(self): + # self.assertEqual(self.p.random_unixtime, 1342710284) + + def test_client_random_correct(self): + assert (self.p.data.random == _hexdecode('5008220ce5e0e78b6891afe204498c9363feffbe03235a2d9e05b7d990eb708d')) + + def test_cipher_suite_length(self): + # we won't bother testing the identity of each cipher suite in the list. + assert (self.p.data.num_ciphersuites == 42) + # self.assertEqual(len(self.p.ciphersuites), 42) + + def test_session_id(self): + assert (self.p.data.session_id == _hexdecode('09bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed1')) + + def test_compression_methods(self): + assert (self.p.data.num_compression_methods == 1) + + def test_total_length(self): + assert (len(self.p) == 413) + + +class TestServerHello(object): + + """Again, from Wireshark""" + + @classmethod + def setup_class(cls): + cls.data = _hexdecode( + '0200004d03015008220c8ec43c5462315a7c99f5d5b6bff009ad285b51dc18485f352e9fdecd2009bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed10002000005ff01000100') + cls.p = TLSHandshake(cls.data) + + def test_constructed(self): + assert (isinstance(self.p.data, TLSServerHello) == True) + + # def testDateCorrect(self): + # self.assertEqual(self.p.random_unixtime, 1342710284) + + def test_random_correct(self): + assert (self.p.data.random == _hexdecode('5008220c8ec43c5462315a7c99f5d5b6bff009ad285b51dc18485f352e9fdecd')) + + def test_cipher_suite(self): + assert (ssl_ciphersuites.BY_CODE[self.p.data.cipher_suite].name == 'TLS_RSA_WITH_NULL_SHA') + + def test_total_length(self): + assert (len(self.p) == 81) + + +class TestTLSMultiFactory(object): + + """Made up test data""" + + @classmethod + def setup_class(cls): + cls.data = _hexdecode('1703010010' # header 1 + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' # data 1 + '1703010010' # header 2 + 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' # data 2 + '1703010010' # header 3 + 'CCCCCCCC') # data 3 (incomplete) + cls.msgs, cls.bytes_parsed = tls_multi_factory(cls.data) + + def test_num_messages(self): + # only complete messages should be parsed, incomplete ones left + # in buffer + assert (len(self.msgs) == 2) + + def test_bytes_parsed(self): + assert (self.bytes_parsed == (5 + 16) * 2) + + def test_first_msg_data(self): + assert (self.msgs[0].data == _hexdecode('AA' * 16)) + + def test_second_msg_data(self): + assert (self.msgs[1].data == _hexdecode('BB' * 16)) + diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py new file mode 100644 index 00000000..d5ee1b9d --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/ssl_ciphersuites.py @@ -0,0 +1,76 @@ +# Copyright 2012 Google Inc. All rights reserved. +# -*- coding: utf-8 -*- +""" +Nicely formatted cipher suite definitions for TLS + +A list of cipher suites in the form of CipherSuite objects. +These are supposed to be immutable; don't mess with them. +""" + + +class CipherSuite(object): + """ + Encapsulates a cipher suite. + + Members/args: + * code: two-byte ID code, as int + * name: as in 'TLS_RSA_WITH_RC4_40_MD5' + * kx: key exchange algorithm, string + * auth: authentication algorithm, string + * encoding: encoding algorithm + * mac: message authentication code algorithm + """ + + def __init__(self, code, name, kx, auth, encoding, mac): + self.code = code + self.name = name + self.kx = kx + self.auth = auth + self.encoding = encoding + self.mac = mac + + def __repr__(self): + return 'CipherSuite(%s)' % self.name + + MAC_SIZES = { + 'MD5': 16, + 'SHA': 20, + 'SHA256': 32, # I guess + } + + BLOCK_SIZES = { + 'AES_256_CBC': 16, + } + + @property + def mac_size(self): + """In bytes. Default to 0.""" + return self.MAC_SIZES.get(self.mac, 0) + + @property + def block_size(self): + """In bytes. Default to 1.""" + return self.BLOCK_SIZES.get(self.encoding, 1) + + +# master list of CipherSuite Objects +CIPHERSUITES = [ + # not a real cipher suite, can be ignored, see RFC5746 + CipherSuite(0xff, 'TLS_EMPTY_RENEGOTIATION_INFO', + 'NULL', 'NULL', 'NULL', 'NULL'), + CipherSuite(0x00, 'TLS_NULL_WITH_NULL_NULL', + 'NULL', 'NULL', 'NULL', 'NULL'), + CipherSuite(0x01, 'TLS_RSA_WITH_NULL_MD5', 'RSA', 'RSA', 'NULL', 'MD5'), + CipherSuite(0x02, 'TLS_RSA_WITH_NULL_SHA', 'RSA', 'RSA', 'NULL', 'SHA'), + CipherSuite(0x0039, 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA', + 'DHE', 'RSA', 'AES_256_CBC', 'SHA'), # not sure I got the kx/auth thing right. + CipherSuite(0xffff, 'UNKNOWN_CIPHER', '', '', '', '') +] + +BY_CODE = dict( + (cipher.code, cipher) for cipher in CIPHERSUITES) + +BY_NAME = dict( + (suite.name, suite) for suite in CIPHERSUITES) + +NULL_SUITE = BY_CODE[0x00] diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/stp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/stp.py new file mode 100644 index 00000000..382318a4 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/stp.py @@ -0,0 +1,22 @@ +# $Id: stp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Spanning Tree Protocol.""" + +import dpkt + + +class STP(dpkt.Packet): + __hdr__ = ( + ('proto_id', 'H', 0), + ('v', 'B', 0), + ('type', 'B', 0), + ('flags', 'B', 0), + ('root_id', '8s', ''), + ('root_path', 'I', 0), + ('bridge_id', '8s', ''), + ('port_id', 'H', 0), + ('age', 'H', 0), + ('max_age', 'H', 0), + ('hello', 'H', 0), + ('fd', 'H', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/stun.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/stun.py new file mode 100644 index 00000000..e371350c --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/stun.py @@ -0,0 +1,47 @@ +# $Id: stun.py 47 2008-05-27 02:10:00Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Simple Traversal of UDP through NAT.""" + +import struct +import dpkt + +# STUN - RFC 3489 +# http://tools.ietf.org/html/rfc3489 +# Each packet has a 20 byte header followed by 0 or more attribute TLVs. + +# Message Types +BINDING_REQUEST = 0x0001 +BINDING_RESPONSE = 0x0101 +BINDING_ERROR_RESPONSE = 0x0111 +SHARED_SECRET_REQUEST = 0x0002 +SHARED_SECRET_RESPONSE = 0x0102 +SHARED_SECRET_ERROR_RESPONSE = 0x0112 + +# Message Attributes +MAPPED_ADDRESS = 0x0001 +RESPONSE_ADDRESS = 0x0002 +CHANGE_REQUEST = 0x0003 +SOURCE_ADDRESS = 0x0004 +CHANGED_ADDRESS = 0x0005 +USERNAME = 0x0006 +PASSWORD = 0x0007 +MESSAGE_INTEGRITY = 0x0008 +ERROR_CODE = 0x0009 +UNKNOWN_ATTRIBUTES = 0x000a +REFLECTED_FROM = 0x000b + + +class STUN(dpkt.Packet): + __hdr__ = ( + ('type', 'H', 0), + ('len', 'H', 0), + ('xid', '16s', 0) + ) + + +def tlv(buf): + n = 4 + t, l = struct.unpack('>HH', buf[:n]) + v = buf[n:n + l] + buf = buf[n + l:] + return t, l, v, buf diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/tcp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/tcp.py new file mode 100644 index 00000000..fe1a3b97 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/tcp.py @@ -0,0 +1,152 @@ +# $Id: tcp.py 42 2007-08-02 22:38:47Z jon.oberheide $ +# -*- coding: utf-8 -*- +"""Transmission Control Protocol.""" + +import dpkt +from decorators import deprecated + +# TCP control flags +TH_FIN = 0x01 # end of data +TH_SYN = 0x02 # synchronize sequence numbers +TH_RST = 0x04 # reset connection +TH_PUSH = 0x08 # push +TH_ACK = 0x10 # acknowledgment number set +TH_URG = 0x20 # urgent pointer set +TH_ECE = 0x40 # ECN echo, RFC 3168 +TH_CWR = 0x80 # congestion window reduced + +TCP_PORT_MAX = 65535 # maximum port +TCP_WIN_MAX = 65535 # maximum (unscaled) window + + +class TCP(dpkt.Packet): + __hdr__ = ( + ('sport', 'H', 0xdead), + ('dport', 'H', 0), + ('seq', 'I', 0xdeadbeefL), + ('ack', 'I', 0), + ('off_x2', 'B', ((5 << 4) | 0)), + ('flags', 'B', TH_SYN), + ('win', 'H', TCP_WIN_MAX), + ('sum', 'H', 0), + ('urp', 'H', 0) + ) + opts = '' + + @property + def off(self): return self.off_x2 >> 4 + + @off.setter + def off(self, off): self.off_x2 = (off << 4) | (self.off_x2 & 0xf) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_off(self): return self.off + + @deprecated + def _set_off(self, off): self.off = off + # ================================================= + + def __len__(self): + return self.__hdr_len__ + len(self.opts) + len(self.data) + + def __str__(self): + return self.pack_hdr() + self.opts + str(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + ol = ((self.off_x2 >> 4) << 2) - self.__hdr_len__ + if ol < 0: + raise dpkt.UnpackError, 'invalid header length' + self.opts = buf[self.__hdr_len__:self.__hdr_len__ + ol] + self.data = buf[self.__hdr_len__ + ol:] + +# Options (opt_type) - http://www.iana.org/assignments/tcp-parameters +TCP_OPT_EOL = 0 # end of option list +TCP_OPT_NOP = 1 # no operation +TCP_OPT_MSS = 2 # maximum segment size +TCP_OPT_WSCALE = 3 # window scale factor, RFC 1072 +TCP_OPT_SACKOK = 4 # SACK permitted, RFC 2018 +TCP_OPT_SACK = 5 # SACK, RFC 2018 +TCP_OPT_ECHO = 6 # echo (obsolete), RFC 1072 +TCP_OPT_ECHOREPLY = 7 # echo reply (obsolete), RFC 1072 +TCP_OPT_TIMESTAMP = 8 # timestamp, RFC 1323 +TCP_OPT_POCONN = 9 # partial order conn, RFC 1693 +TCP_OPT_POSVC = 10 # partial order service, RFC 1693 +TCP_OPT_CC = 11 # connection count, RFC 1644 +TCP_OPT_CCNEW = 12 # CC.NEW, RFC 1644 +TCP_OPT_CCECHO = 13 # CC.ECHO, RFC 1644 +TCP_OPT_ALTSUM = 14 # alt checksum request, RFC 1146 +TCP_OPT_ALTSUMDATA = 15 # alt checksum data, RFC 1146 +TCP_OPT_SKEETER = 16 # Skeeter +TCP_OPT_BUBBA = 17 # Bubba +TCP_OPT_TRAILSUM = 18 # trailer checksum +TCP_OPT_MD5 = 19 # MD5 signature, RFC 2385 +TCP_OPT_SCPS = 20 # SCPS capabilities +TCP_OPT_SNACK = 21 # selective negative acks +TCP_OPT_REC = 22 # record boundaries +TCP_OPT_CORRUPT = 23 # corruption experienced +TCP_OPT_SNAP = 24 # SNAP +TCP_OPT_TCPCOMP = 26 # TCP compression filter +TCP_OPT_MAX = 27 + + +def parse_opts(buf): + """Parse TCP option buffer into a list of (option, data) tuples.""" + opts = [] + while buf: + o = ord(buf[0]) + if o > TCP_OPT_NOP: + try: + # advance buffer at least 2 bytes = 1 type + 1 length + l = max(2, ord(buf[1])) + d, buf = buf[2:l], buf[l:] + except (IndexError, ValueError): + # print 'bad option', repr(str(buf)) + opts.append(None) # XXX + break + else: + # options 0 and 1 are not followed by length byte + d, buf = '', buf[1:] + opts.append((o, d)) + return opts + + +def test_parse_opts(): + # normal scenarios + buf = '\x02\x04\x23\x00\x01\x01\x04\x02' + opts = parse_opts(buf) + assert opts == [ + (TCP_OPT_MSS, '\x23\x00'), + (TCP_OPT_NOP, ''), + (TCP_OPT_NOP, ''), + (TCP_OPT_SACKOK, '') + ] + + buf = '\x01\x01\x05\x0a\x37\xf8\x19\x70\x37\xf8\x29\x78' + opts = parse_opts(buf) + assert opts == [ + (TCP_OPT_NOP, ''), + (TCP_OPT_NOP, ''), + (TCP_OPT_SACK, '\x37\xf8\x19\x70\x37\xf8\x29\x78') + ] + + # test a zero-length option + buf = '\x02\x00\x01' + opts = parse_opts(buf) + assert opts == [ + (TCP_OPT_MSS, ''), + (TCP_OPT_NOP, '') + ] + + # test a one-byte malformed option + buf = '\xff' + opts = parse_opts(buf) + assert opts == [None] + + +if __name__ == '__main__': + # Runs all the test associated with this class/file + test_parse_opts() + print 'Tests Successful...' diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/telnet.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/telnet.py new file mode 100644 index 00000000..9a1d7f4c --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/telnet.py @@ -0,0 +1,80 @@ +# $Id: telnet.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Telnet.""" + +IAC = 255 # interpret as command: +DONT = 254 # you are not to use option +DO = 253 # please, you use option +WONT = 252 # I won't use option +WILL = 251 # I will use option +SB = 250 # interpret as subnegotiation +GA = 249 # you may reverse the line +EL = 248 # erase the current line +EC = 247 # erase the current character +AYT = 246 # are you there +AO = 245 # abort output--but let prog finish +IP = 244 # interrupt process--permanently +BREAK = 243 # break +DM = 242 # data mark--for connect. cleaning +NOP = 241 # nop +SE = 240 # end sub negotiation +EOR = 239 # end of record (transparent mode) +ABORT = 238 # Abort process +SUSP = 237 # Suspend process +xEOF = 236 # End of file: EOF is already used... + +SYNCH = 242 # for telfunc calls + + +def strip_options(buf): + """Return a list of lines and dict of options from telnet data.""" + l = buf.split(chr(IAC)) + # print l + b = [] + d = {} + subopt = False + for w in l: + if not w: + continue + o = ord(w[0]) + if o > SB: + # print 'WILL/WONT/DO/DONT/IAC', `w` + w = w[2:] + elif o == SE: + # print 'SE', `w` + w = w[1:] + subopt = False + elif o == SB: + # print 'SB', `w` + subopt = True + for opt in ('USER', 'DISPLAY', 'TERM'): + p = w.find(opt + '\x01') + if p != -1: + d[opt] = w[p + len(opt) + 1:].split('\x00', 1)[0] + w = None + elif subopt: + w = None + if w: + w = w.replace('\x00', '\n').splitlines() + if not w[-1]: w.pop() + b.extend(w) + return b, d + + +def test_telnet(): + l = [] + s = "\xff\xfb%\xff\xfa%\x00\x00\x00\xff\xf0\xff\xfd&\xff\xfa&\x05\xff\xf0\xff\xfa&\x01\x01\x02\xff\xf0\xff\xfb\x18\xff\xfb \xff\xfb#\xff\xfb'\xff\xfc$\xff\xfa \x0038400,38400\xff\xf0\xff\xfa#\x00doughboy.citi.umich.edu:0.0\xff\xf0\xff\xfa'\x00\x00DISPLAY\x01doughboy.citi.umich.edu:0.0\x00USER\x01dugsong\xff\xf0\xff\xfa\x18\x00XTERM\xff\xf0\xff\xfd\x03\xff\xfc\x01\xff\xfb\x1f\xff\xfa\x1f\x00P\x00(\xff\xf0\xff\xfd\x05\xff\xfb!\xff\xfd\x01fugly\r\x00yoda\r\x00bashtard\r\x00" + l.append(s) + s = '\xff\xfd\x01\xff\xfd\x03\xff\xfb\x18\xff\xfb\x1f\xff\xfa\x1f\x00X\x002\xff\xf0admin\r\x00\xff\xfa\x18\x00LINUX\xff\xf0foobar\r\x00enable\r\x00foobar\r\x00\r\x00show ip int Vlan 666\r\x00' + l.append(s) + s = '\xff\xfb%\xff\xfa%\x00\x00\x00\xff\xf0\xff\xfd&\xff\xfa&\x05\xff\xf0\xff\xfa&\x01\x01\x02\xff\xf0\xff\xfb&\xff\xfb\x18\xff\xfb \xff\xfb#\xff\xfb\'\xff\xfc$\xff\xfa \x0038400,38400\xff\xf0\xff\xfa#\x00doughboy.citi.umich.edu:0.0\xff\xf0\xff\xfa\'\x00\x00DISPLAY\x01doughboy.citi.umich.edu:0.0\x00USER\x01dugsong\xff\xf0\xff\xfa\x18\x00XTERM\xff\xf0\xff\xfd\x03\xff\xfc\x01\xff\xfb"\xff\xfa"\x03\x01\x03\x00\x03b\x03\x04\x02\x0f\x05\x00\xff\xff\x07b\x1c\x08\x02\x04\tB\x1a\n\x02\x7f\x0b\x02\x15\x0c\x02\x17\r\x02\x12\x0e\x02\x16\x0f\x02\x11\x10\x02\x13\x11\x00\xff\xff\x12\x00\xff\xff\xff\xf0\xff\xfb\x1f\xff\xfa\x1f\x00P\x00(\xff\xf0\xff\xfd\x05\xff\xfb!\xff\xfa"\x01\x0f\xff\xf0\xff\xfd\x01\xff\xfe\x01\xff\xfa"\x03\x01\x80\x00\xff\xf0\xff\xfd\x01werd\r\n\xff\xfe\x01yoda\r\n\xff\xfd\x01darthvader\r\n\xff\xfe\x01' + l.append(s) + exp = [(['fugly', 'yoda', 'bashtard'], {'USER': 'dugsong', 'DISPLAY': 'doughboy.citi.umich.edu:0.0'}), + (['admin', 'foobar', 'enable', 'foobar', '', 'show ip int Vlan 666'], {}), + (['werd', 'yoda', 'darthvader'], {'USER': 'dugsong', 'DISPLAY': 'doughboy.citi.umich.edu:0.0'})] + assert (map(strip_options, l) == exp) + + +if __name__ == '__main__': + test_telnet() + print 'Tests Successful...' \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/tftp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/tftp.py new file mode 100644 index 00000000..928ee1e3 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/tftp.py @@ -0,0 +1,56 @@ +# $Id: tftp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Trivial File Transfer Protocol.""" + +import struct +import dpkt + +# Opcodes +OP_RRQ = 1 # read request +OP_WRQ = 2 # write request +OP_DATA = 3 # data packet +OP_ACK = 4 # acknowledgment +OP_ERR = 5 # error code + +# Error codes +EUNDEF = 0 # not defined +ENOTFOUND = 1 # file not found +EACCESS = 2 # access violation +ENOSPACE = 3 # disk full or allocation exceeded +EBADOP = 4 # illegal TFTP operation +EBADID = 5 # unknown transfer ID +EEXISTS = 6 # file already exists +ENOUSER = 7 # no such user + + +class TFTP(dpkt.Packet): + __hdr__ = (('opcode', 'H', 1), ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.opcode in (OP_RRQ, OP_WRQ): + l = self.data.split('\x00') + self.filename = l[0] + self.mode = l[1] + self.data = '' + elif self.opcode in (OP_DATA, OP_ACK): + self.block = struct.unpack('>H', self.data[:2]) + self.data = self.data[2:] + elif self.opcode == OP_ERR: + self.errcode = struct.unpack('>H', self.data[:2]) + self.errmsg = self.data[2:].split('\x00')[0] + self.data = '' + + def __len__(self): + return len(str(self)) + + def __str__(self): + if self.opcode in (OP_RRQ, OP_WRQ): + s = '%s\x00%s\x00' % (self.filename, self.mode) + elif self.opcode in (OP_DATA, OP_ACK): + s = struct.pack('>H', self.block) + elif self.opcode == OP_ERR: + s = struct.pack('>H', self.errcode) + ('%s\x00' % self.errmsg) + else: + s = '' + return self.pack_hdr() + s + self.data diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/tns.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/tns.py new file mode 100644 index 00000000..931508e6 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/tns.py @@ -0,0 +1,26 @@ +# $Id: tns.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Transparent Network Substrate.""" + +import dpkt + + +class TNS(dpkt.Packet): + __hdr__ = ( + ('length', 'H', 0), + ('pktsum', 'H', 0), + ('type', 'B', 0), + ('rsvd', 'B', 0), + ('hdrsum', 'H', 0), + ('msg', '0s', ''), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + n = self.length - self.__hdr_len__ + if n > len(self.data): + raise dpkt.NeedData('short message (missing %d bytes)' % + (n - len(self.data))) + self.msg = self.data[:n] + self.data = self.data[n:] + diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/tpkt.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/tpkt.py new file mode 100644 index 00000000..d235833b --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/tpkt.py @@ -0,0 +1,16 @@ +# $Id: tpkt.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""ISO Transport Service on top of the TCP (TPKT).""" + +import dpkt + +# TPKT - RFC 1006 Section 6 +# http://www.faqs.org/rfcs/rfc1006.html + + +class TPKT(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 3), + ('rsvd', 'B', 0), + ('len', 'H', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/udp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/udp.py new file mode 100644 index 00000000..41a00e78 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/udp.py @@ -0,0 +1,17 @@ +# $Id: udp.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""User Datagram Protocol.""" + +import dpkt + +UDP_HDR_LEN = 8 +UDP_PORT_MAX = 65535 + + +class UDP(dpkt.Packet): + __hdr__ = ( + ('sport', 'H', 0xdead), + ('dport', 'H', 0), + ('ulen', 'H', 8), + ('sum', 'H', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/vrrp.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/vrrp.py new file mode 100644 index 00000000..6bdff005 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/vrrp.py @@ -0,0 +1,70 @@ +# $Id: vrrp.py 88 2013-03-05 19:43:17Z andrewflnr@gmail.com $ +# -*- coding: utf-8 -*- +"""Virtual Router Redundancy Protocol.""" + +import dpkt +from decorators import deprecated + + +class VRRP(dpkt.Packet): + __hdr__ = ( + ('vtype', 'B', 0x21), + ('vrid', 'B', 0), + ('priority', 'B', 0), + ('count', 'B', 0), + ('atype', 'B', 0), + ('advtime', 'B', 0), + ('sum', 'H', 0), + ) + addrs = () + auth = '' + + @property + def v(self): + return self.vtype >> 4 + + @v.setter + def v(self, v): + self.vtype = (self.vtype & ~0xf) | (v << 4) + + @property + def type(self): + return self.vtype & 0xf + + @type.setter + def type(self, v): + self.vtype = (self.vtype & ~0xf0) | (v & 0xf) + + # Deprecated methods, will be removed in the future + # ================================================= + @deprecated + def _get_v(self): return self.v + + @deprecated + def _set_v(self, v): self.v = v + + @deprecated + def _get_type(self): return self.type + + @deprecated + def _set_type(self, v): self.type = v + # ================================================= + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + off = 0 + for off in range(0, 4 * self.count, 4): + l.append(self.data[off:off + 4]) + self.addrs = l + self.auth = self.data[off + 4:] + self.data = '' + + def __len__(self): + return self.__hdr_len__ + (4 * self.count) + len(self.auth) + + def __str__(self): + data = ''.join(self.addrs) + self.auth + if not self.sum: + self.sum = dpkt.in_cksum(self.pack_hdr() + data) + return self.pack_hdr() + data diff --git a/scripts/external_libs/dpkt-1.8.6.2/dpkt/yahoo.py b/scripts/external_libs/dpkt-1.8.6.2/dpkt/yahoo.py new file mode 100644 index 00000000..6b871115 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/dpkt/yahoo.py @@ -0,0 +1,30 @@ +# $Id: yahoo.py 23 2006-11-08 15:45:33Z dugsong $ +# -*- coding: utf-8 -*- +"""Yahoo Messenger.""" + +import dpkt + + +class YHOO(dpkt.Packet): + __hdr__ = [ + ('version', '8s', ' ' * 8), + ('length', 'I', 0), + ('service', 'I', 0), + ('connid', 'I', 0), + ('magic', 'I', 0), + ('unknown', 'I', 0), + ('type', 'I', 0), + ('nick1', '36s', ' ' * 36), + ('nick2', '36s', ' ' * 36) + ] + __byte_order__ = '<' + + +class YMSG(dpkt.Packet): + __hdr__ = [ + ('version', '8s', ' ' * 8), + ('length', 'H', 0), + ('type', 'H', 0), + ('unknown1', 'I', 0), + ('unknown2', 'I', 0) + ] diff --git a/scripts/external_libs/dpkt-1.8.6.2/setup.cfg b/scripts/external_libs/dpkt-1.8.6.2/setup.cfg new file mode 100644 index 00000000..56ffc205 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/setup.cfg @@ -0,0 +1,20 @@ +[bdist_wheel] +universal = 1 + +[aliases] +release = register clean --all sdist bdist_wheel upload + +[flake8] +max-line-length = 140 + +[pytest] +addopts = -v --cov-report term-missing +python_files = *.py +python_functions = test +norecursedirs = .tox .git *.egg-info __pycache__ dist build + +[egg_info] +tag_build = +tag_date = 0 +tag_svn_revision = 0 + diff --git a/scripts/external_libs/dpkt-1.8.6.2/setup.py b/scripts/external_libs/dpkt-1.8.6.2/setup.py new file mode 100644 index 00000000..f77cd97e --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6.2/setup.py @@ -0,0 +1,67 @@ +import os +import sys + +try: + from setuptools import setup, Command +except ImportError: + from distutils.core import setup, Command + +package_name = 'dpkt' +description = 'fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols' +readme = open('README.rst').read() +requirements = [] + +# PyPI Readme +long_description = open('README.rst').read() + +# Pull in the package +package = __import__(package_name) + + +class BuildDebPackage(Command): + """Build a Debian Package out of this Python Package""" + try: + import stdeb + except ImportError as exc: + print 'To build a Debian Package you must install stdeb (pip install stdeb)' + + description = "Build a Debian Package out of this Python Package" + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + os.system('python setup.py sdist') + sdist_file = os.path.join(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'dist'), + package_name + '-' + package.__version__ + '.tar.gz') + print sdist_file + os.system('py2dsc-deb ' + sdist_file) + + +setup(name=package_name, + version=package.__version__, + author=package.__author__, + author_email=package.__author_email__, + url=package.__url__, + description=description, + long_description=long_description, + packages=['dpkt'], + install_requires=requirements, + license='BSD', + zip_safe=False, + classifiers=[ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: BSD License', + 'Natural Language :: English', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: Implementation :: CPython', + 'Programming Language :: Python :: Implementation :: PyPy', + ], + cmdclass={'debian': BuildDebPackage} +) diff --git a/scripts/external_libs/dpkt-1.8.6/AUTHORS b/scripts/external_libs/dpkt-1.8.6/AUTHORS new file mode 100644 index 00000000..dcefbef9 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/AUTHORS @@ -0,0 +1,60 @@ + +Original author +--------------- + +Dug Song + + +Contributors +------------ + +Timur Alperovich + radiotap module + +Nic Bellamy + HTTP header parsing fix + +the grugq + better RTP module + +David Helder + bug fixes + +Przemyslaw Karwasiecki + TABLE_DUMP in MRT module + +Reza Lotun + MetaPacket cleanup + +Jeff Nathan + bug fixes + +Tim Newsham + IPv6 bugfixing and improvements + +keisuke.nishimoto@gmail.com + Snoop file parser + +Jon Oberheide + STUN, H.225, TPKT, NTP, RIP, Diameter, SCTP, BGP, MRT, RX modules + +plotnikoff@gmail.com + handle dynamic imports from py2exe/freeze.py/zipped egg packages + +simdream@gmail.com + handle multiple cookie values in HTTP + +Owen Stephens + IP6 extension header support + +Robert Stone + Netflow and QQ modules + +Thomas Taranowski + dnet IP checksum bug on i386 + +Jirka Vejrazka + bug fixes + +Tim Yardley + DHCP definitions diff --git a/scripts/external_libs/dpkt-1.8.6/CHANGES b/scripts/external_libs/dpkt-1.8.6/CHANGES new file mode 100644 index 00000000..a5f05121 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/CHANGES @@ -0,0 +1,71 @@ +dpkg-1.8: + - fix a typo in vrrp.py + - fix IPv4 and IPv6 packet to correctly handle zero payload length + - store cipher_suite as int in TLSServerHello to allow app-specific messages + - improve SSL parsing + +dpkt-1.7: + - handle dynamic imports from py2exe/freeze.py/zipped egg + packages, from plotnikoff + - decode Ethernet MPLS labels, Cisco ISL VLAN tags, 802.2 LLC fields + - handle multiply-defined HTTP headers from simdream + - add IPv6 extension header support (minus ESP) from Owen Stephens + - add radiotap module from Timur Alperovich + - add IEEE80211 module from Jon Oberheide + - add RFB module from Jon Oberheide + - fix IP6 checksum to include options + - rename 'as' to 'asn' field in BGP header + - fix transport-layer checksum in IP6 + - handle improper TCP header offset + - fix SSL typo + - handle malformed ICMP headers + - added RX module from Jon Oberheide + - fixed loopback module IP/IP6 decoding + - set transport-layer (TCP, UDP) checksum in IP + - MRT module fixes + - fix pcap.Writer timestamp calculation + +dpkt-1.6: + - DNS RR packing fixed + - added STUN, H.225, TPKT, NTP, RIP, Diameter, SCTP, + BGP, and MRT modules from Jon Oberheide + - new dpkt.NeedData exception + +dpkt-1.5: + - IP6 checksum fix + - __getitem__() interface to Packet (e.g. ip['src'] == ip.src) + - faster Ethernet, IP, PPP module loading + - support any endianness capture file in pcap module, + and export a pypcap-compatible Reader + - additional CDP definitions + - replaced rtp module with the grugq's version + - added QQ module from Robert Stone + - added gzip module + - added PPPoE module + - added RADIUS module + +dpkt-1.4: + - fix IP checksum bug on i386, caught by Thomas Taranowski + +dpkt-1.3: + - autoload IP, Ethernet dispatch tables + - IP6 bugfixes from Tim Newsham + - additional DHCP definitions from Tim Yardley + - HTTP bugfixes and abstraction (see SIP) + - RPC bugfixes + - added pypcap-compatible PcapReader + - added Linux libpcap "cooked" capture module + - added preliminary SSL module + - added SIP module + - added SCCP module + - added RTP module + - added Portmap module + +dpkt-1.2: + - changed license from GPL to BSD + - added DTP module + - added HTTP module + - added DNS RR decodes + - added enough PPP to decode PPTP GRE encapsulation + +# $Id: CHANGES 379 2006-07-27 05:23:19Z dugsong $ diff --git a/scripts/external_libs/dpkt-1.8.6/LICENSE b/scripts/external_libs/dpkt-1.8.6/LICENSE new file mode 100644 index 00000000..99d14371 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/LICENSE @@ -0,0 +1,28 @@ + + Copyright (c) 2004 Dug Song + All rights reserved, all wrongs reversed. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The names of the authors and copyright holders may not be used to + endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/scripts/external_libs/dpkt-1.8.6/MANIFEST.in b/scripts/external_libs/dpkt-1.8.6/MANIFEST.in new file mode 100644 index 00000000..e96d54c1 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/MANIFEST.in @@ -0,0 +1,2 @@ + +include AUTHORS CHANGES README.rst LICENSE diff --git a/scripts/external_libs/dpkt-1.8.6/PKG-INFO b/scripts/external_libs/dpkt-1.8.6/PKG-INFO new file mode 100644 index 00000000..e82397e7 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/PKG-INFO @@ -0,0 +1,122 @@ +Metadata-Version: 1.1 +Name: dpkt +Version: 1.8.6 +Summary: fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols +Home-page: http://dpkt.googlecode.com/ +Author: Dug Song +Author-email: UNKNOWN +License: BSD +Description: + ==== + dpkt + ==== + + | |docs| |travis| |coveralls| |landscape| |version| + | |downloads| |wheel| |supported-versions| |supported-implementations| + + .. |docs| image:: https://readthedocs.org/projects/dpkt/badge/?style=flat + :target: https://readthedocs.org/projects/dpkt + :alt: Documentation Status + + .. |travis| image:: http://img.shields.io/travis/kbandla/dpkt/master.png?style=flat + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + + .. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt/master.png?style=flat + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + + .. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg?style=flat + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + + .. |version| image:: http://img.shields.io/pypi/v/dpkt.png?style=flat + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + + .. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.png?style=flat + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + + .. |wheel| image:: https://pypip.in/wheel/dpkt/badge.png?style=flat + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-versions| image:: https://pypip.in/py_versions/dpkt/badge.png?style=flat + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-implementations| image:: https://pypip.in/implementation/dpkt/badge.png?style=flat + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + + Installation + ============ + + :: + + pip install dpkt + + Documentation + ============= + + https://dpkt.readthedocs.org/ + + Development + =========== + + To run the all tests run:: + + tox + + + Deviations from upstream + ~~~~~~~~~~~~~~~~~~~~~~~~ + + This code is based on `dpkt code `__ lead by Dug Song. + + At this point, this is not the exact `upstream + version `__. If you are looking for the + latest stock dpkt, please get it from the above link. + + Almost all of the upstream changes are pulled. However, some modules are + not. Here is a list of the changes: + + - `dpkt/dpkt.py `__: + decouple dnet from dpkt + - `dpkt/dns.py `__ + : parse some more DNS flags + + Examples + -------- + + [@jonoberheide's](https://twitter.com/jonoberheide) old examples still + apply: + + - `dpkt Tutorial #1: ICMP + Echo `__ + - `dpkt Tutorial #2: Parsing a PCAP + File `__ + - `dpkt Tutorial #3: dns + spoofing `__ + - `dpkt Tutorial #4: AS Paths from + MRT/BGP `__ + + `Jeff Silverman `__ has some + `code `__ and + `documentation `__. + + LICENSE + ------- + + BSD 3-Clause License, as the upstream project + +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Natural Language :: English +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy diff --git a/scripts/external_libs/dpkt-1.8.6/README.rst b/scripts/external_libs/dpkt-1.8.6/README.rst new file mode 100644 index 00000000..9339c574 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/README.rst @@ -0,0 +1,104 @@ + +==== +dpkt +==== + +| |docs| |travis| |coveralls| |landscape| |version| +| |downloads| |wheel| |supported-versions| |supported-implementations| + +.. |docs| image:: https://readthedocs.org/projects/dpkt/badge/?style=flat + :target: https://readthedocs.org/projects/dpkt + :alt: Documentation Status + +.. |travis| image:: http://img.shields.io/travis/kbandla/dpkt/master.png?style=flat + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + +.. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt/master.png?style=flat + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + +.. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg?style=flat + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + +.. |version| image:: http://img.shields.io/pypi/v/dpkt.png?style=flat + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + +.. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.png?style=flat + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + +.. |wheel| image:: https://pypip.in/wheel/dpkt/badge.png?style=flat + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-versions| image:: https://pypip.in/py_versions/dpkt/badge.png?style=flat + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + +.. |supported-implementations| image:: https://pypip.in/implementation/dpkt/badge.png?style=flat + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + +Installation +============ + +:: + + pip install dpkt + +Documentation +============= + +https://dpkt.readthedocs.org/ + +Development +=========== + +To run the all tests run:: + + tox + + +Deviations from upstream +~~~~~~~~~~~~~~~~~~~~~~~~ + +This code is based on `dpkt code `__ lead by Dug Song. + +At this point, this is not the exact `upstream +version `__. If you are looking for the +latest stock dpkt, please get it from the above link. + +Almost all of the upstream changes are pulled. However, some modules are +not. Here is a list of the changes: + +- `dpkt/dpkt.py `__: + decouple dnet from dpkt +- `dpkt/dns.py `__ + : parse some more DNS flags + +Examples +-------- + +[@jonoberheide's](https://twitter.com/jonoberheide) old examples still +apply: + +- `dpkt Tutorial #1: ICMP + Echo `__ +- `dpkt Tutorial #2: Parsing a PCAP + File `__ +- `dpkt Tutorial #3: dns + spoofing `__ +- `dpkt Tutorial #4: AS Paths from + MRT/BGP `__ + +`Jeff Silverman `__ has some +`code `__ and +`documentation `__. + +LICENSE +------- + +BSD 3-Clause License, as the upstream project diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/PKG-INFO b/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/PKG-INFO new file mode 100644 index 00000000..e82397e7 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/PKG-INFO @@ -0,0 +1,122 @@ +Metadata-Version: 1.1 +Name: dpkt +Version: 1.8.6 +Summary: fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols +Home-page: http://dpkt.googlecode.com/ +Author: Dug Song +Author-email: UNKNOWN +License: BSD +Description: + ==== + dpkt + ==== + + | |docs| |travis| |coveralls| |landscape| |version| + | |downloads| |wheel| |supported-versions| |supported-implementations| + + .. |docs| image:: https://readthedocs.org/projects/dpkt/badge/?style=flat + :target: https://readthedocs.org/projects/dpkt + :alt: Documentation Status + + .. |travis| image:: http://img.shields.io/travis/kbandla/dpkt/master.png?style=flat + :alt: Travis-CI Build Status + :target: https://travis-ci.org/kbandla/dpkt + + .. |coveralls| image:: http://img.shields.io/coveralls/kbandla/dpkt/master.png?style=flat + :alt: Coverage Status + :target: https://coveralls.io/r/kbandla/dpkt + + .. |landscape| image:: https://landscape.io/github/kbandla/dpkt/master/landscape.svg?style=flat + :target: https://landscape.io/github/kbandla/dpkt/master + :alt: Code Quality Status + + .. |version| image:: http://img.shields.io/pypi/v/dpkt.png?style=flat + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/dpkt + + .. |downloads| image:: http://img.shields.io/pypi/dm/dpkt.png?style=flat + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/dpkt + + .. |wheel| image:: https://pypip.in/wheel/dpkt/badge.png?style=flat + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-versions| image:: https://pypip.in/py_versions/dpkt/badge.png?style=flat + :alt: Supported versions + :target: https://pypi.python.org/pypi/dpkt + + .. |supported-implementations| image:: https://pypip.in/implementation/dpkt/badge.png?style=flat + :alt: Supported implementations + :target: https://pypi.python.org/pypi/dpkt + + Installation + ============ + + :: + + pip install dpkt + + Documentation + ============= + + https://dpkt.readthedocs.org/ + + Development + =========== + + To run the all tests run:: + + tox + + + Deviations from upstream + ~~~~~~~~~~~~~~~~~~~~~~~~ + + This code is based on `dpkt code `__ lead by Dug Song. + + At this point, this is not the exact `upstream + version `__. If you are looking for the + latest stock dpkt, please get it from the above link. + + Almost all of the upstream changes are pulled. However, some modules are + not. Here is a list of the changes: + + - `dpkt/dpkt.py `__: + decouple dnet from dpkt + - `dpkt/dns.py `__ + : parse some more DNS flags + + Examples + -------- + + [@jonoberheide's](https://twitter.com/jonoberheide) old examples still + apply: + + - `dpkt Tutorial #1: ICMP + Echo `__ + - `dpkt Tutorial #2: Parsing a PCAP + File `__ + - `dpkt Tutorial #3: dns + spoofing `__ + - `dpkt Tutorial #4: AS Paths from + MRT/BGP `__ + + `Jeff Silverman `__ has some + `code `__ and + `documentation `__. + + LICENSE + ------- + + BSD 3-Clause License, as the upstream project + +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Natural Language :: English +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/SOURCES.txt b/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/SOURCES.txt new file mode 100644 index 00000000..c2521e2a --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/SOURCES.txt @@ -0,0 +1,80 @@ +AUTHORS +CHANGES +LICENSE +MANIFEST.in +README.rst +setup.cfg +setup.py +dpkt/__init__.py +dpkt/ah.py +dpkt/aim.py +dpkt/aoe.py +dpkt/aoeata.py +dpkt/aoecfg.py +dpkt/arp.py +dpkt/asn1.py +dpkt/bgp.py +dpkt/cdp.py +dpkt/crc32c.py +dpkt/dhcp.py +dpkt/diameter.py +dpkt/dns.py +dpkt/dpkt.py +dpkt/dtp.py +dpkt/esp.py +dpkt/ethernet.py +dpkt/gre.py +dpkt/gzip.py +dpkt/h225.py +dpkt/hsrp.py +dpkt/http.py +dpkt/icmp.py +dpkt/icmp6.py +dpkt/ieee80211.py +dpkt/igmp.py +dpkt/ip.py +dpkt/ip6.py +dpkt/ipx.py +dpkt/llc.py +dpkt/loopback.py +dpkt/mrt.py +dpkt/netbios.py +dpkt/netflow.py +dpkt/ntp.py +dpkt/ospf.py +dpkt/pcap.py +dpkt/pim.py +dpkt/pmap.py +dpkt/ppp.py +dpkt/pppoe.py +dpkt/qq.py +dpkt/radiotap.py +dpkt/radius.py +dpkt/rfb.py +dpkt/rip.py +dpkt/rpc.py +dpkt/rtp.py +dpkt/rx.py +dpkt/sccp.py +dpkt/sctp.py +dpkt/sip.py +dpkt/sll.py +dpkt/smb.py +dpkt/snoop.py +dpkt/ssl.py +dpkt/ssl_ciphersuites.py +dpkt/stp.py +dpkt/stun.py +dpkt/tcp.py +dpkt/telnet.py +dpkt/tftp.py +dpkt/tns.py +dpkt/tpkt.py +dpkt/udp.py +dpkt/vrrp.py +dpkt/yahoo.py +dpkt.egg-info/PKG-INFO +dpkt.egg-info/SOURCES.txt +dpkt.egg-info/dependency_links.txt +dpkt.egg-info/not-zip-safe +dpkt.egg-info/top_level.txt \ No newline at end of file diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/dependency_links.txt b/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/dependency_links.txt new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/not-zip-safe b/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/not-zip-safe new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/top_level.txt b/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/top_level.txt new file mode 100644 index 00000000..4daab81a --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt.egg-info/top_level.txt @@ -0,0 +1 @@ +dpkt diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/__init__.py b/scripts/external_libs/dpkt-1.8.6/dpkt/__init__.py new file mode 100644 index 00000000..31d6281d --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/__init__.py @@ -0,0 +1,70 @@ +"""fast, simple packet creation and parsing.""" + +__author__ = 'Dug Song ' +__copyright__ = 'Copyright (c) 2004 Dug Song' +__license__ = 'BSD' +__url__ = 'http://dpkt.googlecode.com/' +__version__ = '1.8.6' + +from dpkt import * + +import ah +import aim +import arp +import asn1 +import bgp +import cdp +import dhcp +import diameter +import dns +import dtp +import esp +import ethernet +import gre +import gzip +import h225 +import hsrp +import http +import icmp +import icmp6 +import ieee80211 +import igmp +import ip +import ip6 +import ipx +import llc +import loopback +import mrt +import netbios +import netflow +import ntp +import ospf +import pcap +import pim +import pmap +import ppp +import pppoe +import qq +import radiotap +import radius +import rfb +import rip +import rpc +import rtp +import rx +import sccp +import sctp +import sip +import sll +import smb +import ssl +import stp +import stun +import tcp +import telnet +import tftp +import tns +import tpkt +import udp +import vrrp +import yahoo diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/ah.py b/scripts/external_libs/dpkt-1.8.6/dpkt/ah.py new file mode 100644 index 00000000..87def27e --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/ah.py @@ -0,0 +1,31 @@ +# $Id: ah.py 34 2007-01-28 07:54:20Z dugsong $ + +"""Authentication Header.""" + +import dpkt + +class AH(dpkt.Packet): + __hdr__ = ( + ('nxt', 'B', 0), + ('len', 'B', 0), # payload length + ('rsvd', 'H', 0), + ('spi', 'I', 0), + ('seq', 'I', 0) + ) + auth = '' + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.auth = self.data[:self.len] + buf = self.data[self.len:] + import ip + try: + self.data = ip.IP.get_proto(self.nxt)(buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def __len__(self): + return self.__hdr_len__ + len(self.auth) + len(self.data) + + def __str__(self): + return self.pack_hdr() + str(self.auth) + str(self.data) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/aim.py b/scripts/external_libs/dpkt-1.8.6/dpkt/aim.py new file mode 100644 index 00000000..0fb58063 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/aim.py @@ -0,0 +1,47 @@ +# $Id: aim.py 23 2006-11-08 15:45:33Z dugsong $ + +"""AOL Instant Messenger.""" + +import dpkt +import struct + +# OSCAR: http://iserverd1.khstu.ru/oscar/ + +class FLAP(dpkt.Packet): + __hdr__ = ( + ('ast', 'B', 0x2a), # '*' + ('type', 'B', 0), + ('seq', 'H', 0), + ('len', 'H', 0) + ) + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.ast != 0x2a: + raise dpkt.UnpackError('invalid FLAP header') + if len(self.data) < self.len: + raise dpkt.NeedData, '%d left, %d needed' % (len(self.data), self.len) + +class SNAC(dpkt.Packet): + __hdr__ = ( + ('family', 'H', 0), + ('subtype', 'H', 0), + ('flags', 'H', 0), + ('reqid', 'I', 0) + ) + +def tlv(buf): + n = 4 + try: + t, l = struct.unpack('>HH', buf[:n]) + except struct.error: + raise dpkt.UnpackError + v = buf[n:n+l] + if len(v) < l: + raise dpkt.NeedData + buf = buf[n+l:] + return (t,l,v, buf) + +# TOC 1.0: http://jamwt.com/Py-TOC/PROTOCOL + +# TOC 2.0: http://www.firestuff.org/projects/firetalk/doc/toc2.txt + diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/aoe.py b/scripts/external_libs/dpkt-1.8.6/dpkt/aoe.py new file mode 100644 index 00000000..45a1eaf2 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/aoe.py @@ -0,0 +1,70 @@ +"""ATA over Ethernet Protocol.""" + +import struct + + +import dpkt + + +class AOE(dpkt.Packet): + __hdr__ = ( + ('ver_fl', 'B', 0x10), + ('err', 'B', 0), + ('maj', 'H', 0), + ('min', 'B', 0), + ('cmd', 'B', 0), + ('tag', 'I', 0), + ) + _cmdsw = {} + + def _get_ver(self): return self.ver_fl >> 4 + def _set_ver(self, ver): self.ver_fl = (ver << 4) | (self.ver_fl & 0xf) + ver = property(_get_ver, _set_ver) + + def _get_fl(self): return self.ver_fl & 0xf + def _set_fl(self, fl): self.ver_fl = (self.ver_fl & 0xf0) | fl + fl = property(_get_fl, _set_fl) + + def set_cmd(cls, cmd, pktclass): + cls._cmdsw[cmd] = pktclass + set_cmd = classmethod(set_cmd) + + def get_cmd(cls, cmd): + return cls._cmdsw[cmd] + get_cmd = classmethod(get_cmd) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._cmdsw[self.cmd](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, struct.error, dpkt.UnpackError): + pass + + def pack_hdr(self): + try: + return dpkt.Packet.pack_hdr(self) + except struct.error, e: + raise dpkt.PackError(str(e)) + + +AOE_CMD_ATA = 0 +AOE_CMD_CFG = 1 +AOE_FLAG_RSP = 1 << 3 + + +def __load_cmds(): + prefix = 'AOE_CMD_' + g = globals() + for k, v in g.iteritems(): + if k.startswith(prefix): + name = 'aoe' + k[len(prefix):].lower() + try: + mod = __import__(name, g) + except ImportError: + continue + AOE.set_cmd(v, getattr(mod, name.upper())) + + +if not AOE._cmdsw: + __load_cmds() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/aoeata.py b/scripts/external_libs/dpkt-1.8.6/dpkt/aoeata.py new file mode 100644 index 00000000..67e2ca11 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/aoeata.py @@ -0,0 +1,34 @@ +'''ATA over Ethernet ATA command''' + +import dpkt, aoe + +ATA_DEVICE_IDENTIFY = 0xec + +class AOEATA(dpkt.Packet): + __hdr__ = ( + ('aflags', 'B', 0), + ('errfeat', 'B', 0), + ('scnt', 'B', 0), + ('cmdstat', 'B', ATA_DEVICE_IDENTIFY), + ('lba0', 'B', 0), + ('lba1', 'B', 0), + ('lba2', 'B', 0), + ('lba3', 'B', 0), + ('lba4', 'B', 0), + ('lba5', 'B', 0), + ('res', 'H', 0), + ) + + # XXX: in unpack, switch on ATA command like icmp does on type + + +if __name__ == '__main__': + import unittest + + class AOEATATestCase(unittest.TestCase): + def test_AOEATA(self): + s = '\x03\x0a\x6b\x19\x00\x00\x00\x00\x45\x00\x00\x28\x94\x1f\x00\x00\xe3\x06\x99\xb4\x23\x2b\x24\x00\xde\x8e\x84\x42\xab\xd1\x00\x50\x00\x35\xe1\x29\x20\xd9\x00\x00\x00\x22\x9b\xf0\xe2\x04\x65\x6b' + aoeata = AOEATA(s) + self.failUnless(str(aoeata) == s) + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/aoecfg.py b/scripts/external_libs/dpkt-1.8.6/dpkt/aoecfg.py new file mode 100644 index 00000000..00831504 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/aoecfg.py @@ -0,0 +1,24 @@ +'''ATA over Ethernet ATA command''' + +import dpkt + +class AOECFG(dpkt.Packet): + __hdr__ = ( + ('bufcnt', 'H', 0), + ('fwver', 'H', 0), + ('scnt', 'B', 0), + ('aoeccmd', 'B', 0), + ('cslen', 'H', 0), + ) + + +if __name__ == '__main__': + import unittest + + class AOECFGTestCase(unittest.TestCase): + def test_AOECFG(self): + s = '\x01\x02\x03\x04\x05\x06\x11\x12\x13\x14\x15\x16\x88\xa2\x10\x00\x00\x01\x02\x01\x80\x00\x00\x00\x12\x34\x00\x00\x00\x00\x04\x00' + '\0xed' * 1024 + aoecfg = AOECFG(s[14+10:]) + self.failUnless(aoecfg.bufcnt == 0x1234) + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/arp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/arp.py new file mode 100644 index 00000000..6e742ee1 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/arp.py @@ -0,0 +1,31 @@ +# $Id: arp.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Address Resolution Protocol.""" + +import dpkt + +# Hardware address format +ARP_HRD_ETH = 0x0001 # ethernet hardware +ARP_HRD_IEEE802 = 0x0006 # IEEE 802 hardware + +# Protocol address format +ARP_PRO_IP = 0x0800 # IP protocol + +# ARP operation +ARP_OP_REQUEST = 1 # request to resolve ha given pa +ARP_OP_REPLY = 2 # response giving hardware address +ARP_OP_REVREQUEST = 3 # request to resolve pa given ha +ARP_OP_REVREPLY = 4 # response giving protocol address + +class ARP(dpkt.Packet): + __hdr__ = ( + ('hrd', 'H', ARP_HRD_ETH), + ('pro', 'H', ARP_PRO_IP), + ('hln', 'B', 6), # hardware address length + ('pln', 'B', 4), # protocol address length + ('op', 'H', ARP_OP_REQUEST), + ('sha', '6s', ''), + ('spa', '4s', ''), + ('tha', '6s', ''), + ('tpa', '4s', '') + ) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/asn1.py b/scripts/external_libs/dpkt-1.8.6/dpkt/asn1.py new file mode 100644 index 00000000..9a088107 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/asn1.py @@ -0,0 +1,119 @@ +# $Id: asn1.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Abstract Syntax Notation #1.""" + +import struct, time +import dpkt + +# Type class +CLASSMASK = 0xc0 +UNIVERSAL = 0x00 +APPLICATION = 0x40 +CONTEXT = 0x80 +PRIVATE = 0xc0 + +# Constructed (vs. primitive) +CONSTRUCTED = 0x20 + +# Universal-class tags +TAGMASK = 0x1f +INTEGER = 2 +BIT_STRING = 3 # arbitrary bit string +OCTET_STRING = 4 # arbitrary octet string +NULL = 5 +OID = 6 # object identifier +SEQUENCE = 16 # ordered collection of types +SET = 17 # unordered collection of types +PRINT_STRING = 19 # printable string +T61_STRING = 20 # T.61 (8-bit) character string +IA5_STRING = 22 # ASCII +UTC_TIME = 23 + +def utctime(buf): + """Convert ASN.1 UTCTime string to UTC float.""" + yy = int(buf[:2]) + mm = int(buf[2:4]) + dd = int(buf[4:6]) + hh = int(buf[6:8]) + mm = int(buf[8:10]) + try: + ss = int(buf[10:12]) + buf = buf[12:] + except TypeError: + ss = 0 + buf = buf[10:] + if buf[0] == '+': + hh -= int(buf[1:3]) + mm -= int(buf[3:5]) + elif buf[0] == '-': + hh += int(buf[1:3]) + mm += int(buf[3:5]) + return time.mktime((2000 + yy, mm, dd, hh, mm, ss, 0, 0, 0)) + +def decode(buf): + """Sleazy ASN.1 decoder. + Return list of (id, value) tuples from ASN.1 BER/DER encoded buffer. + """ + msg = [] + while buf: + t = ord(buf[0]) + constructed = t & CONSTRUCTED + tag = t & TAGMASK + l = ord(buf[1]) + c = 0 + if constructed and l == 128: + # XXX - constructed, indefinite length + msg.append(t, decode(buf[2:])) + elif l >= 128: + c = l & 127 + if c == 1: + l = ord(buf[2]) + elif c == 2: + l = struct.unpack('>H', buf[2:4])[0] + elif c == 3: + l = struct.unpack('>I', buf[1:5])[0] & 0xfff + c = 2 + elif c == 4: + l = struct.unpack('>I', buf[2:6])[0] + else: + # XXX - can be up to 127 bytes, but... + raise dpkt.UnpackError('excessive long-form ASN.1 length %d' % l) + + # Skip type, length + buf = buf[2+c:] + + # Parse content + if constructed: + msg.append((t, decode(buf))) + elif tag == INTEGER: + if l == 0: + n = 0 + elif l == 1: + n = ord(buf[0]) + elif l == 2: + n = struct.unpack('>H', buf[:2])[0] + elif l == 3: + n = struct.unpack('>I', buf[:4])[0] >> 8 + elif l == 4: + n = struct.unpack('>I', buf[:4])[0] + else: + raise dpkt.UnpackError('excessive integer length > %d bytes' % l) + msg.append((t, n)) + elif tag == UTC_TIME: + msg.append((t, utctime(buf[:l]))) + else: + msg.append((t, buf[:l])) + + # Skip content + buf = buf[l:] + return msg + +if __name__ == '__main__': + import unittest + + class ASN1TestCase(unittest.TestCase): + def test_asn1(self): + s = '0\x82\x02Q\x02\x01\x0bc\x82\x02J\x04xcn=Douglas J Song 1, ou=Information Technology Division, ou=Faculty and Staff, ou=People, o=University of Michigan, c=US\n\x01\x00\n\x01\x03\x02\x01\x00\x02\x01\x00\x01\x01\x00\x87\x0bobjectclass0\x82\x01\xb0\x04\rmemberOfGroup\x04\x03acl\x04\x02cn\x04\x05title\x04\rpostalAddress\x04\x0ftelephoneNumber\x04\x04mail\x04\x06member\x04\thomePhone\x04\x11homePostalAddress\x04\x0bobjectClass\x04\x0bdescription\x04\x18facsimileTelephoneNumber\x04\x05pager\x04\x03uid\x04\x0cuserPassword\x04\x08joinable\x04\x10associatedDomain\x04\x05owner\x04\x0erfc822ErrorsTo\x04\x08ErrorsTo\x04\x10rfc822RequestsTo\x04\nRequestsTo\x04\tmoderator\x04\nlabeledURL\x04\nonVacation\x04\x0fvacationMessage\x04\x05drink\x04\x0elastModifiedBy\x04\x10lastModifiedTime\x04\rmodifiersname\x04\x0fmodifytimestamp\x04\x0ccreatorsname\x04\x0fcreatetimestamp' + self.failUnless(decode(s) == [(48, [(2, 11), (99, [(4, 'cn=Douglas J Song 1, ou=Information Technology Division, ou=Faculty and Staff, ou=People, o=University of Michigan, c=US'), (10, '\x00'), (10, '\x03'), (2, 0), (2, 0), (1, '\x00'), (135, 'objectclass'), (48, [(4, 'memberOfGroup'), (4, 'acl'), (4, 'cn'), (4, 'title'), (4, 'postalAddress'), (4, 'telephoneNumber'), (4, 'mail'), (4, 'member'), (4, 'homePhone'), (4, 'homePostalAddress'), (4, 'objectClass'), (4, 'description'), (4, 'facsimileTelephoneNumber'), (4, 'pager'), (4, 'uid'), (4, 'userPassword'), (4, 'joinable'), (4, 'associatedDomain'), (4, 'owner'), (4, 'rfc822ErrorsTo'), (4, 'ErrorsTo'), (4, 'rfc822RequestsTo'), (4, 'RequestsTo'), (4, 'moderator'), (4, 'labeledURL'), (4, 'onVacation'), (4, 'vacationMessage'), (4, 'drink'), (4, 'lastModifiedBy'), (4, 'lastModifiedTime'), (4, 'modifiersname'), (4, 'modifytimestamp'), (4, 'creatorsname'), (4, 'createtimestamp')])])])]) + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/bgp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/bgp.py new file mode 100644 index 00000000..b9fb26a0 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/bgp.py @@ -0,0 +1,760 @@ +# $Id: bgp.py 76 2011-01-06 15:51:30Z dugsong $ + +"""Border Gateway Protocol.""" + +import dpkt +import struct, socket + +# Border Gateway Protocol 4 - RFC 4271 +# Communities Attribute - RFC 1997 +# Capabilities - RFC 3392 +# Route Refresh - RFC 2918 +# Route Reflection - RFC 4456 +# Confederations - RFC 3065 +# Cease Subcodes - RFC 4486 +# NOPEER Community - RFC 3765 +# Multiprotocol Extensions - 2858 + +# Message Types +OPEN = 1 +UPDATE = 2 +NOTIFICATION = 3 +KEEPALIVE = 4 +ROUTE_REFRESH = 5 + +# Attribute Types +ORIGIN = 1 +AS_PATH = 2 +NEXT_HOP = 3 +MULTI_EXIT_DISC = 4 +LOCAL_PREF = 5 +ATOMIC_AGGREGATE = 6 +AGGREGATOR = 7 +COMMUNITIES = 8 +ORIGINATOR_ID = 9 +CLUSTER_LIST = 10 +MP_REACH_NLRI = 14 +MP_UNREACH_NLRI = 15 + +# Origin Types +ORIGIN_IGP = 0 +ORIGIN_EGP = 1 +INCOMPLETE = 2 + +# AS Path Types +AS_SET = 1 +AS_SEQUENCE = 2 +AS_CONFED_SEQUENCE = 3 +AS_CONFED_SET = 4 + +# Reserved Communities Types +NO_EXPORT = 0xffffff01L +NO_ADVERTISE = 0xffffff02L +NO_EXPORT_SUBCONFED = 0xffffff03L +NO_PEER = 0xffffff04L + +# Common AFI types +AFI_IPV4 = 1 +AFI_IPV6 = 2 + +# Multiprotocol SAFI types +SAFI_UNICAST = 1 +SAFI_MULTICAST = 2 +SAFI_UNICAST_MULTICAST = 3 + +# OPEN Message Optional Parameters +AUTHENTICATION = 1 +CAPABILITY = 2 + +# Capability Types +CAP_MULTIPROTOCOL = 1 +CAP_ROUTE_REFRESH = 2 + +# NOTIFICATION Error Codes +MESSAGE_HEADER_ERROR = 1 +OPEN_MESSAGE_ERROR = 2 +UPDATE_MESSAGE_ERROR = 3 +HOLD_TIMER_EXPIRED = 4 +FSM_ERROR = 5 +CEASE = 6 + +# Message Header Error Subcodes +CONNECTION_NOT_SYNCHRONIZED = 1 +BAD_MESSAGE_LENGTH = 2 +BAD_MESSAGE_TYPE = 3 + +# OPEN Message Error Subcodes +UNSUPPORTED_VERSION_NUMBER = 1 +BAD_PEER_AS = 2 +BAD_BGP_IDENTIFIER = 3 +UNSUPPORTED_OPTIONAL_PARAMETER = 4 +AUTHENTICATION_FAILURE = 5 +UNACCEPTABLE_HOLD_TIME = 6 +UNSUPPORTED_CAPABILITY = 7 + +# UPDATE Message Error Subcodes +MALFORMED_ATTRIBUTE_LIST = 1 +UNRECOGNIZED_ATTRIBUTE = 2 +MISSING_ATTRIBUTE = 3 +ATTRIBUTE_FLAGS_ERROR = 4 +ATTRIBUTE_LENGTH_ERROR = 5 +INVALID_ORIGIN_ATTRIBUTE = 6 +AS_ROUTING_LOOP = 7 +INVALID_NEXT_HOP_ATTRIBUTE = 8 +OPTIONAL_ATTRIBUTE_ERROR = 9 +INVALID_NETWORK_FIELD = 10 +MALFORMED_AS_PATH = 11 + +# Cease Error Subcodes +MAX_NUMBER_OF_PREFIXES_REACHED = 1 +ADMINISTRATIVE_SHUTDOWN = 2 +PEER_DECONFIGURED = 3 +ADMINISTRATIVE_RESET = 4 +CONNECTION_REJECTED = 5 +OTHER_CONFIGURATION_CHANGE = 6 +CONNECTION_COLLISION_RESOLUTION = 7 +OUT_OF_RESOURCES = 8 + + +class BGP(dpkt.Packet): + __hdr__ = ( + ('marker', '16s', '\xff' * 16), + ('len', 'H', 0), + ('type', 'B', OPEN) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len - self.__hdr_len__] + if self.type == OPEN: + self.data = self.open = self.Open(self.data) + elif self.type == UPDATE: + self.data = self.update = self.Update(self.data) + elif self.type == NOTIFICATION: + self.data = self.notifiation = self.Notification(self.data) + elif self.type == KEEPALIVE: + self.data = self.keepalive = self.Keepalive(self.data) + elif self.type == ROUTE_REFRESH: + self.data = self.route_refresh = self.RouteRefresh(self.data) + + class Open(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 4), + ('asn', 'H', 0), + ('holdtime', 'H', 0), + ('identifier', 'I', 0), + ('param_len', 'B', 0) + ) + __hdr_defaults__ = { + 'parameters': [] + } + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + plen = self.param_len + while plen > 0: + param = self.Parameter(self.data) + self.data = self.data[len(param):] + plen -= len(param) + l.append(param) + self.data = self.parameters = l + + def __len__(self): + return self.__hdr_len__ + \ + sum(map(len, self.parameters)) + + def __str__(self): + params = ''.join(map(str, self.parameters)) + self.param_len = len(params) + return self.pack_hdr() + params + + class Parameter(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len] + + if self.type == AUTHENTICATION: + self.data = self.authentication = self.Authentication(self.data) + elif self.type == CAPABILITY: + self.data = self.capability = self.Capability(self.data) + + class Authentication(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ) + + class Capability(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len] + + + class Update(dpkt.Packet): + __hdr_defaults__ = { + 'withdrawn': [], + 'attributes': [], + 'announced': [] + } + + def unpack(self, buf): + self.data = buf + + # Withdrawn Routes + wlen = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + l = [] + while wlen > 0: + route = RouteIPV4(self.data) + self.data = self.data[len(route):] + wlen -= len(route) + l.append(route) + self.withdrawn = l + + # Path Attributes + plen = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + l = [] + while plen > 0: + attr = self.Attribute(self.data) + self.data = self.data[len(attr):] + plen -= len(attr) + l.append(attr) + self.attributes = l + + # Announced Routes + l = [] + while self.data: + route = RouteIPV4(self.data) + self.data = self.data[len(route):] + l.append(route) + self.announced = l + + def __len__(self): + return 2 + sum(map(len, self.withdrawn)) + \ + 2 + sum(map(len, self.attributes)) + \ + sum(map(len, self.announced)) + + def __str__(self): + return struct.pack('>H', sum(map(len, self.withdrawn))) + \ + ''.join(map(str, self.withdrawn)) + \ + struct.pack('>H', sum(map(len, self.attributes))) + \ + ''.join(map(str, self.attributes)) + \ + ''.join(map(str, self.announced)) + + class Attribute(dpkt.Packet): + __hdr__ = ( + ('flags', 'B', 0), + ('type', 'B', 0) + ) + + def _get_o(self): + return (self.flags >> 7) & 0x1 + def _set_o(self, o): + self.flags = (self.flags & ~0x80) | ((o & 0x1) << 7) + optional = property(_get_o, _set_o) + + def _get_t(self): + return (self.flags >> 6) & 0x1 + def _set_t(self, t): + self.flags = (self.flags & ~0x40) | ((t & 0x1) << 6) + transitive = property(_get_t, _set_t) + + def _get_p(self): + return (self.flags >> 5) & 0x1 + def _set_p(self, p): + self.flags = (self.flags & ~0x20) | ((p & 0x1) << 5) + partial = property(_get_p, _set_p) + + def _get_e(self): + return (self.flags >> 4) & 0x1 + def _set_e(self, e): + self.flags = (self.flags & ~0x10) | ((e & 0x1) << 4) + extended_length = property(_get_e, _set_e) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + if self.extended_length: + self.len = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + else: + self.len = struct.unpack('B', self.data[:1])[0] + self.data = self.data[1:] + + self.data = self.data[:self.len] + + if self.type == ORIGIN: + self.data = self.origin = self.Origin(self.data) + elif self.type == AS_PATH: + self.data = self.as_path = self.ASPath(self.data) + elif self.type == NEXT_HOP: + self.data = self.next_hop = self.NextHop(self.data) + elif self.type == MULTI_EXIT_DISC: + self.data = self.multi_exit_disc = self.MultiExitDisc(self.data) + elif self.type == LOCAL_PREF: + self.data = self.local_pref = self.LocalPref(self.data) + elif self.type == ATOMIC_AGGREGATE: + self.data = self.atomic_aggregate = self.AtomicAggregate(self.data) + elif self.type == AGGREGATOR: + self.data = self.aggregator = self.Aggregator(self.data) + elif self.type == COMMUNITIES: + self.data = self.communities = self.Communities(self.data) + elif self.type == ORIGINATOR_ID: + self.data = self.originator_id = self.OriginatorID(self.data) + elif self.type == CLUSTER_LIST: + self.data = self.cluster_list = self.ClusterList(self.data) + elif self.type == MP_REACH_NLRI: + self.data = self.mp_reach_nlri = self.MPReachNLRI(self.data) + elif self.type == MP_UNREACH_NLRI: + self.data = self.mp_unreach_nlri = self.MPUnreachNLRI(self.data) + + def __len__(self): + if self.extended_length: + attr_len = 2 + else: + attr_len = 1 + return self.__hdr_len__ + \ + attr_len + \ + len(self.data) + + def __str__(self): + if self.extended_length: + attr_len_str = struct.pack('>H', self.len) + else: + attr_len_str = struct.pack('B', self.len) + return self.pack_hdr() + \ + attr_len_str + \ + str(self.data) + + class Origin(dpkt.Packet): + __hdr__ = ( + ('type', 'B', ORIGIN_IGP), + ) + + class ASPath(dpkt.Packet): + __hdr_defaults__ = { + 'segments': [] + } + + def unpack(self, buf): + self.data = buf + l = [] + while self.data: + seg = self.ASPathSegment(self.data) + self.data = self.data[len(seg):] + l.append(seg) + self.data = self.segments = l + + def __len__(self): + return sum(map(len, self.data)) + + def __str__(self): + return ''.join(map(str, self.data)) + + class ASPathSegment(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('len', 'B', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + for i in range(self.len): + AS = struct.unpack('>H', self.data[:2])[0] + self.data = self.data[2:] + l.append(AS) + self.data = self.path = l + + def __len__(self): + return self.__hdr_len__ + \ + 2 * len(self.path) + + def __str__(self): + as_str = '' + for AS in self.path: + as_str += struct.pack('>H', AS) + return self.pack_hdr() + \ + as_str + + class NextHop(dpkt.Packet): + __hdr__ = ( + ('ip', 'I', 0), + ) + + class MultiExitDisc(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class LocalPref(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class AtomicAggregate(dpkt.Packet): + def unpack(self, buf): + pass + + def __len__(self): + return 0 + + def __str__(self): + return '' + + class Aggregator(dpkt.Packet): + __hdr__ = ( + ('asn', 'H', 0), + ('ip', 'I', 0) + ) + + class Communities(dpkt.Packet): + __hdr_defaults__ = { + 'list': [] + } + + def unpack(self, buf): + self.data = buf + l = [] + while self.data: + val = struct.unpack('>I', self.data[:4])[0] + if (val >= 0x00000000L and val <= 0x0000ffffL) or \ + (val >= 0xffff0000L and val <= 0xffffffffL): + comm = self.ReservedCommunity(self.data[:4]) + else: + comm = self.Community(self.data[:4]) + self.data = self.data[len(comm):] + l.append(comm) + self.data = self.list = l + + def __len__(self): + return sum(map(len, self.data)) + + def __str__(self): + return ''.join(map(str, self.data)) + + class Community(dpkt.Packet): + __hdr__ = ( + ('asn', 'H', 0), + ('value', 'H', 0) + ) + + class ReservedCommunity(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class OriginatorID(dpkt.Packet): + __hdr__ = ( + ('value', 'I', 0), + ) + + class ClusterList(dpkt.Packet): + __hdr_defaults__ = { + 'list': [] + } + + def unpack(self, buf): + self.data = buf + l = [] + while self.data: + id = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:] + l.append(id) + self.data = self.list = l + + def __len__(self): + return 4 * len(self.list) + + def __str__(self): + cluster_str = '' + for val in self.list: + cluster_str += struct.pack('>I', val) + return cluster_str + + class MPReachNLRI(dpkt.Packet): + __hdr__ = ( + ('afi', 'H', AFI_IPV4), + ('safi', 'B', SAFI_UNICAST), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + # Next Hop + nlen = struct.unpack('B', self.data[:1])[0] + self.data = self.data[1:] + self.next_hop = self.data[:nlen] + self.data = self.data[nlen:] + + # SNPAs + l = [] + num_snpas = struct.unpack('B', self.data[:1])[0] + self.data = self.data[1:] + for i in range(num_snpas): + snpa = self.SNPA(self.data) + self.data = self.data[len(snpa):] + l.append(snpa) + self.snpas = l + + if self.afi == AFI_IPV4: + Route = RouteIPV4 + elif self.afi == AFI_IPV6: + Route = RouteIPV6 + else: + Route = RouteGeneric + + # Announced Routes + l = [] + while self.data: + route = Route(self.data) + self.data = self.data[len(route):] + l.append(route) + self.data = self.announced = l + + def __len__(self): + return self.__hdr_len__ + \ + 1 + len(self.next_hop) + \ + 1 + sum(map(len, self.snpas)) + \ + sum(map(len, self.announced)) + + def __str__(self): + return self.pack_hdr() + \ + struct.pack('B', len(self.next_hop)) + \ + str(self.next_hop) + \ + struct.pack('B', len(self.snpas)) + \ + ''.join(map(str, self.snpas)) + \ + ''.join(map(str, self.announced)) + + class SNPA: + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:(self.len + 1) / 2] + + class MPUnreachNLRI(dpkt.Packet): + __hdr__ = ( + ('afi', 'H', AFI_IPV4), + ('safi', 'B', SAFI_UNICAST), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + if self.afi == AFI_IPV4: + Route = RouteIPV4 + elif self.afi == AFI_IPV6: + Route = RouteIPV6 + else: + Route = RouteGeneric + + # Withdrawn Routes + l = [] + while self.data: + route = Route(self.data) + self.data = self.data[len(route):] + l.append(route) + self.data = self.withdrawn = l + + def __len__(self): + return self.__hdr_len__ + \ + sum(map(len, self.data)) + + def __str__(self): + return self.pack_hdr() + \ + ''.join(map(str, self.data)) + + + class Notification(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ('subcode', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.error = self.data + + + class Keepalive(dpkt.Packet): + def unpack(self, buf): + pass + + def __len__(self): + return 0 + + def __str__(self): + return '' + + + class RouteRefresh(dpkt.Packet): + __hdr__ = ( + ('afi', 'H', AFI_IPV4), + ('rsvd', 'B', 0), + ('safi', 'B', SAFI_UNICAST) + ) + + +class RouteGeneric(dpkt.Packet): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.prefix = self.data[:(self.len + 7) / 8] + +class RouteIPV4(dpkt.Packet): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + tmp = self.data[:(self.len + 7) / 8] + tmp += (4 - len(tmp)) * '\x00' + self.data = self.prefix = tmp + + def __repr__(self): + cidr = '%s/%d' % (socket.inet_ntoa(self.prefix), self.len) + return '%s(%s)' % (self.__class__.__name__, cidr) + + def __len__(self): + return self.__hdr_len__ + \ + (self.len + 7) / 8 + + def __str__(self): + return self.pack_hdr() + \ + self.prefix[:(self.len + 7) / 8] + +class RouteIPV6(dpkt.Packet): + __hdr__ = ( + ('len', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + tmp = self.data[:(self.len + 7) / 8] + tmp += (16 - len(tmp)) * '\x00' + self.data = self.prefix = tmp + + def __len__(self): + return self.__hdr_len__ + \ + (self.len + 7) / 8 + + def __str__(self): + return self.pack_hdr() + \ + self.prefix[:(self.len + 7) / 8] + + +if __name__ == '__main__': + import unittest + + class BGPTestCase(unittest.TestCase): + def testPack(self): + b1 = BGP(self.bgp1) + self.failUnless(self.bgp1 == str(b1)) + b2 = BGP(self.bgp2) + self.failUnless(self.bgp2 == str(b2)) + b3 = BGP(self.bgp3) + self.failUnless(self.bgp3 == str(b3)) + b4 = BGP(self.bgp4) + self.failUnless(self.bgp4 == str(b4)) + + def testUnpack(self): + b1 = BGP(self.bgp1) + self.failUnless(b1.len == 19) + self.failUnless(b1.type == KEEPALIVE) + self.failUnless(b1.keepalive is not None) + + b2 = BGP(self.bgp2) + self.failUnless(b2.type == UPDATE) + self.failUnless(len(b2.update.withdrawn) == 0) + self.failUnless(len(b2.update.announced) == 1) + self.failUnless(len(b2.update.attributes) == 9) + a = b2.update.attributes[1] + self.failUnless(a.type == AS_PATH) + self.failUnless(a.len == 10) + self.failUnless(len(a.as_path.segments) == 2) + s = a.as_path.segments[0] + self.failUnless(s.type == AS_SET) + self.failUnless(s.len == 2) + self.failUnless(len(s.path) == 2) + self.failUnless(s.path[0] == 500) + + a = b2.update.attributes[6] + self.failUnless(a.type == COMMUNITIES) + self.failUnless(a.len == 12) + self.failUnless(len(a.communities.list) == 3) + c = a.communities.list[0] + self.failUnless(c.asn == 65215) + self.failUnless(c.value == 1) + r = b2.update.announced[0] + self.failUnless(r.len == 22) + self.failUnless(r.prefix == '\xc0\xa8\x04\x00') + + b3 = BGP(self.bgp3) + self.failUnless(b3.type == UPDATE) + self.failUnless(len(b3.update.withdrawn) == 0) + self.failUnless(len(b3.update.announced) == 0) + self.failUnless(len(b3.update.attributes) == 6) + a = b3.update.attributes[0] + self.failUnless(a.optional == False) + self.failUnless(a.transitive == True) + self.failUnless(a.partial == False) + self.failUnless(a.extended_length == False) + self.failUnless(a.type == ORIGIN) + self.failUnless(a.len == 1) + o = a.origin + self.failUnless(o.type == ORIGIN_IGP) + a = b3.update.attributes[5] + self.failUnless(a.optional == True) + self.failUnless(a.transitive == False) + self.failUnless(a.partial == False) + self.failUnless(a.extended_length == True) + self.failUnless(a.type == MP_REACH_NLRI) + self.failUnless(a.len == 30) + m = a.mp_reach_nlri + self.failUnless(m.afi == AFI_IPV4) + self.failUnless(len(m.snpas) == 0) + self.failUnless(len(m.announced) == 1) + p = m.announced[0] + self.failUnless(p.len == 96) + + b4 = BGP(self.bgp4) + self.failUnless(b4.len == 45) + self.failUnless(b4.type == OPEN) + self.failUnless(b4.open.asn == 237) + self.failUnless(b4.open.param_len == 16) + self.failUnless(len(b4.open.parameters) == 3) + p = b4.open.parameters[0] + self.failUnless(p.type == CAPABILITY) + self.failUnless(p.len == 6) + c = p.capability + self.failUnless(c.code == CAP_MULTIPROTOCOL) + self.failUnless(c.len == 4) + self.failUnless(c.data == '\x00\x01\x00\x01') + c = b4.open.parameters[2].capability + self.failUnless(c.code == CAP_ROUTE_REFRESH) + self.failUnless(c.len == 0) + + bgp1 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x13\x04' + bgp2 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x63\x02\x00\x00\x00\x48\x40\x01\x01\x00\x40\x02\x0a\x01\x02\x01\xf4\x01\xf4\x02\x01\xfe\xbb\x40\x03\x04\xc0\xa8\x00\x0f\x40\x05\x04\x00\x00\x00\x64\x40\x06\x00\xc0\x07\x06\xfe\xba\xc0\xa8\x00\x0a\xc0\x08\x0c\xfe\xbf\x00\x01\x03\x16\x00\x04\x01\x54\x00\xfa\x80\x09\x04\xc0\xa8\x00\x0f\x80\x0a\x04\xc0\xa8\x00\xfa\x16\xc0\xa8\x04' + bgp3 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x79\x02\x00\x00\x00\x62\x40\x01\x01\x00\x40\x02\x00\x40\x05\x04\x00\x00\x00\x64\xc0\x10\x08\x00\x02\x01\x2c\x00\x00\x01\x2c\xc0\x80\x24\x00\x00\xfd\xe9\x40\x01\x01\x00\x40\x02\x04\x02\x01\x15\xb3\x40\x05\x04\x00\x00\x00\x2c\x80\x09\x04\x16\x05\x05\x05\x80\x0a\x04\x16\x05\x05\x05\x90\x0e\x00\x1e\x00\x01\x80\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x04\x04\x04\x00\x60\x18\x77\x01\x00\x00\x01\xf4\x00\x00\x01\xf4\x85' + bgp4 = '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x2d\x01\x04\x00\xed\x00\x5a\xc6\x6e\x83\x7d\x10\x02\x06\x01\x04\x00\x01\x00\x01\x02\x02\x80\x00\x02\x02\x02\x00' + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/cdp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/cdp.py new file mode 100644 index 00000000..71c2c6ba --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/cdp.py @@ -0,0 +1,95 @@ +# $Id: cdp.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Cisco Discovery Protocol.""" + +import struct +import dpkt + +CDP_DEVID = 1 # string +CDP_ADDRESS = 2 +CDP_PORTID = 3 # string +CDP_CAPABILITIES = 4 # 32-bit bitmask +CDP_VERSION = 5 # string +CDP_PLATFORM = 6 # string +CDP_IPPREFIX = 7 + +CDP_VTP_MGMT_DOMAIN = 9 # string +CDP_NATIVE_VLAN = 10 # 16-bit integer +CDP_DUPLEX = 11 # 8-bit boolean +CDP_TRUST_BITMAP = 18 # 8-bit bitmask0x13 +CDP_UNTRUST_COS = 19 # 8-bit port +CDP_SYSTEM_NAME = 20 # string +CDP_SYSTEM_OID = 21 # 10-byte binary string +CDP_MGMT_ADDRESS = 22 # 32-bit number of addrs, Addresses +CDP_LOCATION = 23 # string + +class CDP(dpkt.Packet): + __hdr__ = ( + ('version', 'B', 2), + ('ttl', 'B', 180), + ('sum', 'H', 0) + ) + class Address(dpkt.Packet): + # XXX - only handle NLPID/IP for now + __hdr__ = ( + ('ptype', 'B', 1), # protocol type (NLPID) + ('plen', 'B', 1), # protocol length + ('p', 'B', 0xcc), # IP + ('alen', 'H', 4) # address length + ) + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.alen] + + class TLV(dpkt.Packet): + __hdr__ = ( + ('type', 'H', 0), + ('len', 'H', 4) + ) + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len - 4] + if self.type == CDP_ADDRESS: + n = struct.unpack('>I', self.data[:4])[0] + buf = self.data[4:] + l = [] + for i in range(n): + a = CDP.Address(buf) + l.append(a) + buf = buf[len(a):] + self.data = l + + def __len__(self): + if self.type == CDP_ADDRESS: + n = 4 + sum(map(len, self.data)) + else: + n = len(self.data) + return self.__hdr_len__ + n + + def __str__(self): + self.len = len(self) + if self.type == CDP_ADDRESS: + s = struct.pack('>I', len(self.data)) + \ + ''.join(map(str, self.data)) + else: + s = self.data + return self.pack_hdr() + s + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = self.data + l = [] + while buf: + tlv = self.TLV(buf) + l.append(tlv) + buf = buf[len(tlv):] + self.data = l + + def __len__(self): + return self.__hdr_len__ + sum(map(len, self.data)) + + def __str__(self): + data = ''.join(map(str, self.data)) + if not self.sum: + self.sum = dpkt.in_cksum(self.pack_hdr() + data) + return self.pack_hdr() + data diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/crc32c.py b/scripts/external_libs/dpkt-1.8.6/dpkt/crc32c.py new file mode 100644 index 00000000..45593882 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/crc32c.py @@ -0,0 +1,80 @@ +# $Id: crc32c.py 23 2006-11-08 15:45:33Z dugsong $ + +import array + +# CRC-32C Checksum +# http://tools.ietf.org/html/rfc3309 + +crc32c_table = ( + 0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L, 0xC79A971FL, + 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL, 0x8AD958CFL, 0x78B2DBCCL, + 0x6BE22838L, 0x9989AB3BL, 0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, + 0x5E133C24L, 0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL, + 0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L, 0x9A879FA0L, + 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L, 0x5D1D08BFL, 0xAF768BBCL, + 0xBC267848L, 0x4E4DFB4BL, 0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, + 0x33ED7D2AL, 0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L, + 0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L, 0x6DFE410EL, + 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL, 0x30E349B1L, 0xC288CAB2L, + 0xD1D83946L, 0x23B3BA45L, 0xF779DEAEL, 0x05125DADL, 0x1642AE59L, + 0xE4292D5AL, 0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL, + 0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L, 0x417B1DBCL, + 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L, 0x86E18AA3L, 0x748A09A0L, + 0x67DAFA54L, 0x95B17957L, 0xCBA24573L, 0x39C9C670L, 0x2A993584L, + 0xD8F2B687L, 0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L, + 0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L, 0x96BF4DCCL, + 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L, 0xDBFC821CL, 0x2997011FL, + 0x3AC7F2EBL, 0xC8AC71E8L, 0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, + 0x0F36E6F7L, 0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L, + 0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L, 0xEB1FCBADL, + 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L, 0x2C855CB2L, 0xDEEEDFB1L, + 0xCDBE2C45L, 0x3FD5AF46L, 0x7198540DL, 0x83F3D70EL, 0x90A324FAL, + 0x62C8A7F9L, 0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L, + 0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L, 0x3CDB9BDDL, + 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L, 0x82F63B78L, 0x709DB87BL, + 0x63CD4B8FL, 0x91A6C88CL, 0x456CAC67L, 0xB7072F64L, 0xA457DC90L, + 0x563C5F93L, 0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L, + 0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL, 0x92A8FC17L, + 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L, 0x55326B08L, 0xA759E80BL, + 0xB4091BFFL, 0x466298FCL, 0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, + 0x0B21572CL, 0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L, + 0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L, 0x65D122B9L, + 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL, 0x2892ED69L, 0xDAF96E6AL, + 0xC9A99D9EL, 0x3BC21E9DL, 0xEF087A76L, 0x1D63F975L, 0x0E330A81L, + 0xFC588982L, 0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL, + 0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L, 0x38CC2A06L, + 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L, 0xFF56BD19L, 0x0D3D3E1AL, + 0x1E6DCDEEL, 0xEC064EEDL, 0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, + 0xD0DDD530L, 0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL, + 0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL, 0x8ECEE914L, + 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L, 0xD3D3E1ABL, 0x21B862A8L, + 0x32E8915CL, 0xC083125FL, 0x144976B4L, 0xE622F5B7L, 0xF5720643L, + 0x07198540L, 0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L, + 0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL, 0xE330A81AL, + 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL, 0x24AA3F05L, 0xD6C1BC06L, + 0xC5914FF2L, 0x37FACCF1L, 0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, + 0x7AB90321L, 0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL, + 0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L, 0x34F4F86AL, + 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL, 0x79B737BAL, 0x8BDCB4B9L, + 0x988C474DL, 0x6AE7C44EL, 0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, + 0xAD7D5351L + ) + +def add(crc, buf): + buf = array.array('B', buf) + for b in buf: + crc = (crc >> 8) ^ crc32c_table[(crc ^ b) & 0xff] + return crc + +def done(crc): + tmp = ~crc & 0xffffffffL + b0 = tmp & 0xff + b1 = (tmp >> 8) & 0xff + b2 = (tmp >> 16) & 0xff + b3 = (tmp >> 24) & 0xff + crc = (b0 << 24) | (b1 << 16) | (b2 << 8) | b3 + return crc + +def cksum(buf): + """Return computed CRC-32c checksum.""" + return done(add(0xffffffffL, buf)) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/dhcp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/dhcp.py new file mode 100644 index 00000000..9916884a --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/dhcp.py @@ -0,0 +1,168 @@ +# $Id: dhcp.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Dynamic Host Configuration Protocol.""" + +import arp, dpkt + +DHCP_OP_REQUEST = 1 +DHCP_OP_REPLY = 2 + +DHCP_MAGIC = 0x63825363 + +# DHCP option codes +DHCP_OPT_NETMASK = 1 # I: subnet mask +DHCP_OPT_TIMEOFFSET = 2 +DHCP_OPT_ROUTER = 3 # s: list of router ips +DHCP_OPT_TIMESERVER = 4 +DHCP_OPT_NAMESERVER = 5 +DHCP_OPT_DNS_SVRS = 6 # s: list of DNS servers +DHCP_OPT_LOGSERV = 7 +DHCP_OPT_COOKIESERV = 8 +DHCP_OPT_LPRSERV = 9 +DHCP_OPT_IMPSERV = 10 +DHCP_OPT_RESSERV = 11 +DHCP_OPT_HOSTNAME = 12 # s: client hostname +DHCP_OPT_BOOTFILESIZE = 13 +DHCP_OPT_DUMPFILE = 14 +DHCP_OPT_DOMAIN = 15 # s: domain name +DHCP_OPT_SWAPSERV = 16 +DHCP_OPT_ROOTPATH = 17 +DHCP_OPT_EXTENPATH = 18 +DHCP_OPT_IPFORWARD = 19 +DHCP_OPT_SRCROUTE = 20 +DHCP_OPT_POLICYFILTER = 21 +DHCP_OPT_MAXASMSIZE = 22 +DHCP_OPT_IPTTL = 23 +DHCP_OPT_MTUTIMEOUT = 24 +DHCP_OPT_MTUTABLE = 25 +DHCP_OPT_MTUSIZE = 26 +DHCP_OPT_LOCALSUBNETS = 27 +DHCP_OPT_BROADCASTADDR = 28 +DHCP_OPT_DOMASKDISCOV = 29 +DHCP_OPT_MASKSUPPLY = 30 +DHCP_OPT_DOROUTEDISC = 31 +DHCP_OPT_ROUTERSOLICIT = 32 +DHCP_OPT_STATICROUTE = 33 +DHCP_OPT_TRAILERENCAP = 34 +DHCP_OPT_ARPTIMEOUT = 35 +DHCP_OPT_ETHERENCAP = 36 +DHCP_OPT_TCPTTL = 37 +DHCP_OPT_TCPKEEPALIVE = 38 +DHCP_OPT_TCPALIVEGARBAGE = 39 +DHCP_OPT_NISDOMAIN = 40 +DHCP_OPT_NISSERVERS = 41 +DHCP_OPT_NISTIMESERV = 42 +DHCP_OPT_VENDSPECIFIC = 43 +DHCP_OPT_NBNS = 44 +DHCP_OPT_NBDD = 45 +DHCP_OPT_NBTCPIP = 46 +DHCP_OPT_NBTCPSCOPE = 47 +DHCP_OPT_XFONT = 48 +DHCP_OPT_XDISPLAYMGR = 49 +DHCP_OPT_REQ_IP = 50 # I: IP address +DHCP_OPT_LEASE_SEC = 51 # I: lease seconds +DHCP_OPT_OPTIONOVERLOAD = 52 +DHCP_OPT_MSGTYPE = 53 # B: message type +DHCP_OPT_SERVER_ID = 54 # I: server IP address +DHCP_OPT_PARAM_REQ = 55 # s: list of option codes +DHCP_OPT_MESSAGE = 56 +DHCP_OPT_MAXMSGSIZE = 57 +DHCP_OPT_RENEWTIME = 58 +DHCP_OPT_REBINDTIME = 59 +DHCP_OPT_VENDOR_ID = 60 # s: vendor class id +DHCP_OPT_CLIENT_ID = 61 # Bs: idtype, id (idtype 0: FQDN, idtype 1: MAC) +DHCP_OPT_NISPLUSDOMAIN = 64 +DHCP_OPT_NISPLUSSERVERS = 65 +DHCP_OPT_MOBILEIPAGENT = 68 +DHCP_OPT_SMTPSERVER = 69 +DHCP_OPT_POP3SERVER = 70 +DHCP_OPT_NNTPSERVER = 71 +DHCP_OPT_WWWSERVER = 72 +DHCP_OPT_FINGERSERVER = 73 +DHCP_OPT_IRCSERVER = 74 +DHCP_OPT_STSERVER = 75 +DHCP_OPT_STDASERVER = 76 + +# DHCP message type values +DHCPDISCOVER = 1 +DHCPOFFER = 2 +DHCPREQUEST = 3 +DHCPDECLINE = 4 +DHCPACK = 5 +DHCPNAK = 6 +DHCPRELEASE = 7 +DHCPINFORM = 8 + +class DHCP(dpkt.Packet): + __hdr__ = ( + ('op', 'B', DHCP_OP_REQUEST), + ('hrd', 'B', arp.ARP_HRD_ETH), # just like ARP.hrd + ('hln', 'B', 6), # and ARP.hln + ('hops', 'B', 0), + ('xid', 'I', 0xdeadbeefL), + ('secs', 'H', 0), + ('flags', 'H', 0), + ('ciaddr', 'I', 0), + ('yiaddr', 'I', 0), + ('siaddr', 'I', 0), + ('giaddr', 'I', 0), + ('chaddr', '16s', 16 * '\x00'), + ('sname', '64s', 64 * '\x00'), + ('file', '128s', 128 * '\x00'), + ('magic', 'I', DHCP_MAGIC), + ) + opts = ( + (DHCP_OPT_MSGTYPE, chr(DHCPDISCOVER)), + (DHCP_OPT_PARAM_REQ, ''.join(map(chr, (DHCP_OPT_REQ_IP, + DHCP_OPT_ROUTER, + DHCP_OPT_NETMASK, + DHCP_OPT_DNS_SVRS)))) + ) # list of (type, data) tuples + + def __len__(self): + return self.__hdr_len__ + \ + sum([ 2 + len(o[1]) for o in self.opts ]) + 1 + len(self.data) + + def __str__(self): + return self.pack_hdr() + self.pack_opts() + str(self.data) + + def pack_opts(self): + """Return packed options string.""" + if not self.opts: + return '' + l = [] + for t, data in self.opts: + l.append('%s%s%s' % (chr(t), chr(len(data)), data)) + l.append('\xff') + return ''.join(l) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.chaddr = self.chaddr[:self.hln] + buf = self.data + l = [] + while buf: + t = ord(buf[0]) + if t == 0xff: + buf = buf[1:] + break + elif t == 0: + buf = buf[1:] + else: + n = ord(buf[1]) + l.append((t, buf[2:2+n])) + buf = buf[2+n:] + self.opts = l + self.data = buf + +if __name__ == '__main__': + import unittest + + class DHCPTestCast(unittest.TestCase): + def test_DHCP(self): + s = '\x01\x01\x06\x00\xadS\xc8c\xb8\x87\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02U\x82\xf3\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Sc5\x01\x01\xfb\x01\x01=\x07\x01\x00\x02U\x82\xf3\xa62\x04\n\x00\x01e\x0c\tGuinevere<\x08MSFT 5.07\n\x01\x0f\x03\x06,./\x1f!+\xff\x00\x00\x00\x00\x00' + dhcp = DHCP(s) + self.failUnless(s == str(dhcp)) + + unittest.main() + diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/diameter.py b/scripts/external_libs/dpkt-1.8.6/dpkt/diameter.py new file mode 100644 index 00000000..505eccd0 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/diameter.py @@ -0,0 +1,181 @@ +# $Id: diameter.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Diameter.""" + +import struct +import dpkt + +# Diameter Base Protocol - RFC 3588 +# http://tools.ietf.org/html/rfc3588 + +# Request/Answer Command Codes +ABORT_SESSION = 274 +ACCOUTING = 271 +CAPABILITIES_EXCHANGE = 257 +DEVICE_WATCHDOG = 280 +DISCONNECT_PEER = 282 +RE_AUTH = 258 +SESSION_TERMINATION = 275 + +class Diameter(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 1), + ('len', '3s', 0), + ('flags', 'B', 0), + ('cmd', '3s', 0), + ('app_id', 'I', 0), + ('hop_id', 'I', 0), + ('end_id', 'I', 0) + ) + + def _get_r(self): + return (self.flags >> 7) & 0x1 + def _set_r(self, r): + self.flags = (self.flags & ~0x80) | ((r & 0x1) << 7) + request_flag = property(_get_r, _set_r) + + def _get_p(self): + return (self.flags >> 6) & 0x1 + def _set_p(self, p): + self.flags = (self.flags & ~0x40) | ((p & 0x1) << 6) + proxiable_flag = property(_get_p, _set_p) + + def _get_e(self): + return (self.flags >> 5) & 0x1 + def _set_e(self, e): + self.flags = (self.flags & ~0x20) | ((e & 0x1) << 5) + error_flag = property(_get_e, _set_e) + + def _get_t(self): + return (self.flags >> 4) & 0x1 + def _set_t(self, t): + self.flags = (self.flags & ~0x10) | ((t & 0x1) << 4) + retransmit_flag = property(_get_t, _set_t) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.cmd = (ord(self.cmd[0]) << 16) | \ + (ord(self.cmd[1]) << 8) | \ + ord(self.cmd[2]) + self.len = (ord(self.len[0]) << 16) | \ + (ord(self.len[1]) << 8) | \ + ord(self.len[2]) + self.data = self.data[:self.len - self.__hdr_len__] + + l = [] + while self.data: + avp = AVP(self.data) + l.append(avp) + self.data = self.data[len(avp):] + self.data = self.avps = l + + def pack_hdr(self): + self.len = chr((self.len >> 16) & 0xff) + \ + chr((self.len >> 8) & 0xff) + \ + chr(self.len & 0xff) + self.cmd = chr((self.cmd >> 16) & 0xff) + \ + chr((self.cmd >> 8) & 0xff) + \ + chr(self.cmd & 0xff) + return dpkt.Packet.pack_hdr(self) + + def __len__(self): + return self.__hdr_len__ + \ + sum(map(len, self.data)) + + def __str__(self): + return self.pack_hdr() + \ + ''.join(map(str, self.data)) + +class AVP(dpkt.Packet): + __hdr__ = ( + ('code', 'I', 0), + ('flags', 'B', 0), + ('len', '3s', 0), + ) + + def _get_v(self): + return (self.flags >> 7) & 0x1 + def _set_v(self, v): + self.flags = (self.flags & ~0x80) | ((v & 0x1) << 7) + vendor_flag = property(_get_v, _set_v) + + def _get_m(self): + return (self.flags >> 6) & 0x1 + def _set_m(self, m): + self.flags = (self.flags & ~0x40) | ((m & 0x1) << 6) + mandatory_flag = property(_get_m, _set_m) + + def _get_p(self): + return (self.flags >> 5) & 0x1 + def _set_p(self, p): + self.flags = (self.flags & ~0x20) | ((p & 0x1) << 5) + protected_flag = property(_get_p, _set_p) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.len = (ord(self.len[0]) << 16) | \ + (ord(self.len[1]) << 8) | \ + ord(self.len[2]) + + if self.vendor_flag: + self.vendor = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:self.len - self.__hdr_len__] + else: + self.data = self.data[:self.len - self.__hdr_len__] + + def pack_hdr(self): + self.len = chr((self.len >> 16) & 0xff) + \ + chr((self.len >> 8) & 0xff) + \ + chr(self.len & 0xff) + data = dpkt.Packet.pack_hdr(self) + if self.vendor_flag: + data += struct.pack('>I', self.vendor) + return data + + def __len__(self): + length = self.__hdr_len__ + \ + sum(map(len, self.data)) + if self.vendor_flag: + length += 4 + return length + + +if __name__ == '__main__': + import unittest + + class DiameterTestCase(unittest.TestCase): + def testPack(self): + d = Diameter(self.s) + self.failUnless(self.s == str(d)) + d = Diameter(self.t) + self.failUnless(self.t == str(d)) + + def testUnpack(self): + d = Diameter(self.s) + self.failUnless(d.len == 40) + #self.failUnless(d.cmd == DEVICE_WATCHDOG_REQUEST) + self.failUnless(d.request_flag == 1) + self.failUnless(d.error_flag == 0) + self.failUnless(len(d.avps) == 2) + + avp = d.avps[0] + #self.failUnless(avp.code == ORIGIN_HOST) + self.failUnless(avp.mandatory_flag == 1) + self.failUnless(avp.vendor_flag == 0) + self.failUnless(avp.len == 12) + self.failUnless(len(avp) == 12) + self.failUnless(avp.data == '\x68\x30\x30\x32') + + # also test the optional vendor id support + d = Diameter(self.t) + self.failUnless(d.len == 44) + avp = d.avps[0] + self.failUnless(avp.vendor_flag == 1) + self.failUnless(avp.len == 16) + self.failUnless(len(avp) == 16) + self.failUnless(avp.vendor == 3735928559) + self.failUnless(avp.data == '\x68\x30\x30\x32') + + s = '\x01\x00\x00\x28\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x41\xc8\x00\x00\x00\x0c\x00\x00\x01\x08\x40\x00\x00\x0c\x68\x30\x30\x32\x00\x00\x01\x28\x40\x00\x00\x08' + t = '\x01\x00\x00\x2c\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x41\xc8\x00\x00\x00\x0c\x00\x00\x01\x08\xc0\x00\x00\x10\xde\xad\xbe\xef\x68\x30\x30\x32\x00\x00\x01\x28\x40\x00\x00\x08' + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/dns.py b/scripts/external_libs/dpkt-1.8.6/dpkt/dns.py new file mode 100644 index 00000000..24ca1bd6 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/dns.py @@ -0,0 +1,342 @@ +# $Id: dns.py 27 2006-11-21 01:22:52Z dahelder $ + +"""Domain Name System.""" + +import struct +import dpkt + +DNS_Q = 0 +DNS_R = 1 + +# Opcodes +DNS_QUERY = 0 +DNS_IQUERY = 1 +DNS_STATUS = 2 +DNS_NOTIFY = 4 +DNS_UPDATE = 5 + +# Flags +DNS_CD = 0x0010 # checking disabled +DNS_AD = 0x0020 # authenticated data +DNS_Z = 0x0040 # unused +DNS_RA = 0x0080 # recursion available +DNS_RD = 0x0100 # recursion desired +DNS_TC = 0x0200 # truncated +DNS_AA = 0x0400 # authoritative answer +DNS_QR = 0x8000 # response ( query / response ) + +# Response codes +DNS_RCODE_NOERR = 0 +DNS_RCODE_FORMERR = 1 +DNS_RCODE_SERVFAIL = 2 +DNS_RCODE_NXDOMAIN = 3 +DNS_RCODE_NOTIMP = 4 +DNS_RCODE_REFUSED = 5 +DNS_RCODE_YXDOMAIN = 6 +DNS_RCODE_YXRRSET = 7 +DNS_RCODE_NXRRSET = 8 +DNS_RCODE_NOTAUTH = 9 +DNS_RCODE_NOTZONE = 10 + +# RR types +DNS_A = 1 +DNS_NS = 2 +DNS_CNAME = 5 +DNS_SOA = 6 +DNS_PTR = 12 +DNS_HINFO = 13 +DNS_MX = 15 +DNS_TXT = 16 +DNS_AAAA = 28 +DNS_SRV = 33 + +# RR classes +DNS_IN = 1 +DNS_CHAOS = 3 +DNS_HESIOD = 4 +DNS_ANY = 255 + +def pack_name(name, off, label_ptrs): + if name: + labels = name.split('.') + else: + labels = [] + labels.append('') + buf = '' + for i, label in enumerate(labels): + key = '.'.join(labels[i:]).upper() + ptr = label_ptrs.get(key) + if not ptr: + if len(key) > 1: + ptr = off + len(buf) + if ptr < 0xc000: + label_ptrs[key] = ptr + i = len(label) + buf += chr(i) + label + else: + buf += struct.pack('>H', (0xc000 | ptr)) + break + return buf + +def unpack_name(buf, off): + name = '' + saved_off = 0 + for i in range(100): # XXX + n = ord(buf[off]) + if n == 0: + off += 1 + break + elif (n & 0xc0) == 0xc0: + ptr = struct.unpack('>H', buf[off:off+2])[0] & 0x3fff + off += 2 + if not saved_off: + saved_off = off + # XXX - don't use recursion!@#$ + name = name + unpack_name(buf, ptr)[0] + '.' + break + else: + off += 1 + name = name + buf[off:off+n] + '.' + if len(name) > 255: + raise dpkt.UnpackError('name longer than 255 bytes') + off += n + return name.strip('.'), off + +class DNS(dpkt.Packet): + __hdr__ = ( + ('id', 'H', 0), + ('op', 'H', DNS_RD), # recursive query + # XXX - lists of query, RR objects + ('qd', 'H', []), + ('an', 'H', []), + ('ns', 'H', []), + ('ar', 'H', []) + ) + def get_qr(self): + return int((self.op & DNS_QR) == DNS_QR) + def set_qr(self, v): + if v: self.op |= DNS_QR + else: self.op &= ~DNS_QR + qr = property(get_qr, set_qr) + + def get_opcode(self): + return (self.op >> 11) & 0xf + def set_opcode(self, v): + self.op = (self.op & ~0x7800) | ((v & 0xf) << 11) + opcode = property(get_opcode, set_opcode) + + def get_aa(self): + return int((self.op & DNS_AA) == DNS_AA) + def set_aa(self, v): + if v: self.op |= DNS_AA + else: self.op &= ~DNS_AA + aa = property(get_aa, set_aa) + + def get_rd(self): + return int((self.op & DNS_RD) == DNS_RD) + def set_rd(self,v): + if v: self.op |= DNS_RD + else: self.op &= ~DNS_RD + rd = property(get_rd, set_rd) + + def get_ra(self): + return int((self.op & DNS_RA) == DNS_RA) + def set_ra(self,v): + if v: self.op |= DNS_RA + else: self.op &= ~DNS_RA + ra = property(get_ra, set_ra) + + def get_zero(self): + return int((self.op & DNS_Z) == DNS_Z) + def set_zero(self, v): + if v: self.op |= DNS_Z + else: self.op &= ~DNS_Z + zero = property(get_zero, set_zero) + + def get_rcode(self): + return self.op & 0xf + def set_rcode(self, v): + self.op = (self.op & ~0xf) | (v & 0xf) + rcode = property(get_rcode, set_rcode) + + class Q(dpkt.Packet): + """DNS question.""" + __hdr__ = ( + ('name', '1025s', ''), + ('type', 'H', DNS_A), + ('cls', 'H', DNS_IN) + ) + # XXX - suk + def __len__(self): + raise NotImplementedError + __str__ = __len__ + def unpack(self, buf): + raise NotImplementedError + + class RR(Q): + """DNS resource record.""" + __hdr__ = ( + ('name', '1025s', ''), + ('type', 'H', DNS_A), + ('cls', 'H', DNS_IN), + ('ttl', 'I', 0), + ('rlen', 'H', 4), + ('rdata', 's', '') + ) + def pack_rdata(self, off, label_ptrs): + # XXX - yeah, this sux + if self.rdata: + return self.rdata + if self.type == DNS_A: + return self.ip + elif self.type == DNS_NS: + return pack_name(self.nsname, off, label_ptrs) + elif self.type == DNS_CNAME: + return pack_name(self.cname, off, label_ptrs) + elif self.type == DNS_PTR: + return pack_name(self.ptrname, off, label_ptrs) + elif self.type == DNS_SOA: + l = [] + l.append(pack_name(self.mname, off, label_ptrs)) + l.append(pack_name(self.rname, off + len(l[0]), label_ptrs)) + l.append(struct.pack('>IIIII', self.serial, self.refresh, + self.retry, self.expire, self.minimum)) + return ''.join(l) + elif self.type == DNS_MX: + return struct.pack('>H', self.preference) + \ + pack_name(self.mxname, off + 2, label_ptrs) + elif self.type == DNS_TXT or self.type == DNS_HINFO: + return ''.join([ '%s%s' % (chr(len(x)), x) + for x in self.text ]) + elif self.type == DNS_AAAA: + return self.ip6 + elif self.type == DNS_SRV: + return struct.pack('>HHH', self.priority, self.weight, self.port) + \ + pack_name(self.srvname, off + 6, label_ptrs) + + def unpack_rdata(self, buf, off): + if self.type == DNS_A: + self.ip = self.rdata + elif self.type == DNS_NS: + self.nsname, off = unpack_name(buf, off) + elif self.type == DNS_CNAME: + self.cname, off = unpack_name(buf, off) + elif self.type == DNS_PTR: + self.ptrname, off = unpack_name(buf, off) + elif self.type == DNS_SOA: + self.mname, off = unpack_name(buf, off) + self.rname, off = unpack_name(buf, off) + self.serial, self.refresh, self.retry, self.expire, \ + self.minimum = struct.unpack('>IIIII', buf[off:off+20]) + elif self.type == DNS_MX: + self.preference = struct.unpack('>H', self.rdata[:2]) + self.mxname, off = unpack_name(buf, off+2) + elif self.type == DNS_TXT or self.type == DNS_HINFO: + self.text = [] + buf = self.rdata + while buf: + n = ord(buf[0]) + self.text.append(buf[1:1+n]) + buf = buf[1+n:] + elif self.type == DNS_AAAA: + self.ip6 = self.rdata + elif self.type == DNS_SRV: + self.priority, self.weight, self.port = \ + struct.unpack('>HHH', self.rdata[:6]) + self.srvname, off = unpack_name(buf, off+6) + + def pack_q(self, buf, q): + """Append packed DNS question and return buf.""" + return buf + pack_name(q.name, len(buf), self.label_ptrs) + \ + struct.pack('>HH', q.type, q.cls) + + def unpack_q(self, buf, off): + """Return DNS question and new offset.""" + q = self.Q() + q.name, off = unpack_name(buf, off) + q.type, q.cls = struct.unpack('>HH', buf[off:off+4]) + off += 4 + return q, off + + def pack_rr(self, buf, rr): + """Append packed DNS RR and return buf.""" + name = pack_name(rr.name, len(buf), self.label_ptrs) + rdata = rr.pack_rdata(len(buf) + len(name) + 10, self.label_ptrs) + return buf + name + struct.pack('>HHIH', rr.type, rr.cls, rr.ttl, + len(rdata)) + rdata + + def unpack_rr(self, buf, off): + """Return DNS RR and new offset.""" + rr = self.RR() + rr.name, off = unpack_name(buf, off) + rr.type, rr.cls, rr.ttl, rdlen = struct.unpack('>HHIH', buf[off:off+10]) + off += 10 + rr.rdata = buf[off:off+rdlen] + rr.unpack_rdata(buf, off) + off += rdlen + return rr, off + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + off = self.__hdr_len__ + cnt = self.qd + self.qd = [] + for i in range(cnt): + q, off = self.unpack_q(buf, off) + self.qd.append(q) + for x in ('an', 'ns', 'ar'): + cnt = getattr(self, x, 0) + setattr(self, x, []) + for i in range(cnt): + rr, off = self.unpack_rr(buf, off) + getattr(self, x).append(rr) + self.data = '' + + def __len__(self): + # XXX - cop out + return len(str(self)) + + def __str__(self): + # XXX - compress names on the fly + self.label_ptrs = {} + buf = struct.pack(self.__hdr_fmt__, self.id, self.op, len(self.qd), + len(self.an), len(self.ns), len(self.ar)) + for q in self.qd: + buf = self.pack_q(buf, q) + for x in ('an', 'ns', 'ar'): + for rr in getattr(self, x): + buf = self.pack_rr(buf, rr) + del self.label_ptrs + return buf + +if __name__ == '__main__': + import unittest + from ip import IP + + class DNSTestCase(unittest.TestCase): + def test_basic(self): + s = 'E\x00\x02\x08\xc15\x00\x00\x80\x11\x92aBk0\x01Bk0w\x005\xc07\x01\xf4\xda\xc2d\xd2\x81\x80\x00\x01\x00\x03\x00\x0b\x00\x0b\x03www\x06google\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x05\x00\x01\x00\x00\x03V\x00\x17\x03www\x06google\x06akadns\x03net\x00\xc0,\x00\x01\x00\x01\x00\x00\x01\xa3\x00\x04@\xe9\xabh\xc0,\x00\x01\x00\x01\x00\x00\x01\xa3\x00\x04@\xe9\xabc\xc07\x00\x02\x00\x01\x00\x00KG\x00\x0c\x04usw5\x04akam\xc0>\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04usw6\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04usw7\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x08\x05asia3\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02za\xc07\xc07\x00\x02\x00\x01\x00\x00KG\x00\x0f\x02zc\x06akadns\x03org\x00\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02zf\xc07\xc07\x00\x02\x00\x01\x00\x00KG\x00\x05\x02zh\xc0\xd5\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04eur3\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04use2\xc0t\xc07\x00\x02\x00\x01\x00\x00KG\x00\x07\x04use4\xc0t\xc0\xc1\x00\x01\x00\x01\x00\x00\xfb4\x00\x04\xd0\xb9\x84\xb0\xc0\xd2\x00\x01\x00\x01\x00\x001\x0c\x00\x04?\xf1\xc76\xc0\xed\x00\x01\x00\x01\x00\x00\xfb4\x00\x04?\xd7\xc6S\xc0\xfe\x00\x01\x00\x01\x00\x001\x0c\x00\x04?\xd00.\xc1\x0f\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04\xc1-\x01g\xc1"\x00\x01\x00\x01\x00\x00\x101\x00\x04?\xd1\xaa\x88\xc15\x00\x01\x00\x01\x00\x00\r\x1a\x00\x04PCC\xb6\xc0o\x00\x01\x00\x01\x00\x00\x10\x7f\x00\x04?\xf1I\xd6\xc0\x87\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04\xce\x84dl\xc0\x9a\x00\x01\x00\x01\x00\x00\n\xdf\x00\x04A\xcb\xea\x1b\xc0\xad\x00\x01\x00\x01\x00\x00\x0b)\x00\x04\xc1l\x9a\t' + ip = IP(s) + dns = DNS(ip.udp.data) + self.failUnless(dns.qd[0].name == 'www.google.com' and + dns.an[1].name == 'www.google.akadns.net') + s = '\x05\xf5\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x03cnn\x03com\x00\x00\x01\x00\x01' + dns = DNS(s) + self.failUnless(s == str(dns)) + + def test_PTR(self): + s = 'g\x02\x81\x80\x00\x01\x00\x01\x00\x03\x00\x00\x011\x011\x03211\x03141\x07in-addr\x04arpa\x00\x00\x0c\x00\x01\xc0\x0c\x00\x0c\x00\x01\x00\x00\r6\x00$\x07default\nv-umce-ifs\x05umnet\x05umich\x03edu\x00\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\r\x06shabby\x03ifs\xc0O\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0f\x0cfish-license\xc0m\xc0\x0e\x00\x02\x00\x01\x00\x00\r6\x00\x0b\x04dns2\x03itd\xc0O' + dns = DNS(s) + self.failUnless(dns.qd[0].name == '1.1.211.141.in-addr.arpa' and + dns.an[0].ptrname == 'default.v-umce-ifs.umnet.umich.edu' and + dns.ns[0].nsname == 'shabby.ifs.umich.edu' and + dns.ns[1].ttl == 3382L and + dns.ns[2].nsname == 'dns2.itd.umich.edu') + self.failUnless(s == str(dns)) + + def test_pack_name(self): + # Empty name is \0 + x = pack_name('', 0, {}) + self.assertEqual(x, '\0') + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/dpkt.py b/scripts/external_libs/dpkt-1.8.6/dpkt/dpkt.py new file mode 100644 index 00000000..e14d46bd --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/dpkt.py @@ -0,0 +1,168 @@ + +# $Id: dpkt.py 43 2007-08-02 22:42:59Z jon.oberheide $ + +"""Simple packet creation and parsing.""" + +import copy, itertools, socket, struct + +class Error(Exception): pass +class UnpackError(Error): pass +class NeedData(UnpackError): pass +class PackError(Error): pass + +class _MetaPacket(type): + def __new__(cls, clsname, clsbases, clsdict): + t = type.__new__(cls, clsname, clsbases, clsdict) + st = getattr(t, '__hdr__', None) + if st is not None: + # XXX - __slots__ only created in __new__() + clsdict['__slots__'] = [ x[0] for x in st ] + [ 'data' ] + t = type.__new__(cls, clsname, clsbases, clsdict) + t.__hdr_fields__ = [ x[0] for x in st ] + t.__hdr_fmt__ = getattr(t, '__byte_order__', '>') + \ + ''.join([ x[1] for x in st ]) + t.__hdr_len__ = struct.calcsize(t.__hdr_fmt__) + t.__hdr_defaults__ = dict(zip( + t.__hdr_fields__, [ x[2] for x in st ])) + return t + +class Packet(object): + """Base packet class, with metaclass magic to generate members from + self.__hdr__. + + __hdr__ should be defined as a list of (name, structfmt, default) tuples + __byte_order__ can be set to override the default ('>') + + Example:: + + >>> class Foo(Packet): + ... __hdr__ = (('foo', 'I', 1), ('bar', 'H', 2), ('baz', '4s', 'quux')) + ... + >>> foo = Foo(bar=3) + >>> foo + Foo(bar=3) + >>> str(foo) + '\x00\x00\x00\x01\x00\x03quux' + >>> foo.bar + 3 + >>> foo.baz + 'quux' + >>> foo.foo = 7 + >>> foo.baz = 'whee' + >>> foo + Foo(baz='whee', foo=7, bar=3) + >>> Foo('hello, world!') + Foo(baz=' wor', foo=1751477356L, bar=28460, data='ld!') + """ + __metaclass__ = _MetaPacket + + def __init__(self, *args, **kwargs): + """Packet constructor with ([buf], [field=val,...]) prototype. + + Arguments: + + buf -- optional packet buffer to unpack + + Optional keyword arguments correspond to members to set + (matching fields in self.__hdr__, or 'data'). + """ + self.data = '' + if args: + try: + self.unpack(args[0]) + except struct.error: + if len(args[0]) < self.__hdr_len__: + raise NeedData + raise UnpackError('invalid %s: %r' % + (self.__class__.__name__, args[0])) + else: + for k in self.__hdr_fields__: + setattr(self, k, copy.copy(self.__hdr_defaults__[k])) + for k, v in kwargs.iteritems(): + setattr(self, k, v) + + def __len__(self): + return self.__hdr_len__ + len(self.data) + + def __getitem__(self, k): + try: return getattr(self, k) + except AttributeError: raise KeyError + + def __repr__(self): + l = [ '%s=%r' % (k, getattr(self, k)) + for k in self.__hdr_defaults__ + if getattr(self, k) != self.__hdr_defaults__[k] ] + if self.data: + l.append('data=%r' % self.data) + return '%s(%s)' % (self.__class__.__name__, ', '.join(l)) + + def __str__(self): + return self.pack_hdr() + str(self.data) + + def pack_hdr(self): + """Return packed header string.""" + try: + return struct.pack(self.__hdr_fmt__, + *[ getattr(self, k) for k in self.__hdr_fields__ ]) + except struct.error: + vals = [] + for k in self.__hdr_fields__: + v = getattr(self, k) + if isinstance(v, tuple): + vals.extend(v) + else: + vals.append(v) + try: + return struct.pack(self.__hdr_fmt__, *vals) + except struct.error, e: + raise PackError(str(e)) + + def pack(self): + """Return packed header + self.data string.""" + return str(self) + + def unpack(self, buf): + """Unpack packet header fields from buf, and set self.data.""" + for k, v in itertools.izip(self.__hdr_fields__, + struct.unpack(self.__hdr_fmt__, buf[:self.__hdr_len__])): + setattr(self, k, v) + self.data = buf[self.__hdr_len__:] + +# XXX - ''.join([(len(`chr(x)`)==3) and chr(x) or '.' for x in range(256)]) +__vis_filter = """................................ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[.]^_`abcdefghijklmnopqrstuvwxyz{|}~.................................................................................................................................""" + +def hexdump(buf, length=16): + """Return a hexdump output string of the given buffer.""" + n = 0 + res = [] + while buf: + line, buf = buf[:length], buf[length:] + hexa = ' '.join(['%02x' % ord(x) for x in line]) + line = line.translate(__vis_filter) + res.append(' %04d: %-*s %s' % (n, length * 3, hexa, line)) + n += length + return '\n'.join(res) + +try: + import dnet2 + def in_cksum_add(s, buf): + return dnet.ip_cksum_add(buf, s) + def in_cksum_done(s): + return socket.ntohs(dnet.ip_cksum_carry(s)) +except ImportError: + import array + def in_cksum_add(s, buf): + n = len(buf) + cnt = (n / 2) * 2 + a = array.array('H', buf[:cnt]) + if cnt != n: + a.append(struct.unpack('H', buf[-1] + '\x00')[0]) + return s + sum(a) + def in_cksum_done(s): + s = (s >> 16) + (s & 0xffff) + s += (s >> 16) + return socket.ntohs(~s & 0xffff) + +def in_cksum(buf): + """Return computed Internet checksum.""" + return in_cksum_done(in_cksum_add(0, buf)) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/dtp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/dtp.py new file mode 100644 index 00000000..9ceec387 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/dtp.py @@ -0,0 +1,23 @@ +# $Id: dtp.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Dynamic Trunking Protocol.""" + +import struct +import dpkt + +class DTP(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 0), + ) # rest is TLVs + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = self.data + tvs = [] + while buf: + t, l = struct.unpack('>HH', buf[:4]) + v, buf = buf[4:4+l], buf[4+l:] + tvs.append((t, v)) + self.data = tvs + +TRUNK_NAME = 0x01 +MAC_ADDR = 0x04 diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/esp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/esp.py new file mode 100644 index 00000000..890482ea --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/esp.py @@ -0,0 +1,11 @@ +# $Id: esp.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Encapsulated Security Protocol.""" + +import dpkt + +class ESP(dpkt.Packet): + __hdr__ = ( + ('spi', 'I', 0), + ('seq', 'I', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/ethernet.py b/scripts/external_libs/dpkt-1.8.6/dpkt/ethernet.py new file mode 100644 index 00000000..eca04868 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/ethernet.py @@ -0,0 +1,140 @@ +# $Id: ethernet.py 65 2010-03-26 02:53:51Z dugsong $ + +"""Ethernet II, LLC (802.3+802.2), LLC/SNAP, and Novell raw 802.3, +with automatic 802.1q, MPLS, PPPoE, and Cisco ISL decapsulation.""" + +import struct +import dpkt, stp + +ETH_CRC_LEN = 4 +ETH_HDR_LEN = 14 + +ETH_LEN_MIN = 64 # minimum frame length with CRC +ETH_LEN_MAX = 1518 # maximum frame length with CRC + +ETH_MTU = (ETH_LEN_MAX - ETH_HDR_LEN - ETH_CRC_LEN) +ETH_MIN = (ETH_LEN_MIN - ETH_HDR_LEN - ETH_CRC_LEN) + +# Ethernet payload types - http://standards.ieee.org/regauth/ethertype +ETH_TYPE_PUP = 0x0200 # PUP protocol +ETH_TYPE_IP = 0x0800 # IP protocol +ETH_TYPE_ARP = 0x0806 # address resolution protocol +ETH_TYPE_AOE = 0x88a2 # AoE protocol +ETH_TYPE_CDP = 0x2000 # Cisco Discovery Protocol +ETH_TYPE_DTP = 0x2004 # Cisco Dynamic Trunking Protocol +ETH_TYPE_REVARP = 0x8035 # reverse addr resolution protocol +ETH_TYPE_8021Q = 0x8100 # IEEE 802.1Q VLAN tagging +ETH_TYPE_IPX = 0x8137 # Internetwork Packet Exchange +ETH_TYPE_IP6 = 0x86DD # IPv6 protocol +ETH_TYPE_PPP = 0x880B # PPP +ETH_TYPE_MPLS = 0x8847 # MPLS +ETH_TYPE_MPLS_MCAST = 0x8848 # MPLS Multicast +ETH_TYPE_PPPoE_DISC = 0x8863 # PPP Over Ethernet Discovery Stage +ETH_TYPE_PPPoE = 0x8864 # PPP Over Ethernet Session Stage +ETH_TYPE_LLDP = 0x88CC #Link Layer Discovery Protocol + +# MPLS label stack fields +MPLS_LABEL_MASK = 0xfffff000 +MPLS_QOS_MASK = 0x00000e00 +MPLS_TTL_MASK = 0x000000ff +MPLS_LABEL_SHIFT= 12 +MPLS_QOS_SHIFT = 9 +MPLS_TTL_SHIFT = 0 +MPLS_STACK_BOTTOM=0x0100 + +class Ethernet(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', ''), + ('src', '6s', ''), + ('type', 'H', ETH_TYPE_IP) + ) + _typesw = {} + + def _unpack_data(self, buf): + if self.type == ETH_TYPE_8021Q: + self.tag, self.type = struct.unpack('>HH', buf[:4]) + buf = buf[4:] + elif self.type == ETH_TYPE_MPLS or \ + self.type == ETH_TYPE_MPLS_MCAST: + # XXX - skip labels (max # of labels is undefined, just use 24) + self.labels = [] + for i in range(24): + entry = struct.unpack('>I', buf[i*4:i*4+4])[0] + label = ((entry & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT, \ + (entry & MPLS_QOS_MASK) >> MPLS_QOS_SHIFT, \ + (entry & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT) + self.labels.append(label) + if entry & MPLS_STACK_BOTTOM: + break + self.type = ETH_TYPE_IP + buf = buf[(i + 1) * 4:] + try: + self.data = self._typesw[self.type](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.type > 1500: + # Ethernet II + self._unpack_data(self.data) + elif self.dst.startswith('\x01\x00\x0c\x00\x00') or \ + self.dst.startswith('\x03\x00\x0c\x00\x00'): + # Cisco ISL + self.vlan = struct.unpack('>H', self.data[6:8])[0] + self.unpack(self.data[12:]) + elif self.data.startswith('\xff\xff'): + # Novell "raw" 802.3 + self.type = ETH_TYPE_IPX + self.data = self.ipx = self._typesw[ETH_TYPE_IPX](self.data[2:]) + else: + # 802.2 LLC + self.dsap, self.ssap, self.ctl = struct.unpack('BBB', self.data[:3]) + if self.data.startswith('\xaa\xaa'): + # SNAP + self.type = struct.unpack('>H', self.data[6:8])[0] + self._unpack_data(self.data[8:]) + else: + # non-SNAP + dsap = ord(self.data[0]) + if dsap == 0x06: # SAP_IP + self.data = self.ip = self._typesw[ETH_TYPE_IP](self.data[3:]) + elif dsap == 0x10 or dsap == 0xe0: # SAP_NETWARE{1,2} + self.data = self.ipx = self._typesw[ETH_TYPE_IPX](self.data[3:]) + elif dsap == 0x42: # SAP_STP + self.data = self.stp = stp.STP(self.data[3:]) + + def set_type(cls, t, pktclass): + cls._typesw[t] = pktclass + set_type = classmethod(set_type) + + def get_type(cls, t): + return cls._typesw[t] + get_type = classmethod(get_type) + +# XXX - auto-load Ethernet dispatch table from ETH_TYPE_* definitions +def __load_types(): + g = globals() + for k, v in g.iteritems(): + if k.startswith('ETH_TYPE_'): + name = k[9:] + modname = name.lower() + try: + mod = __import__(modname, g) + except ImportError: + continue + Ethernet.set_type(v, getattr(mod, name)) + +if not Ethernet._typesw: + __load_types() + +if __name__ == '__main__': + import unittest + + class EthTestCase(unittest.TestCase): + def test_eth(self): + s = '\x00\xb0\xd0\xe1\x80r\x00\x11$\x8c\x11\xde\x86\xdd`\x00\x00\x00\x00(\x06@\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x11$\xff\xfe\x8c\x11\xde\xfe\x80\x00\x00\x00\x00\x00\x00\x02\xb0\xd0\xff\xfe\xe1\x80r\xcd\xd3\x00\x16\xffP\xd7\x13\x00\x00\x00\x00\xa0\x02\xff\xffg\xd3\x00\x00\x02\x04\x05\xa0\x01\x03\x03\x00\x01\x01\x08\n}\x18:a\x00\x00\x00\x00' + eth = Ethernet(s) + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/gre.py b/scripts/external_libs/dpkt-1.8.6/dpkt/gre.py new file mode 100644 index 00000000..4d462edc --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/gre.py @@ -0,0 +1,103 @@ +# $Id: gre.py 75 2010-08-03 14:42:19Z jon.oberheide $ + +"""Generic Routing Encapsulation.""" + +import struct +import dpkt + +GRE_CP = 0x8000 # Checksum Present +GRE_RP = 0x4000 # Routing Present +GRE_KP = 0x2000 # Key Present +GRE_SP = 0x1000 # Sequence Present +GRE_SS = 0x0800 # Strict Source Route +GRE_AP = 0x0080 # Acknowledgment Present + +GRE_opt_fields = ( + (GRE_CP|GRE_RP, 'sum', 'H'), (GRE_CP|GRE_RP, 'off', 'H'), + (GRE_KP, 'key', 'I'), (GRE_SP, 'seq', 'I'), (GRE_AP, 'ack', 'I') + ) +class GRE(dpkt.Packet): + __hdr__ = ( + ('flags', 'H', 0), + ('p', 'H', 0x0800), # ETH_TYPE_IP + ) + _protosw = {} + sre = () + def get_v(self): + return self.flags & 0x7 + def set_v(self, v): + self.flags = (self.flags & ~0x7) | (v & 0x7) + v = property(get_v, set_v) + + def get_recur(self): + return (self.flags >> 5) & 0x7 + def set_recur(self, v): + self.flags = (self.flags & ~0xe0) | ((v & 0x7) << 5) + recur = property(get_recur, set_recur) + + class SRE(dpkt.Packet): + __hdr__ = [ + ('family', 'H', 0), + ('off', 'B', 0), + ('len', 'B', 0) + ] + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len] + + def opt_fields_fmts(self): + if self.v == 0: + fields, fmts = [], [] + opt_fields = GRE_opt_fields + else: + fields, fmts = [ 'len', 'callid' ], [ 'H', 'H' ] + opt_fields = GRE_opt_fields[-2:] + for flags, field, fmt in opt_fields: + if self.flags & flags: + fields.append(field) + fmts.append(fmt) + return fields, fmts + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + fields, fmts = self.opt_fields_fmts() + if fields: + fmt = ''.join(fmts) + fmtlen = struct.calcsize(fmt) + vals = struct.unpack(fmt, self.data[:fmtlen]) + self.data = self.data[fmtlen:] + self.__dict__.update(dict(zip(fields, vals))) + if self.flags & GRE_RP: + l = [] + while True: + sre = self.SRE(self.data) + self.data = self.data[len(sre):] + l.append(sre) + if not sre.len: + break + self.sre = l + self.data = ethernet.Ethernet._typesw[self.p](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + + def __len__(self): + opt_fmtlen = struct.calcsize(''.join(self.opt_fields_fmts()[1])) + return self.__hdr_len__ + opt_fmtlen + \ + sum(map(len, self.sre)) + len(self.data) + + # XXX - need to fix up repr to display optional fields... + + def __str__(self): + fields, fmts = self.opt_fields_fmts() + if fields: + vals = [] + for f in fields: + vals.append(getattr(self, f)) + opt_s = struct.pack(''.join(fmts), *vals) + else: + opt_s = '' + return self.pack_hdr() + opt_s + ''.join(map(str, self.sre)) + \ + str(self.data) + +# XXX - auto-load GRE dispatch table from Ethernet dispatch table +import ethernet +GRE._protosw.update(ethernet.Ethernet._typesw) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/gzip.py b/scripts/external_libs/dpkt-1.8.6/dpkt/gzip.py new file mode 100644 index 00000000..e0bc619f --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/gzip.py @@ -0,0 +1,117 @@ +# $Id: gzip.py 23 2006-11-08 15:45:33Z dugsong $ + +"""GNU zip.""" + +import struct, zlib +import dpkt + +# RFC 1952 +GZIP_MAGIC = '\x1f\x8b' + +# Compression methods +GZIP_MSTORED = 0 +GZIP_MCOMPRESS = 1 +GZIP_MPACKED = 2 +GZIP_MLZHED = 3 +GZIP_MDEFLATE = 8 + +# Flags +GZIP_FTEXT = 0x01 +GZIP_FHCRC = 0x02 +GZIP_FEXTRA = 0x04 +GZIP_FNAME = 0x08 +GZIP_FCOMMENT = 0x10 +GZIP_FENCRYPT = 0x20 +GZIP_FRESERVED = 0xC0 + +# OS +GZIP_OS_MSDOS = 0 +GZIP_OS_AMIGA = 1 +GZIP_OS_VMS = 2 +GZIP_OS_UNIX = 3 +GZIP_OS_VMCMS = 4 +GZIP_OS_ATARI = 5 +GZIP_OS_OS2 = 6 +GZIP_OS_MACOS = 7 +GZIP_OS_ZSYSTEM = 8 +GZIP_OS_CPM = 9 +GZIP_OS_TOPS20 = 10 +GZIP_OS_WIN32 = 11 +GZIP_OS_QDOS = 12 +GZIP_OS_RISCOS = 13 +GZIP_OS_UNKNOWN = 255 + +GZIP_FENCRYPT_LEN = 12 + +class GzipExtra(dpkt.Packet): + __hdr__ = ( + ('id', '2s', ''), + ('len', 'H', 0) + ) + +class Gzip(dpkt.Packet): + __hdr__ = ( + ('magic', '2s', GZIP_MAGIC), + ('method', 'B', GZIP_MDEFLATE), + ('flags', 'B', 0), + ('mtime', 'I', 0), + ('xflags', 'B', 0), + ('os', 'B', GZIP_OS_UNIX), + + ('extra', '0s', ''), # XXX - GZIP_FEXTRA + ('filename', '0s', ''), # XXX - GZIP_FNAME + ('comment', '0s', '') # XXX - GZIP_FCOMMENT + ) + + def unpack(self, buf): + super(Gzip, self).unpack(buf) + if self.flags & GZIP_FEXTRA: + n = struct.unpack(self.data[:2], '>H')[0] + self.extra = GzipExtra(self.data[2:2+n]) + self.data = self.data[2+n:] + if self.flags & GZIP_FNAME: + n = self.data.find('\x00') + self.filename = self.data[:n] + self.data = self.data[n + 1:] + if self.flags & GZIP_FCOMMENT: + n = self.data.find('\x00') + self.comment = self.data[:n] + self.data = self.data[n + 1:] + if self.flags & GZIP_FENCRYPT: + self.data = self.data[GZIP_FENCRYPT_LEN:] # XXX - skip + if self.flags & GZIP_FHCRC: + self.data = self.data[2:] # XXX - skip + + def pack_hdr(self): + l = [] + if self.extra: + self.flags |= GZIP_FEXTRA + s = str(self.extra) + l.append(struct.pack('>H', len(s))) + l.append(s) + if self.filename: + self.flags |= GZIP_FNAME + l.append(self.filename) + l.append('\x00') + if self.comment: + self.flags |= GZIP_FCOMMENT + l.append(self.comment) + l.append('\x00') + l.insert(0, super(Gzip, self).pack_hdr()) + return ''.join(l) + + def compress(self): + """Compress self.data.""" + c = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS, + zlib.DEF_MEM_LEVEL, 0) + self.data = c.compress(self.data) + + def decompress(self): + """Return decompressed payload.""" + d = zlib.decompressobj(-zlib.MAX_WBITS) + return d.decompress(self.data) + +if __name__ == '__main__': + import sys + gz = Gzip(open(sys.argv[1]).read()) + print `gz`, `gz.decompress()` diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/h225.py b/scripts/external_libs/dpkt-1.8.6/dpkt/h225.py new file mode 100644 index 00000000..a8fe2cbe --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/h225.py @@ -0,0 +1,217 @@ +# $Id: h225.py 23 2006-11-08 15:45:33Z dugsong $ + +"""ITU-T H.225.0 Call Signaling.""" + +import dpkt, tpkt +import struct + +# H225 Call Signaling +# +# Call messages and information elements (IEs) are defined by Q.931: +# http://cvsup.de.openbsd.org/historic/comp/doc/standards/itu/Q/Q.931.ps.gz +# +# The User-to-User IEs of H225 are encoded by PER of ASN.1. + +# Call Establishment Messages +ALERTING = 1 +CALL_PROCEEDING = 2 +CONNECT = 7 +CONNECT_ACKNOWLEDGE = 15 +PROGRESS = 3 +SETUP = 5 +SETUP_ACKNOWLEDGE = 13 + +# Call Information Phase Messages +RESUME = 38 +RESUME_ACKNOWLEDGE = 46 +RESUME_REJECT = 34 +SUSPEND = 37 +SUSPEND_ACKNOWLEDGE = 45 +SUSPEND_REJECT = 33 +USER_INFORMATION = 32 + +# Call Clearing Messages +DISCONNECT = 69 +RELEASE = 77 +RELEASE_COMPLETE = 90 +RESTART = 70 +RESTART_ACKNOWLEDGE = 78 + +# Miscellaneous Messages +SEGMENT = 96 +CONGESTION_CONTROL = 121 +INFORMATION = 123 +NOTIFY = 110 +STATUS = 125 +STATUS_ENQUIRY = 117 + +# Type 1 Single Octet Information Element IDs +RESERVED = 128 +SHIFT = 144 +CONGESTION_LEVEL = 176 +REPEAT_INDICATOR = 208 + +# Type 2 Single Octet Information Element IDs +MORE_DATA = 160 +SENDING_COMPLETE = 161 + +# Variable Length Information Element IDs +SEGMENTED_MESSAGE = 0 +BEARER_CAPABILITY = 4 +CAUSE = 8 +CALL_IDENTITY = 16 +CALL_STATE = 20 +CHANNEL_IDENTIFICATION = 24 +PROGRESS_INDICATOR = 30 +NETWORK_SPECIFIC_FACILITIES = 32 +NOTIFICATION_INDICATOR = 39 +DISPLAY = 40 +DATE_TIME = 41 +KEYPAD_FACILITY = 44 +SIGNAL = 52 +INFORMATION_RATE = 64 +END_TO_END_TRANSIT_DELAY = 66 +TRANSIT_DELAY_SELECTION_AND_INDICATION = 67 +PACKET_LAYER_BINARY_PARAMETERS = 68 +PACKET_LAYER_WINDOW_SIZE = 69 +PACKET_SIZE = 70 +CLOSED_USER_GROUP = 71 +REVERSE_CHARGE_INDICATION = 74 +CALLING_PARTY_NUMBER = 108 +CALLING_PARTY_SUBADDRESS = 109 +CALLED_PARTY_NUMBER = 112 +CALLED_PARTY_SUBADDRESS = 113 +REDIRECTING_NUMBER = 116 +TRANSIT_NETWORK_SELECTION = 120 +RESTART_INDICATOR = 121 +LOW_LAYER_COMPATIBILITY = 124 +HIGH_LAYER_COMPATIBILITY = 125 +USER_TO_USER = 126 +ESCAPE_FOR_EXTENSION = 127 + +class H225(dpkt.Packet): + __hdr__ = ( + ('proto', 'B', 8), + ('ref_len', 'B', 2) + ) + + def unpack(self, buf): + # TPKT header + self.tpkt = tpkt.TPKT(buf) + if self.tpkt.v != 3: + raise dpkt.UnpackError('invalid TPKT version') + if self.tpkt.rsvd != 0: + raise dpkt.UnpackError('invalid TPKT reserved value') + n = self.tpkt.len - self.tpkt.__hdr_len__ + if n > len(self.tpkt.data): + raise dpkt.UnpackError('invalid TPKT length') + buf = self.tpkt.data + + # Q.931 payload + dpkt.Packet.unpack(self, buf) + buf = buf[self.__hdr_len__:] + self.ref_val = buf[:self.ref_len] + buf = buf[self.ref_len:] + self.type = struct.unpack('B', buf[:1])[0] + buf = buf[1:] + + # Information Elements + l = [] + while buf: + ie = self.IE(buf) + l.append(ie) + buf = buf[len(ie):] + self.data = l + + def __len__(self): + return self.tpkt.__hdr_len__ + \ + self.__hdr_len__ + \ + sum(map(len, self.data)) + + def __str__(self): + return self.tpkt.pack_hdr() + \ + self.pack_hdr() + \ + self.ref_val + \ + struct.pack('B', self.type) + \ + ''.join(map(str, self.data)) + + class IE(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = buf[self.__hdr_len__:] + + # single-byte IE + if self.type & 0x80: + self.len = 0 + self.data = None + # multi-byte IE + else: + # special PER-encoded UUIE + if self.type == USER_TO_USER: + self.len = struct.unpack('>H', buf[:2])[0] + buf = buf[2:] + # normal TLV-like IE + else: + self.len = struct.unpack('B', buf[:1])[0] + buf = buf[1:] + self.data = buf[:self.len] + + def __len__(self): + if self.type & 0x80: + n = 0 + else: + if self.type == USER_TO_USER: + n = 2 + else: + n = 1 + return self.__hdr_len__ + \ + self.len \ + + n + + def __str__(self): + if self.type & 0x80: + length_str = None + else: + if self.type == USER_TO_USER: + length_str = struct.pack('>H', self.len) + else: + length_str = struct.pack('B', self.len) + return struct.pack('B', self.type) + \ + length_str + \ + self.data + + +if __name__ == '__main__': + import unittest + + class H225TestCase(unittest.TestCase): + def testPack(self): + h = H225(self.s) + self.failUnless(self.s == str(h)) + + def testUnpack(self): + h = H225(self.s) + self.failUnless(h.tpkt.v == 3) + self.failUnless(h.tpkt.rsvd == 0) + self.failUnless(h.tpkt.len == 1041) + self.failUnless(h.proto == 8) + self.failUnless(h.type == SETUP) + self.failUnless(len(h.data) == 3) + + ie = h.data[0] + self.failUnless(ie.type == BEARER_CAPABILITY) + self.failUnless(ie.len == 3) + ie = h.data[1] + self.failUnless(ie.type == DISPLAY) + self.failUnless(ie.len == 14) + ie = h.data[2] + self.failUnless(ie.type == USER_TO_USER) + self.failUnless(ie.len == 1008) + + s = '\x03\x00\x04\x11\x08\x02\x54\x2b\x05\x04\x03\x88\x93\xa5\x28\x0e\x4a\x6f\x6e\x20\x4f\x62\x65\x72\x68\x65\x69\x64\x65\x00\x7e\x03\xf0\x05\x20\xb8\x06\x00\x08\x91\x4a\x00\x04\x01\x40\x0c\x00\x4a\x00\x6f\x00\x6e\x00\x20\x00\x4f\x00\x62\x00\x65\x00\x72\x00\x68\x00\x65\x00\x69\x00\x64\x00\x65\x22\xc0\x09\x00\x00\x3d\x06\x65\x6b\x69\x67\x61\x00\x00\x14\x32\x2e\x30\x2e\x32\x20\x28\x4f\x50\x41\x4c\x20\x76\x32\x2e\x32\x2e\x32\x29\x00\x00\x00\x01\x40\x15\x00\x74\x00\x63\x00\x70\x00\x24\x00\x68\x00\x33\x00\x32\x00\x33\x00\x2e\x00\x76\x00\x6f\x00\x78\x00\x67\x00\x72\x00\x61\x00\x74\x00\x69\x00\x61\x00\x2e\x00\x6f\x00\x72\x00\x67\x00\x42\x87\x23\x2c\x06\xb8\x00\x6a\x8b\x1d\x0c\xb7\x06\xdb\x11\x9e\xca\x00\x10\xa4\x89\x6d\x6a\x00\xc5\x1d\x80\x04\x07\x00\x0a\x00\x01\x7a\x75\x30\x11\x00\x5e\x88\x1d\x0c\xb7\x06\xdb\x11\x9e\xca\x00\x10\xa4\x89\x6d\x6a\x82\x2b\x0e\x30\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x26\x00\x00\x64\x0c\x10\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x2a\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x20\x00\x00\x65\x0c\x10\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x20\x40\x00\x00\x06\x04\x01\x00\x4e\x0c\x03\x00\x83\x00\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x16\x00\x00\x66\x0e\x0c\x03\x00\x83\x00\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x4b\x40\x00\x00\x06\x04\x01\x00\x4c\x10\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x41\x00\x00\x67\x0c\x10\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x32\x40\x00\x00\x06\x04\x01\x00\x4c\x10\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x28\x00\x00\x68\x0c\x10\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x1d\x40\x00\x00\x06\x04\x01\x00\x4c\x60\x1d\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x13\x00\x00\x69\x0c\x60\x1d\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x1d\x40\x00\x00\x06\x04\x01\x00\x4c\x20\x1d\x80\x11\x1c\x00\x01\x00\x98\xa0\x26\x41\x13\x8a\x00\x98\xa0\x26\x41\x13\x8b\x13\x00\x00\x6a\x0c\x20\x1d\x80\x0b\x0d\x00\x01\x00\x98\xa0\x26\x41\x13\x8b\x00\x01\x00\x01\x00\x01\x00\x01\x00\x81\x03\x02\x80\xf8\x02\x70\x01\x06\x00\x08\x81\x75\x00\x0b\x80\x13\x80\x01\xf4\x00\x01\x00\x00\x01\x00\x00\x01\x00\x00\x0c\xc0\x01\x00\x01\x80\x0b\x80\x00\x00\x20\x20\x09\x00\x00\x3d\x0f\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x57\x69\x64\x65\x36\x80\x00\x01\x20\x20\x09\x00\x00\x3d\x09\x69\x4c\x42\x43\x2d\x31\x33\x6b\x33\x80\x00\x02\x24\x18\x03\x00\xe6\x00\x80\x00\x03\x20\x20\xb5\x00\x53\x4c\x2a\x02\x00\x00\x00\x00\x00\x40\x01\x00\x00\x40\x01\x02\x00\x08\x00\x00\x00\x00\x00\x31\x00\x01\x00\x40\x1f\x00\x00\x59\x06\x00\x00\x41\x00\x00\x00\x02\x00\x40\x01\x00\x00\x80\x00\x04\x20\x20\x09\x00\x00\x3d\x11\x53\x70\x65\x65\x78\x20\x62\x73\x34\x20\x4e\x61\x72\x72\x6f\x77\x33\x80\x00\x05\x20\xc0\xef\x80\x00\x06\x20\x40\xef\x80\x00\x07\x08\xe0\x03\x51\x00\x80\x01\x00\x80\x00\x08\x08\xd0\x03\x51\x00\x80\x01\x00\x80\x00\x09\x83\x01\x50\x80\x00\x0a\x83\x01\x10\x80\x00\x0b\x83\x01\x40\x00\x80\x01\x03\x06\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x01\x00\x07\x00\x08\x00\x00\x09\x01\x00\x0a\x00\x0b\x07\x01\x00\x32\x80\xa6\xff\x4c\x02\x80\x01\x80' + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/hsrp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/hsrp.py new file mode 100644 index 00000000..9a082a3d --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/hsrp.py @@ -0,0 +1,32 @@ +# $Id: hsrp.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Cisco Hot Standby Router Protocol.""" + +import dpkt + +# Opcodes +HELLO = 0 +COUP = 1 +RESIGN = 2 + +# States +INITIAL = 0x00 +LEARN = 0x01 +LISTEN = 0x02 +SPEAK = 0x04 +STANDBY = 0x08 +ACTIVE = 0x10 + +class HSRP(dpkt.Packet): + __hdr__ = ( + ('version', 'B', 0), + ('opcode', 'B', 0), + ('state', 'B', 0), + ('hello', 'B', 0), + ('hold', 'B', 0), + ('priority', 'B', 0), + ('group', 'B', 0), + ('rsvd', 'B', 0), + ('auth', '8s', 'cisco'), + ('vip', '4s', '') + ) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/http.py b/scripts/external_libs/dpkt-1.8.6/dpkt/http.py new file mode 100644 index 00000000..ce0ddc64 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/http.py @@ -0,0 +1,237 @@ +# $Id: http.py 86 2013-03-05 19:25:19Z andrewflnr@gmail.com $ + +"""Hypertext Transfer Protocol.""" + +import cStringIO +import dpkt + +def parse_headers(f): + """Return dict of HTTP headers parsed from a file object.""" + d = {} + while 1: + line = f.readline() + if not line: + raise dpkt.NeedData('premature end of headers') + line = line.strip() + if not line: + break + l = line.split(':', 1) + if len(l[0].split()) != 1: + raise dpkt.UnpackError('invalid header: %r' % line) + k = l[0].lower() + v = len(l) != 1 and l[1].lstrip() or '' + if k in d: + if not type(d[k]) is list: + d[k] = [d[k]] + d[k].append(v) + else: + d[k] = v + return d + +def parse_body(f, headers): + """Return HTTP body parsed from a file object, given HTTP header dict.""" + if headers.get('transfer-encoding', '').lower() == 'chunked': + l = [] + found_end = False + while 1: + try: + sz = f.readline().split(None, 1)[0] + except IndexError: + raise dpkt.UnpackError('missing chunk size') + n = int(sz, 16) + if n == 0: + found_end = True + buf = f.read(n) + if f.readline().strip(): + break + if n and len(buf) == n: + l.append(buf) + else: + break + if not found_end: + raise dpkt.NeedData('premature end of chunked body') + body = ''.join(l) + elif 'content-length' in headers: + n = int(headers['content-length']) + body = f.read(n) + if len(body) != n: + raise dpkt.NeedData('short body (missing %d bytes)' % (n - len(body))) + elif 'content-type' in headers: + body = f.read() + else: + # XXX - need to handle HTTP/0.9 + body = '' + return body + +class Message(dpkt.Packet): + """Hypertext Transfer Protocol headers + body.""" + __metaclass__ = type + __hdr_defaults__ = {} + headers = None + body = None + + def __init__(self, *args, **kwargs): + if args: + self.unpack(args[0]) + else: + self.headers = {} + self.body = '' + for k, v in self.__hdr_defaults__.iteritems(): + setattr(self, k, v) + for k, v in kwargs.iteritems(): + setattr(self, k, v) + + def unpack(self, buf): + f = cStringIO.StringIO(buf) + # Parse headers + self.headers = parse_headers(f) + # Parse body + self.body = parse_body(f, self.headers) + # Save the rest + self.data = f.read() + + def pack_hdr(self): + return ''.join([ '%s: %s\r\n' % t for t in self.headers.iteritems() ]) + + def __len__(self): + return len(str(self)) + + def __str__(self): + return '%s\r\n%s' % (self.pack_hdr(), self.body) + +class Request(Message): + """Hypertext Transfer Protocol Request.""" + __hdr_defaults__ = { + 'method':'GET', + 'uri':'/', + 'version':'1.0', + } + __methods = dict.fromkeys(( + 'GET', 'PUT', 'ICY', + 'COPY', 'HEAD', 'LOCK', 'MOVE', 'POLL', 'POST', + 'BCOPY', 'BMOVE', 'MKCOL', 'TRACE', 'LABEL', 'MERGE', + 'DELETE', 'SEARCH', 'UNLOCK', 'REPORT', 'UPDATE', 'NOTIFY', + 'BDELETE', 'CONNECT', 'OPTIONS', 'CHECKIN', + 'PROPFIND', 'CHECKOUT', 'CCM_POST', + 'SUBSCRIBE', 'PROPPATCH', 'BPROPFIND', + 'BPROPPATCH', 'UNCHECKOUT', 'MKACTIVITY', + 'MKWORKSPACE', 'UNSUBSCRIBE', 'RPC_CONNECT', + 'VERSION-CONTROL', + 'BASELINE-CONTROL' + )) + __proto = 'HTTP' + + def unpack(self, buf): + f = cStringIO.StringIO(buf) + line = f.readline() + l = line.strip().split() + if len(l) < 2: + raise dpkt.UnpackError('invalid request: %r' % line) + if l[0] not in self.__methods: + raise dpkt.UnpackError('invalid http method: %r' % l[0]) + if len(l) == 2: + # HTTP/0.9 does not specify a version in the request line + self.version = '0.9' + else: + if not l[2].startswith(self.__proto): + raise dpkt.UnpackError('invalid http version: %r' % l[2]) + self.version = l[2][len(self.__proto)+1:] + self.method = l[0] + self.uri = l[1] + Message.unpack(self, f.read()) + + def __str__(self): + return '%s %s %s/%s\r\n' % (self.method, self.uri, self.__proto, + self.version) + Message.__str__(self) + +class Response(Message): + """Hypertext Transfer Protocol Response.""" + __hdr_defaults__ = { + 'version':'1.0', + 'status':'200', + 'reason':'OK' + } + __proto = 'HTTP' + + def unpack(self, buf): + f = cStringIO.StringIO(buf) + line = f.readline() + l = line.strip().split(None, 2) + if len(l) < 2 or not l[0].startswith(self.__proto) or not l[1].isdigit(): + raise dpkt.UnpackError('invalid response: %r' % line) + self.version = l[0][len(self.__proto)+1:] + self.status = l[1] + self.reason = l[2] + Message.unpack(self, f.read()) + + def __str__(self): + return '%s/%s %s %s\r\n' % (self.__proto, self.version, self.status, + self.reason) + Message.__str__(self) + +if __name__ == '__main__': + import unittest + + class HTTPTest(unittest.TestCase): + def test_parse_request(self): + s = """POST /main/redirect/ab/1,295,,00.html HTTP/1.0\r\nReferer: http://www.email.com/login/snap/login.jhtml\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.75 [en] (X11; U; OpenBSD 2.8 i386; Nav)\r\nHost: ltd.snap.com\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: 61\r\n\r\nsn=em&mn=dtest4&pw=this+is+atest&fr=true&login=Sign+in&od=www""" + r = Request(s) + assert r.method == 'POST' + assert r.uri == '/main/redirect/ab/1,295,,00.html' + assert r.body == 'sn=em&mn=dtest4&pw=this+is+atest&fr=true&login=Sign+in&od=www' + assert r.headers['content-type'] == 'application/x-www-form-urlencoded' + try: + r = Request(s[:60]) + assert 'invalid headers parsed!' + except dpkt.UnpackError: + pass + + def test_format_request(self): + r = Request() + assert str(r) == 'GET / HTTP/1.0\r\n\r\n' + r.method = 'POST' + r.uri = '/foo/bar/baz.html' + r.headers['content-type'] = 'text/plain' + r.headers['content-length'] = '5' + r.body = 'hello' + s = str(r) + assert s.startswith('POST /foo/bar/baz.html HTTP/1.0\r\n') + assert s.endswith('\r\n\r\nhello') + assert '\r\ncontent-length: 5\r\n' in s + assert '\r\ncontent-type: text/plain\r\n' in s + r = Request(str(r)) + assert str(r) == s + + def test_chunked_response(self): + s = """HTTP/1.1 200 OK\r\nCache-control: no-cache\r\nPragma: no-cache\r\nContent-Type: text/javascript; charset=utf-8\r\nContent-Encoding: gzip\r\nTransfer-Encoding: chunked\r\nSet-Cookie: S=gmail=agg:gmail_yj=v2s:gmproxy=JkU; Domain=.google.com; Path=/\r\nServer: GFE/1.3\r\nDate: Mon, 12 Dec 2005 22:33:23 GMT\r\n\r\na\r\n\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\r\n152\r\nm\x91MO\xc4 \x10\x86\xef\xfe\n\x82\xc9\x9eXJK\xe9\xb6\xee\xc1\xe8\x1e6\x9e4\xf1\xe0a5\x86R\xda\x12Yh\x80\xba\xfa\xef\x85\xee\x1a/\xf21\x99\x0c\xef0<\xc3\x81\xa0\xc3\x01\xe6\x10\xc1<\xa7eYT5\xa1\xa4\xac\xe1\xdb\x15:\xa4\x9d\x0c\xfa5K\x00\xf6.\xaa\xeb\x86\xd5y\xcdHY\x954\x8e\xbc*h\x8c\x8e!L7Y\xe6\'\xeb\x82WZ\xcf>8\x1ed\x87\x851X\xd8c\xe6\xbc\x17Z\x89\x8f\xac \x84e\xde\n!]\x96\x17i\xb5\x02{{\xc2z0\x1e\x0f#7\x9cw3v\x992\x9d\xfc\xc2c8\xea[/EP\xd6\xbc\xce\x84\xd0\xce\xab\xf7`\'\x1f\xacS\xd2\xc7\xd2\xfb\x94\x02N\xdc\x04\x0f\xee\xba\x19X\x03TtW\xd7\xb4\xd9\x92\n\xbcX\xa7;\xb0\x9b\'\x10$?F\xfd\xf3CzPt\x8aU\xef\xb8\xc8\x8b-\x18\xed\xec<\xe0\x83\x85\x08!\xf8"[\xb0\xd3j\x82h\x93\xb8\xcf\xd8\x9b\xba\xda\xd0\x92\x14\xa4a\rc\reM\xfd\x87=X;h\xd9j;\xe0db\x17\xc2\x02\xbd\xb0F\xc2in#\xfb:\xb6\xc4x\x15\xd6\x9f\x8a\xaf\xcf)\x0b^\xbc\xe7i\x11\x80\x8b\x00D\x01\xd8/\x82x\xf6\xd8\xf7J(\xae/\x11p\x1f+\xc4p\t:\xfe\xfd\xdf\xa3Y\xfa\xae4\x7f\x00\xc5\xa5\x95\xa1\xe2\x01\x00\x00\r\n0\r\n\r\n""" + r = Response(s) + assert r.version == '1.1' + assert r.status == '200' + assert r.reason == 'OK' + + def test_multicookie_response(self): + s = """HTTP/1.x 200 OK\r\nSet-Cookie: first_cookie=cookie1; path=/; domain=.example.com\r\nSet-Cookie: second_cookie=cookie2; path=/; domain=.example.com\r\nContent-Length: 0\r\n\r\n""" + r = Response(s) + assert type(r.headers['set-cookie']) is list + assert len(r.headers['set-cookie']) == 2 + + def test_request_version(self): + s = """GET / HTTP/1.0\r\n\r\n""" + r = Request(s) + assert r.method == 'GET' + assert r.uri == '/' + assert r.version == '1.0' + + s = """GET /\r\n\r\n""" + r = Request(s) + assert r.method == 'GET' + assert r.uri == '/' + assert r.version == '0.9' + + s = """GET / CHEESE/1.0\r\n\r\n""" + try: + r = Request(s) + assert "invalid protocol version parsed!" + except: + pass + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/icmp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/icmp.py new file mode 100644 index 00000000..37cdec05 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/icmp.py @@ -0,0 +1,122 @@ +# $Id: icmp.py 45 2007-08-03 00:05:22Z jon.oberheide $ + +"""Internet Control Message Protocol.""" + +import dpkt, ip + +# Types (icmp_type) and codes (icmp_code) - +# http://www.iana.org/assignments/icmp-parameters + +ICMP_CODE_NONE = 0 # for types without codes +ICMP_ECHOREPLY = 0 # echo reply +ICMP_UNREACH = 3 # dest unreachable, codes: +ICMP_UNREACH_NET = 0 # bad net +ICMP_UNREACH_HOST = 1 # bad host +ICMP_UNREACH_PROTO = 2 # bad protocol +ICMP_UNREACH_PORT = 3 # bad port +ICMP_UNREACH_NEEDFRAG = 4 # IP_DF caused drop +ICMP_UNREACH_SRCFAIL = 5 # src route failed +ICMP_UNREACH_NET_UNKNOWN = 6 # unknown net +ICMP_UNREACH_HOST_UNKNOWN = 7 # unknown host +ICMP_UNREACH_ISOLATED = 8 # src host isolated +ICMP_UNREACH_NET_PROHIB = 9 # for crypto devs +ICMP_UNREACH_HOST_PROHIB = 10 # ditto +ICMP_UNREACH_TOSNET = 11 # bad tos for net +ICMP_UNREACH_TOSHOST = 12 # bad tos for host +ICMP_UNREACH_FILTER_PROHIB = 13 # prohibited access +ICMP_UNREACH_HOST_PRECEDENCE = 14 # precedence error +ICMP_UNREACH_PRECEDENCE_CUTOFF = 15 # precedence cutoff +ICMP_SRCQUENCH = 4 # packet lost, slow down +ICMP_REDIRECT = 5 # shorter route, codes: +ICMP_REDIRECT_NET = 0 # for network +ICMP_REDIRECT_HOST = 1 # for host +ICMP_REDIRECT_TOSNET = 2 # for tos and net +ICMP_REDIRECT_TOSHOST = 3 # for tos and host +ICMP_ALTHOSTADDR = 6 # alternate host address +ICMP_ECHO = 8 # echo service +ICMP_RTRADVERT = 9 # router advertise, codes: +ICMP_RTRADVERT_NORMAL = 0 # normal +ICMP_RTRADVERT_NOROUTE_COMMON = 16 # selective routing +ICMP_RTRSOLICIT = 10 # router solicitation +ICMP_TIMEXCEED = 11 # time exceeded, code: +ICMP_TIMEXCEED_INTRANS = 0 # ttl==0 in transit +ICMP_TIMEXCEED_REASS = 1 # ttl==0 in reass +ICMP_PARAMPROB = 12 # ip header bad +ICMP_PARAMPROB_ERRATPTR = 0 # req. opt. absent +ICMP_PARAMPROB_OPTABSENT = 1 # req. opt. absent +ICMP_PARAMPROB_LENGTH = 2 # bad length +ICMP_TSTAMP = 13 # timestamp request +ICMP_TSTAMPREPLY = 14 # timestamp reply +ICMP_INFO = 15 # information request +ICMP_INFOREPLY = 16 # information reply +ICMP_MASK = 17 # address mask request +ICMP_MASKREPLY = 18 # address mask reply +ICMP_TRACEROUTE = 30 # traceroute +ICMP_DATACONVERR = 31 # data conversion error +ICMP_MOBILE_REDIRECT = 32 # mobile host redirect +ICMP_IP6_WHEREAREYOU = 33 # IPv6 where-are-you +ICMP_IP6_IAMHERE = 34 # IPv6 i-am-here +ICMP_MOBILE_REG = 35 # mobile registration req +ICMP_MOBILE_REGREPLY = 36 # mobile registration reply +ICMP_DNS = 37 # domain name request +ICMP_DNSREPLY = 38 # domain name reply +ICMP_SKIP = 39 # SKIP +ICMP_PHOTURIS = 40 # Photuris +ICMP_PHOTURIS_UNKNOWN_INDEX = 0 # unknown sec index +ICMP_PHOTURIS_AUTH_FAILED = 1 # auth failed +ICMP_PHOTURIS_DECOMPRESS_FAILED = 2 # decompress failed +ICMP_PHOTURIS_DECRYPT_FAILED = 3 # decrypt failed +ICMP_PHOTURIS_NEED_AUTHN = 4 # no authentication +ICMP_PHOTURIS_NEED_AUTHZ = 5 # no authorization +ICMP_TYPE_MAX = 40 + +class ICMP(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 8), + ('code', 'B', 0), + ('sum', 'H', 0) + ) + class Echo(dpkt.Packet): + __hdr__ = (('id', 'H', 0), ('seq', 'H', 0)) + class Quote(dpkt.Packet): + __hdr__ = (('pad', 'I', 0),) + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.ip = ip.IP(self.data) + class Unreach(Quote): + __hdr__ = (('pad', 'H', 0), ('mtu', 'H', 0)) + class Quench(Quote): + pass + class Redirect(Quote): + __hdr__ = (('gw', 'I', 0),) + class ParamProbe(Quote): + __hdr__ = (('ptr', 'B', 0), ('pad1', 'B', 0), ('pad2', 'H', 0)) + class TimeExceed(Quote): + pass + + _typesw = { 0:Echo, 3:Unreach, 4:Quench, 5:Redirect, 8:Echo, + 11:TimeExceed } + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._typesw[self.type](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + pass + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) + +if __name__ == '__main__': + import unittest + + class ICMPTestCase(unittest.TestCase): + def test_ICMP(self): + s = '\x03\x0a\x6b\x19\x00\x00\x00\x00\x45\x00\x00\x28\x94\x1f\x00\x00\xe3\x06\x99\xb4\x23\x2b\x24\x00\xde\x8e\x84\x42\xab\xd1\x00\x50\x00\x35\xe1\x29\x20\xd9\x00\x00\x00\x22\x9b\xf0\xe2\x04\x65\x6b' + icmp = ICMP(s) + self.failUnless(str(icmp) == s) + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/icmp6.py b/scripts/external_libs/dpkt-1.8.6/dpkt/icmp6.py new file mode 100644 index 00000000..5f1d4dae --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/icmp6.py @@ -0,0 +1,72 @@ +# $Id: icmp6.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Internet Control Message Protocol for IPv6.""" + +import dpkt, ip6 + +ICMP6_DST_UNREACH = 1 # dest unreachable, codes: +ICMP6_PACKET_TOO_BIG = 2 # packet too big +ICMP6_TIME_EXCEEDED = 3 # time exceeded, code: +ICMP6_PARAM_PROB = 4 # ip6 header bad + +ICMP6_ECHO_REQUEST = 128 # echo service +ICMP6_ECHO_REPLY = 129 # echo reply +MLD_LISTENER_QUERY = 130 # multicast listener query +MLD_LISTENER_REPORT = 131 # multicast listener report +MLD_LISTENER_DONE = 132 # multicast listener done + +# RFC2292 decls +ICMP6_MEMBERSHIP_QUERY = 130 # group membership query +ICMP6_MEMBERSHIP_REPORT = 131 # group membership report +ICMP6_MEMBERSHIP_REDUCTION = 132 # group membership termination + +ND_ROUTER_SOLICIT = 133 # router solicitation +ND_ROUTER_ADVERT = 134 # router advertisment +ND_NEIGHBOR_SOLICIT = 135 # neighbor solicitation +ND_NEIGHBOR_ADVERT = 136 # neighbor advertisment +ND_REDIRECT = 137 # redirect + +ICMP6_ROUTER_RENUMBERING = 138 # router renumbering + +ICMP6_WRUREQUEST = 139 # who are you request +ICMP6_WRUREPLY = 140 # who are you reply +ICMP6_FQDN_QUERY = 139 # FQDN query +ICMP6_FQDN_REPLY = 140 # FQDN reply +ICMP6_NI_QUERY = 139 # node information request +ICMP6_NI_REPLY = 140 # node information reply + +ICMP6_MAXTYPE = 201 + +class ICMP6(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('code', 'B', 0), + ('sum', 'H', 0) + ) + class Error(dpkt.Packet): + __hdr__ = (('pad', 'I', 0), ) + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.ip6 = ip6.IP6(self.data) + class Unreach(Error): + pass + class TooBig(Error): + __hdr__ = (('mtu', 'I', 1232), ) + class TimeExceed(Error): + pass + class ParamProb(Error): + __hdr__ = (('ptr', 'I', 0), ) + + class Echo(dpkt.Packet): + __hdr__ = (('id', 'H', 0), ('seq', 'H', 0)) + + _typesw = { 1:Unreach, 2:TooBig, 3:TimeExceed, 4:ParamProb, + 128:Echo, 129:Echo } + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._typesw[self.type](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/ieee80211.py b/scripts/external_libs/dpkt-1.8.6/dpkt/ieee80211.py new file mode 100644 index 00000000..8f41e0ac --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/ieee80211.py @@ -0,0 +1,706 @@ +# $Id: 80211.py 53 2008-12-18 01:22:57Z jon.oberheide $ + +"""IEEE 802.11.""" + +import dpkt, socket, struct + +# Frame Types +MGMT_TYPE = 0 +CTL_TYPE = 1 +DATA_TYPE = 2 + +# Frame Sub-Types +M_ASSOC_REQ = 0 +M_ASSOC_RESP = 1 +M_REASSOC_REQ = 2 +M_REASSOC_RESP = 3 +M_PROBE_REQ = 4 +M_PROBE_RESP = 5 +M_BEACON = 8 +M_ATIM = 9 +M_DISASSOC = 10 +M_AUTH = 11 +M_DEAUTH = 12 +M_ACTION = 13 +C_BLOCK_ACK_REQ = 8 +C_BLOCK_ACK = 9 +C_PS_POLL = 10 +C_RTS = 11 +C_CTS = 12 +C_ACK = 13 +C_CF_END = 14 +C_CF_END_ACK = 15 +D_DATA = 0 +D_DATA_CF_ACK = 1 +D_DATA_CF_POLL = 2 +D_DATA_CF_ACK_POLL = 3 +D_NULL = 4 +D_CF_ACK = 5 +D_CF_POLL = 6 +D_CF_ACK_POLL = 7 +D_QOS_DATA = 8 +D_QOS_CF_ACK = 9 +D_QOS_CF_POLL = 10 +D_QOS_CF_ACK_POLL = 11 +D_QOS_NULL = 12 +D_QOS_CF_POLL_EMPTY = 14 + +TO_DS_FLAG = 10 +FROM_DS_FLAG = 1 +INTER_DS_FLAG = 11 + +# Bitshifts for Frame Control +_VERSION_MASK = 0x0300 +_TYPE_MASK = 0x0c00 +_SUBTYPE_MASK = 0xf000 +_TO_DS_MASK = 0x0001 +_FROM_DS_MASK = 0x0002 +_MORE_FRAG_MASK = 0x0004 +_RETRY_MASK = 0x0008 +_PWR_MGT_MASK = 0x0010 +_MORE_DATA_MASK = 0x0020 +_WEP_MASK = 0x0040 +_ORDER_MASK = 0x0080 +_VERSION_SHIFT = 8 +_TYPE_SHIFT = 10 +_SUBTYPE_SHIFT = 12 +_TO_DS_SHIFT = 0 +_FROM_DS_SHIFT = 1 +_MORE_FRAG_SHIFT = 2 +_RETRY_SHIFT = 3 +_PWR_MGT_SHIFT = 4 +_MORE_DATA_SHIFT = 5 +_WEP_SHIFT = 6 +_ORDER_SHIFT = 7 + +# IEs +IE_SSID = 0 +IE_RATES = 1 +IE_FH = 2 +IE_DS = 3 +IE_CF = 4 +IE_TIM = 5 +IE_IBSS = 6 +IE_HT_CAPA = 45 +IE_ESR = 50 +IE_HT_INFO = 61 + +FCS_LENGTH = 4 + +FRAMES_WITH_CAPABILITY = [ M_BEACON, + M_ASSOC_RESP, + M_ASSOC_REQ, + M_REASSOC_REQ, + ] + +# Block Ack control constants +_ACK_POLICY_SHIFT = 0 +_MULTI_TID_SHIFT = 1 +_COMPRESSED_SHIFT = 2 +_TID_SHIFT = 12 + +_ACK_POLICY_MASK = 0x0001 +_MULTI_TID_MASK = 0x0002 +_COMPRESSED_MASK = 0x0004 +_TID_MASK = 0xf000 + +_COMPRESSED_BMP_LENGTH = 8 +_BMP_LENGTH = 128 + +# Action frame categories +BLOCK_ACK = 3 + +# Block ack category action codes +BLOCK_ACK_CODE_REQUEST = 0 +BLOCK_ACK_CODE_RESPONSE = 1 + +class IEEE80211(dpkt.Packet): + __hdr__ = ( + ('framectl', 'H', 0), + ('duration', 'H', 0) + ) + + def _get_version(self): return (self.framectl & _VERSION_MASK) >> _VERSION_SHIFT + def _set_version(self, val): self.framectl = (val << _VERSION_SHIFT) | (self.framectl & ~_VERSION_MASK) + def _get_type(self): return (self.framectl & _TYPE_MASK) >> _TYPE_SHIFT + def _set_type(self, val): self.framectl = (val << _TYPE_SHIFT) | (self.framectl & ~_TYPE_MASK) + def _get_subtype(self): return (self.framectl & _SUBTYPE_MASK) >> _SUBTYPE_SHIFT + def _set_subtype(self, val): self.framectl = (val << _SUBTYPE_SHIFT) | (self.framectl & ~_SUBTYPE_MASK) + def _get_to_ds(self): return (self.framectl & _TO_DS_MASK) >> _TO_DS_SHIFT + def _set_to_ds(self, val): self.framectl = (val << _TO_DS_SHIFT) | (self.framectl & ~_TO_DS_MASK) + def _get_from_ds(self): return (self.framectl & _FROM_DS_MASK) >> _FROM_DS_SHIFT + def _set_from_ds(self, val): self.framectl = (val << _FROM_DS_SHIFT) | (self.framectl & ~_FROM_DS_MASK) + def _get_more_frag(self): return (self.framectl & _MORE_FRAG_MASK) >> _MORE_FRAG_SHIFT + def _set_more_frag(self, val): self.framectl = (val << _MORE_FRAG_SHIFT) | (self.framectl & ~_MORE_FRAG_MASK) + def _get_retry(self): return (self.framectl & _RETRY_MASK) >> _RETRY_SHIFT + def _set_retry(self, val): self.framectl = (val << _RETRY_SHIFT) | (self.framectl & ~_RETRY_MASK) + def _get_pwr_mgt(self): return (self.framectl & _PWR_MGT_MASK) >> _PWR_MGT_SHIFT + def _set_pwr_mgt(self, val): self.framectl = (val << _PWR_MGT_SHIFT) | (self.framectl & ~_PWR_MGT_MASK) + def _get_more_data(self): return (self.framectl & _MORE_DATA_MASK) >> _MORE_DATA_SHIFT + def _set_more_data(self, val): self.framectl = (val << _MORE_DATA_SHIFT) | (self.framectl & ~_MORE_DATA_MASK) + def _get_wep(self): return (self.framectl & _WEP_MASK) >> _WEP_SHIFT + def _set_wep(self, val): self.framectl = (val << _WEP_SHIFT) | (self.framectl & ~_WEP_MASK) + def _get_order(self): return (self.framectl & _ORDER_MASK) >> _ORDER_SHIFT + def _set_order(self, val): self.framectl = (val << _ORDER_SHIFT) | (self.framectl & ~_ORDER_MASK) + + version = property(_get_version, _set_version) + type = property(_get_type, _set_type) + subtype = property(_get_subtype, _set_subtype) + to_ds = property(_get_to_ds, _set_to_ds) + from_ds = property(_get_from_ds, _set_from_ds) + more_frag = property(_get_more_frag, _set_more_frag) + retry = property(_get_retry, _set_retry) + pwr_mgt = property(_get_pwr_mgt, _set_pwr_mgt) + more_data = property(_get_more_data, _set_more_data) + wep = property(_get_wep, _set_wep) + order = property(_get_order, _set_order) + + def unpack_ies(self, buf): + self.ies = [] + + ie_decoder = { + IE_SSID: ('ssid', self.IE), + IE_RATES: ('rate', self.IE), + IE_FH: ('fh', self.FH), + IE_DS: ('ds', self.DS), + IE_CF: ('cf', self.CF), + IE_TIM: ('tim', self.TIM), + IE_IBSS: ('ibss', self.IBSS), + IE_HT_CAPA: ('ht_capa', self.IE), + IE_ESR: ('esr', self.IE), + IE_HT_INFO: ('ht_info', self.IE) + } + + # each IE starts with an ID and a length + while len(buf) > FCS_LENGTH: + ie_id = struct.unpack('B',(buf[0]))[0] + try: + parser = ie_decoder[ie_id][1] + name = ie_decoder[ie_id][0] + except KeyError: + parser = self.IE + name = 'ie_' + str(ie_id) + ie = parser(buf) + + ie.data = buf[2:2+ie.len] + setattr(self, name, ie) + self.ies.append(ie) + buf = buf[2+ie.len:] + + class Capability: + def __init__(self, field): + self.ess = field & 1 + self.ibss = (field >> 1) & 1 + self.cf_poll = (field >> 2) & 1 + self.cf_poll_req = (field >> 3) & 1 + self.privacy = (field >> 4) & 1 + self.short_preamble = (field >> 5) & 1 + self.pbcc = (field >> 6) & 1 + self.hopping = (field >> 7) & 1 + self.spec_mgmt = (field >> 8) & 1 + self.qos = (field >> 9) & 1 + self.short_slot = (field >> 10) & 1 + self.apsd = (field >> 11) & 1 + self.dsss = (field >> 13) & 1 + self.delayed_blk_ack = (field >> 14) & 1 + self.imm_blk_ack = (field >> 15) & 1 + + def __init__(self, *args, **kwargs): + if kwargs and 'fcs' in kwargs: + self.fcs_present = kwargs.pop('fcs') + else: + self.fcs_present = False + + super(IEEE80211, self).__init__(*args, **kwargs) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = buf[self.__hdr_len__:] + + m_decoder = { + M_BEACON: ('beacon', self.Beacon), + M_ASSOC_REQ: ('assoc_req', self.Assoc_Req), + M_ASSOC_RESP: ('assoc_resp', self.Assoc_Resp), + M_DISASSOC: ('diassoc', self.Disassoc), + M_REASSOC_REQ: ('reassoc_req', self.Reassoc_Req), + M_REASSOC_RESP: ('reassoc_resp',self.Assoc_Resp), + M_AUTH: ('auth', self.Auth), + M_PROBE_RESP: ('probe_resp', self.Beacon), + M_DEAUTH: ('deauth', self.Deauth), + M_ACTION: ('action', self.Action) + } + + c_decoder = { + C_RTS: ('rts', self.RTS), + C_CTS: ('cts', self.CTS), + C_ACK: ('ack', self.ACK), + C_BLOCK_ACK_REQ:('bar', self.BlockAckReq), + C_BLOCK_ACK: ('back', self.BlockAck), + C_CF_END: ('cf_end', self.CFEnd), + } + + d_dsData = { + 0 : self.Data, + FROM_DS_FLAG : self.DataFromDS, + TO_DS_FLAG : self.DataToDS, + INTER_DS_FLAG : self.DataInterDS + } + + + # For now decode everything with DATA. Haven't checked about other QoS + # additions + d_decoder = { + # modified the decoder to consider the ToDS and FromDS flags + # Omitting the 11 case for now + D_DATA: ('data_frame', d_dsData), + D_NULL: ('data_frame', d_dsData), + D_QOS_DATA: ('data_frame', d_dsData), + D_QOS_NULL: ('data_frame', d_dsData) + } + + decoder = { + MGMT_TYPE:m_decoder, + CTL_TYPE:c_decoder, + DATA_TYPE:d_decoder + } + + # Strip off the FCS field + if self.fcs_present: + self.fcs = struct.unpack('I', self.data[-1 * FCS_LENGTH:])[0] + self.data = self.data[0: -1 * FCS_LENGTH] + + if self.type == MGMT_TYPE: + self.mgmt = self.MGMT_Frame(self.data) + self.data = self.mgmt.data + if self.subtype == M_PROBE_REQ: + self.unpack_ies(self.data) + return + if self.subtype == M_ATIM: + return + + try: + parser = decoder[self.type][self.subtype][1] + name = decoder[self.type][self.subtype][0] + except KeyError: + print "Key error:", self.type, self.subtype + return + + if self.type == DATA_TYPE: + # need to grab the ToDS/FromDS info + parser = parser[self.to_ds*10+self.from_ds] + + if self.type == MGMT_TYPE: + field = parser(self.mgmt.data) + else: + field = parser(self.data) + self.data = field + + setattr(self, name, field) + + if self.type == MGMT_TYPE: + self.ies = self.unpack_ies(field.data) + if self.subtype in FRAMES_WITH_CAPABILITY: + self.capability = self.Capability(socket.ntohs(field.capability)) + + if self.type == DATA_TYPE and self.subtype == D_QOS_DATA: + self.qos_data = self.QoS_Data(field.data) + field.data = self.qos_data.data + + self.data = field.data + + class BlockAckReq(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' *6), + ('ctl', 'H', 0), + ('seq', 'H', 0), + ) + + class BlockAck(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6), + ('ctl', 'H', 0), + ('seq', 'H', 0), + ) + + def _get_compressed(self): return (self.ctl & _COMPRESSED_MASK) >> _COMPRESSED_SHIFT + def _set_compressed(self, val): self.ctl = (val << _COMPRESSED_SHIFT) | (self.ctl & ~_COMPRESSED_MASK) + + def _get_ack_policy(self): return (self.ctl & _ACK_POLICY_MASK) >> _ACK_POLICY_SHIFT + def _set_ack_policy(self, val): self.ctl = (val << _ACK_POLICY_SHIFT) | (self.ctl & ~_ACK_POLICY_MASK) + + def _get_multi_tid(self): return (self.ctl & _MULTI_TID_MASK) >> _MULTI_TID_SHIFT + def _set_multi_tid(self, val): self.ctl = (val << _MULTI_TID_SHIFT) | (self.ctl & ~_MULTI_TID_MASK) + + def _get_tid(self): return (self.ctl & _TID_MASK) >> _TID_SHIFT + def _set_tid(self, val): self.ctl = (val << _TID_SHIFT) | (self.ctl & ~_TID_MASK) + + compressed = property(_get_compressed, _set_compressed) + ack_policy = property(_get_ack_policy, _set_ack_policy) + multi_tid = property(_get_multi_tid, _set_multi_tid) + tid = property(_get_tid, _set_tid) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = buf[self.__hdr_len__:] + self.ctl = socket.ntohs(self.ctl) + + if self.compressed: + self.bmp = struct.unpack('8s', self.data[0:_COMPRESSED_BMP_LENGTH])[0] + else: + self.bmp = struct.unpack('128s', self.data[0:_BMP_LENGTH])[0] + self.data = self.data[len(self.__hdr__) + len(self.bmp):] + + class RTS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ('src', '6s', '\x00' * 6) + ) + + class CTS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ) + + class ACK(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' * 6), + ) + + class CFEnd(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' *6), + ('src', '6s', '\x00' *6), + ) + + class MGMT_Frame(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00' *6), + ('src', '6s', '\x00' *6), + ('bssid', '6s', '\x00' *6), + ('frag_seq', 'H', 0) + ) + + class Beacon(dpkt.Packet): + __hdr__ = ( + ('timestamp', 'Q', 0), + ('interval', 'H', 0), + ('capability', 'H', 0) + ) + + class Disassoc(dpkt.Packet): + __hdr__ = ( + ('reason', 'H', 0), + ) + + class Assoc_Req(dpkt.Packet): + __hdr__ = ( + ('capability', 'H', 0), + ('interval', 'H', 0) + ) + + class Assoc_Resp(dpkt.Packet): + __hdr__ = ( + ('capability', 'H', 0), + ('status', 'H', 0), + ('aid', 'H', 0) + ) + + class Reassoc_Req(dpkt.Packet): + __hdr__ = ( + ('capability', 'H', 0), + ('interval', 'H', 0), + ('current_ap', '6s', '\x00'*6) + ) + + # This obviously doesn't support any of AUTH frames that use encryption + class Auth(dpkt.Packet): + __hdr__ = ( + ('algorithm', 'H', 0), + ('auth_seq', 'H', 0), + ) + + class Deauth(dpkt.Packet): + __hdr__ = ( + ('reason', 'H', 0), + ) + + class Action(dpkt.Packet): + __hdr__ = ( + ('category', 'B', 0), + ('code', 'B', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + + action_parser = { + BLOCK_ACK: { BLOCK_ACK_CODE_REQUEST: ('block_ack_request', IEEE80211.BlockAckActionRequest), + BLOCK_ACK_CODE_RESPONSE: ('block_ack_response', IEEE80211.BlockAckActionResponse), + }, + } + + decoder = action_parser[self.category][self.code][1] + field_name = action_parser[self.category][self.code][0] + field = decoder(self.data) + setattr(self, field_name, field) + self.data = field.data + + class BlockAckActionRequest(dpkt.Packet): + __hdr__ = ( + ('dialog', 'B', 0), + ('parameters', 'H', 0), + ('timeout', 'H', 0), + ('starting_seq', 'H', 0), + ) + + class BlockAckActionResponse(dpkt.Packet): + __hdr__ = ( + ('dialog', 'B', 0), + ('status_code', 'H', 0), + ('parameters', 'H', 0), + ('timeout', 'H', 0), + ) + + class Data(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00'*6), + ('src', '6s', '\x00'*6), + ('bssid', '6s', '\x00'*6), + ('frag_seq', 'H', 0) + ) + + + class DataFromDS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00'*6), + ('bssid', '6s', '\x00'*6), + ('src', '6s', '\x00'*6), + ('frag_seq', 'H', 0) + ) + + + class DataToDS(dpkt.Packet): + __hdr__ = ( + ('bssid', '6s', '\x00'*6), + ('src', '6s', '\x00'*6), + ('dst', '6s', '\x00'*6), + ('frag_seq', 'H', 0) + ) + + class DataInterDS(dpkt.Packet): + __hdr__ = ( + ('dst', '6s', '\x00'*6), + ('src', '6s', '\x00'*6), + ('da', '6s', '\x00'*6), + ('frag_seq', 'H', 0), + ('sa', '6s', '\x00'*6) + ) + + class QoS_Data(dpkt.Packet): + __hdr__ = ( + ('control', 'H', 0), + ) + + class IE(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0) + ) + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.info = buf[2:self.len+ 2] + + class FH(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('tu', 'H', 0), + ('hopset', 'B', 0), + ('hoppattern', 'B', 0), + ('hopindex', 'B', 0) + ) + + class DS(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('ch', 'B', 0) + ) + + class CF(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('count', 'B', 0), + ('period', 'B', 0), + ('max', 'H', 0), + ('dur', 'H', 0) + ) + + class TIM(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('count', 'B', 0), + ('period', 'B', 0), + ('ctrl', 'H', 0) + ) + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.bitmap = buf[5:self.len+ 2] + + class IBSS(dpkt.Packet): + __hdr__ = ( + ('id', 'B', 0), + ('len', 'B', 0), + ('atim', 'H', 0) + ) + + + +if __name__ == '__main__': + import unittest + + class IEEE80211TestCase(unittest.TestCase): + def test_802211_ack(self): + s = '\xd4\x00\x00\x00\x00\x12\xf0\xb6\x1c\xa4\xff\xff\xff\xff' + ieee = IEEE80211(s, fcs = True) + self.failUnless(ieee.version == 0) + self.failUnless(ieee.type == CTL_TYPE) + self.failUnless(ieee.subtype == C_ACK) + self.failUnless(ieee.to_ds == 0) + self.failUnless(ieee.from_ds == 0) + self.failUnless(ieee.pwr_mgt == 0) + self.failUnless(ieee.more_data == 0) + self.failUnless(ieee.wep == 0) + self.failUnless(ieee.order == 0) + self.failUnless(ieee.ack.dst == '\x00\x12\xf0\xb6\x1c\xa4') + fcs = struct.unpack('I', s[-4:])[0] + self.failUnless(ieee.fcs == fcs) + + def test_80211_beacon(self): + s = '\x80\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x26\xcb\x18\x6a\x30\x00\x26\xcb\x18\x6a\x30\xa0\xd0\x77\x09\x32\x03\x8f\x00\x00\x00\x66\x00\x31\x04\x00\x04\x43\x41\x45\x4e\x01\x08\x82\x84\x8b\x0c\x12\x96\x18\x24\x03\x01\x01\x05\x04\x00\x01\x00\x00\x07\x06\x55\x53\x20\x01\x0b\x1a\x0b\x05\x00\x00\x6e\x00\x00\x2a\x01\x02\x2d\x1a\x6e\x18\x1b\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x28\x00\x32\x04\x30\x48\x60\x6c\x36\x03\x51\x63\x03\x3d\x16\x01\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x1e\x05\x00\x8f\x00\x0f\x00\xff\x03\x59\x00\x63\x73\x65\x2d\x33\x39\x31\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x96\x06\x00\x40\x96\x00\x14\x00\xdd\x18\x00\x50\xf2\x02\x01\x01\x80\x00\x03\xa4\x00\x00\x27\xa4\x00\x00\x42\x43\x5e\x00\x62\x32\x2f\x00\xdd\x06\x00\x40\x96\x01\x01\x04\xdd\x05\x00\x40\x96\x03\x05\xdd\x05\x00\x40\x96\x0b\x09\xdd\x08\x00\x40\x96\x13\x01\x00\x34\x01\xdd\x05\x00\x40\x96\x14\x05' + ieee = IEEE80211(s, fcs = True) + self.failUnless(ieee.version == 0) + self.failUnless(ieee.type == MGMT_TYPE) + self.failUnless(ieee.subtype == M_BEACON) + self.failUnless(ieee.to_ds == 0) + self.failUnless(ieee.from_ds == 0) + self.failUnless(ieee.pwr_mgt == 0) + self.failUnless(ieee.more_data == 0) + self.failUnless(ieee.wep == 0) + self.failUnless(ieee.order == 0) + self.failUnless(ieee.mgmt.dst == '\xff\xff\xff\xff\xff\xff') + self.failUnless(ieee.mgmt.src == '\x00\x26\xcb\x18\x6a\x30') + self.failUnless(ieee.beacon.capability == 0x3104) + self.failUnless(ieee.capability.privacy == 1) + self.failUnless(ieee.ssid.data == 'CAEN') + self.failUnless(ieee.rate.data == '\x82\x84\x8b\x0c\x12\x96\x18\x24') + self.failUnless(ieee.ds.data == '\x01') + self.failUnless(ieee.tim.data == '\x00\x01\x00\x00') + fcs = struct.unpack('I', s[-4:])[0] + self.failUnless(ieee.fcs == fcs) + + def test_80211_data(self): + s = '\x08\x09\x20\x00\x00\x26\xcb\x17\x3d\x91\x00\x16\x44\xb0\xae\xc6\x00\x02\xb3\xd6\x26\x3c\x80\x7e\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04\xac\x17\x00\x00' + ieee = IEEE80211(s, fcs = True) + self.failUnless(ieee.type == DATA_TYPE) + self.failUnless(ieee.subtype == D_DATA) + self.failUnless(ieee.data_frame.dst == '\x00\x02\xb3\xd6\x26\x3c') + self.failUnless(ieee.data_frame.src == '\x00\x16\x44\xb0\xae\xc6') + self.failUnless(ieee.data_frame.frag_seq == 0x807e) + self.failUnless(ieee.data == '\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04') + self.failUnless(ieee.fcs == struct.unpack('I', '\xac\x17\x00\x00')[0]) + + import llc, ip + llc_pkt = llc.LLC(ieee.data_frame.data) + ip_pkt = ip.IP(llc_pkt.data) + self.failUnless(ip_pkt.dst == '\x3f\xf5\xd1\x69') + + def test_80211_data_qos(self): + s = '\x88\x01\x3a\x01\x00\x26\xcb\x17\x44\xf0\x00\x23\xdf\xc9\xc0\x93\x00\x26\xcb\x17\x44\xf0\x20\x7b\x00\x00\xaa\xaa\x03\x00\x00\x00\x88\x8e\x01\x00\x00\x74\x02\x02\x00\x74\x19\x80\x00\x00\x00\x6a\x16\x03\x01\x00\x65\x01\x00\x00\x61\x03\x01\x4b\x4c\xa7\x7e\x27\x61\x6f\x02\x7b\x3c\x72\x39\xe3\x7b\xd7\x43\x59\x91\x7f\xaa\x22\x47\x51\xb6\x88\x9f\x85\x90\x87\x5a\xd1\x13\x20\xe0\x07\x00\x00\x68\xbd\xa4\x13\xb0\xd5\x82\x7e\xc7\xfb\xe7\xcc\xab\x6e\x5d\x5a\x51\x50\xd4\x45\xc5\xa1\x65\x53\xad\xb5\x88\x5b\x00\x1a\x00\x2f\x00\x05\x00\x04\x00\x35\x00\x0a\x00\x09\x00\x03\x00\x08\x00\x33\x00\x39\x00\x16\x00\x15\x00\x14\x01\x00\xff\xff\xff\xff' + ieee = IEEE80211(s, fcs = True) + self.failUnless(ieee.type == DATA_TYPE) + self.failUnless(ieee.subtype == D_QOS_DATA) + self.failUnless(ieee.data_frame.dst == '\x00\x26\xcb\x17\x44\xf0') + self.failUnless(ieee.data_frame.src == '\x00\x23\xdf\xc9\xc0\x93') + self.failUnless(ieee.data_frame.frag_seq == 0x207b) + self.failUnless(ieee.data == '\xaa\xaa\x03\x00\x00\x00\x88\x8e\x01\x00\x00\x74\x02\x02\x00\x74\x19\x80\x00\x00\x00\x6a\x16\x03\x01\x00\x65\x01\x00\x00\x61\x03\x01\x4b\x4c\xa7\x7e\x27\x61\x6f\x02\x7b\x3c\x72\x39\xe3\x7b\xd7\x43\x59\x91\x7f\xaa\x22\x47\x51\xb6\x88\x9f\x85\x90\x87\x5a\xd1\x13\x20\xe0\x07\x00\x00\x68\xbd\xa4\x13\xb0\xd5\x82\x7e\xc7\xfb\xe7\xcc\xab\x6e\x5d\x5a\x51\x50\xd4\x45\xc5\xa1\x65\x53\xad\xb5\x88\x5b\x00\x1a\x00\x2f\x00\x05\x00\x04\x00\x35\x00\x0a\x00\x09\x00\x03\x00\x08\x00\x33\x00\x39\x00\x16\x00\x15\x00\x14\x01\x00') + self.failUnless(ieee.qos_data.control == 0x0) + self.failUnless(ieee.fcs == struct.unpack('I', '\xff\xff\xff\xff')[0]) + + def test_bug(self): + s = '\x88\x41\x2c\x00\x00\x26\xcb\x17\x44\xf0\x00\x1e\x52\x97\x14\x11\x00\x1f\x6d\xe8\x18\x00\xd0\x07\x00\x00\x6f\x00\x00\x20\x00\x00\x00\x00' + ieee = IEEE80211(s) + self.failUnless(ieee.wep == 1) + + def test_data_ds(self): + # verifying the ToDS and FromDS fields and that we're getting the + # correct values + + s = '\x08\x03\x00\x00\x01\x0b\x85\x00\x00\x00\x00\x26\xcb\x18\x73\x50\x01\x0b\x85\x00\x00\x00\x00\x89\x00\x26\xcb\x18\x73\x50' + ieee = IEEE80211(s) + self.failUnless(ieee.type == DATA_TYPE) + self.failUnless(ieee.to_ds == 1) + self.failUnless(ieee.from_ds == 1) + self.failUnless(ieee.data_frame.sa == '\x00\x26\xcb\x18\x73\x50') + self.failUnless(ieee.data_frame.src == '\x00\x26\xcb\x18\x73\x50') + self.failUnless(ieee.data_frame.dst == '\x01\x0b\x85\x00\x00\x00') + self.failUnless(ieee.data_frame.da == '\x01\x0b\x85\x00\x00\x00') + + s = '\x88\x41\x50\x01\x00\x26\xcb\x17\x48\xc1\x00\x24\x2c\xe7\xfe\x8a\xff\xff\xff\xff\xff\xff\x80\xa0\x00\x00\x09\x1a\x00\x20\x00\x00\x00\x00' + ieee = IEEE80211(s) + self.failUnless(ieee.type == DATA_TYPE) + self.failUnless(ieee.to_ds == 1) + self.failUnless(ieee.from_ds == 0) + self.failUnless(ieee.data_frame.bssid == '\x00\x26\xcb\x17\x48\xc1') + self.failUnless(ieee.data_frame.src == '\x00\x24\x2c\xe7\xfe\x8a') + self.failUnless(ieee.data_frame.dst == '\xff\xff\xff\xff\xff\xff') + + s = '\x08\x02\x02\x01\x00\x02\x44\xac\x27\x70\x00\x1f\x33\x39\x75\x44\x00\x1f\x33\x39\x75\x44\x90\xa4' + ieee = IEEE80211(s) + self.failUnless(ieee.type == DATA_TYPE) + self.failUnless(ieee.to_ds == 0) + self.failUnless(ieee.from_ds == 1) + self.failUnless(ieee.data_frame.bssid == '\x00\x1f\x33\x39\x75\x44') + self.failUnless(ieee.data_frame.src == '\x00\x1f\x33\x39\x75\x44') + self.failUnless(ieee.data_frame.dst == '\x00\x02\x44\xac\x27\x70') + + def test_compressed_block_ack(self): + s = '\x94\x00\x00\x00\x34\xc0\x59\xd6\x3f\x62\xb4\x75\x0e\x46\x83\xc1\x05\x50\x80\xee\x03\x00\x00\x00\x00\x00\x00\x00\xa2\xe4\x98\x45' + ieee = IEEE80211(s, fcs = True) + self.failUnless(ieee.type == CTL_TYPE) + self.failUnless(ieee.subtype == C_BLOCK_ACK) + self.failUnless(ieee.back.dst == '\x34\xc0\x59\xd6\x3f\x62') + self.failUnless(ieee.back.src == '\xb4\x75\x0e\x46\x83\xc1') + self.failUnless(ieee.back.compressed == 1) + self.failUnless(len(ieee.back.bmp) == 8) + self.failUnless(ieee.back.ack_policy == 1) + self.failUnless(ieee.back.tid == 5) + + def test_action_block_ack_request(self): + s = '\xd0\x00\x3a\x01\x00\x23\x14\x36\x52\x30\xb4\x75\x0e\x46\x83\xc1\xb4\x75\x0e\x46\x83\xc1\x70\x14\x03\x00\x0d\x02\x10\x00\x00\x40\x29\x06\x50\x33\x9e' + ieee = IEEE80211(s, fcs = True) + self.failUnless(ieee.type == MGMT_TYPE) + self.failUnless(ieee.subtype == M_ACTION) + self.failUnless(ieee.action.category == BLOCK_ACK) + self.failUnless(ieee.action.code == BLOCK_ACK_CODE_REQUEST) + self.failUnless(ieee.action.block_ack_request.timeout == 0) + parameters = struct.unpack('H', '\x10\x02')[0] + self.failUnless(ieee.action.block_ack_request.parameters == parameters) + + def test_action_block_ack_response(self): + s = '\xd0\x00\x3c\x00\xb4\x75\x0e\x46\x83\xc1\x00\x23\x14\x36\x52\x30\xb4\x75\x0e\x46\x83\xc1\xd0\x68\x03\x01\x0d\x00\x00\x02\x10\x88\x13\x9f\xc0\x0b\x75' + ieee = IEEE80211(s, fcs = True) + self.failUnless(ieee.type == MGMT_TYPE) + self.failUnless(ieee.subtype == M_ACTION) + self.failUnless(ieee.action.category == BLOCK_ACK) + self.failUnless(ieee.action.code == BLOCK_ACK_CODE_RESPONSE) + timeout = struct.unpack('H', '\x13\x88')[0] + self.failUnless(ieee.action.block_ack_response.timeout == timeout) + parameters = struct.unpack('H', '\x10\x02')[0] + self.failUnless(ieee.action.block_ack_response.parameters == parameters) + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/igmp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/igmp.py new file mode 100644 index 00000000..8031fa72 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/igmp.py @@ -0,0 +1,17 @@ +# $Id: igmp.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Internet Group Management Protocol.""" + +import dpkt + +class IGMP(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ('maxresp', 'B', 0), + ('sum', 'H', 0), + ('group', 'I', 0) + ) + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/ip.py b/scripts/external_libs/dpkt-1.8.6/dpkt/ip.py new file mode 100644 index 00000000..a8f9bd96 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/ip.py @@ -0,0 +1,301 @@ +# $Id: ip.py 87 2013-03-05 19:41:04Z andrewflnr@gmail.com $ + +"""Internet Protocol.""" + +import dpkt + +class IP(dpkt.Packet): + __hdr__ = ( + ('v_hl', 'B', (4 << 4) | (20 >> 2)), + ('tos', 'B', 0), + ('len', 'H', 20), + ('id', 'H', 0), + ('off', 'H', 0), + ('ttl', 'B', 64), + ('p', 'B', 0), + ('sum', 'H', 0), + ('src', '4s', '\x00' * 4), + ('dst', '4s', '\x00' * 4) + ) + _protosw = {} + opts = '' + + def _get_v(self): return self.v_hl >> 4 + def _set_v(self, v): self.v_hl = (v << 4) | (self.v_hl & 0xf) + v = property(_get_v, _set_v) + + def _get_hl(self): return self.v_hl & 0xf + def _set_hl(self, hl): self.v_hl = (self.v_hl & 0xf0) | hl + hl = property(_get_hl, _set_hl) + + def __len__(self): + return self.__hdr_len__ + len(self.opts) + len(self.data) + + def __str__(self): + if self.sum == 0: + self.sum = dpkt.in_cksum(self.pack_hdr() + self.opts) + if (self.p == 6 or self.p == 17) and \ + (self.off & (IP_MF|IP_OFFMASK)) == 0 and \ + isinstance(self.data, dpkt.Packet) and self.data.sum == 0: + # Set zeroed TCP and UDP checksums for non-fragments. + p = str(self.data) + s = dpkt.struct.pack('>4s4sxBH', self.src, self.dst, + self.p, len(p)) + s = dpkt.in_cksum_add(0, s) + s = dpkt.in_cksum_add(s, p) + self.data.sum = dpkt.in_cksum_done(s) + if self.p == 17 and self.data.sum == 0: + self.data.sum = 0xffff # RFC 768 + # XXX - skip transports which don't need the pseudoheader + return self.pack_hdr() + self.opts + str(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + ol = ((self.v_hl & 0xf) << 2) - self.__hdr_len__ + if ol < 0: + raise dpkt.UnpackError, 'invalid header length' + self.opts = buf[self.__hdr_len__:self.__hdr_len__ + ol] + if self.len: + buf = buf[self.__hdr_len__ + ol:self.len] + else: # very likely due to TCP segmentation offload + buf = buf[self.__hdr_len__ + ol:] + try: + self.data = self._protosw[self.p](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def set_proto(cls, p, pktclass): + cls._protosw[p] = pktclass + set_proto = classmethod(set_proto) + + def get_proto(cls, p): + return cls._protosw[p] + get_proto = classmethod(get_proto) + +# Type of service (ip_tos), RFC 1349 ("obsoleted by RFC 2474") +IP_TOS_DEFAULT = 0x00 # default +IP_TOS_LOWDELAY = 0x10 # low delay +IP_TOS_THROUGHPUT = 0x08 # high throughput +IP_TOS_RELIABILITY = 0x04 # high reliability +IP_TOS_LOWCOST = 0x02 # low monetary cost - XXX +IP_TOS_ECT = 0x02 # ECN-capable transport +IP_TOS_CE = 0x01 # congestion experienced + +# IP precedence (high 3 bits of ip_tos), hopefully unused +IP_TOS_PREC_ROUTINE = 0x00 +IP_TOS_PREC_PRIORITY = 0x20 +IP_TOS_PREC_IMMEDIATE = 0x40 +IP_TOS_PREC_FLASH = 0x60 +IP_TOS_PREC_FLASHOVERRIDE = 0x80 +IP_TOS_PREC_CRITIC_ECP = 0xa0 +IP_TOS_PREC_INTERNETCONTROL = 0xc0 +IP_TOS_PREC_NETCONTROL = 0xe0 + +# Fragmentation flags (ip_off) +IP_RF = 0x8000 # reserved +IP_DF = 0x4000 # don't fragment +IP_MF = 0x2000 # more fragments (not last frag) +IP_OFFMASK = 0x1fff # mask for fragment offset + +# Time-to-live (ip_ttl), seconds +IP_TTL_DEFAULT = 64 # default ttl, RFC 1122, RFC 1340 +IP_TTL_MAX = 255 # maximum ttl + +# Protocol (ip_p) - http://www.iana.org/assignments/protocol-numbers +IP_PROTO_IP = 0 # dummy for IP +IP_PROTO_HOPOPTS = IP_PROTO_IP # IPv6 hop-by-hop options +IP_PROTO_ICMP = 1 # ICMP +IP_PROTO_IGMP = 2 # IGMP +IP_PROTO_GGP = 3 # gateway-gateway protocol +IP_PROTO_IPIP = 4 # IP in IP +IP_PROTO_ST = 5 # ST datagram mode +IP_PROTO_TCP = 6 # TCP +IP_PROTO_CBT = 7 # CBT +IP_PROTO_EGP = 8 # exterior gateway protocol +IP_PROTO_IGP = 9 # interior gateway protocol +IP_PROTO_BBNRCC = 10 # BBN RCC monitoring +IP_PROTO_NVP = 11 # Network Voice Protocol +IP_PROTO_PUP = 12 # PARC universal packet +IP_PROTO_ARGUS = 13 # ARGUS +IP_PROTO_EMCON = 14 # EMCON +IP_PROTO_XNET = 15 # Cross Net Debugger +IP_PROTO_CHAOS = 16 # Chaos +IP_PROTO_UDP = 17 # UDP +IP_PROTO_MUX = 18 # multiplexing +IP_PROTO_DCNMEAS = 19 # DCN measurement +IP_PROTO_HMP = 20 # Host Monitoring Protocol +IP_PROTO_PRM = 21 # Packet Radio Measurement +IP_PROTO_IDP = 22 # Xerox NS IDP +IP_PROTO_TRUNK1 = 23 # Trunk-1 +IP_PROTO_TRUNK2 = 24 # Trunk-2 +IP_PROTO_LEAF1 = 25 # Leaf-1 +IP_PROTO_LEAF2 = 26 # Leaf-2 +IP_PROTO_RDP = 27 # "Reliable Datagram" proto +IP_PROTO_IRTP = 28 # Inet Reliable Transaction +IP_PROTO_TP = 29 # ISO TP class 4 +IP_PROTO_NETBLT = 30 # Bulk Data Transfer +IP_PROTO_MFPNSP = 31 # MFE Network Services +IP_PROTO_MERITINP = 32 # Merit Internodal Protocol +IP_PROTO_SEP = 33 # Sequential Exchange proto +IP_PROTO_3PC = 34 # Third Party Connect proto +IP_PROTO_IDPR = 35 # Interdomain Policy Route +IP_PROTO_XTP = 36 # Xpress Transfer Protocol +IP_PROTO_DDP = 37 # Datagram Delivery Proto +IP_PROTO_CMTP = 38 # IDPR Ctrl Message Trans +IP_PROTO_TPPP = 39 # TP++ Transport Protocol +IP_PROTO_IL = 40 # IL Transport Protocol +IP_PROTO_IP6 = 41 # IPv6 +IP_PROTO_SDRP = 42 # Source Demand Routing +IP_PROTO_ROUTING = 43 # IPv6 routing header +IP_PROTO_FRAGMENT = 44 # IPv6 fragmentation header +IP_PROTO_RSVP = 46 # Reservation protocol +IP_PROTO_GRE = 47 # General Routing Encap +IP_PROTO_MHRP = 48 # Mobile Host Routing +IP_PROTO_ENA = 49 # ENA +IP_PROTO_ESP = 50 # Encap Security Payload +IP_PROTO_AH = 51 # Authentication Header +IP_PROTO_INLSP = 52 # Integated Net Layer Sec +IP_PROTO_SWIPE = 53 # SWIPE +IP_PROTO_NARP = 54 # NBMA Address Resolution +IP_PROTO_MOBILE = 55 # Mobile IP, RFC 2004 +IP_PROTO_TLSP = 56 # Transport Layer Security +IP_PROTO_SKIP = 57 # SKIP +IP_PROTO_ICMP6 = 58 # ICMP for IPv6 +IP_PROTO_NONE = 59 # IPv6 no next header +IP_PROTO_DSTOPTS = 60 # IPv6 destination options +IP_PROTO_ANYHOST = 61 # any host internal proto +IP_PROTO_CFTP = 62 # CFTP +IP_PROTO_ANYNET = 63 # any local network +IP_PROTO_EXPAK = 64 # SATNET and Backroom EXPAK +IP_PROTO_KRYPTOLAN = 65 # Kryptolan +IP_PROTO_RVD = 66 # MIT Remote Virtual Disk +IP_PROTO_IPPC = 67 # Inet Pluribus Packet Core +IP_PROTO_DISTFS = 68 # any distributed fs +IP_PROTO_SATMON = 69 # SATNET Monitoring +IP_PROTO_VISA = 70 # VISA Protocol +IP_PROTO_IPCV = 71 # Inet Packet Core Utility +IP_PROTO_CPNX = 72 # Comp Proto Net Executive +IP_PROTO_CPHB = 73 # Comp Protocol Heart Beat +IP_PROTO_WSN = 74 # Wang Span Network +IP_PROTO_PVP = 75 # Packet Video Protocol +IP_PROTO_BRSATMON = 76 # Backroom SATNET Monitor +IP_PROTO_SUNND = 77 # SUN ND Protocol +IP_PROTO_WBMON = 78 # WIDEBAND Monitoring +IP_PROTO_WBEXPAK = 79 # WIDEBAND EXPAK +IP_PROTO_EON = 80 # ISO CNLP +IP_PROTO_VMTP = 81 # Versatile Msg Transport +IP_PROTO_SVMTP = 82 # Secure VMTP +IP_PROTO_VINES = 83 # VINES +IP_PROTO_TTP = 84 # TTP +IP_PROTO_NSFIGP = 85 # NSFNET-IGP +IP_PROTO_DGP = 86 # Dissimilar Gateway Proto +IP_PROTO_TCF = 87 # TCF +IP_PROTO_EIGRP = 88 # EIGRP +IP_PROTO_OSPF = 89 # Open Shortest Path First +IP_PROTO_SPRITERPC = 90 # Sprite RPC Protocol +IP_PROTO_LARP = 91 # Locus Address Resolution +IP_PROTO_MTP = 92 # Multicast Transport Proto +IP_PROTO_AX25 = 93 # AX.25 Frames +IP_PROTO_IPIPENCAP = 94 # yet-another IP encap +IP_PROTO_MICP = 95 # Mobile Internet Ctrl +IP_PROTO_SCCSP = 96 # Semaphore Comm Sec Proto +IP_PROTO_ETHERIP = 97 # Ethernet in IPv4 +IP_PROTO_ENCAP = 98 # encapsulation header +IP_PROTO_ANYENC = 99 # private encryption scheme +IP_PROTO_GMTP = 100 # GMTP +IP_PROTO_IFMP = 101 # Ipsilon Flow Mgmt Proto +IP_PROTO_PNNI = 102 # PNNI over IP +IP_PROTO_PIM = 103 # Protocol Indep Multicast +IP_PROTO_ARIS = 104 # ARIS +IP_PROTO_SCPS = 105 # SCPS +IP_PROTO_QNX = 106 # QNX +IP_PROTO_AN = 107 # Active Networks +IP_PROTO_IPCOMP = 108 # IP Payload Compression +IP_PROTO_SNP = 109 # Sitara Networks Protocol +IP_PROTO_COMPAQPEER = 110 # Compaq Peer Protocol +IP_PROTO_IPXIP = 111 # IPX in IP +IP_PROTO_VRRP = 112 # Virtual Router Redundancy +IP_PROTO_PGM = 113 # PGM Reliable Transport +IP_PROTO_ANY0HOP = 114 # 0-hop protocol +IP_PROTO_L2TP = 115 # Layer 2 Tunneling Proto +IP_PROTO_DDX = 116 # D-II Data Exchange (DDX) +IP_PROTO_IATP = 117 # Interactive Agent Xfer +IP_PROTO_STP = 118 # Schedule Transfer Proto +IP_PROTO_SRP = 119 # SpectraLink Radio Proto +IP_PROTO_UTI = 120 # UTI +IP_PROTO_SMP = 121 # Simple Message Protocol +IP_PROTO_SM = 122 # SM +IP_PROTO_PTP = 123 # Performance Transparency +IP_PROTO_ISIS = 124 # ISIS over IPv4 +IP_PROTO_FIRE = 125 # FIRE +IP_PROTO_CRTP = 126 # Combat Radio Transport +IP_PROTO_CRUDP = 127 # Combat Radio UDP +IP_PROTO_SSCOPMCE = 128 # SSCOPMCE +IP_PROTO_IPLT = 129 # IPLT +IP_PROTO_SPS = 130 # Secure Packet Shield +IP_PROTO_PIPE = 131 # Private IP Encap in IP +IP_PROTO_SCTP = 132 # Stream Ctrl Transmission +IP_PROTO_FC = 133 # Fibre Channel +IP_PROTO_RSVPIGN = 134 # RSVP-E2E-IGNORE +IP_PROTO_RAW = 255 # Raw IP packets +IP_PROTO_RESERVED = IP_PROTO_RAW # Reserved +IP_PROTO_MAX = 255 + +# XXX - auto-load IP dispatch table from IP_PROTO_* definitions +def __load_protos(): + g = globals() + for k, v in g.iteritems(): + if k.startswith('IP_PROTO_'): + name = k[9:].lower() + try: + mod = __import__(name, g) + except ImportError: + continue + IP.set_proto(v, getattr(mod, name.upper())) + +if not IP._protosw: + __load_protos() + +if __name__ == '__main__': + import unittest + + class IPTestCase(unittest.TestCase): + def test_IP(self): + import udp + s = 'E\x00\x00"\x00\x00\x00\x00@\x11r\xc0\x01\x02\x03\x04\x01\x02\x03\x04\x00o\x00\xde\x00\x0e\xbf5foobar' + ip = IP(id=0, src='\x01\x02\x03\x04', dst='\x01\x02\x03\x04', p=17) + u = udp.UDP(sport=111, dport=222) + u.data = 'foobar' + u.ulen += len(u.data) + ip.data = u + ip.len += len(u) + self.failUnless(str(ip) == s) + + ip = IP(s) + self.failUnless(str(ip) == s) + self.failUnless(ip.udp.sport == 111) + self.failUnless(ip.udp.data == 'foobar') + + def test_hl(self): + s = 'BB\x03\x00\x00\x00\x00\x00\x00\x00\xd0\x00\xec\xbc\xa5\x00\x00\x00\x03\x80\x00\x00\xd0\x01\xf2\xac\xa5"0\x01\x00\x14\x00\x02\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00' + try: + ip = IP(s) + except dpkt.UnpackError: + pass + + def test_opt(self): + s = '\x4f\x00\x00\x50\xae\x08\x00\x00\x40\x06\x17\xfc\xc0\xa8\x0a\x26\xc0\xa8\x0a\x01\x07\x27\x08\x01\x02\x03\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + ip = IP(s) + ip.sum = 0 + self.failUnless(str(ip) == s) + + def test_zerolen(self): + import tcp + d = 'X' * 2048 + s = 'E\x00\x00\x004\xce@\x00\x80\x06\x00\x00\x7f\x00\x00\x01\x7f\x00\x00\x01\xccN\x0c8`\xff\xc6N_\x8a\x12\x98P\x18@):\xa3\x00\x00' + d + ip = IP(s) + self.failUnless(isinstance(ip.data, tcp.TCP)) + self.failUnless(ip.tcp.data == d) + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/ip6.py b/scripts/external_libs/dpkt-1.8.6/dpkt/ip6.py new file mode 100644 index 00000000..38002fa6 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/ip6.py @@ -0,0 +1,307 @@ +# $Id: ip6.py 87 2013-03-05 19:41:04Z andrewflnr@gmail.com $ + +"""Internet Protocol, version 6.""" + +import dpkt + +class IP6(dpkt.Packet): + __hdr__ = ( + ('v_fc_flow', 'I', 0x60000000L), + ('plen', 'H', 0), # payload length (not including header) + ('nxt', 'B', 0), # next header protocol + ('hlim', 'B', 0), # hop limit + ('src', '16s', ''), + ('dst', '16s', '') + ) + + # XXX - to be shared with IP. We cannot refer to the ip module + # right now because ip.__load_protos() expects the IP6 class to be + # defined. + _protosw = None + + def _get_v(self): + return self.v_fc_flow >> 28 + def _set_v(self, v): + self.v_fc_flow = (self.v_fc_flow & ~0xf0000000L) | (v << 28) + v = property(_get_v, _set_v) + + def _get_fc(self): + return (self.v_fc_flow >> 20) & 0xff + def _set_fc(self, v): + self.v_fc_flow = (self.v_fc_flow & ~0xff00000L) | (v << 20) + fc = property(_get_fc, _set_fc) + + def _get_flow(self): + return self.v_fc_flow & 0xfffff + def _set_flow(self, v): + self.v_fc_flow = (self.v_fc_flow & ~0xfffff) | (v & 0xfffff) + flow = property(_get_flow, _set_flow) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.extension_hdrs = dict(((i, None) for i in ext_hdrs)) + + if self.plen: + buf = self.data[:self.plen] + else: # due to jumbo payload or TSO + buf = self.data + + next = self.nxt + + while (next in ext_hdrs): + ext = ext_hdrs_cls[next](buf) + self.extension_hdrs[next] = ext + buf = buf[ext.length:] + next = ext.nxt + + # set the payload protocol id + setattr(self, 'p', next) + + try: + self.data = self._protosw[next](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def headers_str(self): + """ + Output extension headers in order defined in RFC1883 (except dest opts) + """ + + header_str = "" + + for hdr in ext_hdrs: + if not self.extension_hdrs[hdr] is None: + header_str += str(self.extension_hdrs[hdr]) + return header_str + + + def __str__(self): + if (self.nxt == 6 or self.nxt == 17 or self.nxt == 58) and \ + not self.data.sum: + # XXX - set TCP, UDP, and ICMPv6 checksums + p = str(self.data) + s = dpkt.struct.pack('>16s16sxBH', self.src, self.dst, self.nxt, len(p)) + s = dpkt.in_cksum_add(0, s) + s = dpkt.in_cksum_add(s, p) + try: + self.data.sum = dpkt.in_cksum_done(s) + except AttributeError: + pass + return self.pack_hdr() + self.headers_str() + str(self.data) + + def set_proto(cls, p, pktclass): + cls._protosw[p] = pktclass + set_proto = classmethod(set_proto) + + def get_proto(cls, p): + return cls._protosw[p] + get_proto = classmethod(get_proto) + +import ip +# We are most likely still in the middle of ip.__load_protos() which +# implicitly loads this module through __import__(), so the content of +# ip.IP._protosw is still incomplete at the moment. By sharing the +# same dictionary by reference as opposed to making a copy, when +# ip.__load_protos() finishes, we will also automatically get the most +# up-to-date dictionary. +IP6._protosw = ip.IP._protosw + +class IP6ExtensionHeader(dpkt.Packet): + """ + An extension header is very similar to a 'sub-packet'. + We just want to re-use all the hdr unpacking etc. + """ + pass + +class IP6OptsHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('len', 'B', 0) # option data length in 8 octect units (ignoring first 8 octets) so, len 0 == 64bit header + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + setattr(self, 'length', (self.len + 1) * 8) + options = [] + + index = 0 + + while (index < self.length - 2): + opt_type = ord(self.data[index]) + + # PAD1 option + if opt_type == 0: + index += 1 + continue; + + opt_length = ord(self.data[index + 1]) + + if opt_type == 1: # PADN option + # PADN uses opt_length bytes in total + index += opt_length + 2 + continue + + options.append({'type': opt_type, 'opt_length': opt_length, 'data': self.data[index + 2:index + 2 + opt_length]}) + + # add the two chars and the option_length, to move to the next option + index += opt_length + 2 + + setattr(self, 'options', options) + +class IP6HopOptsHeader(IP6OptsHeader): pass + +class IP6DstOptsHeader(IP6OptsHeader): pass + +class IP6RoutingHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('len', 'B', 0), # extension data length in 8 octect units (ignoring first 8 octets) (<= 46 for type 0) + ('type', 'B', 0), # routing type (currently, only 0 is used) + ('segs_left', 'B', 0), # remaining segments in route, until destination (<= 23) + ('rsvd_sl_bits', 'I', 0), # reserved (1 byte), strict/loose bitmap for addresses + ) + + def _get_sl_bits(self): + return self.rsvd_sl_bits & 0xffffff + def _set_sl_bits(self, v): + self.rsvd_sl_bits = (self.rsvd_sl_bits & ~0xfffff) | (v & 0xfffff) + sl_bits = property(_get_sl_bits, _set_sl_bits) + + def unpack(self, buf): + hdr_size = 8 + addr_size = 16 + + dpkt.Packet.unpack(self, buf) + + addresses = [] + num_addresses = self.len / 2 + buf = buf[hdr_size:hdr_size + num_addresses * addr_size] + + for i in range(num_addresses): + addresses.append(buf[i * addr_size: i * addr_size + addr_size]) + + self.data = buf + setattr(self, 'addresses', addresses) + setattr(self, 'length', self.len * 8 + 8) + +class IP6FragmentHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('resv', 'B', 0), # reserved, set to 0 + ('frag_off_resv_m', 'H', 0), # frag offset (13 bits), reserved zero (2 bits), More frags flag + ('id', 'I', 0) # fragments id + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + setattr(self, 'length', self.__hdr_len__) + + def _get_frag_off(self): + return self.frag_off_resv_m >> 3 + def _set_frag_off(self, v): + self.frag_off_resv_m = (self.frag_off_resv_m & ~0xfff8) | (v << 3) + frag_off = property(_get_frag_off, _set_frag_off) + + def _get_m_flag(self): + return self.frag_off_resv_m & 1 + def _set_m_flag(self, v): + self.frag_off_resv_m = (self.frag_off_resv_m & ~0xfffe) | v + m_flag = property(_get_m_flag, _set_m_flag) + +class IP6AHHeader(IP6ExtensionHeader): + __hdr__ = ( + ('nxt', 'B', 0), # next extension header protocol + ('len', 'B', 0), # length of header in 4 octet units (ignoring first 2 units) + ('resv', 'H', 0), # reserved, 2 bytes of 0 + ('spi', 'I', 0), # SPI security parameter index + ('seq', 'I', 0) # sequence no. + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + setattr(self, 'length', (self.len + 2) * 4) + setattr(self, 'auth_data', self.data[:(self.len - 1) * 4]) + + +class IP6ESPHeader(IP6ExtensionHeader): + def unpack(self, buf): + raise NotImplementedError("ESP extension headers are not supported.") + + +ext_hdrs = [ip.IP_PROTO_HOPOPTS, ip.IP_PROTO_ROUTING, ip.IP_PROTO_FRAGMENT, ip.IP_PROTO_AH, ip.IP_PROTO_ESP, ip.IP_PROTO_DSTOPTS] +ext_hdrs_cls = {ip.IP_PROTO_HOPOPTS: IP6HopOptsHeader, + ip.IP_PROTO_ROUTING: IP6RoutingHeader, + ip.IP_PROTO_FRAGMENT: IP6FragmentHeader, + ip.IP_PROTO_ESP: IP6ESPHeader, + ip.IP_PROTO_AH: IP6AHHeader, + ip.IP_PROTO_DSTOPTS: IP6DstOptsHeader} + +if __name__ == '__main__': + import unittest + + class IP6TestCase(unittest.TestCase): + + def test_IP6(self): + s = '`\x00\x00\x00\x00(\x06@\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x11$\xff\xfe\x8c\x11\xde\xfe\x80\x00\x00\x00\x00\x00\x00\x02\xb0\xd0\xff\xfe\xe1\x80r\xcd\xca\x00\x16\x04\x84F\xd5\x00\x00\x00\x00\xa0\x02\xff\xff\xf8\t\x00\x00\x02\x04\x05\xa0\x01\x03\x03\x00\x01\x01\x08\n}\x185?\x00\x00\x00\x00' + ip = IP6(s) + #print `ip` + ip.data.sum = 0 + s2 = str(ip) + ip2 = IP6(s) + #print `ip2` + assert(s == s2) + + def test_IP6RoutingHeader(self): + s = '`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x02\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' + ip = IP6(s) + s2 = str(ip) + # 43 is Routing header id + assert(len(ip.extension_hdrs[43].addresses) == 2) + assert(ip.tcp) + assert(s == s2) + + + def test_IP6FragmentHeader(self): + s = '\x06\xee\xff\xfb\x00\x00\xff\xff' + fh = IP6FragmentHeader(s) + s2 = str(fh) + assert(fh.nxt == 6) + assert(fh.id == 65535) + assert(fh.frag_off == 8191) + assert(fh.m_flag == 1) + + def test_IP6OptionsHeader(self): + s = ';\x04\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x02\x00\x00' + options = IP6OptsHeader(s).options + assert(len(options) == 3) + + def test_IP6AHHeader(self): + s = ';\x04\x00\x00\x02\x02\x02\x02\x01\x01\x01\x01\x78\x78\x78\x78\x78\x78\x78\x78' + ah = IP6AHHeader(s) + assert(ah.length == 24) + assert(ah.auth_data == 'xxxxxxxx') + assert(ah.spi == 0x2020202) + assert(ah.seq == 0x1010101) + + def test_IP6ExtensionHeaders(self): + p = '`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x02\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' + ip = IP6(p) + + o = ';\x04\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x02\x00\x00' + options = IP6HopOptsHeader(o) + + ip.extension_hdrs[0] = options + + fh = '\x06\xee\xff\xfb\x00\x00\xff\xff' + ip.extension_hdrs[44] = IP6FragmentHeader(fh) + + ah = ';\x04\x00\x00\x02\x02\x02\x02\x01\x01\x01\x01\x78\x78\x78\x78\x78\x78\x78\x78' + ip.extension_hdrs[51] = IP6AHHeader(ah) + + do = ';\x02\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + ip.extension_hdrs[60] = IP6DstOptsHeader(do) + + assert(len([k for k in ip.extension_hdrs if (not ip.extension_hdrs[k] is None)]) == 5) + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/ipx.py b/scripts/external_libs/dpkt-1.8.6/dpkt/ipx.py new file mode 100644 index 00000000..74e7982a --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/ipx.py @@ -0,0 +1,17 @@ +# $Id: ipx.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Internetwork Packet Exchange.""" + +import dpkt + +IPX_HDR_LEN = 30 + +class IPX(dpkt.Packet): + __hdr__ = ( + ('sum', 'H', 0xffff), + ('len', 'H', IPX_HDR_LEN), + ('tc', 'B', 0), + ('pt', 'B', 0), + ('dst', '12s', ''), + ('src', '12s', '') + ) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/llc.py b/scripts/external_libs/dpkt-1.8.6/dpkt/llc.py new file mode 100644 index 00000000..28246131 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/llc.py @@ -0,0 +1,55 @@ +import struct +import dpkt, stp, ethernet + +class LLC(dpkt.Packet): + _typesw = {} + + def _unpack_data(self, buf): + if self.type == ethernet.ETH_TYPE_8021Q: + self.tag, self.type = struct.unpack('>HH', buf[:4]) + buf = buf[4:] + elif self.type == ethernet.ETH_TYPE_MPLS or \ + self.type == ethernet.ETH_TYPE_MPLS_MCAST: + # XXX - skip labels + for i in range(24): + if struct.unpack('>I', buf[i:i+4])[0] & 0x0100: # MPLS_STACK_BOTTOM + break + self.type = ethernet.ETH_TYPE_IP + buf = buf[(i + 1) * 4:] + try: + self.data = self._typesw[self.type](buf) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + self.data = buf + + def unpack(self, buf): + self.data = buf + if self.data.startswith('\xaa\xaa'): + # SNAP + self.type = struct.unpack('>H', self.data[6:8])[0] + self._unpack_data(self.data[8:]) + else: + # non-SNAP + dsap = ord(self.data[0]) + if dsap == 0x06: # SAP_IP + self.data = self.ip = self._typesw[ethernet.ETH_TYPE_IP](self.data[3:]) + elif dsap == 0x10 or dsap == 0xe0: # SAP_NETWARE{1,2} + self.data = self.ipx = self._typesw[ethernet.ETH_TYPE_IPX](self.data[3:]) + elif dsap == 0x42: # SAP_STP + self.data = self.stp = stp.STP(self.data[3:]) + +if __name__ == '__main__': + import unittest + + class LLCTestCase(unittest.TestCase): + + def test_llc(self): + s = '\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x28\x07\x27\x40\x00\x80\x06\x1d\x39\x8d\xd4\x37\x3d\x3f\xf5\xd1\x69\xc0\x5f\x01\xbb\xb2\xd6\xef\x23\x38\x2b\x4f\x08\x50\x10\x42\x04\xac\x17\x00\x00' + + import ip + llc_pkt = LLC(s) + ip_pkt = ip.IP(llc_pkt.data) + self.failUnless(llc_pkt.type == ethernet.ETH_TYPE_IP) + self.failUnless(ip_pkt.dst == '\x3f\xf5\xd1\x69') + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/loopback.py b/scripts/external_libs/dpkt-1.8.6/dpkt/loopback.py new file mode 100644 index 00000000..25992b31 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/loopback.py @@ -0,0 +1,20 @@ +# $Id: loopback.py 38 2007-03-17 03:33:16Z dugsong $ + +"""Platform-dependent loopback header.""" + +import dpkt, ethernet, ip, ip6 + +class Loopback(dpkt.Packet): + __hdr__ = (('family', 'I', 0), ) + __byte_order__ = '@' + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.family == 2: + self.data = ip.IP(self.data) + elif self.family == 0x02000000: + self.family = 2 + self.data = ip.IP(self.data) + elif self.family in (24, 28, 30): + self.data = ip6.IP6(self.data) + elif self.family > 1500: + self.data = ethernet.Ethernet(self.data) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/mrt.py b/scripts/external_libs/dpkt-1.8.6/dpkt/mrt.py new file mode 100644 index 00000000..9f3c719c --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/mrt.py @@ -0,0 +1,92 @@ +# $Id: mrt.py 29 2007-01-26 02:29:07Z jon.oberheide $ + +"""Multi-threaded Routing Toolkit.""" + +import dpkt +import bgp + +# Multi-threaded Routing Toolkit +# http://www.ietf.org/internet-drafts/draft-ietf-grow-mrt-03.txt + +# MRT Types +NULL = 0 +START = 1 +DIE = 2 +I_AM_DEAD = 3 +PEER_DOWN = 4 +BGP = 5 # Deprecated by BGP4MP +RIP = 6 +IDRP = 7 +RIPNG = 8 +BGP4PLUS = 9 # Deprecated by BGP4MP +BGP4PLUS_01 = 10 # Deprecated by BGP4MP +OSPF = 11 +TABLE_DUMP = 12 +BGP4MP = 16 +BGP4MP_ET = 17 +ISIS = 32 +ISIS_ET = 33 +OSPF_ET = 64 + +# BGP4MP Subtypes +BGP4MP_STATE_CHANGE = 0 +BGP4MP_MESSAGE = 1 +BGP4MP_ENTRY = 2 +BGP4MP_SNAPSHOT = 3 +BGP4MP_MESSAGE_32BIT_AS = 4 + +# Address Family Types +AFI_IPv4 = 1 +AFI_IPv6 = 2 + +class MRTHeader(dpkt.Packet): + __hdr__ = ( + ('ts', 'I', 0), + ('type', 'H', 0), + ('subtype', 'H', 0), + ('len', 'I', 0) + ) + +class TableDump(dpkt.Packet): + __hdr__ = ( + ('view', 'H', 0), + ('seq', 'H', 0), + ('prefix', 'I', 0), + ('prefix_len', 'B', 0), + ('status', 'B', 1), + ('originated_ts', 'I', 0), + ('peer_ip', 'I', 0), + ('peer_as', 'H', 0), + ('attr_len', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + plen = self.attr_len + l = [] + while plen > 0: + attr = bgp.BGP.Update.Attribute(self.data) + self.data = self.data[len(attr):] + plen -= len(attr) + l.append(attr) + self.attributes = l + +class BGP4MPMessage(dpkt.Packet): + __hdr__ = ( + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('intf', 'H', 0), + ('family', 'H', AFI_IPv4), + ('src_ip', 'I', 0), + ('dst_ip', 'I', 0) + ) + +class BGP4MPMessage_32(dpkt.Packet): + __hdr__ = ( + ('src_as', 'I', 0), + ('dst_as', 'I', 0), + ('intf', 'H', 0), + ('family', 'H', AFI_IPv4), + ('src_ip', 'I', 0), + ('dst_ip', 'I', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/netbios.py b/scripts/external_libs/dpkt-1.8.6/dpkt/netbios.py new file mode 100644 index 00000000..e535ad04 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/netbios.py @@ -0,0 +1,154 @@ +# $Id: netbios.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Network Basic Input/Output System.""" + +import struct +import dpkt, dns + +def encode_name(name): + """Return the NetBIOS first-level encoded name.""" + l = [] + for c in struct.pack('16s', name): + c = ord(c) + l.append(chr((c >> 4) + 0x41)) + l.append(chr((c & 0xf) + 0x41)) + return ''.join(l) + +def decode_name(nbname): + """Return the NetBIOS first-level decoded nbname.""" + if len(nbname) != 32: + return nbname + l = [] + for i in range(0, 32, 2): + l.append(chr(((ord(nbname[i]) - 0x41) << 4) | + ((ord(nbname[i+1]) - 0x41) & 0xf))) + return ''.join(l).split('\x00', 1)[0] + +# RR types +NS_A = 0x01 # IP address +NS_NS = 0x02 # Name Server +NS_NULL = 0x0A # NULL +NS_NB = 0x20 # NetBIOS general Name Service +NS_NBSTAT = 0x21 # NetBIOS NODE STATUS + +# RR classes +NS_IN = 1 + +# NBSTAT name flags +NS_NAME_G = 0x8000 # group name (as opposed to unique) +NS_NAME_DRG = 0x1000 # deregister +NS_NAME_CNF = 0x0800 # conflict +NS_NAME_ACT = 0x0400 # active +NS_NAME_PRM = 0x0200 # permanent + +# NBSTAT service names +nbstat_svcs = { + # (service, unique): list of ordered (name prefix, service name) tuples + (0x00, 0):[ ('', 'Domain Name') ], + (0x00, 1):[ ('IS~', 'IIS'), ('', 'Workstation Service') ], + (0x01, 0):[ ('__MSBROWSE__', 'Master Browser') ], + (0x01, 1):[ ('', 'Messenger Service') ], + (0x03, 1):[ ('', 'Messenger Service') ], + (0x06, 1):[ ('', 'RAS Server Service') ], + (0x1B, 1):[ ('', 'Domain Master Browser') ], + (0x1C, 0):[ ('INet~Services', 'IIS'), ('', 'Domain Controllers') ], + (0x1D, 1):[ ('', 'Master Browser') ], + (0x1E, 0):[ ('', 'Browser Service Elections') ], + (0x1F, 1):[ ('', 'NetDDE Service') ], + (0x20, 1):[ ('Forte_$ND800ZA', 'DCA IrmaLan Gateway Server Service'), + ('', 'File Server Service') ], + (0x21, 1):[ ('', 'RAS Client Service') ], + (0x22, 1):[ ('', 'Microsoft Exchange Interchange(MSMail Connector)') ], + (0x23, 1):[ ('', 'Microsoft Exchange Store') ], + (0x24, 1):[ ('', 'Microsoft Exchange Directory') ], + (0x2B, 1):[ ('', 'Lotus Notes Server Service') ], + (0x2F, 0):[ ('IRISMULTICAST', 'Lotus Notes') ], + (0x30, 1):[ ('', 'Modem Sharing Server Service') ], + (0x31, 1):[ ('', 'Modem Sharing Client Service') ], + (0x33, 0):[ ('IRISNAMESERVER', 'Lotus Notes') ], + (0x43, 1):[ ('', 'SMS Clients Remote Control') ], + (0x44, 1):[ ('', 'SMS Administrators Remote Control Tool') ], + (0x45, 1):[ ('', 'SMS Clients Remote Chat') ], + (0x46, 1):[ ('', 'SMS Clients Remote Transfer') ], + (0x4C, 1):[ ('', 'DEC Pathworks TCPIP service on Windows NT') ], + (0x52, 1):[ ('', 'DEC Pathworks TCPIP service on Windows NT') ], + (0x87, 1):[ ('', 'Microsoft Exchange MTA') ], + (0x6A, 1):[ ('', 'Microsoft Exchange IMC') ], + (0xBE, 1):[ ('', 'Network Monitor Agent') ], + (0xBF, 1):[ ('', 'Network Monitor Application') ] + } +def node_to_service_name((name, service, flags)): + try: + unique = int(flags & NS_NAME_G == 0) + for namepfx, svcname in nbstat_svcs[(service, unique)]: + if name.startswith(namepfx): + return svcname + except KeyError: + pass + return '' + +class NS(dns.DNS): + """NetBIOS Name Service.""" + class Q(dns.DNS.Q): + pass + + class RR(dns.DNS.RR): + """NetBIOS resource record.""" + def unpack_rdata(self, buf, off): + if self.type == NS_A: + self.ip = self.rdata + elif self.type == NS_NBSTAT: + num = ord(self.rdata[0]) + off = 1 + l = [] + for i in range(num): + name = self.rdata[off:off+15].split(None, 1)[0].split('\x00', 1)[0] + service = ord(self.rdata[off+15]) + off += 16 + flags = struct.unpack('>H', self.rdata[off:off+2])[0] + off += 2 + l.append((name, service, flags)) + self.nodenames = l + # XXX - skip stats + + def pack_name(self, buf, name): + return dns.DNS.pack_name(self, buf, encode_name(name)) + + def unpack_name(self, buf, off): + name, off = dns.DNS.unpack_name(self, buf, off) + return decode_name(name), off + +class Session(dpkt.Packet): + """NetBIOS Session Service.""" + __hdr__ = ( + ('type', 'B', 0), + ('flags', 'B', 0), + ('len', 'H', 0) + ) + +SSN_MESSAGE = 0 +SSN_REQUEST = 1 +SSN_POSITIVE = 2 +SSN_NEGATIVE = 3 +SSN_RETARGET = 4 +SSN_KEEPALIVE = 5 + +class Datagram(dpkt.Packet): + """NetBIOS Datagram Service.""" + __hdr__ = ( + ('type', 'B', 0), + ('flags', 'B', 0), + ('id', 'H', 0), + ('src', 'I', 0), + ('sport', 'H', 0), + ('len', 'H', 0), + ('off', 'H', 0) + ) + +DGRAM_UNIQUE = 0x10 +DGRAM_GROUP = 0x11 +DGRAM_BROADCAST = 0x12 +DGRAM_ERROR = 0x13 +DGRAM_QUERY = 0x14 +DGRAM_POSITIVE = 0x15 +DGRAM_NEGATIVE = 0x16 diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/netflow.py b/scripts/external_libs/dpkt-1.8.6/dpkt/netflow.py new file mode 100644 index 00000000..103b04f1 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/netflow.py @@ -0,0 +1,214 @@ +# $Id: netflow.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Cisco Netflow.""" + +import itertools, struct +import dpkt + +class NetflowBase(dpkt.Packet): + """Base class for Cisco Netflow packets.""" + + __hdr__ = ( + ('version', 'H', 1), + ('count', 'H', 0), + ('sys_uptime', 'I', 0), + ('unix_sec', 'I', 0), + ('unix_nsec', 'I', 0) + ) + + def __len__(self): + return self.__hdr_len__ + (len(self.data[0]) * self.count) + + def __str__(self): + # for now, don't try to enforce any size limits + self.count = len(self.data) + return self.pack_hdr() + ''.join(map(str, self.data)) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + buf = self.data + l = [] + while buf: + flow = self.NetflowRecord(buf) + l.append(flow) + buf = buf[len(flow):] + self.data = l + + class NetflowRecordBase(dpkt.Packet): + """Base class for netflow v1-v7 netflow records.""" + + # performance optimizations + def __len__(self): + # don't bother with data + return self.__hdr_len__ + + def __str__(self): + # don't bother with data + return self.pack_hdr() + + def unpack(self, buf): + # don't bother with data + for k, v in itertools.izip(self.__hdr_fields__, + struct.unpack(self.__hdr_fmt__, buf[:self.__hdr_len__])): + setattr(self, k, v) + self.data = "" + + +class Netflow1(NetflowBase): + """Netflow Version 1.""" + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v1 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('pad1', 'H', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('tcp_flags', 'B', 0), + ('pad2', 'B', 0), + ('pad3', 'H', 0), + ('reserved', 'I', 0) + ) + +# FYI, versions 2-4 don't appear to have ever seen the light of day. + +class Netflow5(NetflowBase): + """Netflow Version 5.""" + __hdr__ = NetflowBase.__hdr__ + ( + ('flow_sequence', 'I', 0), + ('engine_type', 'B', 0), + ('engine_id', 'B', 0), + ('reserved', 'H', 0), + ) + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v5 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('pad1', 'B', 0), + ('tcp_flags', 'B', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('src_mask', 'B', 0), + ('dst_mask', 'B', 0), + ('pad2', 'H', 0), + ) + +class Netflow6(NetflowBase): + """Netflow Version 6. + XXX - unsupported by Cisco, but may be found in the field. + """ + __hdr__ = Netflow5.__hdr__ + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v6 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('pad1', 'B', 0), + ('tcp_flags', 'B', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('src_mask', 'B', 0), + ('dst_mask', 'B', 0), + ('in_encaps', 'B', 0), + ('out_encaps', 'B', 0), + ('peer_nexthop', 'I', 0), + ) + +class Netflow7(NetflowBase): + """Netflow Version 7.""" + __hdr__ = NetflowBase.__hdr__ + ( + ('flow_sequence', 'I', 0), + ('reserved', 'I', 0), + ) + + class NetflowRecord(NetflowBase.NetflowRecordBase): + """Netflow v7 flow record.""" + __hdr__ = ( + ('src_addr', 'I', 0), + ('dst_addr', 'I', 0), + ('next_hop', 'I', 0), + ('input_iface', 'H', 0), + ('output_iface', 'H', 0), + ('pkts_sent', 'I', 0), + ('bytes_sent', 'I', 0), + ('start_time', 'I', 0), + ('end_time', 'I', 0), + ('src_port', 'H', 0), + ('dst_port', 'H', 0), + ('flags', 'B', 0), + ('tcp_flags', 'B', 0), + ('ip_proto', 'B', 0), + ('tos', 'B', 0), + ('src_as', 'H', 0), + ('dst_as', 'H', 0), + ('src_mask', 'B', 0), + ('dst_mask', 'B', 0), + ('pad2', 'H', 0), + ('router_sc', 'I', 0), + ) + +# No support for v8 or v9 yet. + +if __name__ == '__main__': + import unittest + + class NetflowV1TestCase(unittest.TestCase): + sample_v1 = "\x00\x01\x00\x18gza> 3) & 0x7 + def _set_v(self, v): + self.flags = (self.flags & ~0x38) | ((v & 0x7) << 3) + v = property(_get_v, _set_v) + + def _get_li(self): + return (self.flags >> 6) & 0x3 + def _set_li(self, li): + self.flags = (self.flags & ~0xc0) | ((li & 0x3) << 6) + li = property(_get_li, _set_li) + + def _get_mode(self): + return (self.flags & 0x7) + def _set_mode(self, mode): + self.flags = (self.flags & ~0x7) | (mode & 0x7) + mode = property(_get_mode, _set_mode) + +if __name__ == '__main__': + import unittest + + class NTPTestCase(unittest.TestCase): + def testPack(self): + n = NTP(self.s) + self.failUnless(self.s == str(n)) + + def testUnpack(self): + n = NTP(self.s) + self.failUnless(n.li == NO_WARNING) + self.failUnless(n.v == 4) + self.failUnless(n.mode == SERVER) + self.failUnless(n.stratum == 2) + self.failUnless(n.id == '\xc1\x02\x04\x02') + + # test get/set functions + n.li = ALARM_CONDITION + n.v = 3 + n.mode = CLIENT + self.failUnless(n.li == ALARM_CONDITION) + self.failUnless(n.v == 3) + self.failUnless(n.mode == CLIENT) + + s = '\x24\x02\x04\xef\x00\x00\x00\x84\x00\x00\x33\x27\xc1\x02\x04\x02\xc8\x90\xec\x11\x22\xae\x07\xe5\xc8\x90\xf9\xd9\xc0\x7e\x8c\xcd\xc8\x90\xf9\xd9\xda\xc5\xb0\x78\xc8\x90\xf9\xd9\xda\xc6\x8a\x93' + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/ospf.py b/scripts/external_libs/dpkt-1.8.6/dpkt/ospf.py new file mode 100644 index 00000000..0ea0b3ca --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/ospf.py @@ -0,0 +1,25 @@ +# $Id: ospf.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Open Shortest Path First.""" + +import dpkt + +AUTH_NONE = 0 +AUTH_PASSWORD = 1 +AUTH_CRYPTO = 2 + +class OSPF(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 0), + ('type', 'B', 0), + ('len', 'H', 0), + ('router', 'I', 0), + ('area', 'I', 0), + ('sum', 'H', 0), + ('atype', 'H', 0), + ('auth', '8s', '') + ) + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/pcap.py b/scripts/external_libs/dpkt-1.8.6/dpkt/pcap.py new file mode 100644 index 00000000..45aca3b1 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/pcap.py @@ -0,0 +1,164 @@ +# $Id: pcap.py 77 2011-01-06 15:59:38Z dugsong $ + +"""Libpcap file format.""" + +import sys, time +import dpkt + +TCPDUMP_MAGIC = 0xa1b2c3d4L +PMUDPCT_MAGIC = 0xd4c3b2a1L + +PCAP_VERSION_MAJOR = 2 +PCAP_VERSION_MINOR = 4 + +DLT_NULL = 0 +DLT_EN10MB = 1 +DLT_EN3MB = 2 +DLT_AX25 = 3 +DLT_PRONET = 4 +DLT_CHAOS = 5 +DLT_IEEE802 = 6 +DLT_ARCNET = 7 +DLT_SLIP = 8 +DLT_PPP = 9 +DLT_FDDI = 10 +DLT_PFSYNC = 18 +DLT_IEEE802_11 = 105 +DLT_LINUX_SLL = 113 +DLT_PFLOG = 117 +DLT_IEEE802_11_RADIO = 127 + +if sys.platform.find('openbsd') != -1: + DLT_LOOP = 12 + DLT_RAW = 14 +else: + DLT_LOOP = 108 + DLT_RAW = 12 + +dltoff = { DLT_NULL:4, DLT_EN10MB:14, DLT_IEEE802:22, DLT_ARCNET:6, + DLT_SLIP:16, DLT_PPP:4, DLT_FDDI:21, DLT_PFLOG:48, DLT_PFSYNC:4, + DLT_LOOP:4, DLT_LINUX_SLL:16 } + +class PktHdr(dpkt.Packet): + """pcap packet header.""" + __hdr__ = ( + ('tv_sec', 'I', 0), + ('tv_usec', 'I', 0), + ('caplen', 'I', 0), + ('len', 'I', 0), + ) + +class LEPktHdr(PktHdr): + __byte_order__ = '<' + +class FileHdr(dpkt.Packet): + """pcap file header.""" + __hdr__ = ( + ('magic', 'I', TCPDUMP_MAGIC), + ('v_major', 'H', PCAP_VERSION_MAJOR), + ('v_minor', 'H', PCAP_VERSION_MINOR), + ('thiszone', 'I', 0), + ('sigfigs', 'I', 0), + ('snaplen', 'I', 1500), + ('linktype', 'I', 1), + ) + +class LEFileHdr(FileHdr): + __byte_order__ = '<' + +class Writer(object): + """Simple pcap dumpfile writer.""" + def __init__(self, fileobj, snaplen=1500, linktype=DLT_EN10MB): + self.__f = fileobj + if sys.byteorder == 'little': + fh = LEFileHdr(snaplen=snaplen, linktype=linktype) + else: + fh = FileHdr(snaplen=snaplen, linktype=linktype) + self.__f.write(str(fh)) + + def writepkt(self, pkt, ts=None): + if ts is None: + ts = time.time() + s = str(pkt) + n = len(s) + if sys.byteorder == 'little': + ph = LEPktHdr(tv_sec=int(ts), + tv_usec=int((float(ts) - int(ts)) * 1000000.0), + caplen=n, len=n) + else: + ph = PktHdr(tv_sec=int(ts), + tv_usec=int((float(ts) - int(ts)) * 1000000.0), + caplen=n, len=n) + self.__f.write(str(ph)) + self.__f.write(s) + + def close(self): + self.__f.close() + +class Reader(object): + """Simple pypcap-compatible pcap file reader.""" + + def __init__(self, fileobj): + self.name = fileobj.name + self.fd = fileobj.fileno() + self.__f = fileobj + buf = self.__f.read(FileHdr.__hdr_len__) + self.__fh = FileHdr(buf) + self.__ph = PktHdr + if self.__fh.magic == PMUDPCT_MAGIC: + self.__fh = LEFileHdr(buf) + self.__ph = LEPktHdr + elif self.__fh.magic != TCPDUMP_MAGIC: + raise ValueError, 'invalid tcpdump header' + if self.__fh.linktype in dltoff: + self.dloff = dltoff[self.__fh.linktype] + else: + self.dloff = 0 + self.snaplen = self.__fh.snaplen + self.filter = '' + + def fileno(self): + return self.fd + + def datalink(self): + return self.__fh.linktype + + def setfilter(self, value, optimize=1): + return NotImplementedError + + def readpkts(self): + return list(self) + + def dispatch(self, cnt, callback, *args): + if cnt > 0: + for i in range(cnt): + ts, pkt = self.next() + callback(ts, pkt, *args) + else: + for ts, pkt in self: + callback(ts, pkt, *args) + + def loop(self, callback, *args): + self.dispatch(0, callback, *args) + + def __iter__(self): + self.__f.seek(FileHdr.__hdr_len__) + while 1: + buf = self.__f.read(PktHdr.__hdr_len__) + if not buf: break + hdr = self.__ph(buf) + buf = self.__f.read(hdr.caplen) + yield (hdr.tv_sec + (hdr.tv_usec / 1000000.0), buf) + +if __name__ == '__main__': + import unittest + + class PcapTestCase(unittest.TestCase): + def test_endian(self): + be = '\xa1\xb2\xc3\xd4\x00\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x01' + le = '\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x01\x00\x00\x00' + befh = FileHdr(be) + lefh = LEFileHdr(le) + self.failUnless(befh.linktype == lefh.linktype) + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/pim.py b/scripts/external_libs/dpkt-1.8.6/dpkt/pim.py new file mode 100644 index 00000000..fa340dd0 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/pim.py @@ -0,0 +1,24 @@ +# $Id: pim.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Protocol Independent Multicast.""" + +import dpkt + +class PIM(dpkt.Packet): + __hdr__ = ( + ('v_type', 'B', 0x20), + ('rsvd', 'B', 0), + ('sum', 'H', 0) + ) + def _get_v(self): return self.v_type >> 4 + def _set_v(self, v): self.v_type = (v << 4) | (self.v_type & 0xf) + v = property(_get_v, _set_v) + + def _get_type(self): return self.v_type & 0xf + def _set_type(self, type): self.v_type = (self.v_type & 0xf0) | type + type = property(_get_type, _set_type) + + def __str__(self): + if not self.sum: + self.sum = dpkt.in_cksum(dpkt.Packet.__str__(self)) + return dpkt.Packet.__str__(self) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/pmap.py b/scripts/external_libs/dpkt-1.8.6/dpkt/pmap.py new file mode 100644 index 00000000..53185b22 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/pmap.py @@ -0,0 +1,17 @@ +# $Id: pmap.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Portmap / rpcbind.""" + +import dpkt + +PMAP_PROG = 100000L +PMAP_PROCDUMP = 4 +PMAP_VERS = 2 + +class Pmap(dpkt.Packet): + __hdr__ = ( + ('prog', 'I', 0), + ('vers', 'I', 0), + ('prot', 'I', 0), + ('port', 'I', 0), + ) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/ppp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/ppp.py new file mode 100644 index 00000000..f4898b95 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/ppp.py @@ -0,0 +1,63 @@ +# $Id: ppp.py 65 2010-03-26 02:53:51Z dugsong $ + +"""Point-to-Point Protocol.""" + +import struct +import dpkt + +# XXX - finish later + +# http://www.iana.org/assignments/ppp-numbers +PPP_IP = 0x21 # Internet Protocol +PPP_IP6 = 0x57 # Internet Protocol v6 + +# Protocol field compression +PFC_BIT = 0x01 + +class PPP(dpkt.Packet): + __hdr__ = ( + ('p', 'B', PPP_IP), + ) + _protosw = {} + + def set_p(cls, p, pktclass): + cls._protosw[p] = pktclass + set_p = classmethod(set_p) + + def get_p(cls, p): + return cls._protosw[p] + get_p = classmethod(get_p) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.p & PFC_BIT == 0: + self.p = struct.unpack('>H', buf[:2])[0] + self.data = self.data[1:] + try: + self.data = self._protosw[self.p](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, struct.error, dpkt.UnpackError): + pass + + def pack_hdr(self): + try: + if self.p > 0xff: + return struct.pack('>H', self.p) + return dpkt.Packet.pack_hdr(self) + except struct.error, e: + raise dpkt.PackError(str(e)) + +def __load_protos(): + g = globals() + for k, v in g.iteritems(): + if k.startswith('PPP_'): + name = k[4:] + modname = name.lower() + try: + mod = __import__(modname, g) + except ImportError: + continue + PPP.set_p(v, getattr(mod, name)) + +if not PPP._protosw: + __load_protos() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/pppoe.py b/scripts/external_libs/dpkt-1.8.6/dpkt/pppoe.py new file mode 100644 index 00000000..8b4c9e71 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/pppoe.py @@ -0,0 +1,38 @@ +# $Id: pppoe.py 23 2006-11-08 15:45:33Z dugsong $ + +"""PPP-over-Ethernet.""" + +import dpkt, ppp + +# RFC 2516 codes +PPPoE_PADI = 0x09 +PPPoE_PADO = 0x07 +PPPoE_PADR = 0x19 +PPPoE_PADS = 0x65 +PPPoE_PADT = 0xA7 +PPPoE_SESSION = 0x00 + +class PPPoE(dpkt.Packet): + __hdr__ = ( + ('v_type', 'B', 0x11), + ('code', 'B', 0), + ('session', 'H', 0), + ('len', 'H', 0) # payload length + ) + def _get_v(self): return self.v_type >> 4 + def _set_v(self, v): self.v_type = (v << 4) | (self.v_type & 0xf) + v = property(_get_v, _set_v) + + def _get_type(self): return self.v_type & 0xf + def _set_type(self, t): self.v_type = (self.v_type & 0xf0) | t + type = property(_get_type, _set_type) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + if self.code == 0: + self.data = self.ppp = ppp.PPP(self.data) + except dpkt.UnpackError: + pass + +# XXX - TODO TLVs, etc. diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/qq.py b/scripts/external_libs/dpkt-1.8.6/dpkt/qq.py new file mode 100644 index 00000000..4720c69b --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/qq.py @@ -0,0 +1,224 @@ +# $Id: qq.py 48 2008-05-27 17:31:15Z yardley $ + +from dpkt import Packet + +# header_type +QQ_HEADER_BASIC_FAMILY = 0x02 +QQ_HEADER_P2P_FAMILY = 0x00 +QQ_HEADER_03_FAMILY = 0x03 +QQ_HEADER_04_FAMILY = 0x04 +QQ_HEADER_05_FAMILY = 0x05 + +header_type_str = [ + "QQ_HEADER_P2P_FAMILY", + "Unknown Type", + "QQ_HEADER_03_FAMILY", + "QQ_HEADER_04_FAMILY", + "QQ_HEADER_05_FAMILY", +] + +# command +QQ_CMD_LOGOUT = 0x0001 +QQ_CMD_KEEP_ALIVE = 0x0002 +QQ_CMD_MODIFY_INFO = 0x0004 +QQ_CMD_SEARCH_USER = 0x0005 +QQ_CMD_GET_USER_INFO = 0x0006 +QQ_CMD_ADD_FRIEND = 0x0009 +QQ_CMD_DELETE_FRIEND = 0x000A +QQ_CMD_ADD_FRIEND_AUTH = 0x000B +QQ_CMD_CHANGE_STATUS = 0x000D +QQ_CMD_ACK_SYS_MSG = 0x0012 +QQ_CMD_SEND_IM = 0x0016 +QQ_CMD_RECV_IM = 0x0017 +QQ_CMD_REMOVE_SELF = 0x001C +QQ_CMD_REQUEST_KEY = 0x001D +QQ_CMD_LOGIN = 0x0022 +QQ_CMD_GET_FRIEND_LIST = 0x0026 +QQ_CMD_GET_ONLINE_OP = 0x0027 +QQ_CMD_SEND_SMS = 0x002D +QQ_CMD_CLUSTER_CMD = 0x0030 +QQ_CMD_TEST = 0x0031 +QQ_CMD_GROUP_DATA_OP = 0x003C +QQ_CMD_UPLOAD_GROUP_FRIEND = 0x003D +QQ_CMD_FRIEND_DATA_OP = 0x003E +QQ_CMD_DOWNLOAD_GROUP_FRIEND = 0x0058 +QQ_CMD_FRIEND_LEVEL_OP = 0x005C +QQ_CMD_PRIVACY_DATA_OP = 0x005E +QQ_CMD_CLUSTER_DATA_OP = 0x005F +QQ_CMD_ADVANCED_SEARCH = 0x0061 +QQ_CMD_REQUEST_LOGIN_TOKEN = 0x0062 +QQ_CMD_USER_PROPERTY_OP = 0x0065 +QQ_CMD_TEMP_SESSION_OP = 0x0066 +QQ_CMD_SIGNATURE_OP = 0x0067 +QQ_CMD_RECV_MSG_SYS = 0x0080 +QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS = 0x0081 +QQ_CMD_WEATHER_OP = 0x00A6 +QQ_CMD_ADD_FRIEND_EX = 0x00A7 +QQ_CMD_AUTHORIZE = 0X00A8 +QQ_CMD_UNKNOWN = 0xFFFF +QQ_SUB_CMD_SEARCH_ME_BY_QQ_ONLY = 0x03 +QQ_SUB_CMD_SHARE_GEOGRAPHY = 0x04 +QQ_SUB_CMD_GET_FRIEND_LEVEL = 0x02 +QQ_SUB_CMD_GET_CLUSTER_ONLINE_MEMBER = 0x01 +QQ_05_CMD_REQUEST_AGENT = 0x0021 +QQ_05_CMD_REQUEST_FACE = 0x0022 +QQ_05_CMD_TRANSFER = 0x0023 +QQ_05_CMD_REQUEST_BEGIN = 0x0026 +QQ_CLUSTER_CMD_CREATE_CLUSTER= 0x01 +QQ_CLUSTER_CMD_MODIFY_MEMBER= 0x02 +QQ_CLUSTER_CMD_MODIFY_CLUSTER_INFO= 0x03 +QQ_CLUSTER_CMD_GET_CLUSTER_INFO= 0x04 +QQ_CLUSTER_CMD_ACTIVATE_CLUSTER= 0x05 +QQ_CLUSTER_CMD_SEARCH_CLUSTER= 0x06 +QQ_CLUSTER_CMD_JOIN_CLUSTER= 0x07 +QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH= 0x08 +QQ_CLUSTER_CMD_EXIT_CLUSTER= 0x09 +QQ_CLUSTER_CMD_SEND_IM= 0x0A +QQ_CLUSTER_CMD_GET_ONLINE_MEMBER= 0x0B +QQ_CLUSTER_CMD_GET_MEMBER_INFO= 0x0C +QQ_CLUSTER_CMD_MODIFY_CARD = 0x0E +QQ_CLUSTER_CMD_GET_CARD_BATCH= 0x0F +QQ_CLUSTER_CMD_GET_CARD = 0x10 +QQ_CLUSTER_CMD_COMMIT_ORGANIZATION = 0x11 +QQ_CLUSTER_CMD_UPDATE_ORGANIZATION= 0x12 +QQ_CLUSTER_CMD_COMMIT_MEMBER_ORGANIZATION = 0x13 +QQ_CLUSTER_CMD_GET_VERSION_ID= 0x19 +QQ_CLUSTER_CMD_SEND_IM_EX = 0x1A +QQ_CLUSTER_CMD_SET_ROLE = 0x1B +QQ_CLUSTER_CMD_TRANSFER_ROLE = 0x1C +QQ_CLUSTER_CMD_CREATE_TEMP = 0x30 +QQ_CLUSTER_CMD_MODIFY_TEMP_MEMBER = 0x31 +QQ_CLUSTER_CMD_EXIT_TEMP = 0x32 +QQ_CLUSTER_CMD_GET_TEMP_INFO = 0x33 +QQ_CLUSTER_CMD_MODIFY_TEMP_INFO = 0x34 +QQ_CLUSTER_CMD_SEND_TEMP_IM = 0x35 +QQ_CLUSTER_CMD_SUB_CLUSTER_OP = 0x36 +QQ_CLUSTER_CMD_ACTIVATE_TEMP = 0x37 + +QQ_CLUSTER_SUB_CMD_ADD_MEMBER = 0x01 +QQ_CLUSTER_SUB_CMD_REMOVE_MEMBER = 0x02 +QQ_CLUSTER_SUB_CMD_GET_SUBJECT_LIST = 0x02 +QQ_CLUSTER_SUB_CMD_GET_DIALOG_LIST = 0x01 + +QQ_SUB_CMD_GET_ONLINE_FRIEND = 0x2 +QQ_SUB_CMD_GET_ONLINE_SERVICE = 0x3 +QQ_SUB_CMD_UPLOAD_GROUP_NAME = 0x2 +QQ_SUB_CMD_DOWNLOAD_GROUP_NAME = 0x1 +QQ_SUB_CMD_SEND_TEMP_SESSION_IM = 0x01 +QQ_SUB_CMD_BATCH_DOWNLOAD_FRIEND_REMARK = 0x0 +QQ_SUB_CMD_UPLOAD_FRIEND_REMARK = 0x1 +QQ_SUB_CMD_REMOVE_FRIEND_FROM_LIST = 0x2 +QQ_SUB_CMD_DOWNLOAD_FRIEND_REMARK = 0x3 +QQ_SUB_CMD_MODIFY_SIGNATURE = 0x01 +QQ_SUB_CMD_DELETE_SIGNATURE = 0x02 +QQ_SUB_CMD_GET_SIGNATURE = 0x03 +QQ_SUB_CMD_GET_USER_PROPERTY = 0x01 +QQ_SUB_CMD_GET_WEATHER = 0x01 + +QQ_FILE_CMD_HEART_BEAT = 0x0001 +QQ_FILE_CMD_HEART_BEAT_ACK = 0x0002 +QQ_FILE_CMD_TRANSFER_FINISHED = 0x0003 +QQ_FILE_CMD_FILE_OP = 0x0007 +QQ_FILE_CMD_FILE_OP_ACK = 0x0008 +QQ_FILE_CMD_SENDER_SAY_HELLO = 0x0031 +QQ_FILE_CMD_SENDER_SAY_HELLO_ACK = 0x0032 +QQ_FILE_CMD_RECEIVER_SAY_HELLO = 0x0033 +QQ_FILE_CMD_RECEIVER_SAY_HELLO_ACK = 0x0034 +QQ_FILE_CMD_NOTIFY_IP_ACK = 0x003C +QQ_FILE_CMD_PING = 0x003D +QQ_FILE_CMD_PONG = 0x003E +QQ_FILE_CMD_YES_I_AM_BEHIND_FIREWALL = 0x0040 +QQ_FILE_CMD_REQUEST_AGENT = 0x0001 +QQ_FILE_CMD_CHECK_IN = 0x0002 +QQ_FILE_CMD_FORWARD = 0x0003 +QQ_FILE_CMD_FORWARD_FINISHED = 0x0004 +QQ_FILE_CMD_IT_IS_TIME = 0x0005 +QQ_FILE_CMD_I_AM_READY = 0x0006 + +command_str = { + 0x0001: "QQ_CMD_LOGOUT", + 0x0002: "QQ_CMD_KEEP_ALIVE", + 0x0004: "QQ_CMD_MODIFY_INFO", + 0x0005: "QQ_CMD_SEARCH_USER", + 0x0006: "QQ_CMD_GET_USER_INFO", + 0x0009: "QQ_CMD_ADD_FRIEND", + 0x000A: "QQ_CMD_DELETE_FRIEND", + 0x000B: "QQ_CMD_ADD_FRIEND_AUTH", + 0x000D: "QQ_CMD_CHANGE_STATUS", + 0x0012: "QQ_CMD_ACK_SYS_MSG", + 0x0016: "QQ_CMD_SEND_IM", + 0x0017: "QQ_CMD_RECV_IM", + 0x001C: "QQ_CMD_REMOVE_SELF", + 0x001D: "QQ_CMD_REQUEST_KEY", + 0x0022: "QQ_CMD_LOGIN", + 0x0026: "QQ_CMD_GET_FRIEND_LIST", + 0x0027: "QQ_CMD_GET_ONLINE_OP", + 0x002D: "QQ_CMD_SEND_SMS", + 0x0030: "QQ_CMD_CLUSTER_CMD", + 0x0031: "QQ_CMD_TEST", + 0x003C: "QQ_CMD_GROUP_DATA_OP", + 0x003D: "QQ_CMD_UPLOAD_GROUP_FRIEND", + 0x003E: "QQ_CMD_FRIEND_DATA_OP", + 0x0058: "QQ_CMD_DOWNLOAD_GROUP_FRIEND", + 0x005C: "QQ_CMD_FRIEND_LEVEL_OP", + 0x005E: "QQ_CMD_PRIVACY_DATA_OP", + 0x005F: "QQ_CMD_CLUSTER_DATA_OP", + 0x0061: "QQ_CMD_ADVANCED_SEARCH", + 0x0062: "QQ_CMD_REQUEST_LOGIN_TOKEN", + 0x0065: "QQ_CMD_USER_PROPERTY_OP", + 0x0066: "QQ_CMD_TEMP_SESSION_OP", + 0x0067: "QQ_CMD_SIGNATURE_OP", + 0x0080: "QQ_CMD_RECV_MSG_SYS", + 0x0081: "QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS", + 0x00A6: "QQ_CMD_WEATHER_OP", + 0x00A7: "QQ_CMD_ADD_FRIEND_EX", + 0x00A8: "QQ_CMD_AUTHORIZE", + 0xFFFF: "QQ_CMD_UNKNOWN", + 0x0021: "_CMD_REQUEST_AGENT", + 0x0022: "_CMD_REQUEST_FACE", + 0x0023: "_CMD_TRANSFER", + 0x0026: "_CMD_REQUEST_BEGIN", +} + + +class QQBasicPacket(Packet): + __hdr__ = ( + ('header_type', 'B', 2), + ('source', 'H', 0), + ('command', 'H', 0), + ('sequence', 'H', 0), + ('qqNum', 'L', 0), + ) + + +class QQ3Packet(Packet): + __hdr__ = ( + ('header_type', 'B', 3), + ('command', 'B', 0), + ('sequence', 'H', 0), + ('unknown1', 'L', 0), + ('unknown2', 'L', 0), + ('unknown3', 'L', 0), + ('unknown4', 'L', 0), + ('unknown5', 'L', 0), + ('unknown6', 'L', 0), + ('unknown7', 'L', 0), + ('unknown8', 'L', 0), + ('unknown9', 'L', 0), + ('unknown10', 'B', 1), + ('unknown11', 'B', 0), + ('unknown12', 'B', 0), + ('source', 'H', 0), + ('unknown13', 'B', 0), + ) + + +class QQ5Packet(Packet): + __hdr__ = ( + ('header_type', 'B', 5), + ('source', 'H', 0), + ('unknown', 'H', 0), + ('command', 'H', 0), + ('sequence', 'H', 0), + ('qqNum', 'L', 0), + ) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/radiotap.py b/scripts/external_libs/dpkt-1.8.6/dpkt/radiotap.py new file mode 100644 index 00000000..318be6cc --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/radiotap.py @@ -0,0 +1,292 @@ +'''Radiotap''' + +import dpkt +import ieee80211 +import socket + +# Ref: http://www.radiotap.org +# Fields Ref: http://www.radiotap.org/defined-fields/all + +# Present flags +_TSFT_MASK = 0x1000000 +_FLAGS_MASK = 0x2000000 +_RATE_MASK = 0x4000000 +_CHANNEL_MASK = 0x8000000 +_FHSS_MASK = 0x10000000 +_ANT_SIG_MASK = 0x20000000 +_ANT_NOISE_MASK = 0x40000000 +_LOCK_QUAL_MASK = 0x80000000 +_TX_ATTN_MASK = 0x10000 +_DB_TX_ATTN_MASK = 0x20000 +_DBM_TX_POWER_MASK = 0x40000 +_ANTENNA_MASK = 0x80000 +_DB_ANT_SIG_MASK = 0x100000 +_DB_ANT_NOISE_MASK = 0x200000 +_RX_FLAGS_MASK = 0x400000 +_CHANNELPLUS_MASK = 0x200 +_EXT_MASK = 0x1 + +_TSFT_SHIFT = 24 +_FLAGS_SHIFT = 25 +_RATE_SHIFT = 26 +_CHANNEL_SHIFT = 27 +_FHSS_SHIFT = 28 +_ANT_SIG_SHIFT = 29 +_ANT_NOISE_SHIFT = 30 +_LOCK_QUAL_SHIFT = 31 +_TX_ATTN_SHIFT = 16 +_DB_TX_ATTN_SHIFT = 17 +_DBM_TX_POWER_SHIFT = 18 +_ANTENNA_SHIFT = 19 +_DB_ANT_SIG_SHIFT = 20 +_DB_ANT_NOISE_SHIFT = 21 +_RX_FLAGS_SHIFT = 22 +_CHANNELPLUS_SHIFT = 10 +_EXT_SHIFT = 0 + +# Flags elements +_FLAGS_SIZE = 2 +_CFP_FLAG_SHIFT = 0 +_PREAMBLE_SHIFT = 1 +_WEP_SHIFT = 2 +_FRAG_SHIFT = 3 +_FCS_SHIFT = 4 +_DATA_PAD_SHIFT = 5 +_BAD_FCS_SHIFT = 6 +_SHORT_GI_SHIFT = 7 + +# Channel type +_CHAN_TYPE_SIZE = 4 +_CHANNEL_TYPE_SHIFT = 4 +_CCK_SHIFT = 5 +_OFDM_SHIFT = 6 +_TWO_GHZ_SHIFT = 7 +_FIVE_GHZ_SHIFT = 8 +_PASSIVE_SHIFT = 9 +_DYN_CCK_OFDM_SHIFT = 10 +_GFSK_SHIFT = 11 +_GSM_SHIFT = 12 +_STATIC_TURBO_SHIFT = 13 +_HALF_RATE_SHIFT = 14 +_QUARTER_RATE_SHIFT = 15 + +# Flags offsets and masks +_FCS_SHIFT = 4 +_FCS_MASK = 0x10 + +class Radiotap(dpkt.Packet): + __hdr__ = ( + ('version', 'B', 0), + ('pad', 'B', 0), + ('length', 'H', 0), + ('present_flags', 'I', 0) + ) + + def _get_tsft_present(self): return (self.present_flags & _TSFT_MASK) >> _TSFT_SHIFT + def _set_tsft_present(self, val): self.present_flags = self.present_flags | (val << _TSFT_SHIFT) + def _get_flags_present(self): return (self.present_flags & _FLAGS_MASK) >> _FLAGS_SHIFT + def _set_flags_present(self, val): self.present_flags = self.present_flags | (val << _FLAGS_SHIFT) + def _get_rate_present(self): return (self.present_flags & _RATE_MASK) >> _RATE_SHIFT + def _set_rate_present(self, val): self.present_flags = self.present_flags | (val << _RATE_SHIFT) + def _get_channel_present(self): return (self.present_flags & _CHANNEL_MASK) >> _CHANNEL_SHIFT + def _set_channel_present(self, val): self.present_flags = self.present_flags | (val << _CHANNEL_SHIFT) + def _get_fhss_present(self): return (self.present_flags & _FHSS_MASK) >> _FHSS_SHIFT + def _set_fhss_present(self, val): self.present_flags = self.present_flags | (val << _FHSS_SHIFT) + def _get_ant_sig_present(self): return (self.present_flags & _ANT_SIG_MASK) >> _ANT_SIG_SHIFT + def _set_ant_sig_present(self, val): self.present_flags = self.present_flags | (val << _ANT_SIG_SHIFT) + def _get_ant_noise_present(self): return (self.present_flags & _ANT_NOISE_MASK) >> _ANT_NOISE_SHIFT + def _set_ant_noise_present(self, val): self.present_flags = self.present_flags | (val << _ANT_NOISE_SHIFT) + def _get_lock_qual_present(self): return (self.present_flags & _LOCK_QUAL_MASK) >> _LOCK_QUAL_SHIFT + def _set_lock_qual_present(self, val): self.present_flags = self.present_flags | (val << _LOCK_QUAL_SHIFT) + def _get_tx_attn_present(self): return (self.present_flags & _TX_ATTN_MASK) >> _TX_ATTN_SHIFT + def _set_tx_attn_present(self, val): self.present_flags = self.present_flags | (val << _TX_ATTN_SHIFT) + def _get_db_tx_attn_present(self): return (self.present_flags & _DB_TX_ATTN_MASK) >> _DB_TX_ATTN_SHIFT + def _set_db_tx_attn_present(self, val): self.present_flags = self.present_flags | (val << _DB_TX_ATTN_SHIFT) + def _get_dbm_power_present(self): return (self.present_flags & _DBM_TX_POWER_MASK) >> _DBM_TX_POWER_SHIFT + def _set_dbm_power_present(self, val): self.present_flags = self.present_flags | (val << _DBM_TX_POWER_SHIFT) + def _get_ant_present(self): return (self.present_flags & _ANTENNA_MASK) >> _ANTENNA_SHIFT + def _set_ant_present(self, val): self.present_flags = self.present_flags | (val << _ANTENNA_SHIFT) + def _get_db_ant_sig_present(self): return (self.present_flags & _DB_ANT_SIG_MASK) >> _DB_ANT_SIG_SHIFT + def _set_db_ant_sig_present(self, val): self.present_flags = self.present_flags | (val << _DB_ANT_SIG_SHIFT) + def _get_db_ant_noise_present(self): return (self.present_flags & _DB_ANT_NOISE_MASK) >> _DB_ANT_NOISE_SHIFT + def _set_db_ant_noise_present(self, val): self.present_flags = self.present_flags | (val << _DB_ANT_NOISE_SHIFT) + def _get_rx_flags_present(self): return (self.present_flags & _RX_FLAGS_MASK) >> _RX_FLAGS_SHIFT + def _set_rx_flags_present(self, val): self.present_flags = self.present_flags | (val << _RX_FLAGS_SHIFT) + def _get_chanplus_present(self): return (self.present_flags & _CHANNELPLUS_MASK) >> _CHANNELPLUS_SHIFT + def _set_chanplus_present(self, val): self.present_flags = self.present_flags | (val << _CHANNELPLUS_SHIFT) + def _get_ext_present(self): return (self.present_flags & _EXT_MASK) >> _EXT_SHIFT + def _set_ext_present(self, val): self.present_flags = self.present_flags | (val << _EXT_SHIFT) + + tsft_present = property(_get_tsft_present, _set_tsft_present) + flags_present = property(_get_flags_present, _set_flags_present) + rate_present = property(_get_rate_present, _set_rate_present) + channel_present = property(_get_channel_present, _set_channel_present) + fhss_present = property(_get_fhss_present, _set_fhss_present) + ant_sig_present = property(_get_ant_sig_present, _set_ant_sig_present) + ant_noise_present = property(_get_ant_noise_present, _set_ant_noise_present) + lock_qual_present = property(_get_lock_qual_present, _set_lock_qual_present) + tx_attn_present = property(_get_tx_attn_present, _set_tx_attn_present) + db_tx_attn_present = property(_get_db_tx_attn_present, _set_db_tx_attn_present) + dbm_tx_power_present = property(_get_dbm_power_present, _set_dbm_power_present) + ant_present = property(_get_ant_present, _set_ant_present) + db_ant_sig_present = property(_get_db_ant_sig_present, _set_db_ant_sig_present) + db_ant_noise_present = property(_get_db_ant_noise_present, _set_db_ant_noise_present) + rx_flags_present = property(_get_rx_flags_present, _set_rx_flags_present) + chanplus_present = property(_get_chanplus_present, _set_chanplus_present) + ext_present = property(_get_ext_present, _set_ext_present) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = buf[socket.ntohs(self.length):] + + self.fields = [] + buf = buf[self.__hdr_len__:] + + # decode each field into self. (eg. self.tsft) as well as append it self.fields list + field_decoder = [ + ('tsft', self.tsft_present, self.TSFT), + ('flags', self.flags_present, self.Flags), + ('rate', self.rate_present, self.Rate), + ('channel', self.channel_present, self.Channel), + ('fhss', self.fhss_present, self.FHSS), + ('ant_sig', self.ant_sig_present, self.AntennaSignal), + ('ant_noise', self.ant_noise_present, self.AntennaNoise), + ('lock_qual', self.lock_qual_present, self.LockQuality), + ('tx_attn', self.tx_attn_present, self.TxAttenuation), + ('db_tx_attn', self.db_tx_attn_present, self.DbTxAttenuation), + ('dbm_tx_power', self.dbm_tx_power_present, self.DbmTxPower), + ('ant', self.ant_present, self.Antenna), + ('db_ant_sig', self.db_ant_sig_present, self.DbAntennaSignal), + ('db_ant_noise', self.db_ant_noise_present, self.DbAntennaNoise), + ('rx_flags', self.rx_flags_present, self.RxFlags) + ] + for name, present_bit, parser in field_decoder: + if present_bit: + field = parser(buf) + field.data = '' + setattr(self, name, field) + self.fields.append(field) + buf = buf[len(field):] + + if len(self.data) > 0: + if self.flags_present and self.flags.fcs: + self.data = ieee80211.IEEE80211(self.data, fcs = self.flags.fcs) + else: + self.data = ieee80211.IEEE80211(self.data) + + class Antenna(dpkt.Packet): + __hdr__ = ( + ('index', 'B', 0), + ) + + class AntennaNoise(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class AntennaSignal(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class Channel(dpkt.Packet): + __hdr__ = ( + ('freq', 'H', 0), + ('flags', 'H', 0), + ) + + class FHSS(dpkt.Packet): + __hdr__ = ( + ('set', 'B', 0), + ('pattern', 'B', 0), + ) + + class Flags(dpkt.Packet): + __hdr__ = ( + ('val', 'B', 0), + ) + + def _get_fcs_present(self): return (self.val & _FCS_MASK) >> _FCS_SHIFT + + def _set_fcs_present(self, v): (v << _FCS_SHIFT) | (self.val & ~_FCS_MASK) + fcs = property(_get_fcs_present, _set_fcs_present) + + class LockQuality(dpkt.Packet): + __hdr__ = ( + ('val', 'H', 0), + ) + + class RxFlags(dpkt.Packet): + __hdr__ = ( + ('val', 'H', 0), + ) + + class Rate(dpkt.Packet): + __hdr__ = ( + ('val', 'B', 0), + ) + + class TSFT(dpkt.Packet): + __hdr__ = ( + ('usecs', 'Q', 0), + ) + + class TxAttenuation(dpkt.Packet): + __hdr__ = ( + ('val', 'H', 0), + ) + + class DbTxAttenuation(dpkt.Packet): + __hdr__ = ( + ('db', 'H', 0), + ) + + class DbAntennaNoise(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class DbAntennaSignal(dpkt.Packet): + __hdr__ = ( + ('db', 'B', 0), + ) + + class DbmTxPower(dpkt.Packet): + __hdr__ = ( + ('dbm', 'B', 0), + ) + +if __name__ == '__main__': + import unittest + + class RadiotapTestCase(unittest.TestCase): + def test_Radiotap(self): + s = '\x00\x00\x00\x18\x6e\x48\x00\x00\x00\x02\x6c\x09\xa0\x00\xa8\x81\x02\x00\x00\x00\x00\x00\x00\x00' + rad = Radiotap(s) + self.failUnless(rad.version == 0) + self.failUnless(rad.present_flags == 0x6e480000) + self.failUnless(rad.tsft_present == 0) + self.failUnless(rad.flags_present == 1) + self.failUnless(rad.rate_present == 1) + self.failUnless(rad.channel_present == 1) + self.failUnless(rad.fhss_present == 0) + self.failUnless(rad.ant_sig_present == 1) + self.failUnless(rad.ant_noise_present == 1) + self.failUnless(rad.lock_qual_present == 0) + self.failUnless(rad.db_tx_attn_present == 0) + self.failUnless(rad.dbm_tx_power_present == 0) + self.failUnless(rad.ant_present == 1) + self.failUnless(rad.db_ant_sig_present == 0) + self.failUnless(rad.db_ant_noise_present == 0) + self.failUnless(rad.rx_flags_present == 1) + self.failUnless(rad.channel.freq == 0x6c09) + self.failUnless(rad.channel.flags == 0xa000) + self.failUnless(len(rad.fields) == 7) + + def test_fcs(self): + s = '\x00\x00\x1a\x00\x2f\x48\x00\x00\x34\x8f\x71\x09\x00\x00\x00\x00\x10\x0c\x85\x09\xc0\x00\xcc\x01\x00\x00' + rt = Radiotap(s) + self.failUnless(rt.flags_present == 1) + self.failUnless(rt.flags.fcs == 1) + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/radius.py b/scripts/external_libs/dpkt-1.8.6/dpkt/radius.py new file mode 100644 index 00000000..440f86f6 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/radius.py @@ -0,0 +1,88 @@ +# $Id: radius.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Remote Authentication Dial-In User Service.""" + +import dpkt + +# http://www.untruth.org/~josh/security/radius/radius-auth.html +# RFC 2865 + +class RADIUS(dpkt.Packet): + __hdr__ = ( + ('code', 'B', 0), + ('id', 'B', 0), + ('len', 'H', 4), + ('auth', '16s', '') + ) + attrs = '' + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.attrs = parse_attrs(self.data) + self.data = '' + +def parse_attrs(buf): + """Parse attributes buffer into a list of (type, data) tuples.""" + attrs = [] + while buf: + t = ord(buf[0]) + l = ord(buf[1]) + if l < 2: + break + d, buf = buf[2:l], buf[l:] + attrs.append((t, d)) + return attrs + +# Codes +RADIUS_ACCESS_REQUEST = 1 +RADIUS_ACCESS_ACCEPT = 2 +RADIUS_ACCESS_REJECT = 3 +RADIUS_ACCT_REQUEST = 4 +RADIUS_ACCT_RESPONSE = 5 +RADIUS_ACCT_STATUS = 6 +RADIUS_ACCESS_CHALLENGE = 11 + +# Attributes +RADIUS_USER_NAME = 1 +RADIUS_USER_PASSWORD = 2 +RADIUS_CHAP_PASSWORD = 3 +RADIUS_NAS_IP_ADDR = 4 +RADIUS_NAS_PORT = 5 +RADIUS_SERVICE_TYPE = 6 +RADIUS_FRAMED_PROTOCOL = 7 +RADIUS_FRAMED_IP_ADDR = 8 +RADIUS_FRAMED_IP_NETMASK = 9 +RADIUS_FRAMED_ROUTING = 10 +RADIUS_FILTER_ID = 11 +RADIUS_FRAMED_MTU = 12 +RADIUS_FRAMED_COMPRESSION = 13 +RADIUS_LOGIN_IP_HOST = 14 +RADIUS_LOGIN_SERVICE = 15 +RADIUS_LOGIN_TCP_PORT = 16 +# unassigned +RADIUS_REPLY_MESSAGE = 18 +RADIUS_CALLBACK_NUMBER = 19 +RADIUS_CALLBACK_ID = 20 +# unassigned +RADIUS_FRAMED_ROUTE = 22 +RADIUS_FRAMED_IPX_NETWORK = 23 +RADIUS_STATE = 24 +RADIUS_CLASS = 25 +RADIUS_VENDOR_SPECIFIC = 26 +RADIUS_SESSION_TIMEOUT = 27 +RADIUS_IDLE_TIMEOUT = 28 +RADIUS_TERMINATION_ACTION = 29 +RADIUS_CALLED_STATION_ID = 30 +RADIUS_CALLING_STATION_ID = 31 +RADIUS_NAS_ID = 32 +RADIUS_PROXY_STATE = 33 +RADIUS_LOGIN_LAT_SERVICE = 34 +RADIUS_LOGIN_LAT_NODE = 35 +RADIUS_LOGIN_LAT_GROUP = 36 +RADIUS_FRAMED_ATALK_LINK = 37 +RADIUS_FRAMED_ATALK_NETWORK = 38 +RADIUS_FRAMED_ATALK_ZONE = 39 +# 40-59 reserved for accounting +RADIUS_CHAP_CHALLENGE = 60 +RADIUS_NAS_PORT_TYPE = 61 +RADIUS_PORT_LIMIT = 62 +RADIUS_LOGIN_LAT_PORT = 63 diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/rfb.py b/scripts/external_libs/dpkt-1.8.6/dpkt/rfb.py new file mode 100644 index 00000000..f6d2a5d5 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/rfb.py @@ -0,0 +1,81 @@ +# $Id: rfb.py 47 2008-05-27 02:10:00Z jon.oberheide $ + +"""Remote Framebuffer Protocol.""" + +import dpkt + +# Remote Framebuffer Protocol +# http://www.realvnc.com/docs/rfbproto.pdf + +# Client to Server Messages +CLIENT_SET_PIXEL_FORMAT = 0 +CLIENT_SET_ENCODINGS = 2 +CLIENT_FRAMEBUFFER_UPDATE_REQUEST = 3 +CLIENT_KEY_EVENT = 4 +CLIENT_POINTER_EVENT = 5 +CLIENT_CUT_TEXT = 6 + +# Server to Client Messages +SERVER_FRAMEBUFFER_UPDATE = 0 +SERVER_SET_COLOUR_MAP_ENTRIES = 1 +SERVER_BELL = 2 +SERVER_CUT_TEXT = 3 + +class RFB(dpkt.Packet): + __hdr__ = ( + ('type', 'B', 0), + ) + +class SetPixelFormat(dpkt.Packet): + __hdr__ = ( + ('pad', '3s', ''), + ('pixel_fmt', '16s', '') + ) + +class SetEncodings(dpkt.Packet): + __hdr__ = ( + ('pad', '1s', ''), + ('num_encodings', 'H', 0) + ) + +class FramebufferUpdateRequest(dpkt.Packet): + __hdr__ = ( + ('incremental', 'B', 0), + ('x_position', 'H', 0), + ('y_position', 'H', 0), + ('width', 'H', 0), + ('height', 'H', 0) + ) + +class KeyEvent(dpkt.Packet): + __hdr__ = ( + ('down_flag', 'B', 0), + ('pad', '2s', ''), + ('key', 'I', 0) + ) + +class PointerEvent(dpkt.Packet): + __hdr__ = ( + ('button_mask', 'B', 0), + ('x_position', 'H', 0), + ('y_position', 'H', 0) + ) + +class FramebufferUpdate(dpkt.Packet): + __hdr__ = ( + ('pad', '1s', ''), + ('num_rects', 'H', 0) + ) + +class SetColourMapEntries(dpkt.Packet): + __hdr__ = ( + ('pad', '1s', ''), + ('first_colour', 'H', 0), + ('num_colours', 'H', 0) + ) + +class CutText(dpkt.Packet): + __hdr__ = ( + ('pad', '3s', ''), + ('length', 'I', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/rip.py b/scripts/external_libs/dpkt-1.8.6/dpkt/rip.py new file mode 100644 index 00000000..7542cb3d --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/rip.py @@ -0,0 +1,84 @@ +# $Id: rip.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Routing Information Protocol.""" + +import dpkt + +# RIP v2 - RFC 2453 +# http://tools.ietf.org/html/rfc2453 + +REQUEST = 1 +RESPONSE = 2 + +class RIP(dpkt.Packet): + __hdr__ = ( + ('cmd', 'B', REQUEST), + ('v', 'B', 2), + ('rsvd', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + self.auth = None + while self.data: + rte = RTE(self.data[:20]) + if rte.family == 0xFFFF: + self.auth = Auth(self.data[:20]) + else: + l.append(rte) + self.data = self.data[20:] + self.data = self.rtes = l + + def __len__(self): + len = self.__hdr_len__ + if self.auth: + len += len(self.auth) + len += sum(map(len, self.rtes)) + return len + + def __str__(self): + auth = '' + if self.auth: + auth = str(self.auth) + return self.pack_hdr() + \ + auth + \ + ''.join(map(str, self.rtes)) + +class RTE(dpkt.Packet): + __hdr__ = ( + ('family', 'H', 2), + ('route_tag', 'H', 0), + ('addr', 'I', 0), + ('subnet', 'I', 0), + ('next_hop', 'I', 0), + ('metric', 'I', 1) + ) + +class Auth(dpkt.Packet): + __hdr__ = ( + ('rsvd', 'H', 0xFFFF), + ('type', 'H', 2), + ('auth', '16s', 0) + ) + +if __name__ == '__main__': + import unittest + + class RIPTestCase(unittest.TestCase): + def testPack(self): + r = RIP(self.s) + self.failUnless(self.s == str(r)) + + def testUnpack(self): + r = RIP(self.s) + self.failUnless(r.auth == None) + self.failUnless(len(r.rtes) == 2) + + rte = r.rtes[1] + self.failUnless(rte.family == 2) + self.failUnless(rte.route_tag == 0) + self.failUnless(rte.metric == 1) + + s = '\x02\x02\x00\x00\x00\x02\x00\x00\x01\x02\x03\x00\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x00\xc0\xa8\x01\x08\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x01' + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/rpc.py b/scripts/external_libs/dpkt-1.8.6/dpkt/rpc.py new file mode 100644 index 00000000..19281581 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/rpc.py @@ -0,0 +1,146 @@ +# $Id: rpc.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Remote Procedure Call.""" + +import struct +import dpkt + +# RPC.dir +CALL = 0 +REPLY = 1 + +# RPC.Auth.flavor +AUTH_NONE = AUTH_NULL = 0 +AUTH_UNIX = 1 +AUTH_SHORT = 2 +AUTH_DES = 3 + +# RPC.Reply.stat +MSG_ACCEPTED = 0 +MSG_DENIED = 1 + +# RPC.Reply.Accept.stat +SUCCESS = 0 +PROG_UNAVAIL = 1 +PROG_MISMATCH = 2 +PROC_UNAVAIL = 3 +GARBAGE_ARGS = 4 +SYSTEM_ERR = 5 + +# RPC.Reply.Reject.stat +RPC_MISMATCH = 0 +AUTH_ERROR = 1 + +class RPC(dpkt.Packet): + __hdr__ = ( + ('xid', 'I', 0), + ('dir', 'I', CALL) + ) + class Auth(dpkt.Packet): + __hdr__ = (('flavor', 'I', AUTH_NONE), ) + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + n = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:4+n] + def __len__(self): + return 8 + len(self.data) + def __str__(self): + return self.pack_hdr() + struct.pack('>I', len(self.data)) + \ + str(self.data) + + class Call(dpkt.Packet): + __hdr__ = ( + ('rpcvers', 'I', 2), + ('prog', 'I', 0), + ('vers', 'I', 0), + ('proc', 'I', 0) + ) + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.cred = RPC.Auth(self.data) + self.verf = RPC.Auth(self.data[len(self.cred):]) + self.data = self.data[len(self.cred) + len(self.verf):] + def __len__(self): + return len(str(self)) # XXX + def __str__(self): + return dpkt.Packet.__str__(self) + \ + str(getattr(self, 'cred', RPC.Auth())) + \ + str(getattr(self, 'verf', RPC.Auth())) + \ + str(self.data) + + class Reply(dpkt.Packet): + __hdr__ = (('stat', 'I', MSG_ACCEPTED), ) + + class Accept(dpkt.Packet): + __hdr__ = (('stat', 'I', SUCCESS), ) + def unpack(self, buf): + self.verf = RPC.Auth(buf) + buf = buf[len(self.verf):] + self.stat = struct.unpack('>I', buf[:4])[0] + if self.stat == SUCCESS: + self.data = buf[4:] + elif self.stat == PROG_MISMATCH: + self.low, self.high = struct.unpack('>II', buf[4:12]) + self.data = buf[12:] + def __len__(self): + if self.stat == PROG_MISMATCH: n = 8 + else: n = 0 + return len(self.verf) + 4 + n + len(self.data) + def __str__(self): + if self.stat == PROG_MISMATCH: + return str(self.verf) + struct.pack('>III', self.stat, + self.low, self.high) + self.data + return str(self.verf) + dpkt.Packet.__str__(self) + + class Reject(dpkt.Packet): + __hdr__ = (('stat', 'I', AUTH_ERROR), ) + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.stat == RPC_MISMATCH: + self.low, self.high = struct.unpack('>II', self.data[:8]) + self.data = self.data[8:] + elif self.stat == AUTH_ERROR: + self.why = struct.unpack('>I', self.data[:4])[0] + self.data = self.data[4:] + def __len__(self): + if self.stat == RPC_MISMATCH: n = 8 + elif self.stat == AUTH_ERROR: n =4 + else: n = 0 + return 4 + n + len(self.data) + def __str__(self): + if self.stat == RPC_MISMATCH: + return struct.pack('>III', self.stat, self.low, + self.high) + self.data + elif self.stat == AUTH_ERROR: + return struct.pack('>II', self.stat, self.why) + self.data + return dpkt.Packet.__str__(self) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.stat == MSG_ACCEPTED: + self.data = self.accept = self.Accept(self.data) + elif self.status == MSG_DENIED: + self.data = self.reject = self.Reject(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.dir == CALL: + self.data = self.call = self.Call(self.data) + elif self.dir == REPLY: + self.data = self.reply = self.Reply(self.data) + +def unpack_xdrlist(cls, buf): + l = [] + while buf: + if buf.startswith('\x00\x00\x00\x01'): + p = cls(buf[4:]) + l.append(p) + buf = p.data + elif buf.startswith('\x00\x00\x00\x00'): + break + else: + raise dpkt.UnpackError, 'invalid XDR list' + return l + +def pack_xdrlist(*args): + return '\x00\x00\x00\x01'.join(map(str, args)) + '\x00\x00\x00\x00' diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/rtp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/rtp.py new file mode 100644 index 00000000..65fd0b98 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/rtp.py @@ -0,0 +1,70 @@ +# $Id: rtp.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Real-Time Transport Protocol""" + +from dpkt import Packet + +# version 1100 0000 0000 0000 ! 0xC000 14 +# p 0010 0000 0000 0000 ! 0x2000 13 +# x 0001 0000 0000 0000 ! 0x1000 12 +# cc 0000 1111 0000 0000 ! 0x0F00 8 +# m 0000 0000 1000 0000 ! 0x0080 7 +# pt 0000 0000 0111 1111 ! 0x007F 0 +# + +_VERSION_MASK= 0xC000 +_P_MASK = 0x2000 +_X_MASK = 0x1000 +_CC_MASK = 0x0F00 +_M_MASK = 0x0080 +_PT_MASK = 0x007F +_VERSION_SHIFT=14 +_P_SHIFT = 13 +_X_SHIFT = 12 +_CC_SHIFT = 8 +_M_SHIFT = 7 +_PT_SHIFT = 0 + +VERSION = 2 + +class RTP(Packet): + __hdr__ = ( + ('_type', 'H', 0x8000), + ('seq', 'H', 0), + ('ts', 'I', 0), + ('ssrc', 'I', 0), + ) + csrc = '' + + def _get_version(self): return (self._type&_VERSION_MASK)>>_VERSION_SHIFT + def _set_version(self, ver): + self._type = (ver << _VERSION_SHIFT) | (self._type & ~_VERSION_MASK) + def _get_p(self): return (self._type & _P_MASK) >> _P_SHIFT + def _set_p(self, p): self._type = (p << _P_SHIFT) | (self._type & ~_P_MASK) + def _get_x(self): return (self._type & _X_MASK) >> _X_SHIFT + def _set_x(self, x): self._type = (x << _X_SHIFT) | (self._type & ~_X_MASK) + def _get_cc(self): return (self._type & _CC_MASK) >> _CC_SHIFT + def _set_cc(self, cc): self._type = (cc<<_CC_SHIFT)|(self._type&~_CC_MASK) + def _get_m(self): return (self._type & _M_MASK) >> _M_SHIFT + def _set_m(self, m): self._type = (m << _M_SHIFT) | (self._type & ~_M_MASK) + def _get_pt(self): return (self._type & _PT_MASK) >> _PT_SHIFT + def _set_pt(self, m): self._type = (m << _PT_SHIFT)|(self._type&~_PT_MASK) + + version = property(_get_version, _set_version) + p = property(_get_p, _set_p) + x = property(_get_x, _set_x) + cc = property(_get_cc, _set_cc) + m = property(_get_m, _set_m) + pt = property(_get_pt, _set_pt) + + def __len__(self): + return self.__hdr_len__ + len(self.csrc) + len(self.data) + + def __str__(self): + return self.pack_hdr() + self.csrc + str(self.data) + + def unpack(self, buf): + super(RTP, self).unpack(buf) + self.csrc = buf[self.__hdr_len__:self.__hdr_len__ + self.cc * 4] + self.data = buf[self.__hdr_len__ + self.cc * 4:] + diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/rx.py b/scripts/external_libs/dpkt-1.8.6/dpkt/rx.py new file mode 100644 index 00000000..5b898efc --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/rx.py @@ -0,0 +1,44 @@ +# $Id: rx.py 23 2006-11-08 15:45:33Z jonojono $ + +"""Rx Protocol.""" + +import dpkt + +# Types +DATA = 0x01 +ACK = 0x02 +BUSY = 0x03 +ABORT = 0x04 +ACKALL = 0x05 +CHALLENGE = 0x06 +RESPONSE = 0x07 +DEBUG = 0x08 + +# Flags +CLIENT_INITIATED = 0x01 +REQUEST_ACK = 0x02 +LAST_PACKET = 0x04 +MORE_PACKETS = 0x08 +SLOW_START_OK = 0x20 +JUMBO_PACKET = 0x20 + +# Security +SEC_NONE = 0x00 +SEC_BCRYPT = 0x01 +SEC_RXKAD = 0x02 +SEC_RXKAD_ENC = 0x03 + +class Rx(dpkt.Packet): + __hdr__ = ( + ('epoch', 'I', 0), + ('cid', 'I', 0), + ('call', 'I', 1), + ('seq', 'I', 0), + ('serial', 'I', 1), + ('type', 'B', 0), + ('flags', 'B', CLIENT_INITIATED), + ('status', 'B', 0), + ('security', 'B', 0), + ('sum', 'H', 0), + ('service', 'H', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/sccp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/sccp.py new file mode 100644 index 00000000..7a4ac084 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/sccp.py @@ -0,0 +1,196 @@ +# $Id: sccp.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Cisco Skinny Client Control Protocol.""" + +import dpkt + +KEYPAD_BUTTON = 0x00000003 +OFF_HOOK = 0x00000006 +ON_HOOK = 0x00000007 +OPEN_RECEIVE_CHANNEL_ACK= 0x00000022 +START_TONE = 0x00000082 +STOP_TONE = 0x00000083 +SET_LAMP = 0x00000086 +SET_SPEAKER_MODE = 0x00000088 +START_MEDIA_TRANSMIT = 0x0000008A +STOP_MEDIA_TRANSMIT = 0x0000008B +CALL_INFO = 0x0000008F +DEFINE_TIME_DATE = 0x00000094 +DISPLAY_TEXT = 0x00000099 +OPEN_RECEIVE_CHANNEL = 0x00000105 +CLOSE_RECEIVE_CHANNEL = 0x00000106 +SELECT_SOFTKEYS = 0x00000110 +CALL_STATE = 0x00000111 +DISPLAY_PROMPT_STATUS = 0x00000112 +CLEAR_PROMPT_STATUS = 0x00000113 +ACTIVATE_CALL_PLANE = 0x00000116 + +class ActivateCallPlane(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('line_instance', 'I', 0), + ) + +class CallInfo(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('calling_party_name', '40s', ''), + ('calling_party', '24s', ''), + ('called_party_name', '40s', ''), + ('called_party', '24s', ''), + ('line_instance', 'I', 0), + ('call_id', 'I', 0), + ('call_type', 'I', 0), + ('orig_called_party_name', '40s', ''), + ('orig_called_party', '24s', '') + ) + +class CallState(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('call_state', 'I', 12), # 12: Proceed, 15: Connected + ('line_instance', 'I', 1), + ('call_id', 'I', 0) + ) + +class ClearPromptStatus(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('line_instance', 'I', 1), + ('call_id', 'I', 0) + ) + +class CloseReceiveChannel(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ) + +class DisplayPromptStatus(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('msg_timeout', 'I', 0), + ('display_msg', '32s', ''), + ('line_instance', 'I', 1), + ('call_id', 'I', 0) + ) + +class DisplayText(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('display_msg', '36s', ''), + ) + +class KeypadButton(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('button', 'I', 0), + ) + +class OpenReceiveChannel(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ('ms_packet', 'I', 0), + ('payload_capability', 'I', 4), # 4: G.711 u-law 64k + ('echo_cancel_type', 'I', 4), + ('g723_bitrate', 'I', 0), + ) + +class OpenReceiveChannelAck(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('channel_status', 'I', 0), + ('ip', '4s', ''), + ('port', 'I', 0), + ('passthruparty_id', 'I', 0), + ) + +class SelectStartKeys(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('line_id', 'I', 1), + ('call_id', 'I', 0), + ('softkey_set', 'I', 8), + ('softkey_map', 'I', 0xffffffffL) + ) + +class SetLamp(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('stimulus', 'I', 9), # 9: Line + ('stimulus_instance', 'I', 1), + ('lamp_mode', 'I', 1), + ) + +class SetSpeakerMode(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('speaker', 'I', 2), # 2: SpeakerOff + ) + +class StartMediaTransmission(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ('remote_ip', '4s', ''), + ('remote_port', 'I', 0), + ('ms_packet', 'I', 0), + ('payload_capability', 'I', 4), # 4: G.711 u-law 64k + ('precedence', 'I', 0), + ('silence_suppression', 'I', 0), + ('max_frames_per_pkt', 'I', 1), + ('g723_bitrate', 'I', 0), + ) + +class StartTone(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('tone', 'I', 0x24), # 0x24: AlertingTone + ) + +class StopMediaTransmission(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('conference_id', 'I', 0), + ('passthruparty_id', 'I', 0), + ) + +class SCCP(dpkt.Packet): + __byte_order__ = '<' + __hdr__ = ( + ('len', 'I', 0), + ('rsvd', 'I', 0), + ('msgid', 'I', 0), + ('msg', '0s', ''), + ) + _msgsw = { + KEYPAD_BUTTON:KeypadButton, + OPEN_RECEIVE_CHANNEL_ACK:OpenReceiveChannelAck, + START_TONE:StartTone, + SET_LAMP:SetLamp, + START_MEDIA_TRANSMIT:StartMediaTransmission, + STOP_MEDIA_TRANSMIT:StopMediaTransmission, + CALL_INFO:CallInfo, + DISPLAY_TEXT:DisplayText, + OPEN_RECEIVE_CHANNEL:OpenReceiveChannel, + CLOSE_RECEIVE_CHANNEL:CloseReceiveChannel, + CALL_STATE:CallState, + DISPLAY_PROMPT_STATUS:DisplayPromptStatus, + CLEAR_PROMPT_STATUS:ClearPromptStatus, + ACTIVATE_CALL_PLANE:ActivateCallPlane, + } + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + n = self.len - 4 + if n > len(self.data): + raise dpkt.NeedData('not enough data') + self.msg, self.data = self.data[:n], self.data[n:] + try: + p = self._msgsw[self.msgid](self.msg) + setattr(self, p.__class__.__name__.lower(), p) + except (KeyError, dpkt.UnpackError): + pass diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/sctp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/sctp.py new file mode 100644 index 00000000..31b13e69 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/sctp.py @@ -0,0 +1,90 @@ +# $Id: sctp.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Stream Control Transmission Protocol.""" + +import dpkt, crc32c + +# Stream Control Transmission Protocol +# http://tools.ietf.org/html/rfc2960 + +# Chunk Types +DATA = 0 +INIT = 1 +INIT_ACK = 2 +SACK = 3 +HEARTBEAT = 4 +HEARTBEAT_ACK = 5 +ABORT = 6 +SHUTDOWN = 7 +SHUTDOWN_ACK = 8 +ERROR = 9 +COOKIE_ECHO = 10 +COOKIE_ACK = 11 +ECNE = 12 +CWR = 13 +SHUTDOWN_COMPLETE = 14 + +class SCTP(dpkt.Packet): + __hdr__ = ( + ('sport', 'H', 0), + ('dport', 'H', 0), + ('vtag', 'I', 0), + ('sum', 'I', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + while self.data: + chunk = Chunk(self.data) + l.append(chunk) + self.data = self.data[len(chunk):] + self.data = self.chunks = l + + def __len__(self): + return self.__hdr_len__ + \ + sum(map(len, self.data)) + + def __str__(self): + l = [ str(x) for x in self.data ] + if self.sum == 0: + s = crc32c.add(0xffffffffL, self.pack_hdr()) + for x in l: + s = crc32c.add(s, x) + self.sum = crc32c.done(s) + return self.pack_hdr() + ''.join(l) + +class Chunk(dpkt.Packet): + __hdr__ = ( + ('type', 'B', INIT), + ('flags', 'B', 0), + ('len', 'H', 0) + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + self.data = self.data[:self.len - self.__hdr_len__] + +if __name__ == '__main__': + import unittest + + class SCTPTestCase(unittest.TestCase): + def testPack(self): + sctp = SCTP(self.s) + self.failUnless(self.s == str(sctp)) + sctp.sum = 0 + self.failUnless(self.s == str(sctp)) + + def testUnpack(self): + sctp = SCTP(self.s) + self.failUnless(sctp.sport == 32836) + self.failUnless(sctp.dport == 80) + self.failUnless(len(sctp.chunks) == 1) + self.failUnless(len(sctp) == 72) + + chunk = sctp.chunks[0] + self.failUnless(chunk.type == INIT) + self.failUnless(chunk.len == 60) + + s = '\x80\x44\x00\x50\x00\x00\x00\x00\x30\xba\xef\x54\x01\x00\x00\x3c\x3b\xb9\x9c\x46\x00\x01\xa0\x00\x00\x0a\xff\xff\x2b\x2d\x7e\xb2\x00\x05\x00\x08\x9b\xe6\x18\x9b\x00\x05\x00\x08\x9b\xe6\x18\x9c\x00\x0c\x00\x06\x00\x05\x00\x00\x80\x00\x00\x04\xc0\x00\x00\x04\xc0\x06\x00\x08\x00\x00\x00\x00' + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/sip.py b/scripts/external_libs/dpkt-1.8.6/dpkt/sip.py new file mode 100644 index 00000000..398eab8a --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/sip.py @@ -0,0 +1,32 @@ +# $Id: sip.py 48 2008-05-27 17:31:15Z yardley $ + +"""Session Initiation Protocol.""" + +import http + +class Request(http.Request): + """SIP request.""" + __hdr_defaults__ = { + 'method':'INVITE', + 'uri':'sip:user@example.com', + 'version':'2.0', + 'headers':{ 'To':'', 'From':'', 'Call-ID':'', 'CSeq':'', 'Contact':'' } + } + __methods = dict.fromkeys(( + 'ACK', 'BYE', 'CANCEL', 'INFO', 'INVITE', 'MESSAGE', 'NOTIFY', + 'OPTIONS', 'PRACK', 'PUBLISH', 'REFER', 'REGISTER', 'SUBSCRIBE', + 'UPDATE' + )) + __proto = 'SIP' + +class Response(http.Response): + """SIP response.""" + __hdr_defaults__ = { + 'version':'2.0', + 'status':'200', + 'reason':'OK', + 'headers':{ 'To':'', 'From':'', 'Call-ID':'', 'CSeq':'', 'Contact':'' } + } + __proto = 'SIP' + + diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/sll.py b/scripts/external_libs/dpkt-1.8.6/dpkt/sll.py new file mode 100644 index 00000000..dbe866f8 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/sll.py @@ -0,0 +1,23 @@ +# $Id: sll.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Linux libpcap "cooked" capture encapsulation.""" + +import arp, dpkt, ethernet + +class SLL(dpkt.Packet): + __hdr__ = ( + ('type', 'H', 0), # 0: to us, 1: bcast, 2: mcast, 3: other, 4: from us + ('hrd', 'H', arp.ARP_HRD_ETH), + ('hlen', 'H', 6), # hardware address length + ('hdr', '8s', ''), # first 8 bytes of link-layer header + ('ethtype', 'H', ethernet.ETH_TYPE_IP), + ) + _typesw = ethernet.Ethernet._typesw + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._typesw[self.ethtype](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, dpkt.UnpackError): + pass diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/smb.py b/scripts/external_libs/dpkt-1.8.6/dpkt/smb.py new file mode 100644 index 00000000..1964a535 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/smb.py @@ -0,0 +1,19 @@ +# $Id: smb.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Server Message Block.""" + +import dpkt + +class SMB(dpkt.Packet): + __hdr__ = [ + ('proto', '4s', ''), + ('cmd', 'B', 0), + ('err', 'I', 0), + ('flags1', 'B', 0), + ('flags2', 'B', 0), + ('pad', '6s', ''), + ('tid', 'H', 0), + ('pid', 'H', 0), + ('uid', 'H', 0), + ('mid', 'H', 0) + ] diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/snoop.py b/scripts/external_libs/dpkt-1.8.6/dpkt/snoop.py new file mode 100644 index 00000000..3374feb2 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/snoop.py @@ -0,0 +1,118 @@ +# $Id$ + +"""Snoop file format.""" + +import sys, time +import dpkt + +# RFC 1761 + +SNOOP_MAGIC = 0x736E6F6F70000000L + +SNOOP_VERSION = 2 + +SDL_8023 = 0 +SDL_8024 = 1 +SDL_8025 = 2 +SDL_8026 = 3 +SDL_ETHER = 4 +SDL_HDLC = 5 +SDL_CHSYNC = 6 +SDL_IBMCC = 7 +SDL_FDDI = 8 +SDL_OTHER = 9 + + +dltoff = { SDL_ETHER:14 } + +class PktHdr(dpkt.Packet): + """snoop packet header.""" + __byte_order__ = '!' + __hdr__ = ( + ('orig_len', 'I', 0), + ('incl_len', 'I', 0), + ('rec_len', 'I', 0), + ('cum_drops', 'I', 0), + ('ts_sec', 'I', 0), + ('ts_usec', 'I', 0), + ) + +class FileHdr(dpkt.Packet): + """snoop file header.""" + __byte_order__ = '!' + __hdr__ = ( + ('magic', 'Q', SNOOP_MAGIC), + ('v', 'I', SNOOP_VERSION), + ('linktype', 'I', SDL_ETHER), + ) + +class Writer(object): + """Simple snoop dumpfile writer.""" + def __init__(self, fileobj, linktype=SDL_ETHER): + self.__f = fileobj + fh = FileHdr(linktype=linktype) + self.__f.write(str(fh)) + + def writepkt(self, pkt, ts=None): + if ts is None: + ts = time.time() + s = str(pkt) + n = len(s) + pad_len = 4 - n % 4 if n % 4 else 0 + ph = PktHdr(orig_len=n,incl_len=n, + rec_len=PktHdr.__hdr_len__+n+pad_len, + ts_sec=int(ts), + ts_usec=int((int(ts) - float(ts)) * 1000000.0)) + self.__f.write(str(ph)) + self.__f.write(s + '\0' * pad_len) + + def close(self): + self.__f.close() + +class Reader(object): + """Simple pypcap-compatible snoop file reader.""" + + def __init__(self, fileobj): + self.name = fileobj.name + self.fd = fileobj.fileno() + self.__f = fileobj + buf = self.__f.read(FileHdr.__hdr_len__) + self.__fh = FileHdr(buf) + self.__ph = PktHdr + if self.__fh.magic != SNOOP_MAGIC: + raise ValueError, 'invalid snoop header' + self.dloff = dltoff[self.__fh.linktype] + self.filter = '' + + def fileno(self): + return self.fd + + def datalink(self): + return self.__fh.linktype + + def setfilter(self, value, optimize=1): + return NotImplementedError + + def readpkts(self): + return list(self) + + def dispatch(self, cnt, callback, *args): + if cnt > 0: + for i in range(cnt): + ts, pkt = self.next() + callback(ts, pkt, *args) + else: + for ts, pkt in self: + callback(ts, pkt, *args) + + def loop(self, callback, *args): + self.dispatch(0, callback, *args) + + def __iter__(self): + self.__f.seek(FileHdr.__hdr_len__) + while 1: + buf = self.__f.read(PktHdr.__hdr_len__) + if not buf: break + hdr = self.__ph(buf) + buf = self.__f.read(hdr.rec_len - PktHdr.__hdr_len__) + yield (hdr.ts_sec + (hdr.ts_usec / 1000000.0), buf[:hdr.incl_len]) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/ssl.py b/scripts/external_libs/dpkt-1.8.6/dpkt/ssl.py new file mode 100644 index 00000000..d741a99e --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/ssl.py @@ -0,0 +1,560 @@ +# $Id: ssl.py 90 2014-04-02 22:06:23Z andrewflnr@gmail.com $ +# Portion Copyright 2012 Google Inc. All rights reserved. + +"""Secure Sockets Layer / Transport Layer Security.""" + +import dpkt +import ssl_ciphersuites +import struct +import binascii +import traceback +import datetime + +# +# Note from April 2011: cde...@gmail.com added code that parses SSL3/TLS messages more in depth. +# +# Jul 2012: afleenor@google.com modified and extended SSL support further. +# + + +class SSL2(dpkt.Packet): + __hdr__ = ( + ('len', 'H', 0), + ('msg', 's', ''), + ('pad', 's', ''), + ) + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.len & 0x8000: + n = self.len = self.len & 0x7FFF + self.msg, self.data = self.data[:n], self.data[n:] + else: + n = self.len = self.len & 0x3FFF + padlen = ord(self.data[0]) + self.msg = self.data[1:1+n] + self.pad = self.data[1+n:1+n+padlen] + self.data = self.data[1+n+padlen:] + + +# SSLv3/TLS versions +SSL3_V = 0x0300 +TLS1_V = 0x0301 +TLS11_V = 0x0302 +TLS12_V = 0x0303 + +ssl3_versions_str = { + SSL3_V: 'SSL3', + TLS1_V: 'TLS 1.0', + TLS11_V: 'TLS 1.1', + TLS12_V: 'TLS 1.2' +} + +SSL3_VERSION_BYTES = set(('\x03\x00', '\x03\x01', '\x03\x02', '\x03\x03')) + + +# Alert levels +SSL3_AD_WARNING = 1 +SSL3_AD_FATAL = 2 +alert_level_str = { + SSL3_AD_WARNING: 'SSL3_AD_WARNING', + SSL3_AD_FATAL: 'SSL3_AD_FATAL' +} + +# SSL3 alert descriptions +SSL3_AD_CLOSE_NOTIFY = 0 +SSL3_AD_UNEXPECTED_MESSAGE = 10 # fatal +SSL3_AD_BAD_RECORD_MAC = 20 # fatal +SSL3_AD_DECOMPRESSION_FAILURE = 30 # fatal +SSL3_AD_HANDSHAKE_FAILURE = 40 # fatal +SSL3_AD_NO_CERTIFICATE = 41 +SSL3_AD_BAD_CERTIFICATE = 42 +SSL3_AD_UNSUPPORTED_CERTIFICATE = 43 +SSL3_AD_CERTIFICATE_REVOKED = 44 +SSL3_AD_CERTIFICATE_EXPIRED = 45 +SSL3_AD_CERTIFICATE_UNKNOWN = 46 +SSL3_AD_ILLEGAL_PARAMETER = 47 # fatal + +# TLS1 alert descriptions +TLS1_AD_DECRYPTION_FAILED = 21 +TLS1_AD_RECORD_OVERFLOW = 22 +TLS1_AD_UNKNOWN_CA = 48 # fatal +TLS1_AD_ACCESS_DENIED = 49 # fatal +TLS1_AD_DECODE_ERROR = 50 # fatal +TLS1_AD_DECRYPT_ERROR = 51 +TLS1_AD_EXPORT_RESTRICTION = 60 # fatal +TLS1_AD_PROTOCOL_VERSION = 70 # fatal +TLS1_AD_INSUFFICIENT_SECURITY = 71 # fatal +TLS1_AD_INTERNAL_ERROR = 80 # fatal +TLS1_AD_USER_CANCELLED = 90 +TLS1_AD_NO_RENEGOTIATION = 100 +#/* codes 110-114 are from RFC3546 */ +TLS1_AD_UNSUPPORTED_EXTENSION = 110 +TLS1_AD_CERTIFICATE_UNOBTAINABLE = 111 +TLS1_AD_UNRECOGNIZED_NAME = 112 +TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE = 113 +TLS1_AD_BAD_CERTIFICATE_HASH_VALUE = 114 +TLS1_AD_UNKNOWN_PSK_IDENTITY = 115 # fatal + + +# Mapping alert types to strings +alert_description_str = { + SSL3_AD_CLOSE_NOTIFY: 'SSL3_AD_CLOSE_NOTIFY', + SSL3_AD_UNEXPECTED_MESSAGE: 'SSL3_AD_UNEXPECTED_MESSAGE', + SSL3_AD_BAD_RECORD_MAC: 'SSL3_AD_BAD_RECORD_MAC', + SSL3_AD_DECOMPRESSION_FAILURE: 'SSL3_AD_DECOMPRESSION_FAILURE', + SSL3_AD_HANDSHAKE_FAILURE: 'SSL3_AD_HANDSHAKE_FAILURE', + SSL3_AD_NO_CERTIFICATE: 'SSL3_AD_NO_CERTIFICATE', + SSL3_AD_BAD_CERTIFICATE: 'SSL3_AD_BAD_CERTIFICATE', + SSL3_AD_UNSUPPORTED_CERTIFICATE: 'SSL3_AD_UNSUPPORTED_CERTIFICATE', + SSL3_AD_CERTIFICATE_REVOKED: 'SSL3_AD_CERTIFICATE_REVOKED', + SSL3_AD_CERTIFICATE_EXPIRED: 'SSL3_AD_CERTIFICATE_EXPIRED', + SSL3_AD_CERTIFICATE_UNKNOWN: 'SSL3_AD_CERTIFICATE_UNKNOWN', + SSL3_AD_ILLEGAL_PARAMETER: 'SSL3_AD_ILLEGAL_PARAMETER', + TLS1_AD_DECRYPTION_FAILED: 'TLS1_AD_DECRYPTION_FAILED', + TLS1_AD_RECORD_OVERFLOW: 'TLS1_AD_RECORD_OVERFLOW', + TLS1_AD_UNKNOWN_CA: 'TLS1_AD_UNKNOWN_CA', + TLS1_AD_ACCESS_DENIED: 'TLS1_AD_ACCESS_DENIED', + TLS1_AD_DECODE_ERROR: 'TLS1_AD_DECODE_ERROR', + TLS1_AD_DECRYPT_ERROR: 'TLS1_AD_DECRYPT_ERROR', + TLS1_AD_EXPORT_RESTRICTION: 'TLS1_AD_EXPORT_RESTRICTION', + TLS1_AD_PROTOCOL_VERSION: 'TLS1_AD_PROTOCOL_VERSION', + TLS1_AD_INSUFFICIENT_SECURITY: 'TLS1_AD_INSUFFICIENT_SECURITY', + TLS1_AD_INTERNAL_ERROR: 'TLS1_AD_INTERNAL_ERROR', + TLS1_AD_USER_CANCELLED: 'TLS1_AD_USER_CANCELLED', + TLS1_AD_NO_RENEGOTIATION: 'TLS1_AD_NO_RENEGOTIATION', + TLS1_AD_UNSUPPORTED_EXTENSION: 'TLS1_AD_UNSUPPORTED_EXTENSION', + TLS1_AD_CERTIFICATE_UNOBTAINABLE: 'TLS1_AD_CERTIFICATE_UNOBTAINABLE', + TLS1_AD_UNRECOGNIZED_NAME: 'TLS1_AD_UNRECOGNIZED_NAME', + TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE: 'TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE', + TLS1_AD_BAD_CERTIFICATE_HASH_VALUE: 'TLS1_AD_BAD_CERTIFICATE_HASH_VALUE', + TLS1_AD_UNKNOWN_PSK_IDENTITY: 'TLS1_AD_UNKNOWN_PSK_IDENTITY' +} + + +# struct format strings for parsing buffer lengths +# don't forget, you have to pad a 3-byte value with \x00 +_SIZE_FORMATS = ['!B', '!H', '!I', '!I'] + +def parse_variable_array(buf, lenbytes): + """ + Parse an array described using the 'Type name' syntax from the spec + + Read a length at the start of buf, and returns that many bytes + after, in a tuple with the TOTAL bytes consumed (including the size). This + does not check that the array is the right length for any given datatype. + """ + # first have to figure out how to parse length + assert lenbytes <= 4 # pretty sure 4 is impossible, too + size_format = _SIZE_FORMATS[lenbytes - 1] + padding = '\x00' if lenbytes == 3 else '' + # read off the length + size = struct.unpack(size_format, padding + buf[:lenbytes])[0] + # read the actual data + data = buf[lenbytes:lenbytes + size] + # if len(data) != size: insufficient data + return data, size + lenbytes + + +class SSL3Exception(Exception): + pass + + +class TLSRecord(dpkt.Packet): + """ + SSLv3 or TLSv1+ packet. + + In addition to the fields specified in the header, there are + compressed and decrypted fields, indicating whether, in the language + of the spec, this is a TLSPlaintext, TLSCompressed, or + TLSCiphertext. The application will have to figure out when it's + appropriate to change these values. + """ + + __hdr__ = ( + ('type', 'B', 0), + ('version', 'H', 0), + ('length', 'H', 0), + ) + + def __init__(self, *args, **kwargs): + # assume plaintext unless specified otherwise in arguments + self.compressed = kwargs.pop('compressed', False) + self.encrypted = kwargs.pop('encrypted', False) + # parent constructor + dpkt.Packet.__init__(self, *args, **kwargs) + # make sure length and data are consistent + self.length = len(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + header_length = self.__hdr_len__ + self.data = buf[header_length:header_length+self.length] + # make sure buffer was long enough + if len(self.data) != self.length: + raise dpkt.NeedData('TLSRecord data was too short.') + # assume compressed and encrypted when it's been parsed from + # raw data + self.compressed = True + self.encrypted = True + + +class TLSChangeCipherSpec(dpkt.Packet): + """ + ChangeCipherSpec message is just a single byte with value 1 + """ + __hdr__ = (('type', 'B', 1),) + + +class TLSAppData(str): + """ + As far as TLSRecord is concerned, AppData is just an opaque blob. + """ + pass + + +class TLSAlert(dpkt.Packet): + + __hdr__ = ( + ('level', 'B', 1), + ('description', 'B', 0), + ) + + +class TLSHelloRequest(dpkt.Packet): + __hdr__ = tuple() + + +class TLSClientHello(dpkt.Packet): + __hdr__ = ( + ('version', 'H', 0x0301), + ('random', '32s', '\x00'*32), + ) # the rest is variable-length and has to be done manually + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + # now session, cipher suites, extensions are in self.data + self.session_id, pointer = parse_variable_array(self.data, 1) +# print 'pointer',pointer + # handle ciphersuites + ciphersuites, parsed = parse_variable_array(self.data[pointer:], 2) + pointer += parsed + self.num_ciphersuites = len(ciphersuites) / 2 + # check len(ciphersuites) % 2 == 0 ? + # compression methods + compression_methods, parsed = parse_variable_array( + self.data[pointer:], 1) + pointer += parsed + self.num_compression_methods = parsed - 1 + self.compression_methods = map(ord, compression_methods) + # extensions + + +class TLSServerHello(dpkt.Packet): + __hdr__ = ( + ('version', 'H', '0x0301'), + ('random', '32s', '\x00'*32), + ) # session is variable, forcing rest to be manual + + def unpack(self, buf): + try: + dpkt.Packet.unpack(self, buf) + self.session_id, pointer = parse_variable_array(self.data, 1) + # single cipher suite + self.cipher_suite = struct.unpack('!H', self.data[pointer:pointer+2])[0] + pointer += 2 + # single compression method + self.compression = struct.unpack('!B', self.data[pointer:pointer+1])[0] + pointer += 1 + # ignore extensions for now + except struct.error: + # probably data too short + raise dpkt.NeedData + + +class TLSUnknownHandshake(dpkt.Packet): + __hdr__ = tuple() + +TLSCertificate = TLSUnknownHandshake +TLSServerKeyExchange = TLSUnknownHandshake +TLSCertificateRequest = TLSUnknownHandshake +TLSServerHelloDone = TLSUnknownHandshake +TLSCertificateVerify = TLSUnknownHandshake +TLSClientKeyExchange = TLSUnknownHandshake +TLSFinished = TLSUnknownHandshake + + +# mapping of handshake type ids to their names +# and the classes that implement them +HANDSHAKE_TYPES = { + 0: ('HelloRequest', TLSHelloRequest), + 1: ('ClientHello', TLSClientHello), + 2: ('ServerHello', TLSServerHello), + 11: ('Certificate', TLSCertificate), + 12: ('ServerKeyExchange', TLSServerKeyExchange), + 13: ('CertificateRequest', TLSCertificateRequest), + 14: ('ServerHelloDone', TLSServerHelloDone), + 15: ('CertificateVerify', TLSCertificateVerify), + 16: ('ClientKeyExchange', TLSClientKeyExchange), + 20: ('Finished', TLSFinished), +} + + +class TLSHandshake(dpkt.Packet): + ''' + A TLS Handshake message + + This goes for all messages encapsulated in the Record layer, but especially + important for handshakes and app data: A message may be spread across a + number of TLSRecords, in addition to the possibility of there being more + than one in a given Record. You have to put together the contents of + TLSRecord's yourself. + ''' + + # struct.unpack can't handle the 3-byte int, so we parse it as bytes + # (and store it as bytes so dpkt doesn't get confused), and turn it into + # an int in a user-facing property + __hdr__ = ( + ('type', 'B', 0), + ('length_bytes', '3s', 0), + ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + # Wait, might there be more than one message of self.type? + embedded_type = HANDSHAKE_TYPES.get(self.type, None) + if embedded_type is None: + raise SSL3Exception('Unknown or invalid handshake type %d' % + self.type) + # only take the right number of bytes + self.data = self.data[:self.length] + if len(self.data) != self.length: + raise dpkt.NeedData + # get class out of embedded_type tuple + self.data = embedded_type[1](self.data) + + @property + def length(self): + return struct.unpack('!I', '\x00' + self.length_bytes)[0] + + +RECORD_TYPES = { + 20: TLSChangeCipherSpec, + 21: TLSAlert, + 22: TLSHandshake, + 23: TLSAppData, +} + + +class SSLFactory(object): + def __new__(cls, buf): + v = buf[1:3] + if v in [ '\x03\x00', '\x03\x01', '\x03\x02' ]: + return SSL3(buf) + # SSL2 has no characteristic header or magic bytes, so we just assume + # that the msg is an SSL2 msg if it is not detected as SSL3+ + return SSL2(buf) + + +def TLSMultiFactory(buf): + ''' + Attempt to parse one or more TLSRecord's out of buf + + Args: + buf: string containing SSL/TLS messages. May have an incomplete record + on the end + + Returns: + [TLSRecord] + int, total bytes consumed, != len(buf) if an incomplete record was left at + the end. + + Raises SSL3Exception. + ''' + i, n = 0, len(buf) + msgs = [] + while i < n: + v = buf[i+1:i+3] + if v in SSL3_VERSION_BYTES: + try: + msg = TLSRecord(buf[i:]) + msgs.append(msg) + except dpkt.NeedData: + break + else: + raise SSL3Exception('Bad TLS version in buf: %r' % buf[i:i+5]) + i += len(msg) + return msgs, i + + +import unittest + + +_hexdecode = binascii.a2b_hex + + +class TLSRecordTest(unittest.TestCase): + """ + Test basic TLSRecord functionality + + For this test, the contents of the record doesn't matter, since we're not + parsing the next layer. + """ + def setUp(self): + # add some extra data, to make sure length is parsed correctly + self.p = TLSRecord('\x17\x03\x01\x00\x08abcdefghzzzzzzzzzzz') + def testContentType(self): + self.assertEqual(self.p.type, 23) + def testVersion(self): + self.assertEqual(self.p.version, 0x0301) + def testLength(self): + self.assertEqual(self.p.length, 8) + def testData(self): + self.assertEqual(self.p.data, 'abcdefgh') + def testInitialFlags(self): + self.assertTrue(self.p.compressed) + self.assertTrue(self.p.encrypted) + def testRepack(self): + p2 = TLSRecord(type=23, version=0x0301, data='abcdefgh') + self.assertEqual(p2.type, 23) + self.assertEqual(p2.version, 0x0301) + self.assertEqual(p2.length, 8) + self.assertEqual(p2.data, 'abcdefgh') + self.assertEqual(p2.pack(), self.p.pack()) + def testTotalLength(self): + # that len(p) includes header + self.assertEqual(len(self.p), 13) + def testRaisesNeedDataWhenBufIsShort(self): + self.assertRaises( + dpkt.NeedData, + TLSRecord, + '\x16\x03\x01\x00\x10abc') + + +class TLSChangeCipherSpecTest(unittest.TestCase): + "It's just a byte. This will be quick, I promise" + def setUp(self): + self.p = TLSChangeCipherSpec('\x01') + def testParses(self): + self.assertEqual(self.p.type, 1) + def testTotalLength(self): + self.assertEqual(len(self.p), 1) + + +class TLSAppDataTest(unittest.TestCase): + "AppData is basically just a string" + def testValue(self): + d = TLSAppData('abcdefgh') + self.assertEqual(d, 'abcdefgh') + + +class TLSHandshakeTest(unittest.TestCase): + def setUp(self): + self.h = TLSHandshake('\x00\x00\x00\x01\xff') + def testCreatedInsideMessage(self): + self.assertTrue(isinstance(self.h.data, TLSHelloRequest)) + def testLength(self): + self.assertEqual(self.h.length, 0x01) + def testRaisesNeedData(self): + self.assertRaises(dpkt.NeedData, TLSHandshake, '\x00\x00\x01\x01') + + +class ClientHelloTest(unittest.TestCase): + 'This data is extracted from and verified by Wireshark' + + def setUp(self): + self.data = _hexdecode( + "01000199" # handshake header + "0301" # version + "5008220ce5e0e78b6891afe204498c9363feffbe03235a2d9e05b7d990eb708d" # rand + "2009bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed1" # session id + # cipher suites + "005400ffc00ac0140088008700390038c00fc00500840035c007c009c011c0130045004400330032c00cc00ec002c0040096004100050004002fc008c01200160013c00dc003feff000ac006c010c00bc00100020001" + "0100" # compresssion methods + # extensions + "00fc0000000e000c0000096c6f63616c686f7374000a00080006001700180019000b00020100002300d0a50b2e9f618a9ea9bf493ef49b421835cd2f6b05bbe1179d8edf70d58c33d656e8696d36d7e7e0b9d3ecc0e4de339552fa06c64c0fcb550a334bc43944e2739ca342d15a9ebbe981ac87a0d38160507d47af09bdc16c5f0ee4cdceea551539382333226048a026d3a90a0535f4a64236467db8fee22b041af986ad0f253bc369137cd8d8cd061925461d7f4d7895ca9a4181ab554dad50360ac31860e971483877c9335ac1300c5e78f3e56f3b8e0fc16358fcaceefd5c8d8aaae7b35be116f8832856ca61144fcdd95e071b94d0cf7233740000" + "FFFFFFFFFFFFFFFF") # random garbage + self.p = TLSHandshake(self.data) + + def testClientHelloConstructed(self): + 'Make sure the correct class was constructed' + #print self.p + self.assertTrue(isinstance(self.p.data, TLSClientHello)) + +# def testClientDateCorrect(self): +# self.assertEqual(self.p.random_unixtime, 1342710284) + + def testClientRandomCorrect(self): + self.assertEqual(self.p.data.random, + _hexdecode('5008220ce5e0e78b6891afe204498c9363feffbe03235a2d9e05b7d990eb708d')) + + def testCipherSuiteLength(self): + # we won't bother testing the identity of each cipher suite in the list. + self.assertEqual(self.p.data.num_ciphersuites, 42) + #self.assertEqual(len(self.p.ciphersuites), 42) + + def testSessionId(self): + self.assertEqual(self.p.data.session_id, + _hexdecode('09bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed1')) + + def testCompressionMethods(self): + self.assertEqual(self.p.data.num_compression_methods, 1) + + def testTotalLength(self): + self.assertEqual(len(self.p), 413) + + +class ServerHelloTest(unittest.TestCase): + 'Again, from Wireshark' + + def setUp(self): + self.data = _hexdecode('0200004d03015008220c8ec43c5462315a7c99f5d5b6bff009ad285b51dc18485f352e9fdecd2009bc0192e008e6fa8fe47998fca91311ba30ddde14a9587dc674b11c3d3e5ed10002000005ff01000100') + self.p = TLSHandshake(self.data) + + def testConstructed(self): + self.assertTrue(isinstance(self.p.data, TLSServerHello)) + +# def testDateCorrect(self): +# self.assertEqual(self.p.random_unixtime, 1342710284) + + def testRandomCorrect(self): + self.assertEqual(self.p.data.random, + _hexdecode('5008220c8ec43c5462315a7c99f5d5b6bff009ad285b51dc18485f352e9fdecd')) + + def testCipherSuite(self): + self.assertEqual( + ssl_ciphersuites.BY_CODE[self.p.data.cipher_suite].name, + 'TLS_RSA_WITH_NULL_SHA') + + def testTotalLength(self): + self.assertEqual(len(self.p), 81) + + +class TLSMultiFactoryTest(unittest.TestCase): + "Made up test data" + + def setUp(self): + self.data = _hexdecode('1703010010' # header 1 + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' # data 1 + '1703010010' # header 2 + 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' # data 2 + '1703010010' # header 3 + 'CCCCCCCC') # data 3 (incomplete) + self.msgs, self.bytes_parsed = TLSMultiFactory(self.data) + + def testNumMessages(self): + # only complete messages should be parsed, incomplete ones left + # in buffer + self.assertEqual(len(self.msgs), 2) + + def testBytesParsed(self): + self.assertEqual(self.bytes_parsed, (5 + 16) * 2) + + def testFirstMsgData(self): + self.assertEqual(self.msgs[0].data, _hexdecode('AA' * 16)) + + def testSecondMsgData(self): + self.assertEqual(self.msgs[1].data, _hexdecode('BB' * 16)) + + +if __name__ == '__main__': + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/ssl_ciphersuites.py b/scripts/external_libs/dpkt-1.8.6/dpkt/ssl_ciphersuites.py new file mode 100644 index 00000000..49148a34 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/ssl_ciphersuites.py @@ -0,0 +1,76 @@ +# Copyright 2012 Google Inc. All rights reserved. + +""" +Nicely formatted cipher suite definitions for TLS + +A list of cipher suites in the form of CipherSuite objects. +These are supposed to be immutable; don't mess with them. +""" + + +class CipherSuite(object): + """ + Encapsulates a cipher suite. + + Members/args: + * code: two-byte ID code, as int + * name: as in 'TLS_RSA_WITH_RC4_40_MD5' + * kx: key exchange algorithm, string + * auth: authentication algorithm, string + * encoding: encoding algorithm + * mac: message authentication code algorithm + """ + + def __init__(self, code, name, kx, auth, encoding, mac): + self.code = code + self.name = name + self.kx = kx + self.auth = auth + self.encoding = encoding + self.mac = mac + + def __repr__(self): + return 'CipherSuite(%s)' % self.name + + MAC_SIZES = { + 'MD5': 16, + 'SHA': 20, + 'SHA256': 32, # I guess + } + + BLOCK_SIZES = { + 'AES_256_CBC': 16, + } + + @property + def mac_size(self): + """In bytes. Default to 0.""" + return self.MAC_SIZES.get(self.mac, 0) + + @property + def block_size(self): + """In bytes. Default to 1.""" + return self.BLOCK_SIZES.get(self.encoding, 1) + + +# master list of CipherSuite Objects +CIPHERSUITES = [ + # not a real cipher suite, can be ignored, see RFC5746 + CipherSuite(0xff, 'TLS_EMPTY_RENEGOTIATION_INFO', + 'NULL', 'NULL', 'NULL', 'NULL'), + CipherSuite(0x00, 'TLS_NULL_WITH_NULL_NULL', + 'NULL', 'NULL', 'NULL', 'NULL'), + CipherSuite(0x01, 'TLS_RSA_WITH_NULL_MD5', 'RSA', 'RSA', 'NULL', 'MD5'), + CipherSuite(0x02, 'TLS_RSA_WITH_NULL_SHA', 'RSA', 'RSA', 'NULL', 'SHA'), + CipherSuite(0x0039, 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA', + 'DHE', 'RSA', 'AES_256_CBC', 'SHA'), # not sure I got the kx/auth thing right. + CipherSuite(0xffff, 'UNKNOWN_CIPHER', '', '', '', '') +] + +BY_CODE = dict( + (cipher.code, cipher) for cipher in CIPHERSUITES) + +BY_NAME = dict( + (suite.name, suite) for suite in CIPHERSUITES) + +NULL_SUITE = BY_CODE[0x00] diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/stp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/stp.py new file mode 100644 index 00000000..8fab28b3 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/stp.py @@ -0,0 +1,21 @@ +# $Id: stp.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Spanning Tree Protocol.""" + +import dpkt + +class STP(dpkt.Packet): + __hdr__ = ( + ('proto_id', 'H', 0), + ('v', 'B', 0), + ('type', 'B', 0), + ('flags', 'B', 0), + ('root_id', '8s', ''), + ('root_path', 'I', 0), + ('bridge_id', '8s', ''), + ('port_id', 'H', 0), + ('age', 'H', 0), + ('max_age', 'H', 0), + ('hello', 'H', 0), + ('fd', 'H', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/stun.py b/scripts/external_libs/dpkt-1.8.6/dpkt/stun.py new file mode 100644 index 00000000..5706f0ef --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/stun.py @@ -0,0 +1,45 @@ +# $Id: stun.py 47 2008-05-27 02:10:00Z jon.oberheide $ + +"""Simple Traversal of UDP through NAT.""" + +import struct +import dpkt + +# STUN - RFC 3489 +# http://tools.ietf.org/html/rfc3489 +# Each packet has a 20 byte header followed by 0 or more attribute TLVs. + +# Message Types +BINDING_REQUEST = 0x0001 +BINDING_RESPONSE = 0x0101 +BINDING_ERROR_RESPONSE = 0x0111 +SHARED_SECRET_REQUEST = 0x0002 +SHARED_SECRET_RESPONSE = 0x0102 +SHARED_SECRET_ERROR_RESPONSE = 0x0112 + +# Message Attributes +MAPPED_ADDRESS = 0x0001 +RESPONSE_ADDRESS = 0x0002 +CHANGE_REQUEST = 0x0003 +SOURCE_ADDRESS = 0x0004 +CHANGED_ADDRESS = 0x0005 +USERNAME = 0x0006 +PASSWORD = 0x0007 +MESSAGE_INTEGRITY = 0x0008 +ERROR_CODE = 0x0009 +UNKNOWN_ATTRIBUTES = 0x000a +REFLECTED_FROM = 0x000b + +class STUN(dpkt.Packet): + __hdr__ = ( + ('type', 'H', 0), + ('len', 'H', 0), + ('xid', '16s', 0) + ) + +def tlv(buf): + n = 4 + t, l = struct.unpack('>HH', buf[:n]) + v = buf[n:n+l] + buf = buf[n+l:] + return (t,l,v, buf) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/tcp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/tcp.py new file mode 100644 index 00000000..eaf10e3d --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/tcp.py @@ -0,0 +1,98 @@ +# $Id: tcp.py 42 2007-08-02 22:38:47Z jon.oberheide $ + +"""Transmission Control Protocol.""" + +import dpkt + +# TCP control flags +TH_FIN = 0x01 # end of data +TH_SYN = 0x02 # synchronize sequence numbers +TH_RST = 0x04 # reset connection +TH_PUSH = 0x08 # push +TH_ACK = 0x10 # acknowledgment number set +TH_URG = 0x20 # urgent pointer set +TH_ECE = 0x40 # ECN echo, RFC 3168 +TH_CWR = 0x80 # congestion window reduced + +TCP_PORT_MAX = 65535 # maximum port +TCP_WIN_MAX = 65535 # maximum (unscaled) window + +class TCP(dpkt.Packet): + __hdr__ = ( + ('sport', 'H', 0xdead), + ('dport', 'H', 0), + ('seq', 'I', 0xdeadbeefL), + ('ack', 'I', 0), + ('off_x2', 'B', ((5 << 4) | 0)), + ('flags', 'B', TH_SYN), + ('win', 'H', TCP_WIN_MAX), + ('sum', 'H', 0), + ('urp', 'H', 0) + ) + opts = '' + + def _get_off(self): return self.off_x2 >> 4 + def _set_off(self, off): self.off_x2 = (off << 4) | (self.off_x2 & 0xf) + off = property(_get_off, _set_off) + + def __len__(self): + return self.__hdr_len__ + len(self.opts) + len(self.data) + + def __str__(self): + return self.pack_hdr() + self.opts + str(self.data) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + ol = ((self.off_x2 >> 4) << 2) - self.__hdr_len__ + if ol < 0: + raise dpkt.UnpackError, 'invalid header length' + self.opts = buf[self.__hdr_len__:self.__hdr_len__ + ol] + self.data = buf[self.__hdr_len__ + ol:] + +# Options (opt_type) - http://www.iana.org/assignments/tcp-parameters +TCP_OPT_EOL = 0 # end of option list +TCP_OPT_NOP = 1 # no operation +TCP_OPT_MSS = 2 # maximum segment size +TCP_OPT_WSCALE = 3 # window scale factor, RFC 1072 +TCP_OPT_SACKOK = 4 # SACK permitted, RFC 2018 +TCP_OPT_SACK = 5 # SACK, RFC 2018 +TCP_OPT_ECHO = 6 # echo (obsolete), RFC 1072 +TCP_OPT_ECHOREPLY = 7 # echo reply (obsolete), RFC 1072 +TCP_OPT_TIMESTAMP = 8 # timestamp, RFC 1323 +TCP_OPT_POCONN = 9 # partial order conn, RFC 1693 +TCP_OPT_POSVC = 10 # partial order service, RFC 1693 +TCP_OPT_CC = 11 # connection count, RFC 1644 +TCP_OPT_CCNEW = 12 # CC.NEW, RFC 1644 +TCP_OPT_CCECHO = 13 # CC.ECHO, RFC 1644 +TCP_OPT_ALTSUM = 14 # alt checksum request, RFC 1146 +TCP_OPT_ALTSUMDATA = 15 # alt checksum data, RFC 1146 +TCP_OPT_SKEETER = 16 # Skeeter +TCP_OPT_BUBBA = 17 # Bubba +TCP_OPT_TRAILSUM = 18 # trailer checksum +TCP_OPT_MD5 = 19 # MD5 signature, RFC 2385 +TCP_OPT_SCPS = 20 # SCPS capabilities +TCP_OPT_SNACK = 21 # selective negative acks +TCP_OPT_REC = 22 # record boundaries +TCP_OPT_CORRUPT = 23 # corruption experienced +TCP_OPT_SNAP = 24 # SNAP +TCP_OPT_TCPCOMP = 26 # TCP compression filter +TCP_OPT_MAX = 27 + +def parse_opts(buf): + """Parse TCP option buffer into a list of (option, data) tuples.""" + opts = [] + while buf: + o = ord(buf[0]) + if o > TCP_OPT_NOP: + try: + l = ord(buf[1]) + d, buf = buf[2:l], buf[l:] + except ValueError: + #print 'bad option', repr(str(buf)) + opts.append(None) # XXX + break + else: + d, buf = '', buf[1:] + opts.append((o,d)) + return opts + diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/telnet.py b/scripts/external_libs/dpkt-1.8.6/dpkt/telnet.py new file mode 100644 index 00000000..9e8194d3 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/telnet.py @@ -0,0 +1,77 @@ +# $Id: telnet.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Telnet.""" + +IAC = 255 # interpret as command: +DONT = 254 # you are not to use option +DO = 253 # please, you use option +WONT = 252 # I won't use option +WILL = 251 # I will use option +SB = 250 # interpret as subnegotiation +GA = 249 # you may reverse the line +EL = 248 # erase the current line +EC = 247 # erase the current character +AYT = 246 # are you there +AO = 245 # abort output--but let prog finish +IP = 244 # interrupt process--permanently +BREAK = 243 # break +DM = 242 # data mark--for connect. cleaning +NOP = 241 # nop +SE = 240 # end sub negotiation +EOR = 239 # end of record (transparent mode) +ABORT = 238 # Abort process +SUSP = 237 # Suspend process +xEOF = 236 # End of file: EOF is already used... + +SYNCH = 242 # for telfunc calls + +def strip_options(buf): + """Return a list of lines and dict of options from telnet data.""" + l = buf.split(chr(IAC)) + #print l + b = [] + d = {} + subopt = False + for w in l: + if not w: + continue + o = ord(w[0]) + if o > SB: + #print 'WILL/WONT/DO/DONT/IAC', `w` + w = w[2:] + elif o == SE: + #print 'SE', `w` + w = w[1:] + subopt = False + elif o == SB: + #print 'SB', `w` + subopt = True + for opt in ('USER', 'DISPLAY', 'TERM'): + p = w.find(opt + '\x01') + if p != -1: + d[opt] = w[p+len(opt)+1:].split('\x00', 1)[0] + w = None + elif subopt: + w = None + if w: + w = w.replace('\x00', '\n').splitlines() + if not w[-1]: w.pop() + b.extend(w) + return b, d + +if __name__ == '__main__': + import unittest + + class TelnetTestCase(unittest.TestCase): + def test_telnet(self): + l = [] + s = "\xff\xfb%\xff\xfa%\x00\x00\x00\xff\xf0\xff\xfd&\xff\xfa&\x05\xff\xf0\xff\xfa&\x01\x01\x02\xff\xf0\xff\xfb\x18\xff\xfb \xff\xfb#\xff\xfb'\xff\xfc$\xff\xfa \x0038400,38400\xff\xf0\xff\xfa#\x00doughboy.citi.umich.edu:0.0\xff\xf0\xff\xfa'\x00\x00DISPLAY\x01doughboy.citi.umich.edu:0.0\x00USER\x01dugsong\xff\xf0\xff\xfa\x18\x00XTERM\xff\xf0\xff\xfd\x03\xff\xfc\x01\xff\xfb\x1f\xff\xfa\x1f\x00P\x00(\xff\xf0\xff\xfd\x05\xff\xfb!\xff\xfd\x01fugly\r\x00yoda\r\x00bashtard\r\x00" + l.append(s) + s = '\xff\xfd\x01\xff\xfd\x03\xff\xfb\x18\xff\xfb\x1f\xff\xfa\x1f\x00X\x002\xff\xf0admin\r\x00\xff\xfa\x18\x00LINUX\xff\xf0foobar\r\x00enable\r\x00foobar\r\x00\r\x00show ip int Vlan 666\r\x00' + l.append(s) + s = '\xff\xfb%\xff\xfa%\x00\x00\x00\xff\xf0\xff\xfd&\xff\xfa&\x05\xff\xf0\xff\xfa&\x01\x01\x02\xff\xf0\xff\xfb&\xff\xfb\x18\xff\xfb \xff\xfb#\xff\xfb\'\xff\xfc$\xff\xfa \x0038400,38400\xff\xf0\xff\xfa#\x00doughboy.citi.umich.edu:0.0\xff\xf0\xff\xfa\'\x00\x00DISPLAY\x01doughboy.citi.umich.edu:0.0\x00USER\x01dugsong\xff\xf0\xff\xfa\x18\x00XTERM\xff\xf0\xff\xfd\x03\xff\xfc\x01\xff\xfb"\xff\xfa"\x03\x01\x03\x00\x03b\x03\x04\x02\x0f\x05\x00\xff\xff\x07b\x1c\x08\x02\x04\tB\x1a\n\x02\x7f\x0b\x02\x15\x0c\x02\x17\r\x02\x12\x0e\x02\x16\x0f\x02\x11\x10\x02\x13\x11\x00\xff\xff\x12\x00\xff\xff\xff\xf0\xff\xfb\x1f\xff\xfa\x1f\x00P\x00(\xff\xf0\xff\xfd\x05\xff\xfb!\xff\xfa"\x01\x0f\xff\xf0\xff\xfd\x01\xff\xfe\x01\xff\xfa"\x03\x01\x80\x00\xff\xf0\xff\xfd\x01werd\r\n\xff\xfe\x01yoda\r\n\xff\xfd\x01darthvader\r\n\xff\xfe\x01' + l.append(s) + exp = [ (['fugly', 'yoda', 'bashtard'], {'USER': 'dugsong', 'DISPLAY': 'doughboy.citi.umich.edu:0.0'}), (['admin', 'foobar', 'enable', 'foobar', '', 'show ip int Vlan 666'], {}), (['werd', 'yoda', 'darthvader'], {'USER': 'dugsong', 'DISPLAY': 'doughboy.citi.umich.edu:0.0'}) ] + self.failUnless(map(strip_options, l) == exp) + + unittest.main() diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/tftp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/tftp.py new file mode 100644 index 00000000..046ae8d2 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/tftp.py @@ -0,0 +1,55 @@ +# $Id: tftp.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Trivial File Transfer Protocol.""" + +import struct +import dpkt + +# Opcodes +OP_RRQ = 1 # read request +OP_WRQ = 2 # write request +OP_DATA = 3 # data packet +OP_ACK = 4 # acknowledgment +OP_ERR = 5 # error code + +# Error codes +EUNDEF = 0 # not defined +ENOTFOUND = 1 # file not found +EACCESS = 2 # access violation +ENOSPACE = 3 # disk full or allocation exceeded +EBADOP = 4 # illegal TFTP operation +EBADID = 5 # unknown transfer ID +EEXISTS = 6 # file already exists +ENOUSER = 7 # no such user + +class TFTP(dpkt.Packet): + __hdr__ = (('opcode', 'H', 1), ) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + if self.opcode in (OP_RRQ, OP_WRQ): + l = self.data.split('\x00') + self.filename = l[0] + self.mode = l[1] + self.data = '' + elif self.opcode in (OP_DATA, OP_ACK): + self.block = struct.unpack('>H', self.data[:2]) + self.data = self.data[2:] + elif self.opcode == OP_ERR: + self.errcode = struct.unpack('>H', self.data[:2]) + self.errmsg = self.data[2:].split('\x00')[0] + self.data = '' + + def __len__(self): + return len(str(self)) + + def __str__(self): + if self.opcode in (OP_RRQ, OP_WRQ): + s = '%s\x00%s\x00' % (self.filename, self.mode) + elif self.opcode in (OP_DATA, OP_ACK): + s = struct.pack('>H', self.block) + elif self.opcode == OP_ERR: + s = struct.pack('>H', self.errcode) + ('%s\x00' % self.errmsg) + else: + s = '' + return self.pack_hdr() + s + self.data diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/tns.py b/scripts/external_libs/dpkt-1.8.6/dpkt/tns.py new file mode 100644 index 00000000..7e092250 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/tns.py @@ -0,0 +1,24 @@ +# $Id: tns.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Transparent Network Substrate.""" + +import dpkt + +class TNS(dpkt.Packet): + __hdr__ = ( + ('length', 'H', 0), + ('pktsum', 'H', 0), + ('type', 'B', 0), + ('rsvd', 'B', 0), + ('hdrsum', 'H', 0), + ('msg', '0s', ''), + ) + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + n = self.length - self.__hdr_len__ + if n > len(self.data): + raise dpkt.NeedData('short message (missing %d bytes)' % + (n - len(self.data))) + self.msg = self.data[:n] + self.data = self.data[n:] + diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/tpkt.py b/scripts/external_libs/dpkt-1.8.6/dpkt/tpkt.py new file mode 100644 index 00000000..d81f7855 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/tpkt.py @@ -0,0 +1,15 @@ +# $Id: tpkt.py 23 2006-11-08 15:45:33Z dugsong $ + +"""ISO Transport Service on top of the TCP (TPKT).""" + +import dpkt + +# TPKT - RFC 1006 Section 6 +# http://www.faqs.org/rfcs/rfc1006.html + +class TPKT(dpkt.Packet): + __hdr__ = ( + ('v', 'B', 3), + ('rsvd', 'B', 0), + ('len', 'H', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/udp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/udp.py new file mode 100644 index 00000000..0fd6334b --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/udp.py @@ -0,0 +1,15 @@ +# $Id: udp.py 23 2006-11-08 15:45:33Z dugsong $ + +"""User Datagram Protocol.""" + +import dpkt + +UDP_PORT_MAX = 65535 + +class UDP(dpkt.Packet): + __hdr__ = ( + ('sport', 'H', 0xdead), + ('dport', 'H', 0), + ('ulen', 'H', 8), + ('sum', 'H', 0) + ) diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/vrrp.py b/scripts/external_libs/dpkt-1.8.6/dpkt/vrrp.py new file mode 100644 index 00000000..fbb97937 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/vrrp.py @@ -0,0 +1,48 @@ +# $Id: vrrp.py 88 2013-03-05 19:43:17Z andrewflnr@gmail.com $ + +"""Virtual Router Redundancy Protocol.""" + +import dpkt + +class VRRP(dpkt.Packet): + __hdr__ = ( + ('vtype', 'B', 0x21), + ('vrid', 'B', 0), + ('priority', 'B', 0), + ('count', 'B', 0), + ('atype', 'B', 0), + ('advtime', 'B', 0), + ('sum', 'H', 0), + ) + addrs = () + auth = '' + def _get_v(self): + return self.vtype >> 4 + def _set_v(self, v): + self.vtype = (self.vtype & ~0xf) | (v << 4) + v = property(_get_v, _set_v) + + def _get_type(self): + return self.vtype & 0xf + def _set_type(self, v): + self.vtype = (self.vtype & ~0xf0) | (v & 0xf) + type = property(_get_type, _set_type) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + l = [] + off = 0 + for off in range(0, 4 * self.count, 4): + l.append(self.data[off:off+4]) + self.addrs = l + self.auth = self.data[off+4:] + self.data = '' + + def __len__(self): + return self.__hdr_len__ + (4 * self.count) + len(self.auth) + + def __str__(self): + data = ''.join(self.addrs) + self.auth + if not self.sum: + self.sum = dpkt.in_cksum(self.pack_hdr() + data) + return self.pack_hdr() + data diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/yahoo.py b/scripts/external_libs/dpkt-1.8.6/dpkt/yahoo.py new file mode 100644 index 00000000..726aeece --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/yahoo.py @@ -0,0 +1,29 @@ +# $Id: yahoo.py 23 2006-11-08 15:45:33Z dugsong $ + +"""Yahoo Messenger.""" + +import dpkt + +class YHOO(dpkt.Packet): + __hdr__ = [ + ('version', '8s', ' ' * 8), + ('length', 'I', 0), + ('service', 'I', 0), + ('connid', 'I', 0), + ('magic', 'I', 0), + ('unknown', 'I', 0), + ('type', 'I', 0), + ('nick1', '36s', ' ' * 36), + ('nick2', '36s', ' ' * 36) + ] + __byte_order__ = '<' + +class YMSG(dpkt.Packet): + __hdr__ = [ + ('version', '8s', ' ' * 8), + ('length', 'H', 0), + ('type', 'H', 0), + ('unknown1', 'I', 0), + ('unknown2', 'I', 0) + ] + diff --git a/scripts/external_libs/dpkt-1.8.6/setup.cfg b/scripts/external_libs/dpkt-1.8.6/setup.cfg new file mode 100644 index 00000000..56ffc205 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/setup.cfg @@ -0,0 +1,20 @@ +[bdist_wheel] +universal = 1 + +[aliases] +release = register clean --all sdist bdist_wheel upload + +[flake8] +max-line-length = 140 + +[pytest] +addopts = -v --cov-report term-missing +python_files = *.py +python_functions = test +norecursedirs = .tox .git *.egg-info __pycache__ dist build + +[egg_info] +tag_build = +tag_date = 0 +tag_svn_revision = 0 + diff --git a/scripts/external_libs/dpkt-1.8.6/setup.py b/scripts/external_libs/dpkt-1.8.6/setup.py new file mode 100644 index 00000000..fe4f84fa --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/setup.py @@ -0,0 +1,40 @@ +import os +import sys + +try: + from setuptools import setup, Command +except ImportError: + from distutils.core import setup, Command + +package_name = 'dpkt' +description = 'fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols' +readme = open('README.rst').read() +requirements = [ ] + +# PyPI Readme +long_description = open('README.rst').read() + +# Pull in the package +package = __import__(package_name) + +setup(name=package_name, + version=package.__version__, + author=package.__author__, + url=package.__url__, + description=description, + long_description=long_description, + packages=['dpkt'], + install_requires=requirements, + license='BSD', + zip_safe=False, + classifiers=[ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: BSD License', + 'Natural Language :: English', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: Implementation :: CPython', + 'Programming Language :: Python :: Implementation :: PyPy', + ] +) -- cgit 1.2.3-korg From 68df86e2005dc4693b1270a3e663e2450f81fa93 Mon Sep 17 00:00:00 2001 From: Dan Klein Date: Thu, 27 Aug 2015 19:18:16 +0300 Subject: progress in packet builder module --- .../client/trex_stateless_client.py | 7 - .../client_utils/outer_packages.py | 2 +- .../client_utils/packet_builder.py | 150 ++++++++++++++++++++- .../trex_control_plane/common/trex_exceptions.py | 14 +- .../examples/interactive_stateless.py | 6 +- .../trex_control_plane/server/trex_server.py | 2 +- 6 files changed, 160 insertions(+), 21 deletions(-) diff --git a/scripts/automation/trex_control_plane/client/trex_stateless_client.py b/scripts/automation/trex_control_plane/client/trex_stateless_client.py index 670eda1d..5513f420 100644 --- a/scripts/automation/trex_control_plane/client/trex_stateless_client.py +++ b/scripts/automation/trex_control_plane/client/trex_stateless_client.py @@ -47,12 +47,5 @@ class CTRexStatelessClient(object): - -class CTRexVM(object): - """docstring for CTRexVM""" - def __init__(self, arg): - super(CTRexVM, self).__init__() - self.arg = arg - if __name__ == "__main__": pass diff --git a/scripts/automation/trex_control_plane/client_utils/outer_packages.py b/scripts/automation/trex_control_plane/client_utils/outer_packages.py index 3ba73ec1..a6c9a2eb 100644 --- a/scripts/automation/trex_control_plane/client_utils/outer_packages.py +++ b/scripts/automation/trex_control_plane/client_utils/outer_packages.py @@ -9,7 +9,7 @@ ROOT_PATH = os.path.abspath(os.path.join(CURRENT_PATH, os.pardir)) PATH_TO_PYTHON_LIB = os.path.abspath(os.path.join(ROOT_PATH, os.pardir, os.pardir, 'external_libs')) CLIENT_UTILS_MODULES = ['zmq', - 'dpkt-1.8.6.2' + 'dpkt-1.8.6' ] diff --git a/scripts/automation/trex_control_plane/client_utils/packet_builder.py b/scripts/automation/trex_control_plane/client_utils/packet_builder.py index c33444a7..172dcda2 100644 --- a/scripts/automation/trex_control_plane/client_utils/packet_builder.py +++ b/scripts/automation/trex_control_plane/client_utils/packet_builder.py @@ -3,9 +3,155 @@ import outer_packages import dpkt +import socket +import binascii + class CTRexPktBuilder(object): """docstring for CTRexPktBuilder""" - def __init__(self, arg): + def __init__(self): super(CTRexPktBuilder, self).__init__() - self.arg = arg \ No newline at end of file + self.packet = None + self.vm = CTRexPktBuilder.CTRexVM(self.packet) + + def add_l2_header(self): + pass + + def add_l3_header(self): + pass + + def add_pkt_payload(self): + pass + + # VM access methods + def set_vm_ip_range(self, ip_start, ip_end, ip_type="ipv4"): + pass + + def set_vm_range_type(self, ip_type): + pass + + def set_vm_core_mask(self, ip_type): + pass + + def get_vm_data(self): + pass + + def dump_pkt(self): + pkt_in_hex = binascii.hexlify(str(self.packet)) + return [pkt_in_hex[i:i+2] for i in range(0, len(pkt_in_hex), 2)] + + # ----- useful shortcut methods ----- # + def gen_dns_packet(self): + pass + + # ----- internal methods ----- # + @staticmethod + def _is_valid_ip_addr(ip_addr, ip_type): + if ip_type == "ipv4": + try: + socket.inet_pton(socket.AF_INET, ip_addr) + except AttributeError: # no inet_pton here, sorry + try: + socket.inet_aton(ip_addr) + except socket.error: + return False + return ip_addr.count('.') == 3 + except socket.error: # not a valid address + return False + return True + elif ip_type == "ipv6": + try: + socket.inet_pton(socket.AF_INET6, ip_addr) + except socket.error: # not a valid address + return False + return True + else: + raise CTRexPktBuilder.IPAddressError() + + # ------ private classes ------ + class CTRexVM(object): + """docstring for CTRexVM""" + def __init__(self, packet): + super(CTRexPktBuilder.CTRexVM, self).__init__() + self.packet = packet + self.vm_variables = {} + + def add_vm_variable(self, name): + if name not in self.vm_variables.keys(): + self.vm_variables[name] = self.CTRexVMVariable(name) + + def fix_checksum_ipv4(self): + pass + + def flow_man_simple(self): + pass + + def write_to_pkt(self): + pass + + def dump(self): + return [var.dump() + for var in self.vm_variables + if var.is_validty()] + + class CTRexVMVariable(object): + VALID_SIZE = [1, 2, 4, 8] + VALID_TYPE = ["inc", "dec", "random"] + VALID_CORE_MASK = ["split", "none"] + + def __init__(self, name): + super(CTRexPktBuilder.CTRexVM.CTRexVMVariable, self).__init__() + self.name = name + self.size = 4 + self.big_endian = True + self.type = "inc" + self.core_mask = "none" + self.init_addr = "10.0.0.1" + self.min_addr = str(self.init_addr) + self.max_addr = str(self.init_addr) + + def is_valid(self): + if self.size not in self.VALID_SIZE: + return False + if self.type not in self.VALID_TYPE: + return False + if self.core_mask not in self.VALID_CORE_MASK: + return False + return True + + def dump(self): + return {"name" : self.name, + "Size" : self.size, + "big_endian" : self.big_endian, + "type" : self.type, + "core_mask" : self.core_mask, + "init_addr" : self.init_addr, + "min_addr" : self.min_addr, + "max_addr" : self.max_addr} + + class CPacketBuildException(Exception): + """ + This is the general Packet error exception class. + """ + def __init__(self, code, message): + self.code = code + self.message = message + + def __str__(self): + return self.__repr__() + + def __repr__(self): + return u"[errcode:%r] %r" % (self.code, self.message) + + class IPAddressError(CPacketBuildException): + """ + This exception is used to indicate an error on the IP addressing part of the packet. + """ + def __init__(self, message=''): + self._default_message = 'Illegal type of IP addressing has been provided.' + self.message = message or self._default_message + super(CTRexPktBuilder.IPAddressError, self).__init__(-11, self.message) + + +if __name__ == "__main__": + pass diff --git a/scripts/automation/trex_control_plane/common/trex_exceptions.py b/scripts/automation/trex_control_plane/common/trex_exceptions.py index 1353fd00..a2a64e19 100755 --- a/scripts/automation/trex_control_plane/common/trex_exceptions.py +++ b/scripts/automation/trex_control_plane/common/trex_exceptions.py @@ -17,13 +17,13 @@ class RPCError(Exception): self.data = remote_data self.args = (code, self.msg, remote_data) - def __str__(self): - return self.__repr__() - def __repr__(self): - if self.args[2] is not None: - return u"[errcode:%r] %r. Extended data: %r" % (self.args[0], self.args[1], self.args[2]) - else: - return u"[errcode:%r] %r" % (self.args[0], self.args[1]) + def __str__(self): + return self.__repr__() + def __repr__(self): + if self.args[2] is not None: + return u"[errcode:%r] %r. Extended data: %r" % (self.args[0], self.args[1], self.args[2]) + else: + return u"[errcode:%r] %r" % (self.args[0], self.args[1]) class TRexException(RPCError): """ diff --git a/scripts/automation/trex_control_plane/examples/interactive_stateless.py b/scripts/automation/trex_control_plane/examples/interactive_stateless.py index 016888d2..7c25b4ef 100644 --- a/scripts/automation/trex_control_plane/examples/interactive_stateless.py +++ b/scripts/automation/trex_control_plane/examples/interactive_stateless.py @@ -93,7 +93,7 @@ class InteractiveStatelessTRex(cmd.Cmd): print termstyle.magenta(inst) if __name__ == "__main__": - parser = ArgumentParser(description=termstyle.cyan('Run T-Rex client API demos and scenarios.'), + parser = ArgumentParser(description=termstyle.cyan('Run TRex client stateless API demos and scenarios.'), usage="client_interactive_example [options]") parser.add_argument('-v', '--version', action='version', version='%(prog)s 1.0 \t (C) Cisco Systems Inc.\n') @@ -101,8 +101,8 @@ if __name__ == "__main__": parser.add_argument("-t", "--trex-host", required = True, dest="trex_host", action="store", help="Specify the hostname or ip to connect with T-Rex server.", metavar="HOST" ) - parser.add_argument("-p", "--trex-port", type=int, default = 8090, metavar="PORT", dest="trex_port", - help="Select port on which the T-Rex server listens. Default port is 8090.", action="store") + parser.add_argument("-p", "--trex-port", type=int, default = 5050, metavar="PORT", dest="trex_port", + help="Select port on which the T-Rex server listens. Default port is 5050.", action="store") # parser.add_argument("-m", "--maxhist", type=int, default = 100, metavar="SIZE", dest="hist_size", # help="Specify maximum history size saved at client side. Default size is 100.", action="store") parser.add_argument("--virtual", dest="virtual", diff --git a/scripts/automation/trex_control_plane/server/trex_server.py b/scripts/automation/trex_control_plane/server/trex_server.py index 992a1d5f..35b2669a 100755 --- a/scripts/automation/trex_control_plane/server/trex_server.py +++ b/scripts/automation/trex_control_plane/server/trex_server.py @@ -53,7 +53,7 @@ class CTRexServer(object): the port number on which trex's zmq module will interact with daemon server default value: 4500 - Instatiate a T-Rex client object, and connecting it to listening daemon-server + Instantiate a T-Rex client object, and connecting it to listening daemon-server """ self.TREX_PATH = os.path.abspath(os.path.dirname(trex_path+'/')) self.trex_files_path = os.path.abspath(os.path.dirname(trex_files_path+'/')) -- cgit 1.2.3-korg From 760710869405dbc3b5dadd6ce06015c72ea2ca44 Mon Sep 17 00:00:00 2001 From: Dan Klein Date: Sun, 30 Aug 2015 13:59:07 +0300 Subject: another stateless progress --- .../client_utils/packet_builder.py | 61 +++++++++++++++++++++- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/scripts/automation/trex_control_plane/client_utils/packet_builder.py b/scripts/automation/trex_control_plane/client_utils/packet_builder.py index 172dcda2..0d31f28e 100644 --- a/scripts/automation/trex_control_plane/client_utils/packet_builder.py +++ b/scripts/automation/trex_control_plane/client_utils/packet_builder.py @@ -79,6 +79,13 @@ class CTRexPktBuilder(object): def add_vm_variable(self, name): if name not in self.vm_variables.keys(): self.vm_variables[name] = self.CTRexVMVariable(name) + else: + raise CTRexPktBuilder.VMVarNameExistsError(name) + + def set_vm_var_field(self, var_name, field_name, val): + pass + return self.vm_variables[var_name].set_field(field_name, val) + def fix_checksum_ipv4(self): pass @@ -91,8 +98,7 @@ class CTRexPktBuilder(object): def dump(self): return [var.dump() - for var in self.vm_variables - if var.is_validty()] + for var in self.vm_variables] class CTRexVMVariable(object): VALID_SIZE = [1, 2, 4, 8] @@ -110,6 +116,25 @@ class CTRexPktBuilder(object): self.min_addr = str(self.init_addr) self.max_addr = str(self.init_addr) + def set_field(self, field_name, val): + if field_name == "size": + if type(val) != int: + raise CTRexPktBuilder.VMVarFieldTypeError("size", int) + elif val not in self.VALID_SIZE: + raise CTRexPktBuilder.VMVarValueError("size", self.VALID_SIZE) + elif field_name == "type": + if type(val) != str: + raise CTRexPktBuilder.VMVarFieldTypeError("type", str) + elif val not in self.VALID_TYPE: + raise CTRexPktBuilder.VMVarValueError("type", self.VALID_TYPE) + elif field_name == "core_mask": + if type(val) != str: + raise CTRexPktBuilder.VMVarFieldTypeError("core_mask", str) + elif val not in self.VALID_TYPE: + raise CTRexPktBuilder.VMVarValueError("core_mask", self.VALID_CORE_MASK) + # update field value on success + setattr(self, field_name, val) + def is_valid(self): if self.size not in self.VALID_SIZE: return False @@ -152,6 +177,38 @@ class CTRexPktBuilder(object): self.message = message or self._default_message super(CTRexPktBuilder.IPAddressError, self).__init__(-11, self.message) + class VMVarNameExistsError(CPacketBuildException): + """ + This exception is used to indicate an error on the IP addressing part of the packet. + """ + def __init__(self, name, message=''): + self._default_message = 'The given VM name ({0})already exists as part of the stream.'.format(name) + self.message = message or self._default_message + super(CTRexPktBuilder.VMVarNameExistsError, self).__init__(-21, self.message) + + class VMVarFieldTypeError(CPacketBuildException): + """ + This exception is used to indicate an error on the IP addressing part of the packet. + """ + def __init__(self, name, ok_type, message=''): + self._default_message = 'The desired value of field {field_name} is of type {field_type}, \ + and not of the allowed {allowed_type}.'.format(field_name=name, + field_type=type(name).__name__, + allowed_type=ok_type.__name__) + self.message = message or self._default_message + super(CTRexPktBuilder.VMVarNameExistsError, self).__init__(-31, self.message) + + class VMVarValueError(CPacketBuildException): + """ + This exception is used to indicate an error on the IP addressing part of the packet. + """ + def __init__(self, name, ok_opts, message=''): + self._default_message = 'The desired value of field {field_name} is illegal.\n \ + The only allowed options are: {allowed_opts}.'.format(field_name=name, + allowed_opts=ok_opts) + self.message = message or self._default_message + super(CTRexPktBuilder.VMVarValueError, self).__init__(-32, self.message) + if __name__ == "__main__": pass -- cgit 1.2.3-korg From 545ca853464f47db96f5adb99df35ff3c557253f Mon Sep 17 00:00:00 2001 From: Hanoh Haim Date: Sun, 6 Sep 2015 16:08:54 +0300 Subject: add pcap file with wrong headers --- scripts/cap2/asa_exploit.pcap | Bin 0 -> 29728 bytes scripts/cap2/asa_explot1.yaml | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 scripts/cap2/asa_exploit.pcap create mode 100644 scripts/cap2/asa_explot1.yaml diff --git a/scripts/cap2/asa_exploit.pcap b/scripts/cap2/asa_exploit.pcap new file mode 100644 index 00000000..861d4037 Binary files /dev/null and b/scripts/cap2/asa_exploit.pcap differ diff --git a/scripts/cap2/asa_explot1.yaml b/scripts/cap2/asa_explot1.yaml new file mode 100644 index 00000000..6f08c49c --- /dev/null +++ b/scripts/cap2/asa_explot1.yaml @@ -0,0 +1,23 @@ +- duration : 0.1 + generator : + distribution : "seq" + clients_start : "16.0.0.1" + clients_end : "16.0.1.254" + servers_start : "48.0.0.1" + servers_end : "48.0.0.254" + clients_per_gb : 201 + min_clients : 101 + dual_port_mask : "1.0.0.0" + tcp_aging : 0 + udp_aging : 0 + mac : [0x00,0x00,0x00,0x01,0x00,0x00] + cap_ipg : false + cap_ipg_min : 100 + cap_override_ipg : 1000 + cap_info : + - name: cap2/asa_exploit.pcap + cps : 1.1 + ipg : 1.1 + rtt : 50000 + w : 1 + -- cgit 1.2.3-korg From 54f8323b3938bf4ab672cde01a06711bfc522a2e Mon Sep 17 00:00:00 2001 From: imarom Date: Wed, 9 Sep 2015 18:06:12 +0300 Subject: added ownership to RPC server --- src/gtest/rpc_test.cpp | 126 ++++++++++++++++------- src/rpc-server/commands/trex_rpc_cmd_general.cpp | 53 ++++++++++ src/rpc-server/commands/trex_rpc_cmd_stream.cpp | 4 +- src/rpc-server/commands/trex_rpc_cmds.h | 38 ++++--- src/rpc-server/trex_rpc_cmd.cpp | 18 ++++ src/rpc-server/trex_rpc_cmd_api.h | 18 +++- src/rpc-server/trex_rpc_cmds_table.cpp | 6 ++ src/rpc-server/trex_rpc_server.cpp | 20 ++++ src/rpc-server/trex_rpc_server_api.h | 28 ++++- src/stateless/trex_stream_api.h | 12 +-- 10 files changed, 262 insertions(+), 61 deletions(-) diff --git a/src/gtest/rpc_test.cpp b/src/gtest/rpc_test.cpp index 8a7e9176..767560b0 100644 --- a/src/gtest/rpc_test.cpp +++ b/src/gtest/rpc_test.cpp @@ -30,6 +30,32 @@ using namespace std; class RpcTest : public testing::Test { + void take_ownership(void) { + Json::Value request; + Json::Value response; + + create_request(request, "aquire", 1 , false); + + request["params"]["user"] = "test"; + request["params"]["force"] = true; + + send_request(request, response); + + EXPECT_TRUE(response["result"] != Json::nullValue); + m_ownership_handler = response["result"].asString(); + } + + void release_ownership() { + Json::Value request; + Json::Value response; + + create_request(request, "release", 1 , false); + request["params"]["handler"] = m_ownership_handler; + + send_request(request, response); + EXPECT_TRUE(response["result"] == "ACK"); + } + virtual void SetUp() { TrexRpcServerConfig cfg = TrexRpcServerConfig(TrexRpcServerConfig::RPC_PROT_TCP, 5050); @@ -39,6 +65,8 @@ class RpcTest : public testing::Test { m_context = zmq_ctx_new (); m_socket = zmq_socket (m_context, ZMQ_REQ); zmq_connect (m_socket, "tcp://localhost:5050"); + + take_ownership(); } virtual void TearDown() { @@ -50,6 +78,33 @@ class RpcTest : public testing::Test { } public: + + void create_request(Json::Value &request, const string &method, int id = 1, bool ownership = false) { + request.clear(); + + request["jsonrpc"] = "2.0"; + request["id"] = id; + request["method"] = method; + + if (ownership) { + request["params"]["handler"] = m_ownership_handler; + } + } + + void send_request(const Json::Value &request, Json::Value &response) { + Json::FastWriter writer; + Json::Reader reader; + + response.clear(); + + string request_str = writer.write(request); + string ret = send_msg(request_str); + + EXPECT_TRUE(reader.parse(ret, response, false)); + EXPECT_EQ(response["jsonrpc"], "2.0"); + EXPECT_EQ(response["id"], request["id"]); + } + string send_msg(const string &msg) { char buffer[512]; @@ -62,6 +117,7 @@ public: TrexRpcServer *m_rpc; void *m_context; void *m_socket; + string m_ownership_handler; }; TEST_F(RpcTest, basic_rpc_test) { @@ -230,42 +286,48 @@ TEST_F(RpcTest, add_stream) { Json::Value response; Json::Reader reader; - string resp_str; + create_request(request, "get_stream", 1, true); - // check the stream does not exists - string lookup_str = "{\"jsonrpc\":\"2.0\", \"id\":1, \"method\":\"get_stream\", \"params\":{\"port_id\":1, \"stream_id\":5}}"; - resp_str = send_msg(lookup_str); + request["params"]["port_id"] = 1; + request["params"]["stream_id"] = 5; + + send_request(request, response); - EXPECT_TRUE(reader.parse(resp_str, response, false)); EXPECT_EQ(response["jsonrpc"], "2.0"); EXPECT_EQ(response["id"], 1); - EXPECT_EQ(response["error"]["code"], -32000); // add it + create_request(request, "add_stream", 1, true); + request["params"]["port_id"] = 1; + request["params"]["stream_id"] = 5; + request["params"]["stream"]["mode"]["type"] = "continuous"; + request["params"]["stream"]["mode"]["pps"] = 3; + request["params"]["stream"]["isg"] = 4.3; + request["params"]["stream"]["enabled"] = true; + request["params"]["stream"]["self_start"] = true; + request["params"]["stream"]["next_stream_id"] = -1; + + request["params"]["stream"]["packet"]["meta"] = "dummy"; + request["params"]["stream"]["packet"]["binary"][0] = 4; + request["params"]["stream"]["packet"]["binary"][1] = 1; + request["params"]["stream"]["packet"]["binary"][2] = 255; + + request["params"]["stream"]["vm"] = Json::arrayValue; + request["params"]["stream"]["rx_stats"]["enabled"] = false; + + send_request(request, response); - string add_str = "{\"jsonrpc\":\"2.0\", \"id\":1, \"method\":\"add_stream\", \"params\":" - "{\"port_id\":1, \"stream_id\":5, \"stream\":{" - "\"mode\": {\"type\":\"continuous\", \"pps\":3}," - "\"isg\":4.3, \"enabled\":true, \"self_start\":true," - "\"next_stream_id\":-1," - "\"packet\":{\"binary\":[4,1,255], \"meta\":\"dummy\"}," - "\"vm\":[]," - "\"rx_stats\":{\"enabled\":false}}}}"; + EXPECT_EQ(response["result"], "ACK"); - resp_str = send_msg(add_str); + /* get it */ - EXPECT_TRUE(reader.parse(resp_str, response, false)); - EXPECT_EQ(response["jsonrpc"], "2.0"); - EXPECT_EQ(response["id"], 1); + create_request(request, "get_stream", 1, true); - EXPECT_EQ(response["result"], "ACK"); + request["params"]["port_id"] = 1; + request["params"]["stream_id"] = 5; - resp_str = send_msg(lookup_str); - - EXPECT_TRUE(reader.parse(resp_str, response, false)); - EXPECT_EQ(response["jsonrpc"], "2.0"); - EXPECT_EQ(response["id"], 1); + send_request(request, response); const Json::Value &stream = response["result"]["stream"]; @@ -286,23 +348,17 @@ TEST_F(RpcTest, add_stream) { EXPECT_EQ(stream["mode"]["pps"], 3); // remove it + create_request(request, "remove_stream", 1, true); - string remove_str = "{\"jsonrpc\":\"2.0\", \"id\":1, \"method\":\"remove_stream\", \"params\":{\"port_id\":1, \"stream_id\":5}}"; - resp_str = send_msg(remove_str); + request["params"]["port_id"] = 1; + request["params"]["stream_id"] = 5; - EXPECT_TRUE(reader.parse(resp_str, response, false)); - EXPECT_EQ(response["jsonrpc"], "2.0"); - EXPECT_EQ(response["id"], 1); + send_request(request, response); EXPECT_EQ(response["result"], "ACK"); - resp_str = send_msg(remove_str); - // should not be present anymore - - EXPECT_TRUE(reader.parse(resp_str, response, false)); - EXPECT_EQ(response["jsonrpc"], "2.0"); - EXPECT_EQ(response["id"], 1); + send_request(request, response); EXPECT_EQ(response["error"]["code"], -32000); diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp index 32952b1a..d5aa3a90 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp @@ -63,3 +63,56 @@ TrexRpcCmdGetStatus::_run(const Json::Value ¶ms, Json::Value &result) { return (TREX_RPC_CMD_OK); } +/** + * returns the current owner of the device + * + * @author imarom (08-Sep-15) + * + * @param params + * @param result + * + * @return trex_rpc_cmd_rc_e + */ +trex_rpc_cmd_rc_e +TrexRpcCmdGetOwner::_run(const Json::Value ¶ms, Json::Value &result) { + Json::Value §ion = result["result"]; + + section["owner"] = TrexRpcServer::get_owner(); + + return (TREX_RPC_CMD_OK); +} + +/** + * acquire device + * + */ +trex_rpc_cmd_rc_e +TrexRpcCmdAcquire::_run(const Json::Value ¶ms, Json::Value &result) { + + const string &new_owner = parse_string(params, "user", result); + bool force = parse_bool(params, "force", result); + + /* if not free and not you and not force - fail */ + if ( (!TrexRpcServer::is_free_to_aquire()) && (TrexRpcServer::get_owner() != new_owner) && (!force)) { + generate_execute_err(result, "device is already taken by '" + TrexRpcServer::get_owner() + "'"); + } + + string handle = TrexRpcServer::set_owner(new_owner); + + result["result"] = handle; + + return (TREX_RPC_CMD_OK); +} + +/** + * release device + * + */ +trex_rpc_cmd_rc_e +TrexRpcCmdRelease::_run(const Json::Value ¶ms, Json::Value &result) { + TrexRpcServer::clear_owner(); + + result["result"] = "ACK"; + + return (TREX_RPC_CMD_OK); +} diff --git a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp index 90b55ea8..b62d213b 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp @@ -136,13 +136,13 @@ TrexRpcCmdAddStream::allocate_new_stream(const Json::Value §ion, uint8_t por } else if (type == "single_burst") { uint32_t total_pkts = parse_int(mode, "total_pkts", result); - uint32_t pps = parse_int(mode, "pps", result); + double pps = parse_double(mode, "pps", result); stream = new TrexStreamBurst(port_id, stream_id, total_pkts, pps); } else if (type == "multi_burst") { - uint32_t pps = parse_int(mode, "pps", result); + double pps = parse_double(mode, "pps", result); double ibg_usec = parse_double(mode, "ibg", result); uint32_t num_bursts = parse_int(mode, "number_of_bursts", result); uint32_t pkts_per_burst = parse_int(mode, "pkts_per_burst", result); diff --git a/src/rpc-server/commands/trex_rpc_cmds.h b/src/rpc-server/commands/trex_rpc_cmds.h index f88631bc..32138195 100644 --- a/src/rpc-server/commands/trex_rpc_cmds.h +++ b/src/rpc-server/commands/trex_rpc_cmds.h @@ -35,37 +35,45 @@ class TrexStream; * syntactic sugar for creating a simple command */ -#define TREX_RPC_CMD_DEFINE_EXTENED(class_name, cmd_name, param_count, ext) \ +#define TREX_RPC_CMD_DEFINE_EXTENED(class_name, cmd_name, param_count, needs_ownership, ext) \ class class_name : public TrexRpcCommand { \ public: \ - class_name () : TrexRpcCommand(cmd_name, param_count) {} \ + class_name () : TrexRpcCommand(cmd_name, param_count, needs_ownership) {} \ protected: \ virtual trex_rpc_cmd_rc_e _run(const Json::Value ¶ms, Json::Value &result); \ ext \ } -#define TREX_RPC_CMD_DEFINE(class_name, cmd_name, param_count) TREX_RPC_CMD_DEFINE_EXTENED(class_name, cmd_name, param_count, ;) +#define TREX_RPC_CMD_DEFINE(class_name, cmd_name, param_count, needs_ownership) TREX_RPC_CMD_DEFINE_EXTENED(class_name, cmd_name, param_count, needs_ownership, ;) /** * test cmds */ -TREX_RPC_CMD_DEFINE(TrexRpcCmdTestAdd, "test_add", 2); -TREX_RPC_CMD_DEFINE(TrexRpcCmdTestSub, "test_sub", 2); +TREX_RPC_CMD_DEFINE(TrexRpcCmdTestAdd, "test_add", 2, false); +TREX_RPC_CMD_DEFINE(TrexRpcCmdTestSub, "test_sub", 2, false); /** * general cmds */ -TREX_RPC_CMD_DEFINE(TrexRpcCmdPing, "ping", 0); -TREX_RPC_CMD_DEFINE(TrexRpcCmdGetReg, "get_reg_cmds", 0); -TREX_RPC_CMD_DEFINE(TrexRpcCmdGetStatus, "get_status", 0); +TREX_RPC_CMD_DEFINE(TrexRpcCmdPing, "ping", 0, false); +TREX_RPC_CMD_DEFINE(TrexRpcCmdGetReg, "get_reg_cmds", 0, false); +TREX_RPC_CMD_DEFINE(TrexRpcCmdGetStatus, "get_status", 0, false); + +/** + * ownership + */ +TREX_RPC_CMD_DEFINE(TrexRpcCmdGetOwner, "get_owner", 0, false); +TREX_RPC_CMD_DEFINE(TrexRpcCmdAcquire, "acquire", 2, false); +TREX_RPC_CMD_DEFINE(TrexRpcCmdRelease, "release", 0, true); + /** * stream cmds */ -TREX_RPC_CMD_DEFINE(TrexRpcCmdRemoveAllStreams, "remove_all_streams", 1); -TREX_RPC_CMD_DEFINE(TrexRpcCmdRemoveStream, "remove_stream", 2); +TREX_RPC_CMD_DEFINE(TrexRpcCmdRemoveAllStreams, "remove_all_streams", 1, true); +TREX_RPC_CMD_DEFINE(TrexRpcCmdRemoveStream, "remove_stream", 2, true); -TREX_RPC_CMD_DEFINE_EXTENED(TrexRpcCmdAddStream, "add_stream", 3, +TREX_RPC_CMD_DEFINE_EXTENED(TrexRpcCmdAddStream, "add_stream", 3, true, /* extended part */ TrexStream * allocate_new_stream(const Json::Value §ion, uint8_t port_id, uint32_t stream_id, Json::Value &result); @@ -77,11 +85,11 @@ void parse_vm_instr_write_flow_var(const Json::Value &inst, TrexStream *stream, ); -TREX_RPC_CMD_DEFINE(TrexRpcCmdGetStreamList, "get_stream_list", 1); +TREX_RPC_CMD_DEFINE(TrexRpcCmdGetStreamList, "get_stream_list", 1, true); -TREX_RPC_CMD_DEFINE(TrexRpcCmdGetStream, "get_stream", 2); +TREX_RPC_CMD_DEFINE(TrexRpcCmdGetStream, "get_stream", 2, true); -TREX_RPC_CMD_DEFINE(TrexRpcCmdStartTraffic, "start_traffic", 1); -TREX_RPC_CMD_DEFINE(TrexRpcCmdStopTraffic, "stop_traffic", 1); +TREX_RPC_CMD_DEFINE(TrexRpcCmdStartTraffic, "start_traffic", 1, true); +TREX_RPC_CMD_DEFINE(TrexRpcCmdStopTraffic, "stop_traffic", 1, true); #endif /* __TREX_RPC_CMD_H__ */ diff --git a/src/rpc-server/trex_rpc_cmd.cpp b/src/rpc-server/trex_rpc_cmd.cpp index 3fc77f71..437e8b1a 100644 --- a/src/rpc-server/trex_rpc_cmd.cpp +++ b/src/rpc-server/trex_rpc_cmd.cpp @@ -19,6 +19,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include +#include trex_rpc_cmd_rc_e TrexRpcCommand::run(const Json::Value ¶ms, Json::Value &result) { @@ -26,8 +27,16 @@ TrexRpcCommand::run(const Json::Value ¶ms, Json::Value &result) { /* the internal run can throw a parser error / other error */ try { + check_param_count(params, m_param_count, result); + + if (m_needs_ownership) { + verify_ownership(params, result); + } + + /* run the command itself*/ rc = _run(params, result); + } catch (TrexRpcCommandException &e) { return e.get_rc(); } @@ -45,6 +54,15 @@ TrexRpcCommand::check_param_count(const Json::Value ¶ms, int expected, Json: } } +void +TrexRpcCommand::verify_ownership(const Json::Value ¶ms, Json::Value &result) { + std::string handler = parse_string(params, "handler", result); + + if (!TrexRpcServer::verify_owner_handler(handler)) { + generate_execute_err(result, "invalid handler provided. please pass the handler given when calling 'acquire' or take ownership"); + } +} + const char * TrexRpcCommand::type_to_str(field_type_e type) { switch (type) { diff --git a/src/rpc-server/trex_rpc_cmd_api.h b/src/rpc-server/trex_rpc_cmd_api.h index def52fca..c72b3e3b 100644 --- a/src/rpc-server/trex_rpc_cmd_api.h +++ b/src/rpc-server/trex_rpc_cmd_api.h @@ -68,8 +68,15 @@ public: /** * method name and params */ - TrexRpcCommand(const std::string &method_name, int param_count) : m_name(method_name), m_param_count(param_count) { - + TrexRpcCommand(const std::string &method_name, int param_count, bool needs_ownership) : + m_name(method_name), + m_param_count(param_count), + m_needs_ownership(needs_ownership) { + + /* if needs ownership - another field is needed (handler) */ + if (m_needs_ownership) { + m_param_count++; + } } /** @@ -111,6 +118,12 @@ protected: */ void check_param_count(const Json::Value ¶ms, int expected, Json::Value &result); + /** + * verify ownership + * + */ + void verify_ownership(const Json::Value ¶ms, Json::Value &result); + /** * parse functions * @@ -209,6 +222,7 @@ protected: /* RPC command name */ std::string m_name; int m_param_count; + bool m_needs_ownership; }; #endif /* __TREX_RPC_CMD_API_H__ */ diff --git a/src/rpc-server/trex_rpc_cmds_table.cpp b/src/rpc-server/trex_rpc_cmds_table.cpp index 71668994..f968bb74 100644 --- a/src/rpc-server/trex_rpc_cmds_table.cpp +++ b/src/rpc-server/trex_rpc_cmds_table.cpp @@ -30,9 +30,15 @@ TrexRpcCommandsTable::TrexRpcCommandsTable() { /* add the test command (for gtest) */ register_command(new TrexRpcCmdTestAdd()); register_command(new TrexRpcCmdTestSub()); + + + /* general */ register_command(new TrexRpcCmdPing()); register_command(new TrexRpcCmdGetReg()); register_command(new TrexRpcCmdGetStatus()); + register_command(new TrexRpcCmdGetOwner()); + register_command(new TrexRpcCmdAcquire()); + register_command(new TrexRpcCmdRelease()); /* stream commands */ register_command(new TrexRpcCmdAddStream()); diff --git a/src/rpc-server/trex_rpc_server.cpp b/src/rpc-server/trex_rpc_server.cpp index 149bb668..a5988cab 100644 --- a/src/rpc-server/trex_rpc_server.cpp +++ b/src/rpc-server/trex_rpc_server.cpp @@ -112,6 +112,7 @@ get_current_date_time() { const std::string TrexRpcServer::s_server_uptime = get_current_date_time(); std::string TrexRpcServer::s_owner = "none"; +std::string TrexRpcServer::s_owner_handler = ""; TrexRpcServer::TrexRpcServer(const TrexRpcServerConfig &req_resp_cfg) { @@ -157,3 +158,22 @@ void TrexRpcServer::set_verbose(bool verbose) { } } +/** + * generate a random connection handler + * + */ +std::string TrexRpcServer::generate_handler() { + std::stringstream ss; + + static const char alphanum[] = + "0123456789" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz"; + + /* generate 8 bytes of random handler */ + for (int i = 0; i < 8; ++i) { + ss << alphanum[rand() % (sizeof(alphanum) - 1)]; + } + + return (ss.str()); +} diff --git a/src/rpc-server/trex_rpc_server_api.h b/src/rpc-server/trex_rpc_server_api.h index b4313670..c34ac0f8 100644 --- a/src/rpc-server/trex_rpc_server_api.h +++ b/src/rpc-server/trex_rpc_server_api.h @@ -172,25 +172,51 @@ public: return s_owner; } + /** + * owner handler + * for the connection + * + */ + static const std::string &get_owner_handler() { + return s_owner_handler; + } + + static bool is_free_to_aquire() { + return (s_owner == "none"); + } + /** * take ownership of the server array * this is static * ownership is total * */ - static void set_owner(const std::string &owner) { + static std::string set_owner(const std::string &owner) { s_owner = owner; + s_owner_handler = generate_handler(); + return (s_owner_handler); } static void clear_owner() { s_owner = "none"; + s_owner_handler = ""; + } + + static bool verify_owner_handler(const std::string &handler) { + + return ( (s_owner != "none") && (s_owner_handler == handler) ); + } private: + static std::string generate_handler(); + std::vector m_servers; bool m_verbose; static const std::string s_server_uptime; + static std::string s_owner; + static std::string s_owner_handler; }; #endif /* __TREX_RPC_SERVER_API_H__ */ diff --git a/src/stateless/trex_stream_api.h b/src/stateless/trex_stream_api.h index 26999751..0a955ff7 100644 --- a/src/stateless/trex_stream_api.h +++ b/src/stateless/trex_stream_api.h @@ -90,15 +90,15 @@ private: */ class TrexStreamContinuous : public TrexStream { public: - TrexStreamContinuous(uint8_t port_id, uint32_t stream_id, uint32_t pps) : TrexStream(port_id, stream_id), m_pps(pps) { + TrexStreamContinuous(uint8_t port_id, uint32_t stream_id, double pps) : TrexStream(port_id, stream_id), m_pps(pps) { } - uint32_t get_pps() { + double get_pps() { return m_pps; } protected: - uint32_t m_pps; + double m_pps; }; /** @@ -107,7 +107,7 @@ protected: */ class TrexStreamBurst : public TrexStream { public: - TrexStreamBurst(uint8_t port_id, uint32_t stream_id, uint32_t total_pkts, uint32_t pps) : + TrexStreamBurst(uint8_t port_id, uint32_t stream_id, uint32_t total_pkts, double pps) : TrexStream(port_id, stream_id), m_total_pkts(total_pkts), m_pps(pps) { @@ -115,7 +115,7 @@ public: protected: uint32_t m_total_pkts; - uint32_t m_pps; + double m_pps; }; /** @@ -127,7 +127,7 @@ public: TrexStreamMultiBurst(uint8_t port_id, uint32_t stream_id, uint32_t pkts_per_burst, - uint32_t pps, + double pps, uint32_t num_bursts, double ibg_usec) : TrexStreamBurst(port_id, stream_id, pkts_per_burst, pps), m_num_bursts(num_bursts), m_ibg_usec(ibg_usec) { -- cgit 1.2.3-korg From 835776faf7b0c484f3b26534aef95e577068c01e Mon Sep 17 00:00:00 2001 From: Hanoh Haim Date: Thu, 10 Sep 2015 05:56:44 +0300 Subject: WIP --- linux/ws_main.py | 4 +- src/gtest/trex_stateless_gtest.cpp | 352 +++++++++++++++++++++++++++++++++++++ 2 files changed, 355 insertions(+), 1 deletion(-) create mode 100644 src/gtest/trex_stateless_gtest.cpp diff --git a/linux/ws_main.py b/linux/ws_main.py index 5bf9a743..4a1031ca 100755 --- a/linux/ws_main.py +++ b/linux/ws_main.py @@ -109,8 +109,10 @@ main_src = SrcGroup(dir='src', 'utl_json.cpp', 'utl_cpuu.cpp', 'msg_manager.cpp', + 'gtest/tuple_gen_test.cpp', 'gtest/nat_test.cpp', + 'gtest/trex_stateless_gtest.cpp', 'pal/linux/pal_utl.cpp', 'pal/linux/mbuf.cpp' @@ -141,7 +143,7 @@ net_src = SrcGroup(dir='src/common/Network/Packet', # stateless code stateless_src = SrcGroup(dir='src/stateless/', src_list=['trex_stream.cpp', - 'trex_stateless.cpp' + 'trex_stateless.cpp', ]) # RPC code rpc_server_src = SrcGroup(dir='src/rpc-server/', diff --git a/src/gtest/trex_stateless_gtest.cpp b/src/gtest/trex_stateless_gtest.cpp new file mode 100644 index 00000000..d7b4cdcd --- /dev/null +++ b/src/gtest/trex_stateless_gtest.cpp @@ -0,0 +1,352 @@ +/* + Hanoh Haim + Cisco Systems, Inc. +*/ + +/* +Copyright (c) 2015-2015 Cisco Systems, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#include "bp_sim.h" +#include +#include + + +#define EXPECT_EQ_UINT32(a,b) EXPECT_EQ((uint32_t)(a),(uint32_t)(b)) + +// one stream info with const packet , no VM +class CTRexDpStatelessVM { + +}; + +//- add dump function +// - check one object +// create frame work + +class CTRexDpStreamModeContinues{ +public: + void set_pps(double pps){ + m_pps=pps; + } + double get_pps(){ + return (m_pps); + } + + void dump(FILE *fd); +private: + double m_pps; +}; + + +void CTRexDpStreamModeContinues::dump(FILE *fd){ + fprintf (fd," pps : %f \n",m_pps); +} + + +class CTRexDpStreamModeSingleBurst{ +public: + void set_pps(double pps){ + m_pps=pps; + } + double get_pps(){ + return (m_pps); + } + + void set_total_packets(uint64_t total_packets){ + m_total_packets =total_packets; + } + + uint64_t get_total_packets(){ + return (m_total_packets); + } + + void dump(FILE *fd); + +private: + double m_pps; + uint64_t m_total_packets; +}; + + +void CTRexDpStreamModeSingleBurst::dump(FILE *fd){ + fprintf (fd," pps : %f \n",m_pps); + fprintf (fd," total_packets : %llu \n",m_total_packets); +} + + +class CTRexDpStreamModeMultiBurst{ +public: + void set_pps(double pps){ + m_pps=pps; + } + double get_pps(){ + return (m_pps); + } + + void set_pkts_per_burst(uint64_t pkts_per_burst){ + m_pkts_per_burst =pkts_per_burst; + } + + uint64_t get_pkts_per_burst(){ + return (m_pkts_per_burst); + } + + void set_ibg(double ibg){ + m_ibg = ibg; + } + + double get_ibg(){ + return ( m_ibg ); + } + + void set_number_of_bursts(uint32_t number_of_bursts){ + m_number_of_bursts = number_of_bursts; + } + + uint32_t get_number_of_bursts(){ + return (m_number_of_bursts); + } + + void dump(FILE *fd); + +private: + double m_pps; + double m_ibg; // inter burst gap + uint64_t m_pkts_per_burst; + uint32_t m_number_of_bursts; +}; + +void CTRexDpStreamModeMultiBurst::dump(FILE *fd){ + fprintf (fd," pps : %f \n",m_pps); + fprintf (fd," total_packets : %llu \n",m_pkts_per_burst); + fprintf (fd," ibg : %f \n",m_ibg); + fprintf (fd," num_of_bursts : %llu \n",m_number_of_bursts); +} + + + +class CTRexDpStreamMode { +public: + enum MODES { + moCONTINUES = 0x0, + moSINGLE_BURST = 0x1, + moMULTI_BURST = 0x2 + } ; + typedef uint8_t MODE_TYPE_t; + + void reset(); + + void set_mode(MODE_TYPE_t mode ){ + m_type = mode; + } + + MODE_TYPE_t get_mode(){ + return (m_type); + } + + + CTRexDpStreamModeContinues & cont(void){ + return (m_data.m_cont); + } + CTRexDpStreamModeSingleBurst & single_burst(void){ + return (m_data.m_signle_burst); + } + + CTRexDpStreamModeMultiBurst & multi_burst(void){ + return (m_data.m_multi_burst); + } + + void dump(FILE *fd); + +private: + uint8_t m_type; + union Data { + CTRexDpStreamModeContinues m_cont; + CTRexDpStreamModeSingleBurst m_signle_burst; + CTRexDpStreamModeMultiBurst m_multi_burst; + } m_data; +}; + + +void CTRexDpStreamMode::reset(){ + m_type =CTRexDpStreamMode::moCONTINUES; + memset(&m_data,0,sizeof(m_data)); +} + +void CTRexDpStreamMode::dump(FILE *fd){ + const char * table[3] = {"CONTINUES","SINGLE_BURST","MULTI_BURST"}; + + fprintf(fd," mode : %s \n", (char*)table[m_type]); + switch (m_type) { + case CTRexDpStreamMode::moCONTINUES : + cont().dump(fd); + break; + case CTRexDpStreamMode::moSINGLE_BURST : + single_burst().dump(fd); + break; + case CTRexDpStreamMode::moMULTI_BURST : + multi_burst().dump(fd); + break; + default: + fprintf(fd," ERROR type if not valid %d \n",m_type); + break; + } +} + + + + +class CTRexDpStatelessStream { + +public: + enum FLAGS_0{ + _ENABLE = 0, + _SELF_START = 1, + _VM_ENABLE =2, + _END_STREAM =-1 + }; + + CTRexDpStatelessStream(){ + reset(); + } + + void reset(){ + m_packet =0; + m_vm=0; + m_flags=0; + m_isg_sec=0.0; + m_next_stream = CTRexDpStatelessStream::_END_STREAM ; // END + m_mode.reset(); + } + + void set_enable(bool enable){ + btSetMaskBit32(m_flags,_ENABLE,_ENABLE,enable?1:0); + } + + bool get_enabled(){ + return (btGetMaskBit32(m_flags,_ENABLE,_ENABLE)?true:false); + } + + void set_self_start(bool enable){ + btSetMaskBit32(m_flags,_SELF_START,_SELF_START,enable?1:0); + } + + bool get_self_start(bool enable){ + return (btGetMaskBit32(m_flags,_SELF_START,_SELF_START)?true:false); + } + + + /* if we don't have VM we could just replicate the mbuf and allocate it once */ + void set_vm_enable(bool enable){ + btSetMaskBit32(m_flags,_VM_ENABLE,_VM_ENABLE,enable?1:0); + } + + bool get_vm_enabled(bool enable){ + return (btGetMaskBit32(m_flags,_VM_ENABLE,_VM_ENABLE)?true:false); + } + + void set_inter_stream_gap(double isg_sec){ + m_isg_sec =isg_sec; + } + + double get_inter_stream_gap(){ + return (m_isg_sec); + } + + CTRexDpStreamMode & get_mode(); + + + // CTRexDpStatelessStream::_END_STREAM for END + void set_next_stream(int32_t next_stream){ + m_next_stream =next_stream; + } + + int32_t get_next_stream(void){ + return ( m_next_stream ); + } + + void dump(FILE *fd); + +private: + char * m_packet; + CTRexDpStatelessVM * m_vm; + uint32_t m_flags; + double m_isg_sec; // in second + CTRexDpStreamMode m_mode; + int32_t m_next_stream; // next stream id +}; + +//- list of streams info with const packet , no VM +// - object that include the stream /scheduler/ packet allocation / need to create an object for one thread that works for test +// generate pcap file and compare it + + +void CTRexDpStatelessStream::dump(FILE *fd){ + + fprintf(fd," enabled : %d \n",get_enabled()?1:0); + fprintf(fd," self_start : %d \n",get_self_start()?1:0); + fprintf(fd," vm : %d \n",get_vm_enabled()?1:0); + fprintf(" isg : %f \n",m_isg_sec); + m_mode.dump(fd); + if (m_next_stream == CTRexDpStatelessStream::_END_STREAM ) { + fprintf(fd," action : End of Stream \n"); + }else{ + fprintf(" next : %d \n",m_next_stream); + } +} + + + +class CTRexStatelessBasic { + +public: + CTRexStatelessBasic(){ + m_threads=1; + } + + bool init(void){ + return (true); + } + +public: + bool m_threads; +}; + + +/* stateless basic */ +class dp_sl_basic : public testing::Test { + protected: + virtual void SetUp() { + } + virtual void TearDown() { + } +public: +}; + + +TEST_F(dp_sl_basic, test1) { + CTRexDpStatelessStream s1; + s1.set_enable(true); + s1.set_self_start(true); + s1.set_inter_stream_gap(0.77); + s1.get_mode().set_mode(CTRexDpStreamMode::moCONTINUES); + s1.get_mode().cont().set_pps(100.2); + s1.dump(stdout); +} + + + + + -- cgit 1.2.3-korg From 15b4f7cd7c3e9176c1f24fc632791e833cb588b8 Mon Sep 17 00:00:00 2001 From: Hanoh Haim Date: Thu, 10 Sep 2015 15:56:38 +0300 Subject: WIP --- src/gtest/trex_stateless_gtest.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gtest/trex_stateless_gtest.cpp b/src/gtest/trex_stateless_gtest.cpp index d7b4cdcd..0341516c 100644 --- a/src/gtest/trex_stateless_gtest.cpp +++ b/src/gtest/trex_stateless_gtest.cpp @@ -292,7 +292,7 @@ private: // - object that include the stream /scheduler/ packet allocation / need to create an object for one thread that works for test // generate pcap file and compare it - +#if 0 void CTRexDpStatelessStream::dump(FILE *fd){ fprintf(fd," enabled : %d \n",get_enabled()?1:0); @@ -336,6 +336,7 @@ public: }; + TEST_F(dp_sl_basic, test1) { CTRexDpStatelessStream s1; s1.set_enable(true); @@ -349,4 +350,4 @@ TEST_F(dp_sl_basic, test1) { - +#endif -- cgit 1.2.3-korg From ef520c7e3a18aeefe02ba0d3e6b16fafde3c1b91 Mon Sep 17 00:00:00 2001 From: Dan Klein Date: Thu, 10 Sep 2015 13:39:18 +0300 Subject: Major progress in Packet building module and VM instruction sets. added dot1q into dpkt lib First abstractino of HLTAPI layer --- .../trex_control_plane/client/trex_client.py | 2 - .../trex_control_plane/client/trex_hltapi.py | 18 + .../trex_control_plane/client/trex_root_path.py | 15 + .../client_utils/packet_builder.py | 566 ++++++++-- scripts/external_libs/dpkt-1.8.6/dpkt/dot1q.py | 1110 ++++++++++++++++++++ 5 files changed, 1635 insertions(+), 76 deletions(-) create mode 100644 scripts/automation/trex_control_plane/client/trex_hltapi.py create mode 100644 scripts/automation/trex_control_plane/client/trex_root_path.py create mode 100644 scripts/external_libs/dpkt-1.8.6/dpkt/dot1q.py diff --git a/scripts/automation/trex_control_plane/client/trex_client.py b/scripts/automation/trex_control_plane/client/trex_client.py index 0fbb4719..56775766 100755 --- a/scripts/automation/trex_control_plane/client/trex_client.py +++ b/scripts/automation/trex_control_plane/client/trex_client.py @@ -1062,5 +1062,3 @@ class CTRexResult(object): if __name__ == "__main__": pass - - diff --git a/scripts/automation/trex_control_plane/client/trex_hltapi.py b/scripts/automation/trex_control_plane/client/trex_hltapi.py new file mode 100644 index 00000000..46c283f8 --- /dev/null +++ b/scripts/automation/trex_control_plane/client/trex_hltapi.py @@ -0,0 +1,18 @@ +#!/router/bin/python + +import trex_root_path +from client_utils.packet_builder import CTRexPktBuilder + +print "done!" + +class CTRexHltApi(object): + + def __init__(self): + pass + + def config_traffic(self): + pass + +if __name__ == "__main__": + pass + diff --git a/scripts/automation/trex_control_plane/client/trex_root_path.py b/scripts/automation/trex_control_plane/client/trex_root_path.py new file mode 100644 index 00000000..de4ec03b --- /dev/null +++ b/scripts/automation/trex_control_plane/client/trex_root_path.py @@ -0,0 +1,15 @@ +#!/router/bin/python + +import os +import sys + +def add_root_to_path (): + """adds trex_control_plane root dir to script path, up to `depth` parent dirs""" + root_dirname = 'trex_control_plane' + file_path = os.path.dirname(os.path.realpath(__file__)) + + components = file_path.split(os.sep) + sys.path.append( str.join(os.sep, components[:components.index(root_dirname)+1]) ) + return + +add_root_to_path() diff --git a/scripts/automation/trex_control_plane/client_utils/packet_builder.py b/scripts/automation/trex_control_plane/client_utils/packet_builder.py index 0d31f28e..abe98dbb 100644 --- a/scripts/automation/trex_control_plane/client_utils/packet_builder.py +++ b/scripts/automation/trex_control_plane/client_utils/packet_builder.py @@ -5,23 +5,207 @@ import outer_packages import dpkt import socket import binascii +import copy +import random +import string +import struct +import re class CTRexPktBuilder(object): - """docstring for CTRexPktBuilder""" - def __init__(self): + """ + This class defines the TRex API of building a packet using dpkt package. + Using this class the user can also define how TRex will handle the packet by specifying the VM setting. + """ + def __init__(self, max_pkt_size=dpkt.ethernet.ETH_LEN_MAX): + """ + Instantiate a CTRexPktBuilder object + + :parameters: + None + + """ super(CTRexPktBuilder, self).__init__() - self.packet = None - self.vm = CTRexPktBuilder.CTRexVM(self.packet) + self._packet = None + self._pkt_by_hdr = {} + self._pkt_top_layer = None + self._max_pkt_size = max_pkt_size + self.payload_generator = CTRexPktBuilder.CTRexPayloadGen(self._packet, self._max_pkt_size) + self.vm = CTRexPktBuilder.CTRexVM() + + def add_pkt_layer(self, layer_name, pkt_layer): + """ + This method adds additional header to the already existing packet - def add_l2_header(self): - pass + :parameters: + layer_name: str + a string representing the name of the layer. + Example: "l2", "l4_tcp", etc. - def add_l3_header(self): - pass + pkt_layer : dpkt.Packet obj + a dpkt object, generally from higher layer, that will be added on top of existing layer. - def add_pkt_payload(self): - pass + """ + assert isinstance(pkt_layer, dpkt.Packet) + if layer_name in self._pkt_by_hdr: + raise ValueError("Given layer name '{0}' already exists.".format(layer_name)) + else: + dup_pkt = copy.copy(pkt_layer) # using copy of layer to avoid cyclic packets that may lead to infinite loop + if not self._pkt_top_layer: # this is the first header added + self._packet = dup_pkt + else: + self._pkt_top_layer.data = dup_pkt + self._pkt_top_layer = dup_pkt + self._pkt_by_hdr[layer_name] = dup_pkt + return + + def set_ip_layer_addr(self, layer_name, attr, ip_addr, ip_type="ipv4"): + try: + layer = self._pkt_by_hdr[layer_name.lower()] + if not (isinstance(layer, dpkt.ip.IP) or isinstance(layer, dpkt.ip6.IP6)): + raise ValueError("The specified layer '{0}' is not of IPv4/IPv6 type.".format(layer_name)) + else: + decoded_ip = CTRexPktBuilder._decode_ip_addr(ip_addr, ip_type) + setattr(layer, attr, decoded_ip) + except KeyError: + raise KeyError("Specified layer '{0}' doesn't exist on packet.".format(layer_name)) + + def set_ipv6_layer_addr(self, layer_name, attr, ip_addr): + self.set_ip_layer_addr(self, layer_name, attr, ip_addr, ip_type="ipv6") + + def set_eth_layer_addr(self, layer_name, attr, mac_addr): + try: + layer = self._pkt_by_hdr[layer_name.lower()] + if not isinstance(layer, dpkt.ethernet.Ethernet): + raise ValueError("The specified layer '{0}' is not of Ethernet type.".format(layer_name)) + else: + decoded_mac = CTRexPktBuilder._decode_mac_addr(mac_addr) + setattr(layer, attr, decoded_mac) + except KeyError: + raise KeyError("Specified layer '{0}' doesn't exist on packet.".format(layer_name)) + + def set_layer_attr(self, layer_name, attr, val): + """ + This method enables the user to change a value of a previously defined packet layer. + This method isn't to be used to set the data attribute of a packet with payload. + Use :func:`packet_builder.CTRexPktBuilder.set_payload` instead. + + :parameters: + layer_name: str + a string representing the name of the layer. + Example: "l2", "l4_tcp", etc. + + attr : str + a string representing the attribute to be changed on desired layer + + val : + value of attribute. + + :raises: + + :exc:`KeyError`, in case of missing layer (the desired layer isn't part of packet) + + :exc:`ValueError`, in case invalid attribute to the specified layer. + + """ + try: + layer = self._pkt_by_hdr[layer_name.lower()] + if attr == 'data' and not isinstance(val, dpkt.Packet): + # Don't allow setting 'data' attribute + raise ValueError("Set a data attribute with obejct that is not dpkt.Packet is not allowed using " + "set_layer_attr method.\nUse set_payload method instead.") + if hasattr(layer, attr): + setattr(layer, attr, val) + if attr == 'data': + # re-evaluate packet from the start, possible broken link between layers + self._reevaluate_packet(layer_name.lower()) + else: + raise ValueError("Given attr name '{0}' doesn't exists on specified layer ({1}).".format(layer_name, + attr)) + except KeyError: + raise KeyError("Specified layer '{0}' doesn't exist on packet.".format(layer_name)) + + def set_pkt_payload(self, payload): + """ + This method sets a payload to the topmost layer of the generated packet. + This method isn't to be used to set another networking layer to the packet. + Use :func:`packet_builder.CTRexPktBuilder.set_layer_attr` instead. + + + :parameters: + payload: + a payload to be added to the packet at the topmost layer. + this object cannot be of type dpkt.Packet. + + :raises: + + :exc:`AttributeError`, in case no underlying header to host the payload. + + """ + assert isinstance(payload, str) + try: + self._pkt_top_layer.data = payload + except AttributeError: + raise AttributeError("The so far built packet doesn't contain an option for payload attachment.\n" + "Make sure to set appropriate underlying header before adding payload") + + def load_packet(self, packet): + """ + This method enables the user to change a value of a previously defined packet layer. + + :parameters: + packet: dpkt.Packet obj + a dpkt object that represents a packet. + + + :raises: + + :exc:`CTRexPktBuilder.IPAddressError`, in case invalid ip type option specified. + + """ + assert isinstance(packet, dpkt.Packet) + self._packet = copy.copy(packet) + + self._pkt_by_hdr.clear() + self._pkt_top_layer = self._packet + # analyze packet to layers + tmp_layer = self._packet + while True: + if isinstance(tmp_layer, dpkt.Packet): + layer_name = self._gen_layer_name(type(tmp_layer).__name__) + self._pkt_by_hdr[layer_name] = tmp_layer + self._pkt_top_layer = tmp_layer + try: + # check existence of upper layer + tmp_layer = tmp_layer.data + except AttributeError: + # this is the most upper header + self._pkt_by_hdr['pkt_final_payload'] = tmp_layer.data + break + else: + self._pkt_by_hdr['pkt_final_payload'] = tmp_layer + break + return + + def get_packet(self, get_ptr=False): + """ + This method enables the user to change a value of a previously defined packet layer. + + :parameters: + get_ptr : bool + indicate whether to get a reference to packet or a copy. + Use only in advanced modes + if set to true, metadata for packet is cleared, and any further modification is not guaranteed. + + default value : False + + :return: + the current packet built by CTRexPktBuilder object. + + """ + if get_ptr: + self._pkt_by_hdr = {} + self._pkt_top_layer = None + return self._packet + + else: + return copy.copy(self._packet) # VM access methods def set_vm_ip_range(self, ip_start, ip_end, ip_type="ipv4"): @@ -37,7 +221,7 @@ class CTRexPktBuilder(object): pass def dump_pkt(self): - pkt_in_hex = binascii.hexlify(str(self.packet)) + pkt_in_hex = binascii.hexlify(str(self._packet)) return [pkt_in_hex[i:i+2] for i in range(0, len(pkt_in_hex), 2)] # ----- useful shortcut methods ----- # @@ -45,118 +229,334 @@ class CTRexPktBuilder(object): pass # ----- internal methods ----- # + def _reevaluate_packet(self, layer_name): + cur_layer = self._packet + known_layers = set(self._pkt_by_hdr.keys()) + found_layers = set() + while True: + pointing_layer_name = self._find_pointing_layer(known_layers, cur_layer) + found_layers.add(pointing_layer_name) + if self._pkt_by_hdr[layer_name] is cur_layer: + self._pkt_top_layer = cur_layer + disconnected_layers = known_layers.difference(found_layers) + # remove disconnected layers + for layer in disconnected_layers: + self._pkt_by_hdr.pop(layer) + break + else: + cur_layer = cur_layer.data + + def _gen_layer_name(self, layer_class_name): + assert isinstance(layer_class_name, str) + layer_name = layer_class_name.lower() + idx = 1 + while True: + tmp_name = "{name}_{id}".format(name=layer_name, id=idx) + if tmp_name not in self._pkt_by_hdr: + return tmp_name + else: + idx += 1 + + def _find_pointing_layer(self, known_layers, layer_obj): + assert isinstance(known_layers, set) + for layer in known_layers: + if self._pkt_by_hdr[layer] is layer_obj: + return layer + + @staticmethod + def _decode_mac_addr(mac_addr): + """ + Static method to test for MAC address validity. + + :parameters: + mac_addr : str + a string representing an MAC address, separated by ':' or '-'. + + examples: '00:de:34:ef:2e:f4', '00-de-34-ef-2e-f4 + + :return: + + an hex-string representation of the MAC address. + for example, ip 00:de:34:ef:2e:f4 will return '\x00\xdeU\xef.\xf4' + + :raises: + + :exc:`CTRexPktBuilder.MACAddressError`, in case invalid ip type option specified. + + """ + tmp_mac = mac_addr.lower().replace('-', ':') + if re.match("[0-9a-f]{2}([-:])[0-9a-f]{2}(\\1[0-9a-f]{2}){4}$", tmp_mac): + return binascii.unhexlify(tmp_mac.replace(':', '')) + # another option for both Python 2 and 3: + # codecs.decode(tmp_mac.replace(':', ''), 'hex') + else: + raise CTRexPktBuilder.MACAddressError() + @staticmethod - def _is_valid_ip_addr(ip_addr, ip_type): + def _decode_ip_addr(ip_addr, ip_type): + """ + Static method to test for IPv4/IPv6 address validity. + + :parameters: + ip_addr : str + a string representing an IP address (IPv4/IPv6) + + ip_type : str + The type of IP to be checked. + Valid types: "ipv4", "ipv6". + + :return: + + an hex-string representation of the ip address. + for example, ip 1.2.3.4 will return '\x01\x02\x03\x04' + + :raises: + + :exc:`CTRexPktBuilder.IPAddressError`, in case invalid ip type option specified. + + """ if ip_type == "ipv4": try: - socket.inet_pton(socket.AF_INET, ip_addr) + return socket.inet_pton(socket.AF_INET, ip_addr) except AttributeError: # no inet_pton here, sorry - try: - socket.inet_aton(ip_addr) - except socket.error: - return False - return ip_addr.count('.') == 3 + # try: + return socket.inet_aton(ip_addr) + # except socket.error: + # return False + # return ip_addr.count('.') == 3 except socket.error: # not a valid address - return False - return True + raise CTRexPktBuilder.IPAddressError() elif ip_type == "ipv6": try: - socket.inet_pton(socket.AF_INET6, ip_addr) + return socket.inet_pton(socket.AF_INET6, ip_addr) except socket.error: # not a valid address - return False - return True + raise CTRexPktBuilder.IPAddressError() else: raise CTRexPktBuilder.IPAddressError() - # ------ private classes ------ + # ------ private classes ------ # + class CTRexPayloadGen(object): + + def __init__(self, packet_ref, max_pkt_size): + self._pkt_ref = packet_ref + self._max_pkt_size = max_pkt_size + + def gen_random_str(self): + gen_length = self._calc_gen_length() + # return a string of size gen_length bytes, to pad the packet to its max_size + return ''.join(random.SystemRandom().choice(string.ascii_letters + string.digits) + for _ in range(gen_length)) + + def gen_repeat_ptrn(self, ptrn_to_repeat): + gen_length = self._calc_gen_length() + if isinstance(ptrn_to_repeat, str): + # generate repeated string + return (ptrn_to_repeat * (gen_length/len(ptrn_to_repeat) + 1))[:gen_length] + elif isinstance(ptrn_to_repeat, int): + ptrn = binascii.unhexlify(hex(ptrn_to_repeat)[2:]) + return (ptrn * (gen_length/len(ptrn) + 1))[:gen_length] + elif isinstance(ptrn_to_repeat, tuple): + if not all((isinstance(x, int) and (x < 255) and (x >= 0)) + for x in ptrn_to_repeat): + raise ValueError("All numbers in tuple must be in range 0 <= number <= 255 ") + # generate repeated sequence + to_pack = (ptrn_to_repeat * (gen_length/len(ptrn_to_repeat) + 1))[:gen_length] + return struct.pack('B'*gen_length, *to_pack) + else: + raise ValueError("Given ptrn_to_repeat argument type ({0}) is illegal.". + format(type(ptrn_to_repeat))) + + def _calc_gen_length(self): + return self._max_pkt_size - len(self._pkt_ref) + class CTRexVM(object): - """docstring for CTRexVM""" - def __init__(self, packet): + """ + This class defines the TRex VM which represents how TRex will regenerate packets. + The packets will be regenerated based on the built packet containing this class. + """ + def __init__(self): + """ + Instantiate a CTRexVM object + + :parameters: + None + """ super(CTRexPktBuilder.CTRexVM, self).__init__() - self.packet = packet self.vm_variables = {} - def add_vm_variable(self, name): + def set_vm_var_field(self, var_name, field_name, val): + """ + Set VM variable field. Only existing variables are allowed to be changed. + + :parameters: + var_name : str + a string representing the name of the VM variable to be changed. + field_name : str + a string representing the field name of the VM variable to be changed. + val : + a value to be applied to field_name field of the var_name VM variable. + + :raises: + + :exc:`KeyError`, in case invalid var_name has been specified. + + :exc:`CTRexPktBuilder.VMVarFieldTypeError`, in case mismatch between `val` and allowed type. + + :exc:`CTRexPktBuilder.VMVarValueError`, in case val isn't one of allowed options of field_name. + + """ + return self.vm_variables[var_name].set_field(field_name, val) + + def add_flow_man_simple(self, name, **kwargs): + """ + Adds a new flow manipulation object to the VM instance. + + :parameters: + name : str + name of the manipulation, must be distinct. + Example: 'source_ip_change' + + **kwargs : dict + optional, set flow_man fields on initialization (key = field_name, val = field_val). + Must be used with legit fields, see :func:`CTRexPktBuilder.CTRexVM.CTRexVMVariable.set_field`. + + :return: + None + + :raises: + + :exc:`CTRexPktBuilder.VMVarNameExistsError`, in case of desired flow_man name already taken. + + Exceptions from :func:`CTRexPktBuilder.CTRexVM.CTRexVMVariable.set_field` method. + Will rise when VM variables were misconfiguration. + """ if name not in self.vm_variables.keys(): self.vm_variables[name] = self.CTRexVMVariable(name) + # try configuring VM var attributes + for (field, value) in kwargs.items(): + self.vm_variables[name].set_field(field, value) else: raise CTRexPktBuilder.VMVarNameExistsError(name) - def set_vm_var_field(self, var_name, field_name, val): - pass - return self.vm_variables[var_name].set_field(field_name, val) + def load_flow_man(self, flow_obj): + """ + Loads an outer VM variable (instruction) into current VM. + The outer VM variable must contain different name than existing VM variables currently registered on VM. + :parameters: + flow_obj : CTRexVMVariable + a CTRexVMVariable to be loaded into VM variable sets. - def fix_checksum_ipv4(self): - pass + :return: + list holds variables data of VM - def flow_man_simple(self): - pass - - def write_to_pkt(self): - pass + """ + assert isinstance(flow_obj, CTRexPktBuilder.CTRexVM.CTRexVMVariable) + if flow_obj.name not in self.vm_variables.keys(): + self.vm_variables[flow_obj.name] = flow_obj + else: + raise CTRexPktBuilder.VMVarNameExistsError(flow_obj.name) def dump(self): + """ + dumps a VM variables (instructions) into an list data structure. + + :parameters: + None + + :return: + list holds variables data of VM + + """ return [var.dump() - for var in self.vm_variables] + for key, var in self.vm_variables.items()] class CTRexVMVariable(object): + """ + This class defines a single VM variable to be used as part of CTRexVar object. + """ VALID_SIZE = [1, 2, 4, 8] - VALID_TYPE = ["inc", "dec", "random"] - VALID_CORE_MASK = ["split", "none"] + VALID_OPERATION = ["inc", "dec", "random"] def __init__(self, name): + """ + Instantiate a CTRexVMVariable object + + :parameters: + name : str + a string representing the name of the VM variable. + """ super(CTRexPktBuilder.CTRexVM.CTRexVMVariable, self).__init__() self.name = name self.size = 4 self.big_endian = True - self.type = "inc" - self.core_mask = "none" - self.init_addr = "10.0.0.1" - self.min_addr = str(self.init_addr) - self.max_addr = str(self.init_addr) + self.operation = "inc" + self.split_by_core = False + self.init_value = 1 + self.min_value = self.init_value + self.max_value = self.init_value def set_field(self, field_name, val): - if field_name == "size": + """ + Set VM variable field. Only existing variables are allowed to be changed. + + :parameters: + field_name : str + a string representing the field name of the VM variable to be changed. + val : + a value to be applied to field_name field of the var_name VM variable. + + :return: + None + + :raises: + + :exc:`CTRexPktBuilder.VMVarNameError`, in case of illegal field name. + + :exc:`CTRexPktBuilder.VMVarFieldTypeError`, in case mismatch between `val` and allowed type. + + :exc:`CTRexPktBuilder.VMVarValueError`, in case val isn't one of allowed options of field_name. + + """ + if not hasattr(self, field_name): + raise CTRexPktBuilder.VMVarNameError(field_name) + elif field_name == "size": if type(val) != int: raise CTRexPktBuilder.VMVarFieldTypeError("size", int) elif val not in self.VALID_SIZE: raise CTRexPktBuilder.VMVarValueError("size", self.VALID_SIZE) - elif field_name == "type": - if type(val) != str: - raise CTRexPktBuilder.VMVarFieldTypeError("type", str) - elif val not in self.VALID_TYPE: - raise CTRexPktBuilder.VMVarValueError("type", self.VALID_TYPE) - elif field_name == "core_mask": + elif field_name == "init_value": + if type(val) != int: + raise CTRexPktBuilder.VMVarFieldTypeError("init_value", int) + elif field_name == "operation": if type(val) != str: - raise CTRexPktBuilder.VMVarFieldTypeError("core_mask", str) - elif val not in self.VALID_TYPE: - raise CTRexPktBuilder.VMVarValueError("core_mask", self.VALID_CORE_MASK) + raise CTRexPktBuilder.VMVarFieldTypeError("operation", str) + elif val not in self.VALID_OPERATION: + raise CTRexPktBuilder.VMVarValueError("operation", self.VALID_OPERATION) + elif field_name == "split_by_core": + val = bool(val) # update field value on success setattr(self, field_name, val) def is_valid(self): if self.size not in self.VALID_SIZE: return False - if self.type not in self.VALID_TYPE: - return False - if self.core_mask not in self.VALID_CORE_MASK: + if self.type not in self.VALID_OPERATION: return False return True def dump(self): - return {"name" : self.name, - "Size" : self.size, - "big_endian" : self.big_endian, - "type" : self.type, - "core_mask" : self.core_mask, - "init_addr" : self.init_addr, - "min_addr" : self.min_addr, - "max_addr" : self.max_addr} + """ + dumps a variable fields in a dictionary data structure. + + :parameters: + None + + :return: + dictionary holds variable data of VM variable + + """ + return {"ins_name": "flow_man_simple", # VM variable dump always refers to manipulate instruction. + "flow_variable_name": self.name, + "object_size": self.size, + # "big_endian": self.big_endian, + "Operation": self.operation, + "split_by_core": self.split_by_core, + "init_value": self.init_value, + "min_value": self.min_value, + "max_value": self.max_value} class CPacketBuildException(Exception): """ - This is the general Packet error exception class. + This is the general Packet Building error exception class. """ def __init__(self, code, message): self.code = code @@ -173,22 +573,40 @@ class CTRexPktBuilder(object): This exception is used to indicate an error on the IP addressing part of the packet. """ def __init__(self, message=''): - self._default_message = 'Illegal type of IP addressing has been provided.' + self._default_message = 'Illegal type or value of IP address has been provided.' self.message = message or self._default_message super(CTRexPktBuilder.IPAddressError, self).__init__(-11, self.message) + class MACAddressError(CPacketBuildException): + """ + This exception is used to indicate an error on the MAC addressing part of the packet. + """ + def __init__(self, message=''): + self._default_message = 'Illegal MAC address has been provided.' + self.message = message or self._default_message + super(CTRexPktBuilder.MACAddressError, self).__init__(-11, self.message) + class VMVarNameExistsError(CPacketBuildException): """ - This exception is used to indicate an error on the IP addressing part of the packet. + This exception is used to indicate a duplicate usage of VM variable. """ def __init__(self, name, message=''): - self._default_message = 'The given VM name ({0})already exists as part of the stream.'.format(name) + self._default_message = 'The given VM name ({0}) already exists as part of the stream.'.format(name) self.message = message or self._default_message super(CTRexPktBuilder.VMVarNameExistsError, self).__init__(-21, self.message) + class VMVarNameError(CPacketBuildException): + """ + This exception is used to indicate that an undefined VM var field name has been accessed. + """ + def __init__(self, name, message=''): + self._default_message = "The given VM field name ({0}) is not defined and isn't legal.".format(name) + self.message = message or self._default_message + super(CTRexPktBuilder.VMVarNameError, self).__init__(-22, self.message) + class VMVarFieldTypeError(CPacketBuildException): """ - This exception is used to indicate an error on the IP addressing part of the packet. + This exception is used to indicate an illegal value has type has been given to VM variable field. """ def __init__(self, name, ok_type, message=''): self._default_message = 'The desired value of field {field_name} is of type {field_type}, \ @@ -196,11 +614,11 @@ class CTRexPktBuilder(object): field_type=type(name).__name__, allowed_type=ok_type.__name__) self.message = message or self._default_message - super(CTRexPktBuilder.VMVarNameExistsError, self).__init__(-31, self.message) + super(CTRexPktBuilder.VMVarFieldTypeError, self).__init__(-31, self.message) class VMVarValueError(CPacketBuildException): """ - This exception is used to indicate an error on the IP addressing part of the packet. + This exception is used to indicate an error an illegal value has been assigned to VM variable field. """ def __init__(self, name, ok_opts, message=''): self._default_message = 'The desired value of field {field_name} is illegal.\n \ diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/dot1q.py b/scripts/external_libs/dpkt-1.8.6/dpkt/dot1q.py new file mode 100644 index 00000000..ac6eb185 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/dot1q.py @@ -0,0 +1,1110 @@ + + + + + + + + + + + + + hexcap/dot1q.py at master · hexcap/hexcap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + + + + + + + + + + + + +
+ +
+
+ + +
+
+
+ +
+ +
    + +
  • +
    + +
    + + + + Watch + + + + +
    + +
    +
    +
    +
  • + +
  • + +
    + +
    + + +
    +
    + + +
    + +
  • + +
  • + + + Fork + + + + +
  • + +
+ +

+ + /hexcap + + + + + +

+ +
+
+
+ +
+
+
+ + + +
+ +
+

HTTPS clone URL

+
+ + + + +
+
+ + +
+

SSH clone URL

+
+ + + + +
+
+ + +
+

Subversion checkout URL

+
+ + + + +
+
+ + + +
You can clone with +
,
, or
. + + + +
+ + + Clone in Desktop + + + + + Download ZIP + +
+
+
+ + + + + + + +
+ +
+ + Branch: + master + + + +
+ +
+ + + + +
+ + +
+ + +
+
+ @smutt + smutt + + +
+ + + +
+ +
+
+
+ +
+ Raw + Blame + History +
+ + + + + +
+ +
+
+ +
+ +
+ executable file + + 93 lines (79 sloc) + + 3.071 kB +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
"""IEEE 802.1q"""
+
import struct
import dpkt
+
# Ethernet payload types - http://standards.ieee.org/regauth/ethertype
ETH_TYPE_PUP = 0x0200 # PUP protocol
ETH_TYPE_IP = 0x0800 # IP protocol
ETH_TYPE_ARP = 0x0806 # address resolution protocol
ETH_TYPE_CDP = 0x2000 # Cisco Discovery Protocol
ETH_TYPE_DTP = 0x2004 # Cisco Dynamic Trunking Protocol
ETH_TYPE_REVARP = 0x8035 # reverse addr resolution protocol
ETH_TYPE_DOT1Q = 0x8100 # IEEE 802.1Q VLAN tagging
ETH_TYPE_IPX = 0x8137 # Internetwork Packet Exchange
ETH_TYPE_IP6 = 0x86DD # IPv6 protocol
ETH_TYPE_PPP = 0x880B # PPP
ETH_TYPE_MPLS = 0x8847 # MPLS
ETH_TYPE_MPLS_MCAST = 0x8848 # MPLS Multicast
ETH_TYPE_PPPoE_DISC = 0x8863 # PPP Over Ethernet Discovery Stage
ETH_TYPE_PPPoE = 0x8864 # PPP Over Ethernet Session Stage
+
class DOT1Q(dpkt.Packet):
__hdr__ = (
('x2', 'H', 0),
('type', 'H', 0)
)
_typesw = {}
+
# pcp == Priority Code Point(802.1p)
def _get_pcp(self): return self.x2 >> 13
def _set_pcp(self, pcp): self.x2 = (self.x2 & 0x1fff) | (pcp << 13)
pcp = property(_get_pcp, _set_pcp)
+
# dei == Drop Eligible Indicator(almost never actually used)
def _get_dei(self): return (self.x2 >> 12) & 1
def _set_dei(self, dei): self.x2 = (self.x2 & 61439) | (dei << 12)
dei = property(_get_dei, _set_dei)
+
# tag == vlan tag
def _get_tag(self): return self.x2 & (65535 >> 4)
def _set_tag(self, tag): self.x2 = (self.x2 & 0xfff) | tag
tag = property(_get_tag, _set_tag)
+
def set_type(cls, t, pktclass):
cls._typesw[t] = pktclass
set_type = classmethod(set_type)
+
def get_type(cls, t):
return cls._typesw[t]
get_type = classmethod(get_type)
+
def _unpack_data(self, buf):
if self.type == ETH_TYPE_MPLS or \
self.type == ETH_TYPE_MPLS_MCAST:
# XXX - skip labels (max # of labels is undefined, just use 24)
self.labels = []
for i in range(24):
entry = struct.unpack('>I', buf[i*4:i*4+4])[0]
label = ((entry & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT, \
(entry & MPLS_QOS_MASK) >> MPLS_QOS_SHIFT, \
(entry & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT)
self.labels.append(label)
if entry & MPLS_STACK_BOTTOM:
break
self.type = ETH_TYPE_IP
buf = buf[(i + 1) * 4:]
try:
self.data = self._typesw[self.type](buf)
setattr(self, self.data.__class__.__name__.lower(), self.data)
except (KeyError, dpkt.UnpackError):
self.data = buf
+
def unpack(self, buf):
dpkt.Packet.unpack(self, buf)
self._unpack_data(self.data)
+
+
# XXX - auto-load Ethernet dispatch table from ETH_TYPE_* definitions
def __load_types():
g = globals()
for k, v in g.iteritems():
if k.startswith('ETH_TYPE_'):
name = k[9:]
modname = name.lower()
try:
mod = __import__(modname, g)
except ImportError:
continue
DOT1Q.set_type(v, getattr(mod, name))
+
if not DOT1Q._typesw:
__load_types()
+ +
+ +
+ +Jump to Line + + +
+
+ +
+
+ + + +
+ +
+ + + + + + +
+ + + Something went wrong with that request. Please try again. +
+ + + + + + + + + + -- cgit 1.2.3-korg From dd99c3890d3bb7b4aab833927e85648cd6e86c85 Mon Sep 17 00:00:00 2001 From: imarom Date: Wed, 16 Sep 2015 16:22:48 +0300 Subject: added many tests to the RPC server also, few tweaks for handling RPC server errors --- .../client_utils/jsonrpc_client.py | 2 +- src/gtest/rpc_test.cpp | 355 +++++++++++++++------ src/rpc-server/commands/trex_rpc_cmd_general.cpp | 161 +++++++++- src/rpc-server/commands/trex_rpc_cmd_stream.cpp | 40 +-- src/rpc-server/commands/trex_rpc_cmd_test.cpp | 30 -- src/rpc-server/commands/trex_rpc_cmds.h | 21 +- src/rpc-server/trex_rpc_cmds_table.cpp | 5 +- src/rpc-server/trex_rpc_jsonrpc_v2_parser.cpp | 8 + src/rpc-server/trex_rpc_jsonrpc_v2_parser.h | 9 + src/rpc-server/trex_rpc_req_resp_server.cpp | 27 ++ src/rpc-server/trex_rpc_req_resp_server.h | 4 +- src/stateless/trex_stateless.cpp | 30 +- src/stateless/trex_stateless_api.h | 51 ++- src/stateless/trex_stream.cpp | 11 + src/stateless/trex_stream_api.h | 12 +- 15 files changed, 565 insertions(+), 201 deletions(-) diff --git a/scripts/automation/trex_control_plane/client_utils/jsonrpc_client.py b/scripts/automation/trex_control_plane/client_utils/jsonrpc_client.py index b44b1268..aff6b36e 100644 --- a/scripts/automation/trex_control_plane/client_utils/jsonrpc_client.py +++ b/scripts/automation/trex_control_plane/client_utils/jsonrpc_client.py @@ -145,7 +145,7 @@ class JsonRpcClient(object): return self.invoke_rpc_method("get_status") def query_rpc_server(self): - return self.invoke_rpc_method("get_reg_cmds") + return self.invoke_rpc_method("get_supported_cmds") def set_verbose(self, mode): diff --git a/src/gtest/rpc_test.cpp b/src/gtest/rpc_test.cpp index 767560b0..02d88eae 100644 --- a/src/gtest/rpc_test.cpp +++ b/src/gtest/rpc_test.cpp @@ -30,33 +30,16 @@ using namespace std; class RpcTest : public testing::Test { - void take_ownership(void) { - Json::Value request; - Json::Value response; - - create_request(request, "aquire", 1 , false); - - request["params"]["user"] = "test"; - request["params"]["force"] = true; - - send_request(request, response); - - EXPECT_TRUE(response["result"] != Json::nullValue); - m_ownership_handler = response["result"].asString(); - } - - void release_ownership() { - Json::Value request; - Json::Value response; +protected: - create_request(request, "release", 1 , false); - request["params"]["handler"] = m_ownership_handler; - - send_request(request, response); - EXPECT_TRUE(response["result"] == "ACK"); + void set_verbose(bool verbose) { + m_verbose = verbose; } - + virtual void SetUp() { + + m_verbose = false; + TrexRpcServerConfig cfg = TrexRpcServerConfig(TrexRpcServerConfig::RPC_PROT_TCP, 5050); m_rpc = new TrexRpcServer(cfg); @@ -66,7 +49,6 @@ class RpcTest : public testing::Test { m_socket = zmq_socket (m_context, ZMQ_REQ); zmq_connect (m_socket, "tcp://localhost:5050"); - take_ownership(); } virtual void TearDown() { @@ -79,16 +61,13 @@ class RpcTest : public testing::Test { public: - void create_request(Json::Value &request, const string &method, int id = 1, bool ownership = false) { + void create_request(Json::Value &request, const string &method, int id = 1) { request.clear(); request["jsonrpc"] = "2.0"; request["id"] = id; request["method"] = method; - if (ownership) { - request["params"]["handler"] = m_ownership_handler; - } } void send_request(const Json::Value &request, Json::Value &response) { @@ -98,15 +77,24 @@ public: response.clear(); string request_str = writer.write(request); + + if (m_verbose) { + cout << "\n" << request_str << "\n"; + } + string ret = send_msg(request_str); + if (m_verbose) { + cout << "\n" << ret << "\n"; + } + EXPECT_TRUE(reader.parse(ret, response, false)); EXPECT_EQ(response["jsonrpc"], "2.0"); EXPECT_EQ(response["id"], request["id"]); } string send_msg(const string &msg) { - char buffer[512]; + char buffer[1024 * 20]; zmq_send (m_socket, msg.c_str(), msg.size(), 0); int len = zmq_recv(m_socket, buffer, sizeof(buffer), 0); @@ -117,10 +105,55 @@ public: TrexRpcServer *m_rpc; void *m_context; void *m_socket; + bool m_verbose; +}; + +class RpcTestOwned : public RpcTest { +public: + + void create_request(Json::Value &request, const string &method, int id = 1) { + RpcTest::create_request(request, method, id); + request["params"]["handler"] = m_ownership_handler; + } + +protected: + + virtual void SetUp() { + RpcTest::SetUp(); + take_ownership(); + } + + + void take_ownership(void) { + Json::Value request; + Json::Value response; + + RpcTest::create_request(request, "acquire", 1); + + request["params"]["user"] = "test"; + request["params"]["force"] = true; + + send_request(request, response); + + EXPECT_TRUE(response["result"] != Json::nullValue); + m_ownership_handler = response["result"].asString(); + } + + void release_ownership() { + Json::Value request; + Json::Value response; + + RpcTest::create_request(request, "release", 1); + request["params"]["handler"] = m_ownership_handler; + + send_request(request, response); + EXPECT_TRUE(response["result"] == "ACK"); + } + string m_ownership_handler; }; -TEST_F(RpcTest, basic_rpc_test) { +TEST_F(RpcTest, basic_rpc_negative_cases) { Json::Value request; Json::Value response; Json::Reader reader; @@ -179,53 +212,38 @@ TEST_F(RpcTest, test_add_command) { Json::Value response; Json::Reader reader; - string req_str; - string resp_str; - - /* simple add - missing paramters */ - req_str = "{\"jsonrpc\": \"2.0\", \"method\": \"test_add\", \"id\": 488}"; - resp_str = send_msg(req_str); + /* missing parameters */ + create_request(request, "test_add"); + send_request(request, response); - EXPECT_TRUE(reader.parse(resp_str, response, false)); EXPECT_EQ(response["jsonrpc"], "2.0"); - EXPECT_EQ(response["id"], 488); EXPECT_EQ(response["error"]["code"], -32602); - /* simple add that works */ - req_str = "{\"jsonrpc\": \"2.0\", \"method\": \"test_add\", \"params\": {\"x\": 17, \"y\": -13} , \"id\": \"itay\"}"; - resp_str = send_msg(req_str); - - EXPECT_TRUE(reader.parse(resp_str, response, false)); - EXPECT_EQ(response["jsonrpc"], "2.0"); - EXPECT_EQ(response["id"], "itay"); - EXPECT_EQ(response["result"], 4); - - /* add with bad paratemers types */ - req_str = "{\"jsonrpc\": \"2.0\", \"method\": \"test_add\", \"params\": {\"x\": \"blah\", \"y\": -13} , \"id\": 17}"; - resp_str = send_msg(req_str); + /* bad paramters */ + create_request(request, "test_add"); + request["params"]["x"] = 5; + request["params"]["y"] = "itay"; + send_request(request, response); - EXPECT_TRUE(reader.parse(resp_str, response, false)); EXPECT_EQ(response["jsonrpc"], "2.0"); - EXPECT_EQ(response["id"], 17); EXPECT_EQ(response["error"]["code"], -32602); - /* add with invalid count of parameters */ - req_str = "{\"jsonrpc\": \"2.0\", \"method\": \"test_add\", \"params\": {\"y\": -13} , \"id\": 17}"; - resp_str = send_msg(req_str); + /* simple add that works */ + create_request(request, "test_add"); + request["params"]["x"] = 5; + request["params"]["y"] = -13; + send_request(request, response); - EXPECT_TRUE(reader.parse(resp_str, response, false)); EXPECT_EQ(response["jsonrpc"], "2.0"); - EXPECT_EQ(response["id"], 17); - EXPECT_EQ(response["error"]["code"], -32602); - + EXPECT_EQ(response["result"], -8); /* big numbers */ - req_str = "{\"jsonrpc\": \"2.0\", \"method\": \"test_add\", \"params\": {\"x\": 4827371, \"y\": -39181273} , \"id\": \"itay\"}"; - resp_str = send_msg(req_str); + create_request(request, "test_add"); + request["params"]["x"] = 4827371; + request["params"]["y"] = -39181273; + send_request(request, response); - EXPECT_TRUE(reader.parse(resp_str, response, false)); EXPECT_EQ(response["jsonrpc"], "2.0"); - EXPECT_EQ(response["id"], "itay"); EXPECT_EQ(response["result"], -34353902); } @@ -281,12 +299,174 @@ TEST_F(RpcTest, batch_rpc_test) { return; } -TEST_F(RpcTest, add_stream) { +/* ping command */ +TEST_F(RpcTest, ping) { + Json::Value request; + Json::Value response; + Json::Reader reader; + + create_request(request, "ping"); + send_request(request, response); + EXPECT_TRUE(response["result"] == "ACK"); +} + +static bool +find_member_in_array(const Json::Value &array, const string &member) { + for (auto x : array) { + if (x == member) { + return true; + } + } + + return false; +} + +/* get registered commands */ +TEST_F(RpcTest, get_supported_cmds) { + Json::Value request; + Json::Value response; + Json::Reader reader; + + create_request(request, "get_supported_cmds"); + send_request(request, response); + EXPECT_TRUE(response["result"].size() > 0); + + EXPECT_TRUE(find_member_in_array(response["result"], "ping")); + EXPECT_TRUE(find_member_in_array(response["result"], "get_supported_cmds")); +} + +/* get version */ +TEST_F(RpcTest, get_version) { Json::Value request; Json::Value response; Json::Reader reader; - create_request(request, "get_stream", 1, true); + create_request(request, "get_version"); + send_request(request, response); + + EXPECT_TRUE(response["result"] != Json::nullValue); + EXPECT_TRUE(response["result"]["built_by"] == "MOCK"); + EXPECT_TRUE(response["result"]["version"] == "v0.0"); +} + +/* get system info */ +TEST_F(RpcTest, get_system_info) { + Json::Value request; + Json::Value response; + Json::Reader reader; + + create_request(request, "get_system_info"); + send_request(request, response); + + EXPECT_TRUE(response["result"] != Json::nullValue); + EXPECT_TRUE(response["result"]["core_type"].isString()); + EXPECT_TRUE(response["result"]["hostname"].isString()); + EXPECT_TRUE(response["result"]["uptime"].isString()); + EXPECT_TRUE(response["result"]["dp_core_count"] > 0); + EXPECT_TRUE(response["result"]["port_count"] > 0); + + EXPECT_TRUE(response["result"]["ports"].isArray()); + + const Json::Value &ports = response["result"]["ports"]; + + + for (int i = 0; i < ports.size(); i++) { + EXPECT_TRUE(ports[i]["index"] == i); + EXPECT_TRUE(ports[i]["driver"].isString()); + EXPECT_TRUE(ports[i]["speed"].isString()); + } +} + +/* get owner, acquire and release */ +TEST_F(RpcTest, get_owner_acquire_release) { + Json::Value request; + Json::Value response; + Json::Reader reader; + + /* no user before acquring */ + create_request(request, "get_owner"); + send_request(request, response); + EXPECT_TRUE(response["result"] != Json::nullValue); + + EXPECT_TRUE(response["result"]["owner"] == "none"); + + /* soft acquire */ + create_request(request, "acquire"); + request["params"]["user"] = "itay"; + request["params"]["force"] = false; + + send_request(request, response); + EXPECT_TRUE(response["result"] != Json::nullValue); + + create_request(request, "get_owner"); + send_request(request, response); + EXPECT_TRUE(response["result"] != Json::nullValue); + + EXPECT_TRUE(response["result"]["owner"] == "itay"); + + /* hard acquire */ + create_request(request, "acquire"); + request["params"]["user"] = "moshe"; + request["params"]["force"] = false; + + send_request(request, response); + EXPECT_TRUE(response["result"] == Json::nullValue); + + request["params"]["force"] = true; + + send_request(request, response); + EXPECT_TRUE(response["result"] != Json::nullValue); + + string handler = response["result"].asString(); + + /* make sure */ + create_request(request, "get_owner"); + send_request(request, response); + EXPECT_TRUE(response["result"] != Json::nullValue); + + EXPECT_TRUE(response["result"]["owner"] == "moshe"); + + /* release */ + create_request(request, "release"); + request["params"]["handler"] = handler; + send_request(request, response); + + EXPECT_TRUE(response["result"] == "ACK"); +} + + +static void +create_simple_stream(Json::Value &obj) { + obj["mode"]["type"] = "continuous"; + obj["mode"]["pps"] = (rand() % 1000 + 1) * 0.99; + obj["isg"] = (rand() % 100 + 1) * 0.99;; + obj["enabled"] = true; + obj["self_start"] = true; + obj["next_stream_id"] = -1; + + obj["packet"]["meta"] = "dummy"; + + int packet_size = (rand() % 1500 + 1); + for (int i = 0; i < packet_size; i++) { + obj["packet"]["binary"][i] = (rand() % 0xff); + } + + obj["vm"] = Json::arrayValue; + obj["rx_stats"]["enabled"] = false; +} + +static bool +compare_streams(const Json::Value &s1, const Json::Value &s2) { + return s1 == s2; +} + +TEST_F(RpcTestOwned, add_remove_stream) { + Json::Value request; + Json::Value response; + Json::Reader reader; + + /* verify no such stream */ + create_request(request, "get_stream", 1); request["params"]["port_id"] = 1; request["params"]["stream_id"] = 5; @@ -297,58 +477,31 @@ TEST_F(RpcTest, add_stream) { EXPECT_EQ(response["id"], 1); EXPECT_EQ(response["error"]["code"], -32000); - // add it - create_request(request, "add_stream", 1, true); + /* add it */ + create_request(request, "add_stream", 1); request["params"]["port_id"] = 1; request["params"]["stream_id"] = 5; - request["params"]["stream"]["mode"]["type"] = "continuous"; - request["params"]["stream"]["mode"]["pps"] = 3; - request["params"]["stream"]["isg"] = 4.3; - request["params"]["stream"]["enabled"] = true; - request["params"]["stream"]["self_start"] = true; - request["params"]["stream"]["next_stream_id"] = -1; - request["params"]["stream"]["packet"]["meta"] = "dummy"; - request["params"]["stream"]["packet"]["binary"][0] = 4; - request["params"]["stream"]["packet"]["binary"][1] = 1; - request["params"]["stream"]["packet"]["binary"][2] = 255; - - request["params"]["stream"]["vm"] = Json::arrayValue; - request["params"]["stream"]["rx_stats"]["enabled"] = false; + Json::Value stream; + create_simple_stream(stream); + request["params"]["stream"] = stream; send_request(request, response); EXPECT_EQ(response["result"], "ACK"); /* get it */ - - create_request(request, "get_stream", 1, true); + create_request(request, "get_stream", 1); request["params"]["port_id"] = 1; request["params"]["stream_id"] = 5; send_request(request, response); - const Json::Value &stream = response["result"]["stream"]; - - EXPECT_EQ(stream["enabled"], true); - EXPECT_EQ(stream["self_start"], true); - - EXPECT_EQ(stream["packet"]["binary"][0], 4); - EXPECT_EQ(stream["packet"]["binary"][1], 1); - EXPECT_EQ(stream["packet"]["binary"][2], 255); - - EXPECT_EQ(stream["packet"]["meta"], "dummy"); - EXPECT_EQ(stream["next_stream_id"], -1); - - double delta = stream["isg"].asDouble() - 4.3; - EXPECT_TRUE(delta < 0.0001); - - EXPECT_EQ(stream["mode"]["type"], "continuous"); - EXPECT_EQ(stream["mode"]["pps"], 3); + EXPECT_TRUE(compare_streams(stream, response["result"]["stream"])); // remove it - create_request(request, "remove_stream", 1, true); + create_request(request, "remove_stream", 1); request["params"]["port_id"] = 1; request["params"]["stream_id"] = 5; diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp index d5aa3a90..afa15973 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp @@ -18,9 +18,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ + #include "trex_rpc_cmds.h" #include #include +#include + +#include +#include +#include + +//#include #ifndef TREX_RPC_MOCK_SERVER #include <../linux_dpdk/version.h> @@ -29,36 +37,161 @@ limitations under the License. using namespace std; /** - * get status + * ping command + */ +trex_rpc_cmd_rc_e +TrexRpcCmdPing::_run(const Json::Value ¶ms, Json::Value &result) { + + result["result"] = "ACK"; + return (TREX_RPC_CMD_OK); +} + +/** + * query command + */ +trex_rpc_cmd_rc_e +TrexRpcCmdGetCmds::_run(const Json::Value ¶ms, Json::Value &result) { + vector cmds; + + TrexRpcCommandsTable::get_instance().query(cmds); + + Json::Value test = Json::arrayValue; + for (auto cmd : cmds) { + test.append(cmd); + } + + result["result"] = test; + + return (TREX_RPC_CMD_OK); +} + +/** + * get version * */ trex_rpc_cmd_rc_e -TrexRpcCmdGetStatus::_run(const Json::Value ¶ms, Json::Value &result) { +TrexRpcCmdGetVersion::_run(const Json::Value ¶ms, Json::Value &result) { Json::Value §ion = result["result"]; #ifndef TREX_RPC_MOCK_SERVER - section["general"]["version"] = VERSION_BUILD_NUM; - section["general"]["build_date"] = get_build_date(); - section["general"]["build_time"] = get_build_time(); - section["general"]["built_by"] = VERSION_USER; + section["version"] = VERSION_BUILD_NUM; + section["build_date"] = get_build_date(); + section["build_time"] = get_build_time(); + section["built_by"] = VERSION_USER; #else - section["general"]["version"] = "v0.0"; - section["general"]["build_date"] = __DATE__; - section["general"]["build_time"] = __TIME__; - section["general"]["version_user"] = "MOCK"; + section["version"] = "v0.0"; + section["build_date"] = __DATE__; + section["build_time"] = __TIME__; + section["built_by"] = "MOCK"; #endif - section["general"]["uptime"] = TrexRpcServer::get_server_uptime(); - section["general"]["owner"] = TrexRpcServer::get_owner(); + return (TREX_RPC_CMD_OK); +} + +/** + * get the CPU model + * + */ +std::string +TrexRpcCmdGetSysInfo::get_cpu_model() { + + static const string cpu_prefix = "model name"; + std::ifstream cpuinfo("/proc/cpuinfo"); + + if (cpuinfo.is_open()) { + while (cpuinfo.good()) { + + std::string line; + getline(cpuinfo, line); + + int pos = line.find(cpu_prefix); + if (pos == string::npos) { + continue; + } - // ports + /* trim it */ + int index = cpu_prefix.size() + 1; + while ( (line[index] == ' ') || (line[index] == ':') ) { + index++; + } - section["ports"]["count"] = TrexStateless::get_instance().get_port_count(); + return line.substr(index); + } + } + + return "unknown"; +} + +void +TrexRpcCmdGetSysInfo::get_hostname(string &hostname) { + char buffer[256]; + buffer[0] = 0; + + gethostname(buffer, sizeof(buffer)); + + /* write hostname */ + hostname = buffer; +} + +/** + * get system info + * + */ +trex_rpc_cmd_rc_e +TrexRpcCmdGetSysInfo::_run(const Json::Value ¶ms, Json::Value &result) { + string hostname; + + TrexStateless & instance = TrexStateless::get_instance(); + + Json::Value §ion = result["result"]; + + get_hostname(hostname); + section["hostname"] = hostname; + + section["uptime"] = TrexRpcServer::get_server_uptime(); + + /* FIXME: core count */ + section["dp_core_count"] = 1; + section["core_type"] = get_cpu_model(); + + /* ports */ + + + section["port_count"] = instance.get_port_count(); + + section["ports"] = Json::arrayValue; + + for (int i = 0; i < instance.get_port_count(); i++) { + string driver; + string speed; + + TrexStatelessPort *port = instance.get_port_by_id(i); + port->get_properties(driver, speed); + + section["ports"][i]["index"] = i; + section["ports"][i]["driver"] = driver; + section["ports"][i]["speed"] = speed; + + switch (port->get_state()) { + case TrexStatelessPort::PORT_STATE_DOWN: + section["ports"][i]["status"] = "down"; + break; + + case TrexStatelessPort::PORT_STATE_UP_IDLE: + section["ports"][i]["status"] = "idle"; + break; + + case TrexStatelessPort::PORT_STATE_TRANSMITTING: + section["ports"][i]["status"] = "transmitting"; + break; + } + + } return (TREX_RPC_CMD_OK); } diff --git a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp index b62d213b..41567509 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp @@ -63,6 +63,9 @@ TrexRpcCmdAddStream::_run(const Json::Value ¶ms, Json::Value &result) { /* allocate a new stream based on the type */ TrexStream *stream = allocate_new_stream(section, port_id, stream_id, result); + /* save this for future queries */ + stream->store_stream_json(section); + /* some fields */ stream->m_enabled = parse_bool(section, "enabled", result); stream->m_self_start = parse_bool(section, "self_start", result); @@ -130,7 +133,7 @@ TrexRpcCmdAddStream::allocate_new_stream(const Json::Value §ion, uint8_t por if (type == "continuous") { - uint32_t pps = parse_int(mode, "pps", result); + double pps = parse_double(mode, "pps", result); stream = new TrexStreamContinuous(port_id, stream_id, pps); } else if (type == "single_burst") { @@ -413,30 +416,11 @@ TrexRpcCmdGetStream::_run(const Json::Value ¶ms, Json::Value &result) { generate_execute_err(result, ss.str()); } - Json::Value stream_json; - - stream_json["enabled"] = stream->m_enabled; - stream_json["self_start"] = stream->m_self_start; - - stream_json["isg"] = stream->m_isg_usec; - stream_json["next_stream_id"] = stream->m_next_stream_id; - - stream_json["packet"]["binary"] = Json::arrayValue; - for (int i = 0; i < stream->m_pkt.len; i++) { - stream_json["packet"]["binary"].append(stream->m_pkt.binary[i]); - } - - stream_json["packet"]["meta"] = stream->m_pkt.meta; - - if (TrexStreamContinuous *cont = dynamic_cast(stream)) { - stream_json["mode"]["type"] = "continuous"; - stream_json["mode"]["pps"] = cont->get_pps(); - - } - - result["result"]["stream"] = stream_json; + /* return the stored stream json (instead of decoding it all over again) */ + result["result"]["stream"] = stream->get_stream_json(); return (TREX_RPC_CMD_OK); + } /*************************** @@ -455,17 +439,17 @@ TrexRpcCmdStartTraffic::_run(const Json::Value ¶ms, Json::Value &result) { TrexStatelessPort *port = TrexStateless::get_instance().get_port_by_id(port_id); - TrexStatelessPort::traffic_rc_e rc = port->start_traffic(); + TrexStatelessPort::rc_e rc = port->start_traffic(); - if (rc == TrexStatelessPort::TRAFFIC_OK) { + if (rc == TrexStatelessPort::RC_OK) { result["result"] = "ACK"; } else { std::stringstream ss; switch (rc) { - case TrexStatelessPort::TRAFFIC_ERR_ALREADY_STARTED: - ss << "traffic has already started on that port"; + case TrexStatelessPort::RC_ERR_BAD_STATE_FOR_OP: + ss << "bad state for operations: port is either transmitting traffic or down"; break; - case TrexStatelessPort::TRAFFIC_ERR_NO_STREAMS: + case TrexStatelessPort::RC_ERR_NO_STREAMS: ss << "no active streams on that port"; break; default: diff --git a/src/rpc-server/commands/trex_rpc_cmd_test.cpp b/src/rpc-server/commands/trex_rpc_cmd_test.cpp index 3153317e..3cdddd31 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_test.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_test.cpp @@ -21,7 +21,6 @@ limitations under the License. #include "trex_rpc_cmds.h" #include #include -#include using namespace std; @@ -50,32 +49,3 @@ TrexRpcCmdTestSub::_run(const Json::Value ¶ms, Json::Value &result) { return (TREX_RPC_CMD_OK); } -/** - * ping command - */ -trex_rpc_cmd_rc_e -TrexRpcCmdPing::_run(const Json::Value ¶ms, Json::Value &result) { - - result["result"] = "ACK"; - return (TREX_RPC_CMD_OK); -} - -/** - * query command - */ -trex_rpc_cmd_rc_e -TrexRpcCmdGetReg::_run(const Json::Value ¶ms, Json::Value &result) { - vector cmds; - - TrexRpcCommandsTable::get_instance().query(cmds); - - Json::Value test = Json::arrayValue; - for (auto cmd : cmds) { - test.append(cmd); - } - - result["result"] = test; - - return (TREX_RPC_CMD_OK); -} - diff --git a/src/rpc-server/commands/trex_rpc_cmds.h b/src/rpc-server/commands/trex_rpc_cmds.h index 32138195..643aa22d 100644 --- a/src/rpc-server/commands/trex_rpc_cmds.h +++ b/src/rpc-server/commands/trex_rpc_cmds.h @@ -35,7 +35,7 @@ class TrexStream; * syntactic sugar for creating a simple command */ -#define TREX_RPC_CMD_DEFINE_EXTENED(class_name, cmd_name, param_count, needs_ownership, ext) \ +#define TREX_RPC_CMD_DEFINE_EXTENDED(class_name, cmd_name, param_count, needs_ownership, ext) \ class class_name : public TrexRpcCommand { \ public: \ class_name () : TrexRpcCommand(cmd_name, param_count, needs_ownership) {} \ @@ -44,7 +44,7 @@ class TrexStream; ext \ } -#define TREX_RPC_CMD_DEFINE(class_name, cmd_name, param_count, needs_ownership) TREX_RPC_CMD_DEFINE_EXTENED(class_name, cmd_name, param_count, needs_ownership, ;) +#define TREX_RPC_CMD_DEFINE(class_name, cmd_name, param_count, needs_ownership) TREX_RPC_CMD_DEFINE_EXTENDED(class_name, cmd_name, param_count, needs_ownership, ;) /** * test cmds @@ -55,9 +55,16 @@ TREX_RPC_CMD_DEFINE(TrexRpcCmdTestSub, "test_sub", 2, false); /** * general cmds */ -TREX_RPC_CMD_DEFINE(TrexRpcCmdPing, "ping", 0, false); -TREX_RPC_CMD_DEFINE(TrexRpcCmdGetReg, "get_reg_cmds", 0, false); -TREX_RPC_CMD_DEFINE(TrexRpcCmdGetStatus, "get_status", 0, false); +TREX_RPC_CMD_DEFINE(TrexRpcCmdPing, "ping", 0, false); +TREX_RPC_CMD_DEFINE(TrexRpcCmdGetCmds, "get_supported_cmds", 0, false); +TREX_RPC_CMD_DEFINE(TrexRpcCmdGetVersion, "get_version", 0, false); + +TREX_RPC_CMD_DEFINE_EXTENDED(TrexRpcCmdGetSysInfo, "get_system_info", 0, false, + +std::string get_cpu_model(); +void get_hostname(std::string &hostname); + +); /** * ownership @@ -73,7 +80,7 @@ TREX_RPC_CMD_DEFINE(TrexRpcCmdRelease, "release", 0, true); TREX_RPC_CMD_DEFINE(TrexRpcCmdRemoveAllStreams, "remove_all_streams", 1, true); TREX_RPC_CMD_DEFINE(TrexRpcCmdRemoveStream, "remove_stream", 2, true); -TREX_RPC_CMD_DEFINE_EXTENED(TrexRpcCmdAddStream, "add_stream", 3, true, +TREX_RPC_CMD_DEFINE_EXTENDED(TrexRpcCmdAddStream, "add_stream", 3, true, /* extended part */ TrexStream * allocate_new_stream(const Json::Value §ion, uint8_t port_id, uint32_t stream_id, Json::Value &result); @@ -92,4 +99,6 @@ TREX_RPC_CMD_DEFINE(TrexRpcCmdGetStream, "get_stream", 2, true); TREX_RPC_CMD_DEFINE(TrexRpcCmdStartTraffic, "start_traffic", 1, true); TREX_RPC_CMD_DEFINE(TrexRpcCmdStopTraffic, "stop_traffic", 1, true); + + #endif /* __TREX_RPC_CMD_H__ */ diff --git a/src/rpc-server/trex_rpc_cmds_table.cpp b/src/rpc-server/trex_rpc_cmds_table.cpp index f968bb74..170f0de1 100644 --- a/src/rpc-server/trex_rpc_cmds_table.cpp +++ b/src/rpc-server/trex_rpc_cmds_table.cpp @@ -34,8 +34,9 @@ TrexRpcCommandsTable::TrexRpcCommandsTable() { /* general */ register_command(new TrexRpcCmdPing()); - register_command(new TrexRpcCmdGetReg()); - register_command(new TrexRpcCmdGetStatus()); + register_command(new TrexRpcCmdGetCmds()); + register_command(new TrexRpcCmdGetVersion()); + register_command(new TrexRpcCmdGetSysInfo()); register_command(new TrexRpcCmdGetOwner()); register_command(new TrexRpcCmdAcquire()); register_command(new TrexRpcCmdRelease()); diff --git a/src/rpc-server/trex_rpc_jsonrpc_v2_parser.cpp b/src/rpc-server/trex_rpc_jsonrpc_v2_parser.cpp index 928baca6..9d9de53a 100644 --- a/src/rpc-server/trex_rpc_jsonrpc_v2_parser.cpp +++ b/src/rpc-server/trex_rpc_jsonrpc_v2_parser.cpp @@ -225,3 +225,11 @@ std::string TrexJsonRpcV2Parser::pretty_json_str(const std::string &json_str) { return writer.write(value); } +void +TrexJsonRpcV2Parser::generate_common_error(Json::Value &json, const std::string &specific_err) { + JsonRpcError err(Json::Value::null, JSONRPC_V2_ERR_INTERNAL_ERROR, specific_err, true); + + err.execute(json); + +} + diff --git a/src/rpc-server/trex_rpc_jsonrpc_v2_parser.h b/src/rpc-server/trex_rpc_jsonrpc_v2_parser.h index ebffaeb7..0563f21d 100644 --- a/src/rpc-server/trex_rpc_jsonrpc_v2_parser.h +++ b/src/rpc-server/trex_rpc_jsonrpc_v2_parser.h @@ -79,6 +79,15 @@ public: */ void parse(std::vector &commands); + /** + * will generate a valid JSON RPC v2 error message with + * generic error code and message + * + * @author imarom (16-Sep-15) + * + */ + static void generate_common_error(Json::Value &json, const std::string &specific_err); + /** * *tries* to generate a pretty string from JSON * if json_str is not a valid JSON string diff --git a/src/rpc-server/trex_rpc_req_resp_server.cpp b/src/rpc-server/trex_rpc_req_resp_server.cpp index c4d9dfdb..3d52686c 100644 --- a/src/rpc-server/trex_rpc_req_resp_server.cpp +++ b/src/rpc-server/trex_rpc_req_resp_server.cpp @@ -82,6 +82,13 @@ void TrexRpcServerReqRes::_rpc_thread_cb() { } } + if (msg_size >= sizeof(m_msg_buffer)) { + std::stringstream ss; + ss << "RPC request of '" << msg_size << "' exceeds maximum message size which is '" << sizeof(m_msg_buffer) << "'"; + handle_server_error(ss.str()); + continue; + } + /* transform it to a string */ std::string request((const char *)m_msg_buffer, msg_size); @@ -145,3 +152,23 @@ void TrexRpcServerReqRes::handle_request(const std::string &request) { zmq_send(m_socket, response_str.c_str(), response_str.size(), 0); } + +/** + * handles a server error + * + */ +void +TrexRpcServerReqRes::handle_server_error(const std::string &specific_err) { + Json::FastWriter writer; + Json::Value response; + + /* generate error */ + TrexJsonRpcV2Parser::generate_common_error(response, specific_err); + + /* write the JSON to string and sever on ZMQ */ + std::string response_str = writer.write(response); + + verbose_json("Server Replied: ", response_str); + + zmq_send(m_socket, response_str.c_str(), response_str.size(), 0); +} diff --git a/src/rpc-server/trex_rpc_req_resp_server.h b/src/rpc-server/trex_rpc_req_resp_server.h index f12d0540..7c1d66d1 100644 --- a/src/rpc-server/trex_rpc_req_resp_server.h +++ b/src/rpc-server/trex_rpc_req_resp_server.h @@ -39,9 +39,11 @@ protected: void _stop_rpc_thread(); private: + void handle_request(const std::string &request); + void handle_server_error(const std::string &specific_err); - static const int RPC_MAX_MSG_SIZE = 2048; + static const int RPC_MAX_MSG_SIZE = (20 * 1024); void *m_context; void *m_socket; uint8_t m_msg_buffer[RPC_MAX_MSG_SIZE]; diff --git a/src/stateless/trex_stateless.cpp b/src/stateless/trex_stateless.cpp index 2ab0c5d9..b51c4e69 100644 --- a/src/stateless/trex_stateless.cpp +++ b/src/stateless/trex_stateless.cpp @@ -20,6 +20,8 @@ limitations under the License. */ #include +using namespace std; + /*********************************************************** * Trex stateless object * @@ -76,7 +78,7 @@ uint8_t TrexStateless::get_port_count() { * **************************/ TrexStatelessPort::TrexStatelessPort(uint8_t port_id) : m_port_id(port_id) { - m_started = false; + m_port_state = PORT_STATE_DOWN; } @@ -84,25 +86,29 @@ TrexStatelessPort::TrexStatelessPort(uint8_t port_id) : m_port_id(port_id) { * starts the traffic on the port * */ -TrexStatelessPort::traffic_rc_e +TrexStatelessPort::rc_e TrexStatelessPort::start_traffic(void) { - if (m_started) { - return (TRAFFIC_ERR_ALREADY_STARTED); + + if (m_port_state != PORT_STATE_UP_IDLE) { + return (RC_ERR_BAD_STATE_FOR_OP); } if (get_stream_table()->size() == 0) { - return (TRAFFIC_ERR_NO_STREAMS); + return (RC_ERR_NO_STREAMS); } - m_started = true; + m_port_state = PORT_STATE_TRANSMITTING; - return (TRAFFIC_OK); + /* real code goes here */ + return (RC_OK); } void TrexStatelessPort::stop_traffic(void) { - if (m_started) { - m_started = false; + + /* real code goes here */ + if (m_port_state = PORT_STATE_TRANSMITTING) { + m_port_state = PORT_STATE_UP_IDLE; } } @@ -114,4 +120,10 @@ TrexStreamTable * TrexStatelessPort::get_stream_table() { return &m_stream_table; } +void +TrexStatelessPort::get_properties(string &driver, string &speed) { + /* take this from DPDK */ + driver = "Unknown Driver"; + speed = "Unknown Speed"; +} diff --git a/src/stateless/trex_stateless_api.h b/src/stateless/trex_stateless_api.h index 358ab339..60d26878 100644 --- a/src/stateless/trex_stateless_api.h +++ b/src/stateless/trex_stateless_api.h @@ -50,19 +50,36 @@ class TrexStatelessPort { public: /** - * describess error codes for starting traffic + * port state */ - enum traffic_rc_e { - TRAFFIC_OK, - TRAFFIC_ERR_ALREADY_STARTED, - TRAFFIC_ERR_NO_STREAMS, - TRAFFIC_ERR_FAILED_TO_COMPILE_STREAMS + enum port_state_e { + PORT_STATE_DOWN, + PORT_STATE_UP_IDLE, + PORT_STATE_TRANSMITTING + }; + + /** + * describess different error codes for port operations + */ + enum rc_e { + RC_OK, + RC_ERR_BAD_STATE_FOR_OP, + RC_ERR_NO_STREAMS, + RC_ERR_FAILED_TO_COMPILE_STREAMS }; TrexStatelessPort(uint8_t port_id); - traffic_rc_e start_traffic(void); + /** + * start traffic + * + */ + rc_e start_traffic(void); + /** + * stop traffic + * + */ void stop_traffic(void); /** @@ -71,10 +88,28 @@ public: */ TrexStreamTable *get_stream_table(); + /** + * get the port state + * + */ + port_state_e get_state() { + return m_port_state; + } + + /** + * fill up properties of the port + * + * @author imarom (16-Sep-15) + * + * @param driver + * @param speed + */ + void get_properties(std::string &driver, std::string &speed); + private: TrexStreamTable m_stream_table; uint8_t m_port_id; - bool m_started; + port_state_e m_port_state; }; /** diff --git a/src/stateless/trex_stream.cpp b/src/stateless/trex_stream.cpp index 2b5b2424..8bf04748 100644 --- a/src/stateless/trex_stream.cpp +++ b/src/stateless/trex_stream.cpp @@ -45,6 +45,17 @@ TrexStream::~TrexStream() { } } +void +TrexStream::store_stream_json(const Json::Value &stream_json) { + /* deep copy */ + m_stream_json = stream_json; +} + +const Json::Value & +TrexStream::get_stream_json() { + return m_stream_json; +} + /************************************** * stream table *************************************/ diff --git a/src/stateless/trex_stream_api.h b/src/stateless/trex_stream_api.h index 0a955ff7..d3c0fb29 100644 --- a/src/stateless/trex_stream_api.h +++ b/src/stateless/trex_stream_api.h @@ -26,6 +26,8 @@ limitations under the License. #include #include +#include + #include class TrexRpcCmdAddStream; @@ -48,7 +50,13 @@ public: static const uint32_t MIN_PKT_SIZE_BYTES = 1; static const uint32_t MAX_PKT_SIZE_BYTES = 9000; -private: + /* provides storage for the stream json*/ + void store_stream_json(const Json::Value &stream_json); + + /* access the stream json */ + const Json::Value & get_stream_json(); + +protected: /* basic */ uint8_t m_port_id; uint32_t m_stream_id; @@ -82,6 +90,8 @@ private: } m_rx_check; + /* original template provided by requester */ + Json::Value m_stream_json; }; /** -- cgit 1.2.3-korg From 3b372bbe45931b853f3f906352a0cbdc89952c41 Mon Sep 17 00:00:00 2001 From: imarom Date: Wed, 16 Sep 2015 17:12:30 +0300 Subject: enabled all warnings for the mock RPC server target --- linux/ws_main.py | 3 +- src/common/captureFile.cpp | 2 +- src/gtest/rpc_test.cpp | 61 ++++++++++++++++++++++++ src/rpc-server/commands/trex_rpc_cmd_general.cpp | 2 - src/rpc-server/trex_rpc_cmd_api.h | 3 ++ src/stateless/trex_stateless.cpp | 2 +- 6 files changed, 68 insertions(+), 5 deletions(-) diff --git a/linux/ws_main.py b/linux/ws_main.py index e9f21d11..789895d9 100755 --- a/linux/ws_main.py +++ b/linux/ws_main.py @@ -368,7 +368,8 @@ build_types = [ #build_option(name = "bp-sim", src = bp, debug_mode= RELEASE_,platform = PLATFORM_32, is_pie = False), build_option(name = "bp-sim", src = bp, debug_mode= RELEASE_,platform = PLATFORM_64, is_pie = False), - build_option(name = "mock-rpc-server", use = ['zmq'], src = rpc_server_mock, debug_mode= DEBUG_,platform = PLATFORM_64, is_pie = False, flags = ['-DTREX_RPC_MOCK_SERVER'], + build_option(name = "mock-rpc-server", use = ['zmq'], src = rpc_server_mock, debug_mode= DEBUG_,platform = PLATFORM_64, is_pie = False, + flags = ['-DTREX_RPC_MOCK_SERVER', '-Wall', '-Wno-sign-compare', '-Werror'], rpath = ['.']), ] diff --git a/src/common/captureFile.cpp b/src/common/captureFile.cpp index a4fe78be..00625181 100755 --- a/src/common/captureFile.cpp +++ b/src/common/captureFile.cpp @@ -110,7 +110,7 @@ void CCapPktRaw::CloneShalow(CCapPktRaw *obj){ } void CCapPktRaw::Dump(FILE *fd,int verbose){ - fprintf(fd," =>pkt (%p) %llu , len %d, time [%x:%x] \n",raw,pkt_cnt,pkt_len,time_sec,time_nsec); + fprintf(fd," =>pkt (%p) %llu , len %d, time [%x:%x] \n",raw, (unsigned long long)pkt_cnt,pkt_len,time_sec,time_nsec); if (verbose) { utl_DumpBuffer(fd,raw,pkt_len,0); } diff --git a/src/gtest/rpc_test.cpp b/src/gtest/rpc_test.cpp index 02d88eae..58197000 100644 --- a/src/gtest/rpc_test.cpp +++ b/src/gtest/rpc_test.cpp @@ -25,6 +25,8 @@ limitations under the License. #include #include #include +#include +#include using namespace std; @@ -518,3 +520,62 @@ TEST_F(RpcTestOwned, add_remove_stream) { } +TEST_F(RpcTestOwned, get_stream_id_list) { + Json::Value request; + Json::Value response; + Json::Reader reader; + + + /* add stream 1 */ + create_request(request, "add_stream"); + request["params"]["port_id"] = 1; + + + Json::Value stream; + create_simple_stream(stream); + + request["params"]["stream"] = stream; + + request["params"]["stream_id"] = 5; + send_request(request, response); + EXPECT_EQ(response["result"], "ACK"); + + request["params"]["stream_id"] = 12; + send_request(request, response); + EXPECT_EQ(response["result"], "ACK"); + + request["params"]["stream_id"] = 19; + send_request(request, response); + EXPECT_EQ(response["result"], "ACK"); + + + create_request(request, "get_stream_list"); + request["params"]["port_id"] = 1; + send_request(request, response); + + EXPECT_TRUE(response["result"].isArray()); + vector vec; + for (auto x : response["result"]) { + vec.push_back(x.asInt()); + } + + sort(vec.begin(), vec.end()); + + EXPECT_EQ(vec[0], 5); + EXPECT_EQ(vec[1], 12); + EXPECT_EQ(vec[2], 19); + + create_request(request, "remove_all_streams"); + request["params"]["port_id"] = 1; + send_request(request, response); + + EXPECT_TRUE(response["result"] == "ACK"); + + /* make sure the lights are off ... */ + create_request(request, "get_stream_list"); + request["params"]["port_id"] = 1; + send_request(request, response); + + EXPECT_TRUE(response["result"].isArray()); + EXPECT_TRUE(response["result"].size() == 0); +} diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp index afa15973..fcdb7acf 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp @@ -28,8 +28,6 @@ limitations under the License. #include #include -//#include - #ifndef TREX_RPC_MOCK_SERVER #include <../linux_dpdk/version.h> #endif diff --git a/src/rpc-server/trex_rpc_cmd_api.h b/src/rpc-server/trex_rpc_cmd_api.h index c72b3e3b..cab50cfd 100644 --- a/src/rpc-server/trex_rpc_cmd_api.h +++ b/src/rpc-server/trex_rpc_cmd_api.h @@ -177,6 +177,9 @@ protected: s.pop_back(); s += "]"; generate_parse_err(result, s); + + /* dummy return value - does not matter, the above will throw exception */ + return (*choices.begin()); } /** diff --git a/src/stateless/trex_stateless.cpp b/src/stateless/trex_stateless.cpp index b51c4e69..537dfa4a 100644 --- a/src/stateless/trex_stateless.cpp +++ b/src/stateless/trex_stateless.cpp @@ -107,7 +107,7 @@ void TrexStatelessPort::stop_traffic(void) { /* real code goes here */ - if (m_port_state = PORT_STATE_TRANSMITTING) { + if (m_port_state == PORT_STATE_TRANSMITTING) { m_port_state = PORT_STATE_UP_IDLE; } } -- cgit 1.2.3-korg From 1e723ff84bb6cdf6dd3a58650af059b6814b5331 Mon Sep 17 00:00:00 2001 From: imarom Date: Thu, 17 Sep 2015 11:09:44 +0300 Subject: added more tests --- src/gtest/rpc_test.cpp | 94 +++++++++++++++++++++--- src/rpc-server/commands/trex_rpc_cmd_general.cpp | 1 + src/rpc-server/commands/trex_rpc_cmd_stream.cpp | 3 +- src/stateless/trex_stateless.cpp | 2 +- 4 files changed, 86 insertions(+), 14 deletions(-) diff --git a/src/gtest/rpc_test.cpp b/src/gtest/rpc_test.cpp index 58197000..015da2f8 100644 --- a/src/gtest/rpc_test.cpp +++ b/src/gtest/rpc_test.cpp @@ -113,9 +113,11 @@ public: class RpcTestOwned : public RpcTest { public: - void create_request(Json::Value &request, const string &method, int id = 1) { + void create_request(Json::Value &request, const string &method, int id = 1, bool owned = true) { RpcTest::create_request(request, method, id); - request["params"]["handler"] = m_ownership_handler; + if (owned) { + request["params"]["handler"] = m_ownership_handler; + } } protected: @@ -212,7 +214,6 @@ TEST_F(RpcTest, basic_rpc_negative_cases) { TEST_F(RpcTest, test_add_command) { Json::Value request; Json::Value response; - Json::Reader reader; /* missing parameters */ create_request(request, "test_add"); @@ -305,7 +306,6 @@ TEST_F(RpcTest, batch_rpc_test) { TEST_F(RpcTest, ping) { Json::Value request; Json::Value response; - Json::Reader reader; create_request(request, "ping"); send_request(request, response); @@ -327,7 +327,6 @@ find_member_in_array(const Json::Value &array, const string &member) { TEST_F(RpcTest, get_supported_cmds) { Json::Value request; Json::Value response; - Json::Reader reader; create_request(request, "get_supported_cmds"); send_request(request, response); @@ -341,7 +340,6 @@ TEST_F(RpcTest, get_supported_cmds) { TEST_F(RpcTest, get_version) { Json::Value request; Json::Value response; - Json::Reader reader; create_request(request, "get_version"); send_request(request, response); @@ -355,7 +353,6 @@ TEST_F(RpcTest, get_version) { TEST_F(RpcTest, get_system_info) { Json::Value request; Json::Value response; - Json::Reader reader; create_request(request, "get_system_info"); send_request(request, response); @@ -383,7 +380,6 @@ TEST_F(RpcTest, get_system_info) { TEST_F(RpcTest, get_owner_acquire_release) { Json::Value request; Json::Value response; - Json::Reader reader; /* no user before acquring */ create_request(request, "get_owner"); @@ -465,7 +461,6 @@ compare_streams(const Json::Value &s1, const Json::Value &s2) { TEST_F(RpcTestOwned, add_remove_stream) { Json::Value request; Json::Value response; - Json::Reader reader; /* verify no such stream */ create_request(request, "get_stream", 1); @@ -523,14 +518,11 @@ TEST_F(RpcTestOwned, add_remove_stream) { TEST_F(RpcTestOwned, get_stream_id_list) { Json::Value request; Json::Value response; - Json::Reader reader; - /* add stream 1 */ create_request(request, "add_stream"); request["params"]["port_id"] = 1; - Json::Value stream; create_simple_stream(stream); @@ -579,3 +571,81 @@ TEST_F(RpcTestOwned, get_stream_id_list) { EXPECT_TRUE(response["result"].isArray()); EXPECT_TRUE(response["result"].size() == 0); } + + +TEST_F(RpcTestOwned, start_stop_traffic) { + Json::Value request; + Json::Value response; + + /* add stream #1 */ + create_request(request, "add_stream"); + request["params"]["port_id"] = 1; + request["params"]["stream_id"] = 5; + + Json::Value stream; + create_simple_stream(stream); + + request["params"]["stream"] = stream; + + send_request(request, response); + EXPECT_EQ(response["result"], "ACK"); + + /* add stream #1 */ + create_request(request, "add_stream"); + request["params"]["port_id"] = 3; + request["params"]["stream_id"] = 12; + request["params"]["stream"] = stream; + + send_request(request, response); + EXPECT_EQ(response["result"], "ACK"); + + /* start port 1 */ + create_request(request, "start_traffic"); + request["params"]["port_id"] = 1; + send_request(request, response); + EXPECT_EQ(response["result"], "ACK"); + + + /* start port 3 */ + request["params"]["port_id"] = 3; + send_request(request, response); + EXPECT_EQ(response["result"], "ACK"); + + /* start not configured port */ + + request["params"]["port_id"] = 2; + send_request(request, response); + EXPECT_EQ(response["error"]["code"], -32000); + + /* stop port 1 */ + create_request(request, "stop_traffic"); + request["params"]["port_id"] = 1; + send_request(request, response); + EXPECT_EQ(response["result"], "ACK"); + + /* stop port 3 */ + request["params"]["port_id"] = 3; + send_request(request, response); + EXPECT_EQ(response["result"], "ACK"); + + /* start 1 again */ + create_request(request, "start_traffic"); + request["params"]["port_id"] = 1; + send_request(request, response); + EXPECT_EQ(response["result"], "ACK"); + + /* start 1 twice (error) */ + send_request(request, response); + EXPECT_EQ(response["error"]["code"], -32000); + + /* make sure you cannot release while traffic is active */ + //create_request(request, "release"); + //send_request(request, response); + //EXPECT_EQ(response["error"]["code"], -32000); + + /* done */ + create_request(request, "stop_traffic"); + request["params"]["port_id"] = 1; + send_request(request, response); + EXPECT_EQ(response["result"], "ACK"); +} diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp index fcdb7acf..97ccae06 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp @@ -241,6 +241,7 @@ TrexRpcCmdAcquire::_run(const Json::Value ¶ms, Json::Value &result) { */ trex_rpc_cmd_rc_e TrexRpcCmdRelease::_run(const Json::Value ¶ms, Json::Value &result) { + TrexRpcServer::clear_owner(); result["result"] = "ACK"; diff --git a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp index 41567509..1450e1a9 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp @@ -429,7 +429,8 @@ TrexRpcCmdGetStream::_run(const Json::Value ¶ms, Json::Value &result) { **************************/ trex_rpc_cmd_rc_e TrexRpcCmdStartTraffic::_run(const Json::Value ¶ms, Json::Value &result) { - uint8_t port_id = parse_byte(params, "port_id", result); + + uint8_t port_id = parse_byte(params, "port_id", result); if (port_id >= TrexStateless::get_instance().get_port_count()) { std::stringstream ss; diff --git a/src/stateless/trex_stateless.cpp b/src/stateless/trex_stateless.cpp index 537dfa4a..dcad1514 100644 --- a/src/stateless/trex_stateless.cpp +++ b/src/stateless/trex_stateless.cpp @@ -78,7 +78,7 @@ uint8_t TrexStateless::get_port_count() { * **************************/ TrexStatelessPort::TrexStatelessPort(uint8_t port_id) : m_port_id(port_id) { - m_port_state = PORT_STATE_DOWN; + m_port_state = PORT_STATE_UP_IDLE; } -- cgit 1.2.3-korg From 96765d2bf2c416f652da904cf7524ff75b678aee Mon Sep 17 00:00:00 2001 From: imarom Date: Thu, 17 Sep 2015 16:27:47 +0300 Subject: moved 'owning states' to port granularity instead of machine --- src/gtest/rpc_test.cpp | 82 +++++++++++++----------- src/rpc-server/commands/trex_rpc_cmd_general.cpp | 29 +++++++-- src/rpc-server/commands/trex_rpc_cmds.h | 6 +- src/rpc-server/trex_rpc_cmd.cpp | 23 ++++++- src/rpc-server/trex_rpc_cmd_api.h | 9 +++ src/rpc-server/trex_rpc_server.cpp | 21 ------ src/rpc-server/trex_rpc_server_api.h | 44 +------------ src/stateless/trex_stateless.cpp | 23 +++++++ src/stateless/trex_stateless_api.h | 48 ++++++++++++++ 9 files changed, 174 insertions(+), 111 deletions(-) diff --git a/src/gtest/rpc_test.cpp b/src/gtest/rpc_test.cpp index 015da2f8..168ee936 100644 --- a/src/gtest/rpc_test.cpp +++ b/src/gtest/rpc_test.cpp @@ -113,10 +113,11 @@ public: class RpcTestOwned : public RpcTest { public: - void create_request(Json::Value &request, const string &method, int id = 1, bool owned = true) { + void create_request(Json::Value &request, const string &method, int id = 1, int port_id = 1, bool owned = true) { RpcTest::create_request(request, method, id); if (owned) { - request["params"]["handler"] = m_ownership_handler; + request["params"]["port_id"] = port_id; + request["params"]["handler"] = m_ownership_handler[port_id]; } } @@ -124,37 +125,43 @@ protected: virtual void SetUp() { RpcTest::SetUp(); - take_ownership(); + + for (int i = 0 ; i < 4; i++) { + m_ownership_handler[i] = take_ownership(i); + } } - void take_ownership(void) { + string take_ownership(uint8_t port_id) { Json::Value request; Json::Value response; RpcTest::create_request(request, "acquire", 1); + request["params"]["port_id"] = port_id; request["params"]["user"] = "test"; request["params"]["force"] = true; send_request(request, response); EXPECT_TRUE(response["result"] != Json::nullValue); - m_ownership_handler = response["result"].asString(); + return response["result"].asString(); } - void release_ownership() { + void release_ownership(uint8_t port_id) { Json::Value request; Json::Value response; RpcTest::create_request(request, "release", 1); + request["params"]["handler"] = m_ownership_handler; + request["params"]["port_id"] = port_id; send_request(request, response); EXPECT_TRUE(response["result"] == "ACK"); } - string m_ownership_handler; + string m_ownership_handler[4]; }; TEST_F(RpcTest, basic_rpc_negative_cases) { @@ -383,6 +390,7 @@ TEST_F(RpcTest, get_owner_acquire_release) { /* no user before acquring */ create_request(request, "get_owner"); + request["params"]["port_id"] = 1; send_request(request, response); EXPECT_TRUE(response["result"] != Json::nullValue); @@ -390,6 +398,7 @@ TEST_F(RpcTest, get_owner_acquire_release) { /* soft acquire */ create_request(request, "acquire"); + request["params"]["port_id"] = 1; request["params"]["user"] = "itay"; request["params"]["force"] = false; @@ -397,6 +406,7 @@ TEST_F(RpcTest, get_owner_acquire_release) { EXPECT_TRUE(response["result"] != Json::nullValue); create_request(request, "get_owner"); + request["params"]["port_id"] = 1; send_request(request, response); EXPECT_TRUE(response["result"] != Json::nullValue); @@ -404,6 +414,7 @@ TEST_F(RpcTest, get_owner_acquire_release) { /* hard acquire */ create_request(request, "acquire"); + request["params"]["port_id"] = 1; request["params"]["user"] = "moshe"; request["params"]["force"] = false; @@ -419,6 +430,7 @@ TEST_F(RpcTest, get_owner_acquire_release) { /* make sure */ create_request(request, "get_owner"); + request["params"]["port_id"] = 1; send_request(request, response); EXPECT_TRUE(response["result"] != Json::nullValue); @@ -426,6 +438,7 @@ TEST_F(RpcTest, get_owner_acquire_release) { /* release */ create_request(request, "release"); + request["params"]["port_id"] = 1; request["params"]["handler"] = handler; send_request(request, response); @@ -463,9 +476,8 @@ TEST_F(RpcTestOwned, add_remove_stream) { Json::Value response; /* verify no such stream */ - create_request(request, "get_stream", 1); + create_request(request, "get_stream", 1, 1); - request["params"]["port_id"] = 1; request["params"]["stream_id"] = 5; send_request(request, response); @@ -475,8 +487,7 @@ TEST_F(RpcTestOwned, add_remove_stream) { EXPECT_EQ(response["error"]["code"], -32000); /* add it */ - create_request(request, "add_stream", 1); - request["params"]["port_id"] = 1; + create_request(request, "add_stream", 1, 1); request["params"]["stream_id"] = 5; Json::Value stream; @@ -488,9 +499,8 @@ TEST_F(RpcTestOwned, add_remove_stream) { EXPECT_EQ(response["result"], "ACK"); /* get it */ - create_request(request, "get_stream", 1); + create_request(request, "get_stream", 1, 1); - request["params"]["port_id"] = 1; request["params"]["stream_id"] = 5; send_request(request, response); @@ -498,9 +508,8 @@ TEST_F(RpcTestOwned, add_remove_stream) { EXPECT_TRUE(compare_streams(stream, response["result"]["stream"])); // remove it - create_request(request, "remove_stream", 1); + create_request(request, "remove_stream", 1, 1); - request["params"]["port_id"] = 1; request["params"]["stream_id"] = 5; send_request(request, response); @@ -520,7 +529,7 @@ TEST_F(RpcTestOwned, get_stream_id_list) { Json::Value response; /* add stream 1 */ - create_request(request, "add_stream"); + create_request(request, "add_stream", 1); request["params"]["port_id"] = 1; Json::Value stream; @@ -578,8 +587,7 @@ TEST_F(RpcTestOwned, start_stop_traffic) { Json::Value response; /* add stream #1 */ - create_request(request, "add_stream"); - request["params"]["port_id"] = 1; + create_request(request, "add_stream", 1, 1); request["params"]["stream_id"] = 5; Json::Value stream; @@ -590,9 +598,8 @@ TEST_F(RpcTestOwned, start_stop_traffic) { send_request(request, response); EXPECT_EQ(response["result"], "ACK"); - /* add stream #1 */ - create_request(request, "add_stream"); - request["params"]["port_id"] = 3; + /* add stream #1 */ + create_request(request, "add_stream", 1, 3); request["params"]["stream_id"] = 12; request["params"]["stream"] = stream; @@ -600,52 +607,53 @@ TEST_F(RpcTestOwned, start_stop_traffic) { EXPECT_EQ(response["result"], "ACK"); /* start port 1 */ - create_request(request, "start_traffic"); - request["params"]["port_id"] = 1; + create_request(request, "start_traffic", 1, 1); send_request(request, response); EXPECT_EQ(response["result"], "ACK"); /* start port 3 */ - request["params"]["port_id"] = 3; + create_request(request, "start_traffic", 1, 3); send_request(request, response); EXPECT_EQ(response["result"], "ACK"); /* start not configured port */ - - request["params"]["port_id"] = 2; + create_request(request, "start_traffic", 1, 2); send_request(request, response); EXPECT_EQ(response["error"]["code"], -32000); /* stop port 1 */ - create_request(request, "stop_traffic"); - request["params"]["port_id"] = 1; + create_request(request, "stop_traffic", 1, 1); send_request(request, response); EXPECT_EQ(response["result"], "ACK"); /* stop port 3 */ - request["params"]["port_id"] = 3; + create_request(request, "stop_traffic", 1, 3); send_request(request, response); EXPECT_EQ(response["result"], "ACK"); /* start 1 again */ - create_request(request, "start_traffic"); - request["params"]["port_id"] = 1; + create_request(request, "start_traffic", 1, 1); send_request(request, response); EXPECT_EQ(response["result"], "ACK"); /* start 1 twice (error) */ + create_request(request, "start_traffic", 1, 1); send_request(request, response); EXPECT_EQ(response["error"]["code"], -32000); /* make sure you cannot release while traffic is active */ - //create_request(request, "release"); - //send_request(request, response); - //EXPECT_EQ(response["error"]["code"], -32000); + create_request(request, "release", 1, 1); + send_request(request, response); + EXPECT_EQ(response["error"]["code"], -32000); - /* done */ - create_request(request, "stop_traffic"); - request["params"]["port_id"] = 1; + /* stop traffic on port #1 */ + create_request(request, "stop_traffic",1 ,1); + send_request(request, response); + EXPECT_EQ(response["result"], "ACK"); + + /* release */ + create_request(request, "release", 1, 1); send_request(request, response); EXPECT_EQ(response["result"], "ACK"); } diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp index 97ccae06..106a167a 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp @@ -175,6 +175,8 @@ TrexRpcCmdGetSysInfo::_run(const Json::Value ¶ms, Json::Value &result) { section["ports"][i]["driver"] = driver; section["ports"][i]["speed"] = speed; + section["ports"][i]["owner"] = port->get_owner(); + switch (port->get_state()) { case TrexStatelessPort::PORT_STATE_DOWN: section["ports"][i]["status"] = "down"; @@ -208,7 +210,10 @@ trex_rpc_cmd_rc_e TrexRpcCmdGetOwner::_run(const Json::Value ¶ms, Json::Value &result) { Json::Value §ion = result["result"]; - section["owner"] = TrexRpcServer::get_owner(); + uint8_t port_id = parse_port(params, result); + + TrexStatelessPort *port = TrexStateless::get_instance().get_port_by_id(port_id); + section["owner"] = port->get_owner(); return (TREX_RPC_CMD_OK); } @@ -220,17 +225,21 @@ TrexRpcCmdGetOwner::_run(const Json::Value ¶ms, Json::Value &result) { trex_rpc_cmd_rc_e TrexRpcCmdAcquire::_run(const Json::Value ¶ms, Json::Value &result) { + uint8_t port_id = parse_port(params, result); + const string &new_owner = parse_string(params, "user", result); bool force = parse_bool(params, "force", result); /* if not free and not you and not force - fail */ - if ( (!TrexRpcServer::is_free_to_aquire()) && (TrexRpcServer::get_owner() != new_owner) && (!force)) { - generate_execute_err(result, "device is already taken by '" + TrexRpcServer::get_owner() + "'"); + TrexStatelessPort *port = TrexStateless::get_instance().get_port_by_id(port_id); + + if ( (!port->is_free_to_aquire()) && (port->get_owner() != new_owner) && (!force)) { + generate_execute_err(result, "device is already taken by '" + port->get_owner() + "'"); } - string handle = TrexRpcServer::set_owner(new_owner); + port->set_owner(new_owner); - result["result"] = handle; + result["result"] = port->get_owner_handler(); return (TREX_RPC_CMD_OK); } @@ -242,7 +251,15 @@ TrexRpcCmdAcquire::_run(const Json::Value ¶ms, Json::Value &result) { trex_rpc_cmd_rc_e TrexRpcCmdRelease::_run(const Json::Value ¶ms, Json::Value &result) { - TrexRpcServer::clear_owner(); + uint8_t port_id = parse_port(params, result); + + TrexStatelessPort *port = TrexStateless::get_instance().get_port_by_id(port_id); + + if (port->get_state() == TrexStatelessPort::PORT_STATE_TRANSMITTING) { + generate_execute_err(result, "cannot release a port during transmission"); + } + + port->clear_owner(); result["result"] = "ACK"; diff --git a/src/rpc-server/commands/trex_rpc_cmds.h b/src/rpc-server/commands/trex_rpc_cmds.h index 643aa22d..e261d1c6 100644 --- a/src/rpc-server/commands/trex_rpc_cmds.h +++ b/src/rpc-server/commands/trex_rpc_cmds.h @@ -69,9 +69,9 @@ void get_hostname(std::string &hostname); /** * ownership */ -TREX_RPC_CMD_DEFINE(TrexRpcCmdGetOwner, "get_owner", 0, false); -TREX_RPC_CMD_DEFINE(TrexRpcCmdAcquire, "acquire", 2, false); -TREX_RPC_CMD_DEFINE(TrexRpcCmdRelease, "release", 0, true); +TREX_RPC_CMD_DEFINE(TrexRpcCmdGetOwner, "get_owner", 1, false); +TREX_RPC_CMD_DEFINE(TrexRpcCmdAcquire, "acquire", 3, false); +TREX_RPC_CMD_DEFINE(TrexRpcCmdRelease, "release", 1, true); /** diff --git a/src/rpc-server/trex_rpc_cmd.cpp b/src/rpc-server/trex_rpc_cmd.cpp index 437e8b1a..6c355e70 100644 --- a/src/rpc-server/trex_rpc_cmd.cpp +++ b/src/rpc-server/trex_rpc_cmd.cpp @@ -20,6 +20,7 @@ limitations under the License. */ #include #include +#include trex_rpc_cmd_rc_e TrexRpcCommand::run(const Json::Value ¶ms, Json::Value &result) { @@ -57,12 +58,32 @@ TrexRpcCommand::check_param_count(const Json::Value ¶ms, int expected, Json: void TrexRpcCommand::verify_ownership(const Json::Value ¶ms, Json::Value &result) { std::string handler = parse_string(params, "handler", result); + uint8_t port_id = parse_port(params, result); - if (!TrexRpcServer::verify_owner_handler(handler)) { + TrexStatelessPort *port = TrexStateless::get_instance().get_port_by_id(port_id); + + if (!port->verify_owner_handler(handler)) { generate_execute_err(result, "invalid handler provided. please pass the handler given when calling 'acquire' or take ownership"); } } +uint8_t +TrexRpcCommand::parse_port(const Json::Value ¶ms, Json::Value &result) { + uint8_t port_id = parse_byte(params, "port_id", result); + validate_port_id(port_id, result); + + return (port_id); +} + +void +TrexRpcCommand::validate_port_id(uint8_t port_id, Json::Value &result) { + if (port_id >= TrexStateless::get_instance().get_port_count()) { + std::stringstream ss; + ss << "invalid port id - should be between 0 and " << (int)TrexStateless::get_instance().get_port_count() - 1; + generate_execute_err(result, ss.str()); + } +} + const char * TrexRpcCommand::type_to_str(field_type_e type) { switch (type) { diff --git a/src/rpc-server/trex_rpc_cmd_api.h b/src/rpc-server/trex_rpc_cmd_api.h index cab50cfd..3c718eaa 100644 --- a/src/rpc-server/trex_rpc_cmd_api.h +++ b/src/rpc-server/trex_rpc_cmd_api.h @@ -124,6 +124,12 @@ protected: */ void verify_ownership(const Json::Value ¶ms, Json::Value &result); + /** + * validate port id + * + */ + void validate_port_id(uint8_t port_id, Json::Value &result); + /** * parse functions * @@ -146,6 +152,9 @@ protected: const Json::Value & parse_object(const Json::Value &parent, int index, Json::Value &result); const Json::Value & parse_array(const Json::Value &parent, int index, Json::Value &result); + /* shortcut for parsing port id */ + uint8_t parse_port(const Json::Value ¶ms, Json::Value &result); + /** * parse a field from choices * diff --git a/src/rpc-server/trex_rpc_server.cpp b/src/rpc-server/trex_rpc_server.cpp index a5988cab..6b8c200d 100644 --- a/src/rpc-server/trex_rpc_server.cpp +++ b/src/rpc-server/trex_rpc_server.cpp @@ -111,8 +111,6 @@ get_current_date_time() { } const std::string TrexRpcServer::s_server_uptime = get_current_date_time(); -std::string TrexRpcServer::s_owner = "none"; -std::string TrexRpcServer::s_owner_handler = ""; TrexRpcServer::TrexRpcServer(const TrexRpcServerConfig &req_resp_cfg) { @@ -158,22 +156,3 @@ void TrexRpcServer::set_verbose(bool verbose) { } } -/** - * generate a random connection handler - * - */ -std::string TrexRpcServer::generate_handler() { - std::stringstream ss; - - static const char alphanum[] = - "0123456789" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz"; - - /* generate 8 bytes of random handler */ - for (int i = 0; i < 8; ++i) { - ss << alphanum[rand() % (sizeof(alphanum) - 1)]; - } - - return (ss.str()); -} diff --git a/src/rpc-server/trex_rpc_server_api.h b/src/rpc-server/trex_rpc_server_api.h index c34ac0f8..06bbe10c 100644 --- a/src/rpc-server/trex_rpc_server_api.h +++ b/src/rpc-server/trex_rpc_server_api.h @@ -164,49 +164,7 @@ public: } - /** - * query for ownership - * - */ - static const std::string &get_owner() { - return s_owner; - } - - /** - * owner handler - * for the connection - * - */ - static const std::string &get_owner_handler() { - return s_owner_handler; - } - - static bool is_free_to_aquire() { - return (s_owner == "none"); - } - - /** - * take ownership of the server array - * this is static - * ownership is total - * - */ - static std::string set_owner(const std::string &owner) { - s_owner = owner; - s_owner_handler = generate_handler(); - return (s_owner_handler); - } - - static void clear_owner() { - s_owner = "none"; - s_owner_handler = ""; - } - - static bool verify_owner_handler(const std::string &handler) { - - return ( (s_owner != "none") && (s_owner_handler == handler) ); - - } + private: static std::string generate_handler(); diff --git a/src/stateless/trex_stateless.cpp b/src/stateless/trex_stateless.cpp index dcad1514..6a3169d4 100644 --- a/src/stateless/trex_stateless.cpp +++ b/src/stateless/trex_stateless.cpp @@ -79,6 +79,7 @@ uint8_t TrexStateless::get_port_count() { **************************/ TrexStatelessPort::TrexStatelessPort(uint8_t port_id) : m_port_id(port_id) { m_port_state = PORT_STATE_UP_IDLE; + clear_owner(); } @@ -127,3 +128,25 @@ TrexStatelessPort::get_properties(string &driver, string &speed) { driver = "Unknown Driver"; speed = "Unknown Speed"; } + + +/** + * generate a random connection handler + * + */ +std::string +TrexStatelessPort::generate_handler() { + std::stringstream ss; + + static const char alphanum[] = + "0123456789" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz"; + + /* generate 8 bytes of random handler */ + for (int i = 0; i < 8; ++i) { + ss << alphanum[rand() % (sizeof(alphanum) - 1)]; + } + + return (ss.str()); +} diff --git a/src/stateless/trex_stateless_api.h b/src/stateless/trex_stateless_api.h index 60d26878..e02e93da 100644 --- a/src/stateless/trex_stateless_api.h +++ b/src/stateless/trex_stateless_api.h @@ -106,10 +106,58 @@ public: */ void get_properties(std::string &driver, std::string &speed); + /** + * query for ownership + * + */ + const std::string &get_owner() { + return m_owner; + } + + /** + * owner handler + * for the connection + * + */ + const std::string &get_owner_handler() { + return m_owner_handler; + } + + bool is_free_to_aquire() { + return (m_owner == "none"); + } + + /** + * take ownership of the server array + * this is static + * ownership is total + * + */ + void set_owner(const std::string &owner) { + m_owner = owner; + m_owner_handler = generate_handler(); + } + + void clear_owner() { + m_owner = "none"; + m_owner_handler = ""; + } + + bool verify_owner_handler(const std::string &handler) { + + return ( (m_owner != "none") && (m_owner_handler == handler) ); + + } + private: + + std::string generate_handler(); + TrexStreamTable m_stream_table; uint8_t m_port_id; port_state_e m_port_state; + std::string m_owner; + std::string m_owner_handler; }; /** -- cgit 1.2.3-korg From 56dbd342eb97fc087611157ce8e965088b7f9bf8 Mon Sep 17 00:00:00 2001 From: Dan Klein Date: Thu, 17 Sep 2015 19:50:35 +0300 Subject: Major progress in the packet builder module. Now able to create packets, dump them to JSON of pcap and more features added --- .../client_utils/packet_builder.py | 110 ++++++++++++++++++--- 1 file changed, 99 insertions(+), 11 deletions(-) diff --git a/scripts/automation/trex_control_plane/client_utils/packet_builder.py b/scripts/automation/trex_control_plane/client_utils/packet_builder.py index abe98dbb..fc34d931 100644 --- a/scripts/automation/trex_control_plane/client_utils/packet_builder.py +++ b/scripts/automation/trex_control_plane/client_utils/packet_builder.py @@ -45,6 +45,9 @@ class CTRexPktBuilder(object): pkt_layer : dpkt.Packet obj a dpkt object, generally from higher layer, that will be added on top of existing layer. + :raises: + + :exc:`ValueError`, in case the desired layer_name already exists. + """ assert isinstance(pkt_layer, dpkt.Packet) if layer_name in self._pkt_by_hdr: @@ -71,7 +74,7 @@ class CTRexPktBuilder(object): raise KeyError("Specified layer '{0}' doesn't exist on packet.".format(layer_name)) def set_ipv6_layer_addr(self, layer_name, attr, ip_addr): - self.set_ip_layer_addr(self, layer_name, attr, ip_addr, ip_type="ipv6") + self.set_ip_layer_addr(layer_name, attr, ip_addr, ip_type="ipv6") def set_eth_layer_addr(self, layer_name, attr, mac_addr): try: @@ -84,7 +87,7 @@ class CTRexPktBuilder(object): except KeyError: raise KeyError("Specified layer '{0}' doesn't exist on packet.".format(layer_name)) - def set_layer_attr(self, layer_name, attr, val): + def set_layer_attr(self, layer_name, attr, val, toggle_bit=False): """ This method enables the user to change a value of a previously defined packet layer. This method isn't to be used to set the data attribute of a packet with payload. @@ -101,6 +104,11 @@ class CTRexPktBuilder(object): val : value of attribute. + toggle_bit : bool + Indicating if trying to set a specific bit of a field, such as "do not fragment" bit of IP layer. + + Default: **False** + :raises: + :exc:`KeyError`, in case of missing layer (the desired layer isn't part of packet) + :exc:`ValueError`, in case invalid attribute to the specified layer. @@ -110,19 +118,25 @@ class CTRexPktBuilder(object): layer = self._pkt_by_hdr[layer_name.lower()] if attr == 'data' and not isinstance(val, dpkt.Packet): # Don't allow setting 'data' attribute - raise ValueError("Set a data attribute with obejct that is not dpkt.Packet is not allowed using " + raise ValueError("Set a data attribute with object that is not dpkt.Packet is not allowed using " "set_layer_attr method.\nUse set_payload method instead.") if hasattr(layer, attr): - setattr(layer, attr, val) - if attr == 'data': - # re-evaluate packet from the start, possible broken link between layers - self._reevaluate_packet(layer_name.lower()) + if toggle_bit: + setattr(layer, attr, val | getattr(layer, attr, 0)) + else: + setattr(layer, attr, val) + if attr == 'data': + # re-evaluate packet from the start, possible broken link between layers + self._reevaluate_packet(layer_name.lower()) else: raise ValueError("Given attr name '{0}' doesn't exists on specified layer ({1}).".format(layer_name, attr)) except KeyError: raise KeyError("Specified layer '{0}' doesn't exist on packet.".format(layer_name)) + def set_layer_bit_attr(self, layer_name, attr, val): + return self.set_layer_attr(layer_name, attr, val, True) + def set_pkt_payload(self, payload): """ This method sets a payload to the topmost layer of the generated packet. @@ -185,7 +199,7 @@ class CTRexPktBuilder(object): def get_packet(self, get_ptr=False): """ - This method enables the user to change a value of a previously defined packet layer. + This method provides access to the built packet, as an instance or as a pointer to packet itself. :parameters: get_ptr : bool @@ -196,17 +210,33 @@ class CTRexPktBuilder(object): default value : False :return: - the current packet built by CTRexPktBuilder object. + + the current packet built by CTRexPktBuilder object. + + None if packet is empty """ if get_ptr: self._pkt_by_hdr = {} self._pkt_top_layer = None return self._packet - else: return copy.copy(self._packet) + def get_layer(self, layer_name): + """ + This method provides access to a specific layer of the packet, as a **copy of the layer instance**. + + :parameters: + layer_name : str + the name given to desired layer + + :return: + + a copy of the desired layer of the current packet if exists. + + None if no such layer + + """ + layer = self._pkt_by_hdr.get(layer_name) + return copy.copy(layer) if layer else None + # VM access methods def set_vm_ip_range(self, ip_start, ip_end, ip_type="ipv4"): pass @@ -221,8 +251,57 @@ class CTRexPktBuilder(object): pass def dump_pkt(self): + """ + Dumps the packet as a decimal array of bytes (each item x gets value between 0-255) + + :parameters: + None + + :return: + + packet representation as array of bytes + + :raises: + + :exc:`CTRexPktBuilder.EmptyPacketError`, in case packet is empty. + + """ + if self._packet is None: + raise CTRexPktBuilder.EmptyPacketError() pkt_in_hex = binascii.hexlify(str(self._packet)) - return [pkt_in_hex[i:i+2] for i in range(0, len(pkt_in_hex), 2)] + return [int(pkt_in_hex[i:i+2], 16) + for i in range(0, len(pkt_in_hex), 2)] + # return [pkt_in_hex[i:i+2] for i in range(0, len(pkt_in_hex), 2)] + + def dump_pkt_to_pcap(self, file_path, ts=None): + """ + Dumps the packet as a decimal array of bytes (each item x gets value between 0-255) + + :parameters: + file_path : str + a path (including filename) to which to write to pcap file to. + + ts : int + a timestamp to attach to the packet when dumped to pcap file. + if ts in None, then time.time() is used to set the timestamp. + + Default: **None** + + :return: + None + + :raises: + + :exc:`CTRexPktBuilder.EmptyPacketError`, in case packet is empty. + + """ + if self._packet is None: + raise CTRexPktBuilder.EmptyPacketError() + try: + with open(file_path, 'wb') as f: + pcap_wr = dpkt.pcap.Writer(f) + pcap_wr.writepkt(self._packet, ts) + return + except IOError: + raise IOError(2, "The provided path could not be accessed") + # ----- useful shortcut methods ----- # def gen_dns_packet(self): @@ -568,6 +647,15 @@ class CTRexPktBuilder(object): def __repr__(self): return u"[errcode:%r] %r" % (self.code, self.message) + class EmptyPacketError(CPacketBuildException): + """ + This exception is used to indicate an error caused by operation performed on an empty packet. + """ + def __init__(self, message=''): + self._default_message = 'Illegal operation on empty packet.' + self.message = message or self._default_message + super(CTRexPktBuilder.EmptyPacketError, self).__init__(-10, self.message) + class IPAddressError(CPacketBuildException): """ This exception is used to indicate an error on the IP addressing part of the packet. -- cgit 1.2.3-korg From f885ac59cebcf1e87b97b0e6ef6e9eb032f9f733 Mon Sep 17 00:00:00 2001 From: Hanoh Haim Date: Thu, 17 Sep 2015 21:44:53 +0300 Subject: fix some pcap load issues --- VERSION | 2 +- scripts/cap2/jumbo.pcap | Bin 0 -> 17791 bytes scripts/cap2/jumbo.yaml | 23 +++++++++++++++++++++++ scripts/cap2/wrong_ip.pcap | Bin 0 -> 1530 bytes scripts/cap2/wrong_ip.yaml | 23 +++++++++++++++++++++++ src/bp_sim.cpp | 16 +++++++++------- src/common/pcap.cpp | 3 ++- 7 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 scripts/cap2/jumbo.pcap create mode 100644 scripts/cap2/jumbo.yaml create mode 100644 scripts/cap2/wrong_ip.pcap create mode 100644 scripts/cap2/wrong_ip.yaml diff --git a/VERSION b/VERSION index 917f0173..fe509dde 100755 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ -v1.75 +v1.76 diff --git a/scripts/cap2/jumbo.pcap b/scripts/cap2/jumbo.pcap new file mode 100644 index 00000000..2a7f7bde Binary files /dev/null and b/scripts/cap2/jumbo.pcap differ diff --git a/scripts/cap2/jumbo.yaml b/scripts/cap2/jumbo.yaml new file mode 100644 index 00000000..b45a6ca3 --- /dev/null +++ b/scripts/cap2/jumbo.yaml @@ -0,0 +1,23 @@ +- duration : 10.0 + generator : + distribution : "seq" + clients_start : "16.0.0.1" + clients_end : "16.0.1.255" + servers_start : "48.0.0.1" + servers_end : "48.0.0.255" + clients_per_gb : 201 + min_clients : 101 + dual_port_mask : "1.0.0.0" + tcp_aging : 1 + udp_aging : 1 + mac : [0x00,0x00,0x00,0x01,0x00,0x00] + #vlan : { enable : 1 , vlan0 : 100 , vlan1 : 200 } + #mac_override_by_ip : true + cap_info : + - name: cap2/jumbo.pcap + cps : 1.0 + ipg : 10000 + rtt : 10000 + w : 1 + + diff --git a/scripts/cap2/wrong_ip.pcap b/scripts/cap2/wrong_ip.pcap new file mode 100644 index 00000000..08cf8de8 Binary files /dev/null and b/scripts/cap2/wrong_ip.pcap differ diff --git a/scripts/cap2/wrong_ip.yaml b/scripts/cap2/wrong_ip.yaml new file mode 100644 index 00000000..7de3b82d --- /dev/null +++ b/scripts/cap2/wrong_ip.yaml @@ -0,0 +1,23 @@ +- duration : 10.0 + generator : + distribution : "seq" + clients_start : "16.0.0.1" + clients_end : "16.0.1.255" + servers_start : "48.0.0.1" + servers_end : "48.0.0.255" + clients_per_gb : 201 + min_clients : 101 + dual_port_mask : "1.0.0.0" + tcp_aging : 1 + udp_aging : 1 + mac : [0x00,0x00,0x00,0x01,0x00,0x00] + #vlan : { enable : 1 , vlan0 : 100 , vlan1 : 200 } + #mac_override_by_ip : true + cap_info : + - name: cap2/wrong_ip.pcap + cps : 1.0 + ipg : 10000 + rtt : 10000 + w : 1 + + diff --git a/src/bp_sim.cpp b/src/bp_sim.cpp index 555696f1..8a8bc5f9 100755 --- a/src/bp_sim.cpp +++ b/src/bp_sim.cpp @@ -1148,13 +1148,6 @@ void CPacketIndication::ProcessIpPacket(CPacketParser *parser, } offset += ip_header_length; - if (!l3.m_ipv4->isChecksumOK() ){ - m_cnt->m_ip_checksum_error++; - } - if( l3.m_ipv4->isMulticast() ){ - m_cnt->m_ip_multicast_error++; - return; - } if( l3.m_ipv4->getTimeToLive() ==0 ){ m_cnt->m_ip_ttl_is_zero_error++; @@ -1177,10 +1170,19 @@ void CPacketIndication::ProcessIpPacket(CPacketParser *parser, return; } + if ( m_packet->pkt_len > MAX_BUF_SIZE -FIRST_PKT_SIZE ){ + m_cnt->m_tcp_udp_pkt_length_error++; + printf("ERROR packet is too big, not supported jumbo packets that larger than %d \n",MAX_BUF_SIZE); + return; + } + // Set packet length and include padding if needed m_packet->pkt_len = l3.m_ipv4->getTotalLength() + getIpOffset(); if (m_packet->pkt_len < 60) { m_packet->pkt_len = 60; } + + + m_cnt->m_valid_udp_tcp++; m_payload_len = l3.m_ipv4->getTotalLength() - (payload_offset_from_ip); m_payload = (uint8_t *)(packetBase +offset); diff --git a/src/common/pcap.cpp b/src/common/pcap.cpp index 6dd54514..9b360a3e 100755 --- a/src/common/pcap.cpp +++ b/src/common/pcap.cpp @@ -156,7 +156,8 @@ bool LibPCapReader::ReadPacket(CCapPktRaw *lpPacket) } if (pkt_header.len > READER_MAX_PACKET_SIZE) { /* cannot read this packet */ - assert(0); + printf("ERROR packet is too big, bigger than %d \n",READER_MAX_PACKET_SIZE); + exit(-1); return false; } -- cgit 1.2.3-korg