[
  {
    "path": ".gitignore",
    "content": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.exe\n#*\n*~\n\n# examples binaries\nexamples/synscan/synscan\nexamples/pfdump/pfdump\nexamples/pcapdump/pcapdump\nexamples/httpassembly/httpassembly\nexamples/statsassembly/statsassembly\nexamples/arpscan/arpscan\nexamples/bidirectional/bidirectional\nexamples/bytediff/bytediff\nexamples/reassemblydump/reassemblydump\nlayers/gen\nmacs/gen\npcap/pcap_tester\n"
  },
  {
    "path": ".travis.gofmt.sh",
    "content": "#!/bin/bash\n\ncd \"$(dirname $0)\"\nif [ -n \"$(go fmt ./...)\" ]; then\n  echo \"Go code is not formatted, run 'go fmt github.com/google/stenographer/...'\" >&2\n  exit 1\nfi\n"
  },
  {
    "path": ".travis.golint.sh",
    "content": "#!/bin/bash\n\ncd \"$(dirname $0)\"\n\ngo get golang.org/x/lint/golint\nDIRS=\". tcpassembly tcpassembly/tcpreader ip4defrag reassembly macs pcapgo pcap afpacket pfring routing defrag/lcmdefrag\"\n# Add subdirectories here as we clean up golint on each.\nfor subdir in $DIRS; do\n  pushd $subdir\n  if golint |\n      grep -v CannotSetRFMon |  # pcap exported error name\n      grep -v DataLost |        # tcpassembly/tcpreader exported error name\n      grep .; then\n    exit 1\n  fi\n  popd\ndone\n\npushd layers\nfor file in *.go; do\n  if cat .lint_blacklist | grep -q $file; then\n    echo \"Skipping lint of $file due to .lint_blacklist\"\n  elif golint $file | grep .; then\n    echo \"Lint error in file $file\"\n    exit 1\n  fi\ndone\npopd\n"
  },
  {
    "path": ".travis.govet.sh",
    "content": "#!/bin/bash\n\ncd \"$(dirname $0)\"\nDIRS=\". layers pcap pcapgo tcpassembly tcpassembly/tcpreader routing ip4defrag bytediff macs defrag/lcmdefrag\"\nset -e\nfor subdir in $DIRS; do\n  pushd $subdir\n  go vet\n  popd\ndone\n"
  },
  {
    "path": ".travis.install.sh",
    "content": "#!/bin/bash\n\nset -ev\n\ngo get github.com/google/gopacket\ngo get github.com/google/gopacket/layers\ngo get github.com/google/gopacket/tcpassembly\ngo get github.com/google/gopacket/reassembly\ngo get github.com/google/gopacket/pcapgo\n"
  },
  {
    "path": ".travis.script.sh",
    "content": "#!/bin/bash\n\nset -ev\n\ngo test github.com/google/gopacket\ngo test github.com/google/gopacket/layers\ngo test github.com/google/gopacket/tcpassembly\ngo test github.com/google/gopacket/reassembly\ngo test github.com/google/gopacket/pcapgo\ngo test github.com/google/gopacket/pcap\nsudo $(which go) test github.com/google/gopacket/routing\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: go\ngo:\n - 1.11.x\n - 1.12.x\n - 1.13.x\n - master\n\naddons:\n  apt:\n    packages:\n      libpcap-dev\n\n# use modules except for older versions (see below)\ninstall: true\n\nenv:\n  - GO111MODULE=on\n\nscript: ./.travis.script.sh\n\nmatrix:\n  fast_finish: true\n  allow_failures:\n    - go: master\n\njobs:\n  include:\n    - go: 1.5.x\n      install: ./.travis.install.sh\n    - go: 1.6.x\n      install: ./.travis.install.sh\n    - go: 1.7.x\n      install: ./.travis.install.sh\n    - go: 1.8.x\n      install: ./.travis.install.sh\n    - go: 1.9.x\n      install: ./.travis.install.sh\n    - go: 1.10.x\n      install: ./.travis.install.sh\n    - os: osx\n      go: 1.x\n# windows doesn't work on travis (package installation just hangs and then errors out)\n#    - os: windows\n#      go: 1.x\n#      # We don't need nmap - but that's the only way to get npcap:\n#      before_install: choco install npcap --version 0.86 -y\n    - stage: style\n      name: \"fmt/vet/lint\"\n      go: 1.x\n      script:\n        - ./.travis.gofmt.sh\n        - ./.travis.govet.sh\n        - ./.travis.golint.sh\n\nstages:\n  - style\n  - test\n"
  },
  {
    "path": "AUTHORS",
    "content": "AUTHORS AND MAINTAINERS:\n\nMAIN DEVELOPERS:\nGraeme Connell   <gconnell@google.com, gsconnell@gmail.com>\n\nAUTHORS:\nNigel Tao <nigeltao@google.com>\nCole Mickens <cole.mickens@gmail.com>\nBen Daglish <bdaglish@restorepoint.com>\nLuis Martinez <martinezlc99@gmail.com>\nRemco Verhoef <remco@dutchcoders.io>\nHiroaki Kawai <Hiroaki.Kawai@gmail.com>\nLukas Lueg <lukas.lueg@gmail.com>\nLaurent Hausermann <laurent.hausermann@gmail.com>\nBill Green <bgreen@newrelic.com>\nChristian Mäder <christian.maeder@nine.ch>\nGernot Vormayr <gvormayr@gmail.com>\nVitor Garcia Graveto <victor.graveto@gmail.com>\nElias Chavarria Reyes <elchavar@cisco.com>\nDaniel Rittweiler <ripx80@protonmail.com>\n\nCONTRIBUTORS:\nAttila Oláh <attila@attilaolah.eu>\nVittus Mikiassen <matt.miki.vimik@gmail.com>\nMatthias Radestock <matthias.radestock@gmail.com>\nMatthew Sackman <matthew@wellquite.org>\nLoic Prylli <loicp@google.com>\nAlexandre Fiori <fiorix@gmail.com>\nAdrian Tam <adrian.c.m.tam@gmail.com>\nSatoshi Matsumoto <kaorimatz@gmail.com>\nDavid Stainton <dstainton415@gmail.com>\nJesse Ward <jesse@jesseward.com>\nKane Mathers <kane@kanemathers.name>\nJose Selvi <jselvi@pentester.es>\nYerden Zhumabekov <yerden.zhumabekov@gmail.com>\nJensen Hwa <jensenhwa@gmail.com>\n\n-----------------------------------------------\nFORKED FROM github.com/akrennmair/gopcap\nALL THE FOLLOWING ARE FOR THAT PROJECT\n\nMAIN DEVELOPERS:\nAndreas Krennmair <ak@synflood.at>\n\nCONTRIBUTORS:\nAndrea Nall <anall@andreanall.com>\nDaniel Arndt <danielarndt@gmail.com>\nDustin Sallings <dustin@spy.net>\nGraeme Connell <gconnell@google.com, gsconnell@gmail.com>\nGuillaume Savary <guillaume@savary.name>\nMark Smith <mark@qq.is>\nMiek Gieben <miek@miek.nl>\nMike Bell <mike@mikebell.org>\nTrevor Strohman <strohman@google.com>\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "Contributing To gopacket\n========================\n\nSo you've got some code and you'd like it to be part of gopacket... wonderful!\nWe're happy to accept contributions, whether they're fixes to old protocols, new\nprotocols entirely, or anything else you think would improve the gopacket\nlibrary.  This document is designed to help you to do just that.\n\nThe first section deals with the plumbing:  how to actually get a change\nsubmitted.\n\nThe second section deals with coding style... Go is great in that it\nhas a uniform style implemented by 'go fmt', but there's still some decisions\nwe've made that go above and beyond, and if you follow them, they won't come up\nin your code review.\n\nThe third section deals with some of the implementation decisions we've made,\nwhich may help you to understand the current code and which we may ask you to\nconform to (or provide compelling reasons for ignoring).\n\nOverall, we hope this document will help you to understand our system and write\ngreat code which fits in, and help us to turn around on your code review quickly\nso the code can make it into the master branch as quickly as possible.\n\n\nHow To Submit Code\n------------------\n\nWe use github.com's Pull Request feature to receive code contributions from\nexternal contributors.  See\nhttps://help.github.com/articles/creating-a-pull-request/ for details on\nhow to create a request.\n\nAlso, there's a local script `gc` in the base directory of GoPacket that\nruns a local set of checks, which should give you relatively high confidence\nthat your pull won't fail github pull checks.\n\n```sh\ngo get github.com/google/gopacket\ncd $GOROOT/src/pkg/github.com/google/gopacket\ngit checkout -b <mynewfeature>  # create a new branch to work from\n... code code code ...\n./gc  # Run this to do local commits, it performs a number of checks\n```\n\nTo sum up:\n\n* DO\n    + Pull down the latest version.\n    + Make a feature-specific branch.\n    + Code using the style and methods discussed in the rest of this document.\n    + Use the ./gc command to do local commits or check correctness.\n    + Push your new feature branch up to github.com, as a pull request.\n    + Handle comments and requests from reviewers, pushing new commits up to\n      your feature branch as problems are addressed.\n    + Put interesting comments and discussions into commit comments.\n* DON'T\n    + Push to someone else's branch without their permission.\n\n\nCoding Style\n------------\n\n* Go code must be run through `go fmt`, `go vet`, and `golint`\n* Follow http://golang.org/doc/effective_go.html as much as possible.\n    + In particular, http://golang.org/doc/effective_go.html#mixed-caps.  Enums\n      should be be CamelCase, with acronyms capitalized (TCPSourcePort, vs.\n      TcpSourcePort or TCP_SOURCE_PORT).\n* Bonus points for giving enum types a String() field.\n* Any exported types or functions should have commentary\n  (http://golang.org/doc/effective_go.html#commentary)\n\n\nCoding Methods And Implementation Notes\n---------------------------------------\n\n### Error Handling\n\nMany times, you'll be decoding a protocol and run across something bad, a packet\ncorruption or the like.  How do you handle this?  First off, ALWAYS report the\nerror.  You can do this either by returning the error from the decode() function\n(most common), or if you're up for it you can implement and add an ErrorLayer\nthrough the packet builder (the first method is a simple shortcut that does\nexactly this, then stops any future decoding).\n\nOften, you'll already have decode some part of your protocol by the time you hit\nyour error.  Use your own discretion to determine whether the stuff you've\nalready decoded should be returned to the caller or not:\n\n```go\nfunc decodeMyProtocol(data []byte, p gopacket.PacketBuilder) error {\n  prot := &MyProtocol{}\n  if len(data) < 10 {\n    // This error occurred before we did ANYTHING, so there's nothing in my\n    // protocol that the caller could possibly want.  Just return the error.\n    return fmt.Errorf(\"Length %d less than 10\", len(data))\n  }\n  prot.ImportantField1 = data[:5]\n  prot.ImportantField2 = data[5:10]\n  // At this point, we've already got enough information in 'prot' to\n  // warrant returning it to the caller, so we'll add it now.\n  p.AddLayer(prot)\n  if len(data) < 15 {\n    // We encountered an error later in the packet, but the caller already\n    // has the important info we've gleaned so far.\n    return fmt.Errorf(\"Length %d less than 15\", len(data))\n  }\n  prot.ImportantField3 = data[10:15]\n  return nil  // We've already added the layer, we can just return success.\n}\n```\n\nIn general, our code follows the approach of returning the first error it\nencounters.  In general, we don't trust any bytes after the first error we see.\n\n### What Is A Layer?\n\nThe definition of a layer is up to the discretion of the coder.  It should be\nsomething important enough that it's actually useful to the caller (IE: every\nTLV value should probably NOT be a layer).  However, it can be more granular\nthan a single protocol... IPv6 and SCTP both implement many layers to handle the\nvarious parts of the protocol.  Use your best judgement, and prepare to defend\nyour decisions during code review. ;)\n\n### Performance\n\nWe strive to make gopacket as fast as possible while still providing lots of\nfeatures.  In general, this means:\n\n* Focus performance tuning on common protocols (IP4/6, TCP, etc), and optimize\n  others on an as-needed basis (tons of MPLS on your network?  Time to optimize\n  MPLS!)\n* Use fast operations.  See the toplevel benchmark_test for benchmarks of some\n  of Go's underlying features and types.\n* Test your performance changes!  You should use the ./gc script's --benchmark\n  flag to submit any performance-related changes.  Use pcap/gopacket_benchmark\n  to test your change against a PCAP file based on your traffic patterns.\n* Don't be TOO hacky.  Sometimes, removing an unused struct from a field causes\n  a huge performance hit, due to the way that Go currently handles its segmented\n  stack... don't be afraid to clean it up anyway.  We'll trust the Go compiler\n  to get good enough over time to handle this.  Also, this type of\n  compiler-specific optimization is very fragile; someone adding a field to an\n  entirely different struct elsewhere in the codebase could reverse any gains\n  you might achieve by aligning your allocations.\n* Try to minimize memory allocations.  If possible, use []byte to reference\n  pieces of the input, instead of using string, which requires copying the bytes\n  into a new memory allocation.\n* Think hard about what should be evaluated lazily vs. not.  In general, a\n  layer's struct should almost exactly mirror the layer's frame.  Anything\n  that's more interesting should be a function.  This may not always be\n  possible, but it's a good rule of thumb.\n* Don't fear micro-optimizations.  With the above in mind, we welcome\n  micro-optimizations that we think will have positive/neutral impacts on the\n  majority of workloads.  A prime example of this is pre-allocating certain\n  structs within a larger one:\n\n```go\ntype MyProtocol struct {\n  // Most packets have 1-4 of VeryCommon, so we preallocate it here.\n  initialAllocation [4]uint32\n  VeryCommon []uint32\n}\n\nfunc decodeMyProtocol(data []byte, p gopacket.PacketBuilder) error {\n  prot := &MyProtocol{}\n  prot.VeryCommon = proto.initialAllocation[:0]\n  for len(data) > 4 {\n    field := binary.BigEndian.Uint32(data[:4])\n    data = data[4:]\n    // Since we're using the underlying initialAllocation, we won't need to\n    // allocate new memory for the following append unless we more than 16\n    // bytes of data, which should be the uncommon case.\n    prot.VeryCommon = append(prot.VeryCommon, field)\n  }\n  p.AddLayer(prot)\n  if len(data) > 0 {\n    return fmt.Errorf(\"MyProtocol packet has %d bytes left after decoding\", len(data))\n  }\n  return nil\n}\n```\n\n### Slices And Data\n\nIf you're pulling a slice from the data you're decoding, don't copy it.  Just\nuse the slice itself.\n\n```go\ntype MyProtocol struct {\n  A, B net.IP\n}\nfunc decodeMyProtocol(data []byte, p gopacket.PacketBuilder) error {\n  p.AddLayer(&MyProtocol{\n    A: data[:4],\n    B: data[4:8],\n  })\n  return nil\n}\n```\n\nThe caller has already agreed, by using this library, that they won't modify the\nset of bytes they pass in to the decoder, or the library has already copied the\nset of bytes to a read-only location.  See DecodeOptions.NoCopy for more\ninformation.\n\n### Enums/Types\n\nIf a protocol has an integer field (uint8, uint16, etc) with a couple of known\nvalues that mean something special, make it a type.  This allows us to do really\nnice things like adding a String() function to them, so we can more easily\ndisplay those to users.  Check out layers/enums.go for one example, as well as\nlayers/icmp.go for layer-specific enums.\n\nWhen naming things, try for descriptiveness over suscinctness.  For example,\nchoose DNSResponseRecord over DNSRR.\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2012 Google, Inc. All rights reserved.\nCopyright (c) 2009-2011 Andreas Krennmair. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Andreas Krennmair, Google, nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "README.md",
    "content": "# GoPacket\n\nThis library provides packet decoding capabilities for Go.\nSee [godoc](https://godoc.org/github.com/google/gopacket) for more details.\n\n[![Build Status](https://travis-ci.org/google/gopacket.svg?branch=master)](https://travis-ci.org/google/gopacket)\n[![GoDoc](https://godoc.org/github.com/google/gopacket?status.svg)](https://godoc.org/github.com/google/gopacket)\n\nMinimum Go version required is 1.5 except for pcapgo/EthernetHandle, afpacket, and bsdbpf which need at least 1.9 due to x/sys/unix dependencies.\n\nOriginally forked from the gopcap project written by Andreas\nKrennmair <ak@synflood.at> (http://github.com/akrennmair/gopcap).\n"
  },
  {
    "path": "afpacket/afpacket.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n//go:build linux\n// +build linux\n\n// Package afpacket provides Go bindings for MMap'd AF_PACKET socket reading.\npackage afpacket\n\n// Couldn't have done this without:\n// http://lxr.free-electrons.com/source/Documentation/networking/packet_mmap.txt\n// http://codemonkeytips.blogspot.co.uk/2011/07/asynchronous-packet-socket-reading-with.html\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"runtime\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"golang.org/x/net/bpf\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/google/gopacket\"\n)\n\n/*\n#include <linux/if_packet.h>  // AF_PACKET, sockaddr_ll\n#include <linux/if_ether.h>  // ETH_P_ALL\n#include <sys/socket.h>  // socket()\n#include <unistd.h>  // close()\n#include <arpa/inet.h>  // htons()\n#include <sys/mman.h>  // mmap(), munmap()\n#include <poll.h>  // poll()\n*/\nimport \"C\"\n\nvar pageSize = unix.Getpagesize()\n\n// ErrPoll returned by poll\nvar ErrPoll = errors.New(\"packet poll failed\")\n\n// ErrTimeout returned on poll timeout\nvar ErrTimeout = errors.New(\"packet poll timeout expired\")\n\n// AncillaryVLAN structures are used to pass the captured VLAN\n// as ancillary data via CaptureInfo.\ntype AncillaryVLAN struct {\n\t// The VLAN VID provided by the kernel.\n\tVLAN int\n}\n\n// Stats is a set of counters detailing the work TPacket has done so far.\ntype Stats struct {\n\t// Packets is the total number of packets returned to the caller.\n\tPackets int64\n\t// Polls is the number of blocking syscalls made waiting for packets.\n\t// This should always be <= Packets, since with TPacket one syscall\n\t// can (and often does) return many results.\n\tPolls int64\n}\n\n// SocketStats is a struct where socket stats are stored\ntype SocketStats C.struct_tpacket_stats\n\n// Packets returns the number of packets seen by this socket.\nfunc (s *SocketStats) Packets() uint {\n\treturn uint(s.tp_packets)\n}\n\n// Drops returns the number of packets dropped on this socket.\nfunc (s *SocketStats) Drops() uint {\n\treturn uint(s.tp_drops)\n}\n\n// SocketStatsV3 is a struct where socket stats for TPacketV3 are stored\ntype SocketStatsV3 C.struct_tpacket_stats_v3\n\n// Packets returns the number of packets seen by this socket.\nfunc (s *SocketStatsV3) Packets() uint {\n\treturn uint(s.tp_packets)\n}\n\n// Drops returns the number of packets dropped on this socket.\nfunc (s *SocketStatsV3) Drops() uint {\n\treturn uint(s.tp_drops)\n}\n\n// QueueFreezes returns the number of queue freezes on this socket.\nfunc (s *SocketStatsV3) QueueFreezes() uint {\n\treturn uint(s.tp_freeze_q_cnt)\n}\n\n// TPacket implements packet receiving for Linux AF_PACKET versions 1, 2, and 3.\ntype TPacket struct {\n\t// stats is simple statistics on TPacket's run. This MUST be the first entry to ensure alignment for sync.atomic\n\tstats Stats\n\t// fd is the C file descriptor.\n\tfd int\n\t// ring points to the memory space of the ring buffer shared by tpacket and the kernel.\n\tring []byte\n\t// rawring is the unsafe pointer that we use to poll for packets\n\trawring unsafe.Pointer\n\t// opts contains read-only options for the TPacket object.\n\topts options\n\tmu   sync.Mutex // guards below\n\t// offset is the offset into the ring of the current header.\n\toffset int\n\t// current is the current header.\n\tcurrent header\n\t// shouldReleasePacket is set to true whenever we return packet data, to make sure we remember to release that data back to the kernel.\n\tshouldReleasePacket bool\n\t// headerNextNeeded is set to true when header need to move to the next packet. No need to move it case of poll error.\n\theaderNextNeeded bool\n\t// tpVersion is the version of TPacket actually in use, set by setRequestedTPacketVersion.\n\ttpVersion OptTPacketVersion\n\t// Hackity hack hack hack.  We need to return a pointer to the header with\n\t// getTPacketHeader, and we don't want to allocate a v3wrapper every time,\n\t// so we leave it in the TPacket object and return a pointer to it.\n\tv3 v3wrapper\n\n\tstatsMu sync.Mutex // guards stats below\n\t// socketStats contains stats from the socket\n\tsocketStats SocketStats\n\t// same as socketStats, but with an extra field freeze_q_cnt\n\tsocketStatsV3 SocketStatsV3\n}\n\nvar _ gopacket.ZeroCopyPacketDataSource = &TPacket{}\n\n// bindToInterface binds the TPacket socket to a particular named interface.\nfunc (h *TPacket) bindToInterface(ifaceName string) error {\n\tifIndex := 0\n\t// An empty string here means to listen to all interfaces\n\tif ifaceName != \"\" {\n\t\tiface, err := net.InterfaceByName(ifaceName)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"InterfaceByName: %v\", err)\n\t\t}\n\t\tifIndex = iface.Index\n\t}\n\ts := &unix.SockaddrLinklayer{\n\t\tProtocol: htons(uint16(unix.ETH_P_ALL)),\n\t\tIfindex:  ifIndex,\n\t}\n\treturn unix.Bind(h.fd, s)\n}\n\n// setTPacketVersion asks the kernel to set TPacket to a particular version, and returns an error on failure.\nfunc (h *TPacket) setTPacketVersion(version OptTPacketVersion) error {\n\tif err := unix.SetsockoptInt(h.fd, unix.SOL_PACKET, unix.PACKET_VERSION, int(version)); err != nil {\n\t\treturn fmt.Errorf(\"setsockopt packet_version: %v\", err)\n\t}\n\treturn nil\n}\n\n// setRequestedTPacketVersion tries to set TPacket to the requested version or versions.\nfunc (h *TPacket) setRequestedTPacketVersion() error {\n\tswitch {\n\tcase (h.opts.version == TPacketVersionHighestAvailable || h.opts.version == TPacketVersion3) && h.setTPacketVersion(TPacketVersion3) == nil:\n\t\th.tpVersion = TPacketVersion3\n\tcase (h.opts.version == TPacketVersionHighestAvailable || h.opts.version == TPacketVersion2) && h.setTPacketVersion(TPacketVersion2) == nil:\n\t\th.tpVersion = TPacketVersion2\n\tcase (h.opts.version == TPacketVersionHighestAvailable || h.opts.version == TPacketVersion1) && h.setTPacketVersion(TPacketVersion1) == nil:\n\t\th.tpVersion = TPacketVersion1\n\tdefault:\n\t\treturn errors.New(\"no known tpacket versions work on this machine\")\n\t}\n\treturn nil\n}\n\n// setUpRing sets up the shared-memory ring buffer between the user process and the kernel.\nfunc (h *TPacket) setUpRing() (err error) {\n\ttotalSize := int(h.opts.framesPerBlock * h.opts.numBlocks * h.opts.frameSize)\n\tswitch h.tpVersion {\n\tcase TPacketVersion1, TPacketVersion2:\n\t\tvar tp C.struct_tpacket_req\n\t\ttp.tp_block_size = C.uint(h.opts.blockSize)\n\t\ttp.tp_block_nr = C.uint(h.opts.numBlocks)\n\t\ttp.tp_frame_size = C.uint(h.opts.frameSize)\n\t\ttp.tp_frame_nr = C.uint(h.opts.framesPerBlock * h.opts.numBlocks)\n\t\tif err := setsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_RX_RING, unsafe.Pointer(&tp), unsafe.Sizeof(tp)); err != nil {\n\t\t\treturn fmt.Errorf(\"setsockopt packet_rx_ring: %v\", err)\n\t\t}\n\tcase TPacketVersion3:\n\t\tvar tp C.struct_tpacket_req3\n\t\ttp.tp_block_size = C.uint(h.opts.blockSize)\n\t\ttp.tp_block_nr = C.uint(h.opts.numBlocks)\n\t\ttp.tp_frame_size = C.uint(h.opts.frameSize)\n\t\ttp.tp_frame_nr = C.uint(h.opts.framesPerBlock * h.opts.numBlocks)\n\t\ttp.tp_retire_blk_tov = C.uint(h.opts.blockTimeout / time.Millisecond)\n\t\tif err := setsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_RX_RING, unsafe.Pointer(&tp), unsafe.Sizeof(tp)); err != nil {\n\t\t\treturn fmt.Errorf(\"setsockopt packet_rx_ring v3: %v\", err)\n\t\t}\n\tdefault:\n\t\treturn errors.New(\"invalid tpVersion\")\n\t}\n\th.ring, err = unix.Mmap(h.fd, 0, totalSize, unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif h.ring == nil {\n\t\treturn errors.New(\"no ring\")\n\t}\n\th.rawring = unsafe.Pointer(&h.ring[0])\n\treturn nil\n}\n\n// Close cleans up the TPacket.  It should not be used after the Close call.\nfunc (h *TPacket) Close() {\n\tif h.fd == -1 {\n\t\treturn // already closed.\n\t}\n\tif h.ring != nil {\n\t\tunix.Munmap(h.ring)\n\t}\n\th.ring = nil\n\tunix.Close(h.fd)\n\th.fd = -1\n\truntime.SetFinalizer(h, nil)\n}\n\n// NewTPacket returns a new TPacket object for reading packets off the wire.\n// Its behavior may be modified by passing in any/all of afpacket.Opt* to this\n// function.\n// If this function succeeds, the user should be sure to Close the returned\n// TPacket when finished with it.\nfunc NewTPacket(opts ...interface{}) (h *TPacket, err error) {\n\th = &TPacket{}\n\tif h.opts, err = parseOptions(opts...); err != nil {\n\t\treturn nil, err\n\t}\n\tfd, err := unix.Socket(unix.AF_PACKET, int(h.opts.socktype), int(htons(unix.ETH_P_ALL)))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\th.fd = fd\n\tif err = h.bindToInterface(h.opts.iface); err != nil {\n\t\tgoto errlbl\n\t}\n\tif err = h.setRequestedTPacketVersion(); err != nil {\n\t\tgoto errlbl\n\t}\n\tif err = h.setUpRing(); err != nil {\n\t\tgoto errlbl\n\t}\n\t// Clear stat counter from socket\n\tif err = h.InitSocketStats(); err != nil {\n\t\tgoto errlbl\n\t}\n\truntime.SetFinalizer(h, (*TPacket).Close)\n\treturn h, nil\nerrlbl:\n\th.Close()\n\treturn nil, err\n}\n\n// SetBPF attaches a BPF filter to the underlying socket\nfunc (h *TPacket) SetBPF(filter []bpf.RawInstruction) error {\n\tvar p unix.SockFprog\n\tif len(filter) > int(^uint16(0)) {\n\t\treturn errors.New(\"filter too large\")\n\t}\n\tp.Len = uint16(len(filter))\n\tp.Filter = (*unix.SockFilter)(unsafe.Pointer(&filter[0]))\n\n\treturn setsockopt(h.fd, unix.SOL_SOCKET, unix.SO_ATTACH_FILTER, unsafe.Pointer(&p), unix.SizeofSockFprog)\n}\n\n// attach ebpf filter to af-packet\nfunc (h *TPacket) SetEBPF(progFd int32) error {\n\treturn setsockopt(h.fd, unix.SOL_SOCKET, unix.SO_ATTACH_BPF, unsafe.Pointer(&progFd), 4)\n}\n\nfunc (h *TPacket) releaseCurrentPacket() error {\n\th.current.clearStatus()\n\th.offset++\n\th.shouldReleasePacket = false\n\treturn nil\n}\n\n// ZeroCopyReadPacketData reads the next packet off the wire, and returns its data.\n// The slice returned by ZeroCopyReadPacketData points to bytes owned by the\n// TPacket.  Each call to ZeroCopyReadPacketData invalidates any data previously\n// returned by ZeroCopyReadPacketData.  Care must be taken not to keep pointers\n// to old bytes when using ZeroCopyReadPacketData... if you need to keep data past\n// the next time you call ZeroCopyReadPacketData, use ReadPacketData, which copies\n// the bytes into a new buffer for you.\n//  tp, _ := NewTPacket(...)\n//  data1, _, _ := tp.ZeroCopyReadPacketData()\n//  // do everything you want with data1 here, copying bytes out of it if you'd like to keep them around.\n//  data2, _, _ := tp.ZeroCopyReadPacketData()  // invalidates bytes in data1\nfunc (h *TPacket) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\th.mu.Lock()\nretry:\n\tif h.current == nil || !h.headerNextNeeded || !h.current.next() {\n\t\tif h.shouldReleasePacket {\n\t\t\th.releaseCurrentPacket()\n\t\t}\n\t\th.current = h.getTPacketHeader()\n\t\tif err = h.pollForFirstPacket(h.current); err != nil {\n\t\t\th.headerNextNeeded = false\n\t\t\th.mu.Unlock()\n\t\t\treturn\n\t\t}\n\t\t// We received an empty block\n\t\tif h.current.getLength() == 0 {\n\t\t\tgoto retry\n\t\t}\n\t}\n\tdata = h.current.getData(&h.opts)\n\tci.Timestamp = h.current.getTime()\n\tci.CaptureLength = len(data)\n\tci.Length = h.current.getLength()\n\tci.InterfaceIndex = h.current.getIfaceIndex()\n\tvlan := h.current.getVLAN()\n\tif vlan >= 0 {\n\t\tci.AncillaryData = append(ci.AncillaryData, AncillaryVLAN{vlan})\n\t}\n\tatomic.AddInt64(&h.stats.Packets, 1)\n\th.headerNextNeeded = true\n\th.mu.Unlock()\n\n\treturn\n}\n\n// Stats returns statistics on the packets the TPacket has seen so far.\nfunc (h *TPacket) Stats() (Stats, error) {\n\treturn Stats{\n\t\tPolls:   atomic.LoadInt64(&h.stats.Polls),\n\t\tPackets: atomic.LoadInt64(&h.stats.Packets),\n\t}, nil\n}\n\n// InitSocketStats clears socket counters and return empty stats.\nfunc (h *TPacket) InitSocketStats() error {\n\tif h.tpVersion == TPacketVersion3 {\n\t\tsocklen := unsafe.Sizeof(h.socketStatsV3)\n\t\tslt := C.socklen_t(socklen)\n\t\tvar ssv3 SocketStatsV3\n\n\t\terr := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ssv3), uintptr(unsafe.Pointer(&slt)))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\th.socketStatsV3 = SocketStatsV3{}\n\t} else {\n\t\tsocklen := unsafe.Sizeof(h.socketStats)\n\t\tslt := C.socklen_t(socklen)\n\t\tvar ss SocketStats\n\n\t\terr := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ss), uintptr(unsafe.Pointer(&slt)))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\th.socketStats = SocketStats{}\n\t}\n\treturn nil\n}\n\n// SocketStats saves stats from the socket to the TPacket instance.\nfunc (h *TPacket) SocketStats() (SocketStats, SocketStatsV3, error) {\n\th.statsMu.Lock()\n\tdefer h.statsMu.Unlock()\n\t// We need to save the counters since asking for the stats will clear them\n\tif h.tpVersion == TPacketVersion3 {\n\t\tsocklen := unsafe.Sizeof(h.socketStatsV3)\n\t\tslt := C.socklen_t(socklen)\n\t\tvar ssv3 SocketStatsV3\n\n\t\terr := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ssv3), uintptr(unsafe.Pointer(&slt)))\n\t\tif err != nil {\n\t\t\treturn SocketStats{}, SocketStatsV3{}, err\n\t\t}\n\n\t\th.socketStatsV3.tp_packets += ssv3.tp_packets\n\t\th.socketStatsV3.tp_drops += ssv3.tp_drops\n\t\th.socketStatsV3.tp_freeze_q_cnt += ssv3.tp_freeze_q_cnt\n\t\treturn h.socketStats, h.socketStatsV3, nil\n\t}\n\tsocklen := unsafe.Sizeof(h.socketStats)\n\tslt := C.socklen_t(socklen)\n\tvar ss SocketStats\n\n\terr := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ss), uintptr(unsafe.Pointer(&slt)))\n\tif err != nil {\n\t\treturn SocketStats{}, SocketStatsV3{}, err\n\t}\n\n\th.socketStats.tp_packets += ss.tp_packets\n\th.socketStats.tp_drops += ss.tp_drops\n\treturn h.socketStats, h.socketStatsV3, nil\n}\n\n// ReadPacketDataTo reads packet data into a user-supplied buffer.\n// This function reads up to the length of the passed-in slice.\n// The number of bytes read into data will be returned in ci.CaptureLength,\n// which is the minimum of the size of the passed-in buffer and the size of\n// the captured packet.\nfunc (h *TPacket) ReadPacketDataTo(data []byte) (ci gopacket.CaptureInfo, err error) {\n\tvar d []byte\n\td, ci, err = h.ZeroCopyReadPacketData()\n\tif err != nil {\n\t\treturn\n\t}\n\tci.CaptureLength = copy(data, d)\n\treturn\n}\n\n// ReadPacketData reads the next packet, copies it into a new buffer, and returns\n// that buffer.  Since the buffer is allocated by ReadPacketData, it is safe for long-term\n// use.  This implements gopacket.PacketDataSource.\nfunc (h *TPacket) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\tvar d []byte\n\td, ci, err = h.ZeroCopyReadPacketData()\n\tif err != nil {\n\t\treturn\n\t}\n\tdata = make([]byte, len(d))\n\tcopy(data, d)\n\treturn\n}\n\nfunc (h *TPacket) getTPacketHeader() header {\n\tswitch h.tpVersion {\n\tcase TPacketVersion1:\n\t\tif h.offset >= h.opts.framesPerBlock*h.opts.numBlocks {\n\t\t\th.offset = 0\n\t\t}\n\t\tposition := uintptr(h.rawring) + uintptr(h.opts.frameSize*h.offset)\n\t\treturn (*v1header)(unsafe.Pointer(position))\n\tcase TPacketVersion2:\n\t\tif h.offset >= h.opts.framesPerBlock*h.opts.numBlocks {\n\t\t\th.offset = 0\n\t\t}\n\t\tposition := uintptr(h.rawring) + uintptr(h.opts.frameSize*h.offset)\n\t\treturn (*v2header)(unsafe.Pointer(position))\n\tcase TPacketVersion3:\n\t\t// TPacket3 uses each block to return values, instead of each frame.  Hence we need to rotate when we hit #blocks, not #frames.\n\t\tif h.offset >= h.opts.numBlocks {\n\t\t\th.offset = 0\n\t\t}\n\t\tposition := uintptr(h.rawring) + uintptr(h.opts.frameSize*h.offset*h.opts.framesPerBlock)\n\t\th.v3 = initV3Wrapper(unsafe.Pointer(position))\n\t\treturn &h.v3\n\t}\n\tpanic(\"handle tpacket version is invalid\")\n}\n\nfunc (h *TPacket) pollForFirstPacket(hdr header) error {\n\ttm := int(h.opts.pollTimeout / time.Millisecond)\n\tfor hdr.getStatus()&unix.TP_STATUS_USER == 0 {\n\t\tpollset := [1]unix.PollFd{\n\t\t\t{\n\t\t\t\tFd:     int32(h.fd),\n\t\t\t\tEvents: unix.POLLIN,\n\t\t\t},\n\t\t}\n\t\tn, err := unix.Poll(pollset[:], tm)\n\t\tif n == 0 {\n\t\t\treturn ErrTimeout\n\t\t}\n\n\t\tatomic.AddInt64(&h.stats.Polls, 1)\n\t\tif pollset[0].Revents&unix.POLLERR > 0 {\n\t\t\treturn ErrPoll\n\t\t}\n\t\tif err == syscall.EINTR {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\th.shouldReleasePacket = true\n\treturn nil\n}\n\n// FanoutType determines the type of fanout to use with a TPacket SetFanout call.\ntype FanoutType int\n\n// FanoutType values.\nconst (\n\tFanoutHash FanoutType = unix.PACKET_FANOUT_HASH\n\t// It appears that defrag only works with FanoutHash, see:\n\t// http://lxr.free-electrons.com/source/net/packet/af_packet.c#L1204\n\tFanoutHashWithDefrag FanoutType = unix.PACKET_FANOUT_FLAG_DEFRAG\n\tFanoutLoadBalance    FanoutType = unix.PACKET_FANOUT_LB\n\tFanoutCPU            FanoutType = unix.PACKET_FANOUT_CPU\n\tFanoutRollover       FanoutType = unix.PACKET_FANOUT_ROLLOVER\n\tFanoutRandom         FanoutType = unix.PACKET_FANOUT_RND\n\tFanoutQueueMapping   FanoutType = unix.PACKET_FANOUT_QM\n\tFanoutCBPF           FanoutType = unix.PACKET_FANOUT_CBPF\n\tFanoutEBPF           FanoutType = unix.PACKET_FANOUT_EBPF\n)\n\n// SetFanout activates TPacket's fanout ability.\n// Use of Fanout requires creating multiple TPacket objects and the same id/type to\n// a SetFanout call on each.  Note that this can be done cross-process, so if two\n// different processes both call SetFanout with the same type/id, they'll share\n// packets between them.  The same should work for multiple TPacket objects within\n// the same process.\nfunc (h *TPacket) SetFanout(t FanoutType, id uint16) error {\n\th.mu.Lock()\n\tdefer h.mu.Unlock()\n\targ := C.int(t) << 16\n\targ |= C.int(id)\n\treturn setsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_FANOUT, unsafe.Pointer(&arg), unsafe.Sizeof(arg))\n}\n\n// WritePacketData transmits a raw packet.\nfunc (h *TPacket) WritePacketData(pkt []byte) error {\n\t_, err := unix.Write(h.fd, pkt)\n\treturn err\n}\n"
  },
  {
    "path": "afpacket/afpacket_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build linux\n\npackage afpacket\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n)\n\nfunc TestParseOptions(t *testing.T) {\n\twanted1 := defaultOpts\n\twanted1.frameSize = 1 << 10\n\twanted1.framesPerBlock = wanted1.blockSize / wanted1.frameSize\n\tfor i, test := range []struct {\n\t\topts []interface{}\n\t\twant options\n\t\terr  bool\n\t}{\n\t\t{opts: []interface{}{OptBlockSize(2)}, err: true},\n\t\t{opts: []interface{}{OptFrameSize(333)}, err: true},\n\t\t{opts: []interface{}{OptTPacketVersion(-3)}, err: true},\n\t\t{opts: []interface{}{OptTPacketVersion(5)}, err: true},\n\t\t{opts: []interface{}{OptFrameSize(1 << 10)}, want: wanted1},\n\t} {\n\t\tgot, err := parseOptions(test.opts...)\n\t\tt.Logf(\"got: %#v\\nerr: %v\", got, err)\n\t\tif test.err && err == nil || !test.err && err != nil {\n\t\t\tt.Errorf(\"%d error mismatch, want error? %v.  error: %v\", i, test.err, err)\n\t\t}\n\t\tif !test.err && !reflect.DeepEqual(test.want, got) {\n\t\t\tt.Errorf(\"%d opts mismatch, want\\n%#v\", i, test.want)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "afpacket/header.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build linux\n\npackage afpacket\n\nimport (\n\t\"reflect\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// #include <linux/if_packet.h>\n// #include <linux/if_ether.h>\n// #define VLAN_HLEN\t4\nimport \"C\"\n\n// Our model of handling all TPacket versions is a little hacky, to say the\n// least.  We use the header interface to handle interactions with the\n// tpacket1/tpacket2 packet header AND the tpacket3 block header.  The big\n// difference is that tpacket3's block header implements the next() call to get\n// the next packet within the block, while v1/v2 just always return false.\n\ntype header interface {\n\t// getStatus returns the TPacket status of the current header.\n\tgetStatus() int\n\t// clearStatus clears the status of the current header, releasing its\n\t// underlying data back to the kernel for future use with new packets.\n\t// Using the header after calling clearStatus is an error.  clearStatus\n\t// should only be called after next() returns false.\n\tclearStatus()\n\t// getTime returns the timestamp for the current packet pointed to by\n\t// the header.\n\tgetTime() time.Time\n\t// getData returns the packet data pointed to by the current header.\n\tgetData(opts *options) []byte\n\t// getLength returns the total length of the packet.\n\tgetLength() int\n\t// getIfaceIndex returns the index of the network interface\n\t// where the packet was seen. The index can later be translated to a name.\n\tgetIfaceIndex() int\n\t// getVLAN returns the VLAN of a packet if it was provided out-of-band\n\tgetVLAN() int\n\t// next moves this header to point to the next packet it contains,\n\t// returning true on success (in which case getTime and getData will\n\t// return values for the new packet) or false if there are no more\n\t// packets (in which case clearStatus should be called).\n\tnext() bool\n}\n\nconst tpacketAlignment = uint(unix.TPACKET_ALIGNMENT)\n\nfunc tpAlign(x int) int {\n\treturn int((uint(x) + tpacketAlignment - 1) &^ (tpacketAlignment - 1))\n}\n\ntype v1header C.struct_tpacket_hdr\ntype v2header C.struct_tpacket2_hdr\n\nfunc makeSlice(start uintptr, length int) (data []byte) {\n\tslice := (*reflect.SliceHeader)(unsafe.Pointer(&data))\n\tslice.Data = start\n\tslice.Len = length\n\tslice.Cap = length\n\treturn\n}\n\nfunc insertVlanHeader(data []byte, vlanTCI int, opts *options) []byte {\n\tif vlanTCI == 0 || !opts.addVLANHeader {\n\t\treturn data\n\t}\n\teth := make([]byte, 0, len(data)+C.VLAN_HLEN)\n\teth = append(eth, data[0:C.ETH_ALEN*2]...)\n\teth = append(eth, []byte{0x81, 0, byte((vlanTCI >> 8) & 0xff), byte(vlanTCI & 0xff)}...)\n\treturn append(eth, data[C.ETH_ALEN*2:]...)\n}\n\nfunc (h *v1header) getVLAN() int {\n\treturn -1\n}\nfunc (h *v1header) getStatus() int {\n\treturn int(h.tp_status)\n}\nfunc (h *v1header) clearStatus() {\n\th.tp_status = 0\n}\nfunc (h *v1header) getTime() time.Time {\n\treturn time.Unix(int64(h.tp_sec), int64(h.tp_usec)*1000)\n}\nfunc (h *v1header) getData(opts *options) []byte {\n\treturn makeSlice(uintptr(unsafe.Pointer(h))+uintptr(h.tp_mac), int(h.tp_snaplen))\n}\nfunc (h *v1header) getLength() int {\n\treturn int(h.tp_len)\n}\nfunc (h *v1header) getIfaceIndex() int {\n\tll := (*C.struct_sockaddr_ll)(unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(tpAlign(int(C.sizeof_struct_tpacket_hdr)))))\n\treturn int(ll.sll_ifindex)\n}\nfunc (h *v1header) next() bool {\n\treturn false\n}\n\nfunc (h *v2header) getVLAN() int {\n\treturn -1\n}\nfunc (h *v2header) getStatus() int {\n\treturn int(h.tp_status)\n}\nfunc (h *v2header) clearStatus() {\n\th.tp_status = 0\n}\nfunc (h *v2header) getTime() time.Time {\n\treturn time.Unix(int64(h.tp_sec), int64(h.tp_nsec))\n}\nfunc (h *v2header) getData(opts *options) []byte {\n\tdata := makeSlice(uintptr(unsafe.Pointer(h))+uintptr(h.tp_mac), int(h.tp_snaplen))\n\treturn insertVlanHeader(data, int(h.tp_vlan_tci), opts)\n}\nfunc (h *v2header) getLength() int {\n\treturn int(h.tp_len)\n}\nfunc (h *v2header) getIfaceIndex() int {\n\tll := (*C.struct_sockaddr_ll)(unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(tpAlign(int(C.sizeof_struct_tpacket2_hdr)))))\n\treturn int(ll.sll_ifindex)\n}\nfunc (h *v2header) next() bool {\n\treturn false\n}\n\ntype v3wrapper struct {\n\tblock    *C.struct_tpacket_block_desc\n\tblockhdr *C.struct_tpacket_hdr_v1\n\tpacket   *C.struct_tpacket3_hdr\n\tused     C.__u32\n}\n\nfunc initV3Wrapper(block unsafe.Pointer) (w v3wrapper) {\n\tw.block = (*C.struct_tpacket_block_desc)(block)\n\tw.blockhdr = (*C.struct_tpacket_hdr_v1)(unsafe.Pointer(&w.block.hdr[0]))\n\tw.packet = (*C.struct_tpacket3_hdr)(unsafe.Pointer(uintptr(block) + uintptr(w.blockhdr.offset_to_first_pkt)))\n\treturn\n}\n\nfunc (w *v3wrapper) getVLAN() int {\n\tif w.packet.tp_status&unix.TP_STATUS_VLAN_VALID != 0 {\n\t\thv1 := (*C.struct_tpacket_hdr_variant1)(unsafe.Pointer(&w.packet.anon0[0]))\n\t\treturn int(hv1.tp_vlan_tci & 0xfff)\n\t}\n\treturn -1\n}\n\nfunc (w *v3wrapper) getStatus() int {\n\treturn int(w.blockhdr.block_status)\n}\nfunc (w *v3wrapper) clearStatus() {\n\tw.blockhdr.block_status = 0\n}\nfunc (w *v3wrapper) getTime() time.Time {\n\treturn time.Unix(int64(w.packet.tp_sec), int64(w.packet.tp_nsec))\n}\nfunc (w *v3wrapper) getData(opts *options) []byte {\n\tdata := makeSlice(uintptr(unsafe.Pointer(w.packet))+uintptr(w.packet.tp_mac), int(w.packet.tp_snaplen))\n\n\thv1 := (*C.struct_tpacket_hdr_variant1)(unsafe.Pointer(&w.packet.anon0[0]))\n\treturn insertVlanHeader(data, int(hv1.tp_vlan_tci), opts)\n}\nfunc (w *v3wrapper) getLength() int {\n\treturn int(w.packet.tp_len)\n}\nfunc (w *v3wrapper) getIfaceIndex() int {\n\tll := (*C.struct_sockaddr_ll)(unsafe.Pointer(uintptr(unsafe.Pointer(w.packet)) + uintptr(tpAlign(int(C.sizeof_struct_tpacket3_hdr)))))\n\treturn int(ll.sll_ifindex)\n}\nfunc (w *v3wrapper) next() bool {\n\tw.used++\n\tif w.used >= w.blockhdr.num_pkts {\n\t\treturn false\n\t}\n\n\tnext := uintptr(unsafe.Pointer(w.packet))\n\tif w.packet.tp_next_offset != 0 {\n\t\tnext += uintptr(w.packet.tp_next_offset)\n\t} else {\n\t\tnext += uintptr(tpAlign(int(w.packet.tp_snaplen) + int(w.packet.tp_mac)))\n\t}\n\tw.packet = (*C.struct_tpacket3_hdr)(unsafe.Pointer(next))\n\treturn true\n}\n"
  },
  {
    "path": "afpacket/options.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build linux\n\npackage afpacket\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// OptTPacketVersion is the version of TPacket to use.\n// It can be passed into NewTPacket.\ntype OptTPacketVersion int\n\n// String returns a string representation of the version, generally of the form V#.\nfunc (t OptTPacketVersion) String() string {\n\tswitch t {\n\tcase TPacketVersion1:\n\t\treturn \"V1\"\n\tcase TPacketVersion2:\n\t\treturn \"V2\"\n\tcase TPacketVersion3:\n\t\treturn \"V3\"\n\tcase TPacketVersionHighestAvailable:\n\t\treturn \"HighestAvailable\"\n\t}\n\treturn \"InvalidVersion\"\n}\n\n// OptSocketType is the socket type used to open the TPacket socket.\ntype OptSocketType int\n\nfunc (t OptSocketType) String() string {\n\tswitch t {\n\tcase SocketRaw:\n\t\treturn \"SOCK_RAW\"\n\tcase SocketDgram:\n\t\treturn \"SOCK_DGRAM\"\n\t}\n\treturn \"UnknownSocketType\"\n}\n\n// TPacket version numbers for use with NewHandle.\nconst (\n\t// TPacketVersionHighestAvailable tells NewHandle to use the highest available version of tpacket the kernel has available.\n\t// This is the default, should a version number not be given in NewHandle's options.\n\tTPacketVersionHighestAvailable = OptTPacketVersion(-1)\n\tTPacketVersion1                = OptTPacketVersion(unix.TPACKET_V1)\n\tTPacketVersion2                = OptTPacketVersion(unix.TPACKET_V2)\n\tTPacketVersion3                = OptTPacketVersion(unix.TPACKET_V3)\n\ttpacketVersionMax              = TPacketVersion3\n\ttpacketVersionMin              = -1\n\t// SocketRaw is the default socket type.  It returns packet data\n\t// including the link layer (ethernet headers, etc).\n\tSocketRaw = OptSocketType(unix.SOCK_RAW)\n\t// SocketDgram strips off the link layer when reading packets, and adds\n\t// the link layer back automatically on packet writes (coming soon...)\n\tSocketDgram = OptSocketType(unix.SOCK_DGRAM)\n)\n\n// OptInterface is the specific interface to bind to.\n// It can be passed into NewTPacket.\ntype OptInterface string\n\n// OptFrameSize is TPacket's tp_frame_size\n// It can be passed into NewTPacket.\ntype OptFrameSize int\n\n// OptBlockSize is TPacket's tp_block_size\n// It can be passed into NewTPacket.\ntype OptBlockSize int\n\n// OptNumBlocks is TPacket's tp_block_nr\n// It can be passed into NewTPacket.\ntype OptNumBlocks int\n\n// OptBlockTimeout is TPacket v3's tp_retire_blk_tov.  Note that it has only millisecond granularity, so must be >= 1 ms.\n// It can be passed into NewTPacket.\ntype OptBlockTimeout time.Duration\n\n// OptPollTimeout is the number of milliseconds that poll() should block waiting  for a file\n// descriptor to become ready. Specifying a negative value in  time‐out means an infinite timeout.\ntype OptPollTimeout time.Duration\n\n// OptAddVLANHeader modifies the packet data that comes back from the\n// kernel by adding in the VLAN header that the NIC stripped.  AF_PACKET by\n// default uses VLAN offloading, in which the NIC strips the VLAN header off of\n// the packet before handing it to the kernel.  This means that, even if a\n// packet has an 802.1q header on the wire, it'll show up without one by the\n// time it goes through AF_PACKET.  If this option is true, the VLAN header is\n// added back in before the packet is returned.  Note that this potentially has\n// a large performance hit, especially in otherwise zero-copy operation.\n//\n// Note that if you do not need to have a \"real\" VLAN layer, it may be\n// preferable to use the VLAN ID provided by the AncillaryVLAN struct\n// in CaptureInfo.AncillaryData, which is populated out-of-band and has\n// negligible performance impact. Such ancillary data will automatically\n// be provided if available.\ntype OptAddVLANHeader bool\n\n// Default constants used by options.\nconst (\n\tDefaultFrameSize    = 4096                   // Default value for OptFrameSize.\n\tDefaultBlockSize    = DefaultFrameSize * 128 // Default value for OptBlockSize.\n\tDefaultNumBlocks    = 128                    // Default value for OptNumBlocks.\n\tDefaultBlockTimeout = 64 * time.Millisecond  // Default value for OptBlockTimeout.\n\tDefaultPollTimeout  = -1 * time.Millisecond  // Default value for OptPollTimeout. This blocks forever.\n)\n\ntype options struct {\n\tframeSize      int\n\tframesPerBlock int\n\tblockSize      int\n\tnumBlocks      int\n\taddVLANHeader  bool\n\tblockTimeout   time.Duration\n\tpollTimeout    time.Duration\n\tversion        OptTPacketVersion\n\tsocktype       OptSocketType\n\tiface          string\n}\n\nvar defaultOpts = options{\n\tframeSize:    DefaultFrameSize,\n\tblockSize:    DefaultBlockSize,\n\tnumBlocks:    DefaultNumBlocks,\n\tblockTimeout: DefaultBlockTimeout,\n\tpollTimeout:  DefaultPollTimeout,\n\tversion:      TPacketVersionHighestAvailable,\n\tsocktype:     SocketRaw,\n}\n\nfunc parseOptions(opts ...interface{}) (ret options, err error) {\n\tret = defaultOpts\n\tfor _, opt := range opts {\n\t\tswitch v := opt.(type) {\n\t\tcase OptFrameSize:\n\t\t\tret.frameSize = int(v)\n\t\tcase OptBlockSize:\n\t\t\tret.blockSize = int(v)\n\t\tcase OptNumBlocks:\n\t\t\tret.numBlocks = int(v)\n\t\tcase OptBlockTimeout:\n\t\t\tret.blockTimeout = time.Duration(v)\n\t\tcase OptPollTimeout:\n\t\t\tret.pollTimeout = time.Duration(v)\n\t\tcase OptTPacketVersion:\n\t\t\tret.version = v\n\t\tcase OptInterface:\n\t\t\tret.iface = string(v)\n\t\tcase OptSocketType:\n\t\t\tret.socktype = v\n\t\tcase OptAddVLANHeader:\n\t\t\tret.addVLANHeader = bool(v)\n\t\tdefault:\n\t\t\terr = errors.New(\"unknown type in options\")\n\t\t\treturn\n\t\t}\n\t}\n\tif err = ret.check(); err != nil {\n\t\treturn\n\t}\n\tret.framesPerBlock = ret.blockSize / ret.frameSize\n\treturn\n}\nfunc (o options) check() error {\n\tswitch {\n\tcase o.blockSize%pageSize != 0:\n\t\treturn fmt.Errorf(\"block size %d must be divisible by page size %d\", o.blockSize, pageSize)\n\tcase o.blockSize%o.frameSize != 0:\n\t\treturn fmt.Errorf(\"block size %d must be divisible by frame size %d\", o.blockSize, o.frameSize)\n\tcase o.numBlocks < 1:\n\t\treturn fmt.Errorf(\"num blocks %d must be >= 1\", o.numBlocks)\n\tcase o.blockTimeout < time.Millisecond:\n\t\treturn fmt.Errorf(\"block timeout %v must be > %v\", o.blockTimeout, time.Millisecond)\n\tcase o.version < tpacketVersionMin || o.version > tpacketVersionMax:\n\t\treturn fmt.Errorf(\"tpacket version %v is invalid\", o.version)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "afpacket/sockopt_linux.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build linux\n\npackage afpacket\n\nimport (\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// setsockopt provides access to the setsockopt syscall.\nfunc setsockopt(fd, level, name int, val unsafe.Pointer, vallen uintptr) error {\n\t_, _, errno := unix.Syscall6(\n\t\tunix.SYS_SETSOCKOPT,\n\t\tuintptr(fd),\n\t\tuintptr(level),\n\t\tuintptr(name),\n\t\tuintptr(val),\n\t\tvallen,\n\t\t0,\n\t)\n\tif errno != 0 {\n\t\treturn error(errno)\n\t}\n\n\treturn nil\n}\n\n// getsockopt provides access to the getsockopt syscall.\nfunc getsockopt(fd, level, name int, val unsafe.Pointer, vallen uintptr) error {\n\t_, _, errno := unix.Syscall6(\n\t\tunix.SYS_GETSOCKOPT,\n\t\tuintptr(fd),\n\t\tuintptr(level),\n\t\tuintptr(name),\n\t\tuintptr(val),\n\t\tvallen,\n\t\t0,\n\t)\n\tif errno != 0 {\n\t\treturn error(errno)\n\t}\n\n\treturn nil\n}\n\n// htons converts a short (uint16) from host-to-network byte order.\n// Thanks to mikioh for this neat trick:\n// https://github.com/mikioh/-stdyng/blob/master/afpacket.go\nfunc htons(i uint16) uint16 {\n\treturn (i<<8)&0xff00 | i>>8\n}\n"
  },
  {
    "path": "base.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage gopacket\n\nimport (\n\t\"fmt\"\n)\n\n// Layer represents a single decoded packet layer (using either the\n// OSI or TCP/IP definition of a layer).  When decoding, a packet's data is\n// broken up into a number of layers.  The caller may call LayerType() to\n// figure out which type of layer they've received from the packet.  Optionally,\n// they may then use a type assertion to get the actual layer type for deep\n// inspection of the data.\ntype Layer interface {\n\t// LayerType is the gopacket type for this layer.\n\tLayerType() LayerType\n\t// LayerContents returns the set of bytes that make up this layer.\n\tLayerContents() []byte\n\t// LayerPayload returns the set of bytes contained within this layer, not\n\t// including the layer itself.\n\tLayerPayload() []byte\n}\n\n// Payload is a Layer containing the payload of a packet.  The definition of\n// what constitutes the payload of a packet depends on previous layers; for\n// TCP and UDP, we stop decoding above layer 4 and return the remaining\n// bytes as a Payload.  Payload is an ApplicationLayer.\ntype Payload []byte\n\n// LayerType returns LayerTypePayload\nfunc (p Payload) LayerType() LayerType { return LayerTypePayload }\n\n// LayerContents returns the bytes making up this layer.\nfunc (p Payload) LayerContents() []byte { return []byte(p) }\n\n// LayerPayload returns the payload within this layer.\nfunc (p Payload) LayerPayload() []byte { return nil }\n\n// Payload returns this layer as bytes.\nfunc (p Payload) Payload() []byte { return []byte(p) }\n\n// String implements fmt.Stringer.\nfunc (p Payload) String() string { return fmt.Sprintf(\"%d byte(s)\", len(p)) }\n\n// GoString implements fmt.GoStringer.\nfunc (p Payload) GoString() string { return LongBytesGoString([]byte(p)) }\n\n// CanDecode implements DecodingLayer.\nfunc (p Payload) CanDecode() LayerClass { return LayerTypePayload }\n\n// NextLayerType implements DecodingLayer.\nfunc (p Payload) NextLayerType() LayerType { return LayerTypeZero }\n\n// DecodeFromBytes implements DecodingLayer.\nfunc (p *Payload) DecodeFromBytes(data []byte, df DecodeFeedback) error {\n\t*p = Payload(data)\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (p Payload) SerializeTo(b SerializeBuffer, opts SerializeOptions) error {\n\tbytes, err := b.PrependBytes(len(p))\n\tif err != nil {\n\t\treturn err\n\t}\n\tcopy(bytes, p)\n\treturn nil\n}\n\n// decodePayload decodes data by returning it all in a Payload layer.\nfunc decodePayload(data []byte, p PacketBuilder) error {\n\tpayload := &Payload{}\n\tif err := payload.DecodeFromBytes(data, p); err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(payload)\n\tp.SetApplicationLayer(payload)\n\treturn nil\n}\n\n// Fragment is a Layer containing a fragment of a larger frame, used by layers\n// like IPv4 and IPv6 that allow for fragmentation of their payloads.\ntype Fragment []byte\n\n// LayerType returns LayerTypeFragment\nfunc (p *Fragment) LayerType() LayerType { return LayerTypeFragment }\n\n// LayerContents implements Layer.\nfunc (p *Fragment) LayerContents() []byte { return []byte(*p) }\n\n// LayerPayload implements Layer.\nfunc (p *Fragment) LayerPayload() []byte { return nil }\n\n// Payload returns this layer as a byte slice.\nfunc (p *Fragment) Payload() []byte { return []byte(*p) }\n\n// String implements fmt.Stringer.\nfunc (p *Fragment) String() string { return fmt.Sprintf(\"%d byte(s)\", len(*p)) }\n\n// CanDecode implements DecodingLayer.\nfunc (p *Fragment) CanDecode() LayerClass { return LayerTypeFragment }\n\n// NextLayerType implements DecodingLayer.\nfunc (p *Fragment) NextLayerType() LayerType { return LayerTypeZero }\n\n// DecodeFromBytes implements DecodingLayer.\nfunc (p *Fragment) DecodeFromBytes(data []byte, df DecodeFeedback) error {\n\t*p = Fragment(data)\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (p *Fragment) SerializeTo(b SerializeBuffer, opts SerializeOptions) error {\n\tbytes, err := b.PrependBytes(len(*p))\n\tif err != nil {\n\t\treturn err\n\t}\n\tcopy(bytes, *p)\n\treturn nil\n}\n\n// decodeFragment decodes data by returning it all in a Fragment layer.\nfunc decodeFragment(data []byte, p PacketBuilder) error {\n\tpayload := &Fragment{}\n\tif err := payload.DecodeFromBytes(data, p); err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(payload)\n\tp.SetApplicationLayer(payload)\n\treturn nil\n}\n\n// These layers correspond to Internet Protocol Suite (TCP/IP) layers, and their\n// corresponding OSI layers, as best as possible.\n\n// LinkLayer is the packet layer corresponding to TCP/IP layer 1 (OSI layer 2)\ntype LinkLayer interface {\n\tLayer\n\tLinkFlow() Flow\n}\n\n// NetworkLayer is the packet layer corresponding to TCP/IP layer 2 (OSI\n// layer 3)\ntype NetworkLayer interface {\n\tLayer\n\tNetworkFlow() Flow\n}\n\n// TransportLayer is the packet layer corresponding to the TCP/IP layer 3 (OSI\n// layer 4)\ntype TransportLayer interface {\n\tLayer\n\tTransportFlow() Flow\n}\n\n// ApplicationLayer is the packet layer corresponding to the TCP/IP layer 4 (OSI\n// layer 7), also known as the packet payload.\ntype ApplicationLayer interface {\n\tLayer\n\tPayload() []byte\n}\n\n// ErrorLayer is a packet layer created when decoding of the packet has failed.\n// Its payload is all the bytes that we were unable to decode, and the returned\n// error details why the decoding failed.\ntype ErrorLayer interface {\n\tLayer\n\tError() error\n}\n"
  },
  {
    "path": "benchmark_test.go",
    "content": "// Copyright 2012, Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage gopacket\n\nimport (\n\t\"runtime\"\n\t\"testing\"\n)\n\n// A few benchmarks for figuring out exactly how fast some underlying Go\n// things are.\n\ntype testError struct{}\n\nfunc (t *testError) Error() string { return \"abc\" }\n\nfunc BenchmarkTypeAssertion(b *testing.B) {\n\tvar e error = &testError{}\n\tfor i := 0; i < b.N; i++ {\n\t\t_, _ = e.(*testError)\n\t}\n}\n\nfunc BenchmarkMapLookup(b *testing.B) {\n\tm := map[LayerType]bool{\n\t\tLayerTypePayload: true,\n\t}\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = m[LayerTypePayload]\n\t}\n}\n\nfunc BenchmarkNilMapLookup(b *testing.B) {\n\tvar m map[LayerType]bool\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = m[LayerTypePayload]\n\t}\n}\n\nfunc BenchmarkNilMapLookupWithNilCheck(b *testing.B) {\n\tvar m map[LayerType]bool\n\tfor i := 0; i < b.N; i++ {\n\t\tif m != nil {\n\t\t\t_ = m[LayerTypePayload]\n\t\t}\n\t}\n}\n\nfunc BenchmarkArrayLookup(b *testing.B) {\n\tm := make([]bool, 100)\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = m[LayerTypePayload]\n\t}\n}\n\nvar testError1 = &testError{}\nvar testError2 error = testError1\n\nfunc BenchmarkTypeToInterface1(b *testing.B) {\n\tvar e error\n\tfor i := 0; i < b.N; i++ {\n\t\te = testError1\n\t}\n\t// Have to do someting with 'e' or the compiler complains about an unused\n\t// variable.\n\ttestError2 = e\n}\nfunc BenchmarkTypeToInterface2(b *testing.B) {\n\tvar e error\n\tfor i := 0; i < b.N; i++ {\n\t\te = testError2\n\t}\n\t// Have to do someting with 'e' or the compiler complains about an unused\n\t// variable.\n\ttestError2 = e\n}\n\nvar decodeOpts DecodeOptions\n\nfunc decodeOptsByValue(_ DecodeOptions)    {}\nfunc decodeOptsByPointer(_ *DecodeOptions) {}\nfunc BenchmarkPassDecodeOptionsByValue(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tdecodeOptsByValue(decodeOpts)\n\t}\n}\nfunc BenchmarkPassDecodeOptionsByPointer(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tdecodeOptsByPointer(&decodeOpts)\n\t}\n}\n\nfunc BenchmarkLockOSThread(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\truntime.LockOSThread()\n\t}\n}\nfunc BenchmarkUnlockOSThread(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\truntime.UnlockOSThread()\n\t}\n}\nfunc lockUnlock() {\n\truntime.LockOSThread()\n\truntime.UnlockOSThread()\n}\nfunc lockDeferUnlock() {\n\truntime.LockOSThread()\n\tdefer runtime.UnlockOSThread()\n}\nfunc BenchmarkLockUnlockOSThread(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tlockUnlock()\n\t}\n}\nfunc BenchmarkLockDeferUnlockOSThread(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tlockDeferUnlock()\n\t}\n}\n\nfunc BenchmarkUnbufferedChannel(b *testing.B) {\n\tca := make(chan bool)\n\tcb := make(chan bool)\n\tdefer close(ca)\n\tgo func() {\n\t\tdefer close(cb)\n\t\tfor range ca {\n\t\t\tcb <- true\n\t\t}\n\t}()\n\tfor i := 0; i < b.N; i++ {\n\t\tca <- true\n\t\t<-cb\n\t}\n}\nfunc BenchmarkSmallBufferedChannel(b *testing.B) {\n\tca := make(chan bool, 1)\n\tcb := make(chan bool, 1)\n\tdefer close(ca)\n\tgo func() {\n\t\tdefer close(cb)\n\t\tfor range ca {\n\t\t\tcb <- true\n\t\t}\n\t}()\n\tfor i := 0; i < b.N; i++ {\n\t\tca <- true\n\t\t<-cb\n\t}\n}\nfunc BenchmarkLargeBufferedChannel(b *testing.B) {\n\tca := make(chan bool, 1000)\n\tcb := make(chan bool, 1000)\n\tdefer close(ca)\n\tgo func() {\n\t\tdefer close(cb)\n\t\tfor range ca {\n\t\t\tcb <- true\n\t\t}\n\t}()\n\tfor i := 0; i < b.N; i++ {\n\t\tca <- true\n\t\t<-cb\n\t}\n}\nfunc BenchmarkEndpointFastHashShort(b *testing.B) {\n\te := Endpoint{typ: 1, len: 2}\n\tfor i := 0; i < b.N; i++ {\n\t\te.FastHash()\n\t}\n}\nfunc BenchmarkEndpointFastHashLong(b *testing.B) {\n\te := Endpoint{typ: 1, len: 16}\n\tfor i := 0; i < b.N; i++ {\n\t\te.FastHash()\n\t}\n}\nfunc BenchmarkFlowFastHashShort(b *testing.B) {\n\te := Flow{typ: 1, slen: 2, dlen: 2}\n\tfor i := 0; i < b.N; i++ {\n\t\te.FastHash()\n\t}\n}\nfunc BenchmarkFlowFastHashLong(b *testing.B) {\n\te := Flow{typ: 1, slen: 16, dlen: 16}\n\tfor i := 0; i < b.N; i++ {\n\t\te.FastHash()\n\t}\n}\n"
  },
  {
    "path": "bsdbpf/bsd_bpf_sniffer.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build darwin dragonfly freebsd netbsd openbsd\n\npackage bsdbpf\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/google/gopacket\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst wordSize = int(unsafe.Sizeof(uintptr(0)))\n\nfunc bpfWordAlign(x int) int {\n\treturn (((x) + (wordSize - 1)) &^ (wordSize - 1))\n}\n\n// Options is used to configure various properties of the BPF sniffer.\n// Default values are used when a nil Options pointer is passed to NewBPFSniffer.\ntype Options struct {\n\t// BPFDeviceName is name of the bpf device to use for sniffing\n\t// the network device. The default value of BPFDeviceName is empty string\n\t// which causes the first available BPF device file /dev/bpfX to be used.\n\tBPFDeviceName string\n\t// ReadBufLen specifies the size of the buffer used to read packets\n\t// off the wire such that multiple packets are buffered with each read syscall.\n\t// Note that an individual packet larger than the buffer size is necessarily truncated.\n\t// A larger buffer should increase performance because fewer read syscalls would be made.\n\t// If zero is used, the system's default buffer length will be used which depending on the\n\t// system may default to 4096 bytes which is not big enough to accomodate some link layers\n\t// such as WLAN (802.11).\n\t// ReadBufLen defaults to 32767... however typical BSD manual pages for BPF indicate that\n\t// if the requested buffer size cannot be accommodated, the closest allowable size will be\n\t// set and returned... hence our GetReadBufLen method.\n\tReadBufLen int\n\t// Timeout is the length of time to wait before timing out on a read request.\n\t// Timeout defaults to nil which means no timeout is used.\n\tTimeout *syscall.Timeval\n\t// Promisc is set to true for promiscuous mode ethernet sniffing.\n\t// Promisc defaults to true.\n\tPromisc bool\n\t// Immediate is set to true to make our read requests return as soon as a packet becomes available.\n\t// Otherwise, a read will block until either the kernel buffer becomes full or a timeout occurs.\n\t// The default is true.\n\tImmediate bool\n\t// PreserveLinkAddr is set to false if the link level source address should be filled in automatically\n\t// by the interface output routine. Set to true if the link level source address will be written,\n\t// as provided, to the wire.\n\t// The default is true.\n\tPreserveLinkAddr bool\n}\n\nvar defaultOptions = Options{\n\tBPFDeviceName:    \"\",\n\tReadBufLen:       32767,\n\tTimeout:          nil,\n\tPromisc:          true,\n\tImmediate:        true,\n\tPreserveLinkAddr: true,\n}\n\n// BPFSniffer is a struct used to track state of a BSD BPF ethernet sniffer\n// such that gopacket's PacketDataSource interface is implemented.\ntype BPFSniffer struct {\n\toptions           *Options\n\tsniffDeviceName   string\n\tfd                int\n\treadBuffer        []byte\n\tlastReadLen       int\n\treadBytesConsumed int\n}\n\n// NewBPFSniffer is used to create BSD-only BPF ethernet sniffer\n// iface is the network interface device name that you wish to sniff\n// options can set to nil in order to utilize default values for everything.\n// Each field of Options also have a default setting if left unspecified by\n// the user's custome Options struct.\nfunc NewBPFSniffer(iface string, options *Options) (*BPFSniffer, error) {\n\tvar err error\n\tenable := 1\n\tsniffer := BPFSniffer{\n\t\tsniffDeviceName: iface,\n\t}\n\tif options == nil {\n\t\tsniffer.options = &defaultOptions\n\t} else {\n\t\tsniffer.options = options\n\t}\n\n\tif sniffer.options.BPFDeviceName == \"\" {\n\t\tsniffer.pickBpfDevice()\n\t}\n\n\t// setup our read buffer\n\tif sniffer.options.ReadBufLen == 0 {\n\t\tsniffer.options.ReadBufLen, err = syscall.BpfBuflen(sniffer.fd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t} else {\n\t\tsniffer.options.ReadBufLen, err = syscall.SetBpfBuflen(sniffer.fd, sniffer.options.ReadBufLen)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tsniffer.readBuffer = make([]byte, sniffer.options.ReadBufLen)\n\n\terr = syscall.SetBpfInterface(sniffer.fd, sniffer.sniffDeviceName)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif sniffer.options.Immediate {\n\t\t// turn immediate mode on. This makes the snffer non-blocking.\n\t\terr = syscall.SetBpfImmediate(sniffer.fd, enable)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// the above call to syscall.SetBpfImmediate needs to be made\n\t// before setting a timer otherwise the reads will block for the\n\t// entire timer duration even if there are packets to return.\n\tif sniffer.options.Timeout != nil {\n\t\terr = syscall.SetBpfTimeout(sniffer.fd, sniffer.options.Timeout)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif sniffer.options.PreserveLinkAddr {\n\t\t// preserves the link level source address...\n\t\t// higher level protocol analyzers will not need this\n\t\terr = syscall.SetBpfHeadercmpl(sniffer.fd, enable)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif sniffer.options.Promisc {\n\t\t// forces the interface into promiscuous mode\n\t\terr = syscall.SetBpfPromisc(sniffer.fd, enable)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn &sniffer, nil\n}\n\n// Close is used to close the file-descriptor of the BPF device file.\nfunc (b *BPFSniffer) Close() error {\n\treturn syscall.Close(b.fd)\n}\n\nfunc (b *BPFSniffer) pickBpfDevice() {\n\tvar err error\n\tb.options.BPFDeviceName = \"\"\n\tfor i := 0; i < 99; i++ {\n\t\tb.options.BPFDeviceName = fmt.Sprintf(\"/dev/bpf%d\", i)\n\t\tb.fd, err = syscall.Open(b.options.BPFDeviceName, syscall.O_RDWR, 0)\n\t\tif err == nil {\n\t\t\treturn\n\t\t}\n\t}\n\tpanic(\"failed to acquire a BPF device for read-write access\")\n}\n\nfunc (b *BPFSniffer) ReadPacketData() ([]byte, gopacket.CaptureInfo, error) {\n\tvar err error\n\tif b.readBytesConsumed >= b.lastReadLen {\n\t\tb.readBytesConsumed = 0\n\t\tb.readBuffer = make([]byte, b.options.ReadBufLen)\n\t\tb.lastReadLen, err = syscall.Read(b.fd, b.readBuffer)\n\t\tif err != nil {\n\t\t\tb.lastReadLen = 0\n\t\t\treturn nil, gopacket.CaptureInfo{}, err\n\t\t}\n\t}\n\thdr := (*unix.BpfHdr)(unsafe.Pointer(&b.readBuffer[b.readBytesConsumed]))\n\tframeStart := b.readBytesConsumed + int(hdr.Hdrlen)\n\tb.readBytesConsumed += bpfWordAlign(int(hdr.Hdrlen) + int(hdr.Caplen))\n\n\tif frameStart+int(hdr.Caplen) > len(b.readBuffer) {\n\t\tcaptureInfo := gopacket.CaptureInfo{\n\t\t\tTimestamp:     time.Unix(int64(hdr.Tstamp.Sec), int64(hdr.Tstamp.Usec)*1000),\n\t\t\tCaptureLength: 0,\n\t\t\tLength:        0,\n\t\t}\n\t\treturn nil, captureInfo, errors.New(\"BPF captured frame received with corrupted BpfHdr struct.\")\n\t}\n\n\trawFrame := b.readBuffer[frameStart : frameStart+int(hdr.Caplen)]\n\tcaptureInfo := gopacket.CaptureInfo{\n\t\tTimestamp:     time.Unix(int64(hdr.Tstamp.Sec), int64(hdr.Tstamp.Usec)*1000),\n\t\tCaptureLength: len(rawFrame),\n\t\tLength:        len(rawFrame),\n\t}\n\treturn rawFrame, captureInfo, nil\n}\n\n// GetReadBufLen returns the BPF read buffer length\nfunc (b *BPFSniffer) GetReadBufLen() int {\n\treturn b.options.ReadBufLen\n}\n"
  },
  {
    "path": "bytediff/bytediff.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// Package bytediff provides a simple diff utility for looking at differences in byte\n// slices.  It's slow, clunky, and not particularly good by any measure, but\n// it does provide very useful visualizations for diffs between small byte\n// slices.\n//\n// Our diff algorithm uses a dynamic programming implementation of longest common\n// substring to find matching parts of slices, then recursively calls itself on\n// the prefix/suffix of that matching part for each packet.  This is a Bad Idea\n// (tm) for normal (especially large) input, but for packets where large portions\n// repeat frequently and we expect minor changes between results, it's actually\n// quite useful.\npackage bytediff\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\n// OutputFormat tells a Differences.String call how to format the set of\n// differences into a human-readable string.  Its internals are currently\n// unexported because we may want to change them drastically in the future.  For\n// the moment, please just use one of the provided OutputFormats that comes with\n// this library.\ntype OutputFormat struct {\n\tstart, finish, add, remove, change, reset string\n}\n\nvar (\n\t// BashOutput uses bash escape sequences to color output.\n\tBashOutput = &OutputFormat{\n\t\treset:  \"\\033[0m\",\n\t\tremove: \"\\033[32m\",\n\t\tadd:    \"\\033[31m\",\n\t\tchange: \"\\033[33m\",\n\t}\n\t// HTMLOutput uses a <pre> to wrap output, and <span>s to color it.\n\t// HTMLOutput is pretty experimental, so use at your own risk ;)\n\tHTMLOutput = &OutputFormat{\n\t\tstart:  \"<pre>\",\n\t\tfinish: \"</pre>\",\n\t\treset:  \"</span>\",\n\t\tremove: \"<span style='color:red'>\",\n\t\tadd:    \"<span style='color:green'>\",\n\t\tchange: \"<span style='color:yellow'>\",\n\t}\n)\n\n// longestCommonSubstring uses a O(MN) dynamic programming approach to find the\n// longest common substring in a set of slices.  It returns the index in each\n// slice at which the substring begins, plus the length of the commonality.\nfunc longestCommonSubstring(strA, strB []byte) (indexA, indexB, length int) {\n\tlenA, lenB := len(strA), len(strB)\n\tif lenA == 0 || lenB == 0 {\n\t\treturn 0, 0, 0\n\t}\n\tarr := make([][]int, lenA)\n\tfor i := 0; i < lenA; i++ {\n\t\tarr[i] = make([]int, lenB)\n\t}\n\tvar maxLength int\n\tvar maxA, maxB int\n\tfor a := 0; a < lenA; a++ {\n\t\tfor b := 0; b < lenB; b++ {\n\t\t\tif strA[a] == strB[b] {\n\t\t\t\tlength := 1\n\t\t\t\tif a > 0 && b > 0 {\n\t\t\t\t\tlength = arr[a-1][b-1] + 1\n\t\t\t\t}\n\t\t\t\tarr[a][b] = length\n\t\t\t\tif length > maxLength {\n\t\t\t\t\tmaxLength = length\n\t\t\t\t\tmaxA = a\n\t\t\t\t\tmaxB = b\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\ta, b := maxA, maxB\n\tfor a >= 0 && b >= 0 && strA[a] == strB[b] {\n\t\tindexA = a\n\t\tindexB = b\n\t\ta--\n\t\tb--\n\t\tlength++\n\t}\n\treturn\n}\n\n// Difference represents a single part of the data being diffed, containing\n// information about both the original and new values.\n// From and To are the sets of bytes in the original and the new byte slice.\n//   !Replace        implies  From == To (no change)\n//   len(To) == 0    implies  From is being deleted\n//   len(From) == 0  implies  To is being inserted\n//   else            implies  From is being replaced by To\ntype Difference struct {\n\tReplace  bool\n\tFrom, To []byte\n}\n\n// color returns the bash color for a given difference.\nfunc (c *OutputFormat) color(d Difference) string {\n\tswitch {\n\tcase !d.Replace:\n\t\treturn \"\"\n\tcase len(d.From) == 0:\n\t\treturn c.remove\n\tcase len(d.To) == 0:\n\t\treturn c.add\n\tdefault:\n\t\treturn c.change\n\t}\n}\n\n// Diff diffs strA and strB, returning a list of differences which\n// can be used to construct either the original or new string.\n//\n// Diff is optimized for comparing VERY SHORT slices.  It's meant for comparing\n// things like packets off the wire, not large files or the like.\n// As such, its runtime can be catastrophic if large inputs are passed in.\n// You've been warned.\nfunc Diff(strA, strB []byte) Differences {\n\tif len(strA) == 0 && len(strB) == 0 {\n\t\treturn nil\n\t}\n\tia, ib, l := longestCommonSubstring(strA, strB)\n\tif l == 0 {\n\t\treturn Differences{\n\t\t\tDifference{true, strA, strB},\n\t\t}\n\t}\n\tbeforeA, match, afterA := strA[:ia], strA[ia:ia+l], strA[ia+l:]\n\tbeforeB, afterB := strB[:ib], strB[ib+l:]\n\tvar diffs Differences\n\tdiffs = append(diffs, Diff(beforeA, beforeB)...)\n\tdiffs = append(diffs, Difference{false, match, match})\n\tdiffs = append(diffs, Diff(afterA, afterB)...)\n\treturn diffs\n}\n\n// Differences is a set of differences for a given diff'd pair of byte slices.\ntype Differences []Difference\n\n// String outputs a previously diff'd set of strings, showing differences\n// between them, highlighted by colors.\n//\n// The output format of this function is NOT guaranteed consistent, and may be\n// changed at any time by the library authors.  It's meant solely for human\n// consumption.\nfunc (c *OutputFormat) String(diffs Differences) string {\n\tvar buf bytes.Buffer\n\tcount := 0\n\tfmt.Fprintf(&buf, \"%s\", c.start)\n\tfmt.Fprintf(&buf, \"00000000 \")\n\tfor i := 0; i < len(diffs); i++ {\n\t\tdiff := diffs[i]\n\t\tcolor := c.color(diff)\n\t\treset := \"\"\n\t\tif color != \"\" {\n\t\t\treset = c.reset\n\t\t}\n\t\tfmt.Fprint(&buf, color)\n\t\tfor _, b := range diff.From {\n\t\t\tfmt.Fprintf(&buf, \" %02x\", b)\n\t\t\tcount++\n\t\t\tswitch count % 16 {\n\t\t\tcase 0:\n\t\t\t\tfmt.Fprintf(&buf, \"%v\\n%08x%v \", reset, count, color)\n\t\t\tcase 8:\n\t\t\t\tfmt.Fprintf(&buf, \" \")\n\t\t\t}\n\t\t}\n\t\tfmt.Fprint(&buf, reset)\n\t}\n\tfmt.Fprintf(&buf, \"\\n\\n00000000 \")\n\tcount = 0\n\tfor i := 0; i < len(diffs); i++ {\n\t\tdiff := diffs[i]\n\t\tstr := diff.From\n\t\tif diff.Replace {\n\t\t\tstr = diff.To\n\t\t}\n\t\tcolor := c.color(diff)\n\t\treset := \"\"\n\t\tif color != \"\" {\n\t\t\treset = c.reset\n\t\t}\n\t\tfmt.Fprint(&buf, color)\n\t\tfor _, b := range str {\n\t\t\tfmt.Fprintf(&buf, \" %02x\", b)\n\t\t\tcount++\n\t\t\tswitch count % 16 {\n\t\t\tcase 0:\n\t\t\t\tfmt.Fprintf(&buf, \"%v\\n%08x%v \", reset, count, color)\n\t\t\tcase 8:\n\t\t\t\tfmt.Fprintf(&buf, \" \")\n\t\t\t}\n\t\t}\n\t\tfmt.Fprint(&buf, reset)\n\t}\n\tfmt.Fprint(&buf, \"\\n\")\n\tfmt.Fprintf(&buf, \"%s\", c.finish)\n\treturn buf.String()\n}\n"
  },
  {
    "path": "bytediff/bytediff_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage bytediff\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n)\n\nfunc TestLCS(t *testing.T) {\n\tfor i, test := range []struct {\n\t\ta, b                   []byte\n\t\tindexA, indexB, length int\n\t}{\n\t\t{[]byte{1, 2, 3}, []byte{1, 2, 3}, 0, 0, 3},\n\t\t{[]byte{0, 1, 2, 3}, []byte{1, 2, 3, 4}, 1, 0, 3},\n\t\t{[]byte{0, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3}, []byte{1, 2, 3, 4}, 4, 0, 4},\n\t\t{[]byte{1, 2, 2, 3, 4}, []byte{1, 2, 3, 4}, 2, 1, 3},\n\t\t{[]byte{0, 1, 2, 3, 4}, []byte{1, 1, 2, 2, 3, 4}, 2, 3, 3},\n\t} {\n\t\tia, ib, l := longestCommonSubstring(test.a, test.b)\n\t\tif ia != test.indexA || ib != test.indexB || l != test.length {\n\t\t\tt.Errorf(\"%d: want (%d %d %d) got (%d %d %d)\", i, test.indexA, test.indexB, test.length, ia, ib, l)\n\t\t}\n\t}\n}\n\nfunc TestDiff(t *testing.T) {\n\tfor i, test := range []struct {\n\t\ta, b []byte\n\t\td    Differences\n\t}{\n\t\t{\n\t\t\t[]byte{0, 1, 2, 3, 4},\n\t\t\t[]byte{1, 1, 2, 2, 3, 4},\n\t\t\tDifferences{\n\t\t\t\tDifference{true, []byte{0}, []byte{}},\n\t\t\t\tDifference{false, []byte{1}, []byte{1}},\n\t\t\t\tDifference{true, []byte{}, []byte{1, 2}},\n\t\t\t\tDifference{false, []byte{2, 3, 4}, []byte{2, 3, 4}},\n\t\t\t},\n\t\t},\n\t} {\n\t\tdiffs := Diff(test.a, test.b)\n\t\tif !reflect.DeepEqual(diffs, test.d) {\n\t\t\tt.Errorf(\"%d want %v got %v\", i, test.d, diffs)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "decode.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage gopacket\n\nimport (\n\t\"errors\"\n)\n\n// DecodeFeedback is used by DecodingLayer layers to provide decoding metadata.\ntype DecodeFeedback interface {\n\t// SetTruncated should be called if during decoding you notice that a packet\n\t// is shorter than internal layer variables (HeaderLength, or the like) say it\n\t// should be.  It sets packet.Metadata().Truncated.\n\tSetTruncated()\n}\n\ntype nilDecodeFeedback struct{}\n\nfunc (nilDecodeFeedback) SetTruncated() {}\n\n// NilDecodeFeedback implements DecodeFeedback by doing nothing.\nvar NilDecodeFeedback DecodeFeedback = nilDecodeFeedback{}\n\n// PacketBuilder is used by layer decoders to store the layers they've decoded,\n// and to defer future decoding via NextDecoder.\n// Typically, the pattern for use is:\n//  func (m *myDecoder) Decode(data []byte, p PacketBuilder) error {\n//    if myLayer, err := myDecodingLogic(data); err != nil {\n//      return err\n//    } else {\n//      p.AddLayer(myLayer)\n//    }\n//    // maybe do this, if myLayer is a LinkLayer\n//    p.SetLinkLayer(myLayer)\n//    return p.NextDecoder(nextDecoder)\n//  }\ntype PacketBuilder interface {\n\tDecodeFeedback\n\t// AddLayer should be called by a decoder immediately upon successful\n\t// decoding of a layer.\n\tAddLayer(l Layer)\n\t// The following functions set the various specific layers in the final\n\t// packet.  Note that if many layers call SetX, the first call is kept and all\n\t// other calls are ignored.\n\tSetLinkLayer(LinkLayer)\n\tSetNetworkLayer(NetworkLayer)\n\tSetTransportLayer(TransportLayer)\n\tSetApplicationLayer(ApplicationLayer)\n\tSetErrorLayer(ErrorLayer)\n\t// NextDecoder should be called by a decoder when they're done decoding a\n\t// packet layer but not done with decoding the entire packet.  The next\n\t// decoder will be called to decode the last AddLayer's LayerPayload.\n\t// Because of this, NextDecoder must only be called once all other\n\t// PacketBuilder calls have been made.  Set*Layer and AddLayer calls after\n\t// NextDecoder calls will behave incorrectly.\n\tNextDecoder(next Decoder) error\n\t// DumpPacketData is used solely for decoding.  If you come across an error\n\t// you need to diagnose while processing a packet, call this and your packet's\n\t// data will be dumped to stderr so you can create a test.  This should never\n\t// be called from a production decoder.\n\tDumpPacketData()\n\t// DecodeOptions returns the decode options\n\tDecodeOptions() *DecodeOptions\n}\n\n// Decoder is an interface for logic to decode a packet layer.  Users may\n// implement a Decoder to handle their own strange packet types, or may use one\n// of the many decoders available in the 'layers' subpackage to decode things\n// for them.\ntype Decoder interface {\n\t// Decode decodes the bytes of a packet, sending decoded values and other\n\t// information to PacketBuilder, and returning an error if unsuccessful.  See\n\t// the PacketBuilder documentation for more details.\n\tDecode([]byte, PacketBuilder) error\n}\n\n// DecodeFunc wraps a function to make it a Decoder.\ntype DecodeFunc func([]byte, PacketBuilder) error\n\n// Decode implements Decoder by calling itself.\nfunc (d DecodeFunc) Decode(data []byte, p PacketBuilder) error {\n\t// function, call thyself.\n\treturn d(data, p)\n}\n\n// DecodePayload is a Decoder that returns a Payload layer containing all\n// remaining bytes.\nvar DecodePayload Decoder = DecodeFunc(decodePayload)\n\n// DecodeUnknown is a Decoder that returns an Unknown layer containing all\n// remaining bytes, useful if you run up against a layer that you're unable to\n// decode yet.  This layer is considered an ErrorLayer.\nvar DecodeUnknown Decoder = DecodeFunc(decodeUnknown)\n\n// DecodeFragment is a Decoder that returns a Fragment layer containing all\n// remaining bytes.\nvar DecodeFragment Decoder = DecodeFunc(decodeFragment)\n\n// LayerTypeZero is an invalid layer type, but can be used to determine whether\n// layer type has actually been set correctly.\nvar LayerTypeZero = RegisterLayerType(0, LayerTypeMetadata{Name: \"Unknown\", Decoder: DecodeUnknown})\n\n// LayerTypeDecodeFailure is the layer type for the default error layer.\nvar LayerTypeDecodeFailure = RegisterLayerType(1, LayerTypeMetadata{Name: \"DecodeFailure\", Decoder: DecodeUnknown})\n\n// LayerTypePayload is the layer type for a payload that we don't try to decode\n// but treat as a success, IE: an application-level payload.\nvar LayerTypePayload = RegisterLayerType(2, LayerTypeMetadata{Name: \"Payload\", Decoder: DecodePayload})\n\n// LayerTypeFragment is the layer type for a fragment of a layer transported\n// by an underlying layer that supports fragmentation.\nvar LayerTypeFragment = RegisterLayerType(3, LayerTypeMetadata{Name: \"Fragment\", Decoder: DecodeFragment})\n\n// DecodeFailure is a packet layer created if decoding of the packet data failed\n// for some reason.  It implements ErrorLayer.  LayerContents will be the entire\n// set of bytes that failed to parse, and Error will return the reason parsing\n// failed.\ntype DecodeFailure struct {\n\tdata  []byte\n\terr   error\n\tstack []byte\n}\n\n// Error returns the error encountered during decoding.\nfunc (d *DecodeFailure) Error() error { return d.err }\n\n// LayerContents implements Layer.\nfunc (d *DecodeFailure) LayerContents() []byte { return d.data }\n\n// LayerPayload implements Layer.\nfunc (d *DecodeFailure) LayerPayload() []byte { return nil }\n\n// String implements fmt.Stringer.\nfunc (d *DecodeFailure) String() string {\n\treturn \"Packet decoding error: \" + d.Error().Error()\n}\n\n// Dump implements Dumper.\nfunc (d *DecodeFailure) Dump() (s string) {\n\tif d.stack != nil {\n\t\ts = string(d.stack)\n\t}\n\treturn\n}\n\n// LayerType returns LayerTypeDecodeFailure\nfunc (d *DecodeFailure) LayerType() LayerType { return LayerTypeDecodeFailure }\n\n// decodeUnknown \"decodes\" unsupported data types by returning an error.\n// This decoder will thus always return a DecodeFailure layer.\nfunc decodeUnknown(data []byte, p PacketBuilder) error {\n\treturn errors.New(\"Layer type not currently supported\")\n}\n"
  },
  {
    "path": "defrag/lcmdefrag/lcmdefrag.go",
    "content": "// Copyright 2018 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// Package lcmdefrag contains a defragmenter for LCM messages.\npackage lcmdefrag\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\nconst (\n\t// Packages are cleaned up/removed after no input was received for this\n\t// amount of seconds.\n\ttimeout time.Duration = 3 * time.Second\n)\n\ntype lcmPacket struct {\n\tlastPacket time.Time\n\tdone       bool\n\trecFrags   uint16\n\ttotalFrags uint16\n\tfrags      map[uint16]*layers.LCM\n}\n\n// LCMDefragmenter supports defragmentation of LCM messages.\n//\n// References\n//   https://lcm-proj.github.io/\n//   https://github.com/lcm-proj/lcm\ntype LCMDefragmenter struct {\n\tpackets map[uint32]*lcmPacket\n}\n\nfunc newLCMPacket(totalFrags uint16) *lcmPacket {\n\treturn &lcmPacket{\n\t\tdone:       false,\n\t\trecFrags:   0,\n\t\ttotalFrags: totalFrags,\n\t\tfrags:      make(map[uint16]*layers.LCM),\n\t}\n}\n\n// NewLCMDefragmenter returns a new LCMDefragmenter.\nfunc NewLCMDefragmenter() *LCMDefragmenter {\n\treturn &LCMDefragmenter{\n\t\tpackets: make(map[uint32]*lcmPacket),\n\t}\n}\n\nfunc (lp *lcmPacket) append(in *layers.LCM) {\n\tlp.frags[in.FragmentNumber] = in\n\tlp.recFrags++\n\tlp.lastPacket = time.Now()\n}\n\nfunc (lp *lcmPacket) assemble() (out *layers.LCM, err error) {\n\tvar blob []byte\n\n\t//Extract packets\n\tfor i := uint16(0); i < lp.totalFrags; i++ {\n\t\tfragment, ok := lp.frags[i]\n\t\tif !ok {\n\t\t\terr = fmt.Errorf(\"Tried to defragment incomplete packet. Waiting \"+\n\t\t\t\t\"for more potential (unordered) packets... %d\", i)\n\t\t\treturn\n\t\t}\n\n\t\t// For the very first packet, we also want the header.\n\t\tif i == 0 {\n\t\t\tblob = append(blob, fragment.LayerContents()...)\n\t\t}\n\n\t\t// Append the data for each packet.\n\t\tblob = append(blob, fragment.Payload()...)\n\t}\n\n\tpacket := gopacket.NewPacket(blob, layers.LayerTypeLCM, gopacket.NoCopy)\n\tlcmHdrLayer := packet.Layer(layers.LayerTypeLCM)\n\tout, ok := lcmHdrLayer.(*layers.LCM)\n\tif !ok {\n\t\terr = fmt.Errorf(\"Error while decoding the defragmented packet. \" +\n\t\t\t\"Erasing/dropping packet.\")\n\t}\n\n\tlp.done = true\n\n\treturn\n}\n\nfunc (ld *LCMDefragmenter) cleanUp() {\n\tfor key, packet := range ld.packets {\n\t\tif packet.done || time.Now().Sub(packet.lastPacket) > timeout {\n\t\t\tdelete(ld.packets, key)\n\t\t}\n\t}\n}\n\n// Defrag takes a reference to an LCM packet and processes it.\n// In case the packet does not need to be defragmented, it immediately returns\n// the as in passed reference. In case in was the last missing fragment, out\n// will be the defragmented packet. If in was a fragment, but we are awaiting\n// more, out will be set to nil.\n// In the case that in was nil, we will just run the internal cleanup of the\n// defragmenter that times out packages.\n// If an error was encountered during defragmentation, out will also be nil,\n// while err will contain further information on the failure.\nfunc (ld *LCMDefragmenter) Defrag(in *layers.LCM) (out *layers.LCM, err error) {\n\t// Timeout old packages and erase error prone ones.\n\tld.cleanUp()\n\n\t// For running cleanup only\n\tif in == nil {\n\t\treturn\n\t}\n\n\t// Quick check if this is acutally a single packet. In that case, just\n\t// return it quickly.\n\tif !in.Fragmented {\n\t\tout = in\n\t\treturn\n\t}\n\n\t// Do we need to start a new fragments obj?\n\tif _, ok := ld.packets[in.SequenceNumber]; !ok {\n\t\tld.packets[in.SequenceNumber] = newLCMPacket(in.TotalFragments)\n\t}\n\n\t// Append the packet\n\tld.packets[in.SequenceNumber].append(in)\n\n\t// Check if this is the last package of that series\n\tif ld.packets[in.SequenceNumber].recFrags == in.TotalFragments {\n\t\tout, err = ld.packets[in.SequenceNumber].assemble()\n\t}\n\n\treturn\n}\n"
  },
  {
    "path": "defrag/lcmdefrag/lcmdefrag_test.go",
    "content": "// Copyright 2018 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage lcmdefrag\n\nimport (\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\nvar (\n\tfragmentOne = []byte{\n\t\t0x4c, 0x43, 0x30, 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d,\n\t\t0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x02, 0x4c, 0x43, 0x4d, 0x5f,\n\t\t0x53, 0x45, 0x4c, 0x46, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x00, 0x6c, 0x63,\n\t\t0x6d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x74, 0x65, 0x73, 0x74,\n\t}\n\n\tfragmentTwo = []byte{\n\t\t0x4c, 0x43, 0x30, 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d,\n\t\t0x00, 0x00, 0x00, 0x2d, 0x00, 0x01, 0x00, 0x02, 0x6c, 0x63, 0x6d, 0x20,\n\t\t0x73, 0x65, 0x6c, 0x66, 0x20, 0x74, 0x65, 0x73, 0x74,\n\t}\n\n\tcompletePacket = []byte{\n\t\t0x4c, 0x43, 0x30, 0x32, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x43, 0x4d, 0x5f,\n\t\t0x53, 0x45, 0x4c, 0x46, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x00, 0x6c, 0x63,\n\t\t0x6d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x74, 0x65, 0x73, 0x74,\n\t}\n)\n\nfunc TestOrderedLCMDefrag(t *testing.T) {\n\tdefragmenter := NewLCMDefragmenter()\n\tvar err error\n\n\tpacket := gopacket.NewPacket(fragmentOne, layers.LayerTypeLCM, gopacket.NoCopy)\n\tlcm := packet.Layer(layers.LayerTypeLCM).(*layers.LCM)\n\n\tlcm, err = defragmenter.Defrag(lcm)\n\tif lcm != nil {\n\t\tt.Fatal(\"Returned incomplete LCM message.\")\n\t}\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tpacket = gopacket.NewPacket(fragmentTwo, layers.LayerTypeLCM, gopacket.NoCopy)\n\tlcm = packet.Layer(layers.LayerTypeLCM).(*layers.LCM)\n\n\tlcm, err = defragmenter.Defrag(lcm)\n\tif lcm == nil {\n\t\tt.Fatal(\"Did not receive defragmented LCM message.\")\n\t}\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n}\n\nfunc TestUnorderedLCMDefrag(t *testing.T) {\n\tdefragmenter := NewLCMDefragmenter()\n\tvar err error\n\n\tpacket := gopacket.NewPacket(fragmentTwo, layers.LayerTypeLCM, gopacket.NoCopy)\n\tlcm := packet.Layer(layers.LayerTypeLCM).(*layers.LCM)\n\n\tlcm, err = defragmenter.Defrag(lcm)\n\tif lcm != nil {\n\t\tt.Fatal(\"Returned incomplete LCM message.\")\n\t}\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tpacket = gopacket.NewPacket(fragmentOne, layers.LayerTypeLCM, gopacket.NoCopy)\n\tlcm = packet.Layer(layers.LayerTypeLCM).(*layers.LCM)\n\n\tlcm, err = defragmenter.Defrag(lcm)\n\tif lcm == nil {\n\t\tt.Fatal(\"Did not receive defragmented LCM message.\")\n\t}\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n}\n\nfunc TestNonLCMDefrag(t *testing.T) {\n\tdefragmenter := NewLCMDefragmenter()\n\tvar err error\n\n\tpacket := gopacket.NewPacket(completePacket, layers.LayerTypeLCM, gopacket.NoCopy)\n\tlcm := packet.Layer(layers.LayerTypeLCM).(*layers.LCM)\n\n\tlcm, err = defragmenter.Defrag(lcm)\n\tif lcm == nil {\n\t\tt.Fatal(\"Did not receive complete LCM message.\")\n\t}\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "doc.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n/*\nPackage gopacket provides packet decoding for the Go language.\n\ngopacket contains many sub-packages with additional functionality you may find\nuseful, including:\n\n * layers: You'll probably use this every time.  This contains of the logic\n     built into gopacket for decoding packet protocols.  Note that all example\n     code below assumes that you have imported both gopacket and\n     gopacket/layers.\n * pcap: C bindings to use libpcap to read packets off the wire.\n * pfring: C bindings to use PF_RING to read packets off the wire.\n * afpacket: C bindings for Linux's AF_PACKET to read packets off the wire.\n * tcpassembly: TCP stream reassembly\n\nAlso, if you're looking to dive right into code, see the examples subdirectory\nfor numerous simple binaries built using gopacket libraries.\n\nMinimum go version required is 1.5 except for pcapgo/EthernetHandle, afpacket,\nand bsdbpf which need at least 1.7 due to x/sys/unix dependencies.\n\nBasic Usage\n\ngopacket takes in packet data as a []byte and decodes it into a packet with\na non-zero number of \"layers\".  Each layer corresponds to a protocol\nwithin the bytes.  Once a packet has been decoded, the layers of the packet\ncan be requested from the packet.\n\n // Decode a packet\n packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Default)\n // Get the TCP layer from this packet\n if tcpLayer := packet.Layer(layers.LayerTypeTCP); tcpLayer != nil {\n   fmt.Println(\"This is a TCP packet!\")\n   // Get actual TCP data from this layer\n   tcp, _ := tcpLayer.(*layers.TCP)\n   fmt.Printf(\"From src port %d to dst port %d\\n\", tcp.SrcPort, tcp.DstPort)\n }\n // Iterate over all layers, printing out each layer type\n for _, layer := range packet.Layers() {\n   fmt.Println(\"PACKET LAYER:\", layer.LayerType())\n }\n\nPackets can be decoded from a number of starting points.  Many of our base\ntypes implement Decoder, which allow us to decode packets for which\nwe don't have full data.\n\n // Decode an ethernet packet\n ethP := gopacket.NewPacket(p1, layers.LayerTypeEthernet, gopacket.Default)\n // Decode an IPv6 header and everything it contains\n ipP := gopacket.NewPacket(p2, layers.LayerTypeIPv6, gopacket.Default)\n // Decode a TCP header and its payload\n tcpP := gopacket.NewPacket(p3, layers.LayerTypeTCP, gopacket.Default)\n\n\nReading Packets From A Source\n\nMost of the time, you won't just have a []byte of packet data lying around.\nInstead, you'll want to read packets in from somewhere (file, interface, etc)\nand process them.  To do that, you'll want to build a PacketSource.\n\nFirst, you'll need to construct an object that implements the PacketDataSource\ninterface.  There are implementations of this interface bundled with gopacket\nin the gopacket/pcap and gopacket/pfring subpackages... see their documentation\nfor more information on their usage.  Once you have a PacketDataSource, you can\npass it into NewPacketSource, along with a Decoder of your choice, to create\na PacketSource.\n\nOnce you have a PacketSource, you can read packets from it in multiple ways.\nSee the docs for PacketSource for more details.  The easiest method is the\nPackets function, which returns a channel, then asynchronously writes new\npackets into that channel, closing the channel if the packetSource hits an\nend-of-file.\n\n  packetSource := ...  // construct using pcap or pfring\n  for packet := range packetSource.Packets() {\n    handlePacket(packet)  // do something with each packet\n  }\n\nYou can change the decoding options of the packetSource by setting fields in\npacketSource.DecodeOptions... see the following sections for more details.\n\n\nLazy Decoding\n\ngopacket optionally decodes packet data lazily, meaning it\nonly decodes a packet layer when it needs to handle a function call.\n\n // Create a packet, but don't actually decode anything yet\n packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Lazy)\n // Now, decode the packet up to the first IPv4 layer found but no further.\n // If no IPv4 layer was found, the whole packet will be decoded looking for\n // it.\n ip4 := packet.Layer(layers.LayerTypeIPv4)\n // Decode all layers and return them.  The layers up to the first IPv4 layer\n // are already decoded, and will not require decoding a second time.\n layers := packet.Layers()\n\nLazily-decoded packets are not concurrency-safe.  Since layers have not all been\ndecoded, each call to Layer() or Layers() has the potential to mutate the packet\nin order to decode the next layer.  If a packet is used\nin multiple goroutines concurrently, don't use gopacket.Lazy.  Then gopacket\nwill decode the packet fully, and all future function calls won't mutate the\nobject.\n\n\nNoCopy Decoding\n\nBy default, gopacket will copy the slice passed to NewPacket and store the\ncopy within the packet, so future mutations to the bytes underlying the slice\ndon't affect the packet and its layers.  If you can guarantee that the\nunderlying slice bytes won't be changed, you can use NoCopy to tell\ngopacket.NewPacket, and it'll use the passed-in slice itself.\n\n // This channel returns new byte slices, each of which points to a new\n // memory location that's guaranteed immutable for the duration of the\n // packet.\n for data := range myByteSliceChannel {\n   p := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.NoCopy)\n   doSomethingWithPacket(p)\n }\n\nThe fastest method of decoding is to use both Lazy and NoCopy, but note from\nthe many caveats above that for some implementations either or both may be\ndangerous.\n\n\nPointers To Known Layers\n\nDuring decoding, certain layers are stored in the packet as well-known\nlayer types.  For example, IPv4 and IPv6 are both considered NetworkLayer\nlayers, while TCP and UDP are both TransportLayer layers.  We support 4\nlayers, corresponding to the 4 layers of the TCP/IP layering scheme (roughly\nanagalous to layers 2, 3, 4, and 7 of the OSI model).  To access these,\nyou can use the packet.LinkLayer, packet.NetworkLayer,\npacket.TransportLayer, and packet.ApplicationLayer functions.  Each of\nthese functions returns a corresponding interface\n(gopacket.{Link,Network,Transport,Application}Layer).  The first three\nprovide methods for getting src/dst addresses for that particular layer,\nwhile the final layer provides a Payload function to get payload data.\nThis is helpful, for example, to get payloads for all packets regardless\nof their underlying data type:\n\n // Get packets from some source\n for packet := range someSource {\n   if app := packet.ApplicationLayer(); app != nil {\n     if strings.Contains(string(app.Payload()), \"magic string\") {\n       fmt.Println(\"Found magic string in a packet!\")\n     }\n   }\n }\n\nA particularly useful layer is ErrorLayer, which is set whenever there's\nan error parsing part of the packet.\n\n packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Default)\n if err := packet.ErrorLayer(); err != nil {\n   fmt.Println(\"Error decoding some part of the packet:\", err)\n }\n\nNote that we don't return an error from NewPacket because we may have decoded\na number of layers successfully before running into our erroneous layer.  You\nmay still be able to get your Ethernet and IPv4 layers correctly, even if\nyour TCP layer is malformed.\n\n\nFlow And Endpoint\n\ngopacket has two useful objects, Flow and Endpoint, for communicating in a protocol\nindependent manner the fact that a packet is coming from A and going to B.\nThe general layer types LinkLayer, NetworkLayer, and TransportLayer all provide\nmethods for extracting their flow information, without worrying about the type\nof the underlying Layer.\n\nA Flow is a simple object made up of a set of two Endpoints, one source and one\ndestination.  It details the sender and receiver of the Layer of the Packet.\n\nAn Endpoint is a hashable representation of a source or destination.  For\nexample, for LayerTypeIPv4, an Endpoint contains the IP address bytes for a v4\nIP packet.  A Flow can be broken into Endpoints, and Endpoints can be combined\ninto Flows:\n\n packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Lazy)\n netFlow := packet.NetworkLayer().NetworkFlow()\n src, dst := netFlow.Endpoints()\n reverseFlow := gopacket.NewFlow(dst, src)\n\nBoth Endpoint and Flow objects can be used as map keys, and the equality\noperator can compare them, so you can easily group together all packets\nbased on endpoint criteria:\n\n flows := map[gopacket.Endpoint]chan gopacket.Packet\n packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Lazy)\n // Send all TCP packets to channels based on their destination port.\n if tcp := packet.Layer(layers.LayerTypeTCP); tcp != nil {\n   flows[tcp.TransportFlow().Dst()] <- packet\n }\n // Look for all packets with the same source and destination network address\n if net := packet.NetworkLayer(); net != nil {\n   src, dst := net.NetworkFlow().Endpoints()\n   if src == dst {\n     fmt.Println(\"Fishy packet has same network source and dst: %s\", src)\n   }\n }\n // Find all packets coming from UDP port 1000 to UDP port 500\n interestingFlow := gopacket.FlowFromEndpoints(layers.NewUDPPortEndpoint(1000), layers.NewUDPPortEndpoint(500))\n if t := packet.NetworkLayer(); t != nil && t.TransportFlow() == interestingFlow {\n   fmt.Println(\"Found that UDP flow I was looking for!\")\n }\n\nFor load-balancing purposes, both Flow and Endpoint have FastHash() functions,\nwhich provide quick, non-cryptographic hashes of their contents.  Of particular\nimportance is the fact that Flow FastHash() is symmetric: A->B will have the same\nhash as B->A.  An example usage could be:\n\n channels := [8]chan gopacket.Packet\n for i := 0; i < 8; i++ {\n   channels[i] = make(chan gopacket.Packet)\n   go packetHandler(channels[i])\n }\n for packet := range getPackets() {\n   if net := packet.NetworkLayer(); net != nil {\n     channels[int(net.NetworkFlow().FastHash()) & 0x7] <- packet\n   }\n }\n\nThis allows us to split up a packet stream while still making sure that each\nstream sees all packets for a flow (and its bidirectional opposite).\n\n\nImplementing Your Own Decoder\n\nIf your network has some strange encapsulation, you can implement your own\ndecoder.  In this example, we handle Ethernet packets which are encapsulated\nin a 4-byte header.\n\n // Create a layer type, should be unique and high, so it doesn't conflict,\n // giving it a name and a decoder to use.\n var MyLayerType = gopacket.RegisterLayerType(12345, gopacket.LayerTypeMetadata{Name: \"MyLayerType\", Decoder: gopacket.DecodeFunc(decodeMyLayer)})\n\n // Implement my layer\n type MyLayer struct {\n   StrangeHeader []byte\n   payload []byte\n }\n func (m MyLayer) LayerType() gopacket.LayerType { return MyLayerType }\n func (m MyLayer) LayerContents() []byte { return m.StrangeHeader }\n func (m MyLayer) LayerPayload() []byte { return m.payload }\n\n // Now implement a decoder... this one strips off the first 4 bytes of the\n // packet.\n func decodeMyLayer(data []byte, p gopacket.PacketBuilder) error {\n   // Create my layer\n   p.AddLayer(&MyLayer{data[:4], data[4:]})\n   // Determine how to handle the rest of the packet\n   return p.NextDecoder(layers.LayerTypeEthernet)\n }\n\n // Finally, decode your packets:\n p := gopacket.NewPacket(data, MyLayerType, gopacket.Lazy)\n\nSee the docs for Decoder and PacketBuilder for more details on how coding\ndecoders works, or look at RegisterLayerType and RegisterEndpointType to see how\nto add layer/endpoint types to gopacket.\n\n\nFast Decoding With DecodingLayerParser\n\nTLDR:  DecodingLayerParser takes about 10% of the time as NewPacket to decode\npacket data, but only for known packet stacks.\n\nBasic decoding using gopacket.NewPacket or PacketSource.Packets is somewhat slow\ndue to its need to allocate a new packet and every respective layer.  It's very\nversatile and can handle all known layer types, but sometimes you really only\ncare about a specific set of layers regardless, so that versatility is wasted.\n\nDecodingLayerParser avoids memory allocation altogether by decoding packet\nlayers directly into preallocated objects, which you can then reference to get\nthe packet's information.  A quick example:\n\n func main() {\n   var eth layers.Ethernet\n   var ip4 layers.IPv4\n   var ip6 layers.IPv6\n   var tcp layers.TCP\n   parser := gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet, &eth, &ip4, &ip6, &tcp)\n   decoded := []gopacket.LayerType{}\n   for packetData := range somehowGetPacketData() {\n     if err := parser.DecodeLayers(packetData, &decoded); err != nil {\n       fmt.Fprintf(os.Stderr, \"Could not decode layers: %v\\n\", err)\n       continue\n     }\n     for _, layerType := range decoded {\n       switch layerType {\n         case layers.LayerTypeIPv6:\n           fmt.Println(\"    IP6 \", ip6.SrcIP, ip6.DstIP)\n         case layers.LayerTypeIPv4:\n           fmt.Println(\"    IP4 \", ip4.SrcIP, ip4.DstIP)\n       }\n     }\n   }\n }\n\nThe important thing to note here is that the parser is modifying the passed in\nlayers (eth, ip4, ip6, tcp) instead of allocating new ones, thus greatly\nspeeding up the decoding process.  It's even branching based on layer type...\nit'll handle an (eth, ip4, tcp) or (eth, ip6, tcp) stack.  However, it won't\nhandle any other type... since no other decoders were passed in, an (eth, ip4,\nudp) stack will stop decoding after ip4, and only pass back [LayerTypeEthernet,\nLayerTypeIPv4] through the 'decoded' slice (along with an error saying it can't\ndecode a UDP packet).\n\nUnfortunately, not all layers can be used by DecodingLayerParser... only those\nimplementing the DecodingLayer interface are usable.  Also, it's possible to\ncreate DecodingLayers that are not themselves Layers... see\nlayers.IPv6ExtensionSkipper for an example of this.\n\nFaster And Customized Decoding with DecodingLayerContainer\n\nBy default, DecodingLayerParser uses native map to store and search for a layer\nto decode. Though being versatile, in some cases this solution may be not so\noptimal. For example, if you have only few layers faster operations may be\nprovided by sparse array indexing or linear array scan.\n\nTo accomodate these scenarios, DecodingLayerContainer interface is introduced\nalong with its implementations: DecodingLayerSparse, DecodingLayerArray and\nDecodingLayerMap. You can specify a container implementation to\nDecodingLayerParser with SetDecodingLayerContainer method. Example:\n\n dlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet)\n dlp.SetDecodingLayerContainer(gopacket.DecodingLayerSparse(nil))\n var eth layers.Ethernet\n dlp.AddDecodingLayer(&eth)\n // ... add layers and use DecodingLayerParser as usual...\n\nTo skip one level of indirection (though sacrificing some capabilities) you may\nalso use DecodingLayerContainer as a decoding tool as it is. In this case you have to\nhandle unknown layer types and layer panics by yourself. Example:\n\n func main() {\n   var eth layers.Ethernet\n   var ip4 layers.IPv4\n   var ip6 layers.IPv6\n   var tcp layers.TCP\n   dlc := gopacket.DecodingLayerContainer(gopacket.DecodingLayerArray(nil))\n   dlc = dlc.Put(&eth)\n   dlc = dlc.Put(&ip4)\n   dlc = dlc.Put(&ip6)\n   dlc = dlc.Put(&tcp)\n   // you may specify some meaningful DecodeFeedback\n   decoder := dlc.LayersDecoder(LayerTypeEthernet, gopacket.NilDecodeFeedback)\n   decoded := make([]gopacket.LayerType, 0, 20)\n   for packetData := range somehowGetPacketData() {\n     lt, err := decoder(packetData, &decoded)\n     if err != nil {\n       fmt.Fprintf(os.Stderr, \"Could not decode layers: %v\\n\", err)\n       continue\n     }\n     if lt != gopacket.LayerTypeZero {\n       fmt.Fprintf(os.Stderr, \"unknown layer type: %v\\n\", lt)\n       continue\n     }\n     for _, layerType := range decoded {\n       // examine decoded layertypes just as already shown above\n     }\n   }\n }\n\nDecodingLayerSparse is the fastest but most effective when LayerType values\nthat layers in use can decode are not large because otherwise that would lead\nto bigger memory footprint. DecodingLayerArray is very compact and primarily\nusable if the number of decoding layers is not big (up to ~10-15, but please do\nyour own benchmarks). DecodingLayerMap is the most versatile one and used by\nDecodingLayerParser by default. Please refer to tests and benchmarks in layers\nsubpackage to further examine usage examples and performance measurements.\n\nYou may also choose to implement your own DecodingLayerContainer if you want to\nmake use of your own internal packet decoding logic.\n\nCreating Packet Data\n\nAs well as offering the ability to decode packet data, gopacket will allow you\nto create packets from scratch, as well.  A number of gopacket layers implement\nthe SerializableLayer interface; these layers can be serialized to a []byte in\nthe following manner:\n\n  ip := &layers.IPv4{\n    SrcIP: net.IP{1, 2, 3, 4},\n    DstIP: net.IP{5, 6, 7, 8},\n    // etc...\n  }\n  buf := gopacket.NewSerializeBuffer()\n  opts := gopacket.SerializeOptions{}  // See SerializeOptions for more details.\n  err := ip.SerializeTo(buf, opts)\n  if err != nil { panic(err) }\n  fmt.Println(buf.Bytes())  // prints out a byte slice containing the serialized IPv4 layer.\n\nSerializeTo PREPENDS the given layer onto the SerializeBuffer, and they treat\nthe current buffer's Bytes() slice as the payload of the serializing layer.\nTherefore, you can serialize an entire packet by serializing a set of layers in\nreverse order (Payload, then TCP, then IP, then Ethernet, for example).  The\nSerializeBuffer's SerializeLayers function is a helper that does exactly that.\n\nTo generate a (empty and useless, because no fields are set)\nEthernet(IPv4(TCP(Payload))) packet, for example, you can run:\n\n  buf := gopacket.NewSerializeBuffer()\n  opts := gopacket.SerializeOptions{}\n  gopacket.SerializeLayers(buf, opts,\n    &layers.Ethernet{},\n    &layers.IPv4{},\n    &layers.TCP{},\n    gopacket.Payload([]byte{1, 2, 3, 4}))\n  packetData := buf.Bytes()\n\nA Final Note\n\nIf you use gopacket, you'll almost definitely want to make sure gopacket/layers\nis imported, since when imported it sets all the LayerType variables and fills\nin a lot of interesting variables/maps (DecodersByLayerName, etc).  Therefore,\nit's recommended that even if you don't use any layers functions directly, you still import with:\n\n  import (\n    _ \"github.com/google/gopacket/layers\"\n  )\n*/\npackage gopacket\n"
  },
  {
    "path": "dumpcommand/tcpdump.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// Package dumpcommand implements a run function for pfdump and pcapdump\n// with many similar flags/features to tcpdump.  This code is split out seperate\n// from data sources (pcap/pfring) so it can be used by both.\npackage dumpcommand\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/ip4defrag\"\n\t\"github.com/google/gopacket/layers\" // pulls in all layers decoders\n)\n\nvar (\n\tprint       = flag.Bool(\"print\", true, \"Print out packets, if false only prints out statistics\")\n\tmaxcount    = flag.Int(\"c\", -1, \"Only grab this many packets, then exit\")\n\tdecoder     = flag.String(\"decoder\", \"Ethernet\", \"Name of the decoder to use\")\n\tdump        = flag.Bool(\"X\", false, \"If true, dump very verbose info on each packet\")\n\tstatsevery  = flag.Int(\"stats\", 1000, \"Output statistics every N packets\")\n\tprintErrors = flag.Bool(\"errors\", false, \"Print out packet dumps of decode errors, useful for checking decoders against live traffic\")\n\tlazy        = flag.Bool(\"lazy\", false, \"If true, do lazy decoding\")\n\tdefrag      = flag.Bool(\"defrag\", false, \"If true, do IPv4 defrag\")\n)\n\nfunc Run(src gopacket.PacketDataSource) {\n\tif !flag.Parsed() {\n\t\tlog.Fatalln(\"Run called without flags.Parse() being called\")\n\t}\n\tvar dec gopacket.Decoder\n\tvar ok bool\n\tif dec, ok = gopacket.DecodersByLayerName[*decoder]; !ok {\n\t\tlog.Fatalln(\"No decoder named\", *decoder)\n\t}\n\tsource := gopacket.NewPacketSource(src, dec)\n\tsource.Lazy = *lazy\n\tsource.NoCopy = true\n\tsource.DecodeStreamsAsDatagrams = true\n\tfmt.Fprintln(os.Stderr, \"Starting to read packets\")\n\tcount := 0\n\tbytes := int64(0)\n\tstart := time.Now()\n\terrors := 0\n\ttruncated := 0\n\tlayertypes := map[gopacket.LayerType]int{}\n\tdefragger := ip4defrag.NewIPv4Defragmenter()\n\n\tfor packet := range source.Packets() {\n\t\tcount++\n\t\tbytes += int64(len(packet.Data()))\n\n\t\t// defrag the IPv4 packet if required\n\t\tif *defrag {\n\t\t\tip4Layer := packet.Layer(layers.LayerTypeIPv4)\n\t\t\tif ip4Layer == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tip4 := ip4Layer.(*layers.IPv4)\n\t\t\tl := ip4.Length\n\n\t\t\tnewip4, err := defragger.DefragIPv4(ip4)\n\t\t\tif err != nil {\n\t\t\t\tlog.Fatalln(\"Error while de-fragmenting\", err)\n\t\t\t} else if newip4 == nil {\n\t\t\t\tcontinue // packet fragment, we don't have whole packet yet.\n\t\t\t}\n\t\t\tif newip4.Length != l {\n\t\t\t\tfmt.Printf(\"Decoding re-assembled packet: %s\\n\", newip4.NextLayerType())\n\t\t\t\tpb, ok := packet.(gopacket.PacketBuilder)\n\t\t\t\tif !ok {\n\t\t\t\t\tpanic(\"Not a PacketBuilder\")\n\t\t\t\t}\n\t\t\t\tnextDecoder := newip4.NextLayerType()\n\t\t\t\tnextDecoder.Decode(newip4.Payload, pb)\n\t\t\t}\n\t\t}\n\n\t\tif *dump {\n\t\t\tfmt.Println(packet.Dump())\n\t\t} else if *print {\n\t\t\tfmt.Println(packet)\n\t\t}\n\t\tif !*lazy || *print || *dump { // if we've already decoded all layers...\n\t\t\tfor _, layer := range packet.Layers() {\n\t\t\t\tlayertypes[layer.LayerType()]++\n\t\t\t}\n\t\t\tif packet.Metadata().Truncated {\n\t\t\t\ttruncated++\n\t\t\t}\n\t\t\tif errLayer := packet.ErrorLayer(); errLayer != nil {\n\t\t\t\terrors++\n\t\t\t\tif *printErrors {\n\t\t\t\t\tfmt.Println(\"Error:\", errLayer.Error())\n\t\t\t\t\tfmt.Println(\"--- Packet ---\")\n\t\t\t\t\tfmt.Println(packet.Dump())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdone := *maxcount > 0 && count >= *maxcount\n\t\tif count%*statsevery == 0 || done {\n\t\t\tfmt.Fprintf(os.Stderr, \"Processed %v packets (%v bytes) in %v, %v errors and %v truncated packets\\n\", count, bytes, time.Since(start), errors, truncated)\n\t\t\tif len(layertypes) > 0 {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"Layer types seen: %+v\\n\", layertypes)\n\t\t\t}\n\t\t}\n\t\tif done {\n\t\t\tbreak\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "examples/afpacket/afpacket.go",
    "content": "// Copyright 2018 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// afpacket provides a simple example of using afpacket with zero-copy to read\n// packet data.\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"runtime/pprof\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/afpacket\"\n\t\"github.com/google/gopacket/layers\"\n\t\"github.com/google/gopacket/pcap\"\n\t\"golang.org/x/net/bpf\"\n\n\t_ \"github.com/google/gopacket/layers\"\n)\n\nvar (\n\tiface      = flag.String(\"i\", \"any\", \"Interface to read from\")\n\tcpuprofile = flag.String(\"cpuprofile\", \"\", \"If non-empty, write CPU profile here\")\n\tsnaplen    = flag.Int(\"s\", 0, \"Snaplen, if <= 0, use 65535\")\n\tbufferSize = flag.Int(\"b\", 8, \"Interface buffersize (MB)\")\n\tfilter     = flag.String(\"f\", \"port not 22\", \"BPF filter\")\n\tcount      = flag.Int64(\"c\", -1, \"If >= 0, # of packets to capture before returning\")\n\tverbose    = flag.Int64(\"log_every\", 1, \"Write a log every X packets\")\n\taddVLAN    = flag.Bool(\"add_vlan\", false, \"If true, add VLAN header\")\n)\n\ntype afpacketHandle struct {\n\tTPacket *afpacket.TPacket\n}\n\nfunc newAfpacketHandle(device string, snaplen int, block_size int, num_blocks int,\n\tuseVLAN bool, timeout time.Duration) (*afpacketHandle, error) {\n\n\th := &afpacketHandle{}\n\tvar err error\n\n\tif device == \"any\" {\n\t\th.TPacket, err = afpacket.NewTPacket(\n\t\t\tafpacket.OptFrameSize(snaplen),\n\t\t\tafpacket.OptBlockSize(block_size),\n\t\t\tafpacket.OptNumBlocks(num_blocks),\n\t\t\tafpacket.OptAddVLANHeader(useVLAN),\n\t\t\tafpacket.OptPollTimeout(timeout),\n\t\t\tafpacket.SocketRaw,\n\t\t\tafpacket.TPacketVersion3)\n\t} else {\n\t\th.TPacket, err = afpacket.NewTPacket(\n\t\t\tafpacket.OptInterface(device),\n\t\t\tafpacket.OptFrameSize(snaplen),\n\t\t\tafpacket.OptBlockSize(block_size),\n\t\t\tafpacket.OptNumBlocks(num_blocks),\n\t\t\tafpacket.OptAddVLANHeader(useVLAN),\n\t\t\tafpacket.OptPollTimeout(timeout),\n\t\t\tafpacket.SocketRaw,\n\t\t\tafpacket.TPacketVersion3)\n\t}\n\treturn h, err\n}\n\n// ZeroCopyReadPacketData satisfies ZeroCopyPacketDataSource interface\nfunc (h *afpacketHandle) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\treturn h.TPacket.ZeroCopyReadPacketData()\n}\n\n// SetBPFFilter translates a BPF filter string into BPF RawInstruction and applies them.\nfunc (h *afpacketHandle) SetBPFFilter(filter string, snaplen int) (err error) {\n\tpcapBPF, err := pcap.CompileBPFFilter(layers.LinkTypeEthernet, snaplen, filter)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbpfIns := []bpf.RawInstruction{}\n\tfor _, ins := range pcapBPF {\n\t\tbpfIns2 := bpf.RawInstruction{\n\t\t\tOp: ins.Code,\n\t\t\tJt: ins.Jt,\n\t\t\tJf: ins.Jf,\n\t\t\tK:  ins.K,\n\t\t}\n\t\tbpfIns = append(bpfIns, bpfIns2)\n\t}\n\tif h.TPacket.SetBPF(bpfIns); err != nil {\n\t\treturn err\n\t}\n\treturn h.TPacket.SetBPF(bpfIns)\n}\n\n// LinkType returns ethernet link type.\nfunc (h *afpacketHandle) LinkType() layers.LinkType {\n\treturn layers.LinkTypeEthernet\n}\n\n// Close will close afpacket source.\nfunc (h *afpacketHandle) Close() {\n\th.TPacket.Close()\n}\n\n// SocketStats prints received, dropped, queue-freeze packet stats.\nfunc (h *afpacketHandle) SocketStats() (as afpacket.SocketStats, asv afpacket.SocketStatsV3, err error) {\n\treturn h.TPacket.SocketStats()\n}\n\n// afpacketComputeSize computes the block_size and the num_blocks in such a way that the\n// allocated mmap buffer is close to but smaller than target_size_mb.\n// The restriction is that the block_size must be divisible by both the\n// frame size and page size.\nfunc afpacketComputeSize(targetSizeMb int, snaplen int, pageSize int) (\n\tframeSize int, blockSize int, numBlocks int, err error) {\n\n\tif snaplen < pageSize {\n\t\tframeSize = pageSize / (pageSize / snaplen)\n\t} else {\n\t\tframeSize = (snaplen/pageSize + 1) * pageSize\n\t}\n\n\t// 128 is the default from the gopacket library so just use that\n\tblockSize = frameSize * 128\n\tnumBlocks = (targetSizeMb * 1024 * 1024) / blockSize\n\n\tif numBlocks == 0 {\n\t\treturn 0, 0, 0, fmt.Errorf(\"Interface buffersize is too small\")\n\t}\n\n\treturn frameSize, blockSize, numBlocks, nil\n}\n\nfunc main() {\n\tflag.Parse()\n\tif *cpuprofile != \"\" {\n\t\tlog.Printf(\"Writing CPU profile to %q\", *cpuprofile)\n\t\tf, err := os.Create(*cpuprofile)\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tif err := pprof.StartCPUProfile(f); err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tdefer pprof.StopCPUProfile()\n\t}\n\tlog.Printf(\"Starting on interface %q\", *iface)\n\tif *snaplen <= 0 {\n\t\t*snaplen = 65535\n\t}\n\tszFrame, szBlock, numBlocks, err := afpacketComputeSize(*bufferSize, *snaplen, os.Getpagesize())\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tafpacketHandle, err := newAfpacketHandle(*iface, szFrame, szBlock, numBlocks, *addVLAN, pcap.BlockForever)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\terr = afpacketHandle.SetBPFFilter(*filter, *snaplen)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tsource := gopacket.ZeroCopyPacketDataSource(afpacketHandle)\n\tdefer afpacketHandle.Close()\n\n\tbytes := uint64(0)\n\tpackets := uint64(0)\n\tfor ; *count != 0; *count-- {\n\t\tdata, _, err := source.ZeroCopyReadPacketData()\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tbytes += uint64(len(data))\n\t\tpackets++\n\t\tif *count%*verbose == 0 {\n\t\t\t_, afpacketStats, err := afpacketHandle.SocketStats()\n\t\t\tif err != nil {\n\t\t\t\tlog.Println(err)\n\t\t\t}\n\t\t\tlog.Printf(\"Read in %d bytes in %d packets\", bytes, packets)\n\t\t\tlog.Printf(\"Stats {received dropped queue-freeze}: %d\", afpacketStats)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "examples/arpscan/arpscan.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// arpscan implements ARP scanning of all interfaces' local networks using\n// gopacket and its subpackages.  This example shows, among other things:\n//   * Generating and sending packet data\n//   * Reading in packet data and interpreting it\n//   * Use of the 'pcap' subpackage for reading/writing\npackage main\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"log\"\n\t\"net\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n\t\"github.com/google/gopacket/pcap\"\n)\n\nfunc main() {\n\t// Get a list of all interfaces.\n\tifaces, err := net.Interfaces()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tvar wg sync.WaitGroup\n\tfor _, iface := range ifaces {\n\t\twg.Add(1)\n\t\t// Start up a scan on each interface.\n\t\tgo func(iface net.Interface) {\n\t\t\tdefer wg.Done()\n\t\t\tif err := scan(&iface); err != nil {\n\t\t\t\tlog.Printf(\"interface %v: %v\", iface.Name, err)\n\t\t\t}\n\t\t}(iface)\n\t}\n\t// Wait for all interfaces' scans to complete.  They'll try to run\n\t// forever, but will stop on an error, so if we get past this Wait\n\t// it means all attempts to write have failed.\n\twg.Wait()\n}\n\n// scan scans an individual interface's local network for machines using ARP requests/replies.\n//\n// scan loops forever, sending packets out regularly.  It returns an error if\n// it's ever unable to write a packet.\nfunc scan(iface *net.Interface) error {\n\t// We just look for IPv4 addresses, so try to find if the interface has one.\n\tvar addr *net.IPNet\n\tif addrs, err := iface.Addrs(); err != nil {\n\t\treturn err\n\t} else {\n\t\tfor _, a := range addrs {\n\t\t\tif ipnet, ok := a.(*net.IPNet); ok {\n\t\t\t\tif ip4 := ipnet.IP.To4(); ip4 != nil {\n\t\t\t\t\taddr = &net.IPNet{\n\t\t\t\t\t\tIP:   ip4,\n\t\t\t\t\t\tMask: ipnet.Mask[len(ipnet.Mask)-4:],\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Sanity-check that the interface has a good address.\n\tif addr == nil {\n\t\treturn errors.New(\"no good IP network found\")\n\t} else if addr.IP[0] == 127 {\n\t\treturn errors.New(\"skipping localhost\")\n\t} else if addr.Mask[0] != 0xff || addr.Mask[1] != 0xff {\n\t\treturn errors.New(\"mask means network is too large\")\n\t}\n\tlog.Printf(\"Using network range %v for interface %v\", addr, iface.Name)\n\n\t// Open up a pcap handle for packet reads/writes.\n\thandle, err := pcap.OpenLive(iface.Name, 65536, true, pcap.BlockForever)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer handle.Close()\n\n\t// Start up a goroutine to read in packet data.\n\tstop := make(chan struct{})\n\tgo readARP(handle, iface, stop)\n\tdefer close(stop)\n\tfor {\n\t\t// Write our scan packets out to the handle.\n\t\tif err := writeARP(handle, iface, addr); err != nil {\n\t\t\tlog.Printf(\"error writing packets on %v: %v\", iface.Name, err)\n\t\t\treturn err\n\t\t}\n\t\t// We don't know exactly how long it'll take for packets to be\n\t\t// sent back to us, but 10 seconds should be more than enough\n\t\t// time ;)\n\t\ttime.Sleep(10 * time.Second)\n\t}\n}\n\n// readARP watches a handle for incoming ARP responses we might care about, and prints them.\n//\n// readARP loops until 'stop' is closed.\nfunc readARP(handle *pcap.Handle, iface *net.Interface, stop chan struct{}) {\n\tsrc := gopacket.NewPacketSource(handle, layers.LayerTypeEthernet)\n\tin := src.Packets()\n\tfor {\n\t\tvar packet gopacket.Packet\n\t\tselect {\n\t\tcase <-stop:\n\t\t\treturn\n\t\tcase packet = <-in:\n\t\t\tarpLayer := packet.Layer(layers.LayerTypeARP)\n\t\t\tif arpLayer == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tarp := arpLayer.(*layers.ARP)\n\t\t\tif arp.Operation != layers.ARPReply || bytes.Equal([]byte(iface.HardwareAddr), arp.SourceHwAddress) {\n\t\t\t\t// This is a packet I sent.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// Note:  we might get some packets here that aren't responses to ones we've sent,\n\t\t\t// if for example someone else sends US an ARP request.  Doesn't much matter, though...\n\t\t\t// all information is good information :)\n\t\t\tlog.Printf(\"IP %v is at %v\", net.IP(arp.SourceProtAddress), net.HardwareAddr(arp.SourceHwAddress))\n\t\t}\n\t}\n}\n\n// writeARP writes an ARP request for each address on our local network to the\n// pcap handle.\nfunc writeARP(handle *pcap.Handle, iface *net.Interface, addr *net.IPNet) error {\n\t// Set up all the layers' fields we can.\n\teth := layers.Ethernet{\n\t\tSrcMAC:       iface.HardwareAddr,\n\t\tDstMAC:       net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff},\n\t\tEthernetType: layers.EthernetTypeARP,\n\t}\n\tarp := layers.ARP{\n\t\tAddrType:          layers.LinkTypeEthernet,\n\t\tProtocol:          layers.EthernetTypeIPv4,\n\t\tHwAddressSize:     6,\n\t\tProtAddressSize:   4,\n\t\tOperation:         layers.ARPRequest,\n\t\tSourceHwAddress:   []byte(iface.HardwareAddr),\n\t\tSourceProtAddress: []byte(addr.IP),\n\t\tDstHwAddress:      []byte{0, 0, 0, 0, 0, 0},\n\t}\n\t// Set up buffer and options for serialization.\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{\n\t\tFixLengths:       true,\n\t\tComputeChecksums: true,\n\t}\n\t// Send one packet for every address.\n\tfor _, ip := range ips(addr) {\n\t\tarp.DstProtAddress = []byte(ip)\n\t\tgopacket.SerializeLayers(buf, opts, &eth, &arp)\n\t\tif err := handle.WritePacketData(buf.Bytes()); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// ips is a simple and not very good method for getting all IPv4 addresses from a\n// net.IPNet.  It returns all IPs it can over the channel it sends back, closing\n// the channel when done.\nfunc ips(n *net.IPNet) (out []net.IP) {\n\tnum := binary.BigEndian.Uint32([]byte(n.IP))\n\tmask := binary.BigEndian.Uint32([]byte(n.Mask))\n\tnetwork := num & mask\n\tbroadcast := network | ^mask\n\tfor network++; network < broadcast; network++ {\n\t\tvar buf [4]byte\n\t\tbinary.BigEndian.PutUint32(buf[:], network)\n\t\tout = append(out, net.IP(buf[:]))\n\t}\n\treturn\n}\n"
  },
  {
    "path": "examples/bidirectional/main.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// This binary provides an example of connecting up bidirectional streams from\n// the unidirectional streams provided by gopacket/tcpassembly.\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/examples/util\"\n\t\"github.com/google/gopacket/layers\"\n\t\"github.com/google/gopacket/pcap\"\n\t\"github.com/google/gopacket/tcpassembly\"\n\t\"log\"\n\t\"time\"\n)\n\nvar iface = flag.String(\"i\", \"eth0\", \"Interface to get packets from\")\nvar snaplen = flag.Int(\"s\", 16<<10, \"SnapLen for pcap packet capture\")\nvar filter = flag.String(\"f\", \"tcp\", \"BPF filter for pcap\")\nvar logAllPackets = flag.Bool(\"v\", false, \"Logs every packet in great detail\")\n\n// key is used to map bidirectional streams to each other.\ntype key struct {\n\tnet, transport gopacket.Flow\n}\n\n// String prints out the key in a human-readable fashion.\nfunc (k key) String() string {\n\treturn fmt.Sprintf(\"%v:%v\", k.net, k.transport)\n}\n\n// timeout is the length of time to wait befor flushing connections and\n// bidirectional stream pairs.\nconst timeout time.Duration = time.Minute * 5\n\n// myStream implements tcpassembly.Stream\ntype myStream struct {\n\tbytes int64 // total bytes seen on this stream.\n\tbidi  *bidi // maps to my bidirectional twin.\n\tdone  bool  // if true, we've seen the last packet we're going to for this stream.\n}\n\n// bidi stores each unidirectional side of a bidirectional stream.\n//\n// When a new stream comes in, if we don't have an opposite stream, a bidi is\n// created with 'a' set to the new stream.  If we DO have an opposite stream,\n// 'b' is set to the new stream.\ntype bidi struct {\n\tkey            key       // Key of the first stream, mostly for logging.\n\ta, b           *myStream // the two bidirectional streams.\n\tlastPacketSeen time.Time // last time we saw a packet from either stream.\n}\n\n// myFactory implements tcpassmebly.StreamFactory\ntype myFactory struct {\n\t// bidiMap maps keys to bidirectional stream pairs.\n\tbidiMap map[key]*bidi\n}\n\n// New handles creating a new tcpassembly.Stream.\nfunc (f *myFactory) New(netFlow, tcpFlow gopacket.Flow) tcpassembly.Stream {\n\t// Create a new stream.\n\ts := &myStream{}\n\n\t// Find the bidi bidirectional struct for this stream, creating a new one if\n\t// one doesn't already exist in the map.\n\tk := key{netFlow, tcpFlow}\n\tbd := f.bidiMap[k]\n\tif bd == nil {\n\t\tbd = &bidi{a: s, key: k}\n\t\tlog.Printf(\"[%v] created first side of bidirectional stream\", bd.key)\n\t\t// Register bidirectional with the reverse key, so the matching stream going\n\t\t// the other direction will find it.\n\t\tf.bidiMap[key{netFlow.Reverse(), tcpFlow.Reverse()}] = bd\n\t} else {\n\t\tlog.Printf(\"[%v] found second side of bidirectional stream\", bd.key)\n\t\tbd.b = s\n\t\t// Clear out the bidi we're using from the map, just in case.\n\t\tdelete(f.bidiMap, k)\n\t}\n\ts.bidi = bd\n\treturn s\n}\n\n// emptyStream is used to finish bidi that only have one stream, in\n// collectOldStreams.\nvar emptyStream = &myStream{done: true}\n\n// collectOldStreams finds any streams that haven't received a packet within\n// 'timeout', and sets/finishes the 'b' stream inside them.  The 'a' stream may\n// still receive packets after this.\nfunc (f *myFactory) collectOldStreams() {\n\tcutoff := time.Now().Add(-timeout)\n\tfor k, bd := range f.bidiMap {\n\t\tif bd.lastPacketSeen.Before(cutoff) {\n\t\t\tlog.Printf(\"[%v] timing out old stream\", bd.key)\n\t\t\tbd.b = emptyStream   // stub out b with an empty stream.\n\t\t\tdelete(f.bidiMap, k) // remove it from our map.\n\t\t\tbd.maybeFinish()     // if b was the last stream we were waiting for, finish up.\n\t\t}\n\t}\n}\n\n// Reassembled handles reassembled TCP stream data.\nfunc (s *myStream) Reassembled(rs []tcpassembly.Reassembly) {\n\tfor _, r := range rs {\n\t\t// For now, we'll simply count the bytes on each side of the TCP stream.\n\t\ts.bytes += int64(len(r.Bytes))\n\t\tif r.Skip > 0 {\n\t\t\ts.bytes += int64(r.Skip)\n\t\t}\n\t\t// Mark that we've received new packet data.\n\t\t// We could just use time.Now, but by using r.Seen we handle the case\n\t\t// where packets are being read from a file and could be very old.\n\t\tif s.bidi.lastPacketSeen.Before(r.Seen) {\n\t\t\ts.bidi.lastPacketSeen = r.Seen\n\t\t}\n\t}\n}\n\n// ReassemblyComplete marks this stream as finished.\nfunc (s *myStream) ReassemblyComplete() {\n\ts.done = true\n\ts.bidi.maybeFinish()\n}\n\n// maybeFinish will wait until both directions are complete, then print out\n// stats.\nfunc (bd *bidi) maybeFinish() {\n\tswitch {\n\tcase bd.a == nil:\n\t\tlog.Fatalf(\"[%v] a should always be non-nil, since it's set when bidis are created\", bd.key)\n\tcase !bd.a.done:\n\t\tlog.Printf(\"[%v] still waiting on first stream\", bd.key)\n\tcase bd.b == nil:\n\t\tlog.Printf(\"[%v] no second stream yet\", bd.key)\n\tcase !bd.b.done:\n\t\tlog.Printf(\"[%v] still waiting on second stream\", bd.key)\n\tdefault:\n\t\tlog.Printf(\"[%v] FINISHED, bytes: %d tx, %d rx\", bd.key, bd.a.bytes, bd.b.bytes)\n\t}\n}\n\nfunc main() {\n\tdefer util.Run()()\n\tlog.Printf(\"starting capture on interface %q\", *iface)\n\t// Set up pcap packet capture\n\thandle, err := pcap.OpenLive(*iface, int32(*snaplen), true, pcap.BlockForever)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tif err := handle.SetBPFFilter(*filter); err != nil {\n\t\tpanic(err)\n\t}\n\n\t// Set up assembly\n\tstreamFactory := &myFactory{bidiMap: make(map[key]*bidi)}\n\tstreamPool := tcpassembly.NewStreamPool(streamFactory)\n\tassembler := tcpassembly.NewAssembler(streamPool)\n\t// Limit memory usage by auto-flushing connection state if we get over 100K\n\t// packets in memory, or over 1000 for a single stream.\n\tassembler.MaxBufferedPagesTotal = 100000\n\tassembler.MaxBufferedPagesPerConnection = 1000\n\n\tlog.Println(\"reading in packets\")\n\t// Read in packets, pass to assembler.\n\tpacketSource := gopacket.NewPacketSource(handle, handle.LinkType())\n\tpackets := packetSource.Packets()\n\tticker := time.Tick(timeout / 4)\n\tfor {\n\t\tselect {\n\t\tcase packet := <-packets:\n\t\t\tif *logAllPackets {\n\t\t\t\tlog.Println(packet)\n\t\t\t}\n\t\t\tif packet.NetworkLayer() == nil || packet.TransportLayer() == nil || packet.TransportLayer().LayerType() != layers.LayerTypeTCP {\n\t\t\t\tlog.Println(\"Unusable packet\")\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ttcp := packet.TransportLayer().(*layers.TCP)\n\t\t\tassembler.AssembleWithTimestamp(packet.NetworkLayer().NetworkFlow(), tcp, packet.Metadata().Timestamp)\n\n\t\tcase <-ticker:\n\t\t\t// Every minute, flush connections that haven't seen activity in the past minute.\n\t\t\tlog.Println(\"---- FLUSHING ----\")\n\t\t\tassembler.FlushOlderThan(time.Now().Add(-timeout))\n\t\t\tstreamFactory.collectOldStreams()\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "examples/bytediff/main.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// This binary shows how to display byte differences to users via the bytediff\n// library.\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com/google/gopacket/bytediff\"\n)\n\nvar sliceA = []byte{\n\t0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x20, 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49,\n\t0x08, 0x00, 0x45, 0x00, 0x01, 0xa4, 0x39, 0xdf, 0x40, 0x00, 0x40, 0x06,\n\t0x55, 0x5a, 0xac, 0x11, 0x51, 0x49, 0xad, 0xde, 0xfe, 0xe1, 0xc5, 0xf7,\n\t0x00, 0x50, 0xc5, 0x7e, 0x0e, 0x48, 0x49, 0x07, 0x42, 0x32, 0x80, 0x18,\n\t0x00, 0x73, 0x9a, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x03, 0x77,\n\t0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20,\n\t0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f,\n\t0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x69, 0x73, 0x68,\n\t0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,\n\t0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x2d, 0x61,\n\t0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41,\n\t0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c,\n\t0x61, 0x2f, 0x35, 0x2e, 0x30, 0x20, 0x28, 0x58, 0x31, 0x31, 0x3b, 0x20,\n\t0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34,\n\t0x29, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x57, 0x65, 0x62, 0x4b, 0x69,\n\t0x74, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, 0x20, 0x28, 0x4b, 0x48, 0x54,\n\t0x4d, 0x4c, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x47, 0x65, 0x63,\n\t0x6b, 0x6f, 0x29, 0x20, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x2f, 0x31,\n\t0x35, 0x2e, 0x30, 0x2e, 0x38, 0x37, 0x34, 0x2e, 0x31, 0x32, 0x31, 0x20,\n\t0x53, 0x61, 0x66, 0x61, 0x72, 0x69, 0x2f, 0x35, 0x2e, 0x31,\n\t0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x74, 0x65,\n\t0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c,\n\t0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x68, 0x74, 0x6d,\n\t0x6c, 0x2b, 0x78, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,\n\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x3b, 0x71, 0x3d,\n\t0x30, 0x2e, 0x39, 0x2c, 0x2a, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e,\n\t0x38, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e,\n\t0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x67, 0x7a, 0x69, 0x70,\n\t0x2c, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, 0x63,\n\t0x68, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61,\n\t0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x2d, 0x55,\n\t0x53, 0x2c, 0x65, 0x6e, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x38, 0x0d, 0x0a,\n\t0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x73,\n\t0x65, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39,\n\t0x2d, 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x3b, 0x71, 0x3d, 0x30,\n\t0x2e, 0x37, 0x2c, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x33, 0x0d, 0x0a,\n\t0x0d, 0x0a,\n}\nvar sliceB = []byte{\n\t0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x20, 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49,\n\t0x08, 0x00, 0x45, 0x00, 0x01, 0xa4, 0x39, 0xdf, 0x40, 0x00, 0x40, 0x06,\n\t0x55, 0x5a, 0xac, 0x11, 0x51, 0x49, 0xad, 0xde, 0xfe, 0xe1, 0xc5, 0xf7,\n\t0x00, 0x50, 0xc5, 0x7e, 0x0e, 0x48, 0x49, 0x07, 0x42, 0x32, 0x80, 0x18,\n\t0x00, 0x73, 0x9a, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x03, 0x77,\n\t0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20,\n\t0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f,\n\t0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x69, 0x73, 0x68,\n\t0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,\n\t0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41,\n\t0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c,\n\t0x61, 0x2f, 0x35, 0x2e, 0x30, 0x20, 0x28, 0x58, 0x31, 0x31, 0x3b, 0x20,\n\t0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34,\n\t0x29, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x57, 0x65, 0x62, 0x4b, 0x69,\n\t0x74, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, 0x20, 0x28, 0x4b, 0x48, 0x54,\n\t0x4d, 0x4c, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x47, 0x65, 0x63,\n\t0x6b, 0x6f, 0x29, 0x20, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x2f, 0x31,\n\t0x35, 0x2e, 0x30, 0x2e, 0x38, 0x37, 0x34, 0x2e, 0x31, 0x32, 0x31, 0x20,\n\t0x53, 0x61, 0x66, 0x61, 0x72, 0x69, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32,\n\t0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x74, 0x65,\n\t0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c,\n\t0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x68, 0x74, 0x6d,\n\t0x6c, 0x2b, 0x78, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,\n\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x3b, 0x71, 0x3d,\n\t0x30, 0x2e, 0x39, 0x2c, 0x2a, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e,\n\t0x38, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e,\n\t0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x67, 0x7a, 0x69, 0x70,\n\t0x2c, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, 0x63,\n\t0x68, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61,\n\t0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x2d, 0x55,\n\t0x53, 0x2c, 0x65, 0x6e, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x38, 0x0d, 0x0a,\n\t0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x73,\n\t0x65, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, 0x2e, 0x39, 0x55, 0x35, 0x39,\n\t0x2d, 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x3b, 0x71, 0x3d, 0x30,\n\t0x2e, 0x37, 0x2c, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x33, 0x0d, 0x0a,\n\t0x0d, 0x0a,\n}\n\nfunc main() {\n\tfmt.Println(bytediff.BashOutput.String(bytediff.Diff(sliceA, sliceB)))\n}\n"
  },
  {
    "path": "examples/httpassembly/main.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// This binary provides sample code for using the gopacket TCP assembler and TCP\n// stream reader.  It reads packets off the wire and reconstructs HTTP requests\n// it sees, logging them.\npackage main\n\nimport (\n\t\"bufio\"\n\t\"flag\"\n\t\"io\"\n\t\"log\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/examples/util\"\n\t\"github.com/google/gopacket/layers\"\n\t\"github.com/google/gopacket/pcap\"\n\t\"github.com/google/gopacket/tcpassembly\"\n\t\"github.com/google/gopacket/tcpassembly/tcpreader\"\n)\n\nvar iface = flag.String(\"i\", \"eth0\", \"Interface to get packets from\")\nvar fname = flag.String(\"r\", \"\", \"Filename to read from, overrides -i\")\nvar snaplen = flag.Int(\"s\", 1600, \"SnapLen for pcap packet capture\")\nvar filter = flag.String(\"f\", \"tcp and dst port 80\", \"BPF filter for pcap\")\nvar logAllPackets = flag.Bool(\"v\", false, \"Logs every packet in great detail\")\n\n// Build a simple HTTP request parser using tcpassembly.StreamFactory and tcpassembly.Stream interfaces\n\n// httpStreamFactory implements tcpassembly.StreamFactory\ntype httpStreamFactory struct{}\n\n// httpStream will handle the actual decoding of http requests.\ntype httpStream struct {\n\tnet, transport gopacket.Flow\n\tr              tcpreader.ReaderStream\n}\n\nfunc (h *httpStreamFactory) New(net, transport gopacket.Flow) tcpassembly.Stream {\n\thstream := &httpStream{\n\t\tnet:       net,\n\t\ttransport: transport,\n\t\tr:         tcpreader.NewReaderStream(),\n\t}\n\tgo hstream.run() // Important... we must guarantee that data from the reader stream is read.\n\n\t// ReaderStream implements tcpassembly.Stream, so we can return a pointer to it.\n\treturn &hstream.r\n}\n\nfunc (h *httpStream) run() {\n\tbuf := bufio.NewReader(&h.r)\n\tfor {\n\t\treq, err := http.ReadRequest(buf)\n\t\tif err == io.EOF {\n\t\t\t// We must read until we see an EOF... very important!\n\t\t\treturn\n\t\t} else if err != nil {\n\t\t\tlog.Println(\"Error reading stream\", h.net, h.transport, \":\", err)\n\t\t} else {\n\t\t\tbodyBytes := tcpreader.DiscardBytesToEOF(req.Body)\n\t\t\treq.Body.Close()\n\t\t\tlog.Println(\"Received request from stream\", h.net, h.transport, \":\", req, \"with\", bodyBytes, \"bytes in request body\")\n\t\t}\n\t}\n}\n\nfunc main() {\n\tdefer util.Run()()\n\tvar handle *pcap.Handle\n\tvar err error\n\n\t// Set up pcap packet capture\n\tif *fname != \"\" {\n\t\tlog.Printf(\"Reading from pcap dump %q\", *fname)\n\t\thandle, err = pcap.OpenOffline(*fname)\n\t} else {\n\t\tlog.Printf(\"Starting capture on interface %q\", *iface)\n\t\thandle, err = pcap.OpenLive(*iface, int32(*snaplen), true, pcap.BlockForever)\n\t}\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tif err := handle.SetBPFFilter(*filter); err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// Set up assembly\n\tstreamFactory := &httpStreamFactory{}\n\tstreamPool := tcpassembly.NewStreamPool(streamFactory)\n\tassembler := tcpassembly.NewAssembler(streamPool)\n\n\tlog.Println(\"reading in packets\")\n\t// Read in packets, pass to assembler.\n\tpacketSource := gopacket.NewPacketSource(handle, handle.LinkType())\n\tpackets := packetSource.Packets()\n\tticker := time.Tick(time.Minute)\n\tfor {\n\t\tselect {\n\t\tcase packet := <-packets:\n\t\t\t// A nil packet indicates the end of a pcap file.\n\t\t\tif packet == nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif *logAllPackets {\n\t\t\t\tlog.Println(packet)\n\t\t\t}\n\t\t\tif packet.NetworkLayer() == nil || packet.TransportLayer() == nil || packet.TransportLayer().LayerType() != layers.LayerTypeTCP {\n\t\t\t\tlog.Println(\"Unusable packet\")\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ttcp := packet.TransportLayer().(*layers.TCP)\n\t\t\tassembler.AssembleWithTimestamp(packet.NetworkLayer().NetworkFlow(), tcp, packet.Metadata().Timestamp)\n\n\t\tcase <-ticker:\n\t\t\t// Every minute, flush connections that haven't seen activity in the past 2 minutes.\n\t\t\tassembler.FlushOlderThan(time.Now().Add(time.Minute * -2))\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "examples/pcapdump/main.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// The pcapdump binary implements a tcpdump-like command line tool with gopacket\n// using pcap as a backend data collection mechanism.\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"github.com/google/gopacket/dumpcommand\"\n\t\"github.com/google/gopacket/examples/util\"\n\t\"github.com/google/gopacket/pcap\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n)\n\nvar iface = flag.String(\"i\", \"eth0\", \"Interface to read packets from\")\nvar fname = flag.String(\"r\", \"\", \"Filename to read from, overrides -i\")\nvar snaplen = flag.Int(\"s\", 65536, \"Snap length (number of bytes max to read per packet\")\nvar tstype = flag.String(\"timestamp_type\", \"\", \"Type of timestamps to use\")\nvar promisc = flag.Bool(\"promisc\", true, \"Set promiscuous mode\")\n\nfunc main() {\n\tdefer util.Run()()\n\tvar handle *pcap.Handle\n\tvar err error\n\tif *fname != \"\" {\n\t\tif handle, err = pcap.OpenOffline(*fname); err != nil {\n\t\t\tlog.Fatal(\"PCAP OpenOffline error:\", err)\n\t\t}\n\t} else {\n\t\t// This is a little complicated because we want to allow all possible options\n\t\t// for creating the packet capture handle... instead of all this you can\n\t\t// just call pcap.OpenLive if you want a simple handle.\n\t\tinactive, err := pcap.NewInactiveHandle(*iface)\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"could not create: %v\", err)\n\t\t}\n\t\tdefer inactive.CleanUp()\n\t\tif err = inactive.SetSnapLen(*snaplen); err != nil {\n\t\t\tlog.Fatalf(\"could not set snap length: %v\", err)\n\t\t} else if err = inactive.SetPromisc(*promisc); err != nil {\n\t\t\tlog.Fatalf(\"could not set promisc mode: %v\", err)\n\t\t} else if err = inactive.SetTimeout(time.Second); err != nil {\n\t\t\tlog.Fatalf(\"could not set timeout: %v\", err)\n\t\t}\n\t\tif *tstype != \"\" {\n\t\t\tif t, err := pcap.TimestampSourceFromString(*tstype); err != nil {\n\t\t\t\tlog.Fatalf(\"Supported timestamp types: %v\", inactive.SupportedTimestamps())\n\t\t\t} else if err := inactive.SetTimestampSource(t); err != nil {\n\t\t\t\tlog.Fatalf(\"Supported timestamp types: %v\", inactive.SupportedTimestamps())\n\t\t\t}\n\t\t}\n\t\tif handle, err = inactive.Activate(); err != nil {\n\t\t\tlog.Fatal(\"PCAP Activate error:\", err)\n\t\t}\n\t\tdefer handle.Close()\n\t}\n\tif len(flag.Args()) > 0 {\n\t\tbpffilter := strings.Join(flag.Args(), \" \")\n\t\tfmt.Fprintf(os.Stderr, \"Using BPF filter %q\\n\", bpffilter)\n\t\tif err = handle.SetBPFFilter(bpffilter); err != nil {\n\t\t\tlog.Fatal(\"BPF filter error:\", err)\n\t\t}\n\t}\n\tdumpcommand.Run(handle)\n}\n"
  },
  {
    "path": "examples/pcaplay/main.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// The pcaplay binary load an offline capture (pcap file) and replay\n// it on the select interface, with an emphasis on packet timing\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/examples/util\"\n\t\"github.com/google/gopacket/pcap\"\n)\n\nvar iface = flag.String(\"i\", \"eth0\", \"Interface to write packets to\")\nvar fname = flag.String(\"r\", \"\", \"Filename to read from\")\nvar fast = flag.Bool(\"f\", false, \"Send each packets as fast as possible\")\n\nvar lastTS time.Time\nvar lastSend time.Time\n\nvar start time.Time\nvar bytesSent int\n\nfunc writePacketDelayed(handle *pcap.Handle, buf []byte, ci gopacket.CaptureInfo) {\n\tif ci.CaptureLength != ci.Length {\n\t\t// do not write truncated packets\n\t\treturn\n\t}\n\n\tintervalInCapture := ci.Timestamp.Sub(lastTS)\n\telapsedTime := time.Since(lastSend)\n\n\tif (intervalInCapture > elapsedTime) && !lastSend.IsZero() {\n\t\ttime.Sleep(intervalInCapture - elapsedTime)\n\t}\n\n\tlastSend = time.Now()\n\twritePacket(handle, buf)\n\tlastTS = ci.Timestamp\n}\n\nfunc writePacket(handle *pcap.Handle, buf []byte) error {\n\tif err := handle.WritePacketData(buf); err != nil {\n\t\tlog.Printf(\"Failed to send packet: %s\\n\", err)\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc pcapInfo(filename string) (start time.Time, end time.Time, packets int, size int) {\n\thandleRead, err := pcap.OpenOffline(*fname)\n\tif err != nil {\n\t\tlog.Fatal(\"PCAP OpenOffline error (handle to read packet):\", err)\n\t}\n\n\tvar previousTs time.Time\n\tvar deltaTotal time.Duration\n\n\tfor {\n\t\tdata, ci, err := handleRead.ReadPacketData()\n\t\tif err != nil && err != io.EOF {\n\t\t\tlog.Fatal(err)\n\t\t} else if err == io.EOF {\n\t\t\tbreak\n\t\t} else {\n\n\t\t\tif start.IsZero() {\n\t\t\t\tstart = ci.Timestamp\n\t\t\t}\n\t\t\tend = ci.Timestamp\n\t\t\tpackets++\n\t\t\tsize += len(data)\n\n\t\t\tif previousTs.IsZero() {\n\t\t\t\tpreviousTs = ci.Timestamp\n\t\t\t} else {\n\t\t\t\tdeltaTotal += ci.Timestamp.Sub(previousTs)\n\t\t\t\tpreviousTs = ci.Timestamp\n\t\t\t}\n\t\t}\n\t}\n\tsec := int(deltaTotal.Seconds())\n\tif sec == 0 {\n\t\tsec = 1\n\t}\n\tfmt.Printf(\"Avg packet rate %d/s\\n\", packets/sec)\n\treturn start, end, packets, size\n}\n\nfunc main() {\n\tdefer util.Run()()\n\n\t// Sanity checks\n\tif *fname == \"\" {\n\t\tlog.Fatal(\"Need a input file\")\n\t}\n\n\t// Open PCAP file + handle potential BPF Filter\n\thandleRead, err := pcap.OpenOffline(*fname)\n\tif err != nil {\n\t\tlog.Fatal(\"PCAP OpenOffline error (handle to read packet):\", err)\n\t}\n\tdefer handleRead.Close()\n\tif len(flag.Args()) > 0 {\n\t\tbpffilter := strings.Join(flag.Args(), \" \")\n\t\tfmt.Fprintf(os.Stderr, \"Using BPF filter %q\\n\", bpffilter)\n\t\tif err = handleRead.SetBPFFilter(bpffilter); err != nil {\n\t\t\tlog.Fatal(\"BPF filter error:\", err)\n\t\t}\n\t}\n\t// Open up a second pcap handle for packet writes.\n\thandleWrite, err := pcap.OpenLive(*iface, 65536, true, pcap.BlockForever)\n\tif err != nil {\n\t\tlog.Fatal(\"PCAP OpenLive error (handle to write packet):\", err)\n\t}\n\tdefer handleWrite.Close()\n\n\tstart = time.Now()\n\tpkt := 0\n\ttsStart, tsEnd, packets, size := pcapInfo(*fname)\n\n\t// Loop over packets and write them\n\tfor {\n\t\tdata, ci, err := handleRead.ReadPacketData()\n\t\tswitch {\n\t\tcase err == io.EOF:\n\t\t\tfmt.Printf(\"\\nFinished in %s\", time.Since(start))\n\t\t\treturn\n\t\tcase err != nil:\n\t\t\tlog.Printf(\"Failed to read packet %d: %s\\n\", pkt, err)\n\t\tdefault:\n\t\t\tif *fast {\n\t\t\t\twritePacket(handleWrite, data)\n\t\t\t} else {\n\t\t\t\twritePacketDelayed(handleWrite, data, ci)\n\t\t\t}\n\n\t\t\tbytesSent += len(data)\n\t\t\tduration := time.Since(start)\n\t\t\tpkt++\n\n\t\t\tif duration > time.Second {\n\t\t\t\trate := bytesSent / int(duration.Seconds())\n\t\t\t\tremainingTime := tsEnd.Sub(tsStart) - duration\n\t\t\t\tfmt.Printf(\"\\rrate %d kB/sec - sent %d/%d kB - %d/%d packets - remaining time %s\",\n\t\t\t\t\trate/1000, bytesSent/1000, size/1000,\n\t\t\t\t\tpkt, packets, remainingTime)\n\t\t\t}\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "examples/pfdump/main.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// The pfdump binary implements a tcpdump-like command line tool with gopacket\n// using pfring as a backend data collection mechanism.\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"github.com/google/gopacket/dumpcommand\"\n\t\"github.com/google/gopacket/examples/util\"\n\t\"github.com/google/gopacket/pfring\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n)\n\nvar iface = flag.String(\"i\", \"eth0\", \"Interface to read packets from\")\nvar snaplen = flag.Int(\"s\", 65536, \"Snap length (number of bytes max to read per packet\")\nvar cluster = flag.Int(\"cluster\", -1, \"If >= 0, sets the pfring cluster to this value\")\nvar clustertype = flag.Int(\"clustertype\", int(pfring.ClusterPerFlow), \"Cluster type\")\n\nfunc main() {\n\tdefer util.Run()()\n\tvar ring *pfring.Ring\n\tvar err error\n\tif ring, err = pfring.NewRing(*iface, uint32(*snaplen), pfring.FlagPromisc); err != nil {\n\t\tlog.Fatalln(\"pfring ring creation error:\", err)\n\t}\n\tif len(flag.Args()) > 0 {\n\t\tbpffilter := strings.Join(flag.Args(), \" \")\n\t\tfmt.Fprintf(os.Stderr, \"Using BPF filter %q\\n\", bpffilter)\n\t\tif err = ring.SetBPFFilter(bpffilter); err != nil {\n\t\t\tlog.Fatalln(\"BPF filter error:\", err)\n\t\t}\n\t}\n\tif *cluster >= 0 {\n\t\tif err = ring.SetCluster(*cluster, pfring.ClusterType(*clustertype)); err != nil {\n\t\t\tlog.Fatalln(\"pfring SetCluster error:\", err)\n\t\t}\n\t}\n\tif err = ring.SetSocketMode(pfring.ReadOnly); err != nil {\n\t\tlog.Fatalln(\"pfring SetSocketMode error:\", err)\n\t} else if err = ring.Enable(); err != nil {\n\t\tlog.Fatalln(\"pfring Enable error:\", err)\n\t}\n\tdumpcommand.Run(ring)\n}\n"
  },
  {
    "path": "examples/reassemblydump/compare.sh",
    "content": "#!/bin/bash\n\n# Limitations: if the number extracted files in too big, finding identical\n#              files might fail due to '*' in cmdline\n#              This would require to split sha256sum symlinks in xx/yyyyy\n\nusage()\n{\n        echo \"Usage: $0 <file.pcap> <output-dir>\"\n        echo \"Compares tcpreassembly against tcpflow\"\n        echo \"\"\n        echo \"$@\"\n        exit 1\n}\n\ndebug() {\n        return # comment me for debug\n        echo \"$@\"\n}\n\ndie()\n{\n        (\n        echo \"$@\"\n        echo\n        ) >&2\n        exit 1\n}\n\nrename()\n{\n        local path=\"$1\"\n        local filter=\"$2\"\n        find \"$path\" -type f -name \"$filter\" -print0 |\n                while IFS= read -r -d $'\\0' f; do\n                        local sha256=\"$(sha256sum \"$f\" | cut -d ' ' -f 1)\"\n                        local target=\"$(dirname $f)/../sha256/$sha256\"\n                        debug \"$target → $f\"\n                        mkdir -p \"$(dirname \"$target\")\" || return 1\n                        if [ ! -f \"$target\" ]; then\n                                ln -sr \"$f\" \"$target\" || return 1\n                        fi\n                done\n        return $?\n}\n\nmain()\n{\n        local src=\"$1\"\n        local out=\"$2\"\n\n        # TODO: make options\n        local extra=\"\"\n        extra=\"$extra -debug\"\n        extra=\"$extra -cpuprofile \"$out/gopacket/cpu.prof\"\"\n        extra=\"$extra -memprofile \"$out/gopacket/mem.prof\"\"\n\n        [ ! -f \"$src\" ] && usage \"Missing pcap\"\n        [ ! -d \"$out\" ] && ( mkdir \"$out\" || die \"Failed to create $out\" )\n\n        mkdir -p \"$out/gopacket/all\" || die \"Failed to create $out/gopacket/all\"\n        mkdir -p \"$out/tcpflow/all\" || die \"Faield to create $out/tcpflow/all\"\n\n        echo \" * Running go reassembly\"\n        time ./reassemblydump -r \"$src\" $debug -output \"$out/gopacket/all\" $extra -writeincomplete -ignorefsmerr -nooptcheck -allowmissinginit port 80 &> \"$out/gopacket.txt\" || die \"Failed to run reassmbly. Check $out/gopacket.txt\"\n        echo \" * Running tcpflow\"\n        time tcpflow -e http -r \"$src\" -o \"$out/tcpflow/all\" port 80 &> \"$out/tcpflow.txt\" || die \"Failed to run tcpflow. Check $out/tcpflow.txt\"\n\n        echo \" * Creating sha256sum symlinks for gopacket\"\n        rename \"$out/gopacket/all\" '*' || die \"Failed to rename in $out/gopacket\"\n        echo \" * Creating sha256sum symlinks for tcpflow\"\n        rename \"$out/tcpflow/all\" '*HTTPBODY*' || die \"Failed to rename in $out/tcpflow\"\n\n        # Remove identical files\n        echo \" * Finding identical files\"\n        local nb=0\n        mkdir -p \"$out/gopacket/sha256-equal\"\n        mkdir -p \"$out/tcpflow/sha256-equal\"\n        for f in \"$out/gopacket/sha256/\"*; do\n                local f=\"$(basename \"$f\")\"\n                [ -f \"$out/tcpflow/sha256/$f\" ] && {\n                        debug \"    $f\"\n                        mv \"$out/gopacket/sha256/$f\" \"$out/gopacket/sha256-equal\"\n                        mv \"$out/tcpflow/sha256/$f\"  \"$out/tcpflow/sha256-equal\"\n                        nb=$((nb+1))\n                }\n        done\n        echo \"   →  found $nb files\"\n\n        echo \" * Diffing {gopacket,tcpflow}/sha256\"\n        local rc=0\n        for p in \"gopacket\" \"tcpflow\"; do\n                local nb=$(ls -1 \"$out/$p/sha256/\" | wc -l)\n                if [ $nb -ne 0 ]; then\n                        rc=$((rc+1))\n                        echo \"   → $nb files in $out/$p/sha256\"\n                fi\n        done\n        return $rc\n}\n\nmain \"$@\"\nexit $?\n"
  },
  {
    "path": "examples/reassemblydump/main.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// The pcapdump binary implements a tcpdump-like command line tool with gopacket\n// using pcap as a backend data collection mechanism.\npackage main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/signal\"\n\t\"path\"\n\t\"runtime/pprof\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/examples/util\"\n\t\"github.com/google/gopacket/ip4defrag\"\n\t\"github.com/google/gopacket/layers\" // pulls in all layers decoders\n\t\"github.com/google/gopacket/pcap\"\n\t\"github.com/google/gopacket/reassembly\"\n)\n\nvar maxcount = flag.Int(\"c\", -1, \"Only grab this many packets, then exit\")\nvar decoder = flag.String(\"decoder\", \"\", \"Name of the decoder to use (default: guess from capture)\")\nvar statsevery = flag.Int(\"stats\", 1000, \"Output statistics every N packets\")\nvar lazy = flag.Bool(\"lazy\", false, \"If true, do lazy decoding\")\nvar nodefrag = flag.Bool(\"nodefrag\", false, \"If true, do not do IPv4 defrag\")\nvar checksum = flag.Bool(\"checksum\", false, \"Check TCP checksum\")\nvar nooptcheck = flag.Bool(\"nooptcheck\", false, \"Do not check TCP options (useful to ignore MSS on captures with TSO)\")\nvar ignorefsmerr = flag.Bool(\"ignorefsmerr\", false, \"Ignore TCP FSM errors\")\nvar allowmissinginit = flag.Bool(\"allowmissinginit\", false, \"Support streams without SYN/SYN+ACK/ACK sequence\")\nvar verbose = flag.Bool(\"verbose\", false, \"Be verbose\")\nvar debug = flag.Bool(\"debug\", false, \"Display debug information\")\nvar quiet = flag.Bool(\"quiet\", false, \"Be quiet regarding errors\")\n\n// http\nvar nohttp = flag.Bool(\"nohttp\", false, \"Disable HTTP parsing\")\nvar output = flag.String(\"output\", \"\", \"Path to create file for HTTP 200 OK responses\")\nvar writeincomplete = flag.Bool(\"writeincomplete\", false, \"Write incomplete response\")\n\nvar hexdump = flag.Bool(\"dump\", false, \"Dump HTTP request/response as hex\")\nvar hexdumppkt = flag.Bool(\"dumppkt\", false, \"Dump packet as hex\")\n\n// capture\nvar iface = flag.String(\"i\", \"eth0\", \"Interface to read packets from\")\nvar fname = flag.String(\"r\", \"\", \"Filename to read from, overrides -i\")\nvar snaplen = flag.Int(\"s\", 65536, \"Snap length (number of bytes max to read per packet\")\nvar tstype = flag.String(\"timestamp_type\", \"\", \"Type of timestamps to use\")\nvar promisc = flag.Bool(\"promisc\", true, \"Set promiscuous mode\")\n\nvar memprofile = flag.String(\"memprofile\", \"\", \"Write memory profile\")\n\nvar stats struct {\n\tipdefrag            int\n\tmissedBytes         int\n\tpkt                 int\n\tsz                  int\n\ttotalsz             int\n\trejectFsm           int\n\trejectOpt           int\n\trejectConnFsm       int\n\treassembled         int\n\toutOfOrderBytes     int\n\toutOfOrderPackets   int\n\tbiggestChunkBytes   int\n\tbiggestChunkPackets int\n\toverlapBytes        int\n\toverlapPackets      int\n}\n\nconst closeTimeout time.Duration = time.Hour * 24 // Closing inactive: TODO: from CLI\nconst timeout time.Duration = time.Minute * 5     // Pending bytes: TODO: from CLI\n\n/*\n * HTTP part\n */\n\ntype httpReader struct {\n\tident    string\n\tisClient bool\n\tbytes    chan []byte\n\tdata     []byte\n\thexdump  bool\n\tparent   *tcpStream\n}\n\nfunc (h *httpReader) Read(p []byte) (int, error) {\n\tok := true\n\tfor ok && len(h.data) == 0 {\n\t\th.data, ok = <-h.bytes\n\t}\n\tif !ok || len(h.data) == 0 {\n\t\treturn 0, io.EOF\n\t}\n\n\tl := copy(p, h.data)\n\th.data = h.data[l:]\n\treturn l, nil\n}\n\nvar outputLevel int\nvar errorsMap map[string]uint\nvar errorsMapMutex sync.Mutex\nvar errors uint\n\n// Too bad for perf that a... is evaluated\nfunc Error(t string, s string, a ...interface{}) {\n\terrorsMapMutex.Lock()\n\terrors++\n\tnb, _ := errorsMap[t]\n\terrorsMap[t] = nb + 1\n\terrorsMapMutex.Unlock()\n\tif outputLevel >= 0 {\n\t\tfmt.Printf(s, a...)\n\t}\n}\nfunc Info(s string, a ...interface{}) {\n\tif outputLevel >= 1 {\n\t\tfmt.Printf(s, a...)\n\t}\n}\nfunc Debug(s string, a ...interface{}) {\n\tif outputLevel >= 2 {\n\t\tfmt.Printf(s, a...)\n\t}\n}\n\nfunc (h *httpReader) run(wg *sync.WaitGroup) {\n\tdefer wg.Done()\n\tb := bufio.NewReader(h)\n\tfor true {\n\t\tif h.isClient {\n\t\t\treq, err := http.ReadRequest(b)\n\t\t\tif err == io.EOF || err == io.ErrUnexpectedEOF {\n\t\t\t\tbreak\n\t\t\t} else if err != nil {\n\t\t\t\tError(\"HTTP-request\", \"HTTP/%s Request error: %s (%v,%+v)\\n\", h.ident, err, err, err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tbody, err := ioutil.ReadAll(req.Body)\n\t\t\ts := len(body)\n\t\t\tif err != nil {\n\t\t\t\tError(\"HTTP-request-body\", \"Got body err: %s\\n\", err)\n\t\t\t} else if h.hexdump {\n\t\t\t\tInfo(\"Body(%d/0x%x)\\n%s\\n\", len(body), len(body), hex.Dump(body))\n\t\t\t}\n\t\t\treq.Body.Close()\n\t\t\tInfo(\"HTTP/%s Request: %s %s (body:%d)\\n\", h.ident, req.Method, req.URL, s)\n\t\t\th.parent.Lock()\n\t\t\th.parent.urls = append(h.parent.urls, req.URL.String())\n\t\t\th.parent.Unlock()\n\t\t} else {\n\t\t\tres, err := http.ReadResponse(b, nil)\n\t\t\tvar req string\n\t\t\th.parent.Lock()\n\t\t\tif len(h.parent.urls) == 0 {\n\t\t\t\treq = fmt.Sprintf(\"<no-request-seen>\")\n\t\t\t} else {\n\t\t\t\treq, h.parent.urls = h.parent.urls[0], h.parent.urls[1:]\n\t\t\t}\n\t\t\th.parent.Unlock()\n\t\t\tif err == io.EOF || err == io.ErrUnexpectedEOF {\n\t\t\t\tbreak\n\t\t\t} else if err != nil {\n\t\t\t\tError(\"HTTP-response\", \"HTTP/%s Response error: %s (%v,%+v)\\n\", h.ident, err, err, err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tbody, err := ioutil.ReadAll(res.Body)\n\t\t\ts := len(body)\n\t\t\tif err != nil {\n\t\t\t\tError(\"HTTP-response-body\", \"HTTP/%s: failed to get body(parsed len:%d): %s\\n\", h.ident, s, err)\n\t\t\t}\n\t\t\tif h.hexdump {\n\t\t\t\tInfo(\"Body(%d/0x%x)\\n%s\\n\", len(body), len(body), hex.Dump(body))\n\t\t\t}\n\t\t\tres.Body.Close()\n\t\t\tsym := \",\"\n\t\t\tif res.ContentLength > 0 && res.ContentLength != int64(s) {\n\t\t\t\tsym = \"!=\"\n\t\t\t}\n\t\t\tcontentType, ok := res.Header[\"Content-Type\"]\n\t\t\tif !ok {\n\t\t\t\tcontentType = []string{http.DetectContentType(body)}\n\t\t\t}\n\t\t\tencoding := res.Header[\"Content-Encoding\"]\n\t\t\tInfo(\"HTTP/%s Response: %s URL:%s (%d%s%d%s) -> %s\\n\", h.ident, res.Status, req, res.ContentLength, sym, s, contentType, encoding)\n\t\t\tif (err == nil || *writeincomplete) && *output != \"\" {\n\t\t\t\tbase := url.QueryEscape(path.Base(req))\n\t\t\t\tif err != nil {\n\t\t\t\t\tbase = \"incomplete-\" + base\n\t\t\t\t}\n\t\t\t\tbase = path.Join(*output, base)\n\t\t\t\tif len(base) > 250 {\n\t\t\t\t\tbase = base[:250] + \"...\"\n\t\t\t\t}\n\t\t\t\tif base == *output {\n\t\t\t\t\tbase = path.Join(*output, \"noname\")\n\t\t\t\t}\n\t\t\t\ttarget := base\n\t\t\t\tn := 0\n\t\t\t\tfor true {\n\t\t\t\t\t_, err := os.Stat(target)\n\t\t\t\t\t//if os.IsNotExist(err) != nil {\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\ttarget = fmt.Sprintf(\"%s-%d\", base, n)\n\t\t\t\t\tn++\n\t\t\t\t}\n\t\t\t\tf, err := os.Create(target)\n\t\t\t\tif err != nil {\n\t\t\t\t\tError(\"HTTP-create\", \"Cannot create %s: %s\\n\", target, err)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tvar r io.Reader\n\t\t\t\tr = bytes.NewBuffer(body)\n\t\t\t\tif len(encoding) > 0 && (encoding[0] == \"gzip\" || encoding[0] == \"deflate\") {\n\t\t\t\t\tr, err = gzip.NewReader(r)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tError(\"HTTP-gunzip\", \"Failed to gzip decode: %s\", err)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif err == nil {\n\t\t\t\t\tw, err := io.Copy(f, r)\n\t\t\t\t\tif _, ok := r.(*gzip.Reader); ok {\n\t\t\t\t\t\tr.(*gzip.Reader).Close()\n\t\t\t\t\t}\n\t\t\t\t\tf.Close()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tError(\"HTTP-save\", \"%s: failed to save %s (l:%d): %s\\n\", h.ident, target, w, err)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tInfo(\"%s: Saved %s (l:%d)\\n\", h.ident, target, w)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/*\n * The TCP factory: returns a new Stream\n */\ntype tcpStreamFactory struct {\n\twg     sync.WaitGroup\n\tdoHTTP bool\n}\n\nfunc (factory *tcpStreamFactory) New(net, transport gopacket.Flow, tcp *layers.TCP, ac reassembly.AssemblerContext) reassembly.Stream {\n\tDebug(\"* NEW: %s %s\\n\", net, transport)\n\tfsmOptions := reassembly.TCPSimpleFSMOptions{\n\t\tSupportMissingEstablishment: *allowmissinginit,\n\t}\n\tstream := &tcpStream{\n\t\tnet:        net,\n\t\ttransport:  transport,\n\t\tisDNS:      tcp.SrcPort == 53 || tcp.DstPort == 53,\n\t\tisHTTP:     (tcp.SrcPort == 80 || tcp.DstPort == 80) && factory.doHTTP,\n\t\treversed:   tcp.SrcPort == 80,\n\t\ttcpstate:   reassembly.NewTCPSimpleFSM(fsmOptions),\n\t\tident:      fmt.Sprintf(\"%s:%s\", net, transport),\n\t\toptchecker: reassembly.NewTCPOptionCheck(),\n\t}\n\tif stream.isHTTP {\n\t\tstream.client = httpReader{\n\t\t\tbytes:    make(chan []byte),\n\t\t\tident:    fmt.Sprintf(\"%s %s\", net, transport),\n\t\t\thexdump:  *hexdump,\n\t\t\tparent:   stream,\n\t\t\tisClient: true,\n\t\t}\n\t\tstream.server = httpReader{\n\t\t\tbytes:   make(chan []byte),\n\t\t\tident:   fmt.Sprintf(\"%s %s\", net.Reverse(), transport.Reverse()),\n\t\t\thexdump: *hexdump,\n\t\t\tparent:  stream,\n\t\t}\n\t\tfactory.wg.Add(2)\n\t\tgo stream.client.run(&factory.wg)\n\t\tgo stream.server.run(&factory.wg)\n\t}\n\treturn stream\n}\n\nfunc (factory *tcpStreamFactory) WaitGoRoutines() {\n\tfactory.wg.Wait()\n}\n\n/*\n * The assembler context\n */\ntype Context struct {\n\tCaptureInfo gopacket.CaptureInfo\n}\n\nfunc (c *Context) GetCaptureInfo() gopacket.CaptureInfo {\n\treturn c.CaptureInfo\n}\n\n/*\n * TCP stream\n */\n\n/* It's a connection (bidirectional) */\ntype tcpStream struct {\n\ttcpstate       *reassembly.TCPSimpleFSM\n\tfsmerr         bool\n\toptchecker     reassembly.TCPOptionCheck\n\tnet, transport gopacket.Flow\n\tisDNS          bool\n\tisHTTP         bool\n\treversed       bool\n\tclient         httpReader\n\tserver         httpReader\n\turls           []string\n\tident          string\n\tsync.Mutex\n}\n\nfunc (t *tcpStream) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir reassembly.TCPFlowDirection, nextSeq reassembly.Sequence, start *bool, ac reassembly.AssemblerContext) bool {\n\t// FSM\n\tif !t.tcpstate.CheckState(tcp, dir) {\n\t\tError(\"FSM\", \"%s: Packet rejected by FSM (state:%s)\\n\", t.ident, t.tcpstate.String())\n\t\tstats.rejectFsm++\n\t\tif !t.fsmerr {\n\t\t\tt.fsmerr = true\n\t\t\tstats.rejectConnFsm++\n\t\t}\n\t\tif !*ignorefsmerr {\n\t\t\treturn false\n\t\t}\n\t}\n\t// Options\n\terr := t.optchecker.Accept(tcp, ci, dir, nextSeq, start)\n\tif err != nil {\n\t\tError(\"OptionChecker\", \"%s: Packet rejected by OptionChecker: %s\\n\", t.ident, err)\n\t\tstats.rejectOpt++\n\t\tif !*nooptcheck {\n\t\t\treturn false\n\t\t}\n\t}\n\t// Checksum\n\taccept := true\n\tif *checksum {\n\t\tc, err := tcp.ComputeChecksum()\n\t\tif err != nil {\n\t\t\tError(\"ChecksumCompute\", \"%s: Got error computing checksum: %s\\n\", t.ident, err)\n\t\t\taccept = false\n\t\t} else if c != 0x0 {\n\t\t\tError(\"Checksum\", \"%s: Invalid checksum: 0x%x\\n\", t.ident, c)\n\t\t\taccept = false\n\t\t}\n\t}\n\tif !accept {\n\t\tstats.rejectOpt++\n\t}\n\treturn accept\n}\n\nfunc (t *tcpStream) ReassembledSG(sg reassembly.ScatterGather, ac reassembly.AssemblerContext) {\n\tdir, start, end, skip := sg.Info()\n\tlength, saved := sg.Lengths()\n\t// update stats\n\tsgStats := sg.Stats()\n\tif skip > 0 {\n\t\tstats.missedBytes += skip\n\t}\n\tstats.sz += length - saved\n\tstats.pkt += sgStats.Packets\n\tif sgStats.Chunks > 1 {\n\t\tstats.reassembled++\n\t}\n\tstats.outOfOrderPackets += sgStats.QueuedPackets\n\tstats.outOfOrderBytes += sgStats.QueuedBytes\n\tif length > stats.biggestChunkBytes {\n\t\tstats.biggestChunkBytes = length\n\t}\n\tif sgStats.Packets > stats.biggestChunkPackets {\n\t\tstats.biggestChunkPackets = sgStats.Packets\n\t}\n\tif sgStats.OverlapBytes != 0 && sgStats.OverlapPackets == 0 {\n\t\tfmt.Printf(\"bytes:%d, pkts:%d\\n\", sgStats.OverlapBytes, sgStats.OverlapPackets)\n\t\tpanic(\"Invalid overlap\")\n\t}\n\tstats.overlapBytes += sgStats.OverlapBytes\n\tstats.overlapPackets += sgStats.OverlapPackets\n\n\tvar ident string\n\tif dir == reassembly.TCPDirClientToServer {\n\t\tident = fmt.Sprintf(\"%v %v(%s): \", t.net, t.transport, dir)\n\t} else {\n\t\tident = fmt.Sprintf(\"%v %v(%s): \", t.net.Reverse(), t.transport.Reverse(), dir)\n\t}\n\tDebug(\"%s: SG reassembled packet with %d bytes (start:%v,end:%v,skip:%d,saved:%d,nb:%d,%d,overlap:%d,%d)\\n\", ident, length, start, end, skip, saved, sgStats.Packets, sgStats.Chunks, sgStats.OverlapBytes, sgStats.OverlapPackets)\n\tif skip == -1 && *allowmissinginit {\n\t\t// this is allowed\n\t} else if skip != 0 {\n\t\t// Missing bytes in stream: do not even try to parse it\n\t\treturn\n\t}\n\tdata := sg.Fetch(length)\n\tif t.isDNS {\n\t\tdns := &layers.DNS{}\n\t\tvar decoded []gopacket.LayerType\n\t\tif len(data) < 2 {\n\t\t\tif len(data) > 0 {\n\t\t\t\tsg.KeepFrom(0)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tdnsSize := binary.BigEndian.Uint16(data[:2])\n\t\tmissing := int(dnsSize) - len(data[2:])\n\t\tDebug(\"dnsSize: %d, missing: %d\\n\", dnsSize, missing)\n\t\tif missing > 0 {\n\t\t\tInfo(\"Missing some bytes: %d\\n\", missing)\n\t\t\tsg.KeepFrom(0)\n\t\t\treturn\n\t\t}\n\t\tp := gopacket.NewDecodingLayerParser(layers.LayerTypeDNS, dns)\n\t\terr := p.DecodeLayers(data[2:], &decoded)\n\t\tif err != nil {\n\t\t\tError(\"DNS-parser\", \"Failed to decode DNS: %v\\n\", err)\n\t\t} else {\n\t\t\tDebug(\"DNS: %s\\n\", gopacket.LayerDump(dns))\n\t\t}\n\t\tif len(data) > 2+int(dnsSize) {\n\t\t\tsg.KeepFrom(2 + int(dnsSize))\n\t\t}\n\t} else if t.isHTTP {\n\t\tif length > 0 {\n\t\t\tif *hexdump {\n\t\t\t\tDebug(\"Feeding http with:\\n%s\", hex.Dump(data))\n\t\t\t}\n\t\t\tif dir == reassembly.TCPDirClientToServer && !t.reversed {\n\t\t\t\tt.client.bytes <- data\n\t\t\t} else {\n\t\t\t\tt.server.bytes <- data\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (t *tcpStream) ReassemblyComplete(ac reassembly.AssemblerContext) bool {\n\tDebug(\"%s: Connection closed\\n\", t.ident)\n\tif t.isHTTP {\n\t\tclose(t.client.bytes)\n\t\tclose(t.server.bytes)\n\t}\n\t// do not remove the connection to allow last ACK\n\treturn false\n}\n\nfunc main() {\n\tdefer util.Run()()\n\tvar handle *pcap.Handle\n\tvar err error\n\tif *debug {\n\t\toutputLevel = 2\n\t} else if *verbose {\n\t\toutputLevel = 1\n\t} else if *quiet {\n\t\toutputLevel = -1\n\t}\n\terrorsMap = make(map[string]uint)\n\tif *fname != \"\" {\n\t\tif handle, err = pcap.OpenOffline(*fname); err != nil {\n\t\t\tlog.Fatal(\"PCAP OpenOffline error:\", err)\n\t\t}\n\t} else {\n\t\t// This is a little complicated because we want to allow all possible options\n\t\t// for creating the packet capture handle... instead of all this you can\n\t\t// just call pcap.OpenLive if you want a simple handle.\n\t\tinactive, err := pcap.NewInactiveHandle(*iface)\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"could not create: %v\", err)\n\t\t}\n\t\tdefer inactive.CleanUp()\n\t\tif err = inactive.SetSnapLen(*snaplen); err != nil {\n\t\t\tlog.Fatalf(\"could not set snap length: %v\", err)\n\t\t} else if err = inactive.SetPromisc(*promisc); err != nil {\n\t\t\tlog.Fatalf(\"could not set promisc mode: %v\", err)\n\t\t} else if err = inactive.SetTimeout(time.Second); err != nil {\n\t\t\tlog.Fatalf(\"could not set timeout: %v\", err)\n\t\t}\n\t\tif *tstype != \"\" {\n\t\t\tif t, err := pcap.TimestampSourceFromString(*tstype); err != nil {\n\t\t\t\tlog.Fatalf(\"Supported timestamp types: %v\", inactive.SupportedTimestamps())\n\t\t\t} else if err := inactive.SetTimestampSource(t); err != nil {\n\t\t\t\tlog.Fatalf(\"Supported timestamp types: %v\", inactive.SupportedTimestamps())\n\t\t\t}\n\t\t}\n\t\tif handle, err = inactive.Activate(); err != nil {\n\t\t\tlog.Fatal(\"PCAP Activate error:\", err)\n\t\t}\n\t\tdefer handle.Close()\n\t}\n\tif len(flag.Args()) > 0 {\n\t\tbpffilter := strings.Join(flag.Args(), \" \")\n\t\tInfo(\"Using BPF filter %q\\n\", bpffilter)\n\t\tif err = handle.SetBPFFilter(bpffilter); err != nil {\n\t\t\tlog.Fatal(\"BPF filter error:\", err)\n\t\t}\n\t}\n\n\tvar dec gopacket.Decoder\n\tvar ok bool\n\tdecoder_name := *decoder\n\tif decoder_name == \"\" {\n\t\tdecoder_name = fmt.Sprintf(\"%s\", handle.LinkType())\n\t}\n\tif dec, ok = gopacket.DecodersByLayerName[decoder_name]; !ok {\n\t\tlog.Fatalln(\"No decoder named\", decoder_name)\n\t}\n\tsource := gopacket.NewPacketSource(handle, dec)\n\tsource.Lazy = *lazy\n\tsource.NoCopy = true\n\tInfo(\"Starting to read packets\\n\")\n\tcount := 0\n\tbytes := int64(0)\n\tstart := time.Now()\n\tdefragger := ip4defrag.NewIPv4Defragmenter()\n\n\tstreamFactory := &tcpStreamFactory{doHTTP: !*nohttp}\n\tstreamPool := reassembly.NewStreamPool(streamFactory)\n\tassembler := reassembly.NewAssembler(streamPool)\n\n\tsignalChan := make(chan os.Signal, 1)\n\tsignal.Notify(signalChan, os.Interrupt)\n\n\tfor packet := range source.Packets() {\n\t\tcount++\n\t\tDebug(\"PACKET #%d\\n\", count)\n\t\tdata := packet.Data()\n\t\tbytes += int64(len(data))\n\t\tif *hexdumppkt {\n\t\t\tDebug(\"Packet content (%d/0x%x)\\n%s\\n\", len(data), len(data), hex.Dump(data))\n\t\t}\n\n\t\t// defrag the IPv4 packet if required\n\t\tif !*nodefrag {\n\t\t\tip4Layer := packet.Layer(layers.LayerTypeIPv4)\n\t\t\tif ip4Layer == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tip4 := ip4Layer.(*layers.IPv4)\n\t\t\tl := ip4.Length\n\t\t\tnewip4, err := defragger.DefragIPv4(ip4)\n\t\t\tif err != nil {\n\t\t\t\tlog.Fatalln(\"Error while de-fragmenting\", err)\n\t\t\t} else if newip4 == nil {\n\t\t\t\tDebug(\"Fragment...\\n\")\n\t\t\t\tcontinue // packet fragment, we don't have whole packet yet.\n\t\t\t}\n\t\t\tif newip4.Length != l {\n\t\t\t\tstats.ipdefrag++\n\t\t\t\tDebug(\"Decoding re-assembled packet: %s\\n\", newip4.NextLayerType())\n\t\t\t\tpb, ok := packet.(gopacket.PacketBuilder)\n\t\t\t\tif !ok {\n\t\t\t\t\tpanic(\"Not a PacketBuilder\")\n\t\t\t\t}\n\t\t\t\tnextDecoder := newip4.NextLayerType()\n\t\t\t\tnextDecoder.Decode(newip4.Payload, pb)\n\t\t\t}\n\t\t}\n\n\t\ttcp := packet.Layer(layers.LayerTypeTCP)\n\t\tif tcp != nil {\n\t\t\ttcp := tcp.(*layers.TCP)\n\t\t\tif *checksum {\n\t\t\t\terr := tcp.SetNetworkLayerForChecksum(packet.NetworkLayer())\n\t\t\t\tif err != nil {\n\t\t\t\t\tlog.Fatalf(\"Failed to set network layer for checksum: %s\\n\", err)\n\t\t\t\t}\n\t\t\t}\n\t\t\tc := Context{\n\t\t\t\tCaptureInfo: packet.Metadata().CaptureInfo,\n\t\t\t}\n\t\t\tstats.totalsz += len(tcp.Payload)\n\t\t\tassembler.AssembleWithContext(packet.NetworkLayer().NetworkFlow(), tcp, &c)\n\t\t}\n\t\tif count%*statsevery == 0 {\n\t\t\tref := packet.Metadata().CaptureInfo.Timestamp\n\t\t\tflushed, closed := assembler.FlushWithOptions(reassembly.FlushOptions{T: ref.Add(-timeout), TC: ref.Add(-closeTimeout)})\n\t\t\tDebug(\"Forced flush: %d flushed, %d closed (%s)\", flushed, closed, ref)\n\t\t}\n\n\t\tdone := *maxcount > 0 && count >= *maxcount\n\t\tif count%*statsevery == 0 || done {\n\t\t\terrorsMapMutex.Lock()\n\t\t\terrorMapLen := len(errorsMap)\n\t\t\terrorsMapMutex.Unlock()\n\t\t\tfmt.Fprintf(os.Stderr, \"Processed %v packets (%v bytes) in %v (errors: %v, errTypes:%v)\\n\", count, bytes, time.Since(start), errors, errorMapLen)\n\t\t}\n\t\tselect {\n\t\tcase <-signalChan:\n\t\t\tfmt.Fprintf(os.Stderr, \"\\nCaught SIGINT: aborting\\n\")\n\t\t\tdone = true\n\t\tdefault:\n\t\t\t// NOP: continue\n\t\t}\n\t\tif done {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tclosed := assembler.FlushAll()\n\tDebug(\"Final flush: %d closed\", closed)\n\tif outputLevel >= 2 {\n\t\tstreamPool.Dump()\n\t}\n\n\tif *memprofile != \"\" {\n\t\tf, err := os.Create(*memprofile)\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tpprof.WriteHeapProfile(f)\n\t\tf.Close()\n\t}\n\n\tstreamFactory.WaitGoRoutines()\n\tDebug(\"%s\\n\", assembler.Dump())\n\tif !*nodefrag {\n\t\tfmt.Printf(\"IPdefrag:\\t\\t%d\\n\", stats.ipdefrag)\n\t}\n\tfmt.Printf(\"TCP stats:\\n\")\n\tfmt.Printf(\" missed bytes:\\t\\t%d\\n\", stats.missedBytes)\n\tfmt.Printf(\" total packets:\\t\\t%d\\n\", stats.pkt)\n\tfmt.Printf(\" rejected FSM:\\t\\t%d\\n\", stats.rejectFsm)\n\tfmt.Printf(\" rejected Options:\\t%d\\n\", stats.rejectOpt)\n\tfmt.Printf(\" reassembled bytes:\\t%d\\n\", stats.sz)\n\tfmt.Printf(\" total TCP bytes:\\t%d\\n\", stats.totalsz)\n\tfmt.Printf(\" conn rejected FSM:\\t%d\\n\", stats.rejectConnFsm)\n\tfmt.Printf(\" reassembled chunks:\\t%d\\n\", stats.reassembled)\n\tfmt.Printf(\" out-of-order packets:\\t%d\\n\", stats.outOfOrderPackets)\n\tfmt.Printf(\" out-of-order bytes:\\t%d\\n\", stats.outOfOrderBytes)\n\tfmt.Printf(\" biggest-chunk packets:\\t%d\\n\", stats.biggestChunkPackets)\n\tfmt.Printf(\" biggest-chunk bytes:\\t%d\\n\", stats.biggestChunkBytes)\n\tfmt.Printf(\" overlap packets:\\t%d\\n\", stats.overlapPackets)\n\tfmt.Printf(\" overlap bytes:\\t\\t%d\\n\", stats.overlapBytes)\n\tfmt.Printf(\"Errors: %d\\n\", errors)\n\tfor e, _ := range errorsMap {\n\t\tfmt.Printf(\" %s:\\t\\t%d\\n\", e, errorsMap[e])\n\t}\n}\n"
  },
  {
    "path": "examples/snoopread/main.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// snoopread is a example for read a snoop file using\n// gopacket and its subpackages and output the decoded data with a package count\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/pcapgo\"\n)\n\nfunc main() {\n\t//download snoop from https://wiki.wireshark.org/SampleCaptures\n\tf, err := os.Open(\"example.snoop\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t\treturn\n\t}\n\tdefer f.Close()\n\thandle, err := pcapgo.NewSnoopReader(f)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t\treturn\n\t}\n\n\tlt, err := handle.LinkType()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t\treturn\n\t}\n\tpacketSource := gopacket.NewPacketSource(handle, lt)\n\n\tcnt := 0\n\tfor packet := range packetSource.Packets() {\n\t\tfmt.Println(packet)\n\t\tcnt++\n\t}\n\tfmt.Printf(\"Packet count: %d\\n\", cnt)\n}\n"
  },
  {
    "path": "examples/statsassembly/main.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// This binary provides sample code for using the gopacket TCP assembler raw,\n// without the help of the tcpreader library.  It watches TCP streams and\n// reports statistics on completed streams.\n//\n// It also uses gopacket.DecodingLayerParser instead of the normal\n// gopacket.PacketSource, to highlight the methods, pros, and cons of this\n// approach.\npackage main\n\nimport (\n\t\"flag\"\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/examples/util\"\n\t\"github.com/google/gopacket/layers\"\n\t\"github.com/google/gopacket/pcap\"\n\t\"github.com/google/gopacket/tcpassembly\"\n\t\"log\"\n\t\"time\"\n)\n\nvar iface = flag.String(\"i\", \"eth0\", \"Interface to get packets from\")\nvar snaplen = flag.Int(\"s\", 65536, \"SnapLen for pcap packet capture\")\nvar filter = flag.String(\"f\", \"tcp\", \"BPF filter for pcap\")\nvar logAllPackets = flag.Bool(\"v\", false, \"Log whenever we see a packet\")\nvar bufferedPerConnection = flag.Int(\"connection_max_buffer\", 0, `\nMax packets to buffer for a single connection before skipping over a gap in data\nand continuing to stream the connection after the buffer.  If zero or less, this\nis infinite.`)\nvar bufferedTotal = flag.Int(\"total_max_buffer\", 0, `\nMax packets to buffer total before skipping over gaps in connections and\ncontinuing to stream connection data.  If zero or less, this is infinite`)\nvar flushAfter = flag.String(\"flush_after\", \"2m\", `\nConnections which have buffered packets (they've gotten packets out of order and\nare waiting for old packets to fill the gaps) are flushed after they're this old\n(their oldest gap is skipped).  Any string parsed by time.ParseDuration is\nacceptable here`)\nvar packetCount = flag.Int(\"c\", -1, `\nQuit after processing this many packets, flushing all currently buffered\nconnections.  If negative, this is infinite`)\n\n// simpleStreamFactory implements tcpassembly.StreamFactory\ntype statsStreamFactory struct{}\n\n// statsStream will handle the actual decoding of stats requests.\ntype statsStream struct {\n\tnet, transport                      gopacket.Flow\n\tbytes, packets, outOfOrder, skipped int64\n\tstart, end                          time.Time\n\tsawStart, sawEnd                    bool\n}\n\n// New creates a new stream.  It's called whenever the assembler sees a stream\n// it isn't currently following.\nfunc (factory *statsStreamFactory) New(net, transport gopacket.Flow) tcpassembly.Stream {\n\tlog.Printf(\"new stream %v:%v started\", net, transport)\n\ts := &statsStream{\n\t\tnet:       net,\n\t\ttransport: transport,\n\t\tstart:     time.Now(),\n\t}\n\ts.end = s.start\n\t// ReaderStream implements tcpassembly.Stream, so we can return a pointer to it.\n\treturn s\n}\n\n// Reassembled is called whenever new packet data is available for reading.\n// Reassembly objects contain stream data IN ORDER.\nfunc (s *statsStream) Reassembled(reassemblies []tcpassembly.Reassembly) {\n\tfor _, reassembly := range reassemblies {\n\t\tif reassembly.Seen.Before(s.end) {\n\t\t\ts.outOfOrder++\n\t\t} else {\n\t\t\ts.end = reassembly.Seen\n\t\t}\n\t\ts.bytes += int64(len(reassembly.Bytes))\n\t\ts.packets += 1\n\t\tif reassembly.Skip > 0 {\n\t\t\ts.skipped += int64(reassembly.Skip)\n\t\t}\n\t\ts.sawStart = s.sawStart || reassembly.Start\n\t\ts.sawEnd = s.sawEnd || reassembly.End\n\t}\n}\n\n// ReassemblyComplete is called when the TCP assembler believes a stream has\n// finished.\nfunc (s *statsStream) ReassemblyComplete() {\n\tdiffSecs := float64(s.end.Sub(s.start)) / float64(time.Second)\n\tlog.Printf(\"Reassembly of stream %v:%v complete - start:%v end:%v bytes:%v packets:%v ooo:%v bps:%v pps:%v skipped:%v\",\n\t\ts.net, s.transport, s.start, s.end, s.bytes, s.packets, s.outOfOrder,\n\t\tfloat64(s.bytes)/diffSecs, float64(s.packets)/diffSecs, s.skipped)\n}\n\nfunc main() {\n\tdefer util.Run()()\n\n\tflushDuration, err := time.ParseDuration(*flushAfter)\n\tif err != nil {\n\t\tlog.Fatal(\"invalid flush duration: \", *flushAfter)\n\t}\n\n\tlog.Printf(\"starting capture on interface %q\", *iface)\n\t// Set up pcap packet capture\n\thandle, err := pcap.OpenLive(*iface, int32(*snaplen), true, flushDuration/2)\n\tif err != nil {\n\t\tlog.Fatal(\"error opening pcap handle: \", err)\n\t}\n\tif err := handle.SetBPFFilter(*filter); err != nil {\n\t\tlog.Fatal(\"error setting BPF filter: \", err)\n\t}\n\n\t// Set up assembly\n\tstreamFactory := &statsStreamFactory{}\n\tstreamPool := tcpassembly.NewStreamPool(streamFactory)\n\tassembler := tcpassembly.NewAssembler(streamPool)\n\tassembler.MaxBufferedPagesPerConnection = *bufferedPerConnection\n\tassembler.MaxBufferedPagesTotal = *bufferedTotal\n\n\tlog.Println(\"reading in packets\")\n\n\t// We use a DecodingLayerParser here instead of a simpler PacketSource.\n\t// This approach should be measurably faster, but is also more rigid.\n\t// PacketSource will handle any known type of packet safely and easily,\n\t// but DecodingLayerParser will only handle those packet types we\n\t// specifically pass in.  This trade-off can be quite useful, though, in\n\t// high-throughput situations.\n\tvar eth layers.Ethernet\n\tvar dot1q layers.Dot1Q\n\tvar ip4 layers.IPv4\n\tvar ip6 layers.IPv6\n\tvar ip6extensions layers.IPv6ExtensionSkipper\n\tvar tcp layers.TCP\n\tvar payload gopacket.Payload\n\tparser := gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet,\n\t\t&eth, &dot1q, &ip4, &ip6, &ip6extensions, &tcp, &payload)\n\tdecoded := make([]gopacket.LayerType, 0, 4)\n\n\tnextFlush := time.Now().Add(flushDuration / 2)\n\n\tvar byteCount int64\n\tstart := time.Now()\n\nloop:\n\tfor ; *packetCount != 0; *packetCount-- {\n\t\t// Check to see if we should flush the streams we have\n\t\t// that haven't seen any new data in a while.  Note we set a\n\t\t// timeout on our PCAP handle, so this should happen even if we\n\t\t// never see packet data.\n\t\tif time.Now().After(nextFlush) {\n\t\t\tstats, _ := handle.Stats()\n\t\t\tlog.Printf(\"flushing all streams that haven't seen packets in the last 2 minutes, pcap stats: %+v\", stats)\n\t\t\tassembler.FlushOlderThan(time.Now().Add(flushDuration))\n\t\t\tnextFlush = time.Now().Add(flushDuration / 2)\n\t\t}\n\n\t\t// To speed things up, we're also using the ZeroCopy method for\n\t\t// reading packet data.  This method is faster than the normal\n\t\t// ReadPacketData, but the returned bytes in 'data' are\n\t\t// invalidated by any subsequent ZeroCopyReadPacketData call.\n\t\t// Note that tcpassembly is entirely compatible with this packet\n\t\t// reading method.  This is another trade-off which might be\n\t\t// appropriate for high-throughput sniffing:  it avoids a packet\n\t\t// copy, but its cost is much more careful handling of the\n\t\t// resulting byte slice.\n\t\tdata, ci, err := handle.ZeroCopyReadPacketData()\n\n\t\tif err != nil {\n\t\t\tlog.Printf(\"error getting packet: %v\", err)\n\t\t\tcontinue\n\t\t}\n\t\terr = parser.DecodeLayers(data, &decoded)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"error decoding packet: %v\", err)\n\t\t\tcontinue\n\t\t}\n\t\tif *logAllPackets {\n\t\t\tlog.Printf(\"decoded the following layers: %v\", decoded)\n\t\t}\n\t\tbyteCount += int64(len(data))\n\t\t// Find either the IPv4 or IPv6 address to use as our network\n\t\t// layer.\n\t\tfoundNetLayer := false\n\t\tvar netFlow gopacket.Flow\n\t\tfor _, typ := range decoded {\n\t\t\tswitch typ {\n\t\t\tcase layers.LayerTypeIPv4:\n\t\t\t\tnetFlow = ip4.NetworkFlow()\n\t\t\t\tfoundNetLayer = true\n\t\t\tcase layers.LayerTypeIPv6:\n\t\t\t\tnetFlow = ip6.NetworkFlow()\n\t\t\t\tfoundNetLayer = true\n\t\t\tcase layers.LayerTypeTCP:\n\t\t\t\tif foundNetLayer {\n\t\t\t\t\tassembler.AssembleWithTimestamp(netFlow, &tcp, ci.Timestamp)\n\t\t\t\t} else {\n\t\t\t\t\tlog.Println(\"could not find IPv4 or IPv6 layer, inoring\")\n\t\t\t\t}\n\t\t\t\tcontinue loop\n\t\t\t}\n\t\t}\n\t\tlog.Println(\"could not find TCP layer\")\n\t}\n\tassembler.FlushAll()\n\tlog.Printf(\"processed %d bytes in %v\", byteCount, time.Since(start))\n}\n"
  },
  {
    "path": "examples/synscan/main.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// synscan implements a TCP syn scanner on top of pcap.\n// It's more complicated than arpscan, since it has to handle sending packets\n// outside the local network, requiring some routing and ARP work.\n//\n// Since this is just an example program, it aims for simplicity over\n// performance.  It doesn't handle sending packets very quickly, it scans IPs\n// serially instead of in parallel, and uses gopacket.Packet instead of\n// gopacket.DecodingLayerParser for packet processing.  We also make use of very\n// simple timeout logic with time.Since.\n//\n// Making it blazingly fast is left as an exercise to the reader.\npackage main\n\nimport (\n\t\"errors\"\n\t\"flag\"\n\t\"log\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/examples/util\"\n\t\"github.com/google/gopacket/layers\"\n\t\"github.com/google/gopacket/pcap\"\n\t\"github.com/google/gopacket/routing\"\n)\n\n// scanner handles scanning a single IP address.\ntype scanner struct {\n\t// iface is the interface to send packets on.\n\tiface *net.Interface\n\t// destination, gateway (if applicable), and source IP addresses to use.\n\tdst, gw, src net.IP\n\n\thandle *pcap.Handle\n\n\t// opts and buf allow us to easily serialize packets in the send()\n\t// method.\n\topts gopacket.SerializeOptions\n\tbuf  gopacket.SerializeBuffer\n}\n\n// newScanner creates a new scanner for a given destination IP address, using\n// router to determine how to route packets to that IP.\nfunc newScanner(ip net.IP, router routing.Router) (*scanner, error) {\n\ts := &scanner{\n\t\tdst: ip,\n\t\topts: gopacket.SerializeOptions{\n\t\t\tFixLengths:       true,\n\t\t\tComputeChecksums: true,\n\t\t},\n\t\tbuf: gopacket.NewSerializeBuffer(),\n\t}\n\t// Figure out the route to the IP.\n\tiface, gw, src, err := router.Route(ip)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tlog.Printf(\"scanning ip %v with interface %v, gateway %v, src %v\", ip, iface.Name, gw, src)\n\ts.gw, s.src, s.iface = gw, src, iface\n\n\t// Open the handle for reading/writing.\n\t// Note we could very easily add some BPF filtering here to greatly\n\t// decrease the number of packets we have to look at when getting back\n\t// scan results.\n\thandle, err := pcap.OpenLive(iface.Name, 65536, true, pcap.BlockForever)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ts.handle = handle\n\treturn s, nil\n}\n\n// close cleans up the handle.\nfunc (s *scanner) close() {\n\ts.handle.Close()\n}\n\n// getHwAddr is a hacky but effective way to get the destination hardware\n// address for our packets.  It does an ARP request for our gateway (if there is\n// one) or destination IP (if no gateway is necessary), then waits for an ARP\n// reply.  This is pretty slow right now, since it blocks on the ARP\n// request/reply.\nfunc (s *scanner) getHwAddr() (net.HardwareAddr, error) {\n\tstart := time.Now()\n\tarpDst := s.dst\n\tif s.gw != nil {\n\t\tarpDst = s.gw\n\t}\n\t// Prepare the layers to send for an ARP request.\n\teth := layers.Ethernet{\n\t\tSrcMAC:       s.iface.HardwareAddr,\n\t\tDstMAC:       net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff},\n\t\tEthernetType: layers.EthernetTypeARP,\n\t}\n\tarp := layers.ARP{\n\t\tAddrType:          layers.LinkTypeEthernet,\n\t\tProtocol:          layers.EthernetTypeIPv4,\n\t\tHwAddressSize:     6,\n\t\tProtAddressSize:   4,\n\t\tOperation:         layers.ARPRequest,\n\t\tSourceHwAddress:   []byte(s.iface.HardwareAddr),\n\t\tSourceProtAddress: []byte(s.src),\n\t\tDstHwAddress:      []byte{0, 0, 0, 0, 0, 0},\n\t\tDstProtAddress:    []byte(arpDst),\n\t}\n\t// Send a single ARP request packet (we never retry a send, since this\n\t// is just an example ;)\n\tif err := s.send(&eth, &arp); err != nil {\n\t\treturn nil, err\n\t}\n\t// Wait 3 seconds for an ARP reply.\n\tfor {\n\t\tif time.Since(start) > time.Second*3 {\n\t\t\treturn nil, errors.New(\"timeout getting ARP reply\")\n\t\t}\n\t\tdata, _, err := s.handle.ReadPacketData()\n\t\tif err == pcap.NextErrorTimeoutExpired {\n\t\t\tcontinue\n\t\t} else if err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tpacket := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.NoCopy)\n\t\tif arpLayer := packet.Layer(layers.LayerTypeARP); arpLayer != nil {\n\t\t\tarp := arpLayer.(*layers.ARP)\n\t\t\tif net.IP(arp.SourceProtAddress).Equal(net.IP(arpDst)) {\n\t\t\t\treturn net.HardwareAddr(arp.SourceHwAddress), nil\n\t\t\t}\n\t\t}\n\t}\n}\n\n// scan scans the dst IP address of this scanner.\nfunc (s *scanner) scan() error {\n\t// First off, get the MAC address we should be sending packets to.\n\thwaddr, err := s.getHwAddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\t// Construct all the network layers we need.\n\teth := layers.Ethernet{\n\t\tSrcMAC:       s.iface.HardwareAddr,\n\t\tDstMAC:       hwaddr,\n\t\tEthernetType: layers.EthernetTypeIPv4,\n\t}\n\tip4 := layers.IPv4{\n\t\tSrcIP:    s.src,\n\t\tDstIP:    s.dst,\n\t\tVersion:  4,\n\t\tTTL:      64,\n\t\tProtocol: layers.IPProtocolTCP,\n\t}\n\ttcp := layers.TCP{\n\t\tSrcPort: 54321,\n\t\tDstPort: 0, // will be incremented during the scan\n\t\tSYN:     true,\n\t}\n\ttcp.SetNetworkLayerForChecksum(&ip4)\n\n\t// Create the flow we expect returning packets to have, so we can check\n\t// against it and discard useless packets.\n\tipFlow := gopacket.NewFlow(layers.EndpointIPv4, s.dst, s.src)\n\tstart := time.Now()\n\tfor {\n\t\t// Send one packet per loop iteration until we've sent packets\n\t\t// to all of ports [1, 65535].\n\t\tif tcp.DstPort < 65535 {\n\t\t\tstart = time.Now()\n\t\t\ttcp.DstPort++\n\t\t\tif err := s.send(&eth, &ip4, &tcp); err != nil {\n\t\t\t\tlog.Printf(\"error sending to port %v: %v\", tcp.DstPort, err)\n\t\t\t}\n\t\t}\n\t\t// Time out 5 seconds after the last packet we sent.\n\t\tif time.Since(start) > time.Second*5 {\n\t\t\tlog.Printf(\"timed out for %v, assuming we've seen all we can\", s.dst)\n\t\t\treturn nil\n\t\t}\n\n\t\t// Read in the next packet.\n\t\tdata, _, err := s.handle.ReadPacketData()\n\t\tif err == pcap.NextErrorTimeoutExpired {\n\t\t\tcontinue\n\t\t} else if err != nil {\n\t\t\tlog.Printf(\"error reading packet: %v\", err)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Parse the packet.  We'd use DecodingLayerParser here if we\n\t\t// wanted to be really fast.\n\t\tpacket := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.NoCopy)\n\n\t\t// Find the packets we care about, and print out logging\n\t\t// information about them.  All others are ignored.\n\t\tif net := packet.NetworkLayer(); net == nil {\n\t\t\t// log.Printf(\"packet has no network layer\")\n\t\t} else if net.NetworkFlow() != ipFlow {\n\t\t\t// log.Printf(\"packet does not match our ip src/dst\")\n\t\t} else if tcpLayer := packet.Layer(layers.LayerTypeTCP); tcpLayer == nil {\n\t\t\t// log.Printf(\"packet has not tcp layer\")\n\t\t} else if tcp, ok := tcpLayer.(*layers.TCP); !ok {\n\t\t\t// We panic here because this is guaranteed to never\n\t\t\t// happen.\n\t\t\tpanic(\"tcp layer is not tcp layer :-/\")\n\t\t} else if tcp.DstPort != 54321 {\n\t\t\t// log.Printf(\"dst port %v does not match\", tcp.DstPort)\n\t\t} else if tcp.RST {\n\t\t\tlog.Printf(\"  port %v closed\", tcp.SrcPort)\n\t\t} else if tcp.SYN && tcp.ACK {\n\t\t\tlog.Printf(\"  port %v open\", tcp.SrcPort)\n\t\t} else {\n\t\t\t// log.Printf(\"ignoring useless packet\")\n\t\t}\n\t}\n}\n\n// send sends the given layers as a single packet on the network.\nfunc (s *scanner) send(l ...gopacket.SerializableLayer) error {\n\tif err := gopacket.SerializeLayers(s.buf, s.opts, l...); err != nil {\n\t\treturn err\n\t}\n\treturn s.handle.WritePacketData(s.buf.Bytes())\n}\n\nfunc main() {\n\tdefer util.Run()()\n\trouter, err := routing.New()\n\tif err != nil {\n\t\tlog.Fatal(\"routing error:\", err)\n\t}\n\tfor _, arg := range flag.Args() {\n\t\tvar ip net.IP\n\t\tif ip = net.ParseIP(arg); ip == nil {\n\t\t\tlog.Printf(\"non-ip target: %q\", arg)\n\t\t\tcontinue\n\t\t} else if ip = ip.To4(); ip == nil {\n\t\t\tlog.Printf(\"non-ipv4 target: %q\", arg)\n\t\t\tcontinue\n\t\t}\n\t\t// Note:  newScanner creates and closes a pcap Handle once for\n\t\t// every scan target.  We could do much better, were this not an\n\t\t// example ;)\n\t\ts, err := newScanner(ip, router)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"unable to create scanner for %v: %v\", ip, err)\n\t\t\tcontinue\n\t\t}\n\t\tif err := s.scan(); err != nil {\n\t\t\tlog.Printf(\"unable to scan %v: %v\", ip, err)\n\t\t}\n\t\ts.close()\n\t}\n}\n"
  },
  {
    "path": "examples/util/util.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// Package util provides shared utilities for all gopacket examples.\npackage util\n\nimport (\n\t\"flag\"\n\t\"log\"\n\t\"os\"\n\t\"runtime/pprof\"\n)\n\nvar cpuprofile = flag.String(\"cpuprofile\", \"\", \"Where to write CPU profile\")\n\n// Run starts up stuff at the beginning of a main function, and returns a\n// function to defer until the function completes.  It should be used like this:\n//\n//   func main() {\n//     defer util.Run()()\n//     ... stuff ...\n//   }\nfunc Run() func() {\n\tflag.Parse()\n\tif *cpuprofile != \"\" {\n\t\tf, err := os.Create(*cpuprofile)\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"could not open cpu profile file %q\", *cpuprofile)\n\t\t}\n\t\tpprof.StartCPUProfile(f)\n\t\treturn func() {\n\t\t\tpprof.StopCPUProfile()\n\t\t\tf.Close()\n\t\t}\n\t}\n\treturn func() {}\n}\n"
  },
  {
    "path": "flows.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage gopacket\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"strconv\"\n)\n\n// MaxEndpointSize determines the maximum size in bytes of an endpoint address.\n//\n// Endpoints/Flows have a problem:  They need to be hashable.  Therefore, they\n// can't use a byte slice.  The two obvious choices are to use a string or a\n// byte array.  Strings work great, but string creation requires memory\n// allocation, which can be slow.  Arrays work great, but have a fixed size.  We\n// originally used the former, now we've switched to the latter.  Use of a fixed\n// byte-array doubles the speed of constructing a flow (due to not needing to\n// allocate).  This is a huge increase... too much for us to pass up.\n//\n// The end result of this, though, is that an endpoint/flow can't be created\n// using more than MaxEndpointSize bytes per address.\nconst MaxEndpointSize = 16\n\n// Endpoint is the set of bytes used to address packets at various layers.\n// See LinkLayer, NetworkLayer, and TransportLayer specifications.\n// Endpoints are usable as map keys.\ntype Endpoint struct {\n\ttyp EndpointType\n\tlen int\n\traw [MaxEndpointSize]byte\n}\n\n// EndpointType returns the endpoint type associated with this endpoint.\nfunc (a Endpoint) EndpointType() EndpointType { return a.typ }\n\n// Raw returns the raw bytes of this endpoint.  These aren't human-readable\n// most of the time, but they are faster than calling String.\nfunc (a Endpoint) Raw() []byte { return a.raw[:a.len] }\n\n// LessThan provides a stable ordering for all endpoints.  It sorts first based\n// on the EndpointType of an endpoint, then based on the raw bytes of that\n// endpoint.\n//\n// For some endpoints, the actual comparison may not make sense, however this\n// ordering does provide useful information for most Endpoint types.\n// Ordering is based first on endpoint type, then on raw endpoint bytes.\n// Endpoint bytes are sorted lexicographically.\nfunc (a Endpoint) LessThan(b Endpoint) bool {\n\treturn a.typ < b.typ || (a.typ == b.typ && bytes.Compare(a.raw[:a.len], b.raw[:b.len]) < 0)\n}\n\n// fnvHash is used by our FastHash functions, and implements the FNV hash\n// created by Glenn Fowler, Landon Curt Noll, and Phong Vo.\n// See http://isthe.com/chongo/tech/comp/fnv/.\nfunc fnvHash(s []byte) (h uint64) {\n\th = fnvBasis\n\tfor i := 0; i < len(s); i++ {\n\t\th ^= uint64(s[i])\n\t\th *= fnvPrime\n\t}\n\treturn\n}\n\nconst fnvBasis = 14695981039346656037\nconst fnvPrime = 1099511628211\n\n// FastHash provides a quick hashing function for an endpoint, useful if you'd\n// like to split up endpoints by modulos or other load-balancing techniques.\n// It uses a variant of Fowler-Noll-Vo hashing.\n//\n// The output of FastHash is not guaranteed to remain the same through future\n// code revisions, so should not be used to key values in persistent storage.\nfunc (a Endpoint) FastHash() (h uint64) {\n\th = fnvHash(a.raw[:a.len])\n\th ^= uint64(a.typ)\n\th *= fnvPrime\n\treturn\n}\n\n// NewEndpoint creates a new Endpoint object.\n//\n// The size of raw must be less than MaxEndpointSize, otherwise this function\n// will panic.\nfunc NewEndpoint(typ EndpointType, raw []byte) (e Endpoint) {\n\te.len = len(raw)\n\tif e.len > MaxEndpointSize {\n\t\tpanic(\"raw byte length greater than MaxEndpointSize\")\n\t}\n\te.typ = typ\n\tcopy(e.raw[:], raw)\n\treturn\n}\n\n// EndpointTypeMetadata is used to register a new endpoint type.\ntype EndpointTypeMetadata struct {\n\t// Name is the string returned by an EndpointType's String function.\n\tName string\n\t// Formatter is called from an Endpoint's String function to format the raw\n\t// bytes in an Endpoint into a human-readable string.\n\tFormatter func([]byte) string\n}\n\n// EndpointType is the type of a gopacket Endpoint.  This type determines how\n// the bytes stored in the endpoint should be interpreted.\ntype EndpointType int64\n\nvar endpointTypes = map[EndpointType]EndpointTypeMetadata{}\n\n// RegisterEndpointType creates a new EndpointType and registers it globally.\n// It MUST be passed a unique number, or it will panic.  Numbers 0-999 are\n// reserved for gopacket's use.\nfunc RegisterEndpointType(num int, meta EndpointTypeMetadata) EndpointType {\n\tt := EndpointType(num)\n\tif _, ok := endpointTypes[t]; ok {\n\t\tpanic(\"Endpoint type number already in use\")\n\t}\n\tendpointTypes[t] = meta\n\treturn t\n}\n\nfunc (e EndpointType) String() string {\n\tif t, ok := endpointTypes[e]; ok {\n\t\treturn t.Name\n\t}\n\treturn strconv.Itoa(int(e))\n}\n\nfunc (a Endpoint) String() string {\n\tif t, ok := endpointTypes[a.typ]; ok && t.Formatter != nil {\n\t\treturn t.Formatter(a.raw[:a.len])\n\t}\n\treturn fmt.Sprintf(\"%v:%v\", a.typ, a.raw)\n}\n\n// Flow represents the direction of traffic for a packet layer, as a source and destination Endpoint.\n// Flows are usable as map keys.\ntype Flow struct {\n\ttyp        EndpointType\n\tslen, dlen int\n\tsrc, dst   [MaxEndpointSize]byte\n}\n\n// FlowFromEndpoints creates a new flow by pasting together two endpoints.\n// The endpoints must have the same EndpointType, or this function will return\n// an error.\nfunc FlowFromEndpoints(src, dst Endpoint) (_ Flow, err error) {\n\tif src.typ != dst.typ {\n\t\terr = fmt.Errorf(\"Mismatched endpoint types: %v->%v\", src.typ, dst.typ)\n\t\treturn\n\t}\n\treturn Flow{src.typ, src.len, dst.len, src.raw, dst.raw}, nil\n}\n\n// FastHash provides a quick hashing function for a flow, useful if you'd\n// like to split up flows by modulos or other load-balancing techniques.\n// It uses a variant of Fowler-Noll-Vo hashing, and is guaranteed to collide\n// with its reverse flow.  IE: the flow A->B will have the same hash as the flow\n// B->A.\n//\n// The output of FastHash is not guaranteed to remain the same through future\n// code revisions, so should not be used to key values in persistent storage.\nfunc (f Flow) FastHash() (h uint64) {\n\t// This combination must be commutative.  We don't use ^, since that would\n\t// give the same hash for all A->A flows.\n\th = fnvHash(f.src[:f.slen]) + fnvHash(f.dst[:f.dlen])\n\th ^= uint64(f.typ)\n\th *= fnvPrime\n\treturn\n}\n\n// String returns a human-readable representation of this flow, in the form\n// \"Src->Dst\"\nfunc (f Flow) String() string {\n\ts, d := f.Endpoints()\n\treturn fmt.Sprintf(\"%v->%v\", s, d)\n}\n\n// EndpointType returns the EndpointType for this Flow.\nfunc (f Flow) EndpointType() EndpointType {\n\treturn f.typ\n}\n\n// Endpoints returns the two Endpoints for this flow.\nfunc (f Flow) Endpoints() (src, dst Endpoint) {\n\treturn Endpoint{f.typ, f.slen, f.src}, Endpoint{f.typ, f.dlen, f.dst}\n}\n\n// Src returns the source Endpoint for this flow.\nfunc (f Flow) Src() (src Endpoint) {\n\tsrc, _ = f.Endpoints()\n\treturn\n}\n\n// Dst returns the destination Endpoint for this flow.\nfunc (f Flow) Dst() (dst Endpoint) {\n\t_, dst = f.Endpoints()\n\treturn\n}\n\n// Reverse returns a new flow with endpoints reversed.\nfunc (f Flow) Reverse() Flow {\n\treturn Flow{f.typ, f.dlen, f.slen, f.dst, f.src}\n}\n\n// NewFlow creates a new flow.\n//\n// src and dst must have length <= MaxEndpointSize, otherwise NewFlow will\n// panic.\nfunc NewFlow(t EndpointType, src, dst []byte) (f Flow) {\n\tf.slen = len(src)\n\tf.dlen = len(dst)\n\tif f.slen > MaxEndpointSize || f.dlen > MaxEndpointSize {\n\t\tpanic(\"flow raw byte length greater than MaxEndpointSize\")\n\t}\n\tf.typ = t\n\tcopy(f.src[:], src)\n\tcopy(f.dst[:], dst)\n\treturn\n}\n\n// EndpointInvalid is an endpoint type used for invalid endpoints, IE endpoints\n// that are specified incorrectly during creation.\nvar EndpointInvalid = RegisterEndpointType(0, EndpointTypeMetadata{Name: \"invalid\", Formatter: func(b []byte) string {\n\treturn fmt.Sprintf(\"%v\", b)\n}})\n\n// InvalidEndpoint is a singleton Endpoint of type EndpointInvalid.\nvar InvalidEndpoint = NewEndpoint(EndpointInvalid, nil)\n\n// InvalidFlow is a singleton Flow of type EndpointInvalid.\nvar InvalidFlow = NewFlow(EndpointInvalid, nil, nil)\n"
  },
  {
    "path": "gc",
    "content": "#!/bin/bash\n# Copyright 2012 Google, Inc. All rights reserved.\n\n# This script provides a simple way to run benchmarks against previous code and\n# keep a log of how benchmarks change over time.  When used with the --benchmark\n# flag, it runs benchmarks from the current code and from the last commit run\n# with --benchmark, then stores the results in the git commit description.  We\n# rerun the old benchmarks along with the new ones, since there's no guarantee\n# that git commits will happen on the same machine, so machine differences could\n# cause wildly inaccurate results.\n#\n# If you're making changes to 'gopacket' which could cause performance changes,\n# you may be requested to use this commit script to make sure your changes don't\n# have large detrimental effects (or to show off how awesome your performance\n# improvements are).\n#\n# If not run with the --benchmark flag, this script is still very useful... it\n# makes sure all the correct go formatting, building, and testing work as\n# expected.\n\nfunction Usage {\n  cat <<EOF\nUSAGE:  $0 [--benchmark regexp] [--root] [--gen] <git commit flags...>\n\n--benchmark:  Run benchmark comparisons against last benchmark'd commit\n--root:  Run tests that require root priviledges\n--gen:  Generate code for MACs/ports by pulling down external data\n\nNote, some 'git commit' flags are necessary, if all else fails, pass in -a\nEOF\n  exit 1\n}\n\nBENCH=\"\"\nGEN=\"\"\nROOT=\"\"\nwhile [ ! -z \"$1\" ]; do\n  case \"$1\" in\n    \"--benchmark\")\n      BENCH=\"$2\"\n      shift\n      shift\n      ;;\n    \"--gen\")\n      GEN=\"yes\"\n      shift\n      ;;\n    \"--root\")\n      ROOT=\"yes\"\n      shift\n      ;;\n    \"--help\")\n      Usage\n      ;;\n    \"-h\")\n      Usage\n      ;;\n    \"help\")\n      Usage\n      ;;\n    *)\n      break\n      ;;\n  esac\ndone\n\nfunction Root {\n  if [ ! -z \"$ROOT\" ]; then\n    local exec=\"$1\"\n    # Some folks (like me) keep source code in places inaccessible by root (like\n    # NFS), so to make sure things run smoothly we copy them to a /tmp location.\n    local tmpfile=\"$(mktemp -t gopacket_XXXXXXXX)\"\n    echo \"Running root test executable $exec as $tmpfile\"\n    cp \"$exec\" \"$tmpfile\"\n    chmod a+x \"$tmpfile\"\n    shift\n    sudo \"$tmpfile\" \"$@\"\n  fi\n}\n\nif [ \"$#\" -eq \"0\" ]; then\n  Usage\nfi\n\ncd $(dirname $0)\n\n# Check for copyright notices.\nfor filename in $(find ./ -type f -name '*.go'); do\n  if ! head -n 1 \"$filename\" | grep -q Copyright; then\n    echo \"File '$filename' may not have copyright notice\"\n    exit 1\n  fi\ndone\n\nset -e\nset -x\n\nif [ ! -z \"$ROOT\" ]; then\n  echo \"Running SUDO to get root priviledges for root tests\"\n  sudo echo \"have root\"\nfi\n\nif [ ! -z \"$GEN\" ]; then\n  pushd macs\n  go run gen.go | gofmt > valid_mac_prefixes.go\n  popd\n  pushd layers\n  go run gen.go | gofmt > iana_ports.go\n  go run gen2.go | gofmt > enums_generated.go\n  popd\nfi\n\n# Make sure everything is formatted, compiles, and tests pass.\ngo fmt ./...\ngo test -i ./... 2>/dev/null >/dev/null || true\ngo test\ngo build\npushd examples/bytediff\ngo build\npopd\nif [ -f /usr/include/pcap.h ]; then\n  pushd pcap\n  go test ./...\n  go build ./...\n  go build pcap_tester.go\n  Root pcap_tester --mode=basic\n  Root pcap_tester --mode=filtered\n  Root pcap_tester --mode=timestamp || echo \"You might not support timestamp sources\"\n  popd\n  pushd examples/afpacket\n  go build\n  popd\n  pushd examples/pcapdump\n  go build\n  popd\n  pushd examples/arpscan\n  go build\n  popd\n  pushd examples/bidirectional\n  go build\n  popd\n  pushd examples/synscan\n  go build\n  popd\n  pushd examples/httpassembly\n  go build\n  popd\n  pushd examples/statsassembly\n  go build\n  popd\nfi\npushd macs\ngo test ./...\ngofmt -w gen.go\ngo build gen.go\npopd\npushd tcpassembly\ngo test ./...\npopd\npushd reassembly\ngo test ./...\npopd\npushd layers\ngofmt -w gen.go\ngo build gen.go\ngo test ./...\npopd\npushd pcapgo\ngo test ./...\ngo build ./...\npopd\nif [ -f /usr/include/linux/if_packet.h ]; then\n  if grep -q TPACKET_V3 /usr/include/linux/if_packet.h; then\n    pushd afpacket\n    go build ./...\n    go test ./...\n    popd\n  fi\nfi\nif [ -f /usr/include/pfring.h ]; then\n  pushd pfring\n  go test ./...\n  go build ./...\n  popd\n  pushd examples/pfdump\n  go build\n  popd\nfi\npushd ip4defrag\ngo test ./...\npopd\npushd defrag\ngo test ./...\npopd\n\nfor travis_script in `ls .travis.*.sh`; do\n  ./$travis_script\ndone\n\n# Run our initial commit\ngit commit \"$@\"\n\nif [ -z \"$BENCH\" ]; then\n  set +x\n  echo \"We're not benchmarking and we've committed... we're done!\"\n  exit\nfi\n\n### If we get here, we want to run benchmarks from current commit, and compare\n### then to benchmarks from the last --benchmark commit.\n\n# Get our current branch.\nBRANCH=\"$(git branch | grep '^*' | awk '{print $2}')\"\n\n# File we're going to build our commit description in.\nCOMMIT_FILE=\"$(mktemp /tmp/tmp.XXXXXXXX)\"\n\n# Add the word \"BENCH\" to the start of the git commit.\necho -n \"BENCH \" > $COMMIT_FILE\n\n# Get the current description... there must be an easier way.\ngit log -n 1 | grep '^ ' | sed 's/^    //' >> $COMMIT_FILE\n\n# Get the commit sha for the last benchmark commit\nPREV=$(git log -n 1 --grep='BENCHMARK_MARKER_DO_NOT_CHANGE' | head -n 1 | awk '{print $2}')\n\n## Run current benchmarks\n\ncat >> $COMMIT_FILE <<EOF\n\n\n----------------------------------------------------------\nBENCHMARK_MARKER_DO_NOT_CHANGE\n----------------------------------------------------------\n\nGo version $(go version)\n\n\nTEST BENCHMARKS \"$BENCH\"\nEOF\n# go seems to have trouble with 'go test --bench=. ./...'\ngo test --test.bench=\"$BENCH\" 2>&1 | tee -a $COMMIT_FILE\npushd layers\ngo test --test.bench=\"$BENCH\" 2>&1 | tee -a $COMMIT_FILE\npopd\ncat >> $COMMIT_FILE <<EOF\n\n\nPCAP BENCHMARK\nEOF\nif [ \"$BENCH\" -eq \".*\" ]; then\n  go run pcap/gopacket_benchmark/*.go 2>&1 | tee -a $COMMIT_FILE\nfi\n\n\n\n## Reset to last benchmark commit, run benchmarks\n\ngit checkout $PREV\n\ncat >> $COMMIT_FILE <<EOF\n----------------------------------------------------------\nBENCHMARKING AGAINST COMMIT $PREV\n----------------------------------------------------------\n\n\nOLD TEST BENCHMARKS\nEOF\n# go seems to have trouble with 'go test --bench=. ./...'\ngo test --test.bench=\"$BENCH\" 2>&1 | tee -a $COMMIT_FILE\npushd layers\ngo test --test.bench=\"$BENCH\" 2>&1 | tee -a $COMMIT_FILE\npopd\ncat >> $COMMIT_FILE <<EOF\n\n\nOLD PCAP BENCHMARK\nEOF\nif [ \"$BENCH\" -eq \".*\" ]; then\n  go run pcap/gopacket_benchmark/*.go 2>&1 | tee -a $COMMIT_FILE\nfi\n\n\n\n## Reset back to the most recent commit, edit the commit message by appending\n## benchmark results.\ngit checkout $BRANCH\ngit commit --amend -F $COMMIT_FILE\n"
  },
  {
    "path": "gen.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build ignore\n\n// This file generates LayersDecoder function for DecodingLayerContainer\n// go run gen.go | gofmt > layers_decoder.go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"time\"\n)\n\nconst headerFmt = `// Copyright 2019 The GoPacket Authors. All rights reserved.\n\npackage gopacket\n\n// Created by gen.go, don't edit manually\n// Generated at %s\n\n// LayersDecoder returns DecodingLayerFunc for specified\n// DecodingLayerContainer, LayerType value to start decoding with and\n// some DecodeFeedback.\nfunc LayersDecoder(dl DecodingLayerContainer, first LayerType, df DecodeFeedback) DecodingLayerFunc {\n  firstDec, ok := dl.Decoder(first)\n  if !ok {\n    return func([]byte, *[]LayerType) (LayerType, error) {\n      return first, nil\n    }\n  }\n`\n\nvar funcBody = `return func(data []byte, decoded *[]LayerType) (LayerType, error) {\n  *decoded = (*decoded)[:0] // Truncated decoded layers.\n  typ := first\n  decoder := firstDec\n  for {\n    if err := decoder.DecodeFromBytes(data, df); err != nil {\n      return LayerTypeZero, err\n    }\n    *decoded = append(*decoded, typ)\n    typ = decoder.NextLayerType()\n    if data = decoder.LayerPayload(); len(data) == 0 {\n      break\n    }\n    if decoder, ok = dlc.Decoder(typ); !ok {\n      return typ, nil\n    }\n  }\n  return LayerTypeZero, nil\n}`\n\nfunc main() {\n\tfmt.Fprintf(os.Stderr, \"Writing results to stdout\\n\")\n\ttypes := []string{\n\t\t\"DecodingLayerSparse\",\n\t\t\"DecodingLayerArray\",\n\t\t\"DecodingLayerMap\",\n\t}\n\n\tfmt.Printf(headerFmt, time.Now())\n\tfor _, t := range types {\n\t\tfmt.Printf(\"if dlc, ok := dl.(%s); ok {\", t)\n\t\tfmt.Println(funcBody)\n\t\tfmt.Println(\"}\")\n\t}\n\tfmt.Println(\"dlc := dl\")\n\tfmt.Println(funcBody)\n\tfmt.Println(\"}\")\n}\n"
  },
  {
    "path": "go.mod",
    "content": "module github.com/google/gopacket\n\ngo 1.12\n\nrequire (\n\tgithub.com/vishvananda/netlink v1.1.0\n\tgithub.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f\n\tgolang.org/x/net v0.0.0-20190620200207-3b0461eec859\n\tgolang.org/x/sys v0.0.0-20200217220822-9197077df867\n)\n"
  },
  {
    "path": "go.sum",
    "content": "github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0=\ngithub.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=\ngithub.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=\ngithub.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA=\ngithub.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200217220822-9197077df867 h1:JoRuNIf+rpHl+VhScRQQvzbHed86tKkqwPMV34T8myw=\ngolang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\n"
  },
  {
    "path": "ip4defrag/defrag.go",
    "content": "// Copyright 2013 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// Package ip4defrag implements a IPv4 defragmenter\npackage ip4defrag\n\nimport (\n\t\"container/list\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\n// Quick and Easy to use debug code to trace\n// how defrag works.\nvar debug debugging = false // or flip to true\ntype debugging bool\n\nfunc (d debugging) Printf(format string, args ...interface{}) {\n\tif d {\n\t\tlog.Printf(format, args...)\n\t}\n}\n\n// Constants determining how to handle fragments.\n// Reference RFC 791, page 25\nconst (\n\tIPv4MinimumFragmentSize    = 8     // Minimum size of a single fragment\n\tIPv4MaximumSize            = 65535 // Maximum size of a fragment (2^16)\n\tIPv4MaximumFragmentOffset  = 8183  // Maximum offset of a fragment\n\tIPv4MaximumFragmentListLen = 8192  // Back out if we get more than this many fragments\n)\n\n// DefragIPv4 takes in an IPv4 packet with a fragment payload.\n//\n// It do not modify the IPv4 layer in place, 'in' remains untouched\n// It returns a ready-to be used IPv4 layer.\n//\n// If the passed-in IPv4 layer is NOT fragmented, it will\n// immediately return it without modifying the layer.\n//\n// If the IPv4 layer is a fragment and we don't have all\n// fragments, it will return nil and store whatever internal\n// information it needs to eventually defrag the packet.\n//\n// If the IPv4 layer is the last fragment needed to reconstruct\n// the packet, a new IPv4 layer will be returned, and will be set to\n// the entire defragmented packet,\n//\n// It use a map of all the running flows\n//\n// Usage example:\n//\n// func HandlePacket(in *layers.IPv4) err {\n//     defragger := ip4defrag.NewIPv4Defragmenter()\n//     in, err := defragger.DefragIPv4(in)\n//     if err != nil {\n//         return err\n//     } else if in == nil {\n//         return nil  // packet fragment, we don't have whole packet yet.\n//     }\n//     // At this point, we know that 'in' is defragmented.\n//     //It may be the same 'in' passed to\n//\t   // HandlePacket, or it may not, but we don't really care :)\n//\t   ... do stuff to 'in' ...\n//}\n//\nfunc (d *IPv4Defragmenter) DefragIPv4(in *layers.IPv4) (*layers.IPv4, error) {\n\treturn d.DefragIPv4WithTimestamp(in, time.Now())\n}\n\n// DefragIPv4WithTimestamp provides functionality of DefragIPv4 with\n// an additional timestamp parameter which is used for discarding\n// old fragments instead of time.Now()\n//\n// This is useful when operating on pcap files instead of live captured data\n//\nfunc (d *IPv4Defragmenter) DefragIPv4WithTimestamp(in *layers.IPv4, t time.Time) (*layers.IPv4, error) {\n\t// check if we need to defrag\n\tif st := d.dontDefrag(in); st == true {\n\t\tdebug.Printf(\"defrag: do nothing, do not need anything\")\n\t\treturn in, nil\n\t}\n\t// perfom security checks\n\tif err := d.securityChecks(in); err != nil {\n\t\tdebug.Printf(\"defrag: alert security check\")\n\t\treturn nil, err\n\t}\n\n\t// ok, got a fragment\n\tdebug.Printf(\"defrag: got a new fragment in.Id=%d in.FragOffset=%d in.Flags=%d\\n\",\n\t\tin.Id, in.FragOffset*8, in.Flags)\n\n\t// have we already seen a flow between src/dst with that Id?\n\tipf := newIPv4(in)\n\tvar fl *fragmentList\n\tvar exist bool\n\td.Lock()\n\tfl, exist = d.ipFlows[ipf]\n\tif !exist {\n\t\tdebug.Printf(\"defrag: unknown flow, creating a new one\\n\")\n\t\tfl = new(fragmentList)\n\t\td.ipFlows[ipf] = fl\n\t}\n\td.Unlock()\n\t// insert, and if final build it\n\tout, err2 := fl.insert(in, t)\n\n\t// at last, if we hit the maximum frag list len\n\t// without any defrag success, we just drop everything and\n\t// raise an error\n\tif out == nil && fl.List.Len()+1 > IPv4MaximumFragmentListLen {\n\t\td.flush(ipf)\n\t\treturn nil, fmt.Errorf(\"defrag: Fragment List hits its maximum\"+\n\t\t\t\"size(%d), without success. Flushing the list\",\n\t\t\tIPv4MaximumFragmentListLen)\n\t}\n\n\t// if we got a packet, it's a new one, and he is defragmented\n\tif out != nil {\n\t\t// when defrag is done for a flow between two ip\n\t\t// clean the list\n\t\td.flush(ipf)\n\t\treturn out, nil\n\t}\n\treturn nil, err2\n}\n\n// DiscardOlderThan forgets all packets without any activity since\n// time t. It returns the number of FragmentList aka number of\n// fragment packets it has discarded.\nfunc (d *IPv4Defragmenter) DiscardOlderThan(t time.Time) int {\n\tvar nb int\n\td.Lock()\n\tfor k, v := range d.ipFlows {\n\t\tif v.LastSeen.Before(t) {\n\t\t\tnb = nb + 1\n\t\t\tdelete(d.ipFlows, k)\n\t\t}\n\t}\n\td.Unlock()\n\treturn nb\n}\n\n// flush the fragment list for a particular flow\nfunc (d *IPv4Defragmenter) flush(ipf ipv4) {\n\td.Lock()\n\tdelete(d.ipFlows, ipf)\n\td.Unlock()\n}\n\n// dontDefrag returns true if the IPv4 packet do not need\n// any defragmentation\nfunc (d *IPv4Defragmenter) dontDefrag(ip *layers.IPv4) bool {\n\t// don't defrag packet with DF flag\n\tif ip.Flags&layers.IPv4DontFragment != 0 {\n\t\treturn true\n\t}\n\t// don't defrag not fragmented ones\n\tif ip.Flags&layers.IPv4MoreFragments == 0 && ip.FragOffset == 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// securityChecks performs the needed security checks\nfunc (d *IPv4Defragmenter) securityChecks(ip *layers.IPv4) error {\n\tfragSize := ip.Length - uint16(ip.IHL)*4\n\n\t// don't allow small fragments outside of specification\n\tif fragSize < IPv4MinimumFragmentSize {\n\t\treturn fmt.Errorf(\"defrag: fragment too small \"+\n\t\t\t\"(handcrafted? %d < %d)\", fragSize, IPv4MinimumFragmentSize)\n\t}\n\n\t// don't allow too big fragment offset\n\tif ip.FragOffset > IPv4MaximumFragmentOffset {\n\t\treturn fmt.Errorf(\"defrag: fragment offset too big \"+\n\t\t\t\"(handcrafted? %d > %d)\", ip.FragOffset, IPv4MaximumFragmentOffset)\n\t}\n\tfragOffset := ip.FragOffset * 8\n\n\t// don't allow fragment that would oversize an IP packet\n\tif fragOffset+ip.Length > IPv4MaximumSize {\n\t\treturn fmt.Errorf(\"defrag: fragment will overrun \"+\n\t\t\t\"(handcrafted? %d > %d)\", fragOffset+ip.Length, IPv4MaximumSize)\n\t}\n\n\treturn nil\n}\n\n// fragmentList holds a container/list used to contains IP\n// packets/fragments.  It stores internal counters to track the\n// maximum total of byte, and the current length it has received.\n// It also stores a flag to know if he has seen the last packet.\ntype fragmentList struct {\n\tList          list.List\n\tHighest       uint16\n\tCurrent       uint16\n\tFinalReceived bool\n\tLastSeen      time.Time\n}\n\n// insert insert an IPv4 fragment/packet into the Fragment List\n// It use the following strategy : we are inserting fragment based\n// on their offset, latest first. This is sometimes called BSD-Right.\n// See: http://www.sans.org/reading-room/whitepapers/detection/ip-fragment-reassembly-scapy-33969\nfunc (f *fragmentList) insert(in *layers.IPv4, t time.Time) (*layers.IPv4, error) {\n\t// TODO: should keep a copy of *in in the list\n\t// or not (ie the packet source is reliable) ? -> depends on Lazy / last packet\n\tfragOffset := in.FragOffset * 8\n\tif fragOffset >= f.Highest {\n\t\tf.List.PushBack(in)\n\t} else {\n\t\tfor e := f.List.Front(); e != nil; e = e.Next() {\n\t\t\tfrag, _ := e.Value.(*layers.IPv4)\n\t\t\tif in.FragOffset == frag.FragOffset {\n\t\t\t\t// TODO: what if we receive a fragment\n\t\t\t\t// that begins with duplicate data but\n\t\t\t\t// *also* has new data? For example:\n\t\t\t\t//\n\t\t\t\t// AAAA\n\t\t\t\t//     BB\n\t\t\t\t//     BBCC\n\t\t\t\t//         DDDD\n\t\t\t\t//\n\t\t\t\t// In this situation we completely\n\t\t\t\t// ignore CC and the complete packet can\n\t\t\t\t// never be reassembled.\n\t\t\t\tdebug.Printf(\"defrag: ignoring frag %d as we already have it (duplicate?)\\n\",\n\t\t\t\t\tfragOffset)\n\t\t\t\treturn nil, nil\n\t\t\t}\n\t\t\tif in.FragOffset < frag.FragOffset {\n\t\t\t\tdebug.Printf(\"defrag: inserting frag %d before existing frag %d\\n\",\n\t\t\t\t\tfragOffset, frag.FragOffset*8)\n\t\t\t\tf.List.InsertBefore(in, e)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tf.LastSeen = t\n\n\tfragLength := in.Length - 20\n\t// After inserting the Fragment, we update the counters\n\tif f.Highest < fragOffset+fragLength {\n\t\tf.Highest = fragOffset + fragLength\n\t}\n\tf.Current = f.Current + fragLength\n\n\tdebug.Printf(\"defrag: insert ListLen: %d Highest:%d Current:%d\\n\",\n\t\tf.List.Len(),\n\t\tf.Highest, f.Current)\n\n\t// Final Fragment ?\n\tif in.Flags&layers.IPv4MoreFragments == 0 {\n\t\tf.FinalReceived = true\n\t}\n\t// Ready to try defrag ?\n\tif f.FinalReceived && f.Highest == f.Current {\n\t\treturn f.build(in)\n\t}\n\treturn nil, nil\n}\n\n// Build builds the final datagram, modifying ip in place.\n// It puts priority to packet in the early position of the list.\n// See Insert for more details.\nfunc (f *fragmentList) build(in *layers.IPv4) (*layers.IPv4, error) {\n\tvar final []byte\n\tvar currentOffset uint16\n\n\tdebug.Printf(\"defrag: building the datagram \\n\")\n\tfor e := f.List.Front(); e != nil; e = e.Next() {\n\t\tfrag, _ := e.Value.(*layers.IPv4)\n\t\tif frag.FragOffset*8 == currentOffset {\n\t\t\tdebug.Printf(\"defrag: building - adding %d\\n\", frag.FragOffset*8)\n\t\t\tfinal = append(final, frag.Payload...)\n\t\t\tcurrentOffset = currentOffset + frag.Length - 20\n\t\t} else if frag.FragOffset*8 < currentOffset {\n\t\t\t// overlapping fragment - let's take only what we need\n\t\t\tstartAt := currentOffset - frag.FragOffset*8\n\t\t\tdebug.Printf(\"defrag: building - overlapping, starting at %d\\n\",\n\t\t\t\tstartAt)\n\t\t\tif startAt > frag.Length-20 {\n\t\t\t\treturn nil, errors.New(\"defrag: building - invalid fragment\")\n\t\t\t}\n\t\t\tfinal = append(final, frag.Payload[startAt:]...)\n\t\t\tcurrentOffset = currentOffset + frag.FragOffset*8\n\t\t} else {\n\t\t\t// Houston - we have an hole !\n\t\t\tdebug.Printf(\"defrag: hole found while building, \" +\n\t\t\t\t\"stopping the defrag process\\n\")\n\t\t\treturn nil, errors.New(\"defrag: building - hole found\")\n\t\t}\n\t\tdebug.Printf(\"defrag: building - next is %d\\n\", currentOffset)\n\t}\n\n\t// TODO recompute IP Checksum\n\tout := &layers.IPv4{\n\t\tVersion:    in.Version,\n\t\tIHL:        in.IHL,\n\t\tTOS:        in.TOS,\n\t\tLength:     f.Highest,\n\t\tId:         in.Id,\n\t\tFlags:      0,\n\t\tFragOffset: 0,\n\t\tTTL:        in.TTL,\n\t\tProtocol:   in.Protocol,\n\t\tChecksum:   0,\n\t\tSrcIP:      in.SrcIP,\n\t\tDstIP:      in.DstIP,\n\t\tOptions:    in.Options,\n\t\tPadding:    in.Padding,\n\t}\n\tout.Payload = final\n\n\treturn out, nil\n}\n\n// ipv4 is a struct to be used as a key.\ntype ipv4 struct {\n\tip4 gopacket.Flow\n\tid  uint16\n}\n\n// newIPv4 returns a new initialized IPv4 Flow\nfunc newIPv4(ip *layers.IPv4) ipv4 {\n\treturn ipv4{\n\t\tip4: ip.NetworkFlow(),\n\t\tid:  ip.Id,\n\t}\n}\n\n// IPv4Defragmenter is a struct which embedded a map of\n// all fragment/packet.\ntype IPv4Defragmenter struct {\n\tsync.RWMutex\n\tipFlows map[ipv4]*fragmentList\n}\n\n// NewIPv4Defragmenter returns a new IPv4Defragmenter\n// with an initialized map.\nfunc NewIPv4Defragmenter() *IPv4Defragmenter {\n\treturn &IPv4Defragmenter{\n\t\tipFlows: make(map[ipv4]*fragmentList),\n\t}\n}\n"
  },
  {
    "path": "ip4defrag/defrag_test.go",
    "content": "// Copyright 2013 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage ip4defrag\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"net\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/bytediff\"\n\t\"github.com/google/gopacket/layers\"\n)\n\nfunc TestNotFrag(t *testing.T) {\n\tip := layers.IPv4{\n\t\tVersion: 4,\n\t\tTTL:     220,\n\t\tSrcIP:   net.IPv4(1, 1, 1, 1),\n\t\tDstIP:   net.IPv4(2, 2, 2, 2),\n\t\tFlags:   layers.IPv4DontFragment,\n\t}\n\tdefrag := NewIPv4Defragmenter()\n\n\tout, err := defrag.DefragIPv4(&ip)\n\tif out == nil || err != nil {\n\t\tt.Errorf(\"defrag: this packet do not need to be defrag ['%s']\", err)\n\t}\n}\n\nfunc TestDefragPingMultipleFrags(t *testing.T) {\n\tdefrag := NewIPv4Defragmenter()\n\n\t// We inject the 4 fragments and test the DefragIPv4 interface\n\tgentestDefrag(t, defrag, testPing1Frag1, false, \"Ping1Frag1\")\n\tgentestDefrag(t, defrag, testPing1Frag1, false, \"Ping1Frag1\")\n\tgentestDefrag(t, defrag, testPing1Frag1, false, \"Ping1Frag1\")\n\tgentestDefrag(t, defrag, testPing1Frag3, false, \"Ping1Frag3\")\n\tgentestDefrag(t, defrag, testPing1Frag2, false, \"Ping1Frag2\")\n\tip := gentestDefrag(t, defrag, testPing1Frag4, true, \"Ping1Frag4\")\n\n\tif len(ip.Payload) != 4508 {\n\t\tt.Fatalf(\"defrag: expecting a packet of 4508 bytes, got %d\", len(ip.Payload))\n\t}\n\n\tvalidPayload := append(testPing1Frag1[34:], testPing1Frag2[34:]...)\n\tvalidPayload = append(validPayload, testPing1Frag3[34:]...)\n\tvalidPayload = append(validPayload, testPing1Frag4[34:]...)\n\n\tif bytes.Compare(validPayload, ip.Payload) != 0 {\n\t\tfmt.Println(bytediff.BashOutput.String(\n\t\t\tbytediff.Diff(validPayload, ip.Payload)))\n\t\tt.Errorf(\"defrag: payload is not correctly defragmented\")\n\t}\n\n\tdiscarded := defrag.DiscardOlderThan(time.Now())\n\tif 0 != discarded {\n\t\tt.Errorf(\"defrag: discarded more fragments then expected: %d\", discarded)\n\t}\n}\n\nfunc TestDefragPing1(t *testing.T) {\n\tdefrag := NewIPv4Defragmenter()\n\n\t// We inject the 4 fragments and test the DefragIPv4 interface\n\tgentestDefrag(t, defrag, testPing1Frag1, false, \"Ping1Frag1\")\n\tgentestDefrag(t, defrag, testPing1Frag3, false, \"Ping1Frag3\")\n\tgentestDefrag(t, defrag, testPing1Frag2, false, \"Ping1Frag2\")\n\tip := gentestDefrag(t, defrag, testPing1Frag4, true, \"Ping1Frag4\")\n\n\tif len(ip.Payload) != 4508 {\n\t\tt.Fatalf(\"defrag: expecting a packet of 4508 bytes, got %d\", len(ip.Payload))\n\t}\n\n\tvalidPayload := append(testPing1Frag1[34:], testPing1Frag2[34:]...)\n\tvalidPayload = append(validPayload, testPing1Frag3[34:]...)\n\tvalidPayload = append(validPayload, testPing1Frag4[34:]...)\n\n\tif bytes.Compare(validPayload, ip.Payload) != 0 {\n\t\tfmt.Println(bytediff.BashOutput.String(\n\t\t\tbytediff.Diff(validPayload, ip.Payload)))\n\t\tt.Errorf(\"defrag: payload is not correctly defragmented\")\n\t}\n\n\t// We redo the same test to handle duplication, and be sure\n\t// that the internal list is correctly cleaned up.\n\tgentestDefrag(t, defrag, testPing1Frag1, false, \"Ping1Frag1\")\n\tgentestDefrag(t, defrag, testPing1Frag3, false, \"Ping1Frag3\")\n\tgentestDefrag(t, defrag, testPing1Frag2, false, \"Ping1Frag2\")\n\tip2 := gentestDefrag(t, defrag, testPing1Frag4, true, \"Ping1Frag4\")\n\n\tif bytes.Compare(ip2.Payload, ip.Payload) != 0 {\n\t\tfmt.Println(bytediff.BashOutput.String(\n\t\t\tbytediff.Diff(validPayload, ip.Payload)))\n\t\tt.Errorf(\"defrag: ip and ip2 payload are different\")\n\t}\n}\n\nfunc TestDefragPing1and2(t *testing.T) {\n\tdebug = false\n\tdefrag := NewIPv4Defragmenter()\n\n\t// We inject the 8 mixed fragments from two \"flows\"\n\t// and test the DefragIPv4 interface\n\tgentestDefrag(t, defrag, testPing1Frag1, false, \"Ping1Frag1\")\n\tgentestDefrag(t, defrag, testPing1Frag3, false, \"Ping1Frag3\")\n\tgentestDefrag(t, defrag, testPing2Frag3, false, \"Ping2Frag3\")\n\tgentestDefrag(t, defrag, testPing2Frag4, false, \"Ping2Frag4\")\n\tgentestDefrag(t, defrag, testPing1Frag2, false, \"Ping1Frag2\")\n\tgentestDefrag(t, defrag, testPing2Frag1, false, \"Ping2Frag1\")\n\tip := gentestDefrag(t, defrag, testPing1Frag4, true, \"Ping1Frag4\")\n\n\tif len(ip.Payload) != 4508 {\n\t\tt.Fatalf(\"defrag: expecting a packet Ping1 of 4508 bytes, got %d\",\n\t\t\tlen(ip.Payload))\n\t}\n\n\tvalidPayload := append(testPing1Frag1[34:], testPing1Frag2[34:]...)\n\tvalidPayload = append(validPayload, testPing1Frag3[34:]...)\n\tvalidPayload = append(validPayload, testPing1Frag4[34:]...)\n\n\tif bytes.Compare(validPayload, ip.Payload) != 0 {\n\t\tfmt.Println(bytediff.BashOutput.String(\n\t\t\tbytediff.Diff(validPayload, ip.Payload)))\n\t\tt.Errorf(\"defrag: payload Ping1 is not correctly defragmented\")\n\t}\n\n\tip = gentestDefrag(t, defrag, testPing2Frag2, true, \"Ping2Frag2\")\n\tif len(ip.Payload) != 4508 {\n\t\tt.Fatalf(\"defrag: expecting a packet Ping2 of 4508 bytes, got %d\",\n\t\t\tlen(ip.Payload))\n\t}\n\n\tvalidPayload2 := append(testPing2Frag1[34:], testPing2Frag2[34:]...)\n\tvalidPayload2 = append(validPayload2, testPing2Frag3[34:]...)\n\tvalidPayload2 = append(validPayload2, testPing2Frag4[34:]...)\n\n\tif bytes.Compare(validPayload2, ip.Payload) != 0 {\n\t\tfmt.Println(bytediff.BashOutput.String(\n\t\t\tbytediff.Diff(validPayload2, ip.Payload)))\n\t\tt.Errorf(\"defrag: payload Ping2 is not correctly defragmented\")\n\t}\n\tdebug = false\n}\n\nfunc TestDefragTooSmall(t *testing.T) {\n\tdefrag := NewIPv4Defragmenter()\n\n\tip1 := layers.IPv4{\n\t\tVersion:    4,\n\t\tIHL:        5,\n\t\tTTL:        15,\n\t\tSrcIP:      net.IPv4(1, 1, 1, 1),\n\t\tDstIP:      net.IPv4(2, 2, 2, 2),\n\t\tId:         0xcc,\n\t\tFragOffset: 0,\n\t\tLength:     27, // Minimum fragment size -1 + header (20)\n\t\tFlags:      layers.IPv4MoreFragments,\n\t}\n\tif _, err := defrag.DefragIPv4(&ip1); err == nil {\n\t\tt.Fatal(\"defrag: Minimum fragment size is supposed to be 8\")\n\t}\n\n\tip1.Length++\n\tif _, err := defrag.DefragIPv4(&ip1); err != nil {\n\t\tt.Fatalf(\"defrag: Minimum fragment size is supposed to be 8, %s\", err)\n\t}\n}\n\nfunc TestDefragFragmentOffset(t *testing.T) {\n\tdefrag := NewIPv4Defragmenter()\n\n\tip1 := layers.IPv4{\n\t\tVersion:    4,\n\t\tIHL:        5,\n\t\tTTL:        15,\n\t\tSrcIP:      net.IPv4(1, 1, 1, 1),\n\t\tDstIP:      net.IPv4(2, 2, 2, 2),\n\t\tId:         0xcc,\n\t\tFragOffset: 0,\n\t\tLength:     512,\n\t\tFlags:      layers.IPv4MoreFragments,\n\t}\n\tif _, err := defrag.DefragIPv4(&ip1); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tip2 := ip1\n\tip2.FragOffset = 8184\n\n\t_, err := defrag.DefragIPv4(&ip2)\n\tif err == nil {\n\t\tt.Fatalf(\"defrag: Maximum fragment offset is supposed to be 8183\")\n\t}\n}\n\nfunc TestDefragDiscard(t *testing.T) {\n\tdefrag := NewIPv4Defragmenter()\n\n\tgentestDefrag(t, defrag, testPing1Frag1, false, \"Ping1Frag1\")\n\tgentestDefrag(t, defrag, testPing2Frag1, false, \"Ping2Frag1\")\n\n\tdiscarded := defrag.DiscardOlderThan(time.Now())\n\tif 2 != discarded {\n\t\tt.Errorf(\"defrag: discarded more fragments then expected: %d\", discarded)\n\t}\n}\n\nfunc TestDefragMaxSize(t *testing.T) {\n\tdefrag := NewIPv4Defragmenter()\n\n\tip1 := layers.IPv4{\n\t\tVersion:    4,\n\t\tIHL:        5,\n\t\tTTL:        15,\n\t\tSrcIP:      net.IPv4(1, 1, 1, 1),\n\t\tDstIP:      net.IPv4(2, 2, 2, 2),\n\t\tId:         0xcc,\n\t\tFragOffset: 0,\n\t\tLength:     65535,\n\t\tFlags:      layers.IPv4MoreFragments,\n\t}\n\tif _, err := defrag.DefragIPv4(&ip1); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tip2 := ip1\n\tip2.Length = 28\n\tip2.FragOffset = 1\n\n\t_, err := defrag.DefragIPv4(&ip2)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t\tt.Fatalf(\"defrag: Maximum length is supposed to be 65535\")\n\t}\n}\n\nfunc TestDefragIDField(t *testing.T) {\n\tdefrag := NewIPv4Defragmenter()\n\n\texpectedID := binary.BigEndian.Uint16(testPing1Frag1[18:])\n\n\tgentestDefrag(t, defrag, testPing1Frag1, false, \"Ping1Frag1\")\n\tgentestDefrag(t, defrag, testPing1Frag3, false, \"Ping1Frag3\")\n\tgentestDefrag(t, defrag, testPing1Frag2, false, \"Ping1Frag2\")\n\tipFragmented := gentestDefrag(t, defrag, testPing1Frag4, true, \"Ping1Frag4\")\n\n\tif ipFragmented.Id != expectedID {\n\t\tt.Fatalf(\"defrag: expecting a fragmented packet with ID %d, got %d\",\n\t\t\texpectedID, ipFragmented.Id)\n\t}\n\n}\n\nfunc gentestDefrag(t *testing.T, defrag *IPv4Defragmenter, buf []byte, expect bool, label string) *layers.IPv4 {\n\tp := gopacket.NewPacket(buf, layers.LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tipL := p.Layer(layers.LayerTypeIPv4)\n\tin, _ := ipL.(*layers.IPv4)\n\n\tout, err := defrag.DefragIPv4(in)\n\tif err != nil {\n\t\tt.Fatalf(\"defrag: %s\", err)\n\t}\n\tstatus := false\n\tif out != nil {\n\t\tstatus = true\n\t}\n\tif status != expect {\n\t\tt.Fatalf(\"defrag: a fragment was not detected (%s)\", label)\n\t}\n\treturn out\n}\n\n/* Frame 1-1 (1514 bytes) */\nvar testPing1Frag1 = []byte{\n\t0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */\n\t0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */\n\t0x05, 0xdc, 0xb3, 0xe1, 0x20, 0x00, 0x40, 0x01, /* .... .@. */\n\t0xcf, 0x70, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* .p...... */\n\t0x08, 0x08, 0x08, 0x00, 0x45, 0xa6, 0x14, 0xbf, /* ....E... */\n\t0x00, 0x01, 0x9e, 0x3e, 0x20, 0x55, 0x00, 0x00, /* ...> U.. */\n\t0x00, 0x00, 0x16, 0x91, 0x0d, 0x00, 0x00, 0x00, /* ........ */\n\t0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, /* .. */\n}\n\n/* Frame (1514 bytes) */\nvar testPing1Frag2 = []byte{\n\t0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */\n\t0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */\n\t0x05, 0xdc, 0xb3, 0xe1, 0x20, 0xb9, 0x40, 0x01, /* .... .@. */\n\t0xce, 0xb7, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */\n\t0x08, 0x08, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, /* .. */\n}\n\n/* Frame (1514 bytes) */\nvar testPing1Frag3 = []byte{\n\t0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */\n\t0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */\n\t0x05, 0xdc, 0xb3, 0xe1, 0x21, 0x72, 0x40, 0x01, /* ....!r@. */\n\t0xcd, 0xfe, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */\n\t0x08, 0x08, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, /* NO */\n}\n\n/* Frame (102 bytes) */\nvar testPing1Frag4 = []byte{\n\t0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */\n\t0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */\n\t0x00, 0x58, 0xb3, 0xe1, 0x02, 0x2b, 0x40, 0x01, /* .X...+@. */\n\t0xf2, 0xc9, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */\n\t0x08, 0x08, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* ..PQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, /* ...... */\n}\n\n/* Frame (1514 bytes) */\nvar testPing2Frag1 = []byte{\n\t0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */\n\t0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */\n\t0x05, 0xdc, 0xb4, 0x9e, 0x20, 0x00, 0x40, 0x01, /* .... .@. */\n\t0xce, 0xb3, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */\n\t0x08, 0x08, 0x08, 0x00, 0x9e, 0xa0, 0x14, 0xbf, /* ........ */\n\t0x00, 0x02, 0x9f, 0x3e, 0x20, 0x55, 0x00, 0x00, /* ...> U.. */\n\t0x00, 0x00, 0xbc, 0x95, 0x0d, 0x00, 0x00, 0x00, /* ........ */\n\t0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, /* .. */\n}\n\n/* Frame (1514 bytes) */\nvar testPing2Frag2 = []byte{\n\t0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */\n\t0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */\n\t0x05, 0xdc, 0xb4, 0x9e, 0x20, 0xb9, 0x40, 0x01, /* .... .@. */\n\t0xcd, 0xfa, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */\n\t0x08, 0x08, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, /* .. */\n}\n\n/* Frame (1514 bytes) */\nvar testPing2Frag3 = []byte{\n\t0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */\n\t0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */\n\t0x05, 0xdc, 0xb4, 0x9e, 0x21, 0x72, 0x40, 0x01, /* ....!r@. */\n\t0xcd, 0x41, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* .A...... */\n\t0x08, 0x08, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */\n\t0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */\n\t0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */\n\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */\n\t0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */\n\t0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */\n\t0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */\n\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */\n\t0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */\n\t0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */\n\t0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */\n\t0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */\n\t0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */\n\t0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */\n\t0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */\n\t0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !\"#$% */\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */\n\t0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */\n\t0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */\n\t0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */\n\t0x4e, 0x4f, /* NO */\n}\n\n/* Frame (102 bytes) */\nvar testPing2Frag4 = []byte{\n\t0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */\n\t0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */\n\t0x00, 0x58, 0xb4, 0x9e, 0x02, 0x2b, 0x40, 0x01, /* .X...+@. */\n\t0xf2, 0x0c, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */\n\t0x08, 0x08, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* ..PQRSTU */\n\t0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\\] */\n\t0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */\n\t0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */\n\t0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */\n\t0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */\n\t0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */\n\t0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */\n\t0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, /* ...... */\n}\n"
  },
  {
    "path": "layerclass.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage gopacket\n\n// LayerClass is a set of LayerTypes, used for grabbing one of a number of\n// different types from a packet.\ntype LayerClass interface {\n\t// Contains returns true if the given layer type should be considered part\n\t// of this layer class.\n\tContains(LayerType) bool\n\t// LayerTypes returns the set of all layer types in this layer class.\n\t// Note that this may not be a fast operation on all LayerClass\n\t// implementations.\n\tLayerTypes() []LayerType\n}\n\n// Contains implements LayerClass.\nfunc (l LayerType) Contains(a LayerType) bool {\n\treturn l == a\n}\n\n// LayerTypes implements LayerClass.\nfunc (l LayerType) LayerTypes() []LayerType {\n\treturn []LayerType{l}\n}\n\n// LayerClassSlice implements a LayerClass with a slice.\ntype LayerClassSlice []bool\n\n// Contains returns true if the given layer type should be considered part\n// of this layer class.\nfunc (s LayerClassSlice) Contains(t LayerType) bool {\n\treturn int(t) < len(s) && s[t]\n}\n\n// LayerTypes returns all layer types in this LayerClassSlice.\n// Because of LayerClassSlice's implementation, this could be quite slow.\nfunc (s LayerClassSlice) LayerTypes() (all []LayerType) {\n\tfor i := 0; i < len(s); i++ {\n\t\tif s[i] {\n\t\t\tall = append(all, LayerType(i))\n\t\t}\n\t}\n\treturn\n}\n\n// NewLayerClassSlice creates a new LayerClassSlice by creating a slice of\n// size max(types) and setting slice[t] to true for each type t.  Note, if\n// you implement your own LayerType and give it a high value, this WILL create\n// a very large slice.\nfunc NewLayerClassSlice(types []LayerType) LayerClassSlice {\n\tvar max LayerType\n\tfor _, typ := range types {\n\t\tif typ > max {\n\t\t\tmax = typ\n\t\t}\n\t}\n\tt := make([]bool, int(max+1))\n\tfor _, typ := range types {\n\t\tt[typ] = true\n\t}\n\treturn t\n}\n\n// LayerClassMap implements a LayerClass with a map.\ntype LayerClassMap map[LayerType]bool\n\n// Contains returns true if the given layer type should be considered part\n// of this layer class.\nfunc (m LayerClassMap) Contains(t LayerType) bool {\n\treturn m[t]\n}\n\n// LayerTypes returns all layer types in this LayerClassMap.\nfunc (m LayerClassMap) LayerTypes() (all []LayerType) {\n\tfor t := range m {\n\t\tall = append(all, t)\n\t}\n\treturn\n}\n\n// NewLayerClassMap creates a LayerClassMap and sets map[t] to true for each\n// type in types.\nfunc NewLayerClassMap(types []LayerType) LayerClassMap {\n\tm := LayerClassMap{}\n\tfor _, typ := range types {\n\t\tm[typ] = true\n\t}\n\treturn m\n}\n\n// NewLayerClass creates a LayerClass, attempting to be smart about which type\n// it creates based on which types are passed in.\nfunc NewLayerClass(types []LayerType) LayerClass {\n\tfor _, typ := range types {\n\t\tif typ > maxLayerType {\n\t\t\t// NewLayerClassSlice could create a very large object, so instead create\n\t\t\t// a map.\n\t\t\treturn NewLayerClassMap(types)\n\t\t}\n\t}\n\treturn NewLayerClassSlice(types)\n}\n"
  },
  {
    "path": "layers/.lint_blacklist",
    "content": "dot11.go\neap.go\nendpoints.go\nenums_generated.go\nenums.go\nethernet.go\ngeneve.go\nicmp4.go\nicmp6.go\nigmp.go\nip4.go\nip6.go\nlayertypes.go\nlinux_sll.go\nllc.go\nlldp.go\nmpls.go\nndp.go\nntp.go\nospf.go\npflog.go\npppoe.go\nprism.go\nradiotap.go\nrudp.go\nsctp.go\nsflow.go\ntcp.go\ntcpip.go\ntls.go\ntls_alert.go\ntls_appdata.go\ntls_cipherspec.go\ntls_hanshake.go\ntls_test.go\nudp.go\nudplite.go\nusb.go\nvrrp.go\n"
  },
  {
    "path": "layers/ague_var0.go",
    "content": "// Copyright 2025 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"errors\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// AGUEVar0 represents a packet encoded with Generic UDP Encapsulation.\n// It should sit \"under\" a UDP layer with dest port 666.\n//\n// For more information about the meaning of the fields, see\n// https://tools.ietf.org/html/draft-ietf-intarea-gue-04#section-3.1\ntype AGUEVar0 struct {\n\tVersion    uint8\n\tC          bool\n\tProtocol   IPProtocol\n\tFlags      uint16\n\tExtensions []byte\n\tData       []byte\n}\n\n// LayerType returns this pseudo-header's type as defined in layertypes.go\nfunc (l AGUEVar0) LayerType() gopacket.LayerType {\n\treturn LayerTypeAGUEVar0\n}\n\n// LayerContents returns a byte array containing our serialized header.\nfunc (l AGUEVar0) LayerContents() []byte {\n\tb := make([]byte, 4, 4+len(l.Extensions))\n\thlen := uint8(len(l.Extensions))\n\tb[0] = l.Version<<6 | hlen\n\tif l.C {\n\t\tb[0] |= 0x20\n\t}\n\tb[0] |= hlen\n\tb[1] = byte(l.Protocol)\n\tb[2] = byte(l.Flags >> 8)\n\tb[3] = byte(l.Flags & 0xff)\n\tb = append(b, l.Extensions...)\n\treturn b\n}\n\n// LayerPayload returns an IPv4 or IPv6 packet in serialized form.\nfunc (l AGUEVar0) LayerPayload() []byte {\n\treturn l.Data\n}\n\n// SerializeTo writes our header into SerializeBuffer.\nfunc (l AGUEVar0) SerializeTo(buf gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tb := l.LayerContents()\n\twriteTo, err := buf.PrependBytes(len(b))\n\tif err != nil {\n\t\treturn err\n\t}\n\tcopy(writeTo, b)\n\treturn nil\n}\n\n// CanDecode returns the type of layer we can decode.\nfunc (l AGUEVar0) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeAGUEVar0\n}\n\n// DecodeFromBytes extracts our header data from a serialized packet.\nfunc (l *AGUEVar0) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tl.Version = data[0] >> 6\n\tl.C = data[0]&0x20 != 0\n\tl.Protocol = IPProtocol(data[1])\n\tl.Flags = (uint16(data[2]) << 8) | uint16(data[3])\n\thlen := data[0] & 0x1f\n\tl.Extensions = data[4 : 4+hlen]\n\tl.Data = data[4+hlen:]\n\treturn nil\n}\n\n// NextLayerType returns the next layer type, e.g. LayerTypeIPv4\nfunc (l AGUEVar0) NextLayerType() gopacket.LayerType {\n\treturn l.Protocol.LayerType()\n}\n\n// decodeAGUE decodes AGUEVar0 or AGUEVar1, depending on the first data byte.\n// If AGUEVar1, it refers the packet to AGUEVar1 for decoding.\n// Else it adds AGUEVar0 layer info to the packet object, recursively decodes\n// remaining layers, and returns the next-layer type (IPv4 or IPv6).\nfunc decodeAGUE(data []byte, p gopacket.PacketBuilder) error {\n\tif len(data) == 0 {\n\t\treturn errors.New(\"decodeAGUE() failed, no data\")\n\t}\n\tif data[0]>>6 == 1 {\n\t\treturn decodeAGUEVar1(data, p)\n\t}\n\tl := AGUEVar0{}\n\tif err := l.DecodeFromBytes(data, gopacket.NilDecodeFeedback); err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(l)\n\treturn p.NextDecoder(l.NextLayerType())\n}\n"
  },
  {
    "path": "layers/ague_var0_test.go",
    "content": "// Copyright 2025 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/hex\"\n\t\"net\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc TestGueDecoding(t *testing.T) {\n\t// This is a packet generated by the Linux kernel GUE implementation, captured\n\t// by pcap. It includes:\n\t// - Ethernet\n\t// - IPv4\n\t// - UDP\n\t// - AGueVar0 (port 666)\n\t// - IPv4\n\t// - ICMP (ping)\n\t// TODO: build a test packet using port 666 (0x029a)\n\tph := `02427b2522f502420ae0d90608004500007451ea4000ff119d050ae0d9060afa9da88c0f029a00608cfa000400004500005459f240004001e2cd0ae0d9060afd0f0608000a7e005f000cea811f59000000005daa080000000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627`\n\tpr, err := hex.DecodeString(ph)\n\tif err != nil {\n\t\tt.Errorf(\"Error decoding hex packet: %v\", err)\n\t}\n\n\tp := gopacket.NewPacket(pr, LayerTypeEthernet, gopacket.Default)\n\t// require.Nil(t, p.ErrorLayer())\n\tif p.ErrorLayer() != nil {\n\t\tt.Errorf(\"AGUEVar0 layer is nil\")\n\t}\n\tt.Logf(\"%v\", p)\n\n\tgue := p.Layer(LayerTypeAGUEVar0).(AGUEVar0)\n\t// require.NotNil(t, gue)\n\tif uint8(0) != gue.Version {\n\t\tt.Errorf(\"gue.Version is not 0\")\n\t}\n}\n\nvar testIPv4OverAGUEVar0 = []gopacket.SerializableLayer{\n\t&Ethernet{\n\t\tSrcMAC:       net.HardwareAddr{142, 122, 18, 195, 169, 113},\n\t\tDstMAC:       net.HardwareAddr{58, 86, 107, 105, 89, 94},\n\t\tEthernetType: EthernetTypeIPv4,\n\t},\n\t&IPv4{\n\t\tVersion:  4,\n\t\tSrcIP:    net.IP{192, 168, 1, 1},\n\t\tDstIP:    net.IP{192, 168, 1, 2},\n\t\tProtocol: IPProtocolUDP,\n\t\tFlags:    IPv4DontFragment,\n\t\tTTL:      64,\n\t\tId:       33852,\n\t\tIHL:      5,\n\t},\n\t&UDP{\n\t\tSrcPort: 8,\n\t\tDstPort: 666,\n\t},\n\t&AGUEVar0{\n\t\tProtocol: IPProtocolIPv4,\n\t},\n\t&IPv4{\n\t\tVersion:  4,\n\t\tSrcIP:    net.IP{172, 16, 1, 1},\n\t\tDstIP:    net.IP{172, 16, 2, 1},\n\t\tProtocol: IPProtocolICMPv4,\n\t\tFlags:    IPv4DontFragment,\n\t\tTTL:      64,\n\t\tIHL:      5,\n\t\tId:       1160,\n\t},\n\t&ICMPv4{\n\t\tTypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0),\n\t\tId:       4724,\n\t\tSeq:      1,\n\t},\n\tgopacket.Payload{\n\t\t0xc8, 0x92, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,\n\t\t0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,\n\t\t0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,\n\t},\n}\n\nfunc TestIPv4OverAGUEVar0Encode(t *testing.T) {\n\tb := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{\n\t\tComputeChecksums: false, // if desired, see gre_test:setNetworkLayer()\n\t\tFixLengths:       true,\n\t}\n\tif err := gopacket.SerializeLayers(b, opts, testIPv4OverAGUEVar0...); err != nil {\n\t\tt.Errorf(\"Unable to serialize: %v\", err)\n\t}\n\tp := gopacket.NewPacket(b.Bytes(), LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeAGUEVar0, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\n\t// We don't have a corresponding sample packet capture, but if we did, the verify would look like this:\n\t// if got, want := b.Bytes(), testPacketAGUEVar0``; !reflect.DeepEqual(want, got) {\n\t// \tt.Errorf(\"Encoding mismatch, \\nwant: %v\\ngot %v\\n\", want, got)\n\t// }\n}\n"
  },
  {
    "path": "layers/ague_var1.go",
    "content": "// Copyright 2025 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"errors\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// An AGUEVar1 header is mostly imaginary, having a length of 0 in its serialized form.\n// IPProtocol value is either IPProtocolIPv4 or IPProtocolIPv6, depending on the encapped\n// IP header contained in Data, which must begin with the high-order bits 01.\ntype AGUEVar1 struct {\n\tProtocol IPProtocol\n\tData     []byte\n}\n\n// LayerType returns this pseudo-header's type as defined in layertypes.go\nfunc (l AGUEVar1) LayerType() gopacket.LayerType {\n\treturn LayerTypeAGUEVar1\n}\n\n// LayerContents returns an empty byte array, because this header has no length.\nfunc (l AGUEVar1) LayerContents() []byte {\n\tb := make([]byte, 0, 0)\n\treturn b\n}\n\n// LayerPayload returns an IPv4 or IPv6 packet in serialized form.\nfunc (l AGUEVar1) LayerPayload() []byte {\n\treturn l.Data\n}\n\n// SerializeTo writes our imaginary header into SerializeBuffer. This amount to a noop.\nfunc (l AGUEVar1) SerializeTo(buf gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\treturn nil\n}\n\n// CanDecode returns the type of layer we can decode.\nfunc (l AGUEVar1) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeAGUEVar1\n}\n\n// DecodeFromBytes extracts our pseudo-header data from a serialized packet.\n// There's only one thing, the next header type, which is either IPv4 or IPv6.\n// They are crafted to keep their own header type in the first nibble.\n// So we peek into the IP header to get the next-layer protocol type.\nfunc (l *AGUEVar1) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 1 {\n\t\treturn errors.New(\"DecodeFromBytes() failed, no data\")\n\t}\n\tipVersion := data[0] >> 4\n\tif ipVersion == 4 {\n\t\tl.Protocol = IPProtocolIPv4\n\t} else if ipVersion == 6 {\n\t\tl.Protocol = IPProtocolIPv6\n\t} else {\n\t\treturn errors.New(\"DecodeFromBytes() failed, unknown IP version\")\n\t}\n\tl.Data = data\n\treturn nil\n}\n\n// NextLayerType returns the next layer type, e.g. LayerTypeIPv4\nfunc (l AGUEVar1) NextLayerType() gopacket.LayerType {\n\treturn l.Protocol.LayerType()\n}\n\n// decodeAGUEVar1 decodes packet data to figure out the next-layer IP type,\n// then adds AGUEVar1 layer info to the packet object, recursively decodes\n// remaining layers, and returns the next-layer type.\nfunc decodeAGUEVar1(data []byte, p gopacket.PacketBuilder) error {\n\tl := AGUEVar1{}\n\tif err := l.DecodeFromBytes(data, gopacket.NilDecodeFeedback); err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(l)\n\treturn p.NextDecoder(l.NextLayerType())\n}\n"
  },
  {
    "path": "layers/ague_var1_test.go",
    "content": "// Copyright 2025 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"net\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc logLayers(p gopacket.Packet, t *testing.T) {\n\tlayers := p.Layers()\n\tt.Log(\"Printing packet layers\")\n\tfor _, l := range layers {\n\t\tt.Logf(\"  Got layer %v, %d bytes, payload of %d bytes\", l.LayerType(),\n\t\t\tlen(l.LayerContents()), len(l.LayerPayload()))\n\t}\n\tt.Log(\"Printing packet struct\")\n\tt.Log(p)\n\tt.Log(\"Done printing packet struct\")\n}\n\nvar ethernet = Ethernet{\n\tSrcMAC:       net.HardwareAddr{142, 122, 18, 195, 169, 113},\n\tDstMAC:       net.HardwareAddr{58, 86, 107, 105, 89, 94},\n\tEthernetType: EthernetTypeIPv4,\n}\n\nvar ipv4 = &IPv4{\n\tVersion:  4,\n\tSrcIP:    net.IP{172, 16, 1, 1},\n\tDstIP:    net.IP{172, 16, 2, 1},\n\tProtocol: IPProtocolUDP,\n\tFlags:    IPv4DontFragment,\n\tTTL:      64,\n\tIHL:      5,\n\tId:       1160,\n}\n\nvar udp = &UDP{\n\tSrcPort: 8,\n\tDstPort: 666,\n}\n\nvar aguevar1 = &AGUEVar1{\n\tProtocol: IPProtocolIPv4,\n}\nvar innerIPv4 = &IPv4{\n\tVersion:  4,\n\tSrcIP:    net.IP{172, 16, 1, 1},\n\tDstIP:    net.IP{172, 16, 2, 1},\n\tProtocol: IPProtocolICMPv4,\n\tFlags:    IPv4DontFragment,\n\tTTL:      64,\n\tIHL:      5,\n\tId:       2238,\n}\n\nvar icmpv4 = &ICMPv4{\n\tTypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0),\n\tId:       4724,\n\tSeq:      1,\n}\n\nvar ipv6 = &IPv6{\n\tVersion:      6,\n\tTrafficClass: 0,\n\tFlowLabel:    0,\n\tLength:       40,\n\tNextHeader:   IPProtocolICMPv4,\n\tHopLimit:     64,\n\tSrcIP:        net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},\n\tDstIP:        net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},\n}\n\nvar payload = gopacket.Payload{\n\t0xc8, 0x92, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,\n\t0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,\n}\n\nfunc TestIPv4OverAGUEVar1Encode(t *testing.T) {\n\n\tvar xLayers = []gopacket.SerializableLayer{\n\t\t&ethernet,\n\t\tipv4,\n\t\tudp,\n\t\taguevar1,\n\t\tinnerIPv4,\n\t\ticmpv4,\n\t\tpayload,\n\t}\n\n\tserialBuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{\n\t\tComputeChecksums: false, // if desired, see gre_test:setNetworkLayer()\n\t\tFixLengths:       true,\n\t}\n\tif err := gopacket.SerializeLayers(serialBuf, opts, xLayers...); err != nil {\n\t\tt.Errorf(\"Failed to serialize packet: %v\", err)\n\t}\n\tpacket := gopacket.NewPacket(serialBuf.Bytes(), LinkTypeEthernet, gopacket.Default)\n\tif packet.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", packet.ErrorLayer().Error())\n\t}\n\tcheckLayers(packet, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeAGUEVar1, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\n\t// We don't have a corresponding sample packet capture, but if we did, the verify would look like this:\n\t// if got, want := serialBuf.Bytes(), testPacketAGUEVar1``; !reflect.DeepEqual(want, got) {\n\t// \tt.Errorf(\"Encoding mismatch, \\nwant: %v\\ngot %v\\n\", want, got)\n\t// }\n}\n\nfunc TestIPv6OverAGUEVar1Encode(t *testing.T) {\n\n\tvar xLayers = []gopacket.SerializableLayer{\n\t\t&ethernet,\n\t\tipv4,\n\t\tudp,\n\t\taguevar1,\n\t\tipv6,\n\t\ticmpv4,\n\t\tpayload,\n\t}\n\tserialBuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{\n\t\tComputeChecksums: false, // if desired, see gre_test:setNetworkLayer()\n\t\tFixLengths:       true,\n\t}\n\tif err := gopacket.SerializeLayers(serialBuf, opts, xLayers...); err != nil {\n\t\tt.Errorf(\"Failed to serialize packet: %v\", err)\n\t}\n\tpacket := gopacket.NewPacket(serialBuf.Bytes(), LinkTypeEthernet, gopacket.Default)\n\tif packet.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", packet.ErrorLayer().Error())\n\t}\n\tlogLayers(packet, t)\n\tcheckLayers(packet, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeAGUEVar1, LayerTypeIPv6, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n}\n"
  },
  {
    "path": "layers/apsp.go",
    "content": "// Copyright 2025 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// This file implements the Andromeda PSP header, a specialized version of the PSP header.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// APSP represents a packet encrypted with the Andromeda Paddywhack Security Protocol.\n// It should sit \"under\" a UDP layer with dest port 1000.\n// For more information about the meaning of the fields,\n// see go/andromeda-psp-format\n// This is a remix and extension of the basic PSP header, see go/psp-format\n// Field order and packing don't really matter, because we serialize explicitly,\n// in SerializeTo()\ntype APSP struct {\n\tBaseLayer\n\tNextHeader    uint8\n\tHdrExtLen     uint8\n\tCryptOffset   uint8 // lower 6 bits are offset, 2 high bits are reserved\n\tSDVersVirt    uint8 // see go/andromeda-psp-format for bitfield breakdown\n\tSecParamIdx   uint32\n\tInitVector    uint64\n\tSecTokenV2    uint32\n\tVirtKey       uint32\n\tSrcEndpointID uint64\n\tDstEndpointID uint64\n}\n\n// ApspLen is the sum of the header fields above, by length\nconst ApspLen = 40\n\n// CanDecode returns the type of layer we can decode.\nfunc (l APSP) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeAPSP\n}\n\n// DecodeFromBytes extracts our header data from a serialized packet.\nfunc (l *APSP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < ApspLen {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"invalid APSP header. Length %d less than %d\", len(data), ApspLen)\n\t}\n\tl.NextHeader = data[0]\n\tl.HdrExtLen = data[1]\n\tl.CryptOffset = data[2]\n\tl.SDVersVirt = data[3]\n\tl.SecParamIdx = binary.BigEndian.Uint32(data[4:8])\n\tl.InitVector = binary.BigEndian.Uint64(data[8:16])\n\tl.SecTokenV2 = binary.BigEndian.Uint32(data[16:20])\n\tl.VirtKey = binary.BigEndian.Uint32(data[20:24])\n\tl.SrcEndpointID = binary.BigEndian.Uint64(data[24:32])\n\tl.DstEndpointID = binary.BigEndian.Uint64(data[32:40])\n\tl.BaseLayer = BaseLayer{Contents: data[:ApspLen]}\n\tl.Payload = data[ApspLen:]\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (l APSP) SerializeTo(buf gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tb := l.LayerContents()\n\twriteTo, err := buf.PrependBytes(len(b))\n\tif err != nil {\n\t\treturn err\n\t}\n\tcopy(writeTo, b)\n\treturn nil\n}\n\n// LayerContents returns a byte array containing our serialized header.\nfunc (l APSP) LayerContents() []byte {\n\tbytes := make([]byte, ApspLen)\n\tbytes[0] = l.NextHeader\n\tbytes[1] = l.HdrExtLen\n\tbytes[2] = l.CryptOffset\n\tbytes[3] = l.SDVersVirt\n\tbinary.BigEndian.PutUint32(bytes[4:], l.SecParamIdx)\n\tbinary.BigEndian.PutUint64(bytes[8:], l.InitVector)\n\tbinary.BigEndian.PutUint32(bytes[16:], l.SecTokenV2)\n\tbinary.BigEndian.PutUint32(bytes[20:], l.VirtKey)\n\tbinary.BigEndian.PutUint64(bytes[24:], l.SrcEndpointID)\n\tbinary.BigEndian.PutUint64(bytes[32:], l.DstEndpointID)\n\treturn bytes\n}\n\n// LayerPayload returns an IPv4 or IPv6 packet in serialized form.\nfunc (l APSP) LayerPayload() []byte {\n\treturn l.Payload\n}\n\n// NextLayerType returns the next layer type, either IPv4 or IPv6.\nfunc (l APSP) NextLayerType() gopacket.LayerType {\n\t// TODO: check for IPv6\n\treturn LayerTypeIPv4\n}\n\n// LayerType returns LayerTypeAPSP.\nfunc (l APSP) LayerType() gopacket.LayerType {\n\treturn LayerTypeAPSP\n}\n\nfunc decodeAPSP(data []byte, p gopacket.PacketBuilder) error {\n\tif len(data) == 0 {\n\t\treturn errors.New(\"decodeAPSP() failed, no data\")\n\t}\n\tl := APSP{}\n\tif err := l.DecodeFromBytes(data, gopacket.NilDecodeFeedback); err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(l)\n\treturn p.NextDecoder(l.NextLayerType())\n}\n"
  },
  {
    "path": "layers/apsp_test.go",
    "content": "// Copyright 2025 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/hex\"\n\t\"net\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc TestApspDecoding(t *testing.T) {\n\t// This is a packet generated by Andromeda USPS, captured by etcpdump. It includes:\n\t// - Ethernet\n\t// - IPv6\n\t// - UDP (port 1000)\n\t// - APSP with Security Token and Endpoint IDs\n\t// - IPv4\n\t// - UDP (stripped)\n\t// from gpowersx:~/etcpdump-fixlen/bgbfj25-nic.pcap, wireshark export packet dissections as C arrays\n\t// Inner UDP header/data is stripped, but IP length is not adjusted.\n\tph := `14223bae76fa02320000000086dd66e000000101116420020a0566926d0f000000000000000020020a056f00a419000000000000000078a303e80101000004040b030005ea7f0aff5375f54bc800a68372eac001100300bf39b40a0a0c0e00bf39b40a0a0cee450000c112f540003f11a9eb0a1923090a194711`\n\tpr, err := hex.DecodeString(ph)\n\tif err != nil {\n\t\tt.Errorf(\"Error decoding hex packet: %v\", err)\n\t}\n\n\tp := gopacket.NewPacket(pr, LayerTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Errorf(\"APSP decoding error: %v\", p.ErrorLayer().Error())\n\t}\n\n\tapsp := p.Layer(LayerTypeAPSP).(APSP)\n\tif uint8(4) != apsp.NextHeader {\n\t\tt.Errorf(\"apsp.NextHeader = %v, want 4\", apsp.NextHeader)\n\t}\n}\n\n// This is a made-up packet derived from a different encap example.\nvar testIPv4OverAPSP = []gopacket.SerializableLayer{\n\t&Ethernet{\n\t\tSrcMAC:       net.HardwareAddr{142, 122, 18, 195, 169, 113},\n\t\tDstMAC:       net.HardwareAddr{58, 86, 107, 105, 89, 94},\n\t\tEthernetType: EthernetTypeIPv4,\n\t}, // len=14, total length should be 152 + 14 = 166\n\t&IPv4{\n\t\tVersion:  4,\n\t\tSrcIP:    net.IP{192, 168, 1, 1},\n\t\tDstIP:    net.IP{192, 168, 1, 2},\n\t\tProtocol: IPProtocolUDP,\n\t\tFlags:    IPv4DontFragment,\n\t\tTTL:      64,\n\t\tId:       33852,\n\t\tIHL:      5,\n\t}, // len=20, IP length field should be 20 + 132 = 152\n\t&UDP{\n\t\tSrcPort: 8,\n\t\tDstPort: 1000,\n\t}, // len=8, UDP length field should be 8 + 40 + 20 + 8 + 56 = 132\n\t&APSP{\n\t\tNextHeader:    4,                  // IPv4\n\t\tHdrExtLen:     4,                  // endpoint IDs\n\t\tCryptOffset:   11,                 // following the APSP and IPv4 headers\n\t\tSDVersVirt:    3,                  // SD=1, Virt=0, Vers=1\n\t\tSecParamIdx:   0x0005ea7f,         // taken from sample packet\n\t\tInitVector:    0x0aff5375f54bc800, // taken from sample packet\n\t\tSecTokenV2:    0xa68372ea,         // taken from sample packet\n\t\tVirtKey:       0xc0011003,         // taken from sample packet\n\t\tSrcEndpointID: 0x00bf39b40a0a0c0e, // taken from sample packet\n\t\tDstEndpointID: 0x00bf39b40a0a0cee, // taken from sample packet\n\t}, // len=40, APSP total length should be 40 + 84 = 124\n\t&IPv4{\n\t\tVersion:  4,\n\t\tSrcIP:    net.IP{172, 16, 1, 1},\n\t\tDstIP:    net.IP{172, 16, 2, 1},\n\t\tProtocol: IPProtocolICMPv4,\n\t\tFlags:    IPv4DontFragment,\n\t\tTTL:      64,\n\t\tIHL:      5,\n\t\tId:       1160,\n\t}, // len=20, IPv4 length field should be 20 + 8 + 56 = 84\n\t&ICMPv4{\n\t\tTypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0),\n\t\tId:       4724,\n\t\tSeq:      1,\n\t}, // len=8, ICMP length field should be 8 + 56 = 64\n\tgopacket.Payload{\n\t\t0xc8, 0x92, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,\n\t\t0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,\n\t\t0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,\n\t}, // len=56\n}\n\nfunc TestIPv4OverApspEncode(t *testing.T) {\n\tb := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{\n\t\tComputeChecksums: false, // if desired, see gre_test:setNetworkLayer()\n\t\tFixLengths:       true,\n\t}\n\tif err := gopacket.SerializeLayers(b, opts, testIPv4OverAPSP...); err != nil {\n\t\tt.Errorf(\"Unable to serialize: %v\", err)\n\t}\n\tp := gopacket.NewPacket(b.Bytes(), LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeAPSP,\n\t\tLayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\n\tlayers := p.Layers()\n\tetherLayer := p.Layer(LayerTypeEthernet)\n\tether := Ethernet{}\n\tether.DecodeFromBytes(etherLayer.LayerContents(), gopacket.NilDecodeFeedback)\n\tif ether.EthernetType != EthernetTypeIPv4 {\n\t\tt.Errorf(\"Ethernet type is %v, not %v\", ether.EthernetType, EthernetTypeIPv4)\n\t}\n\tipLayer := p.Layer(LayerTypeIPv4)\n\tip1 := IPv4{}\n\tip1.DecodeFromBytes(ipLayer.LayerContents(), gopacket.NilDecodeFeedback)\n\tif ip1.Length != 152 {\n\t\tt.Errorf(\"inner IPv4 length is %d, not 152\", ip1.Length)\n\t}\n\tudpLayer := p.Layer(LayerTypeUDP)\n\tudp1 := UDP{}\n\tudp1.DecodeFromBytes(udpLayer.LayerContents(), gopacket.NilDecodeFeedback)\n\tif udp1.Length != 132 {\n\t\tt.Errorf(\"outer UDP length is %d, not 132\", udp1.Length)\n\t}\n\tapsp1 := p.Layer(LayerTypeAPSP).(APSP)\n\tif apsp1.CryptOffset != 11 {\n\t\tt.Errorf(\"APSP crypt offset is %d, not 11\", apsp1.CryptOffset)\n\t}\n\tipLayer = layers[4]\n\tip2 := IPv4{}\n\tip2.DecodeFromBytes(ipLayer.LayerContents(), gopacket.NilDecodeFeedback)\n\tif ip2.Length != 84 {\n\t\tt.Errorf(\"inner IPv4 length is %d, not 84\", ip2.Length)\n\t}\n\ticmpLayer := p.Layer(LayerTypeICMPv4)\n\ticmp := ICMPv4{}\n\ticmp.DecodeFromBytes(icmpLayer.LayerContents(), gopacket.NilDecodeFeedback)\n\tif icmp.TypeCode != 0x800 {\n\t\tt.Errorf(\"ICMP type is %x, not %x\", icmp.TypeCode, 0x800)\n\t}\n\n\tcheckSerialization(p, t)\n}\n"
  },
  {
    "path": "layers/arp.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// Potential values for ARP.Operation.\nconst (\n\tARPRequest = 1\n\tARPReply   = 2\n)\n\n// ARP is a ARP packet header.\ntype ARP struct {\n\tBaseLayer\n\tAddrType          LinkType\n\tProtocol          EthernetType\n\tHwAddressSize     uint8\n\tProtAddressSize   uint8\n\tOperation         uint16\n\tSourceHwAddress   []byte\n\tSourceProtAddress []byte\n\tDstHwAddress      []byte\n\tDstProtAddress    []byte\n}\n\n// LayerType returns LayerTypeARP\nfunc (arp *ARP) LayerType() gopacket.LayerType { return LayerTypeARP }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (arp *ARP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 8 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"ARP length %d too short\", len(data))\n\t}\n\tarp.AddrType = LinkType(binary.BigEndian.Uint16(data[0:2]))\n\tarp.Protocol = EthernetType(binary.BigEndian.Uint16(data[2:4]))\n\tarp.HwAddressSize = data[4]\n\tarp.ProtAddressSize = data[5]\n\tarp.Operation = binary.BigEndian.Uint16(data[6:8])\n\tarpLength := 8 + 2*arp.HwAddressSize + 2*arp.ProtAddressSize\n\tif len(data) < int(arpLength) {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"ARP length %d too short, %d expected\", len(data), arpLength)\n\t}\n\tarp.SourceHwAddress = data[8 : 8+arp.HwAddressSize]\n\tarp.SourceProtAddress = data[8+arp.HwAddressSize : 8+arp.HwAddressSize+arp.ProtAddressSize]\n\tarp.DstHwAddress = data[8+arp.HwAddressSize+arp.ProtAddressSize : 8+2*arp.HwAddressSize+arp.ProtAddressSize]\n\tarp.DstProtAddress = data[8+2*arp.HwAddressSize+arp.ProtAddressSize : 8+2*arp.HwAddressSize+2*arp.ProtAddressSize]\n\n\tarp.Contents = data[:arpLength]\n\tarp.Payload = data[arpLength:]\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (arp *ARP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tsize := 8 + len(arp.SourceHwAddress) + len(arp.SourceProtAddress) + len(arp.DstHwAddress) + len(arp.DstProtAddress)\n\tbytes, err := b.PrependBytes(size)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif opts.FixLengths {\n\t\tif len(arp.SourceHwAddress) != len(arp.DstHwAddress) {\n\t\t\treturn errors.New(\"mismatched hardware address sizes\")\n\t\t}\n\t\tarp.HwAddressSize = uint8(len(arp.SourceHwAddress))\n\t\tif len(arp.SourceProtAddress) != len(arp.DstProtAddress) {\n\t\t\treturn errors.New(\"mismatched prot address sizes\")\n\t\t}\n\t\tarp.ProtAddressSize = uint8(len(arp.SourceProtAddress))\n\t}\n\tbinary.BigEndian.PutUint16(bytes, uint16(arp.AddrType))\n\tbinary.BigEndian.PutUint16(bytes[2:], uint16(arp.Protocol))\n\tbytes[4] = arp.HwAddressSize\n\tbytes[5] = arp.ProtAddressSize\n\tbinary.BigEndian.PutUint16(bytes[6:], arp.Operation)\n\tstart := 8\n\tfor _, addr := range [][]byte{\n\t\tarp.SourceHwAddress,\n\t\tarp.SourceProtAddress,\n\t\tarp.DstHwAddress,\n\t\tarp.DstProtAddress,\n\t} {\n\t\tcopy(bytes[start:], addr)\n\t\tstart += len(addr)\n\t}\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (arp *ARP) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeARP\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (arp *ARP) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\nfunc decodeARP(data []byte, p gopacket.PacketBuilder) error {\n\n\tarp := &ARP{}\n\treturn decodingLayerDecoder(arp, data, p)\n}\n"
  },
  {
    "path": "layers/asf.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license that can be found\n// in the LICENSE file in the root of the source tree.\n\npackage layers\n\n// This file implements the ASF RMCP payload specified in section 3.2.2.3 of\n// https://www.dmtf.org/sites/default/files/standards/documents/DSP0136.pdf\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\nconst (\n\t// ASFRMCPEnterprise is the IANA-assigned Enterprise Number of the ASF-RMCP.\n\tASFRMCPEnterprise uint32 = 4542\n)\n\n// ASFDataIdentifier encapsulates fields used to uniquely identify the format of\n// the data block.\n//\n// While the enterprise number is almost always 4542 (ASF-RMCP), we support\n// registering layers using structs of this type as a key in case any users are\n// using OEM-extensions.\ntype ASFDataIdentifier struct {\n\n\t// Enterprise is the IANA Enterprise Number associated with the entity that\n\t// defines the message type. A list can be found at\n\t// https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers.\n\t// This can be thought of as the namespace for the message type.\n\tEnterprise uint32\n\n\t// Type is the message type, defined by the entity associated with the\n\t// enterprise above. No pressure, but in the context of EN 4542, 1 byte is\n\t// the difference between sending a ping and telling a machine to do an\n\t// unconditional power down (0x80 and 0x12 respectively).\n\tType uint8\n}\n\n// LayerType returns the payload layer type corresponding to an ASF message\n// type.\nfunc (a ASFDataIdentifier) LayerType() gopacket.LayerType {\n\tif lt := asfDataLayerTypes[a]; lt != 0 {\n\t\treturn lt\n\t}\n\n\t// some layer types don't have a payload, e.g. ASF-RMCP Presence Ping.\n\treturn gopacket.LayerTypePayload\n}\n\n// RegisterASFLayerType allows specifying that the data block of ASF packets\n// with a given enterprise number and type should be processed by a given layer\n// type. This overrides any existing registrations, including defaults.\nfunc RegisterASFLayerType(a ASFDataIdentifier, l gopacket.LayerType) {\n\tasfDataLayerTypes[a] = l\n}\n\nvar (\n\t// ASFDataIdentifierPresencePong is the message type of the response to a\n\t// Presence Ping message. It indicates the sender is ASF-RMCP-aware.\n\tASFDataIdentifierPresencePong = ASFDataIdentifier{\n\t\tEnterprise: ASFRMCPEnterprise,\n\t\tType:       0x40,\n\t}\n\n\t// ASFDataIdentifierPresencePing is a message type sent to a managed client\n\t// to solicit a Presence Pong response. Clients may ignore this if the RMCP\n\t// version is unsupported. Sending this message with a sequence number <255\n\t// is the recommended way of finding out whether an implementation sends\n\t// RMCP ACKs (e.g. iDRAC does, Super Micro does not).\n\t//\n\t// Systems implementing IPMI must respond to this ping to conform to the\n\t// spec, so it is a good substitute for an ICMP ping.\n\tASFDataIdentifierPresencePing = ASFDataIdentifier{\n\t\tEnterprise: ASFRMCPEnterprise,\n\t\tType:       0x80,\n\t}\n\n\t// asfDataLayerTypes is used to find the next layer for a given ASF header.\n\tasfDataLayerTypes = map[ASFDataIdentifier]gopacket.LayerType{\n\t\tASFDataIdentifierPresencePong: LayerTypeASFPresencePong,\n\t}\n)\n\n// ASF defines ASF's generic RMCP message Data block format. See section\n// 3.2.2.3.\ntype ASF struct {\n\tBaseLayer\n\tASFDataIdentifier\n\n\t// Tag is used to match request/response pairs. The tag of a response is set\n\t// to that of the message it is responding to. If a message is\n\t// unidirectional, i.e. not part of a request/response pair, this is set to\n\t// 255.\n\tTag uint8\n\n\t// 1 byte reserved, set to 0x00.\n\n\t// Length is the length of this layer's payload in bytes.\n\tLength uint8\n}\n\n// LayerType returns LayerTypeASF. It partially satisfies Layer and\n// SerializableLayer.\nfunc (*ASF) LayerType() gopacket.LayerType {\n\treturn LayerTypeASF\n}\n\n// CanDecode returns LayerTypeASF. It partially satisfies DecodingLayer.\nfunc (a *ASF) CanDecode() gopacket.LayerClass {\n\treturn a.LayerType()\n}\n\n// DecodeFromBytes makes the layer represent the provided bytes. It partially\n// satisfies DecodingLayer.\nfunc (a *ASF) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 8 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"invalid ASF data header, length %v less than 8\",\n\t\t\tlen(data))\n\t}\n\n\ta.BaseLayer.Contents = data[:8]\n\ta.BaseLayer.Payload = data[8:]\n\n\ta.Enterprise = binary.BigEndian.Uint32(data[:4])\n\ta.Type = uint8(data[4])\n\ta.Tag = uint8(data[5])\n\t// 1 byte reserved\n\ta.Length = uint8(data[7])\n\treturn nil\n}\n\n// NextLayerType returns the layer type corresponding to the message type of\n// this ASF data layer. This partially satisfies DecodingLayer.\nfunc (a *ASF) NextLayerType() gopacket.LayerType {\n\treturn a.ASFDataIdentifier.LayerType()\n}\n\n// SerializeTo writes the serialized fom of this layer into the SerializeBuffer,\n// partially satisfying SerializableLayer.\nfunc (a *ASF) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tpayload := b.Bytes()\n\tbytes, err := b.PrependBytes(8)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbinary.BigEndian.PutUint32(bytes[:4], a.Enterprise)\n\tbytes[4] = uint8(a.Type)\n\tbytes[5] = a.Tag\n\tbytes[6] = 0x00\n\tif opts.FixLengths {\n\t\ta.Length = uint8(len(payload))\n\t}\n\tbytes[7] = a.Length\n\treturn nil\n}\n\n// decodeASF decodes the byte slice into an RMCP-ASF data struct.\nfunc decodeASF(data []byte, p gopacket.PacketBuilder) error {\n\treturn decodingLayerDecoder(&ASF{}, data, p)\n}\n"
  },
  {
    "path": "layers/asf_presencepong.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license that can be found\n// in the LICENSE file in the root of the source tree.\n\npackage layers\n\n// This file implements the RMCP ASF Presence Pong message, specified in section\n// 3.2.4.3 of\n// https://www.dmtf.org/sites/default/files/standards/documents/DSP0136.pdf. It\n// also contains non-competing elements from IPMI v2.0, specified in section\n// 13.2.4 of\n// https://www.intel.com/content/dam/www/public/us/en/documents/specification-updates/ipmi-intelligent-platform-mgt-interface-spec-2nd-gen-v2-0-spec-update.pdf.\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\ntype (\n\t// ASFEntity is the type of individual entities that a Presence Pong\n\t// response can indicate support of. The entities currently implemented by\n\t// the spec are IPMI and ASFv1.\n\tASFEntity uint8\n\n\t// ASFInteraction is the type of individual interactions that a Presence\n\t// Pong response can indicate support for. The interactions currently\n\t// implemented by the spec are RMCP security extensions. Although not\n\t// specified, IPMI uses this field to indicate support for DASH, which is\n\t// supported as well.\n\tASFInteraction uint8\n)\n\nconst (\n\t// ASFDCMIEnterprise is the IANA-assigned Enterprise Number of the Data\n\t// Center Manageability Interface Forum. The Presence Pong response's\n\t// Enterprise field being set to this value indicates support for DCMI. The\n\t// DCMI spec regards the OEM field as reserved, so these should be null.\n\tASFDCMIEnterprise uint32 = 36465\n\n\t// ASFPresencePongEntityIPMI ANDs with Presence Pong's supported entities\n\t// field if the managed system supports IPMI.\n\tASFPresencePongEntityIPMI ASFEntity = 1 << 7\n\n\t// ASFPresencePongEntityASFv1 ANDs with Presence Pong's supported entities\n\t// field if the managed system supports ASF v1.0.\n\tASFPresencePongEntityASFv1 ASFEntity = 1\n\n\t// ASFPresencePongInteractionSecurityExtensions ANDs with Presence Pong's\n\t// supported interactions field if the managed system supports RMCP v2.0\n\t// security extensions. See section 3.2.3.\n\tASFPresencePongInteractionSecurityExtensions ASFInteraction = 1 << 7\n\n\t// ASFPresencePongInteractionDASH ANDs with Presence Pong's supported\n\t// interactions field if the managed system supports DMTF DASH. See\n\t// https://www.dmtf.org/standards/dash.\n\tASFPresencePongInteractionDASH ASFInteraction = 1 << 5\n)\n\n// ASFPresencePong defines the structure of a Presence Pong message's payload.\n// See section 3.2.4.3.\ntype ASFPresencePong struct {\n\tBaseLayer\n\n\t// Enterprise is the IANA Enterprise Number of an entity that has defined\n\t// OEM-specific capabilities for the managed client. If no such capabilities\n\t// exist, this is set to ASF's IANA Enterprise Number.\n\tEnterprise uint32\n\n\t// OEM identifies OEM-specific capabilities. Its structure is defined by the\n\t// OEM. This is set to 0s if no OEM-specific capabilities exist. This\n\t// implementation does not change byte order from the wire for this field.\n\tOEM [4]byte\n\n\t// We break out entities and interactions into separate booleans as\n\t// discovery is the entire point of this type of message, so we assume they\n\t// are accessed. It also makes gopacket's default layer printing more\n\t// useful.\n\n\t// IPMI is true if IPMI is supported by the managed system. There is no\n\t// explicit version in the specification, however given the dates, this is\n\t// assumed to be IPMI v1.0.  Support for IPMI is contained in the \"supported\n\t// entities\" field of the presence pong payload.\n\tIPMI bool\n\n\t// ASFv1 indicates support for ASF v1.0. This seems somewhat redundant as\n\t// ASF must be supported in order to receive a response. This is contained\n\t// in the \"supported entities\" field of the presence pong payload.\n\tASFv1 bool\n\n\t// SecurityExtensions indicates support for RMCP Security Extensions,\n\t// specified in ASF v2.0. This will always be false for v1.x\n\t// implementations. This is contained in the \"supported interactions\" field\n\t// of the presence pong payload. This field is defined in ASF v1.0, but has\n\t// no useful value.\n\tSecurityExtensions bool\n\n\t// DASH is true if DMTF DASH is supported. This is not specified in ASF\n\t// v2.0, but in IPMI v2.0, however the former does not preclude it, so we\n\t// support it.\n\tDASH bool\n\n\t// 6 bytes reserved after the entities and interactions fields, set to 0s.\n}\n\n// SupportsDCMI returns whether the Presence Pong message indicates support for\n// the Data Center Management Interface, which is an extension of IPMI v2.0.\nfunc (a *ASFPresencePong) SupportsDCMI() bool {\n\treturn a.Enterprise == ASFDCMIEnterprise && a.IPMI && a.ASFv1\n}\n\n// LayerType returns LayerTypeASFPresencePong. It partially satisfies Layer and\n// SerializableLayer.\nfunc (*ASFPresencePong) LayerType() gopacket.LayerType {\n\treturn LayerTypeASFPresencePong\n}\n\n// CanDecode returns LayerTypeASFPresencePong. It partially satisfies\n// DecodingLayer.\nfunc (a *ASFPresencePong) CanDecode() gopacket.LayerClass {\n\treturn a.LayerType()\n}\n\n// DecodeFromBytes makes the layer represent the provided bytes. It partially\n// satisfies DecodingLayer.\nfunc (a *ASFPresencePong) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 16 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"invalid ASF presence pong payload, length %v less than 16\",\n\t\t\tlen(data))\n\t}\n\n\ta.BaseLayer.Contents = data[:16]\n\ta.BaseLayer.Payload = data[16:]\n\n\ta.Enterprise = binary.BigEndian.Uint32(data[:4])\n\tcopy(a.OEM[:], data[4:8]) // N.B. no byte order change\n\ta.IPMI = data[8]&uint8(ASFPresencePongEntityIPMI) != 0\n\ta.ASFv1 = data[8]&uint8(ASFPresencePongEntityASFv1) != 0\n\ta.SecurityExtensions = data[9]&uint8(ASFPresencePongInteractionSecurityExtensions) != 0\n\ta.DASH = data[9]&uint8(ASFPresencePongInteractionDASH) != 0\n\t// ignore remaining 6 bytes; should be set to 0s\n\treturn nil\n}\n\n// NextLayerType returns LayerTypePayload, as there are no further layers to\n// decode. This partially satisfies DecodingLayer.\nfunc (a *ASFPresencePong) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\n// SerializeTo writes the serialized fom of this layer into the SerializeBuffer,\n// partially satisfying SerializableLayer.\nfunc (a *ASFPresencePong) SerializeTo(b gopacket.SerializeBuffer, _ gopacket.SerializeOptions) error {\n\tbytes, err := b.PrependBytes(16)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbinary.BigEndian.PutUint32(bytes[:4], a.Enterprise)\n\n\tcopy(bytes[4:8], a.OEM[:])\n\n\tbytes[8] = 0\n\tif a.IPMI {\n\t\tbytes[8] |= uint8(ASFPresencePongEntityIPMI)\n\t}\n\tif a.ASFv1 {\n\t\tbytes[8] |= uint8(ASFPresencePongEntityASFv1)\n\t}\n\n\tbytes[9] = 0\n\tif a.SecurityExtensions {\n\t\tbytes[9] |= uint8(ASFPresencePongInteractionSecurityExtensions)\n\t}\n\tif a.DASH {\n\t\tbytes[9] |= uint8(ASFPresencePongInteractionDASH)\n\t}\n\n\t// zero-out remaining 6 bytes\n\tfor i := 10; i < len(bytes); i++ {\n\t\tbytes[i] = 0x00\n\t}\n\n\treturn nil\n}\n\n// decodeASFPresencePong decodes the byte slice into an RMCP-ASF Presence Pong\n// struct.\nfunc decodeASFPresencePong(data []byte, p gopacket.PacketBuilder) error {\n\treturn decodingLayerDecoder(&ASFPresencePong{}, data, p)\n}\n"
  },
  {
    "path": "layers/asf_presencepong_test.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license that can be found\n// in the LICENSE file in the root of the source tree.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc TestASFPresencePongDecodeFromBytes(t *testing.T) {\n\tb, err := hex.DecodeString(\"000011be000000008100000000000000\")\n\tif err != nil {\n\t\tt.Fatalf(\"Failed to decode ASF Presence Pong message\")\n\t}\n\n\tpp := &ASFPresencePong{}\n\tif err := pp.DecodeFromBytes(b, gopacket.NilDecodeFeedback); err != nil {\n\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t}\n\tif !bytes.Equal(pp.BaseLayer.Payload, []byte{}) {\n\t\tt.Errorf(\"payload is %v, want %v\", pp.BaseLayer.Payload, b)\n\t}\n\tif !bytes.Equal(pp.BaseLayer.Contents, b) {\n\t\tt.Errorf(\"contents is %v, want %v\", pp.BaseLayer.Contents, b)\n\t}\n\tif pp.Enterprise != ASFRMCPEnterprise {\n\t\tt.Errorf(\"want enterprise %v, got %v\", ASFRMCPEnterprise, pp.Enterprise)\n\t}\n\tif !bytes.Equal(pp.OEM[:], make([]byte, 4)) {\n\t\tt.Errorf(\"want null OEM, got %v\", pp.OEM[:])\n\t}\n\tif !pp.IPMI {\n\t\tt.Errorf(\"want IPMI, got false\")\n\t}\n\tif !pp.ASFv1 {\n\t\tt.Errorf(\"want ASFv1, got false\")\n\t}\n\tif pp.SecurityExtensions {\n\t\tt.Errorf(\"do not want security extensions, got true\")\n\t}\n\tif pp.DASH {\n\t\tt.Errorf(\"do not want DASH, got true\")\n\t}\n}\n\nfunc TestASFPresencePongSupportsDCMI(t *testing.T) {\n\ttable := []struct {\n\t\tlayer *ASFPresencePong\n\t\twant  bool\n\t}{\n\t\t{\n\t\t\t&ASFPresencePong{\n\t\t\t\tEnterprise: ASFRMCPEnterprise,\n\t\t\t\tIPMI:       true,\n\t\t\t\tASFv1:      true,\n\t\t\t},\n\t\t\tfalse,\n\t\t},\n\t\t{\n\t\t\t&ASFPresencePong{\n\t\t\t\tEnterprise: ASFDCMIEnterprise,\n\t\t\t\tIPMI:       false,\n\t\t\t\tASFv1:      true,\n\t\t\t},\n\t\t\tfalse,\n\t\t},\n\t\t{\n\t\t\t&ASFPresencePong{\n\t\t\t\tEnterprise: ASFDCMIEnterprise,\n\t\t\t\tIPMI:       true,\n\t\t\t\tASFv1:      false,\n\t\t\t},\n\t\t\tfalse,\n\t\t},\n\t\t{\n\t\t\t&ASFPresencePong{\n\t\t\t\tEnterprise: ASFDCMIEnterprise,\n\t\t\t\tIPMI:       true,\n\t\t\t\tASFv1:      true,\n\t\t\t},\n\t\t\ttrue,\n\t\t},\n\t}\n\tfor _, test := range table {\n\t\tgot := test.layer.SupportsDCMI()\n\t\tif got != test.want {\n\t\t\tt.Errorf(\"%v SupportsDCMI() = %v, want %v\", test.layer, got, test.want)\n\t\t}\n\t}\n}\n\nfunc serializeASFPresencePong(pp *ASFPresencePong) ([]byte, error) {\n\tsb := gopacket.NewSerializeBuffer()\n\terr := pp.SerializeTo(sb, gopacket.SerializeOptions{})\n\treturn sb.Bytes(), err\n}\n\nfunc TestASFPresencePongSerializeTo(t *testing.T) {\n\ttable := []struct {\n\t\tlayer *ASFPresencePong\n\t\twant  []byte\n\t}{\n\t\t{\n\t\t\t&ASFPresencePong{\n\t\t\t\tEnterprise: ASFRMCPEnterprise,\n\t\t\t\tIPMI:       true,\n\t\t\t\tASFv1:      true,\n\t\t\t},\n\t\t\t[]byte{0, 0, 0x11, 0xbe, 0, 0, 0, 0, 0x81, 0, 0, 0, 0, 0, 0, 0},\n\t\t},\n\t\t{\n\t\t\t&ASFPresencePong{\n\t\t\t\tEnterprise:         1234,\n\t\t\t\tOEM:                [4]byte{1, 2, 3, 4},\n\t\t\t\tASFv1:              true,\n\t\t\t\tSecurityExtensions: true,\n\t\t\t\tDASH:               true,\n\t\t\t},\n\t\t\t[]byte{0, 0, 0x4, 0xd2, 1, 2, 3, 4, 0x01, 0xa0, 0, 0, 0, 0, 0, 0},\n\t\t},\n\t}\n\tfor _, test := range table {\n\t\tb, err := serializeASFPresencePong(test.layer)\n\t\tswitch {\n\t\tcase err != nil && test.want != nil:\n\t\t\tt.Errorf(\"serialize %v failed with %v, wanted %v\", test.layer,\n\t\t\t\terr, test.want)\n\t\tcase err == nil && !bytes.Equal(b, test.want):\n\t\t\tt.Errorf(\"serialize %v = %v, want %v\", test.layer, b, test.want)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "layers/asf_test.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license that can be found\n// in the LICENSE file in the root of the source tree.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc TestASFDecodeFromBytes(t *testing.T) {\n\tb, err := hex.DecodeString(\"000011be4000001000000000000000\")\n\tif err != nil {\n\t\tt.Fatalf(\"Failed to decode ASF message\")\n\t}\n\n\tasf := &ASF{}\n\tif err := asf.DecodeFromBytes(b, gopacket.NilDecodeFeedback); err != nil {\n\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t}\n\tif !bytes.Equal(asf.BaseLayer.Contents, b[:8]) {\n\t\tt.Errorf(\"contents is %v, want %v\", asf.BaseLayer.Contents, b[:8])\n\t}\n\tif !bytes.Equal(asf.BaseLayer.Payload, b[8:]) {\n\t\tt.Errorf(\"payload is %v, want %v\", asf.BaseLayer.Payload, b[8:])\n\t}\n\tif asf.Enterprise != ASFRMCPEnterprise {\n\t\tt.Errorf(\"enterprise is %v, want %v\", asf.Enterprise, ASFRMCPEnterprise)\n\t}\n\tif asf.Type != ASFDataIdentifierPresencePong.Type {\n\t\tt.Errorf(\"type is %v, want %v\", asf.Type, ASFDataIdentifierPresencePong)\n\t}\n\tif asf.Tag != 0 {\n\t\tt.Errorf(\"tag is %v, want 0\", asf.Tag)\n\t}\n\tif asf.Length != 16 {\n\t\tt.Errorf(\"length is %v, want 16\", asf.Length)\n\t}\n}\n\nfunc serializeASF(asf *ASF) ([]byte, error) {\n\tsb := gopacket.NewSerializeBuffer()\n\terr := asf.SerializeTo(sb, gopacket.SerializeOptions{\n\t\tFixLengths: true,\n\t})\n\treturn sb.Bytes(), err\n}\n\nfunc TestASFSerializeTo(t *testing.T) {\n\ttable := []struct {\n\t\tlayer *ASF\n\t\twant  []byte\n\t}{\n\t\t{\n\t\t\t&ASF{\n\t\t\t\tASFDataIdentifier: ASFDataIdentifierPresencePing,\n\t\t\t},\n\t\t\t[]byte{0, 0, 0x11, 0xbe, 0x80, 0, 0, 0},\n\t\t},\n\t\t{\n\t\t\t&ASF{\n\t\t\t\tASFDataIdentifier: ASFDataIdentifierPresencePong,\n\t\t\t\t// ensures length is being overridden - should be encoded to 0\n\t\t\t\t// as there is no payload\n\t\t\t\tLength: 1,\n\t\t\t},\n\t\t\t[]byte{0, 0, 0x11, 0xbe, 0x40, 0, 0, 0},\n\t\t},\n\t}\n\tfor _, test := range table {\n\t\tb, err := serializeASF(test.layer)\n\t\tswitch {\n\t\tcase err != nil && test.want != nil:\n\t\t\tt.Errorf(\"serialize %v failed with %v, wanted %v\", test.layer,\n\t\t\t\terr, test.want)\n\t\tcase err == nil && !bytes.Equal(b, test.want):\n\t\t\tt.Errorf(\"serialize %v = %v, want %v\", test.layer, b, test.want)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "layers/base.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n)\n\n// BaseLayer is a convenience struct which implements the LayerData and\n// LayerPayload functions of the Layer interface.\ntype BaseLayer struct {\n\t// Contents is the set of bytes that make up this layer.  IE: for an\n\t// Ethernet packet, this would be the set of bytes making up the\n\t// Ethernet frame.\n\tContents []byte\n\t// Payload is the set of bytes contained by (but not part of) this\n\t// Layer.  Again, to take Ethernet as an example, this would be the\n\t// set of bytes encapsulated by the Ethernet protocol.\n\tPayload []byte\n}\n\n// LayerContents returns the bytes of the packet layer.\nfunc (b *BaseLayer) LayerContents() []byte { return b.Contents }\n\n// LayerPayload returns the bytes contained within the packet layer.\nfunc (b *BaseLayer) LayerPayload() []byte { return b.Payload }\n\ntype layerDecodingLayer interface {\n\tgopacket.Layer\n\tDecodeFromBytes([]byte, gopacket.DecodeFeedback) error\n\tNextLayerType() gopacket.LayerType\n}\n\nfunc decodingLayerDecoder(d layerDecodingLayer, data []byte, p gopacket.PacketBuilder) error {\n\terr := d.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(d)\n\tnext := d.NextLayerType()\n\tif next == gopacket.LayerTypeZero {\n\t\treturn nil\n\t}\n\treturn p.NextDecoder(next)\n}\n\n// hacky way to zero out memory... there must be a better way?\nvar lotsOfZeros [1024]byte\n"
  },
  {
    "path": "layers/base_test.go",
    "content": "// Copyright 2012, Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// This file contains some test helper functions.\n\npackage layers\n\nimport (\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc checkLayers(p gopacket.Packet, want []gopacket.LayerType, t *testing.T) {\n\tlayers := p.Layers()\n\tt.Log(\"Checking packet layers, want\", want)\n\tfor _, l := range layers {\n\t\tt.Logf(\"  Got layer %v, %d bytes, payload of %d bytes\", l.LayerType(),\n\t\t\tlen(l.LayerContents()), len(l.LayerPayload()))\n\t}\n\tt.Log(p)\n\tif len(layers) < len(want) {\n\t\tt.Errorf(\"  Number of layers mismatch: got %d want %d\", len(layers),\n\t\t\tlen(want))\n\t\treturn\n\t}\n\tfor i, l := range want {\n\t\tif l == gopacket.LayerTypePayload {\n\t\t\t// done matching layers\n\t\t\treturn\n\t\t}\n\n\t\tif layers[i].LayerType() != l {\n\t\t\tt.Errorf(\"  Layer %d mismatch: got %v want %v\", i,\n\t\t\t\tlayers[i].LayerType(), l)\n\t\t}\n\t}\n}\n\n// Checks that when a serialized version of p is decoded, p and the serialized version of p are the same.\n// Does not work for packets where the order of options can change, like icmpv6 router advertisements, dhcpv6, etc.\nfunc checkSerialization(p gopacket.Packet, t *testing.T) {\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{\n\t\tComputeChecksums: false,\n\t\tFixLengths:       false,\n\t}\n\tif err := gopacket.SerializePacket(buf, opts, p); err != nil {\n\t\tt.Error(\"Failed to encode packet:\", err)\n\t}\n\n\tp2 := gopacket.NewPacket(buf.Bytes(), LinkTypeEthernet, gopacket.Default)\n\tif p2.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode the re-encoded packet:\", p2.ErrorLayer().Error())\n\t}\n\n\tif p2.Dump() != p.Dump() {\n\t\tt.Errorf(\"The decoded and the re-encoded packet are different!\\nDecoded:\\n%s\\n Re-Encoded:\\n%s\", p.Dump(), p2.Dump())\n\t}\n}\n"
  },
  {
    "path": "layers/bfd.go",
    "content": "// Copyright 2017 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n//\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// BFD Control Packet Format\n// -------------------------\n// The current version of BFD's RFC (RFC 5880) contains the following\n// diagram for the BFD Control packet format:\n//\n//      0                   1                   2                   3\n//      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |Vers |  Diag   |Sta|P|F|C|A|D|M|  Detect Mult  |    Length     |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                       My Discriminator                        |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                      Your Discriminator                       |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                    Desired Min TX Interval                    |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                   Required Min RX Interval                    |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                 Required Min Echo RX Interval                 |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//\n//     An optional Authentication Section MAY be present:\n//\n//      0                   1                   2                   3\n//      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |   Auth Type   |   Auth Len    |    Authentication Data...     |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//\n//\n//     Simple Password Authentication Section Format\n//     ---------------------------------------------\n//      0                   1                   2                   3\n//      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |   Auth Type   |   Auth Len    |  Auth Key ID  |  Password...  |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                              ...                              |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//\n//\n//     Keyed MD5 and Meticulous Keyed MD5 Authentication Section Format\n//     ----------------------------------------------------------------\n//      0                   1                   2                   3\n//      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |   Auth Type   |   Auth Len    |  Auth Key ID  |   Reserved    |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                        Sequence Number                        |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                      Auth Key/Digest...                       |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                              ...                              |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//\n//\n//     Keyed SHA1 and Meticulous Keyed SHA1 Authentication Section Format\n//     ------------------------------------------------------------------\n//      0                   1                   2                   3\n//      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |   Auth Type   |   Auth Len    |  Auth Key ID  |   Reserved    |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                        Sequence Number                        |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                       Auth Key/Hash...                        |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                              ...                              |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//\n//     From https://tools.ietf.org/rfc/rfc5880.txt\nconst bfdMinimumRecordSizeInBytes int = 24\n\n// BFDVersion represents the version as decoded from the BFD control message\ntype BFDVersion uint8\n\n// BFDDiagnostic represents diagnostic infomation about a BFD session\ntype BFDDiagnostic uint8\n\n// constants that define BFDDiagnostic flags\nconst (\n\tBFDDiagnosticNone               BFDDiagnostic = 0 // No Diagnostic\n\tBFDDiagnosticTimeExpired        BFDDiagnostic = 1 // Control Detection Time Expired\n\tBFDDiagnosticEchoFailed         BFDDiagnostic = 2 // Echo Function Failed\n\tBFDDiagnosticNeighborSignalDown BFDDiagnostic = 3 // Neighbor Signaled Session Down\n\tBFDDiagnosticForwardPlaneReset  BFDDiagnostic = 4 // Forwarding Plane Reset\n\tBFDDiagnosticPathDown           BFDDiagnostic = 5 // Path Down\n\tBFDDiagnosticConcatPathDown     BFDDiagnostic = 6 // Concatenated Path Down\n\tBFDDiagnosticAdminDown          BFDDiagnostic = 7 // Administratively Down\n\tBFDDiagnosticRevConcatPathDown  BFDDiagnostic = 8 // Reverse Concatenated Path Dow\n)\n\n// String returns a string version of BFDDiagnostic\nfunc (bd BFDDiagnostic) String() string {\n\tswitch bd {\n\tdefault:\n\t\treturn \"Unknown\"\n\tcase BFDDiagnosticNone:\n\t\treturn \"None\"\n\tcase BFDDiagnosticTimeExpired:\n\t\treturn \"Control Detection Time Expired\"\n\tcase BFDDiagnosticEchoFailed:\n\t\treturn \"Echo Function Failed\"\n\tcase BFDDiagnosticNeighborSignalDown:\n\t\treturn \"Neighbor Signaled Session Down\"\n\tcase BFDDiagnosticForwardPlaneReset:\n\t\treturn \"Forwarding Plane Reset\"\n\tcase BFDDiagnosticPathDown:\n\t\treturn \"Path Down\"\n\tcase BFDDiagnosticConcatPathDown:\n\t\treturn \"Concatenated Path Down\"\n\tcase BFDDiagnosticAdminDown:\n\t\treturn \"Administratively Down\"\n\tcase BFDDiagnosticRevConcatPathDown:\n\t\treturn \"Reverse Concatenated Path Down\"\n\t}\n}\n\n// BFDState represents the state of a BFD session\ntype BFDState uint8\n\n// constants that define BFDState\nconst (\n\tBFDStateAdminDown BFDState = 0\n\tBFDStateDown      BFDState = 1\n\tBFDStateInit      BFDState = 2\n\tBFDStateUp        BFDState = 3\n)\n\n// String returns a string version of BFDState\nfunc (s BFDState) String() string {\n\tswitch s {\n\tdefault:\n\t\treturn \"Unknown\"\n\tcase BFDStateAdminDown:\n\t\treturn \"Admin Down\"\n\tcase BFDStateDown:\n\t\treturn \"Down\"\n\tcase BFDStateInit:\n\t\treturn \"Init\"\n\tcase BFDStateUp:\n\t\treturn \"Up\"\n\t}\n}\n\n// BFDDetectMultiplier represents the negotiated transmit interval,\n// multiplied by this value, provides the Detection Time for the\n// receiving system in Asynchronous mode.\ntype BFDDetectMultiplier uint8\n\n// BFDDiscriminator is a unique, nonzero discriminator value used\n// to demultiplex multiple BFD sessions between the same pair of systems.\ntype BFDDiscriminator uint32\n\n// BFDTimeInterval represents a time interval in microseconds\ntype BFDTimeInterval uint32\n\n// BFDAuthType represents the authentication used in the BFD session\ntype BFDAuthType uint8\n\n// constants that define the BFDAuthType\nconst (\n\tBFDAuthTypeNone                BFDAuthType = 0 // No Auth\n\tBFDAuthTypePassword            BFDAuthType = 1 // Simple Password\n\tBFDAuthTypeKeyedMD5            BFDAuthType = 2 // Keyed MD5\n\tBFDAuthTypeMeticulousKeyedMD5  BFDAuthType = 3 // Meticulous Keyed MD5\n\tBFDAuthTypeKeyedSHA1           BFDAuthType = 4 // Keyed SHA1\n\tBFDAuthTypeMeticulousKeyedSHA1 BFDAuthType = 5 // Meticulous Keyed SHA1\n)\n\n// String returns a string version of BFDAuthType\nfunc (at BFDAuthType) String() string {\n\tswitch at {\n\tdefault:\n\t\treturn \"Unknown\"\n\tcase BFDAuthTypeNone:\n\t\treturn \"No Authentication\"\n\tcase BFDAuthTypePassword:\n\t\treturn \"Simple Password\"\n\tcase BFDAuthTypeKeyedMD5:\n\t\treturn \"Keyed MD5\"\n\tcase BFDAuthTypeMeticulousKeyedMD5:\n\t\treturn \"Meticulous Keyed MD5\"\n\tcase BFDAuthTypeKeyedSHA1:\n\t\treturn \"Keyed SHA1\"\n\tcase BFDAuthTypeMeticulousKeyedSHA1:\n\t\treturn \"Meticulous Keyed SHA1\"\n\t}\n}\n\n// BFDAuthKeyID represents the authentication key ID in use for\n// this packet.  This allows multiple keys to be active simultaneously.\ntype BFDAuthKeyID uint8\n\n// BFDAuthSequenceNumber represents the sequence number for this packet.\n// For Keyed Authentication, this value is incremented occasionally.  For\n// Meticulous Keyed Authentication, this value is incremented for each\n// successive packet transmitted for a session.  This provides protection\n// against replay attacks.\ntype BFDAuthSequenceNumber uint32\n\n// BFDAuthData represents the authentication key or digest\ntype BFDAuthData []byte\n\n// BFDAuthHeader represents authentication data used in the BFD session\ntype BFDAuthHeader struct {\n\tAuthType       BFDAuthType\n\tKeyID          BFDAuthKeyID\n\tSequenceNumber BFDAuthSequenceNumber\n\tData           BFDAuthData\n}\n\n// Length returns the data length of the BFDAuthHeader based on the\n// authentication type\nfunc (h *BFDAuthHeader) Length() int {\n\tswitch h.AuthType {\n\tcase BFDAuthTypePassword:\n\t\treturn 3 + len(h.Data)\n\tcase BFDAuthTypeKeyedMD5, BFDAuthTypeMeticulousKeyedMD5:\n\t\treturn 8 + len(h.Data)\n\tcase BFDAuthTypeKeyedSHA1, BFDAuthTypeMeticulousKeyedSHA1:\n\t\treturn 8 + len(h.Data)\n\tdefault:\n\t\treturn 0\n\t}\n}\n\n// BFD represents a BFD control message packet whose payload contains\n// the control information required to for a BFD session.\n//\n// References\n// ----------\n//\n// Wikipedia's BFD entry:\n//     https://en.wikipedia.org/wiki/Bidirectional_Forwarding_Detection\n//     This is the best place to get an overview of BFD.\n//\n// RFC 5880 \"Bidirectional Forwarding Detection (BFD)\" (2010)\n//     https://tools.ietf.org/html/rfc5880\n//     This is the original BFD specification.\n//\n// RFC 5881 \"Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop)\" (2010)\n//     https://tools.ietf.org/html/rfc5881\n//     Describes the use of the Bidirectional Forwarding Detection (BFD)\n//     protocol over IPv4 and IPv6 for single IP hops.\ntype BFD struct {\n\tBaseLayer // Stores the packet bytes and payload bytes.\n\n\tVersion                   BFDVersion          // Version of the BFD protocol.\n\tDiagnostic                BFDDiagnostic       // Diagnostic code for last state change\n\tState                     BFDState            // Current state\n\tPoll                      bool                // Requesting verification\n\tFinal                     bool                // Responding to a received BFD Control packet that had the Poll (P) bit set.\n\tControlPlaneIndependent   bool                // BFD implementation does not share fate with its control plane\n\tAuthPresent               bool                // Authentication Section is present and the session is to be authenticated\n\tDemand                    bool                // Demand mode is active\n\tMultipoint                bool                // For future point-to-multipoint extensions. Must always be zero\n\tDetectMultiplier          BFDDetectMultiplier // Detection time multiplier\n\tMyDiscriminator           BFDDiscriminator    // A unique, nonzero discriminator value\n\tYourDiscriminator         BFDDiscriminator    // discriminator received from the remote system.\n\tDesiredMinTxInterval      BFDTimeInterval     // Minimum interval, in microseconds,  the local system would like to use when transmitting BFD Control packets\n\tRequiredMinRxInterval     BFDTimeInterval     // Minimum interval, in microseconds, between received BFD Control packets that this system is capable of supporting\n\tRequiredMinEchoRxInterval BFDTimeInterval     // Minimum interval, in microseconds, between received BFD Echo packets that this system is capable of supporting\n\tAuthHeader                *BFDAuthHeader      // Authentication data, variable length.\n}\n\n// Length returns the data length of a BFD Control message which\n// changes based on the presence and type of authentication\n// contained in the message\nfunc (d *BFD) Length() int {\n\tif d.AuthPresent && (d.AuthHeader != nil) {\n\t\treturn bfdMinimumRecordSizeInBytes + d.AuthHeader.Length()\n\t}\n\n\treturn bfdMinimumRecordSizeInBytes\n}\n\n// LayerType returns the layer type of the BFD object, which is LayerTypeBFD.\nfunc (d *BFD) LayerType() gopacket.LayerType {\n\treturn LayerTypeBFD\n}\n\n// decodeBFD analyses a byte slice and attempts to decode it as a BFD\n// control packet\n//\n// If it succeeds, it loads p with information about the packet and returns nil.\n// If it fails, it returns an error (non nil).\n//\n// This function is employed in layertypes.go to register the BFD layer.\nfunc decodeBFD(data []byte, p gopacket.PacketBuilder) error {\n\n\t// Attempt to decode the byte slice.\n\td := &BFD{}\n\terr := d.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// If the decoding worked, add the layer to the packet and set it\n\t// as the application layer too, if there isn't already one.\n\tp.AddLayer(d)\n\tp.SetApplicationLayer(d)\n\n\treturn nil\n}\n\n// DecodeFromBytes analyses a byte slice and attempts to decode it as a BFD\n// control packet.\n//\n// Upon succeeds, it loads the BFD object with information about the packet\n// and returns nil.\n// Upon failure, it returns an error (non nil).\nfunc (d *BFD) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\n\t// If the data block is too short to be a BFD record, then return an error.\n\tif len(data) < bfdMinimumRecordSizeInBytes {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"BFD packet too short\")\n\t}\n\n\tpLen := uint8(data[3])\n\tif len(data) != int(pLen) {\n\t\treturn errors.New(\"BFD packet length does not match\")\n\t}\n\n\t// BFD type embeds type BaseLayer which contains two fields:\n\t//    Contents is supposed to contain the bytes of the data at this level.\n\t//    Payload is supposed to contain the payload of this level.\n\t// Here we set the baselayer to be the bytes of the BFD record.\n\td.BaseLayer = BaseLayer{Contents: data[:len(data)]}\n\n\t// Extract the fields from the block of bytes.\n\t// To make sense of this, refer to the packet diagram\n\t// above and the section on endian conventions.\n\n\t// The first few fields are all packed into the first 32 bits. Unpack them.\n\td.Version = BFDVersion(((data[0] & 0xE0) >> 5))\n\td.Diagnostic = BFDDiagnostic(data[0] & 0x1F)\n\tdata = data[1:]\n\n\td.State = BFDState((data[0] & 0xC0) >> 6)\n\td.Poll = data[0]&0x20 != 0\n\td.Final = data[0]&0x10 != 0\n\td.ControlPlaneIndependent = data[0]&0x08 != 0\n\td.AuthPresent = data[0]&0x04 != 0\n\td.Demand = data[0]&0x02 != 0\n\td.Multipoint = data[0]&0x01 != 0\n\tdata = data[1:]\n\n\tdata, d.DetectMultiplier = data[1:], BFDDetectMultiplier(data[0])\n\tdata, _ = data[1:], uint8(data[0]) // Consume length\n\n\t// The remaining fields can just be copied in big endian order.\n\tdata, d.MyDiscriminator = data[4:], BFDDiscriminator(binary.BigEndian.Uint32(data[:4]))\n\tdata, d.YourDiscriminator = data[4:], BFDDiscriminator(binary.BigEndian.Uint32(data[:4]))\n\tdata, d.DesiredMinTxInterval = data[4:], BFDTimeInterval(binary.BigEndian.Uint32(data[:4]))\n\tdata, d.RequiredMinRxInterval = data[4:], BFDTimeInterval(binary.BigEndian.Uint32(data[:4]))\n\tdata, d.RequiredMinEchoRxInterval = data[4:], BFDTimeInterval(binary.BigEndian.Uint32(data[:4]))\n\n\tif d.AuthPresent && (len(data) > 2) {\n\t\td.AuthHeader = &BFDAuthHeader{}\n\t\tdata, d.AuthHeader.AuthType = data[1:], BFDAuthType(data[0])\n\t\tdata, _ = data[1:], uint8(data[0]) // Consume length\n\t\tdata, d.AuthHeader.KeyID = data[1:], BFDAuthKeyID(data[0])\n\n\t\tswitch d.AuthHeader.AuthType {\n\t\tcase BFDAuthTypePassword:\n\t\t\td.AuthHeader.Data = BFDAuthData(data)\n\t\tcase BFDAuthTypeKeyedMD5, BFDAuthTypeMeticulousKeyedMD5:\n\t\t\t// Skipped reserved byte\n\t\t\tdata, d.AuthHeader.SequenceNumber = data[5:], BFDAuthSequenceNumber(binary.BigEndian.Uint32(data[1:5]))\n\t\t\td.AuthHeader.Data = BFDAuthData(data)\n\t\tcase BFDAuthTypeKeyedSHA1, BFDAuthTypeMeticulousKeyedSHA1:\n\t\t\t// Skipped reserved byte\n\t\t\tdata, d.AuthHeader.SequenceNumber = data[5:], BFDAuthSequenceNumber(binary.BigEndian.Uint32(data[1:5]))\n\t\t\td.AuthHeader.Data = BFDAuthData(data)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (d *BFD) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tdata, err := b.PrependBytes(bfdMinimumRecordSizeInBytes)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Pack the first few fields into the first 32 bits.\n\tdata[0] = byte(byte(d.Version<<5) | byte(d.Diagnostic))\n\th := uint8(0)\n\th |= (uint8(d.State) << 6)\n\th |= (uint8(bool2uint8(d.Poll)) << 5)\n\th |= (uint8(bool2uint8(d.Final)) << 4)\n\th |= (uint8(bool2uint8(d.ControlPlaneIndependent)) << 3)\n\th |= (uint8(bool2uint8(d.AuthPresent)) << 2)\n\th |= (uint8(bool2uint8(d.Demand)) << 1)\n\th |= uint8(bool2uint8(d.Multipoint))\n\tdata[1] = byte(h)\n\tdata[2] = byte(d.DetectMultiplier)\n\tdata[3] = byte(d.Length())\n\n\t// The remaining fields can just be copied in big endian order.\n\tbinary.BigEndian.PutUint32(data[4:], uint32(d.MyDiscriminator))\n\tbinary.BigEndian.PutUint32(data[8:], uint32(d.YourDiscriminator))\n\tbinary.BigEndian.PutUint32(data[12:], uint32(d.DesiredMinTxInterval))\n\tbinary.BigEndian.PutUint32(data[16:], uint32(d.RequiredMinRxInterval))\n\tbinary.BigEndian.PutUint32(data[20:], uint32(d.RequiredMinEchoRxInterval))\n\n\tif d.AuthPresent && (d.AuthHeader != nil) {\n\t\tauth, err := b.AppendBytes(int(d.AuthHeader.Length()))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tauth[0] = byte(d.AuthHeader.AuthType)\n\t\tauth[1] = byte(d.AuthHeader.Length())\n\t\tauth[2] = byte(d.AuthHeader.KeyID)\n\n\t\tswitch d.AuthHeader.AuthType {\n\t\tcase BFDAuthTypePassword:\n\t\t\tcopy(auth[3:], d.AuthHeader.Data)\n\t\tcase BFDAuthTypeKeyedMD5, BFDAuthTypeMeticulousKeyedMD5:\n\t\t\tauth[3] = byte(0)\n\t\t\tbinary.BigEndian.PutUint32(auth[4:], uint32(d.AuthHeader.SequenceNumber))\n\t\t\tcopy(auth[8:], d.AuthHeader.Data)\n\t\tcase BFDAuthTypeKeyedSHA1, BFDAuthTypeMeticulousKeyedSHA1:\n\t\t\tauth[3] = byte(0)\n\t\t\tbinary.BigEndian.PutUint32(auth[4:], uint32(d.AuthHeader.SequenceNumber))\n\t\t\tcopy(auth[8:], d.AuthHeader.Data)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// CanDecode returns a set of layers that BFD objects can decode.\n// As BFD objects can only decide the BFD layer, we can return just that layer.\n// Apparently a single layer type implements LayerClass.\nfunc (d *BFD) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeBFD\n}\n\n// NextLayerType specifies the next layer that GoPacket should attempt to\n// analyse after this (BFD) layer. As BFD packets do not contain any payload\n// bytes, there are no further layers to analyse.\nfunc (d *BFD) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypeZero\n}\n\n// Payload returns an empty byte slice as BFD packets do not carry a payload\nfunc (d *BFD) Payload() []byte {\n\treturn nil\n}\n\n// bool2uint8 converts a bool to uint8\nfunc bool2uint8(b bool) uint8 {\n\tif b {\n\t\treturn 1\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "layers/bfd_test.go",
    "content": "// Copyright 2017 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n//\n//******************************************************************************\n\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n\t\"reflect\"\n\t\"testing\"\n)\n\n//******************************************************************************\n\n// checkBFD() uses the bfd.go code to analyse the packet bytes as an BFD Control\n// packet and generate an BFD object. It then compares the generated BFD object\n// with the one provided and throws an error if there is any difference.\n// The desc argument is output with any failure message to identify the test.\nfunc checkBFD(desc string, t *testing.T, packetBytes []byte, pExpectedBFD *BFD) {\n\n\t// Analyse the packet bytes, yielding a new packet object p.\n\tp := gopacket.NewPacket(packetBytes, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Errorf(\"Failed to decode packet %s: %v\", desc, p.ErrorLayer().Error())\n\t}\n\n\t// Ensure that the packet analysis yielded the correct set of layers:\n\t//    Link Layer        = Ethernet.\n\t//    Network Layer     = IPv4.\n\t//    Transport Layer   = UDP.\n\t//    Application Layer = BFD.\n\tcheckLayers(p, []gopacket.LayerType{\n\t\tLayerTypeEthernet,\n\t\tLayerTypeIPv4,\n\t\tLayerTypeUDP,\n\t\tLayerTypeBFD}, t)\n\n\t// Select the Application (BFD) layer.\n\tpResultBFD, ok := p.ApplicationLayer().(*BFD)\n\tif !ok {\n\t\tt.Error(\"No BFD layer type found in packet in \" + desc + \".\")\n\t}\n\n\t// Compare the generated BFD object with the expected BFD object.\n\tif !reflect.DeepEqual(pResultBFD, pExpectedBFD) {\n\t\tt.Errorf(\"BFD packet processing failed for packet \"+desc+\n\t\t\t\":\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", pResultBFD, pExpectedBFD)\n\t}\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{}\n\terr := pResultBFD.SerializeTo(buf, opts)\n\tif err != nil {\n\t\tt.Error(err)\n\t}\n\tif !reflect.DeepEqual(pResultBFD.Contents, buf.Bytes()) {\n\t\tt.Errorf(\"BFD packet serialization failed for packet \"+desc+\n\t\t\t\":\\ngot  :\\n%+v\\n\\nwant :\\n%+v\\n\\n\", buf.Bytes(), pResultBFD.Contents)\n\t}\n\n}\n\nfunc TestBFDNoAuth(t *testing.T) {\n\t// This test packet is based off of the first BFD packet in the BFD sample capture\n\t// pcap file bfd-raw-auth-simple.pcap on the Wireshark sample captures page:\n\t//\n\t//    https://wiki.wireshark.org/SampleCaptures\n\t//    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-simple.pcap\n\t//\n\t// Changed to remove the authentication header, and adjust all of the lengths\n\tvar testPacketBFD = []byte{\n\t\t0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00,\n\t\t0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x58, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00,\n\t\t0x00, 0x01, 0xc0, 0x00, 0x0e, 0xc8, 0x00, 0x20, 0x72, 0x31, 0x20, 0x40, 0x05, 0x18, 0x00, 0x00,\n\t\t0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00,\n\t\t0x00, 0x00, 0x01, 0x4e, 0x0a, 0x90, 0x40,\n\t}\n\n\t// Assemble the BFD object that we expect to emerge from this test.\n\tpExpectedBFD := &BFD{\n\t\tBaseLayer: BaseLayer{\n\t\t\tContents: []byte{\n\t\t\t\t0x20, 0x40, 0x05, 0x18, 0x00, 0x00, 0x00, 0x01,\n\t\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40,\n\t\t\t\t0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00,\n\t\t\t},\n\t\t\tPayload: nil,\n\t\t},\n\t\tVersion:                   1,\n\t\tDiagnostic:                BFDDiagnosticNone,\n\t\tState:                     BFDStateDown,\n\t\tPoll:                      false,\n\t\tFinal:                     false,\n\t\tControlPlaneIndependent:   false,\n\t\tAuthPresent:               false,\n\t\tDemand:                    false,\n\t\tMultipoint:                false,\n\t\tDetectMultiplier:          5,\n\t\tMyDiscriminator:           1,\n\t\tYourDiscriminator:         0,\n\t\tDesiredMinTxInterval:      1000000,\n\t\tRequiredMinRxInterval:     1000000,\n\t\tRequiredMinEchoRxInterval: 0,\n\t\tAuthHeader:                nil,\n\t}\n\n\tcheckBFD(\"testNoAuth\", t, testPacketBFD, pExpectedBFD)\n}\n\n//******************************************************************************\n\nfunc TestBFDAuthTypePassword(t *testing.T) {\n\n\t// This test packet is the first BFD packet in the BFD sample capture\n\t// pcap file bfd-raw-auth-simple.pcap on the Wireshark sample captures page:\n\t//\n\t//    https://wiki.wireshark.org/SampleCaptures\n\t//    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-simple.pcap\n\tvar testPacketBFD = []byte{\n\t\t0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00,\n\t\t0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x58, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00,\n\t\t0x00, 0x01, 0xc0, 0x00, 0x0e, 0xc8, 0x00, 0x29, 0x72, 0x31, 0x20, 0x44, 0x05, 0x21, 0x00, 0x00,\n\t\t0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00,\n\t\t0x00, 0x00, 0x01, 0x09, 0x02, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4e, 0x0a, 0x90, 0x40,\n\t}\n\n\t// Assemble the BFD object that we expect to emerge from this test.\n\tpExpectedBFD := &BFD{\n\t\tBaseLayer: BaseLayer{\n\t\t\tContents: []byte{\n\t\t\t\t0x20, 0x44, 0x05, 0x21, 0x00, 0x00, 0x00, 0x01,\n\t\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40,\n\t\t\t\t0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00,\n\t\t\t\t0x01, 0x09, 0x02, 0x73, 0x65, 0x63, 0x72, 0x65,\n\t\t\t\t0x74,\n\t\t\t},\n\t\t\tPayload: nil,\n\t\t},\n\t\tVersion:                   1,\n\t\tDiagnostic:                BFDDiagnosticNone,\n\t\tState:                     BFDStateDown,\n\t\tPoll:                      false,\n\t\tFinal:                     false,\n\t\tControlPlaneIndependent:   false,\n\t\tAuthPresent:               true,\n\t\tDemand:                    false,\n\t\tMultipoint:                false,\n\t\tDetectMultiplier:          5,\n\t\tMyDiscriminator:           1,\n\t\tYourDiscriminator:         0,\n\t\tDesiredMinTxInterval:      1000000,\n\t\tRequiredMinRxInterval:     1000000,\n\t\tRequiredMinEchoRxInterval: 0,\n\t\tAuthHeader: &BFDAuthHeader{\n\t\t\tAuthType:       BFDAuthTypePassword,\n\t\t\tKeyID:          2,\n\t\t\tSequenceNumber: 0,\n\t\t\tData:           []byte{'s', 'e', 'c', 'r', 'e', 't'},\n\t\t},\n\t}\n\n\tcheckBFD(\"testBFDAuthTypePassword\", t, testPacketBFD, pExpectedBFD)\n}\n\n//******************************************************************************\n\nfunc TestBFDAuthTypeKeyedMD5(t *testing.T) {\n\n\t// This test packet is the first BFD packet in the BFD sample capture\n\t// pcap file bfd-raw-auth-md5.pcap on the Wireshark sample captures page:\n\t//\n\t//    https://wiki.wireshark.org/SampleCaptures\n\t//    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-md5.pcap\n\tvar testPacketBFD = []byte{\n\t\t0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00,\n\t\t0x00, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x48, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00,\n\t\t0x00, 0x01, 0x04, 0x00, 0x0e, 0xc8, 0x00, 0x38, 0x6a, 0xcc, 0x20, 0x44, 0x05, 0x30, 0x00, 0x00,\n\t\t0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00,\n\t\t0x00, 0x00, 0x02, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,\n\t\t0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x3c, 0xc3, 0xf8, 0x21,\n\t}\n\n\t// Assemble the BFD object that we expect to emerge from this test.\n\tpExpectedBFD := &BFD{\n\t\tBaseLayer: BaseLayer{\n\t\t\tContents: []byte{\n\t\t\t\t0x20, 0x44, 0x05, 0x30, 0x00, 0x00, 0x00, 0x01,\n\t\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40,\n\t\t\t\t0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00,\n\t\t\t\t0x02, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05,\n\t\t\t\t0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,\n\t\t\t\t0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,\n\t\t\t},\n\t\t\tPayload: nil,\n\t\t},\n\t\tVersion:                   1,\n\t\tDiagnostic:                BFDDiagnosticNone,\n\t\tState:                     BFDStateDown,\n\t\tPoll:                      false,\n\t\tFinal:                     false,\n\t\tControlPlaneIndependent:   false,\n\t\tAuthPresent:               true,\n\t\tDemand:                    false,\n\t\tMultipoint:                false,\n\t\tDetectMultiplier:          5,\n\t\tMyDiscriminator:           1,\n\t\tYourDiscriminator:         0,\n\t\tDesiredMinTxInterval:      1000000,\n\t\tRequiredMinRxInterval:     1000000,\n\t\tRequiredMinEchoRxInterval: 0,\n\t\tAuthHeader: &BFDAuthHeader{\n\t\t\tAuthType:       BFDAuthTypeKeyedMD5,\n\t\t\tKeyID:          2,\n\t\t\tSequenceNumber: 5,\n\t\t\tData: []byte{\n\t\t\t\t0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,\n\t\t\t\t0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,\n\t\t\t},\n\t\t},\n\t}\n\n\tcheckBFD(\"testBFDAuthTypeKeyedMD5\", t, testPacketBFD, pExpectedBFD)\n}\n\n//******************************************************************************\n\nfunc TestBFDAuthTypeMeticulousKeyedSHA1(t *testing.T) {\n\n\t// This test packet is the first BFD packet in the BFD sample capture\n\t// pcap file bfd-raw-auth-sha1.pcap on the Wireshark sample captures page:\n\t//\n\t//    https://wiki.wireshark.org/SampleCaptures\n\t//    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-sha1.pcap\n\tvar testPacketBFD = []byte{\n\t\t0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00,\n\t\t0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x45, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00,\n\t\t0x00, 0x01, 0x04, 0x00, 0x0e, 0xc8, 0x00, 0x3c, 0x37, 0x8a, 0x20, 0x44, 0x05, 0x34, 0x00, 0x00,\n\t\t0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00,\n\t\t0x00, 0x00, 0x05, 0x1c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,\n\t\t0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0xea, 0x6d,\n\t\t0x1f, 0x21,\n\t}\n\n\t// Assemble the BFD object that we expect to emerge from this test.\n\tpExpectedBFD := &BFD{\n\t\tBaseLayer: BaseLayer{\n\t\t\tContents: []byte{\n\t\t\t\t0x20, 0x44, 0x05, 0x34, 0x00, 0x00, 0x00, 0x01,\n\t\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40,\n\t\t\t\t0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00,\n\t\t\t\t0x05, 0x1c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05,\n\t\t\t\t0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,\n\t\t\t\t0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,\n\t\t\t\t0x17, 0x18, 0x19, 0x1a,\n\t\t\t},\n\t\t\tPayload: nil,\n\t\t},\n\t\tVersion:                   1,\n\t\tDiagnostic:                BFDDiagnosticNone,\n\t\tState:                     BFDStateDown,\n\t\tPoll:                      false,\n\t\tFinal:                     false,\n\t\tControlPlaneIndependent:   false,\n\t\tAuthPresent:               true,\n\t\tDemand:                    false,\n\t\tMultipoint:                false,\n\t\tDetectMultiplier:          5,\n\t\tMyDiscriminator:           1,\n\t\tYourDiscriminator:         0,\n\t\tDesiredMinTxInterval:      1000000,\n\t\tRequiredMinRxInterval:     1000000,\n\t\tRequiredMinEchoRxInterval: 0,\n\t\tAuthHeader: &BFDAuthHeader{\n\t\t\tAuthType:       BFDAuthTypeMeticulousKeyedSHA1,\n\t\t\tKeyID:          2,\n\t\t\tSequenceNumber: 5,\n\t\t\tData: []byte{\n\t\t\t\t0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,\n\t\t\t\t0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,\n\t\t\t\t0x17, 0x18, 0x19, 0x1a,\n\t\t\t},\n\t\t},\n\t}\n\n\tcheckBFD(\"TestBFDAuthTypeMeticulousKeyedSHA1\", t, testPacketBFD, pExpectedBFD)\n}\n"
  },
  {
    "path": "layers/bitfield.go",
    "content": "// Copyright 2021 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license that can be found\n// in the LICENSE file in the root of the source tree.\n\npackage layers\n\ntype bitfield [1024]uint64\n\n// set sets bit i in bitfield b to 1.\nfunc (b *bitfield) set(i uint16) {\n\tb[i>>6] |= (1 << (i & 0x3f))\n}\n\n// has reports whether bit i is set to 1 in bitfield b.\nfunc (b *bitfield) has(i uint16) bool {\n\treturn b[i>>6]&(1<<(i&0x3f)) != 0\n}\n"
  },
  {
    "path": "layers/bitfield_test.go",
    "content": "package layers\n\nimport \"testing\"\n\nfunc TestBitfield(t *testing.T) {\n\tvar b bitfield\n\n\tconst uint16Max = ^uint16(0)\n\n\tfor i := uint16(0); i < uint16Max; i++ {\n\t\tif b.has(i) {\n\t\t\tt.Errorf(\"b.has(%d) expected false, got true\", i)\n\t\t}\n\t}\n\n\tb.set(0)\n\tif !b.has(0) {\n\t\tt.Error(\"b.has(0) expected true, got false\")\n\t}\n\n\tfor i := uint16(1); i < uint16Max; i++ {\n\t\tif b.has(i) {\n\t\t\tt.Errorf(\"b.has(%d) expected false, got true\", i)\n\t\t}\n\t}\n}\n\nfunc TestBitfieldStressTest(t *testing.T) {\n\tfor i := 0; i < 7; i++ {\n\t\tvar b bitfield\n\t\tfor j := i; j < 64*1024; j += 7 {\n\t\t\tb.set(uint16(j))\n\t\t}\n\t\tfor j := 0; j < 64&1024; j++ {\n\t\t\twant := j%7 == i\n\t\t\tif got := b.has(uint16(j)); got != want {\n\t\t\t\tt.Errorf(\"Test %d bit %d: got %v want %v\", i, j, got, want)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "layers/cdp.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// Enum types courtesy of...\n//   http://search.cpan.org/~mchapman/Net-CDP-0.09/lib/Net/CDP.pm\n//   https://code.google.com/p/ladvd/\n//   http://anonsvn.wireshark.org/viewvc/releases/wireshark-1.8.6/epan/dissectors/packet-cdp.c\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// CDPTLVType is the type of each TLV value in a CiscoDiscovery packet.\ntype CDPTLVType uint16\n\n// CDPTLVType values.\nconst (\n\tCDPTLVDevID              CDPTLVType = 0x0001\n\tCDPTLVAddress            CDPTLVType = 0x0002\n\tCDPTLVPortID             CDPTLVType = 0x0003\n\tCDPTLVCapabilities       CDPTLVType = 0x0004\n\tCDPTLVVersion            CDPTLVType = 0x0005\n\tCDPTLVPlatform           CDPTLVType = 0x0006\n\tCDPTLVIPPrefix           CDPTLVType = 0x0007\n\tCDPTLVHello              CDPTLVType = 0x0008\n\tCDPTLVVTPDomain          CDPTLVType = 0x0009\n\tCDPTLVNativeVLAN         CDPTLVType = 0x000a\n\tCDPTLVFullDuplex         CDPTLVType = 0x000b\n\tCDPTLVVLANReply          CDPTLVType = 0x000e\n\tCDPTLVVLANQuery          CDPTLVType = 0x000f\n\tCDPTLVPower              CDPTLVType = 0x0010\n\tCDPTLVMTU                CDPTLVType = 0x0011\n\tCDPTLVExtendedTrust      CDPTLVType = 0x0012\n\tCDPTLVUntrustedCOS       CDPTLVType = 0x0013\n\tCDPTLVSysName            CDPTLVType = 0x0014\n\tCDPTLVSysOID             CDPTLVType = 0x0015\n\tCDPTLVMgmtAddresses      CDPTLVType = 0x0016\n\tCDPTLVLocation           CDPTLVType = 0x0017\n\tCDPTLVExternalPortID     CDPTLVType = 0x0018\n\tCDPTLVPowerRequested     CDPTLVType = 0x0019\n\tCDPTLVPowerAvailable     CDPTLVType = 0x001a\n\tCDPTLVPortUnidirectional CDPTLVType = 0x001b\n\tCDPTLVEnergyWise         CDPTLVType = 0x001d\n\tCDPTLVSparePairPOE       CDPTLVType = 0x001f\n)\n\n// CiscoDiscoveryValue is a TLV value inside a CiscoDiscovery packet layer.\ntype CiscoDiscoveryValue struct {\n\tType   CDPTLVType\n\tLength uint16\n\tValue  []byte\n}\n\n// CiscoDiscovery is a packet layer containing the Cisco Discovery Protocol.\n// See http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#31885\ntype CiscoDiscovery struct {\n\tBaseLayer\n\tVersion  byte\n\tTTL      byte\n\tChecksum uint16\n\tValues   []CiscoDiscoveryValue\n}\n\n// CDPCapability is the set of capabilities advertised by a CDP device.\ntype CDPCapability uint32\n\n// CDPCapability values.\nconst (\n\tCDPCapMaskRouter     CDPCapability = 0x0001\n\tCDPCapMaskTBBridge   CDPCapability = 0x0002\n\tCDPCapMaskSPBridge   CDPCapability = 0x0004\n\tCDPCapMaskSwitch     CDPCapability = 0x0008\n\tCDPCapMaskHost       CDPCapability = 0x0010\n\tCDPCapMaskIGMPFilter CDPCapability = 0x0020\n\tCDPCapMaskRepeater   CDPCapability = 0x0040\n\tCDPCapMaskPhone      CDPCapability = 0x0080\n\tCDPCapMaskRemote     CDPCapability = 0x0100\n)\n\n// CDPCapabilities represents the capabilities of a device\ntype CDPCapabilities struct {\n\tL3Router        bool\n\tTBBridge        bool\n\tSPBridge        bool\n\tL2Switch        bool\n\tIsHost          bool\n\tIGMPFilter      bool\n\tL1Repeater      bool\n\tIsPhone         bool\n\tRemotelyManaged bool\n}\n\n// CDP Power-over-Ethernet values.\nconst (\n\tCDPPoEFourWire  byte = 0x01\n\tCDPPoEPDArch    byte = 0x02\n\tCDPPoEPDRequest byte = 0x04\n\tCDPPoEPSE       byte = 0x08\n)\n\n// CDPSparePairPoE provides information on PoE.\ntype CDPSparePairPoE struct {\n\tPSEFourWire  bool // Supported / Not supported\n\tPDArchShared bool // Shared / Independent\n\tPDRequestOn  bool // On / Off\n\tPSEOn        bool // On / Off\n}\n\n// CDPVLANDialogue encapsulates a VLAN Query/Reply\ntype CDPVLANDialogue struct {\n\tID   uint8\n\tVLAN uint16\n}\n\n// CDPPowerDialogue encapsulates a Power Query/Reply\ntype CDPPowerDialogue struct {\n\tID     uint16\n\tMgmtID uint16\n\tValues []uint32\n}\n\n// CDPLocation provides location information for a CDP device.\ntype CDPLocation struct {\n\tType     uint8 // Undocumented\n\tLocation string\n}\n\n// CDPHello is a Cisco Hello message (undocumented, hence the \"Unknown\" fields)\ntype CDPHello struct {\n\tOUI              []byte\n\tProtocolID       uint16\n\tClusterMaster    net.IP\n\tUnknown1         net.IP\n\tVersion          byte\n\tSubVersion       byte\n\tStatus           byte\n\tUnknown2         byte\n\tClusterCommander net.HardwareAddr\n\tSwitchMAC        net.HardwareAddr\n\tUnknown3         byte\n\tManagementVLAN   uint16\n}\n\n// CDPEnergyWiseSubtype is used within CDP to define TLV values.\ntype CDPEnergyWiseSubtype uint32\n\n// CDPEnergyWiseSubtype values.\nconst (\n\tCDPEnergyWiseRole    CDPEnergyWiseSubtype = 0x00000007\n\tCDPEnergyWiseDomain  CDPEnergyWiseSubtype = 0x00000008\n\tCDPEnergyWiseName    CDPEnergyWiseSubtype = 0x00000009\n\tCDPEnergyWiseReplyTo CDPEnergyWiseSubtype = 0x00000017\n)\n\n// CDPEnergyWise is used by CDP to monitor and control power usage.\ntype CDPEnergyWise struct {\n\tEncryptedData  []byte\n\tUnknown1       uint32\n\tSequenceNumber uint32\n\tModelNumber    string\n\tUnknown2       uint16\n\tHardwareID     string\n\tSerialNum      string\n\tUnknown3       []byte\n\tRole           string\n\tDomain         string\n\tName           string\n\tReplyUnknown1  []byte\n\tReplyPort      []byte\n\tReplyAddress   []byte\n\tReplyUnknown2  []byte\n\tReplyUnknown3  []byte\n}\n\n// CiscoDiscoveryInfo represents the decoded details for a set of CiscoDiscoveryValues\ntype CiscoDiscoveryInfo struct {\n\tBaseLayer\n\tCDPHello\n\tDeviceID         string\n\tAddresses        []net.IP\n\tPortID           string\n\tCapabilities     CDPCapabilities\n\tVersion          string\n\tPlatform         string\n\tIPPrefixes       []net.IPNet\n\tVTPDomain        string\n\tNativeVLAN       uint16\n\tFullDuplex       bool\n\tVLANReply        CDPVLANDialogue\n\tVLANQuery        CDPVLANDialogue\n\tPowerConsumption uint16\n\tMTU              uint32\n\tExtendedTrust    uint8\n\tUntrustedCOS     uint8\n\tSysName          string\n\tSysOID           string\n\tMgmtAddresses    []net.IP\n\tLocation         CDPLocation\n\tPowerRequest     CDPPowerDialogue\n\tPowerAvailable   CDPPowerDialogue\n\tSparePairPoe     CDPSparePairPoE\n\tEnergyWise       CDPEnergyWise\n\tUnknown          []CiscoDiscoveryValue\n}\n\n// LayerType returns gopacket.LayerTypeCiscoDiscovery.\nfunc (c *CiscoDiscovery) LayerType() gopacket.LayerType {\n\treturn LayerTypeCiscoDiscovery\n}\n\nfunc decodeCiscoDiscovery(data []byte, p gopacket.PacketBuilder) error {\n\tc := &CiscoDiscovery{\n\t\tVersion:  data[0],\n\t\tTTL:      data[1],\n\t\tChecksum: binary.BigEndian.Uint16(data[2:4]),\n\t}\n\tif c.Version != 1 && c.Version != 2 {\n\t\treturn fmt.Errorf(\"Invalid CiscoDiscovery version number %d\", c.Version)\n\t}\n\tvar err error\n\tc.Values, err = decodeCiscoDiscoveryTLVs(data[4:], p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tc.Contents = data[0:4]\n\tc.Payload = data[4:]\n\tp.AddLayer(c)\n\treturn p.NextDecoder(gopacket.DecodeFunc(decodeCiscoDiscoveryInfo))\n}\n\n// LayerType returns gopacket.LayerTypeCiscoDiscoveryInfo.\nfunc (c *CiscoDiscoveryInfo) LayerType() gopacket.LayerType {\n\treturn LayerTypeCiscoDiscoveryInfo\n}\n\nfunc decodeCiscoDiscoveryTLVs(data []byte, p gopacket.PacketBuilder) (values []CiscoDiscoveryValue, err error) {\n\tfor len(data) > 0 {\n\t\tif len(data) < 4 {\n\t\t\tp.SetTruncated()\n\t\t\treturn nil, errors.New(\"CDP TLV < 4 bytes\")\n\t\t}\n\t\tval := CiscoDiscoveryValue{\n\t\t\tType:   CDPTLVType(binary.BigEndian.Uint16(data[:2])),\n\t\t\tLength: binary.BigEndian.Uint16(data[2:4]),\n\t\t}\n\t\tif val.Length < 4 {\n\t\t\terr = fmt.Errorf(\"Invalid CiscoDiscovery value length %d\", val.Length)\n\t\t\tbreak\n\t\t} else if len(data) < int(val.Length) {\n\t\t\tp.SetTruncated()\n\t\t\treturn nil, fmt.Errorf(\"CDP TLV < length %d\", val.Length)\n\t\t}\n\t\tval.Value = data[4:val.Length]\n\t\tvalues = append(values, val)\n\t\tdata = data[val.Length:]\n\t}\n\treturn\n}\n\nfunc decodeCiscoDiscoveryInfo(data []byte, p gopacket.PacketBuilder) error {\n\tvar err error\n\tinfo := &CiscoDiscoveryInfo{BaseLayer: BaseLayer{Contents: data}}\n\tp.AddLayer(info)\n\tvalues, err := decodeCiscoDiscoveryTLVs(data, p)\n\tif err != nil { // Unlikely, as parent decode will fail, but better safe...\n\t\treturn err\n\t}\n\tfor _, val := range values {\n\t\tswitch val.Type {\n\t\tcase CDPTLVDevID:\n\t\t\tinfo.DeviceID = string(val.Value)\n\t\tcase CDPTLVAddress:\n\t\t\tif err = checkCDPTLVLen(val, 4); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.Addresses, err = decodeAddresses(val.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase CDPTLVPortID:\n\t\t\tinfo.PortID = string(val.Value)\n\t\tcase CDPTLVCapabilities:\n\t\t\tif err = checkCDPTLVLen(val, 4); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tval := CDPCapability(binary.BigEndian.Uint32(val.Value[0:4]))\n\t\t\tinfo.Capabilities.L3Router = (val&CDPCapMaskRouter > 0)\n\t\t\tinfo.Capabilities.TBBridge = (val&CDPCapMaskTBBridge > 0)\n\t\t\tinfo.Capabilities.SPBridge = (val&CDPCapMaskSPBridge > 0)\n\t\t\tinfo.Capabilities.L2Switch = (val&CDPCapMaskSwitch > 0)\n\t\t\tinfo.Capabilities.IsHost = (val&CDPCapMaskHost > 0)\n\t\t\tinfo.Capabilities.IGMPFilter = (val&CDPCapMaskIGMPFilter > 0)\n\t\t\tinfo.Capabilities.L1Repeater = (val&CDPCapMaskRepeater > 0)\n\t\t\tinfo.Capabilities.IsPhone = (val&CDPCapMaskPhone > 0)\n\t\t\tinfo.Capabilities.RemotelyManaged = (val&CDPCapMaskRemote > 0)\n\t\tcase CDPTLVVersion:\n\t\t\tinfo.Version = string(val.Value)\n\t\tcase CDPTLVPlatform:\n\t\t\tinfo.Platform = string(val.Value)\n\t\tcase CDPTLVIPPrefix:\n\t\t\tv := val.Value\n\t\t\tl := len(v)\n\t\t\tif l%5 == 0 && l >= 5 {\n\t\t\t\tfor len(v) > 0 {\n\t\t\t\t\t_, ipnet, _ := net.ParseCIDR(fmt.Sprintf(\"%d.%d.%d.%d/%d\", v[0], v[1], v[2], v[3], v[4]))\n\t\t\t\t\tinfo.IPPrefixes = append(info.IPPrefixes, *ipnet)\n\t\t\t\t\tv = v[5:]\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn fmt.Errorf(\"Invalid TLV %v length %d\", val.Type, len(val.Value))\n\t\t\t}\n\t\tcase CDPTLVHello:\n\t\t\tif err = checkCDPTLVLen(val, 32); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tv := val.Value\n\t\t\tinfo.CDPHello.OUI = v[0:3]\n\t\t\tinfo.CDPHello.ProtocolID = binary.BigEndian.Uint16(v[3:5])\n\t\t\tinfo.CDPHello.ClusterMaster = v[5:9]\n\t\t\tinfo.CDPHello.Unknown1 = v[9:13]\n\t\t\tinfo.CDPHello.Version = v[13]\n\t\t\tinfo.CDPHello.SubVersion = v[14]\n\t\t\tinfo.CDPHello.Status = v[15]\n\t\t\tinfo.CDPHello.Unknown2 = v[16]\n\t\t\tinfo.CDPHello.ClusterCommander = v[17:23]\n\t\t\tinfo.CDPHello.SwitchMAC = v[23:29]\n\t\t\tinfo.CDPHello.Unknown3 = v[29]\n\t\t\tinfo.CDPHello.ManagementVLAN = binary.BigEndian.Uint16(v[30:32])\n\t\tcase CDPTLVVTPDomain:\n\t\t\tinfo.VTPDomain = string(val.Value)\n\t\tcase CDPTLVNativeVLAN:\n\t\t\tif err = checkCDPTLVLen(val, 2); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.NativeVLAN = binary.BigEndian.Uint16(val.Value[0:2])\n\t\tcase CDPTLVFullDuplex:\n\t\t\tif err = checkCDPTLVLen(val, 1); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.FullDuplex = (val.Value[0] == 1)\n\t\tcase CDPTLVVLANReply:\n\t\t\tif err = checkCDPTLVLen(val, 3); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.VLANReply.ID = uint8(val.Value[0])\n\t\t\tinfo.VLANReply.VLAN = binary.BigEndian.Uint16(val.Value[1:3])\n\t\tcase CDPTLVVLANQuery:\n\t\t\tif err = checkCDPTLVLen(val, 3); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.VLANQuery.ID = uint8(val.Value[0])\n\t\t\tinfo.VLANQuery.VLAN = binary.BigEndian.Uint16(val.Value[1:3])\n\t\tcase CDPTLVPower:\n\t\t\tif err = checkCDPTLVLen(val, 2); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.PowerConsumption = binary.BigEndian.Uint16(val.Value[0:2])\n\t\tcase CDPTLVMTU:\n\t\t\tif err = checkCDPTLVLen(val, 4); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.MTU = binary.BigEndian.Uint32(val.Value[0:4])\n\t\tcase CDPTLVExtendedTrust:\n\t\t\tif err = checkCDPTLVLen(val, 1); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.ExtendedTrust = uint8(val.Value[0])\n\t\tcase CDPTLVUntrustedCOS:\n\t\t\tif err = checkCDPTLVLen(val, 1); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.UntrustedCOS = uint8(val.Value[0])\n\t\tcase CDPTLVSysName:\n\t\t\tinfo.SysName = string(val.Value)\n\t\tcase CDPTLVSysOID:\n\t\t\tinfo.SysOID = string(val.Value)\n\t\tcase CDPTLVMgmtAddresses:\n\t\t\tif err = checkCDPTLVLen(val, 4); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.MgmtAddresses, err = decodeAddresses(val.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase CDPTLVLocation:\n\t\t\tif err = checkCDPTLVLen(val, 2); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.Location.Type = uint8(val.Value[0])\n\t\t\tinfo.Location.Location = string(val.Value[1:])\n\n\t\t\t//\t\tcase CDPTLVLExternalPortID:\n\t\t\t//\t\t\tUndocumented\n\t\tcase CDPTLVPowerRequested:\n\t\t\tif err = checkCDPTLVLen(val, 4); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.PowerRequest.ID = binary.BigEndian.Uint16(val.Value[0:2])\n\t\t\tinfo.PowerRequest.MgmtID = binary.BigEndian.Uint16(val.Value[2:4])\n\t\t\tfor n := 4; n < len(val.Value); n += 4 {\n\t\t\t\tinfo.PowerRequest.Values = append(info.PowerRequest.Values, binary.BigEndian.Uint32(val.Value[n:n+4]))\n\t\t\t}\n\t\tcase CDPTLVPowerAvailable:\n\t\t\tif err = checkCDPTLVLen(val, 4); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.PowerAvailable.ID = binary.BigEndian.Uint16(val.Value[0:2])\n\t\t\tinfo.PowerAvailable.MgmtID = binary.BigEndian.Uint16(val.Value[2:4])\n\t\t\tfor n := 4; n < len(val.Value); n += 4 {\n\t\t\t\tinfo.PowerAvailable.Values = append(info.PowerAvailable.Values, binary.BigEndian.Uint32(val.Value[n:n+4]))\n\t\t\t}\n\t\t\t//\t\tcase CDPTLVPortUnidirectional\n\t\t\t//\t\t\tUndocumented\n\t\tcase CDPTLVEnergyWise:\n\t\t\tif err = checkCDPTLVLen(val, 72); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.EnergyWise.EncryptedData = val.Value[0:20]\n\t\t\tinfo.EnergyWise.Unknown1 = binary.BigEndian.Uint32(val.Value[20:24])\n\t\t\tinfo.EnergyWise.SequenceNumber = binary.BigEndian.Uint32(val.Value[24:28])\n\t\t\tinfo.EnergyWise.ModelNumber = string(val.Value[28:44])\n\t\t\tinfo.EnergyWise.Unknown2 = binary.BigEndian.Uint16(val.Value[44:46])\n\t\t\tinfo.EnergyWise.HardwareID = string(val.Value[46:49])\n\t\t\tinfo.EnergyWise.SerialNum = string(val.Value[49:60])\n\t\t\tinfo.EnergyWise.Unknown3 = val.Value[60:68]\n\t\t\ttlvLen := binary.BigEndian.Uint16(val.Value[68:70])\n\t\t\ttlvNum := binary.BigEndian.Uint16(val.Value[70:72])\n\t\t\tdata := val.Value[72:]\n\t\t\tif len(data) < int(tlvLen) {\n\t\t\t\treturn fmt.Errorf(\"Invalid TLV length %d vs %d\", tlvLen, len(data))\n\t\t\t}\n\t\t\tnumSeen := 0\n\t\t\tfor len(data) > 8 {\n\t\t\t\tnumSeen++\n\t\t\t\tif numSeen > int(tlvNum) { // Too many TLV's ?\n\t\t\t\t\treturn fmt.Errorf(\"Too many TLV's - wanted %d, saw %d\", tlvNum, numSeen)\n\t\t\t\t}\n\t\t\t\ttType := CDPEnergyWiseSubtype(binary.BigEndian.Uint32(data[0:4]))\n\t\t\t\ttLen := int(binary.BigEndian.Uint32(data[4:8]))\n\t\t\t\tif tLen > len(data)-8 {\n\t\t\t\t\treturn fmt.Errorf(\"Invalid TLV length %d vs %d\", tLen, len(data)-8)\n\t\t\t\t}\n\t\t\t\tdata = data[8:]\n\t\t\t\tswitch tType {\n\t\t\t\tcase CDPEnergyWiseRole:\n\t\t\t\t\tinfo.EnergyWise.Role = string(data[:])\n\t\t\t\tcase CDPEnergyWiseDomain:\n\t\t\t\t\tinfo.EnergyWise.Domain = string(data[:])\n\t\t\t\tcase CDPEnergyWiseName:\n\t\t\t\t\tinfo.EnergyWise.Name = string(data[:])\n\t\t\t\tcase CDPEnergyWiseReplyTo:\n\t\t\t\t\tif len(data) >= 18 {\n\t\t\t\t\t\tinfo.EnergyWise.ReplyUnknown1 = data[0:2]\n\t\t\t\t\t\tinfo.EnergyWise.ReplyPort = data[2:4]\n\t\t\t\t\t\tinfo.EnergyWise.ReplyAddress = data[4:8]\n\t\t\t\t\t\tinfo.EnergyWise.ReplyUnknown2 = data[8:10]\n\t\t\t\t\t\tinfo.EnergyWise.ReplyUnknown3 = data[10:14]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdata = data[tLen:]\n\t\t\t}\n\t\tcase CDPTLVSparePairPOE:\n\t\t\tif err = checkCDPTLVLen(val, 1); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tv := val.Value[0]\n\t\t\tinfo.SparePairPoe.PSEFourWire = (v&CDPPoEFourWire > 0)\n\t\t\tinfo.SparePairPoe.PDArchShared = (v&CDPPoEPDArch > 0)\n\t\t\tinfo.SparePairPoe.PDRequestOn = (v&CDPPoEPDRequest > 0)\n\t\t\tinfo.SparePairPoe.PSEOn = (v&CDPPoEPSE > 0)\n\t\tdefault:\n\t\t\tinfo.Unknown = append(info.Unknown, val)\n\t\t}\n\t}\n\treturn nil\n}\n\n// CDP Protocol Types\nconst (\n\tCDPProtocolTypeNLPID byte = 1\n\tCDPProtocolType802_2 byte = 2\n)\n\n// CDPAddressType is used to define TLV values within CDP addresses.\ntype CDPAddressType uint64\n\n// CDP Address types.\nconst (\n\tCDPAddressTypeCLNP      CDPAddressType = 0x81\n\tCDPAddressTypeIPV4      CDPAddressType = 0xcc\n\tCDPAddressTypeIPV6      CDPAddressType = 0xaaaa030000000800\n\tCDPAddressTypeDECNET    CDPAddressType = 0xaaaa030000006003\n\tCDPAddressTypeAPPLETALK CDPAddressType = 0xaaaa03000000809b\n\tCDPAddressTypeIPX       CDPAddressType = 0xaaaa030000008137\n\tCDPAddressTypeVINES     CDPAddressType = 0xaaaa0300000080c4\n\tCDPAddressTypeXNS       CDPAddressType = 0xaaaa030000000600\n\tCDPAddressTypeAPOLLO    CDPAddressType = 0xaaaa030000008019\n)\n\nfunc decodeAddresses(v []byte) (addresses []net.IP, err error) {\n\tnumaddr := int(binary.BigEndian.Uint32(v[0:4]))\n\tif numaddr < 1 {\n\t\treturn nil, fmt.Errorf(\"Invalid Address TLV number %d\", numaddr)\n\t}\n\tv = v[4:]\n\tif len(v) < numaddr*8 {\n\t\treturn nil, fmt.Errorf(\"Invalid Address TLV length %d\", len(v))\n\t}\n\tfor i := 0; i < numaddr; i++ {\n\t\tprottype := v[0]\n\t\tif prottype != CDPProtocolTypeNLPID && prottype != CDPProtocolType802_2 { // invalid protocol type\n\t\t\treturn nil, fmt.Errorf(\"Invalid Address Protocol %d\", prottype)\n\t\t}\n\t\tprotlen := int(v[1])\n\t\tif (prottype == CDPProtocolTypeNLPID && protlen != 1) ||\n\t\t\t(prottype == CDPProtocolType802_2 && protlen != 3 && protlen != 8) { // invalid length\n\t\t\treturn nil, fmt.Errorf(\"Invalid Address Protocol length %d\", protlen)\n\t\t}\n\t\tplen := make([]byte, 8)\n\t\tcopy(plen[8-protlen:], v[2:2+protlen])\n\t\tprotocol := CDPAddressType(binary.BigEndian.Uint64(plen))\n\t\tv = v[2+protlen:]\n\t\taddrlen := binary.BigEndian.Uint16(v[0:2])\n\t\tab := v[2 : 2+addrlen]\n\t\tif protocol == CDPAddressTypeIPV4 && addrlen == 4 {\n\t\t\taddresses = append(addresses, net.IPv4(ab[0], ab[1], ab[2], ab[3]))\n\t\t} else if protocol == CDPAddressTypeIPV6 && addrlen == 16 {\n\t\t\taddresses = append(addresses, net.IP(ab))\n\t\t} else {\n\t\t\t// only handle IPV4 & IPV6 for now\n\t\t}\n\t\tv = v[2+addrlen:]\n\t\tif len(v) < 8 {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn\n}\n\nfunc (t CDPTLVType) String() (s string) {\n\tswitch t {\n\tcase CDPTLVDevID:\n\t\ts = \"Device ID\"\n\tcase CDPTLVAddress:\n\t\ts = \"Addresses\"\n\tcase CDPTLVPortID:\n\t\ts = \"Port ID\"\n\tcase CDPTLVCapabilities:\n\t\ts = \"Capabilities\"\n\tcase CDPTLVVersion:\n\t\ts = \"Software Version\"\n\tcase CDPTLVPlatform:\n\t\ts = \"Platform\"\n\tcase CDPTLVIPPrefix:\n\t\ts = \"IP Prefix\"\n\tcase CDPTLVHello:\n\t\ts = \"Protocol Hello\"\n\tcase CDPTLVVTPDomain:\n\t\ts = \"VTP Management Domain\"\n\tcase CDPTLVNativeVLAN:\n\t\ts = \"Native VLAN\"\n\tcase CDPTLVFullDuplex:\n\t\ts = \"Full Duplex\"\n\tcase CDPTLVVLANReply:\n\t\ts = \"VoIP VLAN Reply\"\n\tcase CDPTLVVLANQuery:\n\t\ts = \"VLANQuery\"\n\tcase CDPTLVPower:\n\t\ts = \"Power consumption\"\n\tcase CDPTLVMTU:\n\t\ts = \"MTU\"\n\tcase CDPTLVExtendedTrust:\n\t\ts = \"Extended Trust Bitmap\"\n\tcase CDPTLVUntrustedCOS:\n\t\ts = \"Untrusted Port CoS\"\n\tcase CDPTLVSysName:\n\t\ts = \"System Name\"\n\tcase CDPTLVSysOID:\n\t\ts = \"System OID\"\n\tcase CDPTLVMgmtAddresses:\n\t\ts = \"Management Addresses\"\n\tcase CDPTLVLocation:\n\t\ts = \"Location\"\n\tcase CDPTLVExternalPortID:\n\t\ts = \"External Port ID\"\n\tcase CDPTLVPowerRequested:\n\t\ts = \"Power Requested\"\n\tcase CDPTLVPowerAvailable:\n\t\ts = \"Power Available\"\n\tcase CDPTLVPortUnidirectional:\n\t\ts = \"Port Unidirectional\"\n\tcase CDPTLVEnergyWise:\n\t\ts = \"Energy Wise\"\n\tcase CDPTLVSparePairPOE:\n\t\ts = \"Spare Pair POE\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (a CDPAddressType) String() (s string) {\n\tswitch a {\n\tcase CDPAddressTypeCLNP:\n\t\ts = \"Connectionless Network Protocol\"\n\tcase CDPAddressTypeIPV4:\n\t\ts = \"IPv4\"\n\tcase CDPAddressTypeIPV6:\n\t\ts = \"IPv6\"\n\tcase CDPAddressTypeDECNET:\n\t\ts = \"DECnet Phase IV\"\n\tcase CDPAddressTypeAPPLETALK:\n\t\ts = \"Apple Talk\"\n\tcase CDPAddressTypeIPX:\n\t\ts = \"Novell IPX\"\n\tcase CDPAddressTypeVINES:\n\t\ts = \"Banyan VINES\"\n\tcase CDPAddressTypeXNS:\n\t\ts = \"Xerox Network Systems\"\n\tcase CDPAddressTypeAPOLLO:\n\t\ts = \"Apollo\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t CDPEnergyWiseSubtype) String() (s string) {\n\tswitch t {\n\tcase CDPEnergyWiseRole:\n\t\ts = \"Role\"\n\tcase CDPEnergyWiseDomain:\n\t\ts = \"Domain\"\n\tcase CDPEnergyWiseName:\n\t\ts = \"Name\"\n\tcase CDPEnergyWiseReplyTo:\n\t\ts = \"ReplyTo\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc checkCDPTLVLen(v CiscoDiscoveryValue, l int) (err error) {\n\tif len(v.Value) < l {\n\t\terr = fmt.Errorf(\"Invalid TLV %v length %d\", v.Type, len(v.Value))\n\t}\n\treturn\n}\n"
  },
  {
    "path": "layers/ctp.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"github.com/google/gopacket\"\n)\n\n// EthernetCTPFunction is the function code used by the EthernetCTP protocol to identify each\n// EthernetCTP layer.\ntype EthernetCTPFunction uint16\n\n// EthernetCTPFunction values.\nconst (\n\tEthernetCTPFunctionReply       EthernetCTPFunction = 1\n\tEthernetCTPFunctionForwardData EthernetCTPFunction = 2\n)\n\n// EthernetCTP implements the EthernetCTP protocol, see http://www.mit.edu/people/jhawk/ctp.html.\n// We split EthernetCTP up into the top-level EthernetCTP layer, followed by zero or more\n// EthernetCTPForwardData layers, followed by a final EthernetCTPReply layer.\ntype EthernetCTP struct {\n\tBaseLayer\n\tSkipCount uint16\n}\n\n// LayerType returns gopacket.LayerTypeEthernetCTP.\nfunc (c *EthernetCTP) LayerType() gopacket.LayerType {\n\treturn LayerTypeEthernetCTP\n}\n\n// EthernetCTPForwardData is the ForwardData layer inside EthernetCTP.  See EthernetCTP's docs for more\n// details.\ntype EthernetCTPForwardData struct {\n\tBaseLayer\n\tFunction       EthernetCTPFunction\n\tForwardAddress []byte\n}\n\n// LayerType returns gopacket.LayerTypeEthernetCTPForwardData.\nfunc (c *EthernetCTPForwardData) LayerType() gopacket.LayerType {\n\treturn LayerTypeEthernetCTPForwardData\n}\n\n// ForwardEndpoint returns the EthernetCTPForwardData ForwardAddress as an endpoint.\nfunc (c *EthernetCTPForwardData) ForwardEndpoint() gopacket.Endpoint {\n\treturn gopacket.NewEndpoint(EndpointMAC, c.ForwardAddress)\n}\n\n// EthernetCTPReply is the Reply layer inside EthernetCTP.  See EthernetCTP's docs for more details.\ntype EthernetCTPReply struct {\n\tBaseLayer\n\tFunction      EthernetCTPFunction\n\tReceiptNumber uint16\n\tData          []byte\n}\n\n// LayerType returns gopacket.LayerTypeEthernetCTPReply.\nfunc (c *EthernetCTPReply) LayerType() gopacket.LayerType {\n\treturn LayerTypeEthernetCTPReply\n}\n\n// Payload returns the EthernetCTP reply's Data bytes.\nfunc (c *EthernetCTPReply) Payload() []byte { return c.Data }\n\nfunc decodeEthernetCTP(data []byte, p gopacket.PacketBuilder) error {\n\tc := &EthernetCTP{\n\t\tSkipCount: binary.LittleEndian.Uint16(data[:2]),\n\t\tBaseLayer: BaseLayer{data[:2], data[2:]},\n\t}\n\tif c.SkipCount%2 != 0 {\n\t\treturn fmt.Errorf(\"EthernetCTP skip count is odd: %d\", c.SkipCount)\n\t}\n\tp.AddLayer(c)\n\treturn p.NextDecoder(gopacket.DecodeFunc(decodeEthernetCTPFromFunctionType))\n}\n\n// decodeEthernetCTPFromFunctionType reads in the first 2 bytes to determine the EthernetCTP\n// layer type to decode next, then decodes based on that.\nfunc decodeEthernetCTPFromFunctionType(data []byte, p gopacket.PacketBuilder) error {\n\tfunction := EthernetCTPFunction(binary.LittleEndian.Uint16(data[:2]))\n\tswitch function {\n\tcase EthernetCTPFunctionReply:\n\t\treply := &EthernetCTPReply{\n\t\t\tFunction:      function,\n\t\t\tReceiptNumber: binary.LittleEndian.Uint16(data[2:4]),\n\t\t\tData:          data[4:],\n\t\t\tBaseLayer:     BaseLayer{data, nil},\n\t\t}\n\t\tp.AddLayer(reply)\n\t\tp.SetApplicationLayer(reply)\n\t\treturn nil\n\tcase EthernetCTPFunctionForwardData:\n\t\tforward := &EthernetCTPForwardData{\n\t\t\tFunction:       function,\n\t\t\tForwardAddress: data[2:8],\n\t\t\tBaseLayer:      BaseLayer{data[:8], data[8:]},\n\t\t}\n\t\tp.AddLayer(forward)\n\t\treturn p.NextDecoder(gopacket.DecodeFunc(decodeEthernetCTPFromFunctionType))\n\t}\n\treturn fmt.Errorf(\"Unknown EthernetCTP function type %v\", function)\n}\n"
  },
  {
    "path": "layers/decode_test.go",
    "content": "// Copyright 2012, Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"net\"\n\t\"reflect\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/bytediff\"\n)\n\nvar testSimpleTCPPacket = []byte{\n\t0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x20, 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49,\n\t0x08, 0x00, 0x45, 0x00, 0x01, 0xa4, 0x39, 0xdf, 0x40, 0x00, 0x40, 0x06,\n\t0x55, 0x5a, 0xac, 0x11, 0x51, 0x49, 0xad, 0xde, 0xfe, 0xe1, 0xc5, 0xf7,\n\t0x00, 0x50, 0xc5, 0x7e, 0x0e, 0x48, 0x49, 0x07, 0x42, 0x32, 0x80, 0x18,\n\t0x00, 0x73, 0x9a, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x03, 0x77,\n\t0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20,\n\t0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f,\n\t0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x69, 0x73, 0x68,\n\t0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,\n\t0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x2d, 0x61,\n\t0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41,\n\t0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c,\n\t0x61, 0x2f, 0x35, 0x2e, 0x30, 0x20, 0x28, 0x58, 0x31, 0x31, 0x3b, 0x20,\n\t0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34,\n\t0x29, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x57, 0x65, 0x62, 0x4b, 0x69,\n\t0x74, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, 0x20, 0x28, 0x4b, 0x48, 0x54,\n\t0x4d, 0x4c, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x47, 0x65, 0x63,\n\t0x6b, 0x6f, 0x29, 0x20, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x2f, 0x31,\n\t0x35, 0x2e, 0x30, 0x2e, 0x38, 0x37, 0x34, 0x2e, 0x31, 0x32, 0x31, 0x20,\n\t0x53, 0x61, 0x66, 0x61, 0x72, 0x69, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32,\n\t0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x74, 0x65,\n\t0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c,\n\t0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x68, 0x74, 0x6d,\n\t0x6c, 0x2b, 0x78, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,\n\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x3b, 0x71, 0x3d,\n\t0x30, 0x2e, 0x39, 0x2c, 0x2a, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e,\n\t0x38, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e,\n\t0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x67, 0x7a, 0x69, 0x70,\n\t0x2c, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, 0x63,\n\t0x68, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61,\n\t0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x2d, 0x55,\n\t0x53, 0x2c, 0x65, 0x6e, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x38, 0x0d, 0x0a,\n\t0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x73,\n\t0x65, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39,\n\t0x2d, 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x3b, 0x71, 0x3d, 0x30,\n\t0x2e, 0x37, 0x2c, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x33, 0x0d, 0x0a,\n\t0x0d, 0x0a,\n}\n\nvar testDecodeOptions = gopacket.DecodeOptions{\n\tSkipDecodeRecovery: true,\n}\n\n// Benchmarks for actual gopacket code\n\nfunc BenchmarkLayerClassSliceContains(b *testing.B) {\n\tlc := gopacket.NewLayerClassSlice([]gopacket.LayerType{LayerTypeTCP, LayerTypeEthernet})\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = lc.Contains(LayerTypeTCP)\n\t}\n}\n\nfunc BenchmarkLayerClassMapContains(b *testing.B) {\n\tlc := gopacket.NewLayerClassMap([]gopacket.LayerType{LayerTypeTCP, LayerTypeEthernet})\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = lc.Contains(LayerTypeTCP)\n\t}\n}\n\nfunc BenchmarkLazyNoCopyEthLayer(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layer(LayerTypeEthernet)\n\t}\n}\n\nfunc BenchmarkLazyNoCopyIPLayer(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layer(LayerTypeIPv4)\n\t}\n}\n\nfunc BenchmarkLazyNoCopyTCPLayer(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layer(LayerTypeTCP)\n\t}\n}\n\nfunc BenchmarkLazyNoCopyAllLayers(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layers()\n\t}\n}\n\nfunc BenchmarkDefault(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.Default)\n\t}\n}\n\nfunc getSerializeLayers() []gopacket.SerializableLayer {\n\tp := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)\n\tslayers := []gopacket.SerializableLayer{}\n\tfor _, l := range p.Layers() {\n\t\tslayers = append(slayers, l.(gopacket.SerializableLayer))\n\t}\n\tp.Layer(LayerTypeTCP).(*TCP).SetNetworkLayerForChecksum(\n\t\tp.NetworkLayer())\n\treturn slayers\n}\n\nfunc BenchmarkSerializeTcpNoOptions(b *testing.B) {\n\tslayers := getSerializeLayers()\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{}\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.SerializeLayers(buf, opts, slayers...)\n\t}\n}\n\nfunc BenchmarkSerializeTcpFixLengths(b *testing.B) {\n\tslayers := getSerializeLayers()\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.SerializeLayers(buf, opts, slayers...)\n\t}\n}\n\nfunc BenchmarkSerializeTcpComputeChecksums(b *testing.B) {\n\tslayers := getSerializeLayers()\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{ComputeChecksums: true}\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.SerializeLayers(buf, opts, slayers...)\n\t}\n}\n\nfunc BenchmarkSerializeTcpFixLengthsComputeChecksums(b *testing.B) {\n\tslayers := getSerializeLayers()\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.SerializeLayers(buf, opts, slayers...)\n\t}\n}\n\nfunc BenchmarkLazy(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.Lazy)\n\t}\n}\n\nfunc BenchmarkNoCopy(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\nfunc BenchmarkLazyNoCopy(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true})\n\t}\n}\n\nfunc BenchmarkKnownStack(b *testing.B) {\n\tstack := []gopacket.DecodingLayer{&Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{}}\n\tnf := gopacket.NilDecodeFeedback\n\tfor i := 0; i < b.N; i++ {\n\t\tdata := testSimpleTCPPacket[:]\n\t\tfor _, d := range stack {\n\t\t\t_ = d.DecodeFromBytes(data, nf)\n\t\t\tdata = d.LayerPayload()\n\t\t}\n\t}\n}\n\nfunc BenchmarkDecodingLayerParserIgnorePanic(b *testing.B) {\n\tdecoded := make([]gopacket.LayerType, 0, 20)\n\tdlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{})\n\tdlp.IgnorePanic = true\n\tfor i := 0; i < b.N; i++ {\n\t\tdlp.DecodeLayers(testSimpleTCPPacket, &decoded)\n\t}\n}\n\nfunc BenchmarkDecodingLayerParserHandlePanic(b *testing.B) {\n\tdecoded := make([]gopacket.LayerType, 0, 20)\n\tdlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{})\n\tdlp.IgnorePanic = false\n\tfor i := 0; i < b.N; i++ {\n\t\tdlp.DecodeLayers(testSimpleTCPPacket, &decoded)\n\t}\n}\n\nfunc benchmarkDecodingLayerParser(b *testing.B, dlc gopacket.DecodingLayerContainer, ignorePanic bool) {\n\tdecoded := make([]gopacket.LayerType, 0, 20)\n\tdlc = dlc.Put(&Ethernet{})\n\tdlc = dlc.Put(&IPv4{})\n\tdlc = dlc.Put(&TCP{})\n\tdlc = dlc.Put(&gopacket.Payload{})\n\tdlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet)\n\tdlp.SetDecodingLayerContainer(dlc)\n\tdlp.IgnorePanic = ignorePanic\n\tfor i := 0; i < b.N; i++ {\n\t\tdlp.DecodeLayers(testSimpleTCPPacket, &decoded)\n\t}\n}\n\nfunc BenchmarkDecodingLayerParserSparseIgnorePanic(b *testing.B) {\n\tbenchmarkDecodingLayerParser(b, gopacket.DecodingLayerSparse(nil), true)\n}\n\nfunc BenchmarkDecodingLayerParserSparseHandlePanic(b *testing.B) {\n\tbenchmarkDecodingLayerParser(b, gopacket.DecodingLayerSparse(nil), false)\n}\n\nfunc BenchmarkDecodingLayerParserArrayIgnorePanic(b *testing.B) {\n\tbenchmarkDecodingLayerParser(b, gopacket.DecodingLayerArray(nil), true)\n}\n\nfunc BenchmarkDecodingLayerParserArrayHandlePanic(b *testing.B) {\n\tbenchmarkDecodingLayerParser(b, gopacket.DecodingLayerArray(nil), false)\n}\n\nfunc BenchmarkDecodingLayerParserMapIgnorePanic(b *testing.B) {\n\tbenchmarkDecodingLayerParser(b, gopacket.DecodingLayerMap(nil), true)\n}\n\nfunc BenchmarkDecodingLayerParserMapHandlePanic(b *testing.B) {\n\tbenchmarkDecodingLayerParser(b, gopacket.DecodingLayerMap(nil), false)\n}\n\nfunc benchmarkDecodingLayerContainer(b *testing.B, dlc gopacket.DecodingLayerContainer) {\n\tdecoded := make([]gopacket.LayerType, 0, 20)\n\tdlc = dlc.Put(&Ethernet{})\n\tdlc = dlc.Put(&IPv4{})\n\tdlc = dlc.Put(&TCP{})\n\tdlc = dlc.Put(&gopacket.Payload{})\n\tdf := gopacket.NewDecodingLayerParser(LayerTypeEthernet)\n\tdecoder := dlc.LayersDecoder(LayerTypeEthernet, df)\n\tfor i := 0; i < b.N; i++ {\n\t\tdecoder(testSimpleTCPPacket, &decoded)\n\t}\n}\n\nfunc BenchmarkDecodingLayerArray(b *testing.B) {\n\tbenchmarkDecodingLayerContainer(b, gopacket.DecodingLayerArray(nil))\n}\n\nfunc BenchmarkDecodingLayerMap(b *testing.B) {\n\tbenchmarkDecodingLayerContainer(b, gopacket.DecodingLayerMap(nil))\n}\n\nfunc BenchmarkDecodingLayerSparse(b *testing.B) {\n\tbenchmarkDecodingLayerContainer(b, gopacket.DecodingLayerSparse(nil))\n}\n\nfunc BenchmarkAlloc(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = &TCP{}\n\t}\n}\n\nfunc BenchmarkFlow(b *testing.B) {\n\tp := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true})\n\tnet := p.NetworkLayer()\n\tfor i := 0; i < b.N; i++ {\n\t\tnet.NetworkFlow()\n\t}\n}\n\nfunc BenchmarkEndpoints(b *testing.B) {\n\tp := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true})\n\tflow := p.NetworkLayer().NetworkFlow()\n\tfor i := 0; i < b.N; i++ {\n\t\tflow.Endpoints()\n\t}\n}\n\nfunc BenchmarkTCPLayerFromDecodedPacket(b *testing.B) {\n\tb.StopTimer()\n\tp := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)\n\tb.StartTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = p.Layer(LayerTypeTCP)\n\t}\n}\n\nfunc BenchmarkTCPLayerClassFromDecodedPacket(b *testing.B) {\n\tb.StopTimer()\n\tp := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)\n\tlc := gopacket.NewLayerClass([]gopacket.LayerType{LayerTypeTCP})\n\tb.StartTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = p.LayerClass(lc)\n\t}\n}\n\nfunc BenchmarkTCPTransportLayerFromDecodedPacket(b *testing.B) {\n\tb.StopTimer()\n\tp := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)\n\tb.StartTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = p.TransportLayer()\n\t}\n}\n\nfunc testDecoder([]byte, gopacket.PacketBuilder) error {\n\treturn nil\n}\n\nfunc BenchmarkDecodeFuncCallOverheadDirectCall(b *testing.B) {\n\tvar data []byte\n\tvar pb gopacket.PacketBuilder\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = testDecoder(data, pb)\n\t}\n}\n\nfunc BenchmarkDecodeFuncCallOverheadDecoderCall(b *testing.B) {\n\td := gopacket.DecodeFunc(testDecoder)\n\tvar data []byte\n\tvar pb gopacket.PacketBuilder\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = d.Decode(data, pb)\n\t}\n}\n\nfunc BenchmarkDecodeFuncCallOverheadArrayCall(b *testing.B) {\n\tEthernetTypeMetadata[1] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(testDecoder)}\n\td := EthernetType(1)\n\tvar data []byte\n\tvar pb gopacket.PacketBuilder\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = d.Decode(data, pb)\n\t}\n}\n\nfunc BenchmarkFmtVerboseString(b *testing.B) {\n\tb.StopTimer()\n\tp := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)\n\tb.StartTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = fmt.Sprintf(\"%#v\", p)\n\t}\n}\n\nfunc BenchmarkPacketString(b *testing.B) {\n\tb.StopTimer()\n\tp := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)\n\tb.StartTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = p.String()\n\t}\n}\n\nfunc BenchmarkPacketDumpString(b *testing.B) {\n\tb.StopTimer()\n\tp := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)\n\tb.StartTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = p.String()\n\t}\n}\n\n// TestFlowMapKey makes sure a flow and an endpoint can be used as map keys.\nfunc TestFlowMapKey(t *testing.T) {\n\t_ = map[gopacket.Flow]bool{}\n\t_ = map[gopacket.Endpoint]bool{}\n\t_ = map[[2]gopacket.Flow]bool{}\n}\n\nfunc TestDecodeSimpleTCPPacket(t *testing.T) {\n\tequal := func(desc, want string, got fmt.Stringer) {\n\t\tif want != got.String() {\n\t\t\tt.Errorf(\"%s: got %q want %q\", desc, got.String(), want)\n\t\t}\n\t}\n\tp := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true})\n\tif eth := p.LinkLayer(); eth == nil {\n\t\tt.Error(\"No ethernet layer found\")\n\t} else {\n\t\tequal(\"Eth Src\", \"bc:30:5b:e8:d3:49\", eth.LinkFlow().Src())\n\t\tequal(\"Eth Dst\", \"00:00:0c:9f:f0:20\", eth.LinkFlow().Dst())\n\t}\n\tif net := p.NetworkLayer(); net == nil {\n\t\tt.Error(\"No net layer found\")\n\t} else if ip, ok := net.(*IPv4); !ok {\n\t\tt.Error(\"Net layer is not IP layer\")\n\t} else {\n\t\tequal(\"IP Src\", \"172.17.81.73\", net.NetworkFlow().Src())\n\t\tequal(\"IP Dst\", \"173.222.254.225\", net.NetworkFlow().Dst())\n\t\twant := &IPv4{\n\t\t\tBaseLayer:  BaseLayer{testSimpleTCPPacket[14:34], testSimpleTCPPacket[34:]},\n\t\t\tVersion:    4,\n\t\t\tIHL:        5,\n\t\t\tTOS:        0,\n\t\t\tLength:     420,\n\t\t\tId:         14815,\n\t\t\tFlags:      0x02,\n\t\t\tFragOffset: 0,\n\t\t\tTTL:        64,\n\t\t\tProtocol:   6,\n\t\t\tChecksum:   0x555A,\n\t\t\tSrcIP:      []byte{172, 17, 81, 73},\n\t\t\tDstIP:      []byte{173, 222, 254, 225},\n\t\t}\n\t\tif !reflect.DeepEqual(ip, want) {\n\t\t\tt.Errorf(\"IP layer mismatch, \\ngot  %#v\\nwant %#v\\n\", ip, want)\n\t\t}\n\t}\n\tif trans := p.TransportLayer(); trans == nil {\n\t\tt.Error(\"No transport layer found\")\n\t} else if tcp, ok := trans.(*TCP); !ok {\n\t\tt.Error(\"Transport layer is not TCP layer\")\n\t} else {\n\t\tequal(\"TCP Src\", \"50679\", trans.TransportFlow().Src())\n\t\tequal(\"TCP Dst\", \"80\", trans.TransportFlow().Dst())\n\t\twant := &TCP{\n\t\t\tBaseLayer:  BaseLayer{testSimpleTCPPacket[34:66], testSimpleTCPPacket[66:]},\n\t\t\tSrcPort:    50679,\n\t\t\tDstPort:    80,\n\t\t\tSeq:        0xc57e0e48,\n\t\t\tAck:        0x49074232,\n\t\t\tDataOffset: 8,\n\t\t\tACK:        true,\n\t\t\tPSH:        true,\n\t\t\tWindow:     0x73,\n\t\t\tChecksum:   0x9a8f,\n\t\t\tUrgent:     0,\n\t\t\tsPort:      []byte{0xc5, 0xf7},\n\t\t\tdPort:      []byte{0x0, 0x50},\n\t\t\tOptions: []TCPOption{\n\t\t\t\tTCPOption{\n\t\t\t\t\tOptionType:   0x1,\n\t\t\t\t\tOptionLength: 0x1,\n\t\t\t\t},\n\t\t\t\tTCPOption{\n\t\t\t\t\tOptionType:   0x1,\n\t\t\t\t\tOptionLength: 0x1,\n\t\t\t\t},\n\t\t\t\tTCPOption{\n\t\t\t\t\tOptionType:   0x8,\n\t\t\t\t\tOptionLength: 0xa,\n\t\t\t\t\tOptionData:   []byte{0x3, 0x77, 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a},\n\t\t\t\t},\n\t\t\t},\n\t\t\topts: [4]TCPOption{\n\t\t\t\tTCPOption{\n\t\t\t\t\tOptionType:   0x1,\n\t\t\t\t\tOptionLength: 0x1,\n\t\t\t\t},\n\t\t\t\tTCPOption{\n\t\t\t\t\tOptionType:   0x1,\n\t\t\t\t\tOptionLength: 0x1,\n\t\t\t\t},\n\t\t\t\tTCPOption{\n\t\t\t\t\tOptionType:   0x8,\n\t\t\t\t\tOptionLength: 0xa,\n\t\t\t\t\tOptionData:   []byte{0x3, 0x77, 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a},\n\t\t\t\t},\n\t\t\t\tTCPOption{},\n\t\t\t},\n\t\t}\n\t\tif !reflect.DeepEqual(tcp, want) {\n\t\t\tt.Errorf(\"TCP layer mismatch\\ngot  %#v\\nwant %#v\", tcp, want)\n\t\t}\n\t}\n\tif payload, ok := p.Layer(gopacket.LayerTypePayload).(*gopacket.Payload); payload == nil || !ok {\n\t\tt.Error(\"No payload layer found\")\n\t} else {\n\t\tif string(payload.Payload()) != \"GET / HTTP/1.1\\r\\nHost: www.fish.com\\r\\nConnection: keep-alive\\r\\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2\\r\\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\\r\\nAccept-Encoding: gzip,deflate,sdch\\r\\nAccept-Language: en-US,en;q=0.8\\r\\nAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\\r\\n\\r\\n\" {\n\t\t\tt.Error(\"--- Payload STRING ---\\n\", string(payload.Payload()), \"\\n--- Payload BYTES ---\\n\", payload.Payload())\n\t\t}\n\t}\n\n\t// Test re-serialization.\n\ttestSerialization(t, p, testSimpleTCPPacket)\n}\n\ntype canSetNetLayer interface {\n\tSetNetworkLayerForChecksum(gopacket.NetworkLayer) error\n}\n\nfunc testSerialization(t *testing.T, p gopacket.Packet, data []byte) {\n\tfor _, opts := range []gopacket.SerializeOptions{\n\t\tgopacket.SerializeOptions{},\n\t\tgopacket.SerializeOptions{FixLengths: true},\n\t\tgopacket.SerializeOptions{ComputeChecksums: true},\n\t\tgopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true},\n\t} {\n\t\ttestSerializationWithOpts(t, p, data, opts)\n\t}\n}\n\nfunc testSerializationWithOpts(t *testing.T, p gopacket.Packet, data []byte, opts gopacket.SerializeOptions) {\n\t// Test re-serialization.\n\tslayers := []gopacket.SerializableLayer{}\n\tfor _, l := range p.Layers() {\n\t\tslayers = append(slayers, l.(gopacket.SerializableLayer))\n\t\tif h, ok := l.(canSetNetLayer); ok {\n\t\t\tif err := h.SetNetworkLayerForChecksum(p.NetworkLayer()); err != nil {\n\t\t\t\tt.Fatal(\"can't set network layer:\", err)\n\t\t\t}\n\t\t}\n\t}\n\tbuf := gopacket.NewSerializeBuffer()\n\terr := gopacket.SerializeLayers(buf, opts, slayers...)\n\tif err != nil {\n\t\tt.Errorf(\"unable to reserialize layers with opts %#v: %v\", opts, err)\n\t} else if !bytes.Equal(buf.Bytes(), data) {\n\t\tt.Errorf(\"serialization failure with opts %#v:\\n---want---\\n%v\\n---got---\\n%v\\nBASH-colorized diff, want->got:\\n%v\\n\\n---PACKET---\\n%v\",\n\t\t\topts, hex.Dump(data), hex.Dump(buf.Bytes()), bytediff.BashOutput.String(bytediff.Diff(data, buf.Bytes())), p)\n\t}\n}\n\n// Makes sure packet payload doesn't display the 6 trailing null of this packet\n// as part of the payload.  They're actually the ethernet trailer.\nfunc TestDecodeSmallTCPPacketHasEmptyPayload(t *testing.T) {\n\tsmallPacket := []byte{\n\t\t0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49, 0xb8, 0xac, 0x6f, 0x92, 0xd5, 0xbf,\n\t\t0x08, 0x00, 0x45, 0x00, 0x00, 0x28, 0x00, 0x00, 0x40, 0x00, 0x40, 0x06,\n\t\t0x3f, 0x9f, 0xac, 0x11, 0x51, 0xc5, 0xac, 0x11, 0x51, 0x49, 0x00, 0x63,\n\t\t0x9a, 0xef, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xc1, 0x27, 0x83, 0x50, 0x14,\n\t\t0x00, 0x00, 0xc3, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t}\n\tp := gopacket.NewPacket(smallPacket, LinkTypeEthernet, testDecodeOptions)\n\n\tif payload := p.Layer(gopacket.LayerTypePayload); payload != nil {\n\t\tt.Error(\"Payload found for empty TCP packet\")\n\t}\n\n\ttestSerialization(t, p, smallPacket)\n}\n\nfunc TestDecodeVLANPacket(t *testing.T) {\n\tp := gopacket.NewPacket(\n\t\t[]byte{\n\t\t\t0x00, 0x10, 0xdb, 0xff, 0x10, 0x00, 0x00, 0x15, 0x2c, 0x9d, 0xcc, 0x00,\n\t\t\t0x81, 0x00, 0x01, 0xf7, 0x08, 0x00, 0x45, 0x00, 0x00, 0x28, 0x29, 0x8d,\n\t\t\t0x40, 0x00, 0x7d, 0x06, 0x83, 0xa0, 0xac, 0x1b, 0xca, 0x8e, 0x45, 0x16,\n\t\t\t0x94, 0xe2, 0xd4, 0x0a, 0x00, 0x50, 0xdf, 0xab, 0x9c, 0xc6, 0xcd, 0x1e,\n\t\t\t0xe5, 0xd1, 0x50, 0x10, 0x01, 0x00, 0x5a, 0x74, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00,\n\t\t}, LinkTypeEthernet, testDecodeOptions)\n\tif err := p.ErrorLayer(); err != nil {\n\t\tt.Error(\"Error while parsing vlan packet:\", err)\n\t}\n\tif vlan := p.Layer(LayerTypeDot1Q); vlan == nil {\n\t\tt.Error(\"Didn't detect vlan\")\n\t} else if _, ok := vlan.(*Dot1Q); !ok {\n\t\tt.Error(\"LayerTypeDot1Q layer is not a Dot1Q object\")\n\t}\n\tfor i, l := range p.Layers() {\n\t\tt.Logf(\"Layer %d: %#v\", i, l)\n\t}\n\twant := []gopacket.LayerType{LayerTypeEthernet, LayerTypeDot1Q, LayerTypeIPv4, LayerTypeTCP}\n\tcheckLayers(p, want, t)\n}\n\nfunc TestDecodeSCTPPackets(t *testing.T) {\n\tsctpPackets := [][]byte{\n\t\t[]byte{ // INIT\n\t\t\t0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,\n\t\t\t0x00, 0x44, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x22, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,\n\t\t\t0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x19, 0x6b, 0x0b, 0x40, 0x01, 0x00,\n\t\t\t0x00, 0x24, 0xb6, 0x96, 0xb0, 0x9e, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xdb, 0x85,\n\t\t\t0x60, 0x23, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00,\n\t\t\t0x00, 0x04,\n\t\t}, []byte{ // INIT ACK\n\t\t\t0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20,\n\t\t\t0x01, 0x24, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xcd, 0x24, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d,\n\t\t\t0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0x4b, 0xab, 0x40, 0x9a, 0x02, 0x00,\n\t\t\t0x01, 0x04, 0x32, 0x80, 0xfb, 0x42, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x85, 0x98,\n\t\t\t0xb1, 0x26, 0x00, 0x07, 0x00, 0xe8, 0xd3, 0x08, 0xce, 0xe2, 0x52, 0x95, 0xcc, 0x09, 0xa1, 0x4c,\n\t\t\t0x6f, 0xa7, 0x9e, 0xba, 0x03, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xfb, 0x80, 0x32, 0x9e, 0xb0,\n\t\t\t0x96, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x46, 0xc2, 0x50, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x5e, 0x25, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x26, 0xb1,\n\t\t\t0x98, 0x85, 0x02, 0x00, 0x27, 0x0f, 0xac, 0x1d, 0x14, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x22,\n\t\t\t0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x24, 0x6a, 0x72, 0x5c, 0x1c, 0x3c, 0xaa,\n\t\t\t0x7a, 0xcd, 0xd3, 0x8f, 0x52, 0x78, 0x7c, 0x77, 0xfd, 0x46, 0xbd, 0x72, 0x82, 0xc1, 0x1f, 0x70,\n\t\t\t0x44, 0xcc, 0xc7, 0x9b, 0x9b, 0x7b, 0x13, 0x54, 0x3f, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0xb6, 0x96,\n\t\t\t0xb0, 0x9e, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x0c,\n\t\t\t0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00, 0x00, 0x04, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00,\n\t\t\t0x00, 0x04,\n\t\t}, []byte{ // COOKIE ECHO, DATA\n\t\t\t0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,\n\t\t\t0x01, 0x20, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc3, 0x46, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,\n\t\t\t0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0x01, 0xf9, 0xf3, 0xa9, 0x0a, 0x00,\n\t\t\t0x00, 0xe8, 0xd3, 0x08, 0xce, 0xe2, 0x52, 0x95, 0xcc, 0x09, 0xa1, 0x4c, 0x6f, 0xa7, 0x9e, 0xba,\n\t\t\t0x03, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xfb, 0x80, 0x32, 0x9e, 0xb0, 0x96, 0xb6, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x46, 0xc2, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x25,\n\t\t\t0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x26, 0xb1, 0x98, 0x85, 0x02, 0x00,\n\t\t\t0x27, 0x0f, 0xac, 0x1d, 0x14, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x22, 0x01, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x80, 0x02, 0x00, 0x24, 0x6a, 0x72, 0x5c, 0x1c, 0x3c, 0xaa, 0x7a, 0xcd, 0xd3, 0x8f,\n\t\t\t0x52, 0x78, 0x7c, 0x77, 0xfd, 0x46, 0xbd, 0x72, 0x82, 0xc1, 0x1f, 0x70, 0x44, 0xcc, 0xc7, 0x9b,\n\t\t\t0x9b, 0x7b, 0x13, 0x54, 0x3f, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0xb6, 0x96, 0xb0, 0x9e, 0x00, 0x01,\n\t\t\t0xc0, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x05,\n\t\t\t0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x16, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x6f, 0x21, 0x0a, 0x00, 0x00, 0x00,\n\t\t}, []byte{ // COOKIE ACK, SACK\n\t\t\t0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20,\n\t\t\t0x00, 0x34, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xce, 0x14, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d,\n\t\t\t0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0xed, 0x64, 0x30, 0x98, 0x0b, 0x00,\n\t\t\t0x00, 0x04, 0x03, 0x00, 0x00, 0x10, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x00, 0xf3, 0xfa, 0x00, 0x00,\n\t\t\t0x00, 0x00,\n\t\t}, []byte{ // DATA\n\t\t\t0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,\n\t\t\t0x00, 0x3c, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x2a, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,\n\t\t\t0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0xa1, 0xe3, 0xb2, 0x31, 0x00, 0x03,\n\t\t\t0x00, 0x19, 0xdb, 0x85, 0x60, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x62, 0x69,\n\t\t\t0x7a, 0x7a, 0x6c, 0x65, 0x21, 0x0a, 0x00, 0x00, 0x00, 0x00,\n\t\t}, []byte{ // SACK\n\t\t\t0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20,\n\t\t\t0x00, 0x30, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xce, 0x18, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d,\n\t\t\t0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0xfa, 0x49, 0x94, 0x3a, 0x03, 0x00,\n\t\t\t0x00, 0x10, 0xdb, 0x85, 0x60, 0x24, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t}, []byte{ // SHUTDOWN\n\t\t\t0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,\n\t\t\t0x00, 0x28, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x3e, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,\n\t\t\t0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0x3f, 0x29, 0x59, 0x23, 0x07, 0x00,\n\t\t\t0x00, 0x08, 0x85, 0x98, 0xb1, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t}, []byte{ // SHUTDOWN ACK\n\t\t\t0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20,\n\t\t\t0x00, 0x24, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xce, 0x24, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d,\n\t\t\t0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0xb2, 0xc8, 0x99, 0x24, 0x08, 0x00,\n\t\t\t0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t}, []byte{ // SHUTDOWN COMPLETE\n\t\t\t0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,\n\t\t\t0x00, 0x24, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x42, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,\n\t\t\t0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0xa8, 0xd1, 0x86, 0x85, 0x0e, 0x00,\n\t\t\t0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t}}\n\twantLayers := [][]gopacket.LayerType{\n\t\t[]gopacket.LayerType{LayerTypeSCTPInit},\n\t\t[]gopacket.LayerType{LayerTypeSCTPInitAck},\n\t\t[]gopacket.LayerType{LayerTypeSCTPCookieEcho, LayerTypeSCTPData, gopacket.LayerTypePayload},\n\t\t[]gopacket.LayerType{LayerTypeSCTPCookieAck, LayerTypeSCTPSack},\n\t\t[]gopacket.LayerType{LayerTypeSCTPData, gopacket.LayerTypePayload},\n\t\t[]gopacket.LayerType{LayerTypeSCTPSack},\n\t\t[]gopacket.LayerType{LayerTypeSCTPShutdown},\n\t\t[]gopacket.LayerType{LayerTypeSCTPShutdownAck},\n\t\t[]gopacket.LayerType{LayerTypeSCTPShutdownComplete},\n\t}\n\tfor i, data := range sctpPackets {\n\t\tp := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)\n\t\tfor _, typ := range wantLayers[i] {\n\t\t\tif p.Layer(typ) == nil {\n\t\t\t\tt.Errorf(\"Packet %d missing layer type %v, got:\", i, typ)\n\t\t\t\tfor _, layer := range p.Layers() {\n\t\t\t\t\tt.Errorf(\"\\t%v\", layer.LayerType())\n\t\t\t\t}\n\t\t\t\tif p.ErrorLayer() != nil {\n\t\t\t\t\tt.Error(\"\\tPacket layer error:\", p.ErrorLayer().Error())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Test re-serialization.\n\t\ttestSerializationWithOpts(t, p, data, gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true})\n\t}\n}\n\nfunc TestDecodeCiscoDiscovery(t *testing.T) {\n\t// http://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=cdp_v2.pcap\n\tdata := []byte{\n\t\t0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc, 0x00, 0x0b, 0xbe, 0x18, 0x9a, 0x41, 0x01, 0xc3, 0xaa, 0xaa,\n\t\t0x03, 0x00, 0x00, 0x0c, 0x20, 0x00, 0x02, 0xb4, 0x09, 0xa0, 0x00, 0x01, 0x00, 0x0c, 0x6d, 0x79,\n\t\t0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,\n\t\t0xcc, 0x00, 0x04, 0xc0, 0xa8, 0x00, 0xfd, 0x00, 0x03, 0x00, 0x13, 0x46, 0x61, 0x73, 0x74, 0x45,\n\t\t0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x30, 0x2f, 0x31, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00,\n\t\t0x00, 0x28, 0x00, 0x05, 0x01, 0x14, 0x43, 0x69, 0x73, 0x63, 0x6f, 0x20, 0x49, 0x6e, 0x74, 0x65,\n\t\t0x72, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69,\n\t\t0x6e, 0x67, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,\n\t\t0x72, 0x65, 0x20, 0x0a, 0x49, 0x4f, 0x53, 0x20, 0x28, 0x74, 0x6d, 0x29, 0x20, 0x43, 0x32, 0x39,\n\t\t0x35, 0x30, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x28, 0x43, 0x32, 0x39,\n\t\t0x35, 0x30, 0x2d, 0x49, 0x36, 0x4b, 0x32, 0x4c, 0x32, 0x51, 0x34, 0x2d, 0x4d, 0x29, 0x2c, 0x20,\n\t\t0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x32, 0x2e, 0x31, 0x28, 0x32, 0x32, 0x29,\n\t\t0x45, 0x41, 0x31, 0x34, 0x2c, 0x20, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x20, 0x53, 0x4f,\n\t\t0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x28, 0x66, 0x63, 0x31, 0x29, 0x0a, 0x54, 0x65, 0x63,\n\t\t0x68, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x3a, 0x20,\n\t\t0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x69, 0x73, 0x63, 0x6f,\n\t\t0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x65, 0x63, 0x68, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74,\n\t\t0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x31,\n\t\t0x39, 0x38, 0x36, 0x2d, 0x32, 0x30, 0x31, 0x30, 0x20, 0x62, 0x79, 0x20, 0x63, 0x69, 0x73, 0x63,\n\t\t0x6f, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x0a,\n\t\t0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x54, 0x75, 0x65, 0x20, 0x32, 0x36, 0x2d,\n\t\t0x4f, 0x63, 0x74, 0x2d, 0x31, 0x30, 0x20, 0x31, 0x30, 0x3a, 0x33, 0x35, 0x20, 0x62, 0x79, 0x20,\n\t\t0x6e, 0x62, 0x75, 0x72, 0x72, 0x61, 0x00, 0x06, 0x00, 0x15, 0x63, 0x69, 0x73, 0x63, 0x6f, 0x20,\n\t\t0x57, 0x53, 0x2d, 0x43, 0x32, 0x39, 0x35, 0x30, 0x2d, 0x31, 0x32, 0x00, 0x08, 0x00, 0x24, 0x00,\n\t\t0x00, 0x0c, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x02, 0x20, 0xff,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xbe, 0x18, 0x9a, 0x40, 0xff, 0x00, 0x00, 0x00,\n\t\t0x09, 0x00, 0x0c, 0x4d, 0x59, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x00, 0x0a, 0x00, 0x06, 0x00,\n\t\t0x01, 0x00, 0x0b, 0x00, 0x05, 0x01, 0x00, 0x12, 0x00, 0x05, 0x00, 0x00, 0x13, 0x00, 0x05, 0x00,\n\t\t0x00, 0x16, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0xcc, 0x00, 0x04, 0xc0, 0xa8, 0x00,\n\t\t0xfd,\n\t}\n\tp := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)\n\twantLayers := []gopacket.LayerType{LayerTypeEthernet, LayerTypeLLC, LayerTypeSNAP, LayerTypeCiscoDiscovery, LayerTypeCiscoDiscoveryInfo}\n\tcheckLayers(p, wantLayers, t)\n\n\twant := &CiscoDiscoveryInfo{\n\t\tCDPHello: CDPHello{\n\t\t\tOUI:              []byte{0, 0, 12},\n\t\t\tProtocolID:       274,\n\t\t\tClusterMaster:    []byte{0, 0, 0, 0},\n\t\t\tUnknown1:         []byte{255, 255, 255, 255},\n\t\t\tVersion:          1,\n\t\t\tSubVersion:       2,\n\t\t\tStatus:           32,\n\t\t\tUnknown2:         255,\n\t\t\tClusterCommander: net.HardwareAddr{0, 0, 0, 0, 0, 0},\n\t\t\tSwitchMAC:        net.HardwareAddr{0, 0x0b, 0xbe, 0x18, 0x9a, 0x40},\n\t\t\tUnknown3:         255,\n\t\t\tManagementVLAN:   0,\n\t\t},\n\t\tDeviceID:      \"myswitch\",\n\t\tAddresses:     []net.IP{net.IPv4(192, 168, 0, 253)},\n\t\tPortID:        \"FastEthernet0/1\",\n\t\tCapabilities:  CDPCapabilities{false, false, false, true, false, true, false, false, false},\n\t\tVersion:       \"Cisco Internetwork Operating System Software \\nIOS (tm) C2950 Software (C2950-I6K2L2Q4-M), Version 12.1(22)EA14, RELEASE SOFTWARE (fc1)\\nTechnical Support: http://www.cisco.com/techsupport\\nCopyright (c) 1986-2010 by cisco Systems, Inc.\\nCompiled Tue 26-Oct-10 10:35 by nburra\",\n\t\tPlatform:      \"cisco WS-C2950-12\",\n\t\tVTPDomain:     \"MYDOMAIN\",\n\t\tNativeVLAN:    1,\n\t\tFullDuplex:    true,\n\t\tMgmtAddresses: []net.IP{net.IPv4(192, 168, 0, 253)},\n\t\tBaseLayer:     BaseLayer{Contents: data[26:]},\n\t}\n\tcdpL := p.Layer(LayerTypeCiscoDiscoveryInfo)\n\tinfo, _ := cdpL.(*CiscoDiscoveryInfo)\n\tif !reflect.DeepEqual(info, want) {\n\t\tt.Errorf(\"Values mismatch, \\ngot  %#v\\nwant %#v\\n\", info, want)\n\t}\n}\n\nfunc TestDecodeLinkLayerDiscovery(t *testing.T) {\n\t// http://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=lldp.detailed.pcap\n\tdata := []byte{\n\t\t0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e, 0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0,\n\t\t0x88, 0xcc, 0x02, 0x07, 0x04, 0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0, 0x04,\n\t\t0x04, 0x05, 0x31, 0x2f, 0x31, 0x06, 0x02, 0x00, 0x78, 0x08, 0x17, 0x53,\n\t\t0x75, 0x6d, 0x6d, 0x69, 0x74, 0x33, 0x30, 0x30, 0x2d, 0x34, 0x38, 0x2d,\n\t\t0x50, 0x6f, 0x72, 0x74, 0x20, 0x31, 0x30, 0x30, 0x31, 0x00, 0x0a, 0x0d,\n\t\t0x53, 0x75, 0x6d, 0x6d, 0x69, 0x74, 0x33, 0x30, 0x30, 0x2d, 0x34, 0x38,\n\t\t0x00, 0x0c, 0x4c, 0x53, 0x75, 0x6d, 0x6d, 0x69, 0x74, 0x33, 0x30, 0x30,\n\t\t0x2d, 0x34, 0x38, 0x20, 0x2d, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,\n\t\t0x6e, 0x20, 0x37, 0x2e, 0x34, 0x65, 0x2e, 0x31, 0x20, 0x28, 0x42, 0x75,\n\t\t0x69, 0x6c, 0x64, 0x20, 0x35, 0x29, 0x20, 0x62, 0x79, 0x20, 0x52, 0x65,\n\t\t0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72,\n\t\t0x20, 0x30, 0x35, 0x2f, 0x32, 0x37, 0x2f, 0x30, 0x35, 0x20, 0x30, 0x34,\n\t\t0x3a, 0x35, 0x33, 0x3a, 0x31, 0x31, 0x00, 0x0e, 0x04, 0x00, 0x14, 0x00,\n\t\t0x14, 0x10, 0x0e, 0x07, 0x06, 0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0, 0x02,\n\t\t0x00, 0x00, 0x03, 0xe9, 0x00, 0xfe, 0x07, 0x00, 0x12, 0x0f, 0x02, 0x07,\n\t\t0x01, 0x00, 0xfe, 0x09, 0x00, 0x12, 0x0f, 0x01, 0x03, 0x6c, 0x00, 0x00,\n\t\t0x10, 0xfe, 0x09, 0x00, 0x12, 0x0f, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,\n\t\t0xfe, 0x06, 0x00, 0x12, 0x0f, 0x04, 0x05, 0xf2, 0xfe, 0x06, 0x00, 0x80,\n\t\t0xc2, 0x01, 0x01, 0xe8, 0xfe, 0x07, 0x00, 0x80, 0xc2, 0x02, 0x01, 0x00,\n\t\t0x00, 0xfe, 0x17, 0x00, 0x80, 0xc2, 0x03, 0x01, 0xe8, 0x10, 0x76, 0x32,\n\t\t0x2d, 0x30, 0x34, 0x38, 0x38, 0x2d, 0x30, 0x33, 0x2d, 0x30, 0x35, 0x30,\n\t\t0x35, 0x00, 0xfe, 0x05, 0x00, 0x80, 0xc2, 0x04, 0x00, 0x00, 0x00,\n\t}\n\n\tp := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)\n\twantLayers := []gopacket.LayerType{LayerTypeEthernet, LayerTypeLinkLayerDiscovery, LayerTypeLinkLayerDiscoveryInfo}\n\tcheckLayers(p, wantLayers, t)\n\tlldpL := p.Layer(LayerTypeLinkLayerDiscovery)\n\tlldp := lldpL.(*LinkLayerDiscovery)\n\twant := &LinkLayerDiscovery{\n\t\tChassisID: LLDPChassisID{LLDPChassisIDSubTypeMACAddr, []byte{0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0}},\n\t\tPortID:    LLDPPortID{LLDPPortIDSubtypeIfaceName, []byte(\"1/1\")},\n\t\tTTL:       120,\n\t\tBaseLayer: BaseLayer{Contents: data[14:]},\n\t}\n\tlldp.Values = nil // test these in next stage\n\tif !reflect.DeepEqual(lldp, want) {\n\t\tt.Errorf(\"Values mismatch, \\ngot  %#v\\nwant %#v\\n\", lldp, want)\n\t}\n\n\tinfoL := p.Layer(LayerTypeLinkLayerDiscoveryInfo)\n\tinfo := infoL.(*LinkLayerDiscoveryInfo)\n\twantinfo := &LinkLayerDiscoveryInfo{\n\t\tPortDescription: \"Summit300-48-Port 1001\\x00\",\n\t\tSysName:         \"Summit300-48\\x00\",\n\t\tSysDescription:  \"Summit300-48 - Version 7.4e.1 (Build 5) by Release_Master 05/27/05 04:53:11\\x00\",\n\t\tSysCapabilities: LLDPSysCapabilities{\n\t\t\tSystemCap:  LLDPCapabilities{Bridge: true, Router: true},\n\t\t\tEnabledCap: LLDPCapabilities{Bridge: true, Router: true},\n\t\t},\n\t\tMgmtAddress: LLDPMgmtAddress{IANAAddressFamily802, []byte{0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0}, LLDPInterfaceSubtypeifIndex, 1001, \"\"},\n\t\tOrgTLVs: []LLDPOrgSpecificTLV{\n\t\t\tLLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x2, Info: []uint8{0x7, 0x1, 0x0}},\n\t\t\tLLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x1, Info: []uint8{0x3, 0x6c, 0x0, 0x0, 0x10}},\n\t\t\tLLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x3, Info: []uint8{0x1, 0x0, 0x0, 0x0, 0x0}},\n\t\t\tLLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x4, Info: []uint8{0x5, 0xf2}},\n\t\t\tLLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x1, Info: []uint8{0x1, 0xe8}},\n\t\t\tLLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x2, Info: []uint8{0x1, 0x0, 0x0}},\n\t\t\tLLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x3, Info: []uint8{0x1, 0xe8, 0x10, 0x76, 0x32, 0x2d, 0x30, 0x34, 0x38, 0x38, 0x2d, 0x30, 0x33, 0x2d, 0x30, 0x35, 0x30, 0x35, 0x0}},\n\t\t\tLLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x4, Info: []uint8{0x0}},\n\t\t},\n\t\tUnknown: nil,\n\t}\n\tif !reflect.DeepEqual(info, wantinfo) {\n\t\tt.Errorf(\"Values mismatch, \\ngot  %#v\\nwant %#v\\n\", info, wantinfo)\n\t}\n\tinfo8021, err := info.Decode8021()\n\tif err != nil {\n\t\tt.Errorf(\"8021 Values decode error: %v\", err)\n\t}\n\twant8021 := LLDPInfo8021{\n\t\tPVID:               488,\n\t\tPPVIDs:             []PortProtocolVLANID{PortProtocolVLANID{false, false, 0}},\n\t\tVLANNames:          []VLANName{VLANName{488, \"v2-0488-03-0505\\x00\"}},\n\t\tProtocolIdentities: nil,\n\t\tVIDUsageDigest:     0,\n\t\tManagementVID:      0,\n\t\tLinkAggregation:    LLDPLinkAggregation{false, false, 0},\n\t}\n\tif !reflect.DeepEqual(info8021, want8021) {\n\t\tt.Errorf(\"Values mismatch, \\ngot  %#v\\nwant %#v\\n\", info8021, want8021)\n\t}\n\tinfo8023, err := info.Decode8023()\n\tif err != nil {\n\t\tt.Errorf(\"8023 Values decode error: %v\", err)\n\t}\n\twant8023 := LLDPInfo8023{\n\t\tLinkAggregation:    LLDPLinkAggregation{true, false, 0},\n\t\tMACPHYConfigStatus: LLDPMACPHYConfigStatus{true, true, 0x6c00, 0x0010},\n\t\tPowerViaMDI:        LLDPPowerViaMDI8023{true, true, true, false, 1, 0, 0, 0, 0, 0, 0},\n\t\tMTU:                1522,\n\t}\n\n\tif !reflect.DeepEqual(info8023, want8023) {\n\t\tt.Errorf(\"Values mismatch, \\ngot  %#v\\nwant %#v\\n\", info8023, want8023)\n\t}\n\n\t// http://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=lldpmed_civicloc.pcap\n\tdata = []byte{\n\t\t0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e, 0x00, 0x13, 0x21, 0x57, 0xca, 0x7f,\n\t\t0x88, 0xcc, 0x02, 0x07, 0x04, 0x00, 0x13, 0x21, 0x57, 0xca, 0x40, 0x04,\n\t\t0x02, 0x07, 0x31, 0x06, 0x02, 0x00, 0x78, 0x08, 0x01, 0x31, 0x0a, 0x1a,\n\t\t0x50, 0x72, 0x6f, 0x43, 0x75, 0x72, 0x76, 0x65, 0x20, 0x53, 0x77, 0x69,\n\t\t0x74, 0x63, 0x68, 0x20, 0x32, 0x36, 0x30, 0x30, 0x2d, 0x38, 0x2d, 0x50,\n\t\t0x57, 0x52, 0x0c, 0x5f, 0x50, 0x72, 0x6f, 0x43, 0x75, 0x72, 0x76, 0x65,\n\t\t0x20, 0x4a, 0x38, 0x37, 0x36, 0x32, 0x41, 0x20, 0x53, 0x77, 0x69, 0x74,\n\t\t0x63, 0x68, 0x20, 0x32, 0x36, 0x30, 0x30, 0x2d, 0x38, 0x2d, 0x50, 0x57,\n\t\t0x52, 0x2c, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20,\n\t\t0x48, 0x2e, 0x30, 0x38, 0x2e, 0x38, 0x39, 0x2c, 0x20, 0x52, 0x4f, 0x4d,\n\t\t0x20, 0x48, 0x2e, 0x30, 0x38, 0x2e, 0x35, 0x58, 0x20, 0x28, 0x2f, 0x73,\n\t\t0x77, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64,\n\t\t0x2f, 0x66, 0x69, 0x73, 0x68, 0x28, 0x74, 0x73, 0x5f, 0x30, 0x38, 0x5f,\n\t\t0x35, 0x29, 0x29, 0x0e, 0x04, 0x00, 0x14, 0x00, 0x04, 0x10, 0x0c, 0x05,\n\t\t0x01, 0x0f, 0xff, 0x7a, 0x94, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,\n\t\t0x09, 0x00, 0x12, 0x0f, 0x01, 0x03, 0x6c, 0x00, 0x00, 0x10, 0xfe, 0x07,\n\t\t0x00, 0x12, 0xbb, 0x01, 0x00, 0x0f, 0x04, 0xfe, 0x08, 0x00, 0x12, 0xbb,\n\t\t0x02, 0x01, 0x40, 0x65, 0xae, 0xfe, 0x2e, 0x00, 0x12, 0xbb, 0x03, 0x02,\n\t\t0x28, 0x02, 0x55, 0x53, 0x01, 0x02, 0x43, 0x41, 0x03, 0x09, 0x52, 0x6f,\n\t\t0x73, 0x65, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x06, 0x09, 0x46, 0x6f, 0x6f,\n\t\t0x74, 0x68, 0x69, 0x6c, 0x6c, 0x73, 0x13, 0x04, 0x38, 0x30, 0x30, 0x30,\n\t\t0x1a, 0x03, 0x52, 0x33, 0x4c, 0xfe, 0x07, 0x00, 0x12, 0xbb, 0x04, 0x03,\n\t\t0x00, 0x41, 0x00, 0x00,\n\t}\n\n\tp = gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)\n\twantLayers = []gopacket.LayerType{LayerTypeEthernet, LayerTypeLinkLayerDiscovery, LayerTypeLinkLayerDiscoveryInfo}\n\tcheckLayers(p, wantLayers, t)\n\tlldpL = p.Layer(LayerTypeLinkLayerDiscovery)\n\tlldp = lldpL.(*LinkLayerDiscovery)\n\twant = &LinkLayerDiscovery{\n\t\tChassisID: LLDPChassisID{LLDPChassisIDSubTypeMACAddr, []byte{0x00, 0x13, 0x21, 0x57, 0xca, 0x40}},\n\t\tPortID:    LLDPPortID{LLDPPortIDSubtypeLocal, []byte(\"1\")},\n\t\tTTL:       120,\n\t\tBaseLayer: BaseLayer{Contents: data[14:]},\n\t}\n\tlldp.Values = nil // test these in next stage\n\tif !reflect.DeepEqual(lldp, want) {\n\t\tt.Errorf(\"Values mismatch, \\ngot  %#v\\nwant %#v\\n\", lldp, want)\n\t}\n\n\tinfoL = p.Layer(LayerTypeLinkLayerDiscoveryInfo)\n\tinfo = infoL.(*LinkLayerDiscoveryInfo)\n\twantinfo = &LinkLayerDiscoveryInfo{\n\t\tPortDescription: \"1\",\n\t\tSysName:         \"ProCurve Switch 2600-8-PWR\",\n\t\tSysDescription:  \"ProCurve J8762A Switch 2600-8-PWR, revision H.08.89, ROM H.08.5X (/sw/code/build/fish(ts_08_5))\",\n\t\tSysCapabilities: LLDPSysCapabilities{\n\t\t\tSystemCap:  LLDPCapabilities{Bridge: true, Router: true},\n\t\t\tEnabledCap: LLDPCapabilities{Bridge: true},\n\t\t},\n\t\tMgmtAddress: LLDPMgmtAddress{IANAAddressFamilyIPV4, []byte{0x0f, 0xff, 0x7a, 0x94}, LLDPInterfaceSubtypeifIndex, 0, \"\"},\n\t\tOrgTLVs: []LLDPOrgSpecificTLV{\n\t\t\tLLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x1, Info: []uint8{0x3, 0x6c, 0x0, 0x0, 0x10}},\n\t\t\tLLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x1, Info: []uint8{0x0, 0xf, 0x4}},\n\t\t\tLLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x2, Info: []uint8{0x1, 0x40, 0x65, 0xae}},\n\t\t\tLLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x3, Info: []uint8{0x2, 0x28, 0x2, 0x55, 0x53, 0x1, 0x2, 0x43, 0x41, 0x3, 0x9, 0x52, 0x6f, 0x73, 0x65, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x6, 0x9, 0x46, 0x6f, 0x6f, 0x74, 0x68, 0x69, 0x6c, 0x6c, 0x73, 0x13, 0x4, 0x38, 0x30, 0x30, 0x30, 0x1a, 0x3, 0x52, 0x33, 0x4c}},\n\t\t\tLLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x4, Info: []uint8{0x3, 0x0, 0x41}},\n\t\t},\n\t\tUnknown: nil,\n\t}\n\tif !reflect.DeepEqual(info, wantinfo) {\n\t\tt.Errorf(\"Values mismatch, \\ngot  %#v\\nwant %#v\\n\", info, wantinfo)\n\t}\n\tinfo8023, err = info.Decode8023()\n\tif err != nil {\n\t\tt.Errorf(\"8023 Values decode error: %v\", err)\n\t}\n\twant8023 = LLDPInfo8023{\n\t\tMACPHYConfigStatus: LLDPMACPHYConfigStatus{true, true, 0x6c00, 0x0010},\n\t}\n\n\tif !reflect.DeepEqual(info8023, want8023) {\n\t\tt.Errorf(\"Values mismatch, \\ngot  %#v\\nwant %#v\\n\", info8023, want8023)\n\t}\n\n\tinfoMedia, err := info.DecodeMedia()\n\tif err != nil {\n\t\tt.Errorf(\"8023 Values decode error: %v\", err)\n\t}\n\twantMedia := LLDPInfoMedia{\n\t\tMediaCapabilities: LLDPMediaCapabilities{true, true, true, true, false, false, LLDPMediaClassNetwork},\n\t\tNetworkPolicy:     LLDPNetworkPolicy{LLDPAppTypeVoice, true, true, 50, 6, 46},\n\t\tLocation: LLDPLocation{Format: LLDPLocationFormatAddress, Address: LLDPLocationAddress{\n\t\t\tWhat:        LLDPLocationAddressWhatClient,\n\t\t\tCountryCode: \"US\",\n\t\t\tAddressLines: []LLDPLocationAddressLine{\n\t\t\t\tLLDPLocationAddressLine{LLDPLocationAddressTypeNational, \"CA\"},\n\t\t\t\tLLDPLocationAddressLine{LLDPLocationAddressTypeCity, \"Roseville\"},\n\t\t\t\tLLDPLocationAddressLine{LLDPLocationAddressTypeStreet, \"Foothills\"},\n\t\t\t\tLLDPLocationAddressLine{LLDPLocationAddressTypeHouseNum, \"8000\"},\n\t\t\t\tLLDPLocationAddressLine{LLDPLocationAddressTypeUnit, \"R3L\"},\n\t\t\t},\n\t\t}},\n\t\tPowerViaMDI: LLDPPowerViaMDI{0, 0, LLDPPowerPriorityLow, 6500},\n\t}\n\n\tif !reflect.DeepEqual(infoMedia, wantMedia) {\n\t\tt.Errorf(\"Values mismatch, \\ngot  %#v\\nwant %#v\\n\", infoMedia, wantMedia)\n\t}\n\n}\n\nfunc TestDecodeNortelDiscovery(t *testing.T) {\n\t// http://www.thetechfirm.com/packets/nortel_btdp/btdp_nai.enc\n\tdata := []byte{\n\t\t0x01, 0x00, 0x81, 0x00, 0x01, 0x00, 0x00, 0x04, 0x38, 0xe0, 0xcc, 0xde,\n\t\t0x00, 0x13, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x81, 0x01, 0xa2, 0xac, 0x13,\n\t\t0x58, 0x03, 0x00, 0x04, 0x15, 0x30, 0x0c, 0x02, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x04, 0x38, 0xe0, 0xcc, 0xde, 0x80, 0x6a, 0x00, 0x01, 0x14, 0x00,\n\t\t0x02, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t}\n\tp := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)\n\twantLayers := []gopacket.LayerType{LayerTypeEthernet, LayerTypeLLC, LayerTypeSNAP, LayerTypeNortelDiscovery}\n\tcheckLayers(p, wantLayers, t)\n\n\twant := &NortelDiscovery{\n\t\tIPAddress: []byte{172, 19, 88, 3},\n\t\tSegmentID: []byte{0x00, 0x04, 0x15},\n\t\tChassis:   NDPChassisBayStack450101001000Switches,\n\t\tBackplane: NDPBackplaneEthernetFastEthernetGigabitEthernet,\n\t\tState:     NDPStateHeartbeat,\n\t\tNumLinks:  0,\n\t}\n\tndpL := p.Layer(LayerTypeNortelDiscovery)\n\tinfo, _ := ndpL.(*NortelDiscovery)\n\tif !reflect.DeepEqual(info, want) {\n\t\tt.Errorf(\"Values mismatch, \\ngot  %#v\\nwant %#v\\n\", info, want)\n\t}\n}\n\nfunc TestDecodeIPv6Jumbogram(t *testing.T) {\n\t// Haven't found any of these in the wild or on example pcaps online, so had\n\t// to generate one myself via scapy.  Unfortunately, scapy can only\n\t// str(packet) for packets with length < 65536, due to limitations in python's\n\t// struct library, so I generated the header with:\n\t// Ether() / IPv6(src='::1', dst='::2') / IPv6ExtHdrHopByHop(options=[Jumbo(jumboplen=70000)]) / TCP(sport=8888, dport=80)\n\t// then added the payload manually (\"payload\" * 9996).  The checksums here are\n\t// not correct, but we don't check, so who cares ;)\n\tdataStr := \"\\x00\\x1f\\xca\\xb3v@$\\xbe\\x05'\\x0b\\x17\\x86\\xdd`\\x00\\x00\\x00\\x00\\x00\\x00@\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x06\\x00\\xc2\\x04\\x00\\x01\\x11p\\\"\\xb8\\x00P\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00P\\x02 \\x00l\\xd8\\x00\\x00\"\n\tpayload := strings.Repeat(\"payload\", 9996)\n\tdata := []byte(dataStr + payload)\n\tp := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeTCP, gopacket.LayerTypePayload}, t)\n\tif p.ApplicationLayer() == nil {\n\t\tt.Error(\"Packet has no application layer\")\n\t} else if string(p.ApplicationLayer().Payload()) != payload {\n\t\tt.Errorf(\"Jumbogram payload wrong\")\n\t}\n\t// Check truncated for jumbograms\n\tdata = data[:len(data)-1]\n\tp = gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeTCP, gopacket.LayerTypePayload}, t)\n\tif !p.Metadata().Truncated {\n\t\tt.Error(\"Jumbogram should be truncated\")\n\t}\n}\n\nfunc TestDecodeUDPPacketTooSmall(t *testing.T) {\n\tdata := []byte{\n\t\t0x00, 0x15, 0x2c, 0x9d, 0xcc, 0x00, 0x00, 0x10, 0xdb, 0xff, 0x10, 0x00, 0x81, 0x00, 0x01, 0xf7,\n\t\t0x08, 0x00, 0x45, 0x60, 0x00, 0x3c, 0x0f, 0xa9, 0x00, 0x00, 0x6e, 0x11, 0x01, 0x0a, 0x47, 0xe6,\n\t\t0xee, 0x2e, 0xac, 0x16, 0x59, 0x73, 0x00, 0x50, 0x00, 0x50, 0x00, 0x28, 0x4d, 0xad, 0x00, 0x67,\n\t\t0x00, 0x01, 0x00, 0x72, 0xd5, 0xc7, 0xf1, 0x07, 0x00, 0x00, 0x01, 0x01, 0x00, 0x0d, 0x00, 0x00,\n\t\t0x00, 0x14, 0x00, 0x00, 0x19, 0xba,\n\t}\n\tp := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeDot1Q, LayerTypeIPv4, LayerTypeUDP, gopacket.LayerTypePayload}, t)\n\tif !p.Metadata().Truncated {\n\t\tt.Error(\"UDP short packet should be truncated\")\n\t}\n}\n\nfunc TestDecodingLayerParserFullTCPPacket(t *testing.T) {\n\tdlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{})\n\tdecoded := make([]gopacket.LayerType, 1)\n\terr := dlp.DecodeLayers(testSimpleTCPPacket, &decoded)\n\tif err != nil {\n\t\tt.Error(\"Error from dlp parser: \", err)\n\t}\n\tif len(decoded) != 4 {\n\t\tt.Error(\"Expected 4 layers parsed, instead got \", len(decoded))\n\t}\n}\n\nfunc testDecodingLayerContainer(t *testing.T, dlc gopacket.DecodingLayerContainer) {\n\tdlc = dlc.Put(&Ethernet{})\n\tdlc = dlc.Put(&IPv4{})\n\tdlc = dlc.Put(&TCP{})\n\tdlc = dlc.Put(&gopacket.Payload{})\n\tdecoded := make([]gopacket.LayerType, 1)\n\n\t// just as a DecodeFeedback\n\tdf := gopacket.NewDecodingLayerParser(LayerTypeEthernet)\n\tdecoder := dlc.LayersDecoder(LayerTypeEthernet, df)\n\ttyp, err := decoder(testSimpleTCPPacket, &decoded)\n\tif err != nil {\n\t\tt.Error(\"Error from decoder: \", err)\n\t}\n\tif typ != gopacket.LayerTypeZero {\n\t\tt.Error(\"Unsupported layer type\", typ)\n\t}\n\tif len(decoded) != 4 {\n\t\tt.Error(\"Expected 4 layers parsed, instead got \", len(decoded))\n\t}\n}\n\nfunc TestDecodingLayerMap(t *testing.T) {\n\ttestDecodingLayerContainer(t, gopacket.DecodingLayerMap(nil))\n}\n\nfunc TestDecodingLayerSparse(t *testing.T) {\n\ttestDecodingLayerContainer(t, gopacket.DecodingLayerSparse(nil))\n}\n\nfunc TestDecodingLayerArray(t *testing.T) {\n\ttestDecodingLayerContainer(t, gopacket.DecodingLayerArray(nil))\n}\n\n// testICMP is the packet:\n//   15:49:15.773265 IP 72.14.222.226 > 172.29.20.15: ICMP host 10.66.73.201 unreachable - admin prohibited filter, length 36\n//      0x0000:  24be 0527 0b17 001f cab3 75c0 0800 4500  $..'......u...E.\n//      0x0010:  0038 0000 0000 fc01 d7a7 480e dee2 ac1d  .8........H.....\n//      0x0020:  140f 030d 946e 0000 0000 4520 004d 0000  .....n....E..M..\n//      0x0030:  4000 3e11 2849 ac1d 140f 0a42 49c9 8ecc  @.>.(I.....BI...\n//      0x0040:  62e1 0039 769d                           b..9v.\nvar testICMP = []byte{\n\t0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0xd7, 0xa7, 0x48, 0x0e, 0xde, 0xe2, 0xac, 0x1d,\n\t0x14, 0x0f, 0x03, 0x0d, 0x94, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x45, 0x20, 0x00, 0x4d, 0x00, 0x00,\n\t0x40, 0x00, 0x3e, 0x11, 0x28, 0x49, 0xac, 0x1d, 0x14, 0x0f, 0x0a, 0x42, 0x49, 0xc9, 0x8e, 0xcc,\n\t0x62, 0xe1, 0x00, 0x39, 0x76, 0x9d,\n}\n\nfunc TestICMP(t *testing.T) {\n\tp := gopacket.NewPacket(testICMP, LinkTypeEthernet, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\ttestSerialization(t, p, testICMP)\n}\nfunc BenchmarkDecodeICMP(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testICMP, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testICMP6 is the packet:\n//   16:17:37.758937 IP6 fe80::21f:caff:feb3:75c0 > 2620:0:1005:0:26be:5ff:fe27:b17: ICMP6, neighbor solicitation, who has 2620:0:1005:0:26be:5ff:fe27:b17, length 32\n//      0x0000:  24be 0527 0b17 001f cab3 75c0 86dd 6e00  $..'......u...n.\n//      0x0010:  0000 0020 3aff fe80 0000 0000 0000 021f  ....:...........\n//      0x0020:  caff feb3 75c0 2620 0000 1005 0000 26be  ....u.&.......&.\n//      0x0030:  05ff fe27 0b17 8700 1eba 0000 0000 2620  ...'..........&.\n//      0x0040:  0000 1005 0000 26be 05ff fe27 0b17 0101  ......&....'....\n//      0x0050:  001f cab3 75c0                           ....u.\nvar testICMP6 = []byte{\n\t0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0, 0x86, 0xdd, 0x6e, 0x00,\n\t0x00, 0x00, 0x00, 0x20, 0x3a, 0xff, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f,\n\t0xca, 0xff, 0xfe, 0xb3, 0x75, 0xc0, 0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe,\n\t0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17, 0x87, 0x00, 0x1e, 0xba, 0x00, 0x00, 0x00, 0x00, 0x26, 0x20,\n\t0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe, 0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17, 0x01, 0x01,\n\t0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0,\n}\n\nfunc TestICMP6(t *testing.T) {\n\tp := gopacket.NewPacket(testICMP6, LinkTypeEthernet, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeICMPv6, gopacket.LayerTypePayload}, t)\n\ttestSerialization(t, p, testICMP6)\n}\nfunc BenchmarkDecodeICMP6(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testICMP6, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testMPLS is the packet:\n//   12:48:57.201014 MPLS (label 29, exp 0, [S], ttl 255) IP 10.1.2.1 > 10.34.0.1: ICMP echo request, id 2618, seq 1579, length 80\n//      0x0000:  0030 96e6 fc39 0030 9605 2838 8847 0001  .0...9.0..(8.G..\n//      0x0010:  d1ff 4500 0064 000b 0000 ff01 a569 0a01  ..E..d.......i..\n//      0x0020:  0201 0a22 0001 0800 3a76 0a3a 062b 0000  ...\"....:v.:.+..\n//      0x0030:  0000 001f 3350 abcd abcd abcd abcd abcd  ....3P..........\n//      0x0040:  abcd abcd abcd abcd abcd abcd abcd abcd  ................\n//      0x0050:  abcd abcd abcd abcd abcd abcd abcd abcd  ................\n//      0x0060:  abcd abcd abcd abcd abcd abcd abcd abcd  ................\n//      0x0070:  abcd abcd abcd                           ......\nvar testMPLS = []byte{\n\t0x00, 0x30, 0x96, 0xe6, 0xfc, 0x39, 0x00, 0x30, 0x96, 0x05, 0x28, 0x38, 0x88, 0x47, 0x00, 0x01,\n\t0xd1, 0xff, 0x45, 0x00, 0x00, 0x64, 0x00, 0x0b, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x69, 0x0a, 0x01,\n\t0x02, 0x01, 0x0a, 0x22, 0x00, 0x01, 0x08, 0x00, 0x3a, 0x76, 0x0a, 0x3a, 0x06, 0x2b, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x1f, 0x33, 0x50, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n}\n\nfunc TestMPLS(t *testing.T) {\n\tp := gopacket.NewPacket(testMPLS, LinkTypeEthernet, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeMPLS, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\ttestSerialization(t, p, testMPLS)\n}\nfunc BenchmarkDecodeMPLS(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testMPLS, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testPPPGREIPv4IPv6VLAN is the packet from http://packetlife.net/captures/gre_and_4over6.cap\n//04:35:03.821897 IP6 2402:f000:1:8e01::5555 > 2607:fcd0:100:2300::b108:2a6b: IP 16.0.0.200 > 192.52.166.154: GREv1, call 6016, seq 430001, ack 539254, length 119: IP 172.16.44.3.40768 > 8.8.8.8.53: 42540+ AAAA? xqt-detect-mode2-97712e88-167a-45b9-93ee-913140e76678. (71)\n//\t0x0000:  6000 0000 008b 04f6 2402 f000 0001 8e01  `.......$.......\n//\t0x0010:  0000 0000 0000 5555 2607 fcd0 0100 2300  ......UU&.....#.\n//\t0x0020:  0000 0000 b108 2a6b 4500 008b 8caf 0000  ......*kE.......\n//\t0x0030:  402f 75fe 1000 00c8 c034 a69a 3081 880b  @/u......4..0...\n//\t0x0040:  0067 1780 0006 8fb1 0008 3a76 ff03 0021  .g........:v...!\n//\t0x0050:  4500 0063 0000 4000 3c11 5667 ac10 2c03  E..c..@.<.Vg..,.\n//\t0x0060:  0808 0808 9f40 0035 004f 2d23 a62c 0100  .....@.5.O-#.,..\n//\t0x0070:  0001 0000 0000 0000 3578 7174 2d64 6574  ........5xqt-det\n//\t0x0080:  6563 742d 6d6f 6465 322d 3937 3731 3265  ect-mode2-97712e\n//\t0x0090:  3838 2d31 3637 612d 3435 6239 2d39 3365  88-167a-45b9-93e\n//\t0x00a0:  652d 3931 3331 3430 6537 3636 3738 0000  e-913140e76678..\n//\t0x00b0:  1c00 01\nvar testPPPGREIPv4IPv6VLAN = []byte{\n\t0xc5, 0x00, 0x00, 0x00, 0x82, 0xc4, 0x00, 0x12, 0x1e, 0xf2, 0x61, 0x3d, 0x81, 0x00, 0x00, 0x64,\n\t0x86, 0xdd, 0x60, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x04, 0xf6, 0x24, 0x02, 0xf0, 0x00, 0x00, 0x01,\n\t0x8e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x26, 0x07, 0xfc, 0xd0, 0x01, 0x00,\n\t0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x08, 0x2a, 0x6b, 0x45, 0x00, 0x00, 0x8b, 0x8c, 0xaf,\n\t0x00, 0x00, 0x40, 0x2f, 0x75, 0xfe, 0x10, 0x00, 0x00, 0xc8, 0xc0, 0x34, 0xa6, 0x9a, 0x30, 0x81,\n\t0x88, 0x0b, 0x00, 0x67, 0x17, 0x80, 0x00, 0x06, 0x8f, 0xb1, 0x00, 0x08, 0x3a, 0x76, 0xff, 0x03,\n\t0x00, 0x21, 0x45, 0x00, 0x00, 0x63, 0x00, 0x00, 0x40, 0x00, 0x3c, 0x11, 0x56, 0x67, 0xac, 0x10,\n\t0x2c, 0x03, 0x08, 0x08, 0x08, 0x08, 0x9f, 0x40, 0x00, 0x35, 0x00, 0x4f, 0xfb, 0x9f, 0xa6, 0x2c,\n\t0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x78, 0x71, 0x74, 0x2d, 0x64,\n\t0x65, 0x74, 0x65, 0x63, 0x74, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x32, 0x2d, 0x39, 0x37, 0x37, 0x31,\n\t0x32, 0x65, 0x38, 0x38, 0x2d, 0x31, 0x36, 0x37, 0x61, 0x2d, 0x34, 0x35, 0x62, 0x39, 0x2d, 0x39,\n\t0x33, 0x65, 0x65, 0x2d, 0x39, 0x31, 0x33, 0x31, 0x34, 0x30, 0x65, 0x37, 0x36, 0x36, 0x37, 0x38,\n\t0x00, 0x00, 0x1c, 0x00, 0x01,\n}\n\nfunc TestPPPGREIPv4IPv6VLAN(t *testing.T) {\n\tp := gopacket.NewPacket(testPPPGREIPv4IPv6VLAN, LinkTypeEthernet, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{\n\t\tLayerTypeEthernet,\n\t\tLayerTypeDot1Q,\n\t\tLayerTypeIPv6,\n\t\tLayerTypeIPv4,\n\t\tLayerTypeGRE,\n\t\tLayerTypePPP,\n\t\tLayerTypeIPv4,\n\t\tLayerTypeUDP,\n\t\tLayerTypeDNS,\n\t}, t)\n\ttestSerialization(t, p, testPPPGREIPv4IPv6VLAN)\n}\n\n// testPPPoEICMPv6 is the packet:\n//   07:43:31.091560 PPPoE  [ses 0x11] IP6 fe80::c801:eff:fe88:8 > ff02::1: ICMP6, neighbor advertisement, tgt is fe80::c801:eff:fe88:8, length 24\n//      0x0000:  cc05 0e88 0000 ca01 0e88 0006 8864 1100  .............d..\n//      0x0010:  0011 0042 0057 6e00 0000 0018 3aff fe80  ...B.Wn.....:...\n//      0x0020:  0000 0000 0000 c801 0eff fe88 0008 ff02  ................\n//      0x0030:  0000 0000 0000 0000 0000 0000 0001 8800  ................\n//      0x0040:  5083 8000 0000 fe80 0000 0000 0000 c801  P...............\n//      0x0050:  0eff fe88 0008                           ......\nvar testPPPoEICMPv6 = []byte{\n\t0xcc, 0x05, 0x0e, 0x88, 0x00, 0x00, 0xca, 0x01, 0x0e, 0x88, 0x00, 0x06, 0x88, 0x64, 0x11, 0x00,\n\t0x00, 0x11, 0x00, 0x42, 0x00, 0x57, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3a, 0xff, 0xfe, 0x80,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x01, 0x0e, 0xff, 0xfe, 0x88, 0x00, 0x08, 0xff, 0x02,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x88, 0x00,\n\t0x50, 0x83, 0x80, 0x00, 0x00, 0x00, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x01,\n\t0x0e, 0xff, 0xfe, 0x88, 0x00, 0x08,\n}\n\nfunc TestPPPoEICMPv6(t *testing.T) {\n\tp := gopacket.NewPacket(testPPPoEICMPv6, LinkTypeEthernet, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{\n\t\tLayerTypeEthernet,\n\t\tLayerTypePPPoE,\n\t\tLayerTypePPP,\n\t\tLayerTypeIPv6,\n\t\tLayerTypeICMPv6,\n\t\tgopacket.LayerTypePayload,\n\t}, t)\n\ttestSerialization(t, p, testPPPoEICMPv6)\n}\nfunc BenchmarkDecodePPPoEICMPv6(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPPPoEICMPv6, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\nvar testPFLogUDP = []byte{\n\t0x3d, 0x02, 0x00, 0x00, 0x65, 0x6e, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xff, 0xff, 0xff, 0x7f,\n\t0xa0, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xb8, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,\n\t0x45, 0x00, 0x00, 0x2c, 0x02, 0x16, 0x00, 0x00, 0x40, 0x11, 0x4e, 0xb0, 0xac, 0x17, 0xe8, 0xcc,\n\t0xac, 0x17, 0xe8, 0xff, 0xf0, 0xff, 0x21, 0xa4, 0x00, 0x18, 0x2a, 0x25, 0x50, 0x4e, 0x4a, 0x50,\n\t0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestPFLogUDP(t *testing.T) {\n\tp := gopacket.NewPacket(testPFLogUDP, LinkTypePFLog, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{\n\t\tLayerTypePFLog,\n\t\tLayerTypeIPv4,\n\t\tLayerTypeUDP,\n\t\tgopacket.LayerTypePayload,\n\t}, t)\n}\n\nfunc TestRegressionDot1QPriority(t *testing.T) {\n\td := &Dot1Q{\n\t\tPriority: 2,\n\t}\n\tout := gopacket.NewSerializeBuffer()\n\tgopacket.SerializeLayers(out, gopacket.SerializeOptions{}, d)\n\tif err := d.DecodeFromBytes(out.Bytes(), gopacket.NilDecodeFeedback); err != nil {\n\t\tt.Errorf(\"could not decode encoded dot1q\")\n\t} else if d.Priority != 2 {\n\t\tt.Errorf(\"priority mismatch, want 2 got %d\", d.Priority)\n\t}\n}\n\n// testPacketMPLSInMPLS is the packet:\n//   15:27:44.753678 MPLS (label 18, exp 0, ttl 255) (label 16, exp 0, [S], ttl\n//   255) IP 10.31.0.1 > 10.34.0.1: ICMP echo request, id 3941, seq 4768, length\n//   80\n//      0x0000:  0030 96e6 fc39 0030 9605 2838 8847 0001  .0...9.0..(8.G..\n//      0x0010:  20ff 0001 01ff 4500 0064 0050 0000 ff01  ......E..d.P....\n//      0x0020:  a706 0a1f 0001 0a22 0001 0800 bd11 0f65  .......\".......e\n//      0x0030:  12a0 0000 0000 0053 9ee0 abcd abcd abcd  .......S........\n//      0x0040:  abcd abcd abcd abcd abcd abcd abcd abcd  ................\n//      0x0050:  abcd abcd abcd abcd abcd abcd abcd abcd  ................\n//      0x0060:  abcd abcd abcd abcd abcd abcd abcd abcd  ................\n//      0x0070:  abcd abcd abcd abcd abcd                 ..........\nvar testPacketMPLSInMPLS = []byte{\n\t0x00, 0x30, 0x96, 0xe6, 0xfc, 0x39, 0x00, 0x30, 0x96, 0x05, 0x28, 0x38, 0x88, 0x47, 0x00, 0x01,\n\t0x20, 0xff, 0x00, 0x01, 0x01, 0xff, 0x45, 0x00, 0x00, 0x64, 0x00, 0x50, 0x00, 0x00, 0xff, 0x01,\n\t0xa7, 0x06, 0x0a, 0x1f, 0x00, 0x01, 0x0a, 0x22, 0x00, 0x01, 0x08, 0x00, 0xbd, 0x11, 0x0f, 0x65,\n\t0x12, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x9e, 0xe0, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n}\n\nfunc TestPacketMPLSInMPLS(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketMPLSInMPLS, LinkTypeEthernet, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{\n\t\tLayerTypeEthernet,\n\t\tLayerTypeMPLS,\n\t\tLayerTypeMPLS,\n\t\tLayerTypeIPv4,\n\t\tLayerTypeICMPv4,\n\t\tgopacket.LayerTypePayload}, t)\n}\n\n// testPacketIPv4Fragmented is the packet:\n//   22:11:26.616090 IP 10.1.1.1.31915 > 129.111.30.27.20197: UDP, length 28\n//      0x0000:  0000 39cf d9cd 0040 33d9 7cfd 0800 4500  ..9....@3.|...E.\n//      0x0010:  0038 00f2 2000 4011 af37 0a01 0101 816f  .8....@..7.....o\n//      0x0020:  1e1b 7cab 4ee5 0024 0000 0000 0000 0000  ..|.N..$........\n//      0x0030:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//      0x0040:  0000 0000 0000                           ......\nvar testPacketIPv4Fragmented = []byte{\n\t0x00, 0x00, 0x39, 0xcf, 0xd9, 0xcd, 0x00, 0x40, 0x33, 0xd9, 0x7c, 0xfd, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x38, 0x00, 0xf2, 0x20, 0x00, 0x40, 0x11, 0xaf, 0x37, 0x0a, 0x01, 0x01, 0x01, 0x81, 0x6f,\n\t0x1e, 0x1b, 0x7c, 0xab, 0x4e, 0xe5, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestPacketIPv4Fragmented(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketIPv4Fragmented, LinkTypeEthernet, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, gopacket.LayerTypeFragment}, t)\n\ttestSerializationWithOpts(t, p, testPacketIPv4Fragmented, gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true})\n}\n\n// TestSCTPChunkBadLength tests for issue #146\nfunc TestSCTPChunkBadLength(t *testing.T) {\n\tdata := []byte(\n\t\t\"0000\\xad9$e\\x11\\xe4\\xaeo\\b\\x00E\\x00\\x018\\xb4\\xa3\" +\n\t\t\t\"\\x00\\x00Y\\x84\\xc4@\\x11gz\\xc0\\xa8\\xee\\x01\\xc0\\xa8\" +\n\t\t\t\"\\xeeD\\x007le\\x03\\x01\\xc0\\f\\xdf\\b\\x01\\x00\\x00\")\n\n\t// this panic'd previously due to a zero length chunk getting\n\t// repeatedly read\n\tgopacket.NewPacket(data, LinkTypeEthernet, gopacket.Default)\n}\n\n// TestSTP\nfunc TestSTP(t *testing.T) {\n\ttestSTPpacket := []byte{\n\t\t0x01, 0x80, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x0E, 0x87, 0x85, 0x04, 0x00, 0x26, 0x42, 0x42,\n\t\t0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x64, 0x00, 0x1C, 0x0E, 0x87, 0x78, 0x00, 0x00, 0x00,\n\t\t0x00, 0x04, 0x80, 0x64, 0x00, 0x1C, 0x0E, 0x87, 0x85, 0x00, 0x80, 0x04, 0x01, 0x00, 0x14, 0x00,\n\t\t0x02, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t}\n\tp := gopacket.NewPacket(testSTPpacket, LinkTypeEthernet, testDecodeOptions)\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeLLC, LayerTypeSTP}, t)\n}\n"
  },
  {
    "path": "layers/dhcp_test.go",
    "content": "// Copyright 2016, Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"net\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc TestDHCPv4EncodeRequest(t *testing.T) {\n\tdhcp := &DHCPv4{Operation: DHCPOpRequest, HardwareType: LinkTypeEthernet, Xid: 0x12345678,\n\t\tClientIP: net.IP{0, 0, 0, 0}, YourClientIP: net.IP{0, 0, 0, 0}, NextServerIP: net.IP{0, 0, 0, 0}, RelayAgentIP: net.IP{0, 0, 0, 0},\n\t\tClientHWAddr: net.HardwareAddr{0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc},\n\t\tServerName:   make([]byte, 64), File: make([]byte, 128)}\n\n\tdhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptMessageType, []byte{byte(DHCPMsgTypeDiscover)}))\n\tdhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptHostname, []byte{'e', 'x', 'a', 'm', 'p', 'l', 'e', '.', 'c', 'o', 'm'}))\n\tdhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptPad, nil))\n\tdhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptParamsRequest,\n\t\t[]byte{byte(DHCPOptSubnetMask), byte(DHCPOptBroadcastAddr), byte(DHCPOptTimeOffset),\n\t\t\tbyte(DHCPOptRouter), byte(DHCPOptDomainName), byte(DHCPOptDNS), byte(DHCPOptDomainSearch),\n\t\t\tbyte(DHCPOptHostname), byte(DHCPOptNetBIOSTCPNS), byte(DHCPOptInterfaceMTU), byte(DHCPOptClasslessStaticRoute),\n\t\t\tbyte(DHCPOptNTPServers)}))\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\terr := gopacket.SerializeLayers(buf, opts, dhcp)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tp2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDHCPv4, testDecodeOptions)\n\tdhcp2 := p2.Layer(LayerTypeDHCPv4).(*DHCPv4)\n\ttestDHCPEqual(t, dhcp, dhcp2)\n}\n\nfunc TestDHCPv4EncodeResponse(t *testing.T) {\n\tdhcp := &DHCPv4{Operation: DHCPOpReply, HardwareType: LinkTypeEthernet, Xid: 0x12345678,\n\t\tClientIP: net.IP{0, 0, 0, 0}, YourClientIP: net.IP{192, 168, 0, 123}, NextServerIP: net.IP{192, 168, 0, 1}, RelayAgentIP: net.IP{0, 0, 0, 0},\n\t\tClientHWAddr: net.HardwareAddr{0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc},\n\t\tServerName:   make([]byte, 64), File: make([]byte, 128)}\n\n\tdhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptMessageType, []byte{byte(DHCPMsgTypeOffer)}))\n\tdhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptSubnetMask, []byte{255, 255, 255, 0}))\n\tdhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptPad, nil))\n\tdhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptT1, []byte{0x00, 0x00, 0x0e, 0x10}))\n\tdhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptT2, []byte{0x00, 0x00, 0x0e, 0x10}))\n\tdhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptLeaseTime, []byte{0x00, 0x00, 0x0e, 0x10}))\n\tdhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptServerID, []byte{192, 168, 0, 1}))\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\terr := gopacket.SerializeLayers(buf, opts, dhcp)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tp2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDHCPv4, testDecodeOptions)\n\tdhcp2 := p2.Layer(LayerTypeDHCPv4).(*DHCPv4)\n\ttestDHCPEqual(t, dhcp, dhcp2)\n}\n\nfunc TestDHCPv4DecodeOption(t *testing.T) {\n\tvar tests = []struct {\n\t\tmsg string\n\t\tbuf []byte\n\t\terr error\n\t}{\n\t\t{\n\t\t\tmsg: \"DHCPOptPad\",\n\t\t\tbuf: []byte{0},\n\t\t\terr: nil,\n\t\t},\n\t\t{\n\t\t\tmsg: \"Option with zero length\",\n\t\t\tbuf: []byte{119, 0},\n\t\t\terr: nil,\n\t\t},\n\t\t{\n\t\t\tmsg: \"Option with maximum length\",\n\t\t\tbuf: bytes.Join([][]byte{\n\t\t\t\t{119, 255},\n\t\t\t\tbytes.Repeat([]byte{0}, 255),\n\t\t\t}, nil),\n\t\t\terr: nil,\n\t\t},\n\t\t{\n\t\t\tmsg: \"Too short option\",\n\t\t\tbuf: []byte{},\n\t\t\terr: DecOptionNotEnoughData,\n\t\t},\n\t\t{\n\t\t\tmsg: \"Too short option when option is not 0 or 255\",\n\t\t\tbuf: []byte{119},\n\t\t\terr: DecOptionNotEnoughData,\n\t\t},\n\t\t{\n\t\t\tmsg: \"Malformed option\",\n\t\t\tbuf: []byte{119, 1},\n\t\t\terr: DecOptionMalformed,\n\t\t},\n\t}\n\n\tfor i := range tests {\n\t\tvar (\n\t\t\topt = new(DHCPOption)\n\t\t\terr = opt.decode(tests[i].buf)\n\t\t)\n\t\tif want, got := tests[i].err, err; want != got {\n\t\t\tt.Errorf(\"[#%v %v] Unexpected error want: %v, got: %v\\n\", i, tests[i].msg, want, err)\n\t\t}\n\t}\n}\n\nfunc testDHCPEqual(t *testing.T, d1, d2 *DHCPv4) {\n\tif d1.Operation != d2.Operation {\n\t\tt.Errorf(\"expected Operation=%s, got %s\", d1.Operation, d2.Operation)\n\t}\n\tif d1.HardwareType != d2.HardwareType {\n\t\tt.Errorf(\"expected HardwareType=%s, got %s\", d1.HardwareType, d2.HardwareType)\n\t}\n\tif d1.HardwareLen != d2.HardwareLen {\n\t\tt.Errorf(\"expected HardwareLen=%v, got %v\", d1.HardwareLen, d2.HardwareLen)\n\t}\n\tif d1.HardwareOpts != d2.HardwareOpts {\n\t\tt.Errorf(\"expected HardwareOpts=%v, got %v\", d1.HardwareOpts, d2.HardwareOpts)\n\t}\n\tif d1.Xid != d2.Xid {\n\t\tt.Errorf(\"expected Xid=%v, got %v\", d1.Xid, d2.Xid)\n\t}\n\tif d1.Secs != d2.Secs {\n\t\tt.Errorf(\"expected Secs=%v, got %v\", d1.Secs, d2.Secs)\n\t}\n\tif d1.Flags != d2.Flags {\n\t\tt.Errorf(\"expected Flags=%v, got %v\", d1.Flags, d2.Flags)\n\t}\n\tif !d1.ClientIP.Equal(d2.ClientIP) {\n\t\tt.Errorf(\"expected ClientIP=%v, got %v\", d1.ClientIP, d2.ClientIP)\n\t}\n\tif !d1.YourClientIP.Equal(d2.YourClientIP) {\n\t\tt.Errorf(\"expected YourClientIP=%v, got %v\", d1.YourClientIP, d2.YourClientIP)\n\t}\n\tif !d1.NextServerIP.Equal(d2.NextServerIP) {\n\t\tt.Errorf(\"expected NextServerIP=%v, got %v\", d1.NextServerIP, d2.NextServerIP)\n\t}\n\tif !d1.RelayAgentIP.Equal(d2.RelayAgentIP) {\n\t\tt.Errorf(\"expected RelayAgentIP=%v, got %v\", d1.RelayAgentIP, d2.RelayAgentIP)\n\t}\n\tif !bytes.Equal(d1.ClientHWAddr, d2.ClientHWAddr) {\n\t\tt.Errorf(\"expected ClientHWAddr=%v, got %v\", d1.ClientHWAddr, d2.ClientHWAddr)\n\t}\n\tif !bytes.Equal(d1.ServerName, d2.ServerName) {\n\t\tt.Errorf(\"expected ServerName=%v, got %v\", d1.ServerName, d2.ServerName)\n\t}\n\tif !bytes.Equal(d1.File, d2.File) {\n\t\tt.Errorf(\"expected File=%v, got %v\", d1.File, d2.File)\n\t}\n\tif len(d1.Options) != len(d2.Options) {\n\t\tt.Errorf(\"expected %d options, got %d\", len(d1.Options), len(d2.Options))\n\t}\n\n\tfor i, o := range d1.Options {\n\t\ttestDHCPOptionEqual(t, i, o, d2.Options[i])\n\t}\n}\n\nfunc testDHCPOptionEqual(t *testing.T, idx int, d1, d2 DHCPOption) {\n\tif d1.Type != d2.Type {\n\t\tt.Errorf(\"expection Options[%d].Type = %s, got %s\", idx, d1.Type, d2.Type)\n\t}\n\tif !bytes.Equal(d1.Data, d2.Data) {\n\t\tt.Errorf(\"expection Options[%d].Data to be = %v, got %v\", idx, d1.Data, d2.Data)\n\t}\n}\n"
  },
  {
    "path": "layers/dhcpv4.go",
    "content": "// Copyright 2016 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// DHCPOp rerprents a bootp operation\ntype DHCPOp byte\n\n// bootp operations\nconst (\n\tDHCPOpRequest DHCPOp = 1\n\tDHCPOpReply   DHCPOp = 2\n)\n\n// String returns a string version of a DHCPOp.\nfunc (o DHCPOp) String() string {\n\tswitch o {\n\tcase DHCPOpRequest:\n\t\treturn \"Request\"\n\tcase DHCPOpReply:\n\t\treturn \"Reply\"\n\tdefault:\n\t\treturn \"Unknown\"\n\t}\n}\n\n// DHCPMsgType represents a DHCP operation\ntype DHCPMsgType byte\n\n// Constants that represent DHCP operations\nconst (\n\tDHCPMsgTypeUnspecified DHCPMsgType = iota\n\tDHCPMsgTypeDiscover\n\tDHCPMsgTypeOffer\n\tDHCPMsgTypeRequest\n\tDHCPMsgTypeDecline\n\tDHCPMsgTypeAck\n\tDHCPMsgTypeNak\n\tDHCPMsgTypeRelease\n\tDHCPMsgTypeInform\n)\n\n// String returns a string version of a DHCPMsgType.\nfunc (o DHCPMsgType) String() string {\n\tswitch o {\n\tcase DHCPMsgTypeUnspecified:\n\t\treturn \"Unspecified\"\n\tcase DHCPMsgTypeDiscover:\n\t\treturn \"Discover\"\n\tcase DHCPMsgTypeOffer:\n\t\treturn \"Offer\"\n\tcase DHCPMsgTypeRequest:\n\t\treturn \"Request\"\n\tcase DHCPMsgTypeDecline:\n\t\treturn \"Decline\"\n\tcase DHCPMsgTypeAck:\n\t\treturn \"Ack\"\n\tcase DHCPMsgTypeNak:\n\t\treturn \"Nak\"\n\tcase DHCPMsgTypeRelease:\n\t\treturn \"Release\"\n\tcase DHCPMsgTypeInform:\n\t\treturn \"Inform\"\n\tdefault:\n\t\treturn \"Unknown\"\n\t}\n}\n\n//DHCPMagic is the RFC 2131 \"magic cooke\" for DHCP.\nvar DHCPMagic uint32 = 0x63825363\n\n// DHCPv4 contains data for a single DHCP packet.\ntype DHCPv4 struct {\n\tBaseLayer\n\tOperation    DHCPOp\n\tHardwareType LinkType\n\tHardwareLen  uint8\n\tHardwareOpts uint8\n\tXid          uint32\n\tSecs         uint16\n\tFlags        uint16\n\tClientIP     net.IP\n\tYourClientIP net.IP\n\tNextServerIP net.IP\n\tRelayAgentIP net.IP\n\tClientHWAddr net.HardwareAddr\n\tServerName   []byte\n\tFile         []byte\n\tOptions      DHCPOptions\n}\n\n// DHCPOptions is used to get nicely printed option lists which would normally\n// be cut off after 5 options.\ntype DHCPOptions []DHCPOption\n\n// String returns a string version of the options list.\nfunc (o DHCPOptions) String() string {\n\tbuf := &bytes.Buffer{}\n\tbuf.WriteByte('[')\n\tfor i, opt := range o {\n\t\tbuf.WriteString(opt.String())\n\t\tif i+1 != len(o) {\n\t\t\tbuf.WriteString(\", \")\n\t\t}\n\t}\n\tbuf.WriteByte(']')\n\treturn buf.String()\n}\n\n// LayerType returns gopacket.LayerTypeDHCPv4\nfunc (d *DHCPv4) LayerType() gopacket.LayerType { return LayerTypeDHCPv4 }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (d *DHCPv4) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 240 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"DHCPv4 length %d too short\", len(data))\n\t}\n\td.Options = d.Options[:0]\n\td.Operation = DHCPOp(data[0])\n\td.HardwareType = LinkType(data[1])\n\td.HardwareLen = data[2]\n\td.HardwareOpts = data[3]\n\td.Xid = binary.BigEndian.Uint32(data[4:8])\n\td.Secs = binary.BigEndian.Uint16(data[8:10])\n\td.Flags = binary.BigEndian.Uint16(data[10:12])\n\td.ClientIP = net.IP(data[12:16])\n\td.YourClientIP = net.IP(data[16:20])\n\td.NextServerIP = net.IP(data[20:24])\n\td.RelayAgentIP = net.IP(data[24:28])\n\td.ClientHWAddr = net.HardwareAddr(data[28 : 28+d.HardwareLen])\n\td.ServerName = data[44:108]\n\td.File = data[108:236]\n\tif binary.BigEndian.Uint32(data[236:240]) != DHCPMagic {\n\t\treturn InvalidMagicCookie\n\t}\n\n\tif len(data) <= 240 {\n\t\t// DHCP Packet could have no option (??)\n\t\treturn nil\n\t}\n\n\toptions := data[240:]\n\n\tstop := len(options)\n\tstart := 0\n\tfor start < stop {\n\t\to := DHCPOption{}\n\t\tif err := o.decode(options[start:]); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif o.Type == DHCPOptEnd {\n\t\t\tbreak\n\t\t}\n\t\td.Options = append(d.Options, o)\n\t\t// Check if the option is a single byte pad\n\t\tif o.Type == DHCPOptPad {\n\t\t\tstart++\n\t\t} else {\n\t\t\tstart += int(o.Length) + 2\n\t\t}\n\t}\n\n\td.Contents = data\n\n\treturn nil\n}\n\n// Len returns the length of a DHCPv4 packet.\nfunc (d *DHCPv4) Len() uint16 {\n\tn := uint16(240)\n\tfor _, o := range d.Options {\n\t\tif o.Type == DHCPOptPad {\n\t\t\tn++\n\t\t} else {\n\t\t\tn += uint16(o.Length) + 2\n\t\t}\n\t}\n\tn++ // for opt end\n\treturn n\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (d *DHCPv4) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tplen := int(d.Len())\n\n\tdata, err := b.PrependBytes(plen)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdata[0] = byte(d.Operation)\n\tdata[1] = byte(d.HardwareType)\n\tif opts.FixLengths {\n\t\td.HardwareLen = uint8(len(d.ClientHWAddr))\n\t}\n\tdata[2] = d.HardwareLen\n\tdata[3] = d.HardwareOpts\n\tbinary.BigEndian.PutUint32(data[4:8], d.Xid)\n\tbinary.BigEndian.PutUint16(data[8:10], d.Secs)\n\tbinary.BigEndian.PutUint16(data[10:12], d.Flags)\n\tcopy(data[12:16], d.ClientIP.To4())\n\tcopy(data[16:20], d.YourClientIP.To4())\n\tcopy(data[20:24], d.NextServerIP.To4())\n\tcopy(data[24:28], d.RelayAgentIP.To4())\n\tcopy(data[28:44], d.ClientHWAddr)\n\tcopy(data[44:108], d.ServerName)\n\tcopy(data[108:236], d.File)\n\tbinary.BigEndian.PutUint32(data[236:240], DHCPMagic)\n\n\tif len(d.Options) > 0 {\n\t\toffset := 240\n\t\tfor _, o := range d.Options {\n\t\t\tif err := o.encode(data[offset:]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t// A pad option is only a single byte\n\t\t\tif o.Type == DHCPOptPad {\n\t\t\t\toffset++\n\t\t\t} else {\n\t\t\t\toffset += 2 + len(o.Data)\n\t\t\t}\n\t\t}\n\t\toptend := NewDHCPOption(DHCPOptEnd, nil)\n\t\tif err := optend.encode(data[offset:]); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (d *DHCPv4) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDHCPv4\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (d *DHCPv4) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\nfunc decodeDHCPv4(data []byte, p gopacket.PacketBuilder) error {\n\tdhcp := &DHCPv4{}\n\terr := dhcp.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(dhcp)\n\treturn p.NextDecoder(gopacket.LayerTypePayload)\n}\n\n// DHCPOpt represents a DHCP option or parameter from RFC-2132\ntype DHCPOpt byte\n\n// Constants for the DHCPOpt options.\nconst (\n\tDHCPOptPad                   DHCPOpt = 0\n\tDHCPOptSubnetMask            DHCPOpt = 1   // 4, net.IP\n\tDHCPOptTimeOffset            DHCPOpt = 2   // 4, int32 (signed seconds from UTC)\n\tDHCPOptRouter                DHCPOpt = 3   // n*4, [n]net.IP\n\tDHCPOptTimeServer            DHCPOpt = 4   // n*4, [n]net.IP\n\tDHCPOptNameServer            DHCPOpt = 5   // n*4, [n]net.IP\n\tDHCPOptDNS                   DHCPOpt = 6   // n*4, [n]net.IP\n\tDHCPOptLogServer             DHCPOpt = 7   // n*4, [n]net.IP\n\tDHCPOptCookieServer          DHCPOpt = 8   // n*4, [n]net.IP\n\tDHCPOptLPRServer             DHCPOpt = 9   // n*4, [n]net.IP\n\tDHCPOptImpressServer         DHCPOpt = 10  // n*4, [n]net.IP\n\tDHCPOptResLocServer          DHCPOpt = 11  // n*4, [n]net.IP\n\tDHCPOptHostname              DHCPOpt = 12  // n, string\n\tDHCPOptBootfileSize          DHCPOpt = 13  // 2, uint16\n\tDHCPOptMeritDumpFile         DHCPOpt = 14  // >1, string\n\tDHCPOptDomainName            DHCPOpt = 15  // n, string\n\tDHCPOptSwapServer            DHCPOpt = 16  // n*4, [n]net.IP\n\tDHCPOptRootPath              DHCPOpt = 17  // n, string\n\tDHCPOptExtensionsPath        DHCPOpt = 18  // n, string\n\tDHCPOptIPForwarding          DHCPOpt = 19  // 1, bool\n\tDHCPOptSourceRouting         DHCPOpt = 20  // 1, bool\n\tDHCPOptPolicyFilter          DHCPOpt = 21  // 8*n, [n]{net.IP/net.IP}\n\tDHCPOptDatagramMTU           DHCPOpt = 22  // 2, uint16\n\tDHCPOptDefaultTTL            DHCPOpt = 23  // 1, byte\n\tDHCPOptPathMTUAgingTimeout   DHCPOpt = 24  // 4, uint32\n\tDHCPOptPathPlateuTableOption DHCPOpt = 25  // 2*n, []uint16\n\tDHCPOptInterfaceMTU          DHCPOpt = 26  // 2, uint16\n\tDHCPOptAllSubsLocal          DHCPOpt = 27  // 1, bool\n\tDHCPOptBroadcastAddr         DHCPOpt = 28  // 4, net.IP\n\tDHCPOptMaskDiscovery         DHCPOpt = 29  // 1, bool\n\tDHCPOptMaskSupplier          DHCPOpt = 30  // 1, bool\n\tDHCPOptRouterDiscovery       DHCPOpt = 31  // 1, bool\n\tDHCPOptSolicitAddr           DHCPOpt = 32  // 4, net.IP\n\tDHCPOptStaticRoute           DHCPOpt = 33  // n*8, [n]{net.IP/net.IP} -- note the 2nd is router not mask\n\tDHCPOptARPTrailers           DHCPOpt = 34  // 1, bool\n\tDHCPOptARPTimeout            DHCPOpt = 35  // 4, uint32\n\tDHCPOptEthernetEncap         DHCPOpt = 36  // 1, bool\n\tDHCPOptTCPTTL                DHCPOpt = 37  // 1, byte\n\tDHCPOptTCPKeepAliveInt       DHCPOpt = 38  // 4, uint32\n\tDHCPOptTCPKeepAliveGarbage   DHCPOpt = 39  // 1, bool\n\tDHCPOptNISDomain             DHCPOpt = 40  // n, string\n\tDHCPOptNISServers            DHCPOpt = 41  // 4*n,  [n]net.IP\n\tDHCPOptNTPServers            DHCPOpt = 42  // 4*n, [n]net.IP\n\tDHCPOptVendorOption          DHCPOpt = 43  // n, [n]byte // may be encapsulated.\n\tDHCPOptNetBIOSTCPNS          DHCPOpt = 44  // 4*n, [n]net.IP\n\tDHCPOptNetBIOSTCPDDS         DHCPOpt = 45  // 4*n, [n]net.IP\n\tDHCPOptNETBIOSTCPNodeType    DHCPOpt = 46  // 1, magic byte\n\tDHCPOptNetBIOSTCPScope       DHCPOpt = 47  // n, string\n\tDHCPOptXFontServer           DHCPOpt = 48  // n, string\n\tDHCPOptXDisplayManager       DHCPOpt = 49  // n, string\n\tDHCPOptRequestIP             DHCPOpt = 50  // 4, net.IP\n\tDHCPOptLeaseTime             DHCPOpt = 51  // 4, uint32\n\tDHCPOptExtOptions            DHCPOpt = 52  // 1, 1/2/3\n\tDHCPOptMessageType           DHCPOpt = 53  // 1, 1-7\n\tDHCPOptServerID              DHCPOpt = 54  // 4, net.IP\n\tDHCPOptParamsRequest         DHCPOpt = 55  // n, []byte\n\tDHCPOptMessage               DHCPOpt = 56  // n, 3\n\tDHCPOptMaxMessageSize        DHCPOpt = 57  // 2, uint16\n\tDHCPOptT1                    DHCPOpt = 58  // 4, uint32\n\tDHCPOptT2                    DHCPOpt = 59  // 4, uint32\n\tDHCPOptClassID               DHCPOpt = 60  // n, []byte\n\tDHCPOptClientID              DHCPOpt = 61  // n >=  2, []byte\n\tDHCPOptDomainSearch          DHCPOpt = 119 // n, string\n\tDHCPOptSIPServers            DHCPOpt = 120 // n, url\n\tDHCPOptClasslessStaticRoute  DHCPOpt = 121 //\n\tDHCPOptMUDURLV4              DHCPOpt = 161 // n, string\n\tDHCPOptEnd                   DHCPOpt = 255\n)\n\n// String returns a string version of a DHCPOpt.\nfunc (o DHCPOpt) String() string {\n\tswitch o {\n\tcase DHCPOptPad:\n\t\treturn \"(padding)\"\n\tcase DHCPOptSubnetMask:\n\t\treturn \"SubnetMask\"\n\tcase DHCPOptTimeOffset:\n\t\treturn \"TimeOffset\"\n\tcase DHCPOptRouter:\n\t\treturn \"Router\"\n\tcase DHCPOptTimeServer:\n\t\treturn \"rfc868\" // old time server protocol stringified to dissuade confusion w. NTP\n\tcase DHCPOptNameServer:\n\t\treturn \"ien116\" // obscure nameserver protocol stringified to dissuade confusion w. DNS\n\tcase DHCPOptDNS:\n\t\treturn \"DNS\"\n\tcase DHCPOptLogServer:\n\t\treturn \"mitLCS\" // MIT LCS server protocol yada yada w. Syslog\n\tcase DHCPOptCookieServer:\n\t\treturn \"CookieServer\"\n\tcase DHCPOptLPRServer:\n\t\treturn \"LPRServer\"\n\tcase DHCPOptImpressServer:\n\t\treturn \"ImpressServer\"\n\tcase DHCPOptResLocServer:\n\t\treturn \"ResourceLocationServer\"\n\tcase DHCPOptHostname:\n\t\treturn \"Hostname\"\n\tcase DHCPOptBootfileSize:\n\t\treturn \"BootfileSize\"\n\tcase DHCPOptMeritDumpFile:\n\t\treturn \"MeritDumpFile\"\n\tcase DHCPOptDomainName:\n\t\treturn \"DomainName\"\n\tcase DHCPOptSwapServer:\n\t\treturn \"SwapServer\"\n\tcase DHCPOptRootPath:\n\t\treturn \"RootPath\"\n\tcase DHCPOptExtensionsPath:\n\t\treturn \"ExtensionsPath\"\n\tcase DHCPOptIPForwarding:\n\t\treturn \"IPForwarding\"\n\tcase DHCPOptSourceRouting:\n\t\treturn \"SourceRouting\"\n\tcase DHCPOptPolicyFilter:\n\t\treturn \"PolicyFilter\"\n\tcase DHCPOptDatagramMTU:\n\t\treturn \"DatagramMTU\"\n\tcase DHCPOptDefaultTTL:\n\t\treturn \"DefaultTTL\"\n\tcase DHCPOptPathMTUAgingTimeout:\n\t\treturn \"PathMTUAgingTimeout\"\n\tcase DHCPOptPathPlateuTableOption:\n\t\treturn \"PathPlateuTableOption\"\n\tcase DHCPOptInterfaceMTU:\n\t\treturn \"InterfaceMTU\"\n\tcase DHCPOptAllSubsLocal:\n\t\treturn \"AllSubsLocal\"\n\tcase DHCPOptBroadcastAddr:\n\t\treturn \"BroadcastAddress\"\n\tcase DHCPOptMaskDiscovery:\n\t\treturn \"MaskDiscovery\"\n\tcase DHCPOptMaskSupplier:\n\t\treturn \"MaskSupplier\"\n\tcase DHCPOptRouterDiscovery:\n\t\treturn \"RouterDiscovery\"\n\tcase DHCPOptSolicitAddr:\n\t\treturn \"SolicitAddr\"\n\tcase DHCPOptStaticRoute:\n\t\treturn \"StaticRoute\"\n\tcase DHCPOptARPTrailers:\n\t\treturn \"ARPTrailers\"\n\tcase DHCPOptARPTimeout:\n\t\treturn \"ARPTimeout\"\n\tcase DHCPOptEthernetEncap:\n\t\treturn \"EthernetEncap\"\n\tcase DHCPOptTCPTTL:\n\t\treturn \"TCPTTL\"\n\tcase DHCPOptTCPKeepAliveInt:\n\t\treturn \"TCPKeepAliveInt\"\n\tcase DHCPOptTCPKeepAliveGarbage:\n\t\treturn \"TCPKeepAliveGarbage\"\n\tcase DHCPOptNISDomain:\n\t\treturn \"NISDomain\"\n\tcase DHCPOptNISServers:\n\t\treturn \"NISServers\"\n\tcase DHCPOptNTPServers:\n\t\treturn \"NTPServers\"\n\tcase DHCPOptVendorOption:\n\t\treturn \"VendorOption\"\n\tcase DHCPOptNetBIOSTCPNS:\n\t\treturn \"NetBIOSOverTCPNS\"\n\tcase DHCPOptNetBIOSTCPDDS:\n\t\treturn \"NetBiosOverTCPDDS\"\n\tcase DHCPOptNETBIOSTCPNodeType:\n\t\treturn \"NetBIOSOverTCPNodeType\"\n\tcase DHCPOptNetBIOSTCPScope:\n\t\treturn \"NetBIOSOverTCPScope\"\n\tcase DHCPOptXFontServer:\n\t\treturn \"XFontServer\"\n\tcase DHCPOptXDisplayManager:\n\t\treturn \"XDisplayManager\"\n\tcase DHCPOptEnd:\n\t\treturn \"(end)\"\n\tcase DHCPOptSIPServers:\n\t\treturn \"SipServers\"\n\tcase DHCPOptRequestIP:\n\t\treturn \"RequestIP\"\n\tcase DHCPOptLeaseTime:\n\t\treturn \"LeaseTime\"\n\tcase DHCPOptExtOptions:\n\t\treturn \"ExtOpts\"\n\tcase DHCPOptMessageType:\n\t\treturn \"MessageType\"\n\tcase DHCPOptServerID:\n\t\treturn \"ServerID\"\n\tcase DHCPOptParamsRequest:\n\t\treturn \"ParamsRequest\"\n\tcase DHCPOptMessage:\n\t\treturn \"Message\"\n\tcase DHCPOptMaxMessageSize:\n\t\treturn \"MaxDHCPSize\"\n\tcase DHCPOptT1:\n\t\treturn \"Timer1\"\n\tcase DHCPOptT2:\n\t\treturn \"Timer2\"\n\tcase DHCPOptClassID:\n\t\treturn \"ClassID\"\n\tcase DHCPOptClientID:\n\t\treturn \"ClientID\"\n\tcase DHCPOptDomainSearch:\n\t\treturn \"DomainSearch\"\n\tcase DHCPOptClasslessStaticRoute:\n\t\treturn \"ClasslessStaticRoute\"\n\tcase DHCPOptMUDURLV4:\n\t\treturn \"ManufacturerUsageDescriptionURL\"\n\tdefault:\n\t\treturn \"Unknown\"\n\t}\n}\n\n// DHCPOption rerpresents a DHCP option.\ntype DHCPOption struct {\n\tType   DHCPOpt\n\tLength uint8\n\tData   []byte\n}\n\n// String returns a string version of a DHCP Option.\nfunc (o DHCPOption) String() string {\n\tswitch o.Type {\n\n\tcase DHCPOptHostname, DHCPOptMeritDumpFile, DHCPOptDomainName, DHCPOptRootPath,\n\t\tDHCPOptExtensionsPath, DHCPOptNISDomain, DHCPOptNetBIOSTCPScope, DHCPOptXFontServer,\n\t\tDHCPOptXDisplayManager, DHCPOptMessage, DHCPOptDomainSearch: // string\n\t\treturn fmt.Sprintf(\"Option(%s:%s)\", o.Type, string(o.Data))\n\n\tcase DHCPOptMessageType:\n\t\tif len(o.Data) != 1 {\n\t\t\treturn fmt.Sprintf(\"Option(%s:INVALID)\", o.Type)\n\t\t}\n\t\treturn fmt.Sprintf(\"Option(%s:%s)\", o.Type, DHCPMsgType(o.Data[0]))\n\n\tcase DHCPOptSubnetMask, DHCPOptServerID, DHCPOptBroadcastAddr,\n\t\tDHCPOptSolicitAddr, DHCPOptRequestIP: // net.IP\n\t\tif len(o.Data) < 4 {\n\t\t\treturn fmt.Sprintf(\"Option(%s:INVALID)\", o.Type)\n\t\t}\n\t\treturn fmt.Sprintf(\"Option(%s:%s)\", o.Type, net.IP(o.Data))\n\n\tcase DHCPOptT1, DHCPOptT2, DHCPOptLeaseTime, DHCPOptPathMTUAgingTimeout,\n\t\tDHCPOptARPTimeout, DHCPOptTCPKeepAliveInt: // uint32\n\t\tif len(o.Data) != 4 {\n\t\t\treturn fmt.Sprintf(\"Option(%s:INVALID)\", o.Type)\n\t\t}\n\t\treturn fmt.Sprintf(\"Option(%s:%d)\", o.Type,\n\t\t\tuint32(o.Data[0])<<24|uint32(o.Data[1])<<16|uint32(o.Data[2])<<8|uint32(o.Data[3]))\n\n\tcase DHCPOptParamsRequest:\n\t\tbuf := &bytes.Buffer{}\n\t\tbuf.WriteString(fmt.Sprintf(\"Option(%s:\", o.Type))\n\t\tfor i, v := range o.Data {\n\t\t\tbuf.WriteString(DHCPOpt(v).String())\n\t\t\tif i+1 != len(o.Data) {\n\t\t\t\tbuf.WriteByte(',')\n\t\t\t}\n\t\t}\n\t\tbuf.WriteString(\")\")\n\t\treturn buf.String()\n\n\tdefault:\n\t\treturn fmt.Sprintf(\"Option(%s:%v)\", o.Type, o.Data)\n\t}\n}\n\n// NewDHCPOption constructs a new DHCPOption with a given type and data.\nfunc NewDHCPOption(t DHCPOpt, data []byte) DHCPOption {\n\to := DHCPOption{Type: t}\n\tif data != nil {\n\t\to.Data = data\n\t\to.Length = uint8(len(data))\n\t}\n\treturn o\n}\n\nfunc (o *DHCPOption) encode(b []byte) error {\n\tswitch o.Type {\n\tcase DHCPOptPad, DHCPOptEnd:\n\t\tb[0] = byte(o.Type)\n\tdefault:\n\t\tb[0] = byte(o.Type)\n\t\tb[1] = o.Length\n\t\tcopy(b[2:], o.Data)\n\t}\n\treturn nil\n}\n\nfunc (o *DHCPOption) decode(data []byte) error {\n\tif len(data) < 1 {\n\t\t// Pad/End have a length of 1\n\t\treturn DecOptionNotEnoughData\n\t}\n\to.Type = DHCPOpt(data[0])\n\tswitch o.Type {\n\tcase DHCPOptPad, DHCPOptEnd:\n\t\to.Data = nil\n\tdefault:\n\t\tif len(data) < 2 {\n\t\t\treturn DecOptionNotEnoughData\n\t\t}\n\t\to.Length = data[1]\n\t\tif int(o.Length) > len(data[2:]) {\n\t\t\treturn DecOptionMalformed\n\t\t}\n\t\to.Data = data[2 : 2+int(o.Length)]\n\t}\n\treturn nil\n}\n\n// DHCPv4Error is used for constant errors for DHCPv4. It is needed for test asserts.\ntype DHCPv4Error string\n\n// DHCPv4Error implements error interface.\nfunc (d DHCPv4Error) Error() string {\n\treturn string(d)\n}\n\nconst (\n\t// DecOptionNotEnoughData is returned when there is not enough data during option's decode process\n\tDecOptionNotEnoughData = DHCPv4Error(\"Not enough data to decode\")\n\t// DecOptionMalformed is returned when the option is malformed\n\tDecOptionMalformed = DHCPv4Error(\"Option is malformed\")\n\t// InvalidMagicCookie is returned when Magic cookie is missing into BOOTP header\n\tInvalidMagicCookie = DHCPv4Error(\"Bad DHCP header\")\n)\n"
  },
  {
    "path": "layers/dhcpv6.go",
    "content": "// Copyright 2018 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// DHCPv6MsgType represents a DHCPv6 operation\ntype DHCPv6MsgType byte\n\n// Constants that represent DHCP operations\nconst (\n\tDHCPv6MsgTypeUnspecified DHCPv6MsgType = iota\n\tDHCPv6MsgTypeSolicit\n\tDHCPv6MsgTypeAdvertise\n\tDHCPv6MsgTypeRequest\n\tDHCPv6MsgTypeConfirm\n\tDHCPv6MsgTypeRenew\n\tDHCPv6MsgTypeRebind\n\tDHCPv6MsgTypeReply\n\tDHCPv6MsgTypeRelease\n\tDHCPv6MsgTypeDecline\n\tDHCPv6MsgTypeReconfigure\n\tDHCPv6MsgTypeInformationRequest\n\tDHCPv6MsgTypeRelayForward\n\tDHCPv6MsgTypeRelayReply\n)\n\n// String returns a string version of a DHCPv6MsgType.\nfunc (o DHCPv6MsgType) String() string {\n\tswitch o {\n\tcase DHCPv6MsgTypeUnspecified:\n\t\treturn \"Unspecified\"\n\tcase DHCPv6MsgTypeSolicit:\n\t\treturn \"Solicit\"\n\tcase DHCPv6MsgTypeAdvertise:\n\t\treturn \"Advertise\"\n\tcase DHCPv6MsgTypeRequest:\n\t\treturn \"Request\"\n\tcase DHCPv6MsgTypeConfirm:\n\t\treturn \"Confirm\"\n\tcase DHCPv6MsgTypeRenew:\n\t\treturn \"Renew\"\n\tcase DHCPv6MsgTypeRebind:\n\t\treturn \"Rebind\"\n\tcase DHCPv6MsgTypeReply:\n\t\treturn \"Reply\"\n\tcase DHCPv6MsgTypeRelease:\n\t\treturn \"Release\"\n\tcase DHCPv6MsgTypeDecline:\n\t\treturn \"Decline\"\n\tcase DHCPv6MsgTypeReconfigure:\n\t\treturn \"Reconfigure\"\n\tcase DHCPv6MsgTypeInformationRequest:\n\t\treturn \"InformationRequest\"\n\tcase DHCPv6MsgTypeRelayForward:\n\t\treturn \"RelayForward\"\n\tcase DHCPv6MsgTypeRelayReply:\n\t\treturn \"RelayReply\"\n\tdefault:\n\t\treturn \"Unknown\"\n\t}\n}\n\n// DHCPv6 contains data for a single DHCP packet.\ntype DHCPv6 struct {\n\tBaseLayer\n\tMsgType       DHCPv6MsgType\n\tHopCount      uint8\n\tLinkAddr      net.IP\n\tPeerAddr      net.IP\n\tTransactionID []byte\n\tOptions       DHCPv6Options\n}\n\n// LayerType returns gopacket.LayerTypeDHCPv6\nfunc (d *DHCPv6) LayerType() gopacket.LayerType { return LayerTypeDHCPv6 }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (d *DHCPv6) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 4 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"DHCPv6 length %d too short\", len(data))\n\t}\n\td.BaseLayer = BaseLayer{Contents: data}\n\td.Options = d.Options[:0]\n\td.MsgType = DHCPv6MsgType(data[0])\n\n\toffset := 0\n\tif d.MsgType == DHCPv6MsgTypeRelayForward || d.MsgType == DHCPv6MsgTypeRelayReply {\n\t\tif len(data) < 34 {\n\t\t\tdf.SetTruncated()\n\t\t\treturn fmt.Errorf(\"DHCPv6 length %d too short for message type %d\", len(data), d.MsgType)\n\t\t}\n\t\td.HopCount = data[1]\n\t\td.LinkAddr = net.IP(data[2:18])\n\t\td.PeerAddr = net.IP(data[18:34])\n\t\toffset = 34\n\t} else {\n\t\td.TransactionID = data[1:4]\n\t\toffset = 4\n\t}\n\n\tstop := len(data)\n\tfor offset < stop {\n\t\to := DHCPv6Option{}\n\t\tif err := o.decode(data[offset:]); err != nil {\n\t\t\treturn err\n\t\t}\n\t\td.Options = append(d.Options, o)\n\t\toffset += int(o.Length) + 4 // 2 from option code, 2 from option length\n\t}\n\n\treturn nil\n}\n\n// Len returns the length of a DHCPv6 packet.\nfunc (d *DHCPv6) Len() int {\n\tn := 1\n\tif d.MsgType == DHCPv6MsgTypeRelayForward || d.MsgType == DHCPv6MsgTypeRelayReply {\n\t\tn += 33\n\t} else {\n\t\tn += 3\n\t}\n\n\tfor _, o := range d.Options {\n\t\tn += int(o.Length) + 4 // 2 from option code, 2 from option length\n\t}\n\n\treturn n\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (d *DHCPv6) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tplen := int(d.Len())\n\n\tdata, err := b.PrependBytes(plen)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\toffset := 0\n\tdata[0] = byte(d.MsgType)\n\tif d.MsgType == DHCPv6MsgTypeRelayForward || d.MsgType == DHCPv6MsgTypeRelayReply {\n\t\tdata[1] = byte(d.HopCount)\n\t\tcopy(data[2:18], d.LinkAddr.To16())\n\t\tcopy(data[18:34], d.PeerAddr.To16())\n\t\toffset = 34\n\t} else {\n\t\tcopy(data[1:4], d.TransactionID)\n\t\toffset = 4\n\t}\n\n\tif len(d.Options) > 0 {\n\t\tfor _, o := range d.Options {\n\t\t\tif err := o.encode(data[offset:], opts); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\toffset += int(o.Length) + 4 // 2 from option code, 2 from option length\n\t\t}\n\t}\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (d *DHCPv6) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDHCPv6\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (d *DHCPv6) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\nfunc decodeDHCPv6(data []byte, p gopacket.PacketBuilder) error {\n\tdhcp := &DHCPv6{}\n\terr := dhcp.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(dhcp)\n\treturn p.NextDecoder(gopacket.LayerTypePayload)\n}\n\n// DHCPv6StatusCode represents a DHCP status code - RFC-3315\ntype DHCPv6StatusCode uint16\n\n// Constants for the DHCPv6StatusCode.\nconst (\n\tDHCPv6StatusCodeSuccess DHCPv6StatusCode = iota\n\tDHCPv6StatusCodeUnspecFail\n\tDHCPv6StatusCodeNoAddrsAvail\n\tDHCPv6StatusCodeNoBinding\n\tDHCPv6StatusCodeNotOnLink\n\tDHCPv6StatusCodeUseMulticast\n)\n\n// String returns a string version of a DHCPv6StatusCode.\nfunc (o DHCPv6StatusCode) String() string {\n\tswitch o {\n\tcase DHCPv6StatusCodeSuccess:\n\t\treturn \"Success\"\n\tcase DHCPv6StatusCodeUnspecFail:\n\t\treturn \"UnspecifiedFailure\"\n\tcase DHCPv6StatusCodeNoAddrsAvail:\n\t\treturn \"NoAddressAvailable\"\n\tcase DHCPv6StatusCodeNoBinding:\n\t\treturn \"NoBinding\"\n\tcase DHCPv6StatusCodeNotOnLink:\n\t\treturn \"NotOnLink\"\n\tcase DHCPv6StatusCodeUseMulticast:\n\t\treturn \"UseMulticast\"\n\tdefault:\n\t\treturn \"Unknown\"\n\t}\n}\n\n// DHCPv6DUIDType represents a DHCP DUID - RFC-3315\ntype DHCPv6DUIDType uint16\n\n// Constants for the DHCPv6DUIDType.\nconst (\n\tDHCPv6DUIDTypeLLT DHCPv6DUIDType = iota + 1\n\tDHCPv6DUIDTypeEN\n\tDHCPv6DUIDTypeLL\n)\n\n// String returns a string version of a DHCPv6DUIDType.\nfunc (o DHCPv6DUIDType) String() string {\n\tswitch o {\n\tcase DHCPv6DUIDTypeLLT:\n\t\treturn \"LLT\"\n\tcase DHCPv6DUIDTypeEN:\n\t\treturn \"EN\"\n\tcase DHCPv6DUIDTypeLL:\n\t\treturn \"LL\"\n\tdefault:\n\t\treturn \"Unknown\"\n\t}\n}\n\n// DHCPv6DUID means DHCP Unique Identifier as stated in RFC 3315, section 9 (https://tools.ietf.org/html/rfc3315#page-19)\ntype DHCPv6DUID struct {\n\tType DHCPv6DUIDType\n\t// LLT, LL\n\tHardwareType []byte\n\t// EN\n\tEnterpriseNumber []byte\n\t// LLT\n\tTime []byte\n\t// LLT, LL\n\tLinkLayerAddress net.HardwareAddr\n\t// EN\n\tIdentifier []byte\n}\n\n// DecodeFromBytes decodes the given bytes into a DHCPv6DUID\nfunc (d *DHCPv6DUID) DecodeFromBytes(data []byte) error {\n\tif len(data) < 2 {\n\t\treturn fmt.Errorf(\"Not enough bytes to decode: %d\", len(data))\n\t}\n\n\td.Type = DHCPv6DUIDType(binary.BigEndian.Uint16(data[:2]))\n\tif d.Type == DHCPv6DUIDTypeLLT || d.Type == DHCPv6DUIDTypeLL {\n\t\tif len(data) < 4 {\n\t\t\treturn fmt.Errorf(\"Not enough bytes to decode: %d\", len(data))\n\t\t}\n\t\td.HardwareType = data[2:4]\n\t}\n\n\tif d.Type == DHCPv6DUIDTypeLLT {\n\t\tif len(data) < 8 {\n\t\t\treturn fmt.Errorf(\"Not enough bytes to decode: %d\", len(data))\n\t\t}\n\t\td.Time = data[4:8]\n\t\td.LinkLayerAddress = net.HardwareAddr(data[8:])\n\t} else if d.Type == DHCPv6DUIDTypeEN {\n\t\tif len(data) < 6 {\n\t\t\treturn fmt.Errorf(\"Not enough bytes to decode: %d\", len(data))\n\t\t}\n\t\td.EnterpriseNumber = data[2:6]\n\t\td.Identifier = data[6:]\n\t} else { // DHCPv6DUIDTypeLL\n\t\tif len(data) < 4 {\n\t\t\treturn fmt.Errorf(\"Not enough bytes to decode: %d\", len(data))\n\t\t}\n\t\td.LinkLayerAddress = net.HardwareAddr(data[4:])\n\t}\n\n\treturn nil\n}\n\n// Encode encodes the DHCPv6DUID in a slice of bytes\nfunc (d *DHCPv6DUID) Encode() []byte {\n\tlength := d.Len()\n\tdata := make([]byte, length)\n\tbinary.BigEndian.PutUint16(data[0:2], uint16(d.Type))\n\n\tif d.Type == DHCPv6DUIDTypeLLT || d.Type == DHCPv6DUIDTypeLL {\n\t\tcopy(data[2:4], d.HardwareType)\n\t}\n\n\tif d.Type == DHCPv6DUIDTypeLLT {\n\t\tcopy(data[4:8], d.Time)\n\t\tcopy(data[8:], d.LinkLayerAddress)\n\t} else if d.Type == DHCPv6DUIDTypeEN {\n\t\tcopy(data[2:6], d.EnterpriseNumber)\n\t\tcopy(data[6:], d.Identifier)\n\t} else {\n\t\tcopy(data[4:], d.LinkLayerAddress)\n\t}\n\n\treturn data\n}\n\n// Len returns the length of the DHCPv6DUID, respecting the type\nfunc (d *DHCPv6DUID) Len() int {\n\tlength := 2 // d.Type\n\tif d.Type == DHCPv6DUIDTypeLLT {\n\t\tlength += 2 /*HardwareType*/ + 4 /*d.Time*/ + len(d.LinkLayerAddress)\n\t} else if d.Type == DHCPv6DUIDTypeEN {\n\t\tlength += 4 /*d.EnterpriseNumber*/ + len(d.Identifier)\n\t} else { // LL\n\t\tlength += 2 /*d.HardwareType*/ + len(d.LinkLayerAddress)\n\t}\n\n\treturn length\n}\n\nfunc (d *DHCPv6DUID) String() string {\n\tduid := \"Type: \" + d.Type.String() + \", \"\n\tif d.Type == DHCPv6DUIDTypeLLT {\n\t\tduid += fmt.Sprintf(\"HardwareType: %v, Time: %v, LinkLayerAddress: %v\", d.HardwareType, d.Time, d.LinkLayerAddress)\n\t} else if d.Type == DHCPv6DUIDTypeEN {\n\t\tduid += fmt.Sprintf(\"EnterpriseNumber: %v, Identifier: %v\", d.EnterpriseNumber, d.Identifier)\n\t} else { // DHCPv6DUIDTypeLL\n\t\tduid += fmt.Sprintf(\"HardwareType: %v, LinkLayerAddress: %v\", d.HardwareType, d.LinkLayerAddress)\n\t}\n\treturn duid\n}\n\nfunc decodeDHCPv6DUID(data []byte) (*DHCPv6DUID, error) {\n\tduid := &DHCPv6DUID{}\n\terr := duid.DecodeFromBytes(data)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn duid, nil\n}\n"
  },
  {
    "path": "layers/dhcpv6_options.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/google/gopacket\"\n)\n\n// DHCPv6Opt represents a DHCP option or parameter from RFC-3315\ntype DHCPv6Opt uint16\n\n// Constants for the DHCPv6Opt options.\nconst (\n\tDHCPv6OptClientID           DHCPv6Opt = 1\n\tDHCPv6OptServerID           DHCPv6Opt = 2\n\tDHCPv6OptIANA               DHCPv6Opt = 3\n\tDHCPv6OptIATA               DHCPv6Opt = 4\n\tDHCPv6OptIAAddr             DHCPv6Opt = 5\n\tDHCPv6OptOro                DHCPv6Opt = 6\n\tDHCPv6OptPreference         DHCPv6Opt = 7\n\tDHCPv6OptElapsedTime        DHCPv6Opt = 8\n\tDHCPv6OptRelayMessage       DHCPv6Opt = 9\n\tDHCPv6OptAuth               DHCPv6Opt = 11\n\tDHCPv6OptUnicast            DHCPv6Opt = 12\n\tDHCPv6OptStatusCode         DHCPv6Opt = 13\n\tDHCPv6OptRapidCommit        DHCPv6Opt = 14\n\tDHCPv6OptUserClass          DHCPv6Opt = 15\n\tDHCPv6OptVendorClass        DHCPv6Opt = 16\n\tDHCPv6OptVendorOpts         DHCPv6Opt = 17\n\tDHCPv6OptInterfaceID        DHCPv6Opt = 18\n\tDHCPv6OptReconfigureMessage DHCPv6Opt = 19\n\tDHCPv6OptReconfigureAccept  DHCPv6Opt = 20\n\n\t// RFC 3319 Session Initiation Protocol (SIP)\n\tDHCPv6OptSIPServersDomainList  DHCPv6Opt = 21\n\tDHCPv6OptSIPServersAddressList DHCPv6Opt = 22\n\n\t// RFC 3646 DNS Configuration\n\tDHCPv6OptDNSServers DHCPv6Opt = 23\n\tDHCPv6OptDomainList DHCPv6Opt = 24\n\n\t// RFC 3633 Prefix Delegation\n\tDHCPv6OptIAPD     DHCPv6Opt = 25\n\tDHCPv6OptIAPrefix DHCPv6Opt = 26\n\n\t// RFC 3898 Network Information Service (NIS)\n\tDHCPv6OptNISServers     DHCPv6Opt = 27\n\tDHCPv6OptNISPServers    DHCPv6Opt = 28\n\tDHCPv6OptNISDomainName  DHCPv6Opt = 29\n\tDHCPv6OptNISPDomainName DHCPv6Opt = 30\n\n\t// RFC 4075 Simple Network Time Protocol (SNTP)\n\tDHCPv6OptSNTPServers DHCPv6Opt = 31\n\n\t// RFC 4242 Information Refresh Time Option\n\tDHCPv6OptInformationRefreshTime DHCPv6Opt = 32\n\n\t// RFC 4280 Broadcast and Multicast Control Servers\n\tDHCPv6OptBCMCSServerDomainNameList DHCPv6Opt = 33\n\tDHCPv6OptBCMCSServerAddressList    DHCPv6Opt = 34\n\n\t// RFC 4776 Civic Address ConfigurationOption\n\tDHCPv6OptGeoconfCivic DHCPv6Opt = 36\n\n\t// RFC 4649 Relay Agent Remote-ID\n\tDHCPv6OptRemoteID DHCPv6Opt = 37\n\n\t// RFC 4580 Relay Agent Subscriber-ID\n\tDHCPv6OptSubscriberID DHCPv6Opt = 38\n\n\t// RFC 4704 Client Full Qualified Domain Name (FQDN)\n\tDHCPv6OptClientFQDN DHCPv6Opt = 39\n\n\t// RFC 5192 Protocol for Carrying Authentication for Network Access (PANA)\n\tDHCPv6OptPanaAgent DHCPv6Opt = 40\n\n\t// RFC 4833 Timezone Options\n\tDHCPv6OptNewPOSIXTimezone DHCPv6Opt = 41\n\tDHCPv6OptNewTZDBTimezone  DHCPv6Opt = 42\n\n\t// RFC 4994 Relay Agent Echo Request\n\tDHCPv6OptEchoRequestOption DHCPv6Opt = 43\n\n\t// RFC 5007 Leasequery\n\tDHCPv6OptLQQuery      DHCPv6Opt = 44\n\tDHCPv6OptCLTTime      DHCPv6Opt = 45\n\tDHCPv6OptClientData   DHCPv6Opt = 46\n\tDHCPv6OptLQRelayData  DHCPv6Opt = 47\n\tDHCPv6OptLQClientLink DHCPv6Opt = 48\n\n\t// RFC 6610 Home Information Discovery in Mobile IPv6 (MIPv6)\n\tDHCPv6OptMIP6HNIDF DHCPv6Opt = 49\n\tDHCPv6OptMIP6VDINF DHCPv6Opt = 50\n\tDHCPv6OptMIP6IDINF DHCPv6Opt = 69\n\tDHCPv6OptMIP6UDINF DHCPv6Opt = 70\n\tDHCPv6OptMIP6HNP   DHCPv6Opt = 71\n\tDHCPv6OptMIP6HAA   DHCPv6Opt = 72\n\tDHCPv6OptMIP6HAF   DHCPv6Opt = 73\n\n\t// RFC 5223 Discovering Location-to-Service Translation (LoST) Servers\n\tDHCPv6OptV6LOST DHCPv6Opt = 51\n\n\t// RFC 5417 Control And Provisioning of Wireless Access Points (CAPWAP)\n\tDHCPv6OptCAPWAPACV6 DHCPv6Opt = 52\n\n\t// RFC 5460 Bulk Leasequery\n\tDHCPv6OptRelayID DHCPv6Opt = 53\n\n\t// RFC 5678 IEEE 802.21 Mobility Services (MoS) Discovery\n\tDHCPv6OptIPv6AddressMoS DHCPv6Opt = 54\n\tDHCPv6OptIPv6FQDNMoS    DHCPv6Opt = 55\n\n\t// RFC 5908 NTP Server Option\n\tDHCPv6OptNTPServer DHCPv6Opt = 56\n\n\t// RFC 5986 Discovering the Local Location Information Server (LIS)\n\tDHCPv6OptV6AccessDomain DHCPv6Opt = 57\n\n\t// RFC 5986 SIP User Agent\n\tDHCPv6OptSIPUACSList DHCPv6Opt = 58\n\n\t// RFC 5970 Options for Network Boot\n\tDHCPv6OptBootFileURL    DHCPv6Opt = 59\n\tDHCPv6OptBootFileParam  DHCPv6Opt = 60\n\tDHCPv6OptClientArchType DHCPv6Opt = 61\n\tDHCPv6OptNII            DHCPv6Opt = 62\n\n\t// RFC 6225 Coordinate-Based Location Configuration Information\n\tDHCPv6OptGeolocation DHCPv6Opt = 63\n\n\t// RFC 6334 Dual-Stack Lite\n\tDHCPv6OptAFTRName DHCPv6Opt = 64\n\n\t// RFC 6440 EAP Re-authentication Protocol (ERP)\n\tDHCPv6OptERPLocalDomainName DHCPv6Opt = 65\n\n\t// RFC 6422 Relay-Supplied DHCP Options\n\tDHCPv6OptRSOO DHCPv6Opt = 66\n\n\t// RFC 6603 Prefix Exclude Option for DHCPv6-based Prefix Delegation\n\tDHCPv6OptPDExclude DHCPv6Opt = 67\n\n\t// RFC 6607 Virtual Subnet Selection\n\tDHCPv6OptVSS DHCPv6Opt = 68\n\n\t// RFC 6731 Improved Recursive DNS Server Selection for Multi-Interfaced Nodes\n\tDHCPv6OptRDNSSSelection DHCPv6Opt = 74\n\n\t// RFC 6784 Kerberos Options for DHCPv6\n\tDHCPv6OptKRBPrincipalName DHCPv6Opt = 75\n\tDHCPv6OptKRBRealmName     DHCPv6Opt = 76\n\tDHCPv6OptKRBKDC           DHCPv6Opt = 77\n\n\t// RFC 6939 Client Link-Layer Address Option\n\tDHCPv6OptClientLinkLayerAddress DHCPv6Opt = 79\n\n\t// RFC 6977 Triggering DHCPv6 Reconfiguration from Relay Agents\n\tDHCPv6OptLinkAddress DHCPv6Opt = 80\n\n\t// RFC 7037 RADIUS Option for the DHCPv6 Relay Agent\n\tDHCPv6OptRADIUS DHCPv6Opt = 81\n\n\t// RFC 7083 Modification to Default Values of SOL_MAX_RT and INF_MAX_RT\n\tDHCPv6OptSolMaxRt DHCPv6Opt = 82\n\tDHCPv6OptInfMaxRt DHCPv6Opt = 83\n\n\t// RFC 7078 Distributing Address Selection Policy\n\tDHCPv6OptAddrSel      DHCPv6Opt = 84\n\tDHCPv6OptAddrSelTable DHCPv6Opt = 85\n\n\t// RFC 7291 DHCP Options for the Port Control Protocol (PCP)\n\tDHCPv6OptV6PCPServer DHCPv6Opt = 86\n\n\t// RFC 7341 DHCPv4-over-DHCPv6 (DHCP 4o6) Transport\n\tDHCPv6OptDHCPv4Message          DHCPv6Opt = 87\n\tDHCPv6OptDHCPv4OverDHCPv6Server DHCPv6Opt = 88\n\n\t// RFC 7598 Configuration of Softwire Address and Port-Mapped Clients\n\tDHCPv6OptS46Rule           DHCPv6Opt = 89\n\tDHCPv6OptS46BR             DHCPv6Opt = 90\n\tDHCPv6OptS46DMR            DHCPv6Opt = 91\n\tDHCPv6OptS46V4V4Bind       DHCPv6Opt = 92\n\tDHCPv6OptS46PortParameters DHCPv6Opt = 93\n\tDHCPv6OptS46ContMAPE       DHCPv6Opt = 94\n\tDHCPv6OptS46ContMAPT       DHCPv6Opt = 95\n\tDHCPv6OptS46ContLW         DHCPv6Opt = 96\n\n\t// RFC 7600 IPv4 Residual Deployment via IPv6\n\tDHCPv6Opt4RD           DHCPv6Opt = 97\n\tDHCPv6Opt4RDMapRule    DHCPv6Opt = 98\n\tDHCPv6Opt4RDNonMapRule DHCPv6Opt = 99\n\n\t// RFC 7653 Active Leasequery\n\tDHCPv6OptLQBaseTime  DHCPv6Opt = 100\n\tDHCPv6OptLQStartTime DHCPv6Opt = 101\n\tDHCPv6OptLQEndTime   DHCPv6Opt = 102\n\n\t// RFC 7710 Captive-Portal Identification\n\tDHCPv6OptCaptivePortal DHCPv6Opt = 103\n\n\t// RFC 7774 Multicast Protocol for Low-Power and Lossy Networks (MPL) Parameter Configuration\n\tDHCPv6OptMPLParameters DHCPv6Opt = 104\n\n\t// RFC 7839 Access-Network-Identifier (ANI)\n\tDHCPv6OptANIATT           DHCPv6Opt = 105\n\tDHCPv6OptANINetworkName   DHCPv6Opt = 106\n\tDHCPv6OptANIAPName        DHCPv6Opt = 107\n\tDHCPv6OptANIAPBSSID       DHCPv6Opt = 108\n\tDHCPv6OptANIOperatorID    DHCPv6Opt = 109\n\tDHCPv6OptANIOperatorRealm DHCPv6Opt = 110\n\n\t// RFC 8026 Unified IPv4-in-IPv6 Softwire Customer Premises Equipment (CPE)\n\tDHCPv6OptS46Priority DHCPv6Opt = 111\n\n\t// draft-ietf-opsawg-mud-25 Manufacturer Usage Description (MUD)\n\tDHCPv6OptMUDURLV6 DHCPv6Opt = 112\n\n\t// RFC 8115 IPv4-Embedded Multicast and Unicast IPv6 Prefixes\n\tDHCPv6OptV6Prefix64 DHCPv6Opt = 113\n\n\t// RFC 8156 DHCPv6 Failover Protocol\n\tDHCPv6OptFBindingStatus           DHCPv6Opt = 114\n\tDHCPv6OptFConnectFlags            DHCPv6Opt = 115\n\tDHCPv6OptFDNSRemovalInfo          DHCPv6Opt = 116\n\tDHCPv6OptFDNSHostName             DHCPv6Opt = 117\n\tDHCPv6OptFDNSZoneName             DHCPv6Opt = 118\n\tDHCPv6OptFDNSFlags                DHCPv6Opt = 119\n\tDHCPv6OptFExpirationTime          DHCPv6Opt = 120\n\tDHCPv6OptFMaxUnacknowledgedBNDUPD DHCPv6Opt = 121\n\tDHCPv6OptFMCLT                    DHCPv6Opt = 122\n\tDHCPv6OptFPartnerLifetime         DHCPv6Opt = 123\n\tDHCPv6OptFPartnerLifetimeSent     DHCPv6Opt = 124\n\tDHCPv6OptFPartnerDownTime         DHCPv6Opt = 125\n\tDHCPv6OptFPartnerRawCltTime       DHCPv6Opt = 126\n\tDHCPv6OptFProtocolVersion         DHCPv6Opt = 127\n\tDHCPv6OptFKeepaliveTime           DHCPv6Opt = 128\n\tDHCPv6OptFReconfigureData         DHCPv6Opt = 129\n\tDHCPv6OptFRelationshipName        DHCPv6Opt = 130\n\tDHCPv6OptFServerFlags             DHCPv6Opt = 131\n\tDHCPv6OptFServerState             DHCPv6Opt = 132\n\tDHCPv6OptFStartTimeOfState        DHCPv6Opt = 133\n\tDHCPv6OptFStateExpirationTime     DHCPv6Opt = 134\n\n\t// RFC 8357 Generalized UDP Source Port for DHCP Relay\n\tDHCPv6OptRelayPort DHCPv6Opt = 135\n\n\t// draft-ietf-netconf-zerotouch-25 Zero Touch Provisioning for Networking Devices\n\tDHCPv6OptV6ZeroTouchRedirect DHCPv6Opt = 136\n\n\t// RFC 6153 Access Network Discovery and Selection Function (ANDSF) Discovery\n\tDHCPv6OptIPV6AddressANDSF DHCPv6Opt = 143\n)\n\n// String returns a string version of a DHCPv6Opt.\nfunc (o DHCPv6Opt) String() string {\n\tswitch o {\n\tcase DHCPv6OptClientID:\n\t\treturn \"ClientID\"\n\tcase DHCPv6OptServerID:\n\t\treturn \"ServerID\"\n\tcase DHCPv6OptIANA:\n\t\treturn \"IA_NA\"\n\tcase DHCPv6OptIATA:\n\t\treturn \"IA_TA\"\n\tcase DHCPv6OptIAAddr:\n\t\treturn \"IAAddr\"\n\tcase DHCPv6OptOro:\n\t\treturn \"Oro\"\n\tcase DHCPv6OptPreference:\n\t\treturn \"Preference\"\n\tcase DHCPv6OptElapsedTime:\n\t\treturn \"ElapsedTime\"\n\tcase DHCPv6OptRelayMessage:\n\t\treturn \"RelayMessage\"\n\tcase DHCPv6OptAuth:\n\t\treturn \"Auth\"\n\tcase DHCPv6OptUnicast:\n\t\treturn \"Unicast\"\n\tcase DHCPv6OptStatusCode:\n\t\treturn \"StatusCode\"\n\tcase DHCPv6OptRapidCommit:\n\t\treturn \"RapidCommit\"\n\tcase DHCPv6OptUserClass:\n\t\treturn \"UserClass\"\n\tcase DHCPv6OptVendorClass:\n\t\treturn \"VendorClass\"\n\tcase DHCPv6OptVendorOpts:\n\t\treturn \"VendorOpts\"\n\tcase DHCPv6OptInterfaceID:\n\t\treturn \"InterfaceID\"\n\tcase DHCPv6OptReconfigureMessage:\n\t\treturn \"ReconfigureMessage\"\n\tcase DHCPv6OptReconfigureAccept:\n\t\treturn \"ReconfigureAccept\"\n\tcase DHCPv6OptSIPServersDomainList:\n\t\treturn \"SIPServersDomainList\"\n\tcase DHCPv6OptSIPServersAddressList:\n\t\treturn \"SIPServersAddressList\"\n\tcase DHCPv6OptDNSServers:\n\t\treturn \"DNSRecursiveNameServer\"\n\tcase DHCPv6OptDomainList:\n\t\treturn \"DomainSearchList\"\n\tcase DHCPv6OptIAPD:\n\t\treturn \"IdentityAssociationPrefixDelegation\"\n\tcase DHCPv6OptIAPrefix:\n\t\treturn \"IAPDPrefix\"\n\tcase DHCPv6OptNISServers:\n\t\treturn \"NISServers\"\n\tcase DHCPv6OptNISPServers:\n\t\treturn \"NISv2Servers\"\n\tcase DHCPv6OptNISDomainName:\n\t\treturn \"NISDomainName\"\n\tcase DHCPv6OptNISPDomainName:\n\t\treturn \"NISv2DomainName\"\n\tcase DHCPv6OptSNTPServers:\n\t\treturn \"SNTPServers\"\n\tcase DHCPv6OptInformationRefreshTime:\n\t\treturn \"InformationRefreshTime\"\n\tcase DHCPv6OptBCMCSServerDomainNameList:\n\t\treturn \"BCMCSControlServersDomainNameList\"\n\tcase DHCPv6OptBCMCSServerAddressList:\n\t\treturn \"BCMCSControlServersAddressList\"\n\tcase DHCPv6OptGeoconfCivic:\n\t\treturn \"CivicAddress\"\n\tcase DHCPv6OptRemoteID:\n\t\treturn \"RelayAgentRemoteID\"\n\tcase DHCPv6OptSubscriberID:\n\t\treturn \"RelayAgentSubscriberID\"\n\tcase DHCPv6OptClientFQDN:\n\t\treturn \"ClientFQDN\"\n\tcase DHCPv6OptPanaAgent:\n\t\treturn \"PANAAuthenticationAgent\"\n\tcase DHCPv6OptNewPOSIXTimezone:\n\t\treturn \"NewPOSIXTimezone\"\n\tcase DHCPv6OptNewTZDBTimezone:\n\t\treturn \"NewTZDBTimezone\"\n\tcase DHCPv6OptEchoRequestOption:\n\t\treturn \"EchoRequest\"\n\tcase DHCPv6OptLQQuery:\n\t\treturn \"LeasequeryQuery\"\n\tcase DHCPv6OptClientData:\n\t\treturn \"LeasequeryClientData\"\n\tcase DHCPv6OptCLTTime:\n\t\treturn \"LeasequeryClientLastTransactionTime\"\n\tcase DHCPv6OptLQRelayData:\n\t\treturn \"LeasequeryRelayData\"\n\tcase DHCPv6OptLQClientLink:\n\t\treturn \"LeasequeryClientLink\"\n\tcase DHCPv6OptMIP6HNIDF:\n\t\treturn \"MIPv6HomeNetworkIDFQDN\"\n\tcase DHCPv6OptMIP6VDINF:\n\t\treturn \"MIPv6VisitedHomeNetworkInformation\"\n\tcase DHCPv6OptMIP6IDINF:\n\t\treturn \"MIPv6IdentifiedHomeNetworkInformation\"\n\tcase DHCPv6OptMIP6UDINF:\n\t\treturn \"MIPv6UnrestrictedHomeNetworkInformation\"\n\tcase DHCPv6OptMIP6HNP:\n\t\treturn \"MIPv6HomeNetworkPrefix\"\n\tcase DHCPv6OptMIP6HAA:\n\t\treturn \"MIPv6HomeAgentAddress\"\n\tcase DHCPv6OptMIP6HAF:\n\t\treturn \"MIPv6HomeAgentFQDN\"\n\tcase DHCPv6OptV6LOST:\n\t\treturn \"LoST Server\"\n\tcase DHCPv6OptCAPWAPACV6:\n\t\treturn \"CAPWAPAccessControllerV6\"\n\tcase DHCPv6OptRelayID:\n\t\treturn \"LeasequeryRelayID\"\n\tcase DHCPv6OptIPv6AddressMoS:\n\t\treturn \"MoSIPv6Address\"\n\tcase DHCPv6OptIPv6FQDNMoS:\n\t\treturn \"MoSDomainNameList\"\n\tcase DHCPv6OptNTPServer:\n\t\treturn \"NTPServer\"\n\tcase DHCPv6OptV6AccessDomain:\n\t\treturn \"AccessNetworkDomainName\"\n\tcase DHCPv6OptSIPUACSList:\n\t\treturn \"SIPUserAgentConfigurationServiceDomains\"\n\tcase DHCPv6OptBootFileURL:\n\t\treturn \"BootFileURL\"\n\tcase DHCPv6OptBootFileParam:\n\t\treturn \"BootFileParameters\"\n\tcase DHCPv6OptClientArchType:\n\t\treturn \"ClientSystemArchitectureType\"\n\tcase DHCPv6OptNII:\n\t\treturn \"ClientNetworkInterfaceIdentifier\"\n\tcase DHCPv6OptGeolocation:\n\t\treturn \"Geolocation\"\n\tcase DHCPv6OptAFTRName:\n\t\treturn \"AFTRName\"\n\tcase DHCPv6OptERPLocalDomainName:\n\t\treturn \"AFTRName\"\n\tcase DHCPv6OptRSOO:\n\t\treturn \"RSOOption\"\n\tcase DHCPv6OptPDExclude:\n\t\treturn \"PrefixExclude\"\n\tcase DHCPv6OptVSS:\n\t\treturn \"VirtualSubnetSelection\"\n\tcase DHCPv6OptRDNSSSelection:\n\t\treturn \"RDNSSSelection\"\n\tcase DHCPv6OptKRBPrincipalName:\n\t\treturn \"KerberosPrincipalName\"\n\tcase DHCPv6OptKRBRealmName:\n\t\treturn \"KerberosRealmName\"\n\tcase DHCPv6OptKRBKDC:\n\t\treturn \"KerberosKDC\"\n\tcase DHCPv6OptClientLinkLayerAddress:\n\t\treturn \"ClientLinkLayerAddress\"\n\tcase DHCPv6OptLinkAddress:\n\t\treturn \"LinkAddress\"\n\tcase DHCPv6OptRADIUS:\n\t\treturn \"RADIUS\"\n\tcase DHCPv6OptSolMaxRt:\n\t\treturn \"SolMaxRt\"\n\tcase DHCPv6OptInfMaxRt:\n\t\treturn \"InfMaxRt\"\n\tcase DHCPv6OptAddrSel:\n\t\treturn \"AddressSelection\"\n\tcase DHCPv6OptAddrSelTable:\n\t\treturn \"AddressSelectionTable\"\n\tcase DHCPv6OptV6PCPServer:\n\t\treturn \"PCPServer\"\n\tcase DHCPv6OptDHCPv4Message:\n\t\treturn \"DHCPv4Message\"\n\tcase DHCPv6OptDHCPv4OverDHCPv6Server:\n\t\treturn \"DHCP4o6ServerAddress\"\n\tcase DHCPv6OptS46Rule:\n\t\treturn \"S46Rule\"\n\tcase DHCPv6OptS46BR:\n\t\treturn \"S46BR\"\n\tcase DHCPv6OptS46DMR:\n\t\treturn \"S46DMR\"\n\tcase DHCPv6OptS46V4V4Bind:\n\t\treturn \"S46IPv4IPv6AddressBinding\"\n\tcase DHCPv6OptS46PortParameters:\n\t\treturn \"S46PortParameters\"\n\tcase DHCPv6OptS46ContMAPE:\n\t\treturn \"S46MAPEContainer\"\n\tcase DHCPv6OptS46ContMAPT:\n\t\treturn \"S46MAPTContainer\"\n\tcase DHCPv6OptS46ContLW:\n\t\treturn \"S46Lightweight4Over6Container\"\n\tcase DHCPv6Opt4RD:\n\t\treturn \"4RD\"\n\tcase DHCPv6Opt4RDMapRule:\n\t\treturn \"4RDMapRule\"\n\tcase DHCPv6Opt4RDNonMapRule:\n\t\treturn \"4RDNonMapRule\"\n\tcase DHCPv6OptLQBaseTime:\n\t\treturn \"LQBaseTime\"\n\tcase DHCPv6OptLQStartTime:\n\t\treturn \"LQStartTime\"\n\tcase DHCPv6OptLQEndTime:\n\t\treturn \"LQEndTime\"\n\tcase DHCPv6OptCaptivePortal:\n\t\treturn \"CaptivePortal\"\n\tcase DHCPv6OptMPLParameters:\n\t\treturn \"MPLParameterConfiguration\"\n\tcase DHCPv6OptANIATT:\n\t\treturn \"ANIAccessTechnologyType\"\n\tcase DHCPv6OptANINetworkName:\n\t\treturn \"ANINetworkName\"\n\tcase DHCPv6OptANIAPName:\n\t\treturn \"ANIAccessPointName\"\n\tcase DHCPv6OptANIAPBSSID:\n\t\treturn \"ANIAccessPointBSSID\"\n\tcase DHCPv6OptANIOperatorID:\n\t\treturn \"ANIOperatorIdentifier\"\n\tcase DHCPv6OptANIOperatorRealm:\n\t\treturn \"ANIOperatorRealm\"\n\tcase DHCPv6OptS46Priority:\n\t\treturn \"S64Priority\"\n\tcase DHCPv6OptMUDURLV6:\n\t\treturn \"ManufacturerUsageDescriptionURL\"\n\tcase DHCPv6OptV6Prefix64:\n\t\treturn \"V6Prefix64\"\n\tcase DHCPv6OptFBindingStatus:\n\t\treturn \"FailoverBindingStatus\"\n\tcase DHCPv6OptFConnectFlags:\n\t\treturn \"FailoverConnectFlags\"\n\tcase DHCPv6OptFDNSRemovalInfo:\n\t\treturn \"FailoverDNSRemovalInfo\"\n\tcase DHCPv6OptFDNSHostName:\n\t\treturn \"FailoverDNSHostName\"\n\tcase DHCPv6OptFDNSZoneName:\n\t\treturn \"FailoverDNSZoneName\"\n\tcase DHCPv6OptFDNSFlags:\n\t\treturn \"FailoverDNSFlags\"\n\tcase DHCPv6OptFExpirationTime:\n\t\treturn \"FailoverExpirationTime\"\n\tcase DHCPv6OptFMaxUnacknowledgedBNDUPD:\n\t\treturn \"FailoverMaxUnacknowledgedBNDUPDMessages\"\n\tcase DHCPv6OptFMCLT:\n\t\treturn \"FailoverMaximumClientLeadTime\"\n\tcase DHCPv6OptFPartnerLifetime:\n\t\treturn \"FailoverPartnerLifetime\"\n\tcase DHCPv6OptFPartnerLifetimeSent:\n\t\treturn \"FailoverPartnerLifetimeSent\"\n\tcase DHCPv6OptFPartnerDownTime:\n\t\treturn \"FailoverPartnerDownTime\"\n\tcase DHCPv6OptFPartnerRawCltTime:\n\t\treturn \"FailoverPartnerRawClientLeadTime\"\n\tcase DHCPv6OptFProtocolVersion:\n\t\treturn \"FailoverProtocolVersion\"\n\tcase DHCPv6OptFKeepaliveTime:\n\t\treturn \"FailoverKeepaliveTime\"\n\tcase DHCPv6OptFReconfigureData:\n\t\treturn \"FailoverReconfigureData\"\n\tcase DHCPv6OptFRelationshipName:\n\t\treturn \"FailoverRelationshipName\"\n\tcase DHCPv6OptFServerFlags:\n\t\treturn \"FailoverServerFlags\"\n\tcase DHCPv6OptFServerState:\n\t\treturn \"FailoverServerState\"\n\tcase DHCPv6OptFStartTimeOfState:\n\t\treturn \"FailoverStartTimeOfState\"\n\tcase DHCPv6OptFStateExpirationTime:\n\t\treturn \"FailoverStateExpirationTime\"\n\tcase DHCPv6OptRelayPort:\n\t\treturn \"RelayPort\"\n\tcase DHCPv6OptV6ZeroTouchRedirect:\n\t\treturn \"ZeroTouch\"\n\tcase DHCPv6OptIPV6AddressANDSF:\n\t\treturn \"ANDSFIPv6Address\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"Unknown(%d)\", uint16(o))\n\t}\n}\n\n// DHCPv6Options is used to get nicely printed option lists which would normally\n// be cut off after 5 options.\ntype DHCPv6Options []DHCPv6Option\n\n// String returns a string version of the options list.\nfunc (o DHCPv6Options) String() string {\n\tbuf := &bytes.Buffer{}\n\tbuf.WriteByte('[')\n\tfor i, opt := range o {\n\t\tbuf.WriteString(opt.String())\n\t\tif i+1 != len(o) {\n\t\t\tbuf.WriteString(\", \")\n\t\t}\n\t}\n\tbuf.WriteByte(']')\n\treturn buf.String()\n}\n\n// DHCPv6Option rerpresents a DHCP option.\ntype DHCPv6Option struct {\n\tCode   DHCPv6Opt\n\tLength uint16\n\tData   []byte\n}\n\n// String returns a string version of a DHCP Option.\nfunc (o DHCPv6Option) String() string {\n\tswitch o.Code {\n\tcase DHCPv6OptClientID, DHCPv6OptServerID:\n\t\tduid, err := decodeDHCPv6DUID(o.Data)\n\t\tif err != nil {\n\t\t\treturn fmt.Sprintf(\"Option(%s:INVALID)\", o.Code)\n\t\t}\n\t\treturn fmt.Sprintf(\"Option(%s:[%s])\", o.Code, duid.String())\n\tcase DHCPv6OptOro:\n\t\toptions := \"\"\n\t\tfor i := 0; i < int(o.Length); i += 2 {\n\t\t\tif options != \"\" {\n\t\t\t\toptions += \",\"\n\t\t\t}\n\t\t\toption := DHCPv6Opt(binary.BigEndian.Uint16(o.Data[i : i+2]))\n\t\t\toptions += option.String()\n\t\t}\n\t\treturn fmt.Sprintf(\"Option(%s:[%s])\", o.Code, options)\n\tdefault:\n\t\treturn fmt.Sprintf(\"Option(%s:%v)\", o.Code, o.Data)\n\t}\n}\n\n// NewDHCPv6Option constructs a new DHCPv6Option with a given type and data.\nfunc NewDHCPv6Option(code DHCPv6Opt, data []byte) DHCPv6Option {\n\to := DHCPv6Option{Code: code}\n\tif data != nil {\n\t\to.Data = data\n\t\to.Length = uint16(len(data))\n\t}\n\n\treturn o\n}\n\nfunc (o *DHCPv6Option) encode(b []byte, opts gopacket.SerializeOptions) error {\n\tbinary.BigEndian.PutUint16(b[0:2], uint16(o.Code))\n\tif opts.FixLengths {\n\t\tbinary.BigEndian.PutUint16(b[2:4], uint16(len(o.Data)))\n\t} else {\n\t\tbinary.BigEndian.PutUint16(b[2:4], o.Length)\n\t}\n\tcopy(b[4:], o.Data)\n\n\treturn nil\n}\n\nfunc (o *DHCPv6Option) decode(data []byte) error {\n\tif len(data) < 4 {\n\t\treturn errors.New(\"not enough data to decode\")\n\t}\n\to.Code = DHCPv6Opt(binary.BigEndian.Uint16(data[0:2]))\n\to.Length = binary.BigEndian.Uint16(data[2:4])\n\tif len(data) < 4+int(o.Length) {\n\t\treturn fmt.Errorf(\"dhcpv6 option size < length %d\", 4+o.Length)\n\t}\n\to.Data = data[4 : 4+o.Length]\n\treturn nil\n}\n"
  },
  {
    "path": "layers/dhcpv6_test.go",
    "content": "// Copyright 2018, Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc TestDHCPv6EncodeRequest(t *testing.T) {\n\tdhcpv6 := &DHCPv6{MsgType: DHCPv6MsgTypeRequest, HopCount: 0, TransactionID: []byte{87, 25, 88}}\n\n\tclient := &DHCPv6DUID{Type: DHCPv6DUIDTypeLLT, HardwareType: []byte{0, 1}, Time: []byte{28, 56, 38, 45}, LinkLayerAddress: []byte{8, 0, 39, 254, 143, 149}}\n\tdhcpv6.Options = append(dhcpv6.Options, NewDHCPv6Option(DHCPv6OptClientID, client.Encode()))\n\n\tserver := &DHCPv6DUID{Type: DHCPv6DUIDTypeLLT, HardwareType: []byte{0, 1}, Time: []byte{28, 56, 37, 232}, LinkLayerAddress: []byte{8, 0, 39, 212, 16, 187}}\n\tdhcpv6.Options = append(dhcpv6.Options, NewDHCPv6Option(DHCPv6OptServerID, server.Encode()))\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\terr := gopacket.SerializeLayers(buf, opts, dhcpv6)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tp2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDHCPv6, testDecodeOptions)\n\tdhcpv62 := p2.Layer(LayerTypeDHCPv6).(*DHCPv6)\n\ttestDHCPv6Equal(t, dhcpv6, dhcpv62)\n}\n\nfunc TestDHCPv6EncodeReply(t *testing.T) {\n\tdhcpv6 := &DHCPv6{MsgType: DHCPv6MsgTypeReply, HopCount: 0, TransactionID: []byte{87, 25, 88}}\n\n\tclient := &DHCPv6DUID{Type: DHCPv6DUIDTypeLLT, HardwareType: []byte{0, 1}, Time: []byte{28, 56, 38, 45}, LinkLayerAddress: []byte{8, 0, 39, 254, 143, 149}}\n\tdhcpv6.Options = append(dhcpv6.Options, NewDHCPv6Option(DHCPv6OptClientID, client.Encode()))\n\n\tserver := &DHCPv6DUID{Type: DHCPv6DUIDTypeLLT, HardwareType: []byte{0, 1}, Time: []byte{28, 56, 37, 232}, LinkLayerAddress: []byte{8, 0, 39, 212, 16, 187}}\n\tdhcpv6.Options = append(dhcpv6.Options, NewDHCPv6Option(DHCPv6OptServerID, server.Encode()))\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\terr := gopacket.SerializeLayers(buf, opts, dhcpv6)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tp2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDHCPv6, testDecodeOptions)\n\tdhcpv62 := p2.Layer(LayerTypeDHCPv6).(*DHCPv6)\n\ttestDHCPv6Equal(t, dhcpv6, dhcpv62)\n}\n\nfunc testDHCPv6Equal(t *testing.T, d1, d2 *DHCPv6) {\n\tif d1.MsgType != d2.MsgType {\n\t\tt.Errorf(\"expected MsgType=%s, got %s\", d1.MsgType, d2.MsgType)\n\t}\n\tif d1.HopCount != d2.HopCount {\n\t\tt.Errorf(\"expected HopCount=%d, got %d\", d1.HopCount, d2.HopCount)\n\t}\n\tif !d1.LinkAddr.Equal(d2.LinkAddr) {\n\t\tt.Errorf(\"expected LinkAddr=%v, got %v\", d1.LinkAddr, d2.LinkAddr)\n\t}\n\tif !d1.PeerAddr.Equal(d2.PeerAddr) {\n\t\tt.Errorf(\"expected PeerAddr=%v, got %v\", d1.PeerAddr, d2.PeerAddr)\n\t}\n\tif !bytes.Equal(d1.TransactionID, d2.TransactionID) {\n\t\tt.Errorf(\"expected TransactionID=%v, got %v\", d1.TransactionID, d2.TransactionID)\n\t}\n\tif len(d1.Options) != len(d2.Options) {\n\t\tt.Errorf(\"expected %d options, got %d\", len(d1.Options), len(d2.Options))\n\t}\n\n\tfor i, o := range d1.Options {\n\t\ttestDHCPv6OptionEqual(t, i, o, d2.Options[i])\n\t}\n}\n\nfunc testDHCPv6OptionEqual(t *testing.T, idx int, d1, d2 DHCPv6Option) {\n\tif d1.Code != d2.Code {\n\t\tt.Errorf(\"expection Options[%d].Code = %s, got %s\", idx, d1.Code, d2.Code)\n\t}\n\tif d1.Length != d2.Length {\n\t\tt.Errorf(\"expection Options[%d].Length = %d, got %d\", idx, d1.Length, d2.Length)\n\t}\n\tif !bytes.Equal(d1.Data, d2.Data) {\n\t\tt.Errorf(\"expection Options[%d].Data to be = %v, got %v\", idx, d1.Data, d2.Data)\n\t}\n}\n"
  },
  {
    "path": "layers/dns.go",
    "content": "// Copyright 2014, 2018 GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// DNSClass defines the class associated with a request/response.  Different DNS\n// classes can be thought of as an array of parallel namespace trees.\ntype DNSClass uint16\n\n// DNSClass known values.\nconst (\n\tDNSClassIN  DNSClass = 1   // Internet\n\tDNSClassCS  DNSClass = 2   // the CSNET class (Obsolete)\n\tDNSClassCH  DNSClass = 3   // the CHAOS class\n\tDNSClassHS  DNSClass = 4   // Hesiod [Dyer 87]\n\tDNSClassAny DNSClass = 255 // AnyClass\n)\n\nfunc (dc DNSClass) String() string {\n\tswitch dc {\n\tdefault:\n\t\treturn \"Unknown\"\n\tcase DNSClassIN:\n\t\treturn \"IN\"\n\tcase DNSClassCS:\n\t\treturn \"CS\"\n\tcase DNSClassCH:\n\t\treturn \"CH\"\n\tcase DNSClassHS:\n\t\treturn \"HS\"\n\tcase DNSClassAny:\n\t\treturn \"Any\"\n\t}\n}\n\n// DNSType defines the type of data being requested/returned in a\n// question/answer.\ntype DNSType uint16\n\n// DNSType known values.\nconst (\n\tDNSTypeA     DNSType = 1   // a host address\n\tDNSTypeNS    DNSType = 2   // an authoritative name server\n\tDNSTypeMD    DNSType = 3   // a mail destination (Obsolete - use MX)\n\tDNSTypeMF    DNSType = 4   // a mail forwarder (Obsolete - use MX)\n\tDNSTypeCNAME DNSType = 5   // the canonical name for an alias\n\tDNSTypeSOA   DNSType = 6   // marks the start of a zone of authority\n\tDNSTypeMB    DNSType = 7   // a mailbox domain name (EXPERIMENTAL)\n\tDNSTypeMG    DNSType = 8   // a mail group member (EXPERIMENTAL)\n\tDNSTypeMR    DNSType = 9   // a mail rename domain name (EXPERIMENTAL)\n\tDNSTypeNULL  DNSType = 10  // a null RR (EXPERIMENTAL)\n\tDNSTypeWKS   DNSType = 11  // a well known service description\n\tDNSTypePTR   DNSType = 12  // a domain name pointer\n\tDNSTypeHINFO DNSType = 13  // host information\n\tDNSTypeMINFO DNSType = 14  // mailbox or mail list information\n\tDNSTypeMX    DNSType = 15  // mail exchange\n\tDNSTypeTXT   DNSType = 16  // text strings\n\tDNSTypeAAAA  DNSType = 28  // a IPv6 host address [RFC3596]\n\tDNSTypeSRV   DNSType = 33  // server discovery [RFC2782] [RFC6195]\n\tDNSTypeOPT   DNSType = 41  // OPT Pseudo-RR [RFC6891]\n\tDNSTypeURI   DNSType = 256 // URI RR [RFC7553]\n)\n\nfunc (dt DNSType) String() string {\n\tswitch dt {\n\tdefault:\n\t\treturn \"Unknown\"\n\tcase DNSTypeA:\n\t\treturn \"A\"\n\tcase DNSTypeNS:\n\t\treturn \"NS\"\n\tcase DNSTypeMD:\n\t\treturn \"MD\"\n\tcase DNSTypeMF:\n\t\treturn \"MF\"\n\tcase DNSTypeCNAME:\n\t\treturn \"CNAME\"\n\tcase DNSTypeSOA:\n\t\treturn \"SOA\"\n\tcase DNSTypeMB:\n\t\treturn \"MB\"\n\tcase DNSTypeMG:\n\t\treturn \"MG\"\n\tcase DNSTypeMR:\n\t\treturn \"MR\"\n\tcase DNSTypeNULL:\n\t\treturn \"NULL\"\n\tcase DNSTypeWKS:\n\t\treturn \"WKS\"\n\tcase DNSTypePTR:\n\t\treturn \"PTR\"\n\tcase DNSTypeHINFO:\n\t\treturn \"HINFO\"\n\tcase DNSTypeMINFO:\n\t\treturn \"MINFO\"\n\tcase DNSTypeMX:\n\t\treturn \"MX\"\n\tcase DNSTypeTXT:\n\t\treturn \"TXT\"\n\tcase DNSTypeAAAA:\n\t\treturn \"AAAA\"\n\tcase DNSTypeSRV:\n\t\treturn \"SRV\"\n\tcase DNSTypeOPT:\n\t\treturn \"OPT\"\n\tcase DNSTypeURI:\n\t\treturn \"URI\"\n\t}\n}\n\n// DNSResponseCode provides response codes for question answers.\ntype DNSResponseCode uint8\n\n// DNSResponseCode known values.\nconst (\n\tDNSResponseCodeNoErr     DNSResponseCode = 0  // No error\n\tDNSResponseCodeFormErr   DNSResponseCode = 1  // Format Error                       [RFC1035]\n\tDNSResponseCodeServFail  DNSResponseCode = 2  // Server Failure                     [RFC1035]\n\tDNSResponseCodeNXDomain  DNSResponseCode = 3  // Non-Existent Domain                [RFC1035]\n\tDNSResponseCodeNotImp    DNSResponseCode = 4  // Not Implemented                    [RFC1035]\n\tDNSResponseCodeRefused   DNSResponseCode = 5  // Query Refused                      [RFC1035]\n\tDNSResponseCodeYXDomain  DNSResponseCode = 6  // Name Exists when it should not     [RFC2136]\n\tDNSResponseCodeYXRRSet   DNSResponseCode = 7  // RR Set Exists when it should not   [RFC2136]\n\tDNSResponseCodeNXRRSet   DNSResponseCode = 8  // RR Set that should exist does not  [RFC2136]\n\tDNSResponseCodeNotAuth   DNSResponseCode = 9  // Server Not Authoritative for zone  [RFC2136]\n\tDNSResponseCodeNotZone   DNSResponseCode = 10 // Name not contained in zone         [RFC2136]\n\tDNSResponseCodeBadVers   DNSResponseCode = 16 // Bad OPT Version                    [RFC2671]\n\tDNSResponseCodeBadSig    DNSResponseCode = 16 // TSIG Signature Failure             [RFC2845]\n\tDNSResponseCodeBadKey    DNSResponseCode = 17 // Key not recognized                 [RFC2845]\n\tDNSResponseCodeBadTime   DNSResponseCode = 18 // Signature out of time window       [RFC2845]\n\tDNSResponseCodeBadMode   DNSResponseCode = 19 // Bad TKEY Mode                      [RFC2930]\n\tDNSResponseCodeBadName   DNSResponseCode = 20 // Duplicate key name                 [RFC2930]\n\tDNSResponseCodeBadAlg    DNSResponseCode = 21 // Algorithm not supported            [RFC2930]\n\tDNSResponseCodeBadTruc   DNSResponseCode = 22 // Bad Truncation                     [RFC4635]\n\tDNSResponseCodeBadCookie DNSResponseCode = 23 // Bad/missing Server Cookie          [RFC7873]\n)\n\nfunc (drc DNSResponseCode) String() string {\n\tswitch drc {\n\tdefault:\n\t\treturn \"Unknown\"\n\tcase DNSResponseCodeNoErr:\n\t\treturn \"No Error\"\n\tcase DNSResponseCodeFormErr:\n\t\treturn \"Format Error\"\n\tcase DNSResponseCodeServFail:\n\t\treturn \"Server Failure \"\n\tcase DNSResponseCodeNXDomain:\n\t\treturn \"Non-Existent Domain\"\n\tcase DNSResponseCodeNotImp:\n\t\treturn \"Not Implemented\"\n\tcase DNSResponseCodeRefused:\n\t\treturn \"Query Refused\"\n\tcase DNSResponseCodeYXDomain:\n\t\treturn \"Name Exists when it should not\"\n\tcase DNSResponseCodeYXRRSet:\n\t\treturn \"RR Set Exists when it should not\"\n\tcase DNSResponseCodeNXRRSet:\n\t\treturn \"RR Set that should exist does not\"\n\tcase DNSResponseCodeNotAuth:\n\t\treturn \"Server Not Authoritative for zone\"\n\tcase DNSResponseCodeNotZone:\n\t\treturn \"Name not contained in zone\"\n\tcase DNSResponseCodeBadVers:\n\t\treturn \"Bad OPT Version\"\n\tcase DNSResponseCodeBadKey:\n\t\treturn \"Key not recognized\"\n\tcase DNSResponseCodeBadTime:\n\t\treturn \"Signature out of time window\"\n\tcase DNSResponseCodeBadMode:\n\t\treturn \"Bad TKEY Mode\"\n\tcase DNSResponseCodeBadName:\n\t\treturn \"Duplicate key name\"\n\tcase DNSResponseCodeBadAlg:\n\t\treturn \"Algorithm not supported\"\n\tcase DNSResponseCodeBadTruc:\n\t\treturn \"Bad Truncation\"\n\tcase DNSResponseCodeBadCookie:\n\t\treturn \"Bad Cookie\"\n\t}\n}\n\n// DNSOpCode defines a set of different operation types.\ntype DNSOpCode uint8\n\n// DNSOpCode known values.\nconst (\n\tDNSOpCodeQuery  DNSOpCode = 0 // Query                  [RFC1035]\n\tDNSOpCodeIQuery DNSOpCode = 1 // Inverse Query Obsolete [RFC3425]\n\tDNSOpCodeStatus DNSOpCode = 2 // Status                 [RFC1035]\n\tDNSOpCodeNotify DNSOpCode = 4 // Notify                 [RFC1996]\n\tDNSOpCodeUpdate DNSOpCode = 5 // Update                 [RFC2136]\n)\n\nfunc (doc DNSOpCode) String() string {\n\tswitch doc {\n\tdefault:\n\t\treturn \"Unknown\"\n\tcase DNSOpCodeQuery:\n\t\treturn \"Query\"\n\tcase DNSOpCodeIQuery:\n\t\treturn \"Inverse Query\"\n\tcase DNSOpCodeStatus:\n\t\treturn \"Status\"\n\tcase DNSOpCodeNotify:\n\t\treturn \"Notify\"\n\tcase DNSOpCodeUpdate:\n\t\treturn \"Update\"\n\t}\n}\n\n// DNS is specified in RFC 1034 / RFC 1035\n// +---------------------+\n// |        Header       |\n// +---------------------+\n// |       Question      | the question for the name server\n// +---------------------+\n// |        Answer       | RRs answering the question\n// +---------------------+\n// |      Authority      | RRs pointing toward an authority\n// +---------------------+\n// |      Additional     | RRs holding additional information\n// +---------------------+\n//\n//  DNS Header\n//  0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                      ID                       |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |QR|   Opcode  |AA|TC|RD|RA|   Z    |   RCODE   |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    QDCOUNT                    |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    ANCOUNT                    |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    NSCOUNT                    |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    ARCOUNT                    |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\n// DNS contains data from a single Domain Name Service packet.\ntype DNS struct {\n\tBaseLayer\n\n\t// Header fields\n\tID     uint16\n\tQR     bool\n\tOpCode DNSOpCode\n\n\tAA bool  // Authoritative answer\n\tTC bool  // Truncated\n\tRD bool  // Recursion desired\n\tRA bool  // Recursion available\n\tZ  uint8 // Reserved for future use\n\n\tResponseCode DNSResponseCode\n\tQDCount      uint16 // Number of questions to expect\n\tANCount      uint16 // Number of answers to expect\n\tNSCount      uint16 // Number of authorities to expect\n\tARCount      uint16 // Number of additional records to expect\n\n\t// Entries\n\tQuestions   []DNSQuestion\n\tAnswers     []DNSResourceRecord\n\tAuthorities []DNSResourceRecord\n\tAdditionals []DNSResourceRecord\n\n\t// buffer for doing name decoding.  We use a single reusable buffer to avoid\n\t// name decoding on a single object via multiple DecodeFromBytes calls\n\t// requiring constant allocation of small byte slices.\n\tbuffer []byte\n}\n\n// LayerType returns gopacket.LayerTypeDNS.\nfunc (d *DNS) LayerType() gopacket.LayerType { return LayerTypeDNS }\n\n// decodeDNS decodes the byte slice into a DNS type. It also\n// setups the application Layer in PacketBuilder.\nfunc decodeDNS(data []byte, p gopacket.PacketBuilder) error {\n\td := &DNS{}\n\terr := d.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(d)\n\tp.SetApplicationLayer(d)\n\treturn nil\n}\n\n// DecodeFromBytes decodes the slice into the DNS struct.\nfunc (d *DNS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\td.buffer = d.buffer[:0]\n\n\tif len(data) < 12 {\n\t\tdf.SetTruncated()\n\t\treturn errDNSPacketTooShort\n\t}\n\n\t// since there are no further layers, the baselayer's content is\n\t// pointing to this layer\n\td.BaseLayer = BaseLayer{Contents: data[:len(data)]}\n\td.ID = binary.BigEndian.Uint16(data[:2])\n\td.QR = data[2]&0x80 != 0\n\td.OpCode = DNSOpCode(data[2]>>3) & 0x0F\n\td.AA = data[2]&0x04 != 0\n\td.TC = data[2]&0x02 != 0\n\td.RD = data[2]&0x01 != 0\n\td.RA = data[3]&0x80 != 0\n\td.Z = uint8(data[3]>>4) & 0x7\n\td.ResponseCode = DNSResponseCode(data[3] & 0xF)\n\td.QDCount = binary.BigEndian.Uint16(data[4:6])\n\td.ANCount = binary.BigEndian.Uint16(data[6:8])\n\td.NSCount = binary.BigEndian.Uint16(data[8:10])\n\td.ARCount = binary.BigEndian.Uint16(data[10:12])\n\n\td.Questions = d.Questions[:0]\n\td.Answers = d.Answers[:0]\n\td.Authorities = d.Authorities[:0]\n\td.Additionals = d.Additionals[:0]\n\n\toffset := 12\n\tvar err error\n\tfor i := 0; i < int(d.QDCount); i++ {\n\t\tvar q DNSQuestion\n\t\tif offset, err = q.decode(data, offset, df, &d.buffer); err != nil {\n\t\t\treturn err\n\t\t}\n\t\td.Questions = append(d.Questions, q)\n\t}\n\n\t// For some horrible reason, if we do the obvious thing in this loop:\n\t//   var r DNSResourceRecord\n\t//   if blah := r.decode(blah); err != nil {\n\t//     return err\n\t//   }\n\t//   d.Foo = append(d.Foo, r)\n\t// the Go compiler thinks that 'r' escapes to the heap, causing a malloc for\n\t// every Answer, Authority, and Additional.  To get around this, we do\n\t// something really silly:  we append an empty resource record to our slice,\n\t// then use the last value in the slice to call decode.  Since the value is\n\t// already in the slice, there's no WAY it can escape... on the other hand our\n\t// code is MUCH uglier :(\n\tfor i := 0; i < int(d.ANCount); i++ {\n\t\td.Answers = append(d.Answers, DNSResourceRecord{})\n\t\tif offset, err = d.Answers[i].decode(data, offset, df, &d.buffer); err != nil {\n\t\t\td.Answers = d.Answers[:i] // strip off erroneous value\n\t\t\treturn err\n\t\t}\n\t}\n\tfor i := 0; i < int(d.NSCount); i++ {\n\t\td.Authorities = append(d.Authorities, DNSResourceRecord{})\n\t\tif offset, err = d.Authorities[i].decode(data, offset, df, &d.buffer); err != nil {\n\t\t\td.Authorities = d.Authorities[:i] // strip off erroneous value\n\t\t\treturn err\n\t\t}\n\t}\n\tfor i := 0; i < int(d.ARCount); i++ {\n\t\td.Additionals = append(d.Additionals, DNSResourceRecord{})\n\t\tif offset, err = d.Additionals[i].decode(data, offset, df, &d.buffer); err != nil {\n\t\t\td.Additionals = d.Additionals[:i] // strip off erroneous value\n\t\t\treturn err\n\t\t}\n\t\t// extract extended RCODE from OPT RRs, RFC 6891 section 6.1.3\n\t\tif d.Additionals[i].Type == DNSTypeOPT {\n\t\t\td.ResponseCode = DNSResponseCode(uint8(d.ResponseCode) | uint8(d.Additionals[i].TTL>>20&0xF0))\n\t\t}\n\t}\n\n\tif uint16(len(d.Questions)) != d.QDCount {\n\t\treturn errDecodeQueryBadQDCount\n\t} else if uint16(len(d.Answers)) != d.ANCount {\n\t\treturn errDecodeQueryBadANCount\n\t} else if uint16(len(d.Authorities)) != d.NSCount {\n\t\treturn errDecodeQueryBadNSCount\n\t} else if uint16(len(d.Additionals)) != d.ARCount {\n\t\treturn errDecodeQueryBadARCount\n\t}\n\treturn nil\n}\n\n// CanDecode implements gopacket.DecodingLayer.\nfunc (d *DNS) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDNS\n}\n\n// NextLayerType implements gopacket.DecodingLayer.\nfunc (d *DNS) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\n// Payload returns nil.\nfunc (d *DNS) Payload() []byte {\n\treturn nil\n}\n\nfunc b2i(b bool) int {\n\tif b {\n\t\treturn 1\n\t}\n\treturn 0\n}\n\nfunc recSize(rr *DNSResourceRecord) int {\n\tswitch rr.Type {\n\tcase DNSTypeA:\n\t\treturn 4\n\tcase DNSTypeAAAA:\n\t\treturn 16\n\tcase DNSTypeNS:\n\t\treturn len(rr.NS) + 2\n\tcase DNSTypeCNAME:\n\t\treturn len(rr.CNAME) + 2\n\tcase DNSTypePTR:\n\t\treturn len(rr.PTR) + 2\n\tcase DNSTypeSOA:\n\t\treturn len(rr.SOA.MName) + 2 + len(rr.SOA.RName) + 2 + 20\n\tcase DNSTypeMX:\n\t\treturn 2 + len(rr.MX.Name) + 2\n\tcase DNSTypeTXT:\n\t\tl := len(rr.TXTs)\n\t\tfor _, txt := range rr.TXTs {\n\t\t\tl += len(txt)\n\t\t}\n\t\treturn l\n\tcase DNSTypeSRV:\n\t\treturn 6 + len(rr.SRV.Name) + 2\n\tcase DNSTypeURI:\n\t\treturn 4 + len(rr.URI.Target)\n\tcase DNSTypeOPT:\n\t\tl := len(rr.OPT) * 4\n\t\tfor _, opt := range rr.OPT {\n\t\t\tl += len(opt.Data)\n\t\t}\n\t\treturn l\n\t}\n\n\treturn 0\n}\n\nfunc computeSize(recs []DNSResourceRecord) int {\n\tsz := 0\n\tfor _, rr := range recs {\n\t\tv := len(rr.Name)\n\n\t\tif v == 0 {\n\t\t\tsz += v + 11\n\t\t} else {\n\t\t\tsz += v + 12\n\t\t}\n\n\t\tsz += recSize(&rr)\n\t}\n\treturn sz\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\nfunc (d *DNS) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tdsz := 0\n\tfor _, q := range d.Questions {\n\t\tdsz += len(q.Name) + 6\n\t}\n\tdsz += computeSize(d.Answers)\n\tdsz += computeSize(d.Authorities)\n\tdsz += computeSize(d.Additionals)\n\n\tbytes, err := b.PrependBytes(12 + dsz)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbinary.BigEndian.PutUint16(bytes, d.ID)\n\tbytes[2] = byte((b2i(d.QR) << 7) | (int(d.OpCode) << 3) | (b2i(d.AA) << 2) | (b2i(d.TC) << 1) | b2i(d.RD))\n\tbytes[3] = byte((b2i(d.RA) << 7) | (int(d.Z) << 4) | int(d.ResponseCode))\n\n\tif opts.FixLengths {\n\t\td.QDCount = uint16(len(d.Questions))\n\t\td.ANCount = uint16(len(d.Answers))\n\t\td.NSCount = uint16(len(d.Authorities))\n\t\td.ARCount = uint16(len(d.Additionals))\n\t}\n\tbinary.BigEndian.PutUint16(bytes[4:], d.QDCount)\n\tbinary.BigEndian.PutUint16(bytes[6:], d.ANCount)\n\tbinary.BigEndian.PutUint16(bytes[8:], d.NSCount)\n\tbinary.BigEndian.PutUint16(bytes[10:], d.ARCount)\n\n\toff := 12\n\tfor _, qd := range d.Questions {\n\t\tn := qd.encode(bytes, off)\n\t\toff += n\n\t}\n\n\tfor i := range d.Answers {\n\t\t// done this way so we can modify DNSResourceRecord to fix\n\t\t// lengths if requested\n\t\tqa := &d.Answers[i]\n\t\tn, err := qa.encode(bytes, off, opts)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\toff += n\n\t}\n\n\tfor i := range d.Authorities {\n\t\tqa := &d.Authorities[i]\n\t\tn, err := qa.encode(bytes, off, opts)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\toff += n\n\t}\n\tfor i := range d.Additionals {\n\t\tqa := &d.Additionals[i]\n\t\tn, err := qa.encode(bytes, off, opts)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\toff += n\n\t}\n\n\treturn nil\n}\n\nconst maxRecursionLevel = 255\n\nfunc decodeName(data []byte, offset int, buffer *[]byte, level int) ([]byte, int, error) {\n\tif level > maxRecursionLevel {\n\t\treturn nil, 0, errMaxRecursion\n\t} else if offset >= len(data) {\n\t\treturn nil, 0, errDNSNameOffsetTooHigh\n\t} else if offset < 0 {\n\t\treturn nil, 0, errDNSNameOffsetNegative\n\t}\n\tstart := len(*buffer)\n\tindex := offset\n\tif data[index] == 0x00 {\n\t\treturn nil, index + 1, nil\n\t}\nloop:\n\tfor data[index] != 0x00 {\n\t\tswitch data[index] & 0xc0 {\n\t\tdefault:\n\t\t\t/* RFC 1035\n\t\t\t   A domain name represented as a sequence of labels, where\n\t\t\t   each label consists of a length octet followed by that\n\t\t\t   number of octets.  The domain name terminates with the\n\t\t\t   zero length octet for the null label of the root.  Note\n\t\t\t   that this field may be an odd number of octets; no\n\t\t\t   padding is used.\n\t\t\t*/\n\t\t\tindex2 := index + int(data[index]) + 1\n\t\t\tif index2-offset > 255 {\n\t\t\t\treturn nil, 0, errDNSNameTooLong\n\t\t\t} else if index2 < index+1 || index2 > len(data) {\n\t\t\t\treturn nil, 0, errDNSNameInvalidIndex\n\t\t\t}\n\t\t\t*buffer = append(*buffer, '.')\n\t\t\t*buffer = append(*buffer, data[index+1:index2]...)\n\t\t\tindex = index2\n\n\t\tcase 0xc0:\n\t\t\t/* RFC 1035\n\t\t\t   The pointer takes the form of a two octet sequence.\n\n\t\t\t   The first two bits are ones.  This allows a pointer to\n\t\t\t   be distinguished from a label, since the label must\n\t\t\t   begin with two zero bits because labels are restricted\n\t\t\t   to 63 octets or less.  (The 10 and 01 combinations are\n\t\t\t   reserved for future use.)  The OFFSET field specifies\n\t\t\t   an offset from the start of the message (i.e., the\n\t\t\t   first octet of the ID field in the domain header).  A\n\t\t\t   zero offset specifies the first byte of the ID field,\n\t\t\t   etc.\n\n\t\t\t   The compression scheme allows a domain name in a message to be\n\t\t\t   represented as either:\n\t\t\t      - a sequence of labels ending in a zero octet\n\t\t\t      - a pointer\n\t\t\t      - a sequence of labels ending with a pointer\n\t\t\t*/\n\t\t\tif index+2 > len(data) {\n\t\t\t\treturn nil, 0, errDNSPointerOffsetTooHigh\n\t\t\t}\n\t\t\toffsetp := int(binary.BigEndian.Uint16(data[index:index+2]) & 0x3fff)\n\t\t\tif offsetp > len(data) {\n\t\t\t\treturn nil, 0, errDNSPointerOffsetTooHigh\n\t\t\t}\n\t\t\t// This looks a little tricky, but actually isn't.  Because of how\n\t\t\t// decodeName is written, calling it appends the decoded name to the\n\t\t\t// current buffer.  We already have the start of the buffer, then, so\n\t\t\t// once this call is done buffer[start:] will contain our full name.\n\t\t\t_, _, err := decodeName(data, offsetp, buffer, level+1)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, 0, err\n\t\t\t}\n\t\t\tindex++ // pointer is two bytes, so add an extra byte here.\n\t\t\tbreak loop\n\t\t/* EDNS, or other DNS option ? */\n\t\tcase 0x40: // RFC 2673\n\t\t\treturn nil, 0, fmt.Errorf(\"qname '0x40' - RFC 2673 unsupported yet (data=%x index=%d)\",\n\t\t\t\tdata[index], index)\n\n\t\tcase 0x80:\n\t\t\treturn nil, 0, fmt.Errorf(\"qname '0x80' unsupported yet (data=%x index=%d)\",\n\t\t\t\tdata[index], index)\n\t\t}\n\t\tif index >= len(data) {\n\t\t\treturn nil, 0, errDNSIndexOutOfRange\n\t\t}\n\t}\n\tif len(*buffer) <= start {\n\t\treturn (*buffer)[start:], index + 1, nil\n\t}\n\treturn (*buffer)[start+1:], index + 1, nil\n}\n\n// DNSQuestion wraps a single request (question) within a DNS query.\ntype DNSQuestion struct {\n\tName  []byte\n\tType  DNSType\n\tClass DNSClass\n}\n\nfunc (q *DNSQuestion) decode(data []byte, offset int, df gopacket.DecodeFeedback, buffer *[]byte) (int, error) {\n\tname, endq, err := decodeName(data, offset, buffer, 1)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tif len(data) < endq+4 {\n\t\treturn 0, errors.New(\"DNS question too small\")\n\t}\n\n\tq.Name = name\n\tq.Type = DNSType(binary.BigEndian.Uint16(data[endq : endq+2]))\n\tq.Class = DNSClass(binary.BigEndian.Uint16(data[endq+2 : endq+4]))\n\n\treturn endq + 4, nil\n}\n\nfunc (q *DNSQuestion) encode(data []byte, offset int) int {\n\tnoff := encodeName(q.Name, data, offset)\n\tnSz := noff - offset\n\tbinary.BigEndian.PutUint16(data[noff:], uint16(q.Type))\n\tbinary.BigEndian.PutUint16(data[noff+2:], uint16(q.Class))\n\treturn nSz + 4\n}\n\n//  DNSResourceRecord\n//  0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                                               |\n//  /                                               /\n//  /                      NAME                     /\n//  |                                               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                      TYPE                     |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                     CLASS                     |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                      TTL                      |\n//  |                                               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   RDLENGTH                    |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|\n//  /                     RDATA                     /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\n// DNSResourceRecord wraps the data from a single DNS resource within a\n// response.\ntype DNSResourceRecord struct {\n\t// Header\n\tName  []byte\n\tType  DNSType\n\tClass DNSClass\n\tTTL   uint32\n\n\t// RDATA Raw Values\n\tDataLength uint16\n\tData       []byte\n\n\t// RDATA Decoded Values\n\tIP             net.IP\n\tNS, CNAME, PTR []byte\n\tTXTs           [][]byte\n\tSOA            DNSSOA\n\tSRV            DNSSRV\n\tMX             DNSMX\n\tOPT            []DNSOPT // See RFC 6891, section 6.1.2\n\tURI            DNSURI\n\n\t// Undecoded TXT for backward compatibility\n\tTXT []byte\n}\n\n// decode decodes the resource record, returning the total length of the record.\nfunc (rr *DNSResourceRecord) decode(data []byte, offset int, df gopacket.DecodeFeedback, buffer *[]byte) (int, error) {\n\tname, endq, err := decodeName(data, offset, buffer, 1)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tif len(data) < endq+10 {\n\t\treturn 0, errors.New(\"DNS record too small\")\n\t}\n\n\trr.Name = name\n\trr.Type = DNSType(binary.BigEndian.Uint16(data[endq : endq+2]))\n\trr.Class = DNSClass(binary.BigEndian.Uint16(data[endq+2 : endq+4]))\n\trr.TTL = binary.BigEndian.Uint32(data[endq+4 : endq+8])\n\trr.DataLength = binary.BigEndian.Uint16(data[endq+8 : endq+10])\n\tend := endq + 10 + int(rr.DataLength)\n\tif end > len(data) {\n\t\treturn 0, errDecodeRecordLength\n\t}\n\trr.Data = data[endq+10 : end]\n\n\tif rr.DataLength > 0 {\n\t\tif err = rr.decodeRData(data[:end], endq+10, buffer); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\n\treturn endq + 10 + int(rr.DataLength), nil\n}\n\nfunc encodeName(name []byte, data []byte, offset int) int {\n\tl := 0\n\tfor i := range name {\n\t\tif name[i] == '.' {\n\t\t\tdata[offset+i-l] = byte(l)\n\t\t\tl = 0\n\t\t} else {\n\t\t\t// skip one to write the length\n\t\t\tdata[offset+i+1] = name[i]\n\t\t\tl++\n\t\t}\n\t}\n\n\tif len(name) == 0 {\n\t\tdata[offset] = 0x00 // terminal\n\t\treturn offset + 1\n\t}\n\n\t// length for final portion\n\tdata[offset+len(name)-l] = byte(l)\n\tdata[offset+len(name)+1] = 0x00 // terminal\n\treturn offset + len(name) + 2\n}\n\nfunc (rr *DNSResourceRecord) encode(data []byte, offset int, opts gopacket.SerializeOptions) (int, error) {\n\n\tnoff := encodeName(rr.Name, data, offset)\n\tnSz := noff - offset\n\n\tbinary.BigEndian.PutUint16(data[noff:], uint16(rr.Type))\n\tbinary.BigEndian.PutUint16(data[noff+2:], uint16(rr.Class))\n\tbinary.BigEndian.PutUint32(data[noff+4:], uint32(rr.TTL))\n\n\tswitch rr.Type {\n\tcase DNSTypeA:\n\t\tcopy(data[noff+10:], rr.IP.To4())\n\tcase DNSTypeAAAA:\n\t\tcopy(data[noff+10:], rr.IP)\n\tcase DNSTypeNS:\n\t\tencodeName(rr.NS, data, noff+10)\n\tcase DNSTypeCNAME:\n\t\tencodeName(rr.CNAME, data, noff+10)\n\tcase DNSTypePTR:\n\t\tencodeName(rr.PTR, data, noff+10)\n\tcase DNSTypeSOA:\n\t\tnoff2 := encodeName(rr.SOA.MName, data, noff+10)\n\t\tnoff2 = encodeName(rr.SOA.RName, data, noff2)\n\t\tbinary.BigEndian.PutUint32(data[noff2:], rr.SOA.Serial)\n\t\tbinary.BigEndian.PutUint32(data[noff2+4:], rr.SOA.Refresh)\n\t\tbinary.BigEndian.PutUint32(data[noff2+8:], rr.SOA.Retry)\n\t\tbinary.BigEndian.PutUint32(data[noff2+12:], rr.SOA.Expire)\n\t\tbinary.BigEndian.PutUint32(data[noff2+16:], rr.SOA.Minimum)\n\tcase DNSTypeMX:\n\t\tbinary.BigEndian.PutUint16(data[noff+10:], rr.MX.Preference)\n\t\tencodeName(rr.MX.Name, data, noff+12)\n\tcase DNSTypeTXT:\n\t\tnoff2 := noff + 10\n\t\tfor _, txt := range rr.TXTs {\n\t\t\tdata[noff2] = byte(len(txt))\n\t\t\tcopy(data[noff2+1:], txt)\n\t\t\tnoff2 += 1 + len(txt)\n\t\t}\n\tcase DNSTypeSRV:\n\t\tbinary.BigEndian.PutUint16(data[noff+10:], rr.SRV.Priority)\n\t\tbinary.BigEndian.PutUint16(data[noff+12:], rr.SRV.Weight)\n\t\tbinary.BigEndian.PutUint16(data[noff+14:], rr.SRV.Port)\n\t\tencodeName(rr.SRV.Name, data, noff+16)\n\tcase DNSTypeURI:\n\t\tbinary.BigEndian.PutUint16(data[noff+10:], rr.URI.Priority)\n\t\tbinary.BigEndian.PutUint16(data[noff+12:], rr.URI.Weight)\n\t\tcopy(data[noff+14:], rr.URI.Target)\n\tcase DNSTypeOPT:\n\t\tnoff2 := noff + 10\n\t\tfor _, opt := range rr.OPT {\n\t\t\tbinary.BigEndian.PutUint16(data[noff2:], uint16(opt.Code))\n\t\t\tbinary.BigEndian.PutUint16(data[noff2+2:], uint16(len(opt.Data)))\n\t\t\tcopy(data[noff2+4:], opt.Data)\n\t\t\tnoff2 += 4 + len(opt.Data)\n\t\t}\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"serializing resource record of type %v not supported\", rr.Type)\n\t}\n\n\t// DataLength\n\tdSz := recSize(rr)\n\tbinary.BigEndian.PutUint16(data[noff+8:], uint16(dSz))\n\n\tif opts.FixLengths {\n\t\trr.DataLength = uint16(dSz)\n\t}\n\n\treturn nSz + 10 + dSz, nil\n}\n\nfunc (rr *DNSResourceRecord) String() string {\n\n\tif rr.Type == DNSTypeOPT {\n\t\topts := make([]string, len(rr.OPT))\n\t\tfor i, opt := range rr.OPT {\n\t\t\topts[i] = opt.String()\n\t\t}\n\t\treturn \"OPT \" + strings.Join(opts, \",\")\n\t}\n\tif rr.Type == DNSTypeURI {\n\t\treturn fmt.Sprintf(\"URI %d %d %s\", rr.URI.Priority, rr.URI.Weight, string(rr.URI.Target))\n\t}\n\tif rr.Class == DNSClassIN {\n\t\tswitch rr.Type {\n\t\tcase DNSTypeA, DNSTypeAAAA:\n\t\t\treturn rr.IP.String()\n\t\tcase DNSTypeNS:\n\t\t\treturn \"NS \" + string(rr.NS)\n\t\tcase DNSTypeCNAME:\n\t\t\treturn \"CNAME \" + string(rr.CNAME)\n\t\tcase DNSTypePTR:\n\t\t\treturn \"PTR \" + string(rr.PTR)\n\t\tcase DNSTypeTXT:\n\t\t\treturn \"TXT \" + string(rr.TXT)\n\t\t}\n\t}\n\n\treturn fmt.Sprintf(\"<%v, %v>\", rr.Class, rr.Type)\n}\n\nfunc decodeCharacterStrings(data []byte) ([][]byte, error) {\n\tstrings := make([][]byte, 0, 1)\n\tend := len(data)\n\tfor index, index2 := 0, 0; index != end; index = index2 {\n\t\tindex2 = index + 1 + int(data[index]) // index increases by 1..256 and does not overflow\n\t\tif index2 > end {\n\t\t\treturn nil, errCharStringMissData\n\t\t}\n\t\tstrings = append(strings, data[index+1:index2])\n\t}\n\treturn strings, nil\n}\n\nfunc decodeOPTs(data []byte, offset int) ([]DNSOPT, error) {\n\tallOPT := []DNSOPT{}\n\tend := len(data)\n\n\tif offset == end {\n\t\treturn allOPT, nil // There is no data to read\n\t}\n\n\tif offset+4 > end {\n\t\treturn allOPT, fmt.Errorf(\"DNSOPT record is of length %d, it should be at least length 4\", end-offset)\n\t}\n\n\tfor i := offset; i < end; {\n\t\topt := DNSOPT{}\n\t\tif len(data) < i+4 {\n\t\t\treturn allOPT, fmt.Errorf(\"Malformed DNSOPT record.  Length %d < %d\", len(data), i+4)\n\t\t}\n\t\topt.Code = DNSOptionCode(binary.BigEndian.Uint16(data[i : i+2]))\n\t\tl := binary.BigEndian.Uint16(data[i+2 : i+4])\n\t\tif i+4+int(l) > end {\n\t\t\treturn allOPT, fmt.Errorf(\"Malformed DNSOPT record. The length (%d) field implies a packet larger than the one received\", l)\n\t\t}\n\t\topt.Data = data[i+4 : i+4+int(l)]\n\t\tallOPT = append(allOPT, opt)\n\t\ti += int(l) + 4\n\t}\n\treturn allOPT, nil\n}\n\nfunc (rr *DNSResourceRecord) decodeRData(data []byte, offset int, buffer *[]byte) error {\n\tswitch rr.Type {\n\tcase DNSTypeA:\n\t\trr.IP = rr.Data\n\tcase DNSTypeAAAA:\n\t\trr.IP = rr.Data\n\tcase DNSTypeTXT, DNSTypeHINFO:\n\t\trr.TXT = rr.Data\n\t\ttxts, err := decodeCharacterStrings(rr.Data)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trr.TXTs = txts\n\tcase DNSTypeNS:\n\t\tname, _, err := decodeName(data, offset, buffer, 1)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trr.NS = name\n\tcase DNSTypeCNAME:\n\t\tname, _, err := decodeName(data, offset, buffer, 1)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trr.CNAME = name\n\tcase DNSTypePTR:\n\t\tname, _, err := decodeName(data, offset, buffer, 1)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trr.PTR = name\n\tcase DNSTypeSOA:\n\t\tname, endq, err := decodeName(data, offset, buffer, 1)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trr.SOA.MName = name\n\t\tname, endq, err = decodeName(data, endq, buffer, 1)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif len(data) < endq+20 {\n\t\t\treturn errors.New(\"SOA too small\")\n\t\t}\n\t\trr.SOA.RName = name\n\t\trr.SOA.Serial = binary.BigEndian.Uint32(data[endq : endq+4])\n\t\trr.SOA.Refresh = binary.BigEndian.Uint32(data[endq+4 : endq+8])\n\t\trr.SOA.Retry = binary.BigEndian.Uint32(data[endq+8 : endq+12])\n\t\trr.SOA.Expire = binary.BigEndian.Uint32(data[endq+12 : endq+16])\n\t\trr.SOA.Minimum = binary.BigEndian.Uint32(data[endq+16 : endq+20])\n\tcase DNSTypeMX:\n\t\tif len(data) < offset+2 {\n\t\t\treturn errors.New(\"MX too small\")\n\t\t}\n\t\trr.MX.Preference = binary.BigEndian.Uint16(data[offset : offset+2])\n\t\tname, _, err := decodeName(data, offset+2, buffer, 1)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trr.MX.Name = name\n\tcase DNSTypeURI:\n\t\tif len(rr.Data) < 4 {\n\t\t\treturn errors.New(\"URI too small\")\n\t\t}\n\t\trr.URI.Priority = binary.BigEndian.Uint16(data[offset : offset+2])\n\t\trr.URI.Weight = binary.BigEndian.Uint16(data[offset+2 : offset+4])\n\t\trr.URI.Target = rr.Data[4:]\n\tcase DNSTypeSRV:\n\t\tif len(data) < offset+6 {\n\t\t\treturn errors.New(\"SRV too small\")\n\t\t}\n\t\trr.SRV.Priority = binary.BigEndian.Uint16(data[offset : offset+2])\n\t\trr.SRV.Weight = binary.BigEndian.Uint16(data[offset+2 : offset+4])\n\t\trr.SRV.Port = binary.BigEndian.Uint16(data[offset+4 : offset+6])\n\t\tname, _, err := decodeName(data, offset+6, buffer, 1)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trr.SRV.Name = name\n\tcase DNSTypeOPT:\n\t\tallOPT, err := decodeOPTs(data, offset)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trr.OPT = allOPT\n\t}\n\treturn nil\n}\n\n// DNSSOA is a Start of Authority record.  Each domain requires a SOA record at\n// the cutover where a domain is delegated from its parent.\ntype DNSSOA struct {\n\tMName, RName                            []byte\n\tSerial, Refresh, Retry, Expire, Minimum uint32\n}\n\n// DNSSRV is a Service record, defining a location (hostname/port) of a\n// server/service.\ntype DNSSRV struct {\n\tPriority, Weight, Port uint16\n\tName                   []byte\n}\n\n// DNSMX is a mail exchange record, defining a mail server for a recipient's\n// domain.\ntype DNSMX struct {\n\tPreference uint16\n\tName       []byte\n}\n\n// DNSURI is a URI record, defining a target (URI) of a server/service\ntype DNSURI struct {\n\tPriority, Weight uint16\n\tTarget           []byte\n}\n\n// DNSOptionCode represents the code of a DNS Option, see RFC6891, section 6.1.2\ntype DNSOptionCode uint16\n\nfunc (doc DNSOptionCode) String() string {\n\tswitch doc {\n\tdefault:\n\t\treturn \"Unknown\"\n\tcase DNSOptionCodeNSID:\n\t\treturn \"NSID\"\n\tcase DNSOptionCodeDAU:\n\t\treturn \"DAU\"\n\tcase DNSOptionCodeDHU:\n\t\treturn \"DHU\"\n\tcase DNSOptionCodeN3U:\n\t\treturn \"N3U\"\n\tcase DNSOptionCodeEDNSClientSubnet:\n\t\treturn \"EDNSClientSubnet\"\n\tcase DNSOptionCodeEDNSExpire:\n\t\treturn \"EDNSExpire\"\n\tcase DNSOptionCodeCookie:\n\t\treturn \"Cookie\"\n\tcase DNSOptionCodeEDNSKeepAlive:\n\t\treturn \"EDNSKeepAlive\"\n\tcase DNSOptionCodePadding:\n\t\treturn \"CodePadding\"\n\tcase DNSOptionCodeChain:\n\t\treturn \"CodeChain\"\n\tcase DNSOptionCodeEDNSKeyTag:\n\t\treturn \"CodeEDNSKeyTag\"\n\tcase DNSOptionCodeEDNSClientTag:\n\t\treturn \"EDNSClientTag\"\n\tcase DNSOptionCodeEDNSServerTag:\n\t\treturn \"EDNSServerTag\"\n\tcase DNSOptionCodeDeviceID:\n\t\treturn \"DeviceID\"\n\t}\n}\n\n// DNSOptionCode known values. See IANA\nconst (\n\tDNSOptionCodeNSID             DNSOptionCode = 3\n\tDNSOptionCodeDAU              DNSOptionCode = 5\n\tDNSOptionCodeDHU              DNSOptionCode = 6\n\tDNSOptionCodeN3U              DNSOptionCode = 7\n\tDNSOptionCodeEDNSClientSubnet DNSOptionCode = 8\n\tDNSOptionCodeEDNSExpire       DNSOptionCode = 9\n\tDNSOptionCodeCookie           DNSOptionCode = 10\n\tDNSOptionCodeEDNSKeepAlive    DNSOptionCode = 11\n\tDNSOptionCodePadding          DNSOptionCode = 12\n\tDNSOptionCodeChain            DNSOptionCode = 13\n\tDNSOptionCodeEDNSKeyTag       DNSOptionCode = 14\n\tDNSOptionCodeEDNSClientTag    DNSOptionCode = 16\n\tDNSOptionCodeEDNSServerTag    DNSOptionCode = 17\n\tDNSOptionCodeDeviceID         DNSOptionCode = 26946\n)\n\n// DNSOPT is a DNS Option, see RFC6891, section 6.1.2\ntype DNSOPT struct {\n\tCode DNSOptionCode\n\tData []byte\n}\n\nfunc (opt DNSOPT) String() string {\n\treturn fmt.Sprintf(\"%s=%x\", opt.Code, opt.Data)\n}\n\nvar (\n\terrMaxRecursion = errors.New(\"max DNS recursion level hit\")\n\n\terrDNSNameOffsetTooHigh    = errors.New(\"dns name offset too high\")\n\terrDNSNameOffsetNegative   = errors.New(\"dns name offset is negative\")\n\terrDNSPacketTooShort       = errors.New(\"DNS packet too short\")\n\terrDNSNameTooLong          = errors.New(\"dns name is too long\")\n\terrDNSNameInvalidIndex     = errors.New(\"dns name uncomputable: invalid index\")\n\terrDNSPointerOffsetTooHigh = errors.New(\"dns offset pointer too high\")\n\terrDNSIndexOutOfRange      = errors.New(\"dns index walked out of range\")\n\terrDNSNameHasNoData        = errors.New(\"no dns data found for name\")\n\n\terrCharStringMissData = errors.New(\"Insufficient data for a <character-string>\")\n\n\terrDecodeRecordLength = errors.New(\"resource record length exceeds data\")\n\n\terrDecodeQueryBadQDCount = errors.New(\"Invalid query decoding, not the right number of questions\")\n\terrDecodeQueryBadANCount = errors.New(\"Invalid query decoding, not the right number of answers\")\n\terrDecodeQueryBadNSCount = errors.New(\"Invalid query decoding, not the right number of authorities\")\n\terrDecodeQueryBadARCount = errors.New(\"Invalid query decoding, not the right number of additionals info\")\n)\n"
  },
  {
    "path": "layers/dns_test.go",
    "content": "// Copyright 2012, 2018 GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"net\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc FuzzDecodeFromBytes(f *testing.F) {\n\tf.Fuzz(func(t *testing.T, bytes []byte) {\n\t\tdns := DNS{}\n\t\tdns.DecodeFromBytes(bytes, gopacket.NilDecodeFeedback)\n\t})\n}\n\n// it have a layer like that:\n//    name: xxx.com\n//    type: CNAME\n//    class: 254 (QCLASS None)   # [RFC 2136]\n//    ttl: 0\n//    data-length: 0\n//    data: nil\nvar testPacketDNSNilRdata = []byte{\n\t0x96, 0x99, 0x28, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x02, 0x6a, 0x79, 0x09,\n\t0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x06,\n\t0x00, 0x01, 0x0c, 0x50, 0x46, 0x32, 0x45, 0x41, 0x5a, 0x43, 0x4c, 0x2d, 0x42, 0x49, 0x5a, 0x02,\n\t0x6a, 0x79, 0x09, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x03, 0x63, 0x6f, 0x6d,\n\t0x00, 0x00, 0x05, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x22, 0x00, 0x1c, 0x00,\n\t0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x22, 0x00, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0xc0, 0x22, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x00, 0x04, 0x0a,\n\t0x54, 0x4e, 0xf1,\n}\n\nfunc TestPacketDNSNilRdata(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketDNSNilRdata, LayerTypeDNS, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeDNS}, t)\n}\n\n// testPacketDNSRegression is the packet:\n//   11:08:05.708342 IP 109.194.160.4.57766 > 95.211.92.14.53: 63000% [1au] A? picslife.ru. (40)\n//      0x0000:  0022 19b6 7e22 000f 35bb 0b40 0800 4500  .\"..~\"..5..@..E.\n//      0x0010:  0044 89c4 0000 3811 2f3d 6dc2 a004 5fd3  .D....8./=m..._.\n//      0x0020:  5c0e e1a6 0035 0030 a597 f618 0010 0001  \\....5.0........\n//      0x0030:  0000 0000 0001 0870 6963 736c 6966 6502  .......picslife.\n//      0x0040:  7275 0000 0100 0100 0029 1000 0000 8000  ru.......)......\n//      0x0050:  0000                                     ..\nvar testPacketDNSRegression = []byte{\n\t0x00, 0x22, 0x19, 0xb6, 0x7e, 0x22, 0x00, 0x0f, 0x35, 0xbb, 0x0b, 0x40, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x44, 0x89, 0xc4, 0x00, 0x00, 0x38, 0x11, 0x2f, 0x3d, 0x6d, 0xc2, 0xa0, 0x04, 0x5f, 0xd3,\n\t0x5c, 0x0e, 0xe1, 0xa6, 0x00, 0x35, 0x00, 0x30, 0xa5, 0x97, 0xf6, 0x18, 0x00, 0x10, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x70, 0x69, 0x63, 0x73, 0x6c, 0x69, 0x66, 0x65, 0x02,\n\t0x72, 0x75, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x29, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00,\n\t0x00, 0x00,\n}\n\nfunc TestPacketDNSRegression(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketDNSRegression, LinkTypeEthernet, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t)\n}\nfunc BenchmarkDecodePacketDNSRegression(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketDNSRegression, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// response to `dig TXT google.com` over IPv4 link:\nvar testParseDNSTypeTXTValue = `v=spf1 include:_spf.google.com ~all`\nvar testParseDNSTypeTXT = []byte{\n\t0x02, 0x00, 0x00, 0x00, // PF_INET\n\t0x45, 0x00, 0x00, 0x73, 0x00, 0x00, 0x40, 0x00, 0x39, 0x11, 0x64, 0x98, 0xd0, 0x43, 0xde, 0xde,\n\t0x0a, 0xba, 0x23, 0x06, 0x00, 0x35, 0x81, 0xb2, 0x00, 0x5f, 0xdc, 0xb5, 0x98, 0x71, 0x81, 0x80,\n\t0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x03,\n\t0x63, 0x6f, 0x6d, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00,\n\t0x0e, 0x10, 0x00, 0x24, 0x23, 0x76, 0x3d, 0x73, 0x70, 0x66, 0x31, 0x20, 0x69, 0x6e, 0x63, 0x6c,\n\t0x75, 0x64, 0x65, 0x3a, 0x5f, 0x73, 0x70, 0x66, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,\n\t0x63, 0x6f, 0x6d, 0x20, 0x7e, 0x61, 0x6c, 0x6c, 0x00, 0x00, 0x29, 0x10, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00,\n}\n\nfunc TestParseDNSTypeTXT(t *testing.T) {\n\tp := gopacket.NewPacket(testParseDNSTypeTXT, LinkTypeNull, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeLoopback, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t)\n\tanswers := p.Layer(LayerTypeDNS).(*DNS).Answers\n\tif len(answers) != 1 {\n\t\tt.Error(\"Failed to parse 1 DNS answer\")\n\t}\n\tif len(answers[0].TXTs) != 1 {\n\t\tt.Error(\"Failed to parse 1 TXT record\")\n\t}\n\ttxt := string(answers[0].TXTs[0])\n\tif txt != testParseDNSTypeTXTValue {\n\t\tt.Errorf(\"Incorrect TXT value, expected %q, got %q\", testParseDNSTypeTXTValue, txt)\n\t}\n}\n\nvar testParseDNSBadVers = []byte{\n\t0x02, 0x00, 0x00, 0x00, // PF_INET\n\t0x45, 0x00, 0x00, 0x38, 0xa5, 0xa0, 0x40, 0x00, 0x38, 0x11, 0x00, 0xbd, 0xc0, 0x05, 0x05, 0xf1,\n\t0xac, 0x1e, 0x2a, 0x43, 0x00, 0x35, 0xfd, 0x78, 0x00, 0x24, 0x40, 0xc1, 0x8f, 0xb3, 0x81, 0x00,\n\t0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x29,\n\t0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\nvar testParseDNSBadVersResponseCode = DNSResponseCodeBadVers\n\nfunc TestParseDNSBadVers(t *testing.T) {\n\tp := gopacket.NewPacket(testParseDNSBadVers, LinkTypeNull, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeLoopback, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t)\n\tquestions := p.Layer(LayerTypeDNS).(*DNS).Questions\n\tif len(questions) != 1 {\n\t\tt.Error(\"Failed to parse 1 DNS question\")\n\t}\n\tanswers := p.Layer(LayerTypeDNS).(*DNS).Answers\n\tif len(answers) != 0 {\n\t\tt.Error(\"Failed to parse 0 DNS answer\")\n\t}\n\tadditionals := p.Layer(LayerTypeDNS).(*DNS).Additionals\n\tif len(additionals) != 1 {\n\t\tt.Error(\"Failed to parse 1 DNS additional\")\n\t}\n\n\toptAll := additionals[0].OPT\n\tif len(optAll) != 0 {\n\t\tt.Errorf(\"Parsed %d OPTs, expected 0\", len(optAll))\n\t}\n\tresponseCode := p.Layer(LayerTypeDNS).(*DNS).ResponseCode\n\tif responseCode != testParseDNSBadVersResponseCode {\n\t\tt.Errorf(\"Incorrect extended response code, expected %q, got %q\", testParseDNSBadVersResponseCode, responseCode)\n\t}\n}\n\nvar testParseDNSBadCookie = []byte{\n\t0x02, 0x00, 0x00, 0x00, // PF_INET\n\t0x45, 0x00, 0x00, 0x54, 0xfe, 0xaa, 0x00, 0x00, 0x40, 0x11, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x01,\n\t0x7f, 0x00, 0x00, 0x01, 0x00, 0x35, 0xd6, 0xaa, 0x00, 0x40, 0xfe, 0x53, 0xf6, 0xab, 0x81, 0x87,\n\t0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x29,\n\t0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0a, 0x00, 0x18, 0x36, 0xbf, 0x11, 0x1f,\n\t0xef, 0x2e, 0x01, 0x09, 0x7d, 0x8f, 0xfe, 0x06, 0x5c, 0x63, 0x6f, 0xfb, 0x14, 0x2d, 0x76, 0x74,\n\t0x94, 0x40, 0x7a, 0x73,\n}\nvar testParseDNSBadCookieResponseCode = DNSResponseCodeBadCookie\n\nfunc TestParseDNSBadCookie(t *testing.T) {\n\tp := gopacket.NewPacket(testParseDNSBadCookie, LinkTypeNull, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeLoopback, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t)\n\tquestions := p.Layer(LayerTypeDNS).(*DNS).Questions\n\tif len(questions) != 1 {\n\t\tt.Error(\"Failed to parse 1 DNS question\")\n\t}\n\tanswers := p.Layer(LayerTypeDNS).(*DNS).Answers\n\tif len(answers) != 0 {\n\t\tt.Error(\"Failed to parse 0 DNS answer\")\n\t}\n\tadditionals := p.Layer(LayerTypeDNS).(*DNS).Additionals\n\tif len(additionals) != 1 {\n\t\tt.Error(\"Failed to parse 1 DNS additional\")\n\t}\n\n\toptAll := additionals[0].OPT\n\tif len(optAll) != 1 {\n\t\tt.Errorf(\"Parsed %d OPTs, expected 1\", len(optAll))\n\t}\n\tresponseCode := p.Layer(LayerTypeDNS).(*DNS).ResponseCode\n\tif responseCode != testParseDNSBadCookieResponseCode {\n\t\tt.Errorf(\"Incorrect extended response code, expected %q, got %q\", testParseDNSBadCookieResponseCode, responseCode)\n\t}\n}\n\nvar testParseDNSTypeURI = []byte{\n\t0x02, 0x00, 0x00, 0x00, // PF_INET\n\t0x45, 0x00, 0x00, 0x6f, 0x3e, 0x65, 0x00, 0x00, 0x40, 0x11, 0x3e, 0x17, 0x7f, 0x00, 0x00, 0x01,\n\t0x7f, 0x00, 0x00, 0x01, 0x00, 0x35, 0xe7, 0xd3, 0x00, 0x5b, 0xfe, 0x6e, 0xaf, 0x2d, 0x85, 0x80,\n\t0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x05, 0x5f, 0x68, 0x74, 0x74, 0x70, 0x03, 0x64,\n\t0x6e, 0x73, 0x04, 0x74, 0x65, 0x73, 0x74, 0x00, 0x01, 0x00, 0x00, 0x01, 0xc0, 0x0c, 0x01, 0x00,\n\t0x00, 0x01, 0x00, 0x00, 0x2a, 0x30, 0x00, 0x1c, 0x00, 0x0a, 0x00, 0x05, 0x68, 0x74, 0x74, 0x70,\n\t0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x6e, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x3a,\n\t0x38, 0x30, 0x30, 0x30, 0x00, 0x00, 0x29, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\nvar testParseDNSTypeURITarget = \"http://www.dns.test:8000\"\nvar testParseDNSTypeURIPriority = uint16(10)\nvar testParseDNSTypeURIWeight = uint16(5)\n\nfunc TestParseDNSTypeURI(t *testing.T) {\n\tp := gopacket.NewPacket(testParseDNSTypeURI, LinkTypeNull, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeLoopback, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t)\n\tanswers := p.Layer(LayerTypeDNS).(*DNS).Answers\n\tif len(answers) != 1 {\n\t\tt.Error(\"Failed to parse 1 DNS answer\")\n\t}\n\tif len(answers[0].URI.Target) < 1 {\n\t\tt.Error(\"Failed to parse 1 URI record\")\n\t}\n\ttarget := string(answers[0].URI.Target)\n\tif target != testParseDNSTypeURITarget {\n\t\tt.Errorf(\"Incorrect URI target value, expected %q, got %q\", testParseDNSTypeURITarget, target)\n\t}\n\tpriority := answers[0].URI.Priority\n\tif priority != testParseDNSTypeURIPriority {\n\t\tt.Errorf(\"Incorrect URI priority value, expected %q, got %q\", testParseDNSTypeURIPriority, priority)\n\t}\n\tweight := answers[0].URI.Weight\n\tif weight != testParseDNSTypeURIWeight {\n\t\tt.Errorf(\"Incorrect URI weight value, expected %q, got %q\", testParseDNSTypeURIWeight, weight)\n\t}\n}\n\nvar testParseDNSTypeOPT = []byte{\n\t0x00, 0x90, 0x0b, 0x12, 0x91, 0xc1, 0x00, 0x1c, 0xc0, 0x93, 0x33, 0xfb, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x5A, 0xce, 0x58, 0x00, 0x00, 0x40, 0x11, 0x67, 0xe2, 0xac, 0x10, 0x01, 0xc7, 0x4b, 0x4b,\n\t0x4b, 0x4b, 0xd6, 0x00, 0x00, 0x35, 0x00, 0x46, 0x44, 0xb0, 0x50, 0x12, 0x01, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x77, 0x77, 0x77, 0x04, 0x69, 0x65, 0x74, 0x66, 0x03,\n\t0x6f, 0x72, 0x67, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x29, 0x10, 0x00, 0x00, 0x00, 0x80,\n\t0x00, 0x00, 0x13, 0x69, 0x42, 0x00, 0x0F, 0x4F, 0x70, 0x65, 0x6E, 0x44, 0x4E, 0x53, 0x01, 0x23,\n\t0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,\n}\n\nfunc TestParseDNSTypeOPT(t *testing.T) {\n\tp := gopacket.NewPacket(testParseDNSTypeOPT, LinkTypeEthernet, testDecodeOptions)\n\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t)\n\tquestions := p.Layer(LayerTypeDNS).(*DNS).Questions\n\tif len(questions) != 1 {\n\t\tt.Error(\"Failed to parse 1 DNS question\")\n\t}\n\tadditionals := p.Layer(LayerTypeDNS).(*DNS).Additionals\n\tif len(additionals) != 1 {\n\t\tt.Error(\"Failed to parse 1 DNS additional\")\n\t}\n\n\toptAll := additionals[0].OPT\n\tif len(optAll) != 1 {\n\t\tt.Errorf(\"Parsed %d OPTs, expected 1\", len(optAll))\n\t}\n\n\tif additionals[0].OPT[0].Code != DNSOptionCodeDeviceID {\n\t\tt.Error(\"Failed to parse the OPT Code\")\n\t}\n\tif string(additionals[0].OPT[0].Data[:7]) != \"OpenDNS\" {\n\t\tt.Error(\"Failed to parse the Data Part 1\")\n\t}\n\tif !bytes.Equal(additionals[0].OPT[0].Data[7:], []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}) {\n\t\tt.Error(\"Failed to parse the Data Part 2\")\n\t}\n}\n\nfunc testQuestionEqual(t *testing.T, i int, exp, got DNSQuestion) {\n\tif !bytes.Equal(exp.Name, got.Name) {\n\t\tt.Errorf(\"expected Questions[%d].Name = %v, got %v\", i, string(exp.Name), string(got.Name))\n\t}\n\tif exp.Type != got.Type {\n\t\tt.Errorf(\"expected Questions[%d].Type = %v, got %v\", i, exp.Type, got.Type)\n\t}\n\tif exp.Class != got.Class {\n\t\tt.Errorf(\"expected Questions[%d].Class = %v, got %v\", i, exp.Class, got.Class)\n\t}\n}\n\nfunc testResourceEqual(t *testing.T, i int, name string, exp, got DNSResourceRecord) {\n\tif !bytes.Equal(exp.Name, got.Name) {\n\t\tt.Errorf(\"expected %s[%d].Name = %v, got %v\", name, i, string(exp.Name), string(got.Name))\n\t}\n\n\tif exp.Type != got.Type {\n\t\tt.Errorf(\"expected %s[%d].Type = %v, got %v\", name, i, exp.Type, got.Type)\n\t}\n\n\tif exp.Class != got.Class {\n\t\tt.Errorf(\"expected %s[%d].Class = %v, got %v\", name, i, exp.Class, got.Class)\n\t}\n\n\tif exp.TTL != got.TTL {\n\t\tt.Errorf(\"expected %s[%d].TTL = %v, got %v\", name, i, exp.TTL, got.TTL)\n\t}\n\tif exp.DataLength != got.DataLength {\n\t\tt.Errorf(\"expected %s[%d].DataLength = %v, got %v\", name, i, exp.DataLength, got.DataLength)\n\t}\n\n\t// we don't check .Data\n\n\tif !exp.IP.Equal(got.IP) {\n\t\tt.Errorf(\"expected %s[%d].IP = %v, got %v\", name, i, exp.IP, got.IP)\n\t}\n\tif !bytes.Equal(exp.NS, got.NS) {\n\t\tt.Errorf(\"expected %s[%d].NS = %v, got %v\", name, i, exp.NS, got.NS)\n\t}\n\tif !bytes.Equal(exp.CNAME, got.CNAME) {\n\t\tt.Errorf(\"expected %s[%d].CNAME = %v, got %v\", name, i, exp.CNAME, got.CNAME)\n\t}\n\tif !bytes.Equal(exp.PTR, got.PTR) {\n\t\tt.Errorf(\"expected %s[%d].PTR = %v, got %v\", name, i, exp.PTR, got.PTR)\n\t}\n\tif len(exp.TXTs) != len(got.TXTs) {\n\t\tt.Errorf(\"expected %s[%d].TXTs = %v, got %v\", name, i, exp.TXTs, got.TXTs)\n\t}\n\tfor j := range exp.TXTs {\n\t\tif !bytes.Equal(exp.TXTs[j], got.TXTs[j]) {\n\t\t\tt.Errorf(\"expected %s[%d].TXTs[%d] = %v, got %v\", name, i, j, exp.TXTs[j], got.TXTs[j])\n\t\t}\n\t}\n\n\t// SOA\n\tif !bytes.Equal(exp.SOA.MName, got.SOA.MName) {\n\t\tt.Errorf(\"expected %s[%d].SOA.MName = %v, got %v\", name, i, exp.SOA.MName, got.SOA.MName)\n\t}\n\tif !bytes.Equal(exp.SOA.RName, got.SOA.RName) {\n\t\tt.Errorf(\"expected %s[%d].SOA.RName = %v, got %v\", name, i, exp.SOA.RName, got.SOA.RName)\n\t}\n\tif exp.SOA.Serial != got.SOA.Serial {\n\t\tt.Errorf(\"expected %s[%d].SOA.Serial = %v, got %v\", name, i, exp.SOA.Serial, got.SOA.Serial)\n\t}\n\tif exp.SOA.Refresh != got.SOA.Refresh {\n\t\tt.Errorf(\"expected %s[%d].SOA.Refresh = %v, got %v\", name, i, exp.SOA.Refresh, got.SOA.Refresh)\n\t}\n\tif exp.SOA.Retry != got.SOA.Retry {\n\t\tt.Errorf(\"expected %s[%d].SOA.Retry = %v, got %v\", name, i, exp.SOA.Retry, got.SOA.Retry)\n\t}\n\tif exp.SOA.Expire != got.SOA.Expire {\n\t\tt.Errorf(\"expected %s[%d].SOA.Expire = %v, got %v\", name, i, exp.SOA.Expire, got.SOA.Expire)\n\t}\n\tif exp.SOA.Minimum != got.SOA.Minimum {\n\t\tt.Errorf(\"expected %s[%d].SOA.Minimum = %v, got %v\", name, i, exp.SOA.Minimum, got.SOA.Minimum)\n\t}\n\n\t// SRV\n\tif !bytes.Equal(exp.SRV.Name, got.SRV.Name) {\n\t\tt.Errorf(\"expected %s[%d].SRV.Name = %v, got %v\", name, i, exp.SRV.Name, got.SRV.Name)\n\t}\n\tif exp.SRV.Weight != got.SRV.Weight {\n\t\tt.Errorf(\"expected %s[%d].SRV.Weight = %v, got %v\", name, i, exp.SRV.Weight, got.SRV.Weight)\n\t}\n\tif exp.SRV.Port != got.SRV.Port {\n\t\tt.Errorf(\"expected %s[%d].SRV.Port = %v, got %v\", name, i, exp.SRV.Port, got.SRV.Port)\n\t}\n\t// MX\n\tif !bytes.Equal(exp.MX.Name, got.MX.Name) {\n\t\tt.Errorf(\"expected %s[%d].MX.Name = %v, got %v\", name, i, exp.MX.Name, got.MX.Name)\n\t}\n\tif exp.MX.Preference != got.MX.Preference {\n\t\tt.Errorf(\"expected %s[%d].MX.Preference = %v, got %v\", name, i, exp.MX.Preference, got.MX.Preference)\n\t}\n\t// URI\n\tif !bytes.Equal(exp.URI.Target, got.URI.Target) {\n\t\tt.Errorf(\"expected %s[%d].URI.Target = %v, got %v\", name, i, exp.URI.Target, got.URI.Target)\n\t}\n\tif exp.URI.Weight != got.URI.Weight {\n\t\tt.Errorf(\"expected %s[%d].URI.Weight = %v, got %v\", name, i, exp.URI.Weight, got.URI.Weight)\n\t}\n\tif exp.URI.Priority != got.URI.Priority {\n\t\tt.Errorf(\"expected %s[%d].URI.Priority = %v, got %v\", name, i, exp.URI.Priority, got.URI.Priority)\n\t}\n\n\t// OPT\n\tif len(exp.OPT) != len(got.OPT) {\n\t\tt.Errorf(\"expected len(%s[%d].OPT) = %v, got %v\", name, i, len(exp.OPT), len(got.OPT))\n\t}\n\n\tfor j := range exp.OPT {\n\t\tif exp.OPT[j].Code != got.OPT[j].Code {\n\t\t\tt.Errorf(\"expected %s[%d].OPT[%d].Code = %v, got %v\", name, i, j, exp.OPT[j].Code, got.OPT[j].Code)\n\t\t}\n\t\tif !bytes.Equal(exp.OPT[j].Data, got.OPT[j].Data) {\n\t\t\tt.Errorf(\"expected %s[%d].OPT[%d].Data = %v, got %v\", name, i, j, exp.OPT[j].Data, got.OPT[j].Data)\n\t\t}\n\t}\n}\n\nfunc testDNSEqual(t *testing.T, exp, got *DNS) {\n\tif exp.ID != got.ID {\n\t\tt.Errorf(\"expected ID = %v, got %v\", exp.ID, got.ID)\n\t}\n\tif exp.AA != got.AA {\n\t\tt.Errorf(\"expected AA = %v, got %v\", exp.AA, got.AA)\n\t}\n\tif exp.OpCode != got.OpCode {\n\t\tt.Errorf(\"expected OpCode = %v, got %v\", exp.OpCode, got.OpCode)\n\t}\n\tif exp.AA != got.AA {\n\t\tt.Errorf(\"expected AA = %v, got %v\", exp.AA, got.AA)\n\t}\n\tif exp.TC != got.TC {\n\t\tt.Errorf(\"expected TC = %v, got %v\", exp.TC, got.TC)\n\t}\n\tif exp.RD != got.RD {\n\t\tt.Errorf(\"expected RD = %v, got %v\", exp.RD, got.RD)\n\t}\n\tif exp.RA != got.RA {\n\t\tt.Errorf(\"expected RA = %v, got %v\", exp.RA, got.RA)\n\t}\n\tif exp.Z != got.Z {\n\t\tt.Errorf(\"expected Z = %v, got %v\", exp.Z, got.Z)\n\t}\n\tif exp.ResponseCode != got.ResponseCode {\n\t\tt.Errorf(\"expected ResponseCode = %v, got %v\", exp.ResponseCode, got.ResponseCode)\n\t}\n\tif exp.QDCount != got.QDCount {\n\t\tt.Errorf(\"expected QDCount = %v, got %v\", exp.QDCount, got.QDCount)\n\t}\n\tif exp.ANCount != got.ANCount {\n\t\tt.Errorf(\"expected ANCount = %v, got %v\", exp.ANCount, got.ANCount)\n\t}\n\tif exp.ANCount != got.ANCount {\n\t\tt.Errorf(\"expected ANCount = %v, got %v\", exp.ANCount, got.ANCount)\n\t}\n\tif exp.NSCount != got.NSCount {\n\t\tt.Errorf(\"expected NSCount = %v, got %v\", exp.NSCount, got.NSCount)\n\t}\n\tif exp.ARCount != got.ARCount {\n\t\tt.Errorf(\"expected ARCount = %v, got %v\", exp.ARCount, got.ARCount)\n\t}\n\n\tif len(exp.Questions) != len(got.Questions) {\n\t\tt.Errorf(\"expected %d Questions, got %d\", len(exp.Questions), len(got.Questions))\n\t}\n\tfor i := range exp.Questions {\n\t\ttestQuestionEqual(t, i, exp.Questions[i], got.Questions[i])\n\t}\n\n\tif len(exp.Answers) != len(got.Answers) {\n\t\tt.Errorf(\"expected %d Answers, got %d\", len(exp.Answers), len(got.Answers))\n\t}\n\tfor i := range exp.Answers {\n\t\ttestResourceEqual(t, i, \"Answers\", exp.Answers[i], got.Answers[i])\n\t}\n\n\tif len(exp.Authorities) != len(got.Authorities) {\n\t\tt.Errorf(\"expected %d Answers, got %d\", len(exp.Authorities), len(got.Authorities))\n\t}\n\tfor i := range exp.Authorities {\n\t\ttestResourceEqual(t, i, \"Authorities\", exp.Authorities[i], got.Authorities[i])\n\t}\n\n\tif len(exp.Additionals) != len(got.Additionals) {\n\t\tt.Errorf(\"expected %d Additionals, got %d\", len(exp.Additionals), len(got.Additionals))\n\t}\n\tfor i := range exp.Additionals {\n\t\ttestResourceEqual(t, i, \"Additionals\", exp.Additionals[i], got.Additionals[i])\n\t}\n}\n\nfunc TestDNSEncodeQuery(t *testing.T) {\n\tdns := &DNS{ID: 1234, OpCode: DNSOpCodeQuery, RD: true}\n\tdns.Questions = append(dns.Questions,\n\t\tDNSQuestion{\n\t\t\tName:  []byte(\"example1.com\"),\n\t\t\tType:  DNSTypeA,\n\t\t\tClass: DNSClassIN,\n\t\t})\n\n\tdns.Questions = append(dns.Questions,\n\t\tDNSQuestion{\n\t\t\tName:  []byte(\"example2.com\"),\n\t\t\tType:  DNSTypeA,\n\t\t\tClass: DNSClassIN,\n\t\t})\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\terr := gopacket.SerializeLayers(buf, opts, dns)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif int(dns.QDCount) != len(dns.Questions) {\n\t\tt.Errorf(\"fix lengths did not adjust QDCount, expected %d got %d\", len(dns.Questions), dns.QDCount)\n\t}\n\n\tp2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDNS, testDecodeOptions)\n\tdns2 := p2.Layer(LayerTypeDNS).(*DNS)\n\ttestDNSEqual(t, dns, dns2)\n}\n\nfunc TestDNSEncodeQueryWithOPT(t *testing.T) {\n\tdns := &DNS{ID: 1234, OpCode: DNSOpCodeQuery, RD: true}\n\tdns.Questions = append(dns.Questions,\n\t\tDNSQuestion{\n\t\t\tName:  []byte(\"example1.com\"),\n\t\t\tType:  DNSTypeA,\n\t\t\tClass: DNSClassIN,\n\t\t})\n\n\tdns.Questions = append(dns.Questions,\n\t\tDNSQuestion{\n\t\t\tName:  []byte(\"example2.com\"),\n\t\t\tType:  DNSTypeA,\n\t\t\tClass: DNSClassIN,\n\t\t})\n\tdns.Additionals = append(dns.Additionals,\n\t\tDNSResourceRecord{\n\t\t\tType:  DNSTypeOPT,\n\t\t\tClass: 4096,\n\t\t\tOPT: []DNSOPT{\n\t\t\t\tDNSOPT{\n\t\t\t\t\tCode: DNSOptionCodeDeviceID,\n\t\t\t\t\tData: []byte(\"OpenDNS\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\terr := gopacket.SerializeLayers(buf, opts, dns)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif int(dns.QDCount) != len(dns.Questions) {\n\t\tt.Errorf(\"fix lengths did not adjust QDCount, expected %d got %d\", len(dns.Questions), dns.QDCount)\n\t}\n\tif int(dns.ARCount) != len(dns.Additionals) {\n\t\tt.Errorf(\"fix lengths did not adjust ARCount, expected %d got %d\", len(dns.Additionals), dns.ARCount)\n\t}\n\n\tp2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDNS, testDecodeOptions)\n\tdns2 := p2.Layer(LayerTypeDNS).(*DNS)\n\ttestDNSEqual(t, dns, dns2)\n}\n\nfunc TestDNSEncodeResponse(t *testing.T) {\n\tdns := &DNS{ID: 1234, QR: true, OpCode: DNSOpCodeQuery,\n\t\tAA: true, RD: true, RA: true}\n\tdns.Questions = append(dns.Questions,\n\t\tDNSQuestion{\n\t\t\tName:  []byte(\"example1.com\"),\n\t\t\tType:  DNSTypeA,\n\t\t\tClass: DNSClassIN,\n\t\t})\n\tdns.Questions = append(dns.Questions,\n\t\tDNSQuestion{\n\t\t\tName:  []byte(\"www.example2.com\"),\n\t\t\tType:  DNSTypeAAAA,\n\t\t\tClass: DNSClassIN,\n\t\t})\n\n\tdns.Answers = append(dns.Answers,\n\t\tDNSResourceRecord{\n\t\t\tName:  []byte(\"example1.com\"),\n\t\t\tType:  DNSTypeA,\n\t\t\tClass: DNSClassIN,\n\t\t\tTTL:   1024,\n\t\t\tIP:    net.IP([]byte{1, 2, 3, 4}),\n\t\t})\n\n\tdns.Answers = append(dns.Answers,\n\t\tDNSResourceRecord{\n\t\t\tName:  []byte(\"example1.com\"),\n\t\t\tType:  DNSTypeURI,\n\t\t\tClass: DNSClassIN,\n\t\t\tTTL:   1024,\n\t\t\tURI: DNSURI{\n\t\t\t\tTarget:   []byte(\"http://www.example2.com/\"),\n\t\t\t\tPriority: 10240,\n\t\t\t\tWeight:   1,\n\t\t\t},\n\t\t})\n\n\tdns.Answers = append(dns.Answers,\n\t\tDNSResourceRecord{\n\t\t\tName:  []byte(\"www.example2.com\"),\n\t\t\tType:  DNSTypeAAAA,\n\t\t\tClass: DNSClassIN,\n\t\t\tTTL:   1024,\n\t\t\tIP:    net.IP([]byte{5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4}),\n\t\t})\n\n\tdns.Answers = append(dns.Answers,\n\t\tDNSResourceRecord{\n\t\t\tName:  []byte(\"www.example2.com\"),\n\t\t\tType:  DNSTypeCNAME,\n\t\t\tClass: DNSClassIN,\n\t\t\tTTL:   1024,\n\t\t\tCNAME: []byte(\"example2.com\"),\n\t\t})\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\terr := gopacket.SerializeLayers(buf, opts, dns)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif int(dns.ANCount) != len(dns.Answers) {\n\t\tt.Errorf(\"fix lengths did not adjust ANCount, expected %d got %d\", len(dns.Answers), dns.ANCount)\n\t}\n\tfor i, a := range dns.Answers {\n\t\tif a.DataLength == 0 {\n\t\t\tt.Errorf(\"fix lengths did not adjust Answers[%d].DataLength\", i)\n\t\t}\n\t}\n\n\tp2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDNS, testDecodeOptions)\n\tdns2 := p2.Layer(LayerTypeDNS).(*DNS)\n\ttestDNSEqual(t, dns, dns2)\n}\n\n// testDNSMalformedPacket is the packet:\n//   10:30:00.389666 IP 10.77.43.131.60718 > 10.1.0.17.53: 18245 updateD [b2&3=0x5420] [18516a] [12064q] [21584n] [12081au][|domain]\n//   \t0x0000:  0000 0101 0000 4e96 1476 afa1 0800 4500  ......N..v....E.\n//   \t0x0010:  0039 d431 0000 f311 b3a0 0a4d 2b83 0a01  .9.1.......M+...\n//   \t0x0020:  0011 ed2e 0035 0025 0832 4745 5420 2f20  .....5.%.2GET./.\n//   \t0x0030:  4854 5450 2f31 2e31 0d0a 486f 7374 3a20  HTTP/1.1..Host:.\n//   \t0x0040:  7777 770d 0a0d 0a                        www....\nvar testDNSMalformedPacket = []byte{\n\t0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x4e, 0x96, 0x14, 0x76, 0xaf, 0xa1, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x39, 0xd4, 0x31, 0x00, 0x00, 0xf3, 0x11, 0xb3, 0xa0, 0x0a, 0x4d, 0x2b, 0x83, 0x0a, 0x01,\n\t0x00, 0x11, 0xed, 0x2e, 0x00, 0x35, 0x00, 0x25, 0x08, 0x32, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20,\n\t0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20,\n\t0x77, 0x77, 0x77, 0x0d, 0x0a, 0x0d, 0x0a,\n}\n\nfunc TestDNSMalformedPacket(t *testing.T) {\n\tp := gopacket.NewPacket(testDNSMalformedPacket, LinkTypeEthernet, testDecodeOptions)\n\tif errLayer := p.ErrorLayer(); errLayer == nil {\n\t\tt.Error(\"No error layer on invalid DNS name\")\n\t} else if err := errLayer.Error(); !strings.Contains(err.Error(), \"invalid index\") {\n\t\tt.Errorf(\"unexpected error message: %v\", err)\n\t}\n}\n\n// testDNSMalformedPacket2 is the packet:\n//   15:14:42.056054 IP 10.77.0.245.53 > 10.1.0.45.38769: 12625 zoneInit YXRRSet- [49833q],[|domain]\n//   \t0x0000:  0055 22af c637 0022 55ac deac 0800 4500  .U\"..7.\"U.....E.\n//   \t0x0010:  0079 3767 4000 3911 f49d 0a4d 00f5 0a01  .y7g@.9....M....\n//   \t0x0020:  002d 0035 9771 0065 6377 3151 f057 c2a9  .-.5.q.ecw1Q.W..\n//   \t0x0030:  fc6e e86a beb0 f7d4 8599 373e b5f8 9db2  .n.j......7>....\n//   \t0x0040:  a399 21a1 9762 def1 def4 f5ab 5675 023e  ..!..b......Vu.>\n//   \t0x0050:  c9ca 304f 178a c2ad f2fc 677a 0e4c b892  ..0O......gz.L..\n//   \t0x0060:  ab71 09bb 1ea4 f7c4 fe47 7a39 868b 29a0  .q.......Gz9..).\n//   \t0x0070:  62c4 d184 5b4e 8817 4cc0 d1d0 d430 11d3  b...[N..L....0..\n//   \t0x0080:  d147 543f afc7 1a                        .GT?...\nvar testDNSMalformedPacket2 = []byte{\n\t0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x79, 0x37, 0x67, 0x40, 0x00, 0x39, 0x11, 0xf4, 0x9d, 0x0a, 0x4d, 0x00, 0xf5, 0x0a, 0x01,\n\t0x00, 0x2d, 0x00, 0x35, 0x97, 0x71, 0x00, 0x65, 0x63, 0x77, 0x31, 0x51, 0xf0, 0x57, 0xc2, 0xa9,\n\t0xfc, 0x6e, 0xe8, 0x6a, 0xbe, 0xb0, 0xf7, 0xd4, 0x85, 0x99, 0x37, 0x3e, 0xb5, 0xf8, 0x9d, 0xb2,\n\t0xa3, 0x99, 0x21, 0xa1, 0x97, 0x62, 0xde, 0xf1, 0xde, 0xf4, 0xf5, 0xab, 0x56, 0x75, 0x02, 0x3e,\n\t0xc9, 0xca, 0x30, 0x4f, 0x17, 0x8a, 0xc2, 0xad, 0xf2, 0xfc, 0x67, 0x7a, 0x0e, 0x4c, 0xb8, 0x92,\n\t0xab, 0x71, 0x09, 0xbb, 0x1e, 0xa4, 0xf7, 0xc4, 0xfe, 0x47, 0x7a, 0x39, 0x86, 0x8b, 0x29, 0xa0,\n\t0x62, 0xc4, 0xd1, 0x84, 0x5b, 0x4e, 0x88, 0x17, 0x4c, 0xc0, 0xd1, 0xd0, 0xd4, 0x30, 0x11, 0xd3,\n\t0xd1, 0x47, 0x54, 0x3f, 0xaf, 0xc7, 0x1a,\n}\n\nfunc TestDNSMalformedPacket2(t *testing.T) {\n\tp := gopacket.NewPacket(testDNSMalformedPacket2, LinkTypeEthernet, testDecodeOptions)\n\tif errLayer := p.ErrorLayer(); errLayer == nil {\n\t\tt.Error(\"No error layer on invalid DNS name\")\n\t} else if err := errLayer.Error(); !strings.Contains(err.Error(), \"offset pointer too high\") {\n\t\tt.Errorf(\"unexpected error message: %v\", err)\n\t}\n}\n\n// testBlankNameRootQuery is the packet:\n//   08:31:18.143065 IP 10.77.0.26.53 > 10.1.0.233.65071: 59508- 0/13/3 (508)\n//   \t0x0000:  0055 22af c637 0022 55ac deac 0800 4500  .U\"..7.\"U.....E.\n//   \t0x0010:  0218 76b2 4000 7211 7ad2 0a4d 001a 0a01  ..v.@.r.z..M....\n//   \t0x0020:  00e9 0035 fe2f 0204 b8f5 e874 8100 0001  ...5./.....t....\n//   \t0x0030:  0000 000d 0003 0c61 786b 7663 6863 7063  .......axkvchcpc\n//   \t0x0040:  7073 6c0a 7878 7878 7878 7878 7878 036e  psl.xxxxxxxxxx.n\n//   \t0x0050:  6574 0000 0100 0100 0002 0001 0000 0e10  et..............\n//   \t0x0060:  0014 016d 0c72 6f6f 742d 7365 7276 6572  ...m.root-server\n//   \t0x0070:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........\n//   \t0x0080:  0014 0161 0c72 6f6f 742d 7365 7276 6572  ...a.root-server\n//   \t0x0090:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........\n//   \t0x00a0:  0014 0169 0c72 6f6f 742d 7365 7276 6572  ...i.root-server\n//   \t0x00b0:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........\n//   \t0x00c0:  0014 0162 0c72 6f6f 742d 7365 7276 6572  ...b.root-server\n//   \t0x00d0:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........\n//   \t0x00e0:  0014 016c 0c72 6f6f 742d 7365 7276 6572  ...l.root-server\n//   \t0x00f0:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........\n//   \t0x0100:  0014 0166 0c72 6f6f 742d 7365 7276 6572  ...f.root-server\n//   \t0x0110:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........\n//   \t0x0120:  0014 0167 0c72 6f6f 742d 7365 7276 6572  ...g.root-server\n//   \t0x0130:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........\n//   \t0x0140:  0014 0164 0c72 6f6f 742d 7365 7276 6572  ...d.root-server\n//   \t0x0150:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........\n//   \t0x0160:  0014 0168 0c72 6f6f 742d 7365 7276 6572  ...h.root-server\n//   \t0x0170:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........\n//   \t0x0180:  0014 0165 0c72 6f6f 742d 7365 7276 6572  ...e.root-server\n//   \t0x0190:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........\n//   \t0x01a0:  0014 016a 0c72 6f6f 742d 7365 7276 6572  ...j.root-server\n//   \t0x01b0:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........\n//   \t0x01c0:  0014 016b 0c72 6f6f 742d 7365 7276 6572  ...k.root-server\n//   \t0x01d0:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........\n//   \t0x01e0:  0014 0163 0c72 6f6f 742d 7365 7276 6572  ...c.root-server\n//   \t0x01f0:  7303 6e65 7400 c038 0001 0001 0000 0e10  s.net..8........\n//   \t0x0200:  0004 ca0c 1b21 c058 0001 0001 0000 0e10  .....!.X........\n//   \t0x0210:  0004 c629 0004 c078 0001 0001 0000 0e10  ...)...x........\n//   \t0x0220:  0004 c024 9411                           ...$..\nvar testBlankNameRootQuery = []byte{\n\t0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,\n\t0x02, 0x18, 0x76, 0xb2, 0x40, 0x00, 0x72, 0x11, 0x7a, 0xd2, 0x0a, 0x4d, 0x00, 0x1a, 0x0a, 0x01,\n\t0x00, 0xe9, 0x00, 0x35, 0xfe, 0x2f, 0x02, 0x04, 0xb8, 0xf5, 0xe8, 0x74, 0x81, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x0d, 0x00, 0x03, 0x0c, 0x61, 0x78, 0x6b, 0x76, 0x63, 0x68, 0x63, 0x70, 0x63,\n\t0x70, 0x73, 0x6c, 0x0a, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x03, 0x6e,\n\t0x65, 0x74, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x14, 0x01, 0x6d, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,\n\t0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x14, 0x01, 0x61, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,\n\t0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x14, 0x01, 0x69, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,\n\t0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x14, 0x01, 0x62, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,\n\t0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x14, 0x01, 0x6c, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,\n\t0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x14, 0x01, 0x66, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,\n\t0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x14, 0x01, 0x67, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,\n\t0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x14, 0x01, 0x64, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,\n\t0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x14, 0x01, 0x68, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,\n\t0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x14, 0x01, 0x65, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,\n\t0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x14, 0x01, 0x6a, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,\n\t0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x14, 0x01, 0x6b, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,\n\t0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x14, 0x01, 0x63, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,\n\t0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x38, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x04, 0xca, 0x0c, 0x1b, 0x21, 0xc0, 0x58, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x04, 0xc6, 0x29, 0x00, 0x04, 0xc0, 0x78, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,\n\t0x00, 0x04, 0xc0, 0x24, 0x94, 0x11,\n}\n\nfunc TestBlankNameRootQuery(t *testing.T) {\n\tp := gopacket.NewPacket(testBlankNameRootQuery, LinkTypeEthernet, testDecodeOptions)\n\tif err := p.ErrorLayer(); err != nil {\n\t\tt.Error(\"Error layer on blank DNS name field:\", err)\n\t}\n}\n\n// testAnotherMalformedDNS is the packet:\n//   10:52:13.690904 IP 10.77.0.29.53 > 10.1.0.6.42280: 13491 op6+% [b2&3=0x3313] [11720a] [23583q] [29742n] [52087au] Type22277 (Class 43688)? M- M-<.VM-^KM-wQM-s\"M-^E^]M-+^Wx^P^@M-^\\^\\M-oM-FM-U^F^E7M-tM-^VM-^[M-F^H>G^FM-uM-^KM-_6GM-[M-jM-bM-^H]hM-^J.[|domain]\n//   \t0x0000:  0055 22af c637 0022 55ac deac 0800 4500  .U\"..7.\"U.....E.\n//   \t0x0010:  05c1 2eea 4000 3611 fbd1 0a4d 001d 0a01  ....@.6....M....\n//   \t0x0020:  0006 0035 a528 05ad 00a2 34b3 3313 5c1f  ...5.(....4.3.\\.\n//   \t0x0030:  2dc8 742e cb77 2da0 bc2e 568b f751 f322  -.t..w-...V..Q.\"\n//   \t0x0040:  851d ab17 7810 009c 1cef c6d5 0605 37f4  ....x.........7.\n//   \t0x0050:  969b c65e 483e 4706 f58b df36 47db eae2  ...^H>G....6G...\n//   \t0x0060:  885d 688a c5a5 5705 aaa8 95eb 93a4 d85a  .]h...W........Z\n//   \t0x0070:  c9af 261f 7816 a354 2d23 d84a 579c 4876  ..&.x..T-#.JW.Hv\n//   \t0x0080:  a391 43db 5c41 191a 92b8 dcdd 6839 eef5  ..C.\\A......h9..\n//   \t0x0090:  728e 13e0 0679 6f47 88a0 25b9 44d8 f8e7  r....yoG..%.D...\n//   \t0x00a0:  8afe 0bfa f811 8da5 f8a3 1f8e d23b fe12  .............;..\n//   \t0x00b0:  d943 9327 92ad 4410 183e 688d b06d 5391  .C.'..D..>h..mS.\n//   \t0x00c0:  695b e49f 8f1e c075 d043 afe0 1174 9db0  i[.....u.C...t..\n//   \t0x00d0:  06b0 f01e b85b 3c84 945e 06d0 b20f 9eaa  .....[<..^......\n//   \t0x00e0:  123d 0ab0 2a55 309c 0ee9 3e5e db2f f377  .=..*U0...>^./.w\n//   \t0x00f0:  d7f1 9bae 373d 3316 0796 b80e dd18 5173  ....7=3.......Qs\n//   \t0x0100:  b28d 84fd 1812 d87b 42c8 5f11 4db6 b269  .......{B._.M..i\n//   \t0x0110:  1c42 4aea d5a4 644b 6c00 f0c0 fcee 71a7  .BJ...dKl.....q.\n//   \t0x0120:  e7f0 719c a207 dc5c a6fa f005 a338 7ff0  ..q....\\.....8..\n//   \t0x0130:  5beb 3b4d 8952 2a46 d47b a5a2 e1fb 9e76  [.;M.R*F.{.....v\n//   \t0x0140:  c815 6258 50f4 6997 bad5 b479 2d06 ebbb  ..bXP.i....y-...\n//   \t0x0150:  2cac 2ecc e4f0 1f94 ce9f 186c 61da 9681  ,..........la...\n//   \t0x0160:  345c 4d88 efc7 037b fbe3 4402 ea06 2e5d  4\\M....{..D....]\n//   \t0x0170:  2e6e 4860 e180 3ef7 c006 0ad1 ebb9 c4ff  .nH`..>.........\n//   \t0x0180:  dee2 f21c 02c2 751a ded8 ae2e 13a9 3fa2  ......u.......?.\n//   \t0x0190:  392a 8b54 11b2 2b4e 2bf1 4780 db9f 8c10  9*.T..+N+.G.....\n//   \t0x01a0:  ac6f 61b0 7b19 423f 07e5 4628 b870 f75d  .oa.{.B?..F(.p.]\n//   \t0x01b0:  09a3 63b2 77af 5985 a0ae 51d8 243f a7c8  ..c.w.Y...Q.$?..\n//   \t0x01c0:  ab08 7fc6 0217 c09f c412 0c45 e6aa 96bf  ...........E....\n//   \t0x01d0:  184c 4307 1f1f c4f4 7734 da31 2088 662b  .LC.....w4.1..f+\n//   \t0x01e0:  44c5 096f 1d1d 2dc5 ffd6 867d 9fc5 7b45  D..o..-....}..{E\n//   \t0x01f0:  f949 7dd9 38de 0d51 ac2a 32fc f50b 1bbe  .I}.8..Q.*2.....\n//   \t0x0200:  1c4b 5441 fbf3 0821 6c28 4530 5676 1d27  .KTA...!l(E0Vv.'\n//   \t0x0210:  5087 466c 3d5b 45a6 af7f 917a 6d43 66c2  P.Fl=[E....zmCf.\n//   \t0x0220:  036a 8bef ca60 9b13 8d29 9fda 82fa 01b1  .j...`...)......\n//   \t0x0230:  df8f 1f83 c71d 630f 349e 508c 9f7a e3da  ......c.4.P..z..\n//   \t0x0240:  a114 3622 9df8 9926 4dac 4150 d505 7b3a  ..6\"...&M.AP..{:\n//   \t0x0250:  6fed fc75 6b4f 2d60 8a89 767d 9af0 896e  o..ukO-`..v}...n\n//   \t0x0260:  907d 1ada def3 345c 0d81 283c a24f fcbb  .}....4\\..(<.O..\n//   \t0x0270:  bbdd b7b3 e3bb 9f1b d966 51b7 8217 7fa0  .........fQ.....\n//   \t0x0280:  e828 d3ca a6f1 532f 164e e405 bb3b 0de3  .(....S/.N...;..\n//   \t0x0290:  985d 6e89 d825 ebc6 d8ba 5190 a114 c6a3  .]n..%....Q.....\n//   \t0x02a0:  18b4 8aa7 181a 01ac cdc0 8048 ea72 a5e3  ...........H.r..\n//   \t0x02b0:  e37a dc57 65cd b787 39e6 c39e 317b 45d8  .z.We...9...1{E.\n//   \t0x02c0:  475c 05ba e8f8 8224 5a85 27b8 1584 8d78  G\\.....$Z.'....x\n//   \t0x02d0:  62b6 6495 ac10 338f 1122 f2ff 043e 9e2a  b.d...3..\"...>.*\n//   \t0x02e0:  1058 a910 5792 6fcd 9a96 6183 6708 8f70  .X..W.o...a.g..p\n//   \t0x02f0:  edc6 a67c 64ff 50fa 520b de94 c82c c4d6  ...|d.P.R....,..\n//   \t0x0300:  7d8f 0fd5 2f0d 9833 7c6c be10 a4e5 dc99  }.../..3|l......\n//   \t0x0310:  a467 ef5f b35b c11c e23c 131a 48b2 9cef  .g._.[...<..H...\n//   \t0x0320:  5a2f fece dd9e 2aea 0db9 faf3 a6ef b29d  Z/....*.........\n//   \t0x0330:  e85d a410 dd6a 6806 3fc6 1694 179f cb4b  .]...jh.?......K\n//   \t0x0340:  08c4 86b2 0713 cddb b257 d56b fe82 7d82  .........W.k..}.\n//   \t0x0350:  0d1f 6dc9 67b2 d2a1 6791 4f38 edf9 491f  ..m.g...g.O8..I.\n//   \t0x0360:  2c02 35f5 8165 ecc3 bc6a b631 3c7e 1ad4  ,.5..e...j.1<~..\n//   \t0x0370:  8e27 f962 f942 11b5 1b45 9bac b474 3c6e  .'.b.B...E...t<n\n//   \t0x0380:  6832 3075 be6d ac0d a8a0 7d47 a6ef 4e43  h20u.m....}G..NC\n//   \t0x0390:  6b9a 3097 8a8b 82a3 9515 362c f7d6 a37f  k.0.......6,....\n//   \t0x03a0:  7313 1199 a5f3 03dc bcc9 fb10 c23d eeb9  s............=..\n//   \t0x03b0:  78ff c8f3 0d38 9f74 ceec b7ae 63e3 3424  x....8.t....c.4$\n//   \t0x03c0:  b783 f106 011f 666b bf2d abc8 ea10 57a1  ......fk.-....W.\n//   \t0x03d0:  7cf2 4a3f 57ca 1386 bfba 27e5 4662 81c8  |.J?W.....'.Fb..\n//   \t0x03e0:  041e 1820 b3d5 c399 cd4d 222f 29f0 b994  .........M\"/)...\n//   \t0x03f0:  865a e6e2 1686 3261 b0cd caaf 07ec d0bc  .Z....2a........\n//   \t0x0400:  afb8 3cf0 51c1 6c7a 6383 6b3a ff47 9551  ..<.Q.lzc.k:.G.Q\n//   \t0x0410:  1099 525f 355e 4684 bd34 ec12 88c9 dcc2  ..R_5^F..4......\n//   \t0x0420:  d11c 826d f1df 37e6 f08f 6ce8 817d bdc3  ...m..7...l..}..\n//   \t0x0430:  20b9 a274 c645 c67d f299 fef9 287f 09ee  ...t.E.}....(...\n//   \t0x0440:  ac67 6872 a126 b1d3 922c 4c2a 0ec9 b6d4  .ghr.&...,L*....\n//   \t0x0450:  fb59 6163 d1c4 1708 8d94 bc3d be5e ae29  .Yac.......=.^.)\n//   \t0x0460:  51ff a765 9df6 ae35 ed6b 0555 933f 3ed6  Q..e...5.k.U.?>.\n//   \t0x0470:  259b d93e f86f 6088 0c4e 357b 5c67 7d93  %..>.o`..N5{\\g}.\n//   \t0x0480:  a695 1a42 e1e1 ef91 14d7 b7b7 0ca4 2dda  ...B..........-.\n//   \t0x0490:  6ac1 771e 25c1 a578 4ca8 6fd8 de04 1c09  j.w.%..xL.o.....\n//   \t0x04a0:  df49 f179 6a58 2b45 7231 307f bc67 e5e7  .I.yjX+Er10..g..\n//   \t0x04b0:  c5cd fec0 b021 508e 4fc5 f821 f734 90bc  .....!P.O..!.4..\n//   \t0x04c0:  c87f 14f1 2e5c d17b 1818 5b4a 6b68 0212  .....\\.{..[Jkh..\n//   \t0x04d0:  1791 4a30 8518 99a9 b516 67e7 ed56 d1d1  ..J0......g..V..\n//   \t0x04e0:  239d dfda 11c5 0afe e58a b6e0 fb66 ab5c  #............f.\\\n//   \t0x04f0:  f590 dcd6 457d 01d1 83f5 a9f0 cdb2 9c14  ....E}..........\n//   \t0x0500:  ff66 f10c d428 a07b 34e3 d600 91f2 aca7  .f...(.{4.......\n//   \t0x0510:  4e1f f3ac a96e 2aa3 ec9b 448c 748d f858  N....n*...D.t..X\n//   \t0x0520:  131c d496 af9b f5f0 d2f5 57ac 0b64 55a1  ..........W..dU.\n//   \t0x0530:  860e 5ad0 3e62 26b5 9e17 f51f 88c1 02e3  ..Z.>b&.........\n//   \t0x0540:  4a38 de70 3216 6f88 5d1e f429 ee19 4121  J8.p2.o.]..)..A!\n//   \t0x0550:  f571 84ac 3789 141f 1798 90b1 8373 2499  .q..7........s$.\n//   \t0x0560:  c131 b13f f3a3 9a07 aef1 bfe8 8cd7 8c2e  .1.?............\n//   \t0x0570:  ba35 dfc5 eb07 013c 7621 6481 bdfb 6233  .5.....<v!d...b3\n//   \t0x0580:  22e2 0f05 7e15 0417 67e4 2632 5207 28a6  \"...~...g.&2R.(.\n//   \t0x0590:  8e88 9423 de54 5412 b53e fd8d d47a de58  ...#.TT..>...z.X\n//   \t0x05a0:  a1b2 6e08 d06d dc21 1eda 14a0 a2f7 1701  ..n..m.!........\n//   \t0x05b0:  a5e0 dfd7 871f 595d db43 70f5 bab3 b732  ......Y].Cp....2\n//   \t0x05c0:  6275 da15 b203 dac7 321f 8d61 11bd 30    bu......2..a..0\nvar testAnotherMalformedDNS = []byte{\n\t0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,\n\t0x05, 0xc1, 0x2e, 0xea, 0x40, 0x00, 0x36, 0x11, 0xfb, 0xd1, 0x0a, 0x4d, 0x00, 0x1d, 0x0a, 0x01,\n\t0x00, 0x06, 0x00, 0x35, 0xa5, 0x28, 0x05, 0xad, 0x00, 0xa2, 0x34, 0xb3, 0x33, 0x13, 0x5c, 0x1f,\n\t0x2d, 0xc8, 0x74, 0x2e, 0xcb, 0x77, 0x2d, 0xa0, 0xbc, 0x2e, 0x56, 0x8b, 0xf7, 0x51, 0xf3, 0x22,\n\t0x85, 0x1d, 0xab, 0x17, 0x78, 0x10, 0x00, 0x9c, 0x1c, 0xef, 0xc6, 0xd5, 0x06, 0x05, 0x37, 0xf4,\n\t0x96, 0x9b, 0xc6, 0x5e, 0x48, 0x3e, 0x47, 0x06, 0xf5, 0x8b, 0xdf, 0x36, 0x47, 0xdb, 0xea, 0xe2,\n\t0x88, 0x5d, 0x68, 0x8a, 0xc5, 0xa5, 0x57, 0x05, 0xaa, 0xa8, 0x95, 0xeb, 0x93, 0xa4, 0xd8, 0x5a,\n\t0xc9, 0xaf, 0x26, 0x1f, 0x78, 0x16, 0xa3, 0x54, 0x2d, 0x23, 0xd8, 0x4a, 0x57, 0x9c, 0x48, 0x76,\n\t0xa3, 0x91, 0x43, 0xdb, 0x5c, 0x41, 0x19, 0x1a, 0x92, 0xb8, 0xdc, 0xdd, 0x68, 0x39, 0xee, 0xf5,\n\t0x72, 0x8e, 0x13, 0xe0, 0x06, 0x79, 0x6f, 0x47, 0x88, 0xa0, 0x25, 0xb9, 0x44, 0xd8, 0xf8, 0xe7,\n\t0x8a, 0xfe, 0x0b, 0xfa, 0xf8, 0x11, 0x8d, 0xa5, 0xf8, 0xa3, 0x1f, 0x8e, 0xd2, 0x3b, 0xfe, 0x12,\n\t0xd9, 0x43, 0x93, 0x27, 0x92, 0xad, 0x44, 0x10, 0x18, 0x3e, 0x68, 0x8d, 0xb0, 0x6d, 0x53, 0x91,\n\t0x69, 0x5b, 0xe4, 0x9f, 0x8f, 0x1e, 0xc0, 0x75, 0xd0, 0x43, 0xaf, 0xe0, 0x11, 0x74, 0x9d, 0xb0,\n\t0x06, 0xb0, 0xf0, 0x1e, 0xb8, 0x5b, 0x3c, 0x84, 0x94, 0x5e, 0x06, 0xd0, 0xb2, 0x0f, 0x9e, 0xaa,\n\t0x12, 0x3d, 0x0a, 0xb0, 0x2a, 0x55, 0x30, 0x9c, 0x0e, 0xe9, 0x3e, 0x5e, 0xdb, 0x2f, 0xf3, 0x77,\n\t0xd7, 0xf1, 0x9b, 0xae, 0x37, 0x3d, 0x33, 0x16, 0x07, 0x96, 0xb8, 0x0e, 0xdd, 0x18, 0x51, 0x73,\n\t0xb2, 0x8d, 0x84, 0xfd, 0x18, 0x12, 0xd8, 0x7b, 0x42, 0xc8, 0x5f, 0x11, 0x4d, 0xb6, 0xb2, 0x69,\n\t0x1c, 0x42, 0x4a, 0xea, 0xd5, 0xa4, 0x64, 0x4b, 0x6c, 0x00, 0xf0, 0xc0, 0xfc, 0xee, 0x71, 0xa7,\n\t0xe7, 0xf0, 0x71, 0x9c, 0xa2, 0x07, 0xdc, 0x5c, 0xa6, 0xfa, 0xf0, 0x05, 0xa3, 0x38, 0x7f, 0xf0,\n\t0x5b, 0xeb, 0x3b, 0x4d, 0x89, 0x52, 0x2a, 0x46, 0xd4, 0x7b, 0xa5, 0xa2, 0xe1, 0xfb, 0x9e, 0x76,\n\t0xc8, 0x15, 0x62, 0x58, 0x50, 0xf4, 0x69, 0x97, 0xba, 0xd5, 0xb4, 0x79, 0x2d, 0x06, 0xeb, 0xbb,\n\t0x2c, 0xac, 0x2e, 0xcc, 0xe4, 0xf0, 0x1f, 0x94, 0xce, 0x9f, 0x18, 0x6c, 0x61, 0xda, 0x96, 0x81,\n\t0x34, 0x5c, 0x4d, 0x88, 0xef, 0xc7, 0x03, 0x7b, 0xfb, 0xe3, 0x44, 0x02, 0xea, 0x06, 0x2e, 0x5d,\n\t0x2e, 0x6e, 0x48, 0x60, 0xe1, 0x80, 0x3e, 0xf7, 0xc0, 0x06, 0x0a, 0xd1, 0xeb, 0xb9, 0xc4, 0xff,\n\t0xde, 0xe2, 0xf2, 0x1c, 0x02, 0xc2, 0x75, 0x1a, 0xde, 0xd8, 0xae, 0x2e, 0x13, 0xa9, 0x3f, 0xa2,\n\t0x39, 0x2a, 0x8b, 0x54, 0x11, 0xb2, 0x2b, 0x4e, 0x2b, 0xf1, 0x47, 0x80, 0xdb, 0x9f, 0x8c, 0x10,\n\t0xac, 0x6f, 0x61, 0xb0, 0x7b, 0x19, 0x42, 0x3f, 0x07, 0xe5, 0x46, 0x28, 0xb8, 0x70, 0xf7, 0x5d,\n\t0x09, 0xa3, 0x63, 0xb2, 0x77, 0xaf, 0x59, 0x85, 0xa0, 0xae, 0x51, 0xd8, 0x24, 0x3f, 0xa7, 0xc8,\n\t0xab, 0x08, 0x7f, 0xc6, 0x02, 0x17, 0xc0, 0x9f, 0xc4, 0x12, 0x0c, 0x45, 0xe6, 0xaa, 0x96, 0xbf,\n\t0x18, 0x4c, 0x43, 0x07, 0x1f, 0x1f, 0xc4, 0xf4, 0x77, 0x34, 0xda, 0x31, 0x20, 0x88, 0x66, 0x2b,\n\t0x44, 0xc5, 0x09, 0x6f, 0x1d, 0x1d, 0x2d, 0xc5, 0xff, 0xd6, 0x86, 0x7d, 0x9f, 0xc5, 0x7b, 0x45,\n\t0xf9, 0x49, 0x7d, 0xd9, 0x38, 0xde, 0x0d, 0x51, 0xac, 0x2a, 0x32, 0xfc, 0xf5, 0x0b, 0x1b, 0xbe,\n\t0x1c, 0x4b, 0x54, 0x41, 0xfb, 0xf3, 0x08, 0x21, 0x6c, 0x28, 0x45, 0x30, 0x56, 0x76, 0x1d, 0x27,\n\t0x50, 0x87, 0x46, 0x6c, 0x3d, 0x5b, 0x45, 0xa6, 0xaf, 0x7f, 0x91, 0x7a, 0x6d, 0x43, 0x66, 0xc2,\n\t0x03, 0x6a, 0x8b, 0xef, 0xca, 0x60, 0x9b, 0x13, 0x8d, 0x29, 0x9f, 0xda, 0x82, 0xfa, 0x01, 0xb1,\n\t0xdf, 0x8f, 0x1f, 0x83, 0xc7, 0x1d, 0x63, 0x0f, 0x34, 0x9e, 0x50, 0x8c, 0x9f, 0x7a, 0xe3, 0xda,\n\t0xa1, 0x14, 0x36, 0x22, 0x9d, 0xf8, 0x99, 0x26, 0x4d, 0xac, 0x41, 0x50, 0xd5, 0x05, 0x7b, 0x3a,\n\t0x6f, 0xed, 0xfc, 0x75, 0x6b, 0x4f, 0x2d, 0x60, 0x8a, 0x89, 0x76, 0x7d, 0x9a, 0xf0, 0x89, 0x6e,\n\t0x90, 0x7d, 0x1a, 0xda, 0xde, 0xf3, 0x34, 0x5c, 0x0d, 0x81, 0x28, 0x3c, 0xa2, 0x4f, 0xfc, 0xbb,\n\t0xbb, 0xdd, 0xb7, 0xb3, 0xe3, 0xbb, 0x9f, 0x1b, 0xd9, 0x66, 0x51, 0xb7, 0x82, 0x17, 0x7f, 0xa0,\n\t0xe8, 0x28, 0xd3, 0xca, 0xa6, 0xf1, 0x53, 0x2f, 0x16, 0x4e, 0xe4, 0x05, 0xbb, 0x3b, 0x0d, 0xe3,\n\t0x98, 0x5d, 0x6e, 0x89, 0xd8, 0x25, 0xeb, 0xc6, 0xd8, 0xba, 0x51, 0x90, 0xa1, 0x14, 0xc6, 0xa3,\n\t0x18, 0xb4, 0x8a, 0xa7, 0x18, 0x1a, 0x01, 0xac, 0xcd, 0xc0, 0x80, 0x48, 0xea, 0x72, 0xa5, 0xe3,\n\t0xe3, 0x7a, 0xdc, 0x57, 0x65, 0xcd, 0xb7, 0x87, 0x39, 0xe6, 0xc3, 0x9e, 0x31, 0x7b, 0x45, 0xd8,\n\t0x47, 0x5c, 0x05, 0xba, 0xe8, 0xf8, 0x82, 0x24, 0x5a, 0x85, 0x27, 0xb8, 0x15, 0x84, 0x8d, 0x78,\n\t0x62, 0xb6, 0x64, 0x95, 0xac, 0x10, 0x33, 0x8f, 0x11, 0x22, 0xf2, 0xff, 0x04, 0x3e, 0x9e, 0x2a,\n\t0x10, 0x58, 0xa9, 0x10, 0x57, 0x92, 0x6f, 0xcd, 0x9a, 0x96, 0x61, 0x83, 0x67, 0x08, 0x8f, 0x70,\n\t0xed, 0xc6, 0xa6, 0x7c, 0x64, 0xff, 0x50, 0xfa, 0x52, 0x0b, 0xde, 0x94, 0xc8, 0x2c, 0xc4, 0xd6,\n\t0x7d, 0x8f, 0x0f, 0xd5, 0x2f, 0x0d, 0x98, 0x33, 0x7c, 0x6c, 0xbe, 0x10, 0xa4, 0xe5, 0xdc, 0x99,\n\t0xa4, 0x67, 0xef, 0x5f, 0xb3, 0x5b, 0xc1, 0x1c, 0xe2, 0x3c, 0x13, 0x1a, 0x48, 0xb2, 0x9c, 0xef,\n\t0x5a, 0x2f, 0xfe, 0xce, 0xdd, 0x9e, 0x2a, 0xea, 0x0d, 0xb9, 0xfa, 0xf3, 0xa6, 0xef, 0xb2, 0x9d,\n\t0xe8, 0x5d, 0xa4, 0x10, 0xdd, 0x6a, 0x68, 0x06, 0x3f, 0xc6, 0x16, 0x94, 0x17, 0x9f, 0xcb, 0x4b,\n\t0x08, 0xc4, 0x86, 0xb2, 0x07, 0x13, 0xcd, 0xdb, 0xb2, 0x57, 0xd5, 0x6b, 0xfe, 0x82, 0x7d, 0x82,\n\t0x0d, 0x1f, 0x6d, 0xc9, 0x67, 0xb2, 0xd2, 0xa1, 0x67, 0x91, 0x4f, 0x38, 0xed, 0xf9, 0x49, 0x1f,\n\t0x2c, 0x02, 0x35, 0xf5, 0x81, 0x65, 0xec, 0xc3, 0xbc, 0x6a, 0xb6, 0x31, 0x3c, 0x7e, 0x1a, 0xd4,\n\t0x8e, 0x27, 0xf9, 0x62, 0xf9, 0x42, 0x11, 0xb5, 0x1b, 0x45, 0x9b, 0xac, 0xb4, 0x74, 0x3c, 0x6e,\n\t0x68, 0x32, 0x30, 0x75, 0xbe, 0x6d, 0xac, 0x0d, 0xa8, 0xa0, 0x7d, 0x47, 0xa6, 0xef, 0x4e, 0x43,\n\t0x6b, 0x9a, 0x30, 0x97, 0x8a, 0x8b, 0x82, 0xa3, 0x95, 0x15, 0x36, 0x2c, 0xf7, 0xd6, 0xa3, 0x7f,\n\t0x73, 0x13, 0x11, 0x99, 0xa5, 0xf3, 0x03, 0xdc, 0xbc, 0xc9, 0xfb, 0x10, 0xc2, 0x3d, 0xee, 0xb9,\n\t0x78, 0xff, 0xc8, 0xf3, 0x0d, 0x38, 0x9f, 0x74, 0xce, 0xec, 0xb7, 0xae, 0x63, 0xe3, 0x34, 0x24,\n\t0xb7, 0x83, 0xf1, 0x06, 0x01, 0x1f, 0x66, 0x6b, 0xbf, 0x2d, 0xab, 0xc8, 0xea, 0x10, 0x57, 0xa1,\n\t0x7c, 0xf2, 0x4a, 0x3f, 0x57, 0xca, 0x13, 0x86, 0xbf, 0xba, 0x27, 0xe5, 0x46, 0x62, 0x81, 0xc8,\n\t0x04, 0x1e, 0x18, 0x20, 0xb3, 0xd5, 0xc3, 0x99, 0xcd, 0x4d, 0x22, 0x2f, 0x29, 0xf0, 0xb9, 0x94,\n\t0x86, 0x5a, 0xe6, 0xe2, 0x16, 0x86, 0x32, 0x61, 0xb0, 0xcd, 0xca, 0xaf, 0x07, 0xec, 0xd0, 0xbc,\n\t0xaf, 0xb8, 0x3c, 0xf0, 0x51, 0xc1, 0x6c, 0x7a, 0x63, 0x83, 0x6b, 0x3a, 0xff, 0x47, 0x95, 0x51,\n\t0x10, 0x99, 0x52, 0x5f, 0x35, 0x5e, 0x46, 0x84, 0xbd, 0x34, 0xec, 0x12, 0x88, 0xc9, 0xdc, 0xc2,\n\t0xd1, 0x1c, 0x82, 0x6d, 0xf1, 0xdf, 0x37, 0xe6, 0xf0, 0x8f, 0x6c, 0xe8, 0x81, 0x7d, 0xbd, 0xc3,\n\t0x20, 0xb9, 0xa2, 0x74, 0xc6, 0x45, 0xc6, 0x7d, 0xf2, 0x99, 0xfe, 0xf9, 0x28, 0x7f, 0x09, 0xee,\n\t0xac, 0x67, 0x68, 0x72, 0xa1, 0x26, 0xb1, 0xd3, 0x92, 0x2c, 0x4c, 0x2a, 0x0e, 0xc9, 0xb6, 0xd4,\n\t0xfb, 0x59, 0x61, 0x63, 0xd1, 0xc4, 0x17, 0x08, 0x8d, 0x94, 0xbc, 0x3d, 0xbe, 0x5e, 0xae, 0x29,\n\t0x51, 0xff, 0xa7, 0x65, 0x9d, 0xf6, 0xae, 0x35, 0xed, 0x6b, 0x05, 0x55, 0x93, 0x3f, 0x3e, 0xd6,\n\t0x25, 0x9b, 0xd9, 0x3e, 0xf8, 0x6f, 0x60, 0x88, 0x0c, 0x4e, 0x35, 0x7b, 0x5c, 0x67, 0x7d, 0x93,\n\t0xa6, 0x95, 0x1a, 0x42, 0xe1, 0xe1, 0xef, 0x91, 0x14, 0xd7, 0xb7, 0xb7, 0x0c, 0xa4, 0x2d, 0xda,\n\t0x6a, 0xc1, 0x77, 0x1e, 0x25, 0xc1, 0xa5, 0x78, 0x4c, 0xa8, 0x6f, 0xd8, 0xde, 0x04, 0x1c, 0x09,\n\t0xdf, 0x49, 0xf1, 0x79, 0x6a, 0x58, 0x2b, 0x45, 0x72, 0x31, 0x30, 0x7f, 0xbc, 0x67, 0xe5, 0xe7,\n\t0xc5, 0xcd, 0xfe, 0xc0, 0xb0, 0x21, 0x50, 0x8e, 0x4f, 0xc5, 0xf8, 0x21, 0xf7, 0x34, 0x90, 0xbc,\n\t0xc8, 0x7f, 0x14, 0xf1, 0x2e, 0x5c, 0xd1, 0x7b, 0x18, 0x18, 0x5b, 0x4a, 0x6b, 0x68, 0x02, 0x12,\n\t0x17, 0x91, 0x4a, 0x30, 0x85, 0x18, 0x99, 0xa9, 0xb5, 0x16, 0x67, 0xe7, 0xed, 0x56, 0xd1, 0xd1,\n\t0x23, 0x9d, 0xdf, 0xda, 0x11, 0xc5, 0x0a, 0xfe, 0xe5, 0x8a, 0xb6, 0xe0, 0xfb, 0x66, 0xab, 0x5c,\n\t0xf5, 0x90, 0xdc, 0xd6, 0x45, 0x7d, 0x01, 0xd1, 0x83, 0xf5, 0xa9, 0xf0, 0xcd, 0xb2, 0x9c, 0x14,\n\t0xff, 0x66, 0xf1, 0x0c, 0xd4, 0x28, 0xa0, 0x7b, 0x34, 0xe3, 0xd6, 0x00, 0x91, 0xf2, 0xac, 0xa7,\n\t0x4e, 0x1f, 0xf3, 0xac, 0xa9, 0x6e, 0x2a, 0xa3, 0xec, 0x9b, 0x44, 0x8c, 0x74, 0x8d, 0xf8, 0x58,\n\t0x13, 0x1c, 0xd4, 0x96, 0xaf, 0x9b, 0xf5, 0xf0, 0xd2, 0xf5, 0x57, 0xac, 0x0b, 0x64, 0x55, 0xa1,\n\t0x86, 0x0e, 0x5a, 0xd0, 0x3e, 0x62, 0x26, 0xb5, 0x9e, 0x17, 0xf5, 0x1f, 0x88, 0xc1, 0x02, 0xe3,\n\t0x4a, 0x38, 0xde, 0x70, 0x32, 0x16, 0x6f, 0x88, 0x5d, 0x1e, 0xf4, 0x29, 0xee, 0x19, 0x41, 0x21,\n\t0xf5, 0x71, 0x84, 0xac, 0x37, 0x89, 0x14, 0x1f, 0x17, 0x98, 0x90, 0xb1, 0x83, 0x73, 0x24, 0x99,\n\t0xc1, 0x31, 0xb1, 0x3f, 0xf3, 0xa3, 0x9a, 0x07, 0xae, 0xf1, 0xbf, 0xe8, 0x8c, 0xd7, 0x8c, 0x2e,\n\t0xba, 0x35, 0xdf, 0xc5, 0xeb, 0x07, 0x01, 0x3c, 0x76, 0x21, 0x64, 0x81, 0xbd, 0xfb, 0x62, 0x33,\n\t0x22, 0xe2, 0x0f, 0x05, 0x7e, 0x15, 0x04, 0x17, 0x67, 0xe4, 0x26, 0x32, 0x52, 0x07, 0x28, 0xa6,\n\t0x8e, 0x88, 0x94, 0x23, 0xde, 0x54, 0x54, 0x12, 0xb5, 0x3e, 0xfd, 0x8d, 0xd4, 0x7a, 0xde, 0x58,\n\t0xa1, 0xb2, 0x6e, 0x08, 0xd0, 0x6d, 0xdc, 0x21, 0x1e, 0xda, 0x14, 0xa0, 0xa2, 0xf7, 0x17, 0x01,\n\t0xa5, 0xe0, 0xdf, 0xd7, 0x87, 0x1f, 0x59, 0x5d, 0xdb, 0x43, 0x70, 0xf5, 0xba, 0xb3, 0xb7, 0x32,\n\t0x62, 0x75, 0xda, 0x15, 0xb2, 0x03, 0xda, 0xc7, 0x32, 0x1f, 0x8d, 0x61, 0x11, 0xbd, 0x30,\n}\n\nfunc TestAnotherMalformedDNS(t *testing.T) {\n\tp := gopacket.NewPacket(testAnotherMalformedDNS, LinkTypeEthernet, testDecodeOptions)\n\tif errLayer := p.ErrorLayer(); errLayer == nil {\n\t\tt.Error(\"No error layer on invalid DNS name\")\n\t} else if err := errLayer.Error(); !strings.Contains(err.Error(), \"offset too high\") {\n\t\tt.Errorf(\"unexpected error message: %v\", err)\n\t}\n}\n\n// testMalformedDNSAgain is the packet:\n//   12:14:52.702061 IP 10.77.0.4.53 > 10.1.0.41.61610: 12529 updateDA [b2&3=0x5cad] [38274a] [61303q] [1718n] [14913au][|domain]\n//   \t0x0000:  0055 22af c637 0022 55ac deac 0800 4500  .U\"..7.\"U.....E.\n//   \t0x0010:  0091 2dff 0000 7811 ffe2 0a4d 0004 0a01  ..-...x....M....\n//   \t0x0020:  0029 0035 f0aa 007d 5b53 30f1 5cad ef77  .).5...}[S0.\\..w\n//   \t0x0030:  9582 06b6 3a41 357a 8cef cdc0 a732 b800  ....:A5z.....2..\n//   \t0x0040:  466e 1c30 2e75 95ac c03d 1ed4 8635 2d09  Fn.0.u...=...5-.\n//   \t0x0050:  2fee 3a82 b4f0 427e 2b6b f870 cc7f c9a1  /.:...B~+k.p....\n//   \t0x0060:  e6f1 a761 97ec 2ff7 d248 4d95 321c 6e4e  ...a../..HM.2.nN\n//   \t0x0070:  57fa 6d3d 9ec0 fe3a 6f1e e634 4396 b494  W.m=...:o..4C...\n//   \t0x0080:  8b7a a929 d7e1 da7c c346 ca77 4890 6bf3  .z.)...|.F.wH.k.\n//   \t0x0090:  5ecb 7e97 c49d 3564 984f bf7c 8ac1 dd    ^.~...5d.O.|...\nvar testMalformedDNSAgain = []byte{\n\t0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x91, 0x2d, 0xff, 0x00, 0x00, 0x78, 0x11, 0xff, 0xe2, 0x0a, 0x4d, 0x00, 0x04, 0x0a, 0x01,\n\t0x00, 0x29, 0x00, 0x35, 0xf0, 0xaa, 0x00, 0x7d, 0x5b, 0x53, 0x30, 0xf1, 0x5c, 0xad, 0xef, 0x77,\n\t0x95, 0x82, 0x06, 0xb6, 0x3a, 0x41, 0x35, 0x7a, 0x8c, 0xef, 0xcd, 0xc0, 0xa7, 0x32, 0xb8, 0x00,\n\t0x46, 0x6e, 0x1c, 0x30, 0x2e, 0x75, 0x95, 0xac, 0xc0, 0x3d, 0x1e, 0xd4, 0x86, 0x35, 0x2d, 0x09,\n\t0x2f, 0xee, 0x3a, 0x82, 0xb4, 0xf0, 0x42, 0x7e, 0x2b, 0x6b, 0xf8, 0x70, 0xcc, 0x7f, 0xc9, 0xa1,\n\t0xe6, 0xf1, 0xa7, 0x61, 0x97, 0xec, 0x2f, 0xf7, 0xd2, 0x48, 0x4d, 0x95, 0x32, 0x1c, 0x6e, 0x4e,\n\t0x57, 0xfa, 0x6d, 0x3d, 0x9e, 0xc0, 0xfe, 0x3a, 0x6f, 0x1e, 0xe6, 0x34, 0x43, 0x96, 0xb4, 0x94,\n\t0x8b, 0x7a, 0xa9, 0x29, 0xd7, 0xe1, 0xda, 0x7c, 0xc3, 0x46, 0xca, 0x77, 0x48, 0x90, 0x6b, 0xf3,\n\t0x5e, 0xcb, 0x7e, 0x97, 0xc4, 0x9d, 0x35, 0x64, 0x98, 0x4f, 0xbf, 0x7c, 0x8a, 0xc1, 0xdd,\n}\n\nfunc TestMalformedDNSAgain(t *testing.T) {\n\tp := gopacket.NewPacket(testMalformedDNSAgain, LinkTypeEthernet, testDecodeOptions)\n\tif errLayer := p.ErrorLayer(); errLayer == nil {\n\t\tt.Error(\"No error layer on invalid DNS name\")\n\t} else if err := errLayer.Error(); !strings.Contains(err.Error(), \"walked out of range\") {\n\t\tt.Errorf(\"unexpected error message: %v\", err)\n\t}\n}\n\n// testMalformedDNSOhGodMakeItStop is the packet:\n//   15:08:24.430906 IP 10.77.0.19.53 > 10.1.0.19.50635: 12397 zoneInit% [b2&3=0x7232] [47729a] [46283q] [60247n] [61718au][|domain]\n//   \t0x0000:  0055 22af c637 0022 55ac deac 0800 4500  .U\"..7.\"U.....E.\n//   \t0x0010:  0079 c51c 4000 3511 6be4 0a4d 0013 0a01  .y..@.5.k..M....\n//   \t0x0020:  0013 0035 c5cb 0065 ef45 306d 7232 b4cb  ...5...e.E0mr2..\n//   \t0x0030:  ba71 eb57 f116 3994 e000 4626 0534 66cc  .q.W..9...F&.4f.\n//   \t0x0040:  7b32 24f2 eece bca7 20e2 9a2a e1ce e737  {2$........*...7\n//   \t0x0050:  ac39 5fae 72ec c3ec 284f ca4a 171f 466d  .9_.r...(O.J..Fm\n//   \t0x0060:  f6c6 84d7 e795 310f 26df 9b59 6db9 21cf  ......1.&..Ym.!.\n//   \t0x0070:  15cb 30a3 c4cf df23 805a ed1a 0584 4fc3  ..0....#.Z....O.\n//   \t0x0080:  7fa3 3cb4 e04f e9                        ..<..O.\nvar testMalformedDNSOhGodMakeItStop = []byte{\n\t0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x79, 0xc5, 0x1c, 0x40, 0x00, 0x35, 0x11, 0x6b, 0xe4, 0x0a, 0x4d, 0x00, 0x13, 0x0a, 0x01,\n\t0x00, 0x13, 0x00, 0x35, 0xc5, 0xcb, 0x00, 0x65, 0xef, 0x45, 0x30, 0x6d, 0x72, 0x32, 0xb4, 0xcb,\n\t0xba, 0x71, 0xeb, 0x57, 0xf1, 0x16, 0x39, 0x94, 0xe0, 0x00, 0x46, 0x26, 0x05, 0x34, 0x66, 0xcc,\n\t0x7b, 0x32, 0x24, 0xf2, 0xee, 0xce, 0xbc, 0xa7, 0x20, 0xe2, 0x9a, 0x2a, 0xe1, 0xce, 0xe7, 0x37,\n\t0xac, 0x39, 0x5f, 0xae, 0x72, 0xec, 0xc3, 0xec, 0x28, 0x4f, 0xca, 0x4a, 0x17, 0x1f, 0x46, 0x6d,\n\t0xf6, 0xc6, 0x84, 0xd7, 0xe7, 0x95, 0x31, 0x0f, 0x26, 0xdf, 0x9b, 0x59, 0x6d, 0xb9, 0x21, 0xcf,\n\t0x15, 0xcb, 0x30, 0xa3, 0xc4, 0xcf, 0xdf, 0x23, 0x80, 0x5a, 0xed, 0x1a, 0x05, 0x84, 0x4f, 0xc3,\n\t0x7f, 0xa3, 0x3c, 0xb4, 0xe0, 0x4f, 0xe9,\n}\n\nfunc TestMalformedDNSOhGodMakeItStop(t *testing.T) {\n\tp := gopacket.NewPacket(testMalformedDNSOhGodMakeItStop, LinkTypeEthernet, testDecodeOptions)\n\tif errLayer := p.ErrorLayer(); errLayer == nil {\n\t\tt.Error(\"No error layer on invalid DNS name\")\n\t} else if err := errLayer.Error(); !strings.Contains(err.Error(), \"offset pointer too high\") {\n\t\tt.Errorf(\"unexpected error message: %v\", err)\n\t}\n}\n\nvar testMalformedDNSOPT = []byte{\n\t0x00, 0x90, 0x0b, 0x12, 0x91, 0xc1, 0x00, 0x1c, 0xc0, 0x93, 0x33, 0xfb, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x5A, 0xce, 0x58, 0x00, 0x00, 0x40, 0x11, 0x67, 0xe2, 0xac, 0x10, 0x01, 0xc7, 0x4b, 0x4b,\n\t0x4b, 0x4b, 0xd6, 0x00, 0x00, 0x35, 0x00, 0x46, 0x44, 0xb0, 0x50, 0x12, 0x01, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x77, 0x77, 0x77, 0x04, 0x69, 0x65, 0x74, 0x66, 0x03,\n\t0x6f, 0x72, 0x67, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x29, 0x10, 0x00, 0x00, 0x00, 0x80,\n\t0x00, 0x00, 0x13, 0x69, 0x42, 0x00, 0x10, 0x4F, 0x70, 0x65, 0x6E, 0x44, 0x4E, 0x53, 0x01, 0x23,\n\t0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,\n}\n\nfunc TestMalformedDNSOPT(t *testing.T) {\n\tp := gopacket.NewPacket(testMalformedDNSOPT, LinkTypeEthernet, testDecodeOptions)\n\tif errLayer := p.ErrorLayer(); errLayer == nil {\n\t\tt.Error(\"No error layer on invalid DNS name\")\n\t} else if err := errLayer.Error(); !strings.Contains(err.Error(), \"Malformed DNSOPT record\") {\n\t\tt.Errorf(\"unexpected error message: %v\", err)\n\t}\n}\n\n// testPacketDNSPanic7 is the packet:\n//   07:56:25.174747 IP 10.77.0.11.53 > 10.1.0.67.55777: 41808*-| 3/7/0 TXT \"google-site-verification=DC2uC-T8kD33lINhNzfo0bNBrw-vrCXs5BPF5BXY56g\", TXT \"v=spf1 include:spf-a.outlook.com include:spf-b.outlook.com ip4:157.55.9.128/25 include:spf.protection.outlook.com include:spf-a.hotmail.com include:_spf-ssg-b.microsoft.com include:_spf-ssg-c.microsoft.com ~all\", TXT \"google-site-verification=0iLWhIMhXEkeWwWfFU4ursTn-_OvoOjaA0Lr7Pg1sEM\" (512)\n//   \t0x0000:  0055 22af c637 0022 55ac deac 0800 4500  .U\"..7.\"U.....E.\n//   \t0x0010:  021c b5ca 4000 fa11 b46a 0a4d 000b 0a01  ....@....j.M....\n//   \t0x0020:  0043 0035 d9e1 0208 afd6 a350 8600 0001  .C.5.......P....\n//   \t0x0030:  0003 0007 0000 076f 7574 6c6f 6f6b 0363  .......outlook.c\n//   \t0x0040:  6f6d 0000 1000 01c0 0c00 1000 0100 0001  om..............\n//   \t0x0050:  2c00 4544 676f 6f67 6c65 2d73 6974 652d  ,.EDgoogle-site-\n//   \t0x0060:  7665 7269 6669 6361 7469 6f6e 3d44 4332  verification=DC2\n//   \t0x0070:  7543 2d54 386b 4433 336c 494e 684e 7a66  uC-T8kD33lINhNzf\n//   \t0x0080:  6f30 624e 4272 772d 7672 4358 7335 4250  o0bNBrw-vrCXs5BP\n//   \t0x0090:  4635 4258 5935 3667 c00c 0010 0001 0000  F5BXY56g........\n//   \t0x00a0:  012c 00d3 d276 3d73 7066 3120 696e 636c  .,...v=spf1.incl\n//   \t0x00b0:  7564 653a 7370 662d 612e 6f75 746c 6f6f  ude:spf-a.outloo\n//   \t0x00c0:  6b2e 636f 6d20 696e 636c 7564 653a 7370  k.com.include:sp\n//   \t0x00d0:  662d 622e 6f75 746c 6f6f 6b2e 636f 6d20  f-b.outlook.com.\n//   \t0x00e0:  6970 343a 3135 372e 3535 2e39 2e31 3238  ip4:157.55.9.128\n//   \t0x00f0:  2f32 3520 696e 636c 7564 653a 7370 662e  /25.include:spf.\n//   \t0x0100:  7072 6f74 6563 7469 6f6e 2e6f 7574 6c6f  protection.outlo\n//   \t0x0110:  6f6b 2e63 6f6d 2069 6e63 6c75 6465 3a73  ok.com.include:s\n//   \t0x0120:  7066 2d61 2e68 6f74 6d61 696c 2e63 6f6d  pf-a.hotmail.com\n//   \t0x0130:  2069 6e63 6c75 6465 3a5f 7370 662d 7373  .include:_spf-ss\n//   \t0x0140:  672d 622e 6d69 6372 6f73 6f66 742e 636f  g-b.microsoft.co\n//   \t0x0150:  6d20 696e 636c 7564 653a 5f73 7066 2d73  m.include:_spf-s\n//   \t0x0160:  7367 2d63 2e6d 6963 726f 736f 6674 2e63  sg-c.microsoft.c\n//   \t0x0170:  6f6d 207e 616c 6cc0 0c00 1000 0100 0001  om.~all.........\n//   \t0x0180:  2c00 4544 676f 6f67 6c65 2d73 6974 652d  ,.EDgoogle-site-\n//   \t0x0190:  7665 7269 6669 6361 7469 6f6e 3d30 694c  verification=0iL\n//   \t0x01a0:  5768 494d 6858 456b 6557 7757 6646 5534  WhIMhXEkeWwWfFU4\n//   \t0x01b0:  7572 7354 6e2d 5f4f 766f 4f6a 6141 304c  ursTn-_OvoOjaA0L\n//   \t0x01c0:  7237 5067 3173 454d c00c 0002 0001 0002  r7Pg1sEM........\n//   \t0x01d0:  a300 000e 036e 7332 046d 7366 7403 6e65  .....ns2.msft.ne\n//   \t0x01e0:  7400 c00c 0002 0001 0002 a300 0006 036e  t..............n\n//   \t0x01f0:  7334 c1ae c00c 0002 0001 0002 a300 0006  s4..............\n//   \t0x0200:  036e 7331 c1ae c00c 0002 0001 0002 a300  .ns1............\n//   \t0x0210:  0006 036e 7333 c1ae c00c 0002 0001 0002  ...ns3..........\n//   \t0x0220:  a300 0015 046e 7331 610d                 .....ns1a.\nvar testPacketDNSPanic7 = []byte{\n\t0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,\n\t0x02, 0x1c, 0xb5, 0xca, 0x40, 0x00, 0xfa, 0x11, 0xb4, 0x6a, 0x0a, 0x4d, 0x00, 0x0b, 0x0a, 0x01,\n\t0x00, 0x43, 0x00, 0x35, 0xd9, 0xe1, 0x02, 0x08, 0xaf, 0xd6, 0xa3, 0x50, 0x86, 0x00, 0x00, 0x01,\n\t0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x07, 0x6f, 0x75, 0x74, 0x6c, 0x6f, 0x6f, 0x6b, 0x03, 0x63,\n\t0x6f, 0x6d, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x01,\n\t0x2c, 0x00, 0x45, 0x44, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2d, 0x73, 0x69, 0x74, 0x65, 0x2d,\n\t0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x44, 0x43, 0x32,\n\t0x75, 0x43, 0x2d, 0x54, 0x38, 0x6b, 0x44, 0x33, 0x33, 0x6c, 0x49, 0x4e, 0x68, 0x4e, 0x7a, 0x66,\n\t0x6f, 0x30, 0x62, 0x4e, 0x42, 0x72, 0x77, 0x2d, 0x76, 0x72, 0x43, 0x58, 0x73, 0x35, 0x42, 0x50,\n\t0x46, 0x35, 0x42, 0x58, 0x59, 0x35, 0x36, 0x67, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00,\n\t0x01, 0x2c, 0x00, 0xd3, 0xd2, 0x76, 0x3d, 0x73, 0x70, 0x66, 0x31, 0x20, 0x69, 0x6e, 0x63, 0x6c,\n\t0x75, 0x64, 0x65, 0x3a, 0x73, 0x70, 0x66, 0x2d, 0x61, 0x2e, 0x6f, 0x75, 0x74, 0x6c, 0x6f, 0x6f,\n\t0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x73, 0x70,\n\t0x66, 0x2d, 0x62, 0x2e, 0x6f, 0x75, 0x74, 0x6c, 0x6f, 0x6f, 0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x20,\n\t0x69, 0x70, 0x34, 0x3a, 0x31, 0x35, 0x37, 0x2e, 0x35, 0x35, 0x2e, 0x39, 0x2e, 0x31, 0x32, 0x38,\n\t0x2f, 0x32, 0x35, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x73, 0x70, 0x66, 0x2e,\n\t0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x75, 0x74, 0x6c, 0x6f,\n\t0x6f, 0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x73,\n\t0x70, 0x66, 0x2d, 0x61, 0x2e, 0x68, 0x6f, 0x74, 0x6d, 0x61, 0x69, 0x6c, 0x2e, 0x63, 0x6f, 0x6d,\n\t0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x5f, 0x73, 0x70, 0x66, 0x2d, 0x73, 0x73,\n\t0x67, 0x2d, 0x62, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f,\n\t0x6d, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x5f, 0x73, 0x70, 0x66, 0x2d, 0x73,\n\t0x73, 0x67, 0x2d, 0x63, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63,\n\t0x6f, 0x6d, 0x20, 0x7e, 0x61, 0x6c, 0x6c, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x01,\n\t0x2c, 0x00, 0x45, 0x44, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2d, 0x73, 0x69, 0x74, 0x65, 0x2d,\n\t0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x30, 0x69, 0x4c,\n\t0x57, 0x68, 0x49, 0x4d, 0x68, 0x58, 0x45, 0x6b, 0x65, 0x57, 0x77, 0x57, 0x66, 0x46, 0x55, 0x34,\n\t0x75, 0x72, 0x73, 0x54, 0x6e, 0x2d, 0x5f, 0x4f, 0x76, 0x6f, 0x4f, 0x6a, 0x61, 0x41, 0x30, 0x4c,\n\t0x72, 0x37, 0x50, 0x67, 0x31, 0x73, 0x45, 0x4d, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02,\n\t0xa3, 0x00, 0x00, 0x0e, 0x03, 0x6e, 0x73, 0x32, 0x04, 0x6d, 0x73, 0x66, 0x74, 0x03, 0x6e, 0x65,\n\t0x74, 0x00, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e,\n\t0x73, 0x34, 0xc1, 0xae, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06,\n\t0x03, 0x6e, 0x73, 0x31, 0xc1, 0xae, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00,\n\t0x00, 0x06, 0x03, 0x6e, 0x73, 0x33, 0xc1, 0xae, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02,\n\t0xa3, 0x00, 0x00, 0x15, 0x04, 0x6e, 0x73, 0x31, 0x61, 0x0d,\n}\n\nfunc TestPacketDNSPanic7(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketDNSPanic7, LinkTypeEthernet, testDecodeOptions)\n\tif errLayer := p.ErrorLayer(); errLayer == nil {\n\t\tt.Error(\"No error layer on invalid DNS name\")\n\t} else if err := errLayer.Error(); !strings.Contains(err.Error(), \"resource record length exceeds data\") {\n\t\tt.Errorf(\"unexpected error message: %v\", err)\n\t}\n}\n\nfunc TestDNSPacketWriteAnswer(t *testing.T) {\n\tdns := &DNS{ID: 0x1234, QR: true, OpCode: DNSOpCodeQuery, ResponseCode: DNSResponseCodeNoErr, Answers: []DNSResourceRecord{\n\t\tDNSResourceRecord{\n\t\t\tName:  []byte(\"www.example.com\"),\n\t\t\tType:  DNSTypeA,\n\t\t\tClass: DNSClassIN,\n\t\t\tIP:    net.IPv4(127, 0, 0, 1),\n\t\t},\n\t\tDNSResourceRecord{\n\t\t\tName:  []byte(\"www.example.com\"),\n\t\t\tType:  DNSTypeAAAA,\n\t\t\tClass: DNSClassIN,\n\t\t\tIP:    net.IP{15: 1},\n\t\t},\n\t}}\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{ComputeChecksums: true, FixLengths: true}\n\tif err := gopacket.SerializeLayers(buf, opts, dns); err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdns2 := &DNS{}\n\tif err := dns2.DecodeFromBytes(buf.Bytes(), gopacket.NilDecodeFeedback); err != nil {\n\t\tt.Fatalf(\"could not decode: %v\", err)\n\t}\n\tif want, got := 2, len(dns2.Answers); want != got {\n\t\tt.Fatalf(\"num answers, want %d got %d\", want, got)\n\t} else if got, want := string(dns2.Answers[0].Name), \"www.example.com\"; got != want {\n\t\tt.Fatalf(\"unexpected first answer name %q, want %q\", got, want)\n\t} else if got, want := string(dns2.Answers[1].Name), \"www.example.com\"; got != want {\n\t\tt.Fatalf(\"unexpected second answer name %q, want %q\", got, want)\n\t}\n\tt.Log(gopacket.LayerString(dns2))\n\tif want, got := 86, len(buf.Bytes()); want != got {\n\t\tt.Fatalf(\"Encoded size, want %d got %d\", want, got)\n\t}\n}\n"
  },
  {
    "path": "layers/doc.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n/*\nPackage layers provides decoding layers for many common protocols.\n\nThe layers package contains decode implementations for a number of different\ntypes of packet layers.  Users of gopacket will almost always want to also use\nlayers to actually decode packet data into useful pieces. To see the set of\nprotocols that gopacket/layers is currently able to decode,\nlook at the set of LayerTypes defined in the Variables sections. The\nlayers package also defines endpoints for many of the common packet layers\nthat have source/destination addresses associated with them, for example IPv4/6\n(IPs) and TCP/UDP (ports).\nFinally, layers contains a number of useful enumerations (IPProtocol,\nEthernetType, LinkType, PPPType, etc...).  Many of these implement the\ngopacket.Decoder interface, so they can be passed into gopacket as decoders.\n\nMost common protocol layers are named using acronyms or other industry-common\nnames (IPv4, TCP, PPP).  Some of the less common ones have their names expanded\n(CiscoDiscoveryProtocol).\nFor certain protocols, sub-parts of the protocol are split out into their own\nlayers (SCTP, for example).  This is done mostly in cases where portions of the\nprotocol may fulfill the capabilities of interesting layers (SCTPData implements\nApplicationLayer, while base SCTP implements TransportLayer), or possibly\nbecause splitting a protocol into a few layers makes decoding easier.\n\nThis package is meant to be used with its parent,\nhttp://github.com/google/gopacket.\n\nPort Types\n\nInstead of using raw uint16 or uint8 values for ports, we use a different port\ntype for every protocol, for example TCPPort and UDPPort.  This allows us to\noverride string behavior for each port, which we do by setting up port name\nmaps (TCPPortNames, UDPPortNames, etc...).  Well-known ports are annotated with\ntheir protocol names, and their String function displays these names:\n\n  p := TCPPort(80)\n  fmt.Printf(\"Number: %d  String: %v\", p, p)\n  // Prints: \"Number: 80  String: 80(http)\"\n\nModifying Decode Behavior\n\nlayers links together decoding through its enumerations.  For example, after\ndecoding layer type Ethernet, it uses Ethernet.EthernetType as its next decoder.\nAll enumerations that act as decoders, like EthernetType, can be modified by\nusers depending on their preferences.  For example, if you have a spiffy new\nIPv4 decoder that works way better than the one built into layers, you can do\nthis:\n\n var mySpiffyIPv4Decoder gopacket.Decoder = ...\n layers.EthernetTypeMetadata[EthernetTypeIPv4].DecodeWith = mySpiffyIPv4Decoder\n\nThis will make all future ethernet packets use your new decoder to decode IPv4\npackets, instead of the built-in decoder used by gopacket.\n*/\npackage layers\n"
  },
  {
    "path": "layers/dot11.go",
    "content": "// Copyright 2014 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// See http://standards.ieee.org/findstds/standard/802.11-2012.html for info on\n// all of the layers in this file.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"hash/crc32\"\n\t\"net\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// Dot11Flags contains the set of 8 flags in the IEEE 802.11 frame control\n// header, all in one place.\ntype Dot11Flags uint8\n\nconst (\n\tDot11FlagsToDS Dot11Flags = 1 << iota\n\tDot11FlagsFromDS\n\tDot11FlagsMF\n\tDot11FlagsRetry\n\tDot11FlagsPowerManagement\n\tDot11FlagsMD\n\tDot11FlagsWEP\n\tDot11FlagsOrder\n)\n\nfunc (d Dot11Flags) ToDS() bool {\n\treturn d&Dot11FlagsToDS != 0\n}\nfunc (d Dot11Flags) FromDS() bool {\n\treturn d&Dot11FlagsFromDS != 0\n}\nfunc (d Dot11Flags) MF() bool {\n\treturn d&Dot11FlagsMF != 0\n}\nfunc (d Dot11Flags) Retry() bool {\n\treturn d&Dot11FlagsRetry != 0\n}\nfunc (d Dot11Flags) PowerManagement() bool {\n\treturn d&Dot11FlagsPowerManagement != 0\n}\nfunc (d Dot11Flags) MD() bool {\n\treturn d&Dot11FlagsMD != 0\n}\nfunc (d Dot11Flags) WEP() bool {\n\treturn d&Dot11FlagsWEP != 0\n}\nfunc (d Dot11Flags) Order() bool {\n\treturn d&Dot11FlagsOrder != 0\n}\n\n// String provides a human readable string for Dot11Flags.\n// This string is possibly subject to change over time; if you're storing this\n// persistently, you should probably store the Dot11Flags value, not its string.\nfunc (a Dot11Flags) String() string {\n\tvar out bytes.Buffer\n\tif a.ToDS() {\n\t\tout.WriteString(\"TO-DS,\")\n\t}\n\tif a.FromDS() {\n\t\tout.WriteString(\"FROM-DS,\")\n\t}\n\tif a.MF() {\n\t\tout.WriteString(\"MF,\")\n\t}\n\tif a.Retry() {\n\t\tout.WriteString(\"Retry,\")\n\t}\n\tif a.PowerManagement() {\n\t\tout.WriteString(\"PowerManagement,\")\n\t}\n\tif a.MD() {\n\t\tout.WriteString(\"MD,\")\n\t}\n\tif a.WEP() {\n\t\tout.WriteString(\"WEP,\")\n\t}\n\tif a.Order() {\n\t\tout.WriteString(\"Order,\")\n\t}\n\n\tif length := out.Len(); length > 0 {\n\t\treturn string(out.Bytes()[:length-1]) // strip final comma\n\t}\n\treturn \"\"\n}\n\ntype Dot11Reason uint16\n\n// TODO: Verify these reasons, and append more reasons if necessary.\n\nconst (\n\tDot11ReasonReserved          Dot11Reason = 1\n\tDot11ReasonUnspecified       Dot11Reason = 2\n\tDot11ReasonAuthExpired       Dot11Reason = 3\n\tDot11ReasonDeauthStLeaving   Dot11Reason = 4\n\tDot11ReasonInactivity        Dot11Reason = 5\n\tDot11ReasonApFull            Dot11Reason = 6\n\tDot11ReasonClass2FromNonAuth Dot11Reason = 7\n\tDot11ReasonClass3FromNonAss  Dot11Reason = 8\n\tDot11ReasonDisasStLeaving    Dot11Reason = 9\n\tDot11ReasonStNotAuth         Dot11Reason = 10\n)\n\n// String provides a human readable string for Dot11Reason.\n// This string is possibly subject to change over time; if you're storing this\n// persistently, you should probably store the Dot11Reason value, not its string.\nfunc (a Dot11Reason) String() string {\n\tswitch a {\n\tcase Dot11ReasonReserved:\n\t\treturn \"Reserved\"\n\tcase Dot11ReasonUnspecified:\n\t\treturn \"Unspecified\"\n\tcase Dot11ReasonAuthExpired:\n\t\treturn \"Auth. expired\"\n\tcase Dot11ReasonDeauthStLeaving:\n\t\treturn \"Deauth. st. leaving\"\n\tcase Dot11ReasonInactivity:\n\t\treturn \"Inactivity\"\n\tcase Dot11ReasonApFull:\n\t\treturn \"Ap. full\"\n\tcase Dot11ReasonClass2FromNonAuth:\n\t\treturn \"Class2 from non auth.\"\n\tcase Dot11ReasonClass3FromNonAss:\n\t\treturn \"Class3 from non ass.\"\n\tcase Dot11ReasonDisasStLeaving:\n\t\treturn \"Disass st. leaving\"\n\tcase Dot11ReasonStNotAuth:\n\t\treturn \"St. not auth.\"\n\tdefault:\n\t\treturn \"Unknown reason\"\n\t}\n}\n\ntype Dot11Status uint16\n\nconst (\n\tDot11StatusSuccess                      Dot11Status = 0\n\tDot11StatusFailure                      Dot11Status = 1  // Unspecified failure\n\tDot11StatusCannotSupportAllCapabilities Dot11Status = 10 // Cannot support all requested capabilities in the Capability Information field\n\tDot11StatusInabilityExistsAssociation   Dot11Status = 11 // Reassociation denied due to inability to confirm that association exists\n\tDot11StatusAssociationDenied            Dot11Status = 12 // Association denied due to reason outside the scope of this standard\n\tDot11StatusAlgorithmUnsupported         Dot11Status = 13 // Responding station does not support the specified authentication algorithm\n\tDot11StatusOufOfExpectedSequence        Dot11Status = 14 // Received an Authentication frame with authentication transaction sequence number out of expected sequence\n\tDot11StatusChallengeFailure             Dot11Status = 15 // Authentication rejected because of challenge failure\n\tDot11StatusTimeout                      Dot11Status = 16 // Authentication rejected due to timeout waiting for next frame in sequence\n\tDot11StatusAPUnableToHandle             Dot11Status = 17 // Association denied because AP is unable to handle additional associated stations\n\tDot11StatusRateUnsupported              Dot11Status = 18 // Association denied due to requesting station not supporting all of the data rates in the BSSBasicRateSet parameter\n)\n\n// String provides a human readable string for Dot11Status.\n// This string is possibly subject to change over time; if you're storing this\n// persistently, you should probably store the Dot11Status value, not its string.\nfunc (a Dot11Status) String() string {\n\tswitch a {\n\tcase Dot11StatusSuccess:\n\t\treturn \"success\"\n\tcase Dot11StatusFailure:\n\t\treturn \"failure\"\n\tcase Dot11StatusCannotSupportAllCapabilities:\n\t\treturn \"cannot-support-all-capabilities\"\n\tcase Dot11StatusInabilityExistsAssociation:\n\t\treturn \"inability-exists-association\"\n\tcase Dot11StatusAssociationDenied:\n\t\treturn \"association-denied\"\n\tcase Dot11StatusAlgorithmUnsupported:\n\t\treturn \"algorithm-unsupported\"\n\tcase Dot11StatusOufOfExpectedSequence:\n\t\treturn \"out-of-expected-sequence\"\n\tcase Dot11StatusChallengeFailure:\n\t\treturn \"challenge-failure\"\n\tcase Dot11StatusTimeout:\n\t\treturn \"timeout\"\n\tcase Dot11StatusAPUnableToHandle:\n\t\treturn \"ap-unable-to-handle\"\n\tcase Dot11StatusRateUnsupported:\n\t\treturn \"rate-unsupported\"\n\tdefault:\n\t\treturn \"unknown status\"\n\t}\n}\n\ntype Dot11AckPolicy uint8\n\nconst (\n\tDot11AckPolicyNormal     Dot11AckPolicy = 0\n\tDot11AckPolicyNone       Dot11AckPolicy = 1\n\tDot11AckPolicyNoExplicit Dot11AckPolicy = 2\n\tDot11AckPolicyBlock      Dot11AckPolicy = 3\n)\n\n// String provides a human readable string for Dot11AckPolicy.\n// This string is possibly subject to change over time; if you're storing this\n// persistently, you should probably store the Dot11AckPolicy value, not its string.\nfunc (a Dot11AckPolicy) String() string {\n\tswitch a {\n\tcase Dot11AckPolicyNormal:\n\t\treturn \"normal-ack\"\n\tcase Dot11AckPolicyNone:\n\t\treturn \"no-ack\"\n\tcase Dot11AckPolicyNoExplicit:\n\t\treturn \"no-explicit-ack\"\n\tcase Dot11AckPolicyBlock:\n\t\treturn \"block-ack\"\n\tdefault:\n\t\treturn \"unknown-ack-policy\"\n\t}\n}\n\ntype Dot11Algorithm uint16\n\nconst (\n\tDot11AlgorithmOpen      Dot11Algorithm = 0\n\tDot11AlgorithmSharedKey Dot11Algorithm = 1\n)\n\n// String provides a human readable string for Dot11Algorithm.\n// This string is possibly subject to change over time; if you're storing this\n// persistently, you should probably store the Dot11Algorithm value, not its string.\nfunc (a Dot11Algorithm) String() string {\n\tswitch a {\n\tcase Dot11AlgorithmOpen:\n\t\treturn \"open\"\n\tcase Dot11AlgorithmSharedKey:\n\t\treturn \"shared-key\"\n\tdefault:\n\t\treturn \"unknown-algorithm\"\n\t}\n}\n\ntype Dot11InformationElementID uint8\n\nconst (\n\tDot11InformationElementIDSSID                      Dot11InformationElementID = 0\n\tDot11InformationElementIDRates                     Dot11InformationElementID = 1\n\tDot11InformationElementIDFHSet                     Dot11InformationElementID = 2\n\tDot11InformationElementIDDSSet                     Dot11InformationElementID = 3\n\tDot11InformationElementIDCFSet                     Dot11InformationElementID = 4\n\tDot11InformationElementIDTIM                       Dot11InformationElementID = 5\n\tDot11InformationElementIDIBSSSet                   Dot11InformationElementID = 6\n\tDot11InformationElementIDCountryInfo               Dot11InformationElementID = 7\n\tDot11InformationElementIDHoppingPatternParam       Dot11InformationElementID = 8\n\tDot11InformationElementIDHoppingPatternTable       Dot11InformationElementID = 9\n\tDot11InformationElementIDRequest                   Dot11InformationElementID = 10\n\tDot11InformationElementIDQBSSLoadElem              Dot11InformationElementID = 11\n\tDot11InformationElementIDEDCAParamSet              Dot11InformationElementID = 12\n\tDot11InformationElementIDTrafficSpec               Dot11InformationElementID = 13\n\tDot11InformationElementIDTrafficClass              Dot11InformationElementID = 14\n\tDot11InformationElementIDSchedule                  Dot11InformationElementID = 15\n\tDot11InformationElementIDChallenge                 Dot11InformationElementID = 16\n\tDot11InformationElementIDPowerConst                Dot11InformationElementID = 32\n\tDot11InformationElementIDPowerCapability           Dot11InformationElementID = 33\n\tDot11InformationElementIDTPCRequest                Dot11InformationElementID = 34\n\tDot11InformationElementIDTPCReport                 Dot11InformationElementID = 35\n\tDot11InformationElementIDSupportedChannels         Dot11InformationElementID = 36\n\tDot11InformationElementIDSwitchChannelAnnounce     Dot11InformationElementID = 37\n\tDot11InformationElementIDMeasureRequest            Dot11InformationElementID = 38\n\tDot11InformationElementIDMeasureReport             Dot11InformationElementID = 39\n\tDot11InformationElementIDQuiet                     Dot11InformationElementID = 40\n\tDot11InformationElementIDIBSSDFS                   Dot11InformationElementID = 41\n\tDot11InformationElementIDERPInfo                   Dot11InformationElementID = 42\n\tDot11InformationElementIDTSDelay                   Dot11InformationElementID = 43\n\tDot11InformationElementIDTCLASProcessing           Dot11InformationElementID = 44\n\tDot11InformationElementIDHTCapabilities            Dot11InformationElementID = 45\n\tDot11InformationElementIDQOSCapability             Dot11InformationElementID = 46\n\tDot11InformationElementIDERPInfo2                  Dot11InformationElementID = 47\n\tDot11InformationElementIDRSNInfo                   Dot11InformationElementID = 48\n\tDot11InformationElementIDESRates                   Dot11InformationElementID = 50\n\tDot11InformationElementIDAPChannelReport           Dot11InformationElementID = 51\n\tDot11InformationElementIDNeighborReport            Dot11InformationElementID = 52\n\tDot11InformationElementIDRCPI                      Dot11InformationElementID = 53\n\tDot11InformationElementIDMobilityDomain            Dot11InformationElementID = 54\n\tDot11InformationElementIDFastBSSTrans              Dot11InformationElementID = 55\n\tDot11InformationElementIDTimeoutInt                Dot11InformationElementID = 56\n\tDot11InformationElementIDRICData                   Dot11InformationElementID = 57\n\tDot11InformationElementIDDSERegisteredLoc          Dot11InformationElementID = 58\n\tDot11InformationElementIDSuppOperatingClass        Dot11InformationElementID = 59\n\tDot11InformationElementIDExtChanSwitchAnnounce     Dot11InformationElementID = 60\n\tDot11InformationElementIDHTInfo                    Dot11InformationElementID = 61\n\tDot11InformationElementIDSecChanOffset             Dot11InformationElementID = 62\n\tDot11InformationElementIDBSSAverageAccessDelay     Dot11InformationElementID = 63\n\tDot11InformationElementIDAntenna                   Dot11InformationElementID = 64\n\tDot11InformationElementIDRSNI                      Dot11InformationElementID = 65\n\tDot11InformationElementIDMeasurePilotTrans         Dot11InformationElementID = 66\n\tDot11InformationElementIDBSSAvailAdmCapacity       Dot11InformationElementID = 67\n\tDot11InformationElementIDBSSACAccDelayWAPIParam    Dot11InformationElementID = 68\n\tDot11InformationElementIDTimeAdvertisement         Dot11InformationElementID = 69\n\tDot11InformationElementIDRMEnabledCapabilities     Dot11InformationElementID = 70\n\tDot11InformationElementIDMultipleBSSID             Dot11InformationElementID = 71\n\tDot11InformationElementID2040BSSCoExist            Dot11InformationElementID = 72\n\tDot11InformationElementID2040BSSIntChanReport      Dot11InformationElementID = 73\n\tDot11InformationElementIDOverlapBSSScanParam       Dot11InformationElementID = 74\n\tDot11InformationElementIDRICDescriptor             Dot11InformationElementID = 75\n\tDot11InformationElementIDManagementMIC             Dot11InformationElementID = 76\n\tDot11InformationElementIDEventRequest              Dot11InformationElementID = 78\n\tDot11InformationElementIDEventReport               Dot11InformationElementID = 79\n\tDot11InformationElementIDDiagnosticRequest         Dot11InformationElementID = 80\n\tDot11InformationElementIDDiagnosticReport          Dot11InformationElementID = 81\n\tDot11InformationElementIDLocationParam             Dot11InformationElementID = 82\n\tDot11InformationElementIDNonTransBSSIDCapability   Dot11InformationElementID = 83\n\tDot11InformationElementIDSSIDList                  Dot11InformationElementID = 84\n\tDot11InformationElementIDMultipleBSSIDIndex        Dot11InformationElementID = 85\n\tDot11InformationElementIDFMSDescriptor             Dot11InformationElementID = 86\n\tDot11InformationElementIDFMSRequest                Dot11InformationElementID = 87\n\tDot11InformationElementIDFMSResponse               Dot11InformationElementID = 88\n\tDot11InformationElementIDQOSTrafficCapability      Dot11InformationElementID = 89\n\tDot11InformationElementIDBSSMaxIdlePeriod          Dot11InformationElementID = 90\n\tDot11InformationElementIDTFSRequest                Dot11InformationElementID = 91\n\tDot11InformationElementIDTFSResponse               Dot11InformationElementID = 92\n\tDot11InformationElementIDWNMSleepMode              Dot11InformationElementID = 93\n\tDot11InformationElementIDTIMBroadcastRequest       Dot11InformationElementID = 94\n\tDot11InformationElementIDTIMBroadcastResponse      Dot11InformationElementID = 95\n\tDot11InformationElementIDCollInterferenceReport    Dot11InformationElementID = 96\n\tDot11InformationElementIDChannelUsage              Dot11InformationElementID = 97\n\tDot11InformationElementIDTimeZone                  Dot11InformationElementID = 98\n\tDot11InformationElementIDDMSRequest                Dot11InformationElementID = 99\n\tDot11InformationElementIDDMSResponse               Dot11InformationElementID = 100\n\tDot11InformationElementIDLinkIdentifier            Dot11InformationElementID = 101\n\tDot11InformationElementIDWakeupSchedule            Dot11InformationElementID = 102\n\tDot11InformationElementIDChannelSwitchTiming       Dot11InformationElementID = 104\n\tDot11InformationElementIDPTIControl                Dot11InformationElementID = 105\n\tDot11InformationElementIDPUBufferStatus            Dot11InformationElementID = 106\n\tDot11InformationElementIDInterworking              Dot11InformationElementID = 107\n\tDot11InformationElementIDAdvertisementProtocol     Dot11InformationElementID = 108\n\tDot11InformationElementIDExpBWRequest              Dot11InformationElementID = 109\n\tDot11InformationElementIDQOSMapSet                 Dot11InformationElementID = 110\n\tDot11InformationElementIDRoamingConsortium         Dot11InformationElementID = 111\n\tDot11InformationElementIDEmergencyAlertIdentifier  Dot11InformationElementID = 112\n\tDot11InformationElementIDMeshConfiguration         Dot11InformationElementID = 113\n\tDot11InformationElementIDMeshID                    Dot11InformationElementID = 114\n\tDot11InformationElementIDMeshLinkMetricReport      Dot11InformationElementID = 115\n\tDot11InformationElementIDCongestionNotification    Dot11InformationElementID = 116\n\tDot11InformationElementIDMeshPeeringManagement     Dot11InformationElementID = 117\n\tDot11InformationElementIDMeshChannelSwitchParam    Dot11InformationElementID = 118\n\tDot11InformationElementIDMeshAwakeWindows          Dot11InformationElementID = 119\n\tDot11InformationElementIDBeaconTiming              Dot11InformationElementID = 120\n\tDot11InformationElementIDMCCAOPSetupRequest        Dot11InformationElementID = 121\n\tDot11InformationElementIDMCCAOPSetupReply          Dot11InformationElementID = 122\n\tDot11InformationElementIDMCCAOPAdvertisement       Dot11InformationElementID = 123\n\tDot11InformationElementIDMCCAOPTeardown            Dot11InformationElementID = 124\n\tDot11InformationElementIDGateAnnouncement          Dot11InformationElementID = 125\n\tDot11InformationElementIDRootAnnouncement          Dot11InformationElementID = 126\n\tDot11InformationElementIDExtCapability             Dot11InformationElementID = 127\n\tDot11InformationElementIDAgereProprietary          Dot11InformationElementID = 128\n\tDot11InformationElementIDPathRequest               Dot11InformationElementID = 130\n\tDot11InformationElementIDPathReply                 Dot11InformationElementID = 131\n\tDot11InformationElementIDPathError                 Dot11InformationElementID = 132\n\tDot11InformationElementIDCiscoCCX1CKIPDeviceName   Dot11InformationElementID = 133\n\tDot11InformationElementIDCiscoCCX2                 Dot11InformationElementID = 136\n\tDot11InformationElementIDProxyUpdate               Dot11InformationElementID = 137\n\tDot11InformationElementIDProxyUpdateConfirmation   Dot11InformationElementID = 138\n\tDot11InformationElementIDAuthMeshPerringExch       Dot11InformationElementID = 139\n\tDot11InformationElementIDMIC                       Dot11InformationElementID = 140\n\tDot11InformationElementIDDestinationURI            Dot11InformationElementID = 141\n\tDot11InformationElementIDUAPSDCoexistence          Dot11InformationElementID = 142\n\tDot11InformationElementIDWakeupSchedule80211ad     Dot11InformationElementID = 143\n\tDot11InformationElementIDExtendedSchedule          Dot11InformationElementID = 144\n\tDot11InformationElementIDSTAAvailability           Dot11InformationElementID = 145\n\tDot11InformationElementIDDMGTSPEC                  Dot11InformationElementID = 146\n\tDot11InformationElementIDNextDMGATI                Dot11InformationElementID = 147\n\tDot11InformationElementIDDMSCapabilities           Dot11InformationElementID = 148\n\tDot11InformationElementIDCiscoUnknown95            Dot11InformationElementID = 149\n\tDot11InformationElementIDVendor2                   Dot11InformationElementID = 150\n\tDot11InformationElementIDDMGOperating              Dot11InformationElementID = 151\n\tDot11InformationElementIDDMGBSSParamChange         Dot11InformationElementID = 152\n\tDot11InformationElementIDDMGBeamRefinement         Dot11InformationElementID = 153\n\tDot11InformationElementIDChannelMeasFeedback       Dot11InformationElementID = 154\n\tDot11InformationElementIDAwakeWindow               Dot11InformationElementID = 157\n\tDot11InformationElementIDMultiBand                 Dot11InformationElementID = 158\n\tDot11InformationElementIDADDBAExtension            Dot11InformationElementID = 159\n\tDot11InformationElementIDNEXTPCPList               Dot11InformationElementID = 160\n\tDot11InformationElementIDPCPHandover               Dot11InformationElementID = 161\n\tDot11InformationElementIDDMGLinkMargin             Dot11InformationElementID = 162\n\tDot11InformationElementIDSwitchingStream           Dot11InformationElementID = 163\n\tDot11InformationElementIDSessionTransmission       Dot11InformationElementID = 164\n\tDot11InformationElementIDDynamicTonePairReport     Dot11InformationElementID = 165\n\tDot11InformationElementIDClusterReport             Dot11InformationElementID = 166\n\tDot11InformationElementIDRelayCapabilities         Dot11InformationElementID = 167\n\tDot11InformationElementIDRelayTransferParameter    Dot11InformationElementID = 168\n\tDot11InformationElementIDBeamlinkMaintenance       Dot11InformationElementID = 169\n\tDot11InformationElementIDMultipleMacSublayers      Dot11InformationElementID = 170\n\tDot11InformationElementIDUPID                      Dot11InformationElementID = 171\n\tDot11InformationElementIDDMGLinkAdaptionAck        Dot11InformationElementID = 172\n\tDot11InformationElementIDSymbolProprietary         Dot11InformationElementID = 173\n\tDot11InformationElementIDMCCAOPAdvertOverview      Dot11InformationElementID = 174\n\tDot11InformationElementIDQuietPeriodRequest        Dot11InformationElementID = 175\n\tDot11InformationElementIDQuietPeriodResponse       Dot11InformationElementID = 177\n\tDot11InformationElementIDECPACPolicy               Dot11InformationElementID = 182\n\tDot11InformationElementIDClusterTimeOffset         Dot11InformationElementID = 183\n\tDot11InformationElementIDAntennaSectorID           Dot11InformationElementID = 190\n\tDot11InformationElementIDVHTCapabilities           Dot11InformationElementID = 191\n\tDot11InformationElementIDVHTOperation              Dot11InformationElementID = 192\n\tDot11InformationElementIDExtendedBSSLoad           Dot11InformationElementID = 193\n\tDot11InformationElementIDWideBWChannelSwitch       Dot11InformationElementID = 194\n\tDot11InformationElementIDVHTTxPowerEnvelope        Dot11InformationElementID = 195\n\tDot11InformationElementIDChannelSwitchWrapper      Dot11InformationElementID = 196\n\tDot11InformationElementIDOperatingModeNotification Dot11InformationElementID = 199\n\tDot11InformationElementIDUPSIM                     Dot11InformationElementID = 200\n\tDot11InformationElementIDReducedNeighborReport     Dot11InformationElementID = 201\n\tDot11InformationElementIDTVHTOperation             Dot11InformationElementID = 202\n\tDot11InformationElementIDDeviceLocation            Dot11InformationElementID = 204\n\tDot11InformationElementIDWhiteSpaceMap             Dot11InformationElementID = 205\n\tDot11InformationElementIDFineTuningMeasureParams   Dot11InformationElementID = 206\n\tDot11InformationElementIDVendor                    Dot11InformationElementID = 221\n)\n\n// String provides a human readable string for Dot11InformationElementID.\n// This string is possibly subject to change over time; if you're storing this\n// persistently, you should probably store the Dot11InformationElementID value,\n// not its string.\nfunc (a Dot11InformationElementID) String() string {\n\tswitch a {\n\tcase Dot11InformationElementIDSSID:\n\t\treturn \"SSID parameter set\"\n\tcase Dot11InformationElementIDRates:\n\t\treturn \"Supported Rates\"\n\tcase Dot11InformationElementIDFHSet:\n\t\treturn \"FH Parameter set\"\n\tcase Dot11InformationElementIDDSSet:\n\t\treturn \"DS Parameter set\"\n\tcase Dot11InformationElementIDCFSet:\n\t\treturn \"CF Parameter set\"\n\tcase Dot11InformationElementIDTIM:\n\t\treturn \"Traffic Indication Map (TIM)\"\n\tcase Dot11InformationElementIDIBSSSet:\n\t\treturn \"IBSS Parameter set\"\n\tcase Dot11InformationElementIDCountryInfo:\n\t\treturn \"Country Information\"\n\tcase Dot11InformationElementIDHoppingPatternParam:\n\t\treturn \"Hopping Pattern Parameters\"\n\tcase Dot11InformationElementIDHoppingPatternTable:\n\t\treturn \"Hopping Pattern Table\"\n\tcase Dot11InformationElementIDRequest:\n\t\treturn \"Request\"\n\tcase Dot11InformationElementIDQBSSLoadElem:\n\t\treturn \"QBSS Load Element\"\n\tcase Dot11InformationElementIDEDCAParamSet:\n\t\treturn \"EDCA Parameter Set\"\n\tcase Dot11InformationElementIDTrafficSpec:\n\t\treturn \"Traffic Specification\"\n\tcase Dot11InformationElementIDTrafficClass:\n\t\treturn \"Traffic Classification\"\n\tcase Dot11InformationElementIDSchedule:\n\t\treturn \"Schedule\"\n\tcase Dot11InformationElementIDChallenge:\n\t\treturn \"Challenge text\"\n\tcase Dot11InformationElementIDPowerConst:\n\t\treturn \"Power Constraint\"\n\tcase Dot11InformationElementIDPowerCapability:\n\t\treturn \"Power Capability\"\n\tcase Dot11InformationElementIDTPCRequest:\n\t\treturn \"TPC Request\"\n\tcase Dot11InformationElementIDTPCReport:\n\t\treturn \"TPC Report\"\n\tcase Dot11InformationElementIDSupportedChannels:\n\t\treturn \"Supported Channels\"\n\tcase Dot11InformationElementIDSwitchChannelAnnounce:\n\t\treturn \"Channel Switch Announcement\"\n\tcase Dot11InformationElementIDMeasureRequest:\n\t\treturn \"Measurement Request\"\n\tcase Dot11InformationElementIDMeasureReport:\n\t\treturn \"Measurement Report\"\n\tcase Dot11InformationElementIDQuiet:\n\t\treturn \"Quiet\"\n\tcase Dot11InformationElementIDIBSSDFS:\n\t\treturn \"IBSS DFS\"\n\tcase Dot11InformationElementIDERPInfo:\n\t\treturn \"ERP Information\"\n\tcase Dot11InformationElementIDTSDelay:\n\t\treturn \"TS Delay\"\n\tcase Dot11InformationElementIDTCLASProcessing:\n\t\treturn \"TCLAS Processing\"\n\tcase Dot11InformationElementIDHTCapabilities:\n\t\treturn \"HT Capabilities (802.11n D1.10)\"\n\tcase Dot11InformationElementIDQOSCapability:\n\t\treturn \"QOS Capability\"\n\tcase Dot11InformationElementIDERPInfo2:\n\t\treturn \"ERP Information-2\"\n\tcase Dot11InformationElementIDRSNInfo:\n\t\treturn \"RSN Information\"\n\tcase Dot11InformationElementIDESRates:\n\t\treturn \"Extended Supported Rates\"\n\tcase Dot11InformationElementIDAPChannelReport:\n\t\treturn \"AP Channel Report\"\n\tcase Dot11InformationElementIDNeighborReport:\n\t\treturn \"Neighbor Report\"\n\tcase Dot11InformationElementIDRCPI:\n\t\treturn \"RCPI\"\n\tcase Dot11InformationElementIDMobilityDomain:\n\t\treturn \"Mobility Domain\"\n\tcase Dot11InformationElementIDFastBSSTrans:\n\t\treturn \"Fast BSS Transition\"\n\tcase Dot11InformationElementIDTimeoutInt:\n\t\treturn \"Timeout Interval\"\n\tcase Dot11InformationElementIDRICData:\n\t\treturn \"RIC Data\"\n\tcase Dot11InformationElementIDDSERegisteredLoc:\n\t\treturn \"DSE Registered Location\"\n\tcase Dot11InformationElementIDSuppOperatingClass:\n\t\treturn \"Supported Operating Classes\"\n\tcase Dot11InformationElementIDExtChanSwitchAnnounce:\n\t\treturn \"Extended Channel Switch Announcement\"\n\tcase Dot11InformationElementIDHTInfo:\n\t\treturn \"HT Information (802.11n D1.10)\"\n\tcase Dot11InformationElementIDSecChanOffset:\n\t\treturn \"Secondary Channel Offset (802.11n D1.10)\"\n\tcase Dot11InformationElementIDBSSAverageAccessDelay:\n\t\treturn \"BSS Average Access Delay\"\n\tcase Dot11InformationElementIDAntenna:\n\t\treturn \"Antenna\"\n\tcase Dot11InformationElementIDRSNI:\n\t\treturn \"RSNI\"\n\tcase Dot11InformationElementIDMeasurePilotTrans:\n\t\treturn \"Measurement Pilot Transmission\"\n\tcase Dot11InformationElementIDBSSAvailAdmCapacity:\n\t\treturn \"BSS Available Admission Capacity\"\n\tcase Dot11InformationElementIDBSSACAccDelayWAPIParam:\n\t\treturn \"BSS AC Access Delay/WAPI Parameter Set\"\n\tcase Dot11InformationElementIDTimeAdvertisement:\n\t\treturn \"Time Advertisement\"\n\tcase Dot11InformationElementIDRMEnabledCapabilities:\n\t\treturn \"RM Enabled Capabilities\"\n\tcase Dot11InformationElementIDMultipleBSSID:\n\t\treturn \"Multiple BSSID\"\n\tcase Dot11InformationElementID2040BSSCoExist:\n\t\treturn \"20/40 BSS Coexistence\"\n\tcase Dot11InformationElementID2040BSSIntChanReport:\n\t\treturn \"20/40 BSS Intolerant Channel Report\"\n\tcase Dot11InformationElementIDOverlapBSSScanParam:\n\t\treturn \"Overlapping BSS Scan Parameters\"\n\tcase Dot11InformationElementIDRICDescriptor:\n\t\treturn \"RIC Descriptor\"\n\tcase Dot11InformationElementIDManagementMIC:\n\t\treturn \"Management MIC\"\n\tcase Dot11InformationElementIDEventRequest:\n\t\treturn \"Event Request\"\n\tcase Dot11InformationElementIDEventReport:\n\t\treturn \"Event Report\"\n\tcase Dot11InformationElementIDDiagnosticRequest:\n\t\treturn \"Diagnostic Request\"\n\tcase Dot11InformationElementIDDiagnosticReport:\n\t\treturn \"Diagnostic Report\"\n\tcase Dot11InformationElementIDLocationParam:\n\t\treturn \"Location Parameters\"\n\tcase Dot11InformationElementIDNonTransBSSIDCapability:\n\t\treturn \"Non Transmitted BSSID Capability\"\n\tcase Dot11InformationElementIDSSIDList:\n\t\treturn \"SSID List\"\n\tcase Dot11InformationElementIDMultipleBSSIDIndex:\n\t\treturn \"Multiple BSSID Index\"\n\tcase Dot11InformationElementIDFMSDescriptor:\n\t\treturn \"FMS Descriptor\"\n\tcase Dot11InformationElementIDFMSRequest:\n\t\treturn \"FMS Request\"\n\tcase Dot11InformationElementIDFMSResponse:\n\t\treturn \"FMS Response\"\n\tcase Dot11InformationElementIDQOSTrafficCapability:\n\t\treturn \"QoS Traffic Capability\"\n\tcase Dot11InformationElementIDBSSMaxIdlePeriod:\n\t\treturn \"BSS Max Idle Period\"\n\tcase Dot11InformationElementIDTFSRequest:\n\t\treturn \"TFS Request\"\n\tcase Dot11InformationElementIDTFSResponse:\n\t\treturn \"TFS Response\"\n\tcase Dot11InformationElementIDWNMSleepMode:\n\t\treturn \"WNM-Sleep Mode\"\n\tcase Dot11InformationElementIDTIMBroadcastRequest:\n\t\treturn \"TIM Broadcast Request\"\n\tcase Dot11InformationElementIDTIMBroadcastResponse:\n\t\treturn \"TIM Broadcast Response\"\n\tcase Dot11InformationElementIDCollInterferenceReport:\n\t\treturn \"Collocated Interference Report\"\n\tcase Dot11InformationElementIDChannelUsage:\n\t\treturn \"Channel Usage\"\n\tcase Dot11InformationElementIDTimeZone:\n\t\treturn \"Time Zone\"\n\tcase Dot11InformationElementIDDMSRequest:\n\t\treturn \"DMS Request\"\n\tcase Dot11InformationElementIDDMSResponse:\n\t\treturn \"DMS Response\"\n\tcase Dot11InformationElementIDLinkIdentifier:\n\t\treturn \"Link Identifier\"\n\tcase Dot11InformationElementIDWakeupSchedule:\n\t\treturn \"Wakeup Schedule\"\n\tcase Dot11InformationElementIDChannelSwitchTiming:\n\t\treturn \"Channel Switch Timing\"\n\tcase Dot11InformationElementIDPTIControl:\n\t\treturn \"PTI Control\"\n\tcase Dot11InformationElementIDPUBufferStatus:\n\t\treturn \"PU Buffer Status\"\n\tcase Dot11InformationElementIDInterworking:\n\t\treturn \"Interworking\"\n\tcase Dot11InformationElementIDAdvertisementProtocol:\n\t\treturn \"Advertisement Protocol\"\n\tcase Dot11InformationElementIDExpBWRequest:\n\t\treturn \"Expedited Bandwidth Request\"\n\tcase Dot11InformationElementIDQOSMapSet:\n\t\treturn \"QoS Map Set\"\n\tcase Dot11InformationElementIDRoamingConsortium:\n\t\treturn \"Roaming Consortium\"\n\tcase Dot11InformationElementIDEmergencyAlertIdentifier:\n\t\treturn \"Emergency Alert Identifier\"\n\tcase Dot11InformationElementIDMeshConfiguration:\n\t\treturn \"Mesh Configuration\"\n\tcase Dot11InformationElementIDMeshID:\n\t\treturn \"Mesh ID\"\n\tcase Dot11InformationElementIDMeshLinkMetricReport:\n\t\treturn \"Mesh Link Metric Report\"\n\tcase Dot11InformationElementIDCongestionNotification:\n\t\treturn \"Congestion Notification\"\n\tcase Dot11InformationElementIDMeshPeeringManagement:\n\t\treturn \"Mesh Peering Management\"\n\tcase Dot11InformationElementIDMeshChannelSwitchParam:\n\t\treturn \"Mesh Channel Switch Parameters\"\n\tcase Dot11InformationElementIDMeshAwakeWindows:\n\t\treturn \"Mesh Awake Windows\"\n\tcase Dot11InformationElementIDBeaconTiming:\n\t\treturn \"Beacon Timing\"\n\tcase Dot11InformationElementIDMCCAOPSetupRequest:\n\t\treturn \"MCCAOP Setup Request\"\n\tcase Dot11InformationElementIDMCCAOPSetupReply:\n\t\treturn \"MCCAOP SETUP Reply\"\n\tcase Dot11InformationElementIDMCCAOPAdvertisement:\n\t\treturn \"MCCAOP Advertisement\"\n\tcase Dot11InformationElementIDMCCAOPTeardown:\n\t\treturn \"MCCAOP Teardown\"\n\tcase Dot11InformationElementIDGateAnnouncement:\n\t\treturn \"Gate Announcement\"\n\tcase Dot11InformationElementIDRootAnnouncement:\n\t\treturn \"Root Announcement\"\n\tcase Dot11InformationElementIDExtCapability:\n\t\treturn \"Extended Capabilities\"\n\tcase Dot11InformationElementIDAgereProprietary:\n\t\treturn \"Agere Proprietary\"\n\tcase Dot11InformationElementIDPathRequest:\n\t\treturn \"Path Request\"\n\tcase Dot11InformationElementIDPathReply:\n\t\treturn \"Path Reply\"\n\tcase Dot11InformationElementIDPathError:\n\t\treturn \"Path Error\"\n\tcase Dot11InformationElementIDCiscoCCX1CKIPDeviceName:\n\t\treturn \"Cisco CCX1 CKIP + Device Name\"\n\tcase Dot11InformationElementIDCiscoCCX2:\n\t\treturn \"Cisco CCX2\"\n\tcase Dot11InformationElementIDProxyUpdate:\n\t\treturn \"Proxy Update\"\n\tcase Dot11InformationElementIDProxyUpdateConfirmation:\n\t\treturn \"Proxy Update Confirmation\"\n\tcase Dot11InformationElementIDAuthMeshPerringExch:\n\t\treturn \"Auhenticated Mesh Perring Exchange\"\n\tcase Dot11InformationElementIDMIC:\n\t\treturn \"MIC (Message Integrity Code)\"\n\tcase Dot11InformationElementIDDestinationURI:\n\t\treturn \"Destination URI\"\n\tcase Dot11InformationElementIDUAPSDCoexistence:\n\t\treturn \"U-APSD Coexistence\"\n\tcase Dot11InformationElementIDWakeupSchedule80211ad:\n\t\treturn \"Wakeup Schedule 802.11ad\"\n\tcase Dot11InformationElementIDExtendedSchedule:\n\t\treturn \"Extended Schedule\"\n\tcase Dot11InformationElementIDSTAAvailability:\n\t\treturn \"STA Availability\"\n\tcase Dot11InformationElementIDDMGTSPEC:\n\t\treturn \"DMG TSPEC\"\n\tcase Dot11InformationElementIDNextDMGATI:\n\t\treturn \"Next DMG ATI\"\n\tcase Dot11InformationElementIDDMSCapabilities:\n\t\treturn \"DMG Capabilities\"\n\tcase Dot11InformationElementIDCiscoUnknown95:\n\t\treturn \"Cisco Unknown 95\"\n\tcase Dot11InformationElementIDVendor2:\n\t\treturn \"Vendor Specific\"\n\tcase Dot11InformationElementIDDMGOperating:\n\t\treturn \"DMG Operating\"\n\tcase Dot11InformationElementIDDMGBSSParamChange:\n\t\treturn \"DMG BSS Parameter Change\"\n\tcase Dot11InformationElementIDDMGBeamRefinement:\n\t\treturn \"DMG Beam Refinement\"\n\tcase Dot11InformationElementIDChannelMeasFeedback:\n\t\treturn \"Channel Measurement Feedback\"\n\tcase Dot11InformationElementIDAwakeWindow:\n\t\treturn \"Awake Window\"\n\tcase Dot11InformationElementIDMultiBand:\n\t\treturn \"Multi Band\"\n\tcase Dot11InformationElementIDADDBAExtension:\n\t\treturn \"ADDBA Extension\"\n\tcase Dot11InformationElementIDNEXTPCPList:\n\t\treturn \"NEXTPCP List\"\n\tcase Dot11InformationElementIDPCPHandover:\n\t\treturn \"PCP Handover\"\n\tcase Dot11InformationElementIDDMGLinkMargin:\n\t\treturn \"DMG Link Margin\"\n\tcase Dot11InformationElementIDSwitchingStream:\n\t\treturn \"Switching Stream\"\n\tcase Dot11InformationElementIDSessionTransmission:\n\t\treturn \"Session Transmission\"\n\tcase Dot11InformationElementIDDynamicTonePairReport:\n\t\treturn \"Dynamic Tone Pairing Report\"\n\tcase Dot11InformationElementIDClusterReport:\n\t\treturn \"Cluster Report\"\n\tcase Dot11InformationElementIDRelayCapabilities:\n\t\treturn \"Relay Capabilities\"\n\tcase Dot11InformationElementIDRelayTransferParameter:\n\t\treturn \"Relay Transfer Parameter\"\n\tcase Dot11InformationElementIDBeamlinkMaintenance:\n\t\treturn \"Beamlink Maintenance\"\n\tcase Dot11InformationElementIDMultipleMacSublayers:\n\t\treturn \"Multiple MAC Sublayers\"\n\tcase Dot11InformationElementIDUPID:\n\t\treturn \"U-PID\"\n\tcase Dot11InformationElementIDDMGLinkAdaptionAck:\n\t\treturn \"DMG Link Adaption Acknowledgment\"\n\tcase Dot11InformationElementIDSymbolProprietary:\n\t\treturn \"Symbol Proprietary\"\n\tcase Dot11InformationElementIDMCCAOPAdvertOverview:\n\t\treturn \"MCCAOP Advertisement Overview\"\n\tcase Dot11InformationElementIDQuietPeriodRequest:\n\t\treturn \"Quiet Period Request\"\n\tcase Dot11InformationElementIDQuietPeriodResponse:\n\t\treturn \"Quiet Period Response\"\n\tcase Dot11InformationElementIDECPACPolicy:\n\t\treturn \"ECPAC Policy\"\n\tcase Dot11InformationElementIDClusterTimeOffset:\n\t\treturn \"Cluster Time Offset\"\n\tcase Dot11InformationElementIDAntennaSectorID:\n\t\treturn \"Antenna Sector ID\"\n\tcase Dot11InformationElementIDVHTCapabilities:\n\t\treturn \"VHT Capabilities (IEEE Std 802.11ac/D3.1)\"\n\tcase Dot11InformationElementIDVHTOperation:\n\t\treturn \"VHT Operation (IEEE Std 802.11ac/D3.1)\"\n\tcase Dot11InformationElementIDExtendedBSSLoad:\n\t\treturn \"Extended BSS Load\"\n\tcase Dot11InformationElementIDWideBWChannelSwitch:\n\t\treturn \"Wide Bandwidth Channel Switch\"\n\tcase Dot11InformationElementIDVHTTxPowerEnvelope:\n\t\treturn \"VHT Tx Power Envelope (IEEE Std 802.11ac/D5.0)\"\n\tcase Dot11InformationElementIDChannelSwitchWrapper:\n\t\treturn \"Channel Switch Wrapper\"\n\tcase Dot11InformationElementIDOperatingModeNotification:\n\t\treturn \"Operating Mode Notification\"\n\tcase Dot11InformationElementIDUPSIM:\n\t\treturn \"UP SIM\"\n\tcase Dot11InformationElementIDReducedNeighborReport:\n\t\treturn \"Reduced Neighbor Report\"\n\tcase Dot11InformationElementIDTVHTOperation:\n\t\treturn \"TVHT Op\"\n\tcase Dot11InformationElementIDDeviceLocation:\n\t\treturn \"Device Location\"\n\tcase Dot11InformationElementIDWhiteSpaceMap:\n\t\treturn \"White Space Map\"\n\tcase Dot11InformationElementIDFineTuningMeasureParams:\n\t\treturn \"Fine Tuning Measure Parameters\"\n\tcase Dot11InformationElementIDVendor:\n\t\treturn \"Vendor\"\n\tdefault:\n\t\treturn \"Unknown information element id\"\n\t}\n}\n\n// Dot11 provides an IEEE 802.11 base packet header.\n// See http://standards.ieee.org/findstds/standard/802.11-2012.html\n// for excruciating detail.\ntype Dot11 struct {\n\tBaseLayer\n\tType           Dot11Type\n\tProto          uint8\n\tFlags          Dot11Flags\n\tDurationID     uint16\n\tAddress1       net.HardwareAddr\n\tAddress2       net.HardwareAddr\n\tAddress3       net.HardwareAddr\n\tAddress4       net.HardwareAddr\n\tSequenceNumber uint16\n\tFragmentNumber uint16\n\tChecksum       uint32\n\tQOS            *Dot11QOS\n\tHTControl      *Dot11HTControl\n\tDataLayer      gopacket.Layer\n}\n\ntype Dot11QOS struct {\n\tTID       uint8 /* Traffic IDentifier */\n\tEOSP      bool  /* End of service period */\n\tAckPolicy Dot11AckPolicy\n\tTXOP      uint8\n}\n\ntype Dot11HTControl struct {\n\tACConstraint bool\n\tRDGMorePPDU  bool\n\n\tVHT *Dot11HTControlVHT\n\tHT  *Dot11HTControlHT\n}\n\ntype Dot11HTControlHT struct {\n\tLinkAdapationControl *Dot11LinkAdapationControl\n\tCalibrationPosition  uint8\n\tCalibrationSequence  uint8\n\tCSISteering          uint8\n\tNDPAnnouncement      bool\n\tDEI                  bool\n}\n\ntype Dot11HTControlVHT struct {\n\tMRQ            bool\n\tUnsolicitedMFB bool\n\tMSI            *uint8\n\tMFB            Dot11HTControlMFB\n\tCompressedMSI  *uint8\n\tSTBCIndication bool\n\tMFSI           *uint8\n\tGID            *uint8\n\tCodingType     *Dot11CodingType\n\tFbTXBeamformed bool\n}\n\ntype Dot11HTControlMFB struct {\n\tNumSTS uint8\n\tVHTMCS uint8\n\tBW     uint8\n\tSNR    int8\n}\n\ntype Dot11LinkAdapationControl struct {\n\tTRQ  bool\n\tMRQ  bool\n\tMSI  uint8\n\tMFSI uint8\n\tASEL *Dot11ASEL\n\tMFB  *uint8\n}\n\ntype Dot11ASEL struct {\n\tCommand uint8\n\tData    uint8\n}\n\ntype Dot11CodingType uint8\n\nconst (\n\tDot11CodingTypeBCC  = 0\n\tDot11CodingTypeLDPC = 1\n)\n\nfunc (a Dot11CodingType) String() string {\n\tswitch a {\n\tcase Dot11CodingTypeBCC:\n\t\treturn \"BCC\"\n\tcase Dot11CodingTypeLDPC:\n\t\treturn \"LDPC\"\n\tdefault:\n\t\treturn \"Unknown coding type\"\n\t}\n}\n\nfunc (m *Dot11HTControlMFB) NoFeedBackPresent() bool {\n\treturn m.VHTMCS == 15 && m.NumSTS == 7\n}\n\nfunc decodeDot11(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11{}\n\terr := d.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(d)\n\tif d.DataLayer != nil {\n\t\tp.AddLayer(d.DataLayer)\n\t}\n\treturn p.NextDecoder(d.NextLayerType())\n}\n\nfunc (m *Dot11) LayerType() gopacket.LayerType  { return LayerTypeDot11 }\nfunc (m *Dot11) CanDecode() gopacket.LayerClass { return LayerTypeDot11 }\nfunc (m *Dot11) NextLayerType() gopacket.LayerType {\n\tif m.DataLayer != nil {\n\t\tif m.Flags.WEP() {\n\t\t\treturn LayerTypeDot11WEP\n\t\t}\n\t\treturn m.DataLayer.(gopacket.DecodingLayer).NextLayerType()\n\t}\n\treturn m.Type.LayerType()\n}\n\nfunc createU8(x uint8) *uint8 {\n\treturn &x\n}\n\nvar dataDecodeMap = map[Dot11Type]func() gopacket.DecodingLayer{\n\tDot11TypeData:                   func() gopacket.DecodingLayer { return &Dot11Data{} },\n\tDot11TypeDataCFAck:              func() gopacket.DecodingLayer { return &Dot11DataCFAck{} },\n\tDot11TypeDataCFPoll:             func() gopacket.DecodingLayer { return &Dot11DataCFPoll{} },\n\tDot11TypeDataCFAckPoll:          func() gopacket.DecodingLayer { return &Dot11DataCFAckPoll{} },\n\tDot11TypeDataNull:               func() gopacket.DecodingLayer { return &Dot11DataNull{} },\n\tDot11TypeDataCFAckNoData:        func() gopacket.DecodingLayer { return &Dot11DataCFAckNoData{} },\n\tDot11TypeDataCFPollNoData:       func() gopacket.DecodingLayer { return &Dot11DataCFPollNoData{} },\n\tDot11TypeDataCFAckPollNoData:    func() gopacket.DecodingLayer { return &Dot11DataCFAckPollNoData{} },\n\tDot11TypeDataQOSData:            func() gopacket.DecodingLayer { return &Dot11DataQOSData{} },\n\tDot11TypeDataQOSDataCFAck:       func() gopacket.DecodingLayer { return &Dot11DataQOSDataCFAck{} },\n\tDot11TypeDataQOSDataCFPoll:      func() gopacket.DecodingLayer { return &Dot11DataQOSDataCFPoll{} },\n\tDot11TypeDataQOSDataCFAckPoll:   func() gopacket.DecodingLayer { return &Dot11DataQOSDataCFAckPoll{} },\n\tDot11TypeDataQOSNull:            func() gopacket.DecodingLayer { return &Dot11DataQOSNull{} },\n\tDot11TypeDataQOSCFPollNoData:    func() gopacket.DecodingLayer { return &Dot11DataQOSCFPollNoData{} },\n\tDot11TypeDataQOSCFAckPollNoData: func() gopacket.DecodingLayer { return &Dot11DataQOSCFAckPollNoData{} },\n}\n\nfunc (m *Dot11) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 10 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Dot11 length %v too short, %v required\", len(data), 10)\n\t}\n\tm.Type = Dot11Type((data[0])&0xFC) >> 2\n\n\tm.DataLayer = nil\n\tm.Proto = uint8(data[0]) & 0x0003\n\tm.Flags = Dot11Flags(data[1])\n\tm.DurationID = binary.LittleEndian.Uint16(data[2:4])\n\tm.Address1 = net.HardwareAddr(data[4:10])\n\n\toffset := 10\n\n\tmainType := m.Type.MainType()\n\n\tswitch mainType {\n\tcase Dot11TypeCtrl:\n\t\tswitch m.Type {\n\t\tcase Dot11TypeCtrlRTS, Dot11TypeCtrlPowersavePoll, Dot11TypeCtrlCFEnd, Dot11TypeCtrlCFEndAck:\n\t\t\tif len(data) < offset+6 {\n\t\t\t\tdf.SetTruncated()\n\t\t\t\treturn fmt.Errorf(\"Dot11 length %v too short, %v required\", len(data), offset+6)\n\t\t\t}\n\t\t\tm.Address2 = net.HardwareAddr(data[offset : offset+6])\n\t\t\toffset += 6\n\t\t}\n\tcase Dot11TypeMgmt, Dot11TypeData:\n\t\tif len(data) < offset+14 {\n\t\t\tdf.SetTruncated()\n\t\t\treturn fmt.Errorf(\"Dot11 length %v too short, %v required\", len(data), offset+14)\n\t\t}\n\t\tm.Address2 = net.HardwareAddr(data[offset : offset+6])\n\t\toffset += 6\n\t\tm.Address3 = net.HardwareAddr(data[offset : offset+6])\n\t\toffset += 6\n\n\t\tm.SequenceNumber = (binary.LittleEndian.Uint16(data[offset:offset+2]) & 0xFFF0) >> 4\n\t\tm.FragmentNumber = (binary.LittleEndian.Uint16(data[offset:offset+2]) & 0x000F)\n\t\toffset += 2\n\t}\n\n\tif mainType == Dot11TypeData && m.Flags.FromDS() && m.Flags.ToDS() {\n\t\tif len(data) < offset+6 {\n\t\t\tdf.SetTruncated()\n\t\t\treturn fmt.Errorf(\"Dot11 length %v too short, %v required\", len(data), offset+6)\n\t\t}\n\t\tm.Address4 = net.HardwareAddr(data[offset : offset+6])\n\t\toffset += 6\n\t}\n\n\tif m.Type.QOS() {\n\t\tif len(data) < offset+2 {\n\t\t\tdf.SetTruncated()\n\t\t\treturn fmt.Errorf(\"Dot11 length %v too short, %v required\", len(data), offset+6)\n\t\t}\n\t\tm.QOS = &Dot11QOS{\n\t\t\tTID:       (uint8(data[offset]) & 0x0F),\n\t\t\tEOSP:      (uint8(data[offset]) & 0x10) == 0x10,\n\t\t\tAckPolicy: Dot11AckPolicy((uint8(data[offset]) & 0x60) >> 5),\n\t\t\tTXOP:      uint8(data[offset+1]),\n\t\t}\n\t\toffset += 2\n\t}\n\tif m.Flags.Order() && (m.Type.QOS() || mainType == Dot11TypeMgmt) {\n\t\tif len(data) < offset+4 {\n\t\t\tdf.SetTruncated()\n\t\t\treturn fmt.Errorf(\"Dot11 length %v too short, %v required\", len(data), offset+6)\n\t\t}\n\n\t\thtc := &Dot11HTControl{\n\t\t\tACConstraint: data[offset+3]&0x40 != 0,\n\t\t\tRDGMorePPDU:  data[offset+3]&0x80 != 0,\n\t\t}\n\t\tm.HTControl = htc\n\n\t\tif data[offset]&0x1 != 0 { // VHT Variant\n\t\t\tvht := &Dot11HTControlVHT{}\n\t\t\thtc.VHT = vht\n\t\t\tvht.MRQ = data[offset]&0x4 != 0\n\t\t\tvht.UnsolicitedMFB = data[offset+3]&0x20 != 0\n\t\t\tvht.MFB = Dot11HTControlMFB{\n\t\t\t\tNumSTS: uint8(data[offset+1] >> 1 & 0x7),\n\t\t\t\tVHTMCS: uint8(data[offset+1] >> 4 & 0xF),\n\t\t\t\tBW:     uint8(data[offset+2] & 0x3),\n\t\t\t\tSNR:    int8((-(data[offset+2] >> 2 & 0x20))+data[offset+2]>>2&0x1F) + 22,\n\t\t\t}\n\n\t\t\tif vht.UnsolicitedMFB {\n\t\t\t\tif !vht.MFB.NoFeedBackPresent() {\n\t\t\t\t\tvht.CompressedMSI = createU8(data[offset] >> 3 & 0x3)\n\t\t\t\t\tvht.STBCIndication = data[offset]&0x20 != 0\n\t\t\t\t\tvht.CodingType = (*Dot11CodingType)(createU8(data[offset+3] >> 3 & 0x1))\n\t\t\t\t\tvht.FbTXBeamformed = data[offset+3]&0x10 != 0\n\t\t\t\t\tvht.GID = createU8(\n\t\t\t\t\t\tdata[offset]>>6 +\n\t\t\t\t\t\t\t(data[offset+1] & 0x1 << 2) +\n\t\t\t\t\t\t\tdata[offset+3]&0x7<<3)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif vht.MRQ {\n\t\t\t\t\tvht.MSI = createU8((data[offset] >> 3) & 0x07)\n\t\t\t\t}\n\t\t\t\tvht.MFSI = createU8(data[offset]>>6 + (data[offset+1] & 0x1 << 2))\n\t\t\t}\n\n\t\t} else { // HT Variant\n\t\t\tht := &Dot11HTControlHT{}\n\t\t\thtc.HT = ht\n\n\t\t\tlac := &Dot11LinkAdapationControl{}\n\t\t\tht.LinkAdapationControl = lac\n\t\t\tlac.TRQ = data[offset]&0x2 != 0\n\t\t\tlac.MFSI = data[offset]>>6&0x3 + data[offset+1]&0x1<<3\n\t\t\tif data[offset]&0x3C == 0x38 { // ASEL\n\t\t\t\tlac.ASEL = &Dot11ASEL{\n\t\t\t\t\tCommand: data[offset+1] >> 1 & 0x7,\n\t\t\t\t\tData:    data[offset+1] >> 4 & 0xF,\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlac.MRQ = data[offset]&0x4 != 0\n\t\t\t\tif lac.MRQ {\n\t\t\t\t\tlac.MSI = data[offset] >> 3 & 0x7\n\t\t\t\t}\n\t\t\t\tlac.MFB = createU8(data[offset+1] >> 1)\n\t\t\t}\n\t\t\tht.CalibrationPosition = data[offset+2] & 0x3\n\t\t\tht.CalibrationSequence = data[offset+2] >> 2 & 0x3\n\t\t\tht.CSISteering = data[offset+2] >> 6 & 0x3\n\t\t\tht.NDPAnnouncement = data[offset+3]&0x1 != 0\n\t\t\tif mainType != Dot11TypeMgmt {\n\t\t\t\tht.DEI = data[offset+3]&0x20 != 0\n\t\t\t}\n\t\t}\n\n\t\toffset += 4\n\t}\n\n\tif len(data) < offset+4 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Dot11 length %v too short, %v required\", len(data), offset+4)\n\t}\n\n\tm.BaseLayer = BaseLayer{\n\t\tContents: data[0:offset],\n\t\tPayload:  data[offset : len(data)-4],\n\t}\n\n\tif mainType == Dot11TypeData {\n\t\td := dataDecodeMap[m.Type]\n\t\tif d == nil {\n\t\t\treturn fmt.Errorf(\"unsupported type: %v\", m.Type)\n\t\t}\n\t\tl := d()\n\t\terr := l.DecodeFromBytes(m.BaseLayer.Payload, df)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tm.DataLayer = l.(gopacket.Layer)\n\t}\n\n\tm.Checksum = binary.LittleEndian.Uint32(data[len(data)-4 : len(data)])\n\treturn nil\n}\n\nfunc (m *Dot11) ChecksumValid() bool {\n\t// only for CTRL and MGMT frames\n\th := crc32.NewIEEE()\n\th.Write(m.Contents)\n\th.Write(m.Payload)\n\treturn m.Checksum == h.Sum32()\n}\n\nfunc (m Dot11) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbuf, err := b.PrependBytes(24)\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbuf[0] = (uint8(m.Type) << 2) | m.Proto\n\tbuf[1] = uint8(m.Flags)\n\n\tbinary.LittleEndian.PutUint16(buf[2:4], m.DurationID)\n\n\tcopy(buf[4:10], m.Address1)\n\n\toffset := 10\n\n\tswitch m.Type.MainType() {\n\tcase Dot11TypeCtrl:\n\t\tswitch m.Type {\n\t\tcase Dot11TypeCtrlRTS, Dot11TypeCtrlPowersavePoll, Dot11TypeCtrlCFEnd, Dot11TypeCtrlCFEndAck:\n\t\t\tcopy(buf[offset:offset+6], m.Address2)\n\t\t\toffset += 6\n\t\t}\n\tcase Dot11TypeMgmt, Dot11TypeData:\n\t\tcopy(buf[offset:offset+6], m.Address2)\n\t\toffset += 6\n\t\tcopy(buf[offset:offset+6], m.Address3)\n\t\toffset += 6\n\n\t\tbinary.LittleEndian.PutUint16(buf[offset:offset+2], (m.SequenceNumber<<4)|m.FragmentNumber)\n\t\toffset += 2\n\t}\n\n\tif m.Type.MainType() == Dot11TypeData && m.Flags.FromDS() && m.Flags.ToDS() {\n\t\tcopy(buf[offset:offset+6], m.Address4)\n\t\toffset += 6\n\t}\n\n\treturn nil\n}\n\n// Dot11Mgmt is a base for all IEEE 802.11 management layers.\ntype Dot11Mgmt struct {\n\tBaseLayer\n}\n\nfunc (m *Dot11Mgmt) NextLayerType() gopacket.LayerType { return gopacket.LayerTypePayload }\nfunc (m *Dot11Mgmt) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tm.Contents = data\n\treturn nil\n}\n\n// Dot11Ctrl is a base for all IEEE 802.11 control layers.\ntype Dot11Ctrl struct {\n\tBaseLayer\n}\n\nfunc (m *Dot11Ctrl) NextLayerType() gopacket.LayerType { return gopacket.LayerTypePayload }\n\nfunc (m *Dot11Ctrl) LayerType() gopacket.LayerType  { return LayerTypeDot11Ctrl }\nfunc (m *Dot11Ctrl) CanDecode() gopacket.LayerClass { return LayerTypeDot11Ctrl }\nfunc (m *Dot11Ctrl) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tm.Contents = data\n\treturn nil\n}\n\nfunc decodeDot11Ctrl(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11Ctrl{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\n// Dot11WEP contains WEP encrpted IEEE 802.11 data.\ntype Dot11WEP struct {\n\tBaseLayer\n}\n\nfunc (m *Dot11WEP) NextLayerType() gopacket.LayerType { return gopacket.LayerTypePayload }\n\nfunc (m *Dot11WEP) LayerType() gopacket.LayerType  { return LayerTypeDot11WEP }\nfunc (m *Dot11WEP) CanDecode() gopacket.LayerClass { return LayerTypeDot11WEP }\nfunc (m *Dot11WEP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tm.Contents = data\n\treturn nil\n}\n\nfunc decodeDot11WEP(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11WEP{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\n// Dot11Data is a base for all IEEE 802.11 data layers.\ntype Dot11Data struct {\n\tBaseLayer\n}\n\nfunc (m *Dot11Data) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeLLC\n}\n\nfunc (m *Dot11Data) LayerType() gopacket.LayerType  { return LayerTypeDot11Data }\nfunc (m *Dot11Data) CanDecode() gopacket.LayerClass { return LayerTypeDot11Data }\nfunc (m *Dot11Data) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tm.Payload = data\n\treturn nil\n}\n\nfunc decodeDot11Data(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11Data{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\ntype Dot11DataCFAck struct {\n\tDot11Data\n}\n\nfunc decodeDot11DataCFAck(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataCFAck{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataCFAck) LayerType() gopacket.LayerType  { return LayerTypeDot11DataCFAck }\nfunc (m *Dot11DataCFAck) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFAck }\nfunc (m *Dot11DataCFAck) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Data.DecodeFromBytes(data, df)\n}\n\ntype Dot11DataCFPoll struct {\n\tDot11Data\n}\n\nfunc decodeDot11DataCFPoll(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataCFPoll{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataCFPoll) LayerType() gopacket.LayerType  { return LayerTypeDot11DataCFPoll }\nfunc (m *Dot11DataCFPoll) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFPoll }\nfunc (m *Dot11DataCFPoll) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Data.DecodeFromBytes(data, df)\n}\n\ntype Dot11DataCFAckPoll struct {\n\tDot11Data\n}\n\nfunc decodeDot11DataCFAckPoll(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataCFAckPoll{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataCFAckPoll) LayerType() gopacket.LayerType  { return LayerTypeDot11DataCFAckPoll }\nfunc (m *Dot11DataCFAckPoll) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFAckPoll }\nfunc (m *Dot11DataCFAckPoll) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Data.DecodeFromBytes(data, df)\n}\n\ntype Dot11DataNull struct {\n\tDot11Data\n}\n\nfunc decodeDot11DataNull(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataNull{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataNull) LayerType() gopacket.LayerType  { return LayerTypeDot11DataNull }\nfunc (m *Dot11DataNull) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataNull }\nfunc (m *Dot11DataNull) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Data.DecodeFromBytes(data, df)\n}\n\ntype Dot11DataCFAckNoData struct {\n\tDot11Data\n}\n\nfunc decodeDot11DataCFAckNoData(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataCFAckNoData{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataCFAckNoData) LayerType() gopacket.LayerType  { return LayerTypeDot11DataCFAckNoData }\nfunc (m *Dot11DataCFAckNoData) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFAckNoData }\nfunc (m *Dot11DataCFAckNoData) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Data.DecodeFromBytes(data, df)\n}\n\ntype Dot11DataCFPollNoData struct {\n\tDot11Data\n}\n\nfunc decodeDot11DataCFPollNoData(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataCFPollNoData{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataCFPollNoData) LayerType() gopacket.LayerType { return LayerTypeDot11DataCFPollNoData }\nfunc (m *Dot11DataCFPollNoData) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11DataCFPollNoData\n}\nfunc (m *Dot11DataCFPollNoData) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Data.DecodeFromBytes(data, df)\n}\n\ntype Dot11DataCFAckPollNoData struct {\n\tDot11Data\n}\n\nfunc decodeDot11DataCFAckPollNoData(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataCFAckPollNoData{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataCFAckPollNoData) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11DataCFAckPollNoData\n}\nfunc (m *Dot11DataCFAckPollNoData) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11DataCFAckPollNoData\n}\nfunc (m *Dot11DataCFAckPollNoData) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Data.DecodeFromBytes(data, df)\n}\n\ntype Dot11DataQOS struct {\n\tDot11Ctrl\n}\n\nfunc (m *Dot11DataQOS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tm.BaseLayer = BaseLayer{Payload: data}\n\treturn nil\n}\n\ntype Dot11DataQOSData struct {\n\tDot11DataQOS\n}\n\nfunc decodeDot11DataQOSData(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataQOSData{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataQOSData) LayerType() gopacket.LayerType  { return LayerTypeDot11DataQOSData }\nfunc (m *Dot11DataQOSData) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataQOSData }\n\nfunc (m *Dot11DataQOSData) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeDot11Data\n}\n\ntype Dot11DataQOSDataCFAck struct {\n\tDot11DataQOS\n}\n\nfunc decodeDot11DataQOSDataCFAck(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataQOSDataCFAck{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataQOSDataCFAck) LayerType() gopacket.LayerType { return LayerTypeDot11DataQOSDataCFAck }\nfunc (m *Dot11DataQOSDataCFAck) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11DataQOSDataCFAck\n}\nfunc (m *Dot11DataQOSDataCFAck) NextLayerType() gopacket.LayerType { return LayerTypeDot11DataCFAck }\n\ntype Dot11DataQOSDataCFPoll struct {\n\tDot11DataQOS\n}\n\nfunc decodeDot11DataQOSDataCFPoll(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataQOSDataCFPoll{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataQOSDataCFPoll) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11DataQOSDataCFPoll\n}\nfunc (m *Dot11DataQOSDataCFPoll) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11DataQOSDataCFPoll\n}\nfunc (m *Dot11DataQOSDataCFPoll) NextLayerType() gopacket.LayerType { return LayerTypeDot11DataCFPoll }\n\ntype Dot11DataQOSDataCFAckPoll struct {\n\tDot11DataQOS\n}\n\nfunc decodeDot11DataQOSDataCFAckPoll(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataQOSDataCFAckPoll{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataQOSDataCFAckPoll) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11DataQOSDataCFAckPoll\n}\nfunc (m *Dot11DataQOSDataCFAckPoll) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11DataQOSDataCFAckPoll\n}\nfunc (m *Dot11DataQOSDataCFAckPoll) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeDot11DataCFAckPoll\n}\n\ntype Dot11DataQOSNull struct {\n\tDot11DataQOS\n}\n\nfunc decodeDot11DataQOSNull(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataQOSNull{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataQOSNull) LayerType() gopacket.LayerType     { return LayerTypeDot11DataQOSNull }\nfunc (m *Dot11DataQOSNull) CanDecode() gopacket.LayerClass    { return LayerTypeDot11DataQOSNull }\nfunc (m *Dot11DataQOSNull) NextLayerType() gopacket.LayerType { return LayerTypeDot11DataNull }\n\ntype Dot11DataQOSCFPollNoData struct {\n\tDot11DataQOS\n}\n\nfunc decodeDot11DataQOSCFPollNoData(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataQOSCFPollNoData{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataQOSCFPollNoData) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11DataQOSCFPollNoData\n}\nfunc (m *Dot11DataQOSCFPollNoData) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11DataQOSCFPollNoData\n}\nfunc (m *Dot11DataQOSCFPollNoData) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeDot11DataCFPollNoData\n}\n\ntype Dot11DataQOSCFAckPollNoData struct {\n\tDot11DataQOS\n}\n\nfunc decodeDot11DataQOSCFAckPollNoData(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11DataQOSCFAckPollNoData{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11DataQOSCFAckPollNoData) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11DataQOSCFAckPollNoData\n}\nfunc (m *Dot11DataQOSCFAckPollNoData) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11DataQOSCFAckPollNoData\n}\nfunc (m *Dot11DataQOSCFAckPollNoData) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeDot11DataCFAckPollNoData\n}\n\ntype Dot11InformationElement struct {\n\tBaseLayer\n\tID     Dot11InformationElementID\n\tLength uint8\n\tOUI    []byte\n\tInfo   []byte\n}\n\nfunc (m *Dot11InformationElement) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11InformationElement\n}\nfunc (m *Dot11InformationElement) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11InformationElement\n}\n\nfunc (m *Dot11InformationElement) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeDot11InformationElement\n}\n\nfunc (m *Dot11InformationElement) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 2 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Dot11InformationElement length %v too short, %v required\", len(data), 2)\n\t}\n\tm.ID = Dot11InformationElementID(data[0])\n\tm.Length = data[1]\n\toffset := int(2)\n\n\tif len(data) < offset+int(m.Length) {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Dot11InformationElement length %v too short, %v required\", len(data), offset+int(m.Length))\n\t}\n\tif len(data) < offset+4 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"vendor extension size < %d\", offset+int(m.Length))\n\t}\n\tif m.ID == 221 {\n\t\t// Vendor extension\n\t\tm.OUI = data[offset : offset+4]\n\t\tm.Info = data[offset+4 : offset+int(m.Length)]\n\t} else {\n\t\tm.Info = data[offset : offset+int(m.Length)]\n\t}\n\n\toffset += int(m.Length)\n\n\tm.BaseLayer = BaseLayer{Contents: data[:offset], Payload: data[offset:]}\n\treturn nil\n}\n\nfunc (d *Dot11InformationElement) String() string {\n\tif d.ID == 0 {\n\t\treturn fmt.Sprintf(\"802.11 Information Element (ID: %v, Length: %v, SSID: %v)\", d.ID, d.Length, string(d.Info))\n\t} else if d.ID == 1 {\n\t\trates := \"\"\n\t\tfor i := 0; i < len(d.Info); i++ {\n\t\t\tif d.Info[i]&0x80 == 0 {\n\t\t\t\trates += fmt.Sprintf(\"%.1f \", float32(d.Info[i])*0.5)\n\t\t\t} else {\n\t\t\t\trates += fmt.Sprintf(\"%.1f* \", float32(d.Info[i]&0x7F)*0.5)\n\t\t\t}\n\t\t}\n\t\treturn fmt.Sprintf(\"802.11 Information Element (ID: %v, Length: %v, Rates: %s Mbit)\", d.ID, d.Length, rates)\n\t} else if d.ID == 221 {\n\t\treturn fmt.Sprintf(\"802.11 Information Element (ID: %v, Length: %v, OUI: %X, Info: %X)\", d.ID, d.Length, d.OUI, d.Info)\n\t} else {\n\t\treturn fmt.Sprintf(\"802.11 Information Element (ID: %v, Length: %v, Info: %X)\", d.ID, d.Length, d.Info)\n\t}\n}\n\nfunc (m Dot11InformationElement) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tlength := len(m.Info) + len(m.OUI)\n\tif buf, err := b.PrependBytes(2 + length); err != nil {\n\t\treturn err\n\t} else {\n\t\tbuf[0] = uint8(m.ID)\n\t\tbuf[1] = uint8(length)\n\t\tcopy(buf[2:], m.OUI)\n\t\tcopy(buf[2+len(m.OUI):], m.Info)\n\t}\n\treturn nil\n}\n\nfunc decodeDot11InformationElement(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11InformationElement{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\ntype Dot11CtrlCTS struct {\n\tDot11Ctrl\n}\n\nfunc decodeDot11CtrlCTS(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11CtrlCTS{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11CtrlCTS) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11CtrlCTS\n}\nfunc (m *Dot11CtrlCTS) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11CtrlCTS\n}\nfunc (m *Dot11CtrlCTS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Ctrl.DecodeFromBytes(data, df)\n}\n\ntype Dot11CtrlRTS struct {\n\tDot11Ctrl\n}\n\nfunc decodeDot11CtrlRTS(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11CtrlRTS{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11CtrlRTS) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11CtrlRTS\n}\nfunc (m *Dot11CtrlRTS) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11CtrlRTS\n}\nfunc (m *Dot11CtrlRTS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Ctrl.DecodeFromBytes(data, df)\n}\n\ntype Dot11CtrlBlockAckReq struct {\n\tDot11Ctrl\n}\n\nfunc decodeDot11CtrlBlockAckReq(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11CtrlBlockAckReq{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11CtrlBlockAckReq) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11CtrlBlockAckReq\n}\nfunc (m *Dot11CtrlBlockAckReq) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11CtrlBlockAckReq\n}\nfunc (m *Dot11CtrlBlockAckReq) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Ctrl.DecodeFromBytes(data, df)\n}\n\ntype Dot11CtrlBlockAck struct {\n\tDot11Ctrl\n}\n\nfunc decodeDot11CtrlBlockAck(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11CtrlBlockAck{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11CtrlBlockAck) LayerType() gopacket.LayerType  { return LayerTypeDot11CtrlBlockAck }\nfunc (m *Dot11CtrlBlockAck) CanDecode() gopacket.LayerClass { return LayerTypeDot11CtrlBlockAck }\nfunc (m *Dot11CtrlBlockAck) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Ctrl.DecodeFromBytes(data, df)\n}\n\ntype Dot11CtrlPowersavePoll struct {\n\tDot11Ctrl\n}\n\nfunc decodeDot11CtrlPowersavePoll(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11CtrlPowersavePoll{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11CtrlPowersavePoll) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11CtrlPowersavePoll\n}\nfunc (m *Dot11CtrlPowersavePoll) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11CtrlPowersavePoll\n}\nfunc (m *Dot11CtrlPowersavePoll) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Ctrl.DecodeFromBytes(data, df)\n}\n\ntype Dot11CtrlAck struct {\n\tDot11Ctrl\n}\n\nfunc decodeDot11CtrlAck(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11CtrlAck{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11CtrlAck) LayerType() gopacket.LayerType  { return LayerTypeDot11CtrlAck }\nfunc (m *Dot11CtrlAck) CanDecode() gopacket.LayerClass { return LayerTypeDot11CtrlAck }\nfunc (m *Dot11CtrlAck) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Ctrl.DecodeFromBytes(data, df)\n}\n\ntype Dot11CtrlCFEnd struct {\n\tDot11Ctrl\n}\n\nfunc decodeDot11CtrlCFEnd(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11CtrlCFEnd{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11CtrlCFEnd) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11CtrlCFEnd\n}\nfunc (m *Dot11CtrlCFEnd) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11CtrlCFEnd\n}\nfunc (m *Dot11CtrlCFEnd) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Ctrl.DecodeFromBytes(data, df)\n}\n\ntype Dot11CtrlCFEndAck struct {\n\tDot11Ctrl\n}\n\nfunc decodeDot11CtrlCFEndAck(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11CtrlCFEndAck{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11CtrlCFEndAck) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11CtrlCFEndAck\n}\nfunc (m *Dot11CtrlCFEndAck) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11CtrlCFEndAck\n}\nfunc (m *Dot11CtrlCFEndAck) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\treturn m.Dot11Ctrl.DecodeFromBytes(data, df)\n}\n\ntype Dot11MgmtAssociationReq struct {\n\tDot11Mgmt\n\tCapabilityInfo uint16\n\tListenInterval uint16\n}\n\nfunc decodeDot11MgmtAssociationReq(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtAssociationReq{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtAssociationReq) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11MgmtAssociationReq\n}\nfunc (m *Dot11MgmtAssociationReq) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11MgmtAssociationReq\n}\nfunc (m *Dot11MgmtAssociationReq) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeDot11InformationElement\n}\nfunc (m *Dot11MgmtAssociationReq) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 4 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Dot11MgmtAssociationReq length %v too short, %v required\", len(data), 4)\n\t}\n\tm.CapabilityInfo = binary.LittleEndian.Uint16(data[0:2])\n\tm.ListenInterval = binary.LittleEndian.Uint16(data[2:4])\n\tm.Payload = data[4:]\n\treturn m.Dot11Mgmt.DecodeFromBytes(data, df)\n}\n\nfunc (m Dot11MgmtAssociationReq) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbuf, err := b.PrependBytes(4)\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbinary.LittleEndian.PutUint16(buf[0:2], m.CapabilityInfo)\n\tbinary.LittleEndian.PutUint16(buf[2:4], m.ListenInterval)\n\n\treturn nil\n}\n\ntype Dot11MgmtAssociationResp struct {\n\tDot11Mgmt\n\tCapabilityInfo uint16\n\tStatus         Dot11Status\n\tAID            uint16\n}\n\nfunc decodeDot11MgmtAssociationResp(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtAssociationResp{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtAssociationResp) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11MgmtAssociationResp\n}\nfunc (m *Dot11MgmtAssociationResp) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11MgmtAssociationResp\n}\nfunc (m *Dot11MgmtAssociationResp) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeDot11InformationElement\n}\nfunc (m *Dot11MgmtAssociationResp) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 6 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Dot11MgmtAssociationResp length %v too short, %v required\", len(data), 6)\n\t}\n\tm.CapabilityInfo = binary.LittleEndian.Uint16(data[0:2])\n\tm.Status = Dot11Status(binary.LittleEndian.Uint16(data[2:4]))\n\tm.AID = binary.LittleEndian.Uint16(data[4:6])\n\tm.Payload = data[6:]\n\treturn m.Dot11Mgmt.DecodeFromBytes(data, df)\n}\n\nfunc (m Dot11MgmtAssociationResp) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbuf, err := b.PrependBytes(6)\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbinary.LittleEndian.PutUint16(buf[0:2], m.CapabilityInfo)\n\tbinary.LittleEndian.PutUint16(buf[2:4], uint16(m.Status))\n\tbinary.LittleEndian.PutUint16(buf[4:6], m.AID)\n\n\treturn nil\n}\n\ntype Dot11MgmtReassociationReq struct {\n\tDot11Mgmt\n\tCapabilityInfo   uint16\n\tListenInterval   uint16\n\tCurrentApAddress net.HardwareAddr\n}\n\nfunc decodeDot11MgmtReassociationReq(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtReassociationReq{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtReassociationReq) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11MgmtReassociationReq\n}\nfunc (m *Dot11MgmtReassociationReq) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11MgmtReassociationReq\n}\nfunc (m *Dot11MgmtReassociationReq) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeDot11InformationElement\n}\nfunc (m *Dot11MgmtReassociationReq) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 10 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Dot11MgmtReassociationReq length %v too short, %v required\", len(data), 10)\n\t}\n\tm.CapabilityInfo = binary.LittleEndian.Uint16(data[0:2])\n\tm.ListenInterval = binary.LittleEndian.Uint16(data[2:4])\n\tm.CurrentApAddress = net.HardwareAddr(data[4:10])\n\tm.Payload = data[10:]\n\treturn m.Dot11Mgmt.DecodeFromBytes(data, df)\n}\n\nfunc (m Dot11MgmtReassociationReq) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbuf, err := b.PrependBytes(10)\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbinary.LittleEndian.PutUint16(buf[0:2], m.CapabilityInfo)\n\tbinary.LittleEndian.PutUint16(buf[2:4], m.ListenInterval)\n\n\tcopy(buf[4:10], m.CurrentApAddress)\n\n\treturn nil\n}\n\ntype Dot11MgmtReassociationResp struct {\n\tDot11Mgmt\n}\n\nfunc decodeDot11MgmtReassociationResp(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtReassociationResp{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtReassociationResp) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11MgmtReassociationResp\n}\nfunc (m *Dot11MgmtReassociationResp) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11MgmtReassociationResp\n}\nfunc (m *Dot11MgmtReassociationResp) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeDot11InformationElement\n}\n\ntype Dot11MgmtProbeReq struct {\n\tDot11Mgmt\n}\n\nfunc decodeDot11MgmtProbeReq(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtProbeReq{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtProbeReq) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtProbeReq }\nfunc (m *Dot11MgmtProbeReq) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtProbeReq }\nfunc (m *Dot11MgmtProbeReq) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeDot11InformationElement\n}\n\ntype Dot11MgmtProbeResp struct {\n\tDot11Mgmt\n\tTimestamp uint64\n\tInterval  uint16\n\tFlags     uint16\n}\n\nfunc decodeDot11MgmtProbeResp(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtProbeResp{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtProbeResp) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtProbeResp }\nfunc (m *Dot11MgmtProbeResp) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtProbeResp }\nfunc (m *Dot11MgmtProbeResp) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 12 {\n\t\tdf.SetTruncated()\n\n\t\treturn fmt.Errorf(\"Dot11MgmtProbeResp length %v too short, %v required\", len(data), 12)\n\t}\n\n\tm.Timestamp = binary.LittleEndian.Uint64(data[0:8])\n\tm.Interval = binary.LittleEndian.Uint16(data[8:10])\n\tm.Flags = binary.LittleEndian.Uint16(data[10:12])\n\tm.Payload = data[12:]\n\n\treturn m.Dot11Mgmt.DecodeFromBytes(data, df)\n}\n\nfunc (m *Dot11MgmtProbeResp) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeDot11InformationElement\n}\n\nfunc (m Dot11MgmtProbeResp) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbuf, err := b.PrependBytes(12)\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbinary.LittleEndian.PutUint64(buf[0:8], m.Timestamp)\n\tbinary.LittleEndian.PutUint16(buf[8:10], m.Interval)\n\tbinary.LittleEndian.PutUint16(buf[10:12], m.Flags)\n\n\treturn nil\n}\n\ntype Dot11MgmtMeasurementPilot struct {\n\tDot11Mgmt\n}\n\nfunc decodeDot11MgmtMeasurementPilot(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtMeasurementPilot{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtMeasurementPilot) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11MgmtMeasurementPilot\n}\nfunc (m *Dot11MgmtMeasurementPilot) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11MgmtMeasurementPilot\n}\n\ntype Dot11MgmtBeacon struct {\n\tDot11Mgmt\n\tTimestamp uint64\n\tInterval  uint16\n\tFlags     uint16\n}\n\nfunc decodeDot11MgmtBeacon(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtBeacon{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtBeacon) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtBeacon }\nfunc (m *Dot11MgmtBeacon) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtBeacon }\nfunc (m *Dot11MgmtBeacon) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 12 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Dot11MgmtBeacon length %v too short, %v required\", len(data), 12)\n\t}\n\tm.Timestamp = binary.LittleEndian.Uint64(data[0:8])\n\tm.Interval = binary.LittleEndian.Uint16(data[8:10])\n\tm.Flags = binary.LittleEndian.Uint16(data[10:12])\n\tm.Payload = data[12:]\n\treturn m.Dot11Mgmt.DecodeFromBytes(data, df)\n}\n\nfunc (m *Dot11MgmtBeacon) NextLayerType() gopacket.LayerType { return LayerTypeDot11InformationElement }\n\nfunc (m Dot11MgmtBeacon) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbuf, err := b.PrependBytes(12)\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbinary.LittleEndian.PutUint64(buf[0:8], m.Timestamp)\n\tbinary.LittleEndian.PutUint16(buf[8:10], m.Interval)\n\tbinary.LittleEndian.PutUint16(buf[10:12], m.Flags)\n\n\treturn nil\n}\n\ntype Dot11MgmtATIM struct {\n\tDot11Mgmt\n}\n\nfunc decodeDot11MgmtATIM(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtATIM{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtATIM) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtATIM }\nfunc (m *Dot11MgmtATIM) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtATIM }\n\ntype Dot11MgmtDisassociation struct {\n\tDot11Mgmt\n\tReason Dot11Reason\n}\n\nfunc decodeDot11MgmtDisassociation(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtDisassociation{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtDisassociation) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11MgmtDisassociation\n}\nfunc (m *Dot11MgmtDisassociation) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11MgmtDisassociation\n}\nfunc (m *Dot11MgmtDisassociation) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 2 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Dot11MgmtDisassociation length %v too short, %v required\", len(data), 2)\n\t}\n\tm.Reason = Dot11Reason(binary.LittleEndian.Uint16(data[0:2]))\n\treturn m.Dot11Mgmt.DecodeFromBytes(data, df)\n}\n\nfunc (m Dot11MgmtDisassociation) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbuf, err := b.PrependBytes(2)\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbinary.LittleEndian.PutUint16(buf[0:2], uint16(m.Reason))\n\n\treturn nil\n}\n\ntype Dot11MgmtAuthentication struct {\n\tDot11Mgmt\n\tAlgorithm Dot11Algorithm\n\tSequence  uint16\n\tStatus    Dot11Status\n}\n\nfunc decodeDot11MgmtAuthentication(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtAuthentication{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtAuthentication) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11MgmtAuthentication\n}\nfunc (m *Dot11MgmtAuthentication) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11MgmtAuthentication\n}\nfunc (m *Dot11MgmtAuthentication) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeDot11InformationElement\n}\nfunc (m *Dot11MgmtAuthentication) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 6 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Dot11MgmtAuthentication length %v too short, %v required\", len(data), 6)\n\t}\n\tm.Algorithm = Dot11Algorithm(binary.LittleEndian.Uint16(data[0:2]))\n\tm.Sequence = binary.LittleEndian.Uint16(data[2:4])\n\tm.Status = Dot11Status(binary.LittleEndian.Uint16(data[4:6]))\n\tm.Payload = data[6:]\n\treturn m.Dot11Mgmt.DecodeFromBytes(data, df)\n}\n\nfunc (m Dot11MgmtAuthentication) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbuf, err := b.PrependBytes(6)\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbinary.LittleEndian.PutUint16(buf[0:2], uint16(m.Algorithm))\n\tbinary.LittleEndian.PutUint16(buf[2:4], m.Sequence)\n\tbinary.LittleEndian.PutUint16(buf[4:6], uint16(m.Status))\n\n\treturn nil\n}\n\ntype Dot11MgmtDeauthentication struct {\n\tDot11Mgmt\n\tReason Dot11Reason\n}\n\nfunc decodeDot11MgmtDeauthentication(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtDeauthentication{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtDeauthentication) LayerType() gopacket.LayerType {\n\treturn LayerTypeDot11MgmtDeauthentication\n}\nfunc (m *Dot11MgmtDeauthentication) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot11MgmtDeauthentication\n}\nfunc (m *Dot11MgmtDeauthentication) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 2 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Dot11MgmtDeauthentication length %v too short, %v required\", len(data), 2)\n\t}\n\tm.Reason = Dot11Reason(binary.LittleEndian.Uint16(data[0:2]))\n\treturn m.Dot11Mgmt.DecodeFromBytes(data, df)\n}\n\nfunc (m Dot11MgmtDeauthentication) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbuf, err := b.PrependBytes(2)\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbinary.LittleEndian.PutUint16(buf[0:2], uint16(m.Reason))\n\n\treturn nil\n}\n\ntype Dot11MgmtAction struct {\n\tDot11Mgmt\n}\n\nfunc decodeDot11MgmtAction(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtAction{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtAction) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtAction }\nfunc (m *Dot11MgmtAction) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtAction }\n\ntype Dot11MgmtActionNoAck struct {\n\tDot11Mgmt\n}\n\nfunc decodeDot11MgmtActionNoAck(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtActionNoAck{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtActionNoAck) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtActionNoAck }\nfunc (m *Dot11MgmtActionNoAck) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtActionNoAck }\n\ntype Dot11MgmtArubaWLAN struct {\n\tDot11Mgmt\n}\n\nfunc decodeDot11MgmtArubaWLAN(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot11MgmtArubaWLAN{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *Dot11MgmtArubaWLAN) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtArubaWLAN }\nfunc (m *Dot11MgmtArubaWLAN) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtArubaWLAN }\n"
  },
  {
    "path": "layers/dot11_test.go",
    "content": "// Copyright 2014, Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"net\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// Generator: python layers/test_creator.py --layerType=LayerTypeRadioTap --linkType=LinkTypeIEEE80211Radio --name=Dot11%s ~/Downloads/mesh.pcap\n// http://wiki.wireshark.org/SampleCaptures#Sample_Captures\n\n// testPacketDot11CtrlCTS is the packet:\n//   09:28:41.830560 20604983us tsft short preamble 24.0 Mb/s 5240 MHz 11a -79dB signal -92dB noise antenna 1 Clear-To-Send RA:d8:a2:5e:97:61:c1\n//   \t0x0000:  0000 1900 6f08 0000 3768 3a01 0000 0000  ....o...7h:.....\n//   \t0x0010:  1230 7814 4001 b1a4 01c4 0094 00d8 a25e  .0x.@..........^\n//   \t0x0020:  9761 c136 5095 8e                        .a.6P..\n\nvar testPacketDot11CtrlCTS = []byte{\n\t0x00, 0x00, 0x19, 0x00, 0x6f, 0x08, 0x00, 0x00, 0x37, 0x68, 0x3a, 0x01, 0x00, 0x00, 0x00, 0x00,\n\t0x12, 0x30, 0x78, 0x14, 0x40, 0x01, 0xb1, 0xa4, 0x01, 0xc4, 0x00, 0x94, 0x00, 0xd8, 0xa2, 0x5e,\n\t0x97, 0x61, 0xc1, 0x36, 0x50, 0x95, 0x8e,\n}\n\nfunc TestPacketDot11CtrlCTS(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketDot11CtrlCTS, LinkTypeIEEE80211Radio, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)\n\n\tif got, ok := p.Layer(LayerTypeRadioTap).(*RadioTap); ok {\n\t\twant := &RadioTap{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: []uint8{0x0, 0x0, 0x19, 0x0, 0x6f, 0x8, 0x0, 0x0, 0x37, 0x68, 0x3a, 0x1, 0x0, 0x0, 0x0, 0x0, 0x12, 0x30, 0x78, 0x14, 0x40, 0x1, 0xb1, 0xa4, 0x1},\n\t\t\t\tPayload:  []uint8{0xc4, 0x0, 0x94, 0x0, 0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1, 0x36, 0x50, 0x95, 0x8e},\n\t\t\t},\n\t\t\tVersion:          0x0,\n\t\t\tLength:           0x19,\n\t\t\tPresent:          0x86f,\n\t\t\tTSFT:             0x13a6837,\n\t\t\tFlags:            0x12,\n\t\t\tRate:             0x30,\n\t\t\tChannelFrequency: 0x1478,\n\t\t\tChannelFlags:     0x140,\n\t\t\tFHSS:             0x0,\n\t\t\tDBMAntennaSignal: -79,\n\t\t\tDBMAntennaNoise:  -92,\n\t\t\tLockQuality:      0x0,\n\t\t\tTxAttenuation:    0x0,\n\t\t\tDBTxAttenuation:  0x0,\n\t\t\tDBMTxPower:       0,\n\t\t\tAntenna:          1,\n\t\t\tDBAntennaSignal:  0x0,\n\t\t\tDBAntennaNoise:   0x0,\n\t\t}\n\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"RadioTap packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t}\n\n\tif got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {\n\t\tif !got.ChecksumValid() {\n\t\t\tt.Errorf(\"Dot11 packet processing failed:\\nchecksum failed. got  :\\n%#v\\n\\n\", got)\n\t\t}\n\n\t\twant := &Dot11{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: []uint8{0xc4, 0x0, 0x94, 0x0, 0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1},\n\t\t\t\tPayload:  []uint8{},\n\t\t\t},\n\t\t\tType:       Dot11TypeCtrlCTS,\n\t\t\tProto:      0x0,\n\t\t\tFlags:      0x0,\n\t\t\tDurationID: 0x94,\n\t\t\tAddress1:   net.HardwareAddr{0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1}, // check\n\t\t\tAddress2:   net.HardwareAddr(nil),\n\t\t\tAddress3:   net.HardwareAddr(nil),\n\t\t\tAddress4:   net.HardwareAddr(nil),\n\t\t\tChecksum:   0x8e955036,\n\t\t}\n\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"Dot11 packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t}\n}\n\nfunc BenchmarkDecodePacketDot11CtrlCTS(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketDot11CtrlCTS, LinkTypeIEEE80211Radio, gopacket.NoCopy)\n\t}\n}\n\n// testPacketDot11MgmtBeacon is the packet:\n//   15:44:56.531833 6.0 Mb/s 2412 MHz 11g -81dB signal antenna 5 Beacon (Wi2) [6.0* 9.0 12.0* 18.0 24.0* 36.0 48.0 54.0 Mbit] ESS CH: 1\n//   \t0x0000:  0000 1200 2e48 0000 100c 6c09 c000 af05  .....H....l.....\n//   \t0x0010:  0000 8000 0000 ffff ffff ffff c08a de01  ................\n//   \t0x0020:  11b8 c08a de01 11b8 f097 80f1 30bc 1300  ............0...\n//   \t0x0030:  0000 6400 2104 0003 5769 3201 088c 1298  ..d.!...Wi2.....\n//   \t0x0040:  24b0 4860 6c03 0101 0504 0001 0000 2a01  $.H`l.........*.\n//   \t0x0050:  00dd 1800 50f2 0201 0181 0007 a400 0023  ....P..........#\n//   \t0x0060:  a400 0042 435e 0062 322f 00dd 1e00 904c  ...BC^.b2/.....L\n//   \t0x0070:  338c 011b ffff 0000 0000 0000 0000 0000  3...............\n//   \t0x0080:  1000 0000 0000 0000 0000 002d 1a8c 011b  ...........-....\n//   \t0x0090:  ffff 0000 0000 0000 0000 0000 1000 0000  ................\n//   \t0x00a0:  0000 0000 0000 00dd 1a00 904c 3401 0000  ...........L4...\n//   \t0x00b0:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//   \t0x00c0:  0000 003d 1601 0000 0000 0000 0000 0000  ...=............\n//   \t0x00d0:  0000 0000 0000 0000 0000 007f 0400 0000  ................\n//   \t0x00e0:  00dd 0800 1392 0100 0185 0094 0b90 15    ...............\nvar testPacketDot11MgmtBeacon = []byte{\n\t0x00, 0x00, 0x12, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x0c, 0x6c, 0x09, 0xc0, 0x00, 0xaf, 0x05,\n\t0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x8a, 0xde, 0x01,\n\t0x11, 0xb8, 0xc0, 0x8a, 0xde, 0x01, 0x11, 0xb8, 0xf0, 0x97, 0x80, 0xf1, 0x30, 0xbc, 0x13, 0x00,\n\t0x00, 0x00, 0x64, 0x00, 0x21, 0x04, 0x00, 0x03, 0x57, 0x69, 0x32, 0x01, 0x08, 0x8c, 0x12, 0x98,\n\t0x24, 0xb0, 0x48, 0x60, 0x6c, 0x03, 0x01, 0x01, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x2a, 0x01,\n\t0x00, 0xdd, 0x18, 0x00, 0x50, 0xf2, 0x02, 0x01, 0x01, 0x81, 0x00, 0x07, 0xa4, 0x00, 0x00, 0x23,\n\t0xa4, 0x00, 0x00, 0x42, 0x43, 0x5e, 0x00, 0x62, 0x32, 0x2f, 0x00, 0xdd, 0x1e, 0x00, 0x90, 0x4c,\n\t0x33, 0x8c, 0x01, 0x1b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x1a, 0x8c, 0x01, 0x1b,\n\t0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0x1a, 0x00, 0x90, 0x4c, 0x34, 0x01, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x3d, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x04, 0x00, 0x00, 0x00,\n\t0x00, 0xdd, 0x08, 0x00, 0x13, 0x92, 0x01, 0x00, 0x01, 0x85, 0x00, 0x94, 0x0b, 0x90, 0x15,\n}\n\nfunc TestPacketDot11MgmtBeacon(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketDot11MgmtBeacon, LinkTypeIEEE80211Radio, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\texpectedLayers := []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11MgmtBeacon}\n\tfor i := 0; i < 12; i++ {\n\t\texpectedLayers = append(expectedLayers, LayerTypeDot11InformationElement)\n\t}\n\tcheckLayers(p, expectedLayers, t)\n\n\tif p.Layer(LayerTypeDot11).(*Dot11).SequenceNumber != 2431 {\n\t\tt.Error(\"dot11 invalid sequence number\")\n\t}\n\tif p.Layer(LayerTypeDot11).(*Dot11).FragmentNumber != 0 {\n\t\tt.Error(\"dot11 invalid fragment number\")\n\t}\n\tif _, ok := p.Layer(LayerTypeDot11MgmtBeacon).(*Dot11MgmtBeacon); !ok {\n\t\tt.Errorf(\"dot11 management beacon frame was expected\")\n\t}\n}\n\nfunc BenchmarkDecodePacketDot11MgmtBeacon(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketDot11MgmtBeacon, LinkTypeIEEE80211Radio, gopacket.NoCopy)\n\t}\n}\n\n// testPacketDot11DataQOSData is the packet:\n//   06:14:27.838634 638790765us tsft short preamble 54.0 Mb/s -51dB signal -96dB noise antenna 2 5180 MHz 11a CF +QoS ARP, Request who-has 140.180.51.68 tell 169.254.247.0, length 28\n//   \t0x0000:  0000 2000 6708 0400 6d2c 1326 0000 0000  ....g...m,.&....\n//   \t0x0010:  226c cda0 0200 0000 4001 0000 3c14 2411  \"l......@...<.$.\n//   \t0x0020:  8801 2c00 0603 7f07 a016 0019 e3d3 5352  ..,...........SR\n//   \t0x0030:  ffff ffff ffff 5064 0000 50aa aaaa 0300  ......Pd..P.....\n//   \t0x0040:  0000 0806 0001 0800 0604 0001 0019 e3d3  ................\n//   \t0x0050:  5352 a9fe f700 0000 0000 0000 8cb4 3344  SR............3D\nvar testPacketDot11DataQOSData = []byte{\n\t0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x6d, 0x2c, 0x13, 0x26, 0x00, 0x00, 0x00, 0x00,\n\t0x22, 0x6c, 0xcd, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11,\n\t0x88, 0x01, 0x2c, 0x00, 0x06, 0x03, 0x7f, 0x07, 0xa0, 0x16, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52,\n\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x64, 0x00, 0x00, 0x50, 0xaa, 0xaa, 0xaa, 0x03, 0x00,\n\t0x00, 0x00, 0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0x00, 0x19, 0xe3, 0xd3,\n\t0x53, 0x52, 0xa9, 0xfe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0xb4, 0x33, 0x44,\n}\n\nfunc TestPacketDot11DataQOSData(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketDot11DataQOSData, LinkTypeIEEE80211Radio, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11DataQOSData, LayerTypeDot11Data, LayerTypeLLC, LayerTypeSNAP, LayerTypeARP}, t)\n\n\tif got, ok := p.Layer(LayerTypeARP).(*ARP); ok {\n\t\twant := &ARP{BaseLayer: BaseLayer{\n\t\t\tContents: []uint8{0x0, 0x1, 0x8, 0x0, 0x6, 0x4, 0x0, 0x1, 0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xa9, 0xfe, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xb4, 0x33, 0x44},\n\t\t\tPayload:  []uint8{},\n\t\t},\n\t\t\tAddrType:          0x1,\n\t\t\tProtocol:          0x800,\n\t\t\tHwAddressSize:     0x6,\n\t\t\tProtAddressSize:   0x4,\n\t\t\tOperation:         0x1,\n\t\t\tSourceHwAddress:   []uint8{0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},\n\t\t\tSourceProtAddress: []uint8{0xa9, 0xfe, 0xf7, 0x0},\n\t\t\tDstHwAddress:      []uint8{0x0, 0x0, 0x0, 0x0, 0x0, 0x0},\n\t\t\tDstProtAddress:    []uint8{0x8c, 0xb4, 0x33, 0x44},\n\t\t}\n\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"ARP packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t}\n}\nfunc BenchmarkDecodePacketDot11DataQOSData(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketDot11DataQOSData, LinkTypeIEEE80211Radio, gopacket.NoCopy)\n\t}\n}\n\n// testPacketDot11MgmtAction is the packet:\n//   15:54:43.236460 1.0 Mb/s 2412 MHz 11b -67dB signal antenna 5 Action (8e:3a:e3:44:ac:c6): Spectrum Management Act#4\n//   \t0x0000:  0000 1200 2e48 0000 1002 6c09 a000 bd05  .....H....l.....\n//   \t0x0010:  0000 d000 0000 ffff ffff ffff 8e3a e344  .............:.D\n//   \t0x0020:  acc6 8e3a e344 acc6 001b 0004 2503 0001  ...:.D......%...\n//   \t0x0030:  0055 39f0 33                             .U9.3\nvar testPacketDot11MgmtAction = []byte{\n\t0x00, 0x00, 0x12, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x02, 0x6c, 0x09, 0xa0, 0x00, 0xbd, 0x05,\n\t0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x3a, 0xe3, 0x44,\n\t0xac, 0xc6, 0x8e, 0x3a, 0xe3, 0x44, 0xac, 0xc6, 0x00, 0x1b, 0x00, 0x04, 0x25, 0x03, 0x00, 0x01,\n\t0x00, 0x55, 0x39, 0xf0, 0x33,\n}\n\nfunc TestPacketDot11MgmtAction(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketDot11MgmtAction, LinkTypeIEEE80211Radio, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11MgmtAction}, t)\n\tif got, ok := p.Layer(LayerTypeDot11).(*Dot11); !ok {\n\t\tt.Errorf(\"dot11 frame was not parsed\")\n\t} else if !got.ChecksumValid() {\n\t\tt.Errorf(\"Dot11 packet processing failed: checksum failed\")\n\t}\n\tif got, ok := p.Layer(LayerTypeDot11MgmtAction).(*Dot11MgmtAction); !ok {\n\t\tt.Errorf(\"management action frame was not parsed\")\n\t} else if got.Contents[0] != 0 {\n\t\tt.Errorf(\"action category was not spectrum management\")\n\t}\n}\n\nfunc BenchmarkDecodePacketDot11MgmtAction(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketDot11MgmtAction, LinkTypeIEEE80211Radio, gopacket.NoCopy)\n\t}\n}\n\n// testPacketDot11CtrlAck is the packet:\n//   06:14:27.838669 638758038us tsft short preamble 24.0 Mb/s -39dB signal -96dB noise antenna 2 5180 MHz 11a Acknowledgment RA:00:19:e3:d3:53:52\n//   \t0x0000:  0000 2000 6708 0400 96ac 1226 0000 0000  ....g......&....\n//   \t0x0010:  2230 d9a0 0200 0000 4001 0000 3c14 2411  \"0......@...<.$.\n//   \t0x0020:  d400 0000 0019 e3d3 5352 46e9 7687       ........SRF.v.\nvar testPacketDot11CtrlAck = []byte{\n\t0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x96, 0xac, 0x12, 0x26, 0x00, 0x00, 0x00, 0x00,\n\t0x32, 0x30, 0xd9, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11,\n\t0xd4, 0x00, 0x00, 0x00, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x46, 0xe9, 0x76, 0x87,\n}\n\nfunc TestPacketDot11CtrlAck(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketDot11CtrlAck, LinkTypeIEEE80211Radio, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)\n\n\tif got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {\n\t\tif !got.ChecksumValid() {\n\t\t\tt.Errorf(\"Dot11 packet processing failed:\\nchecksum failed. got  :\\n%#v\\n\\n\", got)\n\t\t}\n\t}\n\n\tif got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {\n\t\tif !got.ChecksumValid() {\n\t\t\tt.Errorf(\"Dot11 packet processing failed:\\nchecksum failed. got  :\\n%#v\\n\\n\", got)\n\t\t}\n\t\twant := &Dot11{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: []uint8{0xd4, 0x0, 0x0, 0x0, 0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},\n\t\t\t\tPayload:  []uint8{},\n\t\t\t},\n\t\t\tType:       Dot11TypeCtrlAck,\n\t\t\tProto:      0x0,\n\t\t\tFlags:      0x0,\n\t\t\tDurationID: 0x0,\n\t\t\tAddress1:   net.HardwareAddr{0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},\n\t\t\tAddress2:   net.HardwareAddr(nil),\n\t\t\tAddress3:   net.HardwareAddr(nil),\n\t\t\tAddress4:   net.HardwareAddr(nil),\n\t\t\tChecksum:   0x8776e946,\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"Dot11 packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t}\n}\nfunc BenchmarkDecodePacketDot11CtrlAck(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketDot11CtrlAck, LinkTypeIEEE80211Radio, gopacket.NoCopy)\n\t}\n}\n\n// testPacketDot11DataARP is the packet:\n//   06:14:11.512316 622463798us tsft short preamble 6.0 Mb/s -39dB signal -96dB noise antenna 2 5180 MHz 11a ARP, Request who-has 67.8.14.54 tell 169.254.247.0, length 28\n//   \t0x0000:  0000 2000 6708 0400 360b 1a25 0000 0000  ....g...6..%....\n//   \t0x0010:  220c d9a0 0200 0000 4001 0000 3c14 2411  \".......@...<.$.\n//   \t0x0020:  0802 0000 ffff ffff ffff 0603 7f07 a016  ................\n//   \t0x0030:  0019 e3d3 5352 e07f aaaa 0300 0000 0806  ....SR..........\n//   \t0x0040:  0001 0800 0604 0001 0019 e3d3 5352 a9fe  ............SR..\n//   \t0x0050:  f700 0000 0000 0000 4308 0e36            ........C..6\nvar testPacketDot11DataARP = []byte{\n\t0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x36, 0x0b, 0x1a, 0x25, 0x00, 0x00, 0x00, 0x00,\n\t0x22, 0x0c, 0xd9, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11,\n\t0x08, 0x02, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0x03, 0x7f, 0x07, 0xa0, 0x16,\n\t0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xe0, 0x7f, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x06,\n\t0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xa9, 0xfe,\n\t0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x08, 0x0e, 0x36,\n}\n\nfunc TestPacketDot11DataARP(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketDot11DataARP, LinkTypeIEEE80211Radio, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11Data, LayerTypeLLC, LayerTypeSNAP, LayerTypeARP}, t)\n\n\tif got, ok := p.Layer(LayerTypeARP).(*ARP); ok {\n\t\twant := &ARP{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: []uint8{0x0, 0x1, 0x8, 0x0, 0x6, 0x4, 0x0, 0x1, 0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xa9, 0xfe, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x8, 0xe, 0x36},\n\t\t\t\tPayload:  []uint8{},\n\t\t\t},\n\t\t\tAddrType:          0x1,\n\t\t\tProtocol:          0x800,\n\t\t\tHwAddressSize:     0x6,\n\t\t\tProtAddressSize:   0x4,\n\t\t\tOperation:         0x1,\n\t\t\tSourceHwAddress:   []uint8{0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},\n\t\t\tSourceProtAddress: []uint8{0xa9, 0xfe, 0xf7, 0x0},\n\t\t\tDstHwAddress:      []uint8{0x0, 0x0, 0x0, 0x0, 0x0, 0x0},\n\t\t\tDstProtAddress:    []uint8{0x43, 0x8, 0xe, 0x36},\n\t\t}\n\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"ARP packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t}\n}\n\nfunc BenchmarkDecodePacketDot11DataARP(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketDot11DataARP, LinkTypeIEEE80211Radio, gopacket.NoCopy)\n\t}\n}\n\n// testPacketDot11DataIP is the packet:\n//   06:14:21.388622 632340487us tsft short preamble 6.0 Mb/s -40dB signal -96dB noise antenna 1 5180 MHz 11a IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:19:e3:d3:53:52, length 300\n//   \t0x0000:  0000 2000 6708 0400 07c0 b025 0000 0000  ....g......%....\n//   \t0x0010:  220c d8a0 0100 0000 4001 0000 3c14 2411  \".......@...<.$.\n//   \t0x0020:  0802 0000 ffff ffff ffff 0603 7f07 a016  ................\n//   \t0x0030:  0019 e3d3 5352 4095 aaaa 0300 0000 0800  ....SR@.........\n//   \t0x0040:  4500 0148 c514 0000 ff11 f590 0000 0000  E..H............\n//   \t0x0050:  ffff ffff 0044 0043 0134 2b39 0101 0600  .....D.C.4+9....\n//   \t0x0060:  131f 8c43 003c 0000 0000 0000 0000 0000  ...C.<..........\n//   \t0x0070:  0000 0000 0000 0000 0019 e3d3 5352 0000  ............SR..\n//   \t0x0080:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//   \t0x0090:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//   \t0x00a0:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//   \t0x00b0:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//   \t0x00c0:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//   \t0x00d0:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//   \t0x00e0:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//   \t0x00f0:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//   \t0x0100:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//   \t0x0110:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//   \t0x0120:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//   \t0x0130:  0000 0000 0000 0000 0000 0000 0000 0000  ................\n//   \t0x0140:  0000 0000 0000 0000 6382 5363 3501 0137  ........c.Sc5..7\n//   \t0x0150:  0a01 0306 0f77 5ffc 2c2e 2f39 0205 dc3d  .....w_.,./9...=\n//   \t0x0160:  0701 0019 e3d3 5352 3304 0076 a700 0c0b  ......SR3..v....\n//   \t0x0170:  4d61 6369 6e74 6f73 682d 34ff 0000 0000  Macintosh-4.....\n//   \t0x0180:  0000 0000 0000 0000                      ........\nvar testPacketDot11DataIP = []byte{\n\t0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x07, 0xc0, 0xb0, 0x25, 0x00, 0x00, 0x00, 0x00,\n\t0x22, 0x0c, 0xd8, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11,\n\t0x08, 0x02, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0x03, 0x7f, 0x07, 0xa0, 0x16,\n\t0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x40, 0x95, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00,\n\t0x45, 0x00, 0x01, 0x48, 0xc5, 0x14, 0x00, 0x00, 0xff, 0x11, 0xf5, 0x90, 0x00, 0x00, 0x00, 0x00,\n\t0xff, 0xff, 0xff, 0xff, 0x00, 0x44, 0x00, 0x43, 0x01, 0x34, 0x2b, 0x39, 0x01, 0x01, 0x06, 0x00,\n\t0x13, 0x1f, 0x8c, 0x43, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x82, 0x53, 0x63, 0x35, 0x01, 0x01, 0x37,\n\t0x0a, 0x01, 0x03, 0x06, 0x0f, 0x77, 0x5f, 0xfc, 0x2c, 0x2e, 0x2f, 0x39, 0x02, 0x05, 0xdc, 0x3d,\n\t0x07, 0x01, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x33, 0x04, 0x00, 0x76, 0xa7, 0x00, 0x0c, 0x0b,\n\t0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x2d, 0x34, 0xff, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestPacketDot11DataIP(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketDot11DataIP, LinkTypeIEEE80211Radio, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11Data, LayerTypeLLC, LayerTypeSNAP, LayerTypeIPv4, LayerTypeUDP, LayerTypeDHCPv4}, t)\n}\nfunc BenchmarkDecodePacketDot11DataIP(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketDot11DataIP, LinkTypeIEEE80211Radio, gopacket.NoCopy)\n\t}\n}\n\n// Encrypted\n\n/// testPacketP6196 is the packet:\n//   09:28:41.830631 20605036us tsft wep -69dB signal -92dB noise antenna 1 5240 MHz 11a ht/40- 162.0 Mb/s MCS 12 40 MHz lon GI mixed BCC FEC [bit 20] CF +QoS Data IV:50a9 Pad 20 KeyID 0\n//   \t0x0000:  0000 3000 6b08 1c00 6c68 3a01 0000 0000  ..0.k...lh:.....\n//   \t0x0010:  1400 7814 4001 bba4 0160 0e1a 4001 0400  ..x.@....`..@...\n//   \t0x0020:  7814 3022 1f01 0cff b10d 0000 0400 0000  x.0\"............\n//   \t0x0030:  8841 2c00 0025 9c42 c262 d8a2 5e97 61c1  .A,..%.B.b..^.a.\n//   \t0x0040:  0025 9c42 c25f 10db 0000 a950 0020 0000  .%.B._.....P....\n//   \t0x0050:  0000 f8ab a97e 3fbd d6e1 785b 0040 5f15  .....~?...x[.@_.\n//   \t0x0060:  7123 8711 bd1f ffb9 e5b3 84bb ec2a 0a90  q#...........*..\n//   \t0x0070:  d0a0 1a6f 9033 1083 5179 a0da f833 3a00  ...o.3..Qy...3:.\n//   \t0x0080:  5471 f596 539b 1823 a33c 4908 545c 266a  Tq..S..#.<I.T\\&j\n//   \t0x0090:  8540 515a 1da9 c49e a85a fbf7 de09 7f9c  .@QZ.....Z......\n//   \t0x00a0:  6f35 0b8b 6831 2c10 43dc 8983 b1d9 dd29  o5..h1,.C......)\n//   \t0x00b0:  7395 65b9 4b43 b391 16ec 4201 86c9 ca    s.e.KC....B....\nvar testPacketP6196 = []byte{\n\t0x00, 0x00, 0x30, 0x00, 0x6b, 0x08, 0x1c, 0x00, 0x6c, 0x68, 0x3a, 0x01, 0x00, 0x00, 0x00, 0x00,\n\t0x14, 0x00, 0x78, 0x14, 0x40, 0x01, 0xbb, 0xa4, 0x01, 0x60, 0x0e, 0x1a, 0x40, 0x01, 0x04, 0x00,\n\t0x78, 0x14, 0x30, 0x22, 0x1f, 0x01, 0x0c, 0xff, 0xb1, 0x0d, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,\n\t0x88, 0x41, 0x2c, 0x00, 0x00, 0x25, 0x9c, 0x42, 0xc2, 0x62, 0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1,\n\t0x00, 0x25, 0x9c, 0x42, 0xc2, 0x5f, 0x10, 0xdb, 0x00, 0x00, 0xa9, 0x50, 0x00, 0x20, 0x00, 0x00,\n\t0x00, 0x00, 0xf8, 0xab, 0xa9, 0x7e, 0x3f, 0xbd, 0xd6, 0xe1, 0x78, 0x5b, 0x00, 0x40, 0x5f, 0x15,\n\t0x71, 0x23, 0x87, 0x11, 0xbd, 0x1f, 0xff, 0xb9, 0xe5, 0xb3, 0x84, 0xbb, 0xec, 0x2a, 0x0a, 0x90,\n\t0xd0, 0xa0, 0x1a, 0x6f, 0x90, 0x33, 0x10, 0x83, 0x51, 0x79, 0xa0, 0xda, 0xf8, 0x33, 0x3a, 0x00,\n\t0x54, 0x71, 0xf5, 0x96, 0x53, 0x9b, 0x18, 0x23, 0xa3, 0x3c, 0x49, 0x08, 0x54, 0x5c, 0x26, 0x6a,\n\t0x85, 0x40, 0x51, 0x5a, 0x1d, 0xa9, 0xc4, 0x9e, 0xa8, 0x5a, 0xfb, 0xf7, 0xde, 0x09, 0x7f, 0x9c,\n\t0x6f, 0x35, 0x0b, 0x8b, 0x68, 0x31, 0x2c, 0x10, 0x43, 0xdc, 0x89, 0x83, 0xb1, 0xd9, 0xdd, 0x29,\n\t0x73, 0x95, 0x65, 0xb9, 0x4b, 0x43, 0xb3, 0x91, 0x16, 0xec, 0x42, 0x01, 0x86, 0xc9, 0xca,\n}\n\nfunc TestPacketP6196(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketP6196, LinkTypeIEEE80211Radio, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11DataQOSData, LayerTypeDot11WEP}, t)\n}\n\nfunc BenchmarkDecodePacketP6196(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketP6196, LinkTypeIEEE80211Radio, gopacket.NoCopy)\n\t}\n}\n\n// testPacketDot11HTControl is the packet:\n// 0000   00 00 26 00 2b 48 20 00 bf 70 06 02 00 00 00 00   ..&.+H .¿p......\n// 0010   40 00 78 14 40 01 b8 00 00 00 44 00 00 01 73 00   @.x.@.¸...D...s.\n// 0020   00 00 00 00 00 00 88 c9 30 14 01 02 03 04 05 06   .......É0.ò.Jòs}\n// 0030   11 12 13 14 15 16 21 22 23 24 25 26 c0 bd 00 14   .öP.6:M 2.Á7À½..\n// 0040   0e 28 00 a8 06 01 00 04 e6 73 b3 4a 24 3e 19 ea   .(.¨....æs³J$>.ê\n// 0050   2a b7 1f 3c c7 89 2b 22 e2 2b 28 6c 69 aa 0a ee   *·.<Ç.+\"â+(liª.î\n// 0060   1e bc 2d 2a 00 35 68 39 ad 6f 29 52 38 07 ae cf   .¼-*.5h9.o)R8.®Ï\n// 0070   03 e7 0d 53 8b 3c 12 28 52 05 cc 70 be c7 68 5e   .ç.S.<.(R.Ìp¾Çh^\n// 0080   5f b1 06 f4 73 22 63 ef 77 41 7b 86               _±.ôs\"cïwA{.\nvar testPacketDot11HTControl = []byte{\n\t0x00, 0x00, 0x26, 0x00, 0x2b, 0x48, 0x20, 0x00, 0xbf, 0x70, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,\n\t0x40, 0x00, 0x78, 0x14, 0x40, 0x01, 0xb8, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x73, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xc9, 0x30, 0x14, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,\n\t0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0xc0, 0xbd, 0x00, 0x14,\n\t0x0e, 0x28, 0x00, 0xa8, 0x06, 0x01, 0x00, 0x04, 0xe6, 0x73, 0xb3, 0x4a, 0x24, 0x3e, 0x19, 0xea,\n\t0x2a, 0xb7, 0x1f, 0x3c, 0xc7, 0x89, 0x2b, 0x22, 0xe2, 0x2b, 0x28, 0x6c, 0x69, 0xaa, 0x0a, 0xee,\n\t0x1e, 0xbc, 0x2d, 0x2a, 0x00, 0x35, 0x68, 0x39, 0xad, 0x6f, 0x29, 0x52, 0x38, 0x07, 0xae, 0xcf,\n\t0x03, 0xe7, 0x0d, 0x53, 0x8b, 0x3c, 0x12, 0x28, 0x52, 0x05, 0xcc, 0x70, 0xbe, 0xc7, 0x68, 0x5e,\n\t0x5f, 0xb1, 0x06, 0xf4, 0x73, 0x22, 0x63, 0xef, 0x77, 0x41, 0x7b, 0x86,\n}\n\nvar mfb = uint8(20)\n\nvar wantHTControl = Dot11HTControl{\n\tACConstraint: false,\n\tRDGMorePPDU:  true,\n\tHT: &Dot11HTControlHT{\n\t\tLinkAdapationControl: &Dot11LinkAdapationControl{\n\t\t\tTRQ:  true,\n\t\t\tMRQ:  true,\n\t\t\tMSI:  1,\n\t\t\tMFSI: 0,\n\t\t\tASEL: nil,\n\t\t\tMFB:  &mfb,\n\t\t},\n\t\tCalibrationPosition: 0,\n\t\tCalibrationSequence: 0,\n\t\tCSISteering:         0,\n\t\tNDPAnnouncement:     false,\n\t\tDEI:                 true,\n\t},\n}\n\nfunc TestPacketDot11HTControl(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketDot11HTControl, LinkTypeIEEE80211Radio, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11DataQOSData, LayerTypeDot11WEP}, t)\n\n\tld11 := p.Layer(LayerTypeDot11)\n\tif dot11, ok := ld11.(*Dot11); ok {\n\t\tif dot11.HTControl == nil {\n\t\t\tt.Fatal(\"Packet didn't contain HTControl\")\n\t\t}\n\t\tif !reflect.DeepEqual(*dot11.HTControl, wantHTControl) {\n\t\t\tt.Errorf(\"Dot11 packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", dot11.HTControl, wantHTControl)\n\t\t}\n\t}\n}\n\nfunc TestInformationElement(t *testing.T) {\n\tbin := []byte{\n\t\t0, 0,\n\t\t0, 2, 1, 3,\n\t\t221, 5, 1, 2, 3, 4, 5,\n\t}\n\tpkt := gopacket.NewPacket(bin, LayerTypeDot11InformationElement, gopacket.NoCopy)\n\n\tbuf := gopacket.NewSerializeBuffer()\n\tvar sLayers []gopacket.SerializableLayer\n\tfor _, l := range pkt.Layers() {\n\t\tsLayers = append(sLayers, l.(*Dot11InformationElement))\n\t}\n\tif err := gopacket.SerializeLayers(buf, gopacket.SerializeOptions{}, sLayers...); err != nil {\n\t\tt.Error(err.Error())\n\t}\n\tif !bytes.Equal(bin, buf.Bytes()) {\n\t\tt.Error(\"build failed\")\n\t}\n}\n"
  },
  {
    "path": "layers/dot1q.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"github.com/google/gopacket\"\n)\n\n// Dot1Q is the packet layer for 802.1Q VLAN headers.\ntype Dot1Q struct {\n\tBaseLayer\n\tPriority       uint8\n\tDropEligible   bool\n\tVLANIdentifier uint16\n\tType           EthernetType\n}\n\n// LayerType returns gopacket.LayerTypeDot1Q\nfunc (d *Dot1Q) LayerType() gopacket.LayerType { return LayerTypeDot1Q }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (d *Dot1Q) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 4 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"802.1Q tag length %d too short\", len(data))\n\t}\n\td.Priority = (data[0] & 0xE0) >> 5\n\td.DropEligible = data[0]&0x10 != 0\n\td.VLANIdentifier = binary.BigEndian.Uint16(data[:2]) & 0x0FFF\n\td.Type = EthernetType(binary.BigEndian.Uint16(data[2:4]))\n\td.BaseLayer = BaseLayer{Contents: data[:4], Payload: data[4:]}\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (d *Dot1Q) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeDot1Q\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (d *Dot1Q) NextLayerType() gopacket.LayerType {\n\treturn d.Type.LayerType()\n}\n\nfunc decodeDot1Q(data []byte, p gopacket.PacketBuilder) error {\n\td := &Dot1Q{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (d *Dot1Q) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbytes, err := b.PrependBytes(4)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif d.VLANIdentifier > 0xFFF {\n\t\treturn fmt.Errorf(\"vlan identifier %v is too high\", d.VLANIdentifier)\n\t}\n\tfirstBytes := uint16(d.Priority)<<13 | d.VLANIdentifier\n\tif d.DropEligible {\n\t\tfirstBytes |= 0x1000\n\t}\n\tbinary.BigEndian.PutUint16(bytes, firstBytes)\n\tbinary.BigEndian.PutUint16(bytes[2:], uint16(d.Type))\n\treturn nil\n}\n"
  },
  {
    "path": "layers/dot1q_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\npackage layers\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// test harness to ensure the dot1q layer can be encoded/decoded properly\n// return error if decoded data not match.\nfunc testEncodeDecodeDot1Q(dot1Q *Dot1Q) error {\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{}\n\texpectedDot1Q := dot1Q\n\n\terr := dot1Q.SerializeTo(buf, opts)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tnewDot1q := &Dot1Q{}\n\terr = newDot1q.DecodeFromBytes(buf.Bytes(), gopacket.NilDecodeFeedback)\n\tif err != nil {\n\t\treturn err\n\t}\n\tnewDot1q.BaseLayer = BaseLayer{}\n\n\tif !reflect.DeepEqual(expectedDot1Q, newDot1q) {\n\t\treturn fmt.Errorf(\"Expect %v actual %v\", expectedDot1Q, newDot1q)\n\t}\n\treturn nil\n\n}\n\n// Test to ensure what has been encode can be decoded\nfunc TestEncodeDecodeDot1Q(t *testing.T) {\n\tdot1Qs := []*Dot1Q{\n\t\t&Dot1Q{\n\t\t\tPriority:       uint8(3),\n\t\t\tVLANIdentifier: uint16(30),\n\t\t},\n\t\t&Dot1Q{\n\t\t\tPriority:       uint8(0x07),\n\t\t\tDropEligible:   true,\n\t\t\tVLANIdentifier: uint16(0xFFF),\n\t\t},\n\t}\n\n\tfor i, curTest := range dot1Qs {\n\t\terr := testEncodeDecodeDot1Q(curTest)\n\t\tif err != nil {\n\t\t\tt.Error(\"Error with item \", i, \" with error message :\", err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "layers/eap.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"github.com/google/gopacket\"\n)\n\ntype EAPCode uint8\ntype EAPType uint8\n\nconst (\n\tEAPCodeRequest  EAPCode = 1\n\tEAPCodeResponse EAPCode = 2\n\tEAPCodeSuccess  EAPCode = 3\n\tEAPCodeFailure  EAPCode = 4\n\n\t// EAPTypeNone means that this EAP layer has no Type or TypeData.\n\t// Success and Failure EAPs will have this set.\n\tEAPTypeNone EAPType = 0\n\n\tEAPTypeIdentity     EAPType = 1\n\tEAPTypeNotification EAPType = 2\n\tEAPTypeNACK         EAPType = 3\n\tEAPTypeOTP          EAPType = 4\n\tEAPTypeTokenCard    EAPType = 5\n)\n\n// EAP defines an Extensible Authentication Protocol (rfc 3748) layer.\ntype EAP struct {\n\tBaseLayer\n\tCode     EAPCode\n\tId       uint8\n\tLength   uint16\n\tType     EAPType\n\tTypeData []byte\n}\n\n// LayerType returns LayerTypeEAP.\nfunc (e *EAP) LayerType() gopacket.LayerType { return LayerTypeEAP }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (e *EAP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 4 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"EAP length %d too short\", len(data))\n\t}\n\te.Code = EAPCode(data[0])\n\te.Id = data[1]\n\te.Length = binary.BigEndian.Uint16(data[2:4])\n\tif len(data) < int(e.Length) {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"EAP length %d too short, %d expected\", len(data), e.Length)\n\t}\n\tswitch {\n\tcase e.Length > 4:\n\t\te.Type = EAPType(data[4])\n\t\te.TypeData = data[5:]\n\tcase e.Length == 4:\n\t\te.Type = 0\n\t\te.TypeData = nil\n\tdefault:\n\t\treturn fmt.Errorf(\"invalid EAP length %d\", e.Length)\n\t}\n\te.BaseLayer.Contents = data[:e.Length]\n\te.BaseLayer.Payload = data[e.Length:] // Should be 0 bytes\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (e *EAP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tif opts.FixLengths {\n\t\te.Length = uint16(len(e.TypeData) + 1)\n\t}\n\tsize := len(e.TypeData) + 4\n\tif size > 4 {\n\t\tsize++\n\t}\n\tbytes, err := b.PrependBytes(size)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = byte(e.Code)\n\tbytes[1] = e.Id\n\tbinary.BigEndian.PutUint16(bytes[2:], e.Length)\n\tif size > 4 {\n\t\tbytes[4] = byte(e.Type)\n\t\tcopy(bytes[5:], e.TypeData)\n\t}\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (e *EAP) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeEAP\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (e *EAP) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypeZero\n}\n\nfunc decodeEAP(data []byte, p gopacket.PacketBuilder) error {\n\te := &EAP{}\n\treturn decodingLayerDecoder(e, data, p)\n}\n"
  },
  {
    "path": "layers/eapol.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"github.com/google/gopacket\"\n)\n\n// EAPOL defines an EAP over LAN (802.1x) layer.\ntype EAPOL struct {\n\tBaseLayer\n\tVersion uint8\n\tType    EAPOLType\n\tLength  uint16\n}\n\n// LayerType returns LayerTypeEAPOL.\nfunc (e *EAPOL) LayerType() gopacket.LayerType { return LayerTypeEAPOL }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (e *EAPOL) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 4 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"EAPOL length %d too short\", len(data))\n\t}\n\te.Version = data[0]\n\te.Type = EAPOLType(data[1])\n\te.Length = binary.BigEndian.Uint16(data[2:4])\n\te.BaseLayer = BaseLayer{data[:4], data[4:]}\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer\nfunc (e *EAPOL) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbytes, _ := b.PrependBytes(4)\n\tbytes[0] = e.Version\n\tbytes[1] = byte(e.Type)\n\tbinary.BigEndian.PutUint16(bytes[2:], e.Length)\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (e *EAPOL) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeEAPOL\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (e *EAPOL) NextLayerType() gopacket.LayerType {\n\treturn e.Type.LayerType()\n}\n\nfunc decodeEAPOL(data []byte, p gopacket.PacketBuilder) error {\n\te := &EAPOL{}\n\treturn decodingLayerDecoder(e, data, p)\n}\n\n// EAPOLKeyDescriptorType is an enumeration of key descriptor types\n// as specified by 802.1x in the EAPOL-Key frame\ntype EAPOLKeyDescriptorType uint8\n\n// Enumeration of EAPOLKeyDescriptorType\nconst (\n\tEAPOLKeyDescriptorTypeRC4   EAPOLKeyDescriptorType = 1\n\tEAPOLKeyDescriptorTypeDot11 EAPOLKeyDescriptorType = 2\n\tEAPOLKeyDescriptorTypeWPA   EAPOLKeyDescriptorType = 254\n)\n\nfunc (kdt EAPOLKeyDescriptorType) String() string {\n\tswitch kdt {\n\tcase EAPOLKeyDescriptorTypeRC4:\n\t\treturn \"RC4\"\n\tcase EAPOLKeyDescriptorTypeDot11:\n\t\treturn \"802.11\"\n\tcase EAPOLKeyDescriptorTypeWPA:\n\t\treturn \"WPA\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown descriptor type %d\", kdt)\n\t}\n}\n\n// EAPOLKeyDescriptorVersion is an enumeration of versions specifying the\n// encryption algorithm for the key data and the authentication for the\n// message integrity code (MIC)\ntype EAPOLKeyDescriptorVersion uint8\n\n// Enumeration of EAPOLKeyDescriptorVersion\nconst (\n\tEAPOLKeyDescriptorVersionOther       EAPOLKeyDescriptorVersion = 0\n\tEAPOLKeyDescriptorVersionRC4HMACMD5  EAPOLKeyDescriptorVersion = 1\n\tEAPOLKeyDescriptorVersionAESHMACSHA1 EAPOLKeyDescriptorVersion = 2\n\tEAPOLKeyDescriptorVersionAES128CMAC  EAPOLKeyDescriptorVersion = 3\n)\n\nfunc (v EAPOLKeyDescriptorVersion) String() string {\n\tswitch v {\n\tcase EAPOLKeyDescriptorVersionOther:\n\t\treturn \"Other\"\n\tcase EAPOLKeyDescriptorVersionRC4HMACMD5:\n\t\treturn \"RC4-HMAC-MD5\"\n\tcase EAPOLKeyDescriptorVersionAESHMACSHA1:\n\t\treturn \"AES-HMAC-SHA1-128\"\n\tcase EAPOLKeyDescriptorVersionAES128CMAC:\n\t\treturn \"AES-128-CMAC\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown version %d\", v)\n\t}\n}\n\n// EAPOLKeyType is an enumeration of key derivation types describing\n// the purpose of the keys being derived.\ntype EAPOLKeyType uint8\n\n// Enumeration of EAPOLKeyType\nconst (\n\tEAPOLKeyTypeGroupSMK EAPOLKeyType = 0\n\tEAPOLKeyTypePairwise EAPOLKeyType = 1\n)\n\nfunc (kt EAPOLKeyType) String() string {\n\tswitch kt {\n\tcase EAPOLKeyTypeGroupSMK:\n\t\treturn \"Group/SMK\"\n\tcase EAPOLKeyTypePairwise:\n\t\treturn \"Pairwise\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown key type %d\", kt)\n\t}\n}\n\n// EAPOLKey defines an EAPOL-Key frame for 802.1x authentication\ntype EAPOLKey struct {\n\tBaseLayer\n\tKeyDescriptorType    EAPOLKeyDescriptorType\n\tKeyDescriptorVersion EAPOLKeyDescriptorVersion\n\tKeyType              EAPOLKeyType\n\tKeyIndex             uint8\n\tInstall              bool\n\tKeyACK               bool\n\tKeyMIC               bool\n\tSecure               bool\n\tMICError             bool\n\tRequest              bool\n\tHasEncryptedKeyData  bool\n\tSMKMessage           bool\n\tKeyLength            uint16\n\tReplayCounter        uint64\n\tNonce                []byte\n\tIV                   []byte\n\tRSC                  uint64\n\tID                   uint64\n\tMIC                  []byte\n\tKeyDataLength        uint16\n\tEncryptedKeyData     []byte\n}\n\n// LayerType returns LayerTypeEAPOLKey.\nfunc (ek *EAPOLKey) LayerType() gopacket.LayerType {\n\treturn LayerTypeEAPOLKey\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (ek *EAPOLKey) CanDecode() gopacket.LayerType {\n\treturn LayerTypeEAPOLKey\n}\n\n// NextLayerType returns layers.LayerTypeDot11InformationElement if the key\n// data exists and is unencrypted, otherwise it does not expect a next layer.\nfunc (ek *EAPOLKey) NextLayerType() gopacket.LayerType {\n\tif !ek.HasEncryptedKeyData && ek.KeyDataLength > 0 {\n\t\treturn LayerTypeDot11InformationElement\n\t}\n\treturn gopacket.LayerTypePayload\n}\n\nconst eapolKeyFrameLen = 95\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (ek *EAPOLKey) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < eapolKeyFrameLen {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"EAPOLKey length %v too short, %v required\",\n\t\t\tlen(data), eapolKeyFrameLen)\n\t}\n\n\tek.KeyDescriptorType = EAPOLKeyDescriptorType(data[0])\n\n\tinfo := binary.BigEndian.Uint16(data[1:3])\n\tek.KeyDescriptorVersion = EAPOLKeyDescriptorVersion(info & 0x0007)\n\tek.KeyType = EAPOLKeyType((info & 0x0008) >> 3)\n\tek.KeyIndex = uint8((info & 0x0030) >> 4)\n\tek.Install = (info & 0x0040) != 0\n\tek.KeyACK = (info & 0x0080) != 0\n\tek.KeyMIC = (info & 0x0100) != 0\n\tek.Secure = (info & 0x0200) != 0\n\tek.MICError = (info & 0x0400) != 0\n\tek.Request = (info & 0x0800) != 0\n\tek.HasEncryptedKeyData = (info & 0x1000) != 0\n\tek.SMKMessage = (info & 0x2000) != 0\n\n\tek.KeyLength = binary.BigEndian.Uint16(data[3:5])\n\tek.ReplayCounter = binary.BigEndian.Uint64(data[5:13])\n\n\tek.Nonce = data[13:45]\n\tek.IV = data[45:61]\n\tek.RSC = binary.BigEndian.Uint64(data[61:69])\n\tek.ID = binary.BigEndian.Uint64(data[69:77])\n\tek.MIC = data[77:93]\n\n\tek.KeyDataLength = binary.BigEndian.Uint16(data[93:95])\n\n\ttotalLength := eapolKeyFrameLen + int(ek.KeyDataLength)\n\tif len(data) < totalLength {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"EAPOLKey data length %d too short, %d required\",\n\t\t\tlen(data)-eapolKeyFrameLen, ek.KeyDataLength)\n\t}\n\n\tif ek.HasEncryptedKeyData {\n\t\tek.EncryptedKeyData = data[eapolKeyFrameLen:totalLength]\n\t\tek.BaseLayer = BaseLayer{\n\t\t\tContents: data[:totalLength],\n\t\t\tPayload:  data[totalLength:],\n\t\t}\n\t} else {\n\t\tek.BaseLayer = BaseLayer{\n\t\t\tContents: data[:eapolKeyFrameLen],\n\t\t\tPayload:  data[eapolKeyFrameLen:],\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (ek *EAPOLKey) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbuf, err := b.PrependBytes(eapolKeyFrameLen + len(ek.EncryptedKeyData))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbuf[0] = byte(ek.KeyDescriptorType)\n\n\tvar info uint16\n\tinfo |= uint16(ek.KeyDescriptorVersion)\n\tinfo |= uint16(ek.KeyType) << 3\n\tinfo |= uint16(ek.KeyIndex) << 4\n\tif ek.Install {\n\t\tinfo |= 0x0040\n\t}\n\tif ek.KeyACK {\n\t\tinfo |= 0x0080\n\t}\n\tif ek.KeyMIC {\n\t\tinfo |= 0x0100\n\t}\n\tif ek.Secure {\n\t\tinfo |= 0x0200\n\t}\n\tif ek.MICError {\n\t\tinfo |= 0x0400\n\t}\n\tif ek.Request {\n\t\tinfo |= 0x0800\n\t}\n\tif ek.HasEncryptedKeyData {\n\t\tinfo |= 0x1000\n\t}\n\tif ek.SMKMessage {\n\t\tinfo |= 0x2000\n\t}\n\tbinary.BigEndian.PutUint16(buf[1:3], info)\n\n\tbinary.BigEndian.PutUint16(buf[3:5], ek.KeyLength)\n\tbinary.BigEndian.PutUint64(buf[5:13], ek.ReplayCounter)\n\n\tcopy(buf[13:45], ek.Nonce)\n\tcopy(buf[45:61], ek.IV)\n\tbinary.BigEndian.PutUint64(buf[61:69], ek.RSC)\n\tbinary.BigEndian.PutUint64(buf[69:77], ek.ID)\n\tcopy(buf[77:93], ek.MIC)\n\n\tbinary.BigEndian.PutUint16(buf[93:95], ek.KeyDataLength)\n\tif len(ek.EncryptedKeyData) > 0 {\n\t\tcopy(buf[95:95+len(ek.EncryptedKeyData)], ek.EncryptedKeyData)\n\t}\n\n\treturn nil\n}\n\nfunc decodeEAPOLKey(data []byte, p gopacket.PacketBuilder) error {\n\tek := &EAPOLKey{}\n\treturn decodingLayerDecoder(ek, data, p)\n}\n"
  },
  {
    "path": "layers/eapol_test.go",
    "content": "// Copyright placeholder\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\npackage layers\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nconst eapolErrFmt = \"%s packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\"\n\n// testPacketEAPOLKey is frame 87 in the capture:\n// https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=wpa-Induction.pcap\n// It's the first EAPOL-Key frame in the WPA 4-way handshake:\n// 0x0000   02 03 00 75 02 00 8a 00 10 00 00 00 00 00 00 00  ...u............\n// 0x0010   00 3e 8e 96 7d ac d9 60 32 4c ac 5b 6a a7 21 23  .>..}..`2L.[j.!#\n// 0x0020   5b f5 7b 94 97 71 c8 67 98 9f 49 d0 4e d4 7c 69  [.{..q.g..I.N.|i\n// 0x0030   33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  3...............\n// 0x0040   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................\n// 0x0050   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................\n// 0x0060   00 00 16 dd 14 00 0f ac 04 59 2d a8 80 96 c4 61  .........Y-....a\n// 0x0070   da 24 6c 69 00 1e 87 7f 3d                       .$li....=\n\nvar testPacketEAPOLKey = []byte{\n\t0x02, 0x03, 0x00, 0x75, 0x02, 0x00, 0x8a, 0x00,\n\t0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x3e, 0x8e, 0x96, 0x7d, 0xac, 0xd9, 0x60,\n\t0x32, 0x4c, 0xac, 0x5b, 0x6a, 0xa7, 0x21, 0x23,\n\t0x5b, 0xf5, 0x7b, 0x94, 0x97, 0x71, 0xc8, 0x67,\n\t0x98, 0x9f, 0x49, 0xd0, 0x4e, 0xd4, 0x7c, 0x69,\n\t0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x16, 0xdd, 0x14, 0x00, 0x0f, 0xac,\n\t0x04, 0x59, 0x2d, 0xa8, 0x80, 0x96, 0xc4, 0x61,\n\t0xda, 0x24, 0x6c, 0x69, 0x00, 0x1e, 0x87, 0x7f,\n\t0x3d,\n}\n\nfunc TestPacketEAPOLKey(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketEAPOLKey, LayerTypeEAPOL, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEAPOL, LayerTypeEAPOLKey,\n\t\tLayerTypeDot11InformationElement}, t)\n\n\t{\n\t\tgot := p.Layer(LayerTypeEAPOL).(*EAPOL)\n\t\twant := &EAPOL{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: testPacketEAPOLKey[:4],\n\t\t\t\tPayload:  testPacketEAPOLKey[4:],\n\t\t\t},\n\t\t\tVersion: 2,\n\t\t\tType:    EAPOLTypeKey,\n\t\t\tLength:  117,\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(eapolErrFmt, \"EAPOL\", got, want)\n\t\t}\n\t}\n\n\t{\n\t\tgot := p.Layer(LayerTypeEAPOLKey).(*EAPOLKey)\n\t\twant := &EAPOLKey{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: testPacketEAPOLKey[4 : 4+eapolKeyFrameLen],\n\t\t\t\tPayload:  testPacketEAPOLKey[4+eapolKeyFrameLen:],\n\t\t\t},\n\t\t\tKeyDescriptorType:    EAPOLKeyDescriptorTypeDot11,\n\t\t\tKeyDescriptorVersion: EAPOLKeyDescriptorVersionAESHMACSHA1,\n\t\t\tKeyType:              EAPOLKeyTypePairwise,\n\t\t\tKeyACK:               true,\n\t\t\tKeyLength:            16,\n\t\t\tNonce: []byte{\n\t\t\t\t0x3e, 0x8e, 0x96, 0x7d, 0xac, 0xd9, 0x60, 0x32,\n\t\t\t\t0x4c, 0xac, 0x5b, 0x6a, 0xa7, 0x21, 0x23, 0x5b,\n\t\t\t\t0xf5, 0x7b, 0x94, 0x97, 0x71, 0xc8, 0x67, 0x98,\n\t\t\t\t0x9f, 0x49, 0xd0, 0x4e, 0xd4, 0x7c, 0x69, 0x33,\n\t\t\t},\n\t\t\tIV:            make([]byte, 16),\n\t\t\tMIC:           make([]byte, 16),\n\t\t\tKeyDataLength: 22,\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(eapolErrFmt, \"EAPOLKey\", got, want)\n\t\t}\n\t}\n\t{\n\t\tgot := p.Layer(LayerTypeDot11InformationElement).(*Dot11InformationElement)\n\t\twant := &Dot11InformationElement{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: testPacketEAPOLKey[4+eapolKeyFrameLen:],\n\t\t\t\tPayload:  []byte{},\n\t\t\t},\n\t\t\tID:     Dot11InformationElementIDVendor,\n\t\t\tLength: 20,\n\t\t\tOUI:    []byte{0x00, 0x0f, 0xac, 0x04},\n\t\t\tInfo: []byte{\n\t\t\t\t0x59, 0x2d, 0xa8, 0x80, 0x96, 0xc4, 0x61, 0xda,\n\t\t\t\t0x24, 0x6c, 0x69, 0x00, 0x1e, 0x87, 0x7f, 0x3d,\n\t\t\t},\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(eapolErrFmt, \"Dot11InformationElement\", got, want)\n\t\t}\n\t}\n}\n\nfunc BenchmarkDecodePacketEAPOLKey(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketEAPOLKey, nil, gopacket.NoCopy)\n\t}\n}\n"
  },
  {
    "path": "layers/endpoints.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"github.com/google/gopacket\"\n\t\"net\"\n\t\"strconv\"\n)\n\nvar (\n\t// We use two different endpoint types for IPv4 vs IPv6 addresses, so that\n\t// ordering with endpointA.LessThan(endpointB) sanely groups all IPv4\n\t// addresses and all IPv6 addresses, such that IPv6 > IPv4 for all addresses.\n\tEndpointIPv4 = gopacket.RegisterEndpointType(1, gopacket.EndpointTypeMetadata{Name: \"IPv4\", Formatter: func(b []byte) string {\n\t\treturn net.IP(b).String()\n\t}})\n\tEndpointIPv6 = gopacket.RegisterEndpointType(2, gopacket.EndpointTypeMetadata{Name: \"IPv6\", Formatter: func(b []byte) string {\n\t\treturn net.IP(b).String()\n\t}})\n\n\tEndpointMAC = gopacket.RegisterEndpointType(3, gopacket.EndpointTypeMetadata{Name: \"MAC\", Formatter: func(b []byte) string {\n\t\treturn net.HardwareAddr(b).String()\n\t}})\n\tEndpointTCPPort = gopacket.RegisterEndpointType(4, gopacket.EndpointTypeMetadata{Name: \"TCP\", Formatter: func(b []byte) string {\n\t\treturn strconv.Itoa(int(binary.BigEndian.Uint16(b)))\n\t}})\n\tEndpointUDPPort = gopacket.RegisterEndpointType(5, gopacket.EndpointTypeMetadata{Name: \"UDP\", Formatter: func(b []byte) string {\n\t\treturn strconv.Itoa(int(binary.BigEndian.Uint16(b)))\n\t}})\n\tEndpointSCTPPort = gopacket.RegisterEndpointType(6, gopacket.EndpointTypeMetadata{Name: \"SCTP\", Formatter: func(b []byte) string {\n\t\treturn strconv.Itoa(int(binary.BigEndian.Uint16(b)))\n\t}})\n\tEndpointRUDPPort = gopacket.RegisterEndpointType(7, gopacket.EndpointTypeMetadata{Name: \"RUDP\", Formatter: func(b []byte) string {\n\t\treturn strconv.Itoa(int(b[0]))\n\t}})\n\tEndpointUDPLitePort = gopacket.RegisterEndpointType(8, gopacket.EndpointTypeMetadata{Name: \"UDPLite\", Formatter: func(b []byte) string {\n\t\treturn strconv.Itoa(int(binary.BigEndian.Uint16(b)))\n\t}})\n\tEndpointPPP = gopacket.RegisterEndpointType(9, gopacket.EndpointTypeMetadata{Name: \"PPP\", Formatter: func([]byte) string {\n\t\treturn \"point\"\n\t}})\n)\n\n// NewIPEndpoint creates a new IP (v4 or v6) endpoint from a net.IP address.\n// It returns gopacket.InvalidEndpoint if the IP address is invalid.\nfunc NewIPEndpoint(a net.IP) gopacket.Endpoint {\n\tipv4 := a.To4()\n\tif ipv4 != nil {\n\t\treturn gopacket.NewEndpoint(EndpointIPv4, []byte(ipv4))\n\t}\n\n\tipv6 := a.To16()\n\tif ipv6 != nil {\n\t\treturn gopacket.NewEndpoint(EndpointIPv6, []byte(ipv6))\n\t}\n\n\treturn gopacket.InvalidEndpoint\n}\n\n// NewMACEndpoint returns a new MAC address endpoint.\nfunc NewMACEndpoint(a net.HardwareAddr) gopacket.Endpoint {\n\treturn gopacket.NewEndpoint(EndpointMAC, []byte(a))\n}\nfunc newPortEndpoint(t gopacket.EndpointType, p uint16) gopacket.Endpoint {\n\treturn gopacket.NewEndpoint(t, []byte{byte(p >> 8), byte(p)})\n}\n\n// NewTCPPortEndpoint returns an endpoint based on a TCP port.\nfunc NewTCPPortEndpoint(p TCPPort) gopacket.Endpoint {\n\treturn newPortEndpoint(EndpointTCPPort, uint16(p))\n}\n\n// NewUDPPortEndpoint returns an endpoint based on a UDP port.\nfunc NewUDPPortEndpoint(p UDPPort) gopacket.Endpoint {\n\treturn newPortEndpoint(EndpointUDPPort, uint16(p))\n}\n\n// NewSCTPPortEndpoint returns an endpoint based on a SCTP port.\nfunc NewSCTPPortEndpoint(p SCTPPort) gopacket.Endpoint {\n\treturn newPortEndpoint(EndpointSCTPPort, uint16(p))\n}\n\n// NewRUDPPortEndpoint returns an endpoint based on a RUDP port.\nfunc NewRUDPPortEndpoint(p RUDPPort) gopacket.Endpoint {\n\treturn gopacket.NewEndpoint(EndpointRUDPPort, []byte{byte(p)})\n}\n\n// NewUDPLitePortEndpoint returns an endpoint based on a UDPLite port.\nfunc NewUDPLitePortEndpoint(p UDPLitePort) gopacket.Endpoint {\n\treturn newPortEndpoint(EndpointUDPLitePort, uint16(p))\n}\n"
  },
  {
    "path": "layers/endpoints_test.go",
    "content": "// Copyright 2017, Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"net\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc TestNewIPEndpoint(t *testing.T) {\n\tcases := []struct {\n\t\tip           net.IP\n\t\tendpointType gopacket.EndpointType\n\t}{\n\t\t{net.ParseIP(\"192.168.0.1\").To4(), EndpointIPv4},\n\t\t{net.ParseIP(\"192.168.0.1\").To16(), EndpointIPv4},\n\t\t{net.ParseIP(\"2001:0db8:85a3:0000:0000:8a2e:0370:7334\"), EndpointIPv6},\n\t}\n\n\tfor _, c := range cases {\n\t\tendpoint := NewIPEndpoint(c.ip)\n\t\tif endpoint == gopacket.InvalidEndpoint {\n\t\t\tt.Errorf(\"Failed to create an IP endpoint for %s (%d-bytes)\",\n\t\t\t\tc.ip, len(c.ip))\n\t\t}\n\t\tif endpoint.EndpointType() != c.endpointType {\n\t\t\tt.Errorf(\"Wrong endpoint type created for %s (%d-bytes): expected %s, got %s\",\n\t\t\t\tc.ip, len(c.ip), c.endpointType, endpoint.EndpointType())\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "layers/enums.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// EnumMetadata keeps track of a set of metadata for each enumeration value\n// for protocol enumerations.\ntype EnumMetadata struct {\n\t// DecodeWith is the decoder to use to decode this protocol's data.\n\tDecodeWith gopacket.Decoder\n\t// Name is the name of the enumeration value.\n\tName string\n\t// LayerType is the layer type implied by the given enum.\n\tLayerType gopacket.LayerType\n}\n\n// EthernetType is an enumeration of ethernet type values, and acts as a decoder\n// for any type it supports.\ntype EthernetType uint16\n\nconst (\n\t// EthernetTypeLLC is not an actual ethernet type.  It is instead a\n\t// placeholder we use in Ethernet frames that use the 802.3 standard of\n\t// srcmac|dstmac|length|LLC instead of srcmac|dstmac|ethertype.\n\tEthernetTypeLLC                         EthernetType = 0\n\tEthernetTypeIPv4                        EthernetType = 0x0800\n\tEthernetTypeARP                         EthernetType = 0x0806\n\tEthernetTypeIPv6                        EthernetType = 0x86DD\n\tEthernetTypeCiscoDiscovery              EthernetType = 0x2000\n\tEthernetTypeNortelDiscovery             EthernetType = 0x01a2\n\tEthernetTypeTransparentEthernetBridging EthernetType = 0x6558\n\tEthernetTypeDot1Q                       EthernetType = 0x8100\n\tEthernetTypePPP                         EthernetType = 0x880b\n\tEthernetTypePPPoEDiscovery              EthernetType = 0x8863\n\tEthernetTypePPPoESession                EthernetType = 0x8864\n\tEthernetTypeMPLSUnicast                 EthernetType = 0x8847\n\tEthernetTypeMPLSMulticast               EthernetType = 0x8848\n\tEthernetTypeEAPOL                       EthernetType = 0x888e\n\tEthernetTypeERSPAN                      EthernetType = 0x88be\n\tEthernetTypeQinQ                        EthernetType = 0x88a8\n\tEthernetTypeLinkLayerDiscovery          EthernetType = 0x88cc\n\tEthernetTypeEthernetCTP                 EthernetType = 0x9000\n)\n\n// IPProtocol is an enumeration of IP protocol values, and acts as a decoder\n// for any type it supports.\ntype IPProtocol uint8\n\nconst (\n\tIPProtocolIPv6HopByHop    IPProtocol = 0\n\tIPProtocolICMPv4          IPProtocol = 1\n\tIPProtocolIGMP            IPProtocol = 2\n\tIPProtocolIPv4            IPProtocol = 4\n\tIPProtocolTCP             IPProtocol = 6\n\tIPProtocolUDP             IPProtocol = 17\n\tIPProtocolRUDP            IPProtocol = 27\n\tIPProtocolIPv6            IPProtocol = 41\n\tIPProtocolIPv6Routing     IPProtocol = 43\n\tIPProtocolIPv6Fragment    IPProtocol = 44\n\tIPProtocolGRE             IPProtocol = 47\n\tIPProtocolESP             IPProtocol = 50\n\tIPProtocolAH              IPProtocol = 51\n\tIPProtocolICMPv6          IPProtocol = 58\n\tIPProtocolNoNextHeader    IPProtocol = 59\n\tIPProtocolIPv6Destination IPProtocol = 60\n\tIPProtocolOSPF            IPProtocol = 89\n\tIPProtocolIPIP            IPProtocol = 94\n\tIPProtocolEtherIP         IPProtocol = 97\n\tIPProtocolVRRP            IPProtocol = 112\n\tIPProtocolSCTP            IPProtocol = 132\n\tIPProtocolUDPLite         IPProtocol = 136\n\tIPProtocolMPLSInIP        IPProtocol = 137\n)\n\n// LinkType is an enumeration of link types, and acts as a decoder for any\n// link type it supports.\ntype LinkType uint8\n\nconst (\n\t// According to pcap-linktype(7) and http://www.tcpdump.org/linktypes.html\n\tLinkTypeNull           LinkType = 0\n\tLinkTypeEthernet       LinkType = 1\n\tLinkTypeAX25           LinkType = 3\n\tLinkTypeTokenRing      LinkType = 6\n\tLinkTypeArcNet         LinkType = 7\n\tLinkTypeSLIP           LinkType = 8\n\tLinkTypePPP            LinkType = 9\n\tLinkTypeFDDI           LinkType = 10\n\tLinkTypePPP_HDLC       LinkType = 50\n\tLinkTypePPPEthernet    LinkType = 51\n\tLinkTypeATM_RFC1483    LinkType = 100\n\tLinkTypeRaw            LinkType = 101\n\tLinkTypeC_HDLC         LinkType = 104\n\tLinkTypeIEEE802_11     LinkType = 105\n\tLinkTypeFRelay         LinkType = 107\n\tLinkTypeLoop           LinkType = 108\n\tLinkTypeLinuxSLL       LinkType = 113\n\tLinkTypeLTalk          LinkType = 114\n\tLinkTypePFLog          LinkType = 117\n\tLinkTypePrismHeader    LinkType = 119\n\tLinkTypeIPOverFC       LinkType = 122\n\tLinkTypeSunATM         LinkType = 123\n\tLinkTypeIEEE80211Radio LinkType = 127\n\tLinkTypeARCNetLinux    LinkType = 129\n\tLinkTypeIPOver1394     LinkType = 138\n\tLinkTypeMTP2Phdr       LinkType = 139\n\tLinkTypeMTP2           LinkType = 140\n\tLinkTypeMTP3           LinkType = 141\n\tLinkTypeSCCP           LinkType = 142\n\tLinkTypeDOCSIS         LinkType = 143\n\tLinkTypeLinuxIRDA      LinkType = 144\n\tLinkTypeLinuxLAPD      LinkType = 177\n\tLinkTypeLinuxUSB       LinkType = 220\n\tLinkTypeFC2            LinkType = 224\n\tLinkTypeFC2Framed      LinkType = 225\n\tLinkTypeIPv4           LinkType = 228\n\tLinkTypeIPv6           LinkType = 229\n)\n\n// PPPoECode is the PPPoE code enum, taken from http://tools.ietf.org/html/rfc2516\ntype PPPoECode uint8\n\nconst (\n\tPPPoECodePADI    PPPoECode = 0x09\n\tPPPoECodePADO    PPPoECode = 0x07\n\tPPPoECodePADR    PPPoECode = 0x19\n\tPPPoECodePADS    PPPoECode = 0x65\n\tPPPoECodePADT    PPPoECode = 0xA7\n\tPPPoECodeSession PPPoECode = 0x00\n)\n\n// PPPType is an enumeration of PPP type values, and acts as a decoder for any\n// type it supports.\ntype PPPType uint16\n\nconst (\n\tPPPTypeIPv4          PPPType = 0x0021\n\tPPPTypeIPv6          PPPType = 0x0057\n\tPPPTypeMPLSUnicast   PPPType = 0x0281\n\tPPPTypeMPLSMulticast PPPType = 0x0283\n)\n\n// SCTPChunkType is an enumeration of chunk types inside SCTP packets.\ntype SCTPChunkType uint8\n\nconst (\n\tSCTPChunkTypeData             SCTPChunkType = 0\n\tSCTPChunkTypeInit             SCTPChunkType = 1\n\tSCTPChunkTypeInitAck          SCTPChunkType = 2\n\tSCTPChunkTypeSack             SCTPChunkType = 3\n\tSCTPChunkTypeHeartbeat        SCTPChunkType = 4\n\tSCTPChunkTypeHeartbeatAck     SCTPChunkType = 5\n\tSCTPChunkTypeAbort            SCTPChunkType = 6\n\tSCTPChunkTypeShutdown         SCTPChunkType = 7\n\tSCTPChunkTypeShutdownAck      SCTPChunkType = 8\n\tSCTPChunkTypeError            SCTPChunkType = 9\n\tSCTPChunkTypeCookieEcho       SCTPChunkType = 10\n\tSCTPChunkTypeCookieAck        SCTPChunkType = 11\n\tSCTPChunkTypeShutdownComplete SCTPChunkType = 14\n)\n\n// FDDIFrameControl is an enumeration of FDDI frame control bytes.\ntype FDDIFrameControl uint8\n\nconst (\n\tFDDIFrameControlLLC FDDIFrameControl = 0x50\n)\n\n// EAPOLType is an enumeration of EAPOL packet types.\ntype EAPOLType uint8\n\nconst (\n\tEAPOLTypeEAP      EAPOLType = 0\n\tEAPOLTypeStart    EAPOLType = 1\n\tEAPOLTypeLogOff   EAPOLType = 2\n\tEAPOLTypeKey      EAPOLType = 3\n\tEAPOLTypeASFAlert EAPOLType = 4\n)\n\n// ProtocolFamily is the set of values defined as PF_* in sys/socket.h\ntype ProtocolFamily uint8\n\nconst (\n\tProtocolFamilyIPv4 ProtocolFamily = 2\n\t// BSDs use different values for INET6... glory be.  These values taken from\n\t// tcpdump 4.3.0.\n\tProtocolFamilyIPv6BSD     ProtocolFamily = 24\n\tProtocolFamilyIPv6FreeBSD ProtocolFamily = 28\n\tProtocolFamilyIPv6Darwin  ProtocolFamily = 30\n\tProtocolFamilyIPv6Linux   ProtocolFamily = 10\n)\n\n// Dot11Type is a combination of IEEE 802.11 frame's Type and Subtype fields.\n// By combining these two fields together into a single type, we're able to\n// provide a String function that correctly displays the subtype given the\n// top-level type.\n//\n// If you just care about the top-level type, use the MainType function.\ntype Dot11Type uint8\n\n// MainType strips the subtype information from the given type,\n// returning just the overarching type (Mgmt, Ctrl, Data, Reserved).\nfunc (d Dot11Type) MainType() Dot11Type {\n\treturn d & dot11TypeMask\n}\n\nfunc (d Dot11Type) QOS() bool {\n\treturn d&dot11QOSMask == Dot11TypeDataQOSData\n}\n\nconst (\n\tDot11TypeMgmt     Dot11Type = 0x00\n\tDot11TypeCtrl     Dot11Type = 0x01\n\tDot11TypeData     Dot11Type = 0x02\n\tDot11TypeReserved Dot11Type = 0x03\n\tdot11TypeMask               = 0x03\n\tdot11QOSMask                = 0x23\n\n\t// The following are type/subtype conglomerations.\n\n\t// Management\n\tDot11TypeMgmtAssociationReq    Dot11Type = 0x00\n\tDot11TypeMgmtAssociationResp   Dot11Type = 0x04\n\tDot11TypeMgmtReassociationReq  Dot11Type = 0x08\n\tDot11TypeMgmtReassociationResp Dot11Type = 0x0c\n\tDot11TypeMgmtProbeReq          Dot11Type = 0x10\n\tDot11TypeMgmtProbeResp         Dot11Type = 0x14\n\tDot11TypeMgmtMeasurementPilot  Dot11Type = 0x18\n\tDot11TypeMgmtBeacon            Dot11Type = 0x20\n\tDot11TypeMgmtATIM              Dot11Type = 0x24\n\tDot11TypeMgmtDisassociation    Dot11Type = 0x28\n\tDot11TypeMgmtAuthentication    Dot11Type = 0x2c\n\tDot11TypeMgmtDeauthentication  Dot11Type = 0x30\n\tDot11TypeMgmtAction            Dot11Type = 0x34\n\tDot11TypeMgmtActionNoAck       Dot11Type = 0x38\n\n\t// Control\n\tDot11TypeCtrlWrapper       Dot11Type = 0x1d\n\tDot11TypeCtrlBlockAckReq   Dot11Type = 0x21\n\tDot11TypeCtrlBlockAck      Dot11Type = 0x25\n\tDot11TypeCtrlPowersavePoll Dot11Type = 0x29\n\tDot11TypeCtrlRTS           Dot11Type = 0x2d\n\tDot11TypeCtrlCTS           Dot11Type = 0x31\n\tDot11TypeCtrlAck           Dot11Type = 0x35\n\tDot11TypeCtrlCFEnd         Dot11Type = 0x39\n\tDot11TypeCtrlCFEndAck      Dot11Type = 0x3d\n\n\t// Data\n\tDot11TypeDataCFAck              Dot11Type = 0x06\n\tDot11TypeDataCFPoll             Dot11Type = 0x0a\n\tDot11TypeDataCFAckPoll          Dot11Type = 0x0e\n\tDot11TypeDataNull               Dot11Type = 0x12\n\tDot11TypeDataCFAckNoData        Dot11Type = 0x16\n\tDot11TypeDataCFPollNoData       Dot11Type = 0x1a\n\tDot11TypeDataCFAckPollNoData    Dot11Type = 0x1e\n\tDot11TypeDataQOSData            Dot11Type = 0x22\n\tDot11TypeDataQOSDataCFAck       Dot11Type = 0x26\n\tDot11TypeDataQOSDataCFPoll      Dot11Type = 0x2a\n\tDot11TypeDataQOSDataCFAckPoll   Dot11Type = 0x2e\n\tDot11TypeDataQOSNull            Dot11Type = 0x32\n\tDot11TypeDataQOSCFPollNoData    Dot11Type = 0x3a\n\tDot11TypeDataQOSCFAckPollNoData Dot11Type = 0x3e\n)\n\n// Decode a raw v4 or v6 IP packet.\nfunc decodeIPv4or6(data []byte, p gopacket.PacketBuilder) error {\n\tversion := data[0] >> 4\n\tswitch version {\n\tcase 4:\n\t\treturn decodeIPv4(data, p)\n\tcase 6:\n\t\treturn decodeIPv6(data, p)\n\t}\n\treturn fmt.Errorf(\"Invalid IP packet version %v\", version)\n}\n\nfunc initActualTypeData() {\n\t// Each of the XXXTypeMetadata arrays contains mappings of how to handle enum\n\t// values for various enum types in gopacket/layers.\n\t// These arrays are actually created by gen2.go and stored in\n\t// enums_generated.go.\n\t//\n\t// So, EthernetTypeMetadata[2] contains information on how to handle EthernetType\n\t// 2, including which name to give it and which decoder to use to decode\n\t// packet data of that type.  These arrays are filled by default with all of the\n\t// protocols gopacket/layers knows how to handle, but users of the library can\n\t// add new decoders or override existing ones.  For example, if you write a better\n\t// TCP decoder, you can override IPProtocolMetadata[IPProtocolTCP].DecodeWith\n\t// with your new decoder, and all gopacket/layers decoding will use your new\n\t// decoder whenever they encounter that IPProtocol.\n\n\t// Here we link up all enumerations with their respective names and decoders.\n\tEthernetTypeMetadata[EthernetTypeLLC] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLLC), Name: \"LLC\", LayerType: LayerTypeLLC}\n\tEthernetTypeMetadata[EthernetTypeIPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: \"IPv4\", LayerType: LayerTypeIPv4}\n\tEthernetTypeMetadata[EthernetTypeIPv6] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: \"IPv6\", LayerType: LayerTypeIPv6}\n\tEthernetTypeMetadata[EthernetTypeARP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeARP), Name: \"ARP\", LayerType: LayerTypeARP}\n\tEthernetTypeMetadata[EthernetTypeDot1Q] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot1Q), Name: \"Dot1Q\", LayerType: LayerTypeDot1Q}\n\tEthernetTypeMetadata[EthernetTypePPP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPP), Name: \"PPP\", LayerType: LayerTypePPP}\n\tEthernetTypeMetadata[EthernetTypePPPoEDiscovery] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPPoE), Name: \"PPPoEDiscovery\", LayerType: LayerTypePPPoE}\n\tEthernetTypeMetadata[EthernetTypePPPoESession] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPPoE), Name: \"PPPoESession\", LayerType: LayerTypePPPoE}\n\tEthernetTypeMetadata[EthernetTypeEthernetCTP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEthernetCTP), Name: \"EthernetCTP\", LayerType: LayerTypeEthernetCTP}\n\tEthernetTypeMetadata[EthernetTypeCiscoDiscovery] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeCiscoDiscovery), Name: \"CiscoDiscovery\", LayerType: LayerTypeCiscoDiscovery}\n\tEthernetTypeMetadata[EthernetTypeNortelDiscovery] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeNortelDiscovery), Name: \"NortelDiscovery\", LayerType: LayerTypeNortelDiscovery}\n\tEthernetTypeMetadata[EthernetTypeLinkLayerDiscovery] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLinkLayerDiscovery), Name: \"LinkLayerDiscovery\", LayerType: LayerTypeLinkLayerDiscovery}\n\tEthernetTypeMetadata[EthernetTypeMPLSUnicast] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: \"MPLSUnicast\", LayerType: LayerTypeMPLS}\n\tEthernetTypeMetadata[EthernetTypeMPLSMulticast] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: \"MPLSMulticast\", LayerType: LayerTypeMPLS}\n\tEthernetTypeMetadata[EthernetTypeEAPOL] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEAPOL), Name: \"EAPOL\", LayerType: LayerTypeEAPOL}\n\tEthernetTypeMetadata[EthernetTypeQinQ] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot1Q), Name: \"Dot1Q\", LayerType: LayerTypeDot1Q}\n\tEthernetTypeMetadata[EthernetTypeTransparentEthernetBridging] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEthernet), Name: \"TransparentEthernetBridging\", LayerType: LayerTypeEthernet}\n\tEthernetTypeMetadata[EthernetTypeERSPAN] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeERSPANII), Name: \"ERSPAN Type II\", LayerType: LayerTypeERSPANII}\n\n\tIPProtocolMetadata[IPProtocolIPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: \"IPv4\", LayerType: LayerTypeIPv4}\n\tIPProtocolMetadata[IPProtocolTCP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeTCP), Name: \"TCP\", LayerType: LayerTypeTCP}\n\tIPProtocolMetadata[IPProtocolUDP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUDP), Name: \"UDP\", LayerType: LayerTypeUDP}\n\tIPProtocolMetadata[IPProtocolICMPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeICMPv4), Name: \"ICMPv4\", LayerType: LayerTypeICMPv4}\n\tIPProtocolMetadata[IPProtocolICMPv6] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeICMPv6), Name: \"ICMPv6\", LayerType: LayerTypeICMPv6}\n\tIPProtocolMetadata[IPProtocolSCTP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTP), Name: \"SCTP\", LayerType: LayerTypeSCTP}\n\tIPProtocolMetadata[IPProtocolIPv6] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: \"IPv6\", LayerType: LayerTypeIPv6}\n\tIPProtocolMetadata[IPProtocolIPIP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: \"IPv4\", LayerType: LayerTypeIPv4}\n\tIPProtocolMetadata[IPProtocolEtherIP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEtherIP), Name: \"EtherIP\", LayerType: LayerTypeEtherIP}\n\tIPProtocolMetadata[IPProtocolRUDP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeRUDP), Name: \"RUDP\", LayerType: LayerTypeRUDP}\n\tIPProtocolMetadata[IPProtocolGRE] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeGRE), Name: \"GRE\", LayerType: LayerTypeGRE}\n\tIPProtocolMetadata[IPProtocolIPv6HopByHop] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6HopByHop), Name: \"IPv6HopByHop\", LayerType: LayerTypeIPv6HopByHop}\n\tIPProtocolMetadata[IPProtocolIPv6Routing] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6Routing), Name: \"IPv6Routing\", LayerType: LayerTypeIPv6Routing}\n\tIPProtocolMetadata[IPProtocolIPv6Fragment] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6Fragment), Name: \"IPv6Fragment\", LayerType: LayerTypeIPv6Fragment}\n\tIPProtocolMetadata[IPProtocolIPv6Destination] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6Destination), Name: \"IPv6Destination\", LayerType: LayerTypeIPv6Destination}\n\tIPProtocolMetadata[IPProtocolOSPF] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeOSPF), Name: \"OSPF\", LayerType: LayerTypeOSPF}\n\tIPProtocolMetadata[IPProtocolAH] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPSecAH), Name: \"IPSecAH\", LayerType: LayerTypeIPSecAH}\n\tIPProtocolMetadata[IPProtocolESP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPSecESP), Name: \"IPSecESP\", LayerType: LayerTypeIPSecESP}\n\tIPProtocolMetadata[IPProtocolUDPLite] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUDPLite), Name: \"UDPLite\", LayerType: LayerTypeUDPLite}\n\tIPProtocolMetadata[IPProtocolMPLSInIP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: \"MPLS\", LayerType: LayerTypeMPLS}\n\tIPProtocolMetadata[IPProtocolNoNextHeader] = EnumMetadata{DecodeWith: gopacket.DecodePayload, Name: \"NoNextHeader\", LayerType: gopacket.LayerTypePayload}\n\tIPProtocolMetadata[IPProtocolIGMP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIGMP), Name: \"IGMP\", LayerType: LayerTypeIGMP}\n\tIPProtocolMetadata[IPProtocolVRRP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeVRRP), Name: \"VRRP\", LayerType: LayerTypeVRRP}\n\n\tSCTPChunkTypeMetadata[SCTPChunkTypeData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPData), Name: \"Data\"}\n\tSCTPChunkTypeMetadata[SCTPChunkTypeInit] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPInit), Name: \"Init\"}\n\tSCTPChunkTypeMetadata[SCTPChunkTypeInitAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPInit), Name: \"InitAck\"}\n\tSCTPChunkTypeMetadata[SCTPChunkTypeSack] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPSack), Name: \"Sack\"}\n\tSCTPChunkTypeMetadata[SCTPChunkTypeHeartbeat] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPHeartbeat), Name: \"Heartbeat\"}\n\tSCTPChunkTypeMetadata[SCTPChunkTypeHeartbeatAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPHeartbeat), Name: \"HeartbeatAck\"}\n\tSCTPChunkTypeMetadata[SCTPChunkTypeAbort] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPError), Name: \"Abort\"}\n\tSCTPChunkTypeMetadata[SCTPChunkTypeError] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPError), Name: \"Error\"}\n\tSCTPChunkTypeMetadata[SCTPChunkTypeShutdown] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPShutdown), Name: \"Shutdown\"}\n\tSCTPChunkTypeMetadata[SCTPChunkTypeShutdownAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPShutdownAck), Name: \"ShutdownAck\"}\n\tSCTPChunkTypeMetadata[SCTPChunkTypeCookieEcho] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPCookieEcho), Name: \"CookieEcho\"}\n\tSCTPChunkTypeMetadata[SCTPChunkTypeCookieAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPEmptyLayer), Name: \"CookieAck\"}\n\tSCTPChunkTypeMetadata[SCTPChunkTypeShutdownComplete] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPEmptyLayer), Name: \"ShutdownComplete\"}\n\n\tPPPTypeMetadata[PPPTypeIPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: \"IPv4\"}\n\tPPPTypeMetadata[PPPTypeIPv6] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: \"IPv6\"}\n\tPPPTypeMetadata[PPPTypeMPLSUnicast] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: \"MPLSUnicast\"}\n\tPPPTypeMetadata[PPPTypeMPLSMulticast] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: \"MPLSMulticast\"}\n\n\tPPPoECodeMetadata[PPPoECodeSession] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPP), Name: \"PPP\"}\n\n\tLinkTypeMetadata[LinkTypeEthernet] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEthernet), Name: \"Ethernet\"}\n\tLinkTypeMetadata[LinkTypePPP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPP), Name: \"PPP\"}\n\tLinkTypeMetadata[LinkTypeFDDI] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeFDDI), Name: \"FDDI\"}\n\tLinkTypeMetadata[LinkTypeNull] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLoopback), Name: \"Null\"}\n\tLinkTypeMetadata[LinkTypeIEEE802_11] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11), Name: \"Dot11\"}\n\tLinkTypeMetadata[LinkTypeLoop] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLoopback), Name: \"Loop\"}\n\tLinkTypeMetadata[LinkTypeIEEE802_11] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11), Name: \"802.11\"}\n\tLinkTypeMetadata[LinkTypeRaw] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4or6), Name: \"Raw\"}\n\t// See https://github.com/the-tcpdump-group/libpcap/blob/170f717e6e818cdc4bcbbfd906b63088eaa88fa0/pcap/dlt.h#L85\n\t// Or https://github.com/wireshark/wireshark/blob/854cfe53efe44080609c78053ecfb2342ad84a08/wiretap/pcap-common.c#L508\n\tif runtime.GOOS == \"openbsd\" {\n\t\tLinkTypeMetadata[14] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4or6), Name: \"Raw\"}\n\t} else {\n\t\tLinkTypeMetadata[12] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4or6), Name: \"Raw\"}\n\t}\n\tLinkTypeMetadata[LinkTypePFLog] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePFLog), Name: \"PFLog\"}\n\tLinkTypeMetadata[LinkTypeIEEE80211Radio] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeRadioTap), Name: \"RadioTap\"}\n\tLinkTypeMetadata[LinkTypeLinuxUSB] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSB), Name: \"USB\"}\n\tLinkTypeMetadata[LinkTypeLinuxSLL] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLinuxSLL), Name: \"Linux SLL\"}\n\tLinkTypeMetadata[LinkTypePrismHeader] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePrismHeader), Name: \"Prism\"}\n\n\tFDDIFrameControlMetadata[FDDIFrameControlLLC] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLLC), Name: \"LLC\"}\n\n\tEAPOLTypeMetadata[EAPOLTypeEAP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEAP), Name: \"EAP\", LayerType: LayerTypeEAP}\n\tEAPOLTypeMetadata[EAPOLTypeKey] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEAPOLKey), Name: \"EAPOLKey\", LayerType: LayerTypeEAPOLKey}\n\n\tProtocolFamilyMetadata[ProtocolFamilyIPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: \"IPv4\", LayerType: LayerTypeIPv4}\n\tProtocolFamilyMetadata[ProtocolFamilyIPv6BSD] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: \"IPv6\", LayerType: LayerTypeIPv6}\n\tProtocolFamilyMetadata[ProtocolFamilyIPv6FreeBSD] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: \"IPv6\", LayerType: LayerTypeIPv6}\n\tProtocolFamilyMetadata[ProtocolFamilyIPv6Darwin] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: \"IPv6\", LayerType: LayerTypeIPv6}\n\tProtocolFamilyMetadata[ProtocolFamilyIPv6Linux] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: \"IPv6\", LayerType: LayerTypeIPv6}\n\n\tDot11TypeMetadata[Dot11TypeMgmtAssociationReq] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtAssociationReq), Name: \"MgmtAssociationReq\", LayerType: LayerTypeDot11MgmtAssociationReq}\n\tDot11TypeMetadata[Dot11TypeMgmtAssociationResp] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtAssociationResp), Name: \"MgmtAssociationResp\", LayerType: LayerTypeDot11MgmtAssociationResp}\n\tDot11TypeMetadata[Dot11TypeMgmtReassociationReq] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtReassociationReq), Name: \"MgmtReassociationReq\", LayerType: LayerTypeDot11MgmtReassociationReq}\n\tDot11TypeMetadata[Dot11TypeMgmtReassociationResp] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtReassociationResp), Name: \"MgmtReassociationResp\", LayerType: LayerTypeDot11MgmtReassociationResp}\n\tDot11TypeMetadata[Dot11TypeMgmtProbeReq] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtProbeReq), Name: \"MgmtProbeReq\", LayerType: LayerTypeDot11MgmtProbeReq}\n\tDot11TypeMetadata[Dot11TypeMgmtProbeResp] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtProbeResp), Name: \"MgmtProbeResp\", LayerType: LayerTypeDot11MgmtProbeResp}\n\tDot11TypeMetadata[Dot11TypeMgmtMeasurementPilot] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtMeasurementPilot), Name: \"MgmtMeasurementPilot\", LayerType: LayerTypeDot11MgmtMeasurementPilot}\n\tDot11TypeMetadata[Dot11TypeMgmtBeacon] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtBeacon), Name: \"MgmtBeacon\", LayerType: LayerTypeDot11MgmtBeacon}\n\tDot11TypeMetadata[Dot11TypeMgmtATIM] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtATIM), Name: \"MgmtATIM\", LayerType: LayerTypeDot11MgmtATIM}\n\tDot11TypeMetadata[Dot11TypeMgmtDisassociation] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtDisassociation), Name: \"MgmtDisassociation\", LayerType: LayerTypeDot11MgmtDisassociation}\n\tDot11TypeMetadata[Dot11TypeMgmtAuthentication] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtAuthentication), Name: \"MgmtAuthentication\", LayerType: LayerTypeDot11MgmtAuthentication}\n\tDot11TypeMetadata[Dot11TypeMgmtDeauthentication] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtDeauthentication), Name: \"MgmtDeauthentication\", LayerType: LayerTypeDot11MgmtDeauthentication}\n\tDot11TypeMetadata[Dot11TypeMgmtAction] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtAction), Name: \"MgmtAction\", LayerType: LayerTypeDot11MgmtAction}\n\tDot11TypeMetadata[Dot11TypeMgmtActionNoAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtActionNoAck), Name: \"MgmtActionNoAck\", LayerType: LayerTypeDot11MgmtActionNoAck}\n\tDot11TypeMetadata[Dot11TypeCtrl] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11Ctrl), Name: \"Ctrl\", LayerType: LayerTypeDot11Ctrl}\n\tDot11TypeMetadata[Dot11TypeCtrlWrapper] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11Ctrl), Name: \"CtrlWrapper\", LayerType: LayerTypeDot11Ctrl}\n\tDot11TypeMetadata[Dot11TypeCtrlBlockAckReq] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlBlockAckReq), Name: \"CtrlBlockAckReq\", LayerType: LayerTypeDot11CtrlBlockAckReq}\n\tDot11TypeMetadata[Dot11TypeCtrlBlockAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlBlockAck), Name: \"CtrlBlockAck\", LayerType: LayerTypeDot11CtrlBlockAck}\n\tDot11TypeMetadata[Dot11TypeCtrlPowersavePoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlPowersavePoll), Name: \"CtrlPowersavePoll\", LayerType: LayerTypeDot11CtrlPowersavePoll}\n\tDot11TypeMetadata[Dot11TypeCtrlRTS] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlRTS), Name: \"CtrlRTS\", LayerType: LayerTypeDot11CtrlRTS}\n\tDot11TypeMetadata[Dot11TypeCtrlCTS] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlCTS), Name: \"CtrlCTS\", LayerType: LayerTypeDot11CtrlCTS}\n\tDot11TypeMetadata[Dot11TypeCtrlAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlAck), Name: \"CtrlAck\", LayerType: LayerTypeDot11CtrlAck}\n\tDot11TypeMetadata[Dot11TypeCtrlCFEnd] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlCFEnd), Name: \"CtrlCFEnd\", LayerType: LayerTypeDot11CtrlCFEnd}\n\tDot11TypeMetadata[Dot11TypeCtrlCFEndAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlCFEndAck), Name: \"CtrlCFEndAck\", LayerType: LayerTypeDot11CtrlCFEndAck}\n\tDot11TypeMetadata[Dot11TypeData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11Data), Name: \"Data\", LayerType: LayerTypeDot11Data}\n\tDot11TypeMetadata[Dot11TypeDataCFAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFAck), Name: \"DataCFAck\", LayerType: LayerTypeDot11DataCFAck}\n\tDot11TypeMetadata[Dot11TypeDataCFPoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFPoll), Name: \"DataCFPoll\", LayerType: LayerTypeDot11DataCFPoll}\n\tDot11TypeMetadata[Dot11TypeDataCFAckPoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFAckPoll), Name: \"DataCFAckPoll\", LayerType: LayerTypeDot11DataCFAckPoll}\n\tDot11TypeMetadata[Dot11TypeDataNull] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataNull), Name: \"DataNull\", LayerType: LayerTypeDot11DataNull}\n\tDot11TypeMetadata[Dot11TypeDataCFAckNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFAckNoData), Name: \"DataCFAckNoData\", LayerType: LayerTypeDot11DataCFAckNoData}\n\tDot11TypeMetadata[Dot11TypeDataCFPollNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFPollNoData), Name: \"DataCFPollNoData\", LayerType: LayerTypeDot11DataCFPollNoData}\n\tDot11TypeMetadata[Dot11TypeDataCFAckPollNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFAckPollNoData), Name: \"DataCFAckPollNoData\", LayerType: LayerTypeDot11DataCFAckPollNoData}\n\tDot11TypeMetadata[Dot11TypeDataQOSData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSData), Name: \"DataQOSData\", LayerType: LayerTypeDot11DataQOSData}\n\tDot11TypeMetadata[Dot11TypeDataQOSDataCFAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSDataCFAck), Name: \"DataQOSDataCFAck\", LayerType: LayerTypeDot11DataQOSDataCFAck}\n\tDot11TypeMetadata[Dot11TypeDataQOSDataCFPoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSDataCFPoll), Name: \"DataQOSDataCFPoll\", LayerType: LayerTypeDot11DataQOSDataCFPoll}\n\tDot11TypeMetadata[Dot11TypeDataQOSDataCFAckPoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSDataCFAckPoll), Name: \"DataQOSDataCFAckPoll\", LayerType: LayerTypeDot11DataQOSDataCFAckPoll}\n\tDot11TypeMetadata[Dot11TypeDataQOSNull] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSNull), Name: \"DataQOSNull\", LayerType: LayerTypeDot11DataQOSNull}\n\tDot11TypeMetadata[Dot11TypeDataQOSCFPollNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSCFPollNoData), Name: \"DataQOSCFPollNoData\", LayerType: LayerTypeDot11DataQOSCFPollNoData}\n\tDot11TypeMetadata[Dot11TypeDataQOSCFAckPollNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSCFAckPollNoData), Name: \"DataQOSCFAckPollNoData\", LayerType: LayerTypeDot11DataQOSCFAckPollNoData}\n\n\tUSBTransportTypeMetadata[USBTransportTypeInterrupt] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSBInterrupt), Name: \"Interrupt\", LayerType: LayerTypeUSBInterrupt}\n\tUSBTransportTypeMetadata[USBTransportTypeControl] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSBControl), Name: \"Control\", LayerType: LayerTypeUSBControl}\n\tUSBTransportTypeMetadata[USBTransportTypeBulk] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSBBulk), Name: \"Bulk\", LayerType: LayerTypeUSBBulk}\n}\n"
  },
  {
    "path": "layers/enums_generated.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n\npackage layers\n\n// Created by gen2.go, don't edit manually\n// Generated at 2017-10-23 10:20:24.458771856 -0600 MDT m=+0.001159033\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc init() {\n\tinitUnknownTypesForLinkType()\n\tinitUnknownTypesForEthernetType()\n\tinitUnknownTypesForPPPType()\n\tinitUnknownTypesForIPProtocol()\n\tinitUnknownTypesForSCTPChunkType()\n\tinitUnknownTypesForPPPoECode()\n\tinitUnknownTypesForFDDIFrameControl()\n\tinitUnknownTypesForEAPOLType()\n\tinitUnknownTypesForProtocolFamily()\n\tinitUnknownTypesForDot11Type()\n\tinitUnknownTypesForUSBTransportType()\n\tinitActualTypeData()\n}\n\n// Decoder calls LinkTypeMetadata.DecodeWith's decoder.\nfunc (a LinkType) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn LinkTypeMetadata[a].DecodeWith.Decode(data, p)\n}\n\n// String returns LinkTypeMetadata.Name.\nfunc (a LinkType) String() string {\n\treturn LinkTypeMetadata[a].Name\n}\n\n// LayerType returns LinkTypeMetadata.LayerType.\nfunc (a LinkType) LayerType() gopacket.LayerType {\n\treturn LinkTypeMetadata[a].LayerType\n}\n\ntype errorDecoderForLinkType int\n\nfunc (a *errorDecoderForLinkType) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn a\n}\nfunc (a *errorDecoderForLinkType) Error() string {\n\treturn fmt.Sprintf(\"Unable to decode LinkType %d\", int(*a))\n}\n\nvar errorDecodersForLinkType [256]errorDecoderForLinkType\nvar LinkTypeMetadata [256]EnumMetadata\n\nfunc initUnknownTypesForLinkType() {\n\tfor i := 0; i < 256; i++ {\n\t\terrorDecodersForLinkType[i] = errorDecoderForLinkType(i)\n\t\tLinkTypeMetadata[i] = EnumMetadata{\n\t\t\tDecodeWith: &errorDecodersForLinkType[i],\n\t\t\tName:       \"UnknownLinkType\",\n\t\t}\n\t}\n}\n\n// Decoder calls EthernetTypeMetadata.DecodeWith's decoder.\nfunc (a EthernetType) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn EthernetTypeMetadata[a].DecodeWith.Decode(data, p)\n}\n\n// String returns EthernetTypeMetadata.Name.\nfunc (a EthernetType) String() string {\n\treturn EthernetTypeMetadata[a].Name\n}\n\n// LayerType returns EthernetTypeMetadata.LayerType.\nfunc (a EthernetType) LayerType() gopacket.LayerType {\n\treturn EthernetTypeMetadata[a].LayerType\n}\n\ntype errorDecoderForEthernetType int\n\nfunc (a *errorDecoderForEthernetType) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn a\n}\nfunc (a *errorDecoderForEthernetType) Error() string {\n\treturn fmt.Sprintf(\"Unable to decode EthernetType %d\", int(*a))\n}\n\nvar errorDecodersForEthernetType [65536]errorDecoderForEthernetType\nvar EthernetTypeMetadata [65536]EnumMetadata\n\nfunc initUnknownTypesForEthernetType() {\n\tfor i := 0; i < 65536; i++ {\n\t\terrorDecodersForEthernetType[i] = errorDecoderForEthernetType(i)\n\t\tEthernetTypeMetadata[i] = EnumMetadata{\n\t\t\tDecodeWith: &errorDecodersForEthernetType[i],\n\t\t\tName:       \"UnknownEthernetType\",\n\t\t}\n\t}\n}\n\n// Decoder calls PPPTypeMetadata.DecodeWith's decoder.\nfunc (a PPPType) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn PPPTypeMetadata[a].DecodeWith.Decode(data, p)\n}\n\n// String returns PPPTypeMetadata.Name.\nfunc (a PPPType) String() string {\n\treturn PPPTypeMetadata[a].Name\n}\n\n// LayerType returns PPPTypeMetadata.LayerType.\nfunc (a PPPType) LayerType() gopacket.LayerType {\n\treturn PPPTypeMetadata[a].LayerType\n}\n\ntype errorDecoderForPPPType int\n\nfunc (a *errorDecoderForPPPType) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn a\n}\nfunc (a *errorDecoderForPPPType) Error() string {\n\treturn fmt.Sprintf(\"Unable to decode PPPType %d\", int(*a))\n}\n\nvar errorDecodersForPPPType [65536]errorDecoderForPPPType\nvar PPPTypeMetadata [65536]EnumMetadata\n\nfunc initUnknownTypesForPPPType() {\n\tfor i := 0; i < 65536; i++ {\n\t\terrorDecodersForPPPType[i] = errorDecoderForPPPType(i)\n\t\tPPPTypeMetadata[i] = EnumMetadata{\n\t\t\tDecodeWith: &errorDecodersForPPPType[i],\n\t\t\tName:       \"UnknownPPPType\",\n\t\t}\n\t}\n}\n\n// Decoder calls IPProtocolMetadata.DecodeWith's decoder.\nfunc (a IPProtocol) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn IPProtocolMetadata[a].DecodeWith.Decode(data, p)\n}\n\n// String returns IPProtocolMetadata.Name.\nfunc (a IPProtocol) String() string {\n\treturn IPProtocolMetadata[a].Name\n}\n\n// LayerType returns IPProtocolMetadata.LayerType.\nfunc (a IPProtocol) LayerType() gopacket.LayerType {\n\treturn IPProtocolMetadata[a].LayerType\n}\n\ntype errorDecoderForIPProtocol int\n\nfunc (a *errorDecoderForIPProtocol) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn a\n}\nfunc (a *errorDecoderForIPProtocol) Error() string {\n\treturn fmt.Sprintf(\"Unable to decode IPProtocol %d\", int(*a))\n}\n\nvar errorDecodersForIPProtocol [256]errorDecoderForIPProtocol\nvar IPProtocolMetadata [256]EnumMetadata\n\nfunc initUnknownTypesForIPProtocol() {\n\tfor i := 0; i < 256; i++ {\n\t\terrorDecodersForIPProtocol[i] = errorDecoderForIPProtocol(i)\n\t\tIPProtocolMetadata[i] = EnumMetadata{\n\t\t\tDecodeWith: &errorDecodersForIPProtocol[i],\n\t\t\tName:       \"UnknownIPProtocol\",\n\t\t}\n\t}\n}\n\n// Decoder calls SCTPChunkTypeMetadata.DecodeWith's decoder.\nfunc (a SCTPChunkType) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn SCTPChunkTypeMetadata[a].DecodeWith.Decode(data, p)\n}\n\n// String returns SCTPChunkTypeMetadata.Name.\nfunc (a SCTPChunkType) String() string {\n\treturn SCTPChunkTypeMetadata[a].Name\n}\n\n// LayerType returns SCTPChunkTypeMetadata.LayerType.\nfunc (a SCTPChunkType) LayerType() gopacket.LayerType {\n\treturn SCTPChunkTypeMetadata[a].LayerType\n}\n\ntype errorDecoderForSCTPChunkType int\n\nfunc (a *errorDecoderForSCTPChunkType) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn a\n}\nfunc (a *errorDecoderForSCTPChunkType) Error() string {\n\treturn fmt.Sprintf(\"Unable to decode SCTPChunkType %d\", int(*a))\n}\n\nvar errorDecodersForSCTPChunkType [256]errorDecoderForSCTPChunkType\nvar SCTPChunkTypeMetadata [256]EnumMetadata\n\nfunc initUnknownTypesForSCTPChunkType() {\n\tfor i := 0; i < 256; i++ {\n\t\terrorDecodersForSCTPChunkType[i] = errorDecoderForSCTPChunkType(i)\n\t\tSCTPChunkTypeMetadata[i] = EnumMetadata{\n\t\t\tDecodeWith: &errorDecodersForSCTPChunkType[i],\n\t\t\tName:       \"UnknownSCTPChunkType\",\n\t\t}\n\t}\n}\n\n// Decoder calls PPPoECodeMetadata.DecodeWith's decoder.\nfunc (a PPPoECode) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn PPPoECodeMetadata[a].DecodeWith.Decode(data, p)\n}\n\n// String returns PPPoECodeMetadata.Name.\nfunc (a PPPoECode) String() string {\n\treturn PPPoECodeMetadata[a].Name\n}\n\n// LayerType returns PPPoECodeMetadata.LayerType.\nfunc (a PPPoECode) LayerType() gopacket.LayerType {\n\treturn PPPoECodeMetadata[a].LayerType\n}\n\ntype errorDecoderForPPPoECode int\n\nfunc (a *errorDecoderForPPPoECode) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn a\n}\nfunc (a *errorDecoderForPPPoECode) Error() string {\n\treturn fmt.Sprintf(\"Unable to decode PPPoECode %d\", int(*a))\n}\n\nvar errorDecodersForPPPoECode [256]errorDecoderForPPPoECode\nvar PPPoECodeMetadata [256]EnumMetadata\n\nfunc initUnknownTypesForPPPoECode() {\n\tfor i := 0; i < 256; i++ {\n\t\terrorDecodersForPPPoECode[i] = errorDecoderForPPPoECode(i)\n\t\tPPPoECodeMetadata[i] = EnumMetadata{\n\t\t\tDecodeWith: &errorDecodersForPPPoECode[i],\n\t\t\tName:       \"UnknownPPPoECode\",\n\t\t}\n\t}\n}\n\n// Decoder calls FDDIFrameControlMetadata.DecodeWith's decoder.\nfunc (a FDDIFrameControl) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn FDDIFrameControlMetadata[a].DecodeWith.Decode(data, p)\n}\n\n// String returns FDDIFrameControlMetadata.Name.\nfunc (a FDDIFrameControl) String() string {\n\treturn FDDIFrameControlMetadata[a].Name\n}\n\n// LayerType returns FDDIFrameControlMetadata.LayerType.\nfunc (a FDDIFrameControl) LayerType() gopacket.LayerType {\n\treturn FDDIFrameControlMetadata[a].LayerType\n}\n\ntype errorDecoderForFDDIFrameControl int\n\nfunc (a *errorDecoderForFDDIFrameControl) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn a\n}\nfunc (a *errorDecoderForFDDIFrameControl) Error() string {\n\treturn fmt.Sprintf(\"Unable to decode FDDIFrameControl %d\", int(*a))\n}\n\nvar errorDecodersForFDDIFrameControl [256]errorDecoderForFDDIFrameControl\nvar FDDIFrameControlMetadata [256]EnumMetadata\n\nfunc initUnknownTypesForFDDIFrameControl() {\n\tfor i := 0; i < 256; i++ {\n\t\terrorDecodersForFDDIFrameControl[i] = errorDecoderForFDDIFrameControl(i)\n\t\tFDDIFrameControlMetadata[i] = EnumMetadata{\n\t\t\tDecodeWith: &errorDecodersForFDDIFrameControl[i],\n\t\t\tName:       \"UnknownFDDIFrameControl\",\n\t\t}\n\t}\n}\n\n// Decoder calls EAPOLTypeMetadata.DecodeWith's decoder.\nfunc (a EAPOLType) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn EAPOLTypeMetadata[a].DecodeWith.Decode(data, p)\n}\n\n// String returns EAPOLTypeMetadata.Name.\nfunc (a EAPOLType) String() string {\n\treturn EAPOLTypeMetadata[a].Name\n}\n\n// LayerType returns EAPOLTypeMetadata.LayerType.\nfunc (a EAPOLType) LayerType() gopacket.LayerType {\n\treturn EAPOLTypeMetadata[a].LayerType\n}\n\ntype errorDecoderForEAPOLType int\n\nfunc (a *errorDecoderForEAPOLType) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn a\n}\nfunc (a *errorDecoderForEAPOLType) Error() string {\n\treturn fmt.Sprintf(\"Unable to decode EAPOLType %d\", int(*a))\n}\n\nvar errorDecodersForEAPOLType [256]errorDecoderForEAPOLType\nvar EAPOLTypeMetadata [256]EnumMetadata\n\nfunc initUnknownTypesForEAPOLType() {\n\tfor i := 0; i < 256; i++ {\n\t\terrorDecodersForEAPOLType[i] = errorDecoderForEAPOLType(i)\n\t\tEAPOLTypeMetadata[i] = EnumMetadata{\n\t\t\tDecodeWith: &errorDecodersForEAPOLType[i],\n\t\t\tName:       \"UnknownEAPOLType\",\n\t\t}\n\t}\n}\n\n// Decoder calls ProtocolFamilyMetadata.DecodeWith's decoder.\nfunc (a ProtocolFamily) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn ProtocolFamilyMetadata[a].DecodeWith.Decode(data, p)\n}\n\n// String returns ProtocolFamilyMetadata.Name.\nfunc (a ProtocolFamily) String() string {\n\treturn ProtocolFamilyMetadata[a].Name\n}\n\n// LayerType returns ProtocolFamilyMetadata.LayerType.\nfunc (a ProtocolFamily) LayerType() gopacket.LayerType {\n\treturn ProtocolFamilyMetadata[a].LayerType\n}\n\ntype errorDecoderForProtocolFamily int\n\nfunc (a *errorDecoderForProtocolFamily) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn a\n}\nfunc (a *errorDecoderForProtocolFamily) Error() string {\n\treturn fmt.Sprintf(\"Unable to decode ProtocolFamily %d\", int(*a))\n}\n\nvar errorDecodersForProtocolFamily [256]errorDecoderForProtocolFamily\nvar ProtocolFamilyMetadata [256]EnumMetadata\n\nfunc initUnknownTypesForProtocolFamily() {\n\tfor i := 0; i < 256; i++ {\n\t\terrorDecodersForProtocolFamily[i] = errorDecoderForProtocolFamily(i)\n\t\tProtocolFamilyMetadata[i] = EnumMetadata{\n\t\t\tDecodeWith: &errorDecodersForProtocolFamily[i],\n\t\t\tName:       \"UnknownProtocolFamily\",\n\t\t}\n\t}\n}\n\n// Decoder calls Dot11TypeMetadata.DecodeWith's decoder.\nfunc (a Dot11Type) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn Dot11TypeMetadata[a].DecodeWith.Decode(data, p)\n}\n\n// String returns Dot11TypeMetadata.Name.\nfunc (a Dot11Type) String() string {\n\treturn Dot11TypeMetadata[a].Name\n}\n\n// LayerType returns Dot11TypeMetadata.LayerType.\nfunc (a Dot11Type) LayerType() gopacket.LayerType {\n\treturn Dot11TypeMetadata[a].LayerType\n}\n\ntype errorDecoderForDot11Type int\n\nfunc (a *errorDecoderForDot11Type) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn a\n}\nfunc (a *errorDecoderForDot11Type) Error() string {\n\treturn fmt.Sprintf(\"Unable to decode Dot11Type %d\", int(*a))\n}\n\nvar errorDecodersForDot11Type [256]errorDecoderForDot11Type\nvar Dot11TypeMetadata [256]EnumMetadata\n\nfunc initUnknownTypesForDot11Type() {\n\tfor i := 0; i < 256; i++ {\n\t\terrorDecodersForDot11Type[i] = errorDecoderForDot11Type(i)\n\t\tDot11TypeMetadata[i] = EnumMetadata{\n\t\t\tDecodeWith: &errorDecodersForDot11Type[i],\n\t\t\tName:       \"UnknownDot11Type\",\n\t\t}\n\t}\n}\n\n// Decoder calls USBTransportTypeMetadata.DecodeWith's decoder.\nfunc (a USBTransportType) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn USBTransportTypeMetadata[a].DecodeWith.Decode(data, p)\n}\n\n// String returns USBTransportTypeMetadata.Name.\nfunc (a USBTransportType) String() string {\n\treturn USBTransportTypeMetadata[a].Name\n}\n\n// LayerType returns USBTransportTypeMetadata.LayerType.\nfunc (a USBTransportType) LayerType() gopacket.LayerType {\n\treturn USBTransportTypeMetadata[a].LayerType\n}\n\ntype errorDecoderForUSBTransportType int\n\nfunc (a *errorDecoderForUSBTransportType) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn a\n}\nfunc (a *errorDecoderForUSBTransportType) Error() string {\n\treturn fmt.Sprintf(\"Unable to decode USBTransportType %d\", int(*a))\n}\n\nvar errorDecodersForUSBTransportType [256]errorDecoderForUSBTransportType\nvar USBTransportTypeMetadata [256]EnumMetadata\n\nfunc initUnknownTypesForUSBTransportType() {\n\tfor i := 0; i < 256; i++ {\n\t\terrorDecodersForUSBTransportType[i] = errorDecoderForUSBTransportType(i)\n\t\tUSBTransportTypeMetadata[i] = EnumMetadata{\n\t\t\tDecodeWith: &errorDecodersForUSBTransportType[i],\n\t\t\tName:       \"UnknownUSBTransportType\",\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "layers/erspan2.go",
    "content": "// Copyright 2018 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\n\t\"github.com/google/gopacket\"\n)\n\nconst (\n\t//ERSPANIIVersionObsolete - The obsolete value for the version field\n\tERSPANIIVersionObsolete = 0x0\n\t// ERSPANIIVersion - The current value for the version field\n\tERSPANIIVersion = 0x1\n)\n\n// ERSPANII contains all of the fields found in an ERSPAN Type II header\n// https://tools.ietf.org/html/draft-foschiano-erspan-03\ntype ERSPANII struct {\n\tBaseLayer\n\tIsTruncated                         bool\n\tVersion, CoS, TrunkEncap            uint8\n\tVLANIdentifier, SessionID, Reserved uint16\n\tIndex                               uint32\n}\n\nfunc (erspan2 *ERSPANII) LayerType() gopacket.LayerType { return LayerTypeERSPANII }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (erspan2 *ERSPANII) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\terspan2Length := 8\n\terspan2.Version = data[0] & 0xF0 >> 4\n\terspan2.VLANIdentifier = binary.BigEndian.Uint16(data[:2]) & 0x0FFF\n\terspan2.CoS = data[2] & 0xE0 >> 5\n\terspan2.TrunkEncap = data[2] & 0x18 >> 3\n\terspan2.IsTruncated = data[2]&0x4>>2 != 0\n\terspan2.SessionID = binary.BigEndian.Uint16(data[2:4]) & 0x03FF\n\terspan2.Reserved = binary.BigEndian.Uint16(data[4:6]) & 0xFFF0 >> 4\n\terspan2.Index = binary.BigEndian.Uint32(data[4:8]) & 0x000FFFFF\n\terspan2.Contents = data[:erspan2Length]\n\terspan2.Payload = data[erspan2Length:]\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (erspan2 *ERSPANII) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbytes, err := b.PrependBytes(8)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\ttwoByteInt := uint16(erspan2.Version&0xF)<<12 | erspan2.VLANIdentifier&0x0FFF\n\tbinary.BigEndian.PutUint16(bytes, twoByteInt)\n\n\ttwoByteInt = uint16(erspan2.CoS&0x7)<<13 | uint16(erspan2.TrunkEncap&0x3)<<11 | erspan2.SessionID&0x03FF\n\tif erspan2.IsTruncated {\n\t\ttwoByteInt |= 0x400\n\t}\n\tbinary.BigEndian.PutUint16(bytes[2:], twoByteInt)\n\n\tfourByteInt := uint32(erspan2.Reserved&0x0FFF)<<20 | erspan2.Index&0x000FFFFF\n\tbinary.BigEndian.PutUint32(bytes[4:], fourByteInt)\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (erspan2 *ERSPANII) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeERSPANII\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (erspan2 *ERSPANII) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeEthernet\n}\n\nfunc decodeERSPANII(data []byte, p gopacket.PacketBuilder) error {\n\terspan2 := &ERSPANII{}\n\treturn decodingLayerDecoder(erspan2, data, p)\n}\n"
  },
  {
    "path": "layers/erspan2_test.go",
    "content": "// Copyright 2018 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\npackage layers\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc TestDecodeAndEncode(t *testing.T) {\n\terspan := &ERSPANII{\n\t\tVersion:        ERSPANIIVersion,\n\t\tVLANIdentifier: 0x2aa,\n\t\tCoS:            0x4,\n\t\tTrunkEncap:     0x2,\n\t\tIsTruncated:    true,\n\t\tSessionID:      0x2aa,\n\t\tReserved:       0x155,\n\t\tIndex:          0xF0F0F,\n\t}\n\texpectedBytes := []byte{0x12, 0xaa, 0x96, 0xaa, 0x15, 0x5F, 0x0F, 0x0F}\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{}\n\terspan.SerializeTo(buf, opts)\n\n\tif !reflect.DeepEqual(buf.Bytes(), expectedBytes) {\n\t\tt.Fatalf(\"Got %+v, expected %+v\\n\", buf.Bytes(), expectedBytes)\n\t}\n\n\terspan2 := &ERSPANII{}\n\terspan2.DecodeFromBytes(buf.Bytes(), gopacket.NilDecodeFeedback)\n\tif erspan.Version != erspan2.Version {\n\t\tt.Fatalf(\"Got %+v, expected %+v\\n\", erspan2.Version, erspan.Version)\n\t}\n\tif erspan.VLANIdentifier != erspan2.VLANIdentifier {\n\t\tt.Fatalf(\"Got %+v, expected %+v\\n\", erspan2.VLANIdentifier, erspan.VLANIdentifier)\n\t}\n\tif erspan.CoS != erspan2.CoS {\n\t\tt.Fatalf(\"Got %+v, expected %+v\\n\", erspan2.CoS, erspan.CoS)\n\t}\n\tif erspan.TrunkEncap != erspan2.TrunkEncap {\n\t\tt.Fatalf(\"Got %+v, expected %+v\\n\", erspan2.TrunkEncap, erspan.TrunkEncap)\n\t}\n\tif erspan.IsTruncated != erspan2.IsTruncated {\n\t\tt.Fatalf(\"Got %+v, expected %+v\\n\", erspan2.IsTruncated, erspan.IsTruncated)\n\t}\n\tif erspan.SessionID != erspan2.SessionID {\n\t\tt.Fatalf(\"Got %+v, expected %+v\\n\", erspan2.SessionID, erspan.SessionID)\n\t}\n\tif erspan.Reserved != erspan2.Reserved {\n\t\tt.Fatalf(\"Got %+v, expected %+v\\n\", erspan2.Reserved, erspan.Reserved)\n\t}\n}\n"
  },
  {
    "path": "layers/etherip.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"github.com/google/gopacket\"\n)\n\n// EtherIP is the struct for storing RFC 3378 EtherIP packet headers.\ntype EtherIP struct {\n\tBaseLayer\n\tVersion  uint8\n\tReserved uint16\n}\n\n// LayerType returns gopacket.LayerTypeEtherIP.\nfunc (e *EtherIP) LayerType() gopacket.LayerType { return LayerTypeEtherIP }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (e *EtherIP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\te.Version = data[0] >> 4\n\te.Reserved = binary.BigEndian.Uint16(data[:2]) & 0x0fff\n\te.BaseLayer = BaseLayer{data[:2], data[2:]}\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (e *EtherIP) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeEtherIP\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (e *EtherIP) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeEthernet\n}\n\nfunc decodeEtherIP(data []byte, p gopacket.PacketBuilder) error {\n\te := &EtherIP{}\n\treturn decodingLayerDecoder(e, data, p)\n}\n"
  },
  {
    "path": "layers/ethernet.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/google/gopacket\"\n\t\"net\"\n)\n\n// EthernetBroadcast is the broadcast MAC address used by Ethernet.\nvar EthernetBroadcast = net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}\n\n// Ethernet is the layer for Ethernet frame headers.\ntype Ethernet struct {\n\tBaseLayer\n\tSrcMAC, DstMAC net.HardwareAddr\n\tEthernetType   EthernetType\n\t// Length is only set if a length field exists within this header.  Ethernet\n\t// headers follow two different standards, one that uses an EthernetType, the\n\t// other which defines a length the follows with a LLC header (802.3).  If the\n\t// former is the case, we set EthernetType and Length stays 0.  In the latter\n\t// case, we set Length and EthernetType = EthernetTypeLLC.\n\tLength uint16\n}\n\n// LayerType returns LayerTypeEthernet\nfunc (e *Ethernet) LayerType() gopacket.LayerType { return LayerTypeEthernet }\n\nfunc (e *Ethernet) LinkFlow() gopacket.Flow {\n\treturn gopacket.NewFlow(EndpointMAC, e.SrcMAC, e.DstMAC)\n}\n\nfunc (eth *Ethernet) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 14 {\n\t\treturn errors.New(\"Ethernet packet too small\")\n\t}\n\teth.DstMAC = net.HardwareAddr(data[0:6])\n\teth.SrcMAC = net.HardwareAddr(data[6:12])\n\teth.EthernetType = EthernetType(binary.BigEndian.Uint16(data[12:14]))\n\teth.BaseLayer = BaseLayer{data[:14], data[14:]}\n\teth.Length = 0\n\tif eth.EthernetType < 0x0600 {\n\t\teth.Length = uint16(eth.EthernetType)\n\t\teth.EthernetType = EthernetTypeLLC\n\t\tif cmp := len(eth.Payload) - int(eth.Length); cmp < 0 {\n\t\t\tdf.SetTruncated()\n\t\t} else if cmp > 0 {\n\t\t\t// Strip off bytes at the end, since we have too many bytes\n\t\t\teth.Payload = eth.Payload[:len(eth.Payload)-cmp]\n\t\t}\n\t\t//\tfmt.Println(eth)\n\t}\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (eth *Ethernet) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tif len(eth.DstMAC) != 6 {\n\t\treturn fmt.Errorf(\"invalid dst MAC: %v\", eth.DstMAC)\n\t}\n\tif len(eth.SrcMAC) != 6 {\n\t\treturn fmt.Errorf(\"invalid src MAC: %v\", eth.SrcMAC)\n\t}\n\tpayload := b.Bytes()\n\tbytes, err := b.PrependBytes(14)\n\tif err != nil {\n\t\treturn err\n\t}\n\tcopy(bytes, eth.DstMAC)\n\tcopy(bytes[6:], eth.SrcMAC)\n\tif eth.Length != 0 || eth.EthernetType == EthernetTypeLLC {\n\t\tif opts.FixLengths {\n\t\t\teth.Length = uint16(len(payload))\n\t\t}\n\t\tif eth.EthernetType != EthernetTypeLLC {\n\t\t\treturn fmt.Errorf(\"ethernet type %v not compatible with length value %v\", eth.EthernetType, eth.Length)\n\t\t} else if eth.Length > 0x0600 {\n\t\t\treturn fmt.Errorf(\"invalid ethernet length %v\", eth.Length)\n\t\t}\n\t\tbinary.BigEndian.PutUint16(bytes[12:], eth.Length)\n\t} else {\n\t\tbinary.BigEndian.PutUint16(bytes[12:], uint16(eth.EthernetType))\n\t}\n\tlength := len(b.Bytes())\n\tif length < 60 {\n\t\t// Pad out to 60 bytes.\n\t\tpadding, err := b.AppendBytes(60 - length)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcopy(padding, lotsOfZeros[:])\n\t}\n\treturn nil\n}\n\nfunc (eth *Ethernet) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeEthernet\n}\n\nfunc (eth *Ethernet) NextLayerType() gopacket.LayerType {\n\treturn eth.EthernetType.LayerType()\n}\n\nfunc decodeEthernet(data []byte, p gopacket.PacketBuilder) error {\n\teth := &Ethernet{}\n\terr := eth.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(eth)\n\tp.SetLinkLayer(eth)\n\treturn p.NextDecoder(eth.EthernetType)\n}\n"
  },
  {
    "path": "layers/fddi.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n\t\"net\"\n)\n\n// FDDI contains the header for FDDI frames.\ntype FDDI struct {\n\tBaseLayer\n\tFrameControl   FDDIFrameControl\n\tPriority       uint8\n\tSrcMAC, DstMAC net.HardwareAddr\n}\n\n// LayerType returns LayerTypeFDDI.\nfunc (f *FDDI) LayerType() gopacket.LayerType { return LayerTypeFDDI }\n\n// LinkFlow returns a new flow of type EndpointMAC.\nfunc (f *FDDI) LinkFlow() gopacket.Flow {\n\treturn gopacket.NewFlow(EndpointMAC, f.SrcMAC, f.DstMAC)\n}\n\nfunc decodeFDDI(data []byte, p gopacket.PacketBuilder) error {\n\tf := &FDDI{\n\t\tFrameControl: FDDIFrameControl(data[0] & 0xF8),\n\t\tPriority:     data[0] & 0x07,\n\t\tSrcMAC:       net.HardwareAddr(data[1:7]),\n\t\tDstMAC:       net.HardwareAddr(data[7:13]),\n\t\tBaseLayer:    BaseLayer{data[:13], data[13:]},\n\t}\n\tp.SetLinkLayer(f)\n\tp.AddLayer(f)\n\treturn p.NextDecoder(f.FrameControl)\n}\n"
  },
  {
    "path": "layers/fuzz_layer.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license that can be found\n// in the LICENSE file in the root of the source tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// FuzzLayer is a fuzz target for the layers package of gopacket\n// A fuzz target is a function processing a binary blob (byte slice)\n// The process here is to interpret this data as a packet, and print the layers contents.\n// The decoding options and the starting layer are encoded in the first bytes.\n// The function returns 1 if this is a valid packet (no error layer)\nfunc FuzzLayer(data []byte) int {\n\tif len(data) < 3 {\n\t\treturn 0\n\t}\n\t// use the first two bytes to choose the top level layer\n\tstartLayer := binary.BigEndian.Uint16(data[:2])\n\tvar fuzzOpts = gopacket.DecodeOptions{\n\t\tLazy:                     data[2]&0x1 != 0,\n\t\tNoCopy:                   data[2]&0x2 != 0,\n\t\tSkipDecodeRecovery:       data[2]&0x4 != 0,\n\t\tDecodeStreamsAsDatagrams: data[2]&0x8 != 0,\n\t}\n\tp := gopacket.NewPacket(data[3:], gopacket.LayerType(startLayer), fuzzOpts)\n\tfor _, l := range p.Layers() {\n\t\tgopacket.LayerString(l)\n\t}\n\tif p.ErrorLayer() != nil {\n\t\treturn 0\n\t}\n\treturn 1\n}\n"
  },
  {
    "path": "layers/gen.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build ignore\n\n// This binary pulls known ports from IANA, and uses them to populate\n// iana_ports.go's TCPPortNames and UDPPortNames maps.\n//\n//  go run gen.go | gofmt > iana_ports.go\npackage main\n\nimport (\n\t\"bytes\"\n\t\"encoding/xml\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"os\"\n\t\"strconv\"\n\t\"time\"\n)\n\nconst fmtString = `// Copyright 2012 Google, Inc. All rights reserved.\n\npackage layers\n\n// Created by gen.go, don't edit manually\n// Generated at %s\n// Fetched from %q\n\n// TCPPortNames contains the port names for all TCP ports.\nvar TCPPortNames = tcpPortNames\n\n// UDPPortNames contains the port names for all UDP ports.\nvar UDPPortNames = udpPortNames\n\n// SCTPPortNames contains the port names for all SCTP ports.\nvar SCTPPortNames = sctpPortNames\n\nvar tcpPortNames = map[TCPPort]string{\n%s}\nvar udpPortNames = map[UDPPort]string{\n%s}\nvar sctpPortNames = map[SCTPPort]string{\n%s}\n`\n\nvar url = flag.String(\"url\", \"http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml\", \"URL to grab port numbers from\")\n\nfunc main() {\n\tfmt.Fprintf(os.Stderr, \"Fetching ports from %q\\n\", *url)\n\tresp, err := http.Get(*url)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer resp.Body.Close()\n\tbody, err := ioutil.ReadAll(resp.Body)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tfmt.Fprintln(os.Stderr, \"Parsing XML\")\n\tvar registry struct {\n\t\tRecords []struct {\n\t\t\tProtocol string `xml:\"protocol\"`\n\t\t\tNumber   string `xml:\"number\"`\n\t\t\tName     string `xml:\"name\"`\n\t\t} `xml:\"record\"`\n\t}\n\txml.Unmarshal(body, &registry)\n\tvar tcpPorts bytes.Buffer\n\tvar udpPorts bytes.Buffer\n\tvar sctpPorts bytes.Buffer\n\tdone := map[string]map[int]bool{\n\t\t\"tcp\":  map[int]bool{},\n\t\t\"udp\":  map[int]bool{},\n\t\t\"sctp\": map[int]bool{},\n\t}\n\tfor _, r := range registry.Records {\n\t\tport, err := strconv.Atoi(r.Number)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif r.Name == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tvar b *bytes.Buffer\n\t\tswitch r.Protocol {\n\t\tcase \"tcp\":\n\t\t\tb = &tcpPorts\n\t\tcase \"udp\":\n\t\t\tb = &udpPorts\n\t\tcase \"sctp\":\n\t\t\tb = &sctpPorts\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\t\tif done[r.Protocol][port] {\n\t\t\tcontinue\n\t\t}\n\t\tdone[r.Protocol][port] = true\n\t\tfmt.Fprintf(b, \"\\t%d: %q,\\n\", port, r.Name)\n\t}\n\tfmt.Fprintln(os.Stderr, \"Writing results to stdout\")\n\tfmt.Printf(fmtString, time.Now(), *url, tcpPorts.String(), udpPorts.String(), sctpPorts.String())\n}\n"
  },
  {
    "path": "layers/gen2.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build ignore\n\n// This binary handles creating string constants and function templates for enums.\n//\n//  go run gen.go | gofmt > enums_generated.go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"text/template\"\n\t\"time\"\n)\n\nconst fmtString = `// Copyright 2012 Google, Inc. All rights reserved.\n\npackage layers\n\n// Created by gen2.go, don't edit manually\n// Generated at %s\n\nimport (\n  \"fmt\"\n\n  \"github.com/google/gopacket\"\n)\n\n`\n\nvar funcsTmpl = template.Must(template.New(\"foo\").Parse(`\n// Decoder calls {{.Name}}Metadata.DecodeWith's decoder.\nfunc (a {{.Name}}) Decode(data []byte, p gopacket.PacketBuilder) error {\n\treturn {{.Name}}Metadata[a].DecodeWith.Decode(data, p)\n}\n// String returns {{.Name}}Metadata.Name.\nfunc (a {{.Name}}) String() string {\n\treturn {{.Name}}Metadata[a].Name\n}\n// LayerType returns {{.Name}}Metadata.LayerType.\nfunc (a {{.Name}}) LayerType() gopacket.LayerType {\n\treturn {{.Name}}Metadata[a].LayerType\n}\n\ntype errorDecoderFor{{.Name}} int\nfunc (a *errorDecoderFor{{.Name}}) Decode(data []byte, p gopacket.PacketBuilder) error {\n  return a\n}\nfunc (a *errorDecoderFor{{.Name}}) Error() string {\n  return fmt.Sprintf(\"Unable to decode {{.Name}} %d\", int(*a))\n}\n\nvar errorDecodersFor{{.Name}} [{{.Num}}]errorDecoderFor{{.Name}}\nvar {{.Name}}Metadata [{{.Num}}]EnumMetadata\n\nfunc initUnknownTypesFor{{.Name}}() {\n  for i := 0; i < {{.Num}}; i++ {\n    errorDecodersFor{{.Name}}[i] = errorDecoderFor{{.Name}}(i)\n    {{.Name}}Metadata[i] = EnumMetadata{\n      DecodeWith: &errorDecodersFor{{.Name}}[i],\n      Name: \"Unknown{{.Name}}\",\n    }\n  }\n}\n`))\n\nfunc main() {\n\tfmt.Fprintf(os.Stderr, \"Writing results to stdout\\n\")\n\tfmt.Printf(fmtString, time.Now())\n\ttypes := []struct {\n\t\tName string\n\t\tNum  int\n\t}{\n\t\t{\"LinkType\", 256},\n\t\t{\"EthernetType\", 65536},\n\t\t{\"PPPType\", 65536},\n\t\t{\"IPProtocol\", 256},\n\t\t{\"SCTPChunkType\", 256},\n\t\t{\"PPPoECode\", 256},\n\t\t{\"FDDIFrameControl\", 256},\n\t\t{\"EAPOLType\", 256},\n\t\t{\"ProtocolFamily\", 256},\n\t\t{\"Dot11Type\", 256},\n\t\t{\"USBTransportType\", 256},\n\t}\n\n\tfmt.Println(\"func init() {\")\n\tfor _, t := range types {\n\t\tfmt.Printf(\"initUnknownTypesFor%s()\\n\", t.Name)\n\t}\n\tfmt.Println(\"initActualTypeData()\")\n\tfmt.Println(\"}\")\n\tfor _, t := range types {\n\t\tif err := funcsTmpl.Execute(os.Stdout, t); err != nil {\n\t\t\tlog.Fatalf(\"Failed to execute template %s: %v\", t.Name, err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "layers/gen_linted.sh",
    "content": "#!/bin/bash\n\nfor i in *.go; do golint $i | grep -q . || echo $i; done > .linted\n"
  },
  {
    "path": "layers/geneve.go",
    "content": "// Copyright 2016 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// Geneve is specifed here https://tools.ietf.org/html/draft-ietf-nvo3-geneve-03\n// Geneve Header:\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |Ver|  Opt Len  |O|C|    Rsvd.  |          Protocol Type        |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |        Virtual Network Identifier (VNI)       |    Reserved   |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |                    Variable Length Options                    |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ntype Geneve struct {\n\tBaseLayer\n\tVersion        uint8        // 2 bits\n\tOptionsLength  uint8        // 6 bits\n\tOAMPacket      bool         // 1 bits\n\tCriticalOption bool         // 1 bits\n\tProtocol       EthernetType // 16 bits\n\tVNI            uint32       // 24bits\n\tOptions        []*GeneveOption\n}\n\n// Geneve Tunnel Options\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |          Option Class         |      Type     |R|R|R| Length  |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |                      Variable Option Data                     |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ntype GeneveOption struct {\n\tClass  uint16 // 16 bits\n\tType   uint8  // 8 bits\n\tFlags  uint8  // 3 bits\n\tLength uint8  // 5 bits\n\tData   []byte\n}\n\n// LayerType returns LayerTypeGeneve\nfunc (gn *Geneve) LayerType() gopacket.LayerType { return LayerTypeGeneve }\n\nfunc decodeGeneveOption(data []byte, gn *Geneve, df gopacket.DecodeFeedback) (*GeneveOption, uint8, error) {\n\tif len(data) < 3 {\n\t\tdf.SetTruncated()\n\t\treturn nil, 0, errors.New(\"geneve option too small\")\n\t}\n\topt := &GeneveOption{}\n\n\topt.Class = binary.BigEndian.Uint16(data[0:2])\n\topt.Type = data[2]\n\topt.Flags = data[3] >> 4\n\topt.Length = (data[3]&0xf)*4 + 4\n\n\tif len(data) < int(opt.Length) {\n\t\tdf.SetTruncated()\n\t\treturn nil, 0, errors.New(\"geneve option too small\")\n\t}\n\topt.Data = make([]byte, opt.Length-4)\n\tcopy(opt.Data, data[4:opt.Length])\n\n\treturn opt, opt.Length, nil\n}\n\nfunc (gn *Geneve) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 7 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"geneve packet too short\")\n\t}\n\n\tgn.Version = data[0] >> 7\n\tgn.OptionsLength = (data[0] & 0x3f) * 4\n\n\tgn.OAMPacket = data[1]&0x80 > 0\n\tgn.CriticalOption = data[1]&0x40 > 0\n\tgn.Protocol = EthernetType(binary.BigEndian.Uint16(data[2:4]))\n\n\tvar buf [4]byte\n\tcopy(buf[1:], data[4:7])\n\tgn.VNI = binary.BigEndian.Uint32(buf[:])\n\n\toffset, length := uint8(8), int32(gn.OptionsLength)\n\tif len(data) < int(length+7) {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"geneve packet too short\")\n\t}\n\n\tfor length > 0 {\n\t\topt, len, err := decodeGeneveOption(data[offset:], gn, df)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgn.Options = append(gn.Options, opt)\n\n\t\tlength -= int32(len)\n\t\toffset += len\n\t}\n\n\tgn.BaseLayer = BaseLayer{data[:offset], data[offset:]}\n\n\treturn nil\n}\n\nfunc (gn *Geneve) NextLayerType() gopacket.LayerType {\n\treturn gn.Protocol.LayerType()\n}\n\nfunc decodeGeneve(data []byte, p gopacket.PacketBuilder) error {\n\tgn := &Geneve{}\n\treturn decodingLayerDecoder(gn, data, p)\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (gn *Geneve) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tplen := int(gn.OptionsLength + 8)\n\tbytes, err := b.PrependBytes(plen)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// PrependBytes does not guarantee that bytes are zeroed.  Setting flags via OR requires that they start off at zero\n\tbytes[0] = 0\n\tbytes[1] = 0\n\n\t// Construct Geneve\n\n\tbytes[0] |= gn.Version << 6\n\tbytes[0] |= ((gn.OptionsLength >> 2) & 0x3f)\n\n\tif gn.OAMPacket {\n\t\tbytes[1] |= 0x80\n\t}\n\n\tif gn.CriticalOption {\n\t\tbytes[1] |= 0x40\n\t}\n\n\tbinary.BigEndian.PutUint16(bytes[2:4], uint16(gn.Protocol))\n\n\tif gn.VNI >= 1<<24 {\n\t\treturn fmt.Errorf(\"Virtual Network Identifier = %x exceeds max for 24-bit uint\", gn.VNI)\n\t}\n\tbinary.BigEndian.PutUint32(bytes[4:8], gn.VNI<<8)\n\n\t// Construct Options\n\n\toffset, _ := uint8(8), int32(gn.OptionsLength)\n\tfor _, o := range gn.Options {\n\t\tbinary.BigEndian.PutUint16(bytes[offset:(offset+2)], uint16(o.Class))\n\n\t\toffset += 2\n\t\tbytes[offset] = o.Type\n\n\t\toffset += 1\n\t\tbytes[offset] |= o.Flags << 5\n\t\tbytes[offset] |= ((o.Length - 4) >> 2) & 0x1f\n\n\t\toffset += 1\n\t\tcopy(bytes[offset:(offset+o.Length-4)], o.Data)\n\n\t\toffset += o.Length - 4\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "layers/geneve_test.go",
    "content": "// Copyright 2016 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nvar testPacketGeneve1 = []byte{\n\t0x00, 0x04, 0x00, 0x01, 0x00, 0x06, 0xfa, 0x16, 0x3e, 0x23, 0xd3, 0x42,\n\t0x00, 0x00, 0x08, 0x00, 0x45, 0x00, 0x00, 0x86, 0x87, 0x39, 0x40, 0x00,\n\t0x40, 0x11, 0x31, 0x35, 0xc0, 0xa8, 0x00, 0x53, 0xc0, 0xa8, 0x00, 0x55,\n\t0x31, 0x57, 0x17, 0xc1, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x65, 0x58,\n\t0x00, 0x00, 0x00, 0x00, 0xba, 0x09, 0x60, 0x5f, 0xa0, 0x91, 0xa2, 0xfe,\n\t0x54, 0x48, 0x88, 0x51, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0x01, 0xf6,\n\t0x40, 0x00, 0x40, 0x01, 0xb7, 0x5f, 0xc0, 0xa8, 0x00, 0x01, 0xc0, 0xa8,\n\t0x00, 0x02, 0x08, 0x00, 0x79, 0xdf, 0x0c, 0xfa, 0x63, 0xc4, 0x03, 0x0b,\n\t0x50, 0x58, 0x00, 0x00, 0x00, 0x00, 0xee, 0x2b, 0x0d, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n\t0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,\n\t0x32, 0x33, 0x34, 0x35, 0x36, 0x37,\n}\n\nvar testPacketGeneve2 = []byte{\n\t0x12, 0xbe, 0x4e, 0xb6, 0xa7, 0xc7, 0x02, 0x88, 0x0a, 0x81, 0xbd, 0x6d,\n\t0x08, 0x00, 0x45, 0x00, 0x00, 0x86, 0x20, 0xf2, 0x00, 0x00, 0x40, 0x11,\n\t0x01, 0x52, 0xac, 0x10, 0x00, 0x01, 0xac, 0x10, 0x00, 0x02, 0x40, 0xa6,\n\t0x17, 0xc1, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x65, 0x58, 0x00, 0x00,\n\t0x0a, 0x00, 0xd2, 0x8c, 0xdb, 0x12, 0x53, 0xd5, 0x8e, 0xab, 0xa2, 0xa5,\n\t0x02, 0xf7, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0x38, 0x1a, 0x40, 0x00,\n\t0x40, 0x01, 0x81, 0x3b, 0xc0, 0xa8, 0x00, 0x01, 0xc0, 0xa8, 0x00, 0x02,\n\t0x08, 0x00, 0xdd, 0x9d, 0x7e, 0xde, 0x02, 0xc3, 0xcb, 0x07, 0x51, 0x58,\n\t0x00, 0x00, 0x00, 0x00, 0xba, 0x8d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b,\n\t0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,\n\t0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33,\n\t0x34, 0x35, 0x36, 0x37,\n}\n\nvar testPacketGeneve3 = []byte{\n\t0x00, 0x1b, 0x21, 0x3c, 0xac, 0x30, 0x00, 0x1b, 0x21, 0x3c, 0xab, 0x64, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x8e, 0xdf, 0xad, 0x40, 0x00, 0x40, 0x11, 0x32, 0xaf, 0x14, 0x00, 0x00, 0x01, 0x14, 0x00,\n\t0x00, 0x02, 0x31, 0x4a, 0x17, 0xc1, 0x00, 0x7a, 0x00, 0x00, 0x02, 0x40, 0x65, 0x58, 0x00, 0x00,\n\t0x0a, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0c, 0xfe, 0x71, 0xd8, 0x83, 0x72, 0x4f,\n\t0xb6, 0x9e, 0xd2, 0x49, 0x51, 0x48, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0xbd, 0xa2, 0x40, 0x00,\n\t0x40, 0x01, 0x41, 0x04, 0x1e, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x02, 0x08, 0x00, 0x2c, 0x54,\n\t0x29, 0x52, 0x00, 0x17, 0xf1, 0xa2, 0xce, 0x54, 0x00, 0x00, 0x00, 0x00, 0x17, 0x78, 0x0c, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b,\n\t0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,\n\t0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,\n}\n\nfunc TestDecodeGeneve1(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketGeneve1, LinkTypeLinuxSLL, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{\n\t\tLayerTypeLinuxSLL, LayerTypeIPv4, LayerTypeUDP, LayerTypeGeneve,\n\t\tLayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload,\n\t}, t)\n\tif got, ok := p.Layer(LayerTypeGeneve).(*Geneve); ok {\n\t\twant := &Geneve{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: testPacketGeneve1[44:52],\n\t\t\t\tPayload:  testPacketGeneve1[52:150],\n\t\t\t},\n\t\t\tVersion:        0x0,\n\t\t\tOptionsLength:  0x0,\n\t\t\tOAMPacket:      false,\n\t\t\tCriticalOption: false,\n\t\t\tProtocol:       EthernetTypeTransparentEthernetBridging,\n\t\t\tVNI:            0x0,\n\t\t}\n\t\tif !reflect.DeepEqual(want, got) {\n\t\t\tt.Errorf(\"Geneve layer mismatch, \\nwant %#v\\ngot  %#v\\n\", want, got)\n\t\t}\n\t}\n}\n\nfunc TestDecodeGeneve2(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketGeneve2, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{\n\t\tLayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeGeneve,\n\t\tLayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload,\n\t}, t)\n\tif got, ok := p.Layer(LayerTypeGeneve).(*Geneve); ok {\n\t\twant := &Geneve{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: testPacketGeneve2[42:50],\n\t\t\t\tPayload:  testPacketGeneve2[50:148],\n\t\t\t},\n\t\t\tVersion:        0x0,\n\t\t\tOptionsLength:  0x0,\n\t\t\tOAMPacket:      false,\n\t\t\tCriticalOption: false,\n\t\t\tProtocol:       EthernetTypeTransparentEthernetBridging,\n\t\t\tVNI:            0xa,\n\t\t}\n\t\tif !reflect.DeepEqual(want, got) {\n\t\t\tt.Errorf(\"Geneve layer mismatch, \\nwant %#v\\ngot  %#v\\n\", want, got)\n\t\t}\n\t}\n}\n\nfunc TestDecodeGeneve3(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketGeneve3, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{\n\t\tLayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeGeneve,\n\t\tLayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload,\n\t}, t)\n\tif got, ok := p.Layer(LayerTypeGeneve).(*Geneve); ok {\n\t\twant := &Geneve{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: testPacketGeneve3[42:58],\n\t\t\t\tPayload:  testPacketGeneve3[58:156],\n\t\t\t},\n\t\t\tVersion:        0x0,\n\t\t\tOptionsLength:  0x8,\n\t\t\tOAMPacket:      false,\n\t\t\tCriticalOption: true,\n\t\t\tProtocol:       EthernetTypeTransparentEthernetBridging,\n\t\t\tVNI:            0xa,\n\t\t\tOptions: []*GeneveOption{\n\t\t\t\t{\n\t\t\t\t\tClass:  0x0,\n\t\t\t\t\tType:   0x80,\n\t\t\t\t\tLength: 8,\n\t\t\t\t\tData:   []byte{0, 0, 0, 0xc},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tif !reflect.DeepEqual(want, got) {\n\t\t\tt.Errorf(\"Geneve layer mismatch, \\nwant %#v\\ngot  %#v\\n\", want, got)\n\t\t}\n\t}\n}\n\nfunc BenchmarkDecodeGeneve1(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketGeneve1, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\nfunc TestIsomorphicPacketGeneve(t *testing.T) {\n\tgn := &Geneve{\n\t\tVersion:        0x0,\n\t\tOptionsLength:  0x14,\n\t\tOAMPacket:      false,\n\t\tCriticalOption: true,\n\t\tProtocol:       EthernetTypeTransparentEthernetBridging,\n\t\tVNI:            0xa,\n\t\tOptions: []*GeneveOption{\n\t\t\t{\n\t\t\t\tClass:  0x0,\n\t\t\t\tType:   0x80,\n\t\t\t\tLength: 12,\n\t\t\t\tData:   []byte{0, 0, 0, 0, 0, 0, 0, 0xc},\n\t\t\t},\n\t\t\t{\n\t\t\t\tClass:  0x0,\n\t\t\t\tType:   0x80,\n\t\t\t\tLength: 8,\n\t\t\t\tData:   []byte{0, 0, 0, 0xc},\n\t\t\t},\n\t\t},\n\t}\n\n\tb := gopacket.NewSerializeBuffer()\n\tgn.SerializeTo(b, gopacket.SerializeOptions{})\n\n\tp := gopacket.NewPacket(b.Bytes(), gopacket.DecodeFunc(decodeGeneve), gopacket.Default)\n\tgnTranslated := p.Layer(LayerTypeGeneve).(*Geneve)\n\tgnTranslated.BaseLayer = BaseLayer{}\n\n\tif !reflect.DeepEqual(gn, gnTranslated) {\n\t\tt.Errorf(\"VXLAN isomorph mismatch, \\nwant %#v\\ngot %#v\\n\", gn, gnTranslated)\n\t}\n}\n"
  },
  {
    "path": "layers/gre.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// GRE is a Generic Routing Encapsulation header.\ntype GRE struct {\n\tBaseLayer\n\tChecksumPresent, RoutingPresent, KeyPresent, SeqPresent, StrictSourceRoute, AckPresent bool\n\tRecursionControl, Flags, Version                                                       uint8\n\tProtocol                                                                               EthernetType\n\tChecksum, Offset                                                                       uint16\n\tKey, Seq, Ack                                                                          uint32\n\t*GRERouting\n}\n\n// GRERouting is GRE routing information, present if the RoutingPresent flag is\n// set.\ntype GRERouting struct {\n\tAddressFamily        uint16\n\tSREOffset, SRELength uint8\n\tRoutingInformation   []byte\n\tNext                 *GRERouting\n}\n\n// LayerType returns gopacket.LayerTypeGRE.\nfunc (g *GRE) LayerType() gopacket.LayerType { return LayerTypeGRE }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (g *GRE) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tg.ChecksumPresent = data[0]&0x80 != 0\n\tg.RoutingPresent = data[0]&0x40 != 0\n\tg.KeyPresent = data[0]&0x20 != 0\n\tg.SeqPresent = data[0]&0x10 != 0\n\tg.StrictSourceRoute = data[0]&0x08 != 0\n\tg.AckPresent = data[1]&0x80 != 0\n\tg.RecursionControl = data[0] & 0x7\n\tg.Flags = data[1] >> 3\n\tg.Version = data[1] & 0x7\n\tg.Protocol = EthernetType(binary.BigEndian.Uint16(data[2:4]))\n\toffset := 4\n\tif g.ChecksumPresent || g.RoutingPresent {\n\t\tg.Checksum = binary.BigEndian.Uint16(data[offset : offset+2])\n\t\tg.Offset = binary.BigEndian.Uint16(data[offset+2 : offset+4])\n\t\toffset += 4\n\t}\n\tif g.KeyPresent {\n\t\tg.Key = binary.BigEndian.Uint32(data[offset : offset+4])\n\t\toffset += 4\n\t}\n\tif g.SeqPresent {\n\t\tg.Seq = binary.BigEndian.Uint32(data[offset : offset+4])\n\t\toffset += 4\n\t}\n\tif g.RoutingPresent {\n\t\ttail := &g.GRERouting\n\t\tfor {\n\t\t\tsre := &GRERouting{\n\t\t\t\tAddressFamily: binary.BigEndian.Uint16(data[offset : offset+2]),\n\t\t\t\tSREOffset:     data[offset+2],\n\t\t\t\tSRELength:     data[offset+3],\n\t\t\t}\n\t\t\tsre.RoutingInformation = data[offset+4 : offset+4+int(sre.SRELength)]\n\t\t\toffset += 4 + int(sre.SRELength)\n\t\t\tif sre.AddressFamily == 0 && sre.SRELength == 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t(*tail) = sre\n\t\t\ttail = &sre.Next\n\t\t}\n\t}\n\tif g.AckPresent {\n\t\tg.Ack = binary.BigEndian.Uint32(data[offset : offset+4])\n\t\toffset += 4\n\t}\n\tg.BaseLayer = BaseLayer{data[:offset], data[offset:]}\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the SerializationBuffer,\n// implementing gopacket.SerializableLayer. See the docs for gopacket.SerializableLayer for more info.\nfunc (g *GRE) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tsize := 4\n\tif g.ChecksumPresent || g.RoutingPresent {\n\t\tsize += 4\n\t}\n\tif g.KeyPresent {\n\t\tsize += 4\n\t}\n\tif g.SeqPresent {\n\t\tsize += 4\n\t}\n\tif g.RoutingPresent {\n\t\tr := g.GRERouting\n\t\tfor r != nil {\n\t\t\tsize += 4 + int(r.SRELength)\n\t\t\tr = r.Next\n\t\t}\n\t\tsize += 4\n\t}\n\tif g.AckPresent {\n\t\tsize += 4\n\t}\n\tbuf, err := b.PrependBytes(size)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// Reset any potentially dirty memory in the first 2 bytes, as these use OR to set flags.\n\tbuf[0] = 0\n\tbuf[1] = 0\n\tif g.ChecksumPresent {\n\t\tbuf[0] |= 0x80\n\t}\n\tif g.RoutingPresent {\n\t\tbuf[0] |= 0x40\n\t}\n\tif g.KeyPresent {\n\t\tbuf[0] |= 0x20\n\t}\n\tif g.SeqPresent {\n\t\tbuf[0] |= 0x10\n\t}\n\tif g.StrictSourceRoute {\n\t\tbuf[0] |= 0x08\n\t}\n\tif g.AckPresent {\n\t\tbuf[1] |= 0x80\n\t}\n\tbuf[0] |= g.RecursionControl\n\tbuf[1] |= g.Flags << 3\n\tbuf[1] |= g.Version\n\tbinary.BigEndian.PutUint16(buf[2:4], uint16(g.Protocol))\n\toffset := 4\n\tif g.ChecksumPresent || g.RoutingPresent {\n\t\t// Don't write the checksum value yet, as we may need to compute it,\n\t\t// which requires the entire header be complete.\n\t\t// Instead we zeroize the memory in case it is dirty.\n\t\tbuf[offset] = 0\n\t\tbuf[offset+1] = 0\n\t\tbinary.BigEndian.PutUint16(buf[offset+2:offset+4], g.Offset)\n\t\toffset += 4\n\t}\n\tif g.KeyPresent {\n\t\tbinary.BigEndian.PutUint32(buf[offset:offset+4], g.Key)\n\t\toffset += 4\n\t}\n\tif g.SeqPresent {\n\t\tbinary.BigEndian.PutUint32(buf[offset:offset+4], g.Seq)\n\t\toffset += 4\n\t}\n\tif g.RoutingPresent {\n\t\tsre := g.GRERouting\n\t\tfor sre != nil {\n\t\t\tbinary.BigEndian.PutUint16(buf[offset:offset+2], sre.AddressFamily)\n\t\t\tbuf[offset+2] = sre.SREOffset\n\t\t\tbuf[offset+3] = sre.SRELength\n\t\t\tcopy(buf[offset+4:offset+4+int(sre.SRELength)], sre.RoutingInformation)\n\t\t\toffset += 4 + int(sre.SRELength)\n\t\t\tsre = sre.Next\n\t\t}\n\t\t// Terminate routing field with a \"NULL\" SRE.\n\t\tbinary.BigEndian.PutUint32(buf[offset:offset+4], 0)\n\t}\n\tif g.AckPresent {\n\t\tbinary.BigEndian.PutUint32(buf[offset:offset+4], g.Ack)\n\t\toffset += 4\n\t}\n\tif g.ChecksumPresent {\n\t\tif opts.ComputeChecksums {\n\t\t\tg.Checksum = tcpipChecksum(b.Bytes(), 0)\n\t\t}\n\n\t\tbinary.BigEndian.PutUint16(buf[4:6], g.Checksum)\n\t}\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (g *GRE) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeGRE\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (g *GRE) NextLayerType() gopacket.LayerType {\n\treturn g.Protocol.LayerType()\n}\n\nfunc decodeGRE(data []byte, p gopacket.PacketBuilder) error {\n\tg := &GRE{}\n\treturn decodingLayerDecoder(g, data, p)\n}\n"
  },
  {
    "path": "layers/gre_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\npackage layers\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// testPacketGRE is the packet:\n//   15:08:08.003196 IP 192.168.1.1 > 192.168.1.2: GREv0, length 88: IP 172.16.1.1 > 172.16.2.1: ICMP echo request, id 4724, seq 1, length 64\n//      0x0000:  3a56 6b69 595e 8e7a 12c3 a971 0800 4500  :VkiY^.z...q..E.\n//      0x0010:  006c 843c 4000 402f 32d3 c0a8 0101 c0a8  .l.<@.@/2.......\n//      0x0020:  0102 0000 0800 4500 0054 0488 4000 4001  ......E..T..@.@.\n//      0x0030:  dafe ac10 0101 ac10 0201 0800 82c4 1274  ...............t\n//      0x0040:  0001 c892 a354 0000 0000 380c 0000 0000  .....T....8.....\n//      0x0050:  0000 1011 1213 1415 1617 1819 1a1b 1c1d  ................\n//      0x0060:  1e1f 2021 2223 2425 2627 2829 2a2b 2c2d  ...!\"#$%&'()*+,-\n//      0x0070:  2e2f 3031 3233 3435 3637                 ./01234567\nvar testPacketGRE = []byte{\n\t0x3a, 0x56, 0x6b, 0x69, 0x59, 0x5e, 0x8e, 0x7a, 0x12, 0xc3, 0xa9, 0x71, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x6c, 0x84, 0x3c, 0x40, 0x00, 0x40, 0x2f, 0x32, 0xd3, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8,\n\t0x01, 0x02, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0x04, 0x88, 0x40, 0x00, 0x40, 0x01,\n\t0xda, 0xfe, 0xac, 0x10, 0x01, 0x01, 0xac, 0x10, 0x02, 0x01, 0x08, 0x00, 0x82, 0xc4, 0x12, 0x74,\n\t0x00, 0x01, 0xc8, 0x92, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,\n}\n\nfunc TestPacketGRE(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketGRE, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\tif got, ok := p.Layer(LayerTypeGRE).(*GRE); ok {\n\t\twant := &GRE{\n\t\t\tBaseLayer: BaseLayer{testPacketGRE[34:38], testPacketGRE[38:]},\n\t\t\tProtocol:  EthernetTypeIPv4,\n\t\t}\n\t\tif !reflect.DeepEqual(want, got) {\n\t\t\tt.Errorf(\"GRE layer mismatch, \\nwant %#v\\ngot  %#v\\n\", want, got)\n\t\t}\n\t}\n}\n\nfunc BenchmarkDecodePacketGRE(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketGRE, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\nvar testIPv4OverGRE = []gopacket.SerializableLayer{\n\t&Ethernet{\n\t\tSrcMAC:       net.HardwareAddr{142, 122, 18, 195, 169, 113},\n\t\tDstMAC:       net.HardwareAddr{58, 86, 107, 105, 89, 94},\n\t\tEthernetType: EthernetTypeIPv4,\n\t},\n\t&IPv4{\n\t\tVersion:  4,\n\t\tSrcIP:    net.IP{192, 168, 1, 1},\n\t\tDstIP:    net.IP{192, 168, 1, 2},\n\t\tProtocol: IPProtocolGRE,\n\t\tFlags:    IPv4DontFragment,\n\t\tTTL:      64,\n\t\tId:       33852,\n\t\tIHL:      5,\n\t},\n\t&GRE{\n\t\tProtocol: EthernetTypeIPv4,\n\t},\n\t&IPv4{\n\t\tVersion:  4,\n\t\tSrcIP:    net.IP{172, 16, 1, 1},\n\t\tDstIP:    net.IP{172, 16, 2, 1},\n\t\tProtocol: IPProtocolICMPv4,\n\t\tFlags:    IPv4DontFragment,\n\t\tTTL:      64,\n\t\tIHL:      5,\n\t\tId:       1160,\n\t},\n\t&ICMPv4{\n\t\tTypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0),\n\t\tId:       4724,\n\t\tSeq:      1,\n\t},\n\tgopacket.Payload{\n\t\t0xc8, 0x92, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,\n\t\t0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,\n\t\t0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,\n\t},\n}\n\nfunc TestIPv4OverGREEncode(t *testing.T) {\n\tb := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{\n\t\tComputeChecksums: true,\n\t\tFixLengths:       true,\n\t}\n\tif err := gopacket.SerializeLayers(b, opts, testIPv4OverGRE...); err != nil {\n\t\tt.Errorf(\"Unable to serialize: %v\", err)\n\t}\n\tp := gopacket.NewPacket(b.Bytes(), LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\tif got, want := b.Bytes(), testPacketGRE; !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"Encoding mismatch, \\nwant: %v\\ngot %v\\n\", want, got)\n\t}\n}\n\nfunc BenchmarkEncodePacketGRE(b *testing.B) {\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{\n\t\tComputeChecksums: true,\n\t\tFixLengths:       true,\n\t}\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.SerializeLayers(buf, opts, testIPv4OverGRE...)\n\t\tbuf.Clear()\n\t}\n}\n\n// testPacketEthernetOverGRE is the packet:\n//   11:01:38.124768 IP 192.168.1.1 > 192.168.1.2: GREv0, length 102: IP 172.16.1.1 > 172.16.1.2: ICMP echo request, id 3842, seq 1, length 64\n//      0x0000:  ea6b 4cd3 5513 d6b9 d880 56ef 0800 4500  .kL.U.....V...E.\n//      0x0010:  007a 0acd 4000 402f ac34 c0a8 0101 c0a8  .z..@.@/.4......\n//      0x0020:  0102 0000 6558 aa6a 36e6 c630 6e32 3ec7  ....eX.j6..0n2>.\n//      0x0030:  9def 0800 4500 0054 d970 4000 4001 0715  ....E..T.p@.@...\n//      0x0040:  ac10 0101 ac10 0102 0800 3f15 0f02 0001  ..........?.....\n//      0x0050:  82d9 b154 0000 0000 b5e6 0100 0000 0000  ...T............\n//      0x0060:  1011 1213 1415 1617 1819 1a1b 1c1d 1e1f  ................\n//      0x0070:  2021 2223 2425 2627 2829 2a2b 2c2d 2e2f  .!\"#$%&'()*+,-./\n//      0x0080:  3031 3233 3435 3637                      01234567\nvar testPacketEthernetOverGRE = []byte{\n\t0xea, 0x6b, 0x4c, 0xd3, 0x55, 0x13, 0xd6, 0xb9, 0xd8, 0x80, 0x56, 0xef, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x7a, 0x0a, 0xcd, 0x40, 0x00, 0x40, 0x2f, 0xac, 0x34, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8,\n\t0x01, 0x02, 0x00, 0x00, 0x65, 0x58, 0xaa, 0x6a, 0x36, 0xe6, 0xc6, 0x30, 0x6e, 0x32, 0x3e, 0xc7,\n\t0x9d, 0xef, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0xd9, 0x70, 0x40, 0x00, 0x40, 0x01, 0x07, 0x15,\n\t0xac, 0x10, 0x01, 0x01, 0xac, 0x10, 0x01, 0x02, 0x08, 0x00, 0x3f, 0x15, 0x0f, 0x02, 0x00, 0x01,\n\t0x82, 0xd9, 0xb1, 0x54, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,\n\t0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,\n\t0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,\n}\n\nfunc TestPacketEthernetOverGRE(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketEthernetOverGRE, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\tif got, ok := p.Layer(LayerTypeGRE).(*GRE); ok {\n\t\twant := &GRE{\n\t\t\tBaseLayer: BaseLayer{testPacketEthernetOverGRE[34:38], testPacketEthernetOverGRE[38:]},\n\t\t\tProtocol:  EthernetTypeTransparentEthernetBridging,\n\t\t}\n\t\tif !reflect.DeepEqual(want, got) {\n\t\t\tt.Errorf(\"GRE layer mismatch, \\nwant %#v\\ngot  %#v\\n\", want, got)\n\t\t}\n\t}\n}\n\nfunc BenchmarkDecodePacketEthernetOverGRE(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketEthernetOverGRE, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\nvar testEthernetOverGRE = []gopacket.SerializableLayer{\n\t&Ethernet{\n\t\tSrcMAC:       net.HardwareAddr{0xd6, 0xb9, 0xd8, 0x80, 0x56, 0xef},\n\t\tDstMAC:       net.HardwareAddr{0xea, 0x6b, 0x4c, 0xd3, 0x55, 0x13},\n\t\tEthernetType: EthernetTypeIPv4,\n\t},\n\t&IPv4{\n\t\tVersion:  4,\n\t\tSrcIP:    net.IP{192, 168, 1, 1},\n\t\tDstIP:    net.IP{192, 168, 1, 2},\n\t\tProtocol: IPProtocolGRE,\n\t\tFlags:    IPv4DontFragment,\n\t\tTTL:      64,\n\t\tId:       2765,\n\t\tIHL:      5,\n\t},\n\t&GRE{\n\t\tProtocol: EthernetTypeTransparentEthernetBridging,\n\t},\n\t&Ethernet{\n\t\tSrcMAC:       net.HardwareAddr{0x6e, 0x32, 0x3e, 0xc7, 0x9d, 0xef},\n\t\tDstMAC:       net.HardwareAddr{0xaa, 0x6a, 0x36, 0xe6, 0xc6, 0x30},\n\t\tEthernetType: EthernetTypeIPv4,\n\t},\n\t&IPv4{\n\t\tVersion:  4,\n\t\tSrcIP:    net.IP{172, 16, 1, 1},\n\t\tDstIP:    net.IP{172, 16, 1, 2},\n\t\tProtocol: IPProtocolICMPv4,\n\t\tFlags:    IPv4DontFragment,\n\t\tTTL:      64,\n\t\tIHL:      5,\n\t\tId:       55664,\n\t},\n\t&ICMPv4{\n\t\tTypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0),\n\t\tId:       3842,\n\t\tSeq:      1,\n\t},\n\tgopacket.Payload{\n\t\t0x82, 0xd9, 0xb1, 0x54, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,\n\t\t0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,\n\t\t0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,\n\t},\n}\n\nfunc TestEthernetOverGREEncode(t *testing.T) {\n\tb := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{\n\t\tComputeChecksums: true,\n\t\tFixLengths:       true,\n\t}\n\tif err := gopacket.SerializeLayers(b, opts, testEthernetOverGRE...); err != nil {\n\t\tt.Errorf(\"Unable to serialize: %v\", err)\n\t}\n\tp := gopacket.NewPacket(b.Bytes(), LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\tif got, want := b.Bytes(), testPacketEthernetOverGRE; !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"Encoding mismatch, \\nwant: %v\\ngot %v\\n\", want, got)\n\t}\n}\n\nfunc BenchmarkEncodePacketEthernetOverGRE(b *testing.B) {\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{\n\t\tComputeChecksums: true,\n\t\tFixLengths:       true,\n\t}\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.SerializeLayers(buf, opts, testEthernetOverGRE...)\n\t\tbuf.Clear()\n\t}\n}\n\nvar testGREChecksum = map[uint16][]gopacket.SerializableLayer{\n\t0x77ff: {\n\t\t&Ethernet{\n\t\t\tSrcMAC:       net.HardwareAddr{0xc2, 0x00, 0x57, 0x75, 0x00, 0x00},\n\t\t\tDstMAC:       net.HardwareAddr{0xc2, 0x01, 0x57, 0x75, 0x00, 0x00},\n\t\t\tEthernetType: EthernetTypeIPv4,\n\t\t},\n\t\t&IPv4{\n\t\t\tVersion:  4,\n\t\t\tSrcIP:    net.IP{10, 0, 0, 1},\n\t\t\tDstIP:    net.IP{10, 0, 0, 2},\n\t\t\tProtocol: IPProtocolGRE,\n\t\t\tTTL:      255,\n\t\t\tId:       10,\n\t\t\tIHL:      5,\n\t\t},\n\t\t&GRE{\n\t\t\tProtocol:        EthernetTypeIPv4,\n\t\t\tChecksumPresent: true,\n\t\t},\n\t\t&IPv4{\n\t\t\tVersion:  4,\n\t\t\tSrcIP:    net.IP{1, 1, 1, 1},\n\t\t\tDstIP:    net.IP{2, 2, 2, 2},\n\t\t\tProtocol: IPProtocolICMPv4,\n\t\t\tTTL:      255,\n\t\t\tIHL:      5,\n\t\t\tId:       10,\n\t\t},\n\t\t&ICMPv4{\n\t\t\tTypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0),\n\t\t\tId:       2,\n\t\t\tSeq:      0,\n\t\t},\n\t\tgopacket.Payload{\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xbe, 0x70, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t\t\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t\t\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t\t\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t\t\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t\t},\n\t},\n\t0x8475: {\n\t\t&Ethernet{\n\t\t\tSrcMAC:       net.HardwareAddr{0xc2, 0x00, 0x57, 0x75, 0x00, 0x00},\n\t\t\tDstMAC:       net.HardwareAddr{0xc2, 0x01, 0x57, 0x75, 0x00, 0x00},\n\t\t\tEthernetType: EthernetTypeIPv4,\n\t\t},\n\t\t&IPv4{\n\t\t\tVersion:  4,\n\t\t\tSrcIP:    net.IP{10, 0, 0, 1},\n\t\t\tDstIP:    net.IP{10, 0, 0, 2},\n\t\t\tProtocol: IPProtocolGRE,\n\t\t\tTTL:      255,\n\t\t\tId:       10,\n\t\t\tIHL:      5,\n\t\t},\n\t\t&GRE{\n\t\t\tProtocol:        EthernetTypeIPv4,\n\t\t\tChecksumPresent: true,\n\t\t},\n\t\t&IPv4{\n\t\t\tVersion:  4,\n\t\t\tSrcIP:    net.IP{2, 3, 4, 5},\n\t\t\tDstIP:    net.IP{2, 3, 4, 50},\n\t\t\tProtocol: IPProtocolUDP,\n\t\t\tTTL:      1,\n\t\t\tIHL:      5,\n\t\t\tFlags:    IPv4DontFragment,\n\t\t\tId:       964,\n\t\t},\n\t\t&UDP{\n\t\t\tSrcPort: 41781,\n\t\t\tDstPort: 33434,\n\t\t},\n\t\tgopacket.Payload{\n\t\t\t0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,\n\t\t\t0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,\n\t\t},\n\t},\n}\n\nfunc TestGREChecksum(t *testing.T) {\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{\n\t\tComputeChecksums: true,\n\t\tFixLengths:       true,\n\t}\n\tfor cksum, packet := range testGREChecksum {\n\t\tbuf.Clear()\n\t\tif err := setNetworkLayer(packet); err != nil {\n\t\t\tt.Errorf(\"Failed to set network layer: %v\", err)\n\t\t\tcontinue\n\t\t}\n\t\tif err := gopacket.SerializeLayers(buf, opts, packet...); err != nil {\n\t\t\tt.Errorf(\"Failed to serialize packet: %v\", err)\n\t\t\tcontinue\n\t\t}\n\t\tp := gopacket.NewPacket(buf.Bytes(), LinkTypeEthernet, gopacket.Default)\n\t\tt.Log(p)\n\t\tif p.ErrorLayer() != nil {\n\t\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t\t\tcontinue\n\t\t}\n\t\tif got, ok := p.Layer(LayerTypeGRE).(*GRE); ok {\n\t\t\tif got.Checksum != cksum {\n\t\t\t\tt.Errorf(\"Incorrect checksum calculated for GRE packet: want %v, got %v\", cksum, got.Checksum)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc setNetworkLayer(layers []gopacket.SerializableLayer) error {\n\ttype setNetworkLayerForChecksum interface {\n\t\tSetNetworkLayerForChecksum(gopacket.NetworkLayer) error\n\t}\n\tvar l gopacket.NetworkLayer\n\tfor _, layer := range layers {\n\t\tif n, ok := layer.(gopacket.NetworkLayer); ok {\n\t\t\tl = n\n\t\t}\n\t\tif s, ok := layer.(setNetworkLayerForChecksum); ok {\n\t\t\tif l == nil {\n\t\t\t\treturn fmt.Errorf(\"no enclosing network layer found before: %v\", s)\n\t\t\t}\n\t\t\tif err := s.SetNetworkLayerForChecksum(l); err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to set network layer(%v) on layer(%v): %v\", l, s, err)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "layers/gtp.go",
    "content": "// Copyright 2017 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n//\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\nconst gtpMinimumSizeInBytes int = 8\n\n// GTPExtensionHeader is used to carry extra data and enable future extensions of the GTP  without the need to use another version number.\ntype GTPExtensionHeader struct {\n\tType    uint8\n\tContent []byte\n}\n\n// GTPv1U protocol is used to exchange user data over GTP tunnels across the Sx interfaces.\n// Defined in https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1595\ntype GTPv1U struct {\n\tBaseLayer\n\tVersion             uint8\n\tProtocolType        uint8\n\tReserved            uint8\n\tExtensionHeaderFlag bool\n\tSequenceNumberFlag  bool\n\tNPDUFlag            bool\n\tMessageType         uint8\n\tMessageLength       uint16\n\tTEID                uint32\n\tSequenceNumber      uint16\n\tNPDU                uint8\n\tGTPExtensionHeaders []GTPExtensionHeader\n}\n\n// LayerType returns LayerTypeGTPV1U\nfunc (g *GTPv1U) LayerType() gopacket.LayerType { return LayerTypeGTPv1U }\n\n// DecodeFromBytes analyses a byte slice and attempts to decode it as a GTPv1U packet\nfunc (g *GTPv1U) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\thLen := gtpMinimumSizeInBytes\n\tdLen := len(data)\n\tif dLen < hLen {\n\t\treturn fmt.Errorf(\"GTP packet too small: %d bytes\", dLen)\n\t}\n\tg.Version = (data[0] >> 5) & 0x07\n\tg.ProtocolType = (data[0] >> 4) & 0x01\n\tg.Reserved = (data[0] >> 3) & 0x01\n\tg.SequenceNumberFlag = ((data[0] >> 1) & 0x01) == 1\n\tg.NPDUFlag = (data[0] & 0x01) == 1\n\tg.ExtensionHeaderFlag = ((data[0] >> 2) & 0x01) == 1\n\tg.MessageType = data[1]\n\tg.MessageLength = binary.BigEndian.Uint16(data[2:4])\n\tpLen := 8 + g.MessageLength\n\tif uint16(dLen) < pLen {\n\t\treturn fmt.Errorf(\"GTP packet too small: %d bytes\", dLen)\n\t}\n\t//  Field used to multiplex different connections in the same GTP tunnel.\n\tg.TEID = binary.BigEndian.Uint32(data[4:8])\n\tcIndex := uint16(hLen)\n\tif g.SequenceNumberFlag || g.NPDUFlag || g.ExtensionHeaderFlag {\n\t\thLen += 4\n\t\tcIndex += 4\n\t\tif dLen < hLen {\n\t\t\treturn fmt.Errorf(\"GTP packet too small: %d bytes\", dLen)\n\t\t}\n\t\tif g.SequenceNumberFlag {\n\t\t\tg.SequenceNumber = binary.BigEndian.Uint16(data[8:10])\n\t\t}\n\t\tif g.NPDUFlag {\n\t\t\tg.NPDU = data[10]\n\t\t}\n\t\tif g.ExtensionHeaderFlag {\n\t\t\textensionFlag := true\n\t\t\tfor extensionFlag {\n\t\t\t\textensionType := uint8(data[cIndex-1])\n\t\t\t\textensionLength := uint(data[cIndex])\n\t\t\t\tif extensionLength == 0 {\n\t\t\t\t\treturn fmt.Errorf(\"GTP packet with invalid extension header\")\n\t\t\t\t}\n\t\t\t\t// extensionLength is in 4-octet units\n\t\t\t\tlIndex := cIndex + (uint16(extensionLength) * 4)\n\t\t\t\tif uint16(dLen) < lIndex {\n\t\t\t\t\treturn fmt.Errorf(\"GTP packet with small extension header: %d bytes\", dLen)\n\t\t\t\t}\n\t\t\t\tcontent := data[cIndex+1 : lIndex-1]\n\t\t\t\teh := GTPExtensionHeader{Type: extensionType, Content: content}\n\t\t\t\tg.GTPExtensionHeaders = append(g.GTPExtensionHeaders, eh)\n\t\t\t\tcIndex = lIndex\n\t\t\t\t// Check if coming bytes are from an extension header\n\t\t\t\textensionFlag = data[cIndex-1] != 0\n\n\t\t\t}\n\t\t}\n\t}\n\tg.BaseLayer = BaseLayer{Contents: data[:cIndex], Payload: data[cIndex:]}\n\treturn nil\n\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (g *GTPv1U) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tdata, err := b.PrependBytes(gtpMinimumSizeInBytes)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdata[0] |= (g.Version << 5)\n\tdata[0] |= (1 << 4)\n\tif len(g.GTPExtensionHeaders) > 0 {\n\t\tdata[0] |= 0x04\n\t\tg.ExtensionHeaderFlag = true\n\t}\n\tif g.SequenceNumberFlag {\n\t\tdata[0] |= 0x02\n\t}\n\tif g.NPDUFlag {\n\t\tdata[0] |= 0x01\n\t}\n\tdata[1] = g.MessageType\n\tbinary.BigEndian.PutUint16(data[2:4], g.MessageLength)\n\tbinary.BigEndian.PutUint32(data[4:8], g.TEID)\n\tif g.ExtensionHeaderFlag || g.SequenceNumberFlag || g.NPDUFlag {\n\t\tdata, err := b.AppendBytes(4)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbinary.BigEndian.PutUint16(data[:2], g.SequenceNumber)\n\t\tdata[2] = g.NPDU\n\t\tfor _, eh := range g.GTPExtensionHeaders {\n\t\t\tdata[len(data)-1] = eh.Type\n\t\t\tlContent := len(eh.Content)\n\t\t\t// extensionLength is in 4-octet units\n\t\t\textensionLength := (lContent + 2) / 4\n\t\t\t// Get two extra byte for the next extension header type and length\n\t\t\tdata, err = b.AppendBytes(lContent + 2)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tdata[0] = byte(extensionLength)\n\t\t\tcopy(data[1:lContent+1], eh.Content)\n\t\t}\n\t}\n\treturn nil\n\n}\n\n// CanDecode returns a set of layers that GTP objects can decode.\nfunc (g *GTPv1U) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeGTPv1U\n}\n\n// NextLayerType specifies the next layer that GoPacket should attempt to\nfunc (g *GTPv1U) NextLayerType() gopacket.LayerType {\n\tif len(g.LayerPayload()) == 0 {\n\t\treturn gopacket.LayerTypeZero\n\t}\n\tversion := uint8(g.LayerPayload()[0]) >> 4\n\tif version == 4 {\n\t\treturn LayerTypeIPv4\n\t} else if version == 6 {\n\t\treturn LayerTypeIPv6\n\t} else {\n\t\treturn LayerTypePPP\n\t}\n}\n\nfunc decodeGTPv1u(data []byte, p gopacket.PacketBuilder) error {\n\tgtp := &GTPv1U{}\n\terr := gtp.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(gtp)\n\treturn p.NextDecoder(gtp.NextLayerType())\n}\n"
  },
  {
    "path": "layers/gtp_test.go",
    "content": "// Copyright 2017 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n//\n\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n\t\"reflect\"\n\t\"testing\"\n)\n\n// testGTPPacket is the packet:\n//0000  00 0c 29 e3 c6 4d 00 0c  29 da d1 de 08 00 45 00   ..)..M.. ).....E.\n//0010  00 7c 00 00 40 00 40 11  67 bb c0 a8 28 b2 c0 a8   .|..@.@. g...(...\n//0020  28 b3 08 68 08 68 00 68  c1 c4 32 ff 00 58 00 00   (..h.h.h ..2..X..\n//0030  00 01 26 7b 00 00 45 00  00 54 06 76 00 00 40 01   ..&{..E. .T.v..@.\n//0040  98 2f c0 a8 28 b2 ca 0b  28 9e 00 00 39 e9 00 00   ./..(... (...9...\n//0050  28 7d 06 11 20 4b 7f 3a  0d 00 08 09 0a 0b 0c 0d   (}.. K.: ........\n//0060  0e 0f 10 11 12 13 14 15  16 17 18 19 1a 1b 1c 1d   ........ ........\n//0070  1e 1f 20 21 22 23 24 25  26 27 28 29 2a 2b 2c 2d   .. !\"#$% &'()*+,-\n//0080  2e 2f 30 31 32 33 34 35  36 37                     ./012345 67\n\nvar testGTPPacket = []byte{\n\t0x00, 0x0c, 0x29, 0xe3, 0xc6, 0x4d, 0x00, 0x0c,\n\t0x29, 0xda, 0xd1, 0xde, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x7c, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,\n\t0x67, 0xbb, 0xc0, 0xa8, 0x28, 0xb2, 0xc0, 0xa8,\n\t0x28, 0xb3, 0x08, 0x68, 0x08, 0x68, 0x00, 0x68,\n\t0xc1, 0xc4, 0x32, 0xff, 0x00, 0x58, 0x00, 0x00,\n\t0x00, 0x01, 0x26, 0x7b, 0x00, 0x00, 0x45, 0x00,\n\t0x00, 0x54, 0x06, 0x76, 0x00, 0x00, 0x40, 0x01,\n\t0x98, 0x2f, 0xc0, 0xa8, 0x28, 0xb2, 0xca, 0x0b,\n\t0x28, 0x9e, 0x00, 0x00, 0x39, 0xe9, 0x00, 0x00,\n\t0x28, 0x7d, 0x06, 0x11, 0x20, 0x4b, 0x7f, 0x3a,\n\t0x0d, 0x00, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,\n\t0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,\n\t0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,\n\t0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,\n\t0x36, 0x37,\n}\n\nfunc TestGTPPacket(t *testing.T) {\n\tp := gopacket.NewPacket(testGTPPacket, LayerTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeGTPv1U, LayerTypeIPv4,\n\t\tLayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\tif got, ok := p.Layer(LayerTypeGTPv1U).(*GTPv1U); ok {\n\t\twant := &GTPv1U{\n\t\t\tVersion:             1,\n\t\t\tProtocolType:        1,\n\t\t\tReserved:            0,\n\t\t\tExtensionHeaderFlag: false,\n\t\t\tSequenceNumberFlag:  true,\n\t\t\tNPDUFlag:            false,\n\t\t\tMessageType:         255,\n\t\t\tMessageLength:       88,\n\t\t\tTEID:                1,\n\t\t\tSequenceNumber:      9851,\n\t\t}\n\t\twant.BaseLayer = BaseLayer{testGTPPacket[42:54], testGTPPacket[54:]}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"GTP packet mismatch:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\n\t\t}\n\t\tbuf := gopacket.NewSerializeBuffer()\n\t\topts := gopacket.SerializeOptions{}\n\t\terr := got.SerializeTo(buf, opts)\n\t\tif err != nil {\n\t\t\tt.Error(err)\n\t\t}\n\t\tif !reflect.DeepEqual(got.Contents, buf.Bytes()) {\n\t\t\tt.Errorf(\"GTP packet serialization failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", buf.Bytes(), got.Contents)\n\t\t}\n\t} else {\n\t\tt.Error(\"Incorrect gtp packet\")\n\t}\n}\n\n// testGTPPacketWithEH is the packet\n//000000 00 0c 29 e3 c6 4d 00 0c 29 da d1 de 08 00 45 00 ..)..M..).....E.\n//000010 00 80 00 00 40 00 40 11 67 bb c0 a8 28 b2 c0 a8 ....@.@.g...(...\n//000020 28 b3 08 68 08 68 00 6c c1 95 36 ff 00 58 00 10 (..h.h.l..6..X..\n//000030 06 57 00 05 00 c0 01 09 04 00 45 00 00 54 06 a5 .W........E..T..\n//000040 00 00 40 01 98 00 c0 a8 28 b2 ca 0b 28 9e 00 00 ..@.....(...(...\n//000050 e3 b6 00 00 28 ac 35 11 20 4b a6 3d 0d 00 08 09 ....(.5. K.=....\n//000060 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 ................\n//000070 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 ...... !\"#$%&'()\n//000080 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37\n\nvar testGTPPacketWithEH = []byte{\n\t0x00, 0x0c, 0x29, 0xe3, 0xc6, 0x4d, 0x00, 0x0c,\n\t0x29, 0xda, 0xd1, 0xde, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,\n\t0x67, 0xbb, 0xc0, 0xa8, 0x28, 0xb2, 0xc0, 0xa8,\n\t0x28, 0xb3, 0x08, 0x68, 0x08, 0x68, 0x00, 0x6c,\n\t0xc1, 0x95, 0x36, 0xff, 0x00, 0x58, 0x00, 0x10,\n\t0x06, 0x57, 0x00, 0x05, 0x00, 0xc0, 0x01, 0x09,\n\t0x04, 0x00, 0x45, 0x00, 0x00, 0x54, 0x06, 0xa5,\n\t0x00, 0x00, 0x40, 0x01, 0x98, 0x00, 0xc0, 0xa8,\n\t0x28, 0xb2, 0xca, 0x0b, 0x28, 0x9e, 0x00, 0x00,\n\t0xe3, 0xb6, 0x00, 0x00, 0x28, 0xac, 0x35, 0x11,\n\t0x20, 0x4b, 0xa6, 0x3d, 0x0d, 0x00, 0x08, 0x09,\n\t0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11,\n\t0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n\t0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21,\n\t0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,\n\t0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,\n\t0x32, 0x33, 0x34, 0x35, 0x36, 0x37,\n}\n\nfunc TestGTPPacketWithEH(t *testing.T) {\n\tp := gopacket.NewPacket(testGTPPacketWithEH, LayerTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeGTPv1U, LayerTypeIPv4,\n\t\tLayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\tif got, ok := p.Layer(LayerTypeGTPv1U).(*GTPv1U); ok {\n\t\twant := &GTPv1U{\n\t\t\tVersion:             1,\n\t\t\tProtocolType:        1,\n\t\t\tReserved:            0,\n\t\t\tExtensionHeaderFlag: true,\n\t\t\tSequenceNumberFlag:  true,\n\t\t\tNPDUFlag:            false,\n\t\t\tMessageType:         255,\n\t\t\tMessageLength:       88,\n\t\t\tTEID:                1050199,\n\t\t\tSequenceNumber:      5,\n\t\t\tGTPExtensionHeaders: []GTPExtensionHeader{GTPExtensionHeader{Type: uint8(192), Content: []byte{0x9, 0x4}}},\n\t\t}\n\t\twant.BaseLayer = BaseLayer{testGTPPacketWithEH[42:58], testGTPPacketWithEH[58:]}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"GTP packet mismatch:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\n\t\t}\n\t\tbuf := gopacket.NewSerializeBuffer()\n\t\topts := gopacket.SerializeOptions{}\n\t\terr := got.SerializeTo(buf, opts)\n\t\tif err != nil {\n\t\t\tt.Error(err)\n\t\t}\n\t\tif !reflect.DeepEqual(got.Contents, buf.Bytes()) {\n\t\t\tt.Errorf(\"GTP packet serialization failed:\\ngot  :\\n%#v\\n\\nbuf :\\n%#v\\n\\n\", got.Contents, buf.Bytes())\n\t\t}\n\t} else {\n\t\tt.Errorf(\"Invalid GTP packet\")\n\t}\n\n}\n"
  },
  {
    "path": "layers/iana_ports.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n\npackage layers\n\n// Created by gen.go, don't edit manually\n// Generated at 2017-10-23 09:57:28.214859163 -0600 MDT m=+1.011679290\n// Fetched from \"http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml\"\n\n// TCPPortNames contains the port names for all TCP ports.\nvar TCPPortNames = tcpPortNames\n\n// UDPPortNames contains the port names for all UDP ports.\nvar UDPPortNames = udpPortNames\n\n// SCTPPortNames contains the port names for all SCTP ports.\nvar SCTPPortNames = sctpPortNames\n\nvar tcpPortNames = map[TCPPort]string{\n\t1:     \"tcpmux\",\n\t2:     \"compressnet\",\n\t3:     \"compressnet\",\n\t5:     \"rje\",\n\t7:     \"echo\",\n\t9:     \"discard\",\n\t11:    \"systat\",\n\t13:    \"daytime\",\n\t17:    \"qotd\",\n\t18:    \"msp\",\n\t19:    \"chargen\",\n\t20:    \"ftp-data\",\n\t21:    \"ftp\",\n\t22:    \"ssh\",\n\t23:    \"telnet\",\n\t25:    \"smtp\",\n\t27:    \"nsw-fe\",\n\t29:    \"msg-icp\",\n\t31:    \"msg-auth\",\n\t33:    \"dsp\",\n\t37:    \"time\",\n\t38:    \"rap\",\n\t39:    \"rlp\",\n\t41:    \"graphics\",\n\t42:    \"name\",\n\t43:    \"nicname\",\n\t44:    \"mpm-flags\",\n\t45:    \"mpm\",\n\t46:    \"mpm-snd\",\n\t48:    \"auditd\",\n\t49:    \"tacacs\",\n\t50:    \"re-mail-ck\",\n\t52:    \"xns-time\",\n\t53:    \"domain\",\n\t54:    \"xns-ch\",\n\t55:    \"isi-gl\",\n\t56:    \"xns-auth\",\n\t58:    \"xns-mail\",\n\t62:    \"acas\",\n\t63:    \"whoispp\",\n\t64:    \"covia\",\n\t65:    \"tacacs-ds\",\n\t66:    \"sql-net\",\n\t67:    \"bootps\",\n\t68:    \"bootpc\",\n\t69:    \"tftp\",\n\t70:    \"gopher\",\n\t71:    \"netrjs-1\",\n\t72:    \"netrjs-2\",\n\t73:    \"netrjs-3\",\n\t74:    \"netrjs-4\",\n\t76:    \"deos\",\n\t78:    \"vettcp\",\n\t79:    \"finger\",\n\t80:    \"http\",\n\t82:    \"xfer\",\n\t83:    \"mit-ml-dev\",\n\t84:    \"ctf\",\n\t85:    \"mit-ml-dev\",\n\t86:    \"mfcobol\",\n\t88:    \"kerberos\",\n\t89:    \"su-mit-tg\",\n\t90:    \"dnsix\",\n\t91:    \"mit-dov\",\n\t92:    \"npp\",\n\t93:    \"dcp\",\n\t94:    \"objcall\",\n\t95:    \"supdup\",\n\t96:    \"dixie\",\n\t97:    \"swift-rvf\",\n\t98:    \"tacnews\",\n\t99:    \"metagram\",\n\t101:   \"hostname\",\n\t102:   \"iso-tsap\",\n\t103:   \"gppitnp\",\n\t104:   \"acr-nema\",\n\t105:   \"cso\",\n\t106:   \"3com-tsmux\",\n\t107:   \"rtelnet\",\n\t108:   \"snagas\",\n\t109:   \"pop2\",\n\t110:   \"pop3\",\n\t111:   \"sunrpc\",\n\t112:   \"mcidas\",\n\t113:   \"ident\",\n\t115:   \"sftp\",\n\t116:   \"ansanotify\",\n\t117:   \"uucp-path\",\n\t118:   \"sqlserv\",\n\t119:   \"nntp\",\n\t120:   \"cfdptkt\",\n\t121:   \"erpc\",\n\t122:   \"smakynet\",\n\t123:   \"ntp\",\n\t124:   \"ansatrader\",\n\t125:   \"locus-map\",\n\t126:   \"nxedit\",\n\t127:   \"locus-con\",\n\t128:   \"gss-xlicen\",\n\t129:   \"pwdgen\",\n\t130:   \"cisco-fna\",\n\t131:   \"cisco-tna\",\n\t132:   \"cisco-sys\",\n\t133:   \"statsrv\",\n\t134:   \"ingres-net\",\n\t135:   \"epmap\",\n\t136:   \"profile\",\n\t137:   \"netbios-ns\",\n\t138:   \"netbios-dgm\",\n\t139:   \"netbios-ssn\",\n\t140:   \"emfis-data\",\n\t141:   \"emfis-cntl\",\n\t142:   \"bl-idm\",\n\t143:   \"imap\",\n\t144:   \"uma\",\n\t145:   \"uaac\",\n\t146:   \"iso-tp0\",\n\t147:   \"iso-ip\",\n\t148:   \"jargon\",\n\t149:   \"aed-512\",\n\t150:   \"sql-net\",\n\t151:   \"hems\",\n\t152:   \"bftp\",\n\t153:   \"sgmp\",\n\t154:   \"netsc-prod\",\n\t155:   \"netsc-dev\",\n\t156:   \"sqlsrv\",\n\t157:   \"knet-cmp\",\n\t158:   \"pcmail-srv\",\n\t159:   \"nss-routing\",\n\t160:   \"sgmp-traps\",\n\t161:   \"snmp\",\n\t162:   \"snmptrap\",\n\t163:   \"cmip-man\",\n\t164:   \"cmip-agent\",\n\t165:   \"xns-courier\",\n\t166:   \"s-net\",\n\t167:   \"namp\",\n\t168:   \"rsvd\",\n\t169:   \"send\",\n\t170:   \"print-srv\",\n\t171:   \"multiplex\",\n\t172:   \"cl-1\",\n\t173:   \"xyplex-mux\",\n\t174:   \"mailq\",\n\t175:   \"vmnet\",\n\t176:   \"genrad-mux\",\n\t177:   \"xdmcp\",\n\t178:   \"nextstep\",\n\t179:   \"bgp\",\n\t180:   \"ris\",\n\t181:   \"unify\",\n\t182:   \"audit\",\n\t183:   \"ocbinder\",\n\t184:   \"ocserver\",\n\t185:   \"remote-kis\",\n\t186:   \"kis\",\n\t187:   \"aci\",\n\t188:   \"mumps\",\n\t189:   \"qft\",\n\t190:   \"gacp\",\n\t191:   \"prospero\",\n\t192:   \"osu-nms\",\n\t193:   \"srmp\",\n\t194:   \"irc\",\n\t195:   \"dn6-nlm-aud\",\n\t196:   \"dn6-smm-red\",\n\t197:   \"dls\",\n\t198:   \"dls-mon\",\n\t199:   \"smux\",\n\t200:   \"src\",\n\t201:   \"at-rtmp\",\n\t202:   \"at-nbp\",\n\t203:   \"at-3\",\n\t204:   \"at-echo\",\n\t205:   \"at-5\",\n\t206:   \"at-zis\",\n\t207:   \"at-7\",\n\t208:   \"at-8\",\n\t209:   \"qmtp\",\n\t210:   \"z39-50\",\n\t211:   \"914c-g\",\n\t212:   \"anet\",\n\t213:   \"ipx\",\n\t214:   \"vmpwscs\",\n\t215:   \"softpc\",\n\t216:   \"CAIlic\",\n\t217:   \"dbase\",\n\t218:   \"mpp\",\n\t219:   \"uarps\",\n\t220:   \"imap3\",\n\t221:   \"fln-spx\",\n\t222:   \"rsh-spx\",\n\t223:   \"cdc\",\n\t224:   \"masqdialer\",\n\t242:   \"direct\",\n\t243:   \"sur-meas\",\n\t244:   \"inbusiness\",\n\t245:   \"link\",\n\t246:   \"dsp3270\",\n\t247:   \"subntbcst-tftp\",\n\t248:   \"bhfhs\",\n\t256:   \"rap\",\n\t257:   \"set\",\n\t259:   \"esro-gen\",\n\t260:   \"openport\",\n\t261:   \"nsiiops\",\n\t262:   \"arcisdms\",\n\t263:   \"hdap\",\n\t264:   \"bgmp\",\n\t265:   \"x-bone-ctl\",\n\t266:   \"sst\",\n\t267:   \"td-service\",\n\t268:   \"td-replica\",\n\t269:   \"manet\",\n\t271:   \"pt-tls\",\n\t280:   \"http-mgmt\",\n\t281:   \"personal-link\",\n\t282:   \"cableport-ax\",\n\t283:   \"rescap\",\n\t284:   \"corerjd\",\n\t286:   \"fxp\",\n\t287:   \"k-block\",\n\t308:   \"novastorbakcup\",\n\t309:   \"entrusttime\",\n\t310:   \"bhmds\",\n\t311:   \"asip-webadmin\",\n\t312:   \"vslmp\",\n\t313:   \"magenta-logic\",\n\t314:   \"opalis-robot\",\n\t315:   \"dpsi\",\n\t316:   \"decauth\",\n\t317:   \"zannet\",\n\t318:   \"pkix-timestamp\",\n\t319:   \"ptp-event\",\n\t320:   \"ptp-general\",\n\t321:   \"pip\",\n\t322:   \"rtsps\",\n\t323:   \"rpki-rtr\",\n\t324:   \"rpki-rtr-tls\",\n\t333:   \"texar\",\n\t344:   \"pdap\",\n\t345:   \"pawserv\",\n\t346:   \"zserv\",\n\t347:   \"fatserv\",\n\t348:   \"csi-sgwp\",\n\t349:   \"mftp\",\n\t350:   \"matip-type-a\",\n\t351:   \"matip-type-b\",\n\t352:   \"dtag-ste-sb\",\n\t353:   \"ndsauth\",\n\t354:   \"bh611\",\n\t355:   \"datex-asn\",\n\t356:   \"cloanto-net-1\",\n\t357:   \"bhevent\",\n\t358:   \"shrinkwrap\",\n\t359:   \"nsrmp\",\n\t360:   \"scoi2odialog\",\n\t361:   \"semantix\",\n\t362:   \"srssend\",\n\t363:   \"rsvp-tunnel\",\n\t364:   \"aurora-cmgr\",\n\t365:   \"dtk\",\n\t366:   \"odmr\",\n\t367:   \"mortgageware\",\n\t368:   \"qbikgdp\",\n\t369:   \"rpc2portmap\",\n\t370:   \"codaauth2\",\n\t371:   \"clearcase\",\n\t372:   \"ulistproc\",\n\t373:   \"legent-1\",\n\t374:   \"legent-2\",\n\t375:   \"hassle\",\n\t376:   \"nip\",\n\t377:   \"tnETOS\",\n\t378:   \"dsETOS\",\n\t379:   \"is99c\",\n\t380:   \"is99s\",\n\t381:   \"hp-collector\",\n\t382:   \"hp-managed-node\",\n\t383:   \"hp-alarm-mgr\",\n\t384:   \"arns\",\n\t385:   \"ibm-app\",\n\t386:   \"asa\",\n\t387:   \"aurp\",\n\t388:   \"unidata-ldm\",\n\t389:   \"ldap\",\n\t390:   \"uis\",\n\t391:   \"synotics-relay\",\n\t392:   \"synotics-broker\",\n\t393:   \"meta5\",\n\t394:   \"embl-ndt\",\n\t395:   \"netcp\",\n\t396:   \"netware-ip\",\n\t397:   \"mptn\",\n\t398:   \"kryptolan\",\n\t399:   \"iso-tsap-c2\",\n\t400:   \"osb-sd\",\n\t401:   \"ups\",\n\t402:   \"genie\",\n\t403:   \"decap\",\n\t404:   \"nced\",\n\t405:   \"ncld\",\n\t406:   \"imsp\",\n\t407:   \"timbuktu\",\n\t408:   \"prm-sm\",\n\t409:   \"prm-nm\",\n\t410:   \"decladebug\",\n\t411:   \"rmt\",\n\t412:   \"synoptics-trap\",\n\t413:   \"smsp\",\n\t414:   \"infoseek\",\n\t415:   \"bnet\",\n\t416:   \"silverplatter\",\n\t417:   \"onmux\",\n\t418:   \"hyper-g\",\n\t419:   \"ariel1\",\n\t420:   \"smpte\",\n\t421:   \"ariel2\",\n\t422:   \"ariel3\",\n\t423:   \"opc-job-start\",\n\t424:   \"opc-job-track\",\n\t425:   \"icad-el\",\n\t426:   \"smartsdp\",\n\t427:   \"svrloc\",\n\t428:   \"ocs-cmu\",\n\t429:   \"ocs-amu\",\n\t430:   \"utmpsd\",\n\t431:   \"utmpcd\",\n\t432:   \"iasd\",\n\t433:   \"nnsp\",\n\t434:   \"mobileip-agent\",\n\t435:   \"mobilip-mn\",\n\t436:   \"dna-cml\",\n\t437:   \"comscm\",\n\t438:   \"dsfgw\",\n\t439:   \"dasp\",\n\t440:   \"sgcp\",\n\t441:   \"decvms-sysmgt\",\n\t442:   \"cvc-hostd\",\n\t443:   \"https\",\n\t444:   \"snpp\",\n\t445:   \"microsoft-ds\",\n\t446:   \"ddm-rdb\",\n\t447:   \"ddm-dfm\",\n\t448:   \"ddm-ssl\",\n\t449:   \"as-servermap\",\n\t450:   \"tserver\",\n\t451:   \"sfs-smp-net\",\n\t452:   \"sfs-config\",\n\t453:   \"creativeserver\",\n\t454:   \"contentserver\",\n\t455:   \"creativepartnr\",\n\t456:   \"macon-tcp\",\n\t457:   \"scohelp\",\n\t458:   \"appleqtc\",\n\t459:   \"ampr-rcmd\",\n\t460:   \"skronk\",\n\t461:   \"datasurfsrv\",\n\t462:   \"datasurfsrvsec\",\n\t463:   \"alpes\",\n\t464:   \"kpasswd\",\n\t465:   \"urd\",\n\t466:   \"digital-vrc\",\n\t467:   \"mylex-mapd\",\n\t468:   \"photuris\",\n\t469:   \"rcp\",\n\t470:   \"scx-proxy\",\n\t471:   \"mondex\",\n\t472:   \"ljk-login\",\n\t473:   \"hybrid-pop\",\n\t474:   \"tn-tl-w1\",\n\t475:   \"tcpnethaspsrv\",\n\t476:   \"tn-tl-fd1\",\n\t477:   \"ss7ns\",\n\t478:   \"spsc\",\n\t479:   \"iafserver\",\n\t480:   \"iafdbase\",\n\t481:   \"ph\",\n\t482:   \"bgs-nsi\",\n\t483:   \"ulpnet\",\n\t484:   \"integra-sme\",\n\t485:   \"powerburst\",\n\t486:   \"avian\",\n\t487:   \"saft\",\n\t488:   \"gss-http\",\n\t489:   \"nest-protocol\",\n\t490:   \"micom-pfs\",\n\t491:   \"go-login\",\n\t492:   \"ticf-1\",\n\t493:   \"ticf-2\",\n\t494:   \"pov-ray\",\n\t495:   \"intecourier\",\n\t496:   \"pim-rp-disc\",\n\t497:   \"retrospect\",\n\t498:   \"siam\",\n\t499:   \"iso-ill\",\n\t500:   \"isakmp\",\n\t501:   \"stmf\",\n\t502:   \"mbap\",\n\t503:   \"intrinsa\",\n\t504:   \"citadel\",\n\t505:   \"mailbox-lm\",\n\t506:   \"ohimsrv\",\n\t507:   \"crs\",\n\t508:   \"xvttp\",\n\t509:   \"snare\",\n\t510:   \"fcp\",\n\t511:   \"passgo\",\n\t512:   \"exec\",\n\t513:   \"login\",\n\t514:   \"shell\",\n\t515:   \"printer\",\n\t516:   \"videotex\",\n\t517:   \"talk\",\n\t518:   \"ntalk\",\n\t519:   \"utime\",\n\t520:   \"efs\",\n\t521:   \"ripng\",\n\t522:   \"ulp\",\n\t523:   \"ibm-db2\",\n\t524:   \"ncp\",\n\t525:   \"timed\",\n\t526:   \"tempo\",\n\t527:   \"stx\",\n\t528:   \"custix\",\n\t529:   \"irc-serv\",\n\t530:   \"courier\",\n\t531:   \"conference\",\n\t532:   \"netnews\",\n\t533:   \"netwall\",\n\t534:   \"windream\",\n\t535:   \"iiop\",\n\t536:   \"opalis-rdv\",\n\t537:   \"nmsp\",\n\t538:   \"gdomap\",\n\t539:   \"apertus-ldp\",\n\t540:   \"uucp\",\n\t541:   \"uucp-rlogin\",\n\t542:   \"commerce\",\n\t543:   \"klogin\",\n\t544:   \"kshell\",\n\t545:   \"appleqtcsrvr\",\n\t546:   \"dhcpv6-client\",\n\t547:   \"dhcpv6-server\",\n\t548:   \"afpovertcp\",\n\t549:   \"idfp\",\n\t550:   \"new-rwho\",\n\t551:   \"cybercash\",\n\t552:   \"devshr-nts\",\n\t553:   \"pirp\",\n\t554:   \"rtsp\",\n\t555:   \"dsf\",\n\t556:   \"remotefs\",\n\t557:   \"openvms-sysipc\",\n\t558:   \"sdnskmp\",\n\t559:   \"teedtap\",\n\t560:   \"rmonitor\",\n\t561:   \"monitor\",\n\t562:   \"chshell\",\n\t563:   \"nntps\",\n\t564:   \"9pfs\",\n\t565:   \"whoami\",\n\t566:   \"streettalk\",\n\t567:   \"banyan-rpc\",\n\t568:   \"ms-shuttle\",\n\t569:   \"ms-rome\",\n\t570:   \"meter\",\n\t571:   \"meter\",\n\t572:   \"sonar\",\n\t573:   \"banyan-vip\",\n\t574:   \"ftp-agent\",\n\t575:   \"vemmi\",\n\t576:   \"ipcd\",\n\t577:   \"vnas\",\n\t578:   \"ipdd\",\n\t579:   \"decbsrv\",\n\t580:   \"sntp-heartbeat\",\n\t581:   \"bdp\",\n\t582:   \"scc-security\",\n\t583:   \"philips-vc\",\n\t584:   \"keyserver\",\n\t586:   \"password-chg\",\n\t587:   \"submission\",\n\t588:   \"cal\",\n\t589:   \"eyelink\",\n\t590:   \"tns-cml\",\n\t591:   \"http-alt\",\n\t592:   \"eudora-set\",\n\t593:   \"http-rpc-epmap\",\n\t594:   \"tpip\",\n\t595:   \"cab-protocol\",\n\t596:   \"smsd\",\n\t597:   \"ptcnameservice\",\n\t598:   \"sco-websrvrmg3\",\n\t599:   \"acp\",\n\t600:   \"ipcserver\",\n\t601:   \"syslog-conn\",\n\t602:   \"xmlrpc-beep\",\n\t603:   \"idxp\",\n\t604:   \"tunnel\",\n\t605:   \"soap-beep\",\n\t606:   \"urm\",\n\t607:   \"nqs\",\n\t608:   \"sift-uft\",\n\t609:   \"npmp-trap\",\n\t610:   \"npmp-local\",\n\t611:   \"npmp-gui\",\n\t612:   \"hmmp-ind\",\n\t613:   \"hmmp-op\",\n\t614:   \"sshell\",\n\t615:   \"sco-inetmgr\",\n\t616:   \"sco-sysmgr\",\n\t617:   \"sco-dtmgr\",\n\t618:   \"dei-icda\",\n\t619:   \"compaq-evm\",\n\t620:   \"sco-websrvrmgr\",\n\t621:   \"escp-ip\",\n\t622:   \"collaborator\",\n\t623:   \"oob-ws-http\",\n\t624:   \"cryptoadmin\",\n\t625:   \"dec-dlm\",\n\t626:   \"asia\",\n\t627:   \"passgo-tivoli\",\n\t628:   \"qmqp\",\n\t629:   \"3com-amp3\",\n\t630:   \"rda\",\n\t631:   \"ipp\",\n\t632:   \"bmpp\",\n\t633:   \"servstat\",\n\t634:   \"ginad\",\n\t635:   \"rlzdbase\",\n\t636:   \"ldaps\",\n\t637:   \"lanserver\",\n\t638:   \"mcns-sec\",\n\t639:   \"msdp\",\n\t640:   \"entrust-sps\",\n\t641:   \"repcmd\",\n\t642:   \"esro-emsdp\",\n\t643:   \"sanity\",\n\t644:   \"dwr\",\n\t645:   \"pssc\",\n\t646:   \"ldp\",\n\t647:   \"dhcp-failover\",\n\t648:   \"rrp\",\n\t649:   \"cadview-3d\",\n\t650:   \"obex\",\n\t651:   \"ieee-mms\",\n\t652:   \"hello-port\",\n\t653:   \"repscmd\",\n\t654:   \"aodv\",\n\t655:   \"tinc\",\n\t656:   \"spmp\",\n\t657:   \"rmc\",\n\t658:   \"tenfold\",\n\t660:   \"mac-srvr-admin\",\n\t661:   \"hap\",\n\t662:   \"pftp\",\n\t663:   \"purenoise\",\n\t664:   \"oob-ws-https\",\n\t665:   \"sun-dr\",\n\t666:   \"mdqs\",\n\t667:   \"disclose\",\n\t668:   \"mecomm\",\n\t669:   \"meregister\",\n\t670:   \"vacdsm-sws\",\n\t671:   \"vacdsm-app\",\n\t672:   \"vpps-qua\",\n\t673:   \"cimplex\",\n\t674:   \"acap\",\n\t675:   \"dctp\",\n\t676:   \"vpps-via\",\n\t677:   \"vpp\",\n\t678:   \"ggf-ncp\",\n\t679:   \"mrm\",\n\t680:   \"entrust-aaas\",\n\t681:   \"entrust-aams\",\n\t682:   \"xfr\",\n\t683:   \"corba-iiop\",\n\t684:   \"corba-iiop-ssl\",\n\t685:   \"mdc-portmapper\",\n\t686:   \"hcp-wismar\",\n\t687:   \"asipregistry\",\n\t688:   \"realm-rusd\",\n\t689:   \"nmap\",\n\t690:   \"vatp\",\n\t691:   \"msexch-routing\",\n\t692:   \"hyperwave-isp\",\n\t693:   \"connendp\",\n\t694:   \"ha-cluster\",\n\t695:   \"ieee-mms-ssl\",\n\t696:   \"rushd\",\n\t697:   \"uuidgen\",\n\t698:   \"olsr\",\n\t699:   \"accessnetwork\",\n\t700:   \"epp\",\n\t701:   \"lmp\",\n\t702:   \"iris-beep\",\n\t704:   \"elcsd\",\n\t705:   \"agentx\",\n\t706:   \"silc\",\n\t707:   \"borland-dsj\",\n\t709:   \"entrust-kmsh\",\n\t710:   \"entrust-ash\",\n\t711:   \"cisco-tdp\",\n\t712:   \"tbrpf\",\n\t713:   \"iris-xpc\",\n\t714:   \"iris-xpcs\",\n\t715:   \"iris-lwz\",\n\t729:   \"netviewdm1\",\n\t730:   \"netviewdm2\",\n\t731:   \"netviewdm3\",\n\t741:   \"netgw\",\n\t742:   \"netrcs\",\n\t744:   \"flexlm\",\n\t747:   \"fujitsu-dev\",\n\t748:   \"ris-cm\",\n\t749:   \"kerberos-adm\",\n\t750:   \"rfile\",\n\t751:   \"pump\",\n\t752:   \"qrh\",\n\t753:   \"rrh\",\n\t754:   \"tell\",\n\t758:   \"nlogin\",\n\t759:   \"con\",\n\t760:   \"ns\",\n\t761:   \"rxe\",\n\t762:   \"quotad\",\n\t763:   \"cycleserv\",\n\t764:   \"omserv\",\n\t765:   \"webster\",\n\t767:   \"phonebook\",\n\t769:   \"vid\",\n\t770:   \"cadlock\",\n\t771:   \"rtip\",\n\t772:   \"cycleserv2\",\n\t773:   \"submit\",\n\t774:   \"rpasswd\",\n\t775:   \"entomb\",\n\t776:   \"wpages\",\n\t777:   \"multiling-http\",\n\t780:   \"wpgs\",\n\t800:   \"mdbs-daemon\",\n\t801:   \"device\",\n\t802:   \"mbap-s\",\n\t810:   \"fcp-udp\",\n\t828:   \"itm-mcell-s\",\n\t829:   \"pkix-3-ca-ra\",\n\t830:   \"netconf-ssh\",\n\t831:   \"netconf-beep\",\n\t832:   \"netconfsoaphttp\",\n\t833:   \"netconfsoapbeep\",\n\t847:   \"dhcp-failover2\",\n\t848:   \"gdoi\",\n\t853:   \"domain-s\",\n\t854:   \"dlep\",\n\t860:   \"iscsi\",\n\t861:   \"owamp-control\",\n\t862:   \"twamp-control\",\n\t873:   \"rsync\",\n\t886:   \"iclcnet-locate\",\n\t887:   \"iclcnet-svinfo\",\n\t888:   \"accessbuilder\",\n\t900:   \"omginitialrefs\",\n\t901:   \"smpnameres\",\n\t902:   \"ideafarm-door\",\n\t903:   \"ideafarm-panic\",\n\t910:   \"kink\",\n\t911:   \"xact-backup\",\n\t912:   \"apex-mesh\",\n\t913:   \"apex-edge\",\n\t953:   \"rndc\",\n\t989:   \"ftps-data\",\n\t990:   \"ftps\",\n\t991:   \"nas\",\n\t992:   \"telnets\",\n\t993:   \"imaps\",\n\t995:   \"pop3s\",\n\t996:   \"vsinet\",\n\t997:   \"maitrd\",\n\t998:   \"busboy\",\n\t999:   \"garcon\",\n\t1000:  \"cadlock2\",\n\t1001:  \"webpush\",\n\t1010:  \"surf\",\n\t1021:  \"exp1\",\n\t1022:  \"exp2\",\n\t1025:  \"blackjack\",\n\t1026:  \"cap\",\n\t1029:  \"solid-mux\",\n\t1033:  \"netinfo-local\",\n\t1034:  \"activesync\",\n\t1035:  \"mxxrlogin\",\n\t1036:  \"nsstp\",\n\t1037:  \"ams\",\n\t1038:  \"mtqp\",\n\t1039:  \"sbl\",\n\t1040:  \"netarx\",\n\t1041:  \"danf-ak2\",\n\t1042:  \"afrog\",\n\t1043:  \"boinc-client\",\n\t1044:  \"dcutility\",\n\t1045:  \"fpitp\",\n\t1046:  \"wfremotertm\",\n\t1047:  \"neod1\",\n\t1048:  \"neod2\",\n\t1049:  \"td-postman\",\n\t1050:  \"cma\",\n\t1051:  \"optima-vnet\",\n\t1052:  \"ddt\",\n\t1053:  \"remote-as\",\n\t1054:  \"brvread\",\n\t1055:  \"ansyslmd\",\n\t1056:  \"vfo\",\n\t1057:  \"startron\",\n\t1058:  \"nim\",\n\t1059:  \"nimreg\",\n\t1060:  \"polestar\",\n\t1061:  \"kiosk\",\n\t1062:  \"veracity\",\n\t1063:  \"kyoceranetdev\",\n\t1064:  \"jstel\",\n\t1065:  \"syscomlan\",\n\t1066:  \"fpo-fns\",\n\t1067:  \"instl-boots\",\n\t1068:  \"instl-bootc\",\n\t1069:  \"cognex-insight\",\n\t1070:  \"gmrupdateserv\",\n\t1071:  \"bsquare-voip\",\n\t1072:  \"cardax\",\n\t1073:  \"bridgecontrol\",\n\t1074:  \"warmspotMgmt\",\n\t1075:  \"rdrmshc\",\n\t1076:  \"dab-sti-c\",\n\t1077:  \"imgames\",\n\t1078:  \"avocent-proxy\",\n\t1079:  \"asprovatalk\",\n\t1080:  \"socks\",\n\t1081:  \"pvuniwien\",\n\t1082:  \"amt-esd-prot\",\n\t1083:  \"ansoft-lm-1\",\n\t1084:  \"ansoft-lm-2\",\n\t1085:  \"webobjects\",\n\t1086:  \"cplscrambler-lg\",\n\t1087:  \"cplscrambler-in\",\n\t1088:  \"cplscrambler-al\",\n\t1089:  \"ff-annunc\",\n\t1090:  \"ff-fms\",\n\t1091:  \"ff-sm\",\n\t1092:  \"obrpd\",\n\t1093:  \"proofd\",\n\t1094:  \"rootd\",\n\t1095:  \"nicelink\",\n\t1096:  \"cnrprotocol\",\n\t1097:  \"sunclustermgr\",\n\t1098:  \"rmiactivation\",\n\t1099:  \"rmiregistry\",\n\t1100:  \"mctp\",\n\t1101:  \"pt2-discover\",\n\t1102:  \"adobeserver-1\",\n\t1103:  \"adobeserver-2\",\n\t1104:  \"xrl\",\n\t1105:  \"ftranhc\",\n\t1106:  \"isoipsigport-1\",\n\t1107:  \"isoipsigport-2\",\n\t1108:  \"ratio-adp\",\n\t1110:  \"webadmstart\",\n\t1111:  \"lmsocialserver\",\n\t1112:  \"icp\",\n\t1113:  \"ltp-deepspace\",\n\t1114:  \"mini-sql\",\n\t1115:  \"ardus-trns\",\n\t1116:  \"ardus-cntl\",\n\t1117:  \"ardus-mtrns\",\n\t1118:  \"sacred\",\n\t1119:  \"bnetgame\",\n\t1120:  \"bnetfile\",\n\t1121:  \"rmpp\",\n\t1122:  \"availant-mgr\",\n\t1123:  \"murray\",\n\t1124:  \"hpvmmcontrol\",\n\t1125:  \"hpvmmagent\",\n\t1126:  \"hpvmmdata\",\n\t1127:  \"kwdb-commn\",\n\t1128:  \"saphostctrl\",\n\t1129:  \"saphostctrls\",\n\t1130:  \"casp\",\n\t1131:  \"caspssl\",\n\t1132:  \"kvm-via-ip\",\n\t1133:  \"dfn\",\n\t1134:  \"aplx\",\n\t1135:  \"omnivision\",\n\t1136:  \"hhb-gateway\",\n\t1137:  \"trim\",\n\t1138:  \"encrypted-admin\",\n\t1139:  \"evm\",\n\t1140:  \"autonoc\",\n\t1141:  \"mxomss\",\n\t1142:  \"edtools\",\n\t1143:  \"imyx\",\n\t1144:  \"fuscript\",\n\t1145:  \"x9-icue\",\n\t1146:  \"audit-transfer\",\n\t1147:  \"capioverlan\",\n\t1148:  \"elfiq-repl\",\n\t1149:  \"bvtsonar\",\n\t1150:  \"blaze\",\n\t1151:  \"unizensus\",\n\t1152:  \"winpoplanmess\",\n\t1153:  \"c1222-acse\",\n\t1154:  \"resacommunity\",\n\t1155:  \"nfa\",\n\t1156:  \"iascontrol-oms\",\n\t1157:  \"iascontrol\",\n\t1158:  \"dbcontrol-oms\",\n\t1159:  \"oracle-oms\",\n\t1160:  \"olsv\",\n\t1161:  \"health-polling\",\n\t1162:  \"health-trap\",\n\t1163:  \"sddp\",\n\t1164:  \"qsm-proxy\",\n\t1165:  \"qsm-gui\",\n\t1166:  \"qsm-remote\",\n\t1167:  \"cisco-ipsla\",\n\t1168:  \"vchat\",\n\t1169:  \"tripwire\",\n\t1170:  \"atc-lm\",\n\t1171:  \"atc-appserver\",\n\t1172:  \"dnap\",\n\t1173:  \"d-cinema-rrp\",\n\t1174:  \"fnet-remote-ui\",\n\t1175:  \"dossier\",\n\t1176:  \"indigo-server\",\n\t1177:  \"dkmessenger\",\n\t1178:  \"sgi-storman\",\n\t1179:  \"b2n\",\n\t1180:  \"mc-client\",\n\t1181:  \"3comnetman\",\n\t1182:  \"accelenet\",\n\t1183:  \"llsurfup-http\",\n\t1184:  \"llsurfup-https\",\n\t1185:  \"catchpole\",\n\t1186:  \"mysql-cluster\",\n\t1187:  \"alias\",\n\t1188:  \"hp-webadmin\",\n\t1189:  \"unet\",\n\t1190:  \"commlinx-avl\",\n\t1191:  \"gpfs\",\n\t1192:  \"caids-sensor\",\n\t1193:  \"fiveacross\",\n\t1194:  \"openvpn\",\n\t1195:  \"rsf-1\",\n\t1196:  \"netmagic\",\n\t1197:  \"carrius-rshell\",\n\t1198:  \"cajo-discovery\",\n\t1199:  \"dmidi\",\n\t1200:  \"scol\",\n\t1201:  \"nucleus-sand\",\n\t1202:  \"caiccipc\",\n\t1203:  \"ssslic-mgr\",\n\t1204:  \"ssslog-mgr\",\n\t1205:  \"accord-mgc\",\n\t1206:  \"anthony-data\",\n\t1207:  \"metasage\",\n\t1208:  \"seagull-ais\",\n\t1209:  \"ipcd3\",\n\t1210:  \"eoss\",\n\t1211:  \"groove-dpp\",\n\t1212:  \"lupa\",\n\t1213:  \"mpc-lifenet\",\n\t1214:  \"kazaa\",\n\t1215:  \"scanstat-1\",\n\t1216:  \"etebac5\",\n\t1217:  \"hpss-ndapi\",\n\t1218:  \"aeroflight-ads\",\n\t1219:  \"aeroflight-ret\",\n\t1220:  \"qt-serveradmin\",\n\t1221:  \"sweetware-apps\",\n\t1222:  \"nerv\",\n\t1223:  \"tgp\",\n\t1224:  \"vpnz\",\n\t1225:  \"slinkysearch\",\n\t1226:  \"stgxfws\",\n\t1227:  \"dns2go\",\n\t1228:  \"florence\",\n\t1229:  \"zented\",\n\t1230:  \"periscope\",\n\t1231:  \"menandmice-lpm\",\n\t1232:  \"first-defense\",\n\t1233:  \"univ-appserver\",\n\t1234:  \"search-agent\",\n\t1235:  \"mosaicsyssvc1\",\n\t1236:  \"bvcontrol\",\n\t1237:  \"tsdos390\",\n\t1238:  \"hacl-qs\",\n\t1239:  \"nmsd\",\n\t1240:  \"instantia\",\n\t1241:  \"nessus\",\n\t1242:  \"nmasoverip\",\n\t1243:  \"serialgateway\",\n\t1244:  \"isbconference1\",\n\t1245:  \"isbconference2\",\n\t1246:  \"payrouter\",\n\t1247:  \"visionpyramid\",\n\t1248:  \"hermes\",\n\t1249:  \"mesavistaco\",\n\t1250:  \"swldy-sias\",\n\t1251:  \"servergraph\",\n\t1252:  \"bspne-pcc\",\n\t1253:  \"q55-pcc\",\n\t1254:  \"de-noc\",\n\t1255:  \"de-cache-query\",\n\t1256:  \"de-server\",\n\t1257:  \"shockwave2\",\n\t1258:  \"opennl\",\n\t1259:  \"opennl-voice\",\n\t1260:  \"ibm-ssd\",\n\t1261:  \"mpshrsv\",\n\t1262:  \"qnts-orb\",\n\t1263:  \"dka\",\n\t1264:  \"prat\",\n\t1265:  \"dssiapi\",\n\t1266:  \"dellpwrappks\",\n\t1267:  \"epc\",\n\t1268:  \"propel-msgsys\",\n\t1269:  \"watilapp\",\n\t1270:  \"opsmgr\",\n\t1271:  \"excw\",\n\t1272:  \"cspmlockmgr\",\n\t1273:  \"emc-gateway\",\n\t1274:  \"t1distproc\",\n\t1275:  \"ivcollector\",\n\t1277:  \"miva-mqs\",\n\t1278:  \"dellwebadmin-1\",\n\t1279:  \"dellwebadmin-2\",\n\t1280:  \"pictrography\",\n\t1281:  \"healthd\",\n\t1282:  \"emperion\",\n\t1283:  \"productinfo\",\n\t1284:  \"iee-qfx\",\n\t1285:  \"neoiface\",\n\t1286:  \"netuitive\",\n\t1287:  \"routematch\",\n\t1288:  \"navbuddy\",\n\t1289:  \"jwalkserver\",\n\t1290:  \"winjaserver\",\n\t1291:  \"seagulllms\",\n\t1292:  \"dsdn\",\n\t1293:  \"pkt-krb-ipsec\",\n\t1294:  \"cmmdriver\",\n\t1295:  \"ehtp\",\n\t1296:  \"dproxy\",\n\t1297:  \"sdproxy\",\n\t1298:  \"lpcp\",\n\t1299:  \"hp-sci\",\n\t1300:  \"h323hostcallsc\",\n\t1301:  \"ci3-software-1\",\n\t1302:  \"ci3-software-2\",\n\t1303:  \"sftsrv\",\n\t1304:  \"boomerang\",\n\t1305:  \"pe-mike\",\n\t1306:  \"re-conn-proto\",\n\t1307:  \"pacmand\",\n\t1308:  \"odsi\",\n\t1309:  \"jtag-server\",\n\t1310:  \"husky\",\n\t1311:  \"rxmon\",\n\t1312:  \"sti-envision\",\n\t1313:  \"bmc-patroldb\",\n\t1314:  \"pdps\",\n\t1315:  \"els\",\n\t1316:  \"exbit-escp\",\n\t1317:  \"vrts-ipcserver\",\n\t1318:  \"krb5gatekeeper\",\n\t1319:  \"amx-icsp\",\n\t1320:  \"amx-axbnet\",\n\t1321:  \"pip\",\n\t1322:  \"novation\",\n\t1323:  \"brcd\",\n\t1324:  \"delta-mcp\",\n\t1325:  \"dx-instrument\",\n\t1326:  \"wimsic\",\n\t1327:  \"ultrex\",\n\t1328:  \"ewall\",\n\t1329:  \"netdb-export\",\n\t1330:  \"streetperfect\",\n\t1331:  \"intersan\",\n\t1332:  \"pcia-rxp-b\",\n\t1333:  \"passwrd-policy\",\n\t1334:  \"writesrv\",\n\t1335:  \"digital-notary\",\n\t1336:  \"ischat\",\n\t1337:  \"menandmice-dns\",\n\t1338:  \"wmc-log-svc\",\n\t1339:  \"kjtsiteserver\",\n\t1340:  \"naap\",\n\t1341:  \"qubes\",\n\t1342:  \"esbroker\",\n\t1343:  \"re101\",\n\t1344:  \"icap\",\n\t1345:  \"vpjp\",\n\t1346:  \"alta-ana-lm\",\n\t1347:  \"bbn-mmc\",\n\t1348:  \"bbn-mmx\",\n\t1349:  \"sbook\",\n\t1350:  \"editbench\",\n\t1351:  \"equationbuilder\",\n\t1352:  \"lotusnote\",\n\t1353:  \"relief\",\n\t1354:  \"XSIP-network\",\n\t1355:  \"intuitive-edge\",\n\t1356:  \"cuillamartin\",\n\t1357:  \"pegboard\",\n\t1358:  \"connlcli\",\n\t1359:  \"ftsrv\",\n\t1360:  \"mimer\",\n\t1361:  \"linx\",\n\t1362:  \"timeflies\",\n\t1363:  \"ndm-requester\",\n\t1364:  \"ndm-server\",\n\t1365:  \"adapt-sna\",\n\t1366:  \"netware-csp\",\n\t1367:  \"dcs\",\n\t1368:  \"screencast\",\n\t1369:  \"gv-us\",\n\t1370:  \"us-gv\",\n\t1371:  \"fc-cli\",\n\t1372:  \"fc-ser\",\n\t1373:  \"chromagrafx\",\n\t1374:  \"molly\",\n\t1375:  \"bytex\",\n\t1376:  \"ibm-pps\",\n\t1377:  \"cichlid\",\n\t1378:  \"elan\",\n\t1379:  \"dbreporter\",\n\t1380:  \"telesis-licman\",\n\t1381:  \"apple-licman\",\n\t1382:  \"udt-os\",\n\t1383:  \"gwha\",\n\t1384:  \"os-licman\",\n\t1385:  \"atex-elmd\",\n\t1386:  \"checksum\",\n\t1387:  \"cadsi-lm\",\n\t1388:  \"objective-dbc\",\n\t1389:  \"iclpv-dm\",\n\t1390:  \"iclpv-sc\",\n\t1391:  \"iclpv-sas\",\n\t1392:  \"iclpv-pm\",\n\t1393:  \"iclpv-nls\",\n\t1394:  \"iclpv-nlc\",\n\t1395:  \"iclpv-wsm\",\n\t1396:  \"dvl-activemail\",\n\t1397:  \"audio-activmail\",\n\t1398:  \"video-activmail\",\n\t1399:  \"cadkey-licman\",\n\t1400:  \"cadkey-tablet\",\n\t1401:  \"goldleaf-licman\",\n\t1402:  \"prm-sm-np\",\n\t1403:  \"prm-nm-np\",\n\t1404:  \"igi-lm\",\n\t1405:  \"ibm-res\",\n\t1406:  \"netlabs-lm\",\n\t1407:  \"tibet-server\",\n\t1408:  \"sophia-lm\",\n\t1409:  \"here-lm\",\n\t1410:  \"hiq\",\n\t1411:  \"af\",\n\t1412:  \"innosys\",\n\t1413:  \"innosys-acl\",\n\t1414:  \"ibm-mqseries\",\n\t1415:  \"dbstar\",\n\t1416:  \"novell-lu6-2\",\n\t1417:  \"timbuktu-srv1\",\n\t1418:  \"timbuktu-srv2\",\n\t1419:  \"timbuktu-srv3\",\n\t1420:  \"timbuktu-srv4\",\n\t1421:  \"gandalf-lm\",\n\t1422:  \"autodesk-lm\",\n\t1423:  \"essbase\",\n\t1424:  \"hybrid\",\n\t1425:  \"zion-lm\",\n\t1426:  \"sais\",\n\t1427:  \"mloadd\",\n\t1428:  \"informatik-lm\",\n\t1429:  \"nms\",\n\t1430:  \"tpdu\",\n\t1431:  \"rgtp\",\n\t1432:  \"blueberry-lm\",\n\t1433:  \"ms-sql-s\",\n\t1434:  \"ms-sql-m\",\n\t1435:  \"ibm-cics\",\n\t1436:  \"saism\",\n\t1437:  \"tabula\",\n\t1438:  \"eicon-server\",\n\t1439:  \"eicon-x25\",\n\t1440:  \"eicon-slp\",\n\t1441:  \"cadis-1\",\n\t1442:  \"cadis-2\",\n\t1443:  \"ies-lm\",\n\t1444:  \"marcam-lm\",\n\t1445:  \"proxima-lm\",\n\t1446:  \"ora-lm\",\n\t1447:  \"apri-lm\",\n\t1448:  \"oc-lm\",\n\t1449:  \"peport\",\n\t1450:  \"dwf\",\n\t1451:  \"infoman\",\n\t1452:  \"gtegsc-lm\",\n\t1453:  \"genie-lm\",\n\t1454:  \"interhdl-elmd\",\n\t1455:  \"esl-lm\",\n\t1456:  \"dca\",\n\t1457:  \"valisys-lm\",\n\t1458:  \"nrcabq-lm\",\n\t1459:  \"proshare1\",\n\t1460:  \"proshare2\",\n\t1461:  \"ibm-wrless-lan\",\n\t1462:  \"world-lm\",\n\t1463:  \"nucleus\",\n\t1464:  \"msl-lmd\",\n\t1465:  \"pipes\",\n\t1466:  \"oceansoft-lm\",\n\t1467:  \"csdmbase\",\n\t1468:  \"csdm\",\n\t1469:  \"aal-lm\",\n\t1470:  \"uaiact\",\n\t1471:  \"csdmbase\",\n\t1472:  \"csdm\",\n\t1473:  \"openmath\",\n\t1474:  \"telefinder\",\n\t1475:  \"taligent-lm\",\n\t1476:  \"clvm-cfg\",\n\t1477:  \"ms-sna-server\",\n\t1478:  \"ms-sna-base\",\n\t1479:  \"dberegister\",\n\t1480:  \"pacerforum\",\n\t1481:  \"airs\",\n\t1482:  \"miteksys-lm\",\n\t1483:  \"afs\",\n\t1484:  \"confluent\",\n\t1485:  \"lansource\",\n\t1486:  \"nms-topo-serv\",\n\t1487:  \"localinfosrvr\",\n\t1488:  \"docstor\",\n\t1489:  \"dmdocbroker\",\n\t1490:  \"insitu-conf\",\n\t1492:  \"stone-design-1\",\n\t1493:  \"netmap-lm\",\n\t1494:  \"ica\",\n\t1495:  \"cvc\",\n\t1496:  \"liberty-lm\",\n\t1497:  \"rfx-lm\",\n\t1498:  \"sybase-sqlany\",\n\t1499:  \"fhc\",\n\t1500:  \"vlsi-lm\",\n\t1501:  \"saiscm\",\n\t1502:  \"shivadiscovery\",\n\t1503:  \"imtc-mcs\",\n\t1504:  \"evb-elm\",\n\t1505:  \"funkproxy\",\n\t1506:  \"utcd\",\n\t1507:  \"symplex\",\n\t1508:  \"diagmond\",\n\t1509:  \"robcad-lm\",\n\t1510:  \"mvx-lm\",\n\t1511:  \"3l-l1\",\n\t1512:  \"wins\",\n\t1513:  \"fujitsu-dtc\",\n\t1514:  \"fujitsu-dtcns\",\n\t1515:  \"ifor-protocol\",\n\t1516:  \"vpad\",\n\t1517:  \"vpac\",\n\t1518:  \"vpvd\",\n\t1519:  \"vpvc\",\n\t1520:  \"atm-zip-office\",\n\t1521:  \"ncube-lm\",\n\t1522:  \"ricardo-lm\",\n\t1523:  \"cichild-lm\",\n\t1524:  \"ingreslock\",\n\t1525:  \"orasrv\",\n\t1526:  \"pdap-np\",\n\t1527:  \"tlisrv\",\n\t1529:  \"coauthor\",\n\t1530:  \"rap-service\",\n\t1531:  \"rap-listen\",\n\t1532:  \"miroconnect\",\n\t1533:  \"virtual-places\",\n\t1534:  \"micromuse-lm\",\n\t1535:  \"ampr-info\",\n\t1536:  \"ampr-inter\",\n\t1537:  \"sdsc-lm\",\n\t1538:  \"3ds-lm\",\n\t1539:  \"intellistor-lm\",\n\t1540:  \"rds\",\n\t1541:  \"rds2\",\n\t1542:  \"gridgen-elmd\",\n\t1543:  \"simba-cs\",\n\t1544:  \"aspeclmd\",\n\t1545:  \"vistium-share\",\n\t1546:  \"abbaccuray\",\n\t1547:  \"laplink\",\n\t1548:  \"axon-lm\",\n\t1549:  \"shivahose\",\n\t1550:  \"3m-image-lm\",\n\t1551:  \"hecmtl-db\",\n\t1552:  \"pciarray\",\n\t1553:  \"sna-cs\",\n\t1554:  \"caci-lm\",\n\t1555:  \"livelan\",\n\t1556:  \"veritas-pbx\",\n\t1557:  \"arbortext-lm\",\n\t1558:  \"xingmpeg\",\n\t1559:  \"web2host\",\n\t1560:  \"asci-val\",\n\t1561:  \"facilityview\",\n\t1562:  \"pconnectmgr\",\n\t1563:  \"cadabra-lm\",\n\t1564:  \"pay-per-view\",\n\t1565:  \"winddlb\",\n\t1566:  \"corelvideo\",\n\t1567:  \"jlicelmd\",\n\t1568:  \"tsspmap\",\n\t1569:  \"ets\",\n\t1570:  \"orbixd\",\n\t1571:  \"rdb-dbs-disp\",\n\t1572:  \"chip-lm\",\n\t1573:  \"itscomm-ns\",\n\t1574:  \"mvel-lm\",\n\t1575:  \"oraclenames\",\n\t1576:  \"moldflow-lm\",\n\t1577:  \"hypercube-lm\",\n\t1578:  \"jacobus-lm\",\n\t1579:  \"ioc-sea-lm\",\n\t1580:  \"tn-tl-r1\",\n\t1581:  \"mil-2045-47001\",\n\t1582:  \"msims\",\n\t1583:  \"simbaexpress\",\n\t1584:  \"tn-tl-fd2\",\n\t1585:  \"intv\",\n\t1586:  \"ibm-abtact\",\n\t1587:  \"pra-elmd\",\n\t1588:  \"triquest-lm\",\n\t1589:  \"vqp\",\n\t1590:  \"gemini-lm\",\n\t1591:  \"ncpm-pm\",\n\t1592:  \"commonspace\",\n\t1593:  \"mainsoft-lm\",\n\t1594:  \"sixtrak\",\n\t1595:  \"radio\",\n\t1596:  \"radio-sm\",\n\t1597:  \"orbplus-iiop\",\n\t1598:  \"picknfs\",\n\t1599:  \"simbaservices\",\n\t1600:  \"issd\",\n\t1601:  \"aas\",\n\t1602:  \"inspect\",\n\t1603:  \"picodbc\",\n\t1604:  \"icabrowser\",\n\t1605:  \"slp\",\n\t1606:  \"slm-api\",\n\t1607:  \"stt\",\n\t1608:  \"smart-lm\",\n\t1609:  \"isysg-lm\",\n\t1610:  \"taurus-wh\",\n\t1611:  \"ill\",\n\t1612:  \"netbill-trans\",\n\t1613:  \"netbill-keyrep\",\n\t1614:  \"netbill-cred\",\n\t1615:  \"netbill-auth\",\n\t1616:  \"netbill-prod\",\n\t1617:  \"nimrod-agent\",\n\t1618:  \"skytelnet\",\n\t1619:  \"xs-openstorage\",\n\t1620:  \"faxportwinport\",\n\t1621:  \"softdataphone\",\n\t1622:  \"ontime\",\n\t1623:  \"jaleosnd\",\n\t1624:  \"udp-sr-port\",\n\t1625:  \"svs-omagent\",\n\t1626:  \"shockwave\",\n\t1627:  \"t128-gateway\",\n\t1628:  \"lontalk-norm\",\n\t1629:  \"lontalk-urgnt\",\n\t1630:  \"oraclenet8cman\",\n\t1631:  \"visitview\",\n\t1632:  \"pammratc\",\n\t1633:  \"pammrpc\",\n\t1634:  \"loaprobe\",\n\t1635:  \"edb-server1\",\n\t1636:  \"isdc\",\n\t1637:  \"islc\",\n\t1638:  \"ismc\",\n\t1639:  \"cert-initiator\",\n\t1640:  \"cert-responder\",\n\t1641:  \"invision\",\n\t1642:  \"isis-am\",\n\t1643:  \"isis-ambc\",\n\t1644:  \"saiseh\",\n\t1645:  \"sightline\",\n\t1646:  \"sa-msg-port\",\n\t1647:  \"rsap\",\n\t1648:  \"concurrent-lm\",\n\t1649:  \"kermit\",\n\t1650:  \"nkd\",\n\t1651:  \"shiva-confsrvr\",\n\t1652:  \"xnmp\",\n\t1653:  \"alphatech-lm\",\n\t1654:  \"stargatealerts\",\n\t1655:  \"dec-mbadmin\",\n\t1656:  \"dec-mbadmin-h\",\n\t1657:  \"fujitsu-mmpdc\",\n\t1658:  \"sixnetudr\",\n\t1659:  \"sg-lm\",\n\t1660:  \"skip-mc-gikreq\",\n\t1661:  \"netview-aix-1\",\n\t1662:  \"netview-aix-2\",\n\t1663:  \"netview-aix-3\",\n\t1664:  \"netview-aix-4\",\n\t1665:  \"netview-aix-5\",\n\t1666:  \"netview-aix-6\",\n\t1667:  \"netview-aix-7\",\n\t1668:  \"netview-aix-8\",\n\t1669:  \"netview-aix-9\",\n\t1670:  \"netview-aix-10\",\n\t1671:  \"netview-aix-11\",\n\t1672:  \"netview-aix-12\",\n\t1673:  \"proshare-mc-1\",\n\t1674:  \"proshare-mc-2\",\n\t1675:  \"pdp\",\n\t1676:  \"netcomm1\",\n\t1677:  \"groupwise\",\n\t1678:  \"prolink\",\n\t1679:  \"darcorp-lm\",\n\t1680:  \"microcom-sbp\",\n\t1681:  \"sd-elmd\",\n\t1682:  \"lanyon-lantern\",\n\t1683:  \"ncpm-hip\",\n\t1684:  \"snaresecure\",\n\t1685:  \"n2nremote\",\n\t1686:  \"cvmon\",\n\t1687:  \"nsjtp-ctrl\",\n\t1688:  \"nsjtp-data\",\n\t1689:  \"firefox\",\n\t1690:  \"ng-umds\",\n\t1691:  \"empire-empuma\",\n\t1692:  \"sstsys-lm\",\n\t1693:  \"rrirtr\",\n\t1694:  \"rrimwm\",\n\t1695:  \"rrilwm\",\n\t1696:  \"rrifmm\",\n\t1697:  \"rrisat\",\n\t1698:  \"rsvp-encap-1\",\n\t1699:  \"rsvp-encap-2\",\n\t1700:  \"mps-raft\",\n\t1701:  \"l2f\",\n\t1702:  \"deskshare\",\n\t1703:  \"hb-engine\",\n\t1704:  \"bcs-broker\",\n\t1705:  \"slingshot\",\n\t1706:  \"jetform\",\n\t1707:  \"vdmplay\",\n\t1708:  \"gat-lmd\",\n\t1709:  \"centra\",\n\t1710:  \"impera\",\n\t1711:  \"pptconference\",\n\t1712:  \"registrar\",\n\t1713:  \"conferencetalk\",\n\t1714:  \"sesi-lm\",\n\t1715:  \"houdini-lm\",\n\t1716:  \"xmsg\",\n\t1717:  \"fj-hdnet\",\n\t1718:  \"h323gatedisc\",\n\t1719:  \"h323gatestat\",\n\t1720:  \"h323hostcall\",\n\t1721:  \"caicci\",\n\t1722:  \"hks-lm\",\n\t1723:  \"pptp\",\n\t1724:  \"csbphonemaster\",\n\t1725:  \"iden-ralp\",\n\t1726:  \"iberiagames\",\n\t1727:  \"winddx\",\n\t1728:  \"telindus\",\n\t1729:  \"citynl\",\n\t1730:  \"roketz\",\n\t1731:  \"msiccp\",\n\t1732:  \"proxim\",\n\t1733:  \"siipat\",\n\t1734:  \"cambertx-lm\",\n\t1735:  \"privatechat\",\n\t1736:  \"street-stream\",\n\t1737:  \"ultimad\",\n\t1738:  \"gamegen1\",\n\t1739:  \"webaccess\",\n\t1740:  \"encore\",\n\t1741:  \"cisco-net-mgmt\",\n\t1742:  \"3Com-nsd\",\n\t1743:  \"cinegrfx-lm\",\n\t1744:  \"ncpm-ft\",\n\t1745:  \"remote-winsock\",\n\t1746:  \"ftrapid-1\",\n\t1747:  \"ftrapid-2\",\n\t1748:  \"oracle-em1\",\n\t1749:  \"aspen-services\",\n\t1750:  \"sslp\",\n\t1751:  \"swiftnet\",\n\t1752:  \"lofr-lm\",\n\t1753:  \"predatar-comms\",\n\t1754:  \"oracle-em2\",\n\t1755:  \"ms-streaming\",\n\t1756:  \"capfast-lmd\",\n\t1757:  \"cnhrp\",\n\t1758:  \"tftp-mcast\",\n\t1759:  \"spss-lm\",\n\t1760:  \"www-ldap-gw\",\n\t1761:  \"cft-0\",\n\t1762:  \"cft-1\",\n\t1763:  \"cft-2\",\n\t1764:  \"cft-3\",\n\t1765:  \"cft-4\",\n\t1766:  \"cft-5\",\n\t1767:  \"cft-6\",\n\t1768:  \"cft-7\",\n\t1769:  \"bmc-net-adm\",\n\t1770:  \"bmc-net-svc\",\n\t1771:  \"vaultbase\",\n\t1772:  \"essweb-gw\",\n\t1773:  \"kmscontrol\",\n\t1774:  \"global-dtserv\",\n\t1775:  \"vdab\",\n\t1776:  \"femis\",\n\t1777:  \"powerguardian\",\n\t1778:  \"prodigy-intrnet\",\n\t1779:  \"pharmasoft\",\n\t1780:  \"dpkeyserv\",\n\t1781:  \"answersoft-lm\",\n\t1782:  \"hp-hcip\",\n\t1784:  \"finle-lm\",\n\t1785:  \"windlm\",\n\t1786:  \"funk-logger\",\n\t1787:  \"funk-license\",\n\t1788:  \"psmond\",\n\t1789:  \"hello\",\n\t1790:  \"nmsp\",\n\t1791:  \"ea1\",\n\t1792:  \"ibm-dt-2\",\n\t1793:  \"rsc-robot\",\n\t1794:  \"cera-bcm\",\n\t1795:  \"dpi-proxy\",\n\t1796:  \"vocaltec-admin\",\n\t1797:  \"uma\",\n\t1798:  \"etp\",\n\t1799:  \"netrisk\",\n\t1800:  \"ansys-lm\",\n\t1801:  \"msmq\",\n\t1802:  \"concomp1\",\n\t1803:  \"hp-hcip-gwy\",\n\t1804:  \"enl\",\n\t1805:  \"enl-name\",\n\t1806:  \"musiconline\",\n\t1807:  \"fhsp\",\n\t1808:  \"oracle-vp2\",\n\t1809:  \"oracle-vp1\",\n\t1810:  \"jerand-lm\",\n\t1811:  \"scientia-sdb\",\n\t1812:  \"radius\",\n\t1813:  \"radius-acct\",\n\t1814:  \"tdp-suite\",\n\t1815:  \"mmpft\",\n\t1816:  \"harp\",\n\t1817:  \"rkb-oscs\",\n\t1818:  \"etftp\",\n\t1819:  \"plato-lm\",\n\t1820:  \"mcagent\",\n\t1821:  \"donnyworld\",\n\t1822:  \"es-elmd\",\n\t1823:  \"unisys-lm\",\n\t1824:  \"metrics-pas\",\n\t1825:  \"direcpc-video\",\n\t1826:  \"ardt\",\n\t1827:  \"asi\",\n\t1828:  \"itm-mcell-u\",\n\t1829:  \"optika-emedia\",\n\t1830:  \"net8-cman\",\n\t1831:  \"myrtle\",\n\t1832:  \"tht-treasure\",\n\t1833:  \"udpradio\",\n\t1834:  \"ardusuni\",\n\t1835:  \"ardusmul\",\n\t1836:  \"ste-smsc\",\n\t1837:  \"csoft1\",\n\t1838:  \"talnet\",\n\t1839:  \"netopia-vo1\",\n\t1840:  \"netopia-vo2\",\n\t1841:  \"netopia-vo3\",\n\t1842:  \"netopia-vo4\",\n\t1843:  \"netopia-vo5\",\n\t1844:  \"direcpc-dll\",\n\t1845:  \"altalink\",\n\t1846:  \"tunstall-pnc\",\n\t1847:  \"slp-notify\",\n\t1848:  \"fjdocdist\",\n\t1849:  \"alpha-sms\",\n\t1850:  \"gsi\",\n\t1851:  \"ctcd\",\n\t1852:  \"virtual-time\",\n\t1853:  \"vids-avtp\",\n\t1854:  \"buddy-draw\",\n\t1855:  \"fiorano-rtrsvc\",\n\t1856:  \"fiorano-msgsvc\",\n\t1857:  \"datacaptor\",\n\t1858:  \"privateark\",\n\t1859:  \"gammafetchsvr\",\n\t1860:  \"sunscalar-svc\",\n\t1861:  \"lecroy-vicp\",\n\t1862:  \"mysql-cm-agent\",\n\t1863:  \"msnp\",\n\t1864:  \"paradym-31port\",\n\t1865:  \"entp\",\n\t1866:  \"swrmi\",\n\t1867:  \"udrive\",\n\t1868:  \"viziblebrowser\",\n\t1869:  \"transact\",\n\t1870:  \"sunscalar-dns\",\n\t1871:  \"canocentral0\",\n\t1872:  \"canocentral1\",\n\t1873:  \"fjmpjps\",\n\t1874:  \"fjswapsnp\",\n\t1875:  \"westell-stats\",\n\t1876:  \"ewcappsrv\",\n\t1877:  \"hp-webqosdb\",\n\t1878:  \"drmsmc\",\n\t1879:  \"nettgain-nms\",\n\t1880:  \"vsat-control\",\n\t1881:  \"ibm-mqseries2\",\n\t1882:  \"ecsqdmn\",\n\t1883:  \"mqtt\",\n\t1884:  \"idmaps\",\n\t1885:  \"vrtstrapserver\",\n\t1886:  \"leoip\",\n\t1887:  \"filex-lport\",\n\t1888:  \"ncconfig\",\n\t1889:  \"unify-adapter\",\n\t1890:  \"wilkenlistener\",\n\t1891:  \"childkey-notif\",\n\t1892:  \"childkey-ctrl\",\n\t1893:  \"elad\",\n\t1894:  \"o2server-port\",\n\t1896:  \"b-novative-ls\",\n\t1897:  \"metaagent\",\n\t1898:  \"cymtec-port\",\n\t1899:  \"mc2studios\",\n\t1900:  \"ssdp\",\n\t1901:  \"fjicl-tep-a\",\n\t1902:  \"fjicl-tep-b\",\n\t1903:  \"linkname\",\n\t1904:  \"fjicl-tep-c\",\n\t1905:  \"sugp\",\n\t1906:  \"tpmd\",\n\t1907:  \"intrastar\",\n\t1908:  \"dawn\",\n\t1909:  \"global-wlink\",\n\t1910:  \"ultrabac\",\n\t1911:  \"mtp\",\n\t1912:  \"rhp-iibp\",\n\t1913:  \"armadp\",\n\t1914:  \"elm-momentum\",\n\t1915:  \"facelink\",\n\t1916:  \"persona\",\n\t1917:  \"noagent\",\n\t1918:  \"can-nds\",\n\t1919:  \"can-dch\",\n\t1920:  \"can-ferret\",\n\t1921:  \"noadmin\",\n\t1922:  \"tapestry\",\n\t1923:  \"spice\",\n\t1924:  \"xiip\",\n\t1925:  \"discovery-port\",\n\t1926:  \"egs\",\n\t1927:  \"videte-cipc\",\n\t1928:  \"emsd-port\",\n\t1929:  \"bandwiz-system\",\n\t1930:  \"driveappserver\",\n\t1931:  \"amdsched\",\n\t1932:  \"ctt-broker\",\n\t1933:  \"xmapi\",\n\t1934:  \"xaapi\",\n\t1935:  \"macromedia-fcs\",\n\t1936:  \"jetcmeserver\",\n\t1937:  \"jwserver\",\n\t1938:  \"jwclient\",\n\t1939:  \"jvserver\",\n\t1940:  \"jvclient\",\n\t1941:  \"dic-aida\",\n\t1942:  \"res\",\n\t1943:  \"beeyond-media\",\n\t1944:  \"close-combat\",\n\t1945:  \"dialogic-elmd\",\n\t1946:  \"tekpls\",\n\t1947:  \"sentinelsrm\",\n\t1948:  \"eye2eye\",\n\t1949:  \"ismaeasdaqlive\",\n\t1950:  \"ismaeasdaqtest\",\n\t1951:  \"bcs-lmserver\",\n\t1952:  \"mpnjsc\",\n\t1953:  \"rapidbase\",\n\t1954:  \"abr-api\",\n\t1955:  \"abr-secure\",\n\t1956:  \"vrtl-vmf-ds\",\n\t1957:  \"unix-status\",\n\t1958:  \"dxadmind\",\n\t1959:  \"simp-all\",\n\t1960:  \"nasmanager\",\n\t1961:  \"bts-appserver\",\n\t1962:  \"biap-mp\",\n\t1963:  \"webmachine\",\n\t1964:  \"solid-e-engine\",\n\t1965:  \"tivoli-npm\",\n\t1966:  \"slush\",\n\t1967:  \"sns-quote\",\n\t1968:  \"lipsinc\",\n\t1969:  \"lipsinc1\",\n\t1970:  \"netop-rc\",\n\t1971:  \"netop-school\",\n\t1972:  \"intersys-cache\",\n\t1973:  \"dlsrap\",\n\t1974:  \"drp\",\n\t1975:  \"tcoflashagent\",\n\t1976:  \"tcoregagent\",\n\t1977:  \"tcoaddressbook\",\n\t1978:  \"unisql\",\n\t1979:  \"unisql-java\",\n\t1980:  \"pearldoc-xact\",\n\t1981:  \"p2pq\",\n\t1982:  \"estamp\",\n\t1983:  \"lhtp\",\n\t1984:  \"bb\",\n\t1985:  \"hsrp\",\n\t1986:  \"licensedaemon\",\n\t1987:  \"tr-rsrb-p1\",\n\t1988:  \"tr-rsrb-p2\",\n\t1989:  \"tr-rsrb-p3\",\n\t1990:  \"stun-p1\",\n\t1991:  \"stun-p2\",\n\t1992:  \"stun-p3\",\n\t1993:  \"snmp-tcp-port\",\n\t1994:  \"stun-port\",\n\t1995:  \"perf-port\",\n\t1996:  \"tr-rsrb-port\",\n\t1997:  \"gdp-port\",\n\t1998:  \"x25-svc-port\",\n\t1999:  \"tcp-id-port\",\n\t2000:  \"cisco-sccp\",\n\t2001:  \"dc\",\n\t2002:  \"globe\",\n\t2003:  \"brutus\",\n\t2004:  \"mailbox\",\n\t2005:  \"berknet\",\n\t2006:  \"invokator\",\n\t2007:  \"dectalk\",\n\t2008:  \"conf\",\n\t2009:  \"news\",\n\t2010:  \"search\",\n\t2011:  \"raid-cc\",\n\t2012:  \"ttyinfo\",\n\t2013:  \"raid-am\",\n\t2014:  \"troff\",\n\t2015:  \"cypress\",\n\t2016:  \"bootserver\",\n\t2017:  \"cypress-stat\",\n\t2018:  \"terminaldb\",\n\t2019:  \"whosockami\",\n\t2020:  \"xinupageserver\",\n\t2021:  \"servexec\",\n\t2022:  \"down\",\n\t2023:  \"xinuexpansion3\",\n\t2024:  \"xinuexpansion4\",\n\t2025:  \"ellpack\",\n\t2026:  \"scrabble\",\n\t2027:  \"shadowserver\",\n\t2028:  \"submitserver\",\n\t2029:  \"hsrpv6\",\n\t2030:  \"device2\",\n\t2031:  \"mobrien-chat\",\n\t2032:  \"blackboard\",\n\t2033:  \"glogger\",\n\t2034:  \"scoremgr\",\n\t2035:  \"imsldoc\",\n\t2036:  \"e-dpnet\",\n\t2037:  \"applus\",\n\t2038:  \"objectmanager\",\n\t2039:  \"prizma\",\n\t2040:  \"lam\",\n\t2041:  \"interbase\",\n\t2042:  \"isis\",\n\t2043:  \"isis-bcast\",\n\t2044:  \"rimsl\",\n\t2045:  \"cdfunc\",\n\t2046:  \"sdfunc\",\n\t2047:  \"dls\",\n\t2048:  \"dls-monitor\",\n\t2049:  \"shilp\",\n\t2050:  \"av-emb-config\",\n\t2051:  \"epnsdp\",\n\t2052:  \"clearvisn\",\n\t2053:  \"lot105-ds-upd\",\n\t2054:  \"weblogin\",\n\t2055:  \"iop\",\n\t2056:  \"omnisky\",\n\t2057:  \"rich-cp\",\n\t2058:  \"newwavesearch\",\n\t2059:  \"bmc-messaging\",\n\t2060:  \"teleniumdaemon\",\n\t2061:  \"netmount\",\n\t2062:  \"icg-swp\",\n\t2063:  \"icg-bridge\",\n\t2064:  \"icg-iprelay\",\n\t2065:  \"dlsrpn\",\n\t2066:  \"aura\",\n\t2067:  \"dlswpn\",\n\t2068:  \"avauthsrvprtcl\",\n\t2069:  \"event-port\",\n\t2070:  \"ah-esp-encap\",\n\t2071:  \"acp-port\",\n\t2072:  \"msync\",\n\t2073:  \"gxs-data-port\",\n\t2074:  \"vrtl-vmf-sa\",\n\t2075:  \"newlixengine\",\n\t2076:  \"newlixconfig\",\n\t2077:  \"tsrmagt\",\n\t2078:  \"tpcsrvr\",\n\t2079:  \"idware-router\",\n\t2080:  \"autodesk-nlm\",\n\t2081:  \"kme-trap-port\",\n\t2082:  \"infowave\",\n\t2083:  \"radsec\",\n\t2084:  \"sunclustergeo\",\n\t2085:  \"ada-cip\",\n\t2086:  \"gnunet\",\n\t2087:  \"eli\",\n\t2088:  \"ip-blf\",\n\t2089:  \"sep\",\n\t2090:  \"lrp\",\n\t2091:  \"prp\",\n\t2092:  \"descent3\",\n\t2093:  \"nbx-cc\",\n\t2094:  \"nbx-au\",\n\t2095:  \"nbx-ser\",\n\t2096:  \"nbx-dir\",\n\t2097:  \"jetformpreview\",\n\t2098:  \"dialog-port\",\n\t2099:  \"h2250-annex-g\",\n\t2100:  \"amiganetfs\",\n\t2101:  \"rtcm-sc104\",\n\t2102:  \"zephyr-srv\",\n\t2103:  \"zephyr-clt\",\n\t2104:  \"zephyr-hm\",\n\t2105:  \"minipay\",\n\t2106:  \"mzap\",\n\t2107:  \"bintec-admin\",\n\t2108:  \"comcam\",\n\t2109:  \"ergolight\",\n\t2110:  \"umsp\",\n\t2111:  \"dsatp\",\n\t2112:  \"idonix-metanet\",\n\t2113:  \"hsl-storm\",\n\t2114:  \"newheights\",\n\t2115:  \"kdm\",\n\t2116:  \"ccowcmr\",\n\t2117:  \"mentaclient\",\n\t2118:  \"mentaserver\",\n\t2119:  \"gsigatekeeper\",\n\t2120:  \"qencp\",\n\t2121:  \"scientia-ssdb\",\n\t2122:  \"caupc-remote\",\n\t2123:  \"gtp-control\",\n\t2124:  \"elatelink\",\n\t2125:  \"lockstep\",\n\t2126:  \"pktcable-cops\",\n\t2127:  \"index-pc-wb\",\n\t2128:  \"net-steward\",\n\t2129:  \"cs-live\",\n\t2130:  \"xds\",\n\t2131:  \"avantageb2b\",\n\t2132:  \"solera-epmap\",\n\t2133:  \"zymed-zpp\",\n\t2134:  \"avenue\",\n\t2135:  \"gris\",\n\t2136:  \"appworxsrv\",\n\t2137:  \"connect\",\n\t2138:  \"unbind-cluster\",\n\t2139:  \"ias-auth\",\n\t2140:  \"ias-reg\",\n\t2141:  \"ias-admind\",\n\t2142:  \"tdmoip\",\n\t2143:  \"lv-jc\",\n\t2144:  \"lv-ffx\",\n\t2145:  \"lv-pici\",\n\t2146:  \"lv-not\",\n\t2147:  \"lv-auth\",\n\t2148:  \"veritas-ucl\",\n\t2149:  \"acptsys\",\n\t2150:  \"dynamic3d\",\n\t2151:  \"docent\",\n\t2152:  \"gtp-user\",\n\t2153:  \"ctlptc\",\n\t2154:  \"stdptc\",\n\t2155:  \"brdptc\",\n\t2156:  \"trp\",\n\t2157:  \"xnds\",\n\t2158:  \"touchnetplus\",\n\t2159:  \"gdbremote\",\n\t2160:  \"apc-2160\",\n\t2161:  \"apc-2161\",\n\t2162:  \"navisphere\",\n\t2163:  \"navisphere-sec\",\n\t2164:  \"ddns-v3\",\n\t2165:  \"x-bone-api\",\n\t2166:  \"iwserver\",\n\t2167:  \"raw-serial\",\n\t2168:  \"easy-soft-mux\",\n\t2169:  \"brain\",\n\t2170:  \"eyetv\",\n\t2171:  \"msfw-storage\",\n\t2172:  \"msfw-s-storage\",\n\t2173:  \"msfw-replica\",\n\t2174:  \"msfw-array\",\n\t2175:  \"airsync\",\n\t2176:  \"rapi\",\n\t2177:  \"qwave\",\n\t2178:  \"bitspeer\",\n\t2179:  \"vmrdp\",\n\t2180:  \"mc-gt-srv\",\n\t2181:  \"eforward\",\n\t2182:  \"cgn-stat\",\n\t2183:  \"cgn-config\",\n\t2184:  \"nvd\",\n\t2185:  \"onbase-dds\",\n\t2186:  \"gtaua\",\n\t2187:  \"ssmc\",\n\t2188:  \"radware-rpm\",\n\t2189:  \"radware-rpm-s\",\n\t2190:  \"tivoconnect\",\n\t2191:  \"tvbus\",\n\t2192:  \"asdis\",\n\t2193:  \"drwcs\",\n\t2197:  \"mnp-exchange\",\n\t2198:  \"onehome-remote\",\n\t2199:  \"onehome-help\",\n\t2200:  \"ici\",\n\t2201:  \"ats\",\n\t2202:  \"imtc-map\",\n\t2203:  \"b2-runtime\",\n\t2204:  \"b2-license\",\n\t2205:  \"jps\",\n\t2206:  \"hpocbus\",\n\t2207:  \"hpssd\",\n\t2208:  \"hpiod\",\n\t2209:  \"rimf-ps\",\n\t2210:  \"noaaport\",\n\t2211:  \"emwin\",\n\t2212:  \"leecoposserver\",\n\t2213:  \"kali\",\n\t2214:  \"rpi\",\n\t2215:  \"ipcore\",\n\t2216:  \"vtu-comms\",\n\t2217:  \"gotodevice\",\n\t2218:  \"bounzza\",\n\t2219:  \"netiq-ncap\",\n\t2220:  \"netiq\",\n\t2221:  \"ethernet-ip-s\",\n\t2222:  \"EtherNet-IP-1\",\n\t2223:  \"rockwell-csp2\",\n\t2224:  \"efi-mg\",\n\t2225:  \"rcip-itu\",\n\t2226:  \"di-drm\",\n\t2227:  \"di-msg\",\n\t2228:  \"ehome-ms\",\n\t2229:  \"datalens\",\n\t2230:  \"queueadm\",\n\t2231:  \"wimaxasncp\",\n\t2232:  \"ivs-video\",\n\t2233:  \"infocrypt\",\n\t2234:  \"directplay\",\n\t2235:  \"sercomm-wlink\",\n\t2236:  \"nani\",\n\t2237:  \"optech-port1-lm\",\n\t2238:  \"aviva-sna\",\n\t2239:  \"imagequery\",\n\t2240:  \"recipe\",\n\t2241:  \"ivsd\",\n\t2242:  \"foliocorp\",\n\t2243:  \"magicom\",\n\t2244:  \"nmsserver\",\n\t2245:  \"hao\",\n\t2246:  \"pc-mta-addrmap\",\n\t2247:  \"antidotemgrsvr\",\n\t2248:  \"ums\",\n\t2249:  \"rfmp\",\n\t2250:  \"remote-collab\",\n\t2251:  \"dif-port\",\n\t2252:  \"njenet-ssl\",\n\t2253:  \"dtv-chan-req\",\n\t2254:  \"seispoc\",\n\t2255:  \"vrtp\",\n\t2256:  \"pcc-mfp\",\n\t2257:  \"simple-tx-rx\",\n\t2258:  \"rcts\",\n\t2260:  \"apc-2260\",\n\t2261:  \"comotionmaster\",\n\t2262:  \"comotionback\",\n\t2263:  \"ecwcfg\",\n\t2264:  \"apx500api-1\",\n\t2265:  \"apx500api-2\",\n\t2266:  \"mfserver\",\n\t2267:  \"ontobroker\",\n\t2268:  \"amt\",\n\t2269:  \"mikey\",\n\t2270:  \"starschool\",\n\t2271:  \"mmcals\",\n\t2272:  \"mmcal\",\n\t2273:  \"mysql-im\",\n\t2274:  \"pcttunnell\",\n\t2275:  \"ibridge-data\",\n\t2276:  \"ibridge-mgmt\",\n\t2277:  \"bluectrlproxy\",\n\t2278:  \"s3db\",\n\t2279:  \"xmquery\",\n\t2280:  \"lnvpoller\",\n\t2281:  \"lnvconsole\",\n\t2282:  \"lnvalarm\",\n\t2283:  \"lnvstatus\",\n\t2284:  \"lnvmaps\",\n\t2285:  \"lnvmailmon\",\n\t2286:  \"nas-metering\",\n\t2287:  \"dna\",\n\t2288:  \"netml\",\n\t2289:  \"dict-lookup\",\n\t2290:  \"sonus-logging\",\n\t2291:  \"eapsp\",\n\t2292:  \"mib-streaming\",\n\t2293:  \"npdbgmngr\",\n\t2294:  \"konshus-lm\",\n\t2295:  \"advant-lm\",\n\t2296:  \"theta-lm\",\n\t2297:  \"d2k-datamover1\",\n\t2298:  \"d2k-datamover2\",\n\t2299:  \"pc-telecommute\",\n\t2300:  \"cvmmon\",\n\t2301:  \"cpq-wbem\",\n\t2302:  \"binderysupport\",\n\t2303:  \"proxy-gateway\",\n\t2304:  \"attachmate-uts\",\n\t2305:  \"mt-scaleserver\",\n\t2306:  \"tappi-boxnet\",\n\t2307:  \"pehelp\",\n\t2308:  \"sdhelp\",\n\t2309:  \"sdserver\",\n\t2310:  \"sdclient\",\n\t2311:  \"messageservice\",\n\t2312:  \"wanscaler\",\n\t2313:  \"iapp\",\n\t2314:  \"cr-websystems\",\n\t2315:  \"precise-sft\",\n\t2316:  \"sent-lm\",\n\t2317:  \"attachmate-g32\",\n\t2318:  \"cadencecontrol\",\n\t2319:  \"infolibria\",\n\t2320:  \"siebel-ns\",\n\t2321:  \"rdlap\",\n\t2322:  \"ofsd\",\n\t2323:  \"3d-nfsd\",\n\t2324:  \"cosmocall\",\n\t2325:  \"ansysli\",\n\t2326:  \"idcp\",\n\t2327:  \"xingcsm\",\n\t2328:  \"netrix-sftm\",\n\t2329:  \"nvd\",\n\t2330:  \"tscchat\",\n\t2331:  \"agentview\",\n\t2332:  \"rcc-host\",\n\t2333:  \"snapp\",\n\t2334:  \"ace-client\",\n\t2335:  \"ace-proxy\",\n\t2336:  \"appleugcontrol\",\n\t2337:  \"ideesrv\",\n\t2338:  \"norton-lambert\",\n\t2339:  \"3com-webview\",\n\t2340:  \"wrs-registry\",\n\t2341:  \"xiostatus\",\n\t2342:  \"manage-exec\",\n\t2343:  \"nati-logos\",\n\t2344:  \"fcmsys\",\n\t2345:  \"dbm\",\n\t2346:  \"redstorm-join\",\n\t2347:  \"redstorm-find\",\n\t2348:  \"redstorm-info\",\n\t2349:  \"redstorm-diag\",\n\t2350:  \"psbserver\",\n\t2351:  \"psrserver\",\n\t2352:  \"pslserver\",\n\t2353:  \"pspserver\",\n\t2354:  \"psprserver\",\n\t2355:  \"psdbserver\",\n\t2356:  \"gxtelmd\",\n\t2357:  \"unihub-server\",\n\t2358:  \"futrix\",\n\t2359:  \"flukeserver\",\n\t2360:  \"nexstorindltd\",\n\t2361:  \"tl1\",\n\t2362:  \"digiman\",\n\t2363:  \"mediacntrlnfsd\",\n\t2364:  \"oi-2000\",\n\t2365:  \"dbref\",\n\t2366:  \"qip-login\",\n\t2367:  \"service-ctrl\",\n\t2368:  \"opentable\",\n\t2370:  \"l3-hbmon\",\n\t2371:  \"hp-rda\",\n\t2372:  \"lanmessenger\",\n\t2373:  \"remographlm\",\n\t2374:  \"hydra\",\n\t2375:  \"docker\",\n\t2376:  \"docker-s\",\n\t2377:  \"swarm\",\n\t2379:  \"etcd-client\",\n\t2380:  \"etcd-server\",\n\t2381:  \"compaq-https\",\n\t2382:  \"ms-olap3\",\n\t2383:  \"ms-olap4\",\n\t2384:  \"sd-request\",\n\t2385:  \"sd-data\",\n\t2386:  \"virtualtape\",\n\t2387:  \"vsamredirector\",\n\t2388:  \"mynahautostart\",\n\t2389:  \"ovsessionmgr\",\n\t2390:  \"rsmtp\",\n\t2391:  \"3com-net-mgmt\",\n\t2392:  \"tacticalauth\",\n\t2393:  \"ms-olap1\",\n\t2394:  \"ms-olap2\",\n\t2395:  \"lan900-remote\",\n\t2396:  \"wusage\",\n\t2397:  \"ncl\",\n\t2398:  \"orbiter\",\n\t2399:  \"fmpro-fdal\",\n\t2400:  \"opequus-server\",\n\t2401:  \"cvspserver\",\n\t2402:  \"taskmaster2000\",\n\t2403:  \"taskmaster2000\",\n\t2404:  \"iec-104\",\n\t2405:  \"trc-netpoll\",\n\t2406:  \"jediserver\",\n\t2407:  \"orion\",\n\t2408:  \"railgun-webaccl\",\n\t2409:  \"sns-protocol\",\n\t2410:  \"vrts-registry\",\n\t2411:  \"netwave-ap-mgmt\",\n\t2412:  \"cdn\",\n\t2413:  \"orion-rmi-reg\",\n\t2414:  \"beeyond\",\n\t2415:  \"codima-rtp\",\n\t2416:  \"rmtserver\",\n\t2417:  \"composit-server\",\n\t2418:  \"cas\",\n\t2419:  \"attachmate-s2s\",\n\t2420:  \"dslremote-mgmt\",\n\t2421:  \"g-talk\",\n\t2422:  \"crmsbits\",\n\t2423:  \"rnrp\",\n\t2424:  \"kofax-svr\",\n\t2425:  \"fjitsuappmgr\",\n\t2426:  \"vcmp\",\n\t2427:  \"mgcp-gateway\",\n\t2428:  \"ott\",\n\t2429:  \"ft-role\",\n\t2430:  \"venus\",\n\t2431:  \"venus-se\",\n\t2432:  \"codasrv\",\n\t2433:  \"codasrv-se\",\n\t2434:  \"pxc-epmap\",\n\t2435:  \"optilogic\",\n\t2436:  \"topx\",\n\t2437:  \"unicontrol\",\n\t2438:  \"msp\",\n\t2439:  \"sybasedbsynch\",\n\t2440:  \"spearway\",\n\t2441:  \"pvsw-inet\",\n\t2442:  \"netangel\",\n\t2443:  \"powerclientcsf\",\n\t2444:  \"btpp2sectrans\",\n\t2445:  \"dtn1\",\n\t2446:  \"bues-service\",\n\t2447:  \"ovwdb\",\n\t2448:  \"hpppssvr\",\n\t2449:  \"ratl\",\n\t2450:  \"netadmin\",\n\t2451:  \"netchat\",\n\t2452:  \"snifferclient\",\n\t2453:  \"madge-ltd\",\n\t2454:  \"indx-dds\",\n\t2455:  \"wago-io-system\",\n\t2456:  \"altav-remmgt\",\n\t2457:  \"rapido-ip\",\n\t2458:  \"griffin\",\n\t2459:  \"community\",\n\t2460:  \"ms-theater\",\n\t2461:  \"qadmifoper\",\n\t2462:  \"qadmifevent\",\n\t2463:  \"lsi-raid-mgmt\",\n\t2464:  \"direcpc-si\",\n\t2465:  \"lbm\",\n\t2466:  \"lbf\",\n\t2467:  \"high-criteria\",\n\t2468:  \"qip-msgd\",\n\t2469:  \"mti-tcs-comm\",\n\t2470:  \"taskman-port\",\n\t2471:  \"seaodbc\",\n\t2472:  \"c3\",\n\t2473:  \"aker-cdp\",\n\t2474:  \"vitalanalysis\",\n\t2475:  \"ace-server\",\n\t2476:  \"ace-svr-prop\",\n\t2477:  \"ssm-cvs\",\n\t2478:  \"ssm-cssps\",\n\t2479:  \"ssm-els\",\n\t2480:  \"powerexchange\",\n\t2481:  \"giop\",\n\t2482:  \"giop-ssl\",\n\t2483:  \"ttc\",\n\t2484:  \"ttc-ssl\",\n\t2485:  \"netobjects1\",\n\t2486:  \"netobjects2\",\n\t2487:  \"pns\",\n\t2488:  \"moy-corp\",\n\t2489:  \"tsilb\",\n\t2490:  \"qip-qdhcp\",\n\t2491:  \"conclave-cpp\",\n\t2492:  \"groove\",\n\t2493:  \"talarian-mqs\",\n\t2494:  \"bmc-ar\",\n\t2495:  \"fast-rem-serv\",\n\t2496:  \"dirgis\",\n\t2497:  \"quaddb\",\n\t2498:  \"odn-castraq\",\n\t2499:  \"unicontrol\",\n\t2500:  \"rtsserv\",\n\t2501:  \"rtsclient\",\n\t2502:  \"kentrox-prot\",\n\t2503:  \"nms-dpnss\",\n\t2504:  \"wlbs\",\n\t2505:  \"ppcontrol\",\n\t2506:  \"jbroker\",\n\t2507:  \"spock\",\n\t2508:  \"jdatastore\",\n\t2509:  \"fjmpss\",\n\t2510:  \"fjappmgrbulk\",\n\t2511:  \"metastorm\",\n\t2512:  \"citrixima\",\n\t2513:  \"citrixadmin\",\n\t2514:  \"facsys-ntp\",\n\t2515:  \"facsys-router\",\n\t2516:  \"maincontrol\",\n\t2517:  \"call-sig-trans\",\n\t2518:  \"willy\",\n\t2519:  \"globmsgsvc\",\n\t2520:  \"pvsw\",\n\t2521:  \"adaptecmgr\",\n\t2522:  \"windb\",\n\t2523:  \"qke-llc-v3\",\n\t2524:  \"optiwave-lm\",\n\t2525:  \"ms-v-worlds\",\n\t2526:  \"ema-sent-lm\",\n\t2527:  \"iqserver\",\n\t2528:  \"ncr-ccl\",\n\t2529:  \"utsftp\",\n\t2530:  \"vrcommerce\",\n\t2531:  \"ito-e-gui\",\n\t2532:  \"ovtopmd\",\n\t2533:  \"snifferserver\",\n\t2534:  \"combox-web-acc\",\n\t2535:  \"madcap\",\n\t2536:  \"btpp2audctr1\",\n\t2537:  \"upgrade\",\n\t2538:  \"vnwk-prapi\",\n\t2539:  \"vsiadmin\",\n\t2540:  \"lonworks\",\n\t2541:  \"lonworks2\",\n\t2542:  \"udrawgraph\",\n\t2543:  \"reftek\",\n\t2544:  \"novell-zen\",\n\t2545:  \"sis-emt\",\n\t2546:  \"vytalvaultbrtp\",\n\t2547:  \"vytalvaultvsmp\",\n\t2548:  \"vytalvaultpipe\",\n\t2549:  \"ipass\",\n\t2550:  \"ads\",\n\t2551:  \"isg-uda-server\",\n\t2552:  \"call-logging\",\n\t2553:  \"efidiningport\",\n\t2554:  \"vcnet-link-v10\",\n\t2555:  \"compaq-wcp\",\n\t2556:  \"nicetec-nmsvc\",\n\t2557:  \"nicetec-mgmt\",\n\t2558:  \"pclemultimedia\",\n\t2559:  \"lstp\",\n\t2560:  \"labrat\",\n\t2561:  \"mosaixcc\",\n\t2562:  \"delibo\",\n\t2563:  \"cti-redwood\",\n\t2564:  \"hp-3000-telnet\",\n\t2565:  \"coord-svr\",\n\t2566:  \"pcs-pcw\",\n\t2567:  \"clp\",\n\t2568:  \"spamtrap\",\n\t2569:  \"sonuscallsig\",\n\t2570:  \"hs-port\",\n\t2571:  \"cecsvc\",\n\t2572:  \"ibp\",\n\t2573:  \"trustestablish\",\n\t2574:  \"blockade-bpsp\",\n\t2575:  \"hl7\",\n\t2576:  \"tclprodebugger\",\n\t2577:  \"scipticslsrvr\",\n\t2578:  \"rvs-isdn-dcp\",\n\t2579:  \"mpfoncl\",\n\t2580:  \"tributary\",\n\t2581:  \"argis-te\",\n\t2582:  \"argis-ds\",\n\t2583:  \"mon\",\n\t2584:  \"cyaserv\",\n\t2585:  \"netx-server\",\n\t2586:  \"netx-agent\",\n\t2587:  \"masc\",\n\t2588:  \"privilege\",\n\t2589:  \"quartus-tcl\",\n\t2590:  \"idotdist\",\n\t2591:  \"maytagshuffle\",\n\t2592:  \"netrek\",\n\t2593:  \"mns-mail\",\n\t2594:  \"dts\",\n\t2595:  \"worldfusion1\",\n\t2596:  \"worldfusion2\",\n\t2597:  \"homesteadglory\",\n\t2598:  \"citriximaclient\",\n\t2599:  \"snapd\",\n\t2600:  \"hpstgmgr\",\n\t2601:  \"discp-client\",\n\t2602:  \"discp-server\",\n\t2603:  \"servicemeter\",\n\t2604:  \"nsc-ccs\",\n\t2605:  \"nsc-posa\",\n\t2606:  \"netmon\",\n\t2607:  \"connection\",\n\t2608:  \"wag-service\",\n\t2609:  \"system-monitor\",\n\t2610:  \"versa-tek\",\n\t2611:  \"lionhead\",\n\t2612:  \"qpasa-agent\",\n\t2613:  \"smntubootstrap\",\n\t2614:  \"neveroffline\",\n\t2615:  \"firepower\",\n\t2616:  \"appswitch-emp\",\n\t2617:  \"cmadmin\",\n\t2618:  \"priority-e-com\",\n\t2619:  \"bruce\",\n\t2620:  \"lpsrecommender\",\n\t2621:  \"miles-apart\",\n\t2622:  \"metricadbc\",\n\t2623:  \"lmdp\",\n\t2624:  \"aria\",\n\t2625:  \"blwnkl-port\",\n\t2626:  \"gbjd816\",\n\t2627:  \"moshebeeri\",\n\t2628:  \"dict\",\n\t2629:  \"sitaraserver\",\n\t2630:  \"sitaramgmt\",\n\t2631:  \"sitaradir\",\n\t2632:  \"irdg-post\",\n\t2633:  \"interintelli\",\n\t2634:  \"pk-electronics\",\n\t2635:  \"backburner\",\n\t2636:  \"solve\",\n\t2637:  \"imdocsvc\",\n\t2638:  \"sybaseanywhere\",\n\t2639:  \"aminet\",\n\t2640:  \"ami-control\",\n\t2641:  \"hdl-srv\",\n\t2642:  \"tragic\",\n\t2643:  \"gte-samp\",\n\t2644:  \"travsoft-ipx-t\",\n\t2645:  \"novell-ipx-cmd\",\n\t2646:  \"and-lm\",\n\t2647:  \"syncserver\",\n\t2648:  \"upsnotifyprot\",\n\t2649:  \"vpsipport\",\n\t2650:  \"eristwoguns\",\n\t2651:  \"ebinsite\",\n\t2652:  \"interpathpanel\",\n\t2653:  \"sonus\",\n\t2654:  \"corel-vncadmin\",\n\t2655:  \"unglue\",\n\t2656:  \"kana\",\n\t2657:  \"sns-dispatcher\",\n\t2658:  \"sns-admin\",\n\t2659:  \"sns-query\",\n\t2660:  \"gcmonitor\",\n\t2661:  \"olhost\",\n\t2662:  \"bintec-capi\",\n\t2663:  \"bintec-tapi\",\n\t2664:  \"patrol-mq-gm\",\n\t2665:  \"patrol-mq-nm\",\n\t2666:  \"extensis\",\n\t2667:  \"alarm-clock-s\",\n\t2668:  \"alarm-clock-c\",\n\t2669:  \"toad\",\n\t2670:  \"tve-announce\",\n\t2671:  \"newlixreg\",\n\t2672:  \"nhserver\",\n\t2673:  \"firstcall42\",\n\t2674:  \"ewnn\",\n\t2675:  \"ttc-etap\",\n\t2676:  \"simslink\",\n\t2677:  \"gadgetgate1way\",\n\t2678:  \"gadgetgate2way\",\n\t2679:  \"syncserverssl\",\n\t2680:  \"pxc-sapxom\",\n\t2681:  \"mpnjsomb\",\n\t2683:  \"ncdloadbalance\",\n\t2684:  \"mpnjsosv\",\n\t2685:  \"mpnjsocl\",\n\t2686:  \"mpnjsomg\",\n\t2687:  \"pq-lic-mgmt\",\n\t2688:  \"md-cg-http\",\n\t2689:  \"fastlynx\",\n\t2690:  \"hp-nnm-data\",\n\t2691:  \"itinternet\",\n\t2692:  \"admins-lms\",\n\t2694:  \"pwrsevent\",\n\t2695:  \"vspread\",\n\t2696:  \"unifyadmin\",\n\t2697:  \"oce-snmp-trap\",\n\t2698:  \"mck-ivpip\",\n\t2699:  \"csoft-plusclnt\",\n\t2700:  \"tqdata\",\n\t2701:  \"sms-rcinfo\",\n\t2702:  \"sms-xfer\",\n\t2703:  \"sms-chat\",\n\t2704:  \"sms-remctrl\",\n\t2705:  \"sds-admin\",\n\t2706:  \"ncdmirroring\",\n\t2707:  \"emcsymapiport\",\n\t2708:  \"banyan-net\",\n\t2709:  \"supermon\",\n\t2710:  \"sso-service\",\n\t2711:  \"sso-control\",\n\t2712:  \"aocp\",\n\t2713:  \"raventbs\",\n\t2714:  \"raventdm\",\n\t2715:  \"hpstgmgr2\",\n\t2716:  \"inova-ip-disco\",\n\t2717:  \"pn-requester\",\n\t2718:  \"pn-requester2\",\n\t2719:  \"scan-change\",\n\t2720:  \"wkars\",\n\t2721:  \"smart-diagnose\",\n\t2722:  \"proactivesrvr\",\n\t2723:  \"watchdog-nt\",\n\t2724:  \"qotps\",\n\t2725:  \"msolap-ptp2\",\n\t2726:  \"tams\",\n\t2727:  \"mgcp-callagent\",\n\t2728:  \"sqdr\",\n\t2729:  \"tcim-control\",\n\t2730:  \"nec-raidplus\",\n\t2731:  \"fyre-messanger\",\n\t2732:  \"g5m\",\n\t2733:  \"signet-ctf\",\n\t2734:  \"ccs-software\",\n\t2735:  \"netiq-mc\",\n\t2736:  \"radwiz-nms-srv\",\n\t2737:  \"srp-feedback\",\n\t2738:  \"ndl-tcp-ois-gw\",\n\t2739:  \"tn-timing\",\n\t2740:  \"alarm\",\n\t2741:  \"tsb\",\n\t2742:  \"tsb2\",\n\t2743:  \"murx\",\n\t2744:  \"honyaku\",\n\t2745:  \"urbisnet\",\n\t2746:  \"cpudpencap\",\n\t2747:  \"fjippol-swrly\",\n\t2748:  \"fjippol-polsvr\",\n\t2749:  \"fjippol-cnsl\",\n\t2750:  \"fjippol-port1\",\n\t2751:  \"fjippol-port2\",\n\t2752:  \"rsisysaccess\",\n\t2753:  \"de-spot\",\n\t2754:  \"apollo-cc\",\n\t2755:  \"expresspay\",\n\t2756:  \"simplement-tie\",\n\t2757:  \"cnrp\",\n\t2758:  \"apollo-status\",\n\t2759:  \"apollo-gms\",\n\t2760:  \"sabams\",\n\t2761:  \"dicom-iscl\",\n\t2762:  \"dicom-tls\",\n\t2763:  \"desktop-dna\",\n\t2764:  \"data-insurance\",\n\t2765:  \"qip-audup\",\n\t2766:  \"compaq-scp\",\n\t2767:  \"uadtc\",\n\t2768:  \"uacs\",\n\t2769:  \"exce\",\n\t2770:  \"veronica\",\n\t2771:  \"vergencecm\",\n\t2772:  \"auris\",\n\t2773:  \"rbakcup1\",\n\t2774:  \"rbakcup2\",\n\t2775:  \"smpp\",\n\t2776:  \"ridgeway1\",\n\t2777:  \"ridgeway2\",\n\t2778:  \"gwen-sonya\",\n\t2779:  \"lbc-sync\",\n\t2780:  \"lbc-control\",\n\t2781:  \"whosells\",\n\t2782:  \"everydayrc\",\n\t2783:  \"aises\",\n\t2784:  \"www-dev\",\n\t2785:  \"aic-np\",\n\t2786:  \"aic-oncrpc\",\n\t2787:  \"piccolo\",\n\t2788:  \"fryeserv\",\n\t2789:  \"media-agent\",\n\t2790:  \"plgproxy\",\n\t2791:  \"mtport-regist\",\n\t2792:  \"f5-globalsite\",\n\t2793:  \"initlsmsad\",\n\t2795:  \"livestats\",\n\t2796:  \"ac-tech\",\n\t2797:  \"esp-encap\",\n\t2798:  \"tmesis-upshot\",\n\t2799:  \"icon-discover\",\n\t2800:  \"acc-raid\",\n\t2801:  \"igcp\",\n\t2802:  \"veritas-tcp1\",\n\t2803:  \"btprjctrl\",\n\t2804:  \"dvr-esm\",\n\t2805:  \"wta-wsp-s\",\n\t2806:  \"cspuni\",\n\t2807:  \"cspmulti\",\n\t2808:  \"j-lan-p\",\n\t2809:  \"corbaloc\",\n\t2810:  \"netsteward\",\n\t2811:  \"gsiftp\",\n\t2812:  \"atmtcp\",\n\t2813:  \"llm-pass\",\n\t2814:  \"llm-csv\",\n\t2815:  \"lbc-measure\",\n\t2816:  \"lbc-watchdog\",\n\t2817:  \"nmsigport\",\n\t2818:  \"rmlnk\",\n\t2819:  \"fc-faultnotify\",\n\t2820:  \"univision\",\n\t2821:  \"vrts-at-port\",\n\t2822:  \"ka0wuc\",\n\t2823:  \"cqg-netlan\",\n\t2824:  \"cqg-netlan-1\",\n\t2826:  \"slc-systemlog\",\n\t2827:  \"slc-ctrlrloops\",\n\t2828:  \"itm-lm\",\n\t2829:  \"silkp1\",\n\t2830:  \"silkp2\",\n\t2831:  \"silkp3\",\n\t2832:  \"silkp4\",\n\t2833:  \"glishd\",\n\t2834:  \"evtp\",\n\t2835:  \"evtp-data\",\n\t2836:  \"catalyst\",\n\t2837:  \"repliweb\",\n\t2838:  \"starbot\",\n\t2839:  \"nmsigport\",\n\t2840:  \"l3-exprt\",\n\t2841:  \"l3-ranger\",\n\t2842:  \"l3-hawk\",\n\t2843:  \"pdnet\",\n\t2844:  \"bpcp-poll\",\n\t2845:  \"bpcp-trap\",\n\t2846:  \"aimpp-hello\",\n\t2847:  \"aimpp-port-req\",\n\t2848:  \"amt-blc-port\",\n\t2849:  \"fxp\",\n\t2850:  \"metaconsole\",\n\t2851:  \"webemshttp\",\n\t2852:  \"bears-01\",\n\t2853:  \"ispipes\",\n\t2854:  \"infomover\",\n\t2855:  \"msrp\",\n\t2856:  \"cesdinv\",\n\t2857:  \"simctlp\",\n\t2858:  \"ecnp\",\n\t2859:  \"activememory\",\n\t2860:  \"dialpad-voice1\",\n\t2861:  \"dialpad-voice2\",\n\t2862:  \"ttg-protocol\",\n\t2863:  \"sonardata\",\n\t2864:  \"astromed-main\",\n\t2865:  \"pit-vpn\",\n\t2866:  \"iwlistener\",\n\t2867:  \"esps-portal\",\n\t2868:  \"npep-messaging\",\n\t2869:  \"icslap\",\n\t2870:  \"daishi\",\n\t2871:  \"msi-selectplay\",\n\t2872:  \"radix\",\n\t2874:  \"dxmessagebase1\",\n\t2875:  \"dxmessagebase2\",\n\t2876:  \"sps-tunnel\",\n\t2877:  \"bluelance\",\n\t2878:  \"aap\",\n\t2879:  \"ucentric-ds\",\n\t2880:  \"synapse\",\n\t2881:  \"ndsp\",\n\t2882:  \"ndtp\",\n\t2883:  \"ndnp\",\n\t2884:  \"flashmsg\",\n\t2885:  \"topflow\",\n\t2886:  \"responselogic\",\n\t2887:  \"aironetddp\",\n\t2888:  \"spcsdlobby\",\n\t2889:  \"rsom\",\n\t2890:  \"cspclmulti\",\n\t2891:  \"cinegrfx-elmd\",\n\t2892:  \"snifferdata\",\n\t2893:  \"vseconnector\",\n\t2894:  \"abacus-remote\",\n\t2895:  \"natuslink\",\n\t2896:  \"ecovisiong6-1\",\n\t2897:  \"citrix-rtmp\",\n\t2898:  \"appliance-cfg\",\n\t2899:  \"powergemplus\",\n\t2900:  \"quicksuite\",\n\t2901:  \"allstorcns\",\n\t2902:  \"netaspi\",\n\t2903:  \"suitcase\",\n\t2904:  \"m2ua\",\n\t2905:  \"m3ua\",\n\t2906:  \"caller9\",\n\t2907:  \"webmethods-b2b\",\n\t2908:  \"mao\",\n\t2909:  \"funk-dialout\",\n\t2910:  \"tdaccess\",\n\t2911:  \"blockade\",\n\t2912:  \"epicon\",\n\t2913:  \"boosterware\",\n\t2914:  \"gamelobby\",\n\t2915:  \"tksocket\",\n\t2916:  \"elvin-server\",\n\t2917:  \"elvin-client\",\n\t2918:  \"kastenchasepad\",\n\t2919:  \"roboer\",\n\t2920:  \"roboeda\",\n\t2921:  \"cesdcdman\",\n\t2922:  \"cesdcdtrn\",\n\t2923:  \"wta-wsp-wtp-s\",\n\t2924:  \"precise-vip\",\n\t2926:  \"mobile-file-dl\",\n\t2927:  \"unimobilectrl\",\n\t2928:  \"redstone-cpss\",\n\t2929:  \"amx-webadmin\",\n\t2930:  \"amx-weblinx\",\n\t2931:  \"circle-x\",\n\t2932:  \"incp\",\n\t2933:  \"4-tieropmgw\",\n\t2934:  \"4-tieropmcli\",\n\t2935:  \"qtp\",\n\t2936:  \"otpatch\",\n\t2937:  \"pnaconsult-lm\",\n\t2938:  \"sm-pas-1\",\n\t2939:  \"sm-pas-2\",\n\t2940:  \"sm-pas-3\",\n\t2941:  \"sm-pas-4\",\n\t2942:  \"sm-pas-5\",\n\t2943:  \"ttnrepository\",\n\t2944:  \"megaco-h248\",\n\t2945:  \"h248-binary\",\n\t2946:  \"fjsvmpor\",\n\t2947:  \"gpsd\",\n\t2948:  \"wap-push\",\n\t2949:  \"wap-pushsecure\",\n\t2950:  \"esip\",\n\t2951:  \"ottp\",\n\t2952:  \"mpfwsas\",\n\t2953:  \"ovalarmsrv\",\n\t2954:  \"ovalarmsrv-cmd\",\n\t2955:  \"csnotify\",\n\t2956:  \"ovrimosdbman\",\n\t2957:  \"jmact5\",\n\t2958:  \"jmact6\",\n\t2959:  \"rmopagt\",\n\t2960:  \"dfoxserver\",\n\t2961:  \"boldsoft-lm\",\n\t2962:  \"iph-policy-cli\",\n\t2963:  \"iph-policy-adm\",\n\t2964:  \"bullant-srap\",\n\t2965:  \"bullant-rap\",\n\t2966:  \"idp-infotrieve\",\n\t2967:  \"ssc-agent\",\n\t2968:  \"enpp\",\n\t2969:  \"essp\",\n\t2970:  \"index-net\",\n\t2971:  \"netclip\",\n\t2972:  \"pmsm-webrctl\",\n\t2973:  \"svnetworks\",\n\t2974:  \"signal\",\n\t2975:  \"fjmpcm\",\n\t2976:  \"cns-srv-port\",\n\t2977:  \"ttc-etap-ns\",\n\t2978:  \"ttc-etap-ds\",\n\t2979:  \"h263-video\",\n\t2980:  \"wimd\",\n\t2981:  \"mylxamport\",\n\t2982:  \"iwb-whiteboard\",\n\t2983:  \"netplan\",\n\t2984:  \"hpidsadmin\",\n\t2985:  \"hpidsagent\",\n\t2986:  \"stonefalls\",\n\t2987:  \"identify\",\n\t2988:  \"hippad\",\n\t2989:  \"zarkov\",\n\t2990:  \"boscap\",\n\t2991:  \"wkstn-mon\",\n\t2992:  \"avenyo\",\n\t2993:  \"veritas-vis1\",\n\t2994:  \"veritas-vis2\",\n\t2995:  \"idrs\",\n\t2996:  \"vsixml\",\n\t2997:  \"rebol\",\n\t2998:  \"realsecure\",\n\t2999:  \"remoteware-un\",\n\t3000:  \"hbci\",\n\t3001:  \"origo-native\",\n\t3002:  \"exlm-agent\",\n\t3003:  \"cgms\",\n\t3004:  \"csoftragent\",\n\t3005:  \"geniuslm\",\n\t3006:  \"ii-admin\",\n\t3007:  \"lotusmtap\",\n\t3008:  \"midnight-tech\",\n\t3009:  \"pxc-ntfy\",\n\t3010:  \"gw\",\n\t3011:  \"trusted-web\",\n\t3012:  \"twsdss\",\n\t3013:  \"gilatskysurfer\",\n\t3014:  \"broker-service\",\n\t3015:  \"nati-dstp\",\n\t3016:  \"notify-srvr\",\n\t3017:  \"event-listener\",\n\t3018:  \"srvc-registry\",\n\t3019:  \"resource-mgr\",\n\t3020:  \"cifs\",\n\t3021:  \"agriserver\",\n\t3022:  \"csregagent\",\n\t3023:  \"magicnotes\",\n\t3024:  \"nds-sso\",\n\t3025:  \"arepa-raft\",\n\t3026:  \"agri-gateway\",\n\t3027:  \"LiebDevMgmt-C\",\n\t3028:  \"LiebDevMgmt-DM\",\n\t3029:  \"LiebDevMgmt-A\",\n\t3030:  \"arepa-cas\",\n\t3031:  \"eppc\",\n\t3032:  \"redwood-chat\",\n\t3033:  \"pdb\",\n\t3034:  \"osmosis-aeea\",\n\t3035:  \"fjsv-gssagt\",\n\t3036:  \"hagel-dump\",\n\t3037:  \"hp-san-mgmt\",\n\t3038:  \"santak-ups\",\n\t3039:  \"cogitate\",\n\t3040:  \"tomato-springs\",\n\t3041:  \"di-traceware\",\n\t3042:  \"journee\",\n\t3043:  \"brp\",\n\t3044:  \"epp\",\n\t3045:  \"responsenet\",\n\t3046:  \"di-ase\",\n\t3047:  \"hlserver\",\n\t3048:  \"pctrader\",\n\t3049:  \"nsws\",\n\t3050:  \"gds-db\",\n\t3051:  \"galaxy-server\",\n\t3052:  \"apc-3052\",\n\t3053:  \"dsom-server\",\n\t3054:  \"amt-cnf-prot\",\n\t3055:  \"policyserver\",\n\t3056:  \"cdl-server\",\n\t3057:  \"goahead-fldup\",\n\t3058:  \"videobeans\",\n\t3059:  \"qsoft\",\n\t3060:  \"interserver\",\n\t3061:  \"cautcpd\",\n\t3062:  \"ncacn-ip-tcp\",\n\t3063:  \"ncadg-ip-udp\",\n\t3064:  \"rprt\",\n\t3065:  \"slinterbase\",\n\t3066:  \"netattachsdmp\",\n\t3067:  \"fjhpjp\",\n\t3068:  \"ls3bcast\",\n\t3069:  \"ls3\",\n\t3070:  \"mgxswitch\",\n\t3071:  \"xplat-replicate\",\n\t3072:  \"csd-monitor\",\n\t3073:  \"vcrp\",\n\t3074:  \"xbox\",\n\t3075:  \"orbix-locator\",\n\t3076:  \"orbix-config\",\n\t3077:  \"orbix-loc-ssl\",\n\t3078:  \"orbix-cfg-ssl\",\n\t3079:  \"lv-frontpanel\",\n\t3080:  \"stm-pproc\",\n\t3081:  \"tl1-lv\",\n\t3082:  \"tl1-raw\",\n\t3083:  \"tl1-telnet\",\n\t3084:  \"itm-mccs\",\n\t3085:  \"pcihreq\",\n\t3086:  \"jdl-dbkitchen\",\n\t3087:  \"asoki-sma\",\n\t3088:  \"xdtp\",\n\t3089:  \"ptk-alink\",\n\t3090:  \"stss\",\n\t3091:  \"1ci-smcs\",\n\t3093:  \"rapidmq-center\",\n\t3094:  \"rapidmq-reg\",\n\t3095:  \"panasas\",\n\t3096:  \"ndl-aps\",\n\t3098:  \"umm-port\",\n\t3099:  \"chmd\",\n\t3100:  \"opcon-xps\",\n\t3101:  \"hp-pxpib\",\n\t3102:  \"slslavemon\",\n\t3103:  \"autocuesmi\",\n\t3104:  \"autocuelog\",\n\t3105:  \"cardbox\",\n\t3106:  \"cardbox-http\",\n\t3107:  \"business\",\n\t3108:  \"geolocate\",\n\t3109:  \"personnel\",\n\t3110:  \"sim-control\",\n\t3111:  \"wsynch\",\n\t3112:  \"ksysguard\",\n\t3113:  \"cs-auth-svr\",\n\t3114:  \"ccmad\",\n\t3115:  \"mctet-master\",\n\t3116:  \"mctet-gateway\",\n\t3117:  \"mctet-jserv\",\n\t3118:  \"pkagent\",\n\t3119:  \"d2000kernel\",\n\t3120:  \"d2000webserver\",\n\t3121:  \"pcmk-remote\",\n\t3122:  \"vtr-emulator\",\n\t3123:  \"edix\",\n\t3124:  \"beacon-port\",\n\t3125:  \"a13-an\",\n\t3127:  \"ctx-bridge\",\n\t3128:  \"ndl-aas\",\n\t3129:  \"netport-id\",\n\t3130:  \"icpv2\",\n\t3131:  \"netbookmark\",\n\t3132:  \"ms-rule-engine\",\n\t3133:  \"prism-deploy\",\n\t3134:  \"ecp\",\n\t3135:  \"peerbook-port\",\n\t3136:  \"grubd\",\n\t3137:  \"rtnt-1\",\n\t3138:  \"rtnt-2\",\n\t3139:  \"incognitorv\",\n\t3140:  \"ariliamulti\",\n\t3141:  \"vmodem\",\n\t3142:  \"rdc-wh-eos\",\n\t3143:  \"seaview\",\n\t3144:  \"tarantella\",\n\t3145:  \"csi-lfap\",\n\t3146:  \"bears-02\",\n\t3147:  \"rfio\",\n\t3148:  \"nm-game-admin\",\n\t3149:  \"nm-game-server\",\n\t3150:  \"nm-asses-admin\",\n\t3151:  \"nm-assessor\",\n\t3152:  \"feitianrockey\",\n\t3153:  \"s8-client-port\",\n\t3154:  \"ccmrmi\",\n\t3155:  \"jpegmpeg\",\n\t3156:  \"indura\",\n\t3157:  \"e3consultants\",\n\t3158:  \"stvp\",\n\t3159:  \"navegaweb-port\",\n\t3160:  \"tip-app-server\",\n\t3161:  \"doc1lm\",\n\t3162:  \"sflm\",\n\t3163:  \"res-sap\",\n\t3164:  \"imprs\",\n\t3165:  \"newgenpay\",\n\t3166:  \"sossecollector\",\n\t3167:  \"nowcontact\",\n\t3168:  \"poweronnud\",\n\t3169:  \"serverview-as\",\n\t3170:  \"serverview-asn\",\n\t3171:  \"serverview-gf\",\n\t3172:  \"serverview-rm\",\n\t3173:  \"serverview-icc\",\n\t3174:  \"armi-server\",\n\t3175:  \"t1-e1-over-ip\",\n\t3176:  \"ars-master\",\n\t3177:  \"phonex-port\",\n\t3178:  \"radclientport\",\n\t3179:  \"h2gf-w-2m\",\n\t3180:  \"mc-brk-srv\",\n\t3181:  \"bmcpatrolagent\",\n\t3182:  \"bmcpatrolrnvu\",\n\t3183:  \"cops-tls\",\n\t3184:  \"apogeex-port\",\n\t3185:  \"smpppd\",\n\t3186:  \"iiw-port\",\n\t3187:  \"odi-port\",\n\t3188:  \"brcm-comm-port\",\n\t3189:  \"pcle-infex\",\n\t3190:  \"csvr-proxy\",\n\t3191:  \"csvr-sslproxy\",\n\t3192:  \"firemonrcc\",\n\t3193:  \"spandataport\",\n\t3194:  \"magbind\",\n\t3195:  \"ncu-1\",\n\t3196:  \"ncu-2\",\n\t3197:  \"embrace-dp-s\",\n\t3198:  \"embrace-dp-c\",\n\t3199:  \"dmod-workspace\",\n\t3200:  \"tick-port\",\n\t3201:  \"cpq-tasksmart\",\n\t3202:  \"intraintra\",\n\t3203:  \"netwatcher-mon\",\n\t3204:  \"netwatcher-db\",\n\t3205:  \"isns\",\n\t3206:  \"ironmail\",\n\t3207:  \"vx-auth-port\",\n\t3208:  \"pfu-prcallback\",\n\t3209:  \"netwkpathengine\",\n\t3210:  \"flamenco-proxy\",\n\t3211:  \"avsecuremgmt\",\n\t3212:  \"surveyinst\",\n\t3213:  \"neon24x7\",\n\t3214:  \"jmq-daemon-1\",\n\t3215:  \"jmq-daemon-2\",\n\t3216:  \"ferrari-foam\",\n\t3217:  \"unite\",\n\t3218:  \"smartpackets\",\n\t3219:  \"wms-messenger\",\n\t3220:  \"xnm-ssl\",\n\t3221:  \"xnm-clear-text\",\n\t3222:  \"glbp\",\n\t3223:  \"digivote\",\n\t3224:  \"aes-discovery\",\n\t3225:  \"fcip-port\",\n\t3226:  \"isi-irp\",\n\t3227:  \"dwnmshttp\",\n\t3228:  \"dwmsgserver\",\n\t3229:  \"global-cd-port\",\n\t3230:  \"sftdst-port\",\n\t3231:  \"vidigo\",\n\t3232:  \"mdtp\",\n\t3233:  \"whisker\",\n\t3234:  \"alchemy\",\n\t3235:  \"mdap-port\",\n\t3236:  \"apparenet-ts\",\n\t3237:  \"apparenet-tps\",\n\t3238:  \"apparenet-as\",\n\t3239:  \"apparenet-ui\",\n\t3240:  \"triomotion\",\n\t3241:  \"sysorb\",\n\t3242:  \"sdp-id-port\",\n\t3243:  \"timelot\",\n\t3244:  \"onesaf\",\n\t3245:  \"vieo-fe\",\n\t3246:  \"dvt-system\",\n\t3247:  \"dvt-data\",\n\t3248:  \"procos-lm\",\n\t3249:  \"ssp\",\n\t3250:  \"hicp\",\n\t3251:  \"sysscanner\",\n\t3252:  \"dhe\",\n\t3253:  \"pda-data\",\n\t3254:  \"pda-sys\",\n\t3255:  \"semaphore\",\n\t3256:  \"cpqrpm-agent\",\n\t3257:  \"cpqrpm-server\",\n\t3258:  \"ivecon-port\",\n\t3259:  \"epncdp2\",\n\t3260:  \"iscsi-target\",\n\t3261:  \"winshadow\",\n\t3262:  \"necp\",\n\t3263:  \"ecolor-imager\",\n\t3264:  \"ccmail\",\n\t3265:  \"altav-tunnel\",\n\t3266:  \"ns-cfg-server\",\n\t3267:  \"ibm-dial-out\",\n\t3268:  \"msft-gc\",\n\t3269:  \"msft-gc-ssl\",\n\t3270:  \"verismart\",\n\t3271:  \"csoft-prev\",\n\t3272:  \"user-manager\",\n\t3273:  \"sxmp\",\n\t3274:  \"ordinox-server\",\n\t3275:  \"samd\",\n\t3276:  \"maxim-asics\",\n\t3277:  \"awg-proxy\",\n\t3278:  \"lkcmserver\",\n\t3279:  \"admind\",\n\t3280:  \"vs-server\",\n\t3281:  \"sysopt\",\n\t3282:  \"datusorb\",\n\t3283:  \"Apple Remote Desktop (Net Assistant)\",\n\t3284:  \"4talk\",\n\t3285:  \"plato\",\n\t3286:  \"e-net\",\n\t3287:  \"directvdata\",\n\t3288:  \"cops\",\n\t3289:  \"enpc\",\n\t3290:  \"caps-lm\",\n\t3291:  \"sah-lm\",\n\t3292:  \"cart-o-rama\",\n\t3293:  \"fg-fps\",\n\t3294:  \"fg-gip\",\n\t3295:  \"dyniplookup\",\n\t3296:  \"rib-slm\",\n\t3297:  \"cytel-lm\",\n\t3298:  \"deskview\",\n\t3299:  \"pdrncs\",\n\t3300:  \"ceph\",\n\t3302:  \"mcs-fastmail\",\n\t3303:  \"opsession-clnt\",\n\t3304:  \"opsession-srvr\",\n\t3305:  \"odette-ftp\",\n\t3306:  \"mysql\",\n\t3307:  \"opsession-prxy\",\n\t3308:  \"tns-server\",\n\t3309:  \"tns-adv\",\n\t3310:  \"dyna-access\",\n\t3311:  \"mcns-tel-ret\",\n\t3312:  \"appman-server\",\n\t3313:  \"uorb\",\n\t3314:  \"uohost\",\n\t3315:  \"cdid\",\n\t3316:  \"aicc-cmi\",\n\t3317:  \"vsaiport\",\n\t3318:  \"ssrip\",\n\t3319:  \"sdt-lmd\",\n\t3320:  \"officelink2000\",\n\t3321:  \"vnsstr\",\n\t3326:  \"sftu\",\n\t3327:  \"bbars\",\n\t3328:  \"egptlm\",\n\t3329:  \"hp-device-disc\",\n\t3330:  \"mcs-calypsoicf\",\n\t3331:  \"mcs-messaging\",\n\t3332:  \"mcs-mailsvr\",\n\t3333:  \"dec-notes\",\n\t3334:  \"directv-web\",\n\t3335:  \"directv-soft\",\n\t3336:  \"directv-tick\",\n\t3337:  \"directv-catlg\",\n\t3338:  \"anet-b\",\n\t3339:  \"anet-l\",\n\t3340:  \"anet-m\",\n\t3341:  \"anet-h\",\n\t3342:  \"webtie\",\n\t3343:  \"ms-cluster-net\",\n\t3344:  \"bnt-manager\",\n\t3345:  \"influence\",\n\t3346:  \"trnsprntproxy\",\n\t3347:  \"phoenix-rpc\",\n\t3348:  \"pangolin-laser\",\n\t3349:  \"chevinservices\",\n\t3350:  \"findviatv\",\n\t3351:  \"btrieve\",\n\t3352:  \"ssql\",\n\t3353:  \"fatpipe\",\n\t3354:  \"suitjd\",\n\t3355:  \"ordinox-dbase\",\n\t3356:  \"upnotifyps\",\n\t3357:  \"adtech-test\",\n\t3358:  \"mpsysrmsvr\",\n\t3359:  \"wg-netforce\",\n\t3360:  \"kv-server\",\n\t3361:  \"kv-agent\",\n\t3362:  \"dj-ilm\",\n\t3363:  \"nati-vi-server\",\n\t3364:  \"creativeserver\",\n\t3365:  \"contentserver\",\n\t3366:  \"creativepartnr\",\n\t3372:  \"tip2\",\n\t3373:  \"lavenir-lm\",\n\t3374:  \"cluster-disc\",\n\t3375:  \"vsnm-agent\",\n\t3376:  \"cdbroker\",\n\t3377:  \"cogsys-lm\",\n\t3378:  \"wsicopy\",\n\t3379:  \"socorfs\",\n\t3380:  \"sns-channels\",\n\t3381:  \"geneous\",\n\t3382:  \"fujitsu-neat\",\n\t3383:  \"esp-lm\",\n\t3384:  \"hp-clic\",\n\t3385:  \"qnxnetman\",\n\t3386:  \"gprs-data\",\n\t3387:  \"backroomnet\",\n\t3388:  \"cbserver\",\n\t3389:  \"ms-wbt-server\",\n\t3390:  \"dsc\",\n\t3391:  \"savant\",\n\t3392:  \"efi-lm\",\n\t3393:  \"d2k-tapestry1\",\n\t3394:  \"d2k-tapestry2\",\n\t3395:  \"dyna-lm\",\n\t3396:  \"printer-agent\",\n\t3397:  \"cloanto-lm\",\n\t3398:  \"mercantile\",\n\t3399:  \"csms\",\n\t3400:  \"csms2\",\n\t3401:  \"filecast\",\n\t3402:  \"fxaengine-net\",\n\t3405:  \"nokia-ann-ch1\",\n\t3406:  \"nokia-ann-ch2\",\n\t3407:  \"ldap-admin\",\n\t3408:  \"BESApi\",\n\t3409:  \"networklens\",\n\t3410:  \"networklenss\",\n\t3411:  \"biolink-auth\",\n\t3412:  \"xmlblaster\",\n\t3413:  \"svnet\",\n\t3414:  \"wip-port\",\n\t3415:  \"bcinameservice\",\n\t3416:  \"commandport\",\n\t3417:  \"csvr\",\n\t3418:  \"rnmap\",\n\t3419:  \"softaudit\",\n\t3420:  \"ifcp-port\",\n\t3421:  \"bmap\",\n\t3422:  \"rusb-sys-port\",\n\t3423:  \"xtrm\",\n\t3424:  \"xtrms\",\n\t3425:  \"agps-port\",\n\t3426:  \"arkivio\",\n\t3427:  \"websphere-snmp\",\n\t3428:  \"twcss\",\n\t3429:  \"gcsp\",\n\t3430:  \"ssdispatch\",\n\t3431:  \"ndl-als\",\n\t3432:  \"osdcp\",\n\t3433:  \"opnet-smp\",\n\t3434:  \"opencm\",\n\t3435:  \"pacom\",\n\t3436:  \"gc-config\",\n\t3437:  \"autocueds\",\n\t3438:  \"spiral-admin\",\n\t3439:  \"hri-port\",\n\t3440:  \"ans-console\",\n\t3441:  \"connect-client\",\n\t3442:  \"connect-server\",\n\t3443:  \"ov-nnm-websrv\",\n\t3444:  \"denali-server\",\n\t3445:  \"monp\",\n\t3446:  \"3comfaxrpc\",\n\t3447:  \"directnet\",\n\t3448:  \"dnc-port\",\n\t3449:  \"hotu-chat\",\n\t3450:  \"castorproxy\",\n\t3451:  \"asam\",\n\t3452:  \"sabp-signal\",\n\t3453:  \"pscupd\",\n\t3454:  \"mira\",\n\t3455:  \"prsvp\",\n\t3456:  \"vat\",\n\t3457:  \"vat-control\",\n\t3458:  \"d3winosfi\",\n\t3459:  \"integral\",\n\t3460:  \"edm-manager\",\n\t3461:  \"edm-stager\",\n\t3462:  \"edm-std-notify\",\n\t3463:  \"edm-adm-notify\",\n\t3464:  \"edm-mgr-sync\",\n\t3465:  \"edm-mgr-cntrl\",\n\t3466:  \"workflow\",\n\t3467:  \"rcst\",\n\t3468:  \"ttcmremotectrl\",\n\t3469:  \"pluribus\",\n\t3470:  \"jt400\",\n\t3471:  \"jt400-ssl\",\n\t3472:  \"jaugsremotec-1\",\n\t3473:  \"jaugsremotec-2\",\n\t3474:  \"ttntspauto\",\n\t3475:  \"genisar-port\",\n\t3476:  \"nppmp\",\n\t3477:  \"ecomm\",\n\t3478:  \"stun\",\n\t3479:  \"twrpc\",\n\t3480:  \"plethora\",\n\t3481:  \"cleanerliverc\",\n\t3482:  \"vulture\",\n\t3483:  \"slim-devices\",\n\t3484:  \"gbs-stp\",\n\t3485:  \"celatalk\",\n\t3486:  \"ifsf-hb-port\",\n\t3487:  \"ltctcp\",\n\t3488:  \"fs-rh-srv\",\n\t3489:  \"dtp-dia\",\n\t3490:  \"colubris\",\n\t3491:  \"swr-port\",\n\t3492:  \"tvdumtray-port\",\n\t3493:  \"nut\",\n\t3494:  \"ibm3494\",\n\t3495:  \"seclayer-tcp\",\n\t3496:  \"seclayer-tls\",\n\t3497:  \"ipether232port\",\n\t3498:  \"dashpas-port\",\n\t3499:  \"sccip-media\",\n\t3500:  \"rtmp-port\",\n\t3501:  \"isoft-p2p\",\n\t3502:  \"avinstalldisc\",\n\t3503:  \"lsp-ping\",\n\t3504:  \"ironstorm\",\n\t3505:  \"ccmcomm\",\n\t3506:  \"apc-3506\",\n\t3507:  \"nesh-broker\",\n\t3508:  \"interactionweb\",\n\t3509:  \"vt-ssl\",\n\t3510:  \"xss-port\",\n\t3511:  \"webmail-2\",\n\t3512:  \"aztec\",\n\t3513:  \"arcpd\",\n\t3514:  \"must-p2p\",\n\t3515:  \"must-backplane\",\n\t3516:  \"smartcard-port\",\n\t3517:  \"802-11-iapp\",\n\t3518:  \"artifact-msg\",\n\t3519:  \"nvmsgd\",\n\t3520:  \"galileolog\",\n\t3521:  \"mc3ss\",\n\t3522:  \"nssocketport\",\n\t3523:  \"odeumservlink\",\n\t3524:  \"ecmport\",\n\t3525:  \"eisport\",\n\t3526:  \"starquiz-port\",\n\t3527:  \"beserver-msg-q\",\n\t3528:  \"jboss-iiop\",\n\t3529:  \"jboss-iiop-ssl\",\n\t3530:  \"gf\",\n\t3531:  \"joltid\",\n\t3532:  \"raven-rmp\",\n\t3533:  \"raven-rdp\",\n\t3534:  \"urld-port\",\n\t3535:  \"ms-la\",\n\t3536:  \"snac\",\n\t3537:  \"ni-visa-remote\",\n\t3538:  \"ibm-diradm\",\n\t3539:  \"ibm-diradm-ssl\",\n\t3540:  \"pnrp-port\",\n\t3541:  \"voispeed-port\",\n\t3542:  \"hacl-monitor\",\n\t3543:  \"qftest-lookup\",\n\t3544:  \"teredo\",\n\t3545:  \"camac\",\n\t3547:  \"symantec-sim\",\n\t3548:  \"interworld\",\n\t3549:  \"tellumat-nms\",\n\t3550:  \"ssmpp\",\n\t3551:  \"apcupsd\",\n\t3552:  \"taserver\",\n\t3553:  \"rbr-discovery\",\n\t3554:  \"questnotify\",\n\t3555:  \"razor\",\n\t3556:  \"sky-transport\",\n\t3557:  \"personalos-001\",\n\t3558:  \"mcp-port\",\n\t3559:  \"cctv-port\",\n\t3560:  \"iniserve-port\",\n\t3561:  \"bmc-onekey\",\n\t3562:  \"sdbproxy\",\n\t3563:  \"watcomdebug\",\n\t3564:  \"esimport\",\n\t3565:  \"m2pa\",\n\t3566:  \"quest-data-hub\",\n\t3567:  \"dof-eps\",\n\t3568:  \"dof-tunnel-sec\",\n\t3569:  \"mbg-ctrl\",\n\t3570:  \"mccwebsvr-port\",\n\t3571:  \"megardsvr-port\",\n\t3572:  \"megaregsvrport\",\n\t3573:  \"tag-ups-1\",\n\t3574:  \"dmaf-server\",\n\t3575:  \"ccm-port\",\n\t3576:  \"cmc-port\",\n\t3577:  \"config-port\",\n\t3578:  \"data-port\",\n\t3579:  \"ttat3lb\",\n\t3580:  \"nati-svrloc\",\n\t3581:  \"kfxaclicensing\",\n\t3582:  \"press\",\n\t3583:  \"canex-watch\",\n\t3584:  \"u-dbap\",\n\t3585:  \"emprise-lls\",\n\t3586:  \"emprise-lsc\",\n\t3587:  \"p2pgroup\",\n\t3588:  \"sentinel\",\n\t3589:  \"isomair\",\n\t3590:  \"wv-csp-sms\",\n\t3591:  \"gtrack-server\",\n\t3592:  \"gtrack-ne\",\n\t3593:  \"bpmd\",\n\t3594:  \"mediaspace\",\n\t3595:  \"shareapp\",\n\t3596:  \"iw-mmogame\",\n\t3597:  \"a14\",\n\t3598:  \"a15\",\n\t3599:  \"quasar-server\",\n\t3600:  \"trap-daemon\",\n\t3601:  \"visinet-gui\",\n\t3602:  \"infiniswitchcl\",\n\t3603:  \"int-rcv-cntrl\",\n\t3604:  \"bmc-jmx-port\",\n\t3605:  \"comcam-io\",\n\t3606:  \"splitlock\",\n\t3607:  \"precise-i3\",\n\t3608:  \"trendchip-dcp\",\n\t3609:  \"cpdi-pidas-cm\",\n\t3610:  \"echonet\",\n\t3611:  \"six-degrees\",\n\t3612:  \"hp-dataprotect\",\n\t3613:  \"alaris-disc\",\n\t3614:  \"sigma-port\",\n\t3615:  \"start-network\",\n\t3616:  \"cd3o-protocol\",\n\t3617:  \"sharp-server\",\n\t3618:  \"aairnet-1\",\n\t3619:  \"aairnet-2\",\n\t3620:  \"ep-pcp\",\n\t3621:  \"ep-nsp\",\n\t3622:  \"ff-lr-port\",\n\t3623:  \"haipe-discover\",\n\t3624:  \"dist-upgrade\",\n\t3625:  \"volley\",\n\t3626:  \"bvcdaemon-port\",\n\t3627:  \"jamserverport\",\n\t3628:  \"ept-machine\",\n\t3629:  \"escvpnet\",\n\t3630:  \"cs-remote-db\",\n\t3631:  \"cs-services\",\n\t3632:  \"distcc\",\n\t3633:  \"wacp\",\n\t3634:  \"hlibmgr\",\n\t3635:  \"sdo\",\n\t3636:  \"servistaitsm\",\n\t3637:  \"scservp\",\n\t3638:  \"ehp-backup\",\n\t3639:  \"xap-ha\",\n\t3640:  \"netplay-port1\",\n\t3641:  \"netplay-port2\",\n\t3642:  \"juxml-port\",\n\t3643:  \"audiojuggler\",\n\t3644:  \"ssowatch\",\n\t3645:  \"cyc\",\n\t3646:  \"xss-srv-port\",\n\t3647:  \"splitlock-gw\",\n\t3648:  \"fjcp\",\n\t3649:  \"nmmp\",\n\t3650:  \"prismiq-plugin\",\n\t3651:  \"xrpc-registry\",\n\t3652:  \"vxcrnbuport\",\n\t3653:  \"tsp\",\n\t3654:  \"vaprtm\",\n\t3655:  \"abatemgr\",\n\t3656:  \"abatjss\",\n\t3657:  \"immedianet-bcn\",\n\t3658:  \"ps-ams\",\n\t3659:  \"apple-sasl\",\n\t3660:  \"can-nds-ssl\",\n\t3661:  \"can-ferret-ssl\",\n\t3662:  \"pserver\",\n\t3663:  \"dtp\",\n\t3664:  \"ups-engine\",\n\t3665:  \"ent-engine\",\n\t3666:  \"eserver-pap\",\n\t3667:  \"infoexch\",\n\t3668:  \"dell-rm-port\",\n\t3669:  \"casanswmgmt\",\n\t3670:  \"smile\",\n\t3671:  \"efcp\",\n\t3672:  \"lispworks-orb\",\n\t3673:  \"mediavault-gui\",\n\t3674:  \"wininstall-ipc\",\n\t3675:  \"calltrax\",\n\t3676:  \"va-pacbase\",\n\t3677:  \"roverlog\",\n\t3678:  \"ipr-dglt\",\n\t3679:  \"Escale (Newton Dock)\",\n\t3680:  \"npds-tracker\",\n\t3681:  \"bts-x73\",\n\t3682:  \"cas-mapi\",\n\t3683:  \"bmc-ea\",\n\t3684:  \"faxstfx-port\",\n\t3685:  \"dsx-agent\",\n\t3686:  \"tnmpv2\",\n\t3687:  \"simple-push\",\n\t3688:  \"simple-push-s\",\n\t3689:  \"daap\",\n\t3690:  \"svn\",\n\t3691:  \"magaya-network\",\n\t3692:  \"intelsync\",\n\t3693:  \"easl\",\n\t3695:  \"bmc-data-coll\",\n\t3696:  \"telnetcpcd\",\n\t3697:  \"nw-license\",\n\t3698:  \"sagectlpanel\",\n\t3699:  \"kpn-icw\",\n\t3700:  \"lrs-paging\",\n\t3701:  \"netcelera\",\n\t3702:  \"ws-discovery\",\n\t3703:  \"adobeserver-3\",\n\t3704:  \"adobeserver-4\",\n\t3705:  \"adobeserver-5\",\n\t3706:  \"rt-event\",\n\t3707:  \"rt-event-s\",\n\t3708:  \"sun-as-iiops\",\n\t3709:  \"ca-idms\",\n\t3710:  \"portgate-auth\",\n\t3711:  \"edb-server2\",\n\t3712:  \"sentinel-ent\",\n\t3713:  \"tftps\",\n\t3714:  \"delos-dms\",\n\t3715:  \"anoto-rendezv\",\n\t3716:  \"wv-csp-sms-cir\",\n\t3717:  \"wv-csp-udp-cir\",\n\t3718:  \"opus-services\",\n\t3719:  \"itelserverport\",\n\t3720:  \"ufastro-instr\",\n\t3721:  \"xsync\",\n\t3722:  \"xserveraid\",\n\t3723:  \"sychrond\",\n\t3724:  \"blizwow\",\n\t3725:  \"na-er-tip\",\n\t3726:  \"array-manager\",\n\t3727:  \"e-mdu\",\n\t3728:  \"e-woa\",\n\t3729:  \"fksp-audit\",\n\t3730:  \"client-ctrl\",\n\t3731:  \"smap\",\n\t3732:  \"m-wnn\",\n\t3733:  \"multip-msg\",\n\t3734:  \"synel-data\",\n\t3735:  \"pwdis\",\n\t3736:  \"rs-rmi\",\n\t3737:  \"xpanel\",\n\t3738:  \"versatalk\",\n\t3739:  \"launchbird-lm\",\n\t3740:  \"heartbeat\",\n\t3741:  \"wysdma\",\n\t3742:  \"cst-port\",\n\t3743:  \"ipcs-command\",\n\t3744:  \"sasg\",\n\t3745:  \"gw-call-port\",\n\t3746:  \"linktest\",\n\t3747:  \"linktest-s\",\n\t3748:  \"webdata\",\n\t3749:  \"cimtrak\",\n\t3750:  \"cbos-ip-port\",\n\t3751:  \"gprs-cube\",\n\t3752:  \"vipremoteagent\",\n\t3753:  \"nattyserver\",\n\t3754:  \"timestenbroker\",\n\t3755:  \"sas-remote-hlp\",\n\t3756:  \"canon-capt\",\n\t3757:  \"grf-port\",\n\t3758:  \"apw-registry\",\n\t3759:  \"exapt-lmgr\",\n\t3760:  \"adtempusclient\",\n\t3761:  \"gsakmp\",\n\t3762:  \"gbs-smp\",\n\t3763:  \"xo-wave\",\n\t3764:  \"mni-prot-rout\",\n\t3765:  \"rtraceroute\",\n\t3766:  \"sitewatch-s\",\n\t3767:  \"listmgr-port\",\n\t3768:  \"rblcheckd\",\n\t3769:  \"haipe-otnk\",\n\t3770:  \"cindycollab\",\n\t3771:  \"paging-port\",\n\t3772:  \"ctp\",\n\t3773:  \"ctdhercules\",\n\t3774:  \"zicom\",\n\t3775:  \"ispmmgr\",\n\t3776:  \"dvcprov-port\",\n\t3777:  \"jibe-eb\",\n\t3778:  \"c-h-it-port\",\n\t3779:  \"cognima\",\n\t3780:  \"nnp\",\n\t3781:  \"abcvoice-port\",\n\t3782:  \"iso-tp0s\",\n\t3783:  \"bim-pem\",\n\t3784:  \"bfd-control\",\n\t3785:  \"bfd-echo\",\n\t3786:  \"upstriggervsw\",\n\t3787:  \"fintrx\",\n\t3788:  \"isrp-port\",\n\t3789:  \"remotedeploy\",\n\t3790:  \"quickbooksrds\",\n\t3791:  \"tvnetworkvideo\",\n\t3792:  \"sitewatch\",\n\t3793:  \"dcsoftware\",\n\t3794:  \"jaus\",\n\t3795:  \"myblast\",\n\t3796:  \"spw-dialer\",\n\t3797:  \"idps\",\n\t3798:  \"minilock\",\n\t3799:  \"radius-dynauth\",\n\t3800:  \"pwgpsi\",\n\t3801:  \"ibm-mgr\",\n\t3802:  \"vhd\",\n\t3803:  \"soniqsync\",\n\t3804:  \"iqnet-port\",\n\t3805:  \"tcpdataserver\",\n\t3806:  \"wsmlb\",\n\t3807:  \"spugna\",\n\t3808:  \"sun-as-iiops-ca\",\n\t3809:  \"apocd\",\n\t3810:  \"wlanauth\",\n\t3811:  \"amp\",\n\t3812:  \"neto-wol-server\",\n\t3813:  \"rap-ip\",\n\t3814:  \"neto-dcs\",\n\t3815:  \"lansurveyorxml\",\n\t3816:  \"sunlps-http\",\n\t3817:  \"tapeware\",\n\t3818:  \"crinis-hb\",\n\t3819:  \"epl-slp\",\n\t3820:  \"scp\",\n\t3821:  \"pmcp\",\n\t3822:  \"acp-discovery\",\n\t3823:  \"acp-conduit\",\n\t3824:  \"acp-policy\",\n\t3825:  \"ffserver\",\n\t3826:  \"warmux\",\n\t3827:  \"netmpi\",\n\t3828:  \"neteh\",\n\t3829:  \"neteh-ext\",\n\t3830:  \"cernsysmgmtagt\",\n\t3831:  \"dvapps\",\n\t3832:  \"xxnetserver\",\n\t3833:  \"aipn-auth\",\n\t3834:  \"spectardata\",\n\t3835:  \"spectardb\",\n\t3836:  \"markem-dcp\",\n\t3837:  \"mkm-discovery\",\n\t3838:  \"sos\",\n\t3839:  \"amx-rms\",\n\t3840:  \"flirtmitmir\",\n\t3841:  \"shiprush-db-svr\",\n\t3842:  \"nhci\",\n\t3843:  \"quest-agent\",\n\t3844:  \"rnm\",\n\t3845:  \"v-one-spp\",\n\t3846:  \"an-pcp\",\n\t3847:  \"msfw-control\",\n\t3848:  \"item\",\n\t3849:  \"spw-dnspreload\",\n\t3850:  \"qtms-bootstrap\",\n\t3851:  \"spectraport\",\n\t3852:  \"sse-app-config\",\n\t3853:  \"sscan\",\n\t3854:  \"stryker-com\",\n\t3855:  \"opentrac\",\n\t3856:  \"informer\",\n\t3857:  \"trap-port\",\n\t3858:  \"trap-port-mom\",\n\t3859:  \"nav-port\",\n\t3860:  \"sasp\",\n\t3861:  \"winshadow-hd\",\n\t3862:  \"giga-pocket\",\n\t3863:  \"asap-tcp\",\n\t3864:  \"asap-tcp-tls\",\n\t3865:  \"xpl\",\n\t3866:  \"dzdaemon\",\n\t3867:  \"dzoglserver\",\n\t3868:  \"diameter\",\n\t3869:  \"ovsam-mgmt\",\n\t3870:  \"ovsam-d-agent\",\n\t3871:  \"avocent-adsap\",\n\t3872:  \"oem-agent\",\n\t3873:  \"fagordnc\",\n\t3874:  \"sixxsconfig\",\n\t3875:  \"pnbscada\",\n\t3876:  \"dl-agent\",\n\t3877:  \"xmpcr-interface\",\n\t3878:  \"fotogcad\",\n\t3879:  \"appss-lm\",\n\t3880:  \"igrs\",\n\t3881:  \"idac\",\n\t3882:  \"msdts1\",\n\t3883:  \"vrpn\",\n\t3884:  \"softrack-meter\",\n\t3885:  \"topflow-ssl\",\n\t3886:  \"nei-management\",\n\t3887:  \"ciphire-data\",\n\t3888:  \"ciphire-serv\",\n\t3889:  \"dandv-tester\",\n\t3890:  \"ndsconnect\",\n\t3891:  \"rtc-pm-port\",\n\t3892:  \"pcc-image-port\",\n\t3893:  \"cgi-starapi\",\n\t3894:  \"syam-agent\",\n\t3895:  \"syam-smc\",\n\t3896:  \"sdo-tls\",\n\t3897:  \"sdo-ssh\",\n\t3898:  \"senip\",\n\t3899:  \"itv-control\",\n\t3900:  \"udt-os\",\n\t3901:  \"nimsh\",\n\t3902:  \"nimaux\",\n\t3903:  \"charsetmgr\",\n\t3904:  \"omnilink-port\",\n\t3905:  \"mupdate\",\n\t3906:  \"topovista-data\",\n\t3907:  \"imoguia-port\",\n\t3908:  \"hppronetman\",\n\t3909:  \"surfcontrolcpa\",\n\t3910:  \"prnrequest\",\n\t3911:  \"prnstatus\",\n\t3912:  \"gbmt-stars\",\n\t3913:  \"listcrt-port\",\n\t3914:  \"listcrt-port-2\",\n\t3915:  \"agcat\",\n\t3916:  \"wysdmc\",\n\t3917:  \"aftmux\",\n\t3918:  \"pktcablemmcops\",\n\t3919:  \"hyperip\",\n\t3920:  \"exasoftport1\",\n\t3921:  \"herodotus-net\",\n\t3922:  \"sor-update\",\n\t3923:  \"symb-sb-port\",\n\t3924:  \"mpl-gprs-port\",\n\t3925:  \"zmp\",\n\t3926:  \"winport\",\n\t3927:  \"natdataservice\",\n\t3928:  \"netboot-pxe\",\n\t3929:  \"smauth-port\",\n\t3930:  \"syam-webserver\",\n\t3931:  \"msr-plugin-port\",\n\t3932:  \"dyn-site\",\n\t3933:  \"plbserve-port\",\n\t3934:  \"sunfm-port\",\n\t3935:  \"sdp-portmapper\",\n\t3936:  \"mailprox\",\n\t3937:  \"dvbservdsc\",\n\t3938:  \"dbcontrol-agent\",\n\t3939:  \"aamp\",\n\t3940:  \"xecp-node\",\n\t3941:  \"homeportal-web\",\n\t3942:  \"srdp\",\n\t3943:  \"tig\",\n\t3944:  \"sops\",\n\t3945:  \"emcads\",\n\t3946:  \"backupedge\",\n\t3947:  \"ccp\",\n\t3948:  \"apdap\",\n\t3949:  \"drip\",\n\t3950:  \"namemunge\",\n\t3951:  \"pwgippfax\",\n\t3952:  \"i3-sessionmgr\",\n\t3953:  \"xmlink-connect\",\n\t3954:  \"adrep\",\n\t3955:  \"p2pcommunity\",\n\t3956:  \"gvcp\",\n\t3957:  \"mqe-broker\",\n\t3958:  \"mqe-agent\",\n\t3959:  \"treehopper\",\n\t3960:  \"bess\",\n\t3961:  \"proaxess\",\n\t3962:  \"sbi-agent\",\n\t3963:  \"thrp\",\n\t3964:  \"sasggprs\",\n\t3965:  \"ati-ip-to-ncpe\",\n\t3966:  \"bflckmgr\",\n\t3967:  \"ppsms\",\n\t3968:  \"ianywhere-dbns\",\n\t3969:  \"landmarks\",\n\t3970:  \"lanrevagent\",\n\t3971:  \"lanrevserver\",\n\t3972:  \"iconp\",\n\t3973:  \"progistics\",\n\t3974:  \"citysearch\",\n\t3975:  \"airshot\",\n\t3976:  \"opswagent\",\n\t3977:  \"opswmanager\",\n\t3978:  \"secure-cfg-svr\",\n\t3979:  \"smwan\",\n\t3980:  \"acms\",\n\t3981:  \"starfish\",\n\t3982:  \"eis\",\n\t3983:  \"eisp\",\n\t3984:  \"mapper-nodemgr\",\n\t3985:  \"mapper-mapethd\",\n\t3986:  \"mapper-ws-ethd\",\n\t3987:  \"centerline\",\n\t3988:  \"dcs-config\",\n\t3989:  \"bv-queryengine\",\n\t3990:  \"bv-is\",\n\t3991:  \"bv-smcsrv\",\n\t3992:  \"bv-ds\",\n\t3993:  \"bv-agent\",\n\t3995:  \"iss-mgmt-ssl\",\n\t3996:  \"abcsoftware\",\n\t3997:  \"agentsease-db\",\n\t3998:  \"dnx\",\n\t3999:  \"nvcnet\",\n\t4000:  \"terabase\",\n\t4001:  \"newoak\",\n\t4002:  \"pxc-spvr-ft\",\n\t4003:  \"pxc-splr-ft\",\n\t4004:  \"pxc-roid\",\n\t4005:  \"pxc-pin\",\n\t4006:  \"pxc-spvr\",\n\t4007:  \"pxc-splr\",\n\t4008:  \"netcheque\",\n\t4009:  \"chimera-hwm\",\n\t4010:  \"samsung-unidex\",\n\t4011:  \"altserviceboot\",\n\t4012:  \"pda-gate\",\n\t4013:  \"acl-manager\",\n\t4014:  \"taiclock\",\n\t4015:  \"talarian-mcast1\",\n\t4016:  \"talarian-mcast2\",\n\t4017:  \"talarian-mcast3\",\n\t4018:  \"talarian-mcast4\",\n\t4019:  \"talarian-mcast5\",\n\t4020:  \"trap\",\n\t4021:  \"nexus-portal\",\n\t4022:  \"dnox\",\n\t4023:  \"esnm-zoning\",\n\t4024:  \"tnp1-port\",\n\t4025:  \"partimage\",\n\t4026:  \"as-debug\",\n\t4027:  \"bxp\",\n\t4028:  \"dtserver-port\",\n\t4029:  \"ip-qsig\",\n\t4030:  \"jdmn-port\",\n\t4031:  \"suucp\",\n\t4032:  \"vrts-auth-port\",\n\t4033:  \"sanavigator\",\n\t4034:  \"ubxd\",\n\t4035:  \"wap-push-http\",\n\t4036:  \"wap-push-https\",\n\t4037:  \"ravehd\",\n\t4038:  \"fazzt-ptp\",\n\t4039:  \"fazzt-admin\",\n\t4040:  \"yo-main\",\n\t4041:  \"houston\",\n\t4042:  \"ldxp\",\n\t4043:  \"nirp\",\n\t4044:  \"ltp\",\n\t4045:  \"npp\",\n\t4046:  \"acp-proto\",\n\t4047:  \"ctp-state\",\n\t4049:  \"wafs\",\n\t4050:  \"cisco-wafs\",\n\t4051:  \"cppdp\",\n\t4052:  \"interact\",\n\t4053:  \"ccu-comm-1\",\n\t4054:  \"ccu-comm-2\",\n\t4055:  \"ccu-comm-3\",\n\t4056:  \"lms\",\n\t4057:  \"wfm\",\n\t4058:  \"kingfisher\",\n\t4059:  \"dlms-cosem\",\n\t4060:  \"dsmeter-iatc\",\n\t4061:  \"ice-location\",\n\t4062:  \"ice-slocation\",\n\t4063:  \"ice-router\",\n\t4064:  \"ice-srouter\",\n\t4065:  \"avanti-cdp\",\n\t4066:  \"pmas\",\n\t4067:  \"idp\",\n\t4068:  \"ipfltbcst\",\n\t4069:  \"minger\",\n\t4070:  \"tripe\",\n\t4071:  \"aibkup\",\n\t4072:  \"zieto-sock\",\n\t4073:  \"iRAPP\",\n\t4074:  \"cequint-cityid\",\n\t4075:  \"perimlan\",\n\t4076:  \"seraph\",\n\t4078:  \"cssp\",\n\t4079:  \"santools\",\n\t4080:  \"lorica-in\",\n\t4081:  \"lorica-in-sec\",\n\t4082:  \"lorica-out\",\n\t4083:  \"lorica-out-sec\",\n\t4085:  \"ezmessagesrv\",\n\t4087:  \"applusservice\",\n\t4088:  \"npsp\",\n\t4089:  \"opencore\",\n\t4090:  \"omasgport\",\n\t4091:  \"ewinstaller\",\n\t4092:  \"ewdgs\",\n\t4093:  \"pvxpluscs\",\n\t4094:  \"sysrqd\",\n\t4095:  \"xtgui\",\n\t4096:  \"bre\",\n\t4097:  \"patrolview\",\n\t4098:  \"drmsfsd\",\n\t4099:  \"dpcp\",\n\t4100:  \"igo-incognito\",\n\t4101:  \"brlp-0\",\n\t4102:  \"brlp-1\",\n\t4103:  \"brlp-2\",\n\t4104:  \"brlp-3\",\n\t4105:  \"shofar\",\n\t4106:  \"synchronite\",\n\t4107:  \"j-ac\",\n\t4108:  \"accel\",\n\t4109:  \"izm\",\n\t4110:  \"g2tag\",\n\t4111:  \"xgrid\",\n\t4112:  \"apple-vpns-rp\",\n\t4113:  \"aipn-reg\",\n\t4114:  \"jomamqmonitor\",\n\t4115:  \"cds\",\n\t4116:  \"smartcard-tls\",\n\t4117:  \"hillrserv\",\n\t4118:  \"netscript\",\n\t4119:  \"assuria-slm\",\n\t4120:  \"minirem\",\n\t4121:  \"e-builder\",\n\t4122:  \"fprams\",\n\t4123:  \"z-wave\",\n\t4124:  \"tigv2\",\n\t4125:  \"opsview-envoy\",\n\t4126:  \"ddrepl\",\n\t4127:  \"unikeypro\",\n\t4128:  \"nufw\",\n\t4129:  \"nuauth\",\n\t4130:  \"fronet\",\n\t4131:  \"stars\",\n\t4132:  \"nuts-dem\",\n\t4133:  \"nuts-bootp\",\n\t4134:  \"nifty-hmi\",\n\t4135:  \"cl-db-attach\",\n\t4136:  \"cl-db-request\",\n\t4137:  \"cl-db-remote\",\n\t4138:  \"nettest\",\n\t4139:  \"thrtx\",\n\t4140:  \"cedros-fds\",\n\t4141:  \"oirtgsvc\",\n\t4142:  \"oidocsvc\",\n\t4143:  \"oidsr\",\n\t4145:  \"vvr-control\",\n\t4146:  \"tgcconnect\",\n\t4147:  \"vrxpservman\",\n\t4148:  \"hhb-handheld\",\n\t4149:  \"agslb\",\n\t4150:  \"PowerAlert-nsa\",\n\t4151:  \"menandmice-noh\",\n\t4152:  \"idig-mux\",\n\t4153:  \"mbl-battd\",\n\t4154:  \"atlinks\",\n\t4155:  \"bzr\",\n\t4156:  \"stat-results\",\n\t4157:  \"stat-scanner\",\n\t4158:  \"stat-cc\",\n\t4159:  \"nss\",\n\t4160:  \"jini-discovery\",\n\t4161:  \"omscontact\",\n\t4162:  \"omstopology\",\n\t4163:  \"silverpeakpeer\",\n\t4164:  \"silverpeakcomm\",\n\t4165:  \"altcp\",\n\t4166:  \"joost\",\n\t4167:  \"ddgn\",\n\t4168:  \"pslicser\",\n\t4169:  \"iadt\",\n\t4170:  \"d-cinema-csp\",\n\t4171:  \"ml-svnet\",\n\t4172:  \"pcoip\",\n\t4174:  \"smcluster\",\n\t4175:  \"bccp\",\n\t4176:  \"tl-ipcproxy\",\n\t4177:  \"wello\",\n\t4178:  \"storman\",\n\t4179:  \"MaxumSP\",\n\t4180:  \"httpx\",\n\t4181:  \"macbak\",\n\t4182:  \"pcptcpservice\",\n\t4183:  \"cyborgnet\",\n\t4184:  \"universe-suite\",\n\t4185:  \"wcpp\",\n\t4186:  \"boxbackupstore\",\n\t4187:  \"csc-proxy\",\n\t4188:  \"vatata\",\n\t4189:  \"pcep\",\n\t4190:  \"sieve\",\n\t4192:  \"azeti\",\n\t4193:  \"pvxplusio\",\n\t4197:  \"hctl\",\n\t4199:  \"eims-admin\",\n\t4300:  \"corelccam\",\n\t4301:  \"d-data\",\n\t4302:  \"d-data-control\",\n\t4303:  \"srcp\",\n\t4304:  \"owserver\",\n\t4305:  \"batman\",\n\t4306:  \"pinghgl\",\n\t4307:  \"trueconf\",\n\t4308:  \"compx-lockview\",\n\t4309:  \"dserver\",\n\t4310:  \"mirrtex\",\n\t4311:  \"p6ssmc\",\n\t4312:  \"pscl-mgt\",\n\t4313:  \"perrla\",\n\t4314:  \"choiceview-agt\",\n\t4316:  \"choiceview-clt\",\n\t4320:  \"fdt-rcatp\",\n\t4321:  \"rwhois\",\n\t4322:  \"trim-event\",\n\t4323:  \"trim-ice\",\n\t4325:  \"geognosisman\",\n\t4326:  \"geognosis\",\n\t4327:  \"jaxer-web\",\n\t4328:  \"jaxer-manager\",\n\t4329:  \"publiqare-sync\",\n\t4330:  \"dey-sapi\",\n\t4331:  \"ktickets-rest\",\n\t4333:  \"ahsp\",\n\t4334:  \"netconf-ch-ssh\",\n\t4335:  \"netconf-ch-tls\",\n\t4336:  \"restconf-ch-tls\",\n\t4340:  \"gaia\",\n\t4341:  \"lisp-data\",\n\t4342:  \"lisp-cons\",\n\t4343:  \"unicall\",\n\t4344:  \"vinainstall\",\n\t4345:  \"m4-network-as\",\n\t4346:  \"elanlm\",\n\t4347:  \"lansurveyor\",\n\t4348:  \"itose\",\n\t4349:  \"fsportmap\",\n\t4350:  \"net-device\",\n\t4351:  \"plcy-net-svcs\",\n\t4352:  \"pjlink\",\n\t4353:  \"f5-iquery\",\n\t4354:  \"qsnet-trans\",\n\t4355:  \"qsnet-workst\",\n\t4356:  \"qsnet-assist\",\n\t4357:  \"qsnet-cond\",\n\t4358:  \"qsnet-nucl\",\n\t4359:  \"omabcastltkm\",\n\t4360:  \"matrix-vnet\",\n\t4368:  \"wxbrief\",\n\t4369:  \"epmd\",\n\t4370:  \"elpro-tunnel\",\n\t4371:  \"l2c-control\",\n\t4372:  \"l2c-data\",\n\t4373:  \"remctl\",\n\t4374:  \"psi-ptt\",\n\t4375:  \"tolteces\",\n\t4376:  \"bip\",\n\t4377:  \"cp-spxsvr\",\n\t4378:  \"cp-spxdpy\",\n\t4379:  \"ctdb\",\n\t4389:  \"xandros-cms\",\n\t4390:  \"wiegand\",\n\t4391:  \"apwi-imserver\",\n\t4392:  \"apwi-rxserver\",\n\t4393:  \"apwi-rxspooler\",\n\t4395:  \"omnivisionesx\",\n\t4396:  \"fly\",\n\t4400:  \"ds-srv\",\n\t4401:  \"ds-srvr\",\n\t4402:  \"ds-clnt\",\n\t4403:  \"ds-user\",\n\t4404:  \"ds-admin\",\n\t4405:  \"ds-mail\",\n\t4406:  \"ds-slp\",\n\t4407:  \"nacagent\",\n\t4408:  \"slscc\",\n\t4409:  \"netcabinet-com\",\n\t4410:  \"itwo-server\",\n\t4411:  \"found\",\n\t4413:  \"avi-nms\",\n\t4414:  \"updog\",\n\t4415:  \"brcd-vr-req\",\n\t4416:  \"pjj-player\",\n\t4417:  \"workflowdir\",\n\t4419:  \"cbp\",\n\t4420:  \"nvm-express\",\n\t4421:  \"scaleft\",\n\t4422:  \"tsepisp\",\n\t4423:  \"thingkit\",\n\t4425:  \"netrockey6\",\n\t4426:  \"beacon-port-2\",\n\t4427:  \"drizzle\",\n\t4428:  \"omviserver\",\n\t4429:  \"omviagent\",\n\t4430:  \"rsqlserver\",\n\t4431:  \"wspipe\",\n\t4432:  \"l-acoustics\",\n\t4433:  \"vop\",\n\t4442:  \"saris\",\n\t4443:  \"pharos\",\n\t4444:  \"krb524\",\n\t4445:  \"upnotifyp\",\n\t4446:  \"n1-fwp\",\n\t4447:  \"n1-rmgmt\",\n\t4448:  \"asc-slmd\",\n\t4449:  \"privatewire\",\n\t4450:  \"camp\",\n\t4451:  \"ctisystemmsg\",\n\t4452:  \"ctiprogramload\",\n\t4453:  \"nssalertmgr\",\n\t4454:  \"nssagentmgr\",\n\t4455:  \"prchat-user\",\n\t4456:  \"prchat-server\",\n\t4457:  \"prRegister\",\n\t4458:  \"mcp\",\n\t4484:  \"hpssmgmt\",\n\t4485:  \"assyst-dr\",\n\t4486:  \"icms\",\n\t4487:  \"prex-tcp\",\n\t4488:  \"awacs-ice\",\n\t4500:  \"ipsec-nat-t\",\n\t4535:  \"ehs\",\n\t4536:  \"ehs-ssl\",\n\t4537:  \"wssauthsvc\",\n\t4538:  \"swx-gate\",\n\t4545:  \"worldscores\",\n\t4546:  \"sf-lm\",\n\t4547:  \"lanner-lm\",\n\t4548:  \"synchromesh\",\n\t4549:  \"aegate\",\n\t4550:  \"gds-adppiw-db\",\n\t4551:  \"ieee-mih\",\n\t4552:  \"menandmice-mon\",\n\t4553:  \"icshostsvc\",\n\t4554:  \"msfrs\",\n\t4555:  \"rsip\",\n\t4556:  \"dtn-bundle\",\n\t4559:  \"hylafax\",\n\t4563:  \"amahi-anywhere\",\n\t4566:  \"kwtc\",\n\t4567:  \"tram\",\n\t4568:  \"bmc-reporting\",\n\t4569:  \"iax\",\n\t4570:  \"deploymentmap\",\n\t4573:  \"cardifftec-back\",\n\t4590:  \"rid\",\n\t4591:  \"l3t-at-an\",\n\t4593:  \"ipt-anri-anri\",\n\t4594:  \"ias-session\",\n\t4595:  \"ias-paging\",\n\t4596:  \"ias-neighbor\",\n\t4597:  \"a21-an-1xbs\",\n\t4598:  \"a16-an-an\",\n\t4599:  \"a17-an-an\",\n\t4600:  \"piranha1\",\n\t4601:  \"piranha2\",\n\t4602:  \"mtsserver\",\n\t4603:  \"menandmice-upg\",\n\t4604:  \"irp\",\n\t4605:  \"sixchat\",\n\t4658:  \"playsta2-app\",\n\t4659:  \"playsta2-lob\",\n\t4660:  \"smaclmgr\",\n\t4661:  \"kar2ouche\",\n\t4662:  \"oms\",\n\t4663:  \"noteit\",\n\t4664:  \"ems\",\n\t4665:  \"contclientms\",\n\t4666:  \"eportcomm\",\n\t4667:  \"mmacomm\",\n\t4668:  \"mmaeds\",\n\t4669:  \"eportcommdata\",\n\t4670:  \"light\",\n\t4671:  \"acter\",\n\t4672:  \"rfa\",\n\t4673:  \"cxws\",\n\t4674:  \"appiq-mgmt\",\n\t4675:  \"dhct-status\",\n\t4676:  \"dhct-alerts\",\n\t4677:  \"bcs\",\n\t4678:  \"traversal\",\n\t4679:  \"mgesupervision\",\n\t4680:  \"mgemanagement\",\n\t4681:  \"parliant\",\n\t4682:  \"finisar\",\n\t4683:  \"spike\",\n\t4684:  \"rfid-rp1\",\n\t4685:  \"autopac\",\n\t4686:  \"msp-os\",\n\t4687:  \"nst\",\n\t4688:  \"mobile-p2p\",\n\t4689:  \"altovacentral\",\n\t4690:  \"prelude\",\n\t4691:  \"mtn\",\n\t4692:  \"conspiracy\",\n\t4700:  \"netxms-agent\",\n\t4701:  \"netxms-mgmt\",\n\t4702:  \"netxms-sync\",\n\t4703:  \"npqes-test\",\n\t4704:  \"assuria-ins\",\n\t4711:  \"trinity-dist\",\n\t4725:  \"truckstar\",\n\t4727:  \"fcis\",\n\t4728:  \"capmux\",\n\t4730:  \"gearman\",\n\t4731:  \"remcap\",\n\t4733:  \"resorcs\",\n\t4737:  \"ipdr-sp\",\n\t4738:  \"solera-lpn\",\n\t4739:  \"ipfix\",\n\t4740:  \"ipfixs\",\n\t4741:  \"lumimgrd\",\n\t4742:  \"sicct\",\n\t4743:  \"openhpid\",\n\t4744:  \"ifsp\",\n\t4745:  \"fmp\",\n\t4749:  \"profilemac\",\n\t4750:  \"ssad\",\n\t4751:  \"spocp\",\n\t4752:  \"snap\",\n\t4753:  \"simon\",\n\t4756:  \"RDCenter\",\n\t4774:  \"converge\",\n\t4784:  \"bfd-multi-ctl\",\n\t4786:  \"smart-install\",\n\t4787:  \"sia-ctrl-plane\",\n\t4788:  \"xmcp\",\n\t4800:  \"iims\",\n\t4801:  \"iwec\",\n\t4802:  \"ilss\",\n\t4803:  \"notateit\",\n\t4827:  \"htcp\",\n\t4837:  \"varadero-0\",\n\t4838:  \"varadero-1\",\n\t4839:  \"varadero-2\",\n\t4840:  \"opcua-tcp\",\n\t4841:  \"quosa\",\n\t4842:  \"gw-asv\",\n\t4843:  \"opcua-tls\",\n\t4844:  \"gw-log\",\n\t4845:  \"wcr-remlib\",\n\t4846:  \"contamac-icm\",\n\t4847:  \"wfc\",\n\t4848:  \"appserv-http\",\n\t4849:  \"appserv-https\",\n\t4850:  \"sun-as-nodeagt\",\n\t4851:  \"derby-repli\",\n\t4867:  \"unify-debug\",\n\t4868:  \"phrelay\",\n\t4869:  \"phrelaydbg\",\n\t4870:  \"cc-tracking\",\n\t4871:  \"wired\",\n\t4876:  \"tritium-can\",\n\t4877:  \"lmcs\",\n\t4879:  \"wsdl-event\",\n\t4880:  \"hislip\",\n\t4883:  \"wmlserver\",\n\t4884:  \"hivestor\",\n\t4885:  \"abbs\",\n\t4894:  \"lyskom\",\n\t4899:  \"radmin-port\",\n\t4900:  \"hfcs\",\n\t4901:  \"flr-agent\",\n\t4902:  \"magiccontrol\",\n\t4912:  \"lutap\",\n\t4913:  \"lutcp\",\n\t4914:  \"bones\",\n\t4915:  \"frcs\",\n\t4940:  \"eq-office-4940\",\n\t4941:  \"eq-office-4941\",\n\t4942:  \"eq-office-4942\",\n\t4949:  \"munin\",\n\t4950:  \"sybasesrvmon\",\n\t4951:  \"pwgwims\",\n\t4952:  \"sagxtsds\",\n\t4953:  \"dbsyncarbiter\",\n\t4969:  \"ccss-qmm\",\n\t4970:  \"ccss-qsm\",\n\t4971:  \"burp\",\n\t4984:  \"webyast\",\n\t4985:  \"gerhcs\",\n\t4986:  \"mrip\",\n\t4987:  \"smar-se-port1\",\n\t4988:  \"smar-se-port2\",\n\t4989:  \"parallel\",\n\t4990:  \"busycal\",\n\t4991:  \"vrt\",\n\t4999:  \"hfcs-manager\",\n\t5000:  \"commplex-main\",\n\t5001:  \"commplex-link\",\n\t5002:  \"rfe\",\n\t5003:  \"fmpro-internal\",\n\t5004:  \"avt-profile-1\",\n\t5005:  \"avt-profile-2\",\n\t5006:  \"wsm-server\",\n\t5007:  \"wsm-server-ssl\",\n\t5008:  \"synapsis-edge\",\n\t5009:  \"winfs\",\n\t5010:  \"telelpathstart\",\n\t5011:  \"telelpathattack\",\n\t5012:  \"nsp\",\n\t5013:  \"fmpro-v6\",\n\t5015:  \"fmwp\",\n\t5020:  \"zenginkyo-1\",\n\t5021:  \"zenginkyo-2\",\n\t5022:  \"mice\",\n\t5023:  \"htuilsrv\",\n\t5024:  \"scpi-telnet\",\n\t5025:  \"scpi-raw\",\n\t5026:  \"strexec-d\",\n\t5027:  \"strexec-s\",\n\t5028:  \"qvr\",\n\t5029:  \"infobright\",\n\t5030:  \"surfpass\",\n\t5032:  \"signacert-agent\",\n\t5033:  \"jtnetd-server\",\n\t5034:  \"jtnetd-status\",\n\t5042:  \"asnaacceler8db\",\n\t5043:  \"swxadmin\",\n\t5044:  \"lxi-evntsvc\",\n\t5045:  \"osp\",\n\t5048:  \"texai\",\n\t5049:  \"ivocalize\",\n\t5050:  \"mmcc\",\n\t5051:  \"ita-agent\",\n\t5052:  \"ita-manager\",\n\t5053:  \"rlm\",\n\t5054:  \"rlm-admin\",\n\t5055:  \"unot\",\n\t5056:  \"intecom-ps1\",\n\t5057:  \"intecom-ps2\",\n\t5059:  \"sds\",\n\t5060:  \"sip\",\n\t5061:  \"sips\",\n\t5062:  \"na-localise\",\n\t5063:  \"csrpc\",\n\t5064:  \"ca-1\",\n\t5065:  \"ca-2\",\n\t5066:  \"stanag-5066\",\n\t5067:  \"authentx\",\n\t5068:  \"bitforestsrv\",\n\t5069:  \"i-net-2000-npr\",\n\t5070:  \"vtsas\",\n\t5071:  \"powerschool\",\n\t5072:  \"ayiya\",\n\t5073:  \"tag-pm\",\n\t5074:  \"alesquery\",\n\t5075:  \"pvaccess\",\n\t5080:  \"onscreen\",\n\t5081:  \"sdl-ets\",\n\t5082:  \"qcp\",\n\t5083:  \"qfp\",\n\t5084:  \"llrp\",\n\t5085:  \"encrypted-llrp\",\n\t5086:  \"aprigo-cs\",\n\t5087:  \"biotic\",\n\t5093:  \"sentinel-lm\",\n\t5094:  \"hart-ip\",\n\t5099:  \"sentlm-srv2srv\",\n\t5100:  \"socalia\",\n\t5101:  \"talarian-tcp\",\n\t5102:  \"oms-nonsecure\",\n\t5103:  \"actifio-c2c\",\n\t5106:  \"actifioudsagent\",\n\t5107:  \"actifioreplic\",\n\t5111:  \"taep-as-svc\",\n\t5112:  \"pm-cmdsvr\",\n\t5114:  \"ev-services\",\n\t5115:  \"autobuild\",\n\t5117:  \"gradecam\",\n\t5120:  \"barracuda-bbs\",\n\t5133:  \"nbt-pc\",\n\t5134:  \"ppactivation\",\n\t5135:  \"erp-scale\",\n\t5137:  \"ctsd\",\n\t5145:  \"rmonitor-secure\",\n\t5146:  \"social-alarm\",\n\t5150:  \"atmp\",\n\t5151:  \"esri-sde\",\n\t5152:  \"sde-discovery\",\n\t5153:  \"toruxserver\",\n\t5154:  \"bzflag\",\n\t5155:  \"asctrl-agent\",\n\t5156:  \"rugameonline\",\n\t5157:  \"mediat\",\n\t5161:  \"snmpssh\",\n\t5162:  \"snmpssh-trap\",\n\t5163:  \"sbackup\",\n\t5164:  \"vpa\",\n\t5165:  \"ife-icorp\",\n\t5166:  \"winpcs\",\n\t5167:  \"scte104\",\n\t5168:  \"scte30\",\n\t5172:  \"pcoip-mgmt\",\n\t5190:  \"aol\",\n\t5191:  \"aol-1\",\n\t5192:  \"aol-2\",\n\t5193:  \"aol-3\",\n\t5194:  \"cpscomm\",\n\t5195:  \"ampl-lic\",\n\t5196:  \"ampl-tableproxy\",\n\t5197:  \"tunstall-lwp\",\n\t5200:  \"targus-getdata\",\n\t5201:  \"targus-getdata1\",\n\t5202:  \"targus-getdata2\",\n\t5203:  \"targus-getdata3\",\n\t5209:  \"nomad\",\n\t5215:  \"noteza\",\n\t5221:  \"3exmp\",\n\t5222:  \"xmpp-client\",\n\t5223:  \"hpvirtgrp\",\n\t5224:  \"hpvirtctrl\",\n\t5225:  \"hp-server\",\n\t5226:  \"hp-status\",\n\t5227:  \"perfd\",\n\t5228:  \"hpvroom\",\n\t5229:  \"jaxflow\",\n\t5230:  \"jaxflow-data\",\n\t5231:  \"crusecontrol\",\n\t5232:  \"csedaemon\",\n\t5233:  \"enfs\",\n\t5234:  \"eenet\",\n\t5235:  \"galaxy-network\",\n\t5236:  \"padl2sim\",\n\t5237:  \"mnet-discovery\",\n\t5245:  \"downtools\",\n\t5248:  \"caacws\",\n\t5249:  \"caaclang2\",\n\t5250:  \"soagateway\",\n\t5251:  \"caevms\",\n\t5252:  \"movaz-ssc\",\n\t5253:  \"kpdp\",\n\t5254:  \"logcabin\",\n\t5264:  \"3com-njack-1\",\n\t5265:  \"3com-njack-2\",\n\t5269:  \"xmpp-server\",\n\t5270:  \"cartographerxmp\",\n\t5271:  \"cuelink\",\n\t5272:  \"pk\",\n\t5280:  \"xmpp-bosh\",\n\t5281:  \"undo-lm\",\n\t5282:  \"transmit-port\",\n\t5298:  \"presence\",\n\t5299:  \"nlg-data\",\n\t5300:  \"hacl-hb\",\n\t5301:  \"hacl-gs\",\n\t5302:  \"hacl-cfg\",\n\t5303:  \"hacl-probe\",\n\t5304:  \"hacl-local\",\n\t5305:  \"hacl-test\",\n\t5306:  \"sun-mc-grp\",\n\t5307:  \"sco-aip\",\n\t5308:  \"cfengine\",\n\t5309:  \"jprinter\",\n\t5310:  \"outlaws\",\n\t5312:  \"permabit-cs\",\n\t5313:  \"rrdp\",\n\t5314:  \"opalis-rbt-ipc\",\n\t5315:  \"hacl-poll\",\n\t5316:  \"hpbladems\",\n\t5317:  \"hpdevms\",\n\t5318:  \"pkix-cmc\",\n\t5320:  \"bsfserver-zn\",\n\t5321:  \"bsfsvr-zn-ssl\",\n\t5343:  \"kfserver\",\n\t5344:  \"xkotodrcp\",\n\t5349:  \"stuns\",\n\t5352:  \"dns-llq\",\n\t5353:  \"mdns\",\n\t5354:  \"mdnsresponder\",\n\t5355:  \"llmnr\",\n\t5356:  \"ms-smlbiz\",\n\t5357:  \"wsdapi\",\n\t5358:  \"wsdapi-s\",\n\t5359:  \"ms-alerter\",\n\t5360:  \"ms-sideshow\",\n\t5361:  \"ms-s-sideshow\",\n\t5362:  \"serverwsd2\",\n\t5363:  \"net-projection\",\n\t5397:  \"stresstester\",\n\t5398:  \"elektron-admin\",\n\t5399:  \"securitychase\",\n\t5400:  \"excerpt\",\n\t5401:  \"excerpts\",\n\t5402:  \"mftp\",\n\t5403:  \"hpoms-ci-lstn\",\n\t5404:  \"hpoms-dps-lstn\",\n\t5405:  \"netsupport\",\n\t5406:  \"systemics-sox\",\n\t5407:  \"foresyte-clear\",\n\t5408:  \"foresyte-sec\",\n\t5409:  \"salient-dtasrv\",\n\t5410:  \"salient-usrmgr\",\n\t5411:  \"actnet\",\n\t5412:  \"continuus\",\n\t5413:  \"wwiotalk\",\n\t5414:  \"statusd\",\n\t5415:  \"ns-server\",\n\t5416:  \"sns-gateway\",\n\t5417:  \"sns-agent\",\n\t5418:  \"mcntp\",\n\t5419:  \"dj-ice\",\n\t5420:  \"cylink-c\",\n\t5421:  \"netsupport2\",\n\t5422:  \"salient-mux\",\n\t5423:  \"virtualuser\",\n\t5424:  \"beyond-remote\",\n\t5425:  \"br-channel\",\n\t5426:  \"devbasic\",\n\t5427:  \"sco-peer-tta\",\n\t5428:  \"telaconsole\",\n\t5429:  \"base\",\n\t5430:  \"radec-corp\",\n\t5431:  \"park-agent\",\n\t5432:  \"postgresql\",\n\t5433:  \"pyrrho\",\n\t5434:  \"sgi-arrayd\",\n\t5435:  \"sceanics\",\n\t5443:  \"spss\",\n\t5445:  \"smbdirect\",\n\t5450:  \"tiepie\",\n\t5453:  \"surebox\",\n\t5454:  \"apc-5454\",\n\t5455:  \"apc-5455\",\n\t5456:  \"apc-5456\",\n\t5461:  \"silkmeter\",\n\t5462:  \"ttl-publisher\",\n\t5463:  \"ttlpriceproxy\",\n\t5464:  \"quailnet\",\n\t5465:  \"netops-broker\",\n\t5470:  \"apsolab-col\",\n\t5471:  \"apsolab-cols\",\n\t5472:  \"apsolab-tag\",\n\t5473:  \"apsolab-tags\",\n\t5475:  \"apsolab-data\",\n\t5500:  \"fcp-addr-srvr1\",\n\t5501:  \"fcp-addr-srvr2\",\n\t5502:  \"fcp-srvr-inst1\",\n\t5503:  \"fcp-srvr-inst2\",\n\t5504:  \"fcp-cics-gw1\",\n\t5505:  \"checkoutdb\",\n\t5506:  \"amc\",\n\t5507:  \"psl-management\",\n\t5550:  \"cbus\",\n\t5553:  \"sgi-eventmond\",\n\t5554:  \"sgi-esphttp\",\n\t5555:  \"personal-agent\",\n\t5556:  \"freeciv\",\n\t5557:  \"farenet\",\n\t5565:  \"hpe-dp-bura\",\n\t5566:  \"westec-connect\",\n\t5567:  \"dof-dps-mc-sec\",\n\t5568:  \"sdt\",\n\t5569:  \"rdmnet-ctrl\",\n\t5573:  \"sdmmp\",\n\t5574:  \"lsi-bobcat\",\n\t5575:  \"ora-oap\",\n\t5579:  \"fdtracks\",\n\t5580:  \"tmosms0\",\n\t5581:  \"tmosms1\",\n\t5582:  \"fac-restore\",\n\t5583:  \"tmo-icon-sync\",\n\t5584:  \"bis-web\",\n\t5585:  \"bis-sync\",\n\t5586:  \"att-mt-sms\",\n\t5597:  \"ininmessaging\",\n\t5598:  \"mctfeed\",\n\t5599:  \"esinstall\",\n\t5600:  \"esmmanager\",\n\t5601:  \"esmagent\",\n\t5602:  \"a1-msc\",\n\t5603:  \"a1-bs\",\n\t5604:  \"a3-sdunode\",\n\t5605:  \"a4-sdunode\",\n\t5618:  \"efr\",\n\t5627:  \"ninaf\",\n\t5628:  \"htrust\",\n\t5629:  \"symantec-sfdb\",\n\t5630:  \"precise-comm\",\n\t5631:  \"pcanywheredata\",\n\t5632:  \"pcanywherestat\",\n\t5633:  \"beorl\",\n\t5634:  \"xprtld\",\n\t5635:  \"sfmsso\",\n\t5636:  \"sfm-db-server\",\n\t5637:  \"cssc\",\n\t5638:  \"flcrs\",\n\t5639:  \"ics\",\n\t5646:  \"vfmobile\",\n\t5666:  \"nrpe\",\n\t5670:  \"filemq\",\n\t5671:  \"amqps\",\n\t5672:  \"amqp\",\n\t5673:  \"jms\",\n\t5674:  \"hyperscsi-port\",\n\t5675:  \"v5ua\",\n\t5676:  \"raadmin\",\n\t5677:  \"questdb2-lnchr\",\n\t5678:  \"rrac\",\n\t5679:  \"dccm\",\n\t5680:  \"auriga-router\",\n\t5681:  \"ncxcp\",\n\t5688:  \"ggz\",\n\t5689:  \"qmvideo\",\n\t5693:  \"rbsystem\",\n\t5696:  \"kmip\",\n\t5700:  \"supportassist\",\n\t5705:  \"storageos\",\n\t5713:  \"proshareaudio\",\n\t5714:  \"prosharevideo\",\n\t5715:  \"prosharedata\",\n\t5716:  \"prosharerequest\",\n\t5717:  \"prosharenotify\",\n\t5718:  \"dpm\",\n\t5719:  \"dpm-agent\",\n\t5720:  \"ms-licensing\",\n\t5721:  \"dtpt\",\n\t5722:  \"msdfsr\",\n\t5723:  \"omhs\",\n\t5724:  \"omsdk\",\n\t5725:  \"ms-ilm\",\n\t5726:  \"ms-ilm-sts\",\n\t5727:  \"asgenf\",\n\t5728:  \"io-dist-data\",\n\t5729:  \"openmail\",\n\t5730:  \"unieng\",\n\t5741:  \"ida-discover1\",\n\t5742:  \"ida-discover2\",\n\t5743:  \"watchdoc-pod\",\n\t5744:  \"watchdoc\",\n\t5745:  \"fcopy-server\",\n\t5746:  \"fcopys-server\",\n\t5747:  \"tunatic\",\n\t5748:  \"tunalyzer\",\n\t5750:  \"rscd\",\n\t5755:  \"openmailg\",\n\t5757:  \"x500ms\",\n\t5766:  \"openmailns\",\n\t5767:  \"s-openmail\",\n\t5768:  \"openmailpxy\",\n\t5769:  \"spramsca\",\n\t5770:  \"spramsd\",\n\t5771:  \"netagent\",\n\t5777:  \"dali-port\",\n\t5780:  \"vts-rpc\",\n\t5781:  \"3par-evts\",\n\t5782:  \"3par-mgmt\",\n\t5783:  \"3par-mgmt-ssl\",\n\t5785:  \"3par-rcopy\",\n\t5793:  \"xtreamx\",\n\t5813:  \"icmpd\",\n\t5814:  \"spt-automation\",\n\t5841:  \"shiprush-d-ch\",\n\t5842:  \"reversion\",\n\t5859:  \"wherehoo\",\n\t5863:  \"ppsuitemsg\",\n\t5868:  \"diameters\",\n\t5883:  \"jute\",\n\t5900:  \"rfb\",\n\t5910:  \"cm\",\n\t5911:  \"cpdlc\",\n\t5912:  \"fis\",\n\t5913:  \"ads-c\",\n\t5963:  \"indy\",\n\t5968:  \"mppolicy-v5\",\n\t5969:  \"mppolicy-mgr\",\n\t5984:  \"couchdb\",\n\t5985:  \"wsman\",\n\t5986:  \"wsmans\",\n\t5987:  \"wbem-rmi\",\n\t5988:  \"wbem-http\",\n\t5989:  \"wbem-https\",\n\t5990:  \"wbem-exp-https\",\n\t5991:  \"nuxsl\",\n\t5992:  \"consul-insight\",\n\t5993:  \"cim-rs\",\n\t5999:  \"cvsup\",\n\t6064:  \"ndl-ahp-svc\",\n\t6065:  \"winpharaoh\",\n\t6066:  \"ewctsp\",\n\t6068:  \"gsmp-ancp\",\n\t6069:  \"trip\",\n\t6070:  \"messageasap\",\n\t6071:  \"ssdtp\",\n\t6072:  \"diagnose-proc\",\n\t6073:  \"directplay8\",\n\t6074:  \"max\",\n\t6075:  \"dpm-acm\",\n\t6076:  \"msft-dpm-cert\",\n\t6077:  \"iconstructsrv\",\n\t6084:  \"reload-config\",\n\t6085:  \"konspire2b\",\n\t6086:  \"pdtp\",\n\t6087:  \"ldss\",\n\t6088:  \"doglms\",\n\t6099:  \"raxa-mgmt\",\n\t6100:  \"synchronet-db\",\n\t6101:  \"synchronet-rtc\",\n\t6102:  \"synchronet-upd\",\n\t6103:  \"rets\",\n\t6104:  \"dbdb\",\n\t6105:  \"primaserver\",\n\t6106:  \"mpsserver\",\n\t6107:  \"etc-control\",\n\t6108:  \"sercomm-scadmin\",\n\t6109:  \"globecast-id\",\n\t6110:  \"softcm\",\n\t6111:  \"spc\",\n\t6112:  \"dtspcd\",\n\t6113:  \"dayliteserver\",\n\t6114:  \"wrspice\",\n\t6115:  \"xic\",\n\t6116:  \"xtlserv\",\n\t6117:  \"daylitetouch\",\n\t6121:  \"spdy\",\n\t6122:  \"bex-webadmin\",\n\t6123:  \"backup-express\",\n\t6124:  \"pnbs\",\n\t6130:  \"damewaremobgtwy\",\n\t6133:  \"nbt-wol\",\n\t6140:  \"pulsonixnls\",\n\t6141:  \"meta-corp\",\n\t6142:  \"aspentec-lm\",\n\t6143:  \"watershed-lm\",\n\t6144:  \"statsci1-lm\",\n\t6145:  \"statsci2-lm\",\n\t6146:  \"lonewolf-lm\",\n\t6147:  \"montage-lm\",\n\t6148:  \"ricardo-lm\",\n\t6149:  \"tal-pod\",\n\t6159:  \"efb-aci\",\n\t6160:  \"ecmp\",\n\t6161:  \"patrol-ism\",\n\t6162:  \"patrol-coll\",\n\t6163:  \"pscribe\",\n\t6200:  \"lm-x\",\n\t6209:  \"qmtps\",\n\t6222:  \"radmind\",\n\t6241:  \"jeol-nsdtp-1\",\n\t6242:  \"jeol-nsdtp-2\",\n\t6243:  \"jeol-nsdtp-3\",\n\t6244:  \"jeol-nsdtp-4\",\n\t6251:  \"tl1-raw-ssl\",\n\t6252:  \"tl1-ssh\",\n\t6253:  \"crip\",\n\t6267:  \"gld\",\n\t6268:  \"grid\",\n\t6269:  \"grid-alt\",\n\t6300:  \"bmc-grx\",\n\t6301:  \"bmc-ctd-ldap\",\n\t6306:  \"ufmp\",\n\t6315:  \"scup\",\n\t6316:  \"abb-escp\",\n\t6317:  \"nav-data-cmd\",\n\t6320:  \"repsvc\",\n\t6321:  \"emp-server1\",\n\t6322:  \"emp-server2\",\n\t6324:  \"hrd-ncs\",\n\t6325:  \"dt-mgmtsvc\",\n\t6326:  \"dt-vra\",\n\t6343:  \"sflow\",\n\t6344:  \"streletz\",\n\t6346:  \"gnutella-svc\",\n\t6347:  \"gnutella-rtr\",\n\t6350:  \"adap\",\n\t6355:  \"pmcs\",\n\t6360:  \"metaedit-mu\",\n\t6370:  \"metaedit-se\",\n\t6379:  \"redis\",\n\t6382:  \"metatude-mds\",\n\t6389:  \"clariion-evr01\",\n\t6390:  \"metaedit-ws\",\n\t6417:  \"faxcomservice\",\n\t6418:  \"syserverremote\",\n\t6419:  \"svdrp\",\n\t6420:  \"nim-vdrshell\",\n\t6421:  \"nim-wan\",\n\t6432:  \"pgbouncer\",\n\t6442:  \"tarp\",\n\t6443:  \"sun-sr-https\",\n\t6444:  \"sge-qmaster\",\n\t6445:  \"sge-execd\",\n\t6446:  \"mysql-proxy\",\n\t6455:  \"skip-cert-recv\",\n\t6456:  \"skip-cert-send\",\n\t6464:  \"ieee11073-20701\",\n\t6471:  \"lvision-lm\",\n\t6480:  \"sun-sr-http\",\n\t6481:  \"servicetags\",\n\t6482:  \"ldoms-mgmt\",\n\t6483:  \"SunVTS-RMI\",\n\t6484:  \"sun-sr-jms\",\n\t6485:  \"sun-sr-iiop\",\n\t6486:  \"sun-sr-iiops\",\n\t6487:  \"sun-sr-iiop-aut\",\n\t6488:  \"sun-sr-jmx\",\n\t6489:  \"sun-sr-admin\",\n\t6500:  \"boks\",\n\t6501:  \"boks-servc\",\n\t6502:  \"boks-servm\",\n\t6503:  \"boks-clntd\",\n\t6505:  \"badm-priv\",\n\t6506:  \"badm-pub\",\n\t6507:  \"bdir-priv\",\n\t6508:  \"bdir-pub\",\n\t6509:  \"mgcs-mfp-port\",\n\t6510:  \"mcer-port\",\n\t6513:  \"netconf-tls\",\n\t6514:  \"syslog-tls\",\n\t6515:  \"elipse-rec\",\n\t6543:  \"lds-distrib\",\n\t6544:  \"lds-dump\",\n\t6547:  \"apc-6547\",\n\t6548:  \"apc-6548\",\n\t6549:  \"apc-6549\",\n\t6550:  \"fg-sysupdate\",\n\t6551:  \"sum\",\n\t6558:  \"xdsxdm\",\n\t6566:  \"sane-port\",\n\t6568:  \"canit-store\",\n\t6579:  \"affiliate\",\n\t6580:  \"parsec-master\",\n\t6581:  \"parsec-peer\",\n\t6582:  \"parsec-game\",\n\t6583:  \"joaJewelSuite\",\n\t6600:  \"mshvlm\",\n\t6601:  \"mstmg-sstp\",\n\t6602:  \"wsscomfrmwk\",\n\t6619:  \"odette-ftps\",\n\t6620:  \"kftp-data\",\n\t6621:  \"kftp\",\n\t6622:  \"mcftp\",\n\t6623:  \"ktelnet\",\n\t6624:  \"datascaler-db\",\n\t6625:  \"datascaler-ctl\",\n\t6626:  \"wago-service\",\n\t6627:  \"nexgen\",\n\t6628:  \"afesc-mc\",\n\t6629:  \"nexgen-aux\",\n\t6632:  \"mxodbc-connect\",\n\t6640:  \"ovsdb\",\n\t6653:  \"openflow\",\n\t6655:  \"pcs-sf-ui-man\",\n\t6656:  \"emgmsg\",\n\t6670:  \"vocaltec-gold\",\n\t6671:  \"p4p-portal\",\n\t6672:  \"vision-server\",\n\t6673:  \"vision-elmd\",\n\t6678:  \"vfbp\",\n\t6679:  \"osaut\",\n\t6687:  \"clever-ctrace\",\n\t6688:  \"clever-tcpip\",\n\t6689:  \"tsa\",\n\t6690:  \"cleverdetect\",\n\t6697:  \"ircs-u\",\n\t6701:  \"kti-icad-srvr\",\n\t6702:  \"e-design-net\",\n\t6703:  \"e-design-web\",\n\t6714:  \"ibprotocol\",\n\t6715:  \"fibotrader-com\",\n\t6716:  \"princity-agent\",\n\t6767:  \"bmc-perf-agent\",\n\t6768:  \"bmc-perf-mgrd\",\n\t6769:  \"adi-gxp-srvprt\",\n\t6770:  \"plysrv-http\",\n\t6771:  \"plysrv-https\",\n\t6777:  \"ntz-tracker\",\n\t6778:  \"ntz-p2p-storage\",\n\t6785:  \"dgpf-exchg\",\n\t6786:  \"smc-jmx\",\n\t6787:  \"smc-admin\",\n\t6788:  \"smc-http\",\n\t6789:  \"radg\",\n\t6790:  \"hnmp\",\n\t6791:  \"hnm\",\n\t6801:  \"acnet\",\n\t6817:  \"pentbox-sim\",\n\t6831:  \"ambit-lm\",\n\t6841:  \"netmo-default\",\n\t6842:  \"netmo-http\",\n\t6850:  \"iccrushmore\",\n\t6868:  \"acctopus-cc\",\n\t6888:  \"muse\",\n\t6900:  \"rtimeviewer\",\n\t6901:  \"jetstream\",\n\t6935:  \"ethoscan\",\n\t6936:  \"xsmsvc\",\n\t6946:  \"bioserver\",\n\t6951:  \"otlp\",\n\t6961:  \"jmact3\",\n\t6962:  \"jmevt2\",\n\t6963:  \"swismgr1\",\n\t6964:  \"swismgr2\",\n\t6965:  \"swistrap\",\n\t6966:  \"swispol\",\n\t6969:  \"acmsoda\",\n\t6970:  \"conductor\",\n\t6997:  \"MobilitySrv\",\n\t6998:  \"iatp-highpri\",\n\t6999:  \"iatp-normalpri\",\n\t7000:  \"afs3-fileserver\",\n\t7001:  \"afs3-callback\",\n\t7002:  \"afs3-prserver\",\n\t7003:  \"afs3-vlserver\",\n\t7004:  \"afs3-kaserver\",\n\t7005:  \"afs3-volser\",\n\t7006:  \"afs3-errors\",\n\t7007:  \"afs3-bos\",\n\t7008:  \"afs3-update\",\n\t7009:  \"afs3-rmtsys\",\n\t7010:  \"ups-onlinet\",\n\t7011:  \"talon-disc\",\n\t7012:  \"talon-engine\",\n\t7013:  \"microtalon-dis\",\n\t7014:  \"microtalon-com\",\n\t7015:  \"talon-webserver\",\n\t7016:  \"spg\",\n\t7017:  \"grasp\",\n\t7018:  \"fisa-svc\",\n\t7019:  \"doceri-ctl\",\n\t7020:  \"dpserve\",\n\t7021:  \"dpserveadmin\",\n\t7022:  \"ctdp\",\n\t7023:  \"ct2nmcs\",\n\t7024:  \"vmsvc\",\n\t7025:  \"vmsvc-2\",\n\t7030:  \"op-probe\",\n\t7031:  \"iposplanet\",\n\t7070:  \"arcp\",\n\t7071:  \"iwg1\",\n\t7073:  \"martalk\",\n\t7080:  \"empowerid\",\n\t7099:  \"lazy-ptop\",\n\t7100:  \"font-service\",\n\t7101:  \"elcn\",\n\t7117:  \"rothaga\",\n\t7121:  \"virprot-lm\",\n\t7128:  \"scenidm\",\n\t7129:  \"scenccs\",\n\t7161:  \"cabsm-comm\",\n\t7162:  \"caistoragemgr\",\n\t7163:  \"cacsambroker\",\n\t7164:  \"fsr\",\n\t7165:  \"doc-server\",\n\t7166:  \"aruba-server\",\n\t7167:  \"casrmagent\",\n\t7168:  \"cnckadserver\",\n\t7169:  \"ccag-pib\",\n\t7170:  \"nsrp\",\n\t7171:  \"drm-production\",\n\t7172:  \"metalbend\",\n\t7173:  \"zsecure\",\n\t7174:  \"clutild\",\n\t7200:  \"fodms\",\n\t7201:  \"dlip\",\n\t7202:  \"pon-ictp\",\n\t7215:  \"PS-Server\",\n\t7216:  \"PS-Capture-Pro\",\n\t7227:  \"ramp\",\n\t7228:  \"citrixupp\",\n\t7229:  \"citrixuppg\",\n\t7236:  \"display\",\n\t7237:  \"pads\",\n\t7244:  \"frc-hicp\",\n\t7262:  \"cnap\",\n\t7272:  \"watchme-7272\",\n\t7273:  \"oma-rlp\",\n\t7274:  \"oma-rlp-s\",\n\t7275:  \"oma-ulp\",\n\t7276:  \"oma-ilp\",\n\t7277:  \"oma-ilp-s\",\n\t7278:  \"oma-dcdocbs\",\n\t7279:  \"ctxlic\",\n\t7280:  \"itactionserver1\",\n\t7281:  \"itactionserver2\",\n\t7282:  \"mzca-action\",\n\t7283:  \"genstat\",\n\t7365:  \"lcm-server\",\n\t7391:  \"mindfilesys\",\n\t7392:  \"mrssrendezvous\",\n\t7393:  \"nfoldman\",\n\t7394:  \"fse\",\n\t7395:  \"winqedit\",\n\t7397:  \"hexarc\",\n\t7400:  \"rtps-discovery\",\n\t7401:  \"rtps-dd-ut\",\n\t7402:  \"rtps-dd-mt\",\n\t7410:  \"ionixnetmon\",\n\t7411:  \"daqstream\",\n\t7421:  \"mtportmon\",\n\t7426:  \"pmdmgr\",\n\t7427:  \"oveadmgr\",\n\t7428:  \"ovladmgr\",\n\t7429:  \"opi-sock\",\n\t7430:  \"xmpv7\",\n\t7431:  \"pmd\",\n\t7437:  \"faximum\",\n\t7443:  \"oracleas-https\",\n\t7471:  \"sttunnel\",\n\t7473:  \"rise\",\n\t7474:  \"neo4j\",\n\t7478:  \"openit\",\n\t7491:  \"telops-lmd\",\n\t7500:  \"silhouette\",\n\t7501:  \"ovbus\",\n\t7508:  \"adcp\",\n\t7509:  \"acplt\",\n\t7510:  \"ovhpas\",\n\t7511:  \"pafec-lm\",\n\t7542:  \"saratoga\",\n\t7543:  \"atul\",\n\t7544:  \"nta-ds\",\n\t7545:  \"nta-us\",\n\t7546:  \"cfs\",\n\t7547:  \"cwmp\",\n\t7548:  \"tidp\",\n\t7549:  \"nls-tl\",\n\t7551:  \"controlone-con\",\n\t7560:  \"sncp\",\n\t7563:  \"cfw\",\n\t7566:  \"vsi-omega\",\n\t7569:  \"dell-eql-asm\",\n\t7570:  \"aries-kfinder\",\n\t7574:  \"coherence\",\n\t7588:  \"sun-lm\",\n\t7606:  \"mipi-debug\",\n\t7624:  \"indi\",\n\t7626:  \"simco\",\n\t7627:  \"soap-http\",\n\t7628:  \"zen-pawn\",\n\t7629:  \"xdas\",\n\t7630:  \"hawk\",\n\t7631:  \"tesla-sys-msg\",\n\t7633:  \"pmdfmgt\",\n\t7648:  \"cuseeme\",\n\t7672:  \"imqstomp\",\n\t7673:  \"imqstomps\",\n\t7674:  \"imqtunnels\",\n\t7675:  \"imqtunnel\",\n\t7676:  \"imqbrokerd\",\n\t7677:  \"sun-user-https\",\n\t7680:  \"pando-pub\",\n\t7683:  \"dmt\",\n\t7687:  \"bolt\",\n\t7689:  \"collaber\",\n\t7697:  \"klio\",\n\t7700:  \"em7-secom\",\n\t7707:  \"sync-em7\",\n\t7708:  \"scinet\",\n\t7720:  \"medimageportal\",\n\t7724:  \"nsdeepfreezectl\",\n\t7725:  \"nitrogen\",\n\t7726:  \"freezexservice\",\n\t7727:  \"trident-data\",\n\t7728:  \"osvr\",\n\t7734:  \"smip\",\n\t7738:  \"aiagent\",\n\t7741:  \"scriptview\",\n\t7742:  \"msss\",\n\t7743:  \"sstp-1\",\n\t7744:  \"raqmon-pdu\",\n\t7747:  \"prgp\",\n\t7775:  \"inetfs\",\n\t7777:  \"cbt\",\n\t7778:  \"interwise\",\n\t7779:  \"vstat\",\n\t7781:  \"accu-lmgr\",\n\t7786:  \"minivend\",\n\t7787:  \"popup-reminders\",\n\t7789:  \"office-tools\",\n\t7794:  \"q3ade\",\n\t7797:  \"pnet-conn\",\n\t7798:  \"pnet-enc\",\n\t7799:  \"altbsdp\",\n\t7800:  \"asr\",\n\t7801:  \"ssp-client\",\n\t7810:  \"rbt-wanopt\",\n\t7845:  \"apc-7845\",\n\t7846:  \"apc-7846\",\n\t7847:  \"csoauth\",\n\t7869:  \"mobileanalyzer\",\n\t7870:  \"rbt-smc\",\n\t7871:  \"mdm\",\n\t7878:  \"owms\",\n\t7880:  \"pss\",\n\t7887:  \"ubroker\",\n\t7900:  \"mevent\",\n\t7901:  \"tnos-sp\",\n\t7902:  \"tnos-dp\",\n\t7903:  \"tnos-dps\",\n\t7913:  \"qo-secure\",\n\t7932:  \"t2-drm\",\n\t7933:  \"t2-brm\",\n\t7962:  \"generalsync\",\n\t7967:  \"supercell\",\n\t7979:  \"micromuse-ncps\",\n\t7980:  \"quest-vista\",\n\t7981:  \"sossd-collect\",\n\t7982:  \"sossd-agent\",\n\t7997:  \"pushns\",\n\t7999:  \"irdmi2\",\n\t8000:  \"irdmi\",\n\t8001:  \"vcom-tunnel\",\n\t8002:  \"teradataordbms\",\n\t8003:  \"mcreport\",\n\t8005:  \"mxi\",\n\t8006:  \"wpl-analytics\",\n\t8007:  \"warppipe\",\n\t8008:  \"http-alt\",\n\t8019:  \"qbdb\",\n\t8020:  \"intu-ec-svcdisc\",\n\t8021:  \"intu-ec-client\",\n\t8022:  \"oa-system\",\n\t8025:  \"ca-audit-da\",\n\t8026:  \"ca-audit-ds\",\n\t8032:  \"pro-ed\",\n\t8033:  \"mindprint\",\n\t8034:  \"vantronix-mgmt\",\n\t8040:  \"ampify\",\n\t8041:  \"enguity-xccetp\",\n\t8042:  \"fs-agent\",\n\t8043:  \"fs-server\",\n\t8044:  \"fs-mgmt\",\n\t8051:  \"rocrail\",\n\t8052:  \"senomix01\",\n\t8053:  \"senomix02\",\n\t8054:  \"senomix03\",\n\t8055:  \"senomix04\",\n\t8056:  \"senomix05\",\n\t8057:  \"senomix06\",\n\t8058:  \"senomix07\",\n\t8059:  \"senomix08\",\n\t8066:  \"toad-bi-appsrvr\",\n\t8067:  \"infi-async\",\n\t8070:  \"ucs-isc\",\n\t8074:  \"gadugadu\",\n\t8077:  \"mles\",\n\t8080:  \"http-alt\",\n\t8081:  \"sunproxyadmin\",\n\t8082:  \"us-cli\",\n\t8083:  \"us-srv\",\n\t8086:  \"d-s-n\",\n\t8087:  \"simplifymedia\",\n\t8088:  \"radan-http\",\n\t8090:  \"opsmessaging\",\n\t8091:  \"jamlink\",\n\t8097:  \"sac\",\n\t8100:  \"xprint-server\",\n\t8101:  \"ldoms-migr\",\n\t8102:  \"kz-migr\",\n\t8115:  \"mtl8000-matrix\",\n\t8116:  \"cp-cluster\",\n\t8117:  \"purityrpc\",\n\t8118:  \"privoxy\",\n\t8121:  \"apollo-data\",\n\t8122:  \"apollo-admin\",\n\t8128:  \"paycash-online\",\n\t8129:  \"paycash-wbp\",\n\t8130:  \"indigo-vrmi\",\n\t8131:  \"indigo-vbcp\",\n\t8132:  \"dbabble\",\n\t8140:  \"puppet\",\n\t8148:  \"isdd\",\n\t8153:  \"quantastor\",\n\t8160:  \"patrol\",\n\t8161:  \"patrol-snmp\",\n\t8162:  \"lpar2rrd\",\n\t8181:  \"intermapper\",\n\t8182:  \"vmware-fdm\",\n\t8183:  \"proremote\",\n\t8184:  \"itach\",\n\t8190:  \"gcp-rphy\",\n\t8191:  \"limnerpressure\",\n\t8192:  \"spytechphone\",\n\t8194:  \"blp1\",\n\t8195:  \"blp2\",\n\t8199:  \"vvr-data\",\n\t8200:  \"trivnet1\",\n\t8201:  \"trivnet2\",\n\t8204:  \"lm-perfworks\",\n\t8205:  \"lm-instmgr\",\n\t8206:  \"lm-dta\",\n\t8207:  \"lm-sserver\",\n\t8208:  \"lm-webwatcher\",\n\t8230:  \"rexecj\",\n\t8243:  \"synapse-nhttps\",\n\t8270:  \"robot-remote\",\n\t8276:  \"pando-sec\",\n\t8280:  \"synapse-nhttp\",\n\t8282:  \"libelle\",\n\t8292:  \"blp3\",\n\t8293:  \"hiperscan-id\",\n\t8294:  \"blp4\",\n\t8300:  \"tmi\",\n\t8301:  \"amberon\",\n\t8313:  \"hub-open-net\",\n\t8320:  \"tnp-discover\",\n\t8321:  \"tnp\",\n\t8322:  \"garmin-marine\",\n\t8351:  \"server-find\",\n\t8376:  \"cruise-enum\",\n\t8377:  \"cruise-swroute\",\n\t8378:  \"cruise-config\",\n\t8379:  \"cruise-diags\",\n\t8380:  \"cruise-update\",\n\t8383:  \"m2mservices\",\n\t8400:  \"cvd\",\n\t8401:  \"sabarsd\",\n\t8402:  \"abarsd\",\n\t8403:  \"admind\",\n\t8404:  \"svcloud\",\n\t8405:  \"svbackup\",\n\t8415:  \"dlpx-sp\",\n\t8416:  \"espeech\",\n\t8417:  \"espeech-rtp\",\n\t8423:  \"aritts\",\n\t8442:  \"cybro-a-bus\",\n\t8443:  \"pcsync-https\",\n\t8444:  \"pcsync-http\",\n\t8445:  \"copy\",\n\t8450:  \"npmp\",\n\t8457:  \"nexentamv\",\n\t8470:  \"cisco-avp\",\n\t8471:  \"pim-port\",\n\t8472:  \"otv\",\n\t8473:  \"vp2p\",\n\t8474:  \"noteshare\",\n\t8500:  \"fmtp\",\n\t8501:  \"cmtp-mgt\",\n\t8502:  \"ftnmtp\",\n\t8554:  \"rtsp-alt\",\n\t8555:  \"d-fence\",\n\t8567:  \"dof-tunnel\",\n\t8600:  \"asterix\",\n\t8610:  \"canon-mfnp\",\n\t8611:  \"canon-bjnp1\",\n\t8612:  \"canon-bjnp2\",\n\t8613:  \"canon-bjnp3\",\n\t8614:  \"canon-bjnp4\",\n\t8615:  \"imink\",\n\t8665:  \"monetra\",\n\t8666:  \"monetra-admin\",\n\t8675:  \"msi-cps-rm\",\n\t8686:  \"sun-as-jmxrmi\",\n\t8688:  \"openremote-ctrl\",\n\t8699:  \"vnyx\",\n\t8711:  \"nvc\",\n\t8733:  \"ibus\",\n\t8750:  \"dey-keyneg\",\n\t8763:  \"mc-appserver\",\n\t8764:  \"openqueue\",\n\t8765:  \"ultraseek-http\",\n\t8766:  \"amcs\",\n\t8770:  \"dpap\",\n\t8778:  \"uec\",\n\t8786:  \"msgclnt\",\n\t8787:  \"msgsrvr\",\n\t8793:  \"acd-pm\",\n\t8800:  \"sunwebadmin\",\n\t8804:  \"truecm\",\n\t8873:  \"dxspider\",\n\t8880:  \"cddbp-alt\",\n\t8881:  \"galaxy4d\",\n\t8883:  \"secure-mqtt\",\n\t8888:  \"ddi-tcp-1\",\n\t8889:  \"ddi-tcp-2\",\n\t8890:  \"ddi-tcp-3\",\n\t8891:  \"ddi-tcp-4\",\n\t8892:  \"ddi-tcp-5\",\n\t8893:  \"ddi-tcp-6\",\n\t8894:  \"ddi-tcp-7\",\n\t8899:  \"ospf-lite\",\n\t8900:  \"jmb-cds1\",\n\t8901:  \"jmb-cds2\",\n\t8910:  \"manyone-http\",\n\t8911:  \"manyone-xml\",\n\t8912:  \"wcbackup\",\n\t8913:  \"dragonfly\",\n\t8937:  \"twds\",\n\t8953:  \"ub-dns-control\",\n\t8954:  \"cumulus-admin\",\n\t8980:  \"nod-provider\",\n\t8989:  \"sunwebadmins\",\n\t8990:  \"http-wmap\",\n\t8991:  \"https-wmap\",\n\t8997:  \"oracle-ms-ens\",\n\t8998:  \"canto-roboflow\",\n\t8999:  \"bctp\",\n\t9000:  \"cslistener\",\n\t9001:  \"etlservicemgr\",\n\t9002:  \"dynamid\",\n\t9005:  \"golem\",\n\t9008:  \"ogs-server\",\n\t9009:  \"pichat\",\n\t9010:  \"sdr\",\n\t9020:  \"tambora\",\n\t9021:  \"panagolin-ident\",\n\t9022:  \"paragent\",\n\t9023:  \"swa-1\",\n\t9024:  \"swa-2\",\n\t9025:  \"swa-3\",\n\t9026:  \"swa-4\",\n\t9050:  \"versiera\",\n\t9051:  \"fio-cmgmt\",\n\t9060:  \"CardWeb-IO\",\n\t9080:  \"glrpc\",\n\t9083:  \"emc-pp-mgmtsvc\",\n\t9084:  \"aurora\",\n\t9085:  \"ibm-rsyscon\",\n\t9086:  \"net2display\",\n\t9087:  \"classic\",\n\t9088:  \"sqlexec\",\n\t9089:  \"sqlexec-ssl\",\n\t9090:  \"websm\",\n\t9091:  \"xmltec-xmlmail\",\n\t9092:  \"XmlIpcRegSvc\",\n\t9093:  \"copycat\",\n\t9100:  \"hp-pdl-datastr\",\n\t9101:  \"bacula-dir\",\n\t9102:  \"bacula-fd\",\n\t9103:  \"bacula-sd\",\n\t9104:  \"peerwire\",\n\t9105:  \"xadmin\",\n\t9106:  \"astergate\",\n\t9107:  \"astergatefax\",\n\t9119:  \"mxit\",\n\t9122:  \"grcmp\",\n\t9123:  \"grcp\",\n\t9131:  \"dddp\",\n\t9160:  \"apani1\",\n\t9161:  \"apani2\",\n\t9162:  \"apani3\",\n\t9163:  \"apani4\",\n\t9164:  \"apani5\",\n\t9191:  \"sun-as-jpda\",\n\t9200:  \"wap-wsp\",\n\t9201:  \"wap-wsp-wtp\",\n\t9202:  \"wap-wsp-s\",\n\t9203:  \"wap-wsp-wtp-s\",\n\t9204:  \"wap-vcard\",\n\t9205:  \"wap-vcal\",\n\t9206:  \"wap-vcard-s\",\n\t9207:  \"wap-vcal-s\",\n\t9208:  \"rjcdb-vcards\",\n\t9209:  \"almobile-system\",\n\t9210:  \"oma-mlp\",\n\t9211:  \"oma-mlp-s\",\n\t9212:  \"serverviewdbms\",\n\t9213:  \"serverstart\",\n\t9214:  \"ipdcesgbs\",\n\t9215:  \"insis\",\n\t9216:  \"acme\",\n\t9217:  \"fsc-port\",\n\t9222:  \"teamcoherence\",\n\t9255:  \"mon\",\n\t9278:  \"pegasus\",\n\t9279:  \"pegasus-ctl\",\n\t9280:  \"pgps\",\n\t9281:  \"swtp-port1\",\n\t9282:  \"swtp-port2\",\n\t9283:  \"callwaveiam\",\n\t9284:  \"visd\",\n\t9285:  \"n2h2server\",\n\t9287:  \"cumulus\",\n\t9292:  \"armtechdaemon\",\n\t9293:  \"storview\",\n\t9294:  \"armcenterhttp\",\n\t9295:  \"armcenterhttps\",\n\t9300:  \"vrace\",\n\t9306:  \"sphinxql\",\n\t9312:  \"sphinxapi\",\n\t9318:  \"secure-ts\",\n\t9321:  \"guibase\",\n\t9343:  \"mpidcmgr\",\n\t9344:  \"mphlpdmc\",\n\t9345:  \"rancher\",\n\t9346:  \"ctechlicensing\",\n\t9374:  \"fjdmimgr\",\n\t9380:  \"boxp\",\n\t9387:  \"d2dconfig\",\n\t9388:  \"d2ddatatrans\",\n\t9389:  \"adws\",\n\t9390:  \"otp\",\n\t9396:  \"fjinvmgr\",\n\t9397:  \"mpidcagt\",\n\t9400:  \"sec-t4net-srv\",\n\t9401:  \"sec-t4net-clt\",\n\t9402:  \"sec-pc2fax-srv\",\n\t9418:  \"git\",\n\t9443:  \"tungsten-https\",\n\t9444:  \"wso2esb-console\",\n\t9445:  \"mindarray-ca\",\n\t9450:  \"sntlkeyssrvr\",\n\t9500:  \"ismserver\",\n\t9535:  \"mngsuite\",\n\t9536:  \"laes-bf\",\n\t9555:  \"trispen-sra\",\n\t9592:  \"ldgateway\",\n\t9593:  \"cba8\",\n\t9594:  \"msgsys\",\n\t9595:  \"pds\",\n\t9596:  \"mercury-disc\",\n\t9597:  \"pd-admin\",\n\t9598:  \"vscp\",\n\t9599:  \"robix\",\n\t9600:  \"micromuse-ncpw\",\n\t9612:  \"streamcomm-ds\",\n\t9614:  \"iadt-tls\",\n\t9616:  \"erunbook-agent\",\n\t9617:  \"erunbook-server\",\n\t9618:  \"condor\",\n\t9628:  \"odbcpathway\",\n\t9629:  \"uniport\",\n\t9630:  \"peoctlr\",\n\t9631:  \"peocoll\",\n\t9640:  \"pqsflows\",\n\t9666:  \"zoomcp\",\n\t9667:  \"xmms2\",\n\t9668:  \"tec5-sdctp\",\n\t9694:  \"client-wakeup\",\n\t9695:  \"ccnx\",\n\t9700:  \"board-roar\",\n\t9747:  \"l5nas-parchan\",\n\t9750:  \"board-voip\",\n\t9753:  \"rasadv\",\n\t9762:  \"tungsten-http\",\n\t9800:  \"davsrc\",\n\t9801:  \"sstp-2\",\n\t9802:  \"davsrcs\",\n\t9875:  \"sapv1\",\n\t9876:  \"sd\",\n\t9888:  \"cyborg-systems\",\n\t9889:  \"gt-proxy\",\n\t9898:  \"monkeycom\",\n\t9900:  \"iua\",\n\t9909:  \"domaintime\",\n\t9911:  \"sype-transport\",\n\t9925:  \"xybrid-cloud\",\n\t9950:  \"apc-9950\",\n\t9951:  \"apc-9951\",\n\t9952:  \"apc-9952\",\n\t9953:  \"acis\",\n\t9954:  \"hinp\",\n\t9955:  \"alljoyn-stm\",\n\t9966:  \"odnsp\",\n\t9978:  \"xybrid-rt\",\n\t9979:  \"visweather\",\n\t9981:  \"pumpkindb\",\n\t9987:  \"dsm-scm-target\",\n\t9988:  \"nsesrvr\",\n\t9990:  \"osm-appsrvr\",\n\t9991:  \"osm-oev\",\n\t9992:  \"palace-1\",\n\t9993:  \"palace-2\",\n\t9994:  \"palace-3\",\n\t9995:  \"palace-4\",\n\t9996:  \"palace-5\",\n\t9997:  \"palace-6\",\n\t9998:  \"distinct32\",\n\t9999:  \"distinct\",\n\t10000: \"ndmp\",\n\t10001: \"scp-config\",\n\t10002: \"documentum\",\n\t10003: \"documentum-s\",\n\t10004: \"emcrmirccd\",\n\t10005: \"emcrmird\",\n\t10006: \"netapp-sync\",\n\t10007: \"mvs-capacity\",\n\t10008: \"octopus\",\n\t10009: \"swdtp-sv\",\n\t10010: \"rxapi\",\n\t10020: \"abb-hw\",\n\t10050: \"zabbix-agent\",\n\t10051: \"zabbix-trapper\",\n\t10055: \"qptlmd\",\n\t10080: \"amanda\",\n\t10081: \"famdc\",\n\t10100: \"itap-ddtp\",\n\t10101: \"ezmeeting-2\",\n\t10102: \"ezproxy-2\",\n\t10103: \"ezrelay\",\n\t10104: \"swdtp\",\n\t10107: \"bctp-server\",\n\t10110: \"nmea-0183\",\n\t10113: \"netiq-endpoint\",\n\t10114: \"netiq-qcheck\",\n\t10115: \"netiq-endpt\",\n\t10116: \"netiq-voipa\",\n\t10117: \"iqrm\",\n\t10125: \"cimple\",\n\t10128: \"bmc-perf-sd\",\n\t10129: \"bmc-gms\",\n\t10160: \"qb-db-server\",\n\t10161: \"snmptls\",\n\t10162: \"snmptls-trap\",\n\t10200: \"trisoap\",\n\t10201: \"rsms\",\n\t10252: \"apollo-relay\",\n\t10260: \"axis-wimp-port\",\n\t10261: \"tile-ml\",\n\t10288: \"blocks\",\n\t10321: \"cosir\",\n\t10540: \"MOS-lower\",\n\t10541: \"MOS-upper\",\n\t10542: \"MOS-aux\",\n\t10543: \"MOS-soap\",\n\t10544: \"MOS-soap-opt\",\n\t10548: \"serverdocs\",\n\t10631: \"printopia\",\n\t10800: \"gap\",\n\t10805: \"lpdg\",\n\t10809: \"nbd\",\n\t10860: \"helix\",\n\t10880: \"bveapi\",\n\t10933: \"octopustentacle\",\n\t10990: \"rmiaux\",\n\t11000: \"irisa\",\n\t11001: \"metasys\",\n\t11095: \"weave\",\n\t11103: \"origo-sync\",\n\t11104: \"netapp-icmgmt\",\n\t11105: \"netapp-icdata\",\n\t11106: \"sgi-lk\",\n\t11109: \"sgi-dmfmgr\",\n\t11110: \"sgi-soap\",\n\t11111: \"vce\",\n\t11112: \"dicom\",\n\t11161: \"suncacao-snmp\",\n\t11162: \"suncacao-jmxmp\",\n\t11163: \"suncacao-rmi\",\n\t11164: \"suncacao-csa\",\n\t11165: \"suncacao-websvc\",\n\t11172: \"oemcacao-jmxmp\",\n\t11173: \"t5-straton\",\n\t11174: \"oemcacao-rmi\",\n\t11175: \"oemcacao-websvc\",\n\t11201: \"smsqp\",\n\t11202: \"dcsl-backup\",\n\t11208: \"wifree\",\n\t11211: \"memcache\",\n\t11319: \"imip\",\n\t11320: \"imip-channels\",\n\t11321: \"arena-server\",\n\t11367: \"atm-uhas\",\n\t11371: \"hkp\",\n\t11489: \"asgcypresstcps\",\n\t11600: \"tempest-port\",\n\t11623: \"emc-xsw-dconfig\",\n\t11720: \"h323callsigalt\",\n\t11723: \"emc-xsw-dcache\",\n\t11751: \"intrepid-ssl\",\n\t11796: \"lanschool\",\n\t11876: \"xoraya\",\n\t11967: \"sysinfo-sp\",\n\t12000: \"entextxid\",\n\t12001: \"entextnetwk\",\n\t12002: \"entexthigh\",\n\t12003: \"entextmed\",\n\t12004: \"entextlow\",\n\t12005: \"dbisamserver1\",\n\t12006: \"dbisamserver2\",\n\t12007: \"accuracer\",\n\t12008: \"accuracer-dbms\",\n\t12010: \"edbsrvr\",\n\t12012: \"vipera\",\n\t12013: \"vipera-ssl\",\n\t12109: \"rets-ssl\",\n\t12121: \"nupaper-ss\",\n\t12168: \"cawas\",\n\t12172: \"hivep\",\n\t12300: \"linogridengine\",\n\t12302: \"rads\",\n\t12321: \"warehouse-sss\",\n\t12322: \"warehouse\",\n\t12345: \"italk\",\n\t12753: \"tsaf\",\n\t12865: \"netperf\",\n\t13160: \"i-zipqd\",\n\t13216: \"bcslogc\",\n\t13217: \"rs-pias\",\n\t13218: \"emc-vcas-tcp\",\n\t13223: \"powwow-client\",\n\t13224: \"powwow-server\",\n\t13400: \"doip-data\",\n\t13720: \"bprd\",\n\t13721: \"bpdbm\",\n\t13722: \"bpjava-msvc\",\n\t13724: \"vnetd\",\n\t13782: \"bpcd\",\n\t13783: \"vopied\",\n\t13785: \"nbdb\",\n\t13786: \"nomdb\",\n\t13818: \"dsmcc-config\",\n\t13819: \"dsmcc-session\",\n\t13820: \"dsmcc-passthru\",\n\t13821: \"dsmcc-download\",\n\t13822: \"dsmcc-ccp\",\n\t13823: \"bmdss\",\n\t13894: \"ucontrol\",\n\t13929: \"dta-systems\",\n\t13930: \"medevolve\",\n\t14000: \"scotty-ft\",\n\t14001: \"sua\",\n\t14033: \"sage-best-com1\",\n\t14034: \"sage-best-com2\",\n\t14141: \"vcs-app\",\n\t14142: \"icpp\",\n\t14143: \"icpps\",\n\t14145: \"gcm-app\",\n\t14149: \"vrts-tdd\",\n\t14150: \"vcscmd\",\n\t14154: \"vad\",\n\t14250: \"cps\",\n\t14414: \"ca-web-update\",\n\t14500: \"xpra\",\n\t14936: \"hde-lcesrvr-1\",\n\t14937: \"hde-lcesrvr-2\",\n\t15000: \"hydap\",\n\t15002: \"onep-tls\",\n\t15345: \"xpilot\",\n\t15363: \"3link\",\n\t15555: \"cisco-snat\",\n\t15660: \"bex-xr\",\n\t15740: \"ptp\",\n\t15999: \"programmar\",\n\t16000: \"fmsas\",\n\t16001: \"fmsascon\",\n\t16002: \"gsms\",\n\t16020: \"jwpc\",\n\t16021: \"jwpc-bin\",\n\t16161: \"sun-sea-port\",\n\t16162: \"solaris-audit\",\n\t16309: \"etb4j\",\n\t16310: \"pduncs\",\n\t16311: \"pdefmns\",\n\t16360: \"netserialext1\",\n\t16361: \"netserialext2\",\n\t16367: \"netserialext3\",\n\t16368: \"netserialext4\",\n\t16384: \"connected\",\n\t16385: \"rdgs\",\n\t16619: \"xoms\",\n\t16665: \"axon-tunnel\",\n\t16789: \"cadsisvr\",\n\t16900: \"newbay-snc-mc\",\n\t16950: \"sgcip\",\n\t16991: \"intel-rci-mp\",\n\t16992: \"amt-soap-http\",\n\t16993: \"amt-soap-https\",\n\t16994: \"amt-redir-tcp\",\n\t16995: \"amt-redir-tls\",\n\t17007: \"isode-dua\",\n\t17184: \"vestasdlp\",\n\t17185: \"soundsvirtual\",\n\t17219: \"chipper\",\n\t17220: \"avtp\",\n\t17221: \"avdecc\",\n\t17223: \"isa100-gci\",\n\t17225: \"trdp-md\",\n\t17234: \"integrius-stp\",\n\t17235: \"ssh-mgmt\",\n\t17500: \"db-lsp\",\n\t17555: \"ailith\",\n\t17729: \"ea\",\n\t17754: \"zep\",\n\t17755: \"zigbee-ip\",\n\t17756: \"zigbee-ips\",\n\t17777: \"sw-orion\",\n\t18000: \"biimenu\",\n\t18104: \"radpdf\",\n\t18136: \"racf\",\n\t18181: \"opsec-cvp\",\n\t18182: \"opsec-ufp\",\n\t18183: \"opsec-sam\",\n\t18184: \"opsec-lea\",\n\t18185: \"opsec-omi\",\n\t18186: \"ohsc\",\n\t18187: \"opsec-ela\",\n\t18241: \"checkpoint-rtm\",\n\t18242: \"iclid\",\n\t18243: \"clusterxl\",\n\t18262: \"gv-pf\",\n\t18463: \"ac-cluster\",\n\t18634: \"rds-ib\",\n\t18635: \"rds-ip\",\n\t18668: \"vdmmesh\",\n\t18769: \"ique\",\n\t18881: \"infotos\",\n\t18888: \"apc-necmp\",\n\t19000: \"igrid\",\n\t19007: \"scintilla\",\n\t19020: \"j-link\",\n\t19191: \"opsec-uaa\",\n\t19194: \"ua-secureagent\",\n\t19220: \"cora\",\n\t19283: \"keysrvr\",\n\t19315: \"keyshadow\",\n\t19398: \"mtrgtrans\",\n\t19410: \"hp-sco\",\n\t19411: \"hp-sca\",\n\t19412: \"hp-sessmon\",\n\t19539: \"fxuptp\",\n\t19540: \"sxuptp\",\n\t19541: \"jcp\",\n\t19998: \"iec-104-sec\",\n\t19999: \"dnp-sec\",\n\t20000: \"dnp\",\n\t20001: \"microsan\",\n\t20002: \"commtact-http\",\n\t20003: \"commtact-https\",\n\t20005: \"openwebnet\",\n\t20013: \"ss-idi\",\n\t20014: \"opendeploy\",\n\t20034: \"nburn-id\",\n\t20046: \"tmophl7mts\",\n\t20048: \"mountd\",\n\t20049: \"nfsrdma\",\n\t20057: \"avesterra\",\n\t20167: \"tolfab\",\n\t20202: \"ipdtp-port\",\n\t20222: \"ipulse-ics\",\n\t20480: \"emwavemsg\",\n\t20670: \"track\",\n\t20999: \"athand-mmp\",\n\t21000: \"irtrans\",\n\t21010: \"notezilla-lan\",\n\t21221: \"aigairserver\",\n\t21553: \"rdm-tfs\",\n\t21554: \"dfserver\",\n\t21590: \"vofr-gateway\",\n\t21800: \"tvpm\",\n\t21845: \"webphone\",\n\t21846: \"netspeak-is\",\n\t21847: \"netspeak-cs\",\n\t21848: \"netspeak-acd\",\n\t21849: \"netspeak-cps\",\n\t22000: \"snapenetio\",\n\t22001: \"optocontrol\",\n\t22002: \"optohost002\",\n\t22003: \"optohost003\",\n\t22004: \"optohost004\",\n\t22005: \"optohost004\",\n\t22125: \"dcap\",\n\t22128: \"gsidcap\",\n\t22222: \"easyengine\",\n\t22273: \"wnn6\",\n\t22305: \"cis\",\n\t22335: \"shrewd-control\",\n\t22343: \"cis-secure\",\n\t22347: \"wibukey\",\n\t22350: \"codemeter\",\n\t22351: \"codemeter-cmwan\",\n\t22537: \"caldsoft-backup\",\n\t22555: \"vocaltec-wconf\",\n\t22763: \"talikaserver\",\n\t22800: \"aws-brf\",\n\t22951: \"brf-gw\",\n\t23000: \"inovaport1\",\n\t23001: \"inovaport2\",\n\t23002: \"inovaport3\",\n\t23003: \"inovaport4\",\n\t23004: \"inovaport5\",\n\t23005: \"inovaport6\",\n\t23053: \"gntp\",\n\t23294: \"5afe-dir\",\n\t23333: \"elxmgmt\",\n\t23400: \"novar-dbase\",\n\t23401: \"novar-alarm\",\n\t23402: \"novar-global\",\n\t23456: \"aequus\",\n\t23457: \"aequus-alt\",\n\t23546: \"areaguard-neo\",\n\t24000: \"med-ltp\",\n\t24001: \"med-fsp-rx\",\n\t24002: \"med-fsp-tx\",\n\t24003: \"med-supp\",\n\t24004: \"med-ovw\",\n\t24005: \"med-ci\",\n\t24006: \"med-net-svc\",\n\t24242: \"filesphere\",\n\t24249: \"vista-4gl\",\n\t24321: \"ild\",\n\t24386: \"intel-rci\",\n\t24465: \"tonidods\",\n\t24554: \"binkp\",\n\t24577: \"bilobit\",\n\t24666: \"sdtvwcam\",\n\t24676: \"canditv\",\n\t24677: \"flashfiler\",\n\t24678: \"proactivate\",\n\t24680: \"tcc-http\",\n\t24754: \"cslg\",\n\t24922: \"find\",\n\t25000: \"icl-twobase1\",\n\t25001: \"icl-twobase2\",\n\t25002: \"icl-twobase3\",\n\t25003: \"icl-twobase4\",\n\t25004: \"icl-twobase5\",\n\t25005: \"icl-twobase6\",\n\t25006: \"icl-twobase7\",\n\t25007: \"icl-twobase8\",\n\t25008: \"icl-twobase9\",\n\t25009: \"icl-twobase10\",\n\t25576: \"sauterdongle\",\n\t25604: \"idtp\",\n\t25793: \"vocaltec-hos\",\n\t25900: \"tasp-net\",\n\t25901: \"niobserver\",\n\t25902: \"nilinkanalyst\",\n\t25903: \"niprobe\",\n\t26000: \"quake\",\n\t26133: \"scscp\",\n\t26208: \"wnn6-ds\",\n\t26257: \"cockroach\",\n\t26260: \"ezproxy\",\n\t26261: \"ezmeeting\",\n\t26262: \"k3software-svr\",\n\t26263: \"k3software-cli\",\n\t26486: \"exoline-tcp\",\n\t26487: \"exoconfig\",\n\t26489: \"exonet\",\n\t27345: \"imagepump\",\n\t27442: \"jesmsjc\",\n\t27504: \"kopek-httphead\",\n\t27782: \"ars-vista\",\n\t27876: \"astrolink\",\n\t27999: \"tw-auth-key\",\n\t28000: \"nxlmd\",\n\t28001: \"pqsp\",\n\t28200: \"voxelstorm\",\n\t28240: \"siemensgsm\",\n\t28589: \"bosswave\",\n\t29167: \"otmp\",\n\t29999: \"bingbang\",\n\t30000: \"ndmps\",\n\t30001: \"pago-services1\",\n\t30002: \"pago-services2\",\n\t30003: \"amicon-fpsu-ra\",\n\t30100: \"rwp\",\n\t30260: \"kingdomsonline\",\n\t30400: \"gs-realtime\",\n\t30999: \"ovobs\",\n\t31016: \"ka-sddp\",\n\t31020: \"autotrac-acp\",\n\t31400: \"pace-licensed\",\n\t31416: \"xqosd\",\n\t31457: \"tetrinet\",\n\t31620: \"lm-mon\",\n\t31685: \"dsx-monitor\",\n\t31765: \"gamesmith-port\",\n\t31948: \"iceedcp-tx\",\n\t31949: \"iceedcp-rx\",\n\t32034: \"iracinghelper\",\n\t32249: \"t1distproc60\",\n\t32400: \"plex\",\n\t32483: \"apm-link\",\n\t32635: \"sec-ntb-clnt\",\n\t32636: \"DMExpress\",\n\t32767: \"filenet-powsrm\",\n\t32768: \"filenet-tms\",\n\t32769: \"filenet-rpc\",\n\t32770: \"filenet-nch\",\n\t32771: \"filenet-rmi\",\n\t32772: \"filenet-pa\",\n\t32773: \"filenet-cm\",\n\t32774: \"filenet-re\",\n\t32775: \"filenet-pch\",\n\t32776: \"filenet-peior\",\n\t32777: \"filenet-obrok\",\n\t32801: \"mlsn\",\n\t32811: \"retp\",\n\t32896: \"idmgratm\",\n\t33060: \"mysqlx\",\n\t33123: \"aurora-balaena\",\n\t33331: \"diamondport\",\n\t33333: \"dgi-serv\",\n\t33334: \"speedtrace\",\n\t33434: \"traceroute\",\n\t33656: \"snip-slave\",\n\t34249: \"turbonote-2\",\n\t34378: \"p-net-local\",\n\t34379: \"p-net-remote\",\n\t34567: \"dhanalakshmi\",\n\t34962: \"profinet-rt\",\n\t34963: \"profinet-rtm\",\n\t34964: \"profinet-cm\",\n\t34980: \"ethercat\",\n\t35000: \"heathview\",\n\t35001: \"rt-viewer\",\n\t35002: \"rt-sound\",\n\t35003: \"rt-devicemapper\",\n\t35004: \"rt-classmanager\",\n\t35005: \"rt-labtracker\",\n\t35006: \"rt-helper\",\n\t35100: \"axio-disc\",\n\t35354: \"kitim\",\n\t35355: \"altova-lm\",\n\t35356: \"guttersnex\",\n\t35357: \"openstack-id\",\n\t36001: \"allpeers\",\n\t36524: \"febooti-aw\",\n\t36602: \"observium-agent\",\n\t36700: \"mapx\",\n\t36865: \"kastenxpipe\",\n\t37475: \"neckar\",\n\t37483: \"gdrive-sync\",\n\t37601: \"eftp\",\n\t37654: \"unisys-eportal\",\n\t38000: \"ivs-database\",\n\t38001: \"ivs-insertion\",\n\t38002: \"cresco-control\",\n\t38201: \"galaxy7-data\",\n\t38202: \"fairview\",\n\t38203: \"agpolicy\",\n\t38800: \"sruth\",\n\t38865: \"secrmmsafecopya\",\n\t39681: \"turbonote-1\",\n\t40000: \"safetynetp\",\n\t40404: \"sptx\",\n\t40841: \"cscp\",\n\t40842: \"csccredir\",\n\t40843: \"csccfirewall\",\n\t41111: \"fs-qos\",\n\t41121: \"tentacle\",\n\t41230: \"z-wave-s\",\n\t41794: \"crestron-cip\",\n\t41795: \"crestron-ctp\",\n\t41796: \"crestron-cips\",\n\t41797: \"crestron-ctps\",\n\t42508: \"candp\",\n\t42509: \"candrp\",\n\t42510: \"caerpc\",\n\t43000: \"recvr-rc\",\n\t43188: \"reachout\",\n\t43189: \"ndm-agent-port\",\n\t43190: \"ip-provision\",\n\t43191: \"noit-transport\",\n\t43210: \"shaperai\",\n\t43439: \"eq3-update\",\n\t43440: \"ew-mgmt\",\n\t43441: \"ciscocsdb\",\n\t44123: \"z-wave-tunnel\",\n\t44321: \"pmcd\",\n\t44322: \"pmcdproxy\",\n\t44323: \"pmwebapi\",\n\t44444: \"cognex-dataman\",\n\t44553: \"rbr-debug\",\n\t44818: \"EtherNet-IP-2\",\n\t44900: \"m3da\",\n\t45000: \"asmp\",\n\t45001: \"asmps\",\n\t45002: \"rs-status\",\n\t45045: \"synctest\",\n\t45054: \"invision-ag\",\n\t45514: \"cloudcheck\",\n\t45678: \"eba\",\n\t45824: \"dai-shell\",\n\t45825: \"qdb2service\",\n\t45966: \"ssr-servermgr\",\n\t46336: \"inedo\",\n\t46998: \"spremotetablet\",\n\t46999: \"mediabox\",\n\t47000: \"mbus\",\n\t47001: \"winrm\",\n\t47557: \"dbbrowse\",\n\t47624: \"directplaysrvr\",\n\t47806: \"ap\",\n\t47808: \"bacnet\",\n\t48000: \"nimcontroller\",\n\t48001: \"nimspooler\",\n\t48002: \"nimhub\",\n\t48003: \"nimgtw\",\n\t48004: \"nimbusdb\",\n\t48005: \"nimbusdbctrl\",\n\t48049: \"3gpp-cbsp\",\n\t48050: \"weandsf\",\n\t48128: \"isnetserv\",\n\t48129: \"blp5\",\n\t48556: \"com-bardac-dw\",\n\t48619: \"iqobject\",\n\t48653: \"robotraconteur\",\n\t49000: \"matahari\",\n\t49001: \"nusrp\",\n}\nvar udpPortNames = map[UDPPort]string{\n\t1:     \"tcpmux\",\n\t2:     \"compressnet\",\n\t3:     \"compressnet\",\n\t5:     \"rje\",\n\t7:     \"echo\",\n\t9:     \"discard\",\n\t11:    \"systat\",\n\t13:    \"daytime\",\n\t17:    \"qotd\",\n\t18:    \"msp\",\n\t19:    \"chargen\",\n\t20:    \"ftp-data\",\n\t21:    \"ftp\",\n\t22:    \"ssh\",\n\t23:    \"telnet\",\n\t25:    \"smtp\",\n\t27:    \"nsw-fe\",\n\t29:    \"msg-icp\",\n\t31:    \"msg-auth\",\n\t33:    \"dsp\",\n\t37:    \"time\",\n\t38:    \"rap\",\n\t39:    \"rlp\",\n\t41:    \"graphics\",\n\t42:    \"name\",\n\t43:    \"nicname\",\n\t44:    \"mpm-flags\",\n\t45:    \"mpm\",\n\t46:    \"mpm-snd\",\n\t48:    \"auditd\",\n\t49:    \"tacacs\",\n\t50:    \"re-mail-ck\",\n\t52:    \"xns-time\",\n\t53:    \"domain\",\n\t54:    \"xns-ch\",\n\t55:    \"isi-gl\",\n\t56:    \"xns-auth\",\n\t58:    \"xns-mail\",\n\t62:    \"acas\",\n\t63:    \"whoispp\",\n\t64:    \"covia\",\n\t65:    \"tacacs-ds\",\n\t66:    \"sql-net\",\n\t67:    \"bootps\",\n\t68:    \"bootpc\",\n\t69:    \"tftp\",\n\t70:    \"gopher\",\n\t71:    \"netrjs-1\",\n\t72:    \"netrjs-2\",\n\t73:    \"netrjs-3\",\n\t74:    \"netrjs-4\",\n\t76:    \"deos\",\n\t78:    \"vettcp\",\n\t79:    \"finger\",\n\t80:    \"http\",\n\t82:    \"xfer\",\n\t83:    \"mit-ml-dev\",\n\t84:    \"ctf\",\n\t85:    \"mit-ml-dev\",\n\t86:    \"mfcobol\",\n\t88:    \"kerberos\",\n\t89:    \"su-mit-tg\",\n\t90:    \"dnsix\",\n\t91:    \"mit-dov\",\n\t92:    \"npp\",\n\t93:    \"dcp\",\n\t94:    \"objcall\",\n\t95:    \"supdup\",\n\t96:    \"dixie\",\n\t97:    \"swift-rvf\",\n\t98:    \"tacnews\",\n\t99:    \"metagram\",\n\t101:   \"hostname\",\n\t102:   \"iso-tsap\",\n\t103:   \"gppitnp\",\n\t104:   \"acr-nema\",\n\t105:   \"cso\",\n\t106:   \"3com-tsmux\",\n\t107:   \"rtelnet\",\n\t108:   \"snagas\",\n\t109:   \"pop2\",\n\t110:   \"pop3\",\n\t111:   \"sunrpc\",\n\t112:   \"mcidas\",\n\t113:   \"auth\",\n\t115:   \"sftp\",\n\t116:   \"ansanotify\",\n\t117:   \"uucp-path\",\n\t118:   \"sqlserv\",\n\t119:   \"nntp\",\n\t120:   \"cfdptkt\",\n\t121:   \"erpc\",\n\t122:   \"smakynet\",\n\t123:   \"ntp\",\n\t124:   \"ansatrader\",\n\t125:   \"locus-map\",\n\t126:   \"nxedit\",\n\t127:   \"locus-con\",\n\t128:   \"gss-xlicen\",\n\t129:   \"pwdgen\",\n\t130:   \"cisco-fna\",\n\t131:   \"cisco-tna\",\n\t132:   \"cisco-sys\",\n\t133:   \"statsrv\",\n\t134:   \"ingres-net\",\n\t135:   \"epmap\",\n\t136:   \"profile\",\n\t137:   \"netbios-ns\",\n\t138:   \"netbios-dgm\",\n\t139:   \"netbios-ssn\",\n\t140:   \"emfis-data\",\n\t141:   \"emfis-cntl\",\n\t142:   \"bl-idm\",\n\t143:   \"imap\",\n\t144:   \"uma\",\n\t145:   \"uaac\",\n\t146:   \"iso-tp0\",\n\t147:   \"iso-ip\",\n\t148:   \"jargon\",\n\t149:   \"aed-512\",\n\t150:   \"sql-net\",\n\t151:   \"hems\",\n\t152:   \"bftp\",\n\t153:   \"sgmp\",\n\t154:   \"netsc-prod\",\n\t155:   \"netsc-dev\",\n\t156:   \"sqlsrv\",\n\t157:   \"knet-cmp\",\n\t158:   \"pcmail-srv\",\n\t159:   \"nss-routing\",\n\t160:   \"sgmp-traps\",\n\t161:   \"snmp\",\n\t162:   \"snmptrap\",\n\t163:   \"cmip-man\",\n\t164:   \"cmip-agent\",\n\t165:   \"xns-courier\",\n\t166:   \"s-net\",\n\t167:   \"namp\",\n\t168:   \"rsvd\",\n\t169:   \"send\",\n\t170:   \"print-srv\",\n\t171:   \"multiplex\",\n\t172:   \"cl-1\",\n\t173:   \"xyplex-mux\",\n\t174:   \"mailq\",\n\t175:   \"vmnet\",\n\t176:   \"genrad-mux\",\n\t177:   \"xdmcp\",\n\t178:   \"nextstep\",\n\t179:   \"bgp\",\n\t180:   \"ris\",\n\t181:   \"unify\",\n\t182:   \"audit\",\n\t183:   \"ocbinder\",\n\t184:   \"ocserver\",\n\t185:   \"remote-kis\",\n\t186:   \"kis\",\n\t187:   \"aci\",\n\t188:   \"mumps\",\n\t189:   \"qft\",\n\t190:   \"gacp\",\n\t191:   \"prospero\",\n\t192:   \"osu-nms\",\n\t193:   \"srmp\",\n\t194:   \"irc\",\n\t195:   \"dn6-nlm-aud\",\n\t196:   \"dn6-smm-red\",\n\t197:   \"dls\",\n\t198:   \"dls-mon\",\n\t199:   \"smux\",\n\t200:   \"src\",\n\t201:   \"at-rtmp\",\n\t202:   \"at-nbp\",\n\t203:   \"at-3\",\n\t204:   \"at-echo\",\n\t205:   \"at-5\",\n\t206:   \"at-zis\",\n\t207:   \"at-7\",\n\t208:   \"at-8\",\n\t209:   \"qmtp\",\n\t210:   \"z39-50\",\n\t211:   \"914c-g\",\n\t212:   \"anet\",\n\t213:   \"ipx\",\n\t214:   \"vmpwscs\",\n\t215:   \"softpc\",\n\t216:   \"CAIlic\",\n\t217:   \"dbase\",\n\t218:   \"mpp\",\n\t219:   \"uarps\",\n\t220:   \"imap3\",\n\t221:   \"fln-spx\",\n\t222:   \"rsh-spx\",\n\t223:   \"cdc\",\n\t224:   \"masqdialer\",\n\t242:   \"direct\",\n\t243:   \"sur-meas\",\n\t244:   \"inbusiness\",\n\t245:   \"link\",\n\t246:   \"dsp3270\",\n\t247:   \"subntbcst-tftp\",\n\t248:   \"bhfhs\",\n\t256:   \"rap\",\n\t257:   \"set\",\n\t259:   \"esro-gen\",\n\t260:   \"openport\",\n\t261:   \"nsiiops\",\n\t262:   \"arcisdms\",\n\t263:   \"hdap\",\n\t264:   \"bgmp\",\n\t265:   \"x-bone-ctl\",\n\t266:   \"sst\",\n\t267:   \"td-service\",\n\t268:   \"td-replica\",\n\t269:   \"manet\",\n\t270:   \"gist\",\n\t280:   \"http-mgmt\",\n\t281:   \"personal-link\",\n\t282:   \"cableport-ax\",\n\t283:   \"rescap\",\n\t284:   \"corerjd\",\n\t286:   \"fxp\",\n\t287:   \"k-block\",\n\t308:   \"novastorbakcup\",\n\t309:   \"entrusttime\",\n\t310:   \"bhmds\",\n\t311:   \"asip-webadmin\",\n\t312:   \"vslmp\",\n\t313:   \"magenta-logic\",\n\t314:   \"opalis-robot\",\n\t315:   \"dpsi\",\n\t316:   \"decauth\",\n\t317:   \"zannet\",\n\t318:   \"pkix-timestamp\",\n\t319:   \"ptp-event\",\n\t320:   \"ptp-general\",\n\t321:   \"pip\",\n\t322:   \"rtsps\",\n\t333:   \"texar\",\n\t344:   \"pdap\",\n\t345:   \"pawserv\",\n\t346:   \"zserv\",\n\t347:   \"fatserv\",\n\t348:   \"csi-sgwp\",\n\t349:   \"mftp\",\n\t350:   \"matip-type-a\",\n\t351:   \"matip-type-b\",\n\t352:   \"dtag-ste-sb\",\n\t353:   \"ndsauth\",\n\t354:   \"bh611\",\n\t355:   \"datex-asn\",\n\t356:   \"cloanto-net-1\",\n\t357:   \"bhevent\",\n\t358:   \"shrinkwrap\",\n\t359:   \"nsrmp\",\n\t360:   \"scoi2odialog\",\n\t361:   \"semantix\",\n\t362:   \"srssend\",\n\t363:   \"rsvp-tunnel\",\n\t364:   \"aurora-cmgr\",\n\t365:   \"dtk\",\n\t366:   \"odmr\",\n\t367:   \"mortgageware\",\n\t368:   \"qbikgdp\",\n\t369:   \"rpc2portmap\",\n\t370:   \"codaauth2\",\n\t371:   \"clearcase\",\n\t372:   \"ulistproc\",\n\t373:   \"legent-1\",\n\t374:   \"legent-2\",\n\t375:   \"hassle\",\n\t376:   \"nip\",\n\t377:   \"tnETOS\",\n\t378:   \"dsETOS\",\n\t379:   \"is99c\",\n\t380:   \"is99s\",\n\t381:   \"hp-collector\",\n\t382:   \"hp-managed-node\",\n\t383:   \"hp-alarm-mgr\",\n\t384:   \"arns\",\n\t385:   \"ibm-app\",\n\t386:   \"asa\",\n\t387:   \"aurp\",\n\t388:   \"unidata-ldm\",\n\t389:   \"ldap\",\n\t390:   \"uis\",\n\t391:   \"synotics-relay\",\n\t392:   \"synotics-broker\",\n\t393:   \"meta5\",\n\t394:   \"embl-ndt\",\n\t395:   \"netcp\",\n\t396:   \"netware-ip\",\n\t397:   \"mptn\",\n\t398:   \"kryptolan\",\n\t399:   \"iso-tsap-c2\",\n\t400:   \"osb-sd\",\n\t401:   \"ups\",\n\t402:   \"genie\",\n\t403:   \"decap\",\n\t404:   \"nced\",\n\t405:   \"ncld\",\n\t406:   \"imsp\",\n\t407:   \"timbuktu\",\n\t408:   \"prm-sm\",\n\t409:   \"prm-nm\",\n\t410:   \"decladebug\",\n\t411:   \"rmt\",\n\t412:   \"synoptics-trap\",\n\t413:   \"smsp\",\n\t414:   \"infoseek\",\n\t415:   \"bnet\",\n\t416:   \"silverplatter\",\n\t417:   \"onmux\",\n\t418:   \"hyper-g\",\n\t419:   \"ariel1\",\n\t420:   \"smpte\",\n\t421:   \"ariel2\",\n\t422:   \"ariel3\",\n\t423:   \"opc-job-start\",\n\t424:   \"opc-job-track\",\n\t425:   \"icad-el\",\n\t426:   \"smartsdp\",\n\t427:   \"svrloc\",\n\t428:   \"ocs-cmu\",\n\t429:   \"ocs-amu\",\n\t430:   \"utmpsd\",\n\t431:   \"utmpcd\",\n\t432:   \"iasd\",\n\t433:   \"nnsp\",\n\t434:   \"mobileip-agent\",\n\t435:   \"mobilip-mn\",\n\t436:   \"dna-cml\",\n\t437:   \"comscm\",\n\t438:   \"dsfgw\",\n\t439:   \"dasp\",\n\t440:   \"sgcp\",\n\t441:   \"decvms-sysmgt\",\n\t442:   \"cvc-hostd\",\n\t443:   \"https\",\n\t444:   \"snpp\",\n\t445:   \"microsoft-ds\",\n\t446:   \"ddm-rdb\",\n\t447:   \"ddm-dfm\",\n\t448:   \"ddm-ssl\",\n\t449:   \"as-servermap\",\n\t450:   \"tserver\",\n\t451:   \"sfs-smp-net\",\n\t452:   \"sfs-config\",\n\t453:   \"creativeserver\",\n\t454:   \"contentserver\",\n\t455:   \"creativepartnr\",\n\t456:   \"macon-udp\",\n\t457:   \"scohelp\",\n\t458:   \"appleqtc\",\n\t459:   \"ampr-rcmd\",\n\t460:   \"skronk\",\n\t461:   \"datasurfsrv\",\n\t462:   \"datasurfsrvsec\",\n\t463:   \"alpes\",\n\t464:   \"kpasswd\",\n\t465:   \"igmpv3lite\",\n\t466:   \"digital-vrc\",\n\t467:   \"mylex-mapd\",\n\t468:   \"photuris\",\n\t469:   \"rcp\",\n\t470:   \"scx-proxy\",\n\t471:   \"mondex\",\n\t472:   \"ljk-login\",\n\t473:   \"hybrid-pop\",\n\t474:   \"tn-tl-w2\",\n\t475:   \"tcpnethaspsrv\",\n\t476:   \"tn-tl-fd1\",\n\t477:   \"ss7ns\",\n\t478:   \"spsc\",\n\t479:   \"iafserver\",\n\t480:   \"iafdbase\",\n\t481:   \"ph\",\n\t482:   \"bgs-nsi\",\n\t483:   \"ulpnet\",\n\t484:   \"integra-sme\",\n\t485:   \"powerburst\",\n\t486:   \"avian\",\n\t487:   \"saft\",\n\t488:   \"gss-http\",\n\t489:   \"nest-protocol\",\n\t490:   \"micom-pfs\",\n\t491:   \"go-login\",\n\t492:   \"ticf-1\",\n\t493:   \"ticf-2\",\n\t494:   \"pov-ray\",\n\t495:   \"intecourier\",\n\t496:   \"pim-rp-disc\",\n\t497:   \"retrospect\",\n\t498:   \"siam\",\n\t499:   \"iso-ill\",\n\t500:   \"isakmp\",\n\t501:   \"stmf\",\n\t502:   \"mbap\",\n\t503:   \"intrinsa\",\n\t504:   \"citadel\",\n\t505:   \"mailbox-lm\",\n\t506:   \"ohimsrv\",\n\t507:   \"crs\",\n\t508:   \"xvttp\",\n\t509:   \"snare\",\n\t510:   \"fcp\",\n\t511:   \"passgo\",\n\t512:   \"comsat\",\n\t513:   \"who\",\n\t514:   \"syslog\",\n\t515:   \"printer\",\n\t516:   \"videotex\",\n\t517:   \"talk\",\n\t518:   \"ntalk\",\n\t519:   \"utime\",\n\t520:   \"router\",\n\t521:   \"ripng\",\n\t522:   \"ulp\",\n\t523:   \"ibm-db2\",\n\t524:   \"ncp\",\n\t525:   \"timed\",\n\t526:   \"tempo\",\n\t527:   \"stx\",\n\t528:   \"custix\",\n\t529:   \"irc-serv\",\n\t530:   \"courier\",\n\t531:   \"conference\",\n\t532:   \"netnews\",\n\t533:   \"netwall\",\n\t534:   \"windream\",\n\t535:   \"iiop\",\n\t536:   \"opalis-rdv\",\n\t537:   \"nmsp\",\n\t538:   \"gdomap\",\n\t539:   \"apertus-ldp\",\n\t540:   \"uucp\",\n\t541:   \"uucp-rlogin\",\n\t542:   \"commerce\",\n\t543:   \"klogin\",\n\t544:   \"kshell\",\n\t545:   \"appleqtcsrvr\",\n\t546:   \"dhcpv6-client\",\n\t547:   \"dhcpv6-server\",\n\t548:   \"afpovertcp\",\n\t549:   \"idfp\",\n\t550:   \"new-rwho\",\n\t551:   \"cybercash\",\n\t552:   \"devshr-nts\",\n\t553:   \"pirp\",\n\t554:   \"rtsp\",\n\t555:   \"dsf\",\n\t556:   \"remotefs\",\n\t557:   \"openvms-sysipc\",\n\t558:   \"sdnskmp\",\n\t559:   \"teedtap\",\n\t560:   \"rmonitor\",\n\t561:   \"monitor\",\n\t562:   \"chshell\",\n\t563:   \"nntps\",\n\t564:   \"9pfs\",\n\t565:   \"whoami\",\n\t566:   \"streettalk\",\n\t567:   \"banyan-rpc\",\n\t568:   \"ms-shuttle\",\n\t569:   \"ms-rome\",\n\t570:   \"meter\",\n\t571:   \"meter\",\n\t572:   \"sonar\",\n\t573:   \"banyan-vip\",\n\t574:   \"ftp-agent\",\n\t575:   \"vemmi\",\n\t576:   \"ipcd\",\n\t577:   \"vnas\",\n\t578:   \"ipdd\",\n\t579:   \"decbsrv\",\n\t580:   \"sntp-heartbeat\",\n\t581:   \"bdp\",\n\t582:   \"scc-security\",\n\t583:   \"philips-vc\",\n\t584:   \"keyserver\",\n\t586:   \"password-chg\",\n\t587:   \"submission\",\n\t588:   \"cal\",\n\t589:   \"eyelink\",\n\t590:   \"tns-cml\",\n\t591:   \"http-alt\",\n\t592:   \"eudora-set\",\n\t593:   \"http-rpc-epmap\",\n\t594:   \"tpip\",\n\t595:   \"cab-protocol\",\n\t596:   \"smsd\",\n\t597:   \"ptcnameservice\",\n\t598:   \"sco-websrvrmg3\",\n\t599:   \"acp\",\n\t600:   \"ipcserver\",\n\t601:   \"syslog-conn\",\n\t602:   \"xmlrpc-beep\",\n\t603:   \"idxp\",\n\t604:   \"tunnel\",\n\t605:   \"soap-beep\",\n\t606:   \"urm\",\n\t607:   \"nqs\",\n\t608:   \"sift-uft\",\n\t609:   \"npmp-trap\",\n\t610:   \"npmp-local\",\n\t611:   \"npmp-gui\",\n\t612:   \"hmmp-ind\",\n\t613:   \"hmmp-op\",\n\t614:   \"sshell\",\n\t615:   \"sco-inetmgr\",\n\t616:   \"sco-sysmgr\",\n\t617:   \"sco-dtmgr\",\n\t618:   \"dei-icda\",\n\t619:   \"compaq-evm\",\n\t620:   \"sco-websrvrmgr\",\n\t621:   \"escp-ip\",\n\t622:   \"collaborator\",\n\t623:   \"asf-rmcp\",\n\t624:   \"cryptoadmin\",\n\t625:   \"dec-dlm\",\n\t626:   \"asia\",\n\t627:   \"passgo-tivoli\",\n\t628:   \"qmqp\",\n\t629:   \"3com-amp3\",\n\t630:   \"rda\",\n\t631:   \"ipp\",\n\t632:   \"bmpp\",\n\t633:   \"servstat\",\n\t634:   \"ginad\",\n\t635:   \"rlzdbase\",\n\t636:   \"ldaps\",\n\t637:   \"lanserver\",\n\t638:   \"mcns-sec\",\n\t639:   \"msdp\",\n\t640:   \"entrust-sps\",\n\t641:   \"repcmd\",\n\t642:   \"esro-emsdp\",\n\t643:   \"sanity\",\n\t644:   \"dwr\",\n\t645:   \"pssc\",\n\t646:   \"ldp\",\n\t647:   \"dhcp-failover\",\n\t648:   \"rrp\",\n\t649:   \"cadview-3d\",\n\t650:   \"obex\",\n\t651:   \"ieee-mms\",\n\t652:   \"hello-port\",\n\t653:   \"repscmd\",\n\t654:   \"aodv\",\n\t655:   \"tinc\",\n\t656:   \"spmp\",\n\t657:   \"rmc\",\n\t658:   \"tenfold\",\n\t660:   \"mac-srvr-admin\",\n\t661:   \"hap\",\n\t662:   \"pftp\",\n\t663:   \"purenoise\",\n\t664:   \"asf-secure-rmcp\",\n\t665:   \"sun-dr\",\n\t666:   \"mdqs\",\n\t667:   \"disclose\",\n\t668:   \"mecomm\",\n\t669:   \"meregister\",\n\t670:   \"vacdsm-sws\",\n\t671:   \"vacdsm-app\",\n\t672:   \"vpps-qua\",\n\t673:   \"cimplex\",\n\t674:   \"acap\",\n\t675:   \"dctp\",\n\t676:   \"vpps-via\",\n\t677:   \"vpp\",\n\t678:   \"ggf-ncp\",\n\t679:   \"mrm\",\n\t680:   \"entrust-aaas\",\n\t681:   \"entrust-aams\",\n\t682:   \"xfr\",\n\t683:   \"corba-iiop\",\n\t684:   \"corba-iiop-ssl\",\n\t685:   \"mdc-portmapper\",\n\t686:   \"hcp-wismar\",\n\t687:   \"asipregistry\",\n\t688:   \"realm-rusd\",\n\t689:   \"nmap\",\n\t690:   \"vatp\",\n\t691:   \"msexch-routing\",\n\t692:   \"hyperwave-isp\",\n\t693:   \"connendp\",\n\t694:   \"ha-cluster\",\n\t695:   \"ieee-mms-ssl\",\n\t696:   \"rushd\",\n\t697:   \"uuidgen\",\n\t698:   \"olsr\",\n\t699:   \"accessnetwork\",\n\t700:   \"epp\",\n\t701:   \"lmp\",\n\t702:   \"iris-beep\",\n\t704:   \"elcsd\",\n\t705:   \"agentx\",\n\t706:   \"silc\",\n\t707:   \"borland-dsj\",\n\t709:   \"entrust-kmsh\",\n\t710:   \"entrust-ash\",\n\t711:   \"cisco-tdp\",\n\t712:   \"tbrpf\",\n\t713:   \"iris-xpc\",\n\t714:   \"iris-xpcs\",\n\t715:   \"iris-lwz\",\n\t716:   \"pana\",\n\t729:   \"netviewdm1\",\n\t730:   \"netviewdm2\",\n\t731:   \"netviewdm3\",\n\t741:   \"netgw\",\n\t742:   \"netrcs\",\n\t744:   \"flexlm\",\n\t747:   \"fujitsu-dev\",\n\t748:   \"ris-cm\",\n\t749:   \"kerberos-adm\",\n\t750:   \"loadav\",\n\t751:   \"pump\",\n\t752:   \"qrh\",\n\t753:   \"rrh\",\n\t754:   \"tell\",\n\t758:   \"nlogin\",\n\t759:   \"con\",\n\t760:   \"ns\",\n\t761:   \"rxe\",\n\t762:   \"quotad\",\n\t763:   \"cycleserv\",\n\t764:   \"omserv\",\n\t765:   \"webster\",\n\t767:   \"phonebook\",\n\t769:   \"vid\",\n\t770:   \"cadlock\",\n\t771:   \"rtip\",\n\t772:   \"cycleserv2\",\n\t773:   \"notify\",\n\t774:   \"acmaint-dbd\",\n\t775:   \"acmaint-transd\",\n\t776:   \"wpages\",\n\t777:   \"multiling-http\",\n\t780:   \"wpgs\",\n\t800:   \"mdbs-daemon\",\n\t801:   \"device\",\n\t802:   \"mbap-s\",\n\t810:   \"fcp-udp\",\n\t828:   \"itm-mcell-s\",\n\t829:   \"pkix-3-ca-ra\",\n\t830:   \"netconf-ssh\",\n\t831:   \"netconf-beep\",\n\t832:   \"netconfsoaphttp\",\n\t833:   \"netconfsoapbeep\",\n\t847:   \"dhcp-failover2\",\n\t848:   \"gdoi\",\n\t853:   \"domain-s\",\n\t854:   \"dlep\",\n\t860:   \"iscsi\",\n\t861:   \"owamp-control\",\n\t862:   \"twamp-control\",\n\t873:   \"rsync\",\n\t886:   \"iclcnet-locate\",\n\t887:   \"iclcnet-svinfo\",\n\t888:   \"accessbuilder\",\n\t900:   \"omginitialrefs\",\n\t901:   \"smpnameres\",\n\t902:   \"ideafarm-door\",\n\t903:   \"ideafarm-panic\",\n\t910:   \"kink\",\n\t911:   \"xact-backup\",\n\t912:   \"apex-mesh\",\n\t913:   \"apex-edge\",\n\t989:   \"ftps-data\",\n\t990:   \"ftps\",\n\t991:   \"nas\",\n\t992:   \"telnets\",\n\t993:   \"imaps\",\n\t995:   \"pop3s\",\n\t996:   \"vsinet\",\n\t997:   \"maitrd\",\n\t998:   \"puparp\",\n\t999:   \"applix\",\n\t1000:  \"cadlock2\",\n\t1010:  \"surf\",\n\t1021:  \"exp1\",\n\t1022:  \"exp2\",\n\t1025:  \"blackjack\",\n\t1026:  \"cap\",\n\t1027:  \"6a44\",\n\t1029:  \"solid-mux\",\n\t1033:  \"netinfo-local\",\n\t1034:  \"activesync\",\n\t1035:  \"mxxrlogin\",\n\t1036:  \"nsstp\",\n\t1037:  \"ams\",\n\t1038:  \"mtqp\",\n\t1039:  \"sbl\",\n\t1040:  \"netarx\",\n\t1041:  \"danf-ak2\",\n\t1042:  \"afrog\",\n\t1043:  \"boinc-client\",\n\t1044:  \"dcutility\",\n\t1045:  \"fpitp\",\n\t1046:  \"wfremotertm\",\n\t1047:  \"neod1\",\n\t1048:  \"neod2\",\n\t1049:  \"td-postman\",\n\t1050:  \"cma\",\n\t1051:  \"optima-vnet\",\n\t1052:  \"ddt\",\n\t1053:  \"remote-as\",\n\t1054:  \"brvread\",\n\t1055:  \"ansyslmd\",\n\t1056:  \"vfo\",\n\t1057:  \"startron\",\n\t1058:  \"nim\",\n\t1059:  \"nimreg\",\n\t1060:  \"polestar\",\n\t1061:  \"kiosk\",\n\t1062:  \"veracity\",\n\t1063:  \"kyoceranetdev\",\n\t1064:  \"jstel\",\n\t1065:  \"syscomlan\",\n\t1066:  \"fpo-fns\",\n\t1067:  \"instl-boots\",\n\t1068:  \"instl-bootc\",\n\t1069:  \"cognex-insight\",\n\t1070:  \"gmrupdateserv\",\n\t1071:  \"bsquare-voip\",\n\t1072:  \"cardax\",\n\t1073:  \"bridgecontrol\",\n\t1074:  \"warmspotMgmt\",\n\t1075:  \"rdrmshc\",\n\t1076:  \"dab-sti-c\",\n\t1077:  \"imgames\",\n\t1078:  \"avocent-proxy\",\n\t1079:  \"asprovatalk\",\n\t1080:  \"socks\",\n\t1081:  \"pvuniwien\",\n\t1082:  \"amt-esd-prot\",\n\t1083:  \"ansoft-lm-1\",\n\t1084:  \"ansoft-lm-2\",\n\t1085:  \"webobjects\",\n\t1086:  \"cplscrambler-lg\",\n\t1087:  \"cplscrambler-in\",\n\t1088:  \"cplscrambler-al\",\n\t1089:  \"ff-annunc\",\n\t1090:  \"ff-fms\",\n\t1091:  \"ff-sm\",\n\t1092:  \"obrpd\",\n\t1093:  \"proofd\",\n\t1094:  \"rootd\",\n\t1095:  \"nicelink\",\n\t1096:  \"cnrprotocol\",\n\t1097:  \"sunclustermgr\",\n\t1098:  \"rmiactivation\",\n\t1099:  \"rmiregistry\",\n\t1100:  \"mctp\",\n\t1101:  \"pt2-discover\",\n\t1102:  \"adobeserver-1\",\n\t1103:  \"adobeserver-2\",\n\t1104:  \"xrl\",\n\t1105:  \"ftranhc\",\n\t1106:  \"isoipsigport-1\",\n\t1107:  \"isoipsigport-2\",\n\t1108:  \"ratio-adp\",\n\t1110:  \"nfsd-keepalive\",\n\t1111:  \"lmsocialserver\",\n\t1112:  \"icp\",\n\t1113:  \"ltp-deepspace\",\n\t1114:  \"mini-sql\",\n\t1115:  \"ardus-trns\",\n\t1116:  \"ardus-cntl\",\n\t1117:  \"ardus-mtrns\",\n\t1118:  \"sacred\",\n\t1119:  \"bnetgame\",\n\t1120:  \"bnetfile\",\n\t1121:  \"rmpp\",\n\t1122:  \"availant-mgr\",\n\t1123:  \"murray\",\n\t1124:  \"hpvmmcontrol\",\n\t1125:  \"hpvmmagent\",\n\t1126:  \"hpvmmdata\",\n\t1127:  \"kwdb-commn\",\n\t1128:  \"saphostctrl\",\n\t1129:  \"saphostctrls\",\n\t1130:  \"casp\",\n\t1131:  \"caspssl\",\n\t1132:  \"kvm-via-ip\",\n\t1133:  \"dfn\",\n\t1134:  \"aplx\",\n\t1135:  \"omnivision\",\n\t1136:  \"hhb-gateway\",\n\t1137:  \"trim\",\n\t1138:  \"encrypted-admin\",\n\t1139:  \"evm\",\n\t1140:  \"autonoc\",\n\t1141:  \"mxomss\",\n\t1142:  \"edtools\",\n\t1143:  \"imyx\",\n\t1144:  \"fuscript\",\n\t1145:  \"x9-icue\",\n\t1146:  \"audit-transfer\",\n\t1147:  \"capioverlan\",\n\t1148:  \"elfiq-repl\",\n\t1149:  \"bvtsonar\",\n\t1150:  \"blaze\",\n\t1151:  \"unizensus\",\n\t1152:  \"winpoplanmess\",\n\t1153:  \"c1222-acse\",\n\t1154:  \"resacommunity\",\n\t1155:  \"nfa\",\n\t1156:  \"iascontrol-oms\",\n\t1157:  \"iascontrol\",\n\t1158:  \"dbcontrol-oms\",\n\t1159:  \"oracle-oms\",\n\t1160:  \"olsv\",\n\t1161:  \"health-polling\",\n\t1162:  \"health-trap\",\n\t1163:  \"sddp\",\n\t1164:  \"qsm-proxy\",\n\t1165:  \"qsm-gui\",\n\t1166:  \"qsm-remote\",\n\t1167:  \"cisco-ipsla\",\n\t1168:  \"vchat\",\n\t1169:  \"tripwire\",\n\t1170:  \"atc-lm\",\n\t1171:  \"atc-appserver\",\n\t1172:  \"dnap\",\n\t1173:  \"d-cinema-rrp\",\n\t1174:  \"fnet-remote-ui\",\n\t1175:  \"dossier\",\n\t1176:  \"indigo-server\",\n\t1177:  \"dkmessenger\",\n\t1178:  \"sgi-storman\",\n\t1179:  \"b2n\",\n\t1180:  \"mc-client\",\n\t1181:  \"3comnetman\",\n\t1182:  \"accelenet-data\",\n\t1183:  \"llsurfup-http\",\n\t1184:  \"llsurfup-https\",\n\t1185:  \"catchpole\",\n\t1186:  \"mysql-cluster\",\n\t1187:  \"alias\",\n\t1188:  \"hp-webadmin\",\n\t1189:  \"unet\",\n\t1190:  \"commlinx-avl\",\n\t1191:  \"gpfs\",\n\t1192:  \"caids-sensor\",\n\t1193:  \"fiveacross\",\n\t1194:  \"openvpn\",\n\t1195:  \"rsf-1\",\n\t1196:  \"netmagic\",\n\t1197:  \"carrius-rshell\",\n\t1198:  \"cajo-discovery\",\n\t1199:  \"dmidi\",\n\t1200:  \"scol\",\n\t1201:  \"nucleus-sand\",\n\t1202:  \"caiccipc\",\n\t1203:  \"ssslic-mgr\",\n\t1204:  \"ssslog-mgr\",\n\t1205:  \"accord-mgc\",\n\t1206:  \"anthony-data\",\n\t1207:  \"metasage\",\n\t1208:  \"seagull-ais\",\n\t1209:  \"ipcd3\",\n\t1210:  \"eoss\",\n\t1211:  \"groove-dpp\",\n\t1212:  \"lupa\",\n\t1213:  \"mpc-lifenet\",\n\t1214:  \"kazaa\",\n\t1215:  \"scanstat-1\",\n\t1216:  \"etebac5\",\n\t1217:  \"hpss-ndapi\",\n\t1218:  \"aeroflight-ads\",\n\t1219:  \"aeroflight-ret\",\n\t1220:  \"qt-serveradmin\",\n\t1221:  \"sweetware-apps\",\n\t1222:  \"nerv\",\n\t1223:  \"tgp\",\n\t1224:  \"vpnz\",\n\t1225:  \"slinkysearch\",\n\t1226:  \"stgxfws\",\n\t1227:  \"dns2go\",\n\t1228:  \"florence\",\n\t1229:  \"zented\",\n\t1230:  \"periscope\",\n\t1231:  \"menandmice-lpm\",\n\t1232:  \"first-defense\",\n\t1233:  \"univ-appserver\",\n\t1234:  \"search-agent\",\n\t1235:  \"mosaicsyssvc1\",\n\t1236:  \"bvcontrol\",\n\t1237:  \"tsdos390\",\n\t1238:  \"hacl-qs\",\n\t1239:  \"nmsd\",\n\t1240:  \"instantia\",\n\t1241:  \"nessus\",\n\t1242:  \"nmasoverip\",\n\t1243:  \"serialgateway\",\n\t1244:  \"isbconference1\",\n\t1245:  \"isbconference2\",\n\t1246:  \"payrouter\",\n\t1247:  \"visionpyramid\",\n\t1248:  \"hermes\",\n\t1249:  \"mesavistaco\",\n\t1250:  \"swldy-sias\",\n\t1251:  \"servergraph\",\n\t1252:  \"bspne-pcc\",\n\t1253:  \"q55-pcc\",\n\t1254:  \"de-noc\",\n\t1255:  \"de-cache-query\",\n\t1256:  \"de-server\",\n\t1257:  \"shockwave2\",\n\t1258:  \"opennl\",\n\t1259:  \"opennl-voice\",\n\t1260:  \"ibm-ssd\",\n\t1261:  \"mpshrsv\",\n\t1262:  \"qnts-orb\",\n\t1263:  \"dka\",\n\t1264:  \"prat\",\n\t1265:  \"dssiapi\",\n\t1266:  \"dellpwrappks\",\n\t1267:  \"epc\",\n\t1268:  \"propel-msgsys\",\n\t1269:  \"watilapp\",\n\t1270:  \"opsmgr\",\n\t1271:  \"excw\",\n\t1272:  \"cspmlockmgr\",\n\t1273:  \"emc-gateway\",\n\t1274:  \"t1distproc\",\n\t1275:  \"ivcollector\",\n\t1277:  \"miva-mqs\",\n\t1278:  \"dellwebadmin-1\",\n\t1279:  \"dellwebadmin-2\",\n\t1280:  \"pictrography\",\n\t1281:  \"healthd\",\n\t1282:  \"emperion\",\n\t1283:  \"productinfo\",\n\t1284:  \"iee-qfx\",\n\t1285:  \"neoiface\",\n\t1286:  \"netuitive\",\n\t1287:  \"routematch\",\n\t1288:  \"navbuddy\",\n\t1289:  \"jwalkserver\",\n\t1290:  \"winjaserver\",\n\t1291:  \"seagulllms\",\n\t1292:  \"dsdn\",\n\t1293:  \"pkt-krb-ipsec\",\n\t1294:  \"cmmdriver\",\n\t1295:  \"ehtp\",\n\t1296:  \"dproxy\",\n\t1297:  \"sdproxy\",\n\t1298:  \"lpcp\",\n\t1299:  \"hp-sci\",\n\t1300:  \"h323hostcallsc\",\n\t1301:  \"ci3-software-1\",\n\t1302:  \"ci3-software-2\",\n\t1303:  \"sftsrv\",\n\t1304:  \"boomerang\",\n\t1305:  \"pe-mike\",\n\t1306:  \"re-conn-proto\",\n\t1307:  \"pacmand\",\n\t1308:  \"odsi\",\n\t1309:  \"jtag-server\",\n\t1310:  \"husky\",\n\t1311:  \"rxmon\",\n\t1312:  \"sti-envision\",\n\t1313:  \"bmc-patroldb\",\n\t1314:  \"pdps\",\n\t1315:  \"els\",\n\t1316:  \"exbit-escp\",\n\t1317:  \"vrts-ipcserver\",\n\t1318:  \"krb5gatekeeper\",\n\t1319:  \"amx-icsp\",\n\t1320:  \"amx-axbnet\",\n\t1321:  \"pip\",\n\t1322:  \"novation\",\n\t1323:  \"brcd\",\n\t1324:  \"delta-mcp\",\n\t1325:  \"dx-instrument\",\n\t1326:  \"wimsic\",\n\t1327:  \"ultrex\",\n\t1328:  \"ewall\",\n\t1329:  \"netdb-export\",\n\t1330:  \"streetperfect\",\n\t1331:  \"intersan\",\n\t1332:  \"pcia-rxp-b\",\n\t1333:  \"passwrd-policy\",\n\t1334:  \"writesrv\",\n\t1335:  \"digital-notary\",\n\t1336:  \"ischat\",\n\t1337:  \"menandmice-dns\",\n\t1338:  \"wmc-log-svc\",\n\t1339:  \"kjtsiteserver\",\n\t1340:  \"naap\",\n\t1341:  \"qubes\",\n\t1342:  \"esbroker\",\n\t1343:  \"re101\",\n\t1344:  \"icap\",\n\t1345:  \"vpjp\",\n\t1346:  \"alta-ana-lm\",\n\t1347:  \"bbn-mmc\",\n\t1348:  \"bbn-mmx\",\n\t1349:  \"sbook\",\n\t1350:  \"editbench\",\n\t1351:  \"equationbuilder\",\n\t1352:  \"lotusnote\",\n\t1353:  \"relief\",\n\t1354:  \"XSIP-network\",\n\t1355:  \"intuitive-edge\",\n\t1356:  \"cuillamartin\",\n\t1357:  \"pegboard\",\n\t1358:  \"connlcli\",\n\t1359:  \"ftsrv\",\n\t1360:  \"mimer\",\n\t1361:  \"linx\",\n\t1362:  \"timeflies\",\n\t1363:  \"ndm-requester\",\n\t1364:  \"ndm-server\",\n\t1365:  \"adapt-sna\",\n\t1366:  \"netware-csp\",\n\t1367:  \"dcs\",\n\t1368:  \"screencast\",\n\t1369:  \"gv-us\",\n\t1370:  \"us-gv\",\n\t1371:  \"fc-cli\",\n\t1372:  \"fc-ser\",\n\t1373:  \"chromagrafx\",\n\t1374:  \"molly\",\n\t1375:  \"bytex\",\n\t1376:  \"ibm-pps\",\n\t1377:  \"cichlid\",\n\t1378:  \"elan\",\n\t1379:  \"dbreporter\",\n\t1380:  \"telesis-licman\",\n\t1381:  \"apple-licman\",\n\t1382:  \"udt-os\",\n\t1383:  \"gwha\",\n\t1384:  \"os-licman\",\n\t1385:  \"atex-elmd\",\n\t1386:  \"checksum\",\n\t1387:  \"cadsi-lm\",\n\t1388:  \"objective-dbc\",\n\t1389:  \"iclpv-dm\",\n\t1390:  \"iclpv-sc\",\n\t1391:  \"iclpv-sas\",\n\t1392:  \"iclpv-pm\",\n\t1393:  \"iclpv-nls\",\n\t1394:  \"iclpv-nlc\",\n\t1395:  \"iclpv-wsm\",\n\t1396:  \"dvl-activemail\",\n\t1397:  \"audio-activmail\",\n\t1398:  \"video-activmail\",\n\t1399:  \"cadkey-licman\",\n\t1400:  \"cadkey-tablet\",\n\t1401:  \"goldleaf-licman\",\n\t1402:  \"prm-sm-np\",\n\t1403:  \"prm-nm-np\",\n\t1404:  \"igi-lm\",\n\t1405:  \"ibm-res\",\n\t1406:  \"netlabs-lm\",\n\t1408:  \"sophia-lm\",\n\t1409:  \"here-lm\",\n\t1410:  \"hiq\",\n\t1411:  \"af\",\n\t1412:  \"innosys\",\n\t1413:  \"innosys-acl\",\n\t1414:  \"ibm-mqseries\",\n\t1415:  \"dbstar\",\n\t1416:  \"novell-lu6-2\",\n\t1417:  \"timbuktu-srv1\",\n\t1418:  \"timbuktu-srv2\",\n\t1419:  \"timbuktu-srv3\",\n\t1420:  \"timbuktu-srv4\",\n\t1421:  \"gandalf-lm\",\n\t1422:  \"autodesk-lm\",\n\t1423:  \"essbase\",\n\t1424:  \"hybrid\",\n\t1425:  \"zion-lm\",\n\t1426:  \"sais\",\n\t1427:  \"mloadd\",\n\t1428:  \"informatik-lm\",\n\t1429:  \"nms\",\n\t1430:  \"tpdu\",\n\t1431:  \"rgtp\",\n\t1432:  \"blueberry-lm\",\n\t1433:  \"ms-sql-s\",\n\t1434:  \"ms-sql-m\",\n\t1435:  \"ibm-cics\",\n\t1436:  \"saism\",\n\t1437:  \"tabula\",\n\t1438:  \"eicon-server\",\n\t1439:  \"eicon-x25\",\n\t1440:  \"eicon-slp\",\n\t1441:  \"cadis-1\",\n\t1442:  \"cadis-2\",\n\t1443:  \"ies-lm\",\n\t1444:  \"marcam-lm\",\n\t1445:  \"proxima-lm\",\n\t1446:  \"ora-lm\",\n\t1447:  \"apri-lm\",\n\t1448:  \"oc-lm\",\n\t1449:  \"peport\",\n\t1450:  \"dwf\",\n\t1451:  \"infoman\",\n\t1452:  \"gtegsc-lm\",\n\t1453:  \"genie-lm\",\n\t1454:  \"interhdl-elmd\",\n\t1455:  \"esl-lm\",\n\t1456:  \"dca\",\n\t1457:  \"valisys-lm\",\n\t1458:  \"nrcabq-lm\",\n\t1459:  \"proshare1\",\n\t1460:  \"proshare2\",\n\t1461:  \"ibm-wrless-lan\",\n\t1462:  \"world-lm\",\n\t1463:  \"nucleus\",\n\t1464:  \"msl-lmd\",\n\t1465:  \"pipes\",\n\t1466:  \"oceansoft-lm\",\n\t1467:  \"csdmbase\",\n\t1468:  \"csdm\",\n\t1469:  \"aal-lm\",\n\t1470:  \"uaiact\",\n\t1471:  \"csdmbase\",\n\t1472:  \"csdm\",\n\t1473:  \"openmath\",\n\t1474:  \"telefinder\",\n\t1475:  \"taligent-lm\",\n\t1476:  \"clvm-cfg\",\n\t1477:  \"ms-sna-server\",\n\t1478:  \"ms-sna-base\",\n\t1479:  \"dberegister\",\n\t1480:  \"pacerforum\",\n\t1481:  \"airs\",\n\t1482:  \"miteksys-lm\",\n\t1483:  \"afs\",\n\t1484:  \"confluent\",\n\t1485:  \"lansource\",\n\t1486:  \"nms-topo-serv\",\n\t1487:  \"localinfosrvr\",\n\t1488:  \"docstor\",\n\t1489:  \"dmdocbroker\",\n\t1490:  \"insitu-conf\",\n\t1492:  \"stone-design-1\",\n\t1493:  \"netmap-lm\",\n\t1494:  \"ica\",\n\t1495:  \"cvc\",\n\t1496:  \"liberty-lm\",\n\t1497:  \"rfx-lm\",\n\t1498:  \"sybase-sqlany\",\n\t1499:  \"fhc\",\n\t1500:  \"vlsi-lm\",\n\t1501:  \"saiscm\",\n\t1502:  \"shivadiscovery\",\n\t1503:  \"imtc-mcs\",\n\t1504:  \"evb-elm\",\n\t1505:  \"funkproxy\",\n\t1506:  \"utcd\",\n\t1507:  \"symplex\",\n\t1508:  \"diagmond\",\n\t1509:  \"robcad-lm\",\n\t1510:  \"mvx-lm\",\n\t1511:  \"3l-l1\",\n\t1512:  \"wins\",\n\t1513:  \"fujitsu-dtc\",\n\t1514:  \"fujitsu-dtcns\",\n\t1515:  \"ifor-protocol\",\n\t1516:  \"vpad\",\n\t1517:  \"vpac\",\n\t1518:  \"vpvd\",\n\t1519:  \"vpvc\",\n\t1520:  \"atm-zip-office\",\n\t1521:  \"ncube-lm\",\n\t1522:  \"ricardo-lm\",\n\t1523:  \"cichild-lm\",\n\t1524:  \"ingreslock\",\n\t1525:  \"orasrv\",\n\t1526:  \"pdap-np\",\n\t1527:  \"tlisrv\",\n\t1528:  \"ngr-t\",\n\t1529:  \"coauthor\",\n\t1530:  \"rap-service\",\n\t1531:  \"rap-listen\",\n\t1532:  \"miroconnect\",\n\t1533:  \"virtual-places\",\n\t1534:  \"micromuse-lm\",\n\t1535:  \"ampr-info\",\n\t1536:  \"ampr-inter\",\n\t1537:  \"sdsc-lm\",\n\t1538:  \"3ds-lm\",\n\t1539:  \"intellistor-lm\",\n\t1540:  \"rds\",\n\t1541:  \"rds2\",\n\t1542:  \"gridgen-elmd\",\n\t1543:  \"simba-cs\",\n\t1544:  \"aspeclmd\",\n\t1545:  \"vistium-share\",\n\t1546:  \"abbaccuray\",\n\t1547:  \"laplink\",\n\t1548:  \"axon-lm\",\n\t1549:  \"shivasound\",\n\t1550:  \"3m-image-lm\",\n\t1551:  \"hecmtl-db\",\n\t1552:  \"pciarray\",\n\t1553:  \"sna-cs\",\n\t1554:  \"caci-lm\",\n\t1555:  \"livelan\",\n\t1556:  \"veritas-pbx\",\n\t1557:  \"arbortext-lm\",\n\t1558:  \"xingmpeg\",\n\t1559:  \"web2host\",\n\t1560:  \"asci-val\",\n\t1561:  \"facilityview\",\n\t1562:  \"pconnectmgr\",\n\t1563:  \"cadabra-lm\",\n\t1564:  \"pay-per-view\",\n\t1565:  \"winddlb\",\n\t1566:  \"corelvideo\",\n\t1567:  \"jlicelmd\",\n\t1568:  \"tsspmap\",\n\t1569:  \"ets\",\n\t1570:  \"orbixd\",\n\t1571:  \"rdb-dbs-disp\",\n\t1572:  \"chip-lm\",\n\t1573:  \"itscomm-ns\",\n\t1574:  \"mvel-lm\",\n\t1575:  \"oraclenames\",\n\t1576:  \"moldflow-lm\",\n\t1577:  \"hypercube-lm\",\n\t1578:  \"jacobus-lm\",\n\t1579:  \"ioc-sea-lm\",\n\t1580:  \"tn-tl-r2\",\n\t1581:  \"mil-2045-47001\",\n\t1582:  \"msims\",\n\t1583:  \"simbaexpress\",\n\t1584:  \"tn-tl-fd2\",\n\t1585:  \"intv\",\n\t1586:  \"ibm-abtact\",\n\t1587:  \"pra-elmd\",\n\t1588:  \"triquest-lm\",\n\t1589:  \"vqp\",\n\t1590:  \"gemini-lm\",\n\t1591:  \"ncpm-pm\",\n\t1592:  \"commonspace\",\n\t1593:  \"mainsoft-lm\",\n\t1594:  \"sixtrak\",\n\t1595:  \"radio\",\n\t1596:  \"radio-bc\",\n\t1597:  \"orbplus-iiop\",\n\t1598:  \"picknfs\",\n\t1599:  \"simbaservices\",\n\t1600:  \"issd\",\n\t1601:  \"aas\",\n\t1602:  \"inspect\",\n\t1603:  \"picodbc\",\n\t1604:  \"icabrowser\",\n\t1605:  \"slp\",\n\t1606:  \"slm-api\",\n\t1607:  \"stt\",\n\t1608:  \"smart-lm\",\n\t1609:  \"isysg-lm\",\n\t1610:  \"taurus-wh\",\n\t1611:  \"ill\",\n\t1612:  \"netbill-trans\",\n\t1613:  \"netbill-keyrep\",\n\t1614:  \"netbill-cred\",\n\t1615:  \"netbill-auth\",\n\t1616:  \"netbill-prod\",\n\t1617:  \"nimrod-agent\",\n\t1618:  \"skytelnet\",\n\t1619:  \"xs-openstorage\",\n\t1620:  \"faxportwinport\",\n\t1621:  \"softdataphone\",\n\t1622:  \"ontime\",\n\t1623:  \"jaleosnd\",\n\t1624:  \"udp-sr-port\",\n\t1625:  \"svs-omagent\",\n\t1626:  \"shockwave\",\n\t1627:  \"t128-gateway\",\n\t1628:  \"lontalk-norm\",\n\t1629:  \"lontalk-urgnt\",\n\t1630:  \"oraclenet8cman\",\n\t1631:  \"visitview\",\n\t1632:  \"pammratc\",\n\t1633:  \"pammrpc\",\n\t1634:  \"loaprobe\",\n\t1635:  \"edb-server1\",\n\t1636:  \"isdc\",\n\t1637:  \"islc\",\n\t1638:  \"ismc\",\n\t1639:  \"cert-initiator\",\n\t1640:  \"cert-responder\",\n\t1641:  \"invision\",\n\t1642:  \"isis-am\",\n\t1643:  \"isis-ambc\",\n\t1644:  \"saiseh\",\n\t1645:  \"sightline\",\n\t1646:  \"sa-msg-port\",\n\t1647:  \"rsap\",\n\t1648:  \"concurrent-lm\",\n\t1649:  \"kermit\",\n\t1650:  \"nkd\",\n\t1651:  \"shiva-confsrvr\",\n\t1652:  \"xnmp\",\n\t1653:  \"alphatech-lm\",\n\t1654:  \"stargatealerts\",\n\t1655:  \"dec-mbadmin\",\n\t1656:  \"dec-mbadmin-h\",\n\t1657:  \"fujitsu-mmpdc\",\n\t1658:  \"sixnetudr\",\n\t1659:  \"sg-lm\",\n\t1660:  \"skip-mc-gikreq\",\n\t1661:  \"netview-aix-1\",\n\t1662:  \"netview-aix-2\",\n\t1663:  \"netview-aix-3\",\n\t1664:  \"netview-aix-4\",\n\t1665:  \"netview-aix-5\",\n\t1666:  \"netview-aix-6\",\n\t1667:  \"netview-aix-7\",\n\t1668:  \"netview-aix-8\",\n\t1669:  \"netview-aix-9\",\n\t1670:  \"netview-aix-10\",\n\t1671:  \"netview-aix-11\",\n\t1672:  \"netview-aix-12\",\n\t1673:  \"proshare-mc-1\",\n\t1674:  \"proshare-mc-2\",\n\t1675:  \"pdp\",\n\t1676:  \"netcomm2\",\n\t1677:  \"groupwise\",\n\t1678:  \"prolink\",\n\t1679:  \"darcorp-lm\",\n\t1680:  \"microcom-sbp\",\n\t1681:  \"sd-elmd\",\n\t1682:  \"lanyon-lantern\",\n\t1683:  \"ncpm-hip\",\n\t1684:  \"snaresecure\",\n\t1685:  \"n2nremote\",\n\t1686:  \"cvmon\",\n\t1687:  \"nsjtp-ctrl\",\n\t1688:  \"nsjtp-data\",\n\t1689:  \"firefox\",\n\t1690:  \"ng-umds\",\n\t1691:  \"empire-empuma\",\n\t1692:  \"sstsys-lm\",\n\t1693:  \"rrirtr\",\n\t1694:  \"rrimwm\",\n\t1695:  \"rrilwm\",\n\t1696:  \"rrifmm\",\n\t1697:  \"rrisat\",\n\t1698:  \"rsvp-encap-1\",\n\t1699:  \"rsvp-encap-2\",\n\t1700:  \"mps-raft\",\n\t1701:  \"l2f\",\n\t1702:  \"deskshare\",\n\t1703:  \"hb-engine\",\n\t1704:  \"bcs-broker\",\n\t1705:  \"slingshot\",\n\t1706:  \"jetform\",\n\t1707:  \"vdmplay\",\n\t1708:  \"gat-lmd\",\n\t1709:  \"centra\",\n\t1710:  \"impera\",\n\t1711:  \"pptconference\",\n\t1712:  \"registrar\",\n\t1713:  \"conferencetalk\",\n\t1714:  \"sesi-lm\",\n\t1715:  \"houdini-lm\",\n\t1716:  \"xmsg\",\n\t1717:  \"fj-hdnet\",\n\t1718:  \"h323gatedisc\",\n\t1719:  \"h323gatestat\",\n\t1720:  \"h323hostcall\",\n\t1721:  \"caicci\",\n\t1722:  \"hks-lm\",\n\t1723:  \"pptp\",\n\t1724:  \"csbphonemaster\",\n\t1725:  \"iden-ralp\",\n\t1726:  \"iberiagames\",\n\t1727:  \"winddx\",\n\t1728:  \"telindus\",\n\t1729:  \"citynl\",\n\t1730:  \"roketz\",\n\t1731:  \"msiccp\",\n\t1732:  \"proxim\",\n\t1733:  \"siipat\",\n\t1734:  \"cambertx-lm\",\n\t1735:  \"privatechat\",\n\t1736:  \"street-stream\",\n\t1737:  \"ultimad\",\n\t1738:  \"gamegen1\",\n\t1739:  \"webaccess\",\n\t1740:  \"encore\",\n\t1741:  \"cisco-net-mgmt\",\n\t1742:  \"3Com-nsd\",\n\t1743:  \"cinegrfx-lm\",\n\t1744:  \"ncpm-ft\",\n\t1745:  \"remote-winsock\",\n\t1746:  \"ftrapid-1\",\n\t1747:  \"ftrapid-2\",\n\t1748:  \"oracle-em1\",\n\t1749:  \"aspen-services\",\n\t1750:  \"sslp\",\n\t1751:  \"swiftnet\",\n\t1752:  \"lofr-lm\",\n\t1754:  \"oracle-em2\",\n\t1755:  \"ms-streaming\",\n\t1756:  \"capfast-lmd\",\n\t1757:  \"cnhrp\",\n\t1758:  \"tftp-mcast\",\n\t1759:  \"spss-lm\",\n\t1760:  \"www-ldap-gw\",\n\t1761:  \"cft-0\",\n\t1762:  \"cft-1\",\n\t1763:  \"cft-2\",\n\t1764:  \"cft-3\",\n\t1765:  \"cft-4\",\n\t1766:  \"cft-5\",\n\t1767:  \"cft-6\",\n\t1768:  \"cft-7\",\n\t1769:  \"bmc-net-adm\",\n\t1770:  \"bmc-net-svc\",\n\t1771:  \"vaultbase\",\n\t1772:  \"essweb-gw\",\n\t1773:  \"kmscontrol\",\n\t1774:  \"global-dtserv\",\n\t1776:  \"femis\",\n\t1777:  \"powerguardian\",\n\t1778:  \"prodigy-intrnet\",\n\t1779:  \"pharmasoft\",\n\t1780:  \"dpkeyserv\",\n\t1781:  \"answersoft-lm\",\n\t1782:  \"hp-hcip\",\n\t1784:  \"finle-lm\",\n\t1785:  \"windlm\",\n\t1786:  \"funk-logger\",\n\t1787:  \"funk-license\",\n\t1788:  \"psmond\",\n\t1789:  \"hello\",\n\t1790:  \"nmsp\",\n\t1791:  \"ea1\",\n\t1792:  \"ibm-dt-2\",\n\t1793:  \"rsc-robot\",\n\t1794:  \"cera-bcm\",\n\t1795:  \"dpi-proxy\",\n\t1796:  \"vocaltec-admin\",\n\t1797:  \"uma\",\n\t1798:  \"etp\",\n\t1799:  \"netrisk\",\n\t1800:  \"ansys-lm\",\n\t1801:  \"msmq\",\n\t1802:  \"concomp1\",\n\t1803:  \"hp-hcip-gwy\",\n\t1804:  \"enl\",\n\t1805:  \"enl-name\",\n\t1806:  \"musiconline\",\n\t1807:  \"fhsp\",\n\t1808:  \"oracle-vp2\",\n\t1809:  \"oracle-vp1\",\n\t1810:  \"jerand-lm\",\n\t1811:  \"scientia-sdb\",\n\t1812:  \"radius\",\n\t1813:  \"radius-acct\",\n\t1814:  \"tdp-suite\",\n\t1815:  \"mmpft\",\n\t1816:  \"harp\",\n\t1817:  \"rkb-oscs\",\n\t1818:  \"etftp\",\n\t1819:  \"plato-lm\",\n\t1820:  \"mcagent\",\n\t1821:  \"donnyworld\",\n\t1822:  \"es-elmd\",\n\t1823:  \"unisys-lm\",\n\t1824:  \"metrics-pas\",\n\t1825:  \"direcpc-video\",\n\t1826:  \"ardt\",\n\t1827:  \"asi\",\n\t1828:  \"itm-mcell-u\",\n\t1829:  \"optika-emedia\",\n\t1830:  \"net8-cman\",\n\t1831:  \"myrtle\",\n\t1832:  \"tht-treasure\",\n\t1833:  \"udpradio\",\n\t1834:  \"ardusuni\",\n\t1835:  \"ardusmul\",\n\t1836:  \"ste-smsc\",\n\t1837:  \"csoft1\",\n\t1838:  \"talnet\",\n\t1839:  \"netopia-vo1\",\n\t1840:  \"netopia-vo2\",\n\t1841:  \"netopia-vo3\",\n\t1842:  \"netopia-vo4\",\n\t1843:  \"netopia-vo5\",\n\t1844:  \"direcpc-dll\",\n\t1845:  \"altalink\",\n\t1846:  \"tunstall-pnc\",\n\t1847:  \"slp-notify\",\n\t1848:  \"fjdocdist\",\n\t1849:  \"alpha-sms\",\n\t1850:  \"gsi\",\n\t1851:  \"ctcd\",\n\t1852:  \"virtual-time\",\n\t1853:  \"vids-avtp\",\n\t1854:  \"buddy-draw\",\n\t1855:  \"fiorano-rtrsvc\",\n\t1856:  \"fiorano-msgsvc\",\n\t1857:  \"datacaptor\",\n\t1858:  \"privateark\",\n\t1859:  \"gammafetchsvr\",\n\t1860:  \"sunscalar-svc\",\n\t1861:  \"lecroy-vicp\",\n\t1862:  \"mysql-cm-agent\",\n\t1863:  \"msnp\",\n\t1864:  \"paradym-31port\",\n\t1865:  \"entp\",\n\t1866:  \"swrmi\",\n\t1867:  \"udrive\",\n\t1868:  \"viziblebrowser\",\n\t1869:  \"transact\",\n\t1870:  \"sunscalar-dns\",\n\t1871:  \"canocentral0\",\n\t1872:  \"canocentral1\",\n\t1873:  \"fjmpjps\",\n\t1874:  \"fjswapsnp\",\n\t1875:  \"westell-stats\",\n\t1876:  \"ewcappsrv\",\n\t1877:  \"hp-webqosdb\",\n\t1878:  \"drmsmc\",\n\t1879:  \"nettgain-nms\",\n\t1880:  \"vsat-control\",\n\t1881:  \"ibm-mqseries2\",\n\t1882:  \"ecsqdmn\",\n\t1883:  \"mqtt\",\n\t1884:  \"idmaps\",\n\t1885:  \"vrtstrapserver\",\n\t1886:  \"leoip\",\n\t1887:  \"filex-lport\",\n\t1888:  \"ncconfig\",\n\t1889:  \"unify-adapter\",\n\t1890:  \"wilkenlistener\",\n\t1891:  \"childkey-notif\",\n\t1892:  \"childkey-ctrl\",\n\t1893:  \"elad\",\n\t1894:  \"o2server-port\",\n\t1896:  \"b-novative-ls\",\n\t1897:  \"metaagent\",\n\t1898:  \"cymtec-port\",\n\t1899:  \"mc2studios\",\n\t1900:  \"ssdp\",\n\t1901:  \"fjicl-tep-a\",\n\t1902:  \"fjicl-tep-b\",\n\t1903:  \"linkname\",\n\t1904:  \"fjicl-tep-c\",\n\t1905:  \"sugp\",\n\t1906:  \"tpmd\",\n\t1907:  \"intrastar\",\n\t1908:  \"dawn\",\n\t1909:  \"global-wlink\",\n\t1910:  \"ultrabac\",\n\t1911:  \"mtp\",\n\t1912:  \"rhp-iibp\",\n\t1913:  \"armadp\",\n\t1914:  \"elm-momentum\",\n\t1915:  \"facelink\",\n\t1916:  \"persona\",\n\t1917:  \"noagent\",\n\t1918:  \"can-nds\",\n\t1919:  \"can-dch\",\n\t1920:  \"can-ferret\",\n\t1921:  \"noadmin\",\n\t1922:  \"tapestry\",\n\t1923:  \"spice\",\n\t1924:  \"xiip\",\n\t1925:  \"discovery-port\",\n\t1926:  \"egs\",\n\t1927:  \"videte-cipc\",\n\t1928:  \"emsd-port\",\n\t1929:  \"bandwiz-system\",\n\t1930:  \"driveappserver\",\n\t1931:  \"amdsched\",\n\t1932:  \"ctt-broker\",\n\t1933:  \"xmapi\",\n\t1934:  \"xaapi\",\n\t1935:  \"macromedia-fcs\",\n\t1936:  \"jetcmeserver\",\n\t1937:  \"jwserver\",\n\t1938:  \"jwclient\",\n\t1939:  \"jvserver\",\n\t1940:  \"jvclient\",\n\t1941:  \"dic-aida\",\n\t1942:  \"res\",\n\t1943:  \"beeyond-media\",\n\t1944:  \"close-combat\",\n\t1945:  \"dialogic-elmd\",\n\t1946:  \"tekpls\",\n\t1947:  \"sentinelsrm\",\n\t1948:  \"eye2eye\",\n\t1949:  \"ismaeasdaqlive\",\n\t1950:  \"ismaeasdaqtest\",\n\t1951:  \"bcs-lmserver\",\n\t1952:  \"mpnjsc\",\n\t1953:  \"rapidbase\",\n\t1954:  \"abr-api\",\n\t1955:  \"abr-secure\",\n\t1956:  \"vrtl-vmf-ds\",\n\t1957:  \"unix-status\",\n\t1958:  \"dxadmind\",\n\t1959:  \"simp-all\",\n\t1960:  \"nasmanager\",\n\t1961:  \"bts-appserver\",\n\t1962:  \"biap-mp\",\n\t1963:  \"webmachine\",\n\t1964:  \"solid-e-engine\",\n\t1965:  \"tivoli-npm\",\n\t1966:  \"slush\",\n\t1967:  \"sns-quote\",\n\t1968:  \"lipsinc\",\n\t1969:  \"lipsinc1\",\n\t1970:  \"netop-rc\",\n\t1971:  \"netop-school\",\n\t1972:  \"intersys-cache\",\n\t1973:  \"dlsrap\",\n\t1974:  \"drp\",\n\t1975:  \"tcoflashagent\",\n\t1976:  \"tcoregagent\",\n\t1977:  \"tcoaddressbook\",\n\t1978:  \"unisql\",\n\t1979:  \"unisql-java\",\n\t1980:  \"pearldoc-xact\",\n\t1981:  \"p2pq\",\n\t1982:  \"estamp\",\n\t1983:  \"lhtp\",\n\t1984:  \"bb\",\n\t1985:  \"hsrp\",\n\t1986:  \"licensedaemon\",\n\t1987:  \"tr-rsrb-p1\",\n\t1988:  \"tr-rsrb-p2\",\n\t1989:  \"tr-rsrb-p3\",\n\t1990:  \"stun-p1\",\n\t1991:  \"stun-p2\",\n\t1992:  \"stun-p3\",\n\t1993:  \"snmp-tcp-port\",\n\t1994:  \"stun-port\",\n\t1995:  \"perf-port\",\n\t1996:  \"tr-rsrb-port\",\n\t1997:  \"gdp-port\",\n\t1998:  \"x25-svc-port\",\n\t1999:  \"tcp-id-port\",\n\t2000:  \"cisco-sccp\",\n\t2001:  \"wizard\",\n\t2002:  \"globe\",\n\t2003:  \"brutus\",\n\t2004:  \"emce\",\n\t2005:  \"oracle\",\n\t2006:  \"raid-cd\",\n\t2007:  \"raid-am\",\n\t2008:  \"terminaldb\",\n\t2009:  \"whosockami\",\n\t2010:  \"pipe-server\",\n\t2011:  \"servserv\",\n\t2012:  \"raid-ac\",\n\t2013:  \"raid-cd\",\n\t2014:  \"raid-sf\",\n\t2015:  \"raid-cs\",\n\t2016:  \"bootserver\",\n\t2017:  \"bootclient\",\n\t2018:  \"rellpack\",\n\t2019:  \"about\",\n\t2020:  \"xinupageserver\",\n\t2021:  \"xinuexpansion1\",\n\t2022:  \"xinuexpansion2\",\n\t2023:  \"xinuexpansion3\",\n\t2024:  \"xinuexpansion4\",\n\t2025:  \"xribs\",\n\t2026:  \"scrabble\",\n\t2027:  \"shadowserver\",\n\t2028:  \"submitserver\",\n\t2029:  \"hsrpv6\",\n\t2030:  \"device2\",\n\t2031:  \"mobrien-chat\",\n\t2032:  \"blackboard\",\n\t2033:  \"glogger\",\n\t2034:  \"scoremgr\",\n\t2035:  \"imsldoc\",\n\t2036:  \"e-dpnet\",\n\t2037:  \"applus\",\n\t2038:  \"objectmanager\",\n\t2039:  \"prizma\",\n\t2040:  \"lam\",\n\t2041:  \"interbase\",\n\t2042:  \"isis\",\n\t2043:  \"isis-bcast\",\n\t2044:  \"rimsl\",\n\t2045:  \"cdfunc\",\n\t2046:  \"sdfunc\",\n\t2047:  \"dls\",\n\t2048:  \"dls-monitor\",\n\t2049:  \"shilp\",\n\t2050:  \"av-emb-config\",\n\t2051:  \"epnsdp\",\n\t2052:  \"clearvisn\",\n\t2053:  \"lot105-ds-upd\",\n\t2054:  \"weblogin\",\n\t2055:  \"iop\",\n\t2056:  \"omnisky\",\n\t2057:  \"rich-cp\",\n\t2058:  \"newwavesearch\",\n\t2059:  \"bmc-messaging\",\n\t2060:  \"teleniumdaemon\",\n\t2061:  \"netmount\",\n\t2062:  \"icg-swp\",\n\t2063:  \"icg-bridge\",\n\t2064:  \"icg-iprelay\",\n\t2065:  \"dlsrpn\",\n\t2066:  \"aura\",\n\t2067:  \"dlswpn\",\n\t2068:  \"avauthsrvprtcl\",\n\t2069:  \"event-port\",\n\t2070:  \"ah-esp-encap\",\n\t2071:  \"acp-port\",\n\t2072:  \"msync\",\n\t2073:  \"gxs-data-port\",\n\t2074:  \"vrtl-vmf-sa\",\n\t2075:  \"newlixengine\",\n\t2076:  \"newlixconfig\",\n\t2077:  \"tsrmagt\",\n\t2078:  \"tpcsrvr\",\n\t2079:  \"idware-router\",\n\t2080:  \"autodesk-nlm\",\n\t2081:  \"kme-trap-port\",\n\t2082:  \"infowave\",\n\t2083:  \"radsec\",\n\t2084:  \"sunclustergeo\",\n\t2085:  \"ada-cip\",\n\t2086:  \"gnunet\",\n\t2087:  \"eli\",\n\t2088:  \"ip-blf\",\n\t2089:  \"sep\",\n\t2090:  \"lrp\",\n\t2091:  \"prp\",\n\t2092:  \"descent3\",\n\t2093:  \"nbx-cc\",\n\t2094:  \"nbx-au\",\n\t2095:  \"nbx-ser\",\n\t2096:  \"nbx-dir\",\n\t2097:  \"jetformpreview\",\n\t2098:  \"dialog-port\",\n\t2099:  \"h2250-annex-g\",\n\t2100:  \"amiganetfs\",\n\t2101:  \"rtcm-sc104\",\n\t2102:  \"zephyr-srv\",\n\t2103:  \"zephyr-clt\",\n\t2104:  \"zephyr-hm\",\n\t2105:  \"minipay\",\n\t2106:  \"mzap\",\n\t2107:  \"bintec-admin\",\n\t2108:  \"comcam\",\n\t2109:  \"ergolight\",\n\t2110:  \"umsp\",\n\t2111:  \"dsatp\",\n\t2112:  \"idonix-metanet\",\n\t2113:  \"hsl-storm\",\n\t2114:  \"newheights\",\n\t2115:  \"kdm\",\n\t2116:  \"ccowcmr\",\n\t2117:  \"mentaclient\",\n\t2118:  \"mentaserver\",\n\t2119:  \"gsigatekeeper\",\n\t2120:  \"qencp\",\n\t2121:  \"scientia-ssdb\",\n\t2122:  \"caupc-remote\",\n\t2123:  \"gtp-control\",\n\t2124:  \"elatelink\",\n\t2125:  \"lockstep\",\n\t2126:  \"pktcable-cops\",\n\t2127:  \"index-pc-wb\",\n\t2128:  \"net-steward\",\n\t2129:  \"cs-live\",\n\t2130:  \"xds\",\n\t2131:  \"avantageb2b\",\n\t2132:  \"solera-epmap\",\n\t2133:  \"zymed-zpp\",\n\t2134:  \"avenue\",\n\t2135:  \"gris\",\n\t2136:  \"appworxsrv\",\n\t2137:  \"connect\",\n\t2138:  \"unbind-cluster\",\n\t2139:  \"ias-auth\",\n\t2140:  \"ias-reg\",\n\t2141:  \"ias-admind\",\n\t2142:  \"tdmoip\",\n\t2143:  \"lv-jc\",\n\t2144:  \"lv-ffx\",\n\t2145:  \"lv-pici\",\n\t2146:  \"lv-not\",\n\t2147:  \"lv-auth\",\n\t2148:  \"veritas-ucl\",\n\t2149:  \"acptsys\",\n\t2150:  \"dynamic3d\",\n\t2151:  \"docent\",\n\t2152:  \"gtp-user\",\n\t2153:  \"ctlptc\",\n\t2154:  \"stdptc\",\n\t2155:  \"brdptc\",\n\t2156:  \"trp\",\n\t2157:  \"xnds\",\n\t2158:  \"touchnetplus\",\n\t2159:  \"gdbremote\",\n\t2160:  \"apc-2160\",\n\t2161:  \"apc-2161\",\n\t2162:  \"navisphere\",\n\t2163:  \"navisphere-sec\",\n\t2164:  \"ddns-v3\",\n\t2165:  \"x-bone-api\",\n\t2166:  \"iwserver\",\n\t2167:  \"raw-serial\",\n\t2168:  \"easy-soft-mux\",\n\t2169:  \"brain\",\n\t2170:  \"eyetv\",\n\t2171:  \"msfw-storage\",\n\t2172:  \"msfw-s-storage\",\n\t2173:  \"msfw-replica\",\n\t2174:  \"msfw-array\",\n\t2175:  \"airsync\",\n\t2176:  \"rapi\",\n\t2177:  \"qwave\",\n\t2178:  \"bitspeer\",\n\t2179:  \"vmrdp\",\n\t2180:  \"mc-gt-srv\",\n\t2181:  \"eforward\",\n\t2182:  \"cgn-stat\",\n\t2183:  \"cgn-config\",\n\t2184:  \"nvd\",\n\t2185:  \"onbase-dds\",\n\t2186:  \"gtaua\",\n\t2187:  \"ssmd\",\n\t2190:  \"tivoconnect\",\n\t2191:  \"tvbus\",\n\t2192:  \"asdis\",\n\t2193:  \"drwcs\",\n\t2197:  \"mnp-exchange\",\n\t2198:  \"onehome-remote\",\n\t2199:  \"onehome-help\",\n\t2200:  \"ici\",\n\t2201:  \"ats\",\n\t2202:  \"imtc-map\",\n\t2203:  \"b2-runtime\",\n\t2204:  \"b2-license\",\n\t2205:  \"jps\",\n\t2206:  \"hpocbus\",\n\t2207:  \"hpssd\",\n\t2208:  \"hpiod\",\n\t2209:  \"rimf-ps\",\n\t2210:  \"noaaport\",\n\t2211:  \"emwin\",\n\t2212:  \"leecoposserver\",\n\t2213:  \"kali\",\n\t2214:  \"rpi\",\n\t2215:  \"ipcore\",\n\t2216:  \"vtu-comms\",\n\t2217:  \"gotodevice\",\n\t2218:  \"bounzza\",\n\t2219:  \"netiq-ncap\",\n\t2220:  \"netiq\",\n\t2221:  \"ethernet-ip-s\",\n\t2222:  \"EtherNet-IP-1\",\n\t2223:  \"rockwell-csp2\",\n\t2224:  \"efi-mg\",\n\t2226:  \"di-drm\",\n\t2227:  \"di-msg\",\n\t2228:  \"ehome-ms\",\n\t2229:  \"datalens\",\n\t2230:  \"queueadm\",\n\t2231:  \"wimaxasncp\",\n\t2232:  \"ivs-video\",\n\t2233:  \"infocrypt\",\n\t2234:  \"directplay\",\n\t2235:  \"sercomm-wlink\",\n\t2236:  \"nani\",\n\t2237:  \"optech-port1-lm\",\n\t2238:  \"aviva-sna\",\n\t2239:  \"imagequery\",\n\t2240:  \"recipe\",\n\t2241:  \"ivsd\",\n\t2242:  \"foliocorp\",\n\t2243:  \"magicom\",\n\t2244:  \"nmsserver\",\n\t2245:  \"hao\",\n\t2246:  \"pc-mta-addrmap\",\n\t2247:  \"antidotemgrsvr\",\n\t2248:  \"ums\",\n\t2249:  \"rfmp\",\n\t2250:  \"remote-collab\",\n\t2251:  \"dif-port\",\n\t2252:  \"njenet-ssl\",\n\t2253:  \"dtv-chan-req\",\n\t2254:  \"seispoc\",\n\t2255:  \"vrtp\",\n\t2256:  \"pcc-mfp\",\n\t2257:  \"simple-tx-rx\",\n\t2258:  \"rcts\",\n\t2260:  \"apc-2260\",\n\t2261:  \"comotionmaster\",\n\t2262:  \"comotionback\",\n\t2263:  \"ecwcfg\",\n\t2264:  \"apx500api-1\",\n\t2265:  \"apx500api-2\",\n\t2266:  \"mfserver\",\n\t2267:  \"ontobroker\",\n\t2268:  \"amt\",\n\t2269:  \"mikey\",\n\t2270:  \"starschool\",\n\t2271:  \"mmcals\",\n\t2272:  \"mmcal\",\n\t2273:  \"mysql-im\",\n\t2274:  \"pcttunnell\",\n\t2275:  \"ibridge-data\",\n\t2276:  \"ibridge-mgmt\",\n\t2277:  \"bluectrlproxy\",\n\t2278:  \"s3db\",\n\t2279:  \"xmquery\",\n\t2280:  \"lnvpoller\",\n\t2281:  \"lnvconsole\",\n\t2282:  \"lnvalarm\",\n\t2283:  \"lnvstatus\",\n\t2284:  \"lnvmaps\",\n\t2285:  \"lnvmailmon\",\n\t2286:  \"nas-metering\",\n\t2287:  \"dna\",\n\t2288:  \"netml\",\n\t2289:  \"dict-lookup\",\n\t2290:  \"sonus-logging\",\n\t2291:  \"eapsp\",\n\t2292:  \"mib-streaming\",\n\t2293:  \"npdbgmngr\",\n\t2294:  \"konshus-lm\",\n\t2295:  \"advant-lm\",\n\t2296:  \"theta-lm\",\n\t2297:  \"d2k-datamover1\",\n\t2298:  \"d2k-datamover2\",\n\t2299:  \"pc-telecommute\",\n\t2300:  \"cvmmon\",\n\t2301:  \"cpq-wbem\",\n\t2302:  \"binderysupport\",\n\t2303:  \"proxy-gateway\",\n\t2304:  \"attachmate-uts\",\n\t2305:  \"mt-scaleserver\",\n\t2306:  \"tappi-boxnet\",\n\t2307:  \"pehelp\",\n\t2308:  \"sdhelp\",\n\t2309:  \"sdserver\",\n\t2310:  \"sdclient\",\n\t2311:  \"messageservice\",\n\t2312:  \"wanscaler\",\n\t2313:  \"iapp\",\n\t2314:  \"cr-websystems\",\n\t2315:  \"precise-sft\",\n\t2316:  \"sent-lm\",\n\t2317:  \"attachmate-g32\",\n\t2318:  \"cadencecontrol\",\n\t2319:  \"infolibria\",\n\t2320:  \"siebel-ns\",\n\t2321:  \"rdlap\",\n\t2322:  \"ofsd\",\n\t2323:  \"3d-nfsd\",\n\t2324:  \"cosmocall\",\n\t2325:  \"ansysli\",\n\t2326:  \"idcp\",\n\t2327:  \"xingcsm\",\n\t2328:  \"netrix-sftm\",\n\t2329:  \"nvd\",\n\t2330:  \"tscchat\",\n\t2331:  \"agentview\",\n\t2332:  \"rcc-host\",\n\t2333:  \"snapp\",\n\t2334:  \"ace-client\",\n\t2335:  \"ace-proxy\",\n\t2336:  \"appleugcontrol\",\n\t2337:  \"ideesrv\",\n\t2338:  \"norton-lambert\",\n\t2339:  \"3com-webview\",\n\t2340:  \"wrs-registry\",\n\t2341:  \"xiostatus\",\n\t2342:  \"manage-exec\",\n\t2343:  \"nati-logos\",\n\t2344:  \"fcmsys\",\n\t2345:  \"dbm\",\n\t2346:  \"redstorm-join\",\n\t2347:  \"redstorm-find\",\n\t2348:  \"redstorm-info\",\n\t2349:  \"redstorm-diag\",\n\t2350:  \"psbserver\",\n\t2351:  \"psrserver\",\n\t2352:  \"pslserver\",\n\t2353:  \"pspserver\",\n\t2354:  \"psprserver\",\n\t2355:  \"psdbserver\",\n\t2356:  \"gxtelmd\",\n\t2357:  \"unihub-server\",\n\t2358:  \"futrix\",\n\t2359:  \"flukeserver\",\n\t2360:  \"nexstorindltd\",\n\t2361:  \"tl1\",\n\t2362:  \"digiman\",\n\t2363:  \"mediacntrlnfsd\",\n\t2364:  \"oi-2000\",\n\t2365:  \"dbref\",\n\t2366:  \"qip-login\",\n\t2367:  \"service-ctrl\",\n\t2368:  \"opentable\",\n\t2370:  \"l3-hbmon\",\n\t2372:  \"lanmessenger\",\n\t2381:  \"compaq-https\",\n\t2382:  \"ms-olap3\",\n\t2383:  \"ms-olap4\",\n\t2384:  \"sd-capacity\",\n\t2385:  \"sd-data\",\n\t2386:  \"virtualtape\",\n\t2387:  \"vsamredirector\",\n\t2388:  \"mynahautostart\",\n\t2389:  \"ovsessionmgr\",\n\t2390:  \"rsmtp\",\n\t2391:  \"3com-net-mgmt\",\n\t2392:  \"tacticalauth\",\n\t2393:  \"ms-olap1\",\n\t2394:  \"ms-olap2\",\n\t2395:  \"lan900-remote\",\n\t2396:  \"wusage\",\n\t2397:  \"ncl\",\n\t2398:  \"orbiter\",\n\t2399:  \"fmpro-fdal\",\n\t2400:  \"opequus-server\",\n\t2401:  \"cvspserver\",\n\t2402:  \"taskmaster2000\",\n\t2403:  \"taskmaster2000\",\n\t2404:  \"iec-104\",\n\t2405:  \"trc-netpoll\",\n\t2406:  \"jediserver\",\n\t2407:  \"orion\",\n\t2409:  \"sns-protocol\",\n\t2410:  \"vrts-registry\",\n\t2411:  \"netwave-ap-mgmt\",\n\t2412:  \"cdn\",\n\t2413:  \"orion-rmi-reg\",\n\t2414:  \"beeyond\",\n\t2415:  \"codima-rtp\",\n\t2416:  \"rmtserver\",\n\t2417:  \"composit-server\",\n\t2418:  \"cas\",\n\t2419:  \"attachmate-s2s\",\n\t2420:  \"dslremote-mgmt\",\n\t2421:  \"g-talk\",\n\t2422:  \"crmsbits\",\n\t2423:  \"rnrp\",\n\t2424:  \"kofax-svr\",\n\t2425:  \"fjitsuappmgr\",\n\t2426:  \"vcmp\",\n\t2427:  \"mgcp-gateway\",\n\t2428:  \"ott\",\n\t2429:  \"ft-role\",\n\t2430:  \"venus\",\n\t2431:  \"venus-se\",\n\t2432:  \"codasrv\",\n\t2433:  \"codasrv-se\",\n\t2434:  \"pxc-epmap\",\n\t2435:  \"optilogic\",\n\t2436:  \"topx\",\n\t2437:  \"unicontrol\",\n\t2438:  \"msp\",\n\t2439:  \"sybasedbsynch\",\n\t2440:  \"spearway\",\n\t2441:  \"pvsw-inet\",\n\t2442:  \"netangel\",\n\t2443:  \"powerclientcsf\",\n\t2444:  \"btpp2sectrans\",\n\t2445:  \"dtn1\",\n\t2446:  \"bues-service\",\n\t2447:  \"ovwdb\",\n\t2448:  \"hpppssvr\",\n\t2449:  \"ratl\",\n\t2450:  \"netadmin\",\n\t2451:  \"netchat\",\n\t2452:  \"snifferclient\",\n\t2453:  \"madge-ltd\",\n\t2454:  \"indx-dds\",\n\t2455:  \"wago-io-system\",\n\t2456:  \"altav-remmgt\",\n\t2457:  \"rapido-ip\",\n\t2458:  \"griffin\",\n\t2459:  \"community\",\n\t2460:  \"ms-theater\",\n\t2461:  \"qadmifoper\",\n\t2462:  \"qadmifevent\",\n\t2463:  \"lsi-raid-mgmt\",\n\t2464:  \"direcpc-si\",\n\t2465:  \"lbm\",\n\t2466:  \"lbf\",\n\t2467:  \"high-criteria\",\n\t2468:  \"qip-msgd\",\n\t2469:  \"mti-tcs-comm\",\n\t2470:  \"taskman-port\",\n\t2471:  \"seaodbc\",\n\t2472:  \"c3\",\n\t2473:  \"aker-cdp\",\n\t2474:  \"vitalanalysis\",\n\t2475:  \"ace-server\",\n\t2476:  \"ace-svr-prop\",\n\t2477:  \"ssm-cvs\",\n\t2478:  \"ssm-cssps\",\n\t2479:  \"ssm-els\",\n\t2480:  \"powerexchange\",\n\t2481:  \"giop\",\n\t2482:  \"giop-ssl\",\n\t2483:  \"ttc\",\n\t2484:  \"ttc-ssl\",\n\t2485:  \"netobjects1\",\n\t2486:  \"netobjects2\",\n\t2487:  \"pns\",\n\t2488:  \"moy-corp\",\n\t2489:  \"tsilb\",\n\t2490:  \"qip-qdhcp\",\n\t2491:  \"conclave-cpp\",\n\t2492:  \"groove\",\n\t2493:  \"talarian-mqs\",\n\t2494:  \"bmc-ar\",\n\t2495:  \"fast-rem-serv\",\n\t2496:  \"dirgis\",\n\t2497:  \"quaddb\",\n\t2498:  \"odn-castraq\",\n\t2499:  \"unicontrol\",\n\t2500:  \"rtsserv\",\n\t2501:  \"rtsclient\",\n\t2502:  \"kentrox-prot\",\n\t2503:  \"nms-dpnss\",\n\t2504:  \"wlbs\",\n\t2505:  \"ppcontrol\",\n\t2506:  \"jbroker\",\n\t2507:  \"spock\",\n\t2508:  \"jdatastore\",\n\t2509:  \"fjmpss\",\n\t2510:  \"fjappmgrbulk\",\n\t2511:  \"metastorm\",\n\t2512:  \"citrixima\",\n\t2513:  \"citrixadmin\",\n\t2514:  \"facsys-ntp\",\n\t2515:  \"facsys-router\",\n\t2516:  \"maincontrol\",\n\t2517:  \"call-sig-trans\",\n\t2518:  \"willy\",\n\t2519:  \"globmsgsvc\",\n\t2520:  \"pvsw\",\n\t2521:  \"adaptecmgr\",\n\t2522:  \"windb\",\n\t2523:  \"qke-llc-v3\",\n\t2524:  \"optiwave-lm\",\n\t2525:  \"ms-v-worlds\",\n\t2526:  \"ema-sent-lm\",\n\t2527:  \"iqserver\",\n\t2528:  \"ncr-ccl\",\n\t2529:  \"utsftp\",\n\t2530:  \"vrcommerce\",\n\t2531:  \"ito-e-gui\",\n\t2532:  \"ovtopmd\",\n\t2533:  \"snifferserver\",\n\t2534:  \"combox-web-acc\",\n\t2535:  \"madcap\",\n\t2536:  \"btpp2audctr1\",\n\t2537:  \"upgrade\",\n\t2538:  \"vnwk-prapi\",\n\t2539:  \"vsiadmin\",\n\t2540:  \"lonworks\",\n\t2541:  \"lonworks2\",\n\t2542:  \"udrawgraph\",\n\t2543:  \"reftek\",\n\t2544:  \"novell-zen\",\n\t2545:  \"sis-emt\",\n\t2546:  \"vytalvaultbrtp\",\n\t2547:  \"vytalvaultvsmp\",\n\t2548:  \"vytalvaultpipe\",\n\t2549:  \"ipass\",\n\t2550:  \"ads\",\n\t2551:  \"isg-uda-server\",\n\t2552:  \"call-logging\",\n\t2553:  \"efidiningport\",\n\t2554:  \"vcnet-link-v10\",\n\t2555:  \"compaq-wcp\",\n\t2556:  \"nicetec-nmsvc\",\n\t2557:  \"nicetec-mgmt\",\n\t2558:  \"pclemultimedia\",\n\t2559:  \"lstp\",\n\t2560:  \"labrat\",\n\t2561:  \"mosaixcc\",\n\t2562:  \"delibo\",\n\t2563:  \"cti-redwood\",\n\t2564:  \"hp-3000-telnet\",\n\t2565:  \"coord-svr\",\n\t2566:  \"pcs-pcw\",\n\t2567:  \"clp\",\n\t2568:  \"spamtrap\",\n\t2569:  \"sonuscallsig\",\n\t2570:  \"hs-port\",\n\t2571:  \"cecsvc\",\n\t2572:  \"ibp\",\n\t2573:  \"trustestablish\",\n\t2574:  \"blockade-bpsp\",\n\t2575:  \"hl7\",\n\t2576:  \"tclprodebugger\",\n\t2577:  \"scipticslsrvr\",\n\t2578:  \"rvs-isdn-dcp\",\n\t2579:  \"mpfoncl\",\n\t2580:  \"tributary\",\n\t2581:  \"argis-te\",\n\t2582:  \"argis-ds\",\n\t2583:  \"mon\",\n\t2584:  \"cyaserv\",\n\t2585:  \"netx-server\",\n\t2586:  \"netx-agent\",\n\t2587:  \"masc\",\n\t2588:  \"privilege\",\n\t2589:  \"quartus-tcl\",\n\t2590:  \"idotdist\",\n\t2591:  \"maytagshuffle\",\n\t2592:  \"netrek\",\n\t2593:  \"mns-mail\",\n\t2594:  \"dts\",\n\t2595:  \"worldfusion1\",\n\t2596:  \"worldfusion2\",\n\t2597:  \"homesteadglory\",\n\t2598:  \"citriximaclient\",\n\t2599:  \"snapd\",\n\t2600:  \"hpstgmgr\",\n\t2601:  \"discp-client\",\n\t2602:  \"discp-server\",\n\t2603:  \"servicemeter\",\n\t2604:  \"nsc-ccs\",\n\t2605:  \"nsc-posa\",\n\t2606:  \"netmon\",\n\t2607:  \"connection\",\n\t2608:  \"wag-service\",\n\t2609:  \"system-monitor\",\n\t2610:  \"versa-tek\",\n\t2611:  \"lionhead\",\n\t2612:  \"qpasa-agent\",\n\t2613:  \"smntubootstrap\",\n\t2614:  \"neveroffline\",\n\t2615:  \"firepower\",\n\t2616:  \"appswitch-emp\",\n\t2617:  \"cmadmin\",\n\t2618:  \"priority-e-com\",\n\t2619:  \"bruce\",\n\t2620:  \"lpsrecommender\",\n\t2621:  \"miles-apart\",\n\t2622:  \"metricadbc\",\n\t2623:  \"lmdp\",\n\t2624:  \"aria\",\n\t2625:  \"blwnkl-port\",\n\t2626:  \"gbjd816\",\n\t2627:  \"moshebeeri\",\n\t2628:  \"dict\",\n\t2629:  \"sitaraserver\",\n\t2630:  \"sitaramgmt\",\n\t2631:  \"sitaradir\",\n\t2632:  \"irdg-post\",\n\t2633:  \"interintelli\",\n\t2634:  \"pk-electronics\",\n\t2635:  \"backburner\",\n\t2636:  \"solve\",\n\t2637:  \"imdocsvc\",\n\t2638:  \"sybaseanywhere\",\n\t2639:  \"aminet\",\n\t2640:  \"ami-control\",\n\t2641:  \"hdl-srv\",\n\t2642:  \"tragic\",\n\t2643:  \"gte-samp\",\n\t2644:  \"travsoft-ipx-t\",\n\t2645:  \"novell-ipx-cmd\",\n\t2646:  \"and-lm\",\n\t2647:  \"syncserver\",\n\t2648:  \"upsnotifyprot\",\n\t2649:  \"vpsipport\",\n\t2650:  \"eristwoguns\",\n\t2651:  \"ebinsite\",\n\t2652:  \"interpathpanel\",\n\t2653:  \"sonus\",\n\t2654:  \"corel-vncadmin\",\n\t2655:  \"unglue\",\n\t2656:  \"kana\",\n\t2657:  \"sns-dispatcher\",\n\t2658:  \"sns-admin\",\n\t2659:  \"sns-query\",\n\t2660:  \"gcmonitor\",\n\t2661:  \"olhost\",\n\t2662:  \"bintec-capi\",\n\t2663:  \"bintec-tapi\",\n\t2664:  \"patrol-mq-gm\",\n\t2665:  \"patrol-mq-nm\",\n\t2666:  \"extensis\",\n\t2667:  \"alarm-clock-s\",\n\t2668:  \"alarm-clock-c\",\n\t2669:  \"toad\",\n\t2670:  \"tve-announce\",\n\t2671:  \"newlixreg\",\n\t2672:  \"nhserver\",\n\t2673:  \"firstcall42\",\n\t2674:  \"ewnn\",\n\t2675:  \"ttc-etap\",\n\t2676:  \"simslink\",\n\t2677:  \"gadgetgate1way\",\n\t2678:  \"gadgetgate2way\",\n\t2679:  \"syncserverssl\",\n\t2680:  \"pxc-sapxom\",\n\t2681:  \"mpnjsomb\",\n\t2683:  \"ncdloadbalance\",\n\t2684:  \"mpnjsosv\",\n\t2685:  \"mpnjsocl\",\n\t2686:  \"mpnjsomg\",\n\t2687:  \"pq-lic-mgmt\",\n\t2688:  \"md-cg-http\",\n\t2689:  \"fastlynx\",\n\t2690:  \"hp-nnm-data\",\n\t2691:  \"itinternet\",\n\t2692:  \"admins-lms\",\n\t2694:  \"pwrsevent\",\n\t2695:  \"vspread\",\n\t2696:  \"unifyadmin\",\n\t2697:  \"oce-snmp-trap\",\n\t2698:  \"mck-ivpip\",\n\t2699:  \"csoft-plusclnt\",\n\t2700:  \"tqdata\",\n\t2701:  \"sms-rcinfo\",\n\t2702:  \"sms-xfer\",\n\t2703:  \"sms-chat\",\n\t2704:  \"sms-remctrl\",\n\t2705:  \"sds-admin\",\n\t2706:  \"ncdmirroring\",\n\t2707:  \"emcsymapiport\",\n\t2708:  \"banyan-net\",\n\t2709:  \"supermon\",\n\t2710:  \"sso-service\",\n\t2711:  \"sso-control\",\n\t2712:  \"aocp\",\n\t2713:  \"raventbs\",\n\t2714:  \"raventdm\",\n\t2715:  \"hpstgmgr2\",\n\t2716:  \"inova-ip-disco\",\n\t2717:  \"pn-requester\",\n\t2718:  \"pn-requester2\",\n\t2719:  \"scan-change\",\n\t2720:  \"wkars\",\n\t2721:  \"smart-diagnose\",\n\t2722:  \"proactivesrvr\",\n\t2723:  \"watchdog-nt\",\n\t2724:  \"qotps\",\n\t2725:  \"msolap-ptp2\",\n\t2726:  \"tams\",\n\t2727:  \"mgcp-callagent\",\n\t2728:  \"sqdr\",\n\t2729:  \"tcim-control\",\n\t2730:  \"nec-raidplus\",\n\t2731:  \"fyre-messanger\",\n\t2732:  \"g5m\",\n\t2733:  \"signet-ctf\",\n\t2734:  \"ccs-software\",\n\t2735:  \"netiq-mc\",\n\t2736:  \"radwiz-nms-srv\",\n\t2737:  \"srp-feedback\",\n\t2738:  \"ndl-tcp-ois-gw\",\n\t2739:  \"tn-timing\",\n\t2740:  \"alarm\",\n\t2741:  \"tsb\",\n\t2742:  \"tsb2\",\n\t2743:  \"murx\",\n\t2744:  \"honyaku\",\n\t2745:  \"urbisnet\",\n\t2746:  \"cpudpencap\",\n\t2747:  \"fjippol-swrly\",\n\t2748:  \"fjippol-polsvr\",\n\t2749:  \"fjippol-cnsl\",\n\t2750:  \"fjippol-port1\",\n\t2751:  \"fjippol-port2\",\n\t2752:  \"rsisysaccess\",\n\t2753:  \"de-spot\",\n\t2754:  \"apollo-cc\",\n\t2755:  \"expresspay\",\n\t2756:  \"simplement-tie\",\n\t2757:  \"cnrp\",\n\t2758:  \"apollo-status\",\n\t2759:  \"apollo-gms\",\n\t2760:  \"sabams\",\n\t2761:  \"dicom-iscl\",\n\t2762:  \"dicom-tls\",\n\t2763:  \"desktop-dna\",\n\t2764:  \"data-insurance\",\n\t2765:  \"qip-audup\",\n\t2766:  \"compaq-scp\",\n\t2767:  \"uadtc\",\n\t2768:  \"uacs\",\n\t2769:  \"exce\",\n\t2770:  \"veronica\",\n\t2771:  \"vergencecm\",\n\t2772:  \"auris\",\n\t2773:  \"rbakcup1\",\n\t2774:  \"rbakcup2\",\n\t2775:  \"smpp\",\n\t2776:  \"ridgeway1\",\n\t2777:  \"ridgeway2\",\n\t2778:  \"gwen-sonya\",\n\t2779:  \"lbc-sync\",\n\t2780:  \"lbc-control\",\n\t2781:  \"whosells\",\n\t2782:  \"everydayrc\",\n\t2783:  \"aises\",\n\t2784:  \"www-dev\",\n\t2785:  \"aic-np\",\n\t2786:  \"aic-oncrpc\",\n\t2787:  \"piccolo\",\n\t2788:  \"fryeserv\",\n\t2789:  \"media-agent\",\n\t2790:  \"plgproxy\",\n\t2791:  \"mtport-regist\",\n\t2792:  \"f5-globalsite\",\n\t2793:  \"initlsmsad\",\n\t2795:  \"livestats\",\n\t2796:  \"ac-tech\",\n\t2797:  \"esp-encap\",\n\t2798:  \"tmesis-upshot\",\n\t2799:  \"icon-discover\",\n\t2800:  \"acc-raid\",\n\t2801:  \"igcp\",\n\t2802:  \"veritas-udp1\",\n\t2803:  \"btprjctrl\",\n\t2804:  \"dvr-esm\",\n\t2805:  \"wta-wsp-s\",\n\t2806:  \"cspuni\",\n\t2807:  \"cspmulti\",\n\t2808:  \"j-lan-p\",\n\t2809:  \"corbaloc\",\n\t2810:  \"netsteward\",\n\t2811:  \"gsiftp\",\n\t2812:  \"atmtcp\",\n\t2813:  \"llm-pass\",\n\t2814:  \"llm-csv\",\n\t2815:  \"lbc-measure\",\n\t2816:  \"lbc-watchdog\",\n\t2817:  \"nmsigport\",\n\t2818:  \"rmlnk\",\n\t2819:  \"fc-faultnotify\",\n\t2820:  \"univision\",\n\t2821:  \"vrts-at-port\",\n\t2822:  \"ka0wuc\",\n\t2823:  \"cqg-netlan\",\n\t2824:  \"cqg-netlan-1\",\n\t2826:  \"slc-systemlog\",\n\t2827:  \"slc-ctrlrloops\",\n\t2828:  \"itm-lm\",\n\t2829:  \"silkp1\",\n\t2830:  \"silkp2\",\n\t2831:  \"silkp3\",\n\t2832:  \"silkp4\",\n\t2833:  \"glishd\",\n\t2834:  \"evtp\",\n\t2835:  \"evtp-data\",\n\t2836:  \"catalyst\",\n\t2837:  \"repliweb\",\n\t2838:  \"starbot\",\n\t2839:  \"nmsigport\",\n\t2840:  \"l3-exprt\",\n\t2841:  \"l3-ranger\",\n\t2842:  \"l3-hawk\",\n\t2843:  \"pdnet\",\n\t2844:  \"bpcp-poll\",\n\t2845:  \"bpcp-trap\",\n\t2846:  \"aimpp-hello\",\n\t2847:  \"aimpp-port-req\",\n\t2848:  \"amt-blc-port\",\n\t2849:  \"fxp\",\n\t2850:  \"metaconsole\",\n\t2851:  \"webemshttp\",\n\t2852:  \"bears-01\",\n\t2853:  \"ispipes\",\n\t2854:  \"infomover\",\n\t2856:  \"cesdinv\",\n\t2857:  \"simctlp\",\n\t2858:  \"ecnp\",\n\t2859:  \"activememory\",\n\t2860:  \"dialpad-voice1\",\n\t2861:  \"dialpad-voice2\",\n\t2862:  \"ttg-protocol\",\n\t2863:  \"sonardata\",\n\t2864:  \"astromed-main\",\n\t2865:  \"pit-vpn\",\n\t2866:  \"iwlistener\",\n\t2867:  \"esps-portal\",\n\t2868:  \"npep-messaging\",\n\t2869:  \"icslap\",\n\t2870:  \"daishi\",\n\t2871:  \"msi-selectplay\",\n\t2872:  \"radix\",\n\t2874:  \"dxmessagebase1\",\n\t2875:  \"dxmessagebase2\",\n\t2876:  \"sps-tunnel\",\n\t2877:  \"bluelance\",\n\t2878:  \"aap\",\n\t2879:  \"ucentric-ds\",\n\t2880:  \"synapse\",\n\t2881:  \"ndsp\",\n\t2882:  \"ndtp\",\n\t2883:  \"ndnp\",\n\t2884:  \"flashmsg\",\n\t2885:  \"topflow\",\n\t2886:  \"responselogic\",\n\t2887:  \"aironetddp\",\n\t2888:  \"spcsdlobby\",\n\t2889:  \"rsom\",\n\t2890:  \"cspclmulti\",\n\t2891:  \"cinegrfx-elmd\",\n\t2892:  \"snifferdata\",\n\t2893:  \"vseconnector\",\n\t2894:  \"abacus-remote\",\n\t2895:  \"natuslink\",\n\t2896:  \"ecovisiong6-1\",\n\t2897:  \"citrix-rtmp\",\n\t2898:  \"appliance-cfg\",\n\t2899:  \"powergemplus\",\n\t2900:  \"quicksuite\",\n\t2901:  \"allstorcns\",\n\t2902:  \"netaspi\",\n\t2903:  \"suitcase\",\n\t2904:  \"m2ua\",\n\t2906:  \"caller9\",\n\t2907:  \"webmethods-b2b\",\n\t2908:  \"mao\",\n\t2909:  \"funk-dialout\",\n\t2910:  \"tdaccess\",\n\t2911:  \"blockade\",\n\t2912:  \"epicon\",\n\t2913:  \"boosterware\",\n\t2914:  \"gamelobby\",\n\t2915:  \"tksocket\",\n\t2916:  \"elvin-server\",\n\t2917:  \"elvin-client\",\n\t2918:  \"kastenchasepad\",\n\t2919:  \"roboer\",\n\t2920:  \"roboeda\",\n\t2921:  \"cesdcdman\",\n\t2922:  \"cesdcdtrn\",\n\t2923:  \"wta-wsp-wtp-s\",\n\t2924:  \"precise-vip\",\n\t2926:  \"mobile-file-dl\",\n\t2927:  \"unimobilectrl\",\n\t2928:  \"redstone-cpss\",\n\t2929:  \"amx-webadmin\",\n\t2930:  \"amx-weblinx\",\n\t2931:  \"circle-x\",\n\t2932:  \"incp\",\n\t2933:  \"4-tieropmgw\",\n\t2934:  \"4-tieropmcli\",\n\t2935:  \"qtp\",\n\t2936:  \"otpatch\",\n\t2937:  \"pnaconsult-lm\",\n\t2938:  \"sm-pas-1\",\n\t2939:  \"sm-pas-2\",\n\t2940:  \"sm-pas-3\",\n\t2941:  \"sm-pas-4\",\n\t2942:  \"sm-pas-5\",\n\t2943:  \"ttnrepository\",\n\t2944:  \"megaco-h248\",\n\t2945:  \"h248-binary\",\n\t2946:  \"fjsvmpor\",\n\t2947:  \"gpsd\",\n\t2948:  \"wap-push\",\n\t2949:  \"wap-pushsecure\",\n\t2950:  \"esip\",\n\t2951:  \"ottp\",\n\t2952:  \"mpfwsas\",\n\t2953:  \"ovalarmsrv\",\n\t2954:  \"ovalarmsrv-cmd\",\n\t2955:  \"csnotify\",\n\t2956:  \"ovrimosdbman\",\n\t2957:  \"jmact5\",\n\t2958:  \"jmact6\",\n\t2959:  \"rmopagt\",\n\t2960:  \"dfoxserver\",\n\t2961:  \"boldsoft-lm\",\n\t2962:  \"iph-policy-cli\",\n\t2963:  \"iph-policy-adm\",\n\t2964:  \"bullant-srap\",\n\t2965:  \"bullant-rap\",\n\t2966:  \"idp-infotrieve\",\n\t2967:  \"ssc-agent\",\n\t2968:  \"enpp\",\n\t2969:  \"essp\",\n\t2970:  \"index-net\",\n\t2971:  \"netclip\",\n\t2972:  \"pmsm-webrctl\",\n\t2973:  \"svnetworks\",\n\t2974:  \"signal\",\n\t2975:  \"fjmpcm\",\n\t2976:  \"cns-srv-port\",\n\t2977:  \"ttc-etap-ns\",\n\t2978:  \"ttc-etap-ds\",\n\t2979:  \"h263-video\",\n\t2980:  \"wimd\",\n\t2981:  \"mylxamport\",\n\t2982:  \"iwb-whiteboard\",\n\t2983:  \"netplan\",\n\t2984:  \"hpidsadmin\",\n\t2985:  \"hpidsagent\",\n\t2986:  \"stonefalls\",\n\t2987:  \"identify\",\n\t2988:  \"hippad\",\n\t2989:  \"zarkov\",\n\t2990:  \"boscap\",\n\t2991:  \"wkstn-mon\",\n\t2992:  \"avenyo\",\n\t2993:  \"veritas-vis1\",\n\t2994:  \"veritas-vis2\",\n\t2995:  \"idrs\",\n\t2996:  \"vsixml\",\n\t2997:  \"rebol\",\n\t2998:  \"realsecure\",\n\t2999:  \"remoteware-un\",\n\t3000:  \"hbci\",\n\t3002:  \"exlm-agent\",\n\t3003:  \"cgms\",\n\t3004:  \"csoftragent\",\n\t3005:  \"geniuslm\",\n\t3006:  \"ii-admin\",\n\t3007:  \"lotusmtap\",\n\t3008:  \"midnight-tech\",\n\t3009:  \"pxc-ntfy\",\n\t3010:  \"ping-pong\",\n\t3011:  \"trusted-web\",\n\t3012:  \"twsdss\",\n\t3013:  \"gilatskysurfer\",\n\t3014:  \"broker-service\",\n\t3015:  \"nati-dstp\",\n\t3016:  \"notify-srvr\",\n\t3017:  \"event-listener\",\n\t3018:  \"srvc-registry\",\n\t3019:  \"resource-mgr\",\n\t3020:  \"cifs\",\n\t3021:  \"agriserver\",\n\t3022:  \"csregagent\",\n\t3023:  \"magicnotes\",\n\t3024:  \"nds-sso\",\n\t3025:  \"arepa-raft\",\n\t3026:  \"agri-gateway\",\n\t3027:  \"LiebDevMgmt-C\",\n\t3028:  \"LiebDevMgmt-DM\",\n\t3029:  \"LiebDevMgmt-A\",\n\t3030:  \"arepa-cas\",\n\t3031:  \"eppc\",\n\t3032:  \"redwood-chat\",\n\t3033:  \"pdb\",\n\t3034:  \"osmosis-aeea\",\n\t3035:  \"fjsv-gssagt\",\n\t3036:  \"hagel-dump\",\n\t3037:  \"hp-san-mgmt\",\n\t3038:  \"santak-ups\",\n\t3039:  \"cogitate\",\n\t3040:  \"tomato-springs\",\n\t3041:  \"di-traceware\",\n\t3042:  \"journee\",\n\t3043:  \"brp\",\n\t3044:  \"epp\",\n\t3045:  \"responsenet\",\n\t3046:  \"di-ase\",\n\t3047:  \"hlserver\",\n\t3048:  \"pctrader\",\n\t3049:  \"nsws\",\n\t3050:  \"gds-db\",\n\t3051:  \"galaxy-server\",\n\t3052:  \"apc-3052\",\n\t3053:  \"dsom-server\",\n\t3054:  \"amt-cnf-prot\",\n\t3055:  \"policyserver\",\n\t3056:  \"cdl-server\",\n\t3057:  \"goahead-fldup\",\n\t3058:  \"videobeans\",\n\t3059:  \"qsoft\",\n\t3060:  \"interserver\",\n\t3061:  \"cautcpd\",\n\t3062:  \"ncacn-ip-tcp\",\n\t3063:  \"ncadg-ip-udp\",\n\t3064:  \"rprt\",\n\t3065:  \"slinterbase\",\n\t3066:  \"netattachsdmp\",\n\t3067:  \"fjhpjp\",\n\t3068:  \"ls3bcast\",\n\t3069:  \"ls3\",\n\t3070:  \"mgxswitch\",\n\t3072:  \"csd-monitor\",\n\t3073:  \"vcrp\",\n\t3074:  \"xbox\",\n\t3075:  \"orbix-locator\",\n\t3076:  \"orbix-config\",\n\t3077:  \"orbix-loc-ssl\",\n\t3078:  \"orbix-cfg-ssl\",\n\t3079:  \"lv-frontpanel\",\n\t3080:  \"stm-pproc\",\n\t3081:  \"tl1-lv\",\n\t3082:  \"tl1-raw\",\n\t3083:  \"tl1-telnet\",\n\t3084:  \"itm-mccs\",\n\t3085:  \"pcihreq\",\n\t3086:  \"jdl-dbkitchen\",\n\t3087:  \"asoki-sma\",\n\t3088:  \"xdtp\",\n\t3089:  \"ptk-alink\",\n\t3090:  \"stss\",\n\t3091:  \"1ci-smcs\",\n\t3093:  \"rapidmq-center\",\n\t3094:  \"rapidmq-reg\",\n\t3095:  \"panasas\",\n\t3096:  \"ndl-aps\",\n\t3098:  \"umm-port\",\n\t3099:  \"chmd\",\n\t3100:  \"opcon-xps\",\n\t3101:  \"hp-pxpib\",\n\t3102:  \"slslavemon\",\n\t3103:  \"autocuesmi\",\n\t3104:  \"autocuetime\",\n\t3105:  \"cardbox\",\n\t3106:  \"cardbox-http\",\n\t3107:  \"business\",\n\t3108:  \"geolocate\",\n\t3109:  \"personnel\",\n\t3110:  \"sim-control\",\n\t3111:  \"wsynch\",\n\t3112:  \"ksysguard\",\n\t3113:  \"cs-auth-svr\",\n\t3114:  \"ccmad\",\n\t3115:  \"mctet-master\",\n\t3116:  \"mctet-gateway\",\n\t3117:  \"mctet-jserv\",\n\t3118:  \"pkagent\",\n\t3119:  \"d2000kernel\",\n\t3120:  \"d2000webserver\",\n\t3122:  \"vtr-emulator\",\n\t3123:  \"edix\",\n\t3124:  \"beacon-port\",\n\t3125:  \"a13-an\",\n\t3127:  \"ctx-bridge\",\n\t3128:  \"ndl-aas\",\n\t3129:  \"netport-id\",\n\t3130:  \"icpv2\",\n\t3131:  \"netbookmark\",\n\t3132:  \"ms-rule-engine\",\n\t3133:  \"prism-deploy\",\n\t3134:  \"ecp\",\n\t3135:  \"peerbook-port\",\n\t3136:  \"grubd\",\n\t3137:  \"rtnt-1\",\n\t3138:  \"rtnt-2\",\n\t3139:  \"incognitorv\",\n\t3140:  \"ariliamulti\",\n\t3141:  \"vmodem\",\n\t3142:  \"rdc-wh-eos\",\n\t3143:  \"seaview\",\n\t3144:  \"tarantella\",\n\t3145:  \"csi-lfap\",\n\t3146:  \"bears-02\",\n\t3147:  \"rfio\",\n\t3148:  \"nm-game-admin\",\n\t3149:  \"nm-game-server\",\n\t3150:  \"nm-asses-admin\",\n\t3151:  \"nm-assessor\",\n\t3152:  \"feitianrockey\",\n\t3153:  \"s8-client-port\",\n\t3154:  \"ccmrmi\",\n\t3155:  \"jpegmpeg\",\n\t3156:  \"indura\",\n\t3157:  \"e3consultants\",\n\t3158:  \"stvp\",\n\t3159:  \"navegaweb-port\",\n\t3160:  \"tip-app-server\",\n\t3161:  \"doc1lm\",\n\t3162:  \"sflm\",\n\t3163:  \"res-sap\",\n\t3164:  \"imprs\",\n\t3165:  \"newgenpay\",\n\t3166:  \"sossecollector\",\n\t3167:  \"nowcontact\",\n\t3168:  \"poweronnud\",\n\t3169:  \"serverview-as\",\n\t3170:  \"serverview-asn\",\n\t3171:  \"serverview-gf\",\n\t3172:  \"serverview-rm\",\n\t3173:  \"serverview-icc\",\n\t3174:  \"armi-server\",\n\t3175:  \"t1-e1-over-ip\",\n\t3176:  \"ars-master\",\n\t3177:  \"phonex-port\",\n\t3178:  \"radclientport\",\n\t3179:  \"h2gf-w-2m\",\n\t3180:  \"mc-brk-srv\",\n\t3181:  \"bmcpatrolagent\",\n\t3182:  \"bmcpatrolrnvu\",\n\t3183:  \"cops-tls\",\n\t3184:  \"apogeex-port\",\n\t3185:  \"smpppd\",\n\t3186:  \"iiw-port\",\n\t3187:  \"odi-port\",\n\t3188:  \"brcm-comm-port\",\n\t3189:  \"pcle-infex\",\n\t3190:  \"csvr-proxy\",\n\t3191:  \"csvr-sslproxy\",\n\t3192:  \"firemonrcc\",\n\t3193:  \"spandataport\",\n\t3194:  \"magbind\",\n\t3195:  \"ncu-1\",\n\t3196:  \"ncu-2\",\n\t3197:  \"embrace-dp-s\",\n\t3198:  \"embrace-dp-c\",\n\t3199:  \"dmod-workspace\",\n\t3200:  \"tick-port\",\n\t3201:  \"cpq-tasksmart\",\n\t3202:  \"intraintra\",\n\t3203:  \"netwatcher-mon\",\n\t3204:  \"netwatcher-db\",\n\t3205:  \"isns\",\n\t3206:  \"ironmail\",\n\t3207:  \"vx-auth-port\",\n\t3208:  \"pfu-prcallback\",\n\t3209:  \"netwkpathengine\",\n\t3210:  \"flamenco-proxy\",\n\t3211:  \"avsecuremgmt\",\n\t3212:  \"surveyinst\",\n\t3213:  \"neon24x7\",\n\t3214:  \"jmq-daemon-1\",\n\t3215:  \"jmq-daemon-2\",\n\t3216:  \"ferrari-foam\",\n\t3217:  \"unite\",\n\t3218:  \"smartpackets\",\n\t3219:  \"wms-messenger\",\n\t3220:  \"xnm-ssl\",\n\t3221:  \"xnm-clear-text\",\n\t3222:  \"glbp\",\n\t3223:  \"digivote\",\n\t3224:  \"aes-discovery\",\n\t3225:  \"fcip-port\",\n\t3226:  \"isi-irp\",\n\t3227:  \"dwnmshttp\",\n\t3228:  \"dwmsgserver\",\n\t3229:  \"global-cd-port\",\n\t3230:  \"sftdst-port\",\n\t3231:  \"vidigo\",\n\t3232:  \"mdtp\",\n\t3233:  \"whisker\",\n\t3234:  \"alchemy\",\n\t3235:  \"mdap-port\",\n\t3236:  \"apparenet-ts\",\n\t3237:  \"apparenet-tps\",\n\t3238:  \"apparenet-as\",\n\t3239:  \"apparenet-ui\",\n\t3240:  \"triomotion\",\n\t3241:  \"sysorb\",\n\t3242:  \"sdp-id-port\",\n\t3243:  \"timelot\",\n\t3244:  \"onesaf\",\n\t3245:  \"vieo-fe\",\n\t3246:  \"dvt-system\",\n\t3247:  \"dvt-data\",\n\t3248:  \"procos-lm\",\n\t3249:  \"ssp\",\n\t3250:  \"hicp\",\n\t3251:  \"sysscanner\",\n\t3252:  \"dhe\",\n\t3253:  \"pda-data\",\n\t3254:  \"pda-sys\",\n\t3255:  \"semaphore\",\n\t3256:  \"cpqrpm-agent\",\n\t3257:  \"cpqrpm-server\",\n\t3258:  \"ivecon-port\",\n\t3259:  \"epncdp2\",\n\t3260:  \"iscsi-target\",\n\t3261:  \"winshadow\",\n\t3262:  \"necp\",\n\t3263:  \"ecolor-imager\",\n\t3264:  \"ccmail\",\n\t3265:  \"altav-tunnel\",\n\t3266:  \"ns-cfg-server\",\n\t3267:  \"ibm-dial-out\",\n\t3268:  \"msft-gc\",\n\t3269:  \"msft-gc-ssl\",\n\t3270:  \"verismart\",\n\t3271:  \"csoft-prev\",\n\t3272:  \"user-manager\",\n\t3273:  \"sxmp\",\n\t3274:  \"ordinox-server\",\n\t3275:  \"samd\",\n\t3276:  \"maxim-asics\",\n\t3277:  \"awg-proxy\",\n\t3278:  \"lkcmserver\",\n\t3279:  \"admind\",\n\t3280:  \"vs-server\",\n\t3281:  \"sysopt\",\n\t3282:  \"datusorb\",\n\t3283:  \"Apple Remote Desktop (Net Assistant)\",\n\t3284:  \"4talk\",\n\t3285:  \"plato\",\n\t3286:  \"e-net\",\n\t3287:  \"directvdata\",\n\t3288:  \"cops\",\n\t3289:  \"enpc\",\n\t3290:  \"caps-lm\",\n\t3291:  \"sah-lm\",\n\t3292:  \"cart-o-rama\",\n\t3293:  \"fg-fps\",\n\t3294:  \"fg-gip\",\n\t3295:  \"dyniplookup\",\n\t3296:  \"rib-slm\",\n\t3297:  \"cytel-lm\",\n\t3298:  \"deskview\",\n\t3299:  \"pdrncs\",\n\t3302:  \"mcs-fastmail\",\n\t3303:  \"opsession-clnt\",\n\t3304:  \"opsession-srvr\",\n\t3305:  \"odette-ftp\",\n\t3306:  \"mysql\",\n\t3307:  \"opsession-prxy\",\n\t3308:  \"tns-server\",\n\t3309:  \"tns-adv\",\n\t3310:  \"dyna-access\",\n\t3311:  \"mcns-tel-ret\",\n\t3312:  \"appman-server\",\n\t3313:  \"uorb\",\n\t3314:  \"uohost\",\n\t3315:  \"cdid\",\n\t3316:  \"aicc-cmi\",\n\t3317:  \"vsaiport\",\n\t3318:  \"ssrip\",\n\t3319:  \"sdt-lmd\",\n\t3320:  \"officelink2000\",\n\t3321:  \"vnsstr\",\n\t3326:  \"sftu\",\n\t3327:  \"bbars\",\n\t3328:  \"egptlm\",\n\t3329:  \"hp-device-disc\",\n\t3330:  \"mcs-calypsoicf\",\n\t3331:  \"mcs-messaging\",\n\t3332:  \"mcs-mailsvr\",\n\t3333:  \"dec-notes\",\n\t3334:  \"directv-web\",\n\t3335:  \"directv-soft\",\n\t3336:  \"directv-tick\",\n\t3337:  \"directv-catlg\",\n\t3338:  \"anet-b\",\n\t3339:  \"anet-l\",\n\t3340:  \"anet-m\",\n\t3341:  \"anet-h\",\n\t3342:  \"webtie\",\n\t3343:  \"ms-cluster-net\",\n\t3344:  \"bnt-manager\",\n\t3345:  \"influence\",\n\t3346:  \"trnsprntproxy\",\n\t3347:  \"phoenix-rpc\",\n\t3348:  \"pangolin-laser\",\n\t3349:  \"chevinservices\",\n\t3350:  \"findviatv\",\n\t3351:  \"btrieve\",\n\t3352:  \"ssql\",\n\t3353:  \"fatpipe\",\n\t3354:  \"suitjd\",\n\t3355:  \"ordinox-dbase\",\n\t3356:  \"upnotifyps\",\n\t3357:  \"adtech-test\",\n\t3358:  \"mpsysrmsvr\",\n\t3359:  \"wg-netforce\",\n\t3360:  \"kv-server\",\n\t3361:  \"kv-agent\",\n\t3362:  \"dj-ilm\",\n\t3363:  \"nati-vi-server\",\n\t3364:  \"creativeserver\",\n\t3365:  \"contentserver\",\n\t3366:  \"creativepartnr\",\n\t3372:  \"tip2\",\n\t3373:  \"lavenir-lm\",\n\t3374:  \"cluster-disc\",\n\t3375:  \"vsnm-agent\",\n\t3376:  \"cdbroker\",\n\t3377:  \"cogsys-lm\",\n\t3378:  \"wsicopy\",\n\t3379:  \"socorfs\",\n\t3380:  \"sns-channels\",\n\t3381:  \"geneous\",\n\t3382:  \"fujitsu-neat\",\n\t3383:  \"esp-lm\",\n\t3384:  \"hp-clic\",\n\t3385:  \"qnxnetman\",\n\t3386:  \"gprs-sig\",\n\t3387:  \"backroomnet\",\n\t3388:  \"cbserver\",\n\t3389:  \"ms-wbt-server\",\n\t3390:  \"dsc\",\n\t3391:  \"savant\",\n\t3392:  \"efi-lm\",\n\t3393:  \"d2k-tapestry1\",\n\t3394:  \"d2k-tapestry2\",\n\t3395:  \"dyna-lm\",\n\t3396:  \"printer-agent\",\n\t3397:  \"cloanto-lm\",\n\t3398:  \"mercantile\",\n\t3399:  \"csms\",\n\t3400:  \"csms2\",\n\t3401:  \"filecast\",\n\t3402:  \"fxaengine-net\",\n\t3405:  \"nokia-ann-ch1\",\n\t3406:  \"nokia-ann-ch2\",\n\t3407:  \"ldap-admin\",\n\t3408:  \"BESApi\",\n\t3409:  \"networklens\",\n\t3410:  \"networklenss\",\n\t3411:  \"biolink-auth\",\n\t3412:  \"xmlblaster\",\n\t3413:  \"svnet\",\n\t3414:  \"wip-port\",\n\t3415:  \"bcinameservice\",\n\t3416:  \"commandport\",\n\t3417:  \"csvr\",\n\t3418:  \"rnmap\",\n\t3419:  \"softaudit\",\n\t3420:  \"ifcp-port\",\n\t3421:  \"bmap\",\n\t3422:  \"rusb-sys-port\",\n\t3423:  \"xtrm\",\n\t3424:  \"xtrms\",\n\t3425:  \"agps-port\",\n\t3426:  \"arkivio\",\n\t3427:  \"websphere-snmp\",\n\t3428:  \"twcss\",\n\t3429:  \"gcsp\",\n\t3430:  \"ssdispatch\",\n\t3431:  \"ndl-als\",\n\t3432:  \"osdcp\",\n\t3433:  \"opnet-smp\",\n\t3434:  \"opencm\",\n\t3435:  \"pacom\",\n\t3436:  \"gc-config\",\n\t3437:  \"autocueds\",\n\t3438:  \"spiral-admin\",\n\t3439:  \"hri-port\",\n\t3440:  \"ans-console\",\n\t3441:  \"connect-client\",\n\t3442:  \"connect-server\",\n\t3443:  \"ov-nnm-websrv\",\n\t3444:  \"denali-server\",\n\t3445:  \"monp\",\n\t3446:  \"3comfaxrpc\",\n\t3447:  \"directnet\",\n\t3448:  \"dnc-port\",\n\t3449:  \"hotu-chat\",\n\t3450:  \"castorproxy\",\n\t3451:  \"asam\",\n\t3452:  \"sabp-signal\",\n\t3453:  \"pscupd\",\n\t3454:  \"mira\",\n\t3455:  \"prsvp\",\n\t3456:  \"vat\",\n\t3457:  \"vat-control\",\n\t3458:  \"d3winosfi\",\n\t3459:  \"integral\",\n\t3460:  \"edm-manager\",\n\t3461:  \"edm-stager\",\n\t3462:  \"edm-std-notify\",\n\t3463:  \"edm-adm-notify\",\n\t3464:  \"edm-mgr-sync\",\n\t3465:  \"edm-mgr-cntrl\",\n\t3466:  \"workflow\",\n\t3467:  \"rcst\",\n\t3468:  \"ttcmremotectrl\",\n\t3469:  \"pluribus\",\n\t3470:  \"jt400\",\n\t3471:  \"jt400-ssl\",\n\t3472:  \"jaugsremotec-1\",\n\t3473:  \"jaugsremotec-2\",\n\t3474:  \"ttntspauto\",\n\t3475:  \"genisar-port\",\n\t3476:  \"nppmp\",\n\t3477:  \"ecomm\",\n\t3478:  \"stun\",\n\t3479:  \"twrpc\",\n\t3480:  \"plethora\",\n\t3481:  \"cleanerliverc\",\n\t3482:  \"vulture\",\n\t3483:  \"slim-devices\",\n\t3484:  \"gbs-stp\",\n\t3485:  \"celatalk\",\n\t3486:  \"ifsf-hb-port\",\n\t3487:  \"ltcudp\",\n\t3488:  \"fs-rh-srv\",\n\t3489:  \"dtp-dia\",\n\t3490:  \"colubris\",\n\t3491:  \"swr-port\",\n\t3492:  \"tvdumtray-port\",\n\t3493:  \"nut\",\n\t3494:  \"ibm3494\",\n\t3495:  \"seclayer-tcp\",\n\t3496:  \"seclayer-tls\",\n\t3497:  \"ipether232port\",\n\t3498:  \"dashpas-port\",\n\t3499:  \"sccip-media\",\n\t3500:  \"rtmp-port\",\n\t3501:  \"isoft-p2p\",\n\t3502:  \"avinstalldisc\",\n\t3503:  \"lsp-ping\",\n\t3504:  \"ironstorm\",\n\t3505:  \"ccmcomm\",\n\t3506:  \"apc-3506\",\n\t3507:  \"nesh-broker\",\n\t3508:  \"interactionweb\",\n\t3509:  \"vt-ssl\",\n\t3510:  \"xss-port\",\n\t3511:  \"webmail-2\",\n\t3512:  \"aztec\",\n\t3513:  \"arcpd\",\n\t3514:  \"must-p2p\",\n\t3515:  \"must-backplane\",\n\t3516:  \"smartcard-port\",\n\t3517:  \"802-11-iapp\",\n\t3518:  \"artifact-msg\",\n\t3519:  \"galileo\",\n\t3520:  \"galileolog\",\n\t3521:  \"mc3ss\",\n\t3522:  \"nssocketport\",\n\t3523:  \"odeumservlink\",\n\t3524:  \"ecmport\",\n\t3525:  \"eisport\",\n\t3526:  \"starquiz-port\",\n\t3527:  \"beserver-msg-q\",\n\t3528:  \"jboss-iiop\",\n\t3529:  \"jboss-iiop-ssl\",\n\t3530:  \"gf\",\n\t3531:  \"joltid\",\n\t3532:  \"raven-rmp\",\n\t3533:  \"raven-rdp\",\n\t3534:  \"urld-port\",\n\t3535:  \"ms-la\",\n\t3536:  \"snac\",\n\t3537:  \"ni-visa-remote\",\n\t3538:  \"ibm-diradm\",\n\t3539:  \"ibm-diradm-ssl\",\n\t3540:  \"pnrp-port\",\n\t3541:  \"voispeed-port\",\n\t3542:  \"hacl-monitor\",\n\t3543:  \"qftest-lookup\",\n\t3544:  \"teredo\",\n\t3545:  \"camac\",\n\t3547:  \"symantec-sim\",\n\t3548:  \"interworld\",\n\t3549:  \"tellumat-nms\",\n\t3550:  \"ssmpp\",\n\t3551:  \"apcupsd\",\n\t3552:  \"taserver\",\n\t3553:  \"rbr-discovery\",\n\t3554:  \"questnotify\",\n\t3555:  \"razor\",\n\t3556:  \"sky-transport\",\n\t3557:  \"personalos-001\",\n\t3558:  \"mcp-port\",\n\t3559:  \"cctv-port\",\n\t3560:  \"iniserve-port\",\n\t3561:  \"bmc-onekey\",\n\t3562:  \"sdbproxy\",\n\t3563:  \"watcomdebug\",\n\t3564:  \"esimport\",\n\t3567:  \"dof-eps\",\n\t3568:  \"dof-tunnel-sec\",\n\t3569:  \"mbg-ctrl\",\n\t3570:  \"mccwebsvr-port\",\n\t3571:  \"megardsvr-port\",\n\t3572:  \"megaregsvrport\",\n\t3573:  \"tag-ups-1\",\n\t3574:  \"dmaf-caster\",\n\t3575:  \"ccm-port\",\n\t3576:  \"cmc-port\",\n\t3577:  \"config-port\",\n\t3578:  \"data-port\",\n\t3579:  \"ttat3lb\",\n\t3580:  \"nati-svrloc\",\n\t3581:  \"kfxaclicensing\",\n\t3582:  \"press\",\n\t3583:  \"canex-watch\",\n\t3584:  \"u-dbap\",\n\t3585:  \"emprise-lls\",\n\t3586:  \"emprise-lsc\",\n\t3587:  \"p2pgroup\",\n\t3588:  \"sentinel\",\n\t3589:  \"isomair\",\n\t3590:  \"wv-csp-sms\",\n\t3591:  \"gtrack-server\",\n\t3592:  \"gtrack-ne\",\n\t3593:  \"bpmd\",\n\t3594:  \"mediaspace\",\n\t3595:  \"shareapp\",\n\t3596:  \"iw-mmogame\",\n\t3597:  \"a14\",\n\t3598:  \"a15\",\n\t3599:  \"quasar-server\",\n\t3600:  \"trap-daemon\",\n\t3601:  \"visinet-gui\",\n\t3602:  \"infiniswitchcl\",\n\t3603:  \"int-rcv-cntrl\",\n\t3604:  \"bmc-jmx-port\",\n\t3605:  \"comcam-io\",\n\t3606:  \"splitlock\",\n\t3607:  \"precise-i3\",\n\t3608:  \"trendchip-dcp\",\n\t3609:  \"cpdi-pidas-cm\",\n\t3610:  \"echonet\",\n\t3611:  \"six-degrees\",\n\t3612:  \"hp-dataprotect\",\n\t3613:  \"alaris-disc\",\n\t3614:  \"sigma-port\",\n\t3615:  \"start-network\",\n\t3616:  \"cd3o-protocol\",\n\t3617:  \"sharp-server\",\n\t3618:  \"aairnet-1\",\n\t3619:  \"aairnet-2\",\n\t3620:  \"ep-pcp\",\n\t3621:  \"ep-nsp\",\n\t3622:  \"ff-lr-port\",\n\t3623:  \"haipe-discover\",\n\t3624:  \"dist-upgrade\",\n\t3625:  \"volley\",\n\t3626:  \"bvcdaemon-port\",\n\t3627:  \"jamserverport\",\n\t3628:  \"ept-machine\",\n\t3629:  \"escvpnet\",\n\t3630:  \"cs-remote-db\",\n\t3631:  \"cs-services\",\n\t3632:  \"distcc\",\n\t3633:  \"wacp\",\n\t3634:  \"hlibmgr\",\n\t3635:  \"sdo\",\n\t3636:  \"servistaitsm\",\n\t3637:  \"scservp\",\n\t3638:  \"ehp-backup\",\n\t3639:  \"xap-ha\",\n\t3640:  \"netplay-port1\",\n\t3641:  \"netplay-port2\",\n\t3642:  \"juxml-port\",\n\t3643:  \"audiojuggler\",\n\t3644:  \"ssowatch\",\n\t3645:  \"cyc\",\n\t3646:  \"xss-srv-port\",\n\t3647:  \"splitlock-gw\",\n\t3648:  \"fjcp\",\n\t3649:  \"nmmp\",\n\t3650:  \"prismiq-plugin\",\n\t3651:  \"xrpc-registry\",\n\t3652:  \"vxcrnbuport\",\n\t3653:  \"tsp\",\n\t3654:  \"vaprtm\",\n\t3655:  \"abatemgr\",\n\t3656:  \"abatjss\",\n\t3657:  \"immedianet-bcn\",\n\t3658:  \"ps-ams\",\n\t3659:  \"apple-sasl\",\n\t3660:  \"can-nds-ssl\",\n\t3661:  \"can-ferret-ssl\",\n\t3662:  \"pserver\",\n\t3663:  \"dtp\",\n\t3664:  \"ups-engine\",\n\t3665:  \"ent-engine\",\n\t3666:  \"eserver-pap\",\n\t3667:  \"infoexch\",\n\t3668:  \"dell-rm-port\",\n\t3669:  \"casanswmgmt\",\n\t3670:  \"smile\",\n\t3671:  \"efcp\",\n\t3672:  \"lispworks-orb\",\n\t3673:  \"mediavault-gui\",\n\t3674:  \"wininstall-ipc\",\n\t3675:  \"calltrax\",\n\t3676:  \"va-pacbase\",\n\t3677:  \"roverlog\",\n\t3678:  \"ipr-dglt\",\n\t3679:  \"Escale (Newton Dock)\",\n\t3680:  \"npds-tracker\",\n\t3681:  \"bts-x73\",\n\t3682:  \"cas-mapi\",\n\t3683:  \"bmc-ea\",\n\t3684:  \"faxstfx-port\",\n\t3685:  \"dsx-agent\",\n\t3686:  \"tnmpv2\",\n\t3687:  \"simple-push\",\n\t3688:  \"simple-push-s\",\n\t3689:  \"daap\",\n\t3690:  \"svn\",\n\t3691:  \"magaya-network\",\n\t3692:  \"intelsync\",\n\t3695:  \"bmc-data-coll\",\n\t3696:  \"telnetcpcd\",\n\t3697:  \"nw-license\",\n\t3698:  \"sagectlpanel\",\n\t3699:  \"kpn-icw\",\n\t3700:  \"lrs-paging\",\n\t3701:  \"netcelera\",\n\t3702:  \"ws-discovery\",\n\t3703:  \"adobeserver-3\",\n\t3704:  \"adobeserver-4\",\n\t3705:  \"adobeserver-5\",\n\t3706:  \"rt-event\",\n\t3707:  \"rt-event-s\",\n\t3708:  \"sun-as-iiops\",\n\t3709:  \"ca-idms\",\n\t3710:  \"portgate-auth\",\n\t3711:  \"edb-server2\",\n\t3712:  \"sentinel-ent\",\n\t3713:  \"tftps\",\n\t3714:  \"delos-dms\",\n\t3715:  \"anoto-rendezv\",\n\t3716:  \"wv-csp-sms-cir\",\n\t3717:  \"wv-csp-udp-cir\",\n\t3718:  \"opus-services\",\n\t3719:  \"itelserverport\",\n\t3720:  \"ufastro-instr\",\n\t3721:  \"xsync\",\n\t3722:  \"xserveraid\",\n\t3723:  \"sychrond\",\n\t3724:  \"blizwow\",\n\t3725:  \"na-er-tip\",\n\t3726:  \"array-manager\",\n\t3727:  \"e-mdu\",\n\t3728:  \"e-woa\",\n\t3729:  \"fksp-audit\",\n\t3730:  \"client-ctrl\",\n\t3731:  \"smap\",\n\t3732:  \"m-wnn\",\n\t3733:  \"multip-msg\",\n\t3734:  \"synel-data\",\n\t3735:  \"pwdis\",\n\t3736:  \"rs-rmi\",\n\t3738:  \"versatalk\",\n\t3739:  \"launchbird-lm\",\n\t3740:  \"heartbeat\",\n\t3741:  \"wysdma\",\n\t3742:  \"cst-port\",\n\t3743:  \"ipcs-command\",\n\t3744:  \"sasg\",\n\t3745:  \"gw-call-port\",\n\t3746:  \"linktest\",\n\t3747:  \"linktest-s\",\n\t3748:  \"webdata\",\n\t3749:  \"cimtrak\",\n\t3750:  \"cbos-ip-port\",\n\t3751:  \"gprs-cube\",\n\t3752:  \"vipremoteagent\",\n\t3753:  \"nattyserver\",\n\t3754:  \"timestenbroker\",\n\t3755:  \"sas-remote-hlp\",\n\t3756:  \"canon-capt\",\n\t3757:  \"grf-port\",\n\t3758:  \"apw-registry\",\n\t3759:  \"exapt-lmgr\",\n\t3760:  \"adtempusclient\",\n\t3761:  \"gsakmp\",\n\t3762:  \"gbs-smp\",\n\t3763:  \"xo-wave\",\n\t3764:  \"mni-prot-rout\",\n\t3765:  \"rtraceroute\",\n\t3767:  \"listmgr-port\",\n\t3768:  \"rblcheckd\",\n\t3769:  \"haipe-otnk\",\n\t3770:  \"cindycollab\",\n\t3771:  \"paging-port\",\n\t3772:  \"ctp\",\n\t3773:  \"ctdhercules\",\n\t3774:  \"zicom\",\n\t3775:  \"ispmmgr\",\n\t3776:  \"dvcprov-port\",\n\t3777:  \"jibe-eb\",\n\t3778:  \"c-h-it-port\",\n\t3779:  \"cognima\",\n\t3780:  \"nnp\",\n\t3781:  \"abcvoice-port\",\n\t3782:  \"iso-tp0s\",\n\t3783:  \"bim-pem\",\n\t3784:  \"bfd-control\",\n\t3785:  \"bfd-echo\",\n\t3786:  \"upstriggervsw\",\n\t3787:  \"fintrx\",\n\t3788:  \"isrp-port\",\n\t3789:  \"remotedeploy\",\n\t3790:  \"quickbooksrds\",\n\t3791:  \"tvnetworkvideo\",\n\t3792:  \"sitewatch\",\n\t3793:  \"dcsoftware\",\n\t3794:  \"jaus\",\n\t3795:  \"myblast\",\n\t3796:  \"spw-dialer\",\n\t3797:  \"idps\",\n\t3798:  \"minilock\",\n\t3799:  \"radius-dynauth\",\n\t3800:  \"pwgpsi\",\n\t3801:  \"ibm-mgr\",\n\t3802:  \"vhd\",\n\t3803:  \"soniqsync\",\n\t3804:  \"iqnet-port\",\n\t3805:  \"tcpdataserver\",\n\t3806:  \"wsmlb\",\n\t3807:  \"spugna\",\n\t3808:  \"sun-as-iiops-ca\",\n\t3809:  \"apocd\",\n\t3810:  \"wlanauth\",\n\t3811:  \"amp\",\n\t3812:  \"neto-wol-server\",\n\t3813:  \"rap-ip\",\n\t3814:  \"neto-dcs\",\n\t3815:  \"lansurveyorxml\",\n\t3816:  \"sunlps-http\",\n\t3817:  \"tapeware\",\n\t3818:  \"crinis-hb\",\n\t3819:  \"epl-slp\",\n\t3820:  \"scp\",\n\t3821:  \"pmcp\",\n\t3822:  \"acp-discovery\",\n\t3823:  \"acp-conduit\",\n\t3824:  \"acp-policy\",\n\t3825:  \"ffserver\",\n\t3826:  \"warmux\",\n\t3827:  \"netmpi\",\n\t3828:  \"neteh\",\n\t3829:  \"neteh-ext\",\n\t3830:  \"cernsysmgmtagt\",\n\t3831:  \"dvapps\",\n\t3832:  \"xxnetserver\",\n\t3833:  \"aipn-auth\",\n\t3834:  \"spectardata\",\n\t3835:  \"spectardb\",\n\t3836:  \"markem-dcp\",\n\t3837:  \"mkm-discovery\",\n\t3838:  \"sos\",\n\t3839:  \"amx-rms\",\n\t3840:  \"flirtmitmir\",\n\t3842:  \"nhci\",\n\t3843:  \"quest-agent\",\n\t3844:  \"rnm\",\n\t3845:  \"v-one-spp\",\n\t3846:  \"an-pcp\",\n\t3847:  \"msfw-control\",\n\t3848:  \"item\",\n\t3849:  \"spw-dnspreload\",\n\t3850:  \"qtms-bootstrap\",\n\t3851:  \"spectraport\",\n\t3852:  \"sse-app-config\",\n\t3853:  \"sscan\",\n\t3854:  \"stryker-com\",\n\t3855:  \"opentrac\",\n\t3856:  \"informer\",\n\t3857:  \"trap-port\",\n\t3858:  \"trap-port-mom\",\n\t3859:  \"nav-port\",\n\t3860:  \"sasp\",\n\t3861:  \"winshadow-hd\",\n\t3862:  \"giga-pocket\",\n\t3863:  \"asap-udp\",\n\t3865:  \"xpl\",\n\t3866:  \"dzdaemon\",\n\t3867:  \"dzoglserver\",\n\t3869:  \"ovsam-mgmt\",\n\t3870:  \"ovsam-d-agent\",\n\t3871:  \"avocent-adsap\",\n\t3872:  \"oem-agent\",\n\t3873:  \"fagordnc\",\n\t3874:  \"sixxsconfig\",\n\t3875:  \"pnbscada\",\n\t3876:  \"dl-agent\",\n\t3877:  \"xmpcr-interface\",\n\t3878:  \"fotogcad\",\n\t3879:  \"appss-lm\",\n\t3880:  \"igrs\",\n\t3881:  \"idac\",\n\t3882:  \"msdts1\",\n\t3883:  \"vrpn\",\n\t3884:  \"softrack-meter\",\n\t3885:  \"topflow-ssl\",\n\t3886:  \"nei-management\",\n\t3887:  \"ciphire-data\",\n\t3888:  \"ciphire-serv\",\n\t3889:  \"dandv-tester\",\n\t3890:  \"ndsconnect\",\n\t3891:  \"rtc-pm-port\",\n\t3892:  \"pcc-image-port\",\n\t3893:  \"cgi-starapi\",\n\t3894:  \"syam-agent\",\n\t3895:  \"syam-smc\",\n\t3896:  \"sdo-tls\",\n\t3897:  \"sdo-ssh\",\n\t3898:  \"senip\",\n\t3899:  \"itv-control\",\n\t3900:  \"udt-os\",\n\t3901:  \"nimsh\",\n\t3902:  \"nimaux\",\n\t3903:  \"charsetmgr\",\n\t3904:  \"omnilink-port\",\n\t3905:  \"mupdate\",\n\t3906:  \"topovista-data\",\n\t3907:  \"imoguia-port\",\n\t3908:  \"hppronetman\",\n\t3909:  \"surfcontrolcpa\",\n\t3910:  \"prnrequest\",\n\t3911:  \"prnstatus\",\n\t3912:  \"gbmt-stars\",\n\t3913:  \"listcrt-port\",\n\t3914:  \"listcrt-port-2\",\n\t3915:  \"agcat\",\n\t3916:  \"wysdmc\",\n\t3917:  \"aftmux\",\n\t3918:  \"pktcablemmcops\",\n\t3919:  \"hyperip\",\n\t3920:  \"exasoftport1\",\n\t3921:  \"herodotus-net\",\n\t3922:  \"sor-update\",\n\t3923:  \"symb-sb-port\",\n\t3924:  \"mpl-gprs-port\",\n\t3925:  \"zmp\",\n\t3926:  \"winport\",\n\t3927:  \"natdataservice\",\n\t3928:  \"netboot-pxe\",\n\t3929:  \"smauth-port\",\n\t3930:  \"syam-webserver\",\n\t3931:  \"msr-plugin-port\",\n\t3932:  \"dyn-site\",\n\t3933:  \"plbserve-port\",\n\t3934:  \"sunfm-port\",\n\t3935:  \"sdp-portmapper\",\n\t3936:  \"mailprox\",\n\t3937:  \"dvbservdsc\",\n\t3938:  \"dbcontrol-agent\",\n\t3939:  \"aamp\",\n\t3940:  \"xecp-node\",\n\t3941:  \"homeportal-web\",\n\t3942:  \"srdp\",\n\t3943:  \"tig\",\n\t3944:  \"sops\",\n\t3945:  \"emcads\",\n\t3946:  \"backupedge\",\n\t3947:  \"ccp\",\n\t3948:  \"apdap\",\n\t3949:  \"drip\",\n\t3950:  \"namemunge\",\n\t3951:  \"pwgippfax\",\n\t3952:  \"i3-sessionmgr\",\n\t3953:  \"xmlink-connect\",\n\t3954:  \"adrep\",\n\t3955:  \"p2pcommunity\",\n\t3956:  \"gvcp\",\n\t3957:  \"mqe-broker\",\n\t3958:  \"mqe-agent\",\n\t3959:  \"treehopper\",\n\t3960:  \"bess\",\n\t3961:  \"proaxess\",\n\t3962:  \"sbi-agent\",\n\t3963:  \"thrp\",\n\t3964:  \"sasggprs\",\n\t3965:  \"ati-ip-to-ncpe\",\n\t3966:  \"bflckmgr\",\n\t3967:  \"ppsms\",\n\t3968:  \"ianywhere-dbns\",\n\t3969:  \"landmarks\",\n\t3970:  \"lanrevagent\",\n\t3971:  \"lanrevserver\",\n\t3972:  \"iconp\",\n\t3973:  \"progistics\",\n\t3974:  \"citysearch\",\n\t3975:  \"airshot\",\n\t3976:  \"opswagent\",\n\t3977:  \"opswmanager\",\n\t3978:  \"secure-cfg-svr\",\n\t3979:  \"smwan\",\n\t3980:  \"acms\",\n\t3981:  \"starfish\",\n\t3982:  \"eis\",\n\t3983:  \"eisp\",\n\t3984:  \"mapper-nodemgr\",\n\t3985:  \"mapper-mapethd\",\n\t3986:  \"mapper-ws-ethd\",\n\t3987:  \"centerline\",\n\t3988:  \"dcs-config\",\n\t3989:  \"bv-queryengine\",\n\t3990:  \"bv-is\",\n\t3991:  \"bv-smcsrv\",\n\t3992:  \"bv-ds\",\n\t3993:  \"bv-agent\",\n\t3995:  \"iss-mgmt-ssl\",\n\t3996:  \"abcsoftware\",\n\t3997:  \"agentsease-db\",\n\t3998:  \"dnx\",\n\t3999:  \"nvcnet\",\n\t4000:  \"terabase\",\n\t4001:  \"newoak\",\n\t4002:  \"pxc-spvr-ft\",\n\t4003:  \"pxc-splr-ft\",\n\t4004:  \"pxc-roid\",\n\t4005:  \"pxc-pin\",\n\t4006:  \"pxc-spvr\",\n\t4007:  \"pxc-splr\",\n\t4008:  \"netcheque\",\n\t4009:  \"chimera-hwm\",\n\t4010:  \"samsung-unidex\",\n\t4011:  \"altserviceboot\",\n\t4012:  \"pda-gate\",\n\t4013:  \"acl-manager\",\n\t4014:  \"taiclock\",\n\t4015:  \"talarian-mcast1\",\n\t4016:  \"talarian-mcast2\",\n\t4017:  \"talarian-mcast3\",\n\t4018:  \"talarian-mcast4\",\n\t4019:  \"talarian-mcast5\",\n\t4020:  \"trap\",\n\t4021:  \"nexus-portal\",\n\t4022:  \"dnox\",\n\t4023:  \"esnm-zoning\",\n\t4024:  \"tnp1-port\",\n\t4025:  \"partimage\",\n\t4026:  \"as-debug\",\n\t4027:  \"bxp\",\n\t4028:  \"dtserver-port\",\n\t4029:  \"ip-qsig\",\n\t4030:  \"jdmn-port\",\n\t4031:  \"suucp\",\n\t4032:  \"vrts-auth-port\",\n\t4033:  \"sanavigator\",\n\t4034:  \"ubxd\",\n\t4035:  \"wap-push-http\",\n\t4036:  \"wap-push-https\",\n\t4037:  \"ravehd\",\n\t4038:  \"fazzt-ptp\",\n\t4039:  \"fazzt-admin\",\n\t4040:  \"yo-main\",\n\t4041:  \"houston\",\n\t4042:  \"ldxp\",\n\t4043:  \"nirp\",\n\t4044:  \"ltp\",\n\t4045:  \"npp\",\n\t4046:  \"acp-proto\",\n\t4047:  \"ctp-state\",\n\t4049:  \"wafs\",\n\t4050:  \"cisco-wafs\",\n\t4051:  \"cppdp\",\n\t4052:  \"interact\",\n\t4053:  \"ccu-comm-1\",\n\t4054:  \"ccu-comm-2\",\n\t4055:  \"ccu-comm-3\",\n\t4056:  \"lms\",\n\t4057:  \"wfm\",\n\t4058:  \"kingfisher\",\n\t4059:  \"dlms-cosem\",\n\t4060:  \"dsmeter-iatc\",\n\t4061:  \"ice-location\",\n\t4062:  \"ice-slocation\",\n\t4063:  \"ice-router\",\n\t4064:  \"ice-srouter\",\n\t4065:  \"avanti-cdp\",\n\t4066:  \"pmas\",\n\t4067:  \"idp\",\n\t4068:  \"ipfltbcst\",\n\t4069:  \"minger\",\n\t4070:  \"tripe\",\n\t4071:  \"aibkup\",\n\t4072:  \"zieto-sock\",\n\t4073:  \"iRAPP\",\n\t4074:  \"cequint-cityid\",\n\t4075:  \"perimlan\",\n\t4076:  \"seraph\",\n\t4077:  \"ascomalarm\",\n\t4079:  \"santools\",\n\t4080:  \"lorica-in\",\n\t4081:  \"lorica-in-sec\",\n\t4082:  \"lorica-out\",\n\t4083:  \"lorica-out-sec\",\n\t4084:  \"fortisphere-vm\",\n\t4086:  \"ftsync\",\n\t4089:  \"opencore\",\n\t4090:  \"omasgport\",\n\t4091:  \"ewinstaller\",\n\t4092:  \"ewdgs\",\n\t4093:  \"pvxpluscs\",\n\t4094:  \"sysrqd\",\n\t4095:  \"xtgui\",\n\t4096:  \"bre\",\n\t4097:  \"patrolview\",\n\t4098:  \"drmsfsd\",\n\t4099:  \"dpcp\",\n\t4100:  \"igo-incognito\",\n\t4101:  \"brlp-0\",\n\t4102:  \"brlp-1\",\n\t4103:  \"brlp-2\",\n\t4104:  \"brlp-3\",\n\t4105:  \"shofar\",\n\t4106:  \"synchronite\",\n\t4107:  \"j-ac\",\n\t4108:  \"accel\",\n\t4109:  \"izm\",\n\t4110:  \"g2tag\",\n\t4111:  \"xgrid\",\n\t4112:  \"apple-vpns-rp\",\n\t4113:  \"aipn-reg\",\n\t4114:  \"jomamqmonitor\",\n\t4115:  \"cds\",\n\t4116:  \"smartcard-tls\",\n\t4117:  \"hillrserv\",\n\t4118:  \"netscript\",\n\t4119:  \"assuria-slm\",\n\t4121:  \"e-builder\",\n\t4122:  \"fprams\",\n\t4123:  \"z-wave\",\n\t4124:  \"tigv2\",\n\t4125:  \"opsview-envoy\",\n\t4126:  \"ddrepl\",\n\t4127:  \"unikeypro\",\n\t4128:  \"nufw\",\n\t4129:  \"nuauth\",\n\t4130:  \"fronet\",\n\t4131:  \"stars\",\n\t4132:  \"nuts-dem\",\n\t4133:  \"nuts-bootp\",\n\t4134:  \"nifty-hmi\",\n\t4135:  \"cl-db-attach\",\n\t4136:  \"cl-db-request\",\n\t4137:  \"cl-db-remote\",\n\t4138:  \"nettest\",\n\t4139:  \"thrtx\",\n\t4140:  \"cedros-fds\",\n\t4141:  \"oirtgsvc\",\n\t4142:  \"oidocsvc\",\n\t4143:  \"oidsr\",\n\t4145:  \"vvr-control\",\n\t4146:  \"tgcconnect\",\n\t4147:  \"vrxpservman\",\n\t4148:  \"hhb-handheld\",\n\t4149:  \"agslb\",\n\t4150:  \"PowerAlert-nsa\",\n\t4151:  \"menandmice-noh\",\n\t4152:  \"idig-mux\",\n\t4153:  \"mbl-battd\",\n\t4154:  \"atlinks\",\n\t4155:  \"bzr\",\n\t4156:  \"stat-results\",\n\t4157:  \"stat-scanner\",\n\t4158:  \"stat-cc\",\n\t4159:  \"nss\",\n\t4160:  \"jini-discovery\",\n\t4161:  \"omscontact\",\n\t4162:  \"omstopology\",\n\t4163:  \"silverpeakpeer\",\n\t4164:  \"silverpeakcomm\",\n\t4165:  \"altcp\",\n\t4166:  \"joost\",\n\t4167:  \"ddgn\",\n\t4168:  \"pslicser\",\n\t4169:  \"iadt-disc\",\n\t4172:  \"pcoip\",\n\t4173:  \"mma-discovery\",\n\t4174:  \"sm-disc\",\n\t4177:  \"wello\",\n\t4178:  \"storman\",\n\t4179:  \"MaxumSP\",\n\t4180:  \"httpx\",\n\t4181:  \"macbak\",\n\t4182:  \"pcptcpservice\",\n\t4183:  \"cyborgnet\",\n\t4184:  \"universe-suite\",\n\t4185:  \"wcpp\",\n\t4188:  \"vatata\",\n\t4191:  \"dsmipv6\",\n\t4192:  \"azeti-bd\",\n\t4197:  \"hctl\",\n\t4199:  \"eims-admin\",\n\t4300:  \"corelccam\",\n\t4301:  \"d-data\",\n\t4302:  \"d-data-control\",\n\t4303:  \"srcp\",\n\t4304:  \"owserver\",\n\t4305:  \"batman\",\n\t4306:  \"pinghgl\",\n\t4307:  \"trueconf\",\n\t4308:  \"compx-lockview\",\n\t4309:  \"dserver\",\n\t4310:  \"mirrtex\",\n\t4320:  \"fdt-rcatp\",\n\t4321:  \"rwhois\",\n\t4322:  \"trim-event\",\n\t4323:  \"trim-ice\",\n\t4325:  \"geognosisman\",\n\t4326:  \"geognosis\",\n\t4327:  \"jaxer-web\",\n\t4328:  \"jaxer-manager\",\n\t4333:  \"ahsp\",\n\t4340:  \"gaia\",\n\t4341:  \"lisp-data\",\n\t4342:  \"lisp-control\",\n\t4343:  \"unicall\",\n\t4344:  \"vinainstall\",\n\t4345:  \"m4-network-as\",\n\t4346:  \"elanlm\",\n\t4347:  \"lansurveyor\",\n\t4348:  \"itose\",\n\t4349:  \"fsportmap\",\n\t4350:  \"net-device\",\n\t4351:  \"plcy-net-svcs\",\n\t4352:  \"pjlink\",\n\t4353:  \"f5-iquery\",\n\t4354:  \"qsnet-trans\",\n\t4355:  \"qsnet-workst\",\n\t4356:  \"qsnet-assist\",\n\t4357:  \"qsnet-cond\",\n\t4358:  \"qsnet-nucl\",\n\t4359:  \"omabcastltkm\",\n\t4361:  \"nacnl\",\n\t4362:  \"afore-vdp-disc\",\n\t4366:  \"shadowstream\",\n\t4368:  \"wxbrief\",\n\t4369:  \"epmd\",\n\t4370:  \"elpro-tunnel\",\n\t4371:  \"l2c-disc\",\n\t4372:  \"l2c-data\",\n\t4373:  \"remctl\",\n\t4375:  \"tolteces\",\n\t4376:  \"bip\",\n\t4377:  \"cp-spxsvr\",\n\t4378:  \"cp-spxdpy\",\n\t4379:  \"ctdb\",\n\t4389:  \"xandros-cms\",\n\t4390:  \"wiegand\",\n\t4394:  \"apwi-disc\",\n\t4395:  \"omnivisionesx\",\n\t4400:  \"ds-srv\",\n\t4401:  \"ds-srvr\",\n\t4402:  \"ds-clnt\",\n\t4403:  \"ds-user\",\n\t4404:  \"ds-admin\",\n\t4405:  \"ds-mail\",\n\t4406:  \"ds-slp\",\n\t4412:  \"smallchat\",\n\t4413:  \"avi-nms-disc\",\n\t4416:  \"pjj-player-disc\",\n\t4418:  \"axysbridge\",\n\t4420:  \"nvm-express\",\n\t4425:  \"netrockey6\",\n\t4426:  \"beacon-port-2\",\n\t4430:  \"rsqlserver\",\n\t4432:  \"l-acoustics\",\n\t4441:  \"netblox\",\n\t4442:  \"saris\",\n\t4443:  \"pharos\",\n\t4444:  \"krb524\",\n\t4445:  \"upnotifyp\",\n\t4446:  \"n1-fwp\",\n\t4447:  \"n1-rmgmt\",\n\t4448:  \"asc-slmd\",\n\t4449:  \"privatewire\",\n\t4450:  \"camp\",\n\t4451:  \"ctisystemmsg\",\n\t4452:  \"ctiprogramload\",\n\t4453:  \"nssalertmgr\",\n\t4454:  \"nssagentmgr\",\n\t4455:  \"prchat-user\",\n\t4456:  \"prchat-server\",\n\t4457:  \"prRegister\",\n\t4458:  \"mcp\",\n\t4484:  \"hpssmgmt\",\n\t4486:  \"icms\",\n\t4488:  \"awacs-ice\",\n\t4500:  \"ipsec-nat-t\",\n\t4534:  \"armagetronad\",\n\t4535:  \"ehs\",\n\t4536:  \"ehs-ssl\",\n\t4537:  \"wssauthsvc\",\n\t4538:  \"swx-gate\",\n\t4545:  \"worldscores\",\n\t4546:  \"sf-lm\",\n\t4547:  \"lanner-lm\",\n\t4548:  \"synchromesh\",\n\t4549:  \"aegate\",\n\t4550:  \"gds-adppiw-db\",\n\t4551:  \"ieee-mih\",\n\t4552:  \"menandmice-mon\",\n\t4554:  \"msfrs\",\n\t4555:  \"rsip\",\n\t4556:  \"dtn-bundle\",\n\t4557:  \"mtcevrunqss\",\n\t4558:  \"mtcevrunqman\",\n\t4559:  \"hylafax\",\n\t4566:  \"kwtc\",\n\t4567:  \"tram\",\n\t4568:  \"bmc-reporting\",\n\t4569:  \"iax\",\n\t4591:  \"l3t-at-an\",\n\t4592:  \"hrpd-ith-at-an\",\n\t4593:  \"ipt-anri-anri\",\n\t4594:  \"ias-session\",\n\t4595:  \"ias-paging\",\n\t4596:  \"ias-neighbor\",\n\t4597:  \"a21-an-1xbs\",\n\t4598:  \"a16-an-an\",\n\t4599:  \"a17-an-an\",\n\t4600:  \"piranha1\",\n\t4601:  \"piranha2\",\n\t4621:  \"ventoso\",\n\t4658:  \"playsta2-app\",\n\t4659:  \"playsta2-lob\",\n\t4660:  \"smaclmgr\",\n\t4661:  \"kar2ouche\",\n\t4662:  \"oms\",\n\t4663:  \"noteit\",\n\t4664:  \"ems\",\n\t4665:  \"contclientms\",\n\t4666:  \"eportcomm\",\n\t4667:  \"mmacomm\",\n\t4668:  \"mmaeds\",\n\t4669:  \"eportcommdata\",\n\t4670:  \"light\",\n\t4671:  \"acter\",\n\t4672:  \"rfa\",\n\t4673:  \"cxws\",\n\t4674:  \"appiq-mgmt\",\n\t4675:  \"dhct-status\",\n\t4676:  \"dhct-alerts\",\n\t4677:  \"bcs\",\n\t4678:  \"traversal\",\n\t4679:  \"mgesupervision\",\n\t4680:  \"mgemanagement\",\n\t4681:  \"parliant\",\n\t4682:  \"finisar\",\n\t4683:  \"spike\",\n\t4684:  \"rfid-rp1\",\n\t4685:  \"autopac\",\n\t4686:  \"msp-os\",\n\t4687:  \"nst\",\n\t4688:  \"mobile-p2p\",\n\t4689:  \"altovacentral\",\n\t4690:  \"prelude\",\n\t4691:  \"mtn\",\n\t4692:  \"conspiracy\",\n\t4700:  \"netxms-agent\",\n\t4701:  \"netxms-mgmt\",\n\t4702:  \"netxms-sync\",\n\t4711:  \"trinity-dist\",\n\t4725:  \"truckstar\",\n\t4726:  \"a26-fap-fgw\",\n\t4727:  \"fcis-disc\",\n\t4728:  \"capmux\",\n\t4729:  \"gsmtap\",\n\t4730:  \"gearman\",\n\t4732:  \"ohmtrigger\",\n\t4737:  \"ipdr-sp\",\n\t4738:  \"solera-lpn\",\n\t4739:  \"ipfix\",\n\t4740:  \"ipfixs\",\n\t4741:  \"lumimgrd\",\n\t4742:  \"sicct-sdp\",\n\t4743:  \"openhpid\",\n\t4744:  \"ifsp\",\n\t4745:  \"fmp\",\n\t4746:  \"intelliadm-disc\",\n\t4747:  \"buschtrommel\",\n\t4749:  \"profilemac\",\n\t4750:  \"ssad\",\n\t4751:  \"spocp\",\n\t4752:  \"snap\",\n\t4753:  \"simon-disc\",\n\t4754:  \"gre-in-udp\",\n\t4755:  \"gre-udp-dtls\",\n\t4784:  \"bfd-multi-ctl\",\n\t4785:  \"cncp\",\n\t4789:  \"vxlan\",\n\t4790:  \"vxlan-gpe\",\n\t4791:  \"roce\",\n\t4800:  \"iims\",\n\t4801:  \"iwec\",\n\t4802:  \"ilss\",\n\t4803:  \"notateit-disc\",\n\t4804:  \"aja-ntv4-disc\",\n\t4827:  \"htcp\",\n\t4837:  \"varadero-0\",\n\t4838:  \"varadero-1\",\n\t4839:  \"varadero-2\",\n\t4840:  \"opcua-udp\",\n\t4841:  \"quosa\",\n\t4842:  \"gw-asv\",\n\t4843:  \"opcua-tls\",\n\t4844:  \"gw-log\",\n\t4845:  \"wcr-remlib\",\n\t4846:  \"contamac-icm\",\n\t4847:  \"wfc\",\n\t4848:  \"appserv-http\",\n\t4849:  \"appserv-https\",\n\t4850:  \"sun-as-nodeagt\",\n\t4851:  \"derby-repli\",\n\t4867:  \"unify-debug\",\n\t4868:  \"phrelay\",\n\t4869:  \"phrelaydbg\",\n\t4870:  \"cc-tracking\",\n\t4871:  \"wired\",\n\t4876:  \"tritium-can\",\n\t4877:  \"lmcs\",\n\t4878:  \"inst-discovery\",\n\t4881:  \"socp-t\",\n\t4882:  \"socp-c\",\n\t4884:  \"hivestor\",\n\t4885:  \"abbs\",\n\t4894:  \"lyskom\",\n\t4899:  \"radmin-port\",\n\t4900:  \"hfcs\",\n\t4914:  \"bones\",\n\t4936:  \"an-signaling\",\n\t4937:  \"atsc-mh-ssc\",\n\t4940:  \"eq-office-4940\",\n\t4941:  \"eq-office-4941\",\n\t4942:  \"eq-office-4942\",\n\t4949:  \"munin\",\n\t4950:  \"sybasesrvmon\",\n\t4951:  \"pwgwims\",\n\t4952:  \"sagxtsds\",\n\t4969:  \"ccss-qmm\",\n\t4970:  \"ccss-qsm\",\n\t4980:  \"ctxs-vpp\",\n\t4986:  \"mrip\",\n\t4987:  \"smar-se-port1\",\n\t4988:  \"smar-se-port2\",\n\t4989:  \"parallel\",\n\t4990:  \"busycal\",\n\t4991:  \"vrt\",\n\t4999:  \"hfcs-manager\",\n\t5000:  \"commplex-main\",\n\t5001:  \"commplex-link\",\n\t5002:  \"rfe\",\n\t5003:  \"fmpro-internal\",\n\t5004:  \"avt-profile-1\",\n\t5005:  \"avt-profile-2\",\n\t5006:  \"wsm-server\",\n\t5007:  \"wsm-server-ssl\",\n\t5008:  \"synapsis-edge\",\n\t5009:  \"winfs\",\n\t5010:  \"telelpathstart\",\n\t5011:  \"telelpathattack\",\n\t5012:  \"nsp\",\n\t5013:  \"fmpro-v6\",\n\t5014:  \"onpsocket\",\n\t5020:  \"zenginkyo-1\",\n\t5021:  \"zenginkyo-2\",\n\t5022:  \"mice\",\n\t5023:  \"htuilsrv\",\n\t5024:  \"scpi-telnet\",\n\t5025:  \"scpi-raw\",\n\t5026:  \"strexec-d\",\n\t5027:  \"strexec-s\",\n\t5029:  \"infobright\",\n\t5030:  \"surfpass\",\n\t5031:  \"dmp\",\n\t5042:  \"asnaacceler8db\",\n\t5043:  \"swxadmin\",\n\t5044:  \"lxi-evntsvc\",\n\t5046:  \"vpm-udp\",\n\t5047:  \"iscape\",\n\t5049:  \"ivocalize\",\n\t5050:  \"mmcc\",\n\t5051:  \"ita-agent\",\n\t5052:  \"ita-manager\",\n\t5053:  \"rlm-disc\",\n\t5055:  \"unot\",\n\t5056:  \"intecom-ps1\",\n\t5057:  \"intecom-ps2\",\n\t5058:  \"locus-disc\",\n\t5059:  \"sds\",\n\t5060:  \"sip\",\n\t5061:  \"sips\",\n\t5062:  \"na-localise\",\n\t5064:  \"ca-1\",\n\t5065:  \"ca-2\",\n\t5066:  \"stanag-5066\",\n\t5067:  \"authentx\",\n\t5069:  \"i-net-2000-npr\",\n\t5070:  \"vtsas\",\n\t5071:  \"powerschool\",\n\t5072:  \"ayiya\",\n\t5073:  \"tag-pm\",\n\t5074:  \"alesquery\",\n\t5078:  \"pixelpusher\",\n\t5079:  \"cp-spxrpts\",\n\t5080:  \"onscreen\",\n\t5081:  \"sdl-ets\",\n\t5082:  \"qcp\",\n\t5083:  \"qfp\",\n\t5084:  \"llrp\",\n\t5085:  \"encrypted-llrp\",\n\t5092:  \"magpie\",\n\t5093:  \"sentinel-lm\",\n\t5094:  \"hart-ip\",\n\t5099:  \"sentlm-srv2srv\",\n\t5100:  \"socalia\",\n\t5101:  \"talarian-udp\",\n\t5102:  \"oms-nonsecure\",\n\t5104:  \"tinymessage\",\n\t5105:  \"hughes-ap\",\n\t5111:  \"taep-as-svc\",\n\t5112:  \"pm-cmdsvr\",\n\t5116:  \"emb-proj-cmd\",\n\t5120:  \"barracuda-bbs\",\n\t5133:  \"nbt-pc\",\n\t5136:  \"minotaur-sa\",\n\t5137:  \"ctsd\",\n\t5145:  \"rmonitor-secure\",\n\t5150:  \"atmp\",\n\t5151:  \"esri-sde\",\n\t5152:  \"sde-discovery\",\n\t5154:  \"bzflag\",\n\t5155:  \"asctrl-agent\",\n\t5164:  \"vpa-disc\",\n\t5165:  \"ife-icorp\",\n\t5166:  \"winpcs\",\n\t5167:  \"scte104\",\n\t5168:  \"scte30\",\n\t5190:  \"aol\",\n\t5191:  \"aol-1\",\n\t5192:  \"aol-2\",\n\t5193:  \"aol-3\",\n\t5200:  \"targus-getdata\",\n\t5201:  \"targus-getdata1\",\n\t5202:  \"targus-getdata2\",\n\t5203:  \"targus-getdata3\",\n\t5223:  \"hpvirtgrp\",\n\t5224:  \"hpvirtctrl\",\n\t5225:  \"hp-server\",\n\t5226:  \"hp-status\",\n\t5227:  \"perfd\",\n\t5234:  \"eenet\",\n\t5235:  \"galaxy-network\",\n\t5236:  \"padl2sim\",\n\t5237:  \"mnet-discovery\",\n\t5245:  \"downtools-disc\",\n\t5246:  \"capwap-control\",\n\t5247:  \"capwap-data\",\n\t5248:  \"caacws\",\n\t5249:  \"caaclang2\",\n\t5250:  \"soagateway\",\n\t5251:  \"caevms\",\n\t5252:  \"movaz-ssc\",\n\t5264:  \"3com-njack-1\",\n\t5265:  \"3com-njack-2\",\n\t5270:  \"cartographerxmp\",\n\t5271:  \"cuelink-disc\",\n\t5272:  \"pk\",\n\t5282:  \"transmit-port\",\n\t5298:  \"presence\",\n\t5299:  \"nlg-data\",\n\t5300:  \"hacl-hb\",\n\t5301:  \"hacl-gs\",\n\t5302:  \"hacl-cfg\",\n\t5303:  \"hacl-probe\",\n\t5304:  \"hacl-local\",\n\t5305:  \"hacl-test\",\n\t5306:  \"sun-mc-grp\",\n\t5307:  \"sco-aip\",\n\t5308:  \"cfengine\",\n\t5309:  \"jprinter\",\n\t5310:  \"outlaws\",\n\t5312:  \"permabit-cs\",\n\t5313:  \"rrdp\",\n\t5314:  \"opalis-rbt-ipc\",\n\t5315:  \"hacl-poll\",\n\t5343:  \"kfserver\",\n\t5344:  \"xkotodrcp\",\n\t5349:  \"stuns\",\n\t5350:  \"pcp-multicast\",\n\t5351:  \"pcp\",\n\t5352:  \"dns-llq\",\n\t5353:  \"mdns\",\n\t5354:  \"mdnsresponder\",\n\t5355:  \"llmnr\",\n\t5356:  \"ms-smlbiz\",\n\t5357:  \"wsdapi\",\n\t5358:  \"wsdapi-s\",\n\t5359:  \"ms-alerter\",\n\t5360:  \"ms-sideshow\",\n\t5361:  \"ms-s-sideshow\",\n\t5362:  \"serverwsd2\",\n\t5363:  \"net-projection\",\n\t5364:  \"kdnet\",\n\t5397:  \"stresstester\",\n\t5398:  \"elektron-admin\",\n\t5399:  \"securitychase\",\n\t5400:  \"excerpt\",\n\t5401:  \"excerpts\",\n\t5402:  \"mftp\",\n\t5403:  \"hpoms-ci-lstn\",\n\t5404:  \"hpoms-dps-lstn\",\n\t5405:  \"netsupport\",\n\t5406:  \"systemics-sox\",\n\t5407:  \"foresyte-clear\",\n\t5408:  \"foresyte-sec\",\n\t5409:  \"salient-dtasrv\",\n\t5410:  \"salient-usrmgr\",\n\t5411:  \"actnet\",\n\t5412:  \"continuus\",\n\t5413:  \"wwiotalk\",\n\t5414:  \"statusd\",\n\t5415:  \"ns-server\",\n\t5416:  \"sns-gateway\",\n\t5417:  \"sns-agent\",\n\t5418:  \"mcntp\",\n\t5419:  \"dj-ice\",\n\t5420:  \"cylink-c\",\n\t5421:  \"netsupport2\",\n\t5422:  \"salient-mux\",\n\t5423:  \"virtualuser\",\n\t5424:  \"beyond-remote\",\n\t5425:  \"br-channel\",\n\t5426:  \"devbasic\",\n\t5427:  \"sco-peer-tta\",\n\t5428:  \"telaconsole\",\n\t5429:  \"base\",\n\t5430:  \"radec-corp\",\n\t5431:  \"park-agent\",\n\t5432:  \"postgresql\",\n\t5433:  \"pyrrho\",\n\t5434:  \"sgi-arrayd\",\n\t5435:  \"sceanics\",\n\t5436:  \"pmip6-cntl\",\n\t5437:  \"pmip6-data\",\n\t5443:  \"spss\",\n\t5450:  \"tiepie-disc\",\n\t5453:  \"surebox\",\n\t5454:  \"apc-5454\",\n\t5455:  \"apc-5455\",\n\t5456:  \"apc-5456\",\n\t5461:  \"silkmeter\",\n\t5462:  \"ttl-publisher\",\n\t5463:  \"ttlpriceproxy\",\n\t5464:  \"quailnet\",\n\t5465:  \"netops-broker\",\n\t5474:  \"apsolab-rpc\",\n\t5500:  \"fcp-addr-srvr1\",\n\t5501:  \"fcp-addr-srvr2\",\n\t5502:  \"fcp-srvr-inst1\",\n\t5503:  \"fcp-srvr-inst2\",\n\t5504:  \"fcp-cics-gw1\",\n\t5505:  \"checkoutdb\",\n\t5506:  \"amc\",\n\t5553:  \"sgi-eventmond\",\n\t5554:  \"sgi-esphttp\",\n\t5555:  \"personal-agent\",\n\t5556:  \"freeciv\",\n\t5567:  \"dof-dps-mc-sec\",\n\t5568:  \"sdt\",\n\t5569:  \"rdmnet-device\",\n\t5573:  \"sdmmp\",\n\t5580:  \"tmosms0\",\n\t5581:  \"tmosms1\",\n\t5582:  \"fac-restore\",\n\t5583:  \"tmo-icon-sync\",\n\t5584:  \"bis-web\",\n\t5585:  \"bis-sync\",\n\t5597:  \"ininmessaging\",\n\t5598:  \"mctfeed\",\n\t5599:  \"esinstall\",\n\t5600:  \"esmmanager\",\n\t5601:  \"esmagent\",\n\t5602:  \"a1-msc\",\n\t5603:  \"a1-bs\",\n\t5604:  \"a3-sdunode\",\n\t5605:  \"a4-sdunode\",\n\t5627:  \"ninaf\",\n\t5628:  \"htrust\",\n\t5629:  \"symantec-sfdb\",\n\t5630:  \"precise-comm\",\n\t5631:  \"pcanywheredata\",\n\t5632:  \"pcanywherestat\",\n\t5633:  \"beorl\",\n\t5634:  \"xprtld\",\n\t5670:  \"zre-disc\",\n\t5671:  \"amqps\",\n\t5672:  \"amqp\",\n\t5673:  \"jms\",\n\t5674:  \"hyperscsi-port\",\n\t5675:  \"v5ua\",\n\t5676:  \"raadmin\",\n\t5677:  \"questdb2-lnchr\",\n\t5678:  \"rrac\",\n\t5679:  \"dccm\",\n\t5680:  \"auriga-router\",\n\t5681:  \"ncxcp\",\n\t5682:  \"brightcore\",\n\t5683:  \"coap\",\n\t5684:  \"coaps\",\n\t5687:  \"gog-multiplayer\",\n\t5688:  \"ggz\",\n\t5689:  \"qmvideo\",\n\t5713:  \"proshareaudio\",\n\t5714:  \"prosharevideo\",\n\t5715:  \"prosharedata\",\n\t5716:  \"prosharerequest\",\n\t5717:  \"prosharenotify\",\n\t5718:  \"dpm\",\n\t5719:  \"dpm-agent\",\n\t5720:  \"ms-licensing\",\n\t5721:  \"dtpt\",\n\t5722:  \"msdfsr\",\n\t5723:  \"omhs\",\n\t5724:  \"omsdk\",\n\t5728:  \"io-dist-group\",\n\t5729:  \"openmail\",\n\t5730:  \"unieng\",\n\t5741:  \"ida-discover1\",\n\t5742:  \"ida-discover2\",\n\t5743:  \"watchdoc-pod\",\n\t5744:  \"watchdoc\",\n\t5745:  \"fcopy-server\",\n\t5746:  \"fcopys-server\",\n\t5747:  \"tunatic\",\n\t5748:  \"tunalyzer\",\n\t5750:  \"rscd\",\n\t5755:  \"openmailg\",\n\t5757:  \"x500ms\",\n\t5766:  \"openmailns\",\n\t5767:  \"s-openmail\",\n\t5768:  \"openmailpxy\",\n\t5769:  \"spramsca\",\n\t5770:  \"spramsd\",\n\t5771:  \"netagent\",\n\t5777:  \"dali-port\",\n\t5781:  \"3par-evts\",\n\t5782:  \"3par-mgmt\",\n\t5783:  \"3par-mgmt-ssl\",\n\t5784:  \"ibar\",\n\t5785:  \"3par-rcopy\",\n\t5786:  \"cisco-redu\",\n\t5787:  \"waascluster\",\n\t5793:  \"xtreamx\",\n\t5794:  \"spdp\",\n\t5813:  \"icmpd\",\n\t5814:  \"spt-automation\",\n\t5859:  \"wherehoo\",\n\t5863:  \"ppsuitemsg\",\n\t5900:  \"rfb\",\n\t5910:  \"cm\",\n\t5911:  \"cpdlc\",\n\t5912:  \"fis\",\n\t5913:  \"ads-c\",\n\t5963:  \"indy\",\n\t5968:  \"mppolicy-v5\",\n\t5969:  \"mppolicy-mgr\",\n\t5984:  \"couchdb\",\n\t5985:  \"wsman\",\n\t5986:  \"wsmans\",\n\t5987:  \"wbem-rmi\",\n\t5988:  \"wbem-http\",\n\t5989:  \"wbem-https\",\n\t5990:  \"wbem-exp-https\",\n\t5991:  \"nuxsl\",\n\t5992:  \"consul-insight\",\n\t5999:  \"cvsup\",\n\t6064:  \"ndl-ahp-svc\",\n\t6065:  \"winpharaoh\",\n\t6066:  \"ewctsp\",\n\t6069:  \"trip\",\n\t6070:  \"messageasap\",\n\t6071:  \"ssdtp\",\n\t6072:  \"diagnose-proc\",\n\t6073:  \"directplay8\",\n\t6074:  \"max\",\n\t6080:  \"gue\",\n\t6081:  \"geneve\",\n\t6082:  \"p25cai\",\n\t6083:  \"miami-bcast\",\n\t6085:  \"konspire2b\",\n\t6086:  \"pdtp\",\n\t6087:  \"ldss\",\n\t6088:  \"doglms-notify\",\n\t6100:  \"synchronet-db\",\n\t6101:  \"synchronet-rtc\",\n\t6102:  \"synchronet-upd\",\n\t6103:  \"rets\",\n\t6104:  \"dbdb\",\n\t6105:  \"primaserver\",\n\t6106:  \"mpsserver\",\n\t6107:  \"etc-control\",\n\t6108:  \"sercomm-scadmin\",\n\t6109:  \"globecast-id\",\n\t6110:  \"softcm\",\n\t6111:  \"spc\",\n\t6112:  \"dtspcd\",\n\t6118:  \"tipc\",\n\t6122:  \"bex-webadmin\",\n\t6123:  \"backup-express\",\n\t6124:  \"pnbs\",\n\t6133:  \"nbt-wol\",\n\t6140:  \"pulsonixnls\",\n\t6141:  \"meta-corp\",\n\t6142:  \"aspentec-lm\",\n\t6143:  \"watershed-lm\",\n\t6144:  \"statsci1-lm\",\n\t6145:  \"statsci2-lm\",\n\t6146:  \"lonewolf-lm\",\n\t6147:  \"montage-lm\",\n\t6148:  \"ricardo-lm\",\n\t6149:  \"tal-pod\",\n\t6160:  \"ecmp-data\",\n\t6161:  \"patrol-ism\",\n\t6162:  \"patrol-coll\",\n\t6163:  \"pscribe\",\n\t6200:  \"lm-x\",\n\t6201:  \"thermo-calc\",\n\t6209:  \"qmtps\",\n\t6222:  \"radmind\",\n\t6241:  \"jeol-nsddp-1\",\n\t6242:  \"jeol-nsddp-2\",\n\t6243:  \"jeol-nsddp-3\",\n\t6244:  \"jeol-nsddp-4\",\n\t6251:  \"tl1-raw-ssl\",\n\t6252:  \"tl1-ssh\",\n\t6253:  \"crip\",\n\t6268:  \"grid\",\n\t6269:  \"grid-alt\",\n\t6300:  \"bmc-grx\",\n\t6301:  \"bmc-ctd-ldap\",\n\t6306:  \"ufmp\",\n\t6315:  \"scup-disc\",\n\t6316:  \"abb-escp\",\n\t6317:  \"nav-data\",\n\t6320:  \"repsvc\",\n\t6321:  \"emp-server1\",\n\t6322:  \"emp-server2\",\n\t6324:  \"hrd-ns-disc\",\n\t6343:  \"sflow\",\n\t6346:  \"gnutella-svc\",\n\t6347:  \"gnutella-rtr\",\n\t6350:  \"adap\",\n\t6355:  \"pmcs\",\n\t6360:  \"metaedit-mu\",\n\t6363:  \"ndn\",\n\t6370:  \"metaedit-se\",\n\t6382:  \"metatude-mds\",\n\t6389:  \"clariion-evr01\",\n\t6390:  \"metaedit-ws\",\n\t6417:  \"faxcomservice\",\n\t6419:  \"svdrp-disc\",\n\t6420:  \"nim-vdrshell\",\n\t6421:  \"nim-wan\",\n\t6443:  \"sun-sr-https\",\n\t6444:  \"sge-qmaster\",\n\t6445:  \"sge-execd\",\n\t6446:  \"mysql-proxy\",\n\t6455:  \"skip-cert-recv\",\n\t6456:  \"skip-cert-send\",\n\t6464:  \"ieee11073-20701\",\n\t6471:  \"lvision-lm\",\n\t6480:  \"sun-sr-http\",\n\t6481:  \"servicetags\",\n\t6482:  \"ldoms-mgmt\",\n\t6483:  \"SunVTS-RMI\",\n\t6484:  \"sun-sr-jms\",\n\t6485:  \"sun-sr-iiop\",\n\t6486:  \"sun-sr-iiops\",\n\t6487:  \"sun-sr-iiop-aut\",\n\t6488:  \"sun-sr-jmx\",\n\t6489:  \"sun-sr-admin\",\n\t6500:  \"boks\",\n\t6501:  \"boks-servc\",\n\t6502:  \"boks-servm\",\n\t6503:  \"boks-clntd\",\n\t6505:  \"badm-priv\",\n\t6506:  \"badm-pub\",\n\t6507:  \"bdir-priv\",\n\t6508:  \"bdir-pub\",\n\t6509:  \"mgcs-mfp-port\",\n\t6510:  \"mcer-port\",\n\t6511:  \"dccp-udp\",\n\t6514:  \"syslog-tls\",\n\t6515:  \"elipse-rec\",\n\t6543:  \"lds-distrib\",\n\t6544:  \"lds-dump\",\n\t6547:  \"apc-6547\",\n\t6548:  \"apc-6548\",\n\t6549:  \"apc-6549\",\n\t6550:  \"fg-sysupdate\",\n\t6551:  \"sum\",\n\t6558:  \"xdsxdm\",\n\t6566:  \"sane-port\",\n\t6568:  \"rp-reputation\",\n\t6579:  \"affiliate\",\n\t6580:  \"parsec-master\",\n\t6581:  \"parsec-peer\",\n\t6582:  \"parsec-game\",\n\t6583:  \"joaJewelSuite\",\n\t6619:  \"odette-ftps\",\n\t6620:  \"kftp-data\",\n\t6621:  \"kftp\",\n\t6622:  \"mcftp\",\n\t6623:  \"ktelnet\",\n\t6626:  \"wago-service\",\n\t6627:  \"nexgen\",\n\t6628:  \"afesc-mc\",\n\t6629:  \"nexgen-aux\",\n\t6633:  \"cisco-vpath-tun\",\n\t6634:  \"mpls-pm\",\n\t6635:  \"mpls-udp\",\n\t6636:  \"mpls-udp-dtls\",\n\t6653:  \"openflow\",\n\t6657:  \"palcom-disc\",\n\t6670:  \"vocaltec-gold\",\n\t6671:  \"p4p-portal\",\n\t6672:  \"vision-server\",\n\t6673:  \"vision-elmd\",\n\t6678:  \"vfbp-disc\",\n\t6679:  \"osaut\",\n\t6689:  \"tsa\",\n\t6696:  \"babel\",\n\t6701:  \"kti-icad-srvr\",\n\t6702:  \"e-design-net\",\n\t6703:  \"e-design-web\",\n\t6714:  \"ibprotocol\",\n\t6715:  \"fibotrader-com\",\n\t6767:  \"bmc-perf-agent\",\n\t6768:  \"bmc-perf-mgrd\",\n\t6769:  \"adi-gxp-srvprt\",\n\t6770:  \"plysrv-http\",\n\t6771:  \"plysrv-https\",\n\t6784:  \"bfd-lag\",\n\t6785:  \"dgpf-exchg\",\n\t6786:  \"smc-jmx\",\n\t6787:  \"smc-admin\",\n\t6788:  \"smc-http\",\n\t6790:  \"hnmp\",\n\t6791:  \"hnm\",\n\t6801:  \"acnet\",\n\t6831:  \"ambit-lm\",\n\t6841:  \"netmo-default\",\n\t6842:  \"netmo-http\",\n\t6850:  \"iccrushmore\",\n\t6868:  \"acctopus-st\",\n\t6888:  \"muse\",\n\t6935:  \"ethoscan\",\n\t6936:  \"xsmsvc\",\n\t6946:  \"bioserver\",\n\t6951:  \"otlp\",\n\t6961:  \"jmact3\",\n\t6962:  \"jmevt2\",\n\t6963:  \"swismgr1\",\n\t6964:  \"swismgr2\",\n\t6965:  \"swistrap\",\n\t6966:  \"swispol\",\n\t6969:  \"acmsoda\",\n\t6997:  \"MobilitySrv\",\n\t6998:  \"iatp-highpri\",\n\t6999:  \"iatp-normalpri\",\n\t7000:  \"afs3-fileserver\",\n\t7001:  \"afs3-callback\",\n\t7002:  \"afs3-prserver\",\n\t7003:  \"afs3-vlserver\",\n\t7004:  \"afs3-kaserver\",\n\t7005:  \"afs3-volser\",\n\t7006:  \"afs3-errors\",\n\t7007:  \"afs3-bos\",\n\t7008:  \"afs3-update\",\n\t7009:  \"afs3-rmtsys\",\n\t7010:  \"ups-onlinet\",\n\t7011:  \"talon-disc\",\n\t7012:  \"talon-engine\",\n\t7013:  \"microtalon-dis\",\n\t7014:  \"microtalon-com\",\n\t7015:  \"talon-webserver\",\n\t7016:  \"spg\",\n\t7017:  \"grasp\",\n\t7019:  \"doceri-view\",\n\t7020:  \"dpserve\",\n\t7021:  \"dpserveadmin\",\n\t7022:  \"ctdp\",\n\t7023:  \"ct2nmcs\",\n\t7024:  \"vmsvc\",\n\t7025:  \"vmsvc-2\",\n\t7030:  \"op-probe\",\n\t7040:  \"quest-disc\",\n\t7070:  \"arcp\",\n\t7071:  \"iwg1\",\n\t7080:  \"empowerid\",\n\t7088:  \"zixi-transport\",\n\t7095:  \"jdp-disc\",\n\t7099:  \"lazy-ptop\",\n\t7100:  \"font-service\",\n\t7101:  \"elcn\",\n\t7107:  \"aes-x170\",\n\t7121:  \"virprot-lm\",\n\t7128:  \"scenidm\",\n\t7129:  \"scenccs\",\n\t7161:  \"cabsm-comm\",\n\t7162:  \"caistoragemgr\",\n\t7163:  \"cacsambroker\",\n\t7164:  \"fsr\",\n\t7165:  \"doc-server\",\n\t7166:  \"aruba-server\",\n\t7169:  \"ccag-pib\",\n\t7170:  \"nsrp\",\n\t7171:  \"drm-production\",\n\t7174:  \"clutild\",\n\t7181:  \"janus-disc\",\n\t7200:  \"fodms\",\n\t7201:  \"dlip\",\n\t7227:  \"ramp\",\n\t7235:  \"aspcoordination\",\n\t7244:  \"frc-hicp-disc\",\n\t7262:  \"cnap\",\n\t7272:  \"watchme-7272\",\n\t7273:  \"oma-rlp\",\n\t7274:  \"oma-rlp-s\",\n\t7275:  \"oma-ulp\",\n\t7276:  \"oma-ilp\",\n\t7277:  \"oma-ilp-s\",\n\t7278:  \"oma-dcdocbs\",\n\t7279:  \"ctxlic\",\n\t7280:  \"itactionserver1\",\n\t7281:  \"itactionserver2\",\n\t7282:  \"mzca-alert\",\n\t7365:  \"lcm-server\",\n\t7391:  \"mindfilesys\",\n\t7392:  \"mrssrendezvous\",\n\t7393:  \"nfoldman\",\n\t7394:  \"fse\",\n\t7395:  \"winqedit\",\n\t7397:  \"hexarc\",\n\t7400:  \"rtps-discovery\",\n\t7401:  \"rtps-dd-ut\",\n\t7402:  \"rtps-dd-mt\",\n\t7410:  \"ionixnetmon\",\n\t7411:  \"daqstream\",\n\t7421:  \"mtportmon\",\n\t7426:  \"pmdmgr\",\n\t7427:  \"oveadmgr\",\n\t7428:  \"ovladmgr\",\n\t7429:  \"opi-sock\",\n\t7430:  \"xmpv7\",\n\t7431:  \"pmd\",\n\t7437:  \"faximum\",\n\t7443:  \"oracleas-https\",\n\t7473:  \"rise\",\n\t7491:  \"telops-lmd\",\n\t7500:  \"silhouette\",\n\t7501:  \"ovbus\",\n\t7510:  \"ovhpas\",\n\t7511:  \"pafec-lm\",\n\t7542:  \"saratoga\",\n\t7543:  \"atul\",\n\t7544:  \"nta-ds\",\n\t7545:  \"nta-us\",\n\t7546:  \"cfs\",\n\t7547:  \"cwmp\",\n\t7548:  \"tidp\",\n\t7549:  \"nls-tl\",\n\t7550:  \"cloudsignaling\",\n\t7560:  \"sncp\",\n\t7566:  \"vsi-omega\",\n\t7570:  \"aries-kfinder\",\n\t7574:  \"coherence-disc\",\n\t7588:  \"sun-lm\",\n\t7606:  \"mipi-debug\",\n\t7624:  \"indi\",\n\t7627:  \"soap-http\",\n\t7628:  \"zen-pawn\",\n\t7629:  \"xdas\",\n\t7633:  \"pmdfmgt\",\n\t7648:  \"cuseeme\",\n\t7674:  \"imqtunnels\",\n\t7675:  \"imqtunnel\",\n\t7676:  \"imqbrokerd\",\n\t7677:  \"sun-user-https\",\n\t7680:  \"pando-pub\",\n\t7689:  \"collaber\",\n\t7697:  \"klio\",\n\t7707:  \"sync-em7\",\n\t7708:  \"scinet\",\n\t7720:  \"medimageportal\",\n\t7724:  \"nsdeepfreezectl\",\n\t7725:  \"nitrogen\",\n\t7726:  \"freezexservice\",\n\t7727:  \"trident-data\",\n\t7728:  \"osvr\",\n\t7734:  \"smip\",\n\t7738:  \"aiagent\",\n\t7741:  \"scriptview\",\n\t7743:  \"sstp-1\",\n\t7744:  \"raqmon-pdu\",\n\t7747:  \"prgp\",\n\t7777:  \"cbt\",\n\t7778:  \"interwise\",\n\t7779:  \"vstat\",\n\t7781:  \"accu-lmgr\",\n\t7784:  \"s-bfd\",\n\t7786:  \"minivend\",\n\t7787:  \"popup-reminders\",\n\t7789:  \"office-tools\",\n\t7794:  \"q3ade\",\n\t7797:  \"pnet-conn\",\n\t7798:  \"pnet-enc\",\n\t7799:  \"altbsdp\",\n\t7800:  \"asr\",\n\t7801:  \"ssp-client\",\n\t7802:  \"vns-tp\",\n\t7810:  \"rbt-wanopt\",\n\t7845:  \"apc-7845\",\n\t7846:  \"apc-7846\",\n\t7872:  \"mipv6tls\",\n\t7880:  \"pss\",\n\t7887:  \"ubroker\",\n\t7900:  \"mevent\",\n\t7901:  \"tnos-sp\",\n\t7902:  \"tnos-dp\",\n\t7903:  \"tnos-dps\",\n\t7913:  \"qo-secure\",\n\t7932:  \"t2-drm\",\n\t7933:  \"t2-brm\",\n\t7962:  \"generalsync\",\n\t7967:  \"supercell\",\n\t7979:  \"micromuse-ncps\",\n\t7980:  \"quest-vista\",\n\t7982:  \"sossd-disc\",\n\t7998:  \"usicontentpush\",\n\t7999:  \"irdmi2\",\n\t8000:  \"irdmi\",\n\t8001:  \"vcom-tunnel\",\n\t8002:  \"teradataordbms\",\n\t8003:  \"mcreport\",\n\t8005:  \"mxi\",\n\t8006:  \"wpl-disc\",\n\t8007:  \"warppipe\",\n\t8008:  \"http-alt\",\n\t8019:  \"qbdb\",\n\t8020:  \"intu-ec-svcdisc\",\n\t8021:  \"intu-ec-client\",\n\t8022:  \"oa-system\",\n\t8025:  \"ca-audit-da\",\n\t8026:  \"ca-audit-ds\",\n\t8032:  \"pro-ed\",\n\t8033:  \"mindprint\",\n\t8034:  \"vantronix-mgmt\",\n\t8040:  \"ampify\",\n\t8041:  \"enguity-xccetp\",\n\t8052:  \"senomix01\",\n\t8053:  \"senomix02\",\n\t8054:  \"senomix03\",\n\t8055:  \"senomix04\",\n\t8056:  \"senomix05\",\n\t8057:  \"senomix06\",\n\t8058:  \"senomix07\",\n\t8059:  \"senomix08\",\n\t8060:  \"aero\",\n\t8074:  \"gadugadu\",\n\t8080:  \"http-alt\",\n\t8081:  \"sunproxyadmin\",\n\t8082:  \"us-cli\",\n\t8083:  \"us-srv\",\n\t8086:  \"d-s-n\",\n\t8087:  \"simplifymedia\",\n\t8088:  \"radan-http\",\n\t8097:  \"sac\",\n\t8100:  \"xprint-server\",\n\t8115:  \"mtl8000-matrix\",\n\t8116:  \"cp-cluster\",\n\t8118:  \"privoxy\",\n\t8121:  \"apollo-data\",\n\t8122:  \"apollo-admin\",\n\t8128:  \"paycash-online\",\n\t8129:  \"paycash-wbp\",\n\t8130:  \"indigo-vrmi\",\n\t8131:  \"indigo-vbcp\",\n\t8132:  \"dbabble\",\n\t8148:  \"isdd\",\n\t8149:  \"eor-game\",\n\t8160:  \"patrol\",\n\t8161:  \"patrol-snmp\",\n\t8182:  \"vmware-fdm\",\n\t8184:  \"itach\",\n\t8192:  \"spytechphone\",\n\t8194:  \"blp1\",\n\t8195:  \"blp2\",\n\t8199:  \"vvr-data\",\n\t8200:  \"trivnet1\",\n\t8201:  \"trivnet2\",\n\t8202:  \"aesop\",\n\t8204:  \"lm-perfworks\",\n\t8205:  \"lm-instmgr\",\n\t8206:  \"lm-dta\",\n\t8207:  \"lm-sserver\",\n\t8208:  \"lm-webwatcher\",\n\t8230:  \"rexecj\",\n\t8231:  \"hncp-udp-port\",\n\t8232:  \"hncp-dtls-port\",\n\t8243:  \"synapse-nhttps\",\n\t8276:  \"pando-sec\",\n\t8280:  \"synapse-nhttp\",\n\t8282:  \"libelle-disc\",\n\t8292:  \"blp3\",\n\t8294:  \"blp4\",\n\t8300:  \"tmi\",\n\t8301:  \"amberon\",\n\t8320:  \"tnp-discover\",\n\t8321:  \"tnp\",\n\t8322:  \"garmin-marine\",\n\t8351:  \"server-find\",\n\t8376:  \"cruise-enum\",\n\t8377:  \"cruise-swroute\",\n\t8378:  \"cruise-config\",\n\t8379:  \"cruise-diags\",\n\t8380:  \"cruise-update\",\n\t8383:  \"m2mservices\",\n\t8384:  \"marathontp\",\n\t8400:  \"cvd\",\n\t8401:  \"sabarsd\",\n\t8402:  \"abarsd\",\n\t8403:  \"admind\",\n\t8416:  \"espeech\",\n\t8417:  \"espeech-rtp\",\n\t8442:  \"cybro-a-bus\",\n\t8443:  \"pcsync-https\",\n\t8444:  \"pcsync-http\",\n\t8445:  \"copy-disc\",\n\t8450:  \"npmp\",\n\t8472:  \"otv\",\n\t8473:  \"vp2p\",\n\t8474:  \"noteshare\",\n\t8500:  \"fmtp\",\n\t8501:  \"cmtp-av\",\n\t8503:  \"lsp-self-ping\",\n\t8554:  \"rtsp-alt\",\n\t8555:  \"d-fence\",\n\t8567:  \"dof-tunnel\",\n\t8600:  \"asterix\",\n\t8609:  \"canon-cpp-disc\",\n\t8610:  \"canon-mfnp\",\n\t8611:  \"canon-bjnp1\",\n\t8612:  \"canon-bjnp2\",\n\t8613:  \"canon-bjnp3\",\n\t8614:  \"canon-bjnp4\",\n\t8675:  \"msi-cps-rm-disc\",\n\t8686:  \"sun-as-jmxrmi\",\n\t8732:  \"dtp-net\",\n\t8733:  \"ibus\",\n\t8763:  \"mc-appserver\",\n\t8764:  \"openqueue\",\n\t8765:  \"ultraseek-http\",\n\t8766:  \"amcs\",\n\t8770:  \"dpap\",\n\t8786:  \"msgclnt\",\n\t8787:  \"msgsrvr\",\n\t8793:  \"acd-pm\",\n\t8800:  \"sunwebadmin\",\n\t8804:  \"truecm\",\n\t8805:  \"pfcp\",\n\t8808:  \"ssports-bcast\",\n\t8873:  \"dxspider\",\n\t8880:  \"cddbp-alt\",\n\t8883:  \"secure-mqtt\",\n\t8888:  \"ddi-udp-1\",\n\t8889:  \"ddi-udp-2\",\n\t8890:  \"ddi-udp-3\",\n\t8891:  \"ddi-udp-4\",\n\t8892:  \"ddi-udp-5\",\n\t8893:  \"ddi-udp-6\",\n\t8894:  \"ddi-udp-7\",\n\t8899:  \"ospf-lite\",\n\t8900:  \"jmb-cds1\",\n\t8901:  \"jmb-cds2\",\n\t8910:  \"manyone-http\",\n\t8911:  \"manyone-xml\",\n\t8912:  \"wcbackup\",\n\t8913:  \"dragonfly\",\n\t8954:  \"cumulus-admin\",\n\t8980:  \"nod-provider\",\n\t8981:  \"nod-client\",\n\t8989:  \"sunwebadmins\",\n\t8990:  \"http-wmap\",\n\t8991:  \"https-wmap\",\n\t8999:  \"bctp\",\n\t9000:  \"cslistener\",\n\t9001:  \"etlservicemgr\",\n\t9002:  \"dynamid\",\n\t9007:  \"ogs-client\",\n\t9009:  \"pichat\",\n\t9020:  \"tambora\",\n\t9021:  \"panagolin-ident\",\n\t9022:  \"paragent\",\n\t9023:  \"swa-1\",\n\t9024:  \"swa-2\",\n\t9025:  \"swa-3\",\n\t9026:  \"swa-4\",\n\t9060:  \"CardWeb-RT\",\n\t9080:  \"glrpc\",\n\t9084:  \"aurora\",\n\t9085:  \"ibm-rsyscon\",\n\t9086:  \"net2display\",\n\t9087:  \"classic\",\n\t9088:  \"sqlexec\",\n\t9089:  \"sqlexec-ssl\",\n\t9090:  \"websm\",\n\t9091:  \"xmltec-xmlmail\",\n\t9092:  \"XmlIpcRegSvc\",\n\t9100:  \"hp-pdl-datastr\",\n\t9101:  \"bacula-dir\",\n\t9102:  \"bacula-fd\",\n\t9103:  \"bacula-sd\",\n\t9104:  \"peerwire\",\n\t9105:  \"xadmin\",\n\t9106:  \"astergate-disc\",\n\t9119:  \"mxit\",\n\t9131:  \"dddp\",\n\t9160:  \"apani1\",\n\t9161:  \"apani2\",\n\t9162:  \"apani3\",\n\t9163:  \"apani4\",\n\t9164:  \"apani5\",\n\t9191:  \"sun-as-jpda\",\n\t9200:  \"wap-wsp\",\n\t9201:  \"wap-wsp-wtp\",\n\t9202:  \"wap-wsp-s\",\n\t9203:  \"wap-wsp-wtp-s\",\n\t9204:  \"wap-vcard\",\n\t9205:  \"wap-vcal\",\n\t9206:  \"wap-vcard-s\",\n\t9207:  \"wap-vcal-s\",\n\t9208:  \"rjcdb-vcards\",\n\t9209:  \"almobile-system\",\n\t9210:  \"oma-mlp\",\n\t9211:  \"oma-mlp-s\",\n\t9212:  \"serverviewdbms\",\n\t9213:  \"serverstart\",\n\t9214:  \"ipdcesgbs\",\n\t9215:  \"insis\",\n\t9216:  \"acme\",\n\t9217:  \"fsc-port\",\n\t9222:  \"teamcoherence\",\n\t9255:  \"mon\",\n\t9277:  \"traingpsdata\",\n\t9278:  \"pegasus\",\n\t9279:  \"pegasus-ctl\",\n\t9280:  \"pgps\",\n\t9281:  \"swtp-port1\",\n\t9282:  \"swtp-port2\",\n\t9283:  \"callwaveiam\",\n\t9284:  \"visd\",\n\t9285:  \"n2h2server\",\n\t9286:  \"n2receive\",\n\t9287:  \"cumulus\",\n\t9292:  \"armtechdaemon\",\n\t9293:  \"storview\",\n\t9294:  \"armcenterhttp\",\n\t9295:  \"armcenterhttps\",\n\t9300:  \"vrace\",\n\t9318:  \"secure-ts\",\n\t9321:  \"guibase\",\n\t9343:  \"mpidcmgr\",\n\t9344:  \"mphlpdmc\",\n\t9346:  \"ctechlicensing\",\n\t9374:  \"fjdmimgr\",\n\t9380:  \"boxp\",\n\t9396:  \"fjinvmgr\",\n\t9397:  \"mpidcagt\",\n\t9400:  \"sec-t4net-srv\",\n\t9401:  \"sec-t4net-clt\",\n\t9402:  \"sec-pc2fax-srv\",\n\t9418:  \"git\",\n\t9443:  \"tungsten-https\",\n\t9444:  \"wso2esb-console\",\n\t9450:  \"sntlkeyssrvr\",\n\t9500:  \"ismserver\",\n\t9522:  \"sma-spw\",\n\t9535:  \"mngsuite\",\n\t9536:  \"laes-bf\",\n\t9555:  \"trispen-sra\",\n\t9592:  \"ldgateway\",\n\t9593:  \"cba8\",\n\t9594:  \"msgsys\",\n\t9595:  \"pds\",\n\t9596:  \"mercury-disc\",\n\t9597:  \"pd-admin\",\n\t9598:  \"vscp\",\n\t9599:  \"robix\",\n\t9600:  \"micromuse-ncpw\",\n\t9612:  \"streamcomm-ds\",\n\t9618:  \"condor\",\n\t9628:  \"odbcpathway\",\n\t9629:  \"uniport\",\n\t9632:  \"mc-comm\",\n\t9667:  \"xmms2\",\n\t9668:  \"tec5-sdctp\",\n\t9694:  \"client-wakeup\",\n\t9695:  \"ccnx\",\n\t9700:  \"board-roar\",\n\t9747:  \"l5nas-parchan\",\n\t9750:  \"board-voip\",\n\t9753:  \"rasadv\",\n\t9762:  \"tungsten-http\",\n\t9800:  \"davsrc\",\n\t9801:  \"sstp-2\",\n\t9802:  \"davsrcs\",\n\t9875:  \"sapv1\",\n\t9878:  \"kca-service\",\n\t9888:  \"cyborg-systems\",\n\t9889:  \"gt-proxy\",\n\t9898:  \"monkeycom\",\n\t9899:  \"sctp-tunneling\",\n\t9900:  \"iua\",\n\t9901:  \"enrp\",\n\t9903:  \"multicast-ping\",\n\t9909:  \"domaintime\",\n\t9911:  \"sype-transport\",\n\t9950:  \"apc-9950\",\n\t9951:  \"apc-9951\",\n\t9952:  \"apc-9952\",\n\t9953:  \"acis\",\n\t9955:  \"alljoyn-mcm\",\n\t9956:  \"alljoyn\",\n\t9966:  \"odnsp\",\n\t9987:  \"dsm-scm-target\",\n\t9990:  \"osm-appsrvr\",\n\t9991:  \"osm-oev\",\n\t9992:  \"palace-1\",\n\t9993:  \"palace-2\",\n\t9994:  \"palace-3\",\n\t9995:  \"palace-4\",\n\t9996:  \"palace-5\",\n\t9997:  \"palace-6\",\n\t9998:  \"distinct32\",\n\t9999:  \"distinct\",\n\t10000: \"ndmp\",\n\t10001: \"scp-config\",\n\t10002: \"documentum\",\n\t10003: \"documentum-s\",\n\t10007: \"mvs-capacity\",\n\t10008: \"octopus\",\n\t10009: \"swdtp-sv\",\n\t10050: \"zabbix-agent\",\n\t10051: \"zabbix-trapper\",\n\t10080: \"amanda\",\n\t10081: \"famdc\",\n\t10100: \"itap-ddtp\",\n\t10101: \"ezmeeting-2\",\n\t10102: \"ezproxy-2\",\n\t10103: \"ezrelay\",\n\t10104: \"swdtp\",\n\t10107: \"bctp-server\",\n\t10110: \"nmea-0183\",\n\t10111: \"nmea-onenet\",\n\t10113: \"netiq-endpoint\",\n\t10114: \"netiq-qcheck\",\n\t10115: \"netiq-endpt\",\n\t10116: \"netiq-voipa\",\n\t10117: \"iqrm\",\n\t10128: \"bmc-perf-sd\",\n\t10160: \"qb-db-server\",\n\t10161: \"snmpdtls\",\n\t10162: \"snmpdtls-trap\",\n\t10200: \"trisoap\",\n\t10201: \"rscs\",\n\t10252: \"apollo-relay\",\n\t10253: \"eapol-relay\",\n\t10260: \"axis-wimp-port\",\n\t10288: \"blocks\",\n\t10439: \"bngsync\",\n\t10500: \"hip-nat-t\",\n\t10540: \"MOS-lower\",\n\t10541: \"MOS-upper\",\n\t10542: \"MOS-aux\",\n\t10543: \"MOS-soap\",\n\t10544: \"MOS-soap-opt\",\n\t10800: \"gap\",\n\t10805: \"lpdg\",\n\t10810: \"nmc-disc\",\n\t10860: \"helix\",\n\t10880: \"bveapi\",\n\t10990: \"rmiaux\",\n\t11000: \"irisa\",\n\t11001: \"metasys\",\n\t10023: \"cefd-vmp\",\n\t11095: \"weave\",\n\t11106: \"sgi-lk\",\n\t11108: \"myq-termlink\",\n\t11111: \"vce\",\n\t11112: \"dicom\",\n\t11161: \"suncacao-snmp\",\n\t11162: \"suncacao-jmxmp\",\n\t11163: \"suncacao-rmi\",\n\t11164: \"suncacao-csa\",\n\t11165: \"suncacao-websvc\",\n\t11171: \"snss\",\n\t11201: \"smsqp\",\n\t11208: \"wifree\",\n\t11211: \"memcache\",\n\t11319: \"imip\",\n\t11320: \"imip-channels\",\n\t11321: \"arena-server\",\n\t11367: \"atm-uhas\",\n\t11371: \"hkp\",\n\t11430: \"lsdp\",\n\t11600: \"tempest-port\",\n\t11720: \"h323callsigalt\",\n\t11723: \"emc-xsw-dcache\",\n\t11751: \"intrepid-ssl\",\n\t11796: \"lanschool-mpt\",\n\t11876: \"xoraya\",\n\t11877: \"x2e-disc\",\n\t11967: \"sysinfo-sp\",\n\t12000: \"entextxid\",\n\t12001: \"entextnetwk\",\n\t12002: \"entexthigh\",\n\t12003: \"entextmed\",\n\t12004: \"entextlow\",\n\t12005: \"dbisamserver1\",\n\t12006: \"dbisamserver2\",\n\t12007: \"accuracer\",\n\t12008: \"accuracer-dbms\",\n\t12009: \"ghvpn\",\n\t12012: \"vipera\",\n\t12013: \"vipera-ssl\",\n\t12109: \"rets-ssl\",\n\t12121: \"nupaper-ss\",\n\t12168: \"cawas\",\n\t12172: \"hivep\",\n\t12300: \"linogridengine\",\n\t12321: \"warehouse-sss\",\n\t12322: \"warehouse\",\n\t12345: \"italk\",\n\t12753: \"tsaf\",\n\t13160: \"i-zipqd\",\n\t13216: \"bcslogc\",\n\t13217: \"rs-pias\",\n\t13218: \"emc-vcas-udp\",\n\t13223: \"powwow-client\",\n\t13224: \"powwow-server\",\n\t13400: \"doip-disc\",\n\t13720: \"bprd\",\n\t13721: \"bpdbm\",\n\t13722: \"bpjava-msvc\",\n\t13724: \"vnetd\",\n\t13782: \"bpcd\",\n\t13783: \"vopied\",\n\t13785: \"nbdb\",\n\t13786: \"nomdb\",\n\t13818: \"dsmcc-config\",\n\t13819: \"dsmcc-session\",\n\t13820: \"dsmcc-passthru\",\n\t13821: \"dsmcc-download\",\n\t13822: \"dsmcc-ccp\",\n\t13894: \"ucontrol\",\n\t13929: \"dta-systems\",\n\t14000: \"scotty-ft\",\n\t14001: \"sua\",\n\t14002: \"scotty-disc\",\n\t14033: \"sage-best-com1\",\n\t14034: \"sage-best-com2\",\n\t14141: \"vcs-app\",\n\t14142: \"icpp\",\n\t14145: \"gcm-app\",\n\t14149: \"vrts-tdd\",\n\t14154: \"vad\",\n\t14250: \"cps\",\n\t14414: \"ca-web-update\",\n\t14936: \"hde-lcesrvr-1\",\n\t14937: \"hde-lcesrvr-2\",\n\t15000: \"hydap\",\n\t15118: \"v2g-secc\",\n\t15345: \"xpilot\",\n\t15363: \"3link\",\n\t15555: \"cisco-snat\",\n\t15660: \"bex-xr\",\n\t15740: \"ptp\",\n\t15998: \"2ping\",\n\t16003: \"alfin\",\n\t16161: \"sun-sea-port\",\n\t16309: \"etb4j\",\n\t16310: \"pduncs\",\n\t16311: \"pdefmns\",\n\t16360: \"netserialext1\",\n\t16361: \"netserialext2\",\n\t16367: \"netserialext3\",\n\t16368: \"netserialext4\",\n\t16384: \"connected\",\n\t16666: \"vtp\",\n\t16900: \"newbay-snc-mc\",\n\t16950: \"sgcip\",\n\t16991: \"intel-rci-mp\",\n\t16992: \"amt-soap-http\",\n\t16993: \"amt-soap-https\",\n\t16994: \"amt-redir-tcp\",\n\t16995: \"amt-redir-tls\",\n\t17007: \"isode-dua\",\n\t17185: \"soundsvirtual\",\n\t17219: \"chipper\",\n\t17220: \"avtp\",\n\t17221: \"avdecc\",\n\t17222: \"cpsp\",\n\t17224: \"trdp-pd\",\n\t17225: \"trdp-md\",\n\t17234: \"integrius-stp\",\n\t17235: \"ssh-mgmt\",\n\t17500: \"db-lsp-disc\",\n\t17729: \"ea\",\n\t17754: \"zep\",\n\t17755: \"zigbee-ip\",\n\t17756: \"zigbee-ips\",\n\t18000: \"biimenu\",\n\t18181: \"opsec-cvp\",\n\t18182: \"opsec-ufp\",\n\t18183: \"opsec-sam\",\n\t18184: \"opsec-lea\",\n\t18185: \"opsec-omi\",\n\t18186: \"ohsc\",\n\t18187: \"opsec-ela\",\n\t18241: \"checkpoint-rtm\",\n\t18262: \"gv-pf\",\n\t18463: \"ac-cluster\",\n\t18634: \"rds-ib\",\n\t18635: \"rds-ip\",\n\t18668: \"vdmmesh-disc\",\n\t18769: \"ique\",\n\t18881: \"infotos\",\n\t18888: \"apc-necmp\",\n\t19000: \"igrid\",\n\t19007: \"scintilla\",\n\t19191: \"opsec-uaa\",\n\t19194: \"ua-secureagent\",\n\t19220: \"cora-disc\",\n\t19283: \"keysrvr\",\n\t19315: \"keyshadow\",\n\t19398: \"mtrgtrans\",\n\t19410: \"hp-sco\",\n\t19411: \"hp-sca\",\n\t19412: \"hp-sessmon\",\n\t19539: \"fxuptp\",\n\t19540: \"sxuptp\",\n\t19541: \"jcp\",\n\t19788: \"mle\",\n\t19999: \"dnp-sec\",\n\t20000: \"dnp\",\n\t20001: \"microsan\",\n\t20002: \"commtact-http\",\n\t20003: \"commtact-https\",\n\t20005: \"openwebnet\",\n\t20012: \"ss-idi-disc\",\n\t20014: \"opendeploy\",\n\t20034: \"nburn-id\",\n\t20046: \"tmophl7mts\",\n\t20048: \"mountd\",\n\t20049: \"nfsrdma\",\n\t20167: \"tolfab\",\n\t20202: \"ipdtp-port\",\n\t20222: \"ipulse-ics\",\n\t20480: \"emwavemsg\",\n\t20670: \"track\",\n\t20999: \"athand-mmp\",\n\t21000: \"irtrans\",\n\t21554: \"dfserver\",\n\t21590: \"vofr-gateway\",\n\t21800: \"tvpm\",\n\t21845: \"webphone\",\n\t21846: \"netspeak-is\",\n\t21847: \"netspeak-cs\",\n\t21848: \"netspeak-acd\",\n\t21849: \"netspeak-cps\",\n\t22000: \"snapenetio\",\n\t22001: \"optocontrol\",\n\t22002: \"optohost002\",\n\t22003: \"optohost003\",\n\t22004: \"optohost004\",\n\t22005: \"optohost004\",\n\t22273: \"wnn6\",\n\t22305: \"cis\",\n\t22335: \"shrewd-stream\",\n\t22343: \"cis-secure\",\n\t22347: \"wibukey\",\n\t22350: \"codemeter\",\n\t22555: \"vocaltec-phone\",\n\t22763: \"talikaserver\",\n\t22800: \"aws-brf\",\n\t22951: \"brf-gw\",\n\t23000: \"inovaport1\",\n\t23001: \"inovaport2\",\n\t23002: \"inovaport3\",\n\t23003: \"inovaport4\",\n\t23004: \"inovaport5\",\n\t23005: \"inovaport6\",\n\t23272: \"s102\",\n\t23294: \"5afe-disc\",\n\t23333: \"elxmgmt\",\n\t23400: \"novar-dbase\",\n\t23401: \"novar-alarm\",\n\t23402: \"novar-global\",\n\t24000: \"med-ltp\",\n\t24001: \"med-fsp-rx\",\n\t24002: \"med-fsp-tx\",\n\t24003: \"med-supp\",\n\t24004: \"med-ovw\",\n\t24005: \"med-ci\",\n\t24006: \"med-net-svc\",\n\t24242: \"filesphere\",\n\t24249: \"vista-4gl\",\n\t24321: \"ild\",\n\t24322: \"hid\",\n\t24386: \"intel-rci\",\n\t24465: \"tonidods\",\n\t24554: \"binkp\",\n\t24577: \"bilobit-update\",\n\t24676: \"canditv\",\n\t24677: \"flashfiler\",\n\t24678: \"proactivate\",\n\t24680: \"tcc-http\",\n\t24850: \"assoc-disc\",\n\t24922: \"find\",\n\t25000: \"icl-twobase1\",\n\t25001: \"icl-twobase2\",\n\t25002: \"icl-twobase3\",\n\t25003: \"icl-twobase4\",\n\t25004: \"icl-twobase5\",\n\t25005: \"icl-twobase6\",\n\t25006: \"icl-twobase7\",\n\t25007: \"icl-twobase8\",\n\t25008: \"icl-twobase9\",\n\t25009: \"icl-twobase10\",\n\t25793: \"vocaltec-hos\",\n\t25900: \"tasp-net\",\n\t25901: \"niobserver\",\n\t25902: \"nilinkanalyst\",\n\t25903: \"niprobe\",\n\t25954: \"bf-game\",\n\t25955: \"bf-master\",\n\t26000: \"quake\",\n\t26133: \"scscp\",\n\t26208: \"wnn6-ds\",\n\t26260: \"ezproxy\",\n\t26261: \"ezmeeting\",\n\t26262: \"k3software-svr\",\n\t26263: \"k3software-cli\",\n\t26486: \"exoline-udp\",\n\t26487: \"exoconfig\",\n\t26489: \"exonet\",\n\t27345: \"imagepump\",\n\t27442: \"jesmsjc\",\n\t27504: \"kopek-httphead\",\n\t27782: \"ars-vista\",\n\t27999: \"tw-auth-key\",\n\t28000: \"nxlmd\",\n\t28119: \"a27-ran-ran\",\n\t28200: \"voxelstorm\",\n\t28240: \"siemensgsm\",\n\t29167: \"otmp\",\n\t30001: \"pago-services1\",\n\t30002: \"pago-services2\",\n\t30003: \"amicon-fpsu-ra\",\n\t30004: \"amicon-fpsu-s\",\n\t30260: \"kingdomsonline\",\n\t30832: \"samsung-disc\",\n\t30999: \"ovobs\",\n\t31016: \"ka-kdp\",\n\t31029: \"yawn\",\n\t31416: \"xqosd\",\n\t31457: \"tetrinet\",\n\t31620: \"lm-mon\",\n\t31765: \"gamesmith-port\",\n\t31948: \"iceedcp-tx\",\n\t31949: \"iceedcp-rx\",\n\t32034: \"iracinghelper\",\n\t32249: \"t1distproc60\",\n\t32483: \"apm-link\",\n\t32635: \"sec-ntb-clnt\",\n\t32636: \"DMExpress\",\n\t32767: \"filenet-powsrm\",\n\t32768: \"filenet-tms\",\n\t32769: \"filenet-rpc\",\n\t32770: \"filenet-nch\",\n\t32771: \"filenet-rmi\",\n\t32772: \"filenet-pa\",\n\t32773: \"filenet-cm\",\n\t32774: \"filenet-re\",\n\t32775: \"filenet-pch\",\n\t32776: \"filenet-peior\",\n\t32777: \"filenet-obrok\",\n\t32801: \"mlsn\",\n\t32896: \"idmgratm\",\n\t33123: \"aurora-balaena\",\n\t33331: \"diamondport\",\n\t33334: \"speedtrace-disc\",\n\t33434: \"traceroute\",\n\t33656: \"snip-slave\",\n\t34249: \"turbonote-2\",\n\t34378: \"p-net-local\",\n\t34379: \"p-net-remote\",\n\t34567: \"edi_service\",\n\t34962: \"profinet-rt\",\n\t34963: \"profinet-rtm\",\n\t34964: \"profinet-cm\",\n\t34980: \"ethercat\",\n\t35001: \"rt-viewer\",\n\t35004: \"rt-classmanager\",\n\t35100: \"axio-disc\",\n\t35355: \"altova-lm-disc\",\n\t36001: \"allpeers\",\n\t36411: \"wlcp\",\n\t36865: \"kastenxpipe\",\n\t37475: \"neckar\",\n\t37654: \"unisys-eportal\",\n\t38002: \"crescoctrl-disc\",\n\t38201: \"galaxy7-data\",\n\t38202: \"fairview\",\n\t38203: \"agpolicy\",\n\t39681: \"turbonote-1\",\n\t40000: \"safetynetp\",\n\t40023: \"k-patentssensor\",\n\t40841: \"cscp\",\n\t40842: \"csccredir\",\n\t40843: \"csccfirewall\",\n\t40853: \"ortec-disc\",\n\t41111: \"fs-qos\",\n\t41230: \"z-wave-s\",\n\t41794: \"crestron-cip\",\n\t41795: \"crestron-ctp\",\n\t42508: \"candp\",\n\t42509: \"candrp\",\n\t42510: \"caerpc\",\n\t43000: \"recvr-rc-disc\",\n\t43188: \"reachout\",\n\t43189: \"ndm-agent-port\",\n\t43190: \"ip-provision\",\n\t43210: \"shaperai-disc\",\n\t43439: \"eq3-config\",\n\t43440: \"ew-disc-cmd\",\n\t43441: \"ciscocsdb\",\n\t44321: \"pmcd\",\n\t44322: \"pmcdproxy\",\n\t44544: \"domiq\",\n\t44553: \"rbr-debug\",\n\t44600: \"asihpi\",\n\t44818: \"EtherNet-IP-2\",\n\t44900: \"m3da-disc\",\n\t45000: \"asmp-mon\",\n\t45054: \"invision-ag\",\n\t45514: \"cloudcheck-ping\",\n\t45678: \"eba\",\n\t45825: \"qdb2service\",\n\t45966: \"ssr-servermgr\",\n\t46999: \"mediabox\",\n\t47000: \"mbus\",\n\t47100: \"jvl-mactalk\",\n\t47557: \"dbbrowse\",\n\t47624: \"directplaysrvr\",\n\t47806: \"ap\",\n\t47808: \"bacnet\",\n\t47809: \"presonus-ucnet\",\n\t48000: \"nimcontroller\",\n\t48001: \"nimspooler\",\n\t48002: \"nimhub\",\n\t48003: \"nimgtw\",\n\t48128: \"isnetserv\",\n\t48129: \"blp5\",\n\t48556: \"com-bardac-dw\",\n\t48619: \"iqobject\",\n\t48653: \"robotraconteur\",\n\t49001: \"nusdp-disc\",\n}\nvar sctpPortNames = map[SCTPPort]string{\n\t9:     \"discard\",\n\t20:    \"ftp-data\",\n\t21:    \"ftp\",\n\t22:    \"ssh\",\n\t80:    \"http\",\n\t179:   \"bgp\",\n\t443:   \"https\",\n\t1021:  \"exp1\",\n\t1022:  \"exp2\",\n\t1167:  \"cisco-ipsla\",\n\t1720:  \"h323hostcall\",\n\t2049:  \"nfs\",\n\t2225:  \"rcip-itu\",\n\t2904:  \"m2ua\",\n\t2905:  \"m3ua\",\n\t2944:  \"megaco-h248\",\n\t2945:  \"h248-binary\",\n\t3097:  \"itu-bicc-stc\",\n\t3565:  \"m2pa\",\n\t3863:  \"asap-sctp\",\n\t3864:  \"asap-sctp-tls\",\n\t3868:  \"diameter\",\n\t4333:  \"ahsp\",\n\t4502:  \"a25-fap-fgw\",\n\t4711:  \"trinity-dist\",\n\t4739:  \"ipfix\",\n\t4740:  \"ipfixs\",\n\t5060:  \"sip\",\n\t5061:  \"sips\",\n\t5090:  \"car\",\n\t5091:  \"cxtp\",\n\t5215:  \"noteza\",\n\t5445:  \"smbdirect\",\n\t5672:  \"amqp\",\n\t5675:  \"v5ua\",\n\t5868:  \"diameters\",\n\t5910:  \"cm\",\n\t5911:  \"cpdlc\",\n\t5912:  \"fis\",\n\t5913:  \"ads-c\",\n\t6704:  \"frc-hp\",\n\t6705:  \"frc-mp\",\n\t6706:  \"frc-lp\",\n\t6970:  \"conductor-mpx\",\n\t7626:  \"simco\",\n\t7701:  \"nfapi\",\n\t7728:  \"osvr\",\n\t8471:  \"pim-port\",\n\t9082:  \"lcs-ap\",\n\t9084:  \"aurora\",\n\t9900:  \"iua\",\n\t9901:  \"enrp-sctp\",\n\t9902:  \"enrp-sctp-tls\",\n\t11997: \"wmereceiving\",\n\t11998: \"wmedistribution\",\n\t11999: \"wmereporting\",\n\t14001: \"sua\",\n\t20049: \"nfsrdma\",\n\t25471: \"rna\",\n\t29118: \"sgsap\",\n\t29168: \"sbcap\",\n\t29169: \"iuhsctpassoc\",\n\t30100: \"rwp\",\n\t36412: \"s1-control\",\n\t36422: \"x2-control\",\n\t36423: \"slmap\",\n\t36424: \"nq-ap\",\n\t36443: \"m2ap\",\n\t36444: \"m3ap\",\n\t36462: \"xw-control\",\n\t38412: \"ng-control\",\n\t38422: \"xn-control\",\n\t38472: \"f1-control\",\n}\n"
  },
  {
    "path": "layers/icmp4.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/google/gopacket\"\n)\n\nconst (\n\tICMPv4TypeEchoReply              = 0\n\tICMPv4TypeDestinationUnreachable = 3\n\tICMPv4TypeSourceQuench           = 4\n\tICMPv4TypeRedirect               = 5\n\tICMPv4TypeEchoRequest            = 8\n\tICMPv4TypeRouterAdvertisement    = 9\n\tICMPv4TypeRouterSolicitation     = 10\n\tICMPv4TypeTimeExceeded           = 11\n\tICMPv4TypeParameterProblem       = 12\n\tICMPv4TypeTimestampRequest       = 13\n\tICMPv4TypeTimestampReply         = 14\n\tICMPv4TypeInfoRequest            = 15\n\tICMPv4TypeInfoReply              = 16\n\tICMPv4TypeAddressMaskRequest     = 17\n\tICMPv4TypeAddressMaskReply       = 18\n)\n\nconst (\n\t// DestinationUnreachable\n\tICMPv4CodeNet                 = 0\n\tICMPv4CodeHost                = 1\n\tICMPv4CodeProtocol            = 2\n\tICMPv4CodePort                = 3\n\tICMPv4CodeFragmentationNeeded = 4\n\tICMPv4CodeSourceRoutingFailed = 5\n\tICMPv4CodeNetUnknown          = 6\n\tICMPv4CodeHostUnknown         = 7\n\tICMPv4CodeSourceIsolated      = 8\n\tICMPv4CodeNetAdminProhibited  = 9\n\tICMPv4CodeHostAdminProhibited = 10\n\tICMPv4CodeNetTOS              = 11\n\tICMPv4CodeHostTOS             = 12\n\tICMPv4CodeCommAdminProhibited = 13\n\tICMPv4CodeHostPrecedence      = 14\n\tICMPv4CodePrecedenceCutoff    = 15\n\n\t// TimeExceeded\n\tICMPv4CodeTTLExceeded                    = 0\n\tICMPv4CodeFragmentReassemblyTimeExceeded = 1\n\n\t// ParameterProblem\n\tICMPv4CodePointerIndicatesError = 0\n\tICMPv4CodeMissingOption         = 1\n\tICMPv4CodeBadLength             = 2\n\n\t// Redirect\n\t// ICMPv4CodeNet  = same as for DestinationUnreachable\n\t// ICMPv4CodeHost = same as for DestinationUnreachable\n\tICMPv4CodeTOSNet  = 2\n\tICMPv4CodeTOSHost = 3\n)\n\ntype icmpv4TypeCodeInfoStruct struct {\n\ttypeStr string\n\tcodeStr *map[uint8]string\n}\n\nvar (\n\ticmpv4TypeCodeInfo = map[uint8]icmpv4TypeCodeInfoStruct{\n\t\tICMPv4TypeDestinationUnreachable: icmpv4TypeCodeInfoStruct{\n\t\t\t\"DestinationUnreachable\", &map[uint8]string{\n\t\t\t\tICMPv4CodeNet:                 \"Net\",\n\t\t\t\tICMPv4CodeHost:                \"Host\",\n\t\t\t\tICMPv4CodeProtocol:            \"Protocol\",\n\t\t\t\tICMPv4CodePort:                \"Port\",\n\t\t\t\tICMPv4CodeFragmentationNeeded: \"FragmentationNeeded\",\n\t\t\t\tICMPv4CodeSourceRoutingFailed: \"SourceRoutingFailed\",\n\t\t\t\tICMPv4CodeNetUnknown:          \"NetUnknown\",\n\t\t\t\tICMPv4CodeHostUnknown:         \"HostUnknown\",\n\t\t\t\tICMPv4CodeSourceIsolated:      \"SourceIsolated\",\n\t\t\t\tICMPv4CodeNetAdminProhibited:  \"NetAdminProhibited\",\n\t\t\t\tICMPv4CodeHostAdminProhibited: \"HostAdminProhibited\",\n\t\t\t\tICMPv4CodeNetTOS:              \"NetTOS\",\n\t\t\t\tICMPv4CodeHostTOS:             \"HostTOS\",\n\t\t\t\tICMPv4CodeCommAdminProhibited: \"CommAdminProhibited\",\n\t\t\t\tICMPv4CodeHostPrecedence:      \"HostPrecedence\",\n\t\t\t\tICMPv4CodePrecedenceCutoff:    \"PrecedenceCutoff\",\n\t\t\t},\n\t\t},\n\t\tICMPv4TypeTimeExceeded: icmpv4TypeCodeInfoStruct{\n\t\t\t\"TimeExceeded\", &map[uint8]string{\n\t\t\t\tICMPv4CodeTTLExceeded:                    \"TTLExceeded\",\n\t\t\t\tICMPv4CodeFragmentReassemblyTimeExceeded: \"FragmentReassemblyTimeExceeded\",\n\t\t\t},\n\t\t},\n\t\tICMPv4TypeParameterProblem: icmpv4TypeCodeInfoStruct{\n\t\t\t\"ParameterProblem\", &map[uint8]string{\n\t\t\t\tICMPv4CodePointerIndicatesError: \"PointerIndicatesError\",\n\t\t\t\tICMPv4CodeMissingOption:         \"MissingOption\",\n\t\t\t\tICMPv4CodeBadLength:             \"BadLength\",\n\t\t\t},\n\t\t},\n\t\tICMPv4TypeSourceQuench: icmpv4TypeCodeInfoStruct{\n\t\t\t\"SourceQuench\", nil,\n\t\t},\n\t\tICMPv4TypeRedirect: icmpv4TypeCodeInfoStruct{\n\t\t\t\"Redirect\", &map[uint8]string{\n\t\t\t\tICMPv4CodeNet:     \"Net\",\n\t\t\t\tICMPv4CodeHost:    \"Host\",\n\t\t\t\tICMPv4CodeTOSNet:  \"TOS+Net\",\n\t\t\t\tICMPv4CodeTOSHost: \"TOS+Host\",\n\t\t\t},\n\t\t},\n\t\tICMPv4TypeEchoRequest: icmpv4TypeCodeInfoStruct{\n\t\t\t\"EchoRequest\", nil,\n\t\t},\n\t\tICMPv4TypeEchoReply: icmpv4TypeCodeInfoStruct{\n\t\t\t\"EchoReply\", nil,\n\t\t},\n\t\tICMPv4TypeTimestampRequest: icmpv4TypeCodeInfoStruct{\n\t\t\t\"TimestampRequest\", nil,\n\t\t},\n\t\tICMPv4TypeTimestampReply: icmpv4TypeCodeInfoStruct{\n\t\t\t\"TimestampReply\", nil,\n\t\t},\n\t\tICMPv4TypeInfoRequest: icmpv4TypeCodeInfoStruct{\n\t\t\t\"InfoRequest\", nil,\n\t\t},\n\t\tICMPv4TypeInfoReply: icmpv4TypeCodeInfoStruct{\n\t\t\t\"InfoReply\", nil,\n\t\t},\n\t\tICMPv4TypeRouterSolicitation: icmpv4TypeCodeInfoStruct{\n\t\t\t\"RouterSolicitation\", nil,\n\t\t},\n\t\tICMPv4TypeRouterAdvertisement: icmpv4TypeCodeInfoStruct{\n\t\t\t\"RouterAdvertisement\", nil,\n\t\t},\n\t\tICMPv4TypeAddressMaskRequest: icmpv4TypeCodeInfoStruct{\n\t\t\t\"AddressMaskRequest\", nil,\n\t\t},\n\t\tICMPv4TypeAddressMaskReply: icmpv4TypeCodeInfoStruct{\n\t\t\t\"AddressMaskReply\", nil,\n\t\t},\n\t}\n)\n\ntype ICMPv4TypeCode uint16\n\n// Type returns the ICMPv4 type field.\nfunc (a ICMPv4TypeCode) Type() uint8 {\n\treturn uint8(a >> 8)\n}\n\n// Code returns the ICMPv4 code field.\nfunc (a ICMPv4TypeCode) Code() uint8 {\n\treturn uint8(a)\n}\n\nfunc (a ICMPv4TypeCode) String() string {\n\tt, c := a.Type(), a.Code()\n\tstrInfo, ok := icmpv4TypeCodeInfo[t]\n\tif !ok {\n\t\t// Unknown ICMPv4 type field\n\t\treturn fmt.Sprintf(\"%d(%d)\", t, c)\n\t}\n\ttypeStr := strInfo.typeStr\n\tif strInfo.codeStr == nil && c == 0 {\n\t\t// The ICMPv4 type does not make use of the code field\n\t\treturn fmt.Sprintf(\"%s\", strInfo.typeStr)\n\t}\n\tif strInfo.codeStr == nil && c != 0 {\n\t\t// The ICMPv4 type does not make use of the code field, but it is present anyway\n\t\treturn fmt.Sprintf(\"%s(Code: %d)\", typeStr, c)\n\t}\n\tcodeStr, ok := (*strInfo.codeStr)[c]\n\tif !ok {\n\t\t// We don't know this ICMPv4 code; print the numerical value\n\t\treturn fmt.Sprintf(\"%s(Code: %d)\", typeStr, c)\n\t}\n\treturn fmt.Sprintf(\"%s(%s)\", typeStr, codeStr)\n}\n\nfunc (a ICMPv4TypeCode) GoString() string {\n\tt := reflect.TypeOf(a)\n\treturn fmt.Sprintf(\"%s(%d, %d)\", t.String(), a.Type(), a.Code())\n}\n\n// SerializeTo writes the ICMPv4TypeCode value to the 'bytes' buffer.\nfunc (a ICMPv4TypeCode) SerializeTo(bytes []byte) {\n\tbinary.BigEndian.PutUint16(bytes, uint16(a))\n}\n\n// CreateICMPv4TypeCode is a convenience function to create an ICMPv4TypeCode\n// gopacket type from the ICMPv4 type and code values.\nfunc CreateICMPv4TypeCode(typ uint8, code uint8) ICMPv4TypeCode {\n\treturn ICMPv4TypeCode(binary.BigEndian.Uint16([]byte{typ, code}))\n}\n\n// ICMPv4 is the layer for IPv4 ICMP packet data.\ntype ICMPv4 struct {\n\tBaseLayer\n\tTypeCode ICMPv4TypeCode\n\tChecksum uint16\n\tId       uint16\n\tSeq      uint16\n}\n\n// LayerType returns LayerTypeICMPv4.\nfunc (i *ICMPv4) LayerType() gopacket.LayerType { return LayerTypeICMPv4 }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (i *ICMPv4) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 8 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ICMP layer less then 8 bytes for ICMPv4 packet\")\n\t}\n\ti.TypeCode = CreateICMPv4TypeCode(data[0], data[1])\n\ti.Checksum = binary.BigEndian.Uint16(data[2:4])\n\ti.Id = binary.BigEndian.Uint16(data[4:6])\n\ti.Seq = binary.BigEndian.Uint16(data[6:8])\n\ti.BaseLayer = BaseLayer{data[:8], data[8:]}\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (i *ICMPv4) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbytes, err := b.PrependBytes(8)\n\tif err != nil {\n\t\treturn err\n\t}\n\ti.TypeCode.SerializeTo(bytes)\n\tbinary.BigEndian.PutUint16(bytes[4:], i.Id)\n\tbinary.BigEndian.PutUint16(bytes[6:], i.Seq)\n\tif opts.ComputeChecksums {\n\t\tbytes[2] = 0\n\t\tbytes[3] = 0\n\t\ti.Checksum = tcpipChecksum(b.Bytes(), 0)\n\t}\n\tbinary.BigEndian.PutUint16(bytes[2:], i.Checksum)\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (i *ICMPv4) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeICMPv4\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (i *ICMPv4) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\nfunc decodeICMPv4(data []byte, p gopacket.PacketBuilder) error {\n\ti := &ICMPv4{}\n\treturn decodingLayerDecoder(i, data, p)\n}\n"
  },
  {
    "path": "layers/icmp6.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/google/gopacket\"\n)\n\nconst (\n\t// The following are from RFC 4443\n\tICMPv6TypeDestinationUnreachable = 1\n\tICMPv6TypePacketTooBig           = 2\n\tICMPv6TypeTimeExceeded           = 3\n\tICMPv6TypeParameterProblem       = 4\n\tICMPv6TypeEchoRequest            = 128\n\tICMPv6TypeEchoReply              = 129\n\n\t// The following are from RFC 4861\n\tICMPv6TypeRouterSolicitation    = 133\n\tICMPv6TypeRouterAdvertisement   = 134\n\tICMPv6TypeNeighborSolicitation  = 135\n\tICMPv6TypeNeighborAdvertisement = 136\n\tICMPv6TypeRedirect              = 137\n\n\t// The following are from RFC 2710\n\tICMPv6TypeMLDv1MulticastListenerQueryMessage  = 130\n\tICMPv6TypeMLDv1MulticastListenerReportMessage = 131\n\tICMPv6TypeMLDv1MulticastListenerDoneMessage   = 132\n\n\t// The following are from RFC 3810\n\tICMPv6TypeMLDv2MulticastListenerReportMessageV2 = 143\n)\n\nconst (\n\t// DestinationUnreachable\n\tICMPv6CodeNoRouteToDst           = 0\n\tICMPv6CodeAdminProhibited        = 1\n\tICMPv6CodeBeyondScopeOfSrc       = 2\n\tICMPv6CodeAddressUnreachable     = 3\n\tICMPv6CodePortUnreachable        = 4\n\tICMPv6CodeSrcAddressFailedPolicy = 5\n\tICMPv6CodeRejectRouteToDst       = 6\n\n\t// TimeExceeded\n\tICMPv6CodeHopLimitExceeded               = 0\n\tICMPv6CodeFragmentReassemblyTimeExceeded = 1\n\n\t// ParameterProblem\n\tICMPv6CodeErroneousHeaderField   = 0\n\tICMPv6CodeUnrecognizedNextHeader = 1\n\tICMPv6CodeUnrecognizedIPv6Option = 2\n)\n\ntype icmpv6TypeCodeInfoStruct struct {\n\ttypeStr string\n\tcodeStr *map[uint8]string\n}\n\nvar (\n\ticmpv6TypeCodeInfo = map[uint8]icmpv6TypeCodeInfoStruct{\n\t\tICMPv6TypeDestinationUnreachable: icmpv6TypeCodeInfoStruct{\n\t\t\t\"DestinationUnreachable\", &map[uint8]string{\n\t\t\t\tICMPv6CodeNoRouteToDst:           \"NoRouteToDst\",\n\t\t\t\tICMPv6CodeAdminProhibited:        \"AdminProhibited\",\n\t\t\t\tICMPv6CodeBeyondScopeOfSrc:       \"BeyondScopeOfSrc\",\n\t\t\t\tICMPv6CodeAddressUnreachable:     \"AddressUnreachable\",\n\t\t\t\tICMPv6CodePortUnreachable:        \"PortUnreachable\",\n\t\t\t\tICMPv6CodeSrcAddressFailedPolicy: \"SrcAddressFailedPolicy\",\n\t\t\t\tICMPv6CodeRejectRouteToDst:       \"RejectRouteToDst\",\n\t\t\t},\n\t\t},\n\t\tICMPv6TypePacketTooBig: icmpv6TypeCodeInfoStruct{\n\t\t\t\"PacketTooBig\", nil,\n\t\t},\n\t\tICMPv6TypeTimeExceeded: icmpv6TypeCodeInfoStruct{\n\t\t\t\"TimeExceeded\", &map[uint8]string{\n\t\t\t\tICMPv6CodeHopLimitExceeded:               \"HopLimitExceeded\",\n\t\t\t\tICMPv6CodeFragmentReassemblyTimeExceeded: \"FragmentReassemblyTimeExceeded\",\n\t\t\t},\n\t\t},\n\t\tICMPv6TypeParameterProblem: icmpv6TypeCodeInfoStruct{\n\t\t\t\"ParameterProblem\", &map[uint8]string{\n\t\t\t\tICMPv6CodeErroneousHeaderField:   \"ErroneousHeaderField\",\n\t\t\t\tICMPv6CodeUnrecognizedNextHeader: \"UnrecognizedNextHeader\",\n\t\t\t\tICMPv6CodeUnrecognizedIPv6Option: \"UnrecognizedIPv6Option\",\n\t\t\t},\n\t\t},\n\t\tICMPv6TypeEchoRequest: icmpv6TypeCodeInfoStruct{\n\t\t\t\"EchoRequest\", nil,\n\t\t},\n\t\tICMPv6TypeEchoReply: icmpv6TypeCodeInfoStruct{\n\t\t\t\"EchoReply\", nil,\n\t\t},\n\t\tICMPv6TypeRouterSolicitation: icmpv6TypeCodeInfoStruct{\n\t\t\t\"RouterSolicitation\", nil,\n\t\t},\n\t\tICMPv6TypeRouterAdvertisement: icmpv6TypeCodeInfoStruct{\n\t\t\t\"RouterAdvertisement\", nil,\n\t\t},\n\t\tICMPv6TypeNeighborSolicitation: icmpv6TypeCodeInfoStruct{\n\t\t\t\"NeighborSolicitation\", nil,\n\t\t},\n\t\tICMPv6TypeNeighborAdvertisement: icmpv6TypeCodeInfoStruct{\n\t\t\t\"NeighborAdvertisement\", nil,\n\t\t},\n\t\tICMPv6TypeRedirect: icmpv6TypeCodeInfoStruct{\n\t\t\t\"Redirect\", nil,\n\t\t},\n\t}\n)\n\ntype ICMPv6TypeCode uint16\n\n// Type returns the ICMPv6 type field.\nfunc (a ICMPv6TypeCode) Type() uint8 {\n\treturn uint8(a >> 8)\n}\n\n// Code returns the ICMPv6 code field.\nfunc (a ICMPv6TypeCode) Code() uint8 {\n\treturn uint8(a)\n}\n\nfunc (a ICMPv6TypeCode) String() string {\n\tt, c := a.Type(), a.Code()\n\tstrInfo, ok := icmpv6TypeCodeInfo[t]\n\tif !ok {\n\t\t// Unknown ICMPv6 type field\n\t\treturn fmt.Sprintf(\"%d(%d)\", t, c)\n\t}\n\ttypeStr := strInfo.typeStr\n\tif strInfo.codeStr == nil && c == 0 {\n\t\t// The ICMPv6 type does not make use of the code field\n\t\treturn fmt.Sprintf(\"%s\", strInfo.typeStr)\n\t}\n\tif strInfo.codeStr == nil && c != 0 {\n\t\t// The ICMPv6 type does not make use of the code field, but it is present anyway\n\t\treturn fmt.Sprintf(\"%s(Code: %d)\", typeStr, c)\n\t}\n\tcodeStr, ok := (*strInfo.codeStr)[c]\n\tif !ok {\n\t\t// We don't know this ICMPv6 code; print the numerical value\n\t\treturn fmt.Sprintf(\"%s(Code: %d)\", typeStr, c)\n\t}\n\treturn fmt.Sprintf(\"%s(%s)\", typeStr, codeStr)\n}\n\nfunc (a ICMPv6TypeCode) GoString() string {\n\tt := reflect.TypeOf(a)\n\treturn fmt.Sprintf(\"%s(%d, %d)\", t.String(), a.Type(), a.Code())\n}\n\n// SerializeTo writes the ICMPv6TypeCode value to the 'bytes' buffer.\nfunc (a ICMPv6TypeCode) SerializeTo(bytes []byte) {\n\tbinary.BigEndian.PutUint16(bytes, uint16(a))\n}\n\n// CreateICMPv6TypeCode is a convenience function to create an ICMPv6TypeCode\n// gopacket type from the ICMPv6 type and code values.\nfunc CreateICMPv6TypeCode(typ uint8, code uint8) ICMPv6TypeCode {\n\treturn ICMPv6TypeCode(binary.BigEndian.Uint16([]byte{typ, code}))\n}\n\n// ICMPv6 is the layer for IPv6 ICMP packet data\ntype ICMPv6 struct {\n\tBaseLayer\n\tTypeCode ICMPv6TypeCode\n\tChecksum uint16\n\t// TypeBytes is deprecated and always nil. See the different ICMPv6 message types\n\t// instead (e.g. ICMPv6TypeRouterSolicitation).\n\tTypeBytes []byte\n\ttcpipchecksum\n}\n\n// LayerType returns LayerTypeICMPv6.\nfunc (i *ICMPv6) LayerType() gopacket.LayerType { return LayerTypeICMPv6 }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (i *ICMPv6) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 4 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ICMP layer less then 4 bytes for ICMPv6 packet\")\n\t}\n\ti.TypeCode = CreateICMPv6TypeCode(data[0], data[1])\n\ti.Checksum = binary.BigEndian.Uint16(data[2:4])\n\ti.BaseLayer = BaseLayer{data[:4], data[4:]}\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (i *ICMPv6) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbytes, err := b.PrependBytes(4)\n\tif err != nil {\n\t\treturn err\n\t}\n\ti.TypeCode.SerializeTo(bytes)\n\n\tif opts.ComputeChecksums {\n\t\tbytes[2] = 0\n\t\tbytes[3] = 0\n\t\tcsum, err := i.computeChecksum(b.Bytes(), IPProtocolICMPv6)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ti.Checksum = csum\n\t}\n\tbinary.BigEndian.PutUint16(bytes[2:], i.Checksum)\n\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (i *ICMPv6) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeICMPv6\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (i *ICMPv6) NextLayerType() gopacket.LayerType {\n\tswitch i.TypeCode.Type() {\n\tcase ICMPv6TypeEchoRequest:\n\t\treturn LayerTypeICMPv6Echo\n\tcase ICMPv6TypeEchoReply:\n\t\treturn LayerTypeICMPv6Echo\n\tcase ICMPv6TypeRouterSolicitation:\n\t\treturn LayerTypeICMPv6RouterSolicitation\n\tcase ICMPv6TypeRouterAdvertisement:\n\t\treturn LayerTypeICMPv6RouterAdvertisement\n\tcase ICMPv6TypeNeighborSolicitation:\n\t\treturn LayerTypeICMPv6NeighborSolicitation\n\tcase ICMPv6TypeNeighborAdvertisement:\n\t\treturn LayerTypeICMPv6NeighborAdvertisement\n\tcase ICMPv6TypeRedirect:\n\t\treturn LayerTypeICMPv6Redirect\n\tcase ICMPv6TypeMLDv1MulticastListenerQueryMessage: // Same Code for MLDv1 Query and MLDv2 Query\n\t\tif len(i.Payload) > 20 { // Only payload size differs\n\t\t\treturn LayerTypeMLDv2MulticastListenerQuery\n\t\t} else {\n\t\t\treturn LayerTypeMLDv1MulticastListenerQuery\n\t\t}\n\tcase ICMPv6TypeMLDv1MulticastListenerDoneMessage:\n\t\treturn LayerTypeMLDv1MulticastListenerDone\n\tcase ICMPv6TypeMLDv1MulticastListenerReportMessage:\n\t\treturn LayerTypeMLDv1MulticastListenerReport\n\tcase ICMPv6TypeMLDv2MulticastListenerReportMessageV2:\n\t\treturn LayerTypeMLDv2MulticastListenerReport\n\t}\n\n\treturn gopacket.LayerTypePayload\n}\n\nfunc decodeICMPv6(data []byte, p gopacket.PacketBuilder) error {\n\ti := &ICMPv6{}\n\treturn decodingLayerDecoder(i, data, p)\n}\n"
  },
  {
    "path": "layers/icmp6NDflags_test.go",
    "content": "// Copyright 2012, Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n\t\"testing\"\n)\n\nvar icmp6NeighborAnnouncementData = []byte{\n\t// Ethernet layer\n\t0x00, 0x1F, 0xCA, 0xB3, 0x76, 0x40, // destination\n\t0x24, 0xBE, 0x05, 0x27, 0x0B, 0x17, // source\n\t0x86, 0xDD, // type IPv6\n\n\t// IPv6 layer\n\t0x60, 0x00, 0x00, 0x00, // version; traffic class; flow label\n\t0x00, 0x18, // payload length?\n\t0x3A,                                                                                           // Next Header - IPv6-ICMP\n\t0xFF,                                                                                           // Hop Limit\n\t0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xBE, 0x05, 0xFF, 0xFE, 0x27, 0x0B, 0x17, // source\n\t0xFE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1F, 0xCA, 0xFF, 0xFE, 0xB3, 0x76, 0x40, // destination\n\n\t// ICMPv6 layer\n\t0x88, 0x00, // ICMP type 136, code 0\n\n\t0x1E, 0xD6, // checksum\n\t0x40, 0x00, 0x00, 0x00, // flags & reserved\n\t0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xBE, 0x05, 0xFF, 0xFE, 0x27, 0x0B, 0x17, // target address\n}\n\nvar icmp6RouterAdvertisementData = []byte{\n\t// Ethernet layer\n\t0x33, 0x33, 0x00, 0x00, 0x00, 0x01, // destination,\n\t0xde, 0x42, 0x72, 0xb0, 0x1e, 0xf4, // source\n\t0x86, 0xdd,\n\n\t// IPv6 layer\n\t0x60, 0x00, 0x00, 0x00, // version; traffic class; flow label\n\t0x00, 0x20, // payload length?\n\t0x3a,                                                                                           // Next Header - IPv6-ICMP\n\t0xff,                                                                                           // Hop Limit\n\t0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x42, 0x72, 0xff, 0xfe, 0xb0, 0x1e, 0xf4, // source,\n\t0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // destination\n\n\t// ICMPv6 layer\n\t0x86, 0x00, // ICMP type 134, code 0\n\n\t0x4c, 0x6b, // checksum\n\t0x40,       // current hop limit\n\t0x00,       // flags & reserves\n\t0x07, 0x08, // router lifetime\n\t0x00, 0x00, 0x00, 0x00, // reachable time\n\t0x00, 0x00, 0x00, 0x00, //retrans time\n\t0x01, 0x01, 0xde, 0x42, 0x72, 0xb0, 0x1e, 0xf4, // source link layer address\n\t0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0xdc, // MTU option\n}\n\nfunc TestPacketICMPv6NeighborAnnouncementFlags(t *testing.T) {\n\tvar ethLayer Ethernet\n\tvar ipV6Layer IPv6\n\tvar icmpLayer ICMPv6\n\n\tvar icmpNeighAdvLayer ICMPv6NeighborAdvertisement\n\n\tparser := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &ethLayer, &ipV6Layer, &icmpLayer)\n\tparser.IgnoreUnsupported = true\n\n\trespLayers := make([]gopacket.LayerType, 0)\n\terr := parser.DecodeLayers(icmp6NeighborAnnouncementData, &respLayers)\n\n\tif err != nil {\n\t\tt.Errorf(\"error decoding layers %s\", err)\n\t\treturn\n\t}\n\n\terr = icmpNeighAdvLayer.DecodeFromBytes(icmpLayer.LayerPayload(), gopacket.NilDecodeFeedback)\n\tif err != nil {\n\t\tt.Errorf(\"Error while Decodeing From Bytes: %s\", err)\n\t\treturn\n\t}\n\n\tif icmpNeighAdvLayer.Router() {\n\t\tt.Errorf(\"This Neighbor Advertisement message's Router flag should not be set\")\n\t}\n\tif !icmpNeighAdvLayer.Solicited() {\n\t\tt.Errorf(\"This Neighbor Advertisement message's Solicited flag should be set\")\n\t}\n\tif icmpNeighAdvLayer.Override() {\n\t\tt.Errorf(\"This Neighbor Advertisement message's Override bit should not be set\")\n\t}\n}\n\nfunc TestPacketICMPv6RouterAnnouncementFlags(t *testing.T) {\n\tvar ethLayer Ethernet\n\tvar ipV6Layer IPv6\n\tvar icmpLayer ICMPv6\n\n\tvar icmpRouterAdvLayer ICMPv6RouterAdvertisement\n\n\tparser := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &ethLayer, &ipV6Layer, &icmpLayer)\n\tparser.IgnoreUnsupported = true\n\n\trespLayers := make([]gopacket.LayerType, 0)\n\terr := parser.DecodeLayers(icmp6RouterAdvertisementData, &respLayers)\n\n\tif err != nil {\n\t\tt.Errorf(\"error decoding layers %s\", err)\n\t\treturn\n\t}\n\n\terr = icmpRouterAdvLayer.DecodeFromBytes(icmpLayer.LayerPayload(), gopacket.NilDecodeFeedback)\n\tif err != nil {\n\t\tt.Errorf(\"Error while Decodeing From Bytes: %s\", err)\n\t\treturn\n\t}\n\n\tif icmpRouterAdvLayer.ManagedAddressConfig() {\n\t\tt.Errorf(\"This Router Advertisement message's ManagedAddressConfig flag should not be set\")\n\t}\n\tif icmpRouterAdvLayer.OtherConfig() {\n\t\tt.Errorf(\"This Router Advertisement message's OtherConfig flag should not be set\")\n\t}\n}\n"
  },
  {
    "path": "layers/icmp6_test.go",
    "content": "// Copyright 2012, Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n\t\"net\"\n\t\"reflect\"\n\t\"testing\"\n)\n\n// testPacketICMPv6 is the packet:\n//   10:48:30.088384 IP6 2620:0:1005:0:26be:5ff:fe27:b17 > fe80::21f:caff:feb3:7640: ICMP6, neighbor advertisement, tgt is 2620:0:1005:0:26be:5ff:fe27:b17, length 24\n//      0x0000:  001f cab3 7640 24be 0527 0b17 86dd 6000  ....v@$..'....`.\n//      0x0010:  0000 0018 3aff 2620 0000 1005 0000 26be  ....:.&.......&.\n//      0x0020:  05ff fe27 0b17 fe80 0000 0000 0000 021f  ...'............\n//      0x0030:  caff feb3 7640 8800 1ed6 4000 0000 2620  ....v@....@...&.\n//      0x0040:  0000 1005 0000 26be 05ff fe27 0b17       ......&....'..\nvar testPacketICMPv6 = []byte{\n\t0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x86, 0xdd, 0x60, 0x00,\n\t0x00, 0x00, 0x00, 0x18, 0x3a, 0xff, 0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe,\n\t0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f,\n\t0xca, 0xff, 0xfe, 0xb3, 0x76, 0x40, 0x88, 0x00, 0x1e, 0xd6, 0x40, 0x00, 0x00, 0x00, 0x26, 0x20,\n\t0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe, 0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17,\n}\n\nfunc TestPacketICMPv6(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketICMPv6, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeICMPv6, gopacket.LayerTypePayload}, t)\n\tcheckSerialization(p, t)\n\n\tif got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {\n\t\twant := &IPv6{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: []byte{0x60, 0x0, 0x0, 0x0, 0x0, 0x18,\n\t\t\t\t\t0x3a, 0xff, 0x26, 0x20, 0x0, 0x0, 0x10, 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5,\n\t\t\t\t\t0xff, 0xfe, 0x27, 0xb, 0x17, 0xfe, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n\t\t\t\t\t0x2, 0x1f, 0xca, 0xff, 0xfe, 0xb3, 0x76, 0x40},\n\t\t\t\tPayload: []byte{0x88, 0x0, 0x1e, 0xd6, 0x40, 0x0, 0x0, 0x0, 0x26, 0x20,\n\t\t\t\t\t0x0, 0x0, 0x10, 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5, 0xff, 0xfe, 0x27, 0xb,\n\t\t\t\t\t0x17},\n\t\t\t},\n\t\t\tVersion:      6,\n\t\t\tTrafficClass: 0,\n\t\t\tFlowLabel:    0,\n\t\t\tLength:       24,\n\t\t\tNextHeader:   IPProtocolICMPv6,\n\t\t\tHopLimit:     255,\n\t\t\tSrcIP:        net.IP{0x26, 0x20, 0x0, 0x0, 0x10, 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5, 0xff, 0xfe, 0x27, 0xb, 0x17},\n\t\t\tDstIP:        net.IP{0xfe, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x1f, 0xca, 0xff, 0xfe, 0xb3, 0x76, 0x40},\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"IPv6 packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No IPv6 layer type found in packet\")\n\t}\n\tif got, ok := p.Layer(LayerTypeICMPv6).(*ICMPv6); ok {\n\t\twant := &ICMPv6{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: []byte{0x88, 0x0, 0x1e, 0xd6},\n\t\t\t\tPayload: []byte{0x40, 0x0, 0x0, 0x0, 0x26, 0x20, 0x0, 0x0, 0x10,\n\t\t\t\t\t0x5, 0x0, 0x0, 0x26, 0xbe, 0x5, 0xff, 0xfe, 0x27, 0xb, 0x17},\n\t\t\t},\n\t\t\tTypeCode: 0x8800,\n\t\t\tChecksum: 0x1ed6,\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"ICMPv6 packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t\tif got.TypeCode.String() != \"NeighborAdvertisement\" {\n\t\t\tt.Errorf(\"ICMPv6 type code, got %q want 'NeighborAdvertisement'\", got.TypeCode.String())\n\t\t}\n\t} else {\n\t\tt.Error(\"No ICMPv6 layer type found in packet\")\n\t}\n}\n"
  },
  {
    "path": "layers/icmp6hopbyhop_test.go",
    "content": "// Copyright 2012, Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n\t\"testing\"\n)\n\nvar icmp6HopByHopData = []byte{\n\t// Ethernet layer\n\t0x33, 0x33, 0x00, 0x00, 0x00, 0x16, // destination\n\t0x1e, 0xc3, 0xe3, 0xb7, 0xc4, 0xd5, //  source\n\t0x86, 0xdd, // type IPv6\n\n\t// IPv6 layer\n\t0x60, 0x00, 0x00, 0x00, // version; traffic class; flow label\n\t0x00, 0x88, // payload length?\n\t0x00,                                                                                           // Next Header\n\t0x01,                                                                                           // Hop Limit\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source\n\t0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, // destination\n\n\t// IPv6 Hop-by-hop option\n\t0x3a,                               // Next Header - IPv6-ICMP\n\t0x00,                               // Hdr Ext Len\n\t0x05, 0x02, 0x00, 0x00, 0x01, 0x00, // Options and Padding\n\n\t// ICMPv6 layer\n\t0x8f, 0x00, // ICMP type 143, code 0\n\n\t0x9e, 0xed, 0x00, 0x00, 0x00, 0x06, 0x03, 0x00,\n\t0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xb7,\n\t0xc4, 0xd5, 0x03, 0x00, 0x00, 0x00, 0xff, 0x02,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x01, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00,\n\t0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x11,\n\t0x00, 0x79, 0x04, 0x00, 0x00, 0x00, 0xff, 0x02,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x01, 0xff, 0x00, 0x00, 0x01, 0x04, 0x00,\n\t0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0xff, 0x02,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\n}\n\nfunc TestPacketICMPv6WithHopByHop(t *testing.T) {\n\tvar ethLayerResp Ethernet\n\tvar ipV6LayerResp IPv6\n\tvar icmpLayerResp ICMPv6\n\tvar payload gopacket.Payload\n\n\tparser := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &ethLayerResp, &ipV6LayerResp, &icmpLayerResp, &payload)\n\tparser.IgnoreUnsupported = true // avoid `No decoder for layer type ICMPv6RouterAdvertisement` error\n\n\trespLayers := make([]gopacket.LayerType, 0)\n\terr := parser.DecodeLayers(icmp6HopByHopData, &respLayers)\n\n\tif err != nil {\n\t\tt.Errorf(\"error decoding layers %s\", err)\n\t\treturn\n\t}\n\n\texpectedType := uint8(icmp6HopByHopData[62])\n\tactualType := uint8(icmpLayerResp.TypeCode.Type())\n\tif expectedType != actualType {\n\t\tt.Errorf(\"expected ICMP layer's TypeCode to be %d but was %d\", expectedType, actualType)\n\t}\n\n\tp := gopacket.NewPacket(icmp6HopByHopData, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeICMPv6}, t)\n\t// See https://github.com/google/gopacket/issues/517\n\t// checkSerialization(p, t)\n}\n"
  },
  {
    "path": "layers/icmp6msg.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// Based on RFC 4861\n\n// ICMPv6Opt indicate how to decode the data associated with each ICMPv6Option.\ntype ICMPv6Opt uint8\n\nconst (\n\t_ ICMPv6Opt = iota\n\n\t// ICMPv6OptSourceAddress contains the link-layer address of the sender of\n\t// the packet. It is used in the Neighbor Solicitation, Router\n\t// Solicitation, and Router Advertisement packets. Must be ignored for other\n\t// Neighbor discovery messages.\n\tICMPv6OptSourceAddress\n\n\t// ICMPv6OptTargetAddress contains the link-layer address of the target. It\n\t// is used in Neighbor Advertisement and Redirect packets. Must be ignored\n\t// for other Neighbor discovery messages.\n\tICMPv6OptTargetAddress\n\n\t// ICMPv6OptPrefixInfo provides hosts with on-link prefixes and prefixes\n\t// for Address Autoconfiguration. The Prefix Information option appears in\n\t// Router Advertisement packets and MUST be silently ignored for other\n\t// messages.\n\tICMPv6OptPrefixInfo\n\n\t// ICMPv6OptRedirectedHeader is used in Redirect messages and contains all\n\t// or part of the packet that is being redirected.\n\tICMPv6OptRedirectedHeader\n\n\t// ICMPv6OptMTU is used in Router Advertisement messages to ensure that all\n\t// nodes on a link use the same MTU value in those cases where the link MTU\n\t// is not well known. This option MUST be silently ignored for other\n\t// Neighbor Discovery messages.\n\tICMPv6OptMTU\n)\n\n// ICMPv6Echo represents the structure of a ping.\ntype ICMPv6Echo struct {\n\tBaseLayer\n\tIdentifier uint16\n\tSeqNumber  uint16\n}\n\n// ICMPv6RouterSolicitation is sent by hosts to find routers.\ntype ICMPv6RouterSolicitation struct {\n\tBaseLayer\n\tOptions ICMPv6Options\n}\n\n// ICMPv6RouterAdvertisement is sent by routers in response to Solicitation.\ntype ICMPv6RouterAdvertisement struct {\n\tBaseLayer\n\tHopLimit       uint8\n\tFlags          uint8\n\tRouterLifetime uint16\n\tReachableTime  uint32\n\tRetransTimer   uint32\n\tOptions        ICMPv6Options\n}\n\n// ICMPv6NeighborSolicitation is sent to request the link-layer address of a\n// target node.\ntype ICMPv6NeighborSolicitation struct {\n\tBaseLayer\n\tTargetAddress net.IP\n\tOptions       ICMPv6Options\n}\n\n// ICMPv6NeighborAdvertisement is sent by nodes in response to Solicitation.\ntype ICMPv6NeighborAdvertisement struct {\n\tBaseLayer\n\tFlags         uint8\n\tTargetAddress net.IP\n\tOptions       ICMPv6Options\n}\n\n// ICMPv6Redirect is sent by routers to inform hosts of a better first-hop node\n// on the path to a destination.\ntype ICMPv6Redirect struct {\n\tBaseLayer\n\tTargetAddress      net.IP\n\tDestinationAddress net.IP\n\tOptions            ICMPv6Options\n}\n\n// ICMPv6Option contains the type and data for a single option.\ntype ICMPv6Option struct {\n\tType ICMPv6Opt\n\tData []byte\n}\n\n// ICMPv6Options is a slice of ICMPv6Option.\ntype ICMPv6Options []ICMPv6Option\n\nfunc (i ICMPv6Opt) String() string {\n\tswitch i {\n\tcase ICMPv6OptSourceAddress:\n\t\treturn \"SourceAddress\"\n\tcase ICMPv6OptTargetAddress:\n\t\treturn \"TargetAddress\"\n\tcase ICMPv6OptPrefixInfo:\n\t\treturn \"PrefixInfo\"\n\tcase ICMPv6OptRedirectedHeader:\n\t\treturn \"RedirectedHeader\"\n\tcase ICMPv6OptMTU:\n\t\treturn \"MTU\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"Unknown(%d)\", i)\n\t}\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (i *ICMPv6Echo) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeICMPv6Echo\n}\n\n// LayerType returns LayerTypeICMPv6Echo.\nfunc (i *ICMPv6Echo) LayerType() gopacket.LayerType {\n\treturn LayerTypeICMPv6Echo\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (i *ICMPv6Echo) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (i *ICMPv6Echo) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 4 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ICMP layer less then 4 bytes for ICMPv6 Echo\")\n\t}\n\ti.Identifier = binary.BigEndian.Uint16(data[0:2])\n\ti.SeqNumber = binary.BigEndian.Uint16(data[2:4])\n\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (i *ICMPv6Echo) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbuf, err := b.PrependBytes(4)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbinary.BigEndian.PutUint16(buf, i.Identifier)\n\tbinary.BigEndian.PutUint16(buf[2:], i.SeqNumber)\n\treturn nil\n}\n\n// LayerType returns LayerTypeICMPv6.\nfunc (i *ICMPv6RouterSolicitation) LayerType() gopacket.LayerType {\n\treturn LayerTypeICMPv6RouterSolicitation\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (i *ICMPv6RouterSolicitation) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (i *ICMPv6RouterSolicitation) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\t// first 4 bytes are reserved followed by options\n\tif len(data) < 4 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ICMP layer less then 4 bytes for ICMPv6 router solicitation\")\n\t}\n\n\t// truncate old options\n\ti.Options = i.Options[:0]\n\n\treturn i.Options.DecodeFromBytes(data[4:], df)\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (i *ICMPv6RouterSolicitation) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tif err := i.Options.SerializeTo(b, opts); err != nil {\n\t\treturn err\n\t}\n\n\tbuf, err := b.PrependBytes(4)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcopy(buf, lotsOfZeros[:4])\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (i *ICMPv6RouterSolicitation) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeICMPv6RouterSolicitation\n}\n\n// LayerType returns LayerTypeICMPv6RouterAdvertisement.\nfunc (i *ICMPv6RouterAdvertisement) LayerType() gopacket.LayerType {\n\treturn LayerTypeICMPv6RouterAdvertisement\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (i *ICMPv6RouterAdvertisement) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (i *ICMPv6RouterAdvertisement) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 12 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ICMP layer less then 12 bytes for ICMPv6 router advertisement\")\n\t}\n\n\ti.HopLimit = uint8(data[0])\n\t// M, O bit followed by 6 reserved bits\n\ti.Flags = uint8(data[1])\n\ti.RouterLifetime = binary.BigEndian.Uint16(data[2:4])\n\ti.ReachableTime = binary.BigEndian.Uint32(data[4:8])\n\ti.RetransTimer = binary.BigEndian.Uint32(data[8:12])\n\ti.BaseLayer = BaseLayer{data, nil} // assume no payload\n\n\t// truncate old options\n\ti.Options = i.Options[:0]\n\n\treturn i.Options.DecodeFromBytes(data[12:], df)\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (i *ICMPv6RouterAdvertisement) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tif err := i.Options.SerializeTo(b, opts); err != nil {\n\t\treturn err\n\t}\n\n\tbuf, err := b.PrependBytes(12)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbuf[0] = byte(i.HopLimit)\n\tbuf[1] = byte(i.Flags)\n\tbinary.BigEndian.PutUint16(buf[2:], i.RouterLifetime)\n\tbinary.BigEndian.PutUint32(buf[4:], i.ReachableTime)\n\tbinary.BigEndian.PutUint32(buf[8:], i.RetransTimer)\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (i *ICMPv6RouterAdvertisement) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeICMPv6RouterAdvertisement\n}\n\n// ManagedAddressConfig is true when addresses are available via DHCPv6. If\n// set, the OtherConfig flag is redundant.\nfunc (i *ICMPv6RouterAdvertisement) ManagedAddressConfig() bool {\n\treturn i.Flags&0x80 != 0\n}\n\n// OtherConfig is true when there is other configuration information available\n// via DHCPv6. For example, DNS-related information.\nfunc (i *ICMPv6RouterAdvertisement) OtherConfig() bool {\n\treturn i.Flags&0x40 != 0\n}\n\n// LayerType returns LayerTypeICMPv6NeighborSolicitation.\nfunc (i *ICMPv6NeighborSolicitation) LayerType() gopacket.LayerType {\n\treturn LayerTypeICMPv6NeighborSolicitation\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (i *ICMPv6NeighborSolicitation) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (i *ICMPv6NeighborSolicitation) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 20 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ICMP layer less then 20 bytes for ICMPv6 neighbor solicitation\")\n\t}\n\n\ti.TargetAddress = net.IP(data[4:20])\n\ti.BaseLayer = BaseLayer{data, nil} // assume no payload\n\n\t// truncate old options\n\ti.Options = i.Options[:0]\n\n\treturn i.Options.DecodeFromBytes(data[20:], df)\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (i *ICMPv6NeighborSolicitation) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tif err := i.Options.SerializeTo(b, opts); err != nil {\n\t\treturn err\n\t}\n\n\tbuf, err := b.PrependBytes(20)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcopy(buf, lotsOfZeros[:4])\n\tcopy(buf[4:], i.TargetAddress)\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (i *ICMPv6NeighborSolicitation) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeICMPv6NeighborSolicitation\n}\n\n// LayerType returns LayerTypeICMPv6NeighborAdvertisement.\nfunc (i *ICMPv6NeighborAdvertisement) LayerType() gopacket.LayerType {\n\treturn LayerTypeICMPv6NeighborAdvertisement\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (i *ICMPv6NeighborAdvertisement) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (i *ICMPv6NeighborAdvertisement) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 20 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ICMP layer less then 20 bytes for ICMPv6 neighbor advertisement\")\n\t}\n\n\ti.Flags = uint8(data[0])\n\ti.TargetAddress = net.IP(data[4:20])\n\ti.BaseLayer = BaseLayer{data, nil} // assume no payload\n\n\t// truncate old options\n\ti.Options = i.Options[:0]\n\n\treturn i.Options.DecodeFromBytes(data[20:], df)\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (i *ICMPv6NeighborAdvertisement) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tif err := i.Options.SerializeTo(b, opts); err != nil {\n\t\treturn err\n\t}\n\n\tbuf, err := b.PrependBytes(20)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbuf[0] = byte(i.Flags)\n\tcopy(buf[1:], lotsOfZeros[:3])\n\tcopy(buf[4:], i.TargetAddress)\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (i *ICMPv6NeighborAdvertisement) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeICMPv6NeighborAdvertisement\n}\n\n// Router indicates whether the sender is a router or not.\nfunc (i *ICMPv6NeighborAdvertisement) Router() bool {\n\treturn i.Flags&0x80 != 0\n}\n\n// Solicited indicates whether the advertisement was solicited or not.\nfunc (i *ICMPv6NeighborAdvertisement) Solicited() bool {\n\treturn i.Flags&0x40 != 0\n}\n\n// Override indicates whether the advertisement should Override an existing\n// cache entry.\nfunc (i *ICMPv6NeighborAdvertisement) Override() bool {\n\treturn i.Flags&0x20 != 0\n}\n\n// LayerType returns LayerTypeICMPv6Redirect.\nfunc (i *ICMPv6Redirect) LayerType() gopacket.LayerType {\n\treturn LayerTypeICMPv6Redirect\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (i *ICMPv6Redirect) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (i *ICMPv6Redirect) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 36 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ICMP layer less then 36 bytes for ICMPv6 redirect\")\n\t}\n\n\ti.TargetAddress = net.IP(data[4:20])\n\ti.DestinationAddress = net.IP(data[20:36])\n\ti.BaseLayer = BaseLayer{data, nil} // assume no payload\n\n\t// truncate old options\n\ti.Options = i.Options[:0]\n\n\treturn i.Options.DecodeFromBytes(data[36:], df)\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (i *ICMPv6Redirect) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tif err := i.Options.SerializeTo(b, opts); err != nil {\n\t\treturn err\n\t}\n\n\tbuf, err := b.PrependBytes(36)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcopy(buf, lotsOfZeros[:4])\n\tcopy(buf[4:], i.TargetAddress)\n\tcopy(buf[20:], i.DestinationAddress)\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (i *ICMPv6Redirect) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeICMPv6Redirect\n}\n\nfunc (i ICMPv6Option) String() string {\n\thd := hex.EncodeToString(i.Data)\n\tif len(hd) > 0 {\n\t\thd = \" 0x\" + hd\n\t}\n\n\tswitch i.Type {\n\tcase ICMPv6OptSourceAddress, ICMPv6OptTargetAddress:\n\t\treturn fmt.Sprintf(\"ICMPv6Option(%s:%v)\",\n\t\t\ti.Type,\n\t\t\tnet.HardwareAddr(i.Data))\n\tcase ICMPv6OptPrefixInfo:\n\t\tif len(i.Data) == 30 {\n\t\t\tprefixLen := uint8(i.Data[0])\n\t\t\tonLink := (i.Data[1]&0x80 != 0)\n\t\t\tautonomous := (i.Data[1]&0x40 != 0)\n\t\t\tvalidLifetime := time.Duration(binary.BigEndian.Uint32(i.Data[2:6])) * time.Second\n\t\t\tpreferredLifetime := time.Duration(binary.BigEndian.Uint32(i.Data[6:10])) * time.Second\n\n\t\t\tprefix := net.IP(i.Data[14:])\n\n\t\t\treturn fmt.Sprintf(\"ICMPv6Option(%s:%v/%v:%t:%t:%v:%v)\",\n\t\t\t\ti.Type,\n\t\t\t\tprefix, prefixLen,\n\t\t\t\tonLink, autonomous,\n\t\t\t\tvalidLifetime, preferredLifetime)\n\t\t}\n\tcase ICMPv6OptRedirectedHeader:\n\t\t// could invoke IP decoder on data... probably best not to\n\t\tbreak\n\tcase ICMPv6OptMTU:\n\t\tif len(i.Data) == 6 {\n\t\t\treturn fmt.Sprintf(\"ICMPv6Option(%s:%v)\",\n\t\t\t\ti.Type,\n\t\t\t\tbinary.BigEndian.Uint32(i.Data[2:]))\n\t\t}\n\n\t}\n\treturn fmt.Sprintf(\"ICMPv6Option(%s:%s)\", i.Type, hd)\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (i *ICMPv6Options) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tfor len(data) > 0 {\n\t\tif len(data) < 2 {\n\t\t\tdf.SetTruncated()\n\t\t\treturn errors.New(\"ICMP layer less then 2 bytes for ICMPv6 message option\")\n\t\t}\n\n\t\t// unit is 8 octets, convert to bytes\n\t\tlength := int(data[1]) * 8\n\n\t\tif length == 0 {\n\t\t\tdf.SetTruncated()\n\t\t\treturn errors.New(\"ICMPv6 message option with length 0\")\n\t\t}\n\n\t\tif len(data) < length {\n\t\t\tdf.SetTruncated()\n\t\t\treturn fmt.Errorf(\"ICMP layer only %v bytes for ICMPv6 message option with length %v\", len(data), length)\n\t\t}\n\n\t\to := ICMPv6Option{\n\t\t\tType: ICMPv6Opt(data[0]),\n\t\t\tData: data[2:length],\n\t\t}\n\n\t\t// chop off option we just consumed\n\t\tdata = data[length:]\n\n\t\t*i = append(*i, o)\n\t}\n\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (i *ICMPv6Options) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tfor _, opt := range []ICMPv6Option(*i) {\n\t\tlength := len(opt.Data) + 2\n\t\tbuf, err := b.PrependBytes(length)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tbuf[0] = byte(opt.Type)\n\t\tbuf[1] = byte(length / 8)\n\t\tcopy(buf[2:], opt.Data)\n\t}\n\n\treturn nil\n}\n\nfunc decodeICMPv6Echo(data []byte, p gopacket.PacketBuilder) error {\n\ti := &ICMPv6Echo{}\n\treturn decodingLayerDecoder(i, data, p)\n}\n\nfunc decodeICMPv6RouterSolicitation(data []byte, p gopacket.PacketBuilder) error {\n\ti := &ICMPv6RouterSolicitation{}\n\treturn decodingLayerDecoder(i, data, p)\n}\n\nfunc decodeICMPv6RouterAdvertisement(data []byte, p gopacket.PacketBuilder) error {\n\ti := &ICMPv6RouterAdvertisement{}\n\treturn decodingLayerDecoder(i, data, p)\n}\n\nfunc decodeICMPv6NeighborSolicitation(data []byte, p gopacket.PacketBuilder) error {\n\ti := &ICMPv6NeighborSolicitation{}\n\treturn decodingLayerDecoder(i, data, p)\n}\n\nfunc decodeICMPv6NeighborAdvertisement(data []byte, p gopacket.PacketBuilder) error {\n\ti := &ICMPv6NeighborAdvertisement{}\n\treturn decodingLayerDecoder(i, data, p)\n}\n\nfunc decodeICMPv6Redirect(data []byte, p gopacket.PacketBuilder) error {\n\ti := &ICMPv6Redirect{}\n\treturn decodingLayerDecoder(i, data, p)\n}\n"
  },
  {
    "path": "layers/icmp6msg_test.go",
    "content": "// Copyright 2012, Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n\t\"testing\"\n)\n\n// testPacketICMPv6RouterAdvertisement is the packet:\n// 23:34:40.014307 IP6 (class 0xe0, hlim 255, next-header ICMPv6 (58) payload length: 64) fe80::c000:54ff:fef5:0 > ip6-allnodes: [icmp6 sum ok] ICMP6, router advertisement, length 64\n//         hop limit 64, Flags [none], pref medium, router lifetime 1800s, reachable time 0s, retrans time 0s\n//           source link-address option (1), length 8 (1): c2:00:54:f5:00:00\n//             0x0000:  c200 54f5 0000\n//           mtu option (5), length 8 (1):  1500\n//             0x0000:  0000 0000 05dc\n//           prefix info option (3), length 32 (4): 2001:db8:0:1::/64, Flags [onlink, auto], valid time 2592000s, pref. time 604800s\n//             0x0000:  40c0 0027 8d00 0009 3a80 0000 0000 2001\n//             0x0010:  0db8 0000 0001 0000 0000 0000 0000\n//         0x0000:  3333 0000 0001 c200 54f5 0000 86dd 6e00  33......T.....n.\n//         0x0010:  0000 0040 3aff fe80 0000 0000 0000 c000  ...@:...........\n//         0x0020:  54ff fef5 0000 ff02 0000 0000 0000 0000  T...............\n//         0x0030:  0000 0000 0001 8600 c4fe 4000 0708 0000  ..........@.....\n//         0x0040:  0000 0000 0000 0101 c200 54f5 0000 0501  ..........T.....\n//         0x0050:  0000 0000 05dc 0304 40c0 0027 8d00 0009  ........@..'....\n//         0x0060:  3a80 0000 0000 2001 0db8 0000 0001 0000  :...............\n//         0x0070:  0000 0000 0000\nvar testPacketICMPv6RouterAdvertisement = []byte{\n\t0x33, 0x33, 0x00, 0x00, 0x00, 0x01, 0xc2, 0x00, 0x54, 0xf5, 0x00, 0x00, 0x86, 0xdd, 0x6e, 0x00,\n\t0x00, 0x00, 0x00, 0x40, 0x3a, 0xff, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,\n\t0x54, 0xff, 0xfe, 0xf5, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x00, 0xc4, 0xfe, 0x40, 0x00, 0x07, 0x08, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0xc2, 0x00, 0x54, 0xf5, 0x00, 0x00, 0x05, 0x01,\n\t0x00, 0x00, 0x00, 0x00, 0x05, 0xdc, 0x03, 0x04, 0x40, 0xc0, 0x00, 0x27, 0x8d, 0x00, 0x00, 0x09,\n\t0x3a, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestPacketICMPv6RouterAdvertisement(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketICMPv6RouterAdvertisement, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeICMPv6, LayerTypeICMPv6RouterAdvertisement}, t)\n}\n\n// testPacketICMPv6NeighborSolicitation is the packet:\n// 23:34:39.647300 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) :: > ff02::1:ff0e:4c67: [icmp6 sum ok] ICMP6, neighbor solicitation, length 24, who has fe80::20c:29ff:fe0e:4c67\n//         0x0000:  3333 ff0e 4c67 000c 290e 4c67 86dd 6000  33..Lg..).Lg..`.\n//         0x0010:  0000 0018 3aff 0000 0000 0000 0000 0000  ....:...........\n//         0x0020:  0000 0000 0000 ff02 0000 0000 0000 0000  ................\n//         0x0030:  0001 ff0e 4c67 8700 b930 0000 0000 fe80  ....Lg...0......\n//         0x0040:  0000 0000 0000 020c 29ff fe0e 4c67       ........)...Lg\nvar testPacketICMPv6NeighborSolicitation = []byte{\n\t0x33, 0x33, 0xff, 0x0e, 0x4c, 0x67, 0x00, 0x0c, 0x29, 0x0e, 0x4c, 0x67, 0x86, 0xdd, 0x60, 0x00,\n\t0x00, 0x00, 0x00, 0x18, 0x3a, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x01, 0xff, 0x0e, 0x4c, 0x67, 0x87, 0x00, 0xb9, 0x30, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x80,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0c, 0x29, 0xff, 0xfe, 0x0e, 0x4c, 0x67,\n}\n\nfunc TestPacketICMPv6NeighborSolicitation(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketICMPv6NeighborSolicitation, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeICMPv6, LayerTypeICMPv6NeighborSolicitation}, t)\n}\n"
  },
  {
    "path": "layers/igmp.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n)\n\ntype IGMPType uint8\n\nconst (\n\tIGMPMembershipQuery    IGMPType = 0x11 // General or group specific query\n\tIGMPMembershipReportV1 IGMPType = 0x12 // Version 1 Membership Report\n\tIGMPMembershipReportV2 IGMPType = 0x16 // Version 2 Membership Report\n\tIGMPLeaveGroup         IGMPType = 0x17 // Leave Group\n\tIGMPMembershipReportV3 IGMPType = 0x22 // Version 3 Membership Report\n)\n\n// String conversions for IGMP message types\nfunc (i IGMPType) String() string {\n\tswitch i {\n\tcase IGMPMembershipQuery:\n\t\treturn \"IGMP Membership Query\"\n\tcase IGMPMembershipReportV1:\n\t\treturn \"IGMPv1 Membership Report\"\n\tcase IGMPMembershipReportV2:\n\t\treturn \"IGMPv2 Membership Report\"\n\tcase IGMPMembershipReportV3:\n\t\treturn \"IGMPv3 Membership Report\"\n\tcase IGMPLeaveGroup:\n\t\treturn \"Leave Group\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\ntype IGMPv3GroupRecordType uint8\n\nconst (\n\tIGMPIsIn  IGMPv3GroupRecordType = 0x01 // Type MODE_IS_INCLUDE, source addresses x\n\tIGMPIsEx  IGMPv3GroupRecordType = 0x02 // Type MODE_IS_EXCLUDE, source addresses x\n\tIGMPToIn  IGMPv3GroupRecordType = 0x03 // Type CHANGE_TO_INCLUDE_MODE, source addresses x\n\tIGMPToEx  IGMPv3GroupRecordType = 0x04 // Type CHANGE_TO_EXCLUDE_MODE, source addresses x\n\tIGMPAllow IGMPv3GroupRecordType = 0x05 // Type ALLOW_NEW_SOURCES, source addresses x\n\tIGMPBlock IGMPv3GroupRecordType = 0x06 // Type BLOCK_OLD_SOURCES, source addresses x\n)\n\nfunc (i IGMPv3GroupRecordType) String() string {\n\tswitch i {\n\tcase IGMPIsIn:\n\t\treturn \"MODE_IS_INCLUDE\"\n\tcase IGMPIsEx:\n\t\treturn \"MODE_IS_EXCLUDE\"\n\tcase IGMPToIn:\n\t\treturn \"CHANGE_TO_INCLUDE_MODE\"\n\tcase IGMPToEx:\n\t\treturn \"CHANGE_TO_EXCLUDE_MODE\"\n\tcase IGMPAllow:\n\t\treturn \"ALLOW_NEW_SOURCES\"\n\tcase IGMPBlock:\n\t\treturn \"BLOCK_OLD_SOURCES\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\n// IGMP represents an IGMPv3 message.\ntype IGMP struct {\n\tBaseLayer\n\tType                    IGMPType\n\tMaxResponseTime         time.Duration\n\tChecksum                uint16\n\tGroupAddress            net.IP\n\tSupressRouterProcessing bool\n\tRobustnessValue         uint8\n\tIntervalTime            time.Duration\n\tSourceAddresses         []net.IP\n\tNumberOfGroupRecords    uint16\n\tNumberOfSources         uint16\n\tGroupRecords            []IGMPv3GroupRecord\n\tVersion                 uint8 // IGMP protocol version\n}\n\n// IGMPv1or2 stores header details for an IGMPv1 or IGMPv2 packet.\n//\n//  0                   1                   2                   3\n//  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |      Type     | Max Resp Time |           Checksum            |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |                         Group Address                         |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\ntype IGMPv1or2 struct {\n\tBaseLayer\n\tType            IGMPType      // IGMP message type\n\tMaxResponseTime time.Duration // meaningful only in Membership Query messages\n\tChecksum        uint16        // 16-bit checksum of entire ip payload\n\tGroupAddress    net.IP        // either 0 or an IP multicast address\n\tVersion         uint8\n}\n\n// decodeResponse dissects IGMPv1 or IGMPv2 packet.\nfunc (i *IGMPv1or2) decodeResponse(data []byte) error {\n\tif len(data) < 8 {\n\t\treturn errors.New(\"IGMP packet too small\")\n\t}\n\n\ti.MaxResponseTime = igmpTimeDecode(data[1])\n\ti.Checksum = binary.BigEndian.Uint16(data[2:4])\n\ti.GroupAddress = net.IP(data[4:8])\n\n\treturn nil\n}\n\n//  0                   1                   2                   3\n//  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |  Type = 0x22  |    Reserved   |           Checksum            |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |           Reserved            |  Number of Group Records (M)  |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |                                                               |\n// .                        Group Record [1]                       .\n// |                                                               |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |                                                               |\n// .                        Group Record [2]                       .\n// |                                                               |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |                                                               |\n// .                        Group Record [M]                       .\n// |                                                               |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |  Record Type  |  Aux Data Len |     Number of Sources (N)     |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |                       Multicast Address                       |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |                       Source Address [1]                      |\n// +-                                                             -+\n// |                       Source Address [2]                      |\n// +-                                                             -+\n// |                       Source Address [N]                      |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |                                                               |\n// .                         Auxiliary Data                        .\n// |                                                               |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n// IGMPv3GroupRecord stores individual group records for a V3 Membership Report message.\ntype IGMPv3GroupRecord struct {\n\tType             IGMPv3GroupRecordType\n\tAuxDataLen       uint8 // this should always be 0 as per IGMPv3 spec.\n\tNumberOfSources  uint16\n\tMulticastAddress net.IP\n\tSourceAddresses  []net.IP\n\tAuxData          uint32 // NOT USED\n}\n\nfunc (i *IGMP) decodeIGMPv3MembershipReport(data []byte) error {\n\tif len(data) < 8 {\n\t\treturn errors.New(\"IGMPv3 Membership Report too small #1\")\n\t}\n\n\ti.Checksum = binary.BigEndian.Uint16(data[2:4])\n\ti.NumberOfGroupRecords = binary.BigEndian.Uint16(data[6:8])\n\n\trecordOffset := 8\n\tfor j := 0; j < int(i.NumberOfGroupRecords); j++ {\n\t\tif len(data) < recordOffset+8 {\n\t\t\treturn errors.New(\"IGMPv3 Membership Report too small #2\")\n\t\t}\n\n\t\tvar gr IGMPv3GroupRecord\n\t\tgr.Type = IGMPv3GroupRecordType(data[recordOffset])\n\t\tgr.AuxDataLen = data[recordOffset+1]\n\t\tgr.NumberOfSources = binary.BigEndian.Uint16(data[recordOffset+2 : recordOffset+4])\n\t\tgr.MulticastAddress = net.IP(data[recordOffset+4 : recordOffset+8])\n\n\t\tif len(data) < recordOffset+8+int(gr.NumberOfSources)*4 {\n\t\t\treturn errors.New(\"IGMPv3 Membership Report too small #3\")\n\t\t}\n\n\t\t// append source address records.\n\t\tfor i := 0; i < int(gr.NumberOfSources); i++ {\n\t\t\tsourceAddr := net.IP(data[recordOffset+8+i*4 : recordOffset+12+i*4])\n\t\t\tgr.SourceAddresses = append(gr.SourceAddresses, sourceAddr)\n\t\t}\n\n\t\ti.GroupRecords = append(i.GroupRecords, gr)\n\t\trecordOffset += 8 + 4*int(gr.NumberOfSources)\n\t}\n\treturn nil\n}\n\n//  0                   1                   2                   3\n//  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |  Type = 0x11  | Max Resp Code |           Checksum            |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |                         Group Address                         |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Resv  |S| QRV |     QQIC      |     Number of Sources (N)     |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |                       Source Address [1]                      |\n// +-                                                             -+\n// |                       Source Address [2]                      |\n// +-                              .                              -+\n// |                       Source Address [N]                      |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//\n// decodeIGMPv3MembershipQuery parses the IGMPv3 message of type 0x11\nfunc (i *IGMP) decodeIGMPv3MembershipQuery(data []byte) error {\n\tif len(data) < 12 {\n\t\treturn errors.New(\"IGMPv3 Membership Query too small #1\")\n\t}\n\n\ti.MaxResponseTime = igmpTimeDecode(data[1])\n\ti.Checksum = binary.BigEndian.Uint16(data[2:4])\n\ti.SupressRouterProcessing = data[8]&0x8 != 0\n\ti.GroupAddress = net.IP(data[4:8])\n\ti.RobustnessValue = data[8] & 0x7\n\ti.IntervalTime = igmpTimeDecode(data[9])\n\ti.NumberOfSources = binary.BigEndian.Uint16(data[10:12])\n\n\tif len(data) < 12+int(i.NumberOfSources)*4 {\n\t\treturn errors.New(\"IGMPv3 Membership Query too small #2\")\n\t}\n\n\tfor j := 0; j < int(i.NumberOfSources); j++ {\n\t\ti.SourceAddresses = append(i.SourceAddresses, net.IP(data[12+j*4:16+j*4]))\n\t}\n\n\treturn nil\n}\n\n// igmpTimeDecode decodes the duration created by the given byte, using the\n// algorithm in http://www.rfc-base.org/txt/rfc-3376.txt section 4.1.1.\nfunc igmpTimeDecode(t uint8) time.Duration {\n\tif t&0x80 == 0 {\n\t\treturn time.Millisecond * 100 * time.Duration(t)\n\t}\n\tmant := (t & 0x70) >> 4\n\texp := t & 0x0F\n\treturn time.Millisecond * 100 * time.Duration((mant|0x10)<<(exp+3))\n}\n\n// LayerType returns LayerTypeIGMP for the V1,2,3 message protocol formats.\nfunc (i *IGMP) LayerType() gopacket.LayerType      { return LayerTypeIGMP }\nfunc (i *IGMPv1or2) LayerType() gopacket.LayerType { return LayerTypeIGMP }\n\nfunc (i *IGMPv1or2) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 8 {\n\t\treturn errors.New(\"IGMP Packet too small\")\n\t}\n\n\ti.Type = IGMPType(data[0])\n\ti.MaxResponseTime = igmpTimeDecode(data[1])\n\ti.Checksum = binary.BigEndian.Uint16(data[2:4])\n\ti.GroupAddress = net.IP(data[4:8])\n\n\treturn nil\n}\n\nfunc (i *IGMPv1or2) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypeZero\n}\n\nfunc (i *IGMPv1or2) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeIGMP\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (i *IGMP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 1 {\n\t\treturn errors.New(\"IGMP packet is too small\")\n\t}\n\n\t// common IGMP header values between versions 1..3 of IGMP specification..\n\ti.Type = IGMPType(data[0])\n\n\tswitch i.Type {\n\tcase IGMPMembershipQuery:\n\t\ti.decodeIGMPv3MembershipQuery(data)\n\tcase IGMPMembershipReportV3:\n\t\ti.decodeIGMPv3MembershipReport(data)\n\tdefault:\n\t\treturn errors.New(\"unsupported IGMP type\")\n\t}\n\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (i *IGMP) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeIGMP\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (i *IGMP) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypeZero\n}\n\n// decodeIGMP will parse IGMP v1,2 or 3 protocols. Checks against the\n// IGMP type are performed against byte[0], logic then iniitalizes and\n// passes the appropriate struct (IGMP or IGMPv1or2) to\n// decodingLayerDecoder.\nfunc decodeIGMP(data []byte, p gopacket.PacketBuilder) error {\n\tif len(data) < 1 {\n\t\treturn errors.New(\"IGMP packet is too small\")\n\t}\n\n\t// byte 0 contains IGMP message type.\n\tswitch IGMPType(data[0]) {\n\tcase IGMPMembershipQuery:\n\t\t// IGMPv3 Membership Query payload is >= 12\n\t\tif len(data) >= 12 {\n\t\t\ti := &IGMP{Version: 3}\n\t\t\treturn decodingLayerDecoder(i, data, p)\n\t\t} else if len(data) == 8 {\n\t\t\ti := &IGMPv1or2{}\n\t\t\tif data[1] == 0x00 {\n\t\t\t\ti.Version = 1 // IGMPv1 has a query length of 8 and MaxResp = 0\n\t\t\t} else {\n\t\t\t\ti.Version = 2 // IGMPv2 has a query length of 8 and MaxResp != 0\n\t\t\t}\n\n\t\t\treturn decodingLayerDecoder(i, data, p)\n\t\t}\n\tcase IGMPMembershipReportV3:\n\t\ti := &IGMP{Version: 3}\n\t\treturn decodingLayerDecoder(i, data, p)\n\tcase IGMPMembershipReportV1:\n\t\ti := &IGMPv1or2{Version: 1}\n\t\treturn decodingLayerDecoder(i, data, p)\n\tcase IGMPLeaveGroup, IGMPMembershipReportV2:\n\t\t// leave group and Query Report v2 used in IGMPv2 only.\n\t\ti := &IGMPv1or2{Version: 2}\n\t\treturn decodingLayerDecoder(i, data, p)\n\tdefault:\n\t}\n\n\treturn errors.New(\"Unable to determine IGMP type.\")\n}\n"
  },
  {
    "path": "layers/igmp_test.go",
    "content": "// Copyright 2016, Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// igmpv1MembershipReportPacket is the packet:\n//   02:45:36.033916 IP 10.60.0.132 > 224.0.1.60: igmp v1 report 224.0.1.60\n//   \t0x0000:  0100 5e00 013c 0030 c1bf 5755 0800 4500  ..^..<.0..WU..E.\n//   \t0x0010:  001c 6a7f 0000 0102 6365 0a3c 0084 e000  ..j.....ce.<....\n//   \t0x0020:  013c 1200 0cc3 e000 013c 0000 0000 0000  .<.......<......\n//   \t0x0030:  ffff ffff ffff 0452 0000 0000            .......R....\nvar igmpv1MembershipReportPacket = []byte{\n\t0x01, 0x00, 0x5e, 0x00, 0x01, 0x3c, 0x00, 0x30, 0xc1, 0xbf, 0x57, 0x55, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x1c, 0x6a, 0x7f, 0x00, 0x00, 0x01, 0x02, 0x63, 0x65, 0x0a, 0x3c, 0x00, 0x84, 0xe0, 0x00,\n\t0x01, 0x3c, 0x12, 0x00, 0x0c, 0xc3, 0xe0, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x52, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestIGMPv1MembershipReportPacket(t *testing.T) {\n\tp := gopacket.NewPacket(igmpv1MembershipReportPacket, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)\n\n\tigmp := p.Layer(LayerTypeIGMP).(*IGMPv1or2)\n\tif igmp.Type != IGMPMembershipReportV1 {\n\t\tt.Fatal(\"Invalid IGMP type\")\n\t}\n}\n\nfunc BenchmarkDecodeigmpv1MembershipReportPacket(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(igmpv1MembershipReportPacket, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// igmpv2MembershipQueryPacket is the packet:\n//   02:45:28.071636 IP 10.60.0.189 > 224.0.0.1: igmp query v2\n//   \t0x0000:  0100 5e00 0001 0001 636f c800 0800 45c0  ..^.....co....E.\n//   \t0x0010:  001c 0153 0000 0102 ccd3 0a3c 00bd e000  ...S.......<....\n//   \t0x0020:  0001 1164 ee9b 0000 0000 0000 0000 0000  ...d............\n//   \t0x0030:  0000 0000 0000 0000 0000 0000            ............\nvar igmpv2MembershipQueryPacket = []byte{\n\t0x01, 0x00, 0x5e, 0x00, 0x00, 0x01, 0x00, 0x01, 0x63, 0x6f, 0xc8, 0x00, 0x08, 0x00, 0x45, 0xc0,\n\t0x00, 0x1c, 0x01, 0x53, 0x00, 0x00, 0x01, 0x02, 0xcc, 0xd3, 0x0a, 0x3c, 0x00, 0xbd, 0xe0, 0x00,\n\t0x00, 0x01, 0x11, 0x64, 0xee, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestIGMPv2MembershipQuery(t *testing.T) {\n\tp := gopacket.NewPacket(igmpv2MembershipQueryPacket, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)\n\n\tigmp := p.Layer(LayerTypeIGMP).(*IGMPv1or2)\n\tif igmp.Type != IGMPMembershipQuery {\n\t\tt.Fatal(\"Invalid IGMP type\")\n\t}\n}\nfunc BenchmarkDecodeigmpv2MembershipQueryPacket(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(igmpv2MembershipQueryPacket, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// igmpv2MembershipReportPacket is the packet:\n//   02:47:32.417288 IP 10.60.5.103 > 239.255.255.253: igmp v2 report 239.255.255.253\n//   \t0x0000:  0100 5e7f fffd 0015 58dc d9f6 0800 4600  ..^.....X.....F.\n//   \t0x0010:  0020 79f0 0000 0102 ab47 0a3c 0567 efff  ..y......G.<.g..\n//   \t0x0020:  fffd 9404 0000 1600 fa01 efff fffd 0000  ................\n//   \t0x0030:  0000 0000 0000 0000 0000 0000            ............\nvar igmpv2MembershipReportPacket = []byte{\n\t0x01, 0x00, 0x5e, 0x7f, 0xff, 0xfd, 0x00, 0x15, 0x58, 0xdc, 0xd9, 0xf6, 0x08, 0x00, 0x46, 0x00,\n\t0x00, 0x20, 0x79, 0xf0, 0x00, 0x00, 0x01, 0x02, 0xab, 0x47, 0x0a, 0x3c, 0x05, 0x67, 0xef, 0xff,\n\t0xff, 0xfd, 0x94, 0x04, 0x00, 0x00, 0x16, 0x00, 0xfa, 0x01, 0xef, 0xff, 0xff, 0xfd, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestIGMPv2MembershipReport(t *testing.T) {\n\tp := gopacket.NewPacket(igmpv2MembershipReportPacket, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)\n\n\tigmp := p.Layer(LayerTypeIGMP).(*IGMPv1or2)\n\tif igmp.Type != IGMPMembershipReportV2 {\n\t\tt.Fatal(\"Invalid IGMP type\")\n\t}\n}\nfunc BenchmarkDecodeigmpv2MembershipReportPacket(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(igmpv2MembershipReportPacket, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// igmp3v3MembershipQueryPacket is the packet:\n//   10:07:30.488511 IP 192.168.1.254 > 224.0.0.1: igmp query v3 [max resp time 2.4s]\n//      0x0000:  0100 5e00 0001 0026 446c 1eda 0800 46c0  ..^....&Dl....F.\n//      0x0010:  0024 17f1 4000 0102 297b c0a8 01fe e000  .$..@...){......\n//      0x0020:  0001 9404 0000 1118 ecd3 0000 0000 0214  ................\n//      0x0030:  0000 0000 0000 0000 0000 0000            ............\nvar igmp3v3MembershipQueryPacket = []byte{\n\t0x01, 0x00, 0x5e, 0x00, 0x00, 0x01, 0x00, 0x26, 0x44, 0x6c, 0x1e, 0xda, 0x08, 0x00, 0x46, 0xc0,\n\t0x00, 0x24, 0x17, 0xf1, 0x40, 0x00, 0x01, 0x02, 0x29, 0x7b, 0xc0, 0xa8, 0x01, 0xfe, 0xe0, 0x00,\n\t0x00, 0x01, 0x94, 0x04, 0x00, 0x00, 0x11, 0x18, 0xec, 0xd3, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestIGMPv3MembershipQuery(t *testing.T) {\n\tp := gopacket.NewPacket(igmp3v3MembershipQueryPacket, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)\n\n\tigmp := p.Layer(LayerTypeIGMP).(*IGMP)\n\tif igmp.Type != IGMPMembershipQuery {\n\t\tt.Fatal(\"Invalid IGMP type\")\n\t}\n}\n\nfunc BenchmarkDecodeigmp3v3MembershipQueryPacket(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(igmp3v3MembershipQueryPacket, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// igmpv3MembershipReport2Records is the packet:\n//   10:07:29.756202 IP 192.168.1.66 > 224.0.0.22: igmp v3 report, 2 group record(s)\n//      0x0000:  0100 5e00 0016 0025 2e51 c381 0800 4658  ..^....%.Q....FX\n//      0x0010:  0030 013c 0000 0102 8133 c0a8 0142 e000  .0.<.....3...B..\n//      0x0020:  0016 9404 0000 2200 f33c 0000 0002 0200  ......\"..<......\n//      0x0030:  0000 efc3 0702 0200 0000 efff fffa       ..............\nvar igmpv3MembershipReport2Records = []byte{\n\t0x01, 0x00, 0x5e, 0x00, 0x00, 0x16, 0x00, 0x25, 0x2e, 0x51, 0xc3, 0x81, 0x08, 0x00, 0x46, 0x58,\n\t0x00, 0x30, 0x01, 0x3c, 0x00, 0x00, 0x01, 0x02, 0x81, 0x33, 0xc0, 0xa8, 0x01, 0x42, 0xe0, 0x00,\n\t0x00, 0x16, 0x94, 0x04, 0x00, 0x00, 0x22, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00,\n\t0x00, 0x00, 0xef, 0xc3, 0x07, 0x02, 0x02, 0x00, 0x00, 0x00, 0xef, 0xff, 0xff, 0xfa,\n}\n\nfunc TestIGMPv3MembershipReport2Records(t *testing.T) {\n\tp := gopacket.NewPacket(igmpv3MembershipReport2Records, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)\n\n\tigmp := p.Layer(LayerTypeIGMP).(*IGMP)\n\tif igmp.Type != IGMPMembershipReportV3 {\n\t\tt.Fatal(\"Invalid IGMP type\")\n\t}\n}\n\nfunc BenchmarkDecodeigmpv3MembershipReport2Records(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(igmpv3MembershipReport2Records, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n"
  },
  {
    "path": "layers/ip4.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n\n\t\"github.com/google/gopacket\"\n)\n\ntype IPv4Flag uint8\n\nconst (\n\tIPv4EvilBit       IPv4Flag = 1 << 2 // http://tools.ietf.org/html/rfc3514 ;)\n\tIPv4DontFragment  IPv4Flag = 1 << 1\n\tIPv4MoreFragments IPv4Flag = 1 << 0\n)\n\nfunc (f IPv4Flag) String() string {\n\tvar s []string\n\tif f&IPv4EvilBit != 0 {\n\t\ts = append(s, \"Evil\")\n\t}\n\tif f&IPv4DontFragment != 0 {\n\t\ts = append(s, \"DF\")\n\t}\n\tif f&IPv4MoreFragments != 0 {\n\t\ts = append(s, \"MF\")\n\t}\n\treturn strings.Join(s, \"|\")\n}\n\n// IPv4 is the header of an IP packet.\ntype IPv4 struct {\n\tBaseLayer\n\tVersion    uint8\n\tIHL        uint8\n\tTOS        uint8\n\tLength     uint16\n\tId         uint16\n\tFlags      IPv4Flag\n\tFragOffset uint16\n\tTTL        uint8\n\tProtocol   IPProtocol\n\tChecksum   uint16\n\tSrcIP      net.IP\n\tDstIP      net.IP\n\tOptions    []IPv4Option\n\tPadding    []byte\n}\n\n// LayerType returns LayerTypeIPv4\nfunc (i *IPv4) LayerType() gopacket.LayerType { return LayerTypeIPv4 }\nfunc (i *IPv4) NetworkFlow() gopacket.Flow {\n\treturn gopacket.NewFlow(EndpointIPv4, i.SrcIP, i.DstIP)\n}\n\ntype IPv4Option struct {\n\tOptionType   uint8\n\tOptionLength uint8\n\tOptionData   []byte\n}\n\nfunc (i IPv4Option) String() string {\n\treturn fmt.Sprintf(\"IPv4Option(%v:%v)\", i.OptionType, i.OptionData)\n}\n\n// for the current ipv4 options, return the number of bytes (including\n// padding that the options used)\nfunc (ip *IPv4) getIPv4OptionSize() uint8 {\n\toptionSize := uint8(0)\n\tfor _, opt := range ip.Options {\n\t\tswitch opt.OptionType {\n\t\tcase 0:\n\t\t\t// this is the end of option lists\n\t\t\toptionSize++\n\t\tcase 1:\n\t\t\t// this is the padding\n\t\t\toptionSize++\n\t\tdefault:\n\t\t\toptionSize += opt.OptionLength\n\n\t\t}\n\t}\n\t// make sure the options are aligned to 32 bit boundary\n\tif (optionSize % 4) != 0 {\n\t\toptionSize += 4 - (optionSize % 4)\n\t}\n\treturn optionSize\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\nfunc (ip *IPv4) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\toptionLength := ip.getIPv4OptionSize()\n\tbytes, err := b.PrependBytes(20 + int(optionLength))\n\tif err != nil {\n\t\treturn err\n\t}\n\tif opts.FixLengths {\n\t\tip.IHL = 5 + (optionLength / 4)\n\t\tip.Length = uint16(len(b.Bytes()))\n\t}\n\tbytes[0] = (ip.Version << 4) | ip.IHL\n\tbytes[1] = ip.TOS\n\tbinary.BigEndian.PutUint16(bytes[2:], ip.Length)\n\tbinary.BigEndian.PutUint16(bytes[4:], ip.Id)\n\tbinary.BigEndian.PutUint16(bytes[6:], ip.flagsfrags())\n\tbytes[8] = ip.TTL\n\tbytes[9] = byte(ip.Protocol)\n\tif err := ip.AddressTo4(); err != nil {\n\t\treturn err\n\t}\n\tcopy(bytes[12:16], ip.SrcIP)\n\tcopy(bytes[16:20], ip.DstIP)\n\n\tcurLocation := 20\n\t// Now, we will encode the options\n\tfor _, opt := range ip.Options {\n\t\tswitch opt.OptionType {\n\t\tcase 0:\n\t\t\t// this is the end of option lists\n\t\t\tbytes[curLocation] = 0\n\t\t\tcurLocation++\n\t\tcase 1:\n\t\t\t// this is the padding\n\t\t\tbytes[curLocation] = 1\n\t\t\tcurLocation++\n\t\tdefault:\n\t\t\tbytes[curLocation] = opt.OptionType\n\t\t\tbytes[curLocation+1] = opt.OptionLength\n\n\t\t\t// sanity checking to protect us from buffer overrun\n\t\t\tif len(opt.OptionData) > int(opt.OptionLength-2) {\n\t\t\t\treturn errors.New(\"option length is smaller than length of option data\")\n\t\t\t}\n\t\t\tcopy(bytes[curLocation+2:curLocation+int(opt.OptionLength)], opt.OptionData)\n\t\t\tcurLocation += int(opt.OptionLength)\n\t\t}\n\t}\n\n\tif opts.ComputeChecksums {\n\t\tip.Checksum = checksum(bytes)\n\t}\n\tbinary.BigEndian.PutUint16(bytes[10:], ip.Checksum)\n\treturn nil\n}\n\nfunc checksum(bytes []byte) uint16 {\n\t// Clear checksum bytes\n\tbytes[10] = 0\n\tbytes[11] = 0\n\n\t// Compute checksum\n\tvar csum uint32\n\tfor i := 0; i < len(bytes); i += 2 {\n\t\tcsum += uint32(bytes[i]) << 8\n\t\tcsum += uint32(bytes[i+1])\n\t}\n\tfor {\n\t\t// Break when sum is less or equals to 0xFFFF\n\t\tif csum <= 65535 {\n\t\t\tbreak\n\t\t}\n\t\t// Add carry to the sum\n\t\tcsum = (csum >> 16) + uint32(uint16(csum))\n\t}\n\t// Flip all the bits\n\treturn ^uint16(csum)\n}\n\nfunc (ip *IPv4) flagsfrags() (ff uint16) {\n\tff |= uint16(ip.Flags) << 13\n\tff |= ip.FragOffset\n\treturn\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (ip *IPv4) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 20 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Invalid ip4 header. Length %d less than 20\", len(data))\n\t}\n\tflagsfrags := binary.BigEndian.Uint16(data[6:8])\n\n\tip.Version = uint8(data[0]) >> 4\n\tip.IHL = uint8(data[0]) & 0x0F\n\tip.TOS = data[1]\n\tip.Length = binary.BigEndian.Uint16(data[2:4])\n\tip.Id = binary.BigEndian.Uint16(data[4:6])\n\tip.Flags = IPv4Flag(flagsfrags >> 13)\n\tip.FragOffset = flagsfrags & 0x1FFF\n\tip.TTL = data[8]\n\tip.Protocol = IPProtocol(data[9])\n\tip.Checksum = binary.BigEndian.Uint16(data[10:12])\n\tip.SrcIP = data[12:16]\n\tip.DstIP = data[16:20]\n\tip.Options = ip.Options[:0]\n\tip.Padding = nil\n\t// Set up an initial guess for contents/payload... we'll reset these soon.\n\tip.BaseLayer = BaseLayer{Contents: data}\n\n\t// This code is added for the following enviroment:\n\t// * Windows 10 with TSO option activated. ( tested on Hyper-V, RealTek ethernet driver )\n\tif ip.Length == 0 {\n\t\t// If using TSO(TCP Segmentation Offload), length is zero.\n\t\t// The actual packet length is the length of data.\n\t\tip.Length = uint16(len(data))\n\t}\n\n\tif ip.Length < 20 {\n\t\treturn fmt.Errorf(\"Invalid (too small) IP length (%d < 20)\", ip.Length)\n\t} else if ip.IHL < 5 {\n\t\treturn fmt.Errorf(\"Invalid (too small) IP header length (%d < 5)\", ip.IHL)\n\t} else if int(ip.IHL*4) > int(ip.Length) {\n\t\treturn fmt.Errorf(\"Invalid IP header length > IP length (%d > %d)\", ip.IHL, ip.Length)\n\t}\n\tif cmp := len(data) - int(ip.Length); cmp > 0 {\n\t\tdata = data[:ip.Length]\n\t} else if cmp < 0 {\n\t\tdf.SetTruncated()\n\t\tif int(ip.IHL)*4 > len(data) {\n\t\t\treturn errors.New(\"Not all IP header bytes available\")\n\t\t}\n\t}\n\tip.Contents = data[:ip.IHL*4]\n\tip.Payload = data[ip.IHL*4:]\n\t// From here on, data contains the header options.\n\tdata = data[20 : ip.IHL*4]\n\t// Pull out IP options\n\tfor len(data) > 0 {\n\t\tif ip.Options == nil {\n\t\t\t// Pre-allocate to avoid growing the slice too much.\n\t\t\tip.Options = make([]IPv4Option, 0, 4)\n\t\t}\n\t\topt := IPv4Option{OptionType: data[0]}\n\t\tswitch opt.OptionType {\n\t\tcase 0: // End of options\n\t\t\topt.OptionLength = 1\n\t\t\tip.Options = append(ip.Options, opt)\n\t\t\tip.Padding = data[1:]\n\t\t\treturn nil\n\t\tcase 1: // 1 byte padding\n\t\t\topt.OptionLength = 1\n\t\t\tdata = data[1:]\n\t\t\tip.Options = append(ip.Options, opt)\n\t\tdefault:\n\t\t\tif len(data) < 2 {\n\t\t\t\tdf.SetTruncated()\n\t\t\t\treturn fmt.Errorf(\"Invalid ip4 option length. Length %d less than 2\", len(data))\n\t\t\t}\n\t\t\topt.OptionLength = data[1]\n\t\t\tif len(data) < int(opt.OptionLength) {\n\t\t\t\tdf.SetTruncated()\n\t\t\t\treturn fmt.Errorf(\"IP option length exceeds remaining IP header size, option type %v length %v\", opt.OptionType, opt.OptionLength)\n\t\t\t}\n\t\t\tif opt.OptionLength <= 2 {\n\t\t\t\treturn fmt.Errorf(\"Invalid IP option type %v length %d. Must be greater than 2\", opt.OptionType, opt.OptionLength)\n\t\t\t}\n\t\t\topt.OptionData = data[2:opt.OptionLength]\n\t\t\tdata = data[opt.OptionLength:]\n\t\t\tip.Options = append(ip.Options, opt)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (i *IPv4) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeIPv4\n}\n\nfunc (i *IPv4) NextLayerType() gopacket.LayerType {\n\tif i.Flags&IPv4MoreFragments != 0 || i.FragOffset != 0 {\n\t\treturn gopacket.LayerTypeFragment\n\t}\n\treturn i.Protocol.LayerType()\n}\n\nfunc decodeIPv4(data []byte, p gopacket.PacketBuilder) error {\n\tip := &IPv4{}\n\terr := ip.DecodeFromBytes(data, p)\n\tp.AddLayer(ip)\n\tp.SetNetworkLayer(ip)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn p.NextDecoder(ip.NextLayerType())\n}\n\nfunc checkIPv4Address(addr net.IP) (net.IP, error) {\n\tif c := addr.To4(); c != nil {\n\t\treturn c, nil\n\t}\n\tif len(addr) == net.IPv6len {\n\t\treturn nil, errors.New(\"address is IPv6\")\n\t}\n\treturn nil, fmt.Errorf(\"wrong length of %d bytes instead of %d\", len(addr), net.IPv4len)\n}\n\nfunc (ip *IPv4) AddressTo4() error {\n\tvar src, dst net.IP\n\n\tif addr, err := checkIPv4Address(ip.SrcIP); err != nil {\n\t\treturn fmt.Errorf(\"Invalid source IPv4 address (%s)\", err)\n\t} else {\n\t\tsrc = addr\n\t}\n\tif addr, err := checkIPv4Address(ip.DstIP); err != nil {\n\t\treturn fmt.Errorf(\"Invalid destination IPv4 address (%s)\", err)\n\t} else {\n\t\tdst = addr\n\t}\n\tip.SrcIP = src\n\tip.DstIP = dst\n\treturn nil\n}\n"
  },
  {
    "path": "layers/ip4_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// This file tests some of the functionality provided in the ip4.go\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"net\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// Test the function getIPv4OptionSize when the ipv4 has no options\nfunc TestGetIPOptLengthNoOpt(t *testing.T) {\n\tip := IPv4{}\n\tlength := ip.getIPv4OptionSize()\n\tif length != 0 {\n\t\tt.Fatalf(\"Empty option list should have 0 length.  Actual %d\", length)\n\t}\n}\n\n// Test the function getIPv4OptionSize when the ipv4 has end of list option\nfunc TestGetIPOptLengthEndOfList(t *testing.T) {\n\tip := IPv4{}\n\tip.Options = append(ip.Options, IPv4Option{OptionType: 0, OptionLength: 1})\n\tlength := ip.getIPv4OptionSize()\n\tif length != 4 {\n\t\tt.Fatalf(\"After padding, the list should have 4 length.  Actual %d\", length)\n\t}\n}\n\n// Test the function getIPv4OptionSize when the ipv4 has padding and end of list option\nfunc TestGetIPOptLengthPaddingEndOfList(t *testing.T) {\n\tip := IPv4{}\n\tip.Options = append(ip.Options, IPv4Option{OptionType: 1, OptionLength: 1})\n\tip.Options = append(ip.Options, IPv4Option{OptionType: 0, OptionLength: 1})\n\tlength := ip.getIPv4OptionSize()\n\tif length != 4 {\n\t\tt.Fatalf(\"After padding, the list should have 4 length.  Actual %d\", length)\n\t}\n}\n\n// Test the function getIPv4OptionSize when the ipv4 has some non-trivial option and end of list option\nfunc TestGetIPOptLengthOptionEndOfList(t *testing.T) {\n\tip := IPv4{}\n\tsomeByte := make([]byte, 8)\n\tip.Options = append(ip.Options, IPv4Option{OptionType: 2, OptionLength: 10, OptionData: someByte})\n\tip.Options = append(ip.Options, IPv4Option{OptionType: 0, OptionLength: 1})\n\tlength := ip.getIPv4OptionSize()\n\tif length != 12 {\n\t\tt.Fatalf(\"The list should have 12 length.  Actual %d\", length)\n\t}\n}\n\n// Tests that the Options slice is properly reset before parsing new data\nfunc TestIPOptResetDuringDecoding(t *testing.T) {\n\tip := &IPv4{\n\t\tOptions: []IPv4Option{{OptionType: 42, OptionLength: 4, OptionData: make([]byte, 2)}},\n\t}\n\n\tipWithoutOptions := &IPv4{\n\t\tSrcIP:    net.IPv4(192, 168, 1, 1),\n\t\tDstIP:    net.IPv4(192, 168, 1, 1),\n\t\tProtocol: IPProtocolTCP,\n\t}\n\n\tipBytes, err := serialize(ipWithoutOptions)\n\n\tif err != nil {\n\t\tt.Fatalf(\"Failed to serialize ip layer: %v\", err)\n\t}\n\n\terr = ip.DecodeFromBytes(ipBytes, gopacket.NilDecodeFeedback)\n\n\tif err != nil {\n\t\tt.Fatalf(\"Failed to deserialize ip layer: %v\", err)\n\t}\n\n\tif len(ip.Options) > 0 {\n\t\tt.Fatalf(\"Options slice has stale data from previous packet\")\n\t}\n\n}\n\nfunc serialize(ip *IPv4) ([]byte, error) {\n\tbuffer := gopacket.NewSerializeBuffer()\n\terr := ip.SerializeTo(buffer, gopacket.SerializeOptions{\n\t\tFixLengths:       true,\n\t\tComputeChecksums: true,\n\t})\n\treturn buffer.Bytes(), err\n}\n\n// Test the function checksum\nfunc TestChecksum(t *testing.T) {\n\ttestData := []struct {\n\t\tname   string\n\t\theader string\n\t\twant   string\n\t}{{\n\t\tname:   \"sum has two carries\",\n\t\theader: \"4540005800000000ff11ffff0aeb1d070aed8877\",\n\t\twant:   \"fffe\",\n\t}, {\n\t\tname:   \"wikipedia case\",\n\t\theader: \"45000073000040004011b861c0a80001c0a800c7\",\n\t\twant:   \"b861\",\n\t}}\n\n\tfor _, test := range testData {\n\t\tbytes, err := hex.DecodeString(test.header)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Failed to Decode header: %v\", err)\n\t\t}\n\t\twantBytes, err := hex.DecodeString(test.want)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Failed to decode want checksum: %v\", err)\n\t\t}\n\n\t\tif got, want := checksum(bytes), binary.BigEndian.Uint16(wantBytes); got != want {\n\t\t\tt.Errorf(\"In test %q, got incorrect checksum: got(%x), want(%x)\", test.name, got, want)\n\t\t}\n\t}\n}\n\nfunc TestIPv4InvalidOptionLength(t *testing.T) {\n\t// ip4 Packet with option 136 length set to zero\n\tb, err := hex.DecodeString(\"460000705f5b0000ff114e02af2db00295ab7e0f88001234\")\n\tif err != nil {\n\t\tt.Fatalf(\"Failed to Decode header: %v\", err)\n\t}\n\tvar ip4 IPv4\n\terr = ip4.DecodeFromBytes(b, gopacket.NilDecodeFeedback)\n\tif err == nil {\n\t\tt.Fatal(\"Expected 'invalid IP option length' error, but got none.\")\n\t}\n}\n\nfunc TestIPv4Options(t *testing.T) {\n\tvar ip4 IPv4 // reuse ip4 to test reset\n\tfor _, test := range []struct {\n\t\tpacket  string\n\t\toptions []IPv4Option\n\t\tpadding []byte\n\t}{\n\t\t{\n\t\t\tpacket: \"4800002803040000fe01c1e0af2db00095ab7e0b820b00000000000000000000\",\n\t\t\toptions: []IPv4Option{\n\t\t\t\t{\n\t\t\t\t\tOptionType:   130,\n\t\t\t\t\tOptionData:   []byte{0, 0, 0, 0, 0, 0, 0, 0, 0},\n\t\t\t\t\tOptionLength: 11,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tOptionType:   0,\n\t\t\t\t\tOptionLength: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tpacket: \"4900002803040000fe01c1e0af2db00095ab7e0b01820b00000000000000000000010203\",\n\t\t\toptions: []IPv4Option{\n\t\t\t\t{\n\t\t\t\t\tOptionType:   1,\n\t\t\t\t\tOptionLength: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tOptionType:   130,\n\t\t\t\t\tOptionData:   []byte{0, 0, 0, 0, 0, 0, 0, 0, 0},\n\t\t\t\t\tOptionLength: 11,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tOptionType:   0,\n\t\t\t\t\tOptionLength: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t\tpadding: []byte{1, 2, 3},\n\t\t},\n\t\t{\n\t\t\tpacket: \"4800002803040000fe01c1e0af2db00095ab7e0b820c00000000000000000000\",\n\t\t\toptions: []IPv4Option{\n\t\t\t\t{\n\t\t\t\t\tOptionType:   130,\n\t\t\t\t\tOptionData:   []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},\n\t\t\t\t\tOptionLength: 12,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tpacket: \"4900002803040000fe01c1e0af2db00095ab7e0b00820b00000000000000000000010203\",\n\t\t\toptions: []IPv4Option{\n\t\t\t\t{\n\t\t\t\t\tOptionType:   0,\n\t\t\t\t\tOptionLength: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t\tpadding: []byte{0x82, 0x0b, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3},\n\t\t},\n\t} {\n\t\tb, err := hex.DecodeString(test.packet)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Failed to Decode header: %v\", err)\n\t\t}\n\t\terr = ip4.DecodeFromBytes(b, gopacket.NilDecodeFeedback)\n\t\tif err != nil {\n\t\t\tt.Fatal(\"Unexpected error during decoding:\", err)\n\t\t}\n\t\tif !reflect.DeepEqual(ip4.Options, test.options) {\n\t\t\tt.Fatalf(\"Options mismatch.\\nGot:\\n%#v\\nExpected:\\n%#v\\n\", ip4.Options, test.options)\n\t\t}\n\t\tif !bytes.Equal(ip4.Padding, test.padding) {\n\t\t\tt.Fatalf(\"Padding mismatch.\\nGot:\\n%#v\\nExpected:\\n%#v\\n\", ip4.Padding, test.padding)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "layers/ip6.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/google/gopacket\"\n)\n\nconst (\n\t// IPv6HopByHopOptionJumbogram code as defined in RFC 2675\n\tIPv6HopByHopOptionJumbogram = 0xC2\n)\n\nconst (\n\tipv6MaxPayloadLength = 65535\n)\n\n// IPv6 is the layer for the IPv6 header.\ntype IPv6 struct {\n\t// http://www.networksorcery.com/enp/protocol/ipv6.htm\n\tBaseLayer\n\tVersion      uint8\n\tTrafficClass uint8\n\tFlowLabel    uint32\n\tLength       uint16\n\tNextHeader   IPProtocol\n\tHopLimit     uint8\n\tSrcIP        net.IP\n\tDstIP        net.IP\n\tHopByHop     *IPv6HopByHop\n\t// hbh will be pointed to by HopByHop if that layer exists.\n\thbh IPv6HopByHop\n}\n\n// LayerType returns LayerTypeIPv6\nfunc (ipv6 *IPv6) LayerType() gopacket.LayerType { return LayerTypeIPv6 }\n\n// NetworkFlow returns this new Flow (EndpointIPv6, SrcIP, DstIP)\nfunc (ipv6 *IPv6) NetworkFlow() gopacket.Flow {\n\treturn gopacket.NewFlow(EndpointIPv6, ipv6.SrcIP, ipv6.DstIP)\n}\n\n// Search for Jumbo Payload TLV in IPv6HopByHop and return (length, true) if found\nfunc getIPv6HopByHopJumboLength(hopopts *IPv6HopByHop) (uint32, bool, error) {\n\tvar tlv *IPv6HopByHopOption\n\n\tfor _, t := range hopopts.Options {\n\t\tif t.OptionType == IPv6HopByHopOptionJumbogram {\n\t\t\ttlv = t\n\t\t\tbreak\n\t\t}\n\t}\n\tif tlv == nil {\n\t\t// Not found\n\t\treturn 0, false, nil\n\t}\n\tif len(tlv.OptionData) != 4 {\n\t\treturn 0, false, errors.New(\"Jumbo length TLV data must have length 4\")\n\t}\n\tl := binary.BigEndian.Uint32(tlv.OptionData)\n\tif l <= ipv6MaxPayloadLength {\n\t\treturn 0, false, fmt.Errorf(\"Jumbo length cannot be less than %d\", ipv6MaxPayloadLength+1)\n\t}\n\t// Found\n\treturn l, true, nil\n}\n\n// Adds zero-valued Jumbo TLV to IPv6 header if it does not exist\n// (if necessary add hop-by-hop header)\nfunc addIPv6JumboOption(ip6 *IPv6) {\n\tvar tlv *IPv6HopByHopOption\n\n\tif ip6.HopByHop == nil {\n\t\t// Add IPv6 HopByHop\n\t\tip6.HopByHop = &IPv6HopByHop{}\n\t\tip6.HopByHop.NextHeader = ip6.NextHeader\n\t\tip6.HopByHop.HeaderLength = 0\n\t\tip6.NextHeader = IPProtocolIPv6HopByHop\n\t}\n\tfor _, t := range ip6.HopByHop.Options {\n\t\tif t.OptionType == IPv6HopByHopOptionJumbogram {\n\t\t\ttlv = t\n\t\t\tbreak\n\t\t}\n\t}\n\tif tlv == nil {\n\t\t// Add Jumbo TLV\n\t\ttlv = &IPv6HopByHopOption{}\n\t\tip6.HopByHop.Options = append(ip6.HopByHop.Options, tlv)\n\t}\n\ttlv.SetJumboLength(0)\n}\n\n// Set jumbo length in serialized IPv6 payload (starting with HopByHop header)\nfunc setIPv6PayloadJumboLength(hbh []byte) error {\n\tpLen := len(hbh)\n\tif pLen < 8 {\n\t\t//HopByHop is minimum 8 bytes\n\t\treturn fmt.Errorf(\"Invalid IPv6 payload (length %d)\", pLen)\n\t}\n\thbhLen := int((hbh[1] + 1) * 8)\n\tif hbhLen > pLen {\n\t\treturn fmt.Errorf(\"Invalid hop-by-hop length (length: %d, payload: %d\", hbhLen, pLen)\n\t}\n\toffset := 2 //start with options\n\tfor offset < hbhLen {\n\t\topt := hbh[offset]\n\t\tif opt == 0 {\n\t\t\t//Pad1\n\t\t\toffset++\n\t\t\tcontinue\n\t\t}\n\t\toptLen := int(hbh[offset+1])\n\t\tif opt == IPv6HopByHopOptionJumbogram {\n\t\t\tif optLen == 4 {\n\t\t\t\tbinary.BigEndian.PutUint32(hbh[offset+2:], uint32(pLen))\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"Jumbo TLV too short (%d bytes)\", optLen)\n\t\t}\n\t\toffset += 2 + optLen\n\t}\n\treturn errors.New(\"Jumbo TLV not found\")\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (ipv6 *IPv6) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tvar jumbo bool\n\tvar err error\n\n\tpayload := b.Bytes()\n\tpLen := len(payload)\n\tif pLen > ipv6MaxPayloadLength {\n\t\tjumbo = true\n\t\tif opts.FixLengths {\n\t\t\t// We need to set the length later because the hop-by-hop header may\n\t\t\t// not exist or else need padding, so pLen may yet change\n\t\t\taddIPv6JumboOption(ipv6)\n\t\t} else if ipv6.HopByHop == nil {\n\t\t\treturn fmt.Errorf(\"Cannot fit payload length of %d into IPv6 packet\", pLen)\n\t\t} else {\n\t\t\t_, ok, err := getIPv6HopByHopJumboLength(ipv6.HopByHop)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif !ok {\n\t\t\t\treturn errors.New(\"Missing jumbo length hop-by-hop option\")\n\t\t\t}\n\t\t}\n\t}\n\n\thbhAlreadySerialized := false\n\tif ipv6.HopByHop != nil {\n\t\tfor _, l := range b.Layers() {\n\t\t\tif l == LayerTypeIPv6HopByHop {\n\t\t\t\thbhAlreadySerialized = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tif ipv6.HopByHop != nil && !hbhAlreadySerialized {\n\t\tif ipv6.NextHeader != IPProtocolIPv6HopByHop {\n\t\t\t// Just fix it instead of throwing an error\n\t\t\tipv6.NextHeader = IPProtocolIPv6HopByHop\n\t\t}\n\t\terr = ipv6.HopByHop.SerializeTo(b, opts)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpayload = b.Bytes()\n\t\tpLen = len(payload)\n\t\tif opts.FixLengths && jumbo {\n\t\t\terr := setIPv6PayloadJumboLength(payload)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\tif !jumbo && pLen > ipv6MaxPayloadLength {\n\t\treturn errors.New(\"Cannot fit payload into IPv6 header\")\n\t}\n\tbytes, err := b.PrependBytes(40)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = (ipv6.Version << 4) | (ipv6.TrafficClass >> 4)\n\tbytes[1] = (ipv6.TrafficClass << 4) | uint8(ipv6.FlowLabel>>16)\n\tbinary.BigEndian.PutUint16(bytes[2:], uint16(ipv6.FlowLabel))\n\tif opts.FixLengths {\n\t\tif jumbo {\n\t\t\tipv6.Length = 0\n\t\t} else {\n\t\t\tipv6.Length = uint16(pLen)\n\t\t}\n\t}\n\tbinary.BigEndian.PutUint16(bytes[4:], ipv6.Length)\n\tbytes[6] = byte(ipv6.NextHeader)\n\tbytes[7] = byte(ipv6.HopLimit)\n\tif err := ipv6.AddressTo16(); err != nil {\n\t\treturn err\n\t}\n\tcopy(bytes[8:], ipv6.SrcIP)\n\tcopy(bytes[24:], ipv6.DstIP)\n\treturn nil\n}\n\n// DecodeFromBytes implementation according to gopacket.DecodingLayer\nfunc (ipv6 *IPv6) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 40 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Invalid ip6 header. Length %d less than 40\", len(data))\n\t}\n\tipv6.Version = uint8(data[0]) >> 4\n\tipv6.TrafficClass = uint8((binary.BigEndian.Uint16(data[0:2]) >> 4) & 0x00FF)\n\tipv6.FlowLabel = binary.BigEndian.Uint32(data[0:4]) & 0x000FFFFF\n\tipv6.Length = binary.BigEndian.Uint16(data[4:6])\n\tipv6.NextHeader = IPProtocol(data[6])\n\tipv6.HopLimit = data[7]\n\tipv6.SrcIP = data[8:24]\n\tipv6.DstIP = data[24:40]\n\tipv6.HopByHop = nil\n\tipv6.BaseLayer = BaseLayer{data[:40], data[40:]}\n\n\t// We treat a HopByHop IPv6 option as part of the IPv6 packet, since its\n\t// options are crucial for understanding what's actually happening per packet.\n\tif ipv6.NextHeader == IPProtocolIPv6HopByHop {\n\t\terr := ipv6.hbh.DecodeFromBytes(ipv6.Payload, df)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tipv6.HopByHop = &ipv6.hbh\n\t\tpEnd, jumbo, err := getIPv6HopByHopJumboLength(ipv6.HopByHop)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif jumbo && ipv6.Length == 0 {\n\t\t\tpEnd := int(pEnd)\n\t\t\tif pEnd > len(ipv6.Payload) {\n\t\t\t\tdf.SetTruncated()\n\t\t\t\tpEnd = len(ipv6.Payload)\n\t\t\t}\n\t\t\tipv6.Payload = ipv6.Payload[:pEnd]\n\t\t\treturn nil\n\t\t} else if jumbo && ipv6.Length != 0 {\n\t\t\treturn errors.New(\"IPv6 has jumbo length and IPv6 length is not 0\")\n\t\t} else if !jumbo && ipv6.Length == 0 {\n\t\t\treturn errors.New(\"IPv6 length 0, but HopByHop header does not have jumbogram option\")\n\t\t} else {\n\t\t\tipv6.Payload = ipv6.Payload[ipv6.hbh.ActualLength:]\n\t\t}\n\t}\n\n\tif ipv6.Length == 0 {\n\t\treturn fmt.Errorf(\"IPv6 length 0, but next header is %v, not HopByHop\", ipv6.NextHeader)\n\t}\n\n\tpEnd := int(ipv6.Length)\n\tif pEnd > len(ipv6.Payload) {\n\t\tdf.SetTruncated()\n\t\tpEnd = len(ipv6.Payload)\n\t}\n\tipv6.Payload = ipv6.Payload[:pEnd]\n\n\treturn nil\n}\n\n// CanDecode implementation according to gopacket.DecodingLayer\nfunc (ipv6 *IPv6) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeIPv6\n}\n\n// NextLayerType implementation according to gopacket.DecodingLayer\nfunc (ipv6 *IPv6) NextLayerType() gopacket.LayerType {\n\tif ipv6.HopByHop != nil {\n\t\treturn ipv6.HopByHop.NextHeader.LayerType()\n\t}\n\treturn ipv6.NextHeader.LayerType()\n}\n\nfunc decodeIPv6(data []byte, p gopacket.PacketBuilder) error {\n\tip6 := &IPv6{}\n\terr := ip6.DecodeFromBytes(data, p)\n\tp.AddLayer(ip6)\n\tp.SetNetworkLayer(ip6)\n\tif ip6.HopByHop != nil {\n\t\tp.AddLayer(ip6.HopByHop)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn p.NextDecoder(ip6.NextLayerType())\n}\n\ntype ipv6HeaderTLVOption struct {\n\tOptionType, OptionLength uint8\n\tActualLength             int\n\tOptionData               []byte\n\tOptionAlignment          [2]uint8 // Xn+Y = [2]uint8{X, Y}\n}\n\nfunc (h *ipv6HeaderTLVOption) serializeTo(data []byte, fixLengths bool, dryrun bool) int {\n\tif fixLengths {\n\t\th.OptionLength = uint8(len(h.OptionData))\n\t}\n\tlength := int(h.OptionLength) + 2\n\tif !dryrun {\n\t\tdata[0] = h.OptionType\n\t\tdata[1] = h.OptionLength\n\t\tcopy(data[2:], h.OptionData)\n\t}\n\treturn length\n}\n\nfunc decodeIPv6HeaderTLVOption(data []byte, df gopacket.DecodeFeedback) (h *ipv6HeaderTLVOption, _ error) {\n\tif len(data) < 2 {\n\t\tdf.SetTruncated()\n\t\treturn nil, errors.New(\"IPv6 header option too small\")\n\t}\n\th = &ipv6HeaderTLVOption{}\n\tif data[0] == 0 {\n\t\th.ActualLength = 1\n\t\treturn\n\t}\n\th.OptionType = data[0]\n\th.OptionLength = data[1]\n\th.ActualLength = int(h.OptionLength) + 2\n\tif len(data) < h.ActualLength {\n\t\tdf.SetTruncated()\n\t\treturn nil, errors.New(\"IPv6 header TLV option too small\")\n\t}\n\th.OptionData = data[2:h.ActualLength]\n\treturn\n}\n\nfunc serializeTLVOptionPadding(data []byte, padLength int) {\n\tif padLength <= 0 {\n\t\treturn\n\t}\n\tif padLength == 1 {\n\t\tdata[0] = 0x0\n\t\treturn\n\t}\n\ttlvLength := uint8(padLength) - 2\n\tdata[0] = 0x1\n\tdata[1] = tlvLength\n\tif tlvLength != 0 {\n\t\tfor k := range data[2:] {\n\t\t\tdata[k+2] = 0x0\n\t\t}\n\t}\n\treturn\n}\n\n// If buf is 'nil' do a serialize dry run\nfunc serializeIPv6HeaderTLVOptions(buf []byte, options []*ipv6HeaderTLVOption, fixLengths bool) int {\n\tvar l int\n\n\tdryrun := buf == nil\n\tlength := 2\n\tfor _, opt := range options {\n\t\tif fixLengths {\n\t\t\tx := int(opt.OptionAlignment[0])\n\t\t\ty := int(opt.OptionAlignment[1])\n\t\t\tif x != 0 {\n\t\t\t\tn := length / x\n\t\t\t\toffset := x*n + y\n\t\t\t\tif offset < length {\n\t\t\t\t\toffset += x\n\t\t\t\t}\n\t\t\t\tif length != offset {\n\t\t\t\t\tpad := offset - length\n\t\t\t\t\tif !dryrun {\n\t\t\t\t\t\tserializeTLVOptionPadding(buf[length-2:], pad)\n\t\t\t\t\t}\n\t\t\t\t\tlength += pad\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif dryrun {\n\t\t\tl = opt.serializeTo(nil, fixLengths, true)\n\t\t} else {\n\t\t\tl = opt.serializeTo(buf[length-2:], fixLengths, false)\n\t\t}\n\t\tlength += l\n\t}\n\tif fixLengths {\n\t\tpad := length % 8\n\t\tif pad != 0 {\n\t\t\tif !dryrun {\n\t\t\t\tserializeTLVOptionPadding(buf[length-2:], pad)\n\t\t\t}\n\t\t\tlength += pad\n\t\t}\n\t}\n\treturn length - 2\n}\n\ntype ipv6ExtensionBase struct {\n\tBaseLayer\n\tNextHeader   IPProtocol\n\tHeaderLength uint8\n\tActualLength int\n}\n\nfunc decodeIPv6ExtensionBase(data []byte, df gopacket.DecodeFeedback) (i ipv6ExtensionBase, returnedErr error) {\n\tif len(data) < 2 {\n\t\tdf.SetTruncated()\n\t\treturn ipv6ExtensionBase{}, fmt.Errorf(\"Invalid ip6-extension header. Length %d less than 2\", len(data))\n\t}\n\ti.NextHeader = IPProtocol(data[0])\n\ti.HeaderLength = data[1]\n\ti.ActualLength = int(i.HeaderLength)*8 + 8\n\tif len(data) < i.ActualLength {\n\t\treturn ipv6ExtensionBase{}, fmt.Errorf(\"Invalid ip6-extension header. Length %d less than specified length %d\", len(data), i.ActualLength)\n\t}\n\ti.Contents = data[:i.ActualLength]\n\ti.Payload = data[i.ActualLength:]\n\treturn\n}\n\n// IPv6ExtensionSkipper is a DecodingLayer which decodes and ignores v6\n// extensions.  You can use it with a DecodingLayerParser to handle IPv6 stacks\n// which may or may not have extensions.\ntype IPv6ExtensionSkipper struct {\n\tNextHeader IPProtocol\n\tBaseLayer\n}\n\n// DecodeFromBytes implementation according to gopacket.DecodingLayer\nfunc (i *IPv6ExtensionSkipper) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\textension, err := decodeIPv6ExtensionBase(data, df)\n\tif err != nil {\n\t\treturn err\n\t}\n\ti.BaseLayer = BaseLayer{data[:extension.ActualLength], data[extension.ActualLength:]}\n\ti.NextHeader = extension.NextHeader\n\treturn nil\n}\n\n// CanDecode implementation according to gopacket.DecodingLayer\nfunc (i *IPv6ExtensionSkipper) CanDecode() gopacket.LayerClass {\n\treturn LayerClassIPv6Extension\n}\n\n// NextLayerType implementation according to gopacket.DecodingLayer\nfunc (i *IPv6ExtensionSkipper) NextLayerType() gopacket.LayerType {\n\treturn i.NextHeader.LayerType()\n}\n\n// IPv6HopByHopOption is a TLV option present in an IPv6 hop-by-hop extension.\ntype IPv6HopByHopOption ipv6HeaderTLVOption\n\n// IPv6HopByHop is the IPv6 hop-by-hop extension.\ntype IPv6HopByHop struct {\n\tipv6ExtensionBase\n\tOptions []*IPv6HopByHopOption\n}\n\n// LayerType returns LayerTypeIPv6HopByHop.\nfunc (i *IPv6HopByHop) LayerType() gopacket.LayerType { return LayerTypeIPv6HopByHop }\n\n// SerializeTo implementation according to gopacket.SerializableLayer\nfunc (i *IPv6HopByHop) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tvar bytes []byte\n\tvar err error\n\n\to := make([]*ipv6HeaderTLVOption, 0, len(i.Options))\n\tfor _, v := range i.Options {\n\t\to = append(o, (*ipv6HeaderTLVOption)(v))\n\t}\n\n\tl := serializeIPv6HeaderTLVOptions(nil, o, opts.FixLengths)\n\tbytes, err = b.PrependBytes(l)\n\tif err != nil {\n\t\treturn err\n\t}\n\tserializeIPv6HeaderTLVOptions(bytes, o, opts.FixLengths)\n\n\tlength := len(bytes) + 2\n\tif length%8 != 0 {\n\t\treturn errors.New(\"IPv6HopByHop actual length must be multiple of 8\")\n\t}\n\tbytes, err = b.PrependBytes(2)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = uint8(i.NextHeader)\n\tif opts.FixLengths {\n\t\ti.HeaderLength = uint8((length / 8) - 1)\n\t}\n\tbytes[1] = uint8(i.HeaderLength)\n\treturn nil\n}\n\n// DecodeFromBytes implementation according to gopacket.DecodingLayer\nfunc (i *IPv6HopByHop) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tvar err error\n\ti.ipv6ExtensionBase, err = decodeIPv6ExtensionBase(data, df)\n\tif err != nil {\n\t\treturn err\n\t}\n\ti.Options = i.Options[:0]\n\toffset := 2\n\tfor offset < i.ActualLength {\n\t\topt, err := decodeIPv6HeaderTLVOption(data[offset:], df)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ti.Options = append(i.Options, (*IPv6HopByHopOption)(opt))\n\t\toffset += opt.ActualLength\n\t}\n\treturn nil\n}\n\nfunc decodeIPv6HopByHop(data []byte, p gopacket.PacketBuilder) error {\n\ti := &IPv6HopByHop{}\n\terr := i.DecodeFromBytes(data, p)\n\tp.AddLayer(i)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn p.NextDecoder(i.NextHeader)\n}\n\n// SetJumboLength adds the IPv6HopByHopOptionJumbogram with the given length\nfunc (o *IPv6HopByHopOption) SetJumboLength(len uint32) {\n\to.OptionType = IPv6HopByHopOptionJumbogram\n\to.OptionLength = 4\n\to.ActualLength = 6\n\tif o.OptionData == nil {\n\t\to.OptionData = make([]byte, 4)\n\t}\n\tbinary.BigEndian.PutUint32(o.OptionData, len)\n\to.OptionAlignment = [2]uint8{4, 2}\n}\n\n// IPv6Routing is the IPv6 routing extension.\ntype IPv6Routing struct {\n\tipv6ExtensionBase\n\tRoutingType  uint8\n\tSegmentsLeft uint8\n\t// This segment is supposed to be zero according to RFC2460, the second set of\n\t// 4 bytes in the extension.\n\tReserved []byte\n\t// SourceRoutingIPs is the set of IPv6 addresses requested for source routing,\n\t// set only if RoutingType == 0.\n\tSourceRoutingIPs []net.IP\n}\n\n// LayerType returns LayerTypeIPv6Routing.\nfunc (i *IPv6Routing) LayerType() gopacket.LayerType { return LayerTypeIPv6Routing }\n\nfunc decodeIPv6Routing(data []byte, p gopacket.PacketBuilder) error {\n\tbase, err := decodeIPv6ExtensionBase(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\ti := &IPv6Routing{\n\t\tipv6ExtensionBase: base,\n\t\tRoutingType:       data[2],\n\t\tSegmentsLeft:      data[3],\n\t\tReserved:          data[4:8],\n\t}\n\tswitch i.RoutingType {\n\tcase 0: // Source routing\n\t\tif (i.ActualLength-8)%16 != 0 {\n\t\t\treturn fmt.Errorf(\"Invalid IPv6 source routing, length of type 0 packet %d\", i.ActualLength)\n\t\t}\n\t\tfor d := i.Contents[8:]; len(d) >= 16; d = d[16:] {\n\t\t\ti.SourceRoutingIPs = append(i.SourceRoutingIPs, net.IP(d[:16]))\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"Unknown IPv6 routing header type %d\", i.RoutingType)\n\t}\n\tp.AddLayer(i)\n\treturn p.NextDecoder(i.NextHeader)\n}\n\n// IPv6Fragment is the IPv6 fragment header, used for packet\n// fragmentation/defragmentation.\ntype IPv6Fragment struct {\n\tBaseLayer\n\tNextHeader IPProtocol\n\t// Reserved1 is bits [8-16), from least to most significant, 0-indexed\n\tReserved1      uint8\n\tFragmentOffset uint16\n\t// Reserved2 is bits [29-31), from least to most significant, 0-indexed\n\tReserved2      uint8\n\tMoreFragments  bool\n\tIdentification uint32\n}\n\n// LayerType returns LayerTypeIPv6Fragment.\nfunc (i *IPv6Fragment) LayerType() gopacket.LayerType { return LayerTypeIPv6Fragment }\n\nfunc decodeIPv6Fragment(data []byte, p gopacket.PacketBuilder) error {\n\tif len(data) < 8 {\n\t\tp.SetTruncated()\n\t\treturn fmt.Errorf(\"Invalid ip6-fragment header. Length %d less than 8\", len(data))\n\t}\n\ti := &IPv6Fragment{\n\t\tBaseLayer:      BaseLayer{data[:8], data[8:]},\n\t\tNextHeader:     IPProtocol(data[0]),\n\t\tReserved1:      data[1],\n\t\tFragmentOffset: binary.BigEndian.Uint16(data[2:4]) >> 3,\n\t\tReserved2:      data[3] & 0x6 >> 1,\n\t\tMoreFragments:  data[3]&0x1 != 0,\n\t\tIdentification: binary.BigEndian.Uint32(data[4:8]),\n\t}\n\tp.AddLayer(i)\n\treturn p.NextDecoder(gopacket.DecodeFragment)\n}\n\n// IPv6DestinationOption is a TLV option present in an IPv6 destination options extension.\ntype IPv6DestinationOption ipv6HeaderTLVOption\n\n// IPv6Destination is the IPv6 destination options header.\ntype IPv6Destination struct {\n\tipv6ExtensionBase\n\tOptions []*IPv6DestinationOption\n}\n\n// LayerType returns LayerTypeIPv6Destination.\nfunc (i *IPv6Destination) LayerType() gopacket.LayerType { return LayerTypeIPv6Destination }\n\n// DecodeFromBytes implementation according to gopacket.DecodingLayer\nfunc (i *IPv6Destination) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tvar err error\n\ti.ipv6ExtensionBase, err = decodeIPv6ExtensionBase(data, df)\n\tif err != nil {\n\t\treturn err\n\t}\n\toffset := 2\n\tfor offset < i.ActualLength {\n\t\topt, err := decodeIPv6HeaderTLVOption(data[offset:], df)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ti.Options = append(i.Options, (*IPv6DestinationOption)(opt))\n\t\toffset += opt.ActualLength\n\t}\n\treturn nil\n}\n\nfunc decodeIPv6Destination(data []byte, p gopacket.PacketBuilder) error {\n\ti := &IPv6Destination{}\n\terr := i.DecodeFromBytes(data, p)\n\tp.AddLayer(i)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn p.NextDecoder(i.NextHeader)\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (i *IPv6Destination) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tvar bytes []byte\n\tvar err error\n\n\to := make([]*ipv6HeaderTLVOption, 0, len(i.Options))\n\tfor _, v := range i.Options {\n\t\to = append(o, (*ipv6HeaderTLVOption)(v))\n\t}\n\n\tl := serializeIPv6HeaderTLVOptions(nil, o, opts.FixLengths)\n\tbytes, err = b.PrependBytes(l)\n\tif err != nil {\n\t\treturn err\n\t}\n\tserializeIPv6HeaderTLVOptions(bytes, o, opts.FixLengths)\n\n\tlength := len(bytes) + 2\n\tif length%8 != 0 {\n\t\treturn errors.New(\"IPv6Destination actual length must be multiple of 8\")\n\t}\n\tbytes, err = b.PrependBytes(2)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = uint8(i.NextHeader)\n\tif opts.FixLengths {\n\t\ti.HeaderLength = uint8((length / 8) - 1)\n\t}\n\tbytes[1] = uint8(i.HeaderLength)\n\treturn nil\n}\n\nfunc checkIPv6Address(addr net.IP) error {\n\tif len(addr) == net.IPv6len {\n\t\treturn nil\n\t}\n\tif len(addr) == net.IPv4len {\n\t\treturn errors.New(\"address is IPv4\")\n\t}\n\treturn fmt.Errorf(\"wrong length of %d bytes instead of %d\", len(addr), net.IPv6len)\n}\n\n// AddressTo16 ensures IPv6.SrcIP and IPv6.DstIP are actually IPv6 addresses (i.e. 16 byte addresses)\nfunc (ipv6 *IPv6) AddressTo16() error {\n\tif err := checkIPv6Address(ipv6.SrcIP); err != nil {\n\t\treturn fmt.Errorf(\"Invalid source IPv6 address (%s)\", err)\n\t}\n\tif err := checkIPv6Address(ipv6.DstIP); err != nil {\n\t\treturn fmt.Errorf(\"Invalid destination IPv6 address (%s)\", err)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "layers/ip6_test.go",
    "content": "// Copyright 2014, Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"github.com/google/gopacket\"\n\t\"net\"\n\t\"reflect\"\n\t\"testing\"\n)\n\nfunc TestSerializeIPv6HeaderTLVOptions(t *testing.T) {\n\t//RFC 2460 Appendix B\n\t/*\n\t   Example 3\n\n\t   A Hop-by-Hop or Destination Options header containing both options X\n\t   and Y from Examples 1 and 2 would have one of the two following\n\t   formats, depending on which option appeared first:\n\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |  Next Header  | Hdr Ext Len=3 | Option Type=X |Opt Data Len=12|\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |                         4-octet field                         |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |                                                               |\n\t   +                         8-octet field                         +\n\t   |                                                               |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   | PadN Option=1 |Opt Data Len=1 |       0       | Option Type=Y |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |Opt Data Len=7 | 1-octet field |         2-octet field         |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |                         4-octet field                         |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   | PadN Option=1 |Opt Data Len=2 |       0       |       0       |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t*/\n\topt1 := &ipv6HeaderTLVOption{}\n\topt1.OptionType = 0x1e\n\topt1.OptionData = []byte{0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb}\n\topt1.OptionAlignment = [2]uint8{8, 2}\n\n\topt2 := &ipv6HeaderTLVOption{}\n\topt2.OptionType = 0x3e\n\topt2.OptionData = []byte{0x11, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44}\n\topt2.OptionAlignment = [2]uint8{4, 3}\n\n\tl := serializeIPv6HeaderTLVOptions(nil, []*ipv6HeaderTLVOption{opt1, opt2}, true)\n\tb := make([]byte, l)\n\tserializeIPv6HeaderTLVOptions(b, []*ipv6HeaderTLVOption{opt1, opt2}, true)\n\tgot := b\n\twant := []byte{0x1e, 0x0c, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x01, 0x01, 0x00, 0x3e, 0x07, 0x11, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44, 0x01, 0x02, 0x00, 0x00}\n\n\tif !bytes.Equal(got, want) {\n\t\tt.Errorf(\"IPv6HeaderTLVOption serialize (X,Y) failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t}\n\n\t/*\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |  Next Header  | Hdr Ext Len=3 | Pad1 Option=0 | Option Type=Y |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |Opt Data Len=7 | 1-octet field |         2-octet field         |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |                         4-octet field                         |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   | PadN Option=1 |Opt Data Len=4 |       0       |       0       |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |       0       |       0       | Option Type=X |Opt Data Len=12|\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |                         4-octet field                         |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |                                                               |\n\t   +                         8-octet field                         +\n\t   |                                                               |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t*/\n\n\tl = serializeIPv6HeaderTLVOptions(nil, []*ipv6HeaderTLVOption{opt2, opt1}, true)\n\tb = make([]byte, l)\n\tserializeIPv6HeaderTLVOptions(b, []*ipv6HeaderTLVOption{opt2, opt1}, true)\n\tgot = b\n\twant = []byte{0x00, 0x3e, 0x07, 0x11, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb}\n\n\tif !bytes.Equal(got, want) {\n\t\tt.Errorf(\"IPv6HeaderTLVOption serialize (Y,X) failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t}\n}\n\nvar testPacketIPv6HopByHop0 = []byte{\n\t0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestPacketIPv6HopByHop0Serialize(t *testing.T) {\n\tvar serialize = make([]gopacket.SerializableLayer, 0, 2)\n\tvar err error\n\n\tip6 := &IPv6{}\n\tip6.Version = 6\n\tip6.NextHeader = IPProtocolIPv6HopByHop\n\tip6.HopLimit = 64\n\tip6.SrcIP = net.ParseIP(\"2001:db8::1\")\n\tip6.DstIP = net.ParseIP(\"2001:db8::2\")\n\tserialize = append(serialize, ip6)\n\n\ttlv := &IPv6HopByHopOption{}\n\ttlv.OptionType = 0x01 //PadN\n\ttlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00}\n\thop := &IPv6HopByHop{}\n\thop.Options = append(hop.Options, tlv)\n\thop.NextHeader = IPProtocolNoNextHeader\n\tip6.HopByHop = hop\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\terr = gopacket.SerializeLayers(buf, opts, serialize...)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tgot := buf.Bytes()\n\twant := testPacketIPv6HopByHop0\n\tif !bytes.Equal(got, want) {\n\t\tt.Errorf(\"IPv6HopByHop serialize failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t}\n}\n\nfunc TestPacketIPv6HopByHop0Decode(t *testing.T) {\n\tip6 := &IPv6{\n\t\tBaseLayer: BaseLayer{\n\t\t\tContents: []byte{\n\t\t\t\t0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\n\t\t\t},\n\t\t\tPayload: []byte{},\n\t\t},\n\t\tVersion:      6,\n\t\tTrafficClass: 0,\n\t\tFlowLabel:    0,\n\t\tLength:       8,\n\t\tNextHeader:   IPProtocolIPv6HopByHop,\n\t\tHopLimit:     64,\n\t\tSrcIP:        net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},\n\t\tDstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},\n\t}\n\n\thop := &ip6.hbh\n\thop.ipv6ExtensionBase = ipv6ExtensionBase{\n\t\tBaseLayer: BaseLayer{\n\t\t\tContents: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},\n\t\t\tPayload:  []byte{},\n\t\t},\n\t\tNextHeader:   IPProtocolNoNextHeader,\n\t\tHeaderLength: uint8(0),\n\t\tActualLength: 8,\n\t}\n\topt := &IPv6HopByHopOption{\n\t\tOptionType:   uint8(0x01),\n\t\tOptionLength: uint8(0x04),\n\t\tActualLength: 6,\n\t\tOptionData:   []byte{0x00, 0x00, 0x00, 0x00},\n\t}\n\thop.Options = append(hop.Options, opt)\n\tip6.HopByHop = hop\n\n\tp := gopacket.NewPacket(testPacketIPv6HopByHop0, LinkTypeRaw, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop}, t)\n\tif got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {\n\t\twant := ip6\n\t\twant.HopByHop = got.HopByHop // avoid comparing pointers\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"IPv6 packet processing failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No IPv6 layer type found in packet\")\n\t}\n\tif got, ok := p.Layer(LayerTypeIPv6HopByHop).(*IPv6HopByHop); ok {\n\t\twant := hop\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"IPv6HopByHop packet processing failed:\\ngot\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No IPv6HopByHop layer type found in packet\")\n\t}\n}\n\n// testPacketIPv6Destination0 is the packet:\n//   12:40:14.429409595 IP6 2001:db8::1 > 2001:db8::2: DSTOPT no next header\n//   \t0x0000:  6000 0000 0008 3c40 2001 0db8 0000 0000  `.....<@........\n//   \t0x0010:  0000 0000 0000 0001 2001 0db8 0000 0000  ................\n//   \t0x0020:  0000 0000 0000 0002 3b00 0104 0000 0000  ........;.......\nvar testPacketIPv6Destination0 = []byte{\n\t0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3c, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestPacketIPv6Destination0Serialize(t *testing.T) {\n\tvar serialize = make([]gopacket.SerializableLayer, 0, 2)\n\tvar err error\n\n\tip6 := &IPv6{}\n\tip6.Version = 6\n\tip6.NextHeader = IPProtocolIPv6Destination\n\tip6.HopLimit = 64\n\tip6.SrcIP = net.ParseIP(\"2001:db8::1\")\n\tip6.DstIP = net.ParseIP(\"2001:db8::2\")\n\tserialize = append(serialize, ip6)\n\n\ttlv := &IPv6DestinationOption{}\n\ttlv.OptionType = 0x01 //PadN\n\ttlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00}\n\tdst := &IPv6Destination{}\n\tdst.Options = append(dst.Options, tlv)\n\tdst.NextHeader = IPProtocolNoNextHeader\n\tserialize = append(serialize, dst)\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\terr = gopacket.SerializeLayers(buf, opts, serialize...)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tgot := buf.Bytes()\n\twant := testPacketIPv6Destination0\n\tif !bytes.Equal(got, want) {\n\t\tt.Errorf(\"IPv6Destination serialize failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t}\n}\n\nfunc TestPacketIPv6Destination0Decode(t *testing.T) {\n\tip6 := &IPv6{\n\t\tBaseLayer: BaseLayer{\n\t\t\tContents: []byte{\n\t\t\t\t0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3c, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\n\t\t\t},\n\t\t\tPayload: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},\n\t\t},\n\t\tVersion:      6,\n\t\tTrafficClass: 0,\n\t\tFlowLabel:    0,\n\t\tLength:       8,\n\t\tNextHeader:   IPProtocolIPv6Destination,\n\t\tHopLimit:     64,\n\t\tSrcIP:        net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},\n\t\tDstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},\n\t}\n\n\tdst := &IPv6Destination{}\n\tdst.BaseLayer = BaseLayer{\n\t\tContents: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},\n\t\tPayload:  []byte{},\n\t}\n\tdst.NextHeader = IPProtocolNoNextHeader\n\tdst.HeaderLength = uint8(0)\n\tdst.ActualLength = 8\n\topt := &IPv6DestinationOption{\n\t\tOptionType:   uint8(0x01),\n\t\tOptionLength: uint8(0x04),\n\t\tActualLength: 6,\n\t\tOptionData:   []byte{0x00, 0x00, 0x00, 0x00},\n\t}\n\tdst.Options = append(dst.Options, opt)\n\n\tp := gopacket.NewPacket(testPacketIPv6Destination0, LinkTypeRaw, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6Destination}, t)\n\tif got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {\n\t\twant := ip6\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"IPv6 packet processing failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No IPv6 layer type found in packet\")\n\t}\n\tif got, ok := p.Layer(LayerTypeIPv6Destination).(*IPv6Destination); ok {\n\t\twant := dst\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"IPv6Destination packet processing failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No IPv6Destination layer type found in packet\")\n\t}\n}\n\nvar testPacketIPv6JumbogramHeader = []byte{\n\t0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08,\n}\n\nfunc TestIPv6JumbogramSerialize(t *testing.T) {\n\tvar serialize = make([]gopacket.SerializableLayer, 0, 2)\n\tvar err error\n\n\tip6 := &IPv6{}\n\tip6.Version = 6\n\tip6.NextHeader = IPProtocolNoNextHeader\n\tip6.HopLimit = 64\n\tip6.SrcIP = net.ParseIP(\"2001:db8::1\")\n\tip6.DstIP = net.ParseIP(\"2001:db8::2\")\n\tserialize = append(serialize, ip6)\n\n\tpayload := make([]byte, ipv6MaxPayloadLength+1)\n\tfor i := range payload {\n\t\tpayload[i] = 0xfe\n\t}\n\tserialize = append(serialize, gopacket.Payload(payload))\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\terr = gopacket.SerializeLayers(buf, opts, serialize...)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tgot := buf.Bytes()\n\tw := new(bytes.Buffer)\n\tw.Write(testPacketIPv6JumbogramHeader)\n\tw.Write(payload)\n\twant := w.Bytes()\n\n\tif !bytes.Equal(got, want) {\n\t\tt.Errorf(\"IPv6 Jumbogram serialize failed:\\ngot:\\n%v\\n\\nwant:\\n%v\\n\\n\",\n\t\t\tgopacket.LongBytesGoString(got), gopacket.LongBytesGoString(want))\n\t}\n}\n\nfunc TestIPv6JumbogramDecode(t *testing.T) {\n\tpayload := make([]byte, ipv6MaxPayloadLength+1)\n\tfor i := range payload {\n\t\tpayload[i] = 0xfe\n\t}\n\n\tip6 := &IPv6{\n\t\tBaseLayer: BaseLayer{\n\t\t\tContents: []byte{\n\t\t\t\t0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\n\t\t\t},\n\t\t},\n\t\tVersion:      6,\n\t\tTrafficClass: 0,\n\t\tFlowLabel:    0,\n\t\tLength:       0,\n\t\tNextHeader:   IPProtocolIPv6HopByHop,\n\t\tHopLimit:     64,\n\t\tSrcIP:        net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},\n\t\tDstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},\n\t}\n\tbuf := new(bytes.Buffer)\n\tbuf.Write([]byte{0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08})\n\tbuf.Write(payload)\n\tip6.Payload = buf.Bytes()\n\n\thop := &ip6.hbh\n\thop.Contents = []byte{0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08}\n\thop.Payload = payload\n\thop.NextHeader = IPProtocolNoNextHeader\n\thop.HeaderLength = uint8(0)\n\thop.ActualLength = 8\n\topt := &IPv6HopByHopOption{}\n\topt.OptionType = uint8(0xc2)\n\topt.OptionLength = uint8(0x04)\n\topt.ActualLength = 6\n\topt.OptionData = []byte{0x00, 0x01, 0x00, 0x08}\n\thop.Options = append(hop.Options, opt)\n\tip6.HopByHop = hop\n\n\tpkt := new(bytes.Buffer)\n\tpkt.Write(testPacketIPv6JumbogramHeader)\n\tpkt.Write(payload)\n\n\tp := gopacket.NewPacket(pkt.Bytes(), LinkTypeRaw, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop, gopacket.LayerTypePayload}, t)\n\n\tif got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {\n\t\twant := ip6\n\t\twant.HopByHop = got.HopByHop // Hack, avoid comparing pointers\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"IPv6 packet processing failed:\\ngot:\\n%v\\n\\nwant:\\n%v\\n\\n\",\n\t\t\t\tgopacket.LayerGoString(got), gopacket.LayerGoString(want))\n\t\t}\n\t} else {\n\t\tt.Error(\"No IPv6 layer type found in packet\")\n\t}\n\n\tif got, ok := p.Layer(LayerTypeIPv6HopByHop).(*IPv6HopByHop); ok {\n\t\twant := hop\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"IPv6HopByHop packet processing failed:\\ngot:\\n%v\\n\\nwant:\\n%v\\n\\n\",\n\t\t\t\tgopacket.LayerGoString(got), gopacket.LayerGoString(want))\n\t\t}\n\t} else {\n\t\tt.Error(\"No IPv6HopByHop layer type found in packet\")\n\t}\n\n\tif got, ok := p.Layer(gopacket.LayerTypePayload).(*gopacket.Payload); ok {\n\t\twant := (*gopacket.Payload)(&payload)\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"Payload packet processing failed:\\ngot:\\n%v\\n\\nwant:\\n%v\\n\\n\",\n\t\t\t\tgopacket.LayerGoString(got), gopacket.LayerGoString(want))\n\t\t}\n\t} else {\n\t\tt.Error(\"No Payload layer type found in packet\")\n\t}\n}\n"
  },
  {
    "path": "layers/ipsec.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"github.com/google/gopacket\"\n)\n\n// IPSecAH is the authentication header for IPv4/6 defined in\n// http://tools.ietf.org/html/rfc2402\ntype IPSecAH struct {\n\t// While the auth header can be used for both IPv4 and v6, its format is that of\n\t// an IPv6 extension (NextHeader, PayloadLength, etc...), so we use ipv6ExtensionBase\n\t// to build it.\n\tipv6ExtensionBase\n\tReserved           uint16\n\tSPI, Seq           uint32\n\tAuthenticationData []byte\n}\n\n// LayerType returns LayerTypeIPSecAH.\nfunc (i *IPSecAH) LayerType() gopacket.LayerType { return LayerTypeIPSecAH }\n\nfunc decodeIPSecAH(data []byte, p gopacket.PacketBuilder) error {\n\tif len(data) < 12 {\n\t\tp.SetTruncated()\n\t\treturn errors.New(\"IPSec AH packet less than 12 bytes\")\n\t}\n\ti := &IPSecAH{\n\t\tipv6ExtensionBase: ipv6ExtensionBase{\n\t\t\tNextHeader:   IPProtocol(data[0]),\n\t\t\tHeaderLength: data[1],\n\t\t},\n\t\tReserved: binary.BigEndian.Uint16(data[2:4]),\n\t\tSPI:      binary.BigEndian.Uint32(data[4:8]),\n\t\tSeq:      binary.BigEndian.Uint32(data[8:12]),\n\t}\n\ti.ActualLength = (int(i.HeaderLength) + 2) * 4\n\tif len(data) < i.ActualLength {\n\t\tp.SetTruncated()\n\t\treturn errors.New(\"Truncated AH packet < ActualLength\")\n\t}\n\ti.AuthenticationData = data[12:i.ActualLength]\n\ti.Contents = data[:i.ActualLength]\n\ti.Payload = data[i.ActualLength:]\n\tp.AddLayer(i)\n\treturn p.NextDecoder(i.NextHeader)\n}\n\n// IPSecESP is the encapsulating security payload defined in\n// http://tools.ietf.org/html/rfc2406\ntype IPSecESP struct {\n\tBaseLayer\n\tSPI, Seq uint32\n\t// Encrypted contains the encrypted set of bytes sent in an ESP\n\tEncrypted []byte\n}\n\n// LayerType returns LayerTypeIPSecESP.\nfunc (i *IPSecESP) LayerType() gopacket.LayerType { return LayerTypeIPSecESP }\n\nfunc decodeIPSecESP(data []byte, p gopacket.PacketBuilder) error {\n\ti := &IPSecESP{\n\t\tBaseLayer: BaseLayer{data, nil},\n\t\tSPI:       binary.BigEndian.Uint32(data[:4]),\n\t\tSeq:       binary.BigEndian.Uint32(data[4:8]),\n\t\tEncrypted: data[8:],\n\t}\n\tp.AddLayer(i)\n\treturn nil\n}\n"
  },
  {
    "path": "layers/ipsec_test.go",
    "content": "// Copyright 2012, Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n\t\"reflect\"\n\t\"testing\"\n)\n\n// testPacketIPSecAHTransport is the packet:\n//   20:45:10.325850 IP 192.168.1.1 > 192.168.1.2: AH(spi=0x00000101,seq=0x1): ICMP echo request, id 1560, seq 1, length 64\n//      0x0000:  7ec0 ffc6 48f1 1a0e 3c4e 3b3a 0800 4500  ~...H...<N;:..E.\n//      0x0010:  006c 650a 4000 4033 5201 c0a8 0101 c0a8  .le.@.@3R.......\n//      0x0020:  0102 0104 0000 0000 0101 0000 0001 2533  ..............%3\n//      0x0030:  01b1 a20b b6f1 bdbf 9d9e 0800 fbe5 0618  ................\n//      0x0040:  0001 c6e1 a354 0000 0000 c8f7 0400 0000  .....T..........\n//      0x0050:  0000 1011 1213 1415 1617 1819 1a1b 1c1d  ................\n//      0x0060:  1e1f 2021 2223 2425 2627 2829 2a2b 2c2d  ...!\"#$%&'()*+,-\n//      0x0070:  2e2f 3031 3233 3435 3637                 ./01234567\nvar testPacketIPSecAHTransport = []byte{\n\t0x7e, 0xc0, 0xff, 0xc6, 0x48, 0xf1, 0x1a, 0x0e, 0x3c, 0x4e, 0x3b, 0x3a, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x6c, 0x65, 0x0a, 0x40, 0x00, 0x40, 0x33, 0x52, 0x01, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8,\n\t0x01, 0x02, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x25, 0x33,\n\t0x01, 0xb1, 0xa2, 0x0b, 0xb6, 0xf1, 0xbd, 0xbf, 0x9d, 0x9e, 0x08, 0x00, 0xfb, 0xe5, 0x06, 0x18,\n\t0x00, 0x01, 0xc6, 0xe1, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xf7, 0x04, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,\n\t0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,\n\t0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,\n}\n\nfunc TestPacketIPSecAHTransport(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketIPSecAHTransport, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecAH, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\tif got, ok := p.Layer(LayerTypeIPSecAH).(*IPSecAH); ok {\n\t\twant := &IPSecAH{\n\t\t\tReserved:           0x0,\n\t\t\tSPI:                0x101,\n\t\t\tSeq:                1,\n\t\t\tAuthenticationData: []byte{0x25, 0x33, 0x01, 0xb1, 0xa2, 0x0b, 0xb6, 0xf1, 0xbd, 0xbf, 0x9d, 0x9e},\n\t\t}\n\t\twant.BaseLayer = BaseLayer{testPacketIPSecAHTransport[34:58], testPacketIPSecAHTransport[58:]}\n\t\twant.NextHeader = IPProtocolICMPv4\n\t\twant.HeaderLength = 0x4\n\t\twant.ActualLength = 0x18\n\t\tif !reflect.DeepEqual(want, got) {\n\t\t\tt.Errorf(\"IPSecAH layer mismatch, \\nwant %#v\\ngot  %#v\\n\", want, got)\n\t\t}\n\t}\n}\n\nfunc BenchmarkDecodePacketIPSecAHTransport(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketIPSecAHTransport, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testPacketIPSecAHTunnel is the packet:\n//   14:45:43.252917 IP 192.168.1.1 > 192.168.1.2: AH(spi=0x00000101,seq=0x1): IP 172.16.1.1 > 172.16.2.1: ICMP echo request, id 31322, seq 1, length 64 (ipip-proto-4)\n//      0x0000:  7220 4d91 63c9 566c ed2d 73cd 0800 4500  r.M.c.Vl.-s...E.\n//      0x0010:  0080 0000 4000 4033 b6f7 c0a8 0101 c0a8  ....@.@3........\n//      0x0020:  0102 0404 0000 0000 0101 0000 0001 cca4  ................\n//      0x0030:  01da 9eb4 fb75 10fe 5a59 4500 0054 a96f  .....u..ZYE..T.o\n//      0x0040:  4000 4001 3617 ac10 0101 ac10 0201 0800  @.@.6...........\n//      0x0050:  d75f 7a5a 0001 0741 3355 0000 0000 a9db  ._zZ...A3U......\n//      0x0060:  0300 0000 0000 1011 1213 1415 1617 1819  ................\n//      0x0070:  1a1b 1c1d 1e1f 2021 2223 2425 2627 2829  .......!\"#$%&'()\n//      0x0080:  2a2b 2c2d 2e2f 3031 3233 3435 3637       *+,-./01234567\nvar testPacketIPSecAHTunnel = []byte{\n\t0x72, 0x20, 0x4d, 0x91, 0x63, 0xc9, 0x56, 0x6c, 0xed, 0x2d, 0x73, 0xcd, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x40, 0x33, 0xb6, 0xf7, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8,\n\t0x01, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0xcc, 0xa4,\n\t0x01, 0xda, 0x9e, 0xb4, 0xfb, 0x75, 0x10, 0xfe, 0x5a, 0x59, 0x45, 0x00, 0x00, 0x54, 0xa9, 0x6f,\n\t0x40, 0x00, 0x40, 0x01, 0x36, 0x17, 0xac, 0x10, 0x01, 0x01, 0xac, 0x10, 0x02, 0x01, 0x08, 0x00,\n\t0xd7, 0x5f, 0x7a, 0x5a, 0x00, 0x01, 0x07, 0x41, 0x33, 0x55, 0x00, 0x00, 0x00, 0x00, 0xa9, 0xdb,\n\t0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n\t0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,\n\t0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,\n}\n\nfunc TestPacketIPSecAHTunnel(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketIPSecAHTunnel, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecAH, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\tif got, ok := p.Layer(LayerTypeIPSecAH).(*IPSecAH); ok {\n\t\twant := &IPSecAH{\n\t\t\tReserved:           0x0,\n\t\t\tSPI:                0x101,\n\t\t\tSeq:                1,\n\t\t\tAuthenticationData: []byte{0xcc, 0xa4, 0x01, 0xda, 0x9e, 0xb4, 0xfb, 0x75, 0x10, 0xfe, 0x5a, 0x59},\n\t\t}\n\t\twant.BaseLayer = BaseLayer{testPacketIPSecAHTunnel[34:58], testPacketIPSecAHTunnel[58:]}\n\t\twant.NextHeader = IPProtocolIPv4\n\t\twant.HeaderLength = 0x4\n\t\twant.ActualLength = 0x18\n\t\tif !reflect.DeepEqual(want, got) {\n\t\t\tt.Errorf(\"IPSecAH layer mismatch, \\nwant %#v\\ngot  %#v\\n\", want, got)\n\t\t}\n\t}\n}\n\nfunc BenchmarkDecodePacketIPSecAHTunnel(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketIPSecAHTunnel, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testPacketIPSecESP is the packet:\n//   04:30:37.629376 IP 190.0.0.1 > 190.0.0.2: ESP(spi=0x0000006e,seq=0x13), length 116\n//      0x0000:  0000 0000 0012 0011 434a d70a 0800 4500  ........CJ....E.\n//      0x0010:  0088 0000 4000 4032 be40 be00 0001 be00  ....@.@2.@......\n//      0x0020:  0002 0000 006e 0000 0013 82f4 1077 0418  .....n.......w..\n//      0x0030:  e8ce dc45 1bac 22bb daaf 2ad2 c2e8 315b  ...E..\"...*...1[\n//      0x0040:  ce9a 39da 2aae cf43 3716 70ab 7e7c 4676  ..9.*..C7.p.~|Fv\n//      0x0050:  c3fc d109 c990 274d f81c 6534 9a40 a0ef  ......'M..e4.@..\n//      0x0060:  46b1 7da5 05af dda8 d0ba 6e23 d1ee 1f10  F.}.......n#....\n//      0x0070:  730c 7371 03b1 445c 2f70 852f 8475 12fb  s.sq..D\\/p./.u..\n//      0x0080:  b057 a19b a617 bae7 09ca 8836 942f 3334  .W.........6./34\n//      0x0090:  312b 96d2 a4e3                           1+....\nvar testPacketIPSecESP = []byte{\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x11, 0x43, 0x4a, 0xd7, 0x0a, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x88, 0x00, 0x00, 0x40, 0x00, 0x40, 0x32, 0xbe, 0x40, 0xbe, 0x00, 0x00, 0x01, 0xbe, 0x00,\n\t0x00, 0x02, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x13, 0x82, 0xf4, 0x10, 0x77, 0x04, 0x18,\n\t0xe8, 0xce, 0xdc, 0x45, 0x1b, 0xac, 0x22, 0xbb, 0xda, 0xaf, 0x2a, 0xd2, 0xc2, 0xe8, 0x31, 0x5b,\n\t0xce, 0x9a, 0x39, 0xda, 0x2a, 0xae, 0xcf, 0x43, 0x37, 0x16, 0x70, 0xab, 0x7e, 0x7c, 0x46, 0x76,\n\t0xc3, 0xfc, 0xd1, 0x09, 0xc9, 0x90, 0x27, 0x4d, 0xf8, 0x1c, 0x65, 0x34, 0x9a, 0x40, 0xa0, 0xef,\n\t0x46, 0xb1, 0x7d, 0xa5, 0x05, 0xaf, 0xdd, 0xa8, 0xd0, 0xba, 0x6e, 0x23, 0xd1, 0xee, 0x1f, 0x10,\n\t0x73, 0x0c, 0x73, 0x71, 0x03, 0xb1, 0x44, 0x5c, 0x2f, 0x70, 0x85, 0x2f, 0x84, 0x75, 0x12, 0xfb,\n\t0xb0, 0x57, 0xa1, 0x9b, 0xa6, 0x17, 0xba, 0xe7, 0x09, 0xca, 0x88, 0x36, 0x94, 0x2f, 0x33, 0x34,\n\t0x31, 0x2b, 0x96, 0xd2, 0xa4, 0xe3,\n}\n\nfunc TestPacketIPSecESP(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketIPSecESP, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecESP}, t)\n}\n\nfunc BenchmarkDecodePacketIPSecESP(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketIPSecESP, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n"
  },
  {
    "path": "layers/layertypes.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n)\n\nvar (\n\tLayerTypeARP                          = gopacket.RegisterLayerType(10, gopacket.LayerTypeMetadata{Name: \"ARP\", Decoder: gopacket.DecodeFunc(decodeARP)})\n\tLayerTypeCiscoDiscovery               = gopacket.RegisterLayerType(11, gopacket.LayerTypeMetadata{Name: \"CiscoDiscovery\", Decoder: gopacket.DecodeFunc(decodeCiscoDiscovery)})\n\tLayerTypeEthernetCTP                  = gopacket.RegisterLayerType(12, gopacket.LayerTypeMetadata{Name: \"EthernetCTP\", Decoder: gopacket.DecodeFunc(decodeEthernetCTP)})\n\tLayerTypeEthernetCTPForwardData       = gopacket.RegisterLayerType(13, gopacket.LayerTypeMetadata{Name: \"EthernetCTPForwardData\", Decoder: nil})\n\tLayerTypeEthernetCTPReply             = gopacket.RegisterLayerType(14, gopacket.LayerTypeMetadata{Name: \"EthernetCTPReply\", Decoder: nil})\n\tLayerTypeDot1Q                        = gopacket.RegisterLayerType(15, gopacket.LayerTypeMetadata{Name: \"Dot1Q\", Decoder: gopacket.DecodeFunc(decodeDot1Q)})\n\tLayerTypeEtherIP                      = gopacket.RegisterLayerType(16, gopacket.LayerTypeMetadata{Name: \"EtherIP\", Decoder: gopacket.DecodeFunc(decodeEtherIP)})\n\tLayerTypeEthernet                     = gopacket.RegisterLayerType(17, gopacket.LayerTypeMetadata{Name: \"Ethernet\", Decoder: gopacket.DecodeFunc(decodeEthernet)})\n\tLayerTypeGRE                          = gopacket.RegisterLayerType(18, gopacket.LayerTypeMetadata{Name: \"GRE\", Decoder: gopacket.DecodeFunc(decodeGRE)})\n\tLayerTypeICMPv4                       = gopacket.RegisterLayerType(19, gopacket.LayerTypeMetadata{Name: \"ICMPv4\", Decoder: gopacket.DecodeFunc(decodeICMPv4)})\n\tLayerTypeIPv4                         = gopacket.RegisterLayerType(20, gopacket.LayerTypeMetadata{Name: \"IPv4\", Decoder: gopacket.DecodeFunc(decodeIPv4)})\n\tLayerTypeIPv6                         = gopacket.RegisterLayerType(21, gopacket.LayerTypeMetadata{Name: \"IPv6\", Decoder: gopacket.DecodeFunc(decodeIPv6)})\n\tLayerTypeLLC                          = gopacket.RegisterLayerType(22, gopacket.LayerTypeMetadata{Name: \"LLC\", Decoder: gopacket.DecodeFunc(decodeLLC)})\n\tLayerTypeSNAP                         = gopacket.RegisterLayerType(23, gopacket.LayerTypeMetadata{Name: \"SNAP\", Decoder: gopacket.DecodeFunc(decodeSNAP)})\n\tLayerTypeMPLS                         = gopacket.RegisterLayerType(24, gopacket.LayerTypeMetadata{Name: \"MPLS\", Decoder: gopacket.DecodeFunc(decodeMPLS)})\n\tLayerTypePPP                          = gopacket.RegisterLayerType(25, gopacket.LayerTypeMetadata{Name: \"PPP\", Decoder: gopacket.DecodeFunc(decodePPP)})\n\tLayerTypePPPoE                        = gopacket.RegisterLayerType(26, gopacket.LayerTypeMetadata{Name: \"PPPoE\", Decoder: gopacket.DecodeFunc(decodePPPoE)})\n\tLayerTypeRUDP                         = gopacket.RegisterLayerType(27, gopacket.LayerTypeMetadata{Name: \"RUDP\", Decoder: gopacket.DecodeFunc(decodeRUDP)})\n\tLayerTypeSCTP                         = gopacket.RegisterLayerType(28, gopacket.LayerTypeMetadata{Name: \"SCTP\", Decoder: gopacket.DecodeFunc(decodeSCTP)})\n\tLayerTypeSCTPUnknownChunkType         = gopacket.RegisterLayerType(29, gopacket.LayerTypeMetadata{Name: \"SCTPUnknownChunkType\", Decoder: nil})\n\tLayerTypeSCTPData                     = gopacket.RegisterLayerType(30, gopacket.LayerTypeMetadata{Name: \"SCTPData\", Decoder: nil})\n\tLayerTypeSCTPInit                     = gopacket.RegisterLayerType(31, gopacket.LayerTypeMetadata{Name: \"SCTPInit\", Decoder: nil})\n\tLayerTypeSCTPSack                     = gopacket.RegisterLayerType(32, gopacket.LayerTypeMetadata{Name: \"SCTPSack\", Decoder: nil})\n\tLayerTypeSCTPHeartbeat                = gopacket.RegisterLayerType(33, gopacket.LayerTypeMetadata{Name: \"SCTPHeartbeat\", Decoder: nil})\n\tLayerTypeSCTPError                    = gopacket.RegisterLayerType(34, gopacket.LayerTypeMetadata{Name: \"SCTPError\", Decoder: nil})\n\tLayerTypeSCTPShutdown                 = gopacket.RegisterLayerType(35, gopacket.LayerTypeMetadata{Name: \"SCTPShutdown\", Decoder: nil})\n\tLayerTypeSCTPShutdownAck              = gopacket.RegisterLayerType(36, gopacket.LayerTypeMetadata{Name: \"SCTPShutdownAck\", Decoder: nil})\n\tLayerTypeSCTPCookieEcho               = gopacket.RegisterLayerType(37, gopacket.LayerTypeMetadata{Name: \"SCTPCookieEcho\", Decoder: nil})\n\tLayerTypeSCTPEmptyLayer               = gopacket.RegisterLayerType(38, gopacket.LayerTypeMetadata{Name: \"SCTPEmptyLayer\", Decoder: nil})\n\tLayerTypeSCTPInitAck                  = gopacket.RegisterLayerType(39, gopacket.LayerTypeMetadata{Name: \"SCTPInitAck\", Decoder: nil})\n\tLayerTypeSCTPHeartbeatAck             = gopacket.RegisterLayerType(40, gopacket.LayerTypeMetadata{Name: \"SCTPHeartbeatAck\", Decoder: nil})\n\tLayerTypeSCTPAbort                    = gopacket.RegisterLayerType(41, gopacket.LayerTypeMetadata{Name: \"SCTPAbort\", Decoder: nil})\n\tLayerTypeSCTPShutdownComplete         = gopacket.RegisterLayerType(42, gopacket.LayerTypeMetadata{Name: \"SCTPShutdownComplete\", Decoder: nil})\n\tLayerTypeSCTPCookieAck                = gopacket.RegisterLayerType(43, gopacket.LayerTypeMetadata{Name: \"SCTPCookieAck\", Decoder: nil})\n\tLayerTypeTCP                          = gopacket.RegisterLayerType(44, gopacket.LayerTypeMetadata{Name: \"TCP\", Decoder: gopacket.DecodeFunc(decodeTCP)})\n\tLayerTypeUDP                          = gopacket.RegisterLayerType(45, gopacket.LayerTypeMetadata{Name: \"UDP\", Decoder: gopacket.DecodeFunc(decodeUDP)})\n\tLayerTypeIPv6HopByHop                 = gopacket.RegisterLayerType(46, gopacket.LayerTypeMetadata{Name: \"IPv6HopByHop\", Decoder: gopacket.DecodeFunc(decodeIPv6HopByHop)})\n\tLayerTypeIPv6Routing                  = gopacket.RegisterLayerType(47, gopacket.LayerTypeMetadata{Name: \"IPv6Routing\", Decoder: gopacket.DecodeFunc(decodeIPv6Routing)})\n\tLayerTypeIPv6Fragment                 = gopacket.RegisterLayerType(48, gopacket.LayerTypeMetadata{Name: \"IPv6Fragment\", Decoder: gopacket.DecodeFunc(decodeIPv6Fragment)})\n\tLayerTypeIPv6Destination              = gopacket.RegisterLayerType(49, gopacket.LayerTypeMetadata{Name: \"IPv6Destination\", Decoder: gopacket.DecodeFunc(decodeIPv6Destination)})\n\tLayerTypeIPSecAH                      = gopacket.RegisterLayerType(50, gopacket.LayerTypeMetadata{Name: \"IPSecAH\", Decoder: gopacket.DecodeFunc(decodeIPSecAH)})\n\tLayerTypeIPSecESP                     = gopacket.RegisterLayerType(51, gopacket.LayerTypeMetadata{Name: \"IPSecESP\", Decoder: gopacket.DecodeFunc(decodeIPSecESP)})\n\tLayerTypeUDPLite                      = gopacket.RegisterLayerType(52, gopacket.LayerTypeMetadata{Name: \"UDPLite\", Decoder: gopacket.DecodeFunc(decodeUDPLite)})\n\tLayerTypeFDDI                         = gopacket.RegisterLayerType(53, gopacket.LayerTypeMetadata{Name: \"FDDI\", Decoder: gopacket.DecodeFunc(decodeFDDI)})\n\tLayerTypeLoopback                     = gopacket.RegisterLayerType(54, gopacket.LayerTypeMetadata{Name: \"Loopback\", Decoder: gopacket.DecodeFunc(decodeLoopback)})\n\tLayerTypeEAP                          = gopacket.RegisterLayerType(55, gopacket.LayerTypeMetadata{Name: \"EAP\", Decoder: gopacket.DecodeFunc(decodeEAP)})\n\tLayerTypeEAPOL                        = gopacket.RegisterLayerType(56, gopacket.LayerTypeMetadata{Name: \"EAPOL\", Decoder: gopacket.DecodeFunc(decodeEAPOL)})\n\tLayerTypeICMPv6                       = gopacket.RegisterLayerType(57, gopacket.LayerTypeMetadata{Name: \"ICMPv6\", Decoder: gopacket.DecodeFunc(decodeICMPv6)})\n\tLayerTypeLinkLayerDiscovery           = gopacket.RegisterLayerType(58, gopacket.LayerTypeMetadata{Name: \"LinkLayerDiscovery\", Decoder: gopacket.DecodeFunc(decodeLinkLayerDiscovery)})\n\tLayerTypeCiscoDiscoveryInfo           = gopacket.RegisterLayerType(59, gopacket.LayerTypeMetadata{Name: \"CiscoDiscoveryInfo\", Decoder: gopacket.DecodeFunc(decodeCiscoDiscoveryInfo)})\n\tLayerTypeLinkLayerDiscoveryInfo       = gopacket.RegisterLayerType(60, gopacket.LayerTypeMetadata{Name: \"LinkLayerDiscoveryInfo\", Decoder: nil})\n\tLayerTypeNortelDiscovery              = gopacket.RegisterLayerType(61, gopacket.LayerTypeMetadata{Name: \"NortelDiscovery\", Decoder: gopacket.DecodeFunc(decodeNortelDiscovery)})\n\tLayerTypeIGMP                         = gopacket.RegisterLayerType(62, gopacket.LayerTypeMetadata{Name: \"IGMP\", Decoder: gopacket.DecodeFunc(decodeIGMP)})\n\tLayerTypePFLog                        = gopacket.RegisterLayerType(63, gopacket.LayerTypeMetadata{Name: \"PFLog\", Decoder: gopacket.DecodeFunc(decodePFLog)})\n\tLayerTypeRadioTap                     = gopacket.RegisterLayerType(64, gopacket.LayerTypeMetadata{Name: \"RadioTap\", Decoder: gopacket.DecodeFunc(decodeRadioTap)})\n\tLayerTypeDot11                        = gopacket.RegisterLayerType(65, gopacket.LayerTypeMetadata{Name: \"Dot11\", Decoder: gopacket.DecodeFunc(decodeDot11)})\n\tLayerTypeDot11Ctrl                    = gopacket.RegisterLayerType(66, gopacket.LayerTypeMetadata{Name: \"Dot11Ctrl\", Decoder: gopacket.DecodeFunc(decodeDot11Ctrl)})\n\tLayerTypeDot11Data                    = gopacket.RegisterLayerType(67, gopacket.LayerTypeMetadata{Name: \"Dot11Data\", Decoder: gopacket.DecodeFunc(decodeDot11Data)})\n\tLayerTypeDot11DataCFAck               = gopacket.RegisterLayerType(68, gopacket.LayerTypeMetadata{Name: \"Dot11DataCFAck\", Decoder: gopacket.DecodeFunc(decodeDot11DataCFAck)})\n\tLayerTypeDot11DataCFPoll              = gopacket.RegisterLayerType(69, gopacket.LayerTypeMetadata{Name: \"Dot11DataCFPoll\", Decoder: gopacket.DecodeFunc(decodeDot11DataCFPoll)})\n\tLayerTypeDot11DataCFAckPoll           = gopacket.RegisterLayerType(70, gopacket.LayerTypeMetadata{Name: \"Dot11DataCFAckPoll\", Decoder: gopacket.DecodeFunc(decodeDot11DataCFAckPoll)})\n\tLayerTypeDot11DataNull                = gopacket.RegisterLayerType(71, gopacket.LayerTypeMetadata{Name: \"Dot11DataNull\", Decoder: gopacket.DecodeFunc(decodeDot11DataNull)})\n\tLayerTypeDot11DataCFAckNoData         = gopacket.RegisterLayerType(72, gopacket.LayerTypeMetadata{Name: \"Dot11DataCFAck\", Decoder: gopacket.DecodeFunc(decodeDot11DataCFAck)})\n\tLayerTypeDot11DataCFPollNoData        = gopacket.RegisterLayerType(73, gopacket.LayerTypeMetadata{Name: \"Dot11DataCFPoll\", Decoder: gopacket.DecodeFunc(decodeDot11DataCFPoll)})\n\tLayerTypeDot11DataCFAckPollNoData     = gopacket.RegisterLayerType(74, gopacket.LayerTypeMetadata{Name: \"Dot11DataCFAckPoll\", Decoder: gopacket.DecodeFunc(decodeDot11DataCFAckPoll)})\n\tLayerTypeDot11DataQOSData             = gopacket.RegisterLayerType(75, gopacket.LayerTypeMetadata{Name: \"Dot11DataQOSData\", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSData)})\n\tLayerTypeDot11DataQOSDataCFAck        = gopacket.RegisterLayerType(76, gopacket.LayerTypeMetadata{Name: \"Dot11DataQOSDataCFAck\", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSDataCFAck)})\n\tLayerTypeDot11DataQOSDataCFPoll       = gopacket.RegisterLayerType(77, gopacket.LayerTypeMetadata{Name: \"Dot11DataQOSDataCFPoll\", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSDataCFPoll)})\n\tLayerTypeDot11DataQOSDataCFAckPoll    = gopacket.RegisterLayerType(78, gopacket.LayerTypeMetadata{Name: \"Dot11DataQOSDataCFAckPoll\", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSDataCFAckPoll)})\n\tLayerTypeDot11DataQOSNull             = gopacket.RegisterLayerType(79, gopacket.LayerTypeMetadata{Name: \"Dot11DataQOSNull\", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSNull)})\n\tLayerTypeDot11DataQOSCFPollNoData     = gopacket.RegisterLayerType(80, gopacket.LayerTypeMetadata{Name: \"Dot11DataQOSCFPoll\", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSCFPollNoData)})\n\tLayerTypeDot11DataQOSCFAckPollNoData  = gopacket.RegisterLayerType(81, gopacket.LayerTypeMetadata{Name: \"Dot11DataQOSCFAckPoll\", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSCFAckPollNoData)})\n\tLayerTypeDot11InformationElement      = gopacket.RegisterLayerType(82, gopacket.LayerTypeMetadata{Name: \"Dot11InformationElement\", Decoder: gopacket.DecodeFunc(decodeDot11InformationElement)})\n\tLayerTypeDot11CtrlCTS                 = gopacket.RegisterLayerType(83, gopacket.LayerTypeMetadata{Name: \"Dot11CtrlCTS\", Decoder: gopacket.DecodeFunc(decodeDot11CtrlCTS)})\n\tLayerTypeDot11CtrlRTS                 = gopacket.RegisterLayerType(84, gopacket.LayerTypeMetadata{Name: \"Dot11CtrlRTS\", Decoder: gopacket.DecodeFunc(decodeDot11CtrlRTS)})\n\tLayerTypeDot11CtrlBlockAckReq         = gopacket.RegisterLayerType(85, gopacket.LayerTypeMetadata{Name: \"Dot11CtrlBlockAckReq\", Decoder: gopacket.DecodeFunc(decodeDot11CtrlBlockAckReq)})\n\tLayerTypeDot11CtrlBlockAck            = gopacket.RegisterLayerType(86, gopacket.LayerTypeMetadata{Name: \"Dot11CtrlBlockAck\", Decoder: gopacket.DecodeFunc(decodeDot11CtrlBlockAck)})\n\tLayerTypeDot11CtrlPowersavePoll       = gopacket.RegisterLayerType(87, gopacket.LayerTypeMetadata{Name: \"Dot11CtrlPowersavePoll\", Decoder: gopacket.DecodeFunc(decodeDot11CtrlPowersavePoll)})\n\tLayerTypeDot11CtrlAck                 = gopacket.RegisterLayerType(88, gopacket.LayerTypeMetadata{Name: \"Dot11CtrlAck\", Decoder: gopacket.DecodeFunc(decodeDot11CtrlAck)})\n\tLayerTypeDot11CtrlCFEnd               = gopacket.RegisterLayerType(89, gopacket.LayerTypeMetadata{Name: \"Dot11CtrlCFEnd\", Decoder: gopacket.DecodeFunc(decodeDot11CtrlCFEnd)})\n\tLayerTypeDot11CtrlCFEndAck            = gopacket.RegisterLayerType(90, gopacket.LayerTypeMetadata{Name: \"Dot11CtrlCFEndAck\", Decoder: gopacket.DecodeFunc(decodeDot11CtrlCFEndAck)})\n\tLayerTypeDot11MgmtAssociationReq      = gopacket.RegisterLayerType(91, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtAssociationReq\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtAssociationReq)})\n\tLayerTypeDot11MgmtAssociationResp     = gopacket.RegisterLayerType(92, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtAssociationResp\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtAssociationResp)})\n\tLayerTypeDot11MgmtReassociationReq    = gopacket.RegisterLayerType(93, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtReassociationReq\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtReassociationReq)})\n\tLayerTypeDot11MgmtReassociationResp   = gopacket.RegisterLayerType(94, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtReassociationResp\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtReassociationResp)})\n\tLayerTypeDot11MgmtProbeReq            = gopacket.RegisterLayerType(95, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtProbeReq\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtProbeReq)})\n\tLayerTypeDot11MgmtProbeResp           = gopacket.RegisterLayerType(96, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtProbeResp\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtProbeResp)})\n\tLayerTypeDot11MgmtMeasurementPilot    = gopacket.RegisterLayerType(97, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtMeasurementPilot\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtMeasurementPilot)})\n\tLayerTypeDot11MgmtBeacon              = gopacket.RegisterLayerType(98, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtBeacon\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtBeacon)})\n\tLayerTypeDot11MgmtATIM                = gopacket.RegisterLayerType(99, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtATIM\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtATIM)})\n\tLayerTypeDot11MgmtDisassociation      = gopacket.RegisterLayerType(100, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtDisassociation\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtDisassociation)})\n\tLayerTypeDot11MgmtAuthentication      = gopacket.RegisterLayerType(101, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtAuthentication\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtAuthentication)})\n\tLayerTypeDot11MgmtDeauthentication    = gopacket.RegisterLayerType(102, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtDeauthentication\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtDeauthentication)})\n\tLayerTypeDot11MgmtAction              = gopacket.RegisterLayerType(103, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtAction\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtAction)})\n\tLayerTypeDot11MgmtActionNoAck         = gopacket.RegisterLayerType(104, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtActionNoAck\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtActionNoAck)})\n\tLayerTypeDot11MgmtArubaWLAN           = gopacket.RegisterLayerType(105, gopacket.LayerTypeMetadata{Name: \"Dot11MgmtArubaWLAN\", Decoder: gopacket.DecodeFunc(decodeDot11MgmtArubaWLAN)})\n\tLayerTypeDot11WEP                     = gopacket.RegisterLayerType(106, gopacket.LayerTypeMetadata{Name: \"Dot11WEP\", Decoder: gopacket.DecodeFunc(decodeDot11WEP)})\n\tLayerTypeDNS                          = gopacket.RegisterLayerType(107, gopacket.LayerTypeMetadata{Name: \"DNS\", Decoder: gopacket.DecodeFunc(decodeDNS)})\n\tLayerTypeUSB                          = gopacket.RegisterLayerType(108, gopacket.LayerTypeMetadata{Name: \"USB\", Decoder: gopacket.DecodeFunc(decodeUSB)})\n\tLayerTypeUSBRequestBlockSetup         = gopacket.RegisterLayerType(109, gopacket.LayerTypeMetadata{Name: \"USBRequestBlockSetup\", Decoder: gopacket.DecodeFunc(decodeUSBRequestBlockSetup)})\n\tLayerTypeUSBControl                   = gopacket.RegisterLayerType(110, gopacket.LayerTypeMetadata{Name: \"USBControl\", Decoder: gopacket.DecodeFunc(decodeUSBControl)})\n\tLayerTypeUSBInterrupt                 = gopacket.RegisterLayerType(111, gopacket.LayerTypeMetadata{Name: \"USBInterrupt\", Decoder: gopacket.DecodeFunc(decodeUSBInterrupt)})\n\tLayerTypeUSBBulk                      = gopacket.RegisterLayerType(112, gopacket.LayerTypeMetadata{Name: \"USBBulk\", Decoder: gopacket.DecodeFunc(decodeUSBBulk)})\n\tLayerTypeLinuxSLL                     = gopacket.RegisterLayerType(113, gopacket.LayerTypeMetadata{Name: \"Linux SLL\", Decoder: gopacket.DecodeFunc(decodeLinuxSLL)})\n\tLayerTypeSFlow                        = gopacket.RegisterLayerType(114, gopacket.LayerTypeMetadata{Name: \"SFlow\", Decoder: gopacket.DecodeFunc(decodeSFlow)})\n\tLayerTypePrismHeader                  = gopacket.RegisterLayerType(115, gopacket.LayerTypeMetadata{Name: \"Prism monitor mode header\", Decoder: gopacket.DecodeFunc(decodePrismHeader)})\n\tLayerTypeVXLAN                        = gopacket.RegisterLayerType(116, gopacket.LayerTypeMetadata{Name: \"VXLAN\", Decoder: gopacket.DecodeFunc(decodeVXLAN)})\n\tLayerTypeNTP                          = gopacket.RegisterLayerType(117, gopacket.LayerTypeMetadata{Name: \"NTP\", Decoder: gopacket.DecodeFunc(decodeNTP)})\n\tLayerTypeDHCPv4                       = gopacket.RegisterLayerType(118, gopacket.LayerTypeMetadata{Name: \"DHCPv4\", Decoder: gopacket.DecodeFunc(decodeDHCPv4)})\n\tLayerTypeVRRP                         = gopacket.RegisterLayerType(119, gopacket.LayerTypeMetadata{Name: \"VRRP\", Decoder: gopacket.DecodeFunc(decodeVRRP)})\n\tLayerTypeGeneve                       = gopacket.RegisterLayerType(120, gopacket.LayerTypeMetadata{Name: \"Geneve\", Decoder: gopacket.DecodeFunc(decodeGeneve)})\n\tLayerTypeSTP                          = gopacket.RegisterLayerType(121, gopacket.LayerTypeMetadata{Name: \"STP\", Decoder: gopacket.DecodeFunc(decodeSTP)})\n\tLayerTypeBFD                          = gopacket.RegisterLayerType(122, gopacket.LayerTypeMetadata{Name: \"BFD\", Decoder: gopacket.DecodeFunc(decodeBFD)})\n\tLayerTypeOSPF                         = gopacket.RegisterLayerType(123, gopacket.LayerTypeMetadata{Name: \"OSPF\", Decoder: gopacket.DecodeFunc(decodeOSPF)})\n\tLayerTypeICMPv6RouterSolicitation     = gopacket.RegisterLayerType(124, gopacket.LayerTypeMetadata{Name: \"ICMPv6RouterSolicitation\", Decoder: gopacket.DecodeFunc(decodeICMPv6RouterSolicitation)})\n\tLayerTypeICMPv6RouterAdvertisement    = gopacket.RegisterLayerType(125, gopacket.LayerTypeMetadata{Name: \"ICMPv6RouterAdvertisement\", Decoder: gopacket.DecodeFunc(decodeICMPv6RouterAdvertisement)})\n\tLayerTypeICMPv6NeighborSolicitation   = gopacket.RegisterLayerType(126, gopacket.LayerTypeMetadata{Name: \"ICMPv6NeighborSolicitation\", Decoder: gopacket.DecodeFunc(decodeICMPv6NeighborSolicitation)})\n\tLayerTypeICMPv6NeighborAdvertisement  = gopacket.RegisterLayerType(127, gopacket.LayerTypeMetadata{Name: \"ICMPv6NeighborAdvertisement\", Decoder: gopacket.DecodeFunc(decodeICMPv6NeighborAdvertisement)})\n\tLayerTypeICMPv6Redirect               = gopacket.RegisterLayerType(128, gopacket.LayerTypeMetadata{Name: \"ICMPv6Redirect\", Decoder: gopacket.DecodeFunc(decodeICMPv6Redirect)})\n\tLayerTypeGTPv1U                       = gopacket.RegisterLayerType(129, gopacket.LayerTypeMetadata{Name: \"GTPv1U\", Decoder: gopacket.DecodeFunc(decodeGTPv1u)})\n\tLayerTypeEAPOLKey                     = gopacket.RegisterLayerType(130, gopacket.LayerTypeMetadata{Name: \"EAPOLKey\", Decoder: gopacket.DecodeFunc(decodeEAPOLKey)})\n\tLayerTypeLCM                          = gopacket.RegisterLayerType(131, gopacket.LayerTypeMetadata{Name: \"LCM\", Decoder: gopacket.DecodeFunc(decodeLCM)})\n\tLayerTypeICMPv6Echo                   = gopacket.RegisterLayerType(132, gopacket.LayerTypeMetadata{Name: \"ICMPv6Echo\", Decoder: gopacket.DecodeFunc(decodeICMPv6Echo)})\n\tLayerTypeSIP                          = gopacket.RegisterLayerType(133, gopacket.LayerTypeMetadata{Name: \"SIP\", Decoder: gopacket.DecodeFunc(decodeSIP)})\n\tLayerTypeDHCPv6                       = gopacket.RegisterLayerType(134, gopacket.LayerTypeMetadata{Name: \"DHCPv6\", Decoder: gopacket.DecodeFunc(decodeDHCPv6)})\n\tLayerTypeMLDv1MulticastListenerReport = gopacket.RegisterLayerType(135, gopacket.LayerTypeMetadata{Name: \"MLDv1MulticastListenerReport\", Decoder: gopacket.DecodeFunc(decodeMLDv1MulticastListenerReport)})\n\tLayerTypeMLDv1MulticastListenerDone   = gopacket.RegisterLayerType(136, gopacket.LayerTypeMetadata{Name: \"MLDv1MulticastListenerDone\", Decoder: gopacket.DecodeFunc(decodeMLDv1MulticastListenerDone)})\n\tLayerTypeMLDv1MulticastListenerQuery  = gopacket.RegisterLayerType(137, gopacket.LayerTypeMetadata{Name: \"MLDv1MulticastListenerQuery\", Decoder: gopacket.DecodeFunc(decodeMLDv1MulticastListenerQuery)})\n\tLayerTypeMLDv2MulticastListenerReport = gopacket.RegisterLayerType(138, gopacket.LayerTypeMetadata{Name: \"MLDv2MulticastListenerReport\", Decoder: gopacket.DecodeFunc(decodeMLDv2MulticastListenerReport)})\n\tLayerTypeMLDv2MulticastListenerQuery  = gopacket.RegisterLayerType(139, gopacket.LayerTypeMetadata{Name: \"MLDv2MulticastListenerQuery\", Decoder: gopacket.DecodeFunc(decodeMLDv2MulticastListenerQuery)})\n\tLayerTypeTLS                          = gopacket.RegisterLayerType(140, gopacket.LayerTypeMetadata{Name: \"TLS\", Decoder: gopacket.DecodeFunc(decodeTLS)})\n\tLayerTypeModbusTCP                    = gopacket.RegisterLayerType(141, gopacket.LayerTypeMetadata{Name: \"ModbusTCP\", Decoder: gopacket.DecodeFunc(decodeModbusTCP)})\n\tLayerTypeRMCP                         = gopacket.RegisterLayerType(142, gopacket.LayerTypeMetadata{Name: \"RMCP\", Decoder: gopacket.DecodeFunc(decodeRMCP)})\n\tLayerTypeASF                          = gopacket.RegisterLayerType(143, gopacket.LayerTypeMetadata{Name: \"ASF\", Decoder: gopacket.DecodeFunc(decodeASF)})\n\tLayerTypeASFPresencePong              = gopacket.RegisterLayerType(144, gopacket.LayerTypeMetadata{Name: \"ASFPresencePong\", Decoder: gopacket.DecodeFunc(decodeASFPresencePong)})\n\tLayerTypeERSPANII                     = gopacket.RegisterLayerType(145, gopacket.LayerTypeMetadata{Name: \"ERSPAN Type II\", Decoder: gopacket.DecodeFunc(decodeERSPANII)})\n\tLayerTypeRADIUS                       = gopacket.RegisterLayerType(146, gopacket.LayerTypeMetadata{Name: \"RADIUS\", Decoder: gopacket.DecodeFunc(decodeRADIUS)})\n\tLayerTypeAGUEVar0                     = gopacket.RegisterLayerType(147, gopacket.LayerTypeMetadata{Name: \"AGUEVar0\", Decoder: gopacket.DecodeFunc(decodeAGUE)})\n\tLayerTypeAGUEVar1                     = gopacket.RegisterLayerType(148, gopacket.LayerTypeMetadata{Name: \"AGUEVar1\", Decoder: gopacket.DecodeFunc(decodeAGUE)})\n\tLayerTypeAPSP                         = gopacket.RegisterLayerType(149, gopacket.LayerTypeMetadata{Name: \"APSP\", Decoder: gopacket.DecodeFunc(decodeAPSP)})\n)\n\nvar (\n\t// LayerClassIPNetwork contains TCP/IP network layer types.\n\tLayerClassIPNetwork = gopacket.NewLayerClass([]gopacket.LayerType{\n\t\tLayerTypeIPv4,\n\t\tLayerTypeIPv6,\n\t})\n\t// LayerClassIPTransport contains TCP/IP transport layer types.\n\tLayerClassIPTransport = gopacket.NewLayerClass([]gopacket.LayerType{\n\t\tLayerTypeTCP,\n\t\tLayerTypeUDP,\n\t\tLayerTypeSCTP,\n\t})\n\t// LayerClassIPControl contains TCP/IP control protocols.\n\tLayerClassIPControl = gopacket.NewLayerClass([]gopacket.LayerType{\n\t\tLayerTypeICMPv4,\n\t\tLayerTypeICMPv6,\n\t})\n\t// LayerClassSCTPChunk contains SCTP chunk types (not the top-level SCTP\n\t// layer).\n\tLayerClassSCTPChunk = gopacket.NewLayerClass([]gopacket.LayerType{\n\t\tLayerTypeSCTPUnknownChunkType,\n\t\tLayerTypeSCTPData,\n\t\tLayerTypeSCTPInit,\n\t\tLayerTypeSCTPSack,\n\t\tLayerTypeSCTPHeartbeat,\n\t\tLayerTypeSCTPError,\n\t\tLayerTypeSCTPShutdown,\n\t\tLayerTypeSCTPShutdownAck,\n\t\tLayerTypeSCTPCookieEcho,\n\t\tLayerTypeSCTPEmptyLayer,\n\t\tLayerTypeSCTPInitAck,\n\t\tLayerTypeSCTPHeartbeatAck,\n\t\tLayerTypeSCTPAbort,\n\t\tLayerTypeSCTPShutdownComplete,\n\t\tLayerTypeSCTPCookieAck,\n\t})\n\t// LayerClassIPv6Extension contains IPv6 extension headers.\n\tLayerClassIPv6Extension = gopacket.NewLayerClass([]gopacket.LayerType{\n\t\tLayerTypeIPv6HopByHop,\n\t\tLayerTypeIPv6Routing,\n\t\tLayerTypeIPv6Fragment,\n\t\tLayerTypeIPv6Destination,\n\t})\n\tLayerClassIPSec = gopacket.NewLayerClass([]gopacket.LayerType{\n\t\tLayerTypeIPSecAH,\n\t\tLayerTypeIPSecESP,\n\t})\n\t// LayerClassICMPv6NDP contains ICMPv6 neighbor discovery protocol\n\t// messages.\n\tLayerClassICMPv6NDP = gopacket.NewLayerClass([]gopacket.LayerType{\n\t\tLayerTypeICMPv6RouterSolicitation,\n\t\tLayerTypeICMPv6RouterAdvertisement,\n\t\tLayerTypeICMPv6NeighborSolicitation,\n\t\tLayerTypeICMPv6NeighborAdvertisement,\n\t\tLayerTypeICMPv6Redirect,\n\t})\n\t// LayerClassMLDv1 contains multicast listener discovery protocol\n\tLayerClassMLDv1 = gopacket.NewLayerClass([]gopacket.LayerType{\n\t\tLayerTypeMLDv1MulticastListenerQuery,\n\t\tLayerTypeMLDv1MulticastListenerReport,\n\t\tLayerTypeMLDv1MulticastListenerDone,\n\t})\n\t// LayerClassMLDv2 contains multicast listener discovery protocol v2\n\tLayerClassMLDv2 = gopacket.NewLayerClass([]gopacket.LayerType{\n\t\tLayerTypeMLDv1MulticastListenerReport,\n\t\tLayerTypeMLDv1MulticastListenerDone,\n\t\tLayerTypeMLDv2MulticastListenerReport,\n\t\tLayerTypeMLDv1MulticastListenerQuery,\n\t\tLayerTypeMLDv2MulticastListenerQuery,\n\t})\n)\n"
  },
  {
    "path": "layers/lcm.go",
    "content": "// Copyright 2018 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\nconst (\n\t// LCMShortHeaderMagic is the LCM small message header magic number\n\tLCMShortHeaderMagic uint32 = 0x4c433032\n\t// LCMFragmentedHeaderMagic is the LCM fragmented message header magic number\n\tLCMFragmentedHeaderMagic uint32 = 0x4c433033\n)\n\n// LCM (Lightweight Communications and Marshalling) is a set of libraries and\n// tools for message passing and data marshalling, targeted at real-time systems\n// where high-bandwidth and low latency are critical. It provides a\n// publish/subscribe message passing model and automatic\n// marshalling/unmarshalling code generation with bindings for applications in a\n// variety of programming languages.\n//\n// References\n//   https://lcm-proj.github.io/\n//   https://github.com/lcm-proj/lcm\ntype LCM struct {\n\t// Common (short & fragmented header) fields\n\tMagic          uint32\n\tSequenceNumber uint32\n\t// Fragmented header only fields\n\tPayloadSize    uint32\n\tFragmentOffset uint32\n\tFragmentNumber uint16\n\tTotalFragments uint16\n\t// Common field\n\tChannelName string\n\t// Gopacket helper fields\n\tFragmented  bool\n\tfingerprint LCMFingerprint\n\tcontents    []byte\n\tpayload     []byte\n}\n\n// LCMFingerprint is the type of a LCM fingerprint.\ntype LCMFingerprint uint64\n\nvar (\n\t// lcmLayerTypes contains a map of all LCM fingerprints that we support and\n\t// their LayerType\n\tlcmLayerTypes  = map[LCMFingerprint]gopacket.LayerType{}\n\tlayerTypeIndex = 1001\n)\n\n// RegisterLCMLayerType allows users to register decoders for the underlying\n// LCM payload. This is done based on the fingerprint that every LCM message\n// contains and which identifies it uniquely. If num is not the zero value it\n// will be used when registering with RegisterLayerType towards gopacket,\n// otherwise an incremental value starting from 1001 will be used.\nfunc RegisterLCMLayerType(num int, name string, fingerprint LCMFingerprint,\n\tdecoder gopacket.Decoder) gopacket.LayerType {\n\tmetadata := gopacket.LayerTypeMetadata{Name: name, Decoder: decoder}\n\n\tif num == 0 {\n\t\tnum = layerTypeIndex\n\t\tlayerTypeIndex++\n\t}\n\n\tlcmLayerTypes[fingerprint] = gopacket.RegisterLayerType(num, metadata)\n\n\treturn lcmLayerTypes[fingerprint]\n}\n\n// SupportedLCMFingerprints returns a slice of all LCM fingerprints that has\n// been registered so far.\nfunc SupportedLCMFingerprints() []LCMFingerprint {\n\tfingerprints := make([]LCMFingerprint, 0, len(lcmLayerTypes))\n\tfor fp := range lcmLayerTypes {\n\t\tfingerprints = append(fingerprints, fp)\n\t}\n\treturn fingerprints\n}\n\n// GetLCMLayerType returns the underlying LCM message's LayerType.\n// This LayerType has to be registered by using RegisterLCMLayerType.\nfunc GetLCMLayerType(fingerprint LCMFingerprint) gopacket.LayerType {\n\tlayerType, ok := lcmLayerTypes[fingerprint]\n\tif !ok {\n\t\treturn gopacket.LayerTypePayload\n\t}\n\n\treturn layerType\n}\n\nfunc decodeLCM(data []byte, p gopacket.PacketBuilder) error {\n\tlcm := &LCM{}\n\n\terr := lcm.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tp.AddLayer(lcm)\n\tp.SetApplicationLayer(lcm)\n\n\treturn p.NextDecoder(lcm.NextLayerType())\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (lcm *LCM) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 8 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"LCM < 8 bytes\")\n\t}\n\toffset := 0\n\n\tlcm.Magic = binary.BigEndian.Uint32(data[offset:4])\n\toffset += 4\n\n\tif lcm.Magic != LCMShortHeaderMagic && lcm.Magic != LCMFragmentedHeaderMagic {\n\t\treturn fmt.Errorf(\"Received LCM header magic %v does not match know \"+\n\t\t\t\"LCM magic numbers. Dropping packet.\", lcm.Magic)\n\t}\n\n\tlcm.SequenceNumber = binary.BigEndian.Uint32(data[offset:8])\n\toffset += 4\n\n\tif lcm.Magic == LCMFragmentedHeaderMagic {\n\t\tlcm.Fragmented = true\n\n\t\tlcm.PayloadSize = binary.BigEndian.Uint32(data[offset : offset+4])\n\t\toffset += 4\n\n\t\tlcm.FragmentOffset = binary.BigEndian.Uint32(data[offset : offset+4])\n\t\toffset += 4\n\n\t\tlcm.FragmentNumber = binary.BigEndian.Uint16(data[offset : offset+2])\n\t\toffset += 2\n\n\t\tlcm.TotalFragments = binary.BigEndian.Uint16(data[offset : offset+2])\n\t\toffset += 2\n\t} else {\n\t\tlcm.Fragmented = false\n\t}\n\n\tif !lcm.Fragmented || (lcm.Fragmented && lcm.FragmentNumber == 0) {\n\t\tbuffer := make([]byte, 0)\n\t\tfor _, b := range data[offset:] {\n\t\t\toffset++\n\n\t\t\tif b == 0 {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tbuffer = append(buffer, b)\n\t\t}\n\n\t\tlcm.ChannelName = string(buffer)\n\t}\n\n\tlcm.fingerprint = LCMFingerprint(\n\t\tbinary.BigEndian.Uint64(data[offset : offset+8]))\n\n\tlcm.contents = data[:offset]\n\tlcm.payload = data[offset:]\n\n\treturn nil\n}\n\n// CanDecode returns a set of layers that LCM objects can decode.\n// As LCM objects can only decode the LCM layer, we just return that layer.\nfunc (lcm LCM) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeLCM\n}\n\n// NextLayerType specifies the LCM payload layer type following this header.\n// As LCM packets are serialized structs with uniq fingerprints for each uniq\n// combination of data types, lookup of correct layer type is based on that\n// fingerprint.\nfunc (lcm LCM) NextLayerType() gopacket.LayerType {\n\tif !lcm.Fragmented || (lcm.Fragmented && lcm.FragmentNumber == 0) {\n\t\treturn GetLCMLayerType(lcm.fingerprint)\n\t}\n\n\treturn gopacket.LayerTypeFragment\n}\n\n// LayerType returns LayerTypeLCM\nfunc (lcm LCM) LayerType() gopacket.LayerType {\n\treturn LayerTypeLCM\n}\n\n// LayerContents returns the contents of the LCM header.\nfunc (lcm LCM) LayerContents() []byte {\n\treturn lcm.contents\n}\n\n// LayerPayload returns the payload following this LCM header.\nfunc (lcm LCM) LayerPayload() []byte {\n\treturn lcm.payload\n}\n\n// Payload returns the payload following this LCM header.\nfunc (lcm LCM) Payload() []byte {\n\treturn lcm.LayerPayload()\n}\n\n// Fingerprint returns the LCM fingerprint of the underlying message.\nfunc (lcm LCM) Fingerprint() LCMFingerprint {\n\treturn lcm.fingerprint\n}\n"
  },
  {
    "path": "layers/lcm_test.go",
    "content": "// Copyright 2018 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/hex\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nvar (\n\tfingerprint uint64 = 0x6c636d2073656c66\n\n\tshortPacket = []byte{\n\t\t0x4c, 0x43, 0x30, 0x32, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x43, 0x4d, 0x5f,\n\t\t0x53, 0x45, 0x4c, 0x46, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x00, 0x6c, 0x63,\n\t\t0x6d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x74, 0x65, 0x73, 0x74,\n\t}\n\n\tfragmentedPacket = []byte{\n\t\t0x4c, 0x43, 0x30, 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d,\n\t\t0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x02, 0x4c, 0x43, 0x4d, 0x5f,\n\t\t0x53, 0x45, 0x4c, 0x46, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x00, 0x6c, 0x63,\n\t\t0x6d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x74, 0x65, 0x73, 0x74,\n\t}\n\n\tinvalidPacket = []byte{\n\t\t0x4c, 0x43, 0x30, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t}\n\n\texpectedChannel = \"LCM_SELF_TEST\"\n)\n\nfunc TestLCMDecode(t *testing.T) {\n\ttestShortLCM(t)\n\ttestFragmentedLCM(t)\n\ttestInvalidLCM(t)\n}\n\nfunc testShortLCM(t *testing.T) {\n\tlcm := &LCM{}\n\n\terr := lcm.DecodeFromBytes(shortPacket, gopacket.NilDecodeFeedback)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tif lcm.Magic != LCMShortHeaderMagic {\n\t\tt.Errorf(\"Expected LCM Magic %x, but decoded %x.\\n\",\n\t\t\tLCMShortHeaderMagic, lcm.Magic)\n\t}\n\n\tif lcm.SequenceNumber != 0x00 {\n\t\tt.Errorf(\"Expected an LCM Sequence Number of %x, but decoded %x.\\n\",\n\t\t\t0x00, lcm.SequenceNumber)\n\t}\n\n\tif lcm.ChannelName != expectedChannel {\n\t\tt.Errorf(\"Expected channel name %s but received %s\\n\",\n\t\t\texpectedChannel, lcm.ChannelName)\n\t}\n\n\tif lcm.Fragmented {\n\t\tt.Errorf(\"Misinterpreted non-fragmented packet as fragmented.\")\n\t}\n\n\tfor i, val := range lcm.LayerContents() {\n\t\tif val != shortPacket[i] {\n\t\t\tt.Errorf(\"\\nLCM Payload: expected\\n%sbut received\\n%s\",\n\t\t\t\thex.Dump(shortPacket[:22]), hex.Dump(lcm.Payload()))\n\t\t}\n\t}\n\n\tfor i, val := range lcm.Payload() {\n\t\tif val != shortPacket[i+22] {\n\t\t\tt.Errorf(\"\\nLCM Payload: expected\\n%sbut received\\n%s\",\n\t\t\t\thex.Dump(shortPacket[22:]), hex.Dump(lcm.Payload()))\n\t\t}\n\t}\n}\n\nfunc testFragmentedLCM(t *testing.T) {\n\tlcm := LCM{}\n\n\terr := lcm.DecodeFromBytes(fragmentedPacket, gopacket.NilDecodeFeedback)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tif lcm.Magic != LCMFragmentedHeaderMagic {\n\t\tt.Errorf(\"Expected LCM Magic %x, but decoded %x.\\n\",\n\t\t\tLCMFragmentedHeaderMagic, lcm.Magic)\n\t}\n\n\tif lcm.SequenceNumber != 0x01 {\n\t\tt.Errorf(\"Expected an LCM Sequence Number of %x, but decoded %x.\\n\",\n\t\t\t0x01, lcm.SequenceNumber)\n\t}\n\n\tif lcm.PayloadSize != 0x0d {\n\t\tt.Errorf(\"Expected an LCM Payload Size of %x, but decoded %x.\\n\", 0x0d,\n\t\t\tlcm.PayloadSize)\n\t}\n\n\tif lcm.FragmentOffset != 0x2d {\n\t\tt.Errorf(\"Expected an LCM Fragment Offset of %x, but decoded %x.\\n\",\n\t\t\t0x2d, lcm.FragmentOffset)\n\t}\n\n\tif lcm.FragmentNumber != 0x00 {\n\t\tt.Errorf(\"Expected the first LCM fragment (%x), but decoded %x.\\n\",\n\t\t\t0x00, lcm.FragmentNumber)\n\t}\n\n\tif lcm.TotalFragments != 0x02 {\n\t\tt.Errorf(\"Expected two LCM fragments (%x), but decoded %x.\\n\", 0x02,\n\t\t\tlcm.TotalFragments)\n\t}\n\n\tif lcm.ChannelName != expectedChannel {\n\t\tt.Errorf(\"Expected LCM Channel Name %s but decoded %s\\n\",\n\t\t\texpectedChannel, lcm.ChannelName)\n\t}\n\n\tif !lcm.Fragmented {\n\t\tt.Errorf(\"Misinterpreted fragmented packet as non-fragmented.\")\n\t}\n\n\tfor i, val := range lcm.LayerContents() {\n\t\tif val != fragmentedPacket[i] {\n\t\t\tt.Errorf(\"\\nLCM Payload: expected\\n%sbut received\\n%s\",\n\t\t\t\thex.Dump(fragmentedPacket[:22]), hex.Dump(lcm.Payload()))\n\t\t}\n\t}\n\n\tfor i, val := range lcm.Payload() {\n\t\tif val != fragmentedPacket[i+34] {\n\t\t\tt.Errorf(\"\\nLCM Payload: expected\\n%sbut received\\n%s\",\n\t\t\t\thex.Dump(fragmentedPacket[34:]), hex.Dump(lcm.Payload()))\n\t\t}\n\t}\n}\n\nfunc testInvalidLCM(t *testing.T) {\n\tlcm := LCM{}\n\n\terr := lcm.DecodeFromBytes(invalidPacket, gopacket.NilDecodeFeedback)\n\tif err == nil {\n\t\tt.Fatal(\"Did not detect LCM decode error.\")\n\t}\n}\n"
  },
  {
    "path": "layers/linux_sll.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/google/gopacket\"\n)\n\ntype LinuxSLLPacketType uint16\n\nconst (\n\tLinuxSLLPacketTypeHost      LinuxSLLPacketType = 0 // To us\n\tLinuxSLLPacketTypeBroadcast LinuxSLLPacketType = 1 // To all\n\tLinuxSLLPacketTypeMulticast LinuxSLLPacketType = 2 // To group\n\tLinuxSLLPacketTypeOtherhost LinuxSLLPacketType = 3 // To someone else\n\tLinuxSLLPacketTypeOutgoing  LinuxSLLPacketType = 4 // Outgoing of any type\n\t// These ones are invisible by user level\n\tLinuxSLLPacketTypeLoopback  LinuxSLLPacketType = 5 // MC/BRD frame looped back\n\tLinuxSLLPacketTypeFastroute LinuxSLLPacketType = 6 // Fastrouted frame\n)\n\nfunc (l LinuxSLLPacketType) String() string {\n\tswitch l {\n\tcase LinuxSLLPacketTypeHost:\n\t\treturn \"host\"\n\tcase LinuxSLLPacketTypeBroadcast:\n\t\treturn \"broadcast\"\n\tcase LinuxSLLPacketTypeMulticast:\n\t\treturn \"multicast\"\n\tcase LinuxSLLPacketTypeOtherhost:\n\t\treturn \"otherhost\"\n\tcase LinuxSLLPacketTypeOutgoing:\n\t\treturn \"outgoing\"\n\tcase LinuxSLLPacketTypeLoopback:\n\t\treturn \"loopback\"\n\tcase LinuxSLLPacketTypeFastroute:\n\t\treturn \"fastroute\"\n\t}\n\treturn fmt.Sprintf(\"Unknown(%d)\", int(l))\n}\n\ntype LinuxSLL struct {\n\tBaseLayer\n\tPacketType   LinuxSLLPacketType\n\tAddrLen      uint16\n\tAddr         net.HardwareAddr\n\tEthernetType EthernetType\n\tAddrType     uint16\n}\n\n// LayerType returns LayerTypeLinuxSLL.\nfunc (sll *LinuxSLL) LayerType() gopacket.LayerType { return LayerTypeLinuxSLL }\n\nfunc (sll *LinuxSLL) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeLinuxSLL\n}\n\nfunc (sll *LinuxSLL) LinkFlow() gopacket.Flow {\n\treturn gopacket.NewFlow(EndpointMAC, sll.Addr, nil)\n}\n\nfunc (sll *LinuxSLL) NextLayerType() gopacket.LayerType {\n\treturn sll.EthernetType.LayerType()\n}\n\nfunc (sll *LinuxSLL) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 16 {\n\t\treturn errors.New(\"Linux SLL packet too small\")\n\t}\n\tsll.PacketType = LinuxSLLPacketType(binary.BigEndian.Uint16(data[0:2]))\n\tsll.AddrType = binary.BigEndian.Uint16(data[2:4])\n\tsll.AddrLen = binary.BigEndian.Uint16(data[4:6])\n\n\tsll.Addr = net.HardwareAddr(data[6 : sll.AddrLen+6])\n\tsll.EthernetType = EthernetType(binary.BigEndian.Uint16(data[14:16]))\n\tsll.BaseLayer = BaseLayer{data[:16], data[16:]}\n\n\treturn nil\n}\n\nfunc decodeLinuxSLL(data []byte, p gopacket.PacketBuilder) error {\n\tsll := &LinuxSLL{}\n\tif err := sll.DecodeFromBytes(data, p); err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(sll)\n\tp.SetLinkLayer(sll)\n\treturn p.NextDecoder(sll.EthernetType)\n}\n"
  },
  {
    "path": "layers/llc.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// LLC is the layer used for 802.2 Logical Link Control headers.\n// See http://standards.ieee.org/getieee802/download/802.2-1998.pdf\ntype LLC struct {\n\tBaseLayer\n\tDSAP    uint8\n\tIG      bool // true means group, false means individual\n\tSSAP    uint8\n\tCR      bool // true means response, false means command\n\tControl uint16\n}\n\n// LayerType returns gopacket.LayerTypeLLC.\nfunc (l *LLC) LayerType() gopacket.LayerType { return LayerTypeLLC }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (l *LLC) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 3 {\n\t\treturn errors.New(\"LLC header too small\")\n\t}\n\tl.DSAP = data[0] & 0xFE\n\tl.IG = data[0]&0x1 != 0\n\tl.SSAP = data[1] & 0xFE\n\tl.CR = data[1]&0x1 != 0\n\tl.Control = uint16(data[2])\n\n\tif l.Control&0x1 == 0 || l.Control&0x3 == 0x1 {\n\t\tif len(data) < 4 {\n\t\t\treturn errors.New(\"LLC header too small\")\n\t\t}\n\t\tl.Control = l.Control<<8 | uint16(data[3])\n\t\tl.Contents = data[:4]\n\t\tl.Payload = data[4:]\n\t} else {\n\t\tl.Contents = data[:3]\n\t\tl.Payload = data[3:]\n\t}\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (l *LLC) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeLLC\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (l *LLC) NextLayerType() gopacket.LayerType {\n\tswitch {\n\tcase l.DSAP == 0xAA && l.SSAP == 0xAA:\n\t\treturn LayerTypeSNAP\n\tcase l.DSAP == 0x42 && l.SSAP == 0x42:\n\t\treturn LayerTypeSTP\n\t}\n\treturn gopacket.LayerTypeZero // Not implemented\n}\n\n// SNAP is used inside LLC.  See\n// http://standards.ieee.org/getieee802/download/802-2001.pdf.\n// From http://en.wikipedia.org/wiki/Subnetwork_Access_Protocol:\n//  \"[T]he Subnetwork Access Protocol (SNAP) is a mechanism for multiplexing,\n//  on networks using IEEE 802.2 LLC, more protocols than can be distinguished\n//  by the 8-bit 802.2 Service Access Point (SAP) fields.\"\ntype SNAP struct {\n\tBaseLayer\n\tOrganizationalCode []byte\n\tType               EthernetType\n}\n\n// LayerType returns gopacket.LayerTypeSNAP.\nfunc (s *SNAP) LayerType() gopacket.LayerType { return LayerTypeSNAP }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (s *SNAP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 5 {\n\t\treturn errors.New(\"SNAP header too small\")\n\t}\n\ts.OrganizationalCode = data[:3]\n\ts.Type = EthernetType(binary.BigEndian.Uint16(data[3:5]))\n\ts.BaseLayer = BaseLayer{data[:5], data[5:]}\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (s *SNAP) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeSNAP\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (s *SNAP) NextLayerType() gopacket.LayerType {\n\t// See BUG(gconnel) in decodeSNAP\n\treturn s.Type.LayerType()\n}\n\nfunc decodeLLC(data []byte, p gopacket.PacketBuilder) error {\n\tl := &LLC{}\n\terr := l.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(l)\n\treturn p.NextDecoder(l.NextLayerType())\n}\n\nfunc decodeSNAP(data []byte, p gopacket.PacketBuilder) error {\n\ts := &SNAP{}\n\terr := s.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(s)\n\t// BUG(gconnell):  When decoding SNAP, we treat the SNAP type as an Ethernet\n\t// type.  This may not actually be an ethernet type in all cases,\n\t// depending on the organizational code.  Right now, we don't check.\n\treturn p.NextDecoder(s.Type)\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (l *LLC) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tvar igFlag, crFlag byte\n\tvar length int\n\n\tif l.Control&0xFF00 != 0 {\n\t\tlength = 4\n\t} else {\n\t\tlength = 3\n\t}\n\n\tif l.DSAP&0x1 != 0 {\n\t\treturn errors.New(\"DSAP value invalid, should not include IG flag bit\")\n\t}\n\n\tif l.SSAP&0x1 != 0 {\n\t\treturn errors.New(\"SSAP value invalid, should not include CR flag bit\")\n\t}\n\n\tif buf, err := b.PrependBytes(length); err != nil {\n\t\treturn err\n\t} else {\n\t\tigFlag = 0\n\t\tif l.IG {\n\t\t\tigFlag = 0x1\n\t\t}\n\n\t\tcrFlag = 0\n\t\tif l.CR {\n\t\t\tcrFlag = 0x1\n\t\t}\n\n\t\tbuf[0] = l.DSAP + igFlag\n\t\tbuf[1] = l.SSAP + crFlag\n\n\t\tif length == 4 {\n\t\t\tbuf[2] = uint8(l.Control >> 8)\n\t\t\tbuf[3] = uint8(l.Control)\n\t\t} else {\n\t\t\tbuf[2] = uint8(l.Control)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (s *SNAP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tif buf, err := b.PrependBytes(5); err != nil {\n\t\treturn err\n\t} else {\n\t\tbuf[0] = s.OrganizationalCode[0]\n\t\tbuf[1] = s.OrganizationalCode[1]\n\t\tbuf[2] = s.OrganizationalCode[2]\n\t\tbinary.BigEndian.PutUint16(buf[3:5], uint16(s.Type))\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "layers/lldp.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// LLDPTLVType is the type of each TLV value in a LinkLayerDiscovery packet.\ntype LLDPTLVType byte\n\nconst (\n\tLLDPTLVEnd             LLDPTLVType = 0\n\tLLDPTLVChassisID       LLDPTLVType = 1\n\tLLDPTLVPortID          LLDPTLVType = 2\n\tLLDPTLVTTL             LLDPTLVType = 3\n\tLLDPTLVPortDescription LLDPTLVType = 4\n\tLLDPTLVSysName         LLDPTLVType = 5\n\tLLDPTLVSysDescription  LLDPTLVType = 6\n\tLLDPTLVSysCapabilities LLDPTLVType = 7\n\tLLDPTLVMgmtAddress     LLDPTLVType = 8\n\tLLDPTLVOrgSpecific     LLDPTLVType = 127\n)\n\n// LinkLayerDiscoveryValue is a TLV value inside a LinkLayerDiscovery packet layer.\ntype LinkLayerDiscoveryValue struct {\n\tType   LLDPTLVType\n\tLength uint16\n\tValue  []byte\n}\n\nfunc (c *LinkLayerDiscoveryValue) len() int {\n\treturn 0\n}\n\n// LLDPChassisIDSubType specifies the value type for a single LLDPChassisID.ID\ntype LLDPChassisIDSubType byte\n\n// LLDP Chassis Types\nconst (\n\tLLDPChassisIDSubTypeReserved    LLDPChassisIDSubType = 0\n\tLLDPChassisIDSubTypeChassisComp LLDPChassisIDSubType = 1\n\tLLDPChassisIDSubtypeIfaceAlias  LLDPChassisIDSubType = 2\n\tLLDPChassisIDSubTypePortComp    LLDPChassisIDSubType = 3\n\tLLDPChassisIDSubTypeMACAddr     LLDPChassisIDSubType = 4\n\tLLDPChassisIDSubTypeNetworkAddr LLDPChassisIDSubType = 5\n\tLLDPChassisIDSubtypeIfaceName   LLDPChassisIDSubType = 6\n\tLLDPChassisIDSubTypeLocal       LLDPChassisIDSubType = 7\n)\n\ntype LLDPChassisID struct {\n\tSubtype LLDPChassisIDSubType\n\tID      []byte\n}\n\nfunc (c *LLDPChassisID) serialize() []byte {\n\n\tvar buf = make([]byte, c.serializedLen())\n\tidLen := uint16(LLDPTLVChassisID)<<9 | uint16(len(c.ID)+1) //id should take 7 bits, length should take 9 bits, +1 for subtype\n\tbinary.BigEndian.PutUint16(buf[0:2], idLen)\n\tbuf[2] = byte(c.Subtype)\n\tcopy(buf[3:], c.ID)\n\treturn buf\n}\n\nfunc (c *LLDPChassisID) serializedLen() int {\n\treturn len(c.ID) + 3 // +2 for id and length, +1 for subtype\n}\n\n// LLDPPortIDSubType specifies the value type for a single LLDPPortID.ID\ntype LLDPPortIDSubType byte\n\n// LLDP PortID types\nconst (\n\tLLDPPortIDSubtypeReserved       LLDPPortIDSubType = 0\n\tLLDPPortIDSubtypeIfaceAlias     LLDPPortIDSubType = 1\n\tLLDPPortIDSubtypePortComp       LLDPPortIDSubType = 2\n\tLLDPPortIDSubtypeMACAddr        LLDPPortIDSubType = 3\n\tLLDPPortIDSubtypeNetworkAddr    LLDPPortIDSubType = 4\n\tLLDPPortIDSubtypeIfaceName      LLDPPortIDSubType = 5\n\tLLDPPortIDSubtypeAgentCircuitID LLDPPortIDSubType = 6\n\tLLDPPortIDSubtypeLocal          LLDPPortIDSubType = 7\n)\n\ntype LLDPPortID struct {\n\tSubtype LLDPPortIDSubType\n\tID      []byte\n}\n\nfunc (c *LLDPPortID) serialize() []byte {\n\n\tvar buf = make([]byte, c.serializedLen())\n\tidLen := uint16(LLDPTLVPortID)<<9 | uint16(len(c.ID)+1) //id should take 7 bits, length should take 9 bits, +1 for subtype\n\tbinary.BigEndian.PutUint16(buf[0:2], idLen)\n\tbuf[2] = byte(c.Subtype)\n\tcopy(buf[3:], c.ID)\n\treturn buf\n}\n\nfunc (c *LLDPPortID) serializedLen() int {\n\treturn len(c.ID) + 3 // +2 for id and length, +1 for subtype\n}\n\n// LinkLayerDiscovery is a packet layer containing the LinkLayer Discovery Protocol.\n// See http:http://standards.ieee.org/getieee802/download/802.1AB-2009.pdf\n// ChassisID, PortID and TTL are mandatory TLV's. Other values can be decoded\n// with DecodeValues()\ntype LinkLayerDiscovery struct {\n\tBaseLayer\n\tChassisID LLDPChassisID\n\tPortID    LLDPPortID\n\tTTL       uint16\n\tValues    []LinkLayerDiscoveryValue\n}\n\ntype IEEEOUI uint32\n\n// http://standards.ieee.org/develop/regauth/oui/oui.txt\nconst (\n\tIEEEOUI8021     IEEEOUI = 0x0080c2\n\tIEEEOUI8023     IEEEOUI = 0x00120f\n\tIEEEOUI80211    IEEEOUI = 0x000fac\n\tIEEEOUI8021Qbg  IEEEOUI = 0x0013BF\n\tIEEEOUICisco2   IEEEOUI = 0x000142\n\tIEEEOUIMedia    IEEEOUI = 0x0012bb // TR-41\n\tIEEEOUIProfinet IEEEOUI = 0x000ecf\n\tIEEEOUIDCBX     IEEEOUI = 0x001b21\n)\n\n// LLDPOrgSpecificTLV is an Organisation-specific TLV\ntype LLDPOrgSpecificTLV struct {\n\tOUI     IEEEOUI\n\tSubType uint8\n\tInfo    []byte\n}\n\n// LLDPCapabilities Types\nconst (\n\tLLDPCapsOther       uint16 = 1 << 0\n\tLLDPCapsRepeater    uint16 = 1 << 1\n\tLLDPCapsBridge      uint16 = 1 << 2\n\tLLDPCapsWLANAP      uint16 = 1 << 3\n\tLLDPCapsRouter      uint16 = 1 << 4\n\tLLDPCapsPhone       uint16 = 1 << 5\n\tLLDPCapsDocSis      uint16 = 1 << 6\n\tLLDPCapsStationOnly uint16 = 1 << 7\n\tLLDPCapsCVLAN       uint16 = 1 << 8\n\tLLDPCapsSVLAN       uint16 = 1 << 9\n\tLLDPCapsTmpr        uint16 = 1 << 10\n)\n\n// LLDPCapabilities represents the capabilities of a device\ntype LLDPCapabilities struct {\n\tOther       bool\n\tRepeater    bool\n\tBridge      bool\n\tWLANAP      bool\n\tRouter      bool\n\tPhone       bool\n\tDocSis      bool\n\tStationOnly bool\n\tCVLAN       bool\n\tSVLAN       bool\n\tTMPR        bool\n}\n\ntype LLDPSysCapabilities struct {\n\tSystemCap  LLDPCapabilities\n\tEnabledCap LLDPCapabilities\n}\n\ntype IANAAddressFamily byte\n\n// LLDP Management Address Subtypes\n// http://www.iana.org/assignments/address-family-numbers/address-family-numbers.xml\nconst (\n\tIANAAddressFamilyReserved IANAAddressFamily = 0\n\tIANAAddressFamilyIPV4     IANAAddressFamily = 1\n\tIANAAddressFamilyIPV6     IANAAddressFamily = 2\n\tIANAAddressFamilyNSAP     IANAAddressFamily = 3\n\tIANAAddressFamilyHDLC     IANAAddressFamily = 4\n\tIANAAddressFamilyBBN1822  IANAAddressFamily = 5\n\tIANAAddressFamily802      IANAAddressFamily = 6\n\tIANAAddressFamilyE163     IANAAddressFamily = 7\n\tIANAAddressFamilyE164     IANAAddressFamily = 8\n\tIANAAddressFamilyF69      IANAAddressFamily = 9\n\tIANAAddressFamilyX121     IANAAddressFamily = 10\n\tIANAAddressFamilyIPX      IANAAddressFamily = 11\n\tIANAAddressFamilyAtalk    IANAAddressFamily = 12\n\tIANAAddressFamilyDecnet   IANAAddressFamily = 13\n\tIANAAddressFamilyBanyan   IANAAddressFamily = 14\n\tIANAAddressFamilyE164NSAP IANAAddressFamily = 15\n\tIANAAddressFamilyDNS      IANAAddressFamily = 16\n\tIANAAddressFamilyDistname IANAAddressFamily = 17\n\tIANAAddressFamilyASNumber IANAAddressFamily = 18\n\tIANAAddressFamilyXTPIPV4  IANAAddressFamily = 19\n\tIANAAddressFamilyXTPIPV6  IANAAddressFamily = 20\n\tIANAAddressFamilyXTP      IANAAddressFamily = 21\n\tIANAAddressFamilyFcWWPN   IANAAddressFamily = 22\n\tIANAAddressFamilyFcWWNN   IANAAddressFamily = 23\n\tIANAAddressFamilyGWID     IANAAddressFamily = 24\n\tIANAAddressFamilyL2VPN    IANAAddressFamily = 25\n)\n\ntype LLDPInterfaceSubtype byte\n\n// LLDP Interface Subtypes\nconst (\n\tLLDPInterfaceSubtypeUnknown LLDPInterfaceSubtype = 1\n\tLLDPInterfaceSubtypeifIndex LLDPInterfaceSubtype = 2\n\tLLDPInterfaceSubtypeSysPort LLDPInterfaceSubtype = 3\n)\n\ntype LLDPMgmtAddress struct {\n\tSubtype          IANAAddressFamily\n\tAddress          []byte\n\tInterfaceSubtype LLDPInterfaceSubtype\n\tInterfaceNumber  uint32\n\tOID              string\n}\n\n// LinkLayerDiscoveryInfo represents the decoded details for a set of LinkLayerDiscoveryValues\n// Organisation-specific TLV's can be decoded using the various Decode() methods\ntype LinkLayerDiscoveryInfo struct {\n\tBaseLayer\n\tPortDescription string\n\tSysName         string\n\tSysDescription  string\n\tSysCapabilities LLDPSysCapabilities\n\tMgmtAddress     LLDPMgmtAddress\n\tOrgTLVs         []LLDPOrgSpecificTLV      // Private TLVs\n\tUnknown         []LinkLayerDiscoveryValue // undecoded TLVs\n}\n\n/// IEEE 802.1 TLV Subtypes\nconst (\n\tLLDP8021SubtypePortVLANID       uint8 = 1\n\tLLDP8021SubtypeProtocolVLANID   uint8 = 2\n\tLLDP8021SubtypeVLANName         uint8 = 3\n\tLLDP8021SubtypeProtocolIdentity uint8 = 4\n\tLLDP8021SubtypeVDIUsageDigest   uint8 = 5\n\tLLDP8021SubtypeManagementVID    uint8 = 6\n\tLLDP8021SubtypeLinkAggregation  uint8 = 7\n)\n\n// VLAN Port Protocol ID options\nconst (\n\tLLDPProtocolVLANIDCapability byte = 1 << 1\n\tLLDPProtocolVLANIDStatus     byte = 1 << 2\n)\n\ntype PortProtocolVLANID struct {\n\tSupported bool\n\tEnabled   bool\n\tID        uint16\n}\n\ntype VLANName struct {\n\tID   uint16\n\tName string\n}\n\ntype ProtocolIdentity []byte\n\n// LACP options\nconst (\n\tLLDPAggregationCapability byte = 1 << 0\n\tLLDPAggregationStatus     byte = 1 << 1\n)\n\n// IEEE 802 Link Aggregation parameters\ntype LLDPLinkAggregation struct {\n\tSupported bool\n\tEnabled   bool\n\tPortID    uint32\n}\n\n// LLDPInfo8021 represents the information carried in 802.1 Org-specific TLVs\ntype LLDPInfo8021 struct {\n\tPVID               uint16\n\tPPVIDs             []PortProtocolVLANID\n\tVLANNames          []VLANName\n\tProtocolIdentities []ProtocolIdentity\n\tVIDUsageDigest     uint32\n\tManagementVID      uint16\n\tLinkAggregation    LLDPLinkAggregation\n}\n\n// IEEE 802.3 TLV Subtypes\nconst (\n\tLLDP8023SubtypeMACPHY          uint8 = 1\n\tLLDP8023SubtypeMDIPower        uint8 = 2\n\tLLDP8023SubtypeLinkAggregation uint8 = 3\n\tLLDP8023SubtypeMTU             uint8 = 4\n)\n\n// MACPHY options\nconst (\n\tLLDPMACPHYCapability byte = 1 << 0\n\tLLDPMACPHYStatus     byte = 1 << 1\n)\n\n// From IANA-MAU-MIB (introduced by RFC 4836) - dot3MauType\nconst (\n\tLLDPMAUTypeUnknown         uint16 = 0\n\tLLDPMAUTypeAUI             uint16 = 1\n\tLLDPMAUType10Base5         uint16 = 2\n\tLLDPMAUTypeFOIRL           uint16 = 3\n\tLLDPMAUType10Base2         uint16 = 4\n\tLLDPMAUType10BaseT         uint16 = 5\n\tLLDPMAUType10BaseFP        uint16 = 6\n\tLLDPMAUType10BaseFB        uint16 = 7\n\tLLDPMAUType10BaseFL        uint16 = 8\n\tLLDPMAUType10BROAD36       uint16 = 9\n\tLLDPMAUType10BaseT_HD      uint16 = 10\n\tLLDPMAUType10BaseT_FD      uint16 = 11\n\tLLDPMAUType10BaseFL_HD     uint16 = 12\n\tLLDPMAUType10BaseFL_FD     uint16 = 13\n\tLLDPMAUType100BaseT4       uint16 = 14\n\tLLDPMAUType100BaseTX_HD    uint16 = 15\n\tLLDPMAUType100BaseTX_FD    uint16 = 16\n\tLLDPMAUType100BaseFX_HD    uint16 = 17\n\tLLDPMAUType100BaseFX_FD    uint16 = 18\n\tLLDPMAUType100BaseT2_HD    uint16 = 19\n\tLLDPMAUType100BaseT2_FD    uint16 = 20\n\tLLDPMAUType1000BaseX_HD    uint16 = 21\n\tLLDPMAUType1000BaseX_FD    uint16 = 22\n\tLLDPMAUType1000BaseLX_HD   uint16 = 23\n\tLLDPMAUType1000BaseLX_FD   uint16 = 24\n\tLLDPMAUType1000BaseSX_HD   uint16 = 25\n\tLLDPMAUType1000BaseSX_FD   uint16 = 26\n\tLLDPMAUType1000BaseCX_HD   uint16 = 27\n\tLLDPMAUType1000BaseCX_FD   uint16 = 28\n\tLLDPMAUType1000BaseT_HD    uint16 = 29\n\tLLDPMAUType1000BaseT_FD    uint16 = 30\n\tLLDPMAUType10GBaseX        uint16 = 31\n\tLLDPMAUType10GBaseLX4      uint16 = 32\n\tLLDPMAUType10GBaseR        uint16 = 33\n\tLLDPMAUType10GBaseER       uint16 = 34\n\tLLDPMAUType10GBaseLR       uint16 = 35\n\tLLDPMAUType10GBaseSR       uint16 = 36\n\tLLDPMAUType10GBaseW        uint16 = 37\n\tLLDPMAUType10GBaseEW       uint16 = 38\n\tLLDPMAUType10GBaseLW       uint16 = 39\n\tLLDPMAUType10GBaseSW       uint16 = 40\n\tLLDPMAUType10GBaseCX4      uint16 = 41\n\tLLDPMAUType2BaseTL         uint16 = 42\n\tLLDPMAUType10PASS_TS       uint16 = 43\n\tLLDPMAUType100BaseBX10D    uint16 = 44\n\tLLDPMAUType100BaseBX10U    uint16 = 45\n\tLLDPMAUType100BaseLX10     uint16 = 46\n\tLLDPMAUType1000BaseBX10D   uint16 = 47\n\tLLDPMAUType1000BaseBX10U   uint16 = 48\n\tLLDPMAUType1000BaseLX10    uint16 = 49\n\tLLDPMAUType1000BasePX10D   uint16 = 50\n\tLLDPMAUType1000BasePX10U   uint16 = 51\n\tLLDPMAUType1000BasePX20D   uint16 = 52\n\tLLDPMAUType1000BasePX20U   uint16 = 53\n\tLLDPMAUType10GBaseT        uint16 = 54\n\tLLDPMAUType10GBaseLRM      uint16 = 55\n\tLLDPMAUType1000BaseKX      uint16 = 56\n\tLLDPMAUType10GBaseKX4      uint16 = 57\n\tLLDPMAUType10GBaseKR       uint16 = 58\n\tLLDPMAUType10_1GBasePRX_D1 uint16 = 59\n\tLLDPMAUType10_1GBasePRX_D2 uint16 = 60\n\tLLDPMAUType10_1GBasePRX_D3 uint16 = 61\n\tLLDPMAUType10_1GBasePRX_U1 uint16 = 62\n\tLLDPMAUType10_1GBasePRX_U2 uint16 = 63\n\tLLDPMAUType10_1GBasePRX_U3 uint16 = 64\n\tLLDPMAUType10GBasePR_D1    uint16 = 65\n\tLLDPMAUType10GBasePR_D2    uint16 = 66\n\tLLDPMAUType10GBasePR_D3    uint16 = 67\n\tLLDPMAUType10GBasePR_U1    uint16 = 68\n\tLLDPMAUType10GBasePR_U3    uint16 = 69\n)\n\n// From RFC 3636 - ifMauAutoNegCapAdvertisedBits\nconst (\n\tLLDPMAUPMDOther        uint16 = 1 << 15\n\tLLDPMAUPMD10BaseT      uint16 = 1 << 14\n\tLLDPMAUPMD10BaseT_FD   uint16 = 1 << 13\n\tLLDPMAUPMD100BaseT4    uint16 = 1 << 12\n\tLLDPMAUPMD100BaseTX    uint16 = 1 << 11\n\tLLDPMAUPMD100BaseTX_FD uint16 = 1 << 10\n\tLLDPMAUPMD100BaseT2    uint16 = 1 << 9\n\tLLDPMAUPMD100BaseT2_FD uint16 = 1 << 8\n\tLLDPMAUPMDFDXPAUSE     uint16 = 1 << 7\n\tLLDPMAUPMDFDXAPAUSE    uint16 = 1 << 6\n\tLLDPMAUPMDFDXSPAUSE    uint16 = 1 << 5\n\tLLDPMAUPMDFDXBPAUSE    uint16 = 1 << 4\n\tLLDPMAUPMD1000BaseX    uint16 = 1 << 3\n\tLLDPMAUPMD1000BaseX_FD uint16 = 1 << 2\n\tLLDPMAUPMD1000BaseT    uint16 = 1 << 1\n\tLLDPMAUPMD1000BaseT_FD uint16 = 1 << 0\n)\n\n// Inverted ifMauAutoNegCapAdvertisedBits if required\n// (Some manufacturers misinterpreted the spec -\n// see https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=1455)\nconst (\n\tLLDPMAUPMDOtherInv        uint16 = 1 << 0\n\tLLDPMAUPMD10BaseTInv      uint16 = 1 << 1\n\tLLDPMAUPMD10BaseT_FDInv   uint16 = 1 << 2\n\tLLDPMAUPMD100BaseT4Inv    uint16 = 1 << 3\n\tLLDPMAUPMD100BaseTXInv    uint16 = 1 << 4\n\tLLDPMAUPMD100BaseTX_FDInv uint16 = 1 << 5\n\tLLDPMAUPMD100BaseT2Inv    uint16 = 1 << 6\n\tLLDPMAUPMD100BaseT2_FDInv uint16 = 1 << 7\n\tLLDPMAUPMDFDXPAUSEInv     uint16 = 1 << 8\n\tLLDPMAUPMDFDXAPAUSEInv    uint16 = 1 << 9\n\tLLDPMAUPMDFDXSPAUSEInv    uint16 = 1 << 10\n\tLLDPMAUPMDFDXBPAUSEInv    uint16 = 1 << 11\n\tLLDPMAUPMD1000BaseXInv    uint16 = 1 << 12\n\tLLDPMAUPMD1000BaseX_FDInv uint16 = 1 << 13\n\tLLDPMAUPMD1000BaseTInv    uint16 = 1 << 14\n\tLLDPMAUPMD1000BaseT_FDInv uint16 = 1 << 15\n)\n\ntype LLDPMACPHYConfigStatus struct {\n\tAutoNegSupported  bool\n\tAutoNegEnabled    bool\n\tAutoNegCapability uint16\n\tMAUType           uint16\n}\n\n// MDI Power options\nconst (\n\tLLDPMDIPowerPortClass    byte = 1 << 0\n\tLLDPMDIPowerCapability   byte = 1 << 1\n\tLLDPMDIPowerStatus       byte = 1 << 2\n\tLLDPMDIPowerPairsAbility byte = 1 << 3\n)\n\ntype LLDPPowerType byte\n\ntype LLDPPowerSource byte\n\ntype LLDPPowerPriority byte\n\nconst (\n\tLLDPPowerPriorityUnknown LLDPPowerPriority = 0\n\tLLDPPowerPriorityMedium  LLDPPowerPriority = 1\n\tLLDPPowerPriorityHigh    LLDPPowerPriority = 2\n\tLLDPPowerPriorityLow     LLDPPowerPriority = 3\n)\n\ntype LLDPPowerViaMDI8023 struct {\n\tPortClassPSE    bool // false = PD\n\tPSESupported    bool\n\tPSEEnabled      bool\n\tPSEPairsAbility bool\n\tPSEPowerPair    uint8\n\tPSEClass        uint8\n\tType            LLDPPowerType\n\tSource          LLDPPowerSource\n\tPriority        LLDPPowerPriority\n\tRequested       uint16 // 1-510 Watts\n\tAllocated       uint16 // 1-510 Watts\n}\n\n// LLDPInfo8023 represents the information carried in 802.3 Org-specific TLVs\ntype LLDPInfo8023 struct {\n\tMACPHYConfigStatus LLDPMACPHYConfigStatus\n\tPowerViaMDI        LLDPPowerViaMDI8023\n\tLinkAggregation    LLDPLinkAggregation\n\tMTU                uint16\n}\n\n// IEEE 802.1Qbg TLV Subtypes\nconst (\n\tLLDP8021QbgEVB   uint8 = 0\n\tLLDP8021QbgCDCP  uint8 = 1\n\tLLDP8021QbgVDP   uint8 = 2\n\tLLDP8021QbgEVB22 uint8 = 13\n)\n\n// LLDPEVBCapabilities Types\nconst (\n\tLLDPEVBCapsSTD uint16 = 1 << 7\n\tLLDPEVBCapsRR  uint16 = 1 << 6\n\tLLDPEVBCapsRTE uint16 = 1 << 2\n\tLLDPEVBCapsECP uint16 = 1 << 1\n\tLLDPEVBCapsVDP uint16 = 1 << 0\n)\n\n// LLDPEVBCapabilities represents the EVB capabilities of a device\ntype LLDPEVBCapabilities struct {\n\tStandardBridging            bool\n\tReflectiveRelay             bool\n\tRetransmissionTimerExponent bool\n\tEdgeControlProtocol         bool\n\tVSIDiscoveryProtocol        bool\n}\n\ntype LLDPEVBSettings struct {\n\tSupported      LLDPEVBCapabilities\n\tEnabled        LLDPEVBCapabilities\n\tSupportedVSIs  uint16\n\tConfiguredVSIs uint16\n\tRTEExponent    uint8\n}\n\n// LLDPInfo8021Qbg represents the information carried in 802.1Qbg Org-specific TLVs\ntype LLDPInfo8021Qbg struct {\n\tEVBSettings LLDPEVBSettings\n}\n\ntype LLDPMediaSubtype uint8\n\n// Media TLV Subtypes\nconst (\n\tLLDPMediaTypeCapabilities LLDPMediaSubtype = 1\n\tLLDPMediaTypeNetwork      LLDPMediaSubtype = 2\n\tLLDPMediaTypeLocation     LLDPMediaSubtype = 3\n\tLLDPMediaTypePower        LLDPMediaSubtype = 4\n\tLLDPMediaTypeHardware     LLDPMediaSubtype = 5\n\tLLDPMediaTypeFirmware     LLDPMediaSubtype = 6\n\tLLDPMediaTypeSoftware     LLDPMediaSubtype = 7\n\tLLDPMediaTypeSerial       LLDPMediaSubtype = 8\n\tLLDPMediaTypeManufacturer LLDPMediaSubtype = 9\n\tLLDPMediaTypeModel        LLDPMediaSubtype = 10\n\tLLDPMediaTypeAssetID      LLDPMediaSubtype = 11\n)\n\ntype LLDPMediaClass uint8\n\n// Media Class Values\nconst (\n\tLLDPMediaClassUndefined   LLDPMediaClass = 0\n\tLLDPMediaClassEndpointI   LLDPMediaClass = 1\n\tLLDPMediaClassEndpointII  LLDPMediaClass = 2\n\tLLDPMediaClassEndpointIII LLDPMediaClass = 3\n\tLLDPMediaClassNetwork     LLDPMediaClass = 4\n)\n\n// LLDPMediaCapabilities Types\nconst (\n\tLLDPMediaCapsLLDP      uint16 = 1 << 0\n\tLLDPMediaCapsNetwork   uint16 = 1 << 1\n\tLLDPMediaCapsLocation  uint16 = 1 << 2\n\tLLDPMediaCapsPowerPSE  uint16 = 1 << 3\n\tLLDPMediaCapsPowerPD   uint16 = 1 << 4\n\tLLDPMediaCapsInventory uint16 = 1 << 5\n)\n\n// LLDPMediaCapabilities represents the LLDP Media capabilities of a device\ntype LLDPMediaCapabilities struct {\n\tCapabilities  bool\n\tNetworkPolicy bool\n\tLocation      bool\n\tPowerPSE      bool\n\tPowerPD       bool\n\tInventory     bool\n\tClass         LLDPMediaClass\n}\n\ntype LLDPApplicationType uint8\n\nconst (\n\tLLDPAppTypeReserved            LLDPApplicationType = 0\n\tLLDPAppTypeVoice               LLDPApplicationType = 1\n\tLLDPappTypeVoiceSignaling      LLDPApplicationType = 2\n\tLLDPappTypeGuestVoice          LLDPApplicationType = 3\n\tLLDPappTypeGuestVoiceSignaling LLDPApplicationType = 4\n\tLLDPappTypeSoftphoneVoice      LLDPApplicationType = 5\n\tLLDPappTypeVideoConferencing   LLDPApplicationType = 6\n\tLLDPappTypeStreamingVideo      LLDPApplicationType = 7\n\tLLDPappTypeVideoSignaling      LLDPApplicationType = 8\n)\n\ntype LLDPNetworkPolicy struct {\n\tApplicationType LLDPApplicationType\n\tDefined         bool\n\tTagged          bool\n\tVLANId          uint16\n\tL2Priority      uint16\n\tDSCPValue       uint8\n}\n\ntype LLDPLocationFormat uint8\n\nconst (\n\tLLDPLocationFormatInvalid    LLDPLocationFormat = 0\n\tLLDPLocationFormatCoordinate LLDPLocationFormat = 1\n\tLLDPLocationFormatAddress    LLDPLocationFormat = 2\n\tLLDPLocationFormatECS        LLDPLocationFormat = 3\n)\n\ntype LLDPLocationAddressWhat uint8\n\nconst (\n\tLLDPLocationAddressWhatDHCP    LLDPLocationAddressWhat = 0\n\tLLDPLocationAddressWhatNetwork LLDPLocationAddressWhat = 1\n\tLLDPLocationAddressWhatClient  LLDPLocationAddressWhat = 2\n)\n\ntype LLDPLocationAddressType uint8\n\nconst (\n\tLLDPLocationAddressTypeLanguage       LLDPLocationAddressType = 0\n\tLLDPLocationAddressTypeNational       LLDPLocationAddressType = 1\n\tLLDPLocationAddressTypeCounty         LLDPLocationAddressType = 2\n\tLLDPLocationAddressTypeCity           LLDPLocationAddressType = 3\n\tLLDPLocationAddressTypeCityDivision   LLDPLocationAddressType = 4\n\tLLDPLocationAddressTypeNeighborhood   LLDPLocationAddressType = 5\n\tLLDPLocationAddressTypeStreet         LLDPLocationAddressType = 6\n\tLLDPLocationAddressTypeLeadingStreet  LLDPLocationAddressType = 16\n\tLLDPLocationAddressTypeTrailingStreet LLDPLocationAddressType = 17\n\tLLDPLocationAddressTypeStreetSuffix   LLDPLocationAddressType = 18\n\tLLDPLocationAddressTypeHouseNum       LLDPLocationAddressType = 19\n\tLLDPLocationAddressTypeHouseSuffix    LLDPLocationAddressType = 20\n\tLLDPLocationAddressTypeLandmark       LLDPLocationAddressType = 21\n\tLLDPLocationAddressTypeAdditional     LLDPLocationAddressType = 22\n\tLLDPLocationAddressTypeName           LLDPLocationAddressType = 23\n\tLLDPLocationAddressTypePostal         LLDPLocationAddressType = 24\n\tLLDPLocationAddressTypeBuilding       LLDPLocationAddressType = 25\n\tLLDPLocationAddressTypeUnit           LLDPLocationAddressType = 26\n\tLLDPLocationAddressTypeFloor          LLDPLocationAddressType = 27\n\tLLDPLocationAddressTypeRoom           LLDPLocationAddressType = 28\n\tLLDPLocationAddressTypePlace          LLDPLocationAddressType = 29\n\tLLDPLocationAddressTypeScript         LLDPLocationAddressType = 128\n)\n\ntype LLDPLocationCoordinate struct {\n\tLatitudeResolution  uint8\n\tLatitude            uint64\n\tLongitudeResolution uint8\n\tLongitude           uint64\n\tAltitudeType        uint8\n\tAltitudeResolution  uint16\n\tAltitude            uint32\n\tDatum               uint8\n}\n\ntype LLDPLocationAddressLine struct {\n\tType  LLDPLocationAddressType\n\tValue string\n}\n\ntype LLDPLocationAddress struct {\n\tWhat         LLDPLocationAddressWhat\n\tCountryCode  string\n\tAddressLines []LLDPLocationAddressLine\n}\n\ntype LLDPLocationECS struct {\n\tELIN string\n}\n\n// LLDP represents a physical location.\n// Only one of the embedded types will contain values, depending on Format.\ntype LLDPLocation struct {\n\tFormat     LLDPLocationFormat\n\tCoordinate LLDPLocationCoordinate\n\tAddress    LLDPLocationAddress\n\tECS        LLDPLocationECS\n}\n\ntype LLDPPowerViaMDI struct {\n\tType     LLDPPowerType\n\tSource   LLDPPowerSource\n\tPriority LLDPPowerPriority\n\tValue    uint16\n}\n\n// LLDPInfoMedia represents the information carried in TR-41 Org-specific TLVs\ntype LLDPInfoMedia struct {\n\tMediaCapabilities LLDPMediaCapabilities\n\tNetworkPolicy     LLDPNetworkPolicy\n\tLocation          LLDPLocation\n\tPowerViaMDI       LLDPPowerViaMDI\n\tHardwareRevision  string\n\tFirmwareRevision  string\n\tSoftwareRevision  string\n\tSerialNumber      string\n\tManufacturer      string\n\tModel             string\n\tAssetID           string\n}\n\ntype LLDPCisco2Subtype uint8\n\n// Cisco2 TLV Subtypes\nconst (\n\tLLDPCisco2PowerViaMDI LLDPCisco2Subtype = 1\n)\n\nconst (\n\tLLDPCiscoPSESupport   uint8 = 1 << 0\n\tLLDPCiscoArchShared   uint8 = 1 << 1\n\tLLDPCiscoPDSparePair  uint8 = 1 << 2\n\tLLDPCiscoPSESparePair uint8 = 1 << 3\n)\n\n// LLDPInfoCisco2 represents the information carried in Cisco Org-specific TLVs\ntype LLDPInfoCisco2 struct {\n\tPSEFourWirePoESupported       bool\n\tPDSparePairArchitectureShared bool\n\tPDRequestSparePairPoEOn       bool\n\tPSESparePairPoEOn             bool\n}\n\n// Profinet Subtypes\ntype LLDPProfinetSubtype uint8\n\nconst (\n\tLLDPProfinetPNIODelay         LLDPProfinetSubtype = 1\n\tLLDPProfinetPNIOPortStatus    LLDPProfinetSubtype = 2\n\tLLDPProfinetPNIOMRPPortStatus LLDPProfinetSubtype = 4\n\tLLDPProfinetPNIOChassisMAC    LLDPProfinetSubtype = 5\n\tLLDPProfinetPNIOPTCPStatus    LLDPProfinetSubtype = 6\n)\n\ntype LLDPPNIODelay struct {\n\tRXLocal    uint32\n\tRXRemote   uint32\n\tTXLocal    uint32\n\tTXRemote   uint32\n\tCableLocal uint32\n}\n\ntype LLDPPNIOPortStatus struct {\n\tClass2 uint16\n\tClass3 uint16\n}\n\ntype LLDPPNIOMRPPortStatus struct {\n\tUUID   []byte\n\tStatus uint16\n}\n\ntype LLDPPNIOPTCPStatus struct {\n\tMasterAddress     []byte\n\tSubdomainUUID     []byte\n\tIRDataUUID        []byte\n\tPeriodValid       bool\n\tPeriodLength      uint32\n\tRedPeriodValid    bool\n\tRedPeriodBegin    uint32\n\tOrangePeriodValid bool\n\tOrangePeriodBegin uint32\n\tGreenPeriodValid  bool\n\tGreenPeriodBegin  uint32\n}\n\n// LLDPInfoProfinet represents the information carried in Profinet Org-specific TLVs\ntype LLDPInfoProfinet struct {\n\tPNIODelay         LLDPPNIODelay\n\tPNIOPortStatus    LLDPPNIOPortStatus\n\tPNIOMRPPortStatus LLDPPNIOMRPPortStatus\n\tChassisMAC        []byte\n\tPNIOPTCPStatus    LLDPPNIOPTCPStatus\n}\n\n// LayerType returns gopacket.LayerTypeLinkLayerDiscovery.\nfunc (c *LinkLayerDiscovery) LayerType() gopacket.LayerType {\n\treturn LayerTypeLinkLayerDiscovery\n}\n\n// SerializeTo serializes LLDP packet to bytes and writes on SerializeBuffer.\nfunc (c *LinkLayerDiscovery) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tchassIDLen := c.ChassisID.serializedLen()\n\tportIDLen := c.PortID.serializedLen()\n\tvb, err := b.AppendBytes(chassIDLen + portIDLen + 4) // +4 for TTL\n\tif err != nil {\n\t\treturn err\n\t}\n\tcopy(vb[:chassIDLen], c.ChassisID.serialize())\n\tcopy(vb[chassIDLen:], c.PortID.serialize())\n\tttlIDLen := uint16(LLDPTLVTTL)<<9 | uint16(2)\n\tbinary.BigEndian.PutUint16(vb[chassIDLen+portIDLen:], ttlIDLen)\n\tbinary.BigEndian.PutUint16(vb[chassIDLen+portIDLen+2:], c.TTL)\n\n\tfor _, v := range c.Values {\n\t\tvb, err := b.AppendBytes(int(v.Length) + 2) // +2 for TLV type and length; 1 byte for subtype is included in v.Value\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tidLen := ((uint16(v.Type) << 9) | v.Length)\n\t\tbinary.BigEndian.PutUint16(vb[0:2], idLen)\n\t\tcopy(vb[2:], v.Value)\n\t}\n\n\tvb, err = b.AppendBytes(2) // End Tlv, 2 bytes\n\tif err != nil {\n\t\treturn err\n\t}\n\tbinary.BigEndian.PutUint16(vb[len(vb)-2:], uint16(0)) //End tlv, 2 bytes, all zero\n\treturn nil\n\n}\n\nfunc decodeLinkLayerDiscovery(data []byte, p gopacket.PacketBuilder) error {\n\tvar vals []LinkLayerDiscoveryValue\n\tvData := data[0:]\n\tfor len(vData) > 0 {\n\t\tif len(vData) < 2 {\n\t\t\tp.SetTruncated()\n\t\t\treturn errors.New(\"LLDP vdata < 2 bytes\")\n\t\t}\n\t\tnbit := vData[0] & 0x01\n\t\tt := LLDPTLVType(vData[0] >> 1)\n\t\tval := LinkLayerDiscoveryValue{Type: t, Length: uint16(nbit)<<8 + uint16(vData[1])}\n\t\tif val.Length > 0 {\n\t\t\tif len(vData) < int(val.Length+2) {\n\t\t\t\tp.SetTruncated()\n\t\t\t\treturn fmt.Errorf(\"LLDP VData < %d bytes\", val.Length+2)\n\t\t\t}\n\t\t\tval.Value = vData[2 : val.Length+2]\n\t\t}\n\t\tvals = append(vals, val)\n\t\tif t == LLDPTLVEnd {\n\t\t\tbreak\n\t\t}\n\t\tif len(vData) < int(2+val.Length) {\n\t\t\treturn errors.New(\"Malformed LinkLayerDiscovery Header\")\n\t\t}\n\t\tvData = vData[2+val.Length:]\n\t}\n\tif len(vals) < 4 {\n\t\treturn errors.New(\"Missing mandatory LinkLayerDiscovery TLV\")\n\t}\n\tc := &LinkLayerDiscovery{}\n\tgotEnd := false\n\tfor _, v := range vals {\n\t\tswitch v.Type {\n\t\tcase LLDPTLVEnd:\n\t\t\tgotEnd = true\n\t\tcase LLDPTLVChassisID:\n\t\t\tif len(v.Value) < 2 {\n\t\t\t\treturn errors.New(\"Malformed LinkLayerDiscovery ChassisID TLV\")\n\t\t\t}\n\t\t\tc.ChassisID.Subtype = LLDPChassisIDSubType(v.Value[0])\n\t\t\tc.ChassisID.ID = v.Value[1:]\n\t\tcase LLDPTLVPortID:\n\t\t\tif len(v.Value) < 2 {\n\t\t\t\treturn errors.New(\"Malformed LinkLayerDiscovery PortID TLV\")\n\t\t\t}\n\t\t\tc.PortID.Subtype = LLDPPortIDSubType(v.Value[0])\n\t\t\tc.PortID.ID = v.Value[1:]\n\t\tcase LLDPTLVTTL:\n\t\t\tif len(v.Value) < 2 {\n\t\t\t\treturn errors.New(\"Malformed LinkLayerDiscovery TTL TLV\")\n\t\t\t}\n\t\t\tc.TTL = binary.BigEndian.Uint16(v.Value[0:2])\n\t\tdefault:\n\t\t\tc.Values = append(c.Values, v)\n\t\t}\n\t}\n\tif c.ChassisID.Subtype == 0 || c.PortID.Subtype == 0 || !gotEnd {\n\t\treturn errors.New(\"Missing mandatory LinkLayerDiscovery TLV\")\n\t}\n\tc.Contents = data\n\tp.AddLayer(c)\n\n\tinfo := &LinkLayerDiscoveryInfo{}\n\tp.AddLayer(info)\n\tfor _, v := range c.Values {\n\t\tswitch v.Type {\n\t\tcase LLDPTLVPortDescription:\n\t\t\tinfo.PortDescription = string(v.Value)\n\t\tcase LLDPTLVSysName:\n\t\t\tinfo.SysName = string(v.Value)\n\t\tcase LLDPTLVSysDescription:\n\t\t\tinfo.SysDescription = string(v.Value)\n\t\tcase LLDPTLVSysCapabilities:\n\t\t\tif err := checkLLDPTLVLen(v, 4); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.SysCapabilities.SystemCap = getCapabilities(binary.BigEndian.Uint16(v.Value[0:2]))\n\t\t\tinfo.SysCapabilities.EnabledCap = getCapabilities(binary.BigEndian.Uint16(v.Value[2:4]))\n\t\tcase LLDPTLVMgmtAddress:\n\t\t\tif err := checkLLDPTLVLen(v, 9); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tmlen := v.Value[0]\n\t\t\tif err := checkLLDPTLVLen(v, int(mlen+7)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.MgmtAddress.Subtype = IANAAddressFamily(v.Value[1])\n\t\t\tinfo.MgmtAddress.Address = v.Value[2 : mlen+1]\n\t\t\tinfo.MgmtAddress.InterfaceSubtype = LLDPInterfaceSubtype(v.Value[mlen+1])\n\t\t\tinfo.MgmtAddress.InterfaceNumber = binary.BigEndian.Uint32(v.Value[mlen+2 : mlen+6])\n\t\t\tolen := v.Value[mlen+6]\n\t\t\tif err := checkLLDPTLVLen(v, int(mlen+7+olen)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.MgmtAddress.OID = string(v.Value[mlen+7 : mlen+7+olen])\n\t\tcase LLDPTLVOrgSpecific:\n\t\t\tif err := checkLLDPTLVLen(v, 4); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tinfo.OrgTLVs = append(info.OrgTLVs, LLDPOrgSpecificTLV{IEEEOUI(binary.BigEndian.Uint32(append([]byte{byte(0)}, v.Value[0:3]...))), uint8(v.Value[3]), v.Value[4:]})\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (l *LinkLayerDiscoveryInfo) Decode8021() (info LLDPInfo8021, err error) {\n\tfor _, o := range l.OrgTLVs {\n\t\tif o.OUI != IEEEOUI8021 {\n\t\t\tcontinue\n\t\t}\n\t\tswitch o.SubType {\n\t\tcase LLDP8021SubtypePortVLANID:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 2); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.PVID = binary.BigEndian.Uint16(o.Info[0:2])\n\t\tcase LLDP8021SubtypeProtocolVLANID:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 3); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsup := (o.Info[0]&LLDPProtocolVLANIDCapability > 0)\n\t\t\ten := (o.Info[0]&LLDPProtocolVLANIDStatus > 0)\n\t\t\tid := binary.BigEndian.Uint16(o.Info[1:3])\n\t\t\tinfo.PPVIDs = append(info.PPVIDs, PortProtocolVLANID{sup, en, id})\n\t\tcase LLDP8021SubtypeVLANName:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 2); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tid := binary.BigEndian.Uint16(o.Info[0:2])\n\t\t\tinfo.VLANNames = append(info.VLANNames, VLANName{id, string(o.Info[3:])})\n\t\tcase LLDP8021SubtypeProtocolIdentity:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 1); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tl := int(o.Info[0])\n\t\t\tif l > 0 {\n\t\t\t\tinfo.ProtocolIdentities = append(info.ProtocolIdentities, o.Info[1:1+l])\n\t\t\t}\n\t\tcase LLDP8021SubtypeVDIUsageDigest:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 4); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.VIDUsageDigest = binary.BigEndian.Uint32(o.Info[0:4])\n\t\tcase LLDP8021SubtypeManagementVID:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 2); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.ManagementVID = binary.BigEndian.Uint16(o.Info[0:2])\n\t\tcase LLDP8021SubtypeLinkAggregation:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 5); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsup := (o.Info[0]&LLDPAggregationCapability > 0)\n\t\t\ten := (o.Info[0]&LLDPAggregationStatus > 0)\n\t\t\tinfo.LinkAggregation = LLDPLinkAggregation{sup, en, binary.BigEndian.Uint32(o.Info[1:5])}\n\t\t}\n\t}\n\treturn\n}\n\nfunc (l *LinkLayerDiscoveryInfo) Decode8023() (info LLDPInfo8023, err error) {\n\tfor _, o := range l.OrgTLVs {\n\t\tif o.OUI != IEEEOUI8023 {\n\t\t\tcontinue\n\t\t}\n\t\tswitch o.SubType {\n\t\tcase LLDP8023SubtypeMACPHY:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 5); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsup := (o.Info[0]&LLDPMACPHYCapability > 0)\n\t\t\ten := (o.Info[0]&LLDPMACPHYStatus > 0)\n\t\t\tca := binary.BigEndian.Uint16(o.Info[1:3])\n\t\t\tmau := binary.BigEndian.Uint16(o.Info[3:5])\n\t\t\tinfo.MACPHYConfigStatus = LLDPMACPHYConfigStatus{sup, en, ca, mau}\n\t\tcase LLDP8023SubtypeMDIPower:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 3); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.PowerViaMDI.PortClassPSE = (o.Info[0]&LLDPMDIPowerPortClass > 0)\n\t\t\tinfo.PowerViaMDI.PSESupported = (o.Info[0]&LLDPMDIPowerCapability > 0)\n\t\t\tinfo.PowerViaMDI.PSEEnabled = (o.Info[0]&LLDPMDIPowerStatus > 0)\n\t\t\tinfo.PowerViaMDI.PSEPairsAbility = (o.Info[0]&LLDPMDIPowerPairsAbility > 0)\n\t\t\tinfo.PowerViaMDI.PSEPowerPair = uint8(o.Info[1])\n\t\t\tinfo.PowerViaMDI.PSEClass = uint8(o.Info[2])\n\t\t\tif len(o.Info) >= 7 {\n\t\t\t\tinfo.PowerViaMDI.Type = LLDPPowerType((o.Info[3] & 0xc0) >> 6)\n\t\t\t\tinfo.PowerViaMDI.Source = LLDPPowerSource((o.Info[3] & 0x30) >> 4)\n\t\t\t\tif info.PowerViaMDI.Type == 1 || info.PowerViaMDI.Type == 3 {\n\t\t\t\t\tinfo.PowerViaMDI.Source += 128 // For Stringify purposes\n\t\t\t\t}\n\t\t\t\tinfo.PowerViaMDI.Priority = LLDPPowerPriority(o.Info[3] & 0x0f)\n\t\t\t\tinfo.PowerViaMDI.Requested = binary.BigEndian.Uint16(o.Info[4:6])\n\t\t\t\tinfo.PowerViaMDI.Allocated = binary.BigEndian.Uint16(o.Info[6:8])\n\t\t\t}\n\t\tcase LLDP8023SubtypeLinkAggregation:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 5); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsup := (o.Info[0]&LLDPAggregationCapability > 0)\n\t\t\ten := (o.Info[0]&LLDPAggregationStatus > 0)\n\t\t\tinfo.LinkAggregation = LLDPLinkAggregation{sup, en, binary.BigEndian.Uint32(o.Info[1:5])}\n\t\tcase LLDP8023SubtypeMTU:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 2); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.MTU = binary.BigEndian.Uint16(o.Info[0:2])\n\t\t}\n\t}\n\treturn\n}\n\nfunc (l *LinkLayerDiscoveryInfo) Decode8021Qbg() (info LLDPInfo8021Qbg, err error) {\n\tfor _, o := range l.OrgTLVs {\n\t\tif o.OUI != IEEEOUI8021Qbg {\n\t\t\tcontinue\n\t\t}\n\t\tswitch o.SubType {\n\t\tcase LLDP8021QbgEVB:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 9); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.EVBSettings.Supported = getEVBCapabilities(binary.BigEndian.Uint16(o.Info[0:2]))\n\t\t\tinfo.EVBSettings.Enabled = getEVBCapabilities(binary.BigEndian.Uint16(o.Info[2:4]))\n\t\t\tinfo.EVBSettings.SupportedVSIs = binary.BigEndian.Uint16(o.Info[4:6])\n\t\t\tinfo.EVBSettings.ConfiguredVSIs = binary.BigEndian.Uint16(o.Info[6:8])\n\t\t\tinfo.EVBSettings.RTEExponent = uint8(o.Info[8])\n\t\t}\n\t}\n\treturn\n}\n\nfunc (l *LinkLayerDiscoveryInfo) DecodeMedia() (info LLDPInfoMedia, err error) {\n\tfor _, o := range l.OrgTLVs {\n\t\tif o.OUI != IEEEOUIMedia {\n\t\t\tcontinue\n\t\t}\n\t\tswitch LLDPMediaSubtype(o.SubType) {\n\t\tcase LLDPMediaTypeCapabilities:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 3); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tb := binary.BigEndian.Uint16(o.Info[0:2])\n\t\t\tinfo.MediaCapabilities.Capabilities = (b & LLDPMediaCapsLLDP) > 0\n\t\t\tinfo.MediaCapabilities.NetworkPolicy = (b & LLDPMediaCapsNetwork) > 0\n\t\t\tinfo.MediaCapabilities.Location = (b & LLDPMediaCapsLocation) > 0\n\t\t\tinfo.MediaCapabilities.PowerPSE = (b & LLDPMediaCapsPowerPSE) > 0\n\t\t\tinfo.MediaCapabilities.PowerPD = (b & LLDPMediaCapsPowerPD) > 0\n\t\t\tinfo.MediaCapabilities.Inventory = (b & LLDPMediaCapsInventory) > 0\n\t\t\tinfo.MediaCapabilities.Class = LLDPMediaClass(o.Info[2])\n\t\tcase LLDPMediaTypeNetwork:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 4); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.NetworkPolicy.ApplicationType = LLDPApplicationType(o.Info[0])\n\t\t\tb := binary.BigEndian.Uint16(o.Info[1:3])\n\t\t\tinfo.NetworkPolicy.Defined = (b & 0x8000) == 0\n\t\t\tinfo.NetworkPolicy.Tagged = (b & 0x4000) > 0\n\t\t\tinfo.NetworkPolicy.VLANId = (b & 0x1ffe) >> 1\n\t\t\tb = binary.BigEndian.Uint16(o.Info[2:4])\n\t\t\tinfo.NetworkPolicy.L2Priority = (b & 0x01c0) >> 6\n\t\t\tinfo.NetworkPolicy.DSCPValue = uint8(o.Info[3] & 0x3f)\n\t\tcase LLDPMediaTypeLocation:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 1); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.Location.Format = LLDPLocationFormat(o.Info[0])\n\t\t\to.Info = o.Info[1:]\n\t\t\tswitch info.Location.Format {\n\t\t\tcase LLDPLocationFormatCoordinate:\n\t\t\t\tif err = checkLLDPOrgSpecificLen(o, 16); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tinfo.Location.Coordinate.LatitudeResolution = uint8(o.Info[0]&0xfc) >> 2\n\t\t\t\tb := binary.BigEndian.Uint64(o.Info[0:8])\n\t\t\t\tinfo.Location.Coordinate.Latitude = (b & 0x03ffffffff000000) >> 24\n\t\t\t\tinfo.Location.Coordinate.LongitudeResolution = uint8(o.Info[5]&0xfc) >> 2\n\t\t\t\tb = binary.BigEndian.Uint64(o.Info[5:13])\n\t\t\t\tinfo.Location.Coordinate.Longitude = (b & 0x03ffffffff000000) >> 24\n\t\t\t\tinfo.Location.Coordinate.AltitudeType = uint8((o.Info[10] & 0x30) >> 4)\n\t\t\t\tb1 := binary.BigEndian.Uint16(o.Info[10:12])\n\t\t\t\tinfo.Location.Coordinate.AltitudeResolution = (b1 & 0xfc0) >> 6\n\t\t\t\tb2 := binary.BigEndian.Uint32(o.Info[11:15])\n\t\t\t\tinfo.Location.Coordinate.Altitude = b2 & 0x3fffffff\n\t\t\t\tinfo.Location.Coordinate.Datum = uint8(o.Info[15])\n\t\t\tcase LLDPLocationFormatAddress:\n\t\t\t\tif err = checkLLDPOrgSpecificLen(o, 3); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t//ll := uint8(o.Info[0])\n\t\t\t\tinfo.Location.Address.What = LLDPLocationAddressWhat(o.Info[1])\n\t\t\t\tinfo.Location.Address.CountryCode = string(o.Info[2:4])\n\t\t\t\tdata := o.Info[4:]\n\t\t\t\tfor len(data) > 1 {\n\t\t\t\t\taType := LLDPLocationAddressType(data[0])\n\t\t\t\t\taLen := int(data[1])\n\t\t\t\t\tif len(data) >= aLen+2 {\n\t\t\t\t\t\tinfo.Location.Address.AddressLines = append(info.Location.Address.AddressLines, LLDPLocationAddressLine{aType, string(data[2 : aLen+2])})\n\t\t\t\t\t\tdata = data[aLen+2:]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase LLDPLocationFormatECS:\n\t\t\t\tinfo.Location.ECS.ELIN = string(o.Info)\n\t\t\t}\n\t\tcase LLDPMediaTypePower:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 3); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.PowerViaMDI.Type = LLDPPowerType((o.Info[0] & 0xc0) >> 6)\n\t\t\tinfo.PowerViaMDI.Source = LLDPPowerSource((o.Info[0] & 0x30) >> 4)\n\t\t\tif info.PowerViaMDI.Type == 1 || info.PowerViaMDI.Type == 3 {\n\t\t\t\tinfo.PowerViaMDI.Source += 128 // For Stringify purposes\n\t\t\t}\n\t\t\tinfo.PowerViaMDI.Priority = LLDPPowerPriority(o.Info[0] & 0x0f)\n\t\t\tinfo.PowerViaMDI.Value = binary.BigEndian.Uint16(o.Info[1:3]) * 100 // 0 to 102.3 w, 0.1W increments\n\t\tcase LLDPMediaTypeHardware:\n\t\t\tinfo.HardwareRevision = string(o.Info)\n\t\tcase LLDPMediaTypeFirmware:\n\t\t\tinfo.FirmwareRevision = string(o.Info)\n\t\tcase LLDPMediaTypeSoftware:\n\t\t\tinfo.SoftwareRevision = string(o.Info)\n\t\tcase LLDPMediaTypeSerial:\n\t\t\tinfo.SerialNumber = string(o.Info)\n\t\tcase LLDPMediaTypeManufacturer:\n\t\t\tinfo.Manufacturer = string(o.Info)\n\t\tcase LLDPMediaTypeModel:\n\t\t\tinfo.Model = string(o.Info)\n\t\tcase LLDPMediaTypeAssetID:\n\t\t\tinfo.AssetID = string(o.Info)\n\t\t}\n\t}\n\treturn\n}\n\nfunc (l *LinkLayerDiscoveryInfo) DecodeCisco2() (info LLDPInfoCisco2, err error) {\n\tfor _, o := range l.OrgTLVs {\n\t\tif o.OUI != IEEEOUICisco2 {\n\t\t\tcontinue\n\t\t}\n\t\tswitch LLDPCisco2Subtype(o.SubType) {\n\t\tcase LLDPCisco2PowerViaMDI:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 1); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.PSEFourWirePoESupported = (o.Info[0] & LLDPCiscoPSESupport) > 0\n\t\t\tinfo.PDSparePairArchitectureShared = (o.Info[0] & LLDPCiscoArchShared) > 0\n\t\t\tinfo.PDRequestSparePairPoEOn = (o.Info[0] & LLDPCiscoPDSparePair) > 0\n\t\t\tinfo.PSESparePairPoEOn = (o.Info[0] & LLDPCiscoPSESparePair) > 0\n\t\t}\n\t}\n\treturn\n}\n\nfunc (l *LinkLayerDiscoveryInfo) DecodeProfinet() (info LLDPInfoProfinet, err error) {\n\tfor _, o := range l.OrgTLVs {\n\t\tif o.OUI != IEEEOUIProfinet {\n\t\t\tcontinue\n\t\t}\n\t\tswitch LLDPProfinetSubtype(o.SubType) {\n\t\tcase LLDPProfinetPNIODelay:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 20); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.PNIODelay.RXLocal = binary.BigEndian.Uint32(o.Info[0:4])\n\t\t\tinfo.PNIODelay.RXRemote = binary.BigEndian.Uint32(o.Info[4:8])\n\t\t\tinfo.PNIODelay.TXLocal = binary.BigEndian.Uint32(o.Info[8:12])\n\t\t\tinfo.PNIODelay.TXRemote = binary.BigEndian.Uint32(o.Info[12:16])\n\t\t\tinfo.PNIODelay.CableLocal = binary.BigEndian.Uint32(o.Info[16:20])\n\t\tcase LLDPProfinetPNIOPortStatus:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 4); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.PNIOPortStatus.Class2 = binary.BigEndian.Uint16(o.Info[0:2])\n\t\t\tinfo.PNIOPortStatus.Class3 = binary.BigEndian.Uint16(o.Info[2:4])\n\t\tcase LLDPProfinetPNIOMRPPortStatus:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 18); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.PNIOMRPPortStatus.UUID = o.Info[0:16]\n\t\t\tinfo.PNIOMRPPortStatus.Status = binary.BigEndian.Uint16(o.Info[16:18])\n\t\tcase LLDPProfinetPNIOChassisMAC:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 6); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.ChassisMAC = o.Info[0:6]\n\t\tcase LLDPProfinetPNIOPTCPStatus:\n\t\t\tif err = checkLLDPOrgSpecificLen(o, 54); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tinfo.PNIOPTCPStatus.MasterAddress = o.Info[0:6]\n\t\t\tinfo.PNIOPTCPStatus.SubdomainUUID = o.Info[6:22]\n\t\t\tinfo.PNIOPTCPStatus.IRDataUUID = o.Info[22:38]\n\t\t\tb := binary.BigEndian.Uint32(o.Info[38:42])\n\t\t\tinfo.PNIOPTCPStatus.PeriodValid = (b & 0x80000000) > 0\n\t\t\tinfo.PNIOPTCPStatus.PeriodLength = b & 0x7fffffff\n\t\t\tb = binary.BigEndian.Uint32(o.Info[42:46])\n\t\t\tinfo.PNIOPTCPStatus.RedPeriodValid = (b & 0x80000000) > 0\n\t\t\tinfo.PNIOPTCPStatus.RedPeriodBegin = b & 0x7fffffff\n\t\t\tb = binary.BigEndian.Uint32(o.Info[46:50])\n\t\t\tinfo.PNIOPTCPStatus.OrangePeriodValid = (b & 0x80000000) > 0\n\t\t\tinfo.PNIOPTCPStatus.OrangePeriodBegin = b & 0x7fffffff\n\t\t\tb = binary.BigEndian.Uint32(o.Info[50:54])\n\t\t\tinfo.PNIOPTCPStatus.GreenPeriodValid = (b & 0x80000000) > 0\n\t\t\tinfo.PNIOPTCPStatus.GreenPeriodBegin = b & 0x7fffffff\n\t\t}\n\t}\n\treturn\n}\n\n// LayerType returns gopacket.LayerTypeLinkLayerDiscoveryInfo.\nfunc (c *LinkLayerDiscoveryInfo) LayerType() gopacket.LayerType {\n\treturn LayerTypeLinkLayerDiscoveryInfo\n}\n\nfunc getCapabilities(v uint16) (c LLDPCapabilities) {\n\tc.Other = (v&LLDPCapsOther > 0)\n\tc.Repeater = (v&LLDPCapsRepeater > 0)\n\tc.Bridge = (v&LLDPCapsBridge > 0)\n\tc.WLANAP = (v&LLDPCapsWLANAP > 0)\n\tc.Router = (v&LLDPCapsRouter > 0)\n\tc.Phone = (v&LLDPCapsPhone > 0)\n\tc.DocSis = (v&LLDPCapsDocSis > 0)\n\tc.StationOnly = (v&LLDPCapsStationOnly > 0)\n\tc.CVLAN = (v&LLDPCapsCVLAN > 0)\n\tc.SVLAN = (v&LLDPCapsSVLAN > 0)\n\tc.TMPR = (v&LLDPCapsTmpr > 0)\n\treturn\n}\n\nfunc getEVBCapabilities(v uint16) (c LLDPEVBCapabilities) {\n\tc.StandardBridging = (v & LLDPEVBCapsSTD) > 0\n\tc.StandardBridging = (v & LLDPEVBCapsSTD) > 0\n\tc.ReflectiveRelay = (v & LLDPEVBCapsRR) > 0\n\tc.RetransmissionTimerExponent = (v & LLDPEVBCapsRTE) > 0\n\tc.EdgeControlProtocol = (v & LLDPEVBCapsECP) > 0\n\tc.VSIDiscoveryProtocol = (v & LLDPEVBCapsVDP) > 0\n\treturn\n}\n\nfunc (t LLDPTLVType) String() (s string) {\n\tswitch t {\n\tcase LLDPTLVEnd:\n\t\ts = \"TLV End\"\n\tcase LLDPTLVChassisID:\n\t\ts = \"Chassis ID\"\n\tcase LLDPTLVPortID:\n\t\ts = \"Port ID\"\n\tcase LLDPTLVTTL:\n\t\ts = \"TTL\"\n\tcase LLDPTLVPortDescription:\n\t\ts = \"Port Description\"\n\tcase LLDPTLVSysName:\n\t\ts = \"System Name\"\n\tcase LLDPTLVSysDescription:\n\t\ts = \"System Description\"\n\tcase LLDPTLVSysCapabilities:\n\t\ts = \"System Capabilities\"\n\tcase LLDPTLVMgmtAddress:\n\t\ts = \"Management Address\"\n\tcase LLDPTLVOrgSpecific:\n\t\ts = \"Organisation Specific\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t LLDPChassisIDSubType) String() (s string) {\n\tswitch t {\n\tcase LLDPChassisIDSubTypeReserved:\n\t\ts = \"Reserved\"\n\tcase LLDPChassisIDSubTypeChassisComp:\n\t\ts = \"Chassis Component\"\n\tcase LLDPChassisIDSubtypeIfaceAlias:\n\t\ts = \"Interface Alias\"\n\tcase LLDPChassisIDSubTypePortComp:\n\t\ts = \"Port Component\"\n\tcase LLDPChassisIDSubTypeMACAddr:\n\t\ts = \"MAC Address\"\n\tcase LLDPChassisIDSubTypeNetworkAddr:\n\t\ts = \"Network Address\"\n\tcase LLDPChassisIDSubtypeIfaceName:\n\t\ts = \"Interface Name\"\n\tcase LLDPChassisIDSubTypeLocal:\n\t\ts = \"Local\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t LLDPPortIDSubType) String() (s string) {\n\tswitch t {\n\tcase LLDPPortIDSubtypeReserved:\n\t\ts = \"Reserved\"\n\tcase LLDPPortIDSubtypeIfaceAlias:\n\t\ts = \"Interface Alias\"\n\tcase LLDPPortIDSubtypePortComp:\n\t\ts = \"Port Component\"\n\tcase LLDPPortIDSubtypeMACAddr:\n\t\ts = \"MAC Address\"\n\tcase LLDPPortIDSubtypeNetworkAddr:\n\t\ts = \"Network Address\"\n\tcase LLDPPortIDSubtypeIfaceName:\n\t\ts = \"Interface Name\"\n\tcase LLDPPortIDSubtypeAgentCircuitID:\n\t\ts = \"Agent Circuit ID\"\n\tcase LLDPPortIDSubtypeLocal:\n\t\ts = \"Local\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t IANAAddressFamily) String() (s string) {\n\tswitch t {\n\tcase IANAAddressFamilyReserved:\n\t\ts = \"Reserved\"\n\tcase IANAAddressFamilyIPV4:\n\t\ts = \"IPv4\"\n\tcase IANAAddressFamilyIPV6:\n\t\ts = \"IPv6\"\n\tcase IANAAddressFamilyNSAP:\n\t\ts = \"NSAP\"\n\tcase IANAAddressFamilyHDLC:\n\t\ts = \"HDLC\"\n\tcase IANAAddressFamilyBBN1822:\n\t\ts = \"BBN 1822\"\n\tcase IANAAddressFamily802:\n\t\ts = \"802 media plus Ethernet 'canonical format'\"\n\tcase IANAAddressFamilyE163:\n\t\ts = \"E.163\"\n\tcase IANAAddressFamilyE164:\n\t\ts = \"E.164 (SMDS, Frame Relay, ATM)\"\n\tcase IANAAddressFamilyF69:\n\t\ts = \"F.69 (Telex)\"\n\tcase IANAAddressFamilyX121:\n\t\ts = \"X.121, X.25, Frame Relay\"\n\tcase IANAAddressFamilyIPX:\n\t\ts = \"IPX\"\n\tcase IANAAddressFamilyAtalk:\n\t\ts = \"Appletalk\"\n\tcase IANAAddressFamilyDecnet:\n\t\ts = \"Decnet IV\"\n\tcase IANAAddressFamilyBanyan:\n\t\ts = \"Banyan Vines\"\n\tcase IANAAddressFamilyE164NSAP:\n\t\ts = \"E.164 with NSAP format subaddress\"\n\tcase IANAAddressFamilyDNS:\n\t\ts = \"DNS\"\n\tcase IANAAddressFamilyDistname:\n\t\ts = \"Distinguished Name\"\n\tcase IANAAddressFamilyASNumber:\n\t\ts = \"AS Number\"\n\tcase IANAAddressFamilyXTPIPV4:\n\t\ts = \"XTP over IP version 4\"\n\tcase IANAAddressFamilyXTPIPV6:\n\t\ts = \"XTP over IP version 6\"\n\tcase IANAAddressFamilyXTP:\n\t\ts = \"XTP native mode XTP\"\n\tcase IANAAddressFamilyFcWWPN:\n\t\ts = \"Fibre Channel World-Wide Port Name\"\n\tcase IANAAddressFamilyFcWWNN:\n\t\ts = \"Fibre Channel World-Wide Node Name\"\n\tcase IANAAddressFamilyGWID:\n\t\ts = \"GWID\"\n\tcase IANAAddressFamilyL2VPN:\n\t\ts = \"AFI for Layer 2 VPN\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t LLDPInterfaceSubtype) String() (s string) {\n\tswitch t {\n\tcase LLDPInterfaceSubtypeUnknown:\n\t\ts = \"Unknown\"\n\tcase LLDPInterfaceSubtypeifIndex:\n\t\ts = \"IfIndex\"\n\tcase LLDPInterfaceSubtypeSysPort:\n\t\ts = \"System Port Number\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t LLDPPowerType) String() (s string) {\n\tswitch t {\n\tcase 0:\n\t\ts = \"Type 2 PSE Device\"\n\tcase 1:\n\t\ts = \"Type 2 PD Device\"\n\tcase 2:\n\t\ts = \"Type 1 PSE Device\"\n\tcase 3:\n\t\ts = \"Type 1 PD Device\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t LLDPPowerSource) String() (s string) {\n\tswitch t {\n\t// PD Device\n\tcase 0:\n\t\ts = \"Unknown\"\n\tcase 1:\n\t\ts = \"PSE\"\n\tcase 2:\n\t\ts = \"Local\"\n\tcase 3:\n\t\ts = \"PSE and Local\"\n\t// PSE Device  (Actual value  + 128)\n\tcase 128:\n\t\ts = \"Unknown\"\n\tcase 129:\n\t\ts = \"Primary Power Source\"\n\tcase 130:\n\t\ts = \"Backup Power Source\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t LLDPPowerPriority) String() (s string) {\n\tswitch t {\n\tcase 0:\n\t\ts = \"Unknown\"\n\tcase 1:\n\t\ts = \"Critical\"\n\tcase 2:\n\t\ts = \"High\"\n\tcase 3:\n\t\ts = \"Low\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t LLDPMediaSubtype) String() (s string) {\n\tswitch t {\n\tcase LLDPMediaTypeCapabilities:\n\t\ts = \"Media Capabilities \"\n\tcase LLDPMediaTypeNetwork:\n\t\ts = \"Network Policy\"\n\tcase LLDPMediaTypeLocation:\n\t\ts = \"Location Identification\"\n\tcase LLDPMediaTypePower:\n\t\ts = \"Extended Power-via-MDI\"\n\tcase LLDPMediaTypeHardware:\n\t\ts = \"Hardware Revision\"\n\tcase LLDPMediaTypeFirmware:\n\t\ts = \"Firmware Revision\"\n\tcase LLDPMediaTypeSoftware:\n\t\ts = \"Software Revision\"\n\tcase LLDPMediaTypeSerial:\n\t\ts = \"Serial Number\"\n\tcase LLDPMediaTypeManufacturer:\n\t\ts = \"Manufacturer\"\n\tcase LLDPMediaTypeModel:\n\t\ts = \"Model\"\n\tcase LLDPMediaTypeAssetID:\n\t\ts = \"Asset ID\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t LLDPMediaClass) String() (s string) {\n\tswitch t {\n\tcase LLDPMediaClassUndefined:\n\t\ts = \"Undefined\"\n\tcase LLDPMediaClassEndpointI:\n\t\ts = \"Endpoint Class I\"\n\tcase LLDPMediaClassEndpointII:\n\t\ts = \"Endpoint Class II\"\n\tcase LLDPMediaClassEndpointIII:\n\t\ts = \"Endpoint Class III\"\n\tcase LLDPMediaClassNetwork:\n\t\ts = \"Network connectivity \"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t LLDPApplicationType) String() (s string) {\n\tswitch t {\n\tcase LLDPAppTypeReserved:\n\t\ts = \"Reserved\"\n\tcase LLDPAppTypeVoice:\n\t\ts = \"Voice\"\n\tcase LLDPappTypeVoiceSignaling:\n\t\ts = \"Voice Signaling\"\n\tcase LLDPappTypeGuestVoice:\n\t\ts = \"Guest Voice\"\n\tcase LLDPappTypeGuestVoiceSignaling:\n\t\ts = \"Guest Voice Signaling\"\n\tcase LLDPappTypeSoftphoneVoice:\n\t\ts = \"Softphone Voice\"\n\tcase LLDPappTypeVideoConferencing:\n\t\ts = \"Video Conferencing\"\n\tcase LLDPappTypeStreamingVideo:\n\t\ts = \"Streaming Video\"\n\tcase LLDPappTypeVideoSignaling:\n\t\ts = \"Video Signaling\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t LLDPLocationFormat) String() (s string) {\n\tswitch t {\n\tcase LLDPLocationFormatInvalid:\n\t\ts = \"Invalid\"\n\tcase LLDPLocationFormatCoordinate:\n\t\ts = \"Coordinate-based LCI\"\n\tcase LLDPLocationFormatAddress:\n\t\ts = \"Address-based LCO\"\n\tcase LLDPLocationFormatECS:\n\t\ts = \"ECS ELIN\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t LLDPLocationAddressType) String() (s string) {\n\tswitch t {\n\tcase LLDPLocationAddressTypeLanguage:\n\t\ts = \"Language\"\n\tcase LLDPLocationAddressTypeNational:\n\t\ts = \"National subdivisions (province, state, etc)\"\n\tcase LLDPLocationAddressTypeCounty:\n\t\ts = \"County, parish, district\"\n\tcase LLDPLocationAddressTypeCity:\n\t\ts = \"City, township\"\n\tcase LLDPLocationAddressTypeCityDivision:\n\t\ts = \"City division, borough, ward\"\n\tcase LLDPLocationAddressTypeNeighborhood:\n\t\ts = \"Neighborhood, block\"\n\tcase LLDPLocationAddressTypeStreet:\n\t\ts = \"Street\"\n\tcase LLDPLocationAddressTypeLeadingStreet:\n\t\ts = \"Leading street direction\"\n\tcase LLDPLocationAddressTypeTrailingStreet:\n\t\ts = \"Trailing street suffix\"\n\tcase LLDPLocationAddressTypeStreetSuffix:\n\t\ts = \"Street suffix\"\n\tcase LLDPLocationAddressTypeHouseNum:\n\t\ts = \"House number\"\n\tcase LLDPLocationAddressTypeHouseSuffix:\n\t\ts = \"House number suffix\"\n\tcase LLDPLocationAddressTypeLandmark:\n\t\ts = \"Landmark or vanity address\"\n\tcase LLDPLocationAddressTypeAdditional:\n\t\ts = \"Additional location information\"\n\tcase LLDPLocationAddressTypeName:\n\t\ts = \"Name\"\n\tcase LLDPLocationAddressTypePostal:\n\t\ts = \"Postal/ZIP code\"\n\tcase LLDPLocationAddressTypeBuilding:\n\t\ts = \"Building\"\n\tcase LLDPLocationAddressTypeUnit:\n\t\ts = \"Unit\"\n\tcase LLDPLocationAddressTypeFloor:\n\t\ts = \"Floor\"\n\tcase LLDPLocationAddressTypeRoom:\n\t\ts = \"Room number\"\n\tcase LLDPLocationAddressTypePlace:\n\t\ts = \"Place type\"\n\tcase LLDPLocationAddressTypeScript:\n\t\ts = \"Script\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc checkLLDPTLVLen(v LinkLayerDiscoveryValue, l int) (err error) {\n\tif len(v.Value) < l {\n\t\terr = fmt.Errorf(\"Invalid TLV %v length %d (wanted mimimum %v\", v.Type, len(v.Value), l)\n\t}\n\treturn\n}\n\nfunc checkLLDPOrgSpecificLen(o LLDPOrgSpecificTLV, l int) (err error) {\n\tif len(o.Info) < l {\n\t\terr = fmt.Errorf(\"Invalid Org Specific TLV %v length %d (wanted minimum %v)\", o.SubType, len(o.Info), l)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "layers/lldp_test.go",
    "content": "// Copyright 2020 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license that can be found\n// in the LICENSE file in the root of the source tree.\npackage layers\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// testPacketLLDP is the packet:\n//   13:03:20.982430 LLDP, length 222: Switch1\n//   \t0x0000:  0180 c200 000e 001b 1b02 e61f 88cc 0208  ................\n//   \t0x0010:  0773 7769 7463 6831 0409 0770 6f72 742d  .switch1...port-\n//   \t0x0020:  3030 3106 0200 1408 2d53 6965 6d65 6e73  001.....-Siemens\n//   \t0x0030:  2c20 5349 4d41 5449 4320 4e45 542c 2045  ,.SIMATIC.NET,.E\n//   \t0x0040:  7468 6572 6e65 7420 5377 6974 6368 2050  thernet.Switch.P\n//   \t0x0050:  6f72 7420 3031 0a07 5377 6974 6368 310c  ort.01..Switch1.\n//   \t0x0060:  4c53 6965 6d65 6e73 2c20 5349 4d41 5449  LSiemens,.SIMATI\n//   \t0x0070:  4320 4e45 542c 2053 4341 4c41 4e43 4520  C.NET,.SCALANCE.\n//   \t0x0080:  5832 3132 2d32 2c20 3647 4b35 2032 3132  X212-2,.6GK5.212\n//   \t0x0090:  2d32 4242 3030 2d32 4141 332c 2048 573a  -2BB00-2AA3,.HW:\n//   \t0x00a0:  2037 2c20 4657 3a20 5634 2e30 320e 0400  .7,.FW:.V4.02...\n//   \t0x00b0:  8000 8010 1405 018d 5100 be02 0000 0001  ........Q.......\n//   \t0x00c0:  082b 0601 0401 81c0 6efe 0800 0ecf 0200  .+......n.......\n//   \t0x00d0:  0000 00fe 0a00 0ecf 0500 1b1b 02e6 1efe  ................\n//   \t0x00e0:  0900 120f 0103 6c00 0010 0000            ......l.....\nvar testPacketLLDP = []byte{\n\t0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e, 0x00, 0x1b, 0x1b, 0x02, 0xe6, 0x1f, 0x88, 0xcc, 0x02, 0x08,\n\t0x07, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x31, 0x04, 0x09, 0x07, 0x70, 0x6f, 0x72, 0x74, 0x2d,\n\t0x30, 0x30, 0x31, 0x06, 0x02, 0x00, 0x14, 0x08, 0x2d, 0x53, 0x69, 0x65, 0x6d, 0x65, 0x6e, 0x73,\n\t0x2c, 0x20, 0x53, 0x49, 0x4d, 0x41, 0x54, 0x49, 0x43, 0x20, 0x4e, 0x45, 0x54, 0x2c, 0x20, 0x45,\n\t0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x50,\n\t0x6f, 0x72, 0x74, 0x20, 0x30, 0x31, 0x0a, 0x07, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x31, 0x0c,\n\t0x4c, 0x53, 0x69, 0x65, 0x6d, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x53, 0x49, 0x4d, 0x41, 0x54, 0x49,\n\t0x43, 0x20, 0x4e, 0x45, 0x54, 0x2c, 0x20, 0x53, 0x43, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x20,\n\t0x58, 0x32, 0x31, 0x32, 0x2d, 0x32, 0x2c, 0x20, 0x36, 0x47, 0x4b, 0x35, 0x20, 0x32, 0x31, 0x32,\n\t0x2d, 0x32, 0x42, 0x42, 0x30, 0x30, 0x2d, 0x32, 0x41, 0x41, 0x33, 0x2c, 0x20, 0x48, 0x57, 0x3a,\n\t0x20, 0x37, 0x2c, 0x20, 0x46, 0x57, 0x3a, 0x20, 0x56, 0x34, 0x2e, 0x30, 0x32, 0x0e, 0x04, 0x00,\n\t0x80, 0x00, 0x80, 0x10, 0x14, 0x05, 0x01, 0x8d, 0x51, 0x00, 0xbe, 0x02, 0x00, 0x00, 0x00, 0x01,\n\t0x08, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x81, 0xc0, 0x6e, 0xfe, 0x08, 0x00, 0x0e, 0xcf, 0x02, 0x00,\n\t0x00, 0x00, 0x00, 0xfe, 0x0a, 0x00, 0x0e, 0xcf, 0x05, 0x00, 0x1b, 0x1b, 0x02, 0xe6, 0x1e, 0xfe,\n\t0x09, 0x00, 0x12, 0x0f, 0x01, 0x03, 0x6c, 0x00, 0x00, 0x10, 0x00, 0x00,\n}\n\nfunc TestPacketLLDP(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketLLDP, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeLinkLayerDiscovery, LayerTypeLinkLayerDiscoveryInfo}, t)\n\tif got, ok := p.Layer(LayerTypeLinkLayerDiscoveryInfo).(*LinkLayerDiscoveryInfo); ok {\n\t\twant := &LinkLayerDiscoveryInfo{\n\t\t\tPortDescription: \"Siemens, SIMATIC NET, Ethernet Switch Port 01\",\n\t\t\tSysName:         \"Switch1\",\n\t\t\tSysDescription:  \"Siemens, SIMATIC NET, SCALANCE X212-2, 6GK5 212-2BB00-2AA3, HW: 7, FW: V4.02\",\n\t\t\tSysCapabilities: LLDPSysCapabilities{\n\t\t\t\tSystemCap:  LLDPCapabilities{StationOnly: true},\n\t\t\t\tEnabledCap: LLDPCapabilities{StationOnly: true},\n\t\t\t},\n\t\t\tMgmtAddress: LLDPMgmtAddress{\n\t\t\t\tSubtype:          0x1,\n\t\t\t\tAddress:          []uint8{0x8d, 0x51, 0x0, 0xbe},\n\t\t\t\tInterfaceSubtype: 0x2,\n\t\t\t\tInterfaceNumber:  0x1,\n\t\t\t\tOID:              \"+\\x06\\x01\\x04\\x01\\x81\\xc0n\",\n\t\t\t},\n\t\t\tOrgTLVs: []LLDPOrgSpecificTLV{\n\t\t\t\t{OUI: 0xecf, SubType: 0x2, Info: []uint8{0x0, 0x0, 0x0, 0x0}},\n\t\t\t\t{OUI: 0xecf, SubType: 0x5, Info: []uint8{0x0, 0x1b, 0x1b, 0x2, 0xe6, 0x1e}},\n\t\t\t\t{OUI: 0x120f, SubType: 0x1, Info: []uint8{0x3, 0x6c, 0x0, 0x0, 0x10}},\n\t\t\t},\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"LLDP Info packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No LLDP Info layer type found in packet\")\n\t}\n}\n\nfunc BenchmarkDecodePacketLLDP(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketLLDP, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n"
  },
  {
    "path": "layers/loopback.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// Loopback contains the header for loopback encapsulation.  This header is\n// used by both BSD and OpenBSD style loopback decoding (pcap's DLT_NULL\n// and DLT_LOOP, respectively).\ntype Loopback struct {\n\tBaseLayer\n\tFamily ProtocolFamily\n}\n\n// LayerType returns LayerTypeLoopback.\nfunc (l *Loopback) LayerType() gopacket.LayerType { return LayerTypeLoopback }\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (l *Loopback) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 4 {\n\t\treturn errors.New(\"Loopback packet too small\")\n\t}\n\n\t// The protocol could be either big-endian or little-endian, we're\n\t// not sure.  But we're PRETTY sure that the value is less than\n\t// 256, so we can check the first two bytes.\n\tvar prot uint32\n\tif data[0] == 0 && data[1] == 0 {\n\t\tprot = binary.BigEndian.Uint32(data[:4])\n\t} else {\n\t\tprot = binary.LittleEndian.Uint32(data[:4])\n\t}\n\tif prot > 0xFF {\n\t\treturn fmt.Errorf(\"Invalid loopback protocol %q\", data[:4])\n\t}\n\n\tl.Family = ProtocolFamily(prot)\n\tl.BaseLayer = BaseLayer{data[:4], data[4:]}\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (l *Loopback) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeLoopback\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (l *Loopback) NextLayerType() gopacket.LayerType {\n\treturn l.Family.LayerType()\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\nfunc (l *Loopback) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbytes, err := b.PrependBytes(4)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbinary.LittleEndian.PutUint32(bytes, uint32(l.Family))\n\treturn nil\n}\n\nfunc decodeLoopback(data []byte, p gopacket.PacketBuilder) error {\n\tl := Loopback{}\n\tif err := l.DecodeFromBytes(data, gopacket.NilDecodeFeedback); err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(&l)\n\treturn p.NextDecoder(l.Family)\n}\n"
  },
  {
    "path": "layers/mldv1.go",
    "content": "// Copyright 2018 GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// MLDv1Message represents the common structure of all MLDv1 messages\ntype MLDv1Message struct {\n\tBaseLayer\n\t// 3.4. Maximum Response Delay\n\tMaximumResponseDelay time.Duration\n\t// 3.6. Multicast Address\n\t// Zero in general query\n\t// Specific IPv6 multicast address otherwise\n\tMulticastAddress net.IP\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (m *MLDv1Message) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 20 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ICMP layer less than 20 bytes for Multicast Listener Query Message V1\")\n\t}\n\n\tm.MaximumResponseDelay = time.Duration(binary.BigEndian.Uint16(data[0:2])) * time.Millisecond\n\t// data[2:4] is reserved and not used in mldv1\n\tm.MulticastAddress = data[4:20]\n\n\treturn nil\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (*MLDv1Message) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypeZero\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (m *MLDv1Message) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbuf, err := b.PrependBytes(20)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif m.MaximumResponseDelay < 0 {\n\t\treturn errors.New(\"maximum response delay must not be negative\")\n\t}\n\tdms := m.MaximumResponseDelay / time.Millisecond\n\tif dms > math.MaxUint16 {\n\t\treturn fmt.Errorf(\"maximum response delay %dms is more than the allowed 65535ms\", dms)\n\t}\n\tbinary.BigEndian.PutUint16(buf[0:2], uint16(dms))\n\n\tcopy(buf[2:4], []byte{0x0, 0x0})\n\n\tma16 := m.MulticastAddress.To16()\n\tif ma16 == nil {\n\t\treturn fmt.Errorf(\"invalid multicast address '%s'\", m.MulticastAddress)\n\t}\n\tcopy(buf[4:20], ma16)\n\n\treturn nil\n}\n\n// Sums this layer up nicely formatted\nfunc (m *MLDv1Message) String() string {\n\treturn fmt.Sprintf(\n\t\t\"Maximum Response Delay: %dms, Multicast Address: %s\",\n\t\tm.MaximumResponseDelay/time.Millisecond,\n\t\tm.MulticastAddress)\n}\n\n// MLDv1MulticastListenerQueryMessage are sent by the router to determine\n// whether there are multicast listeners on the link.\n// https://tools.ietf.org/html/rfc2710 Page 5\ntype MLDv1MulticastListenerQueryMessage struct {\n\tMLDv1Message\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (m *MLDv1MulticastListenerQueryMessage) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\terr := m.MLDv1Message.DecodeFromBytes(data, df)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif len(data) > 20 {\n\t\tm.Payload = data[20:]\n\t}\n\n\treturn nil\n}\n\n// LayerType returns LayerTypeMLDv1MulticastListenerQuery.\nfunc (*MLDv1MulticastListenerQueryMessage) LayerType() gopacket.LayerType {\n\treturn LayerTypeMLDv1MulticastListenerQuery\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (*MLDv1MulticastListenerQueryMessage) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeMLDv1MulticastListenerQuery\n}\n\n// IsGeneralQuery is true when this is a general query.\n// In a Query message, the Multicast Address field is set to zero when\n// sending a General Query.\n// https://tools.ietf.org/html/rfc2710#section-3.6\nfunc (m *MLDv1MulticastListenerQueryMessage) IsGeneralQuery() bool {\n\treturn net.IPv6zero.Equal(m.MulticastAddress)\n}\n\n// IsSpecificQuery is true when this is not a general query.\n// In a Query message, the Multicast Address field is set to a specific\n// IPv6 multicast address when sending a Multicast-Address-Specific Query.\n// https://tools.ietf.org/html/rfc2710#section-3.6\nfunc (m *MLDv1MulticastListenerQueryMessage) IsSpecificQuery() bool {\n\treturn !m.IsGeneralQuery()\n}\n\n// MLDv1MulticastListenerReportMessage is sent by a client listening on\n// a specific multicast address to indicate that it is (still) listening\n// on the specific multicast address.\n// https://tools.ietf.org/html/rfc2710 Page 6\ntype MLDv1MulticastListenerReportMessage struct {\n\tMLDv1Message\n}\n\n// LayerType returns LayerTypeMLDv1MulticastListenerReport.\nfunc (*MLDv1MulticastListenerReportMessage) LayerType() gopacket.LayerType {\n\treturn LayerTypeMLDv1MulticastListenerReport\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (*MLDv1MulticastListenerReportMessage) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeMLDv1MulticastListenerReport\n}\n\n// MLDv1MulticastListenerDoneMessage should be sent by a client when it ceases\n// to listen to a multicast address on an interface.\n// https://tools.ietf.org/html/rfc2710 Page 7\ntype MLDv1MulticastListenerDoneMessage struct {\n\tMLDv1Message\n}\n\n// LayerType returns LayerTypeMLDv1MulticastListenerDone.\nfunc (*MLDv1MulticastListenerDoneMessage) LayerType() gopacket.LayerType {\n\treturn LayerTypeMLDv1MulticastListenerDone\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (*MLDv1MulticastListenerDoneMessage) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeMLDv1MulticastListenerDone\n}\n\nfunc decodeMLDv1MulticastListenerReport(data []byte, p gopacket.PacketBuilder) error {\n\tm := &MLDv1MulticastListenerReportMessage{}\n\treturn decodingLayerDecoder(m, data, p)\n}\n\nfunc decodeMLDv1MulticastListenerQuery(data []byte, p gopacket.PacketBuilder) error {\n\tm := &MLDv1MulticastListenerQueryMessage{}\n\treturn decodingLayerDecoder(m, data, p)\n}\n\nfunc decodeMLDv1MulticastListenerDone(data []byte, p gopacket.PacketBuilder) error {\n\tm := &MLDv1MulticastListenerDoneMessage{}\n\treturn decodingLayerDecoder(m, data, p)\n}\n"
  },
  {
    "path": "layers/mldv1_test.go",
    "content": "// Copyright 2018 GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// Adapted from https://github.com/the-tcpdump-group/tcpdump/blob/master/tests/icmpv6.pcap\n// BSD licensed content\n//\n// Frame 3: 90 bytes on wire (720 bits), 90 bytes captured (720 bits)\n// Ethernet II, Src: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8), Dst: IPv6mcast_01 (33:33:00:00:00:01)\n// Internet Protocol Version 6, Src: fe80::b2a8:6eff:fe0c:d4e8, Dst: ff02::1\n//  0110 .... = Version: 6\n//  .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)\n//  .... .... .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000\n//  Payload Length: 36\n//  Next Header: IPv6 Hop-by-Hop Option (0)\n//  Hop Limit: 1\n//  Source: fe80::b2a8:6eff:fe0c:d4e8\n//  Destination: ff02::1\n//  [Source SA MAC: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8)]\n//  IPv6 Hop-by-Hop Option\n// Internet Control Message Protocol v6\n//  Type: Multicast Listener Query (130)\n//  Code: 0\n//  Checksum: 0x623a [correct]\n//  [Checksum Status: Good]\n//  Maximum Response Code: 10000\n//  Reserved: 0000\n//  Multicast Address: ::\nvar testPacketMulticastListenerQueryMessageV1 = []byte{\n\t0x33, 0x33, 0x00, 0x00, 0x00, 0x01, 0xb0, 0xa8, 0x6e, 0x0c, 0xd4, 0xe8, 0x86, 0xdd, 0x60, 0x00,\n\t0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xa8,\n\t0x6e, 0xff, 0xfe, 0x0c, 0xd4, 0xe8, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x05, 0x02, 0x00, 0x00, 0x01, 0x00, 0x82, 0x00,\n\t0x62, 0x3a, 0x27, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestPacketMulticastListenerQueryMessageV1(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketMulticastListenerQueryMessageV1, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeICMPv6, LayerTypeMLDv1MulticastListenerQuery}, t)\n\t// See https://github.com/google/gopacket/issues/517\n\t// checkSerialization(p, t)\n}\n\n// Adapted from https://github.com/the-tcpdump-group/tcpdump/blob/master/tests/icmpv6.pcap\n// BSD licensed content\n//\n// Ethernet II, Src: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8), Dst: IPv6mcast_01 (33:33:00:00:00:01)\n// Internet Protocol Version 6, Src: fe80::b2a8:6eff:fe0c:d4e8, Dst: ff02::1\n//  0110 .... = Version: 6\n//  .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)\n//  .... .... .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000\n//  Payload Length: 36\n//  Next Header: IPv6 Hop-by-Hop Option (0)\n//  Hop Limit: 1\n//  Source: fe80::b2a8:6eff:fe0c:d4e8\n//  Destination: ff02::1\n//  [Source SA MAC: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8)]\n//  IPv6 Hop-by-Hop Option\n// Internet Control Message Protocol v6\n//  Type: Multicast Listener Report (131)\n//  Code: 0\n//  Checksum: 0x623a [incorrect]\n//  [Checksum Status: Invalid]\n//  Maximum Response Code: 10000\n//  Reserved: 0000\n//  Multicast Address: ff02::db8:1122:3344\nvar testPacketMulticastListenerReportMessageV1 = []byte{\n\t0x33, 0x33, 0x00, 0x00, 0x00, 0x01, 0xb0, 0xa8, 0x6e, 0x0c, 0xd4, 0xe8, 0x86, 0xdd, 0x60, 0x00,\n\t0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xa8,\n\t0x6e, 0xff, 0xfe, 0x0c, 0xd4, 0xe8, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x05, 0x02, 0x00, 0x00, 0x01, 0x00, 0x83, 0x00,\n\t0x62, 0x3a, 0x27, 0x10, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x0d, 0xb8, 0x11, 0x22, 0x33, 0x44,\n}\n\nfunc TestPacketMulticastListenerReportMessageV1(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketMulticastListenerReportMessageV1, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeICMPv6, LayerTypeMLDv1MulticastListenerReport}, t)\n\t// See https://github.com/google/gopacket/issues/517\n\t// checkSerialization(p, t)\n}\n\n// Adapted from https://github.com/the-tcpdump-group/tcpdump/blob/master/tests/icmpv6.pcap\n// BSD licensed content\n//\n// Ethernet II, Src: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8), Dst: IPv6mcast_01 (33:33:00:00:00:01)\n// Internet Protocol Version 6, Src: fe80::b2a8:6eff:fe0c:d4e8, Dst: ff02::1\n//  0110 .... = Version: 6\n//  .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)\n//  .... .... .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000\n//  Payload Length: 36\n//  Next Header: IPv6 Hop-by-Hop Option (0)\n//  Hop Limit: 1\n//  Source: fe80::b2a8:6eff:fe0c:d4e8\n//  Destination: ff02::1\n//  [Source SA MAC: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8)]\n//  IPv6 Hop-by-Hop Option\n// Internet Control Message Protocol v6\n//  Type: Multicast Listener Done (132)\n//  Code: 0\n//  Checksum: 0x623a [incorrect]\n//  [Checksum Status: Invalid]\n//  Maximum Response Code: 10000\n//  Reserved: 0000\n//  Multicast Address: ff02::db8:1122:3344\nvar testPacketMulticastListenerDoneMessageV1 = []byte{\n\t0x33, 0x33, 0x00, 0x00, 0x00, 0x01, 0xb0, 0xa8, 0x6e, 0x0c, 0xd4, 0xe8, 0x86, 0xdd, 0x60, 0x00,\n\t0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xa8,\n\t0x6e, 0xff, 0xfe, 0x0c, 0xd4, 0xe8, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x05, 0x02, 0x00, 0x00, 0x01, 0x00, 0x84, 0x00,\n\t0x62, 0x3a, 0x27, 0x10, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x0d, 0xb8, 0x11, 0x22, 0x33, 0x44,\n}\n\nfunc TestPacketMulticastListenerDoneMessageV1(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketMulticastListenerDoneMessageV1, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeICMPv6, LayerTypeMLDv1MulticastListenerDone}, t)\n\t// See https://github.com/google/gopacket/issues/517\n\t// checkSerialization(p, t)\n}\n"
  },
  {
    "path": "layers/mldv2.go",
    "content": "// Copyright 2018 GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n)\n\nconst (\n\t// S Flag bit is 1\n\tmldv2STrue uint8 = 0x8\n\n\t// S Flag value mask\n\t//   mldv2STrue & mldv2SMask == mldv2STrue  // true\n\t//          0x1 & mldv2SMask == mldv2STrue  // true\n\t//          0x0 & mldv2SMask == mldv2STrue  // false\n\tmldv2SMask uint8 = 0x8\n\n\t// QRV value mask\n\tmldv2QRVMask uint8 = 0x7\n)\n\n// MLDv2MulticastListenerQueryMessage are sent by multicast routers to query the\n// multicast listening state of neighboring interfaces.\n// https://tools.ietf.org/html/rfc3810#section-5.1\n//\n// Some information, like Maximum Response Code and Multicast Address are in the\n// previous layer LayerTypeMLDv1MulticastListenerQuery\ntype MLDv2MulticastListenerQueryMessage struct {\n\tBaseLayer\n\t// 5.1.3. Maximum Response Delay COde\n\tMaximumResponseCode uint16\n\t// 5.1.5. Multicast Address\n\t// Zero in general query\n\t// Specific IPv6 multicast address otherwise\n\tMulticastAddress net.IP\n\t// 5.1.7. S Flag (Suppress Router-Side Processing)\n\tSuppressRoutersideProcessing bool\n\t// 5.1.8. QRV (Querier's Robustness Variable)\n\tQueriersRobustnessVariable uint8\n\t// 5.1.9. QQIC (Querier's Query Interval Code)\n\tQueriersQueryIntervalCode uint8\n\t// 5.1.10. Number of Sources (N)\n\tNumberOfSources uint16\n\t// 5.1.11 Source Address [i]\n\tSourceAddresses []net.IP\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (m *MLDv2MulticastListenerQueryMessage) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 24 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ICMP layer less than 24 bytes for Multicast Listener Query Message V2\")\n\t}\n\n\tm.MaximumResponseCode = binary.BigEndian.Uint16(data[0:2])\n\t// ignore data[2:4] as per https://tools.ietf.org/html/rfc3810#section-5.1.4\n\tm.MulticastAddress = data[4:20]\n\tm.SuppressRoutersideProcessing = (data[20] & mldv2SMask) == mldv2STrue\n\tm.QueriersRobustnessVariable = data[20] & mldv2QRVMask\n\tm.QueriersQueryIntervalCode = data[21]\n\n\tm.NumberOfSources = binary.BigEndian.Uint16(data[22:24])\n\n\tvar end int\n\tfor i := uint16(0); i < m.NumberOfSources; i++ {\n\t\tbegin := 24 + (int(i) * 16)\n\t\tend = begin + 16\n\n\t\tif end > len(data) {\n\t\t\tdf.SetTruncated()\n\t\t\treturn fmt.Errorf(\"ICMP layer less than %d bytes for Multicast Listener Query Message V2\", end)\n\t\t}\n\n\t\tm.SourceAddresses = append(m.SourceAddresses, data[begin:end])\n\t}\n\n\treturn nil\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (*MLDv2MulticastListenerQueryMessage) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypeZero\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (m *MLDv2MulticastListenerQueryMessage) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tif err := m.serializeSourceAddressesTo(b, opts); err != nil {\n\t\treturn err\n\t}\n\n\tbuf, err := b.PrependBytes(24)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbinary.BigEndian.PutUint16(buf[0:2], m.MaximumResponseCode)\n\tcopy(buf[2:4], []byte{0x00, 0x00}) // set reserved bytes to zero\n\n\tma16 := m.MulticastAddress.To16()\n\tif ma16 == nil {\n\t\treturn fmt.Errorf(\"invalid MulticastAddress '%s'\", m.MulticastAddress)\n\t}\n\tcopy(buf[4:20], ma16)\n\n\tbyte20 := m.QueriersRobustnessVariable & mldv2QRVMask\n\tif m.SuppressRoutersideProcessing {\n\t\tbyte20 |= mldv2STrue\n\t} else {\n\t\tbyte20 &= ^mldv2STrue // the complement of mldv2STrue\n\t}\n\tbyte20 &= 0x0F // set reserved bits to zero\n\tbuf[20] = byte20\n\n\tbinary.BigEndian.PutUint16(buf[22:24], m.NumberOfSources)\n\tbuf[21] = m.QueriersQueryIntervalCode\n\n\treturn nil\n}\n\n// writes each source address to the buffer preserving the order\nfunc (m *MLDv2MulticastListenerQueryMessage) serializeSourceAddressesTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tnumberOfSourceAddresses := len(m.SourceAddresses)\n\tif numberOfSourceAddresses > math.MaxUint16 {\n\t\treturn fmt.Errorf(\n\t\t\t\"there are more than %d source addresses, but 65535 is the maximum number of supported addresses\",\n\t\t\tnumberOfSourceAddresses)\n\t}\n\n\tif opts.FixLengths {\n\t\tm.NumberOfSources = uint16(numberOfSourceAddresses)\n\t}\n\n\tlastSAIdx := numberOfSourceAddresses - 1\n\tfor k := range m.SourceAddresses {\n\t\ti := lastSAIdx - k // reverse order\n\n\t\tbuf, err := b.PrependBytes(16)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tsa16 := m.SourceAddresses[i].To16()\n\t\tif sa16 == nil {\n\t\t\treturn fmt.Errorf(\"invalid source address [%d] '%s'\", i, m.SourceAddresses[i])\n\t\t}\n\t\tcopy(buf[0:16], sa16)\n\t}\n\n\treturn nil\n}\n\n// String sums this layer up nicely formatted\nfunc (m *MLDv2MulticastListenerQueryMessage) String() string {\n\treturn fmt.Sprintf(\n\t\t\"Maximum Response Code: %#x (%dms), Multicast Address: %s, Suppress Routerside Processing: %t, QRV: %#x, QQIC: %#x (%ds), Number of Source Address: %d (actual: %d), Source Addresses: %s\",\n\t\tm.MaximumResponseCode,\n\t\tm.MaximumResponseDelay(),\n\t\tm.MulticastAddress,\n\t\tm.SuppressRoutersideProcessing,\n\t\tm.QueriersRobustnessVariable,\n\t\tm.QueriersQueryIntervalCode,\n\t\tm.QQI()/time.Second,\n\t\tm.NumberOfSources,\n\t\tlen(m.SourceAddresses),\n\t\tm.SourceAddresses)\n}\n\n// LayerType returns LayerTypeMLDv2MulticastListenerQuery.\nfunc (*MLDv2MulticastListenerQueryMessage) LayerType() gopacket.LayerType {\n\treturn LayerTypeMLDv2MulticastListenerQuery\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (*MLDv2MulticastListenerQueryMessage) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeMLDv2MulticastListenerQuery\n}\n\n// QQI calculates the Querier's Query Interval based on the QQIC\n// according to https://tools.ietf.org/html/rfc3810#section-5.1.9\nfunc (m *MLDv2MulticastListenerQueryMessage) QQI() time.Duration {\n\tdata := m.QueriersQueryIntervalCode\n\tif data < 128 {\n\t\treturn time.Second * time.Duration(data)\n\t}\n\n\texp := uint16(data) & 0x70 >> 4\n\tmant := uint16(data) & 0x0F\n\treturn time.Second * time.Duration(mant|0x1000<<(exp+3))\n}\n\n// SetQQI calculates and updates the Querier's Query Interval Code (QQIC)\n// according to https://tools.ietf.org/html/rfc3810#section-5.1.9\nfunc (m *MLDv2MulticastListenerQueryMessage) SetQQI(d time.Duration) error {\n\tif d < 0 {\n\t\tm.QueriersQueryIntervalCode = 0\n\t\treturn errors.New(\"QQI duration is negative\")\n\t}\n\n\tif d == 0 {\n\t\tm.QueriersQueryIntervalCode = 0\n\t\treturn nil\n\t}\n\n\tdms := d / time.Second\n\tif dms < 128 {\n\t\tm.QueriersQueryIntervalCode = uint8(dms)\n\t}\n\n\tif dms > 31744 { // mant=0xF, exp=0x7\n\t\tm.QueriersQueryIntervalCode = 0xFF\n\t\treturn fmt.Errorf(\"QQI duration %ds is, maximum allowed is 31744s\", dms)\n\t}\n\n\tvalue := uint16(dms) // ok, because 31744 < math.MaxUint16\n\texp := uint8(7)\n\tfor mask := uint16(0x4000); exp > 0; exp-- {\n\t\tif mask&value != 0 {\n\t\t\tbreak\n\t\t}\n\n\t\tmask >>= 1\n\t}\n\n\tmant := uint8(0x000F & (value >> (exp + 3)))\n\tsig := uint8(0x10)\n\tm.QueriersQueryIntervalCode = sig | exp<<4 | mant\n\n\treturn nil\n}\n\n// MaximumResponseDelay returns the Maximum Response Delay based on the\n// Maximum Response Code according to\n// https://tools.ietf.org/html/rfc3810#section-5.1.3\nfunc (m *MLDv2MulticastListenerQueryMessage) MaximumResponseDelay() time.Duration {\n\tif m.MaximumResponseCode < 0x8000 {\n\t\treturn time.Duration(m.MaximumResponseCode)\n\t}\n\n\texp := m.MaximumResponseCode & 0x7000 >> 12\n\tmant := m.MaximumResponseCode & 0x0FFF\n\n\treturn time.Millisecond * time.Duration(mant|0x1000<<(exp+3))\n}\n\n// SetMLDv2MaximumResponseDelay updates the Maximum Response Code according to\n// https://tools.ietf.org/html/rfc3810#section-5.1.3\nfunc (m *MLDv2MulticastListenerQueryMessage) SetMLDv2MaximumResponseDelay(d time.Duration) error {\n\tif d == 0 {\n\t\tm.MaximumResponseCode = 0\n\t\treturn nil\n\t}\n\n\tif d < 0 {\n\t\treturn errors.New(\"maximum response delay must not be negative\")\n\t}\n\n\tdms := d / time.Millisecond\n\n\tif dms < 32768 {\n\t\tm.MaximumResponseCode = uint16(dms)\n\t}\n\n\tif dms > 4193280 { // mant=0xFFF, exp=0x7\n\t\treturn fmt.Errorf(\"maximum response delay %dms is bigger the than maximum of 4193280ms\", dms)\n\t}\n\n\tvalue := uint32(dms) // ok, because 4193280 < math.MaxUint32\n\texp := uint8(7)\n\tfor mask := uint32(0x40000000); exp > 0; exp-- {\n\t\tif mask&value != 0 {\n\t\t\tbreak\n\t\t}\n\n\t\tmask >>= 1\n\t}\n\n\tmant := uint16(0x00000FFF & (value >> (exp + 3)))\n\tsig := uint16(0x1000)\n\tm.MaximumResponseCode = sig | uint16(exp)<<12 | mant\n\treturn nil\n}\n\n// MLDv2MulticastListenerReportMessage is sent by an IP node to report the\n// current multicast listening state, or changes therein.\n// https://tools.ietf.org/html/rfc3810#section-5.2\ntype MLDv2MulticastListenerReportMessage struct {\n\tBaseLayer\n\t// 5.2.3. Nr of Mcast Address Records\n\tNumberOfMulticastAddressRecords uint16\n\t// 5.2.4. Multicast Address Record [i]\n\tMulticastAddressRecords []MLDv2MulticastAddressRecord\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (m *MLDv2MulticastListenerReportMessage) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 4 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ICMP layer less than 4 bytes for Multicast Listener Report Message V2\")\n\t}\n\n\t// ignore data[0:2] as per RFC\n\t// https://tools.ietf.org/html/rfc3810#section-5.2.1\n\tm.NumberOfMulticastAddressRecords = binary.BigEndian.Uint16(data[2:4])\n\n\tbegin := 4\n\tfor i := uint16(0); i < m.NumberOfMulticastAddressRecords; i++ {\n\t\tmar := MLDv2MulticastAddressRecord{}\n\t\tread, err := mar.decode(data[begin:], df)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tm.MulticastAddressRecords = append(m.MulticastAddressRecords, mar)\n\n\t\tbegin += read\n\t}\n\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (m *MLDv2MulticastListenerReportMessage) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tlastItemIdx := len(m.MulticastAddressRecords) - 1\n\tfor k := range m.MulticastAddressRecords {\n\t\ti := lastItemIdx - k // reverse order\n\n\t\terr := m.MulticastAddressRecords[i].serializeTo(b, opts)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif opts.FixLengths {\n\t\tnumberOfMAR := len(m.MulticastAddressRecords)\n\t\tif numberOfMAR > math.MaxUint16 {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"%d multicast address records added, but the maximum is 65535\",\n\t\t\t\tnumberOfMAR)\n\t\t}\n\n\t\tm.NumberOfMulticastAddressRecords = uint16(numberOfMAR)\n\t}\n\n\tbuf, err := b.PrependBytes(4)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcopy(buf[0:2], []byte{0x0, 0x0})\n\tbinary.BigEndian.PutUint16(buf[2:4], m.NumberOfMulticastAddressRecords)\n\treturn nil\n}\n\n// Sums this layer up nicely formatted\nfunc (m *MLDv2MulticastListenerReportMessage) String() string {\n\treturn fmt.Sprintf(\n\t\t\"Number of Mcast Addr Records: %d (actual %d), Multicast Address Records: %+v\",\n\t\tm.NumberOfMulticastAddressRecords,\n\t\tlen(m.MulticastAddressRecords),\n\t\tm.MulticastAddressRecords)\n}\n\n// LayerType returns LayerTypeMLDv2MulticastListenerQuery.\nfunc (*MLDv2MulticastListenerReportMessage) LayerType() gopacket.LayerType {\n\treturn LayerTypeMLDv2MulticastListenerReport\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (*MLDv2MulticastListenerReportMessage) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeMLDv2MulticastListenerReport\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (*MLDv2MulticastListenerReportMessage) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\n// MLDv2MulticastAddressRecordType holds the type of a\n// Multicast Address Record, according to\n// https://tools.ietf.org/html/rfc3810#section-5.2.5 and\n// https://tools.ietf.org/html/rfc3810#section-5.2.12\ntype MLDv2MulticastAddressRecordType uint8\n\nconst (\n\t// MLDv2MulticastAddressRecordTypeModeIsIncluded stands for\n\t// MODE_IS_INCLUDE - indicates that the interface has a filter\n\t// mode of INCLUDE for the specified multicast address.\n\tMLDv2MulticastAddressRecordTypeModeIsIncluded MLDv2MulticastAddressRecordType = 1\n\t// MLDv2MulticastAddressRecordTypeModeIsExcluded stands for\n\t// MODE_IS_EXCLUDE - indicates that the interface has a filter\n\t// mode of EXCLUDE for the specified multicast address.\n\tMLDv2MulticastAddressRecordTypeModeIsExcluded MLDv2MulticastAddressRecordType = 2\n\t// MLDv2MulticastAddressRecordTypeChangeToIncludeMode stands for\n\t// CHANGE_TO_INCLUDE_MODE - indicates that the interface has\n\t// changed to INCLUDE filter mode for the specified multicast\n\t// address.\n\tMLDv2MulticastAddressRecordTypeChangeToIncludeMode MLDv2MulticastAddressRecordType = 3\n\t// MLDv2MulticastAddressRecordTypeChangeToExcludeMode stands for\n\t// CHANGE_TO_EXCLUDE_MODE - indicates that the interface has\n\t// changed to EXCLUDE filter mode for the specified multicast\n\t// address\n\tMLDv2MulticastAddressRecordTypeChangeToExcludeMode MLDv2MulticastAddressRecordType = 4\n\t// MLDv2MulticastAddressRecordTypeAllowNewSources stands for\n\t// ALLOW_NEW_SOURCES - indicates that the Source Address [i]\n\t// fields in this Multicast Address Record contain a list of\n\t// the additional sources that the node wishes to listen to,\n\t// for packets sent to the specified multicast address.\n\tMLDv2MulticastAddressRecordTypeAllowNewSources MLDv2MulticastAddressRecordType = 5\n\t// MLDv2MulticastAddressRecordTypeBlockOldSources stands for\n\t// BLOCK_OLD_SOURCES - indicates that the Source Address [i]\n\t// fields in this Multicast Address Record contain a list of\n\t// the sources that the node no longer wishes to listen to,\n\t// for packets sent to the specified multicast address.\n\tMLDv2MulticastAddressRecordTypeBlockOldSources MLDv2MulticastAddressRecordType = 6\n)\n\n// Human readable record types\n// Naming follows https://tools.ietf.org/html/rfc3810#section-5.2.12\nfunc (m MLDv2MulticastAddressRecordType) String() string {\n\tswitch m {\n\tcase MLDv2MulticastAddressRecordTypeModeIsIncluded:\n\t\treturn \"MODE_IS_INCLUDE\"\n\tcase MLDv2MulticastAddressRecordTypeModeIsExcluded:\n\t\treturn \"MODE_IS_EXCLUDE\"\n\tcase MLDv2MulticastAddressRecordTypeChangeToIncludeMode:\n\t\treturn \"CHANGE_TO_INCLUDE_MODE\"\n\tcase MLDv2MulticastAddressRecordTypeChangeToExcludeMode:\n\t\treturn \"CHANGE_TO_EXCLUDE_MODE\"\n\tcase MLDv2MulticastAddressRecordTypeAllowNewSources:\n\t\treturn \"ALLOW_NEW_SOURCES\"\n\tcase MLDv2MulticastAddressRecordTypeBlockOldSources:\n\t\treturn \"BLOCK_OLD_SOURCES\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"UNKNOWN(%d)\", m)\n\t}\n}\n\n// MLDv2MulticastAddressRecord contains information on the sender listening to a\n// single multicast address on the interface the report is sent.\n// https://tools.ietf.org/html/rfc3810#section-5.2.4\ntype MLDv2MulticastAddressRecord struct {\n\t// 5.2.5. Record Type\n\tRecordType MLDv2MulticastAddressRecordType\n\t// 5.2.6. Auxiliary Data Length (number of 32-bit words)\n\tAuxDataLen uint8\n\t// 5.2.7. Number Of Sources (N)\n\tN uint16\n\t// 5.2.8. Multicast Address\n\tMulticastAddress net.IP\n\t// 5.2.9 Source Address [i]\n\tSourceAddresses []net.IP\n\t// 5.2.10 Auxiliary Data\n\tAuxiliaryData []byte\n}\n\n// decodes a multicast address record from bytes\nfunc (m *MLDv2MulticastAddressRecord) decode(data []byte, df gopacket.DecodeFeedback) (int, error) {\n\tif len(data) < 20 {\n\t\tdf.SetTruncated()\n\t\treturn 0, errors.New(\n\t\t\t\"Multicast Listener Report Message V2 layer less than 4 bytes for Multicast Address Record\")\n\t}\n\n\tm.RecordType = MLDv2MulticastAddressRecordType(data[0])\n\tm.AuxDataLen = data[1]\n\tm.N = binary.BigEndian.Uint16(data[2:4])\n\tm.MulticastAddress = data[4:20]\n\n\tfor i := uint16(0); i < m.N; i++ {\n\t\tbegin := 20 + (int(i) * 16)\n\t\tend := begin + 16\n\n\t\tif len(data) < end {\n\t\t\tdf.SetTruncated()\n\t\t\treturn begin, fmt.Errorf(\n\t\t\t\t\"Multicast Listener Report Message V2 layer less than %d bytes for Multicast Address Record\", end)\n\t\t}\n\n\t\tm.SourceAddresses = append(m.SourceAddresses, data[begin:end])\n\t}\n\n\texpectedLengthWithouAuxData := 20 + (int(m.N) * 16)\n\texpectedTotalLength := (int(m.AuxDataLen) * 4) + expectedLengthWithouAuxData // *4 because AuxDataLen are 32bit words\n\tif len(data) < expectedTotalLength {\n\t\treturn expectedLengthWithouAuxData, fmt.Errorf(\n\t\t\t\"Multicast Listener Report Message V2 layer less than %d bytes for Multicast Address Record\",\n\t\t\texpectedLengthWithouAuxData)\n\t}\n\n\tm.AuxiliaryData = data[expectedLengthWithouAuxData:expectedTotalLength]\n\n\treturn expectedTotalLength, nil\n}\n\n// String sums this layer up nicely formatted\nfunc (m *MLDv2MulticastAddressRecord) String() string {\n\treturn fmt.Sprintf(\n\t\t\"RecordType: %d (%s), AuxDataLen: %d [32-bit words], N: %d, Multicast Address: %s, SourceAddresses: %s, Auxiliary Data: %#x\",\n\t\tm.RecordType,\n\t\tm.RecordType.String(),\n\t\tm.AuxDataLen,\n\t\tm.N,\n\t\tm.MulticastAddress.To16(),\n\t\tm.SourceAddresses,\n\t\tm.AuxiliaryData)\n}\n\n// serializes a multicast address record\nfunc (m *MLDv2MulticastAddressRecord) serializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tif err := m.serializeAuxiliaryDataTo(b, opts); err != nil {\n\t\treturn err\n\t}\n\n\tif err := m.serializeSourceAddressesTo(b, opts); err != nil {\n\t\treturn err\n\t}\n\n\tbuf, err := b.PrependBytes(20)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbuf[0] = uint8(m.RecordType)\n\tbuf[1] = m.AuxDataLen\n\tbinary.BigEndian.PutUint16(buf[2:4], m.N)\n\n\tma16 := m.MulticastAddress.To16()\n\tif ma16 == nil {\n\t\treturn fmt.Errorf(\"invalid multicast address '%s'\", m.MulticastAddress)\n\t}\n\tcopy(buf[4:20], ma16)\n\n\treturn nil\n}\n\n// serializes the auxiliary data of a multicast address record\nfunc (m *MLDv2MulticastAddressRecord) serializeAuxiliaryDataTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tif remainder := len(m.AuxiliaryData) % 4; remainder != 0 {\n\t\tzeroWord := []byte{0x0, 0x0, 0x0, 0x0}\n\t\tm.AuxiliaryData = append(m.AuxiliaryData, zeroWord[:remainder]...)\n\t}\n\n\tif opts.FixLengths {\n\t\tauxDataLen := len(m.AuxiliaryData) / 4\n\n\t\tif auxDataLen > math.MaxUint8 {\n\t\t\treturn fmt.Errorf(\"auxilary data is %d 32-bit words, but the maximum is 255 32-bit words\", auxDataLen)\n\t\t}\n\n\t\tm.AuxDataLen = uint8(auxDataLen)\n\t}\n\n\tbuf, err := b.PrependBytes(len(m.AuxiliaryData))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcopy(buf, m.AuxiliaryData)\n\treturn nil\n}\n\n// serializes the source addresses of a multicast address record preserving the order\nfunc (m *MLDv2MulticastAddressRecord) serializeSourceAddressesTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tif opts.FixLengths {\n\t\tnumberOfSourceAddresses := len(m.SourceAddresses)\n\n\t\tif numberOfSourceAddresses > math.MaxUint16 {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"%d source addresses added, but the maximum is 65535\",\n\t\t\t\tnumberOfSourceAddresses)\n\t\t}\n\n\t\tm.N = uint16(numberOfSourceAddresses)\n\t}\n\n\tlastItemIdx := len(m.SourceAddresses) - 1\n\tfor k := range m.SourceAddresses {\n\t\ti := lastItemIdx - k // reverse order\n\n\t\tbuf, err := b.PrependBytes(16)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tsa16 := m.SourceAddresses[i].To16()\n\t\tif sa16 == nil {\n\t\t\treturn fmt.Errorf(\"invalid source address [%d] '%s'\", i, m.SourceAddresses[i])\n\t\t}\n\t\tcopy(buf, sa16)\n\t}\n\n\treturn nil\n}\n\nfunc decodeMLDv2MulticastListenerReport(data []byte, p gopacket.PacketBuilder) error {\n\tm := &MLDv2MulticastListenerReportMessage{}\n\treturn decodingLayerDecoder(m, data, p)\n}\n\nfunc decodeMLDv2MulticastListenerQuery(data []byte, p gopacket.PacketBuilder) error {\n\tm := &MLDv2MulticastListenerQueryMessage{}\n\treturn decodingLayerDecoder(m, data, p)\n}\n"
  },
  {
    "path": "layers/mldv2_test.go",
    "content": "// Copyright 2018 GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// Adapted from https://github.com/the-tcpdump-group/tcpdump/blob/master/tests/icmpv6.pcap\n// BSD licensed content\n//\n// Ethernet II, Src: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8), Dst: IPv6mcast_01 (33:33:00:00:00:01)\n// Internet Protocol Version 6, Src: fe80::b2a8:6eff:fe0c:d4e8, Dst: ff02::1\n//     0110 .... = Version: 6\n//     .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)\n//     .... .... .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000\n//     Payload Length: 36\n//     Next Header: IPv6 Hop-by-Hop Option (0)\n//     Hop Limit: 1\n//     Source: fe80::b2a8:6eff:fe0c:d4e8\n//     Destination: ff02::1\n//     [Source SA MAC: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8)]\n//     IPv6 Hop-by-Hop Option\n// Internet Control Message Protocol v6\n//     Type: Multicast Listener Query (130)\n//     Code: 0\n//     Checksum: 0x623a [correct]\n//     [Checksum Status: Good]\n//     Maximum Response Code: 10000\n//     Reserved: 0000\n//     Multicast Address: ::\n//     Flags: 0x02\n//         .... 0... = Suppress Router-Side Processing: False\n//         .... .010 = QRV (Querier's Robustness Variable): 2\n//         0000 .... = Reserved: 0\n//     QQIC (Querier's Query Interval Code): 60\n//     Number of Sources: 0\nvar testPacketMulticastListenerQueryMessageV2 = []byte{\n\t0x33, 0x33, 0x00, 0x00, 0x00, 0x01, 0xb0, 0xa8, 0x6e, 0x0c, 0xd4, 0xe8, 0x86, 0xdd, 0x60, 0x00,\n\t0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xa8,\n\t0x6e, 0xff, 0xfe, 0x0c, 0xd4, 0xe8, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x05, 0x02, 0x00, 0x00, 0x01, 0x00, 0x82, 0x00,\n\t0x62, 0x3a, 0x27, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00,\n}\n\nfunc TestPacketMulticastListenerQueryMessageV2(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketMulticastListenerQueryMessageV2, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{\n\t\tLayerTypeEthernet,\n\t\tLayerTypeIPv6,\n\t\tLayerTypeIPv6HopByHop,\n\t\tLayerTypeICMPv6,\n\t\tLayerTypeMLDv2MulticastListenerQuery}, t)\n\t// See https://github.com/google/gopacket/issues/517\n\t// checkSerialization(p, t)\n}\n\n// Adapted from https://github.com/the-tcpdump-group/tcpdump/blob/master/tests/icmpv6.pcap\n// BSD licensed content\n//\n// Frame 4: 150 bytes on wire (1200 bits), 150 bytes captured (1200 bits)\n// Ethernet II, Src: IntelCor_cc:e5:46 (00:15:17:cc:e5:46), Dst: IPv6mcast_16 (33:33:00:00:00:16)\n// Internet Protocol Version 6, Src: fe80::215:17ff:fecc:e546, Dst: ff02::16\n//     0110 .... = Version: 6\n//     .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)\n//     .... .... .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000\n//     Payload Length: 96\n//     Next Header: IPv6 Hop-by-Hop Option (0)\n//     Hop Limit: 1\n//     Source: fe80::215:17ff:fecc:e546\n//     Destination: ff02::16\n//     [Source SA MAC: IntelCor_cc:e5:46 (00:15:17:cc:e5:46)]\n//     IPv6 Hop-by-Hop Option\n// Internet Control Message Protocol v6\n//     Type: Multicast Listener Report Message v2 (143)\n//     Code: 0\n//     Checksum: 0x2a0e [correct]\n//     [Checksum Status: Good]\n//     Reserved: 0000\n//     Number of Multicast Address Records: 4\n//     Multicast Address Record Exclude: ff02::db8:1122:3344\n//         Record Type: Exclude (2)\n//         Aux Data Len: 0\n//         Number of Sources: 0\n//         Multicast Address: ff02::db8:1122:3344\n//     Multicast Address Record Exclude: ff02::1:ffcc:e546\n//         Record Type: Exclude (2)\n//         Aux Data Len: 0\n//         Number of Sources: 0\n//         Multicast Address: ff02::1:ffcc:e546\n//     Multicast Address Record Exclude: ff02::1:ffa7:10ad\n//         Record Type: Exclude (2)\n//         Aux Data Len: 0\n//         Number of Sources: 0\n//         Multicast Address: ff02::1:ffa7:10ad\n//     Multicast Address Record Exclude: ff02::1:ff00:2\n//         Record Type: Exclude (2)\n//         Aux Data Len: 0\n//         Number of Sources: 0\n//         Multicast Address: ff02::1:ff00:2\nvar testPacketMulticastListenerReportMessageV2 = []byte{\n\t0x33, 0x33, 0x00, 0x00, 0x00, 0x16, 0x00, 0x15, 0x17, 0xcc, 0xe5, 0x46, 0x86, 0xdd, 0x60, 0x00,\n\t0x00, 0x00, 0x00, 0x60, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x15,\n\t0x17, 0xff, 0xfe, 0xcc, 0xe5, 0x46, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x3a, 0x00, 0x05, 0x02, 0x00, 0x00, 0x01, 0x00, 0x8f, 0x00,\n\t0x2a, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x0d, 0xb8, 0x11, 0x22, 0x33, 0x44, 0x02, 0x00, 0x00, 0x00, 0xff, 0x02,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xcc, 0xe5, 0x46, 0x02, 0x00,\n\t0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xa7,\n\t0x10, 0xad, 0x02, 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x01, 0xff, 0x00, 0x00, 0x02,\n}\n\nfunc TestPacketMulticastListenerReportMessageV2(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketMulticastListenerReportMessageV2, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{\n\t\tLayerTypeEthernet,\n\t\tLayerTypeIPv6,\n\t\tLayerTypeIPv6HopByHop,\n\t\tLayerTypeICMPv6,\n\t\tLayerTypeMLDv2MulticastListenerReport}, t)\n\t// See https://github.com/google/gopacket/issues/517\n\t// checkSerialization(p, t)\n}\n"
  },
  {
    "path": "layers/modbustcp.go",
    "content": "// Copyright 2018, The GoPacket Authors, All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n//\n//******************************************************************************\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\n\t\"github.com/google/gopacket\"\n)\n\n//******************************************************************************\n//\n// ModbusTCP Decoding Layer\n// ------------------------------------------\n// This file provides a GoPacket decoding layer for ModbusTCP.\n//\n//******************************************************************************\n\nconst mbapRecordSizeInBytes int = 7\nconst modbusPDUMinimumRecordSizeInBytes int = 2\nconst modbusPDUMaximumRecordSizeInBytes int = 253\n\n// ModbusProtocol type\ntype ModbusProtocol uint16\n\n// ModbusProtocol known values.\nconst (\n\tModbusProtocolModbus ModbusProtocol = 0\n)\n\nfunc (mp ModbusProtocol) String() string {\n\tswitch mp {\n\tdefault:\n\t\treturn \"Unknown\"\n\tcase ModbusProtocolModbus:\n\t\treturn \"Modbus\"\n\t}\n}\n\n//******************************************************************************\n\n// ModbusTCP Type\n// --------\n// Type ModbusTCP implements the DecodingLayer interface. Each ModbusTCP object\n// represents in a structured form the MODBUS Application Protocol header (MBAP) record present as the TCP\n// payload in an ModbusTCP TCP packet.\n//\ntype ModbusTCP struct {\n\tBaseLayer // Stores the packet bytes and payload (Modbus PDU) bytes .\n\n\tTransactionIdentifier uint16         // Identification of a MODBUS Request/Response transaction\n\tProtocolIdentifier    ModbusProtocol // It is used for intra-system multiplexing\n\tLength                uint16         // Number of following bytes (includes 1 byte for UnitIdentifier + Modbus data length\n\tUnitIdentifier        uint8          // Identification of a remote slave connected on a serial line or on other buses\n}\n\n//******************************************************************************\n\n// LayerType returns the layer type of the ModbusTCP object, which is LayerTypeModbusTCP.\nfunc (d *ModbusTCP) LayerType() gopacket.LayerType {\n\treturn LayerTypeModbusTCP\n}\n\n//******************************************************************************\n\n// decodeModbusTCP analyses a byte slice and attempts to decode it as an ModbusTCP\n// record of a TCP packet.\n//\n// If it succeeds, it loads p with information about the packet and returns nil.\n// If it fails, it returns an error (non nil).\n//\n// This function is employed in layertypes.go to register the ModbusTCP layer.\nfunc decodeModbusTCP(data []byte, p gopacket.PacketBuilder) error {\n\n\t// Attempt to decode the byte slice.\n\td := &ModbusTCP{}\n\terr := d.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// If the decoding worked, add the layer to the packet and set it\n\t// as the application layer too, if there isn't already one.\n\tp.AddLayer(d)\n\tp.SetApplicationLayer(d)\n\n\treturn p.NextDecoder(d.NextLayerType())\n\n}\n\n//******************************************************************************\n\n// DecodeFromBytes analyses a byte slice and attempts to decode it as an ModbusTCP\n// record of a TCP packet.\n//\n// Upon succeeds, it loads the ModbusTCP object with information about the packet\n// and returns nil.\n// Upon failure, it returns an error (non nil).\nfunc (d *ModbusTCP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\n\t// If the data block is too short to be a MBAP record, then return an error.\n\tif len(data) < mbapRecordSizeInBytes+modbusPDUMinimumRecordSizeInBytes {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ModbusTCP packet too short\")\n\t}\n\n\tif len(data) > mbapRecordSizeInBytes+modbusPDUMaximumRecordSizeInBytes {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ModbusTCP packet too long\")\n\t}\n\n\t// ModbusTCP type embeds type BaseLayer which contains two fields:\n\t//    Contents is supposed to contain the bytes of the data at this level (MPBA).\n\t//    Payload is supposed to contain the payload of this level (PDU).\n\td.BaseLayer = BaseLayer{Contents: data[:mbapRecordSizeInBytes], Payload: data[mbapRecordSizeInBytes:len(data)]}\n\n\t// Extract the fields from the block of bytes.\n\t// The fields can just be copied in big endian order.\n\td.TransactionIdentifier = binary.BigEndian.Uint16(data[:2])\n\td.ProtocolIdentifier = ModbusProtocol(binary.BigEndian.Uint16(data[2:4]))\n\td.Length = binary.BigEndian.Uint16(data[4:6])\n\n\t// Length should have the size of the payload plus one byte (size of UnitIdentifier)\n\tif d.Length != uint16(len(d.BaseLayer.Payload)+1) {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"ModbusTCP packet with wrong field value (Length)\")\n\t}\n\td.UnitIdentifier = uint8(data[6])\n\n\treturn nil\n}\n\n//******************************************************************************\n\n// NextLayerType returns the layer type of the ModbusTCP payload, which is LayerTypePayload.\nfunc (d *ModbusTCP) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\n//******************************************************************************\n\n// Payload returns Modbus Protocol Data Unit (PDU) composed by Function Code and Data, it is carried within ModbusTCP packets\nfunc (d *ModbusTCP) Payload() []byte {\n\treturn d.BaseLayer.Payload\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode\nfunc (s *ModbusTCP) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeModbusTCP\n}\n"
  },
  {
    "path": "layers/mpls.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"github.com/google/gopacket\"\n)\n\n// MPLS is the MPLS packet header.\ntype MPLS struct {\n\tBaseLayer\n\tLabel        uint32\n\tTrafficClass uint8\n\tStackBottom  bool\n\tTTL          uint8\n}\n\n// LayerType returns gopacket.LayerTypeMPLS.\nfunc (m *MPLS) LayerType() gopacket.LayerType { return LayerTypeMPLS }\n\n// ProtocolGuessingDecoder attempts to guess the protocol of the bytes it's\n// given, then decode the packet accordingly.  Its algorithm for guessing is:\n//  If the packet starts with byte 0x45-0x4F: IPv4\n//  If the packet starts with byte 0x60-0x6F: IPv6\n//  Otherwise:  Error\n// See draft-hsmit-isis-aal5mux-00.txt for more detail on this approach.\ntype ProtocolGuessingDecoder struct{}\n\nfunc (ProtocolGuessingDecoder) Decode(data []byte, p gopacket.PacketBuilder) error {\n\tswitch data[0] {\n\t// 0x40 | header_len, where header_len is at least 5.\n\tcase 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f:\n\t\treturn decodeIPv4(data, p)\n\t\t// IPv6 can start with any byte whose first 4 bits are 0x6.\n\tcase 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f:\n\t\treturn decodeIPv6(data, p)\n\t}\n\treturn errors.New(\"Unable to guess protocol of packet data\")\n}\n\n// MPLSPayloadDecoder is the decoder used to data encapsulated by each MPLS\n// layer.  MPLS contains no type information, so we have to explicitly decide\n// which decoder to use.  This is initially set to ProtocolGuessingDecoder, our\n// simple attempt at guessing protocols based on the first few bytes of data\n// available to us.  However, if you know that in your environment MPLS always\n// encapsulates a specific protocol, you may reset this.\nvar MPLSPayloadDecoder gopacket.Decoder = ProtocolGuessingDecoder{}\n\nfunc decodeMPLS(data []byte, p gopacket.PacketBuilder) error {\n\tdecoded := binary.BigEndian.Uint32(data[:4])\n\tmpls := &MPLS{\n\t\tLabel:        decoded >> 12,\n\t\tTrafficClass: uint8(decoded>>9) & 0x7,\n\t\tStackBottom:  decoded&0x100 != 0,\n\t\tTTL:          uint8(decoded),\n\t\tBaseLayer:    BaseLayer{data[:4], data[4:]},\n\t}\n\tp.AddLayer(mpls)\n\tif mpls.StackBottom {\n\t\treturn p.NextDecoder(MPLSPayloadDecoder)\n\t}\n\treturn p.NextDecoder(gopacket.DecodeFunc(decodeMPLS))\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (m *MPLS) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbytes, err := b.PrependBytes(4)\n\tif err != nil {\n\t\treturn err\n\t}\n\tencoded := m.Label << 12\n\tencoded |= uint32(m.TrafficClass) << 9\n\tencoded |= uint32(m.TTL)\n\tif m.StackBottom {\n\t\tencoded |= 0x100\n\t}\n\tbinary.BigEndian.PutUint32(bytes, encoded)\n\treturn nil\n}\n"
  },
  {
    "path": "layers/mpls_test.go",
    "content": "// Copyright 2016 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// testPacketMPLS\n// Ethernet II, Src: cc:15:14:64:00:00 (cc:15:14:64:00:00), Dst: cc:13:14:64:00:01 (cc:13:14:64:00:01)\n// MultiProtocol Label Switching Header, Label: 17, Exp: 0, S: 0, TTL: 254\n// MultiProtocol Label Switching Header, Label: 19, Exp: 0, S: 1, TTL: 254\n// Internet Protocol Version 4, Src: 12.0.0.1, Dst: 2.2.2.2\n// Internet Control Message Protocol\n// 0000   cc 13 14 64 00 01 cc 15 14 64 00 00 88 47 00 01  ...d.....d...G..\n// 0010   10 fe 00 01 31 fe 45 00 00 64 00 39 00 00 fe 01  ....1.E..d.9....\n// 0020   ac 5b 0c 00 00 01 02 02 02 02 08 00 3a 6b 00 0b  .[..........:k..\n// 0030   00 02 00 00 00 00 00 3e 43 94 ab cd ab cd ab cd  .......>C.......\n// 0040   ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd  ................\n// 0050   ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd  ................\n// 0060   ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd  ................\n// 0070   ab cd ab cd ab cd ab cd ab cd                    ..........\n\nvar testPacketMPLS = []byte{\n\t0xcc, 0x13, 0x14, 0x64, 0x00, 0x01, 0xcc, 0x15, 0x14, 0x64, 0x00, 0x00, 0x88, 0x47, 0x00, 0x01,\n\t0x10, 0xfe, 0x00, 0x01, 0x31, 0xfe, 0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01,\n\t0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b,\n\t0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n}\n\nfunc TestPacketMPLS(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketMPLS, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeMPLS, LayerTypeMPLS, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\tif got, ok := p.Layers()[1].(*MPLS); ok {\n\t\twant := &MPLS{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: []byte{0x00, 0x01, 0x10, 0xfe},\n\t\t\t\tPayload: []byte{0x00, 0x01, 0x31, 0xfe, 0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01,\n\t\t\t\t\t0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b,\n\t\t\t\t\t0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t\t\t\t\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t\t\t\t\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t\t\t\t\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t\t\t\t\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd},\n\t\t\t},\n\t\t\tLabel:        17,\n\t\t\tTrafficClass: 0,\n\t\t\tStackBottom:  false,\n\t\t\tTTL:          254,\n\t\t}\n\t\tif !reflect.DeepEqual(want, got) {\n\t\t\tt.Errorf(\"MPLS layer 1 mismatch, \\nwant %#v\\ngot %#v\\n\", want, got)\n\t\t}\n\t}\n\tif got, ok := p.Layers()[2].(*MPLS); ok {\n\t\twant := &MPLS{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: []byte{0x00, 0x01, 0x31, 0xfe},\n\t\t\t\tPayload: []byte{0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01,\n\t\t\t\t\t0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b,\n\t\t\t\t\t0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t\t\t\t\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t\t\t\t\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t\t\t\t\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,\n\t\t\t\t\t0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd},\n\t\t\t},\n\t\t\tLabel:        19,\n\t\t\tTrafficClass: 0,\n\t\t\tStackBottom:  true,\n\t\t\tTTL:          254,\n\t\t}\n\t\tif !reflect.DeepEqual(want, got) {\n\t\t\tt.Errorf(\"MPLS layer 2 mismatch, \\nwant %#v\\ngot %#v\\n\", want, got)\n\t\t}\n\t}\n}\n\nfunc BenchmarkDecodePacketMPLS(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketMPLS, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n"
  },
  {
    "path": "layers/ndp.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// Enum types courtesy of...\n// http://anonsvn.wireshark.org/wireshark/trunk/epan/dissectors/packet-ndp.c\n\npackage layers\n\nimport (\n\t\"fmt\"\n\t\"github.com/google/gopacket\"\n\t\"net\"\n)\n\ntype NDPChassisType uint8\n\n// Nortel Chassis Types\nconst (\n\tNDPChassisother                                       NDPChassisType = 1\n\tNDPChassis3000                                        NDPChassisType = 2\n\tNDPChassis3030                                        NDPChassisType = 3\n\tNDPChassis2310                                        NDPChassisType = 4\n\tNDPChassis2810                                        NDPChassisType = 5\n\tNDPChassis2912                                        NDPChassisType = 6\n\tNDPChassis2914                                        NDPChassisType = 7\n\tNDPChassis271x                                        NDPChassisType = 8\n\tNDPChassis2813                                        NDPChassisType = 9\n\tNDPChassis2814                                        NDPChassisType = 10\n\tNDPChassis2915                                        NDPChassisType = 11\n\tNDPChassis5000                                        NDPChassisType = 12\n\tNDPChassis2813SA                                      NDPChassisType = 13\n\tNDPChassis2814SA                                      NDPChassisType = 14\n\tNDPChassis810M                                        NDPChassisType = 15\n\tNDPChassisEthercell                                   NDPChassisType = 16\n\tNDPChassis5005                                        NDPChassisType = 17\n\tNDPChassisAlcatelEWC                                  NDPChassisType = 18\n\tNDPChassis2715SA                                      NDPChassisType = 20\n\tNDPChassis2486                                        NDPChassisType = 21\n\tNDPChassis28000series                                 NDPChassisType = 22\n\tNDPChassis23000series                                 NDPChassisType = 23\n\tNDPChassis5DN00xseries                                NDPChassisType = 24\n\tNDPChassisBayStackEthernet                            NDPChassisType = 25\n\tNDPChassis23100series                                 NDPChassisType = 26\n\tNDPChassis100BaseTHub                                 NDPChassisType = 27\n\tNDPChassis3000FastEthernet                            NDPChassisType = 28\n\tNDPChassisOrionSwitch                                 NDPChassisType = 29\n\tNDPChassisDDS                                         NDPChassisType = 31\n\tNDPChassisCentillion6slot                             NDPChassisType = 32\n\tNDPChassisCentillion12slot                            NDPChassisType = 33\n\tNDPChassisCentillion1slot                             NDPChassisType = 34\n\tNDPChassisBayStack301                                 NDPChassisType = 35\n\tNDPChassisBayStackTokenRingHub                        NDPChassisType = 36\n\tNDPChassisFVCMultimediaSwitch                         NDPChassisType = 37\n\tNDPChassisSwitchNode                                  NDPChassisType = 38\n\tNDPChassisBayStack302Switch                           NDPChassisType = 39\n\tNDPChassisBayStack350Switch                           NDPChassisType = 40\n\tNDPChassisBayStack150EthernetHub                      NDPChassisType = 41\n\tNDPChassisCentillion50NSwitch                         NDPChassisType = 42\n\tNDPChassisCentillion50TSwitch                         NDPChassisType = 43\n\tNDPChassisBayStack303304Switches                      NDPChassisType = 44\n\tNDPChassisBayStack200EthernetHub                      NDPChassisType = 45\n\tNDPChassisBayStack25010100EthernetHub                 NDPChassisType = 46\n\tNDPChassisBayStack450101001000Switches                NDPChassisType = 48\n\tNDPChassisBayStack41010100Switches                    NDPChassisType = 49\n\tNDPChassisPassport1200L3Switch                        NDPChassisType = 50\n\tNDPChassisPassport1250L3Switch                        NDPChassisType = 51\n\tNDPChassisPassport1100L3Switch                        NDPChassisType = 52\n\tNDPChassisPassport1150L3Switch                        NDPChassisType = 53\n\tNDPChassisPassport1050L3Switch                        NDPChassisType = 54\n\tNDPChassisPassport1051L3Switch                        NDPChassisType = 55\n\tNDPChassisPassport8610L3Switch                        NDPChassisType = 56\n\tNDPChassisPassport8606L3Switch                        NDPChassisType = 57\n\tNDPChassisPassport8010                                NDPChassisType = 58\n\tNDPChassisPassport8006                                NDPChassisType = 59\n\tNDPChassisBayStack670wirelessaccesspoint              NDPChassisType = 60\n\tNDPChassisPassport740                                 NDPChassisType = 61\n\tNDPChassisPassport750                                 NDPChassisType = 62\n\tNDPChassisPassport790                                 NDPChassisType = 63\n\tNDPChassisBusinessPolicySwitch200010100Switches       NDPChassisType = 64\n\tNDPChassisPassport8110L2Switch                        NDPChassisType = 65\n\tNDPChassisPassport8106L2Switch                        NDPChassisType = 66\n\tNDPChassisBayStack3580GigSwitch                       NDPChassisType = 67\n\tNDPChassisBayStack10PowerSupplyUnit                   NDPChassisType = 68\n\tNDPChassisBayStack42010100Switch                      NDPChassisType = 69\n\tNDPChassisOPTeraMetro1200EthernetServiceModule        NDPChassisType = 70\n\tNDPChassisOPTera8010co                                NDPChassisType = 71\n\tNDPChassisOPTera8610coL3Switch                        NDPChassisType = 72\n\tNDPChassisOPTera8110coL2Switch                        NDPChassisType = 73\n\tNDPChassisOPTera8003                                  NDPChassisType = 74\n\tNDPChassisOPTera8603L3Switch                          NDPChassisType = 75\n\tNDPChassisOPTera8103L2Switch                          NDPChassisType = 76\n\tNDPChassisBayStack380101001000Switch                  NDPChassisType = 77\n\tNDPChassisEthernetSwitch47048T                        NDPChassisType = 78\n\tNDPChassisOPTeraMetro1450EthernetServiceModule        NDPChassisType = 79\n\tNDPChassisOPTeraMetro1400EthernetServiceModule        NDPChassisType = 80\n\tNDPChassisAlteonSwitchFamily                          NDPChassisType = 81\n\tNDPChassisEthernetSwitch46024TPWR                     NDPChassisType = 82\n\tNDPChassisOPTeraMetro8010OPML2Switch                  NDPChassisType = 83\n\tNDPChassisOPTeraMetro8010coOPML2Switch                NDPChassisType = 84\n\tNDPChassisOPTeraMetro8006OPML2Switch                  NDPChassisType = 85\n\tNDPChassisOPTeraMetro8003OPML2Switch                  NDPChassisType = 86\n\tNDPChassisAlteon180e                                  NDPChassisType = 87\n\tNDPChassisAlteonAD3                                   NDPChassisType = 88\n\tNDPChassisAlteon184                                   NDPChassisType = 89\n\tNDPChassisAlteonAD4                                   NDPChassisType = 90\n\tNDPChassisPassport1424L3Switch                        NDPChassisType = 91\n\tNDPChassisPassport1648L3Switch                        NDPChassisType = 92\n\tNDPChassisPassport1612L3Switch                        NDPChassisType = 93\n\tNDPChassisPassport1624L3Switch                        NDPChassisType = 94\n\tNDPChassisBayStack38024FFiber1000Switch               NDPChassisType = 95\n\tNDPChassisEthernetRoutingSwitch551024T                NDPChassisType = 96\n\tNDPChassisEthernetRoutingSwitch551048T                NDPChassisType = 97\n\tNDPChassisEthernetSwitch47024T                        NDPChassisType = 98\n\tNDPChassisNortelNetworksWirelessLANAccessPoint2220    NDPChassisType = 99\n\tNDPChassisPassportRBS2402L3Switch                     NDPChassisType = 100\n\tNDPChassisAlteonApplicationSwitch2424                 NDPChassisType = 101\n\tNDPChassisAlteonApplicationSwitch2224                 NDPChassisType = 102\n\tNDPChassisAlteonApplicationSwitch2208                 NDPChassisType = 103\n\tNDPChassisAlteonApplicationSwitch2216                 NDPChassisType = 104\n\tNDPChassisAlteonApplicationSwitch3408                 NDPChassisType = 105\n\tNDPChassisAlteonApplicationSwitch3416                 NDPChassisType = 106\n\tNDPChassisNortelNetworksWirelessLANSecuritySwitch2250 NDPChassisType = 107\n\tNDPChassisEthernetSwitch42548T                        NDPChassisType = 108\n\tNDPChassisEthernetSwitch42524T                        NDPChassisType = 109\n\tNDPChassisNortelNetworksWirelessLANAccessPoint2221    NDPChassisType = 110\n\tNDPChassisNortelMetroEthernetServiceUnit24TSPFswitch  NDPChassisType = 111\n\tNDPChassisNortelMetroEthernetServiceUnit24TLXDCswitch NDPChassisType = 112\n\tNDPChassisPassport830010slotchassis                   NDPChassisType = 113\n\tNDPChassisPassport83006slotchassis                    NDPChassisType = 114\n\tNDPChassisEthernetRoutingSwitch552024TPWR             NDPChassisType = 115\n\tNDPChassisEthernetRoutingSwitch552048TPWR             NDPChassisType = 116\n\tNDPChassisNortelNetworksVPNGateway3050                NDPChassisType = 117\n\tNDPChassisAlteonSSL31010100                           NDPChassisType = 118\n\tNDPChassisAlteonSSL31010100Fiber                      NDPChassisType = 119\n\tNDPChassisAlteonSSL31010100FIPS                       NDPChassisType = 120\n\tNDPChassisAlteonSSL410101001000                       NDPChassisType = 121\n\tNDPChassisAlteonSSL410101001000Fiber                  NDPChassisType = 122\n\tNDPChassisAlteonApplicationSwitch2424SSL              NDPChassisType = 123\n\tNDPChassisEthernetSwitch32524T                        NDPChassisType = 124\n\tNDPChassisEthernetSwitch32524G                        NDPChassisType = 125\n\tNDPChassisNortelNetworksWirelessLANAccessPoint2225    NDPChassisType = 126\n\tNDPChassisNortelNetworksWirelessLANSecuritySwitch2270 NDPChassisType = 127\n\tNDPChassis24portEthernetSwitch47024TPWR               NDPChassisType = 128\n\tNDPChassis48portEthernetSwitch47048TPWR               NDPChassisType = 129\n\tNDPChassisEthernetRoutingSwitch553024TFD              NDPChassisType = 130\n\tNDPChassisEthernetSwitch351024T                       NDPChassisType = 131\n\tNDPChassisNortelMetroEthernetServiceUnit12GACL3Switch NDPChassisType = 132\n\tNDPChassisNortelMetroEthernetServiceUnit12GDCL3Switch NDPChassisType = 133\n\tNDPChassisNortelSecureAccessSwitch                    NDPChassisType = 134\n\tNDPChassisNortelNetworksVPNGateway3070                NDPChassisType = 135\n\tNDPChassisOPTeraMetro3500                             NDPChassisType = 136\n\tNDPChassisSMBBES101024T                               NDPChassisType = 137\n\tNDPChassisSMBBES101048T                               NDPChassisType = 138\n\tNDPChassisSMBBES102024TPWR                            NDPChassisType = 139\n\tNDPChassisSMBBES102048TPWR                            NDPChassisType = 140\n\tNDPChassisSMBBES201024T                               NDPChassisType = 141\n\tNDPChassisSMBBES201048T                               NDPChassisType = 142\n\tNDPChassisSMBBES202024TPWR                            NDPChassisType = 143\n\tNDPChassisSMBBES202048TPWR                            NDPChassisType = 144\n\tNDPChassisSMBBES11024T                                NDPChassisType = 145\n\tNDPChassisSMBBES11048T                                NDPChassisType = 146\n\tNDPChassisSMBBES12024TPWR                             NDPChassisType = 147\n\tNDPChassisSMBBES12048TPWR                             NDPChassisType = 148\n\tNDPChassisSMBBES21024T                                NDPChassisType = 149\n\tNDPChassisSMBBES21048T                                NDPChassisType = 150\n\tNDPChassisSMBBES22024TPWR                             NDPChassisType = 151\n\tNDPChassisSMBBES22048TPWR                             NDPChassisType = 152\n\tNDPChassisOME6500                                     NDPChassisType = 153\n\tNDPChassisEthernetRoutingSwitch4548GT                 NDPChassisType = 154\n\tNDPChassisEthernetRoutingSwitch4548GTPWR              NDPChassisType = 155\n\tNDPChassisEthernetRoutingSwitch4550T                  NDPChassisType = 156\n\tNDPChassisEthernetRoutingSwitch4550TPWR               NDPChassisType = 157\n\tNDPChassisEthernetRoutingSwitch4526FX                 NDPChassisType = 158\n\tNDPChassisEthernetRoutingSwitch250026T                NDPChassisType = 159\n\tNDPChassisEthernetRoutingSwitch250026TPWR             NDPChassisType = 160\n\tNDPChassisEthernetRoutingSwitch250050T                NDPChassisType = 161\n\tNDPChassisEthernetRoutingSwitch250050TPWR             NDPChassisType = 162\n)\n\ntype NDPBackplaneType uint8\n\n// Nortel Backplane Types\nconst (\n\tNDPBackplaneOther                                       NDPBackplaneType = 1\n\tNDPBackplaneEthernet                                    NDPBackplaneType = 2\n\tNDPBackplaneEthernetTokenring                           NDPBackplaneType = 3\n\tNDPBackplaneEthernetFDDI                                NDPBackplaneType = 4\n\tNDPBackplaneEthernetTokenringFDDI                       NDPBackplaneType = 5\n\tNDPBackplaneEthernetTokenringRedundantPower             NDPBackplaneType = 6\n\tNDPBackplaneEthernetTokenringFDDIRedundantPower         NDPBackplaneType = 7\n\tNDPBackplaneTokenRing                                   NDPBackplaneType = 8\n\tNDPBackplaneEthernetTokenringFastEthernet               NDPBackplaneType = 9\n\tNDPBackplaneEthernetFastEthernet                        NDPBackplaneType = 10\n\tNDPBackplaneEthernetTokenringFastEthernetRedundantPower NDPBackplaneType = 11\n\tNDPBackplaneEthernetFastEthernetGigabitEthernet         NDPBackplaneType = 12\n)\n\ntype NDPState uint8\n\n// Device State\nconst (\n\tNDPStateTopology  NDPState = 1\n\tNDPStateHeartbeat NDPState = 2\n\tNDPStateNew       NDPState = 3\n)\n\n// NortelDiscovery is a packet layer containing the Nortel Discovery Protocol.\ntype NortelDiscovery struct {\n\tBaseLayer\n\tIPAddress net.IP\n\tSegmentID []byte\n\tChassis   NDPChassisType\n\tBackplane NDPBackplaneType\n\tState     NDPState\n\tNumLinks  uint8\n}\n\n// LayerType returns gopacket.LayerTypeNortelDiscovery.\nfunc (c *NortelDiscovery) LayerType() gopacket.LayerType {\n\treturn LayerTypeNortelDiscovery\n}\n\nfunc decodeNortelDiscovery(data []byte, p gopacket.PacketBuilder) error {\n\tc := &NortelDiscovery{}\n\tif len(data) < 11 {\n\t\treturn fmt.Errorf(\"Invalid NortelDiscovery packet length %d\", len(data))\n\t}\n\tc.IPAddress = data[0:4]\n\tc.SegmentID = data[4:7]\n\tc.Chassis = NDPChassisType(data[7])\n\tc.Backplane = NDPBackplaneType(data[8])\n\tc.State = NDPState(data[9])\n\tc.NumLinks = uint8(data[10])\n\tp.AddLayer(c)\n\treturn nil\n}\n\nfunc (t NDPChassisType) String() (s string) {\n\tswitch t {\n\tcase NDPChassisother:\n\t\ts = \"other\"\n\tcase NDPChassis3000:\n\t\ts = \"3000\"\n\tcase NDPChassis3030:\n\t\ts = \"3030\"\n\tcase NDPChassis2310:\n\t\ts = \"2310\"\n\tcase NDPChassis2810:\n\t\ts = \"2810\"\n\tcase NDPChassis2912:\n\t\ts = \"2912\"\n\tcase NDPChassis2914:\n\t\ts = \"2914\"\n\tcase NDPChassis271x:\n\t\ts = \"271x\"\n\tcase NDPChassis2813:\n\t\ts = \"2813\"\n\tcase NDPChassis2814:\n\t\ts = \"2814\"\n\tcase NDPChassis2915:\n\t\ts = \"2915\"\n\tcase NDPChassis5000:\n\t\ts = \"5000\"\n\tcase NDPChassis2813SA:\n\t\ts = \"2813SA\"\n\tcase NDPChassis2814SA:\n\t\ts = \"2814SA\"\n\tcase NDPChassis810M:\n\t\ts = \"810M\"\n\tcase NDPChassisEthercell:\n\t\ts = \"Ethercell\"\n\tcase NDPChassis5005:\n\t\ts = \"5005\"\n\tcase NDPChassisAlcatelEWC:\n\t\ts = \"Alcatel Ethernet workgroup conc.\"\n\tcase NDPChassis2715SA:\n\t\ts = \"2715SA\"\n\tcase NDPChassis2486:\n\t\ts = \"2486\"\n\tcase NDPChassis28000series:\n\t\ts = \"28000 series\"\n\tcase NDPChassis23000series:\n\t\ts = \"23000 series\"\n\tcase NDPChassis5DN00xseries:\n\t\ts = \"5DN00x series\"\n\tcase NDPChassisBayStackEthernet:\n\t\ts = \"BayStack Ethernet\"\n\tcase NDPChassis23100series:\n\t\ts = \"23100 series\"\n\tcase NDPChassis100BaseTHub:\n\t\ts = \"100Base-T Hub\"\n\tcase NDPChassis3000FastEthernet:\n\t\ts = \"3000 Fast Ethernet\"\n\tcase NDPChassisOrionSwitch:\n\t\ts = \"Orion switch\"\n\tcase NDPChassisDDS:\n\t\ts = \"DDS\"\n\tcase NDPChassisCentillion6slot:\n\t\ts = \"Centillion (6 slot)\"\n\tcase NDPChassisCentillion12slot:\n\t\ts = \"Centillion (12 slot)\"\n\tcase NDPChassisCentillion1slot:\n\t\ts = \"Centillion (1 slot)\"\n\tcase NDPChassisBayStack301:\n\t\ts = \"BayStack 301\"\n\tcase NDPChassisBayStackTokenRingHub:\n\t\ts = \"BayStack TokenRing Hub\"\n\tcase NDPChassisFVCMultimediaSwitch:\n\t\ts = \"FVC Multimedia Switch\"\n\tcase NDPChassisSwitchNode:\n\t\ts = \"Switch Node\"\n\tcase NDPChassisBayStack302Switch:\n\t\ts = \"BayStack 302 Switch\"\n\tcase NDPChassisBayStack350Switch:\n\t\ts = \"BayStack 350 Switch\"\n\tcase NDPChassisBayStack150EthernetHub:\n\t\ts = \"BayStack 150 Ethernet Hub\"\n\tcase NDPChassisCentillion50NSwitch:\n\t\ts = \"Centillion 50N switch\"\n\tcase NDPChassisCentillion50TSwitch:\n\t\ts = \"Centillion 50T switch\"\n\tcase NDPChassisBayStack303304Switches:\n\t\ts = \"BayStack 303 and 304 Switches\"\n\tcase NDPChassisBayStack200EthernetHub:\n\t\ts = \"BayStack 200 Ethernet Hub\"\n\tcase NDPChassisBayStack25010100EthernetHub:\n\t\ts = \"BayStack 250 10/100 Ethernet Hub\"\n\tcase NDPChassisBayStack450101001000Switches:\n\t\ts = \"BayStack 450 10/100/1000 Switches\"\n\tcase NDPChassisBayStack41010100Switches:\n\t\ts = \"BayStack 410 10/100 Switches\"\n\tcase NDPChassisPassport1200L3Switch:\n\t\ts = \"Passport 1200 L3 Switch\"\n\tcase NDPChassisPassport1250L3Switch:\n\t\ts = \"Passport 1250 L3 Switch\"\n\tcase NDPChassisPassport1100L3Switch:\n\t\ts = \"Passport 1100 L3 Switch\"\n\tcase NDPChassisPassport1150L3Switch:\n\t\ts = \"Passport 1150 L3 Switch\"\n\tcase NDPChassisPassport1050L3Switch:\n\t\ts = \"Passport 1050 L3 Switch\"\n\tcase NDPChassisPassport1051L3Switch:\n\t\ts = \"Passport 1051 L3 Switch\"\n\tcase NDPChassisPassport8610L3Switch:\n\t\ts = \"Passport 8610 L3 Switch\"\n\tcase NDPChassisPassport8606L3Switch:\n\t\ts = \"Passport 8606 L3 Switch\"\n\tcase NDPChassisPassport8010:\n\t\ts = \"Passport 8010\"\n\tcase NDPChassisPassport8006:\n\t\ts = \"Passport 8006\"\n\tcase NDPChassisBayStack670wirelessaccesspoint:\n\t\ts = \"BayStack 670 wireless access point\"\n\tcase NDPChassisPassport740:\n\t\ts = \"Passport 740\"\n\tcase NDPChassisPassport750:\n\t\ts = \"Passport 750\"\n\tcase NDPChassisPassport790:\n\t\ts = \"Passport 790\"\n\tcase NDPChassisBusinessPolicySwitch200010100Switches:\n\t\ts = \"Business Policy Switch 2000 10/100 Switches\"\n\tcase NDPChassisPassport8110L2Switch:\n\t\ts = \"Passport 8110 L2 Switch\"\n\tcase NDPChassisPassport8106L2Switch:\n\t\ts = \"Passport 8106 L2 Switch\"\n\tcase NDPChassisBayStack3580GigSwitch:\n\t\ts = \"BayStack 3580 Gig Switch\"\n\tcase NDPChassisBayStack10PowerSupplyUnit:\n\t\ts = \"BayStack 10 Power Supply Unit\"\n\tcase NDPChassisBayStack42010100Switch:\n\t\ts = \"BayStack 420 10/100 Switch\"\n\tcase NDPChassisOPTeraMetro1200EthernetServiceModule:\n\t\ts = \"OPTera Metro 1200 Ethernet Service Module\"\n\tcase NDPChassisOPTera8010co:\n\t\ts = \"OPTera 8010co\"\n\tcase NDPChassisOPTera8610coL3Switch:\n\t\ts = \"OPTera 8610co L3 switch\"\n\tcase NDPChassisOPTera8110coL2Switch:\n\t\ts = \"OPTera 8110co L2 switch\"\n\tcase NDPChassisOPTera8003:\n\t\ts = \"OPTera 8003\"\n\tcase NDPChassisOPTera8603L3Switch:\n\t\ts = \"OPTera 8603 L3 switch\"\n\tcase NDPChassisOPTera8103L2Switch:\n\t\ts = \"OPTera 8103 L2 switch\"\n\tcase NDPChassisBayStack380101001000Switch:\n\t\ts = \"BayStack 380 10/100/1000 Switch\"\n\tcase NDPChassisEthernetSwitch47048T:\n\t\ts = \"Ethernet Switch 470-48T\"\n\tcase NDPChassisOPTeraMetro1450EthernetServiceModule:\n\t\ts = \"OPTera Metro 1450 Ethernet Service Module\"\n\tcase NDPChassisOPTeraMetro1400EthernetServiceModule:\n\t\ts = \"OPTera Metro 1400 Ethernet Service Module\"\n\tcase NDPChassisAlteonSwitchFamily:\n\t\ts = \"Alteon Switch Family\"\n\tcase NDPChassisEthernetSwitch46024TPWR:\n\t\ts = \"Ethernet Switch 460-24T-PWR\"\n\tcase NDPChassisOPTeraMetro8010OPML2Switch:\n\t\ts = \"OPTera Metro 8010 OPM L2 Switch\"\n\tcase NDPChassisOPTeraMetro8010coOPML2Switch:\n\t\ts = \"OPTera Metro 8010co OPM L2 Switch\"\n\tcase NDPChassisOPTeraMetro8006OPML2Switch:\n\t\ts = \"OPTera Metro 8006 OPM L2 Switch\"\n\tcase NDPChassisOPTeraMetro8003OPML2Switch:\n\t\ts = \"OPTera Metro 8003 OPM L2 Switch\"\n\tcase NDPChassisAlteon180e:\n\t\ts = \"Alteon 180e\"\n\tcase NDPChassisAlteonAD3:\n\t\ts = \"Alteon AD3\"\n\tcase NDPChassisAlteon184:\n\t\ts = \"Alteon 184\"\n\tcase NDPChassisAlteonAD4:\n\t\ts = \"Alteon AD4\"\n\tcase NDPChassisPassport1424L3Switch:\n\t\ts = \"Passport 1424 L3 switch\"\n\tcase NDPChassisPassport1648L3Switch:\n\t\ts = \"Passport 1648 L3 switch\"\n\tcase NDPChassisPassport1612L3Switch:\n\t\ts = \"Passport 1612 L3 switch\"\n\tcase NDPChassisPassport1624L3Switch:\n\t\ts = \"Passport 1624 L3 switch\"\n\tcase NDPChassisBayStack38024FFiber1000Switch:\n\t\ts = \"BayStack 380-24F Fiber 1000 Switch\"\n\tcase NDPChassisEthernetRoutingSwitch551024T:\n\t\ts = \"Ethernet Routing Switch 5510-24T\"\n\tcase NDPChassisEthernetRoutingSwitch551048T:\n\t\ts = \"Ethernet Routing Switch 5510-48T\"\n\tcase NDPChassisEthernetSwitch47024T:\n\t\ts = \"Ethernet Switch 470-24T\"\n\tcase NDPChassisNortelNetworksWirelessLANAccessPoint2220:\n\t\ts = \"Nortel Networks Wireless LAN Access Point 2220\"\n\tcase NDPChassisPassportRBS2402L3Switch:\n\t\ts = \"Passport RBS 2402 L3 switch\"\n\tcase NDPChassisAlteonApplicationSwitch2424:\n\t\ts = \"Alteon Application Switch 2424\"\n\tcase NDPChassisAlteonApplicationSwitch2224:\n\t\ts = \"Alteon Application Switch 2224\"\n\tcase NDPChassisAlteonApplicationSwitch2208:\n\t\ts = \"Alteon Application Switch 2208\"\n\tcase NDPChassisAlteonApplicationSwitch2216:\n\t\ts = \"Alteon Application Switch 2216\"\n\tcase NDPChassisAlteonApplicationSwitch3408:\n\t\ts = \"Alteon Application Switch 3408\"\n\tcase NDPChassisAlteonApplicationSwitch3416:\n\t\ts = \"Alteon Application Switch 3416\"\n\tcase NDPChassisNortelNetworksWirelessLANSecuritySwitch2250:\n\t\ts = \"Nortel Networks Wireless LAN SecuritySwitch 2250\"\n\tcase NDPChassisEthernetSwitch42548T:\n\t\ts = \"Ethernet Switch 425-48T\"\n\tcase NDPChassisEthernetSwitch42524T:\n\t\ts = \"Ethernet Switch 425-24T\"\n\tcase NDPChassisNortelNetworksWirelessLANAccessPoint2221:\n\t\ts = \"Nortel Networks Wireless LAN Access Point 2221\"\n\tcase NDPChassisNortelMetroEthernetServiceUnit24TSPFswitch:\n\t\ts = \"Nortel Metro Ethernet Service Unit 24-T SPF switch\"\n\tcase NDPChassisNortelMetroEthernetServiceUnit24TLXDCswitch:\n\t\ts = \" Nortel Metro Ethernet Service Unit 24-T LX DC switch\"\n\tcase NDPChassisPassport830010slotchassis:\n\t\ts = \"Passport 8300 10-slot chassis\"\n\tcase NDPChassisPassport83006slotchassis:\n\t\ts = \"Passport 8300 6-slot chassis\"\n\tcase NDPChassisEthernetRoutingSwitch552024TPWR:\n\t\ts = \"Ethernet Routing Switch 5520-24T-PWR\"\n\tcase NDPChassisEthernetRoutingSwitch552048TPWR:\n\t\ts = \"Ethernet Routing Switch 5520-48T-PWR\"\n\tcase NDPChassisNortelNetworksVPNGateway3050:\n\t\ts = \"Nortel Networks VPN Gateway 3050\"\n\tcase NDPChassisAlteonSSL31010100:\n\t\ts = \"Alteon SSL 310 10/100\"\n\tcase NDPChassisAlteonSSL31010100Fiber:\n\t\ts = \"Alteon SSL 310 10/100 Fiber\"\n\tcase NDPChassisAlteonSSL31010100FIPS:\n\t\ts = \"Alteon SSL 310 10/100 FIPS\"\n\tcase NDPChassisAlteonSSL410101001000:\n\t\ts = \"Alteon SSL 410 10/100/1000\"\n\tcase NDPChassisAlteonSSL410101001000Fiber:\n\t\ts = \"Alteon SSL 410 10/100/1000 Fiber\"\n\tcase NDPChassisAlteonApplicationSwitch2424SSL:\n\t\ts = \"Alteon Application Switch 2424-SSL\"\n\tcase NDPChassisEthernetSwitch32524T:\n\t\ts = \"Ethernet Switch 325-24T\"\n\tcase NDPChassisEthernetSwitch32524G:\n\t\ts = \"Ethernet Switch 325-24G\"\n\tcase NDPChassisNortelNetworksWirelessLANAccessPoint2225:\n\t\ts = \"Nortel Networks Wireless LAN Access Point 2225\"\n\tcase NDPChassisNortelNetworksWirelessLANSecuritySwitch2270:\n\t\ts = \"Nortel Networks Wireless LAN SecuritySwitch 2270\"\n\tcase NDPChassis24portEthernetSwitch47024TPWR:\n\t\ts = \"24-port Ethernet Switch 470-24T-PWR\"\n\tcase NDPChassis48portEthernetSwitch47048TPWR:\n\t\ts = \"48-port Ethernet Switch 470-48T-PWR\"\n\tcase NDPChassisEthernetRoutingSwitch553024TFD:\n\t\ts = \"Ethernet Routing Switch 5530-24TFD\"\n\tcase NDPChassisEthernetSwitch351024T:\n\t\ts = \"Ethernet Switch 3510-24T\"\n\tcase NDPChassisNortelMetroEthernetServiceUnit12GACL3Switch:\n\t\ts = \"Nortel Metro Ethernet Service Unit 12G AC L3 switch\"\n\tcase NDPChassisNortelMetroEthernetServiceUnit12GDCL3Switch:\n\t\ts = \"Nortel Metro Ethernet Service Unit 12G DC L3 switch\"\n\tcase NDPChassisNortelSecureAccessSwitch:\n\t\ts = \"Nortel Secure Access Switch\"\n\tcase NDPChassisNortelNetworksVPNGateway3070:\n\t\ts = \"Nortel Networks VPN Gateway 3070\"\n\tcase NDPChassisOPTeraMetro3500:\n\t\ts = \"OPTera Metro 3500\"\n\tcase NDPChassisSMBBES101024T:\n\t\ts = \"SMB BES 1010 24T\"\n\tcase NDPChassisSMBBES101048T:\n\t\ts = \"SMB BES 1010 48T\"\n\tcase NDPChassisSMBBES102024TPWR:\n\t\ts = \"SMB BES 1020 24T PWR\"\n\tcase NDPChassisSMBBES102048TPWR:\n\t\ts = \"SMB BES 1020 48T PWR\"\n\tcase NDPChassisSMBBES201024T:\n\t\ts = \"SMB BES 2010 24T\"\n\tcase NDPChassisSMBBES201048T:\n\t\ts = \"SMB BES 2010 48T\"\n\tcase NDPChassisSMBBES202024TPWR:\n\t\ts = \"SMB BES 2020 24T PWR\"\n\tcase NDPChassisSMBBES202048TPWR:\n\t\ts = \"SMB BES 2020 48T PWR\"\n\tcase NDPChassisSMBBES11024T:\n\t\ts = \"SMB BES 110 24T\"\n\tcase NDPChassisSMBBES11048T:\n\t\ts = \"SMB BES 110 48T\"\n\tcase NDPChassisSMBBES12024TPWR:\n\t\ts = \"SMB BES 120 24T PWR\"\n\tcase NDPChassisSMBBES12048TPWR:\n\t\ts = \"SMB BES 120 48T PWR\"\n\tcase NDPChassisSMBBES21024T:\n\t\ts = \"SMB BES 210 24T\"\n\tcase NDPChassisSMBBES21048T:\n\t\ts = \"SMB BES 210 48T\"\n\tcase NDPChassisSMBBES22024TPWR:\n\t\ts = \"SMB BES 220 24T PWR\"\n\tcase NDPChassisSMBBES22048TPWR:\n\t\ts = \"SMB BES 220 48T PWR\"\n\tcase NDPChassisOME6500:\n\t\ts = \"OME 6500\"\n\tcase NDPChassisEthernetRoutingSwitch4548GT:\n\t\ts = \"Ethernet Routing Switch 4548GT\"\n\tcase NDPChassisEthernetRoutingSwitch4548GTPWR:\n\t\ts = \"Ethernet Routing Switch 4548GT-PWR\"\n\tcase NDPChassisEthernetRoutingSwitch4550T:\n\t\ts = \"Ethernet Routing Switch 4550T\"\n\tcase NDPChassisEthernetRoutingSwitch4550TPWR:\n\t\ts = \"Ethernet Routing Switch 4550T-PWR\"\n\tcase NDPChassisEthernetRoutingSwitch4526FX:\n\t\ts = \"Ethernet Routing Switch 4526FX\"\n\tcase NDPChassisEthernetRoutingSwitch250026T:\n\t\ts = \"Ethernet Routing Switch 2500-26T\"\n\tcase NDPChassisEthernetRoutingSwitch250026TPWR:\n\t\ts = \"Ethernet Routing Switch 2500-26T-PWR\"\n\tcase NDPChassisEthernetRoutingSwitch250050T:\n\t\ts = \"Ethernet Routing Switch 2500-50T\"\n\tcase NDPChassisEthernetRoutingSwitch250050TPWR:\n\t\ts = \"Ethernet Routing Switch 2500-50T-PWR\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t NDPBackplaneType) String() (s string) {\n\tswitch t {\n\tcase NDPBackplaneOther:\n\t\ts = \"Other\"\n\tcase NDPBackplaneEthernet:\n\t\ts = \"Ethernet\"\n\tcase NDPBackplaneEthernetTokenring:\n\t\ts = \"Ethernet and Tokenring\"\n\tcase NDPBackplaneEthernetFDDI:\n\t\ts = \"Ethernet and FDDI\"\n\tcase NDPBackplaneEthernetTokenringFDDI:\n\t\ts = \"Ethernet, Tokenring and FDDI\"\n\tcase NDPBackplaneEthernetTokenringRedundantPower:\n\t\ts = \"Ethernet and Tokenring with redundant power\"\n\tcase NDPBackplaneEthernetTokenringFDDIRedundantPower:\n\t\ts = \"Ethernet, Tokenring, FDDI with redundant power\"\n\tcase NDPBackplaneTokenRing:\n\t\ts = \"Token Ring\"\n\tcase NDPBackplaneEthernetTokenringFastEthernet:\n\t\ts = \"Ethernet, Tokenring and Fast Ethernet\"\n\tcase NDPBackplaneEthernetFastEthernet:\n\t\ts = \"Ethernet and Fast Ethernet\"\n\tcase NDPBackplaneEthernetTokenringFastEthernetRedundantPower:\n\t\ts = \"Ethernet, Tokenring, Fast Ethernet with redundant power\"\n\tcase NDPBackplaneEthernetFastEthernetGigabitEthernet:\n\t\ts = \"Ethernet, Fast Ethernet and Gigabit Ethernet\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n\nfunc (t NDPState) String() (s string) {\n\tswitch t {\n\tcase NDPStateTopology:\n\t\ts = \"Topology Change\"\n\tcase NDPStateHeartbeat:\n\t\ts = \"Heartbeat\"\n\tcase NDPStateNew:\n\t\ts = \"New\"\n\tdefault:\n\t\ts = \"Unknown\"\n\t}\n\treturn\n}\n"
  },
  {
    "path": "layers/ntp.go",
    "content": "// Copyright 2016 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n//\n//******************************************************************************\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\n\t\"github.com/google/gopacket\"\n)\n\n//******************************************************************************\n//\n// Network Time Protocol (NTP) Decoding Layer\n// ------------------------------------------\n// This file provides a GoPacket decoding layer for NTP.\n//\n//******************************************************************************\n//\n// About The Network Time Protocol (NTP)\n// -------------------------------------\n// NTP is a protocol that enables computers on the internet to set their\n// clocks to the correct time (or to a time that is acceptably close to the\n// correct time). NTP runs on top of UDP.\n//\n// There have been a series of versions of the NTP protocol. The latest\n// version is V4 and is specified in RFC 5905:\n//     http://www.ietf.org/rfc/rfc5905.txt\n//\n//******************************************************************************\n//\n// References\n// ----------\n//\n// Wikipedia's NTP entry:\n//     https://en.wikipedia.org/wiki/Network_Time_Protocol\n//     This is the best place to get an overview of NTP.\n//\n// Network Time Protocol Home Website:\n//     http://www.ntp.org/\n//     This appears to be the official website of NTP.\n//\n// List of current NTP Protocol RFCs:\n//     http://www.ntp.org/rfc.html\n//\n// RFC 958: \"Network Time Protocol (NTP)\" (1985)\n//     https://tools.ietf.org/html/rfc958\n//     This is the original NTP specification.\n//\n// RFC 1305: \"Network Time Protocol (Version 3) Specification, Implementation and Analysis\" (1992)\n//     https://tools.ietf.org/html/rfc1305\n//     The protocol was updated in 1992 yielding NTP V3.\n//\n// RFC 5905: \"Network Time Protocol Version 4: Protocol and Algorithms Specification\" (2010)\n//     https://www.ietf.org/rfc/rfc5905.txt\n//     The protocol was updated in 2010 yielding NTP V4.\n//     V4 is backwards compatible with all previous versions of NTP.\n//\n// RFC 5906: \"Network Time Protocol Version 4: Autokey Specification\"\n//     https://tools.ietf.org/html/rfc5906\n//     This document addresses the security of the NTP protocol\n//     and is probably not relevant to this package.\n//\n// RFC 5907: \"Definitions of Managed Objects for Network Time Protocol Version 4 (NTPv4)\"\n//     https://tools.ietf.org/html/rfc5907\n//     This document addresses the management of NTP servers and\n//     is probably not relevant to this package.\n//\n// RFC 5908: \"Network Time Protocol (NTP) Server Option for DHCPv6\"\n//     https://tools.ietf.org/html/rfc5908\n//     This document addresses the use of NTP in DHCPv6 and is\n//     probably not relevant to this package.\n//\n// \"Let's make a NTP Client in C\"\n//     https://lettier.github.io/posts/2016-04-26-lets-make-a-ntp-client-in-c.html\n//     This web page contains useful information about the details of NTP,\n//     including an NTP record struture in C, and C code.\n//\n// \"NTP Packet Header (NTP Reference Implementation) (Computer Network Time Synchronization)\"\n//     http://what-when-how.com/computer-network-time-synchronization/\n//        ntp-packet-header-ntp-reference-implementation-computer-network-time-synchronization/\n//     This web page contains useful information on the details of NTP.\n//\n// \"Technical information - NTP Data Packet\"\n//     https://www.meinbergglobal.com/english/info/ntp-packet.htm\n//     This page has a helpful diagram of an NTP V4 packet.\n//\n//******************************************************************************\n//\n// Obsolete References\n// -------------------\n//\n// RFC 1119: \"RFC-1119 \"Network Time Protocol (Version 2) Specification and Implementation\" (1989)\n//     https://tools.ietf.org/html/rfc1119\n//     Version 2 was drafted in 1989.\n//     It is unclear whether V2 was ever implememented or whether the\n//     ideas ended up in V3 (which was implemented in 1992).\n//\n// RFC 1361: \"Simple Network Time Protocol (SNTP)\"\n//     https://tools.ietf.org/html/rfc1361\n//     This document is obsoleted by RFC 1769 and is included only for completeness.\n//\n// RFC 1769: \"Simple Network Time Protocol (SNTP)\"\n//     https://tools.ietf.org/html/rfc1769\n//     This document is obsoleted by RFC 2030 and RFC 4330 and is included only for completeness.\n//\n// RFC 2030: \"Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI\"\n//     https://tools.ietf.org/html/rfc2030\n//     This document is obsoleted by RFC 4330 and is included only for completeness.\n//\n// RFC 4330: \"Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI\"\n//     https://tools.ietf.org/html/rfc4330\n//     This document is obsoleted by RFC 5905 and is included only for completeness.\n//\n//******************************************************************************\n//\n// Endian And Bit Numbering Issues\n// -------------------------------\n//\n// Endian and bit numbering issues can be confusing. Here is some\n// clarification:\n//\n//    ENDIAN: Values are sent big endian.\n//    https://en.wikipedia.org/wiki/Endianness\n//\n//    BIT NUMBERING: Bits are numbered 0 upwards from the most significant\n//    bit to the least significant bit. This means that if there is a 32-bit\n//    value, the most significant bit is called bit 0 and the least\n//    significant bit is called bit 31.\n//\n// See RFC 791 Appendix B for more discussion.\n//\n//******************************************************************************\n//\n// NTP V3 and V4 Packet Format\n// ---------------------------\n// NTP packets are UDP packets whose payload contains an NTP record.\n//\n// The NTP RFC defines the format of the NTP record.\n//\n// There have been four versions of the protocol:\n//\n//    V1 in 1985\n//    V2 in 1989\n//    V3 in 1992\n//    V4 in 2010\n//\n// It is clear that V1 and V2 are obsolete, and there is no need to\n// cater for these formats.\n//\n// V3 and V4 essentially use the same format, with V4 adding some optional\n// fields on the end. So this package supports the V3 and V4 formats.\n//\n// The current version of NTP (NTP V4)'s RFC (V4 - RFC 5905) contains\n// the following diagram for the NTP record format:\n\n//      0                   1                   2                   3\n//      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |LI | VN  |Mode |    Stratum    |     Poll      |   Precision   |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                         Root Delay                            |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                         Root Dispersion                       |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                          Reference ID                         |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                                                               |\n//     +                     Reference Timestamp (64)                  +\n//     |                                                               |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                                                               |\n//     +                      Origin Timestamp (64)                    +\n//     |                                                               |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                                                               |\n//     +                      Receive Timestamp (64)                   +\n//     |                                                               |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                                                               |\n//     +                      Transmit Timestamp (64)                  +\n//     |                                                               |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                                                               |\n//     .                                                               .\n//     .                    Extension Field 1 (variable)               .\n//     .                                                               .\n//     |                                                               |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                                                               |\n//     .                                                               .\n//     .                    Extension Field 2 (variable)               .\n//     .                                                               .\n//     |                                                               |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                          Key Identifier                       |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     |                                                               |\n//     |                            dgst (128)                         |\n//     |                                                               |\n//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n//     From http://www.ietf.org/rfc/rfc5905.txt\n//\n// The fields \"Extension Field 1 (variable)\" and later are optional fields,\n// and so we can set a minimum NTP record size of 48 bytes.\n//\nconst ntpMinimumRecordSizeInBytes int = 48\n\n//******************************************************************************\n\n// NTP Type\n// --------\n// Type NTP implements the DecodingLayer interface. Each NTP object\n// represents in a structured form the NTP record present as the UDP\n// payload in an NTP UDP packet.\n//\n\ntype NTPLeapIndicator uint8\ntype NTPVersion uint8\ntype NTPMode uint8\ntype NTPStratum uint8\ntype NTPLog2Seconds int8\ntype NTPFixed16Seconds uint32\ntype NTPReferenceID uint32\ntype NTPTimestamp uint64\n\ntype NTP struct {\n\tBaseLayer // Stores the packet bytes and payload bytes.\n\n\tLeapIndicator      NTPLeapIndicator  // [0,3]. Indicates whether leap second(s) is to be added.\n\tVersion            NTPVersion        // [0,7]. Version of the NTP protocol.\n\tMode               NTPMode           // [0,7]. Mode.\n\tStratum            NTPStratum        // [0,255]. Stratum of time server in the server tree.\n\tPoll               NTPLog2Seconds    // [-128,127]. The maximum interval between successive messages, in log2 seconds.\n\tPrecision          NTPLog2Seconds    // [-128,127]. The precision of the system clock, in log2 seconds.\n\tRootDelay          NTPFixed16Seconds // [0,2^32-1]. Total round trip delay to the reference clock in seconds times 2^16.\n\tRootDispersion     NTPFixed16Seconds // [0,2^32-1]. Total dispersion to the reference clock, in seconds times 2^16.\n\tReferenceID        NTPReferenceID    // ID code of reference clock [0,2^32-1].\n\tReferenceTimestamp NTPTimestamp      // Most recent timestamp from the reference clock.\n\tOriginTimestamp    NTPTimestamp      // Local time when request was sent from local host.\n\tReceiveTimestamp   NTPTimestamp      // Local time (on server) that request arrived at server host.\n\tTransmitTimestamp  NTPTimestamp      // Local time (on server) that request departed server host.\n\n\t// FIX: This package should analyse the extension fields and represent the extension fields too.\n\tExtensionBytes []byte // Just put extensions in a byte slice.\n}\n\n//******************************************************************************\n\n// LayerType returns the layer type of the NTP object, which is LayerTypeNTP.\nfunc (d *NTP) LayerType() gopacket.LayerType {\n\treturn LayerTypeNTP\n}\n\n//******************************************************************************\n\n// decodeNTP analyses a byte slice and attempts to decode it as an NTP\n// record of a UDP packet.\n//\n// If it succeeds, it loads p with information about the packet and returns nil.\n// If it fails, it returns an error (non nil).\n//\n// This function is employed in layertypes.go to register the NTP layer.\nfunc decodeNTP(data []byte, p gopacket.PacketBuilder) error {\n\n\t// Attempt to decode the byte slice.\n\td := &NTP{}\n\terr := d.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// If the decoding worked, add the layer to the packet and set it\n\t// as the application layer too, if there isn't already one.\n\tp.AddLayer(d)\n\tp.SetApplicationLayer(d)\n\n\treturn nil\n}\n\n//******************************************************************************\n\n// DecodeFromBytes analyses a byte slice and attempts to decode it as an NTP\n// record of a UDP packet.\n//\n// Upon succeeds, it loads the NTP object with information about the packet\n// and returns nil.\n// Upon failure, it returns an error (non nil).\nfunc (d *NTP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\n\t// If the data block is too short to be a NTP record, then return an error.\n\tif len(data) < ntpMinimumRecordSizeInBytes {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"NTP packet too short\")\n\t}\n\n\t// RFC 5905 does not appear to define a maximum NTP record length.\n\t// The protocol allows \"extension fields\" to be included in the record,\n\t// and states about these fields:\"\n\t//\n\t//     \"While the minimum field length containing required fields is\n\t//      four words (16 octets), a maximum field length remains to be\n\t//      established.\"\n\t//\n\t// For this reason, the packet length is not checked here for being too long.\n\n\t// NTP type embeds type BaseLayer which contains two fields:\n\t//    Contents is supposed to contain the bytes of the data at this level.\n\t//    Payload is supposed to contain the payload of this level.\n\t// Here we set the baselayer to be the bytes of the NTP record.\n\td.BaseLayer = BaseLayer{Contents: data[:len(data)]}\n\n\t// Extract the fields from the block of bytes.\n\t// To make sense of this, refer to the packet diagram\n\t// above and the section on endian conventions.\n\n\t// The first few fields are all packed into the first 32 bits. Unpack them.\n\tf := data[0]\n\td.LeapIndicator = NTPLeapIndicator((f & 0xC0) >> 6)\n\td.Version = NTPVersion((f & 0x38) >> 3)\n\td.Mode = NTPMode(f & 0x07)\n\td.Stratum = NTPStratum(data[1])\n\td.Poll = NTPLog2Seconds(data[2])\n\td.Precision = NTPLog2Seconds(data[3])\n\n\t// The remaining fields can just be copied in big endian order.\n\td.RootDelay = NTPFixed16Seconds(binary.BigEndian.Uint32(data[4:8]))\n\td.RootDispersion = NTPFixed16Seconds(binary.BigEndian.Uint32(data[8:12]))\n\td.ReferenceID = NTPReferenceID(binary.BigEndian.Uint32(data[12:16]))\n\td.ReferenceTimestamp = NTPTimestamp(binary.BigEndian.Uint64(data[16:24]))\n\td.OriginTimestamp = NTPTimestamp(binary.BigEndian.Uint64(data[24:32]))\n\td.ReceiveTimestamp = NTPTimestamp(binary.BigEndian.Uint64(data[32:40]))\n\td.TransmitTimestamp = NTPTimestamp(binary.BigEndian.Uint64(data[40:48]))\n\n\t// This layer does not attempt to analyse the extension bytes.\n\t// But if there are any, we'd like the user to know. So we just\n\t// place them all in an ExtensionBytes field.\n\td.ExtensionBytes = data[48:]\n\n\t// Return no error.\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (d *NTP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tdata, err := b.PrependBytes(ntpMinimumRecordSizeInBytes)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Pack the first few fields into the first 32 bits.\n\th := uint8(0)\n\th |= (uint8(d.LeapIndicator) << 6) & 0xC0\n\th |= (uint8(d.Version) << 3) & 0x38\n\th |= (uint8(d.Mode)) & 0x07\n\tdata[0] = byte(h)\n\tdata[1] = byte(d.Stratum)\n\tdata[2] = byte(d.Poll)\n\tdata[3] = byte(d.Precision)\n\n\t// The remaining fields can just be copied in big endian order.\n\tbinary.BigEndian.PutUint32(data[4:8], uint32(d.RootDelay))\n\tbinary.BigEndian.PutUint32(data[8:12], uint32(d.RootDispersion))\n\tbinary.BigEndian.PutUint32(data[12:16], uint32(d.ReferenceID))\n\tbinary.BigEndian.PutUint64(data[16:24], uint64(d.ReferenceTimestamp))\n\tbinary.BigEndian.PutUint64(data[24:32], uint64(d.OriginTimestamp))\n\tbinary.BigEndian.PutUint64(data[32:40], uint64(d.ReceiveTimestamp))\n\tbinary.BigEndian.PutUint64(data[40:48], uint64(d.TransmitTimestamp))\n\n\tex, err := b.AppendBytes(len(d.ExtensionBytes))\n\tif err != nil {\n\t\treturn err\n\t}\n\tcopy(ex, d.ExtensionBytes)\n\n\treturn nil\n}\n\n//******************************************************************************\n\n// CanDecode returns a set of layers that NTP objects can decode.\n// As NTP objects can only decide the NTP layer, we can return just that layer.\n// Apparently a single layer type implements LayerClass.\nfunc (d *NTP) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeNTP\n}\n\n//******************************************************************************\n\n// NextLayerType specifies the next layer that GoPacket should attempt to\n// analyse after this (NTP) layer. As NTP packets do not contain any payload\n// bytes, there are no further layers to analyse.\nfunc (d *NTP) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypeZero\n}\n\n//******************************************************************************\n\n// NTP packets do not carry any data payload, so the empty byte slice is retured.\n// In Go, a nil slice is functionally identical to an empty slice, so we\n// return nil to avoid a heap allocation.\nfunc (d *NTP) Payload() []byte {\n\treturn nil\n}\n\n//******************************************************************************\n//*                            End Of NTP File                                 *\n//******************************************************************************\n"
  },
  {
    "path": "layers/ntp_test.go",
    "content": "// Copyright 2016 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n//\n//******************************************************************************\n\npackage layers\n\nimport (\n\t\"crypto/rand\"\n\t\"github.com/google/gopacket\"\n\t\"io\"\n\t\"reflect\"\n\t\"testing\"\n)\n\n//******************************************************************************\n\n// checkNTP() uses the ntp.go code to analyse the packet bytes as an NTP UDP\n// packet and generate an NTP object. It then compares the generated NTP object\n// with the one provided and throws an error if there is any difference.\n// The desc argument is output with any failure message to identify the test.\nfunc checkNTP(desc string, t *testing.T, packetBytes []byte, pExpectedNTP *NTP) {\n\n\t// Analyse the packet bytes, yielding a new packet object p.\n\tp := gopacket.NewPacket(packetBytes, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Errorf(\"Failed to decode packet %s: %v\", desc, p.ErrorLayer().Error())\n\t}\n\n\t// Ensure that the packet analysis yielded the correct set of layers:\n\t//    Link Layer        = Ethernet.\n\t//    Network Layer     = IPv4.\n\t//    Transport Layer   = UDP.\n\t//    Application Layer = NTP.\n\tcheckLayers(p, []gopacket.LayerType{\n\t\tLayerTypeEthernet,\n\t\tLayerTypeIPv4,\n\t\tLayerTypeUDP,\n\t\tLayerTypeNTP}, t)\n\n\t// Select the Application (NTP) layer.\n\tpResultNTP, ok := p.ApplicationLayer().(*NTP)\n\tif !ok {\n\t\tt.Error(\"No NTP layer type found in packet in \" + desc + \".\")\n\t}\n\n\t// Compare the generated NTP object with the expected NTP object.\n\tif !reflect.DeepEqual(pResultNTP, pExpectedNTP) {\n\t\tt.Errorf(\"NTP packet processing failed for packet \"+desc+\n\t\t\t\":\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", pResultNTP, pExpectedNTP)\n\t}\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{}\n\terr := pResultNTP.SerializeTo(buf, opts)\n\tif err != nil {\n\t\tt.Error(err)\n\t}\n\tif !reflect.DeepEqual(pResultNTP.BaseLayer.Contents, buf.Bytes()) {\n\t\tt.Errorf(\"NTP packet serialization failed for packet \"+desc+\n\t\t\t\":\\ngot  :\\n%x\\n\\nwant :\\n%x\\n\\n\", buf.Bytes(), packetBytes)\n\t}\n}\n\n//******************************************************************************\n\nfunc TestNTPOne(t *testing.T) {\n\n\t// This test packet is the first NTP packet in the NTP sample capture\n\t// pcap file NTP_sync.pcap on the Wireshark sample captures page:\n\t//\n\t//    https://wiki.wireshark.org/SampleCaptures\n\t//    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=NTP_sync.pcap\n\tvar testPacketNTP = []byte{\n\t\t0x00, 0x0c, 0x41, 0x82, 0xb2, 0x53, 0x00, 0xd0,\n\t\t0x59, 0x6c, 0x40, 0x4e, 0x08, 0x00, 0x45, 0x00,\n\t\t0x00, 0x4c, 0x0a, 0x42, 0x00, 0x00, 0x80, 0x11,\n\t\t0xb5, 0xfa, 0xc0, 0xa8, 0x32, 0x32, 0x43, 0x81,\n\t\t0x44, 0x09, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x38,\n\t\t0xf8, 0xd2, 0xd9, 0x00, 0x0a, 0xfa, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x01, 0x02, 0x90, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,\n\t\t0xee, 0x92,\n\t}\n\n\t// Assemble the NTP object that we expect to emerge from this test.\n\tpExpectedNTP := &NTP{\n\t\tBaseLayer: BaseLayer{\n\t\t\tContents: []byte{0xd9, 0x0, 0xa, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0,\n\t\t\t\t0x1, 0x2, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n\t\t\t\t0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n\t\t\t\t0x0, 0x0, 0x0, 0x0, 0x0, 0xc5, 0x2, 0x4, 0xec, 0xec, 0x42, 0xee, 0x92},\n\t\t\tPayload: nil,\n\t\t},\n\t\tLeapIndicator:      3,\n\t\tVersion:            3,\n\t\tMode:               1,\n\t\tStratum:            0,\n\t\tPoll:               10,\n\t\tPrecision:          -6,\n\t\tRootDelay:          0,\n\t\tRootDispersion:     0x10290,\n\t\tReferenceID:        0,\n\t\tReferenceTimestamp: 0,\n\t\tOriginTimestamp:    0,\n\t\tReceiveTimestamp:   0,\n\t\tTransmitTimestamp:  0xc50204ecec42ee92,\n\t\tExtensionBytes:     []byte{},\n\t}\n\n\tcheckNTP(\"test01\", t, testPacketNTP, pExpectedNTP)\n}\n\n//******************************************************************************\n\nfunc TestNTPTwo(t *testing.T) {\n\n\t// This test packet is packet #18 in the NTP sample capture\n\t// pcap file NTP_sync.pcap on the Wireshark sample captures page:\n\t//\n\t//    https://wiki.wireshark.org/SampleCaptures\n\t//    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=NTP_sync.pcap\n\t//\n\t// This packet was chosen because it is the first NTP packet after the first\n\t// NTP packet that has non-zero timestamps.\n\n\tvar testPacketNTP = []byte{\n\t\t0x00, 0xd0, 0x59, 0x6c, 0x40, 0x4e, 0x00, 0x0c,\n\t\t0x41, 0x82, 0xb2, 0x53, 0x08, 0x00, 0x45, 0x00,\n\t\t0x00, 0x4c, 0x32, 0x46, 0x40, 0x00, 0x2f, 0x11,\n\t\t0xa8, 0x18, 0x45, 0x2c, 0x39, 0x3c, 0xc0, 0xa8,\n\t\t0x32, 0x32, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x38,\n\t\t0x09, 0x58, 0x1a, 0x03, 0x0a, 0xee, 0x00, 0x00,\n\t\t0x1b, 0xf7, 0x00, 0x00, 0x14, 0xec, 0x51, 0xae,\n\t\t0x80, 0xb7, 0xc5, 0x02, 0x03, 0x4c, 0x8d, 0x0e,\n\t\t0x66, 0xcb, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,\n\t\t0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x49,\n\t\t0x59, 0xe6, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x4c,\n\t\t0x6e, 0x6e,\n\t}\n\n\t// Assemble the NTP object that we expect to emerge from this test.\n\tpExpectedNTP := &NTP{\n\t\tBaseLayer: BaseLayer{\n\t\t\tContents: []byte{0x1a, 0x03, 0x0a, 0xee, 0x00, 0x00,\n\t\t\t\t0x1b, 0xf7, 0x00, 0x00, 0x14, 0xec, 0x51, 0xae,\n\t\t\t\t0x80, 0xb7, 0xc5, 0x02, 0x03, 0x4c, 0x8d, 0x0e,\n\t\t\t\t0x66, 0xcb, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,\n\t\t\t\t0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x49,\n\t\t\t\t0x59, 0xe6, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x4c,\n\t\t\t\t0x6e, 0x6e},\n\t\t\tPayload: nil,\n\t\t},\n\t\tLeapIndicator:      0,\n\t\tVersion:            3,\n\t\tMode:               2,\n\t\tStratum:            3,\n\t\tPoll:               10,\n\t\tPrecision:          -18,\n\t\tRootDelay:          0x1bf7,\n\t\tRootDispersion:     0x14ec,\n\t\tReferenceID:        0x51ae80b7,\n\t\tReferenceTimestamp: 0xc502034c8d0e66cb,\n\t\tOriginTimestamp:    0xc50204ecec42ee92,\n\t\tReceiveTimestamp:   0xc50204ebcf4959e6,\n\t\tTransmitTimestamp:  0xc50204ebcf4c6e6e,\n\t\tExtensionBytes:     []byte{},\n\t}\n\n\tcheckNTP(\"test02\", t, testPacketNTP, pExpectedNTP)\n}\n\n//******************************************************************************\n\nfunc TestNTPThree(t *testing.T) {\n\n\t// This test packet is packet #19 in the NTP sample capture\n\t// pcap file NTP_sync.pcap on the Wireshark sample captures page:\n\t//\n\t//    https://wiki.wireshark.org/SampleCaptures\n\t//    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=NTP_sync.pcap\n\n\tvar testPacketNTP = []byte{\n\t\t0x00, 0xd0, 0x59, 0x6c, 0x40, 0x4e, 0x00, 0x0c,\n\t\t0x41, 0x82, 0xb2, 0x53, 0x08, 0x00, 0x45, 0x00,\n\t\t0x00, 0x4c, 0x00, 0x00, 0x40, 0x00, 0x30, 0x11,\n\t\t0x74, 0x65, 0x18, 0x7b, 0xca, 0xe6, 0xc0, 0xa8,\n\t\t0x32, 0x32, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x38,\n\t\t0x44, 0x05, 0x1a, 0x02, 0x0a, 0xec, 0x00, 0x00,\n\t\t0x07, 0xc3, 0x00, 0x00, 0x2f, 0x80, 0xc6, 0x1e,\n\t\t0x5c, 0x02, 0xc5, 0x01, 0xf9, 0x95, 0x42, 0x50,\n\t\t0x82, 0xcf, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,\n\t\t0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35,\n\t\t0x2e, 0xb5, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35,\n\t\t0xd6, 0x7b,\n\t}\n\n\t// Assemble the NTP object that we expect to emerge from this test.\n\tpExpectedNTP := &NTP{\n\t\tBaseLayer: BaseLayer{\n\t\t\tContents: []byte{0x1a, 0x02, 0x0a, 0xec, 0x00, 0x00,\n\t\t\t\t0x07, 0xc3, 0x00, 0x00, 0x2f, 0x80, 0xc6, 0x1e,\n\t\t\t\t0x5c, 0x02, 0xc5, 0x01, 0xf9, 0x95, 0x42, 0x50,\n\t\t\t\t0x82, 0xcf, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,\n\t\t\t\t0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35,\n\t\t\t\t0x2e, 0xb5, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35,\n\t\t\t\t0xd6, 0x7b},\n\t\t\tPayload: nil,\n\t\t},\n\t\tLeapIndicator:      0,\n\t\tVersion:            3,\n\t\tMode:               2,\n\t\tStratum:            2,\n\t\tPoll:               10,\n\t\tPrecision:          -20,\n\t\tRootDelay:          0x7c3,\n\t\tRootDispersion:     0x2f80,\n\t\tReferenceID:        0xc61e5c02,\n\t\tReferenceTimestamp: 0xc501f995425082cf,\n\t\tOriginTimestamp:    0xc50204ecec42ee92,\n\t\tReceiveTimestamp:   0xc50204ebd2352eb5,\n\t\tTransmitTimestamp:  0xc50204ebd235d67b,\n\t\tExtensionBytes:     []byte{},\n\t}\n\n\tcheckNTP(\"test03\", t, testPacketNTP, pExpectedNTP)\n}\n\n//******************************************************************************\n\n// TestNTPIsomorphism tests whether random data gets parsed into NTP layer and\n// gets serialized back from it to the same value.\nfunc TestNTPIsomorphism(t *testing.T) {\n\tNTPData := make([]byte, ntpMinimumRecordSizeInBytes+7)\n\t_, err := io.ReadFull(rand.Reader, NTPData)\n\tif err != nil {\n\t\tt.Error(err)\n\t}\n\tntpLayer := &NTP{}\n\terr = ntpLayer.DecodeFromBytes(NTPData, gopacket.NilDecodeFeedback)\n\tif err != nil {\n\t\tt.Error(err)\n\t}\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{}\n\terr = ntpLayer.SerializeTo(buf, opts)\n\tif err != nil {\n\t\tt.Error(err)\n\t}\n\tif !reflect.DeepEqual(NTPData, buf.Bytes()) {\n\t\tt.Errorf(\"NTP packet is not isomorphic:\\ngot  :\\n%x\\n\\nwant :\\n%x\\n\\n\", buf.Bytes(), NTPData)\n\t}\n}\n"
  },
  {
    "path": "layers/ospf.go",
    "content": "// Copyright 2017 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// OSPFType denotes what kind of OSPF type it is\ntype OSPFType uint8\n\n// Potential values for OSPF.Type.\nconst (\n\tOSPFHello                   OSPFType = 1\n\tOSPFDatabaseDescription     OSPFType = 2\n\tOSPFLinkStateRequest        OSPFType = 3\n\tOSPFLinkStateUpdate         OSPFType = 4\n\tOSPFLinkStateAcknowledgment OSPFType = 5\n)\n\n// LSA Function Codes for LSAheader.LSType\nconst (\n\tRouterLSAtypeV2         = 0x1\n\tRouterLSAtype           = 0x2001\n\tNetworkLSAtypeV2        = 0x2\n\tNetworkLSAtype          = 0x2002\n\tSummaryLSANetworktypeV2 = 0x3\n\tInterAreaPrefixLSAtype  = 0x2003\n\tSummaryLSAASBRtypeV2    = 0x4\n\tInterAreaRouterLSAtype  = 0x2004\n\tASExternalLSAtypeV2     = 0x5\n\tASExternalLSAtype       = 0x4005\n\tNSSALSAtype             = 0x2007\n\tNSSALSAtypeV2           = 0x7\n\tLinkLSAtype             = 0x0008\n\tIntraAreaPrefixLSAtype  = 0x2009\n)\n\n// String conversions for OSPFType\nfunc (i OSPFType) String() string {\n\tswitch i {\n\tcase OSPFHello:\n\t\treturn \"Hello\"\n\tcase OSPFDatabaseDescription:\n\t\treturn \"Database Description\"\n\tcase OSPFLinkStateRequest:\n\t\treturn \"Link State Request\"\n\tcase OSPFLinkStateUpdate:\n\t\treturn \"Link State Update\"\n\tcase OSPFLinkStateAcknowledgment:\n\t\treturn \"Link State Acknowledgment\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\n// Prefix extends IntraAreaPrefixLSA\ntype Prefix struct {\n\tPrefixLength  uint8\n\tPrefixOptions uint8\n\tMetric        uint16\n\tAddressPrefix []byte\n}\n\n// IntraAreaPrefixLSA is the struct from RFC 5340  A.4.10.\ntype IntraAreaPrefixLSA struct {\n\tNumOfPrefixes  uint16\n\tRefLSType      uint16\n\tRefLinkStateID uint32\n\tRefAdvRouter   uint32\n\tPrefixes       []Prefix\n}\n\n// LinkLSA is the struct from RFC 5340  A.4.9.\ntype LinkLSA struct {\n\tRtrPriority      uint8\n\tOptions          uint32\n\tLinkLocalAddress []byte\n\tNumOfPrefixes    uint32\n\tPrefixes         []Prefix\n}\n\n// ASExternalLSAV2 is the struct from RFC 2328  A.4.5.\ntype ASExternalLSAV2 struct {\n\tNetworkMask       uint32\n\tExternalBit       uint8\n\tMetric            uint32\n\tForwardingAddress uint32\n\tExternalRouteTag  uint32\n}\n\n// ASExternalLSA is the struct from RFC 5340  A.4.7.\ntype ASExternalLSA struct {\n\tFlags             uint8\n\tMetric            uint32\n\tPrefixLength      uint8\n\tPrefixOptions     uint8\n\tRefLSType         uint16\n\tAddressPrefix     []byte\n\tForwardingAddress []byte\n\tExternalRouteTag  uint32\n\tRefLinkStateID    uint32\n}\n\n// InterAreaRouterLSA is the struct from RFC 5340  A.4.6.\ntype InterAreaRouterLSA struct {\n\tOptions             uint32\n\tMetric              uint32\n\tDestinationRouterID uint32\n}\n\n// InterAreaPrefixLSA is the struct from RFC 5340  A.4.5.\ntype InterAreaPrefixLSA struct {\n\tMetric        uint32\n\tPrefixLength  uint8\n\tPrefixOptions uint8\n\tAddressPrefix []byte\n}\n\n// NetworkLSA is the struct from RFC 5340  A.4.4.\ntype NetworkLSA struct {\n\tOptions        uint32\n\tAttachedRouter []uint32\n}\n\n// NetworkLSAV2 is the struct from RFC 2328  A.4.3.\ntype NetworkLSAV2 struct {\n\tNetworkMask    uint32\n\tAttachedRouter []uint32\n}\n\n// RouterV2 extends RouterLSAV2\ntype RouterV2 struct {\n\tType     uint8\n\tLinkID   uint32\n\tLinkData uint32\n\tMetric   uint16\n}\n\n// RouterLSAV2 is the struct from RFC 2328  A.4.2.\ntype RouterLSAV2 struct {\n\tFlags   uint8\n\tLinks   uint16\n\tRouters []RouterV2\n}\n\n// Router extends RouterLSA\ntype Router struct {\n\tType                uint8\n\tMetric              uint16\n\tInterfaceID         uint32\n\tNeighborInterfaceID uint32\n\tNeighborRouterID    uint32\n}\n\n// RouterLSA is the struct from RFC 5340  A.4.3.\ntype RouterLSA struct {\n\tFlags   uint8\n\tOptions uint32\n\tRouters []Router\n}\n\n// LSAheader is the struct from RFC 5340  A.4.2 and RFC 2328 A.4.1.\ntype LSAheader struct {\n\tLSAge       uint16\n\tLSType      uint16\n\tLinkStateID uint32\n\tAdvRouter   uint32\n\tLSSeqNumber uint32\n\tLSChecksum  uint16\n\tLength      uint16\n\tLSOptions   uint8\n}\n\n// LSA links LSAheader with the structs from RFC 5340  A.4.\ntype LSA struct {\n\tLSAheader\n\tContent interface{}\n}\n\n// LSUpdate is the struct from RFC 5340  A.3.5.\ntype LSUpdate struct {\n\tNumOfLSAs uint32\n\tLSAs      []LSA\n}\n\n// LSReq is the struct from RFC 5340  A.3.4.\ntype LSReq struct {\n\tLSType    uint16\n\tLSID      uint32\n\tAdvRouter uint32\n}\n\n// DbDescPkg is the struct from RFC 5340  A.3.3.\ntype DbDescPkg struct {\n\tOptions      uint32\n\tInterfaceMTU uint16\n\tFlags        uint16\n\tDDSeqNumber  uint32\n\tLSAinfo      []LSAheader\n}\n\n// HelloPkg  is the struct from RFC 5340  A.3.2.\ntype HelloPkg struct {\n\tInterfaceID              uint32\n\tRtrPriority              uint8\n\tOptions                  uint32\n\tHelloInterval            uint16\n\tRouterDeadInterval       uint32\n\tDesignatedRouterID       uint32\n\tBackupDesignatedRouterID uint32\n\tNeighborID               []uint32\n}\n\n// HelloPkgV2 extends the HelloPkg struct with OSPFv2 information\ntype HelloPkgV2 struct {\n\tHelloPkg\n\tNetworkMask uint32\n}\n\n// OSPF is a basic OSPF packet header with common fields of Version 2 and Version 3.\ntype OSPF struct {\n\tVersion      uint8\n\tType         OSPFType\n\tPacketLength uint16\n\tRouterID     uint32\n\tAreaID       uint32\n\tChecksum     uint16\n\tContent      interface{}\n}\n\n//OSPFv2 extend the OSPF head with version 2 specific fields\ntype OSPFv2 struct {\n\tBaseLayer\n\tOSPF\n\tAuType         uint16\n\tAuthentication uint64\n}\n\n// OSPFv3 extend the OSPF head with version 3 specific fields\ntype OSPFv3 struct {\n\tBaseLayer\n\tOSPF\n\tInstance uint8\n\tReserved uint8\n}\n\n// getLSAsv2 parses the LSA information from the packet for OSPFv2\nfunc getLSAsv2(num uint32, data []byte) ([]LSA, error) {\n\tvar lsas []LSA\n\tvar i uint32 = 0\n\tvar offset uint32 = 0\n\tfor ; i < num; i++ {\n\t\tlstype := uint16(data[offset+3])\n\t\tlsalength := binary.BigEndian.Uint16(data[offset+18 : offset+20])\n\t\tcontent, err := extractLSAInformation(lstype, lsalength, data[offset:])\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Could not extract Link State type.\")\n\t\t}\n\t\tlsa := LSA{\n\t\t\tLSAheader: LSAheader{\n\t\t\t\tLSAge:       binary.BigEndian.Uint16(data[offset : offset+2]),\n\t\t\t\tLSOptions:   data[offset+2],\n\t\t\t\tLSType:      lstype,\n\t\t\t\tLinkStateID: binary.BigEndian.Uint32(data[offset+4 : offset+8]),\n\t\t\t\tAdvRouter:   binary.BigEndian.Uint32(data[offset+8 : offset+12]),\n\t\t\t\tLSSeqNumber: binary.BigEndian.Uint32(data[offset+12 : offset+16]),\n\t\t\t\tLSChecksum:  binary.BigEndian.Uint16(data[offset+16 : offset+18]),\n\t\t\t\tLength:      lsalength,\n\t\t\t},\n\t\t\tContent: content,\n\t\t}\n\t\tlsas = append(lsas, lsa)\n\t\toffset += uint32(lsalength)\n\t}\n\treturn lsas, nil\n}\n\n// extractLSAInformation extracts all the LSA information\nfunc extractLSAInformation(lstype, lsalength uint16, data []byte) (interface{}, error) {\n\tif lsalength < 20 {\n\t\treturn nil, fmt.Errorf(\"Link State header length %v too short, %v required\", lsalength, 20)\n\t}\n\tif len(data) < int(lsalength) {\n\t\treturn nil, fmt.Errorf(\"Link State header length %v too short, %v required\", len(data), lsalength)\n\t}\n\tvar content interface{}\n\tswitch lstype {\n\tcase RouterLSAtypeV2:\n\t\tvar routers []RouterV2\n\t\tvar j uint32\n\t\tfor j = 24; j < uint32(lsalength); j += 12 {\n\t\t\tif len(data) < int(j+12) {\n\t\t\t\treturn nil, errors.New(\"LSAtypeV2 too small\")\n\t\t\t}\n\t\t\trouter := RouterV2{\n\t\t\t\tLinkID:   binary.BigEndian.Uint32(data[j : j+4]),\n\t\t\t\tLinkData: binary.BigEndian.Uint32(data[j+4 : j+8]),\n\t\t\t\tType:     uint8(data[j+8]),\n\t\t\t\tMetric:   binary.BigEndian.Uint16(data[j+10 : j+12]),\n\t\t\t}\n\t\t\trouters = append(routers, router)\n\t\t}\n\t\tif len(data) < 24 {\n\t\t\treturn nil, errors.New(\"LSAtypeV2 too small\")\n\t\t}\n\t\tlinks := binary.BigEndian.Uint16(data[22:24])\n\t\tcontent = RouterLSAV2{\n\t\t\tFlags:   data[20],\n\t\t\tLinks:   links,\n\t\t\tRouters: routers,\n\t\t}\n\tcase NSSALSAtypeV2:\n\t\tfallthrough\n\tcase ASExternalLSAtypeV2:\n\t\tcontent = ASExternalLSAV2{\n\t\t\tNetworkMask:       binary.BigEndian.Uint32(data[20:24]),\n\t\t\tExternalBit:       data[24] & 0x80,\n\t\t\tMetric:            binary.BigEndian.Uint32(data[24:28]) & 0x00FFFFFF,\n\t\t\tForwardingAddress: binary.BigEndian.Uint32(data[28:32]),\n\t\t\tExternalRouteTag:  binary.BigEndian.Uint32(data[32:36]),\n\t\t}\n\tcase NetworkLSAtypeV2:\n\t\tvar routers []uint32\n\t\tvar j uint32\n\t\tfor j = 24; j < uint32(lsalength); j += 4 {\n\t\t\trouters = append(routers, binary.BigEndian.Uint32(data[j:j+4]))\n\t\t}\n\t\tcontent = NetworkLSAV2{\n\t\t\tNetworkMask:    binary.BigEndian.Uint32(data[20:24]),\n\t\t\tAttachedRouter: routers,\n\t\t}\n\tcase RouterLSAtype:\n\t\tvar routers []Router\n\t\tvar j uint32\n\t\tfor j = 24; j < uint32(lsalength); j += 16 {\n\t\t\trouter := Router{\n\t\t\t\tType:                uint8(data[j]),\n\t\t\t\tMetric:              binary.BigEndian.Uint16(data[j+2 : j+4]),\n\t\t\t\tInterfaceID:         binary.BigEndian.Uint32(data[j+4 : j+8]),\n\t\t\t\tNeighborInterfaceID: binary.BigEndian.Uint32(data[j+8 : j+12]),\n\t\t\t\tNeighborRouterID:    binary.BigEndian.Uint32(data[j+12 : j+16]),\n\t\t\t}\n\t\t\trouters = append(routers, router)\n\t\t}\n\t\tcontent = RouterLSA{\n\t\t\tFlags:   uint8(data[20]),\n\t\t\tOptions: binary.BigEndian.Uint32(data[20:24]) & 0x00FFFFFF,\n\t\t\tRouters: routers,\n\t\t}\n\tcase NetworkLSAtype:\n\t\tvar routers []uint32\n\t\tvar j uint32\n\t\tfor j = 24; j < uint32(lsalength); j += 4 {\n\t\t\trouters = append(routers, binary.BigEndian.Uint32(data[j:j+4]))\n\t\t}\n\t\tcontent = NetworkLSA{\n\t\t\tOptions:        binary.BigEndian.Uint32(data[20:24]) & 0x00FFFFFF,\n\t\t\tAttachedRouter: routers,\n\t\t}\n\tcase InterAreaPrefixLSAtype:\n\t\tcontent = InterAreaPrefixLSA{\n\t\t\tMetric:        binary.BigEndian.Uint32(data[20:24]) & 0x00FFFFFF,\n\t\t\tPrefixLength:  uint8(data[24]),\n\t\t\tPrefixOptions: uint8(data[25]),\n\t\t\tAddressPrefix: data[28:uint32(lsalength)],\n\t\t}\n\tcase InterAreaRouterLSAtype:\n\t\tcontent = InterAreaRouterLSA{\n\t\t\tOptions:             binary.BigEndian.Uint32(data[20:24]) & 0x00FFFFFF,\n\t\t\tMetric:              binary.BigEndian.Uint32(data[24:28]) & 0x00FFFFFF,\n\t\t\tDestinationRouterID: binary.BigEndian.Uint32(data[28:32]),\n\t\t}\n\tcase ASExternalLSAtype:\n\t\tfallthrough\n\tcase NSSALSAtype:\n\t\tflags := uint8(data[20])\n\t\tprefixLen := uint8(data[24]) / 8\n\t\tvar forwardingAddress []byte\n\t\tif (flags & 0x02) == 0x02 {\n\t\t\tforwardingAddress = data[28+uint32(prefixLen) : 28+uint32(prefixLen)+16]\n\t\t}\n\t\tcontent = ASExternalLSA{\n\t\t\tFlags:             flags,\n\t\t\tMetric:            binary.BigEndian.Uint32(data[20:24]) & 0x00FFFFFF,\n\t\t\tPrefixLength:      prefixLen,\n\t\t\tPrefixOptions:     uint8(data[25]),\n\t\t\tRefLSType:         binary.BigEndian.Uint16(data[26:28]),\n\t\t\tAddressPrefix:     data[28 : 28+uint32(prefixLen)],\n\t\t\tForwardingAddress: forwardingAddress,\n\t\t}\n\tcase LinkLSAtype:\n\t\tvar prefixes []Prefix\n\t\tvar prefixOffset uint32 = 44\n\t\tvar j uint32\n\t\tnumOfPrefixes := binary.BigEndian.Uint32(data[40:44])\n\t\tfor j = 0; j < numOfPrefixes; j++ {\n\t\t\tprefixLen := uint8(data[prefixOffset])\n\t\t\tprefix := Prefix{\n\t\t\t\tPrefixLength:  prefixLen,\n\t\t\t\tPrefixOptions: uint8(data[prefixOffset+1]),\n\t\t\t\tAddressPrefix: data[prefixOffset+4 : prefixOffset+4+uint32(prefixLen)/8],\n\t\t\t}\n\t\t\tprefixes = append(prefixes, prefix)\n\t\t\tprefixOffset = prefixOffset + 4 + uint32(prefixLen)/8\n\t\t}\n\t\tcontent = LinkLSA{\n\t\t\tRtrPriority:      uint8(data[20]),\n\t\t\tOptions:          binary.BigEndian.Uint32(data[20:24]) & 0x00FFFFFF,\n\t\t\tLinkLocalAddress: data[24:40],\n\t\t\tNumOfPrefixes:    numOfPrefixes,\n\t\t\tPrefixes:         prefixes,\n\t\t}\n\tcase IntraAreaPrefixLSAtype:\n\t\tvar prefixes []Prefix\n\t\tvar prefixOffset uint32 = 32\n\t\tvar j uint16\n\t\tnumOfPrefixes := binary.BigEndian.Uint16(data[20:22])\n\t\tfor j = 0; j < numOfPrefixes; j++ {\n\t\t\tprefixLen := uint8(data[prefixOffset])\n\t\t\tprefix := Prefix{\n\t\t\t\tPrefixLength:  prefixLen,\n\t\t\t\tPrefixOptions: uint8(data[prefixOffset+1]),\n\t\t\t\tMetric:        binary.BigEndian.Uint16(data[prefixOffset+2 : prefixOffset+4]),\n\t\t\t\tAddressPrefix: data[prefixOffset+4 : prefixOffset+4+uint32(prefixLen)/8],\n\t\t\t}\n\t\t\tprefixes = append(prefixes, prefix)\n\t\t\tprefixOffset = prefixOffset + 4 + uint32(prefixLen)\n\t\t}\n\t\tcontent = IntraAreaPrefixLSA{\n\t\t\tNumOfPrefixes:  numOfPrefixes,\n\t\t\tRefLSType:      binary.BigEndian.Uint16(data[22:24]),\n\t\t\tRefLinkStateID: binary.BigEndian.Uint32(data[24:28]),\n\t\t\tRefAdvRouter:   binary.BigEndian.Uint32(data[28:32]),\n\t\t\tPrefixes:       prefixes,\n\t\t}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"Unknown Link State type.\")\n\t}\n\treturn content, nil\n}\n\n// getLSAs parses the LSA information from the packet for OSPFv3\nfunc getLSAs(num uint32, data []byte) ([]LSA, error) {\n\tvar lsas []LSA\n\tvar i uint32 = 0\n\tvar offset uint32 = 0\n\tfor ; i < num; i++ {\n\t\tvar content interface{}\n\t\tlstype := binary.BigEndian.Uint16(data[offset+2 : offset+4])\n\t\tlsalength := binary.BigEndian.Uint16(data[offset+18 : offset+20])\n\n\t\tcontent, err := extractLSAInformation(lstype, lsalength, data[offset:])\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Could not extract Link State type.\")\n\t\t}\n\t\tlsa := LSA{\n\t\t\tLSAheader: LSAheader{\n\t\t\t\tLSAge:       binary.BigEndian.Uint16(data[offset : offset+2]),\n\t\t\t\tLSType:      lstype,\n\t\t\t\tLinkStateID: binary.BigEndian.Uint32(data[offset+4 : offset+8]),\n\t\t\t\tAdvRouter:   binary.BigEndian.Uint32(data[offset+8 : offset+12]),\n\t\t\t\tLSSeqNumber: binary.BigEndian.Uint32(data[offset+12 : offset+16]),\n\t\t\t\tLSChecksum:  binary.BigEndian.Uint16(data[offset+16 : offset+18]),\n\t\t\t\tLength:      lsalength,\n\t\t\t},\n\t\t\tContent: content,\n\t\t}\n\t\tlsas = append(lsas, lsa)\n\t\toffset += uint32(lsalength)\n\t}\n\treturn lsas, nil\n}\n\n// DecodeFromBytes decodes the given bytes into the OSPF layer.\nfunc (ospf *OSPFv2) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 24 {\n\t\treturn fmt.Errorf(\"Packet too smal for OSPF Version 2\")\n\t}\n\n\tospf.Version = uint8(data[0])\n\tospf.Type = OSPFType(data[1])\n\tospf.PacketLength = binary.BigEndian.Uint16(data[2:4])\n\tospf.RouterID = binary.BigEndian.Uint32(data[4:8])\n\tospf.AreaID = binary.BigEndian.Uint32(data[8:12])\n\tospf.Checksum = binary.BigEndian.Uint16(data[12:14])\n\tospf.AuType = binary.BigEndian.Uint16(data[14:16])\n\tospf.Authentication = binary.BigEndian.Uint64(data[16:24])\n\n\tswitch ospf.Type {\n\tcase OSPFHello:\n\t\tvar neighbors []uint32\n\t\tfor i := 44; uint16(i+4) <= ospf.PacketLength; i += 4 {\n\t\t\tneighbors = append(neighbors, binary.BigEndian.Uint32(data[i:i+4]))\n\t\t}\n\t\tospf.Content = HelloPkgV2{\n\t\t\tNetworkMask: binary.BigEndian.Uint32(data[24:28]),\n\t\t\tHelloPkg: HelloPkg{\n\t\t\t\tHelloInterval:            binary.BigEndian.Uint16(data[28:30]),\n\t\t\t\tOptions:                  uint32(data[30]),\n\t\t\t\tRtrPriority:              uint8(data[31]),\n\t\t\t\tRouterDeadInterval:       binary.BigEndian.Uint32(data[32:36]),\n\t\t\t\tDesignatedRouterID:       binary.BigEndian.Uint32(data[36:40]),\n\t\t\t\tBackupDesignatedRouterID: binary.BigEndian.Uint32(data[40:44]),\n\t\t\t\tNeighborID:               neighbors,\n\t\t\t},\n\t\t}\n\tcase OSPFDatabaseDescription:\n\t\tvar lsas []LSAheader\n\t\tfor i := 32; uint16(i+20) <= ospf.PacketLength; i += 20 {\n\t\t\tlsa := LSAheader{\n\t\t\t\tLSAge:       binary.BigEndian.Uint16(data[i : i+2]),\n\t\t\t\tLSType:      binary.BigEndian.Uint16(data[i+2 : i+4]),\n\t\t\t\tLinkStateID: binary.BigEndian.Uint32(data[i+4 : i+8]),\n\t\t\t\tAdvRouter:   binary.BigEndian.Uint32(data[i+8 : i+12]),\n\t\t\t\tLSSeqNumber: binary.BigEndian.Uint32(data[i+12 : i+16]),\n\t\t\t\tLSChecksum:  binary.BigEndian.Uint16(data[i+16 : i+18]),\n\t\t\t\tLength:      binary.BigEndian.Uint16(data[i+18 : i+20]),\n\t\t\t}\n\t\t\tlsas = append(lsas, lsa)\n\t\t}\n\t\tospf.Content = DbDescPkg{\n\t\t\tInterfaceMTU: binary.BigEndian.Uint16(data[24:26]),\n\t\t\tOptions:      uint32(data[26]),\n\t\t\tFlags:        uint16(data[27]),\n\t\t\tDDSeqNumber:  binary.BigEndian.Uint32(data[28:32]),\n\t\t\tLSAinfo:      lsas,\n\t\t}\n\tcase OSPFLinkStateRequest:\n\t\tvar lsrs []LSReq\n\t\tfor i := 24; uint16(i+12) <= ospf.PacketLength; i += 12 {\n\t\t\tlsr := LSReq{\n\t\t\t\tLSType:    binary.BigEndian.Uint16(data[i+2 : i+4]),\n\t\t\t\tLSID:      binary.BigEndian.Uint32(data[i+4 : i+8]),\n\t\t\t\tAdvRouter: binary.BigEndian.Uint32(data[i+8 : i+12]),\n\t\t\t}\n\t\t\tlsrs = append(lsrs, lsr)\n\t\t}\n\t\tospf.Content = lsrs\n\tcase OSPFLinkStateUpdate:\n\t\tnum := binary.BigEndian.Uint32(data[24:28])\n\n\t\tlsas, err := getLSAsv2(num, data[28:])\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"Cannot parse Link State Update packet: %v\", err)\n\t\t}\n\t\tospf.Content = LSUpdate{\n\t\t\tNumOfLSAs: num,\n\t\t\tLSAs:      lsas,\n\t\t}\n\tcase OSPFLinkStateAcknowledgment:\n\t\tvar lsas []LSAheader\n\t\tfor i := 24; uint16(i+20) <= ospf.PacketLength; i += 20 {\n\t\t\tlsa := LSAheader{\n\t\t\t\tLSAge:       binary.BigEndian.Uint16(data[i : i+2]),\n\t\t\t\tLSOptions:   data[i+2],\n\t\t\t\tLSType:      uint16(data[i+3]),\n\t\t\t\tLinkStateID: binary.BigEndian.Uint32(data[i+4 : i+8]),\n\t\t\t\tAdvRouter:   binary.BigEndian.Uint32(data[i+8 : i+12]),\n\t\t\t\tLSSeqNumber: binary.BigEndian.Uint32(data[i+12 : i+16]),\n\t\t\t\tLSChecksum:  binary.BigEndian.Uint16(data[i+16 : i+18]),\n\t\t\t\tLength:      binary.BigEndian.Uint16(data[i+18 : i+20]),\n\t\t\t}\n\t\t\tlsas = append(lsas, lsa)\n\t\t}\n\t\tospf.Content = lsas\n\t}\n\treturn nil\n}\n\n// DecodeFromBytes decodes the given bytes into the OSPF layer.\nfunc (ospf *OSPFv3) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\n\tif len(data) < 16 {\n\t\treturn fmt.Errorf(\"Packet too smal for OSPF Version 3\")\n\t}\n\n\tospf.Version = uint8(data[0])\n\tospf.Type = OSPFType(data[1])\n\tospf.PacketLength = binary.BigEndian.Uint16(data[2:4])\n\tospf.RouterID = binary.BigEndian.Uint32(data[4:8])\n\tospf.AreaID = binary.BigEndian.Uint32(data[8:12])\n\tospf.Checksum = binary.BigEndian.Uint16(data[12:14])\n\tospf.Instance = uint8(data[14])\n\tospf.Reserved = uint8(data[15])\n\n\tswitch ospf.Type {\n\tcase OSPFHello:\n\t\tvar neighbors []uint32\n\t\tfor i := 36; uint16(i+4) <= ospf.PacketLength; i += 4 {\n\t\t\tneighbors = append(neighbors, binary.BigEndian.Uint32(data[i:i+4]))\n\t\t}\n\t\tospf.Content = HelloPkg{\n\t\t\tInterfaceID:              binary.BigEndian.Uint32(data[16:20]),\n\t\t\tRtrPriority:              uint8(data[20]),\n\t\t\tOptions:                  binary.BigEndian.Uint32(data[21:25]) >> 8,\n\t\t\tHelloInterval:            binary.BigEndian.Uint16(data[24:26]),\n\t\t\tRouterDeadInterval:       uint32(binary.BigEndian.Uint16(data[26:28])),\n\t\t\tDesignatedRouterID:       binary.BigEndian.Uint32(data[28:32]),\n\t\t\tBackupDesignatedRouterID: binary.BigEndian.Uint32(data[32:36]),\n\t\t\tNeighborID:               neighbors,\n\t\t}\n\tcase OSPFDatabaseDescription:\n\t\tvar lsas []LSAheader\n\t\tfor i := 28; uint16(i+20) <= ospf.PacketLength; i += 20 {\n\t\t\tlsa := LSAheader{\n\t\t\t\tLSAge:       binary.BigEndian.Uint16(data[i : i+2]),\n\t\t\t\tLSType:      binary.BigEndian.Uint16(data[i+2 : i+4]),\n\t\t\t\tLinkStateID: binary.BigEndian.Uint32(data[i+4 : i+8]),\n\t\t\t\tAdvRouter:   binary.BigEndian.Uint32(data[i+8 : i+12]),\n\t\t\t\tLSSeqNumber: binary.BigEndian.Uint32(data[i+12 : i+16]),\n\t\t\t\tLSChecksum:  binary.BigEndian.Uint16(data[i+16 : i+18]),\n\t\t\t\tLength:      binary.BigEndian.Uint16(data[i+18 : i+20]),\n\t\t\t}\n\t\t\tlsas = append(lsas, lsa)\n\t\t}\n\t\tospf.Content = DbDescPkg{\n\t\t\tOptions:      binary.BigEndian.Uint32(data[16:20]) & 0x00FFFFFF,\n\t\t\tInterfaceMTU: binary.BigEndian.Uint16(data[20:22]),\n\t\t\tFlags:        binary.BigEndian.Uint16(data[22:24]),\n\t\t\tDDSeqNumber:  binary.BigEndian.Uint32(data[24:28]),\n\t\t\tLSAinfo:      lsas,\n\t\t}\n\tcase OSPFLinkStateRequest:\n\t\tvar lsrs []LSReq\n\t\tfor i := 16; uint16(i+12) <= ospf.PacketLength; i += 12 {\n\t\t\tlsr := LSReq{\n\t\t\t\tLSType:    binary.BigEndian.Uint16(data[i+2 : i+4]),\n\t\t\t\tLSID:      binary.BigEndian.Uint32(data[i+4 : i+8]),\n\t\t\t\tAdvRouter: binary.BigEndian.Uint32(data[i+8 : i+12]),\n\t\t\t}\n\t\t\tlsrs = append(lsrs, lsr)\n\t\t}\n\t\tospf.Content = lsrs\n\tcase OSPFLinkStateUpdate:\n\t\tnum := binary.BigEndian.Uint32(data[16:20])\n\t\tlsas, err := getLSAs(num, data[20:])\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"Cannot parse Link State Update packet: %v\", err)\n\t\t}\n\t\tospf.Content = LSUpdate{\n\t\t\tNumOfLSAs: num,\n\t\t\tLSAs:      lsas,\n\t\t}\n\n\tcase OSPFLinkStateAcknowledgment:\n\t\tvar lsas []LSAheader\n\t\tfor i := 16; uint16(i+20) <= ospf.PacketLength; i += 20 {\n\t\t\tlsa := LSAheader{\n\t\t\t\tLSAge:       binary.BigEndian.Uint16(data[i : i+2]),\n\t\t\t\tLSType:      binary.BigEndian.Uint16(data[i+2 : i+4]),\n\t\t\t\tLinkStateID: binary.BigEndian.Uint32(data[i+4 : i+8]),\n\t\t\t\tAdvRouter:   binary.BigEndian.Uint32(data[i+8 : i+12]),\n\t\t\t\tLSSeqNumber: binary.BigEndian.Uint32(data[i+12 : i+16]),\n\t\t\t\tLSChecksum:  binary.BigEndian.Uint16(data[i+16 : i+18]),\n\t\t\t\tLength:      binary.BigEndian.Uint16(data[i+18 : i+20]),\n\t\t\t}\n\t\t\tlsas = append(lsas, lsa)\n\t\t}\n\t\tospf.Content = lsas\n\tdefault:\n\t}\n\n\treturn nil\n}\n\n// LayerType returns LayerTypeOSPF\nfunc (ospf *OSPFv2) LayerType() gopacket.LayerType {\n\treturn LayerTypeOSPF\n}\nfunc (ospf *OSPFv3) LayerType() gopacket.LayerType {\n\treturn LayerTypeOSPF\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (ospf *OSPFv2) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypeZero\n}\nfunc (ospf *OSPFv3) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypeZero\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (ospf *OSPFv2) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeOSPF\n}\nfunc (ospf *OSPFv3) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeOSPF\n}\n\nfunc decodeOSPF(data []byte, p gopacket.PacketBuilder) error {\n\tif len(data) < 14 {\n\t\treturn fmt.Errorf(\"Packet too smal for OSPF\")\n\t}\n\n\tswitch uint8(data[0]) {\n\tcase 2:\n\t\tospf := &OSPFv2{}\n\t\treturn decodingLayerDecoder(ospf, data, p)\n\tcase 3:\n\t\tospf := &OSPFv3{}\n\t\treturn decodingLayerDecoder(ospf, data, p)\n\tdefault:\n\t}\n\n\treturn fmt.Errorf(\"Unable to determine OSPF type.\")\n}\n"
  },
  {
    "path": "layers/ospf_test.go",
    "content": "// Copyright 2017 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// testPacketOSPF2Hello is the packet:\n// 13:19:20.008765 IP 192.168.170.8 > 224.0.0.5: OSPFv2, Hello, length 44\n//\t0x0000:  0100 5e00 0005 00e0 18b1 0cad 0800 45c0  ..^...........E.\n//\t0x0010:  0040 0812 0000 0159 65dd c0a8 aa08 e000  .@.....Ye.......\n//\t0x0020:  0005 0201 002c c0a8 aa08 0000 0001 273b  .....,........';\n//\t0x0030:  0000 0000 0000 0000 0000 ffff ff00 000a  ................\n//\t0x0040:  0201 0000 0028 c0a8 aa08 0000 0000       .....(........\nvar testPacketOSPF2Hello = []byte{\n\t0x01, 0x00, 0x5e, 0x00, 0x00, 0x05, 0x00, 0xe0, 0x18, 0xb1, 0x0c, 0xad, 0x08, 0x00, 0x45, 0xc0,\n\t0x00, 0x40, 0x08, 0x12, 0x00, 0x00, 0x01, 0x59, 0x65, 0xdd, 0xc0, 0xa8, 0xaa, 0x08, 0xe0, 0x00,\n\t0x00, 0x05, 0x02, 0x01, 0x00, 0x2c, 0xc0, 0xa8, 0xaa, 0x08, 0x00, 0x00, 0x00, 0x01, 0x27, 0x3b,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x0a,\n\t0x02, 0x01, 0x00, 0x00, 0x00, 0x28, 0xc0, 0xa8, 0xaa, 0x08, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestPacketOSPF2Hello(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketOSPF2Hello, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeOSPF}, t)\n\n\tospf := p.Layer(LayerTypeOSPF).(*OSPFv2)\n\tif ospf.Version != 2 {\n\t\tt.Fatal(\"Invalid OSPF version\")\n\t}\n\tif got, ok := p.Layer(LayerTypeOSPF).(*OSPFv2); ok {\n\t\twant := &OSPFv2{\n\t\t\tOSPF: OSPF{\n\t\t\t\tVersion:      2,\n\t\t\t\tType:         OSPFHello,\n\t\t\t\tPacketLength: 44,\n\t\t\t\tRouterID:     0xc0a8aa08,\n\t\t\t\tAreaID:       1,\n\t\t\t\tChecksum:     0x273b,\n\t\t\t\tContent: HelloPkgV2{\n\t\t\t\t\tNetworkMask: 0xffffff00,\n\t\t\t\t\tHelloPkg: HelloPkg{\n\t\t\t\t\t\tRtrPriority:              0x1,\n\t\t\t\t\t\tOptions:                  0x2,\n\t\t\t\t\t\tHelloInterval:            0xa,\n\t\t\t\t\t\tRouterDeadInterval:       0x28,\n\t\t\t\t\t\tDesignatedRouterID:       0xc0a8aa08,\n\t\t\t\t\t\tBackupDesignatedRouterID: 0x0,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"OSPF packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No OSPF layer type found in packet\")\n\t}\n}\nfunc BenchmarkDecodePacketPacket5(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketOSPF2Hello, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testPacketOSPF3Hello is the packet:\n//   14:43:11.663317 IP6 fe80::1 > ff02::5: OSPFv3, Hello, length 36\n//   \t0x0000:  3333 0000 0005 c200 1ffa 0001 86dd 6e00  33............n.\n//   \t0x0010:  0000 0024 5901 fe80 0000 0000 0000 0000  ...$Y...........\n//   \t0x0020:  0000 0000 0001 ff02 0000 0000 0000 0000  ................\n//   \t0x0030:  0000 0000 0005 0301 0024 0101 0101 0000  .........$......\n//   \t0x0040:  0001 fb86 0000 0000 0005 0100 0013 000a  ................\n//   \t0x0050:  0028 0000 0000 0000 0000                 .(........\nvar testPacketOSPF3Hello = []byte{\n\t0x33, 0x33, 0x00, 0x00, 0x00, 0x05, 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,\n\t0x00, 0x00, 0x00, 0x24, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x03, 0x01, 0x00, 0x24, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,\n\t0x00, 0x01, 0xfb, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x13, 0x00, 0x0a,\n\t0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestPacketOSPF3Hello(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketOSPF3Hello, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)\n\n\tospf := p.Layer(LayerTypeOSPF).(*OSPFv3)\n\tif ospf.Version != 3 {\n\t\tt.Fatal(\"Invalid OSPF version\")\n\t}\n\tif got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {\n\t\twant := &OSPFv3{\n\t\t\tOSPF: OSPF{\n\t\t\t\tVersion:      3,\n\t\t\t\tType:         OSPFHello,\n\t\t\t\tPacketLength: 36,\n\t\t\t\tRouterID:     0x1010101,\n\t\t\t\tAreaID:       1,\n\t\t\t\tChecksum:     0xfb86,\n\t\t\t\tContent: HelloPkg{\n\t\t\t\t\tInterfaceID:              5,\n\t\t\t\t\tRtrPriority:              1,\n\t\t\t\t\tOptions:                  0x000013,\n\t\t\t\t\tHelloInterval:            10,\n\t\t\t\t\tRouterDeadInterval:       40,\n\t\t\t\t\tDesignatedRouterID:       0,\n\t\t\t\t\tBackupDesignatedRouterID: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\tInstance: 0,\n\t\t\tReserved: 0,\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"OSPF packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No OSPF layer type found in packet\")\n\t}\n}\nfunc BenchmarkDecodePacketPacket0(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketOSPF3Hello, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testPacketOSPF2DBDesc is the packet:\n// 13:20:14.414477 IP 192.168.170.8 > 192.168.170.2: OSPFv2, Database Description, length 32\n//\t0x0000:  0060 0881 7a70 00e0 18b1 0cad 0800 45c0  .`..zp........E.\n//\t0x0010:  0034 2be5 0000 0159 b770 c0a8 aa08 c0a8  .4+....Y.p......\n//\t0x0020:  aa02 0202 0020 c0a8 aa08 0000 0001 a052  ...............R\n//\t0x0030:  0000 0000 0000 0000 0000 05dc 0207 4177  ..............Aw\n//\t0x0040:  a97e                                     .~\nvar testPacketOSPF2DBDesc = []byte{\n\t0x00, 0x60, 0x08, 0x81, 0x7a, 0x70, 0x00, 0xe0, 0x18, 0xb1, 0x0c, 0xad, 0x08, 0x00, 0x45, 0xc0,\n\t0x00, 0x34, 0x2b, 0xe5, 0x00, 0x00, 0x01, 0x59, 0xb7, 0x70, 0xc0, 0xa8, 0xaa, 0x08, 0xc0, 0xa8,\n\t0xaa, 0x02, 0x02, 0x02, 0x00, 0x20, 0xc0, 0xa8, 0xaa, 0x08, 0x00, 0x00, 0x00, 0x01, 0xa0, 0x52,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xdc, 0x02, 0x07, 0x41, 0x77,\n\t0xa9, 0x7e,\n}\n\nfunc TestPacketOSPF2DBDesc(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketOSPF2DBDesc, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeOSPF}, t)\n\tif got, ok := p.Layer(LayerTypeOSPF).(*OSPFv2); ok {\n\t\twant := &OSPFv2{\n\t\t\tOSPF: OSPF{\n\t\t\t\tVersion:      2,\n\t\t\t\tType:         OSPFDatabaseDescription,\n\t\t\t\tPacketLength: 32,\n\t\t\t\tRouterID:     0xc0a8aa08,\n\t\t\t\tAreaID:       1,\n\t\t\t\tChecksum:     0xa052,\n\t\t\t\tContent: DbDescPkg{\n\t\t\t\t\tOptions:      0x02,\n\t\t\t\t\tInterfaceMTU: 1500,\n\t\t\t\t\tFlags:        0x7,\n\t\t\t\t\tDDSeqNumber:  1098361214,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"OSPF packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No OSPF layer type found in packet\")\n\t}\n}\nfunc BenchmarkDecodePacketPacket6(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketOSPF2DBDesc, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testPacketOSPF3DBDesc is the packet:\n//   14:43:51.657571 IP6 fe80::2 > fe80::1: OSPFv3, Database Description, length 28\n//   \t0x0000:  c200 1ffa 0001 c201 1ffa 0001 86dd 6e00  ..............n.\n//   \t0x0010:  0000 001c 5901 fe80 0000 0000 0000 0000  ....Y...........\n//   \t0x0020:  0000 0000 0002 fe80 0000 0000 0000 0000  ................\n//   \t0x0030:  0000 0000 0001 0302 001c 0202 0202 0000  ................\n//   \t0x0040:  0001 d826 0000 0000 0013 05dc 0007 0000  ...&............\n//   \t0x0050:  1d46                                     .F\nvar testPacketOSPF3DBDesc = []byte{\n\t0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0xc2, 0x01, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,\n\t0x00, 0x00, 0x00, 0x1c, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x00, 0x1c, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,\n\t0x00, 0x01, 0xd8, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x05, 0xdc, 0x00, 0x07, 0x00, 0x00,\n\t0x1d, 0x46,\n}\n\nfunc TestPacketOSPF3DBDesc(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketOSPF3DBDesc, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)\n\tif got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {\n\t\twant := &OSPFv3{\n\t\t\tOSPF: OSPF{\n\t\t\t\tVersion:      3,\n\t\t\t\tType:         OSPFDatabaseDescription,\n\t\t\t\tPacketLength: 28,\n\t\t\t\tRouterID:     0x2020202,\n\t\t\t\tAreaID:       1,\n\t\t\t\tChecksum:     0xd826,\n\t\t\t\tContent: DbDescPkg{\n\t\t\t\t\tOptions:      0x000013,\n\t\t\t\t\tInterfaceMTU: 1500,\n\t\t\t\t\tFlags:        0x7,\n\t\t\t\t\tDDSeqNumber:  7494,\n\t\t\t\t},\n\t\t\t},\n\t\t\tInstance: 0,\n\t\t\tReserved: 0,\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"OSPF packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No OSPF layer type found in packet\")\n\t}\n}\nfunc BenchmarkDecodePacketPacket1(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketOSPF3DBDesc, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testPacketOSPF2LSRequest is the packet:\n// 13:20:14.418003 IP 192.168.170.2 > 192.168.170.8: OSPFv2, LS-Request, length 36\n//\t0x0000:  00e0 18b1 0cad 0060 0881 7a70 0800 45c0  .......`..zp..E.\n//\t0x0010:  0038 88c6 0000 0159 5a8b c0a8 aa02 c0a8  .8.....YZ.......\n//\t0x0020:  aa08 0203 0024 c0a8 aa03 0000 0001 bdc7  .....$..........\n//\t0x0030:  0000 0000 0000 0000 0000 0000 0001 c0a8  ................\n//\t0x0040:  aa08 c0a8 aa08                           ......\nvar testPacketOSPF2LSRequest = []byte{\n\t0x00, 0xe0, 0x18, 0xb1, 0x0c, 0xad, 0x00, 0x60, 0x08, 0x81, 0x7a, 0x70, 0x08, 0x00, 0x45, 0xc0,\n\t0x00, 0x38, 0x88, 0xc6, 0x00, 0x00, 0x01, 0x59, 0x5a, 0x8b, 0xc0, 0xa8, 0xaa, 0x02, 0xc0, 0xa8,\n\t0xaa, 0x08, 0x02, 0x03, 0x00, 0x24, 0xc0, 0xa8, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x01, 0xbd, 0xc7,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0xa8,\n\t0xaa, 0x08, 0xc0, 0xa8, 0xaa, 0x08,\n}\n\nfunc TestPacketOSPF2LSRequest(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketOSPF2LSRequest, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeOSPF}, t)\n\tif got, ok := p.Layer(LayerTypeOSPF).(*OSPFv2); ok {\n\t\twant := &OSPFv2{\n\t\t\tOSPF: OSPF{\n\t\t\t\tVersion:      2,\n\t\t\t\tType:         OSPFLinkStateRequest,\n\t\t\t\tPacketLength: 36,\n\t\t\t\tRouterID:     0xc0a8aa03,\n\t\t\t\tAreaID:       1,\n\t\t\t\tChecksum:     0xbdc7,\n\t\t\t\tContent: []LSReq{\n\t\t\t\t\tLSReq{\n\t\t\t\t\t\tLSType:    0x1,\n\t\t\t\t\t\tLSID:      0xc0a8aa08,\n\t\t\t\t\t\tAdvRouter: 0xc0a8aa08,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"OSPF packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No OSPF layer type found in packet\")\n\t}\n}\nfunc BenchmarkDecodePacketPacket7(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketOSPF2LSRequest, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testPacketOSPF3LSRequest is the packet:\n//   14:43:51.673584 IP6 fe80::2 > fe80::1: OSPFv3, LS-Request, length 100\n//   \t0x0000:  c200 1ffa 0001 c201 1ffa 0001 86dd 6e00  ..............n.\n//   \t0x0010:  0000 0064 5901 fe80 0000 0000 0000 0000  ...dY...........\n//   \t0x0020:  0000 0000 0002 fe80 0000 0000 0000 0000  ................\n//   \t0x0030:  0000 0000 0001 0303 0064 0202 0202 0000  .........d......\n//   \t0x0040:  0001 2c9a 0000 0000 2001 0000 0000 0101  ..,.............\n//   \t0x0050:  0101 0000 2003 0000 0003 0101 0101 0000  ................\n//   \t0x0060:  2003 0000 0002 0101 0101 0000 2003 0000  ................\n//   \t0x0070:  0001 0101 0101 0000 2003 0000 0000 0101  ................\n//   \t0x0080:  0101 0000 0008 0000 0005 0101 0101 0000  ................\n//   \t0x0090:  2009 0000 0000 0101 0101                 ..........\nvar testPacketOSPF3LSRequest = []byte{\n\t0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0xc2, 0x01, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,\n\t0x00, 0x00, 0x00, 0x64, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x64, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,\n\t0x00, 0x01, 0x2c, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,\n\t0x01, 0x01, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,\n\t0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00,\n\t0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,\n\t0x01, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x05, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,\n\t0x20, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,\n}\n\nfunc TestPacketOSPF3LSRequest(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketOSPF3LSRequest, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)\n\tif got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {\n\t\twant := &OSPFv3{\n\t\t\tOSPF: OSPF{\n\t\t\t\tVersion:      3,\n\t\t\t\tType:         OSPFLinkStateRequest,\n\t\t\t\tPacketLength: 100,\n\t\t\t\tRouterID:     0x2020202,\n\t\t\t\tAreaID:       1,\n\t\t\t\tChecksum:     0x2c9a,\n\t\t\t\tContent: []LSReq{\n\t\t\t\t\tLSReq{\n\t\t\t\t\t\tLSType:    0x2001,\n\t\t\t\t\t\tLSID:      0x00000000,\n\t\t\t\t\t\tAdvRouter: 0x01010101,\n\t\t\t\t\t},\n\t\t\t\t\tLSReq{\n\t\t\t\t\t\tLSType:    0x2003,\n\t\t\t\t\t\tLSID:      0x00000003,\n\t\t\t\t\t\tAdvRouter: 0x01010101,\n\t\t\t\t\t},\n\t\t\t\t\tLSReq{\n\t\t\t\t\t\tLSType:    0x2003,\n\t\t\t\t\t\tLSID:      0x00000002,\n\t\t\t\t\t\tAdvRouter: 0x01010101,\n\t\t\t\t\t},\n\t\t\t\t\tLSReq{\n\t\t\t\t\t\tLSType:    0x2003,\n\t\t\t\t\t\tLSID:      0x00000001,\n\t\t\t\t\t\tAdvRouter: 0x01010101,\n\t\t\t\t\t},\n\t\t\t\t\tLSReq{\n\t\t\t\t\t\tLSType:    0x2003,\n\t\t\t\t\t\tLSID:      0x00000000,\n\t\t\t\t\t\tAdvRouter: 0x01010101,\n\t\t\t\t\t},\n\t\t\t\t\tLSReq{\n\t\t\t\t\t\tLSType:    0x0008,\n\t\t\t\t\t\tLSID:      0x00000005,\n\t\t\t\t\t\tAdvRouter: 0x01010101,\n\t\t\t\t\t},\n\t\t\t\t\tLSReq{\n\t\t\t\t\t\tLSType:    0x2009,\n\t\t\t\t\t\tLSID:      0x00000000,\n\t\t\t\t\t\tAdvRouter: 0x01010101,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tInstance: 0,\n\t\t\tReserved: 0,\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"OSPF packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No OSPF layer type found in packet\")\n\t}\n}\nfunc BenchmarkDecodePacketPacket2(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketOSPF3LSRequest, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testPacketOSPF2LSUpdate is the packet:\n// 13:20:14.420459 IP 192.168.170.2 > 224.0.0.6: OSPFv2, LS-Update, length 292\n//\t0x0000:  0100 5e00 0006 0060 0881 7a70 0800 45c0  ..^....`..zp..E.\n//\t0x0010:  0138 3025 0000 0159 3cd7 c0a8 aa02 e000  .80%...Y<.......\n//\t0x0020:  0006 0204 0124 c0a8 aa03 0000 0001 366b  .....$........6k\n//\t0x0030:  0000 0000 0000 0000 0000 0000 0007 0002  ................\n//\t0x0040:  0201 c0a8 aa03 c0a8 aa03 8000 0001 3a9c  ..............:.\n//\t0x0050:  0030 0200 0002 c0a8 aa00 ffff ff00 0300  .0..............\n//\t0x0060:  000a c0a8 aa00 ffff ff00 0300 000a 0003  ................\n//\t0x0070:  0205 50d4 1000 c0a8 aa02 8000 0001 2a49  ..P...........*I\n//\t0x0080:  0024 ffff ffff 8000 0014 0000 0000 0000  .$..............\n//\t0x0090:  0000 0003 0205 9479 ab00 c0a8 aa02 8000  .......y........\n//\t0x00a0:  0001 34a5 0024 ffff ff00 8000 0014 c0a8  ..4..$..........\n//\t0x00b0:  aa01 0000 0000 0003 0205 c082 7800 c0a8  ............x...\n//\t0x00c0:  aa02 8000 0001 d319 0024 ffff ff00 8000  .........$......\n//\t0x00d0:  0014 0000 0000 0000 0000 0003 0205 c0a8  ................\n//\t0x00e0:  0000 c0a8 aa02 8000 0001 3708 0024 ffff  ..........7..$..\n//\t0x00f0:  ff00 8000 0014 0000 0000 0000 0000 0003  ................\n//\t0x0100:  0205 c0a8 0100 c0a8 aa02 8000 0001 2c12  ..............,.\n//\t0x0110:  0024 ffff ff00 8000 0014 0000 0000 0000  .$..............\n//\t0x0120:  0000 0003 0205 c0a8 ac00 c0a8 aa02 8000  ................\n//\t0x0130:  0001 3341 0024 ffff ff00 8000 0014 c0a8  ..3A.$..........\n//\t0x0140:  aa0a 0000 0000                           ......\nvar testPacketOSPF2LSUpdate = []byte{\n\t0x01, 0x00, 0x5e, 0x00, 0x00, 0x06, 0x00, 0x60, 0x08, 0x81, 0x7a, 0x70, 0x08, 0x00, 0x45, 0xc0,\n\t0x01, 0x38, 0x30, 0x25, 0x00, 0x00, 0x01, 0x59, 0x3c, 0xd7, 0xc0, 0xa8, 0xaa, 0x02, 0xe0, 0x00,\n\t0x00, 0x06, 0x02, 0x04, 0x01, 0x24, 0xc0, 0xa8, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x01, 0x36, 0x6b,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x02,\n\t0x02, 0x01, 0xc0, 0xa8, 0xaa, 0x03, 0xc0, 0xa8, 0xaa, 0x03, 0x80, 0x00, 0x00, 0x01, 0x3a, 0x9c,\n\t0x00, 0x30, 0x02, 0x00, 0x00, 0x02, 0xc0, 0xa8, 0xaa, 0x00, 0xff, 0xff, 0xff, 0x00, 0x03, 0x00,\n\t0x00, 0x0a, 0xc0, 0xa8, 0xaa, 0x00, 0xff, 0xff, 0xff, 0x00, 0x03, 0x00, 0x00, 0x0a, 0x00, 0x03,\n\t0x02, 0x05, 0x50, 0xd4, 0x10, 0x00, 0xc0, 0xa8, 0xaa, 0x02, 0x80, 0x00, 0x00, 0x01, 0x2a, 0x49,\n\t0x00, 0x24, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x94, 0x79, 0xab, 0x00, 0xc0, 0xa8, 0xaa, 0x02, 0x80, 0x00,\n\t0x00, 0x01, 0x34, 0xa5, 0x00, 0x24, 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x14, 0xc0, 0xa8,\n\t0xaa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0xc0, 0x82, 0x78, 0x00, 0xc0, 0xa8,\n\t0xaa, 0x02, 0x80, 0x00, 0x00, 0x01, 0xd3, 0x19, 0x00, 0x24, 0xff, 0xff, 0xff, 0x00, 0x80, 0x00,\n\t0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0xc0, 0xa8,\n\t0x00, 0x00, 0xc0, 0xa8, 0xaa, 0x02, 0x80, 0x00, 0x00, 0x01, 0x37, 0x08, 0x00, 0x24, 0xff, 0xff,\n\t0xff, 0x00, 0x80, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,\n\t0x02, 0x05, 0xc0, 0xa8, 0x01, 0x00, 0xc0, 0xa8, 0xaa, 0x02, 0x80, 0x00, 0x00, 0x01, 0x2c, 0x12,\n\t0x00, 0x24, 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0xc0, 0xa8, 0xac, 0x00, 0xc0, 0xa8, 0xaa, 0x02, 0x80, 0x00,\n\t0x00, 0x01, 0x33, 0x41, 0x00, 0x24, 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x14, 0xc0, 0xa8,\n\t0xaa, 0x0a, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestPacketOSPF2LSUpdate(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketOSPF2LSUpdate, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeOSPF}, t)\n\tif got, ok := p.Layer(LayerTypeOSPF).(*OSPFv2); ok {\n\t\twant := &OSPFv2{\n\t\t\tOSPF: OSPF{\n\t\t\t\tVersion:      2,\n\t\t\t\tType:         OSPFLinkStateUpdate,\n\t\t\t\tPacketLength: 292,\n\t\t\t\tRouterID:     0xc0a8aa03,\n\t\t\t\tAreaID:       1,\n\t\t\t\tChecksum:     0x366b,\n\t\t\t\tContent: LSUpdate{\n\t\t\t\t\tNumOfLSAs: 7,\n\t\t\t\t\tLSAs: []LSA{\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       0x2,\n\t\t\t\t\t\t\t\tLSType:      0x1,\n\t\t\t\t\t\t\t\tLinkStateID: 0xc0a8aa03,\n\t\t\t\t\t\t\t\tAdvRouter:   0xc0a8aa03,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\t\t\tLSChecksum:  0x3a9c,\n\t\t\t\t\t\t\t\tLength:      0x30,\n\t\t\t\t\t\t\t\tLSOptions:   0x2,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: RouterLSAV2{\n\t\t\t\t\t\t\t\tFlags: 0x2,\n\t\t\t\t\t\t\t\tLinks: 0x2,\n\t\t\t\t\t\t\t\tRouters: []RouterV2{\n\t\t\t\t\t\t\t\t\tRouterV2{\n\t\t\t\t\t\t\t\t\t\tLinkID:   0xc0a8aa00,\n\t\t\t\t\t\t\t\t\t\tLinkData: 0xffffff00,\n\t\t\t\t\t\t\t\t\t\tType:     0x03,\n\t\t\t\t\t\t\t\t\t\tMetric:   0x0a,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tRouterV2{\n\t\t\t\t\t\t\t\t\t\tLinkID:   0xc0a8aa00,\n\t\t\t\t\t\t\t\t\t\tLinkData: 0xffffff00,\n\t\t\t\t\t\t\t\t\t\tType:     0x03,\n\t\t\t\t\t\t\t\t\t\tMetric:   0x0a,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       0x3,\n\t\t\t\t\t\t\t\tLSType:      0x5,\n\t\t\t\t\t\t\t\tLinkStateID: 0x50d41000,\n\t\t\t\t\t\t\t\tAdvRouter:   0xc0a8aa02,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\t\t\tLSChecksum:  0x2a49,\n\t\t\t\t\t\t\t\tLength:      0x24,\n\t\t\t\t\t\t\t\tLSOptions:   0x2,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: ASExternalLSAV2{\n\t\t\t\t\t\t\t\tNetworkMask:       0xffffffff,\n\t\t\t\t\t\t\t\tExternalBit:       0x80,\n\t\t\t\t\t\t\t\tMetric:            0x14,\n\t\t\t\t\t\t\t\tForwardingAddress: 0x0,\n\t\t\t\t\t\t\t\tExternalRouteTag:  0x0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       0x3,\n\t\t\t\t\t\t\t\tLSType:      0x5,\n\t\t\t\t\t\t\t\tLinkStateID: 0x9479ab00,\n\t\t\t\t\t\t\t\tAdvRouter:   0xc0a8aa02,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\t\t\tLSChecksum:  0x34a5,\n\t\t\t\t\t\t\t\tLength:      0x24,\n\t\t\t\t\t\t\t\tLSOptions:   0x2,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: ASExternalLSAV2{\n\t\t\t\t\t\t\t\tNetworkMask:       0xffffff00,\n\t\t\t\t\t\t\t\tExternalBit:       0x80,\n\t\t\t\t\t\t\t\tMetric:            0x14,\n\t\t\t\t\t\t\t\tForwardingAddress: 0xc0a8aa01,\n\t\t\t\t\t\t\t\tExternalRouteTag:  0x0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       0x3,\n\t\t\t\t\t\t\t\tLSType:      0x5,\n\t\t\t\t\t\t\t\tLinkStateID: 0xc0827800,\n\t\t\t\t\t\t\t\tAdvRouter:   0xc0a8aa02,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\t\t\tLSChecksum:  0xd319,\n\t\t\t\t\t\t\t\tLength:      0x24,\n\t\t\t\t\t\t\t\tLSOptions:   0x2,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: ASExternalLSAV2{\n\t\t\t\t\t\t\t\tNetworkMask:       0xffffff00,\n\t\t\t\t\t\t\t\tExternalBit:       0x80,\n\t\t\t\t\t\t\t\tMetric:            0x14,\n\t\t\t\t\t\t\t\tForwardingAddress: 0x0,\n\t\t\t\t\t\t\t\tExternalRouteTag:  0x0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       0x3,\n\t\t\t\t\t\t\t\tLSType:      0x5,\n\t\t\t\t\t\t\t\tLinkStateID: 0xc0a80000,\n\t\t\t\t\t\t\t\tAdvRouter:   0xc0a8aa02,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\t\t\tLSChecksum:  0x3708,\n\t\t\t\t\t\t\t\tLength:      0x24,\n\t\t\t\t\t\t\t\tLSOptions:   0x2,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: ASExternalLSAV2{\n\t\t\t\t\t\t\t\tNetworkMask:       0xffffff00,\n\t\t\t\t\t\t\t\tExternalBit:       0x80,\n\t\t\t\t\t\t\t\tMetric:            0x14,\n\t\t\t\t\t\t\t\tForwardingAddress: 0x0,\n\t\t\t\t\t\t\t\tExternalRouteTag:  0x0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       0x3,\n\t\t\t\t\t\t\t\tLSType:      0x5,\n\t\t\t\t\t\t\t\tLinkStateID: 0xc0a80100,\n\t\t\t\t\t\t\t\tAdvRouter:   0xc0a8aa02,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\t\t\tLSChecksum:  0x2c12,\n\t\t\t\t\t\t\t\tLength:      0x24,\n\t\t\t\t\t\t\t\tLSOptions:   0x2,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: ASExternalLSAV2{\n\t\t\t\t\t\t\t\tNetworkMask:       0xffffff00,\n\t\t\t\t\t\t\t\tExternalBit:       0x80,\n\t\t\t\t\t\t\t\tMetric:            0x14,\n\t\t\t\t\t\t\t\tForwardingAddress: 0x0,\n\t\t\t\t\t\t\t\tExternalRouteTag:  0x0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       0x3,\n\t\t\t\t\t\t\t\tLSType:      0x5,\n\t\t\t\t\t\t\t\tLinkStateID: 0xc0a8ac00,\n\t\t\t\t\t\t\t\tAdvRouter:   0xc0a8aa02,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\t\t\tLSChecksum:  0x3341,\n\t\t\t\t\t\t\t\tLength:      0x24,\n\t\t\t\t\t\t\t\tLSOptions:   0x2,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: ASExternalLSAV2{\n\t\t\t\t\t\t\t\tNetworkMask:       0xffffff00,\n\t\t\t\t\t\t\t\tExternalBit:       0x80,\n\t\t\t\t\t\t\t\tMetric:            0x14,\n\t\t\t\t\t\t\t\tForwardingAddress: 0xc0a8aa0a,\n\t\t\t\t\t\t\t\tExternalRouteTag:  0x0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"OSPF packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No OSPF layer type found in packet\")\n\t}\n}\nfunc BenchmarkDecodePacketPacket8(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketOSPF2LSUpdate, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testPacketOSPF2LSUpdateLSA2 is the packet:\n// 00:50:17.836469 IP 172.24.27.86 > ospf-all.mcast.net: OSPFv2, LS-Update, length 104\n//\t0x0000:  0100 5e00 0005 d4e8 80c2 b1c9 8100 017f\n//\t0x0010:  0800 45c0 008c f7e4 0000 0159 1901 ac18\n//\t0x0020:  1b56 e000 0005 0204 0058 ac18 0446 0000\n//\t0x0030:  000c 0000 0000 0000 0000 0000 0000 0000\n//\t0x0040:  0002 0001 2801 ac18 0446 ac18 0446 8000\n//\t0x0050:  041a 6025 0024 0000 0001 ac18 1b56 ac18\n//\t0x0060:  1b56 0200 0001 0001 2802 ac18 1b56 ac18\n//\t0x0070:  0446 8000 041f 390e 0028 ffff fff8 ac18\n//\t0x0080:  0446 ac18 0445 ac18 1b53 ac18 1b54\nvar testPacketOSPF2LSUpdateLSA2 = []byte{\n\t0x01, 0x00, 0x5e, 0x00, 0x00, 0x05, 0xd4, 0xe8, 0x80, 0xc2, 0xb1, 0xc9, 0x81, 0x00, 0x01, 0x7f,\n\t0x08, 0x00, 0x45, 0xc0, 0x00, 0x8c, 0xf7, 0xe4, 0x00, 0x00, 0x01, 0x59, 0x19, 0x01, 0xac, 0x18,\n\t0x1b, 0x56, 0xe0, 0x00, 0x00, 0x05, 0x02, 0x04, 0x00, 0x58, 0xac, 0x18, 0x04, 0x46, 0x00, 0x00,\n\t0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x02, 0x00, 0x01, 0x28, 0x01, 0xac, 0x18, 0x04, 0x46, 0xac, 0x18, 0x04, 0x46, 0x80, 0x00,\n\t0x04, 0x1a, 0x60, 0x25, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0xac, 0x18, 0x1b, 0x56, 0xac, 0x18,\n\t0x1b, 0x56, 0x02, 0x00, 0x00, 0x01, 0x00, 0x01, 0x28, 0x02, 0xac, 0x18, 0x1b, 0x56, 0xac, 0x18,\n\t0x04, 0x46, 0x80, 0x00, 0x04, 0x1f, 0x39, 0x0e, 0x00, 0x28, 0xff, 0xff, 0xff, 0xf8, 0xac, 0x18,\n\t0x04, 0x46, 0xac, 0x18, 0x04, 0x45, 0xac, 0x18, 0x1b, 0x53, 0xac, 0x18, 0x1b, 0x54,\n}\n\nfunc TestPacketOSPF2LSUpdateLSA2(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketOSPF2LSUpdateLSA2, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeDot1Q, LayerTypeIPv4, LayerTypeOSPF}, t)\n\tif got, ok := p.Layer(LayerTypeOSPF).(*OSPFv2); ok {\n\t\twant := &OSPFv2{\n\t\t\tOSPF: OSPF{\n\t\t\t\tVersion:      2,\n\t\t\t\tType:         OSPFLinkStateUpdate,\n\t\t\t\tPacketLength: 88,\n\t\t\t\tRouterID:     0xac180446,\n\t\t\t\tAreaID:       12,\n\t\t\t\tChecksum:     0x0000,\n\t\t\t\tContent: LSUpdate{\n\t\t\t\t\tNumOfLSAs: 2,\n\t\t\t\t\tLSAs: []LSA{\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       0x1,\n\t\t\t\t\t\t\t\tLSType:      0x1,\n\t\t\t\t\t\t\t\tLinkStateID: 0xac180446,\n\t\t\t\t\t\t\t\tAdvRouter:   0xac180446,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x8000041a,\n\t\t\t\t\t\t\t\tLSChecksum:  0x6025,\n\t\t\t\t\t\t\t\tLength:      0x24,\n\t\t\t\t\t\t\t\tLSOptions:   0x28,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: RouterLSAV2{\n\t\t\t\t\t\t\t\tFlags: 0x0,\n\t\t\t\t\t\t\t\tLinks: 0x1,\n\t\t\t\t\t\t\t\tRouters: []RouterV2{\n\t\t\t\t\t\t\t\t\tRouterV2{\n\t\t\t\t\t\t\t\t\t\tLinkID:   0xac181b56,\n\t\t\t\t\t\t\t\t\t\tLinkData: 0xac181b56,\n\t\t\t\t\t\t\t\t\t\tType:     0x02,\n\t\t\t\t\t\t\t\t\t\tMetric:   0x01,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       0x1,\n\t\t\t\t\t\t\t\tLSType:      0x2,\n\t\t\t\t\t\t\t\tLinkStateID: 0xac181b56,\n\t\t\t\t\t\t\t\tAdvRouter:   0xac180446,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x8000041f,\n\t\t\t\t\t\t\t\tLSChecksum:  0x390e,\n\t\t\t\t\t\t\t\tLength:      0x28,\n\t\t\t\t\t\t\t\tLSOptions:   0x28,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: NetworkLSAV2{\n\t\t\t\t\t\t\t\tNetworkMask: 0xfffffff8,\n\t\t\t\t\t\t\t\tAttachedRouter: []uint32{\n\t\t\t\t\t\t\t\t\t0xac180446,\n\t\t\t\t\t\t\t\t\t0xac180445,\n\t\t\t\t\t\t\t\t\t0xac181b53,\n\t\t\t\t\t\t\t\t\t0xac181b54,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"OSPF packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No OSPF layer type found in packet\")\n\t}\n}\n\n// testPacketOSPF2LSUpdateLSA7 is the packet:\n// 00:00:00.337386 IP 172.24.27.84 > ospf-dsig.mcast.net: OSPFv2, LS-Update, length 100\n//\t0x0000:  0100 5e00 0006 001a 1e02 81a8 8100 017f\n//\t0x0010:  0800 45c0 0088 0000 4000 0159 d0ea ac18\n//\t0x0020:  1b54 e000 0006 0204 0054 ac18 1b54 0000\n//\t0x0030:  000c 0000 0000 0000 0000 0000 0000 0000\n//\t0x0040:  0002 0001 0807 0ac8 4f60 ac18 1b54 8000\n//\t0x0050:  03a6 4d08 0024 ffff ffe0 8000 0100 ac18\n//\t0x0060:  1b54 0000 0000 0001 0807 0a80 9300 ac18\n//\t0x0070:  1b54 8000 03a6 43d6 0024 ffff ff80 8000\n//\t0x0080:  0100 ac18 1b54 0000 0000\nvar testPacketOSPF2LSUpdateLSA7 = []byte{\n\t0x01, 0x00, 0x5e, 0x00, 0x00, 0x06, 0x00, 0x1a, 0x1e, 0x02, 0x81, 0xa8, 0x81, 0x00, 0x01, 0x7f,\n\t0x08, 0x00, 0x45, 0xc0, 0x00, 0x88, 0x00, 0x00, 0x40, 0x00, 0x01, 0x59, 0xd0, 0xea, 0xac, 0x18,\n\t0x1b, 0x54, 0xe0, 0x00, 0x00, 0x06, 0x02, 0x04, 0x00, 0x54, 0xac, 0x18, 0x1b, 0x54, 0x00, 0x00,\n\t0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x02, 0x00, 0x01, 0x08, 0x07, 0x0a, 0xc8, 0x4f, 0x60, 0xac, 0x18, 0x1b, 0x54, 0x80, 0x00,\n\t0x03, 0xa6, 0x4d, 0x08, 0x00, 0x24, 0xff, 0xff, 0xff, 0xe0, 0x80, 0x00, 0x01, 0x00, 0xac, 0x18,\n\t0x1b, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x07, 0x0a, 0x80, 0x93, 0x00, 0xac, 0x18,\n\t0x1b, 0x54, 0x80, 0x00, 0x03, 0xa6, 0x43, 0xd6, 0x00, 0x24, 0xff, 0xff, 0xff, 0x80, 0x80, 0x00,\n\t0x01, 0x00, 0xac, 0x18, 0x1b, 0x54, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestPacketOSPF2LSUpdateLSA7(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketOSPF2LSUpdateLSA7, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeDot1Q, LayerTypeIPv4, LayerTypeOSPF}, t)\n\tif got, ok := p.Layer(LayerTypeOSPF).(*OSPFv2); ok {\n\t\twant := &OSPFv2{\n\t\t\tOSPF: OSPF{\n\t\t\t\tVersion:      2,\n\t\t\t\tType:         OSPFLinkStateUpdate,\n\t\t\t\tPacketLength: 84,\n\t\t\t\tRouterID:     0xac181b54,\n\t\t\t\tAreaID:       12,\n\t\t\t\tChecksum:     0x0,\n\t\t\t\tContent: LSUpdate{\n\t\t\t\t\tNumOfLSAs: 2,\n\t\t\t\t\tLSAs: []LSA{\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       0x1,\n\t\t\t\t\t\t\t\tLSType:      0x7,\n\t\t\t\t\t\t\t\tLinkStateID: 0x0ac84f60,\n\t\t\t\t\t\t\t\tAdvRouter:   0xac181b54,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x800003a6,\n\t\t\t\t\t\t\t\tLSChecksum:  0x4d08,\n\t\t\t\t\t\t\t\tLength:      0x24,\n\t\t\t\t\t\t\t\tLSOptions:   0x08,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: ASExternalLSAV2{\n\t\t\t\t\t\t\t\tNetworkMask:       0xffffffe0,\n\t\t\t\t\t\t\t\tExternalBit:       0x80,\n\t\t\t\t\t\t\t\tMetric:            0x0100,\n\t\t\t\t\t\t\t\tForwardingAddress: 0xac181b54,\n\t\t\t\t\t\t\t\tExternalRouteTag:  0x0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       0x1,\n\t\t\t\t\t\t\t\tLSType:      0x7,\n\t\t\t\t\t\t\t\tLinkStateID: 0x0a809300,\n\t\t\t\t\t\t\t\tAdvRouter:   0xac181b54,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x800003a6,\n\t\t\t\t\t\t\t\tLSChecksum:  0x43d6,\n\t\t\t\t\t\t\t\tLength:      0x24,\n\t\t\t\t\t\t\t\tLSOptions:   0x08,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: ASExternalLSAV2{\n\t\t\t\t\t\t\t\tNetworkMask:       0xffffff80,\n\t\t\t\t\t\t\t\tExternalBit:       0x80,\n\t\t\t\t\t\t\t\tMetric:            0x0100,\n\t\t\t\t\t\t\t\tForwardingAddress: 0xac181b54,\n\t\t\t\t\t\t\t\tExternalRouteTag:  0x0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"OSPF packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No OSPF layer type found in packet\")\n\t}\n}\n\n// testPacketOSPF3LSUpdate is the packet:\n//   14:43:51.681554 IP6 fe80::1 > fe80::2: OSPFv3, LS-Update, length 288\n//   \t0x0000:  c201 1ffa 0001 c200 1ffa 0001 86dd 6e00  ..............n.\n//   \t0x0010:  0000 0120 5901 fe80 0000 0000 0000 0000  ....Y...........\n//   \t0x0020:  0000 0000 0001 fe80 0000 0000 0000 0000  ................\n//   \t0x0030:  0000 0000 0002 0304 0120 0101 0101 0000  ................\n//   \t0x0040:  0001 e556 0000 0000 0007 0028 2001 0000  ...V.......(....\n//   \t0x0050:  0000 0101 0101 8000 0002 d13a 0018 0100  ...........:....\n//   \t0x0060:  0033 0029 2003 0000 0003 0101 0101 8000  .3.)............\n//   \t0x0070:  0001 6259 0024 0000 004a 4000 0000 2001  ..bY.$...J@.....\n//   \t0x0080:  0db8 0000 0003 0029 2003 0000 0002 0101  .......)........\n//   \t0x0090:  0101 8000 0001 baf6 0024 0000 0054 4000  .........$...T@.\n//   \t0x00a0:  0000 2001 0db8 0000 0004 0029 2003 0000  ...........)....\n//   \t0x00b0:  0001 0101 0101 8000 0001 eba0 0024 0000  .............$..\n//   \t0x00c0:  004a 4000 0000 2001 0db8 0000 0034 0029  .J@..........4.)\n//   \t0x00d0:  2003 0000 0000 0101 0101 8000 0001 0ebd  ................\n//   \t0x00e0:  0024 0000 0040 4000 0000 2001 0db8 0000  .$...@@.........\n//   \t0x00f0:  0000 0023 0008 0000 0005 0101 0101 8000  ...#............\n//   \t0x0100:  0002 3d08 0038 0100 0033 fe80 0000 0000  ..=..8...3......\n//   \t0x0110:  0000 0000 0000 0000 0001 0000 0001 4000  ..............@.\n//   \t0x0120:  0000 2001 0db8 0000 0012 0023 2009 0000  ...........#....\n//   \t0x0130:  0000 0101 0101 8000 0001 e8d2 002c 0001  .............,..\n//   \t0x0140:  2001 0000 0000 0101 0101 4000 000a 2001  ..........@.....\n//   \t0x0150:  0db8 0000 0012                           ......\nvar testPacketOSPF3LSUpdate = []byte{\n\t0xc2, 0x01, 0x1f, 0xfa, 0x00, 0x01, 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,\n\t0x00, 0x00, 0x01, 0x20, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x04, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,\n\t0x00, 0x01, 0xe5, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x28, 0x20, 0x01, 0x00, 0x00,\n\t0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x02, 0xd1, 0x3a, 0x00, 0x18, 0x01, 0x00,\n\t0x00, 0x33, 0x00, 0x29, 0x20, 0x03, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00,\n\t0x00, 0x01, 0x62, 0x59, 0x00, 0x24, 0x00, 0x00, 0x00, 0x4a, 0x40, 0x00, 0x00, 0x00, 0x20, 0x01,\n\t0x0d, 0xb8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x29, 0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01,\n\t0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0xba, 0xf6, 0x00, 0x24, 0x00, 0x00, 0x00, 0x54, 0x40, 0x00,\n\t0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x29, 0x20, 0x03, 0x00, 0x00,\n\t0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0xeb, 0xa0, 0x00, 0x24, 0x00, 0x00,\n\t0x00, 0x4a, 0x40, 0x00, 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x34, 0x00, 0x29,\n\t0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0x0e, 0xbd,\n\t0x00, 0x24, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x23, 0x00, 0x08, 0x00, 0x00, 0x00, 0x05, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00,\n\t0x00, 0x02, 0x3d, 0x08, 0x00, 0x38, 0x01, 0x00, 0x00, 0x33, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00,\n\t0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x12, 0x00, 0x23, 0x20, 0x09, 0x00, 0x00,\n\t0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0xe8, 0xd2, 0x00, 0x2c, 0x00, 0x01,\n\t0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x40, 0x00, 0x00, 0x0a, 0x20, 0x01,\n\t0x0d, 0xb8, 0x00, 0x00, 0x00, 0x12,\n}\n\nfunc TestPacketOSPF3LSUpdate(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketOSPF3LSUpdate, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)\n\tif got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {\n\t\twant := &OSPFv3{\n\t\t\tOSPF: OSPF{\n\t\t\t\tVersion:      3,\n\t\t\t\tType:         OSPFLinkStateUpdate,\n\t\t\t\tPacketLength: 288,\n\t\t\t\tRouterID:     0x1010101,\n\t\t\t\tAreaID:       1,\n\t\t\t\tChecksum:     0xe556,\n\t\t\t\tContent: LSUpdate{\n\t\t\t\t\tNumOfLSAs: 7,\n\t\t\t\t\tLSAs: []LSA{\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       40,\n\t\t\t\t\t\t\t\tLSType:      0x2001,\n\t\t\t\t\t\t\t\tLinkStateID: 0x00000000,\n\t\t\t\t\t\t\t\tAdvRouter:   0x01010101,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000002,\n\t\t\t\t\t\t\t\tLSChecksum:  0xd13a,\n\t\t\t\t\t\t\t\tLength:      24,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: RouterLSA{\n\t\t\t\t\t\t\t\tFlags:   0x1,\n\t\t\t\t\t\t\t\tOptions: 0x33,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       41,\n\t\t\t\t\t\t\t\tLSType:      0x2003,\n\t\t\t\t\t\t\t\tLinkStateID: 0x00000003,\n\t\t\t\t\t\t\t\tAdvRouter:   0x01010101,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\t\t\tLSChecksum:  0x6259,\n\t\t\t\t\t\t\t\tLength:      36,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: InterAreaPrefixLSA{\n\t\t\t\t\t\t\t\tMetric:        74,\n\t\t\t\t\t\t\t\tPrefixLength:  64,\n\t\t\t\t\t\t\t\tPrefixOptions: 0,\n\t\t\t\t\t\t\t\tAddressPrefix: []byte{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x03},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       41,\n\t\t\t\t\t\t\t\tLSType:      0x2003,\n\t\t\t\t\t\t\t\tLinkStateID: 0x00000002,\n\t\t\t\t\t\t\t\tAdvRouter:   0x01010101,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\t\t\tLSChecksum:  0xbaf6,\n\t\t\t\t\t\t\t\tLength:      36,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: InterAreaPrefixLSA{\n\t\t\t\t\t\t\t\tMetric:        84,\n\t\t\t\t\t\t\t\tPrefixLength:  64,\n\t\t\t\t\t\t\t\tPrefixOptions: 0,\n\t\t\t\t\t\t\t\tAddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x4},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       41,\n\t\t\t\t\t\t\t\tLSType:      0x2003,\n\t\t\t\t\t\t\t\tLinkStateID: 0x00000001,\n\t\t\t\t\t\t\t\tAdvRouter:   0x01010101,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\t\t\tLSChecksum:  0xeba0,\n\t\t\t\t\t\t\t\tLength:      36,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: InterAreaPrefixLSA{\n\t\t\t\t\t\t\t\tMetric:        74,\n\t\t\t\t\t\t\t\tPrefixLength:  64,\n\t\t\t\t\t\t\t\tPrefixOptions: 0,\n\t\t\t\t\t\t\t\tAddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x34},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       41,\n\t\t\t\t\t\t\t\tLSType:      0x2003,\n\t\t\t\t\t\t\t\tLinkStateID: 0x00000000,\n\t\t\t\t\t\t\t\tAdvRouter:   0x01010101,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\t\t\tLSChecksum:  0xebd,\n\t\t\t\t\t\t\t\tLength:      36,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: InterAreaPrefixLSA{\n\t\t\t\t\t\t\t\tMetric:        64,\n\t\t\t\t\t\t\t\tPrefixLength:  64,\n\t\t\t\t\t\t\t\tPrefixOptions: 0,\n\t\t\t\t\t\t\t\tAddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x0},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       35,\n\t\t\t\t\t\t\t\tLSType:      0x8,\n\t\t\t\t\t\t\t\tLinkStateID: 0x00000005,\n\t\t\t\t\t\t\t\tAdvRouter:   0x01010101,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000002,\n\t\t\t\t\t\t\t\tLSChecksum:  0x3d08,\n\t\t\t\t\t\t\t\tLength:      56,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: LinkLSA{\n\t\t\t\t\t\t\t\tRtrPriority:      1,\n\t\t\t\t\t\t\t\tOptions:          0x33,\n\t\t\t\t\t\t\t\tLinkLocalAddress: []byte{0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},\n\t\t\t\t\t\t\t\tNumOfPrefixes:    1,\n\t\t\t\t\t\t\t\tPrefixes: []Prefix{\n\t\t\t\t\t\t\t\t\tPrefix{\n\t\t\t\t\t\t\t\t\t\tPrefixLength:  64,\n\t\t\t\t\t\t\t\t\t\tPrefixOptions: 0,\n\t\t\t\t\t\t\t\t\t\tAddressPrefix: []byte{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x12},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLSA{\n\t\t\t\t\t\t\tLSAheader: LSAheader{\n\t\t\t\t\t\t\t\tLSAge:       35,\n\t\t\t\t\t\t\t\tLSType:      0x2009,\n\t\t\t\t\t\t\t\tLinkStateID: 0x00000000,\n\t\t\t\t\t\t\t\tAdvRouter:   0x01010101,\n\t\t\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\t\t\tLSChecksum:  0xe8d2,\n\t\t\t\t\t\t\t\tLength:      44,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContent: IntraAreaPrefixLSA{\n\t\t\t\t\t\t\t\tNumOfPrefixes: 1,\n\t\t\t\t\t\t\t\tRefLSType:     0x2001,\n\t\t\t\t\t\t\t\tRefAdvRouter:  0x01010101,\n\t\t\t\t\t\t\t\tPrefixes: []Prefix{\n\t\t\t\t\t\t\t\t\tPrefix{\n\t\t\t\t\t\t\t\t\t\tPrefixLength:  64,\n\t\t\t\t\t\t\t\t\t\tPrefixOptions: 0,\n\t\t\t\t\t\t\t\t\t\tMetric:        10,\n\t\t\t\t\t\t\t\t\t\tAddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x12},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tInstance: 0,\n\t\t\tReserved: 0,\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"OSPF packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No OSPF layer type found in packet\")\n\t}\n}\nfunc BenchmarkDecodePacketPacket3(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketOSPF3LSUpdate, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testPacketOSPF2LSAck is the packet:\n// 13:20:20.858322 IP 192.168.170.8 > 192.168.170.2: OSPFv2, LS-Ack, length 44\n//\t0x0000:  0060 0881 7a70 00e0 18b1 0cad 0800 45c0  .`..zp........E.\n//\t0x0010:  0040 2bea 0000 0159 b75f c0a8 aa08 c0a8  .@+....Y._......\n//\t0x0020:  aa02 0205 002c c0a8 aa08 0000 0001 e2f4  .....,..........\n//\t0x0030:  0000 0000 0000 0000 0000 0e10 0201 c0a8  ................\n//\t0x0040:  aa02 c0a8 aa02 8000 0001 4a8e 0030       ..........J..0\nvar testPacketOSPF2LSAck = []byte{\n\t0x00, 0x60, 0x08, 0x81, 0x7a, 0x70, 0x00, 0xe0, 0x18, 0xb1, 0x0c, 0xad, 0x08, 0x00, 0x45, 0xc0,\n\t0x00, 0x40, 0x2b, 0xea, 0x00, 0x00, 0x01, 0x59, 0xb7, 0x5f, 0xc0, 0xa8, 0xaa, 0x08, 0xc0, 0xa8,\n\t0xaa, 0x02, 0x02, 0x05, 0x00, 0x2c, 0xc0, 0xa8, 0xaa, 0x08, 0x00, 0x00, 0x00, 0x01, 0xe2, 0xf4,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x02, 0x01, 0xc0, 0xa8,\n\t0xaa, 0x02, 0xc0, 0xa8, 0xaa, 0x02, 0x80, 0x00, 0x00, 0x01, 0x4a, 0x8e, 0x00, 0x30,\n}\n\nfunc TestPacketOSPF2LSAck(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketOSPF2LSAck, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeOSPF}, t)\n\tif got, ok := p.Layer(LayerTypeOSPF).(*OSPFv2); ok {\n\t\twant := &OSPFv2{\n\t\t\tOSPF: OSPF{\n\t\t\t\tVersion:      2,\n\t\t\t\tType:         OSPFLinkStateAcknowledgment,\n\t\t\t\tPacketLength: 44,\n\t\t\t\tRouterID:     0xc0a8aa08,\n\t\t\t\tAreaID:       1,\n\t\t\t\tChecksum:     0xe2f4,\n\t\t\t\tContent: []LSAheader{\n\t\t\t\t\tLSAheader{\n\t\t\t\t\t\tLSAge:       0xe10,\n\t\t\t\t\t\tLSType:      0x1,\n\t\t\t\t\t\tLinkStateID: 0xc0a8aa02,\n\t\t\t\t\t\tAdvRouter:   0xc0a8aa02,\n\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\tLSChecksum:  0x4a8e,\n\t\t\t\t\t\tLength:      0x30,\n\t\t\t\t\t\tLSOptions:   0x2,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"OSPF packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No OSPF layer type found in packet\")\n\t}\n}\nfunc BenchmarkDecodePacketPacket9(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketOSPF3LSAck, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\n// testPacketOSPF3LSAck is the packet:\n//   14:43:54.185384 IP6 fe80::1 > ff02::5: OSPFv3, LS-Ack, length 136\n//   \t0x0000:  3333 0000 0005 c200 1ffa 0001 86dd 6e00  33............n.\n//   \t0x0010:  0000 0088 5901 fe80 0000 0000 0000 0000  ....Y...........\n//   \t0x0020:  0000 0000 0001 ff02 0000 0000 0000 0000  ................\n//   \t0x0030:  0000 0000 0005 0305 0088 0101 0101 0000  ................\n//   \t0x0040:  0001 9d2c 0000 0005 2001 0000 0000 0202  ...,............\n//   \t0x0050:  0202 8000 0002 b354 0018 0006 2003 0000  .......T........\n//   \t0x0060:  0003 0202 0202 8000 0001 4473 0024 0006  ..........Ds.$..\n//   \t0x0070:  2003 0000 0002 0202 0202 8000 0001 9c11  ................\n//   \t0x0080:  0024 0006 2003 0000 0001 0202 0202 8000  .$..............\n//   \t0x0090:  0001 cdba 0024 0006 2003 0000 0000 0202  .....$..........\n//   \t0x00a0:  0202 8000 0001 efd7 0024 0005 0008 0000  .........$......\n//   \t0x00b0:  0005 0202 0202 8000 0001 5433 002c       ..........T3.,\nvar testPacketOSPF3LSAck = []byte{\n\t0x33, 0x33, 0x00, 0x00, 0x00, 0x05, 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,\n\t0x00, 0x00, 0x00, 0x88, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x03, 0x05, 0x00, 0x88, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,\n\t0x00, 0x01, 0x9d, 0x2c, 0x00, 0x00, 0x00, 0x05, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,\n\t0x02, 0x02, 0x80, 0x00, 0x00, 0x02, 0xb3, 0x54, 0x00, 0x18, 0x00, 0x06, 0x20, 0x03, 0x00, 0x00,\n\t0x00, 0x03, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0x44, 0x73, 0x00, 0x24, 0x00, 0x06,\n\t0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0x9c, 0x11,\n\t0x00, 0x24, 0x00, 0x06, 0x20, 0x03, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00,\n\t0x00, 0x01, 0xcd, 0xba, 0x00, 0x24, 0x00, 0x06, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,\n\t0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0xef, 0xd7, 0x00, 0x24, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00,\n\t0x00, 0x05, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0x54, 0x33, 0x00, 0x2c,\n}\n\nfunc TestPacketOSPF3LSAck(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketOSPF3LSAck, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)\n\tif got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {\n\t\twant := &OSPFv3{\n\t\t\tOSPF: OSPF{\n\t\t\t\tVersion:      3,\n\t\t\t\tType:         OSPFLinkStateAcknowledgment,\n\t\t\t\tPacketLength: 136,\n\t\t\t\tRouterID:     0x1010101,\n\t\t\t\tAreaID:       1,\n\t\t\t\tChecksum:     0x9d2c,\n\t\t\t\tContent: []LSAheader{\n\t\t\t\t\tLSAheader{\n\t\t\t\t\t\tLSAge:       5,\n\t\t\t\t\t\tLSType:      0x2001,\n\t\t\t\t\t\tLinkStateID: 0x00000000,\n\t\t\t\t\t\tAdvRouter:   0x02020202,\n\t\t\t\t\t\tLSSeqNumber: 0x80000002,\n\t\t\t\t\t\tLSChecksum:  0xb354,\n\t\t\t\t\t\tLength:      24,\n\t\t\t\t\t},\n\t\t\t\t\tLSAheader{\n\t\t\t\t\t\tLSAge:       6,\n\t\t\t\t\t\tLSType:      0x2003,\n\t\t\t\t\t\tLinkStateID: 0x00000003,\n\t\t\t\t\t\tAdvRouter:   0x02020202,\n\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\tLSChecksum:  0x4473,\n\t\t\t\t\t\tLength:      36,\n\t\t\t\t\t},\n\t\t\t\t\tLSAheader{\n\t\t\t\t\t\tLSAge:       6,\n\t\t\t\t\t\tLSType:      0x2003,\n\t\t\t\t\t\tLinkStateID: 0x00000002,\n\t\t\t\t\t\tAdvRouter:   0x02020202,\n\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\tLSChecksum:  0x9c11,\n\t\t\t\t\t\tLength:      36,\n\t\t\t\t\t},\n\t\t\t\t\tLSAheader{\n\t\t\t\t\t\tLSAge:       6,\n\t\t\t\t\t\tLSType:      0x2003,\n\t\t\t\t\t\tLinkStateID: 0x00000001,\n\t\t\t\t\t\tAdvRouter:   0x02020202,\n\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\tLSChecksum:  0xcdba,\n\t\t\t\t\t\tLength:      36,\n\t\t\t\t\t},\n\t\t\t\t\tLSAheader{\n\t\t\t\t\t\tLSAge:       6,\n\t\t\t\t\t\tLSType:      0x2003,\n\t\t\t\t\t\tLinkStateID: 0x00000000,\n\t\t\t\t\t\tAdvRouter:   0x02020202,\n\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\tLSChecksum:  0xefd7,\n\t\t\t\t\t\tLength:      36,\n\t\t\t\t\t},\n\t\t\t\t\tLSAheader{\n\t\t\t\t\t\tLSAge:       5,\n\t\t\t\t\t\tLSType:      0x0008,\n\t\t\t\t\t\tLinkStateID: 0x00000005,\n\t\t\t\t\t\tAdvRouter:   0x02020202,\n\t\t\t\t\t\tLSSeqNumber: 0x80000001,\n\t\t\t\t\t\tLSChecksum:  0x5433,\n\t\t\t\t\t\tLength:      44,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tInstance: 0,\n\t\t\tReserved: 0,\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"OSPF packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No OSPF layer type found in packet\")\n\t}\n}\n\nvar testPacketOSPFInvalidLSA = []byte{\n\t0x5c, 0xfa, 0x00, 0x00, 0xfa, 0x6c, 0xbd, 0xe4, 0x19, 0x72, 0x1d, 0x1f,\n\t0x08, 0x00, 0x45, 0x00, 0x00, 0xad, 0x00, 0x00, 0x40, 0x00, 0x40, 0x59,\n\t0x6e, 0xef, 0x6b, 0x96, 0x61, 0x11, 0xb4, 0x96, 0xc0, 0xa8, 0x02, 0x04,\n\t0x00, 0xa2, 0x80, 0x00, 0x01, 0x1f, 0x08, 0x00, 0x45, 0x00, 0x6f, 0x76,\n\t0x65, 0x72, 0x66, 0x6c, 0x7f, 0xff, 0x12, 0x12, 0x00, 0x5a, 0xf6, 0x73,\n\t0xa2, 0xba, 0x81, 0x90, 0x00, 0x01, 0x40, 0x6f, 0x77, 0x20, 0x6f, 0x6e,\n\t0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x00, 0x00, 0x00, 0x01,\n\t0x96, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x00, 0x6e, 0x00, 0x6f,\n\t0x77,\n}\n\nfunc TestPacketOSPFInvalidLSA(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketOSPFInvalidLSA, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() == nil {\n\t\tt.Error(\"Bad packet decoded successfully\")\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, gopacket.LayerTypeDecodeFailure}, t)\n}\n\nfunc BenchmarkDecodePacketPacket4(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketOSPF3LSAck, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n"
  },
  {
    "path": "layers/pflog.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\ntype PFDirection uint8\n\nconst (\n\tPFDirectionInOut PFDirection = 0\n\tPFDirectionIn    PFDirection = 1\n\tPFDirectionOut   PFDirection = 2\n)\n\n// PFLog provides the layer for 'pf' packet-filter logging, as described at\n// http://www.freebsd.org/cgi/man.cgi?query=pflog&sektion=4\ntype PFLog struct {\n\tBaseLayer\n\tLength              uint8\n\tFamily              ProtocolFamily\n\tAction, Reason      uint8\n\tIFName, Ruleset     []byte\n\tRuleNum, SubruleNum uint32\n\tUID                 uint32\n\tPID                 int32\n\tRuleUID             uint32\n\tRulePID             int32\n\tDirection           PFDirection\n\t// The remainder is padding\n}\n\nfunc (pf *PFLog) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 60 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"PFLog data less than 60 bytes\")\n\t}\n\tpf.Length = data[0]\n\tpf.Family = ProtocolFamily(data[1])\n\tpf.Action = data[2]\n\tpf.Reason = data[3]\n\tpf.IFName = data[4:20]\n\tpf.Ruleset = data[20:36]\n\tpf.RuleNum = binary.BigEndian.Uint32(data[36:40])\n\tpf.SubruleNum = binary.BigEndian.Uint32(data[40:44])\n\tpf.UID = binary.BigEndian.Uint32(data[44:48])\n\tpf.PID = int32(binary.BigEndian.Uint32(data[48:52]))\n\tpf.RuleUID = binary.BigEndian.Uint32(data[52:56])\n\tpf.RulePID = int32(binary.BigEndian.Uint32(data[56:60]))\n\tpf.Direction = PFDirection(data[60])\n\tif pf.Length%4 != 1 {\n\t\treturn errors.New(\"PFLog header length should be 3 less than multiple of 4\")\n\t}\n\tactualLength := int(pf.Length) + 3\n\tif len(data) < actualLength {\n\t\treturn fmt.Errorf(\"PFLog data size < %d\", actualLength)\n\t}\n\tpf.Contents = data[:actualLength]\n\tpf.Payload = data[actualLength:]\n\treturn nil\n}\n\n// LayerType returns layers.LayerTypePFLog\nfunc (pf *PFLog) LayerType() gopacket.LayerType { return LayerTypePFLog }\n\nfunc (pf *PFLog) CanDecode() gopacket.LayerClass { return LayerTypePFLog }\n\nfunc (pf *PFLog) NextLayerType() gopacket.LayerType {\n\treturn pf.Family.LayerType()\n}\n\nfunc decodePFLog(data []byte, p gopacket.PacketBuilder) error {\n\tpf := &PFLog{}\n\treturn decodingLayerDecoder(pf, data, p)\n}\n"
  },
  {
    "path": "layers/ports.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// TCPPort is a port in a TCP layer.\ntype TCPPort uint16\n\n// UDPPort is a port in a UDP layer.\ntype UDPPort uint16\n\n// RUDPPort is a port in a RUDP layer.\ntype RUDPPort uint8\n\n// SCTPPort is a port in a SCTP layer.\ntype SCTPPort uint16\n\n// UDPLitePort is a port in a UDPLite layer.\ntype UDPLitePort uint16\n\n// RUDPPortNames contains the string names for all RUDP ports.\nvar RUDPPortNames = map[RUDPPort]string{}\n\n// UDPLitePortNames contains the string names for all UDPLite ports.\nvar UDPLitePortNames = map[UDPLitePort]string{}\n\n// {TCP,UDP,SCTP}PortNames can be found in iana_ports.go\n\n// String returns the port as \"number(name)\" if there's a well-known port name,\n// or just \"number\" if there isn't.  Well-known names are stored in\n// TCPPortNames.\nfunc (a TCPPort) String() string {\n\tif name, ok := TCPPortNames[a]; ok {\n\t\treturn fmt.Sprintf(\"%d(%s)\", a, name)\n\t}\n\treturn strconv.Itoa(int(a))\n}\n\n// LayerType returns a LayerType that would be able to decode the\n// application payload. It uses some well-known ports such as 53 for\n// DNS.\n//\n// Returns gopacket.LayerTypePayload for unknown/unsupported port numbers.\nfunc (a TCPPort) LayerType() gopacket.LayerType {\n\tlt := tcpPortLayerType[uint16(a)]\n\tif lt != 0 {\n\t\treturn lt\n\t}\n\treturn gopacket.LayerTypePayload\n}\n\nvar tcpPortLayerType = [65536]gopacket.LayerType{\n\t53:   LayerTypeDNS,\n\t443:  LayerTypeTLS,       // https\n\t502:  LayerTypeModbusTCP, // modbustcp\n\t636:  LayerTypeTLS,       // ldaps\n\t989:  LayerTypeTLS,       // ftps-data\n\t990:  LayerTypeTLS,       // ftps\n\t992:  LayerTypeTLS,       // telnets\n\t993:  LayerTypeTLS,       // imaps\n\t994:  LayerTypeTLS,       // ircs\n\t995:  LayerTypeTLS,       // pop3s\n\t5061: LayerTypeTLS,       // ips\n}\n\n// RegisterTCPPortLayerType creates a new mapping between a TCPPort\n// and an underlaying LayerType.\nfunc RegisterTCPPortLayerType(port TCPPort, layerType gopacket.LayerType) {\n\ttcpPortLayerType[port] = layerType\n}\n\n// String returns the port as \"number(name)\" if there's a well-known port name,\n// or just \"number\" if there isn't.  Well-known names are stored in\n// UDPPortNames.\nfunc (a UDPPort) String() string {\n\tif name, ok := UDPPortNames[a]; ok {\n\t\treturn fmt.Sprintf(\"%d(%s)\", a, name)\n\t}\n\treturn strconv.Itoa(int(a))\n}\n\n// LayerType returns a LayerType that would be able to decode the\n// application payload. It uses some well-known ports such as 53 for\n// DNS.\n//\n// Returns gopacket.LayerTypePayload for unknown/unsupported port numbers.\nfunc (a UDPPort) LayerType() gopacket.LayerType {\n\tlt := udpPortLayerType[uint16(a)]\n\tif lt != 0 {\n\t\treturn lt\n\t}\n\treturn gopacket.LayerTypePayload\n}\n\nvar udpPortLayerType = [65536]gopacket.LayerType{\n\t53:   LayerTypeDNS,\n\t123:  LayerTypeNTP,\n\t4789: LayerTypeVXLAN,\n\t67:   LayerTypeDHCPv4,\n\t68:   LayerTypeDHCPv4,\n\t546:  LayerTypeDHCPv6,\n\t547:  LayerTypeDHCPv6,\n\t666:  LayerTypeAGUEVar0,\n\t1000: LayerTypeAPSP,\n\t5060: LayerTypeSIP,\n\t6343: LayerTypeSFlow,\n\t6081: LayerTypeGeneve,\n\t3784: LayerTypeBFD,\n\t2152: LayerTypeGTPv1U,\n\t623:  LayerTypeRMCP,\n\t1812: LayerTypeRADIUS,\n}\n\n// RegisterUDPPortLayerType creates a new mapping between a UDPPort\n// and an underlaying LayerType.\nfunc RegisterUDPPortLayerType(port UDPPort, layerType gopacket.LayerType) {\n\tudpPortLayerType[port] = layerType\n}\n\n// String returns the port as \"number(name)\" if there's a well-known port name,\n// or just \"number\" if there isn't.  Well-known names are stored in\n// RUDPPortNames.\nfunc (a RUDPPort) String() string {\n\tif name, ok := RUDPPortNames[a]; ok {\n\t\treturn fmt.Sprintf(\"%d(%s)\", a, name)\n\t}\n\treturn strconv.Itoa(int(a))\n}\n\n// String returns the port as \"number(name)\" if there's a well-known port name,\n// or just \"number\" if there isn't.  Well-known names are stored in\n// SCTPPortNames.\nfunc (a SCTPPort) String() string {\n\tif name, ok := SCTPPortNames[a]; ok {\n\t\treturn fmt.Sprintf(\"%d(%s)\", a, name)\n\t}\n\treturn strconv.Itoa(int(a))\n}\n\n// String returns the port as \"number(name)\" if there's a well-known port name,\n// or just \"number\" if there isn't.  Well-known names are stored in\n// UDPLitePortNames.\nfunc (a UDPLitePort) String() string {\n\tif name, ok := UDPLitePortNames[a]; ok {\n\t\treturn fmt.Sprintf(\"%d(%s)\", a, name)\n\t}\n\treturn strconv.Itoa(int(a))\n}\n"
  },
  {
    "path": "layers/ppp.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"github.com/google/gopacket\"\n)\n\n// PPP is the layer for PPP encapsulation headers.\ntype PPP struct {\n\tBaseLayer\n\tPPPType       PPPType\n\tHasPPTPHeader bool\n}\n\n// PPPEndpoint is a singleton endpoint for PPP.  Since there is no actual\n// addressing for the two ends of a PPP connection, we use a singleton value\n// named 'point' for each endpoint.\nvar PPPEndpoint = gopacket.NewEndpoint(EndpointPPP, nil)\n\n// PPPFlow is a singleton flow for PPP.  Since there is no actual addressing for\n// the two ends of a PPP connection, we use a singleton value to represent the\n// flow for all PPP connections.\nvar PPPFlow = gopacket.NewFlow(EndpointPPP, nil, nil)\n\n// LayerType returns LayerTypePPP\nfunc (p *PPP) LayerType() gopacket.LayerType { return LayerTypePPP }\n\n// LinkFlow returns PPPFlow.\nfunc (p *PPP) LinkFlow() gopacket.Flow { return PPPFlow }\n\nfunc decodePPP(data []byte, p gopacket.PacketBuilder) error {\n\tppp := &PPP{}\n\toffset := 0\n\tif data[0] == 0xff && data[1] == 0x03 {\n\t\toffset = 2\n\t\tppp.HasPPTPHeader = true\n\t}\n\tif data[offset]&0x1 == 0 {\n\t\tif data[offset+1]&0x1 == 0 {\n\t\t\treturn errors.New(\"PPP has invalid type\")\n\t\t}\n\t\tppp.PPPType = PPPType(binary.BigEndian.Uint16(data[offset : offset+2]))\n\t\tppp.Contents = data[offset : offset+2]\n\t\tppp.Payload = data[offset+2:]\n\t} else {\n\t\tppp.PPPType = PPPType(data[offset])\n\t\tppp.Contents = data[offset : offset+1]\n\t\tppp.Payload = data[offset+1:]\n\t}\n\tp.AddLayer(ppp)\n\tp.SetLinkLayer(ppp)\n\treturn p.NextDecoder(ppp.PPPType)\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (p *PPP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tif p.PPPType&0x100 == 0 {\n\t\tbytes, err := b.PrependBytes(2)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbinary.BigEndian.PutUint16(bytes, uint16(p.PPPType))\n\t} else {\n\t\tbytes, err := b.PrependBytes(1)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbytes[0] = uint8(p.PPPType)\n\t}\n\tif p.HasPPTPHeader {\n\t\tbytes, err := b.PrependBytes(2)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbytes[0] = 0xff\n\t\tbytes[1] = 0x03\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "layers/pppoe.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"github.com/google/gopacket\"\n)\n\n// PPPoE is the layer for PPPoE encapsulation headers.\ntype PPPoE struct {\n\tBaseLayer\n\tVersion   uint8\n\tType      uint8\n\tCode      PPPoECode\n\tSessionId uint16\n\tLength    uint16\n}\n\n// LayerType returns gopacket.LayerTypePPPoE.\nfunc (p *PPPoE) LayerType() gopacket.LayerType {\n\treturn LayerTypePPPoE\n}\n\n// decodePPPoE decodes the PPPoE header (see http://tools.ietf.org/html/rfc2516).\nfunc decodePPPoE(data []byte, p gopacket.PacketBuilder) error {\n\tpppoe := &PPPoE{\n\t\tVersion:   data[0] >> 4,\n\t\tType:      data[0] & 0x0F,\n\t\tCode:      PPPoECode(data[1]),\n\t\tSessionId: binary.BigEndian.Uint16(data[2:4]),\n\t\tLength:    binary.BigEndian.Uint16(data[4:6]),\n\t}\n\tpppoe.BaseLayer = BaseLayer{data[:6], data[6 : 6+pppoe.Length]}\n\tp.AddLayer(pppoe)\n\treturn p.NextDecoder(pppoe.Code)\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (p *PPPoE) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tpayload := b.Bytes()\n\tbytes, err := b.PrependBytes(6)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = (p.Version << 4) | p.Type\n\tbytes[1] = byte(p.Code)\n\tbinary.BigEndian.PutUint16(bytes[2:], p.SessionId)\n\tif opts.FixLengths {\n\t\tp.Length = uint16(len(payload))\n\t}\n\tbinary.BigEndian.PutUint16(bytes[4:], p.Length)\n\treturn nil\n}\n"
  },
  {
    "path": "layers/prism.go",
    "content": "// Copyright 2015 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// http://www.tcpdump.org/linktypes/LINKTYPE_IEEE802_11_PRISM.html\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc decodePrismValue(data []byte, pv *PrismValue) {\n\tpv.DID = PrismDID(binary.LittleEndian.Uint32(data[0:4]))\n\tpv.Status = binary.LittleEndian.Uint16(data[4:6])\n\tpv.Length = binary.LittleEndian.Uint16(data[6:8])\n\tpv.Data = data[8 : 8+pv.Length]\n}\n\ntype PrismDID uint32\n\nconst (\n\tPrismDIDType1HostTime                  PrismDID = 0x10044\n\tPrismDIDType2HostTime                  PrismDID = 0x01041\n\tPrismDIDType1MACTime                   PrismDID = 0x20044\n\tPrismDIDType2MACTime                   PrismDID = 0x02041\n\tPrismDIDType1Channel                   PrismDID = 0x30044\n\tPrismDIDType2Channel                   PrismDID = 0x03041\n\tPrismDIDType1RSSI                      PrismDID = 0x40044\n\tPrismDIDType2RSSI                      PrismDID = 0x04041\n\tPrismDIDType1SignalQuality             PrismDID = 0x50044\n\tPrismDIDType2SignalQuality             PrismDID = 0x05041\n\tPrismDIDType1Signal                    PrismDID = 0x60044\n\tPrismDIDType2Signal                    PrismDID = 0x06041\n\tPrismDIDType1Noise                     PrismDID = 0x70044\n\tPrismDIDType2Noise                     PrismDID = 0x07041\n\tPrismDIDType1Rate                      PrismDID = 0x80044\n\tPrismDIDType2Rate                      PrismDID = 0x08041\n\tPrismDIDType1TransmittedFrameIndicator PrismDID = 0x90044\n\tPrismDIDType2TransmittedFrameIndicator PrismDID = 0x09041\n\tPrismDIDType1FrameLength               PrismDID = 0xA0044\n\tPrismDIDType2FrameLength               PrismDID = 0x0A041\n)\n\nconst (\n\tPrismType1MessageCode uint16 = 0x00000044\n\tPrismType2MessageCode uint16 = 0x00000041\n)\n\nfunc (p PrismDID) String() string {\n\tdids := map[PrismDID]string{\n\t\tPrismDIDType1HostTime:                  \"Host Time\",\n\t\tPrismDIDType2HostTime:                  \"Host Time\",\n\t\tPrismDIDType1MACTime:                   \"MAC Time\",\n\t\tPrismDIDType2MACTime:                   \"MAC Time\",\n\t\tPrismDIDType1Channel:                   \"Channel\",\n\t\tPrismDIDType2Channel:                   \"Channel\",\n\t\tPrismDIDType1RSSI:                      \"RSSI\",\n\t\tPrismDIDType2RSSI:                      \"RSSI\",\n\t\tPrismDIDType1SignalQuality:             \"Signal Quality\",\n\t\tPrismDIDType2SignalQuality:             \"Signal Quality\",\n\t\tPrismDIDType1Signal:                    \"Signal\",\n\t\tPrismDIDType2Signal:                    \"Signal\",\n\t\tPrismDIDType1Noise:                     \"Noise\",\n\t\tPrismDIDType2Noise:                     \"Noise\",\n\t\tPrismDIDType1Rate:                      \"Rate\",\n\t\tPrismDIDType2Rate:                      \"Rate\",\n\t\tPrismDIDType1TransmittedFrameIndicator: \"Transmitted Frame Indicator\",\n\t\tPrismDIDType2TransmittedFrameIndicator: \"Transmitted Frame Indicator\",\n\t\tPrismDIDType1FrameLength:               \"Frame Length\",\n\t\tPrismDIDType2FrameLength:               \"Frame Length\",\n\t}\n\n\tif str, ok := dids[p]; ok {\n\t\treturn str\n\t}\n\n\treturn \"Unknown DID\"\n}\n\ntype PrismValue struct {\n\tDID    PrismDID\n\tStatus uint16\n\tLength uint16\n\tData   []byte\n}\n\nfunc (pv *PrismValue) IsSupplied() bool {\n\treturn pv.Status == 1\n}\n\nvar ErrPrismExpectedMoreData = errors.New(\"Expected more data.\")\nvar ErrPrismInvalidCode = errors.New(\"Invalid header code.\")\n\nfunc decodePrismHeader(data []byte, p gopacket.PacketBuilder) error {\n\td := &PrismHeader{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\ntype PrismHeader struct {\n\tBaseLayer\n\tCode       uint16\n\tLength     uint16\n\tDeviceName string\n\tValues     []PrismValue\n}\n\nfunc (m *PrismHeader) LayerType() gopacket.LayerType { return LayerTypePrismHeader }\n\nfunc (m *PrismHeader) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tm.Code = binary.LittleEndian.Uint16(data[0:4])\n\tm.Length = binary.LittleEndian.Uint16(data[4:8])\n\tm.DeviceName = string(data[8:24])\n\tm.BaseLayer = BaseLayer{Contents: data[:m.Length], Payload: data[m.Length:len(data)]}\n\n\tswitch m.Code {\n\tcase PrismType1MessageCode:\n\t\tfallthrough\n\tcase PrismType2MessageCode:\n\t\t// valid message code\n\tdefault:\n\t\treturn ErrPrismInvalidCode\n\t}\n\n\toffset := uint16(24)\n\n\tm.Values = make([]PrismValue, (m.Length-offset)/12)\n\tfor i := 0; i < len(m.Values); i++ {\n\t\tdecodePrismValue(data[offset:offset+12], &m.Values[i])\n\t\toffset += 12\n\t}\n\n\tif offset != m.Length {\n\t\treturn ErrPrismExpectedMoreData\n\t}\n\n\treturn nil\n}\n\nfunc (m *PrismHeader) CanDecode() gopacket.LayerClass    { return LayerTypePrismHeader }\nfunc (m *PrismHeader) NextLayerType() gopacket.LayerType { return LayerTypeDot11 }\n"
  },
  {
    "path": "layers/prism_test.go",
    "content": "// Copyright 2014, Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"net\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// Generator: python layers/test_creator.py --layerType=LayerTypePrismHeader --linkType=LinkTypePrismHeader --name=Prism%s ~/tmp/dump.pcap\n// http://wiki.wireshark.org/SampleCaptures#Sample_Captures\n\n// testPacketPrism is the packet:\n//   21:32:37.616872 BSSID:Broadcast DA:Broadcast SA:cc:fa:00:ad:79:e8 (oui Unknown) Probe Request () [1.0 2.0 5.5 11.0 Mbit]\n//        0x0000:  4400 0000 9000 0000 7261 3000 0000 0000\n//        0x0010:  0000 0000 0000 0000 4400 0100 0000 0400\n//        0x0020:  f9c1 2900 4400 0200 0000 0000 0000 0000\n//        0x0030:  4400 0300 0000 0400 0a00 0000 4400 0400\n//        0x0040:  0000 0400 e1ff ffff 0000 0000 0000 0000\n//        0x0050:  0000 0000 4400 0600 0000 0400 0000 0000\n//        0x0060:  4400 0700 0000 0400 0000 0000 4400 0800\n//        0x0070:  0000 0400 0200 0000 4400 0900 0000 0000\n//        0x0080:  0000 0000 4400 0a00 0000 0400 7e00 0000\n//        0x0090:  4000 0000 ffff ffff ffff ccfa 00ad 79e8\n//        0x00a0:  ffff ffff ffff a041 0000 0104 0204 0b16\n//        0x00b0:  3208 0c12 1824 3048 606c 0301 012d 1a2d\n//        0x00c0:  1117 ff00 0000 0000 0000 0000 0000 0000\n//        0x00d0:  0000 0000 0000 0000 007f 0800 0000 0000\n//        0x00e0:  0000 40dd 0900 1018 0200 0010 0000 dd1e\n//        0x00f0:  0090 4c33 2d11 17ff 0000 0000 0000 0000\n//        0x0100:  0000 0000 0000 0000 0000 0000 0000\n\nvar testPacketPrism = []byte{\n\t0x44, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x72, 0x61, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00,\n\t0xf9, 0xc1, 0x29, 0x00, 0x44, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x44, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x44, 0x00, 0x04, 0x00,\n\t0x00, 0x00, 0x04, 0x00, 0xe1, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x44, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x08, 0x00,\n\t0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x44, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x7e, 0x00, 0x00, 0x00,\n\t0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0xfa, 0x00, 0xad, 0x79, 0xe8,\n\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x41, 0x00, 0x00, 0x01, 0x04, 0x02, 0x04, 0x0b, 0x16,\n\t0x32, 0x08, 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c, 0x03, 0x01, 0x01, 0x2d, 0x1a, 0x2d,\n\t0x11, 0x17, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x40, 0xdd, 0x09, 0x00, 0x10, 0x18, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0xdd, 0x1e,\n\t0x00, 0x90, 0x4c, 0x33, 0x2d, 0x11, 0x17, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestPacketPrism(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketPrism, LinkTypePrismHeader, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypePrismHeader, LayerTypeDot11, LayerTypeDot11MgmtProbeReq}, t)\n\n\tif got, ok := p.Layer(LayerTypePrismHeader).(*PrismHeader); ok {\n\t\twant := &PrismHeader{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: []uint8{0x44, 0x0, 0x0, 0x0, 0x90, 0x0, 0x0, 0x0, 0x72, 0x61, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x1, 0x0, 0x0, 0x0, 0x4, 0x0, 0xf9, 0xc1, 0x29, 0x0, 0x44, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x3, 0x0, 0x0, 0x0, 0x4, 0x0, 0xa, 0x0, 0x0, 0x0, 0x44, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4, 0x0, 0xe1, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x6, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x7, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x8, 0x0, 0x0, 0x0, 0x4, 0x0, 0x2, 0x0, 0x0, 0x0, 0x44, 0x0, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0xa, 0x0, 0x0, 0x0, 0x4, 0x0, 0x7e, 0x0, 0x0, 0x0},\n\t\t\t\tPayload:  []uint8{0x40, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0xfa, 0x0, 0xad, 0x79, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x41, 0x0, 0x0, 0x1, 0x4, 0x2, 0x4, 0xb, 0x16, 0x32, 0x8, 0xc, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c, 0x3, 0x1, 0x1, 0x2d, 0x1a, 0x2d, 0x11, 0x17, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xdd, 0x9, 0x0, 0x10, 0x18, 0x2, 0x0, 0x0, 0x10, 0x0, 0x0, 0xdd, 0x1e, 0x0, 0x90, 0x4c, 0x33, 0x2d, 0x11, 0x17, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, Code: 0x44, Length: 0x90, DeviceName: \"ra0\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n\t\t\tValues: []PrismValue{\n\t\t\t\tPrismValue{DID: PrismDIDType1HostTime, Status: 0x0, Length: 0x4, Data: []uint8{0xf9, 0xc1, 0x29, 0x0}},\n\t\t\t\tPrismValue{DID: PrismDIDType1MACTime, Status: 0x0, Length: 0x0, Data: []uint8{}},\n\t\t\t\tPrismValue{DID: PrismDIDType1Channel, Status: 0x0, Length: 0x4, Data: []uint8{0xa, 0x0, 0x0, 0x0}},\n\t\t\t\tPrismValue{DID: PrismDIDType1RSSI, Status: 0x0, Length: 0x4, Data: []uint8{0xe1, 0xff, 0xff, 0xff}},\n\t\t\t\tPrismValue{DID: 0x0, Status: 0x0, Length: 0x0, Data: []uint8{}},\n\t\t\t\tPrismValue{DID: PrismDIDType1Signal, Status: 0x0, Length: 0x4, Data: []uint8{0x0, 0x0, 0x0, 0x0}},\n\t\t\t\tPrismValue{DID: PrismDIDType1Noise, Status: 0x0, Length: 0x4, Data: []uint8{0x0, 0x0, 0x0, 0x0}},\n\t\t\t\tPrismValue{DID: PrismDIDType1Rate, Status: 0x0, Length: 0x4, Data: []uint8{0x2, 0x0, 0x0, 0x0}},\n\t\t\t\tPrismValue{DID: PrismDIDType1TransmittedFrameIndicator, Status: 0x0, Length: 0x0, Data: []uint8{}},\n\t\t\t\tPrismValue{DID: PrismDIDType1FrameLength, Status: 0x0, Length: 0x4, Data: []uint8{0x7e, 0x0, 0x0, 0x0}},\n\t\t\t},\n\t\t}\n\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"RadioTap packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t}\n\n\tif got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {\n\t\twant := &Dot11{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: []uint8{0x40, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0xfa, 0x0, 0xad, 0x79, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x41},\n\t\t\t\tPayload:  []uint8{0x0, 0x0, 0x1, 0x4, 0x2, 0x4, 0xb, 0x16, 0x32, 0x8, 0xc, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c, 0x3, 0x1, 0x1, 0x2d, 0x1a, 0x2d, 0x11, 0x17, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xdd, 0x9, 0x0, 0x10, 0x18, 0x2, 0x0, 0x0, 0x10, 0x0, 0x0, 0xdd, 0x1e, 0x0, 0x90, 0x4c, 0x33, 0x2d, 0x11, 0x17, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},\n\t\t\t},\n\t\t\tType:           0x10,\n\t\t\tProto:          0x0,\n\t\t\tFlags:          0x0,\n\t\t\tDurationID:     0x0,\n\t\t\tAddress1:       net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff},\n\t\t\tAddress2:       net.HardwareAddr{0xcc, 0xfa, 0x0, 0xad, 0x79, 0xe8},\n\t\t\tAddress3:       net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff},\n\t\t\tAddress4:       net.HardwareAddr(nil),\n\t\t\tSequenceNumber: 0x041a,\n\t\t\tFragmentNumber: 0x0,\n\t\t\tChecksum:       0x0,\n\t\t}\n\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"Dot11 packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t}\n}\n\nfunc BenchmarkDecodePacketPrism(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketPrism, LinkTypePrismHeader, gopacket.NoCopy)\n\t}\n}\n"
  },
  {
    "path": "layers/radiotap.go",
    "content": "// Copyright 2014 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"hash/crc32\"\n\t\"strings\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// align calculates the number of bytes needed to align with the width\n// on the offset, returning the number of bytes we need to skip to\n// align to the offset (width).\nfunc align(offset uint16, width uint16) uint16 {\n\treturn ((((offset) + ((width) - 1)) & (^((width) - 1))) - offset)\n}\n\ntype RadioTapPresent uint32\n\nconst (\n\tRadioTapPresentTSFT RadioTapPresent = 1 << iota\n\tRadioTapPresentFlags\n\tRadioTapPresentRate\n\tRadioTapPresentChannel\n\tRadioTapPresentFHSS\n\tRadioTapPresentDBMAntennaSignal\n\tRadioTapPresentDBMAntennaNoise\n\tRadioTapPresentLockQuality\n\tRadioTapPresentTxAttenuation\n\tRadioTapPresentDBTxAttenuation\n\tRadioTapPresentDBMTxPower\n\tRadioTapPresentAntenna\n\tRadioTapPresentDBAntennaSignal\n\tRadioTapPresentDBAntennaNoise\n\tRadioTapPresentRxFlags\n\tRadioTapPresentTxFlags\n\tRadioTapPresentRtsRetries\n\tRadioTapPresentDataRetries\n\t_\n\tRadioTapPresentMCS\n\tRadioTapPresentAMPDUStatus\n\tRadioTapPresentVHT\n\tRadioTapPresentEXT RadioTapPresent = 1 << 31\n)\n\nfunc (r RadioTapPresent) TSFT() bool {\n\treturn r&RadioTapPresentTSFT != 0\n}\nfunc (r RadioTapPresent) Flags() bool {\n\treturn r&RadioTapPresentFlags != 0\n}\nfunc (r RadioTapPresent) Rate() bool {\n\treturn r&RadioTapPresentRate != 0\n}\nfunc (r RadioTapPresent) Channel() bool {\n\treturn r&RadioTapPresentChannel != 0\n}\nfunc (r RadioTapPresent) FHSS() bool {\n\treturn r&RadioTapPresentFHSS != 0\n}\nfunc (r RadioTapPresent) DBMAntennaSignal() bool {\n\treturn r&RadioTapPresentDBMAntennaSignal != 0\n}\nfunc (r RadioTapPresent) DBMAntennaNoise() bool {\n\treturn r&RadioTapPresentDBMAntennaNoise != 0\n}\nfunc (r RadioTapPresent) LockQuality() bool {\n\treturn r&RadioTapPresentLockQuality != 0\n}\nfunc (r RadioTapPresent) TxAttenuation() bool {\n\treturn r&RadioTapPresentTxAttenuation != 0\n}\nfunc (r RadioTapPresent) DBTxAttenuation() bool {\n\treturn r&RadioTapPresentDBTxAttenuation != 0\n}\nfunc (r RadioTapPresent) DBMTxPower() bool {\n\treturn r&RadioTapPresentDBMTxPower != 0\n}\nfunc (r RadioTapPresent) Antenna() bool {\n\treturn r&RadioTapPresentAntenna != 0\n}\nfunc (r RadioTapPresent) DBAntennaSignal() bool {\n\treturn r&RadioTapPresentDBAntennaSignal != 0\n}\nfunc (r RadioTapPresent) DBAntennaNoise() bool {\n\treturn r&RadioTapPresentDBAntennaNoise != 0\n}\nfunc (r RadioTapPresent) RxFlags() bool {\n\treturn r&RadioTapPresentRxFlags != 0\n}\nfunc (r RadioTapPresent) TxFlags() bool {\n\treturn r&RadioTapPresentTxFlags != 0\n}\nfunc (r RadioTapPresent) RtsRetries() bool {\n\treturn r&RadioTapPresentRtsRetries != 0\n}\nfunc (r RadioTapPresent) DataRetries() bool {\n\treturn r&RadioTapPresentDataRetries != 0\n}\nfunc (r RadioTapPresent) MCS() bool {\n\treturn r&RadioTapPresentMCS != 0\n}\nfunc (r RadioTapPresent) AMPDUStatus() bool {\n\treturn r&RadioTapPresentAMPDUStatus != 0\n}\nfunc (r RadioTapPresent) VHT() bool {\n\treturn r&RadioTapPresentVHT != 0\n}\nfunc (r RadioTapPresent) EXT() bool {\n\treturn r&RadioTapPresentEXT != 0\n}\n\ntype RadioTapChannelFlags uint16\n\nconst (\n\tRadioTapChannelFlagsTurbo   RadioTapChannelFlags = 0x0010 // Turbo channel\n\tRadioTapChannelFlagsCCK     RadioTapChannelFlags = 0x0020 // CCK channel\n\tRadioTapChannelFlagsOFDM    RadioTapChannelFlags = 0x0040 // OFDM channel\n\tRadioTapChannelFlagsGhz2    RadioTapChannelFlags = 0x0080 // 2 GHz spectrum channel.\n\tRadioTapChannelFlagsGhz5    RadioTapChannelFlags = 0x0100 // 5 GHz spectrum channel\n\tRadioTapChannelFlagsPassive RadioTapChannelFlags = 0x0200 // Only passive scan allowed\n\tRadioTapChannelFlagsDynamic RadioTapChannelFlags = 0x0400 // Dynamic CCK-OFDM channel\n\tRadioTapChannelFlagsGFSK    RadioTapChannelFlags = 0x0800 // GFSK channel (FHSS PHY)\n)\n\nfunc (r RadioTapChannelFlags) Turbo() bool {\n\treturn r&RadioTapChannelFlagsTurbo != 0\n}\nfunc (r RadioTapChannelFlags) CCK() bool {\n\treturn r&RadioTapChannelFlagsCCK != 0\n}\nfunc (r RadioTapChannelFlags) OFDM() bool {\n\treturn r&RadioTapChannelFlagsOFDM != 0\n}\nfunc (r RadioTapChannelFlags) Ghz2() bool {\n\treturn r&RadioTapChannelFlagsGhz2 != 0\n}\nfunc (r RadioTapChannelFlags) Ghz5() bool {\n\treturn r&RadioTapChannelFlagsGhz5 != 0\n}\nfunc (r RadioTapChannelFlags) Passive() bool {\n\treturn r&RadioTapChannelFlagsPassive != 0\n}\nfunc (r RadioTapChannelFlags) Dynamic() bool {\n\treturn r&RadioTapChannelFlagsDynamic != 0\n}\nfunc (r RadioTapChannelFlags) GFSK() bool {\n\treturn r&RadioTapChannelFlagsGFSK != 0\n}\n\n// String provides a human readable string for RadioTapChannelFlags.\n// This string is possibly subject to change over time; if you're storing this\n// persistently, you should probably store the RadioTapChannelFlags value, not its string.\nfunc (a RadioTapChannelFlags) String() string {\n\tvar out bytes.Buffer\n\tif a.Turbo() {\n\t\tout.WriteString(\"Turbo,\")\n\t}\n\tif a.CCK() {\n\t\tout.WriteString(\"CCK,\")\n\t}\n\tif a.OFDM() {\n\t\tout.WriteString(\"OFDM,\")\n\t}\n\tif a.Ghz2() {\n\t\tout.WriteString(\"Ghz2,\")\n\t}\n\tif a.Ghz5() {\n\t\tout.WriteString(\"Ghz5,\")\n\t}\n\tif a.Passive() {\n\t\tout.WriteString(\"Passive,\")\n\t}\n\tif a.Dynamic() {\n\t\tout.WriteString(\"Dynamic,\")\n\t}\n\tif a.GFSK() {\n\t\tout.WriteString(\"GFSK,\")\n\t}\n\n\tif length := out.Len(); length > 0 {\n\t\treturn string(out.Bytes()[:length-1]) // strip final comma\n\t}\n\treturn \"\"\n}\n\ntype RadioTapFlags uint8\n\nconst (\n\tRadioTapFlagsCFP           RadioTapFlags = 1 << iota // sent/received during CFP\n\tRadioTapFlagsShortPreamble                           // sent/received * with short * preamble\n\tRadioTapFlagsWEP                                     // sent/received * with WEP encryption\n\tRadioTapFlagsFrag                                    // sent/received * with fragmentation\n\tRadioTapFlagsFCS                                     // frame includes FCS\n\tRadioTapFlagsDatapad                                 // frame has padding between * 802.11 header and payload * (to 32-bit boundary)\n\tRadioTapFlagsBadFCS                                  // does not pass FCS check\n\tRadioTapFlagsShortGI                                 // HT short GI\n)\n\nfunc (r RadioTapFlags) CFP() bool {\n\treturn r&RadioTapFlagsCFP != 0\n}\nfunc (r RadioTapFlags) ShortPreamble() bool {\n\treturn r&RadioTapFlagsShortPreamble != 0\n}\nfunc (r RadioTapFlags) WEP() bool {\n\treturn r&RadioTapFlagsWEP != 0\n}\nfunc (r RadioTapFlags) Frag() bool {\n\treturn r&RadioTapFlagsFrag != 0\n}\nfunc (r RadioTapFlags) FCS() bool {\n\treturn r&RadioTapFlagsFCS != 0\n}\nfunc (r RadioTapFlags) Datapad() bool {\n\treturn r&RadioTapFlagsDatapad != 0\n}\nfunc (r RadioTapFlags) BadFCS() bool {\n\treturn r&RadioTapFlagsBadFCS != 0\n}\nfunc (r RadioTapFlags) ShortGI() bool {\n\treturn r&RadioTapFlagsShortGI != 0\n}\n\n// String provides a human readable string for RadioTapFlags.\n// This string is possibly subject to change over time; if you're storing this\n// persistently, you should probably store the RadioTapFlags value, not its string.\nfunc (a RadioTapFlags) String() string {\n\tvar out bytes.Buffer\n\tif a.CFP() {\n\t\tout.WriteString(\"CFP,\")\n\t}\n\tif a.ShortPreamble() {\n\t\tout.WriteString(\"SHORT-PREAMBLE,\")\n\t}\n\tif a.WEP() {\n\t\tout.WriteString(\"WEP,\")\n\t}\n\tif a.Frag() {\n\t\tout.WriteString(\"FRAG,\")\n\t}\n\tif a.FCS() {\n\t\tout.WriteString(\"FCS,\")\n\t}\n\tif a.Datapad() {\n\t\tout.WriteString(\"DATAPAD,\")\n\t}\n\tif a.ShortGI() {\n\t\tout.WriteString(\"SHORT-GI,\")\n\t}\n\n\tif length := out.Len(); length > 0 {\n\t\treturn string(out.Bytes()[:length-1]) // strip final comma\n\t}\n\treturn \"\"\n}\n\ntype RadioTapRate uint8\n\nfunc (a RadioTapRate) String() string {\n\treturn fmt.Sprintf(\"%v Mb/s\", 0.5*float32(a))\n}\n\ntype RadioTapChannelFrequency uint16\n\nfunc (a RadioTapChannelFrequency) String() string {\n\treturn fmt.Sprintf(\"%d MHz\", a)\n}\n\ntype RadioTapRxFlags uint16\n\nconst (\n\tRadioTapRxFlagsBadPlcp RadioTapRxFlags = 0x0002\n)\n\nfunc (self RadioTapRxFlags) BadPlcp() bool {\n\treturn self&RadioTapRxFlagsBadPlcp != 0\n}\n\nfunc (self RadioTapRxFlags) String() string {\n\tif self.BadPlcp() {\n\t\treturn \"BADPLCP\"\n\t}\n\treturn \"\"\n}\n\ntype RadioTapTxFlags uint16\n\nconst (\n\tRadioTapTxFlagsFail RadioTapTxFlags = 1 << iota\n\tRadioTapTxFlagsCTS\n\tRadioTapTxFlagsRTS\n\tRadioTapTxFlagsNoACK\n)\n\nfunc (self RadioTapTxFlags) Fail() bool  { return self&RadioTapTxFlagsFail != 0 }\nfunc (self RadioTapTxFlags) CTS() bool   { return self&RadioTapTxFlagsCTS != 0 }\nfunc (self RadioTapTxFlags) RTS() bool   { return self&RadioTapTxFlagsRTS != 0 }\nfunc (self RadioTapTxFlags) NoACK() bool { return self&RadioTapTxFlagsNoACK != 0 }\n\nfunc (self RadioTapTxFlags) String() string {\n\tvar tokens []string\n\tif self.Fail() {\n\t\ttokens = append(tokens, \"Fail\")\n\t}\n\tif self.CTS() {\n\t\ttokens = append(tokens, \"CTS\")\n\t}\n\tif self.RTS() {\n\t\ttokens = append(tokens, \"RTS\")\n\t}\n\tif self.NoACK() {\n\t\ttokens = append(tokens, \"NoACK\")\n\t}\n\treturn strings.Join(tokens, \",\")\n}\n\ntype RadioTapMCS struct {\n\tKnown RadioTapMCSKnown\n\tFlags RadioTapMCSFlags\n\tMCS   uint8\n}\n\nfunc (self RadioTapMCS) String() string {\n\tvar tokens []string\n\tif self.Known.Bandwidth() {\n\t\ttoken := \"?\"\n\t\tswitch self.Flags.Bandwidth() {\n\t\tcase 0:\n\t\t\ttoken = \"20\"\n\t\tcase 1:\n\t\t\ttoken = \"40\"\n\t\tcase 2:\n\t\t\ttoken = \"40(20L)\"\n\t\tcase 3:\n\t\t\ttoken = \"40(20U)\"\n\t\t}\n\t\ttokens = append(tokens, token)\n\t}\n\tif self.Known.MCSIndex() {\n\t\ttokens = append(tokens, fmt.Sprintf(\"MCSIndex#%d\", self.MCS))\n\t}\n\tif self.Known.GuardInterval() {\n\t\tif self.Flags.ShortGI() {\n\t\t\ttokens = append(tokens, fmt.Sprintf(\"shortGI\"))\n\t\t} else {\n\t\t\ttokens = append(tokens, fmt.Sprintf(\"longGI\"))\n\t\t}\n\t}\n\tif self.Known.HTFormat() {\n\t\tif self.Flags.Greenfield() {\n\t\t\ttokens = append(tokens, fmt.Sprintf(\"HT-greenfield\"))\n\t\t} else {\n\t\t\ttokens = append(tokens, fmt.Sprintf(\"HT-mixed\"))\n\t\t}\n\t}\n\tif self.Known.FECType() {\n\t\tif self.Flags.FECLDPC() {\n\t\t\ttokens = append(tokens, fmt.Sprintf(\"LDPC\"))\n\t\t} else {\n\t\t\ttokens = append(tokens, fmt.Sprintf(\"BCC\"))\n\t\t}\n\t}\n\tif self.Known.STBC() {\n\t\ttokens = append(tokens, fmt.Sprintf(\"STBC#%d\", self.Flags.STBC()))\n\t}\n\tif self.Known.NESS() {\n\t\tnum := 0\n\t\tif self.Known.NESS1() {\n\t\t\tnum |= 0x02\n\t\t}\n\t\tif self.Flags.NESS0() {\n\t\t\tnum |= 0x01\n\t\t}\n\t\ttokens = append(tokens, fmt.Sprintf(\"num-of-ESS#%d\", num))\n\t}\n\treturn strings.Join(tokens, \",\")\n}\n\ntype RadioTapMCSKnown uint8\n\nconst (\n\tRadioTapMCSKnownBandwidth RadioTapMCSKnown = 1 << iota\n\tRadioTapMCSKnownMCSIndex\n\tRadioTapMCSKnownGuardInterval\n\tRadioTapMCSKnownHTFormat\n\tRadioTapMCSKnownFECType\n\tRadioTapMCSKnownSTBC\n\tRadioTapMCSKnownNESS\n\tRadioTapMCSKnownNESS1\n)\n\nfunc (self RadioTapMCSKnown) Bandwidth() bool     { return self&RadioTapMCSKnownBandwidth != 0 }\nfunc (self RadioTapMCSKnown) MCSIndex() bool      { return self&RadioTapMCSKnownMCSIndex != 0 }\nfunc (self RadioTapMCSKnown) GuardInterval() bool { return self&RadioTapMCSKnownGuardInterval != 0 }\nfunc (self RadioTapMCSKnown) HTFormat() bool      { return self&RadioTapMCSKnownHTFormat != 0 }\nfunc (self RadioTapMCSKnown) FECType() bool       { return self&RadioTapMCSKnownFECType != 0 }\nfunc (self RadioTapMCSKnown) STBC() bool          { return self&RadioTapMCSKnownSTBC != 0 }\nfunc (self RadioTapMCSKnown) NESS() bool          { return self&RadioTapMCSKnownNESS != 0 }\nfunc (self RadioTapMCSKnown) NESS1() bool         { return self&RadioTapMCSKnownNESS1 != 0 }\n\ntype RadioTapMCSFlags uint8\n\nconst (\n\tRadioTapMCSFlagsBandwidthMask RadioTapMCSFlags = 0x03\n\tRadioTapMCSFlagsShortGI                        = 0x04\n\tRadioTapMCSFlagsGreenfield                     = 0x08\n\tRadioTapMCSFlagsFECLDPC                        = 0x10\n\tRadioTapMCSFlagsSTBCMask                       = 0x60\n\tRadioTapMCSFlagsNESS0                          = 0x80\n)\n\nfunc (self RadioTapMCSFlags) Bandwidth() int {\n\treturn int(self & RadioTapMCSFlagsBandwidthMask)\n}\nfunc (self RadioTapMCSFlags) ShortGI() bool    { return self&RadioTapMCSFlagsShortGI != 0 }\nfunc (self RadioTapMCSFlags) Greenfield() bool { return self&RadioTapMCSFlagsGreenfield != 0 }\nfunc (self RadioTapMCSFlags) FECLDPC() bool    { return self&RadioTapMCSFlagsFECLDPC != 0 }\nfunc (self RadioTapMCSFlags) STBC() int {\n\treturn int(self&RadioTapMCSFlagsSTBCMask) >> 5\n}\nfunc (self RadioTapMCSFlags) NESS0() bool { return self&RadioTapMCSFlagsNESS0 != 0 }\n\ntype RadioTapAMPDUStatus struct {\n\tReference uint32\n\tFlags     RadioTapAMPDUStatusFlags\n\tCRC       uint8\n}\n\nfunc (self RadioTapAMPDUStatus) String() string {\n\ttokens := []string{\n\t\tfmt.Sprintf(\"ref#%x\", self.Reference),\n\t}\n\tif self.Flags.ReportZerolen() && self.Flags.IsZerolen() {\n\t\ttokens = append(tokens, fmt.Sprintf(\"zero-length\"))\n\t}\n\tif self.Flags.LastKnown() && self.Flags.IsLast() {\n\t\ttokens = append(tokens, \"last\")\n\t}\n\tif self.Flags.DelimCRCErr() {\n\t\ttokens = append(tokens, \"delimiter CRC error\")\n\t}\n\tif self.Flags.DelimCRCKnown() {\n\t\ttokens = append(tokens, fmt.Sprintf(\"delimiter-CRC=%02x\", self.CRC))\n\t}\n\treturn strings.Join(tokens, \",\")\n}\n\ntype RadioTapAMPDUStatusFlags uint16\n\nconst (\n\tRadioTapAMPDUStatusFlagsReportZerolen RadioTapAMPDUStatusFlags = 1 << iota\n\tRadioTapAMPDUIsZerolen\n\tRadioTapAMPDULastKnown\n\tRadioTapAMPDUIsLast\n\tRadioTapAMPDUDelimCRCErr\n\tRadioTapAMPDUDelimCRCKnown\n)\n\nfunc (self RadioTapAMPDUStatusFlags) ReportZerolen() bool {\n\treturn self&RadioTapAMPDUStatusFlagsReportZerolen != 0\n}\nfunc (self RadioTapAMPDUStatusFlags) IsZerolen() bool   { return self&RadioTapAMPDUIsZerolen != 0 }\nfunc (self RadioTapAMPDUStatusFlags) LastKnown() bool   { return self&RadioTapAMPDULastKnown != 0 }\nfunc (self RadioTapAMPDUStatusFlags) IsLast() bool      { return self&RadioTapAMPDUIsLast != 0 }\nfunc (self RadioTapAMPDUStatusFlags) DelimCRCErr() bool { return self&RadioTapAMPDUDelimCRCErr != 0 }\nfunc (self RadioTapAMPDUStatusFlags) DelimCRCKnown() bool {\n\treturn self&RadioTapAMPDUDelimCRCKnown != 0\n}\n\ntype RadioTapVHT struct {\n\tKnown      RadioTapVHTKnown\n\tFlags      RadioTapVHTFlags\n\tBandwidth  uint8\n\tMCSNSS     [4]RadioTapVHTMCSNSS\n\tCoding     uint8\n\tGroupId    uint8\n\tPartialAID uint16\n}\n\nfunc (self RadioTapVHT) String() string {\n\tvar tokens []string\n\tif self.Known.STBC() {\n\t\tif self.Flags.STBC() {\n\t\t\ttokens = append(tokens, \"STBC\")\n\t\t} else {\n\t\t\ttokens = append(tokens, \"no STBC\")\n\t\t}\n\t}\n\tif self.Known.TXOPPSNotAllowed() {\n\t\tif self.Flags.TXOPPSNotAllowed() {\n\t\t\ttokens = append(tokens, \"TXOP doze not allowed\")\n\t\t} else {\n\t\t\ttokens = append(tokens, \"TXOP doze allowed\")\n\t\t}\n\t}\n\tif self.Known.GI() {\n\t\tif self.Flags.SGI() {\n\t\t\ttokens = append(tokens, \"short GI\")\n\t\t} else {\n\t\t\ttokens = append(tokens, \"long GI\")\n\t\t}\n\t}\n\tif self.Known.SGINSYMDisambiguation() {\n\t\tif self.Flags.SGINSYMMod() {\n\t\t\ttokens = append(tokens, \"NSYM mod 10=9\")\n\t\t} else {\n\t\t\ttokens = append(tokens, \"NSYM mod 10!=9 or no short GI\")\n\t\t}\n\t}\n\tif self.Known.LDPCExtraOFDMSymbol() {\n\t\tif self.Flags.LDPCExtraOFDMSymbol() {\n\t\t\ttokens = append(tokens, \"LDPC extra OFDM symbols\")\n\t\t} else {\n\t\t\ttokens = append(tokens, \"no LDPC extra OFDM symbols\")\n\t\t}\n\t}\n\tif self.Known.Beamformed() {\n\t\tif self.Flags.Beamformed() {\n\t\t\ttokens = append(tokens, \"beamformed\")\n\t\t} else {\n\t\t\ttokens = append(tokens, \"no beamformed\")\n\t\t}\n\t}\n\tif self.Known.Bandwidth() {\n\t\ttoken := \"?\"\n\t\tswitch self.Bandwidth & 0x1f {\n\t\tcase 0:\n\t\t\ttoken = \"20\"\n\t\tcase 1:\n\t\t\ttoken = \"40\"\n\t\tcase 2:\n\t\t\ttoken = \"40(20L)\"\n\t\tcase 3:\n\t\t\ttoken = \"40(20U)\"\n\t\tcase 4:\n\t\t\ttoken = \"80\"\n\t\tcase 5:\n\t\t\ttoken = \"80(40L)\"\n\t\tcase 6:\n\t\t\ttoken = \"80(40U)\"\n\t\tcase 7:\n\t\t\ttoken = \"80(20LL)\"\n\t\tcase 8:\n\t\t\ttoken = \"80(20LU)\"\n\t\tcase 9:\n\t\t\ttoken = \"80(20UL)\"\n\t\tcase 10:\n\t\t\ttoken = \"80(20UU)\"\n\t\tcase 11:\n\t\t\ttoken = \"160\"\n\t\tcase 12:\n\t\t\ttoken = \"160(80L)\"\n\t\tcase 13:\n\t\t\ttoken = \"160(80U)\"\n\t\tcase 14:\n\t\t\ttoken = \"160(40LL)\"\n\t\tcase 15:\n\t\t\ttoken = \"160(40LU)\"\n\t\tcase 16:\n\t\t\ttoken = \"160(40UL)\"\n\t\tcase 17:\n\t\t\ttoken = \"160(40UU)\"\n\t\tcase 18:\n\t\t\ttoken = \"160(20LLL)\"\n\t\tcase 19:\n\t\t\ttoken = \"160(20LLU)\"\n\t\tcase 20:\n\t\t\ttoken = \"160(20LUL)\"\n\t\tcase 21:\n\t\t\ttoken = \"160(20LUU)\"\n\t\tcase 22:\n\t\t\ttoken = \"160(20ULL)\"\n\t\tcase 23:\n\t\t\ttoken = \"160(20ULU)\"\n\t\tcase 24:\n\t\t\ttoken = \"160(20UUL)\"\n\t\tcase 25:\n\t\t\ttoken = \"160(20UUU)\"\n\t\t}\n\t\ttokens = append(tokens, token)\n\t}\n\tfor i, MCSNSS := range self.MCSNSS {\n\t\tif MCSNSS.Present() {\n\t\t\tfec := \"?\"\n\t\t\tswitch self.Coding & (1 << uint8(i)) {\n\t\t\tcase 0:\n\t\t\t\tfec = \"BCC\"\n\t\t\tcase 1:\n\t\t\t\tfec = \"LDPC\"\n\t\t\t}\n\t\t\ttokens = append(tokens, fmt.Sprintf(\"user%d(%s,%s)\", i, MCSNSS.String(), fec))\n\t\t}\n\t}\n\tif self.Known.GroupId() {\n\t\ttokens = append(tokens,\n\t\t\tfmt.Sprintf(\"group=%d\", self.GroupId))\n\t}\n\tif self.Known.PartialAID() {\n\t\ttokens = append(tokens,\n\t\t\tfmt.Sprintf(\"partial-AID=%d\", self.PartialAID))\n\t}\n\treturn strings.Join(tokens, \",\")\n}\n\ntype RadioTapVHTKnown uint16\n\nconst (\n\tRadioTapVHTKnownSTBC RadioTapVHTKnown = 1 << iota\n\tRadioTapVHTKnownTXOPPSNotAllowed\n\tRadioTapVHTKnownGI\n\tRadioTapVHTKnownSGINSYMDisambiguation\n\tRadioTapVHTKnownLDPCExtraOFDMSymbol\n\tRadioTapVHTKnownBeamformed\n\tRadioTapVHTKnownBandwidth\n\tRadioTapVHTKnownGroupId\n\tRadioTapVHTKnownPartialAID\n)\n\nfunc (self RadioTapVHTKnown) STBC() bool { return self&RadioTapVHTKnownSTBC != 0 }\nfunc (self RadioTapVHTKnown) TXOPPSNotAllowed() bool {\n\treturn self&RadioTapVHTKnownTXOPPSNotAllowed != 0\n}\nfunc (self RadioTapVHTKnown) GI() bool { return self&RadioTapVHTKnownGI != 0 }\nfunc (self RadioTapVHTKnown) SGINSYMDisambiguation() bool {\n\treturn self&RadioTapVHTKnownSGINSYMDisambiguation != 0\n}\nfunc (self RadioTapVHTKnown) LDPCExtraOFDMSymbol() bool {\n\treturn self&RadioTapVHTKnownLDPCExtraOFDMSymbol != 0\n}\nfunc (self RadioTapVHTKnown) Beamformed() bool { return self&RadioTapVHTKnownBeamformed != 0 }\nfunc (self RadioTapVHTKnown) Bandwidth() bool  { return self&RadioTapVHTKnownBandwidth != 0 }\nfunc (self RadioTapVHTKnown) GroupId() bool    { return self&RadioTapVHTKnownGroupId != 0 }\nfunc (self RadioTapVHTKnown) PartialAID() bool { return self&RadioTapVHTKnownPartialAID != 0 }\n\ntype RadioTapVHTFlags uint8\n\nconst (\n\tRadioTapVHTFlagsSTBC RadioTapVHTFlags = 1 << iota\n\tRadioTapVHTFlagsTXOPPSNotAllowed\n\tRadioTapVHTFlagsSGI\n\tRadioTapVHTFlagsSGINSYMMod\n\tRadioTapVHTFlagsLDPCExtraOFDMSymbol\n\tRadioTapVHTFlagsBeamformed\n)\n\nfunc (self RadioTapVHTFlags) STBC() bool { return self&RadioTapVHTFlagsSTBC != 0 }\nfunc (self RadioTapVHTFlags) TXOPPSNotAllowed() bool {\n\treturn self&RadioTapVHTFlagsTXOPPSNotAllowed != 0\n}\nfunc (self RadioTapVHTFlags) SGI() bool        { return self&RadioTapVHTFlagsSGI != 0 }\nfunc (self RadioTapVHTFlags) SGINSYMMod() bool { return self&RadioTapVHTFlagsSGINSYMMod != 0 }\nfunc (self RadioTapVHTFlags) LDPCExtraOFDMSymbol() bool {\n\treturn self&RadioTapVHTFlagsLDPCExtraOFDMSymbol != 0\n}\nfunc (self RadioTapVHTFlags) Beamformed() bool { return self&RadioTapVHTFlagsBeamformed != 0 }\n\ntype RadioTapVHTMCSNSS uint8\n\nfunc (self RadioTapVHTMCSNSS) Present() bool {\n\treturn self&0x0F != 0\n}\n\nfunc (self RadioTapVHTMCSNSS) String() string {\n\treturn fmt.Sprintf(\"NSS#%dMCS#%d\", uint32(self&0xf), uint32(self>>4))\n}\n\nfunc decodeRadioTap(data []byte, p gopacket.PacketBuilder) error {\n\td := &RadioTap{}\n\t// TODO: Should we set LinkLayer here? And implement LinkFlow\n\treturn decodingLayerDecoder(d, data, p)\n}\n\ntype RadioTap struct {\n\tBaseLayer\n\n\t// Version 0. Only increases for drastic changes, introduction of compatible new fields does not count.\n\tVersion uint8\n\t// Length of the whole header in bytes, including it_version, it_pad, it_len, and data fields.\n\tLength uint16\n\t// Present is a bitmap telling which fields are present. Set bit 31 (0x80000000) to extend the bitmap by another 32 bits. Additional extensions are made by setting bit 31.\n\tPresent RadioTapPresent\n\t// TSFT: value in microseconds of the MAC's 64-bit 802.11 Time Synchronization Function timer when the first bit of the MPDU arrived at the MAC. For received frames, only.\n\tTSFT  uint64\n\tFlags RadioTapFlags\n\t// Rate Tx/Rx data rate\n\tRate RadioTapRate\n\t// ChannelFrequency Tx/Rx frequency in MHz, followed by flags\n\tChannelFrequency RadioTapChannelFrequency\n\tChannelFlags     RadioTapChannelFlags\n\t// FHSS For frequency-hopping radios, the hop set (first byte) and pattern (second byte).\n\tFHSS uint16\n\t// DBMAntennaSignal RF signal power at the antenna, decibel difference from one milliwatt.\n\tDBMAntennaSignal int8\n\t// DBMAntennaNoise RF noise power at the antenna, decibel difference from one milliwatt.\n\tDBMAntennaNoise int8\n\t// LockQuality Quality of Barker code lock. Unitless. Monotonically nondecreasing with \"better\" lock strength. Called \"Signal Quality\" in datasheets.\n\tLockQuality uint16\n\t// TxAttenuation Transmit power expressed as unitless distance from max power set at factory calibration.  0 is max power. Monotonically nondecreasing with lower power levels.\n\tTxAttenuation uint16\n\t// DBTxAttenuation Transmit power expressed as decibel distance from max power set at factory calibration.  0 is max power.  Monotonically nondecreasing with lower power levels.\n\tDBTxAttenuation uint16\n\t// DBMTxPower Transmit power expressed as dBm (decibels from a 1 milliwatt reference). This is the absolute power level measured at the antenna port.\n\tDBMTxPower int8\n\t// Antenna Unitless indication of the Rx/Tx antenna for this packet. The first antenna is antenna 0.\n\tAntenna uint8\n\t// DBAntennaSignal RF signal power at the antenna, decibel difference from an arbitrary, fixed reference.\n\tDBAntennaSignal uint8\n\t// DBAntennaNoise RF noise power at the antenna, decibel difference from an arbitrary, fixed reference point.\n\tDBAntennaNoise uint8\n\t//\n\tRxFlags     RadioTapRxFlags\n\tTxFlags     RadioTapTxFlags\n\tRtsRetries  uint8\n\tDataRetries uint8\n\tMCS         RadioTapMCS\n\tAMPDUStatus RadioTapAMPDUStatus\n\tVHT         RadioTapVHT\n}\n\nfunc (m *RadioTap) LayerType() gopacket.LayerType { return LayerTypeRadioTap }\n\nfunc (m *RadioTap) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 8 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"RadioTap too small\")\n\t}\n\tm.Version = uint8(data[0])\n\tm.Length = binary.LittleEndian.Uint16(data[2:4])\n\tm.Present = RadioTapPresent(binary.LittleEndian.Uint32(data[4:8]))\n\n\toffset := uint16(4)\n\n\tfor (binary.LittleEndian.Uint32(data[offset:offset+4]) & 0x80000000) != 0 {\n\t\t// This parser only handles standard radiotap namespace,\n\t\t// and expects all fields are packed in the first it_present.\n\t\t// Extended bitmap will be just ignored.\n\t\toffset += 4\n\t}\n\toffset += 4 // skip the bitmap\n\n\tif m.Present.TSFT() {\n\t\toffset += align(offset, 8)\n\t\tm.TSFT = binary.LittleEndian.Uint64(data[offset : offset+8])\n\t\toffset += 8\n\t}\n\tif m.Present.Flags() {\n\t\tm.Flags = RadioTapFlags(data[offset])\n\t\toffset++\n\t}\n\tif m.Present.Rate() {\n\t\tm.Rate = RadioTapRate(data[offset])\n\t\toffset++\n\t}\n\tif m.Present.Channel() {\n\t\toffset += align(offset, 2)\n\t\tm.ChannelFrequency = RadioTapChannelFrequency(binary.LittleEndian.Uint16(data[offset : offset+2]))\n\t\toffset += 2\n\t\tm.ChannelFlags = RadioTapChannelFlags(binary.LittleEndian.Uint16(data[offset : offset+2]))\n\t\toffset += 2\n\t}\n\tif m.Present.FHSS() {\n\t\tm.FHSS = binary.LittleEndian.Uint16(data[offset : offset+2])\n\t\toffset += 2\n\t}\n\tif m.Present.DBMAntennaSignal() {\n\t\tm.DBMAntennaSignal = int8(data[offset])\n\t\toffset++\n\t}\n\tif m.Present.DBMAntennaNoise() {\n\t\tm.DBMAntennaNoise = int8(data[offset])\n\t\toffset++\n\t}\n\tif m.Present.LockQuality() {\n\t\toffset += align(offset, 2)\n\t\tm.LockQuality = binary.LittleEndian.Uint16(data[offset : offset+2])\n\t\toffset += 2\n\t}\n\tif m.Present.TxAttenuation() {\n\t\toffset += align(offset, 2)\n\t\tm.TxAttenuation = binary.LittleEndian.Uint16(data[offset : offset+2])\n\t\toffset += 2\n\t}\n\tif m.Present.DBTxAttenuation() {\n\t\toffset += align(offset, 2)\n\t\tm.DBTxAttenuation = binary.LittleEndian.Uint16(data[offset : offset+2])\n\t\toffset += 2\n\t}\n\tif m.Present.DBMTxPower() {\n\t\tm.DBMTxPower = int8(data[offset])\n\t\toffset++\n\t}\n\tif m.Present.Antenna() {\n\t\tm.Antenna = uint8(data[offset])\n\t\toffset++\n\t}\n\tif m.Present.DBAntennaSignal() {\n\t\tm.DBAntennaSignal = uint8(data[offset])\n\t\toffset++\n\t}\n\tif m.Present.DBAntennaNoise() {\n\t\tm.DBAntennaNoise = uint8(data[offset])\n\t\toffset++\n\t}\n\tif m.Present.RxFlags() {\n\t\toffset += align(offset, 2)\n\t\tm.RxFlags = RadioTapRxFlags(binary.LittleEndian.Uint16(data[offset:]))\n\t\toffset += 2\n\t}\n\tif m.Present.TxFlags() {\n\t\toffset += align(offset, 2)\n\t\tm.TxFlags = RadioTapTxFlags(binary.LittleEndian.Uint16(data[offset:]))\n\t\toffset += 2\n\t}\n\tif m.Present.RtsRetries() {\n\t\tm.RtsRetries = uint8(data[offset])\n\t\toffset++\n\t}\n\tif m.Present.DataRetries() {\n\t\tm.DataRetries = uint8(data[offset])\n\t\toffset++\n\t}\n\tif m.Present.MCS() {\n\t\tm.MCS = RadioTapMCS{\n\t\t\tRadioTapMCSKnown(data[offset]),\n\t\t\tRadioTapMCSFlags(data[offset+1]),\n\t\t\tuint8(data[offset+2]),\n\t\t}\n\t\toffset += 3\n\t}\n\tif m.Present.AMPDUStatus() {\n\t\toffset += align(offset, 4)\n\t\tm.AMPDUStatus = RadioTapAMPDUStatus{\n\t\t\tReference: binary.LittleEndian.Uint32(data[offset:]),\n\t\t\tFlags:     RadioTapAMPDUStatusFlags(binary.LittleEndian.Uint16(data[offset+4:])),\n\t\t\tCRC:       uint8(data[offset+6]),\n\t\t}\n\t\toffset += 8\n\t}\n\tif m.Present.VHT() {\n\t\toffset += align(offset, 2)\n\t\tm.VHT = RadioTapVHT{\n\t\t\tKnown:     RadioTapVHTKnown(binary.LittleEndian.Uint16(data[offset:])),\n\t\t\tFlags:     RadioTapVHTFlags(data[offset+2]),\n\t\t\tBandwidth: uint8(data[offset+3]),\n\t\t\tMCSNSS: [4]RadioTapVHTMCSNSS{\n\t\t\t\tRadioTapVHTMCSNSS(data[offset+4]),\n\t\t\t\tRadioTapVHTMCSNSS(data[offset+5]),\n\t\t\t\tRadioTapVHTMCSNSS(data[offset+6]),\n\t\t\t\tRadioTapVHTMCSNSS(data[offset+7]),\n\t\t\t},\n\t\t\tCoding:     uint8(data[offset+8]),\n\t\t\tGroupId:    uint8(data[offset+9]),\n\t\t\tPartialAID: binary.LittleEndian.Uint16(data[offset+10:]),\n\t\t}\n\t\toffset += 12\n\t}\n\n\tpayload := data[m.Length:]\n\n\t// Remove non standard padding used by some Wi-Fi drivers\n\tif m.Flags.Datapad() &&\n\t\tpayload[0]&0xC == 0x8 { //&& // Data frame\n\t\theadlen := 24\n\t\tif payload[0]&0x8C == 0x88 { // QoS\n\t\t\theadlen += 2\n\t\t}\n\t\tif payload[1]&0x3 == 0x3 { // 4 addresses\n\t\t\theadlen += 2\n\t\t}\n\t\tif headlen%4 == 2 {\n\t\t\tpayload = append(payload[:headlen], payload[headlen+2:len(payload)]...)\n\t\t}\n\t}\n\n\tif !m.Flags.FCS() {\n\t\t// Dot11.DecodeFromBytes() expects FCS present and performs a hard chop on the checksum\n\t\t// If a user is handing in subslices or packets from a buffered stream, the capacity of the slice\n\t\t// may extend beyond the len, rather than expecting callers to enforce cap==len on every packet\n\t\t// we take the hit in this one case and do a reallocation.  If the user DOES enforce cap==len\n\t\t// then the reallocation will happen anyway on the append.  This is requried because the append\n\t\t// write to the memory directly after the payload if there is sufficient capacity, which callers\n\t\t// may not expect.\n\t\treallocPayload := make([]byte, len(payload)+4)\n\t\tcopy(reallocPayload[0:len(payload)], payload)\n\t\th := crc32.NewIEEE()\n\t\th.Write(payload)\n\t\tbinary.LittleEndian.PutUint32(reallocPayload[len(payload):], h.Sum32())\n\t\tpayload = reallocPayload\n\t}\n\tm.BaseLayer = BaseLayer{Contents: data[:m.Length], Payload: payload}\n\n\treturn nil\n}\n\nfunc (m RadioTap) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbuf := make([]byte, 1024)\n\n\tbuf[0] = m.Version\n\tbuf[1] = 0\n\n\tbinary.LittleEndian.PutUint32(buf[4:8], uint32(m.Present))\n\n\toffset := uint16(4)\n\n\tfor (binary.LittleEndian.Uint32(buf[offset:offset+4]) & 0x80000000) != 0 {\n\t\toffset += 4\n\t}\n\n\toffset += 4\n\n\tif m.Present.TSFT() {\n\t\toffset += align(offset, 8)\n\t\tbinary.LittleEndian.PutUint64(buf[offset:offset+8], m.TSFT)\n\t\toffset += 8\n\t}\n\n\tif m.Present.Flags() {\n\t\tbuf[offset] = uint8(m.Flags)\n\t\toffset++\n\t}\n\n\tif m.Present.Rate() {\n\t\tbuf[offset] = uint8(m.Rate)\n\t\toffset++\n\t}\n\n\tif m.Present.Channel() {\n\t\toffset += align(offset, 2)\n\t\tbinary.LittleEndian.PutUint16(buf[offset:offset+2], uint16(m.ChannelFrequency))\n\t\toffset += 2\n\t\tbinary.LittleEndian.PutUint16(buf[offset:offset+2], uint16(m.ChannelFlags))\n\t\toffset += 2\n\t}\n\n\tif m.Present.FHSS() {\n\t\tbinary.LittleEndian.PutUint16(buf[offset:offset+2], m.FHSS)\n\t\toffset += 2\n\t}\n\n\tif m.Present.DBMAntennaSignal() {\n\t\tbuf[offset] = byte(m.DBMAntennaSignal)\n\t\toffset++\n\t}\n\n\tif m.Present.DBMAntennaNoise() {\n\t\tbuf[offset] = byte(m.DBMAntennaNoise)\n\t\toffset++\n\t}\n\n\tif m.Present.LockQuality() {\n\t\toffset += align(offset, 2)\n\t\tbinary.LittleEndian.PutUint16(buf[offset:offset+2], m.LockQuality)\n\t\toffset += 2\n\t}\n\n\tif m.Present.TxAttenuation() {\n\t\toffset += align(offset, 2)\n\t\tbinary.LittleEndian.PutUint16(buf[offset:offset+2], m.TxAttenuation)\n\t\toffset += 2\n\t}\n\n\tif m.Present.DBTxAttenuation() {\n\t\toffset += align(offset, 2)\n\t\tbinary.LittleEndian.PutUint16(buf[offset:offset+2], m.DBTxAttenuation)\n\t\toffset += 2\n\t}\n\n\tif m.Present.DBMTxPower() {\n\t\tbuf[offset] = byte(m.DBMTxPower)\n\t\toffset++\n\t}\n\n\tif m.Present.Antenna() {\n\t\tbuf[offset] = uint8(m.Antenna)\n\t\toffset++\n\t}\n\n\tif m.Present.DBAntennaSignal() {\n\t\tbuf[offset] = uint8(m.DBAntennaSignal)\n\t\toffset++\n\t}\n\n\tif m.Present.DBAntennaNoise() {\n\t\tbuf[offset] = uint8(m.DBAntennaNoise)\n\t\toffset++\n\t}\n\n\tif m.Present.RxFlags() {\n\t\toffset += align(offset, 2)\n\t\tbinary.LittleEndian.PutUint16(buf[offset:offset+2], uint16(m.RxFlags))\n\t\toffset += 2\n\t}\n\n\tif m.Present.TxFlags() {\n\t\toffset += align(offset, 2)\n\t\tbinary.LittleEndian.PutUint16(buf[offset:offset+2], uint16(m.TxFlags))\n\t\toffset += 2\n\t}\n\n\tif m.Present.RtsRetries() {\n\t\tbuf[offset] = m.RtsRetries\n\t\toffset++\n\t}\n\n\tif m.Present.DataRetries() {\n\t\tbuf[offset] = m.DataRetries\n\t\toffset++\n\t}\n\n\tif m.Present.MCS() {\n\t\tbuf[offset] = uint8(m.MCS.Known)\n\t\tbuf[offset+1] = uint8(m.MCS.Flags)\n\t\tbuf[offset+2] = uint8(m.MCS.MCS)\n\n\t\toffset += 3\n\t}\n\n\tif m.Present.AMPDUStatus() {\n\t\toffset += align(offset, 4)\n\n\t\tbinary.LittleEndian.PutUint32(buf[offset:offset+4], m.AMPDUStatus.Reference)\n\t\tbinary.LittleEndian.PutUint16(buf[offset+4:offset+6], uint16(m.AMPDUStatus.Flags))\n\n\t\tbuf[offset+6] = m.AMPDUStatus.CRC\n\n\t\toffset += 8\n\t}\n\n\tif m.Present.VHT() {\n\t\toffset += align(offset, 2)\n\n\t\tbinary.LittleEndian.PutUint16(buf[offset:], uint16(m.VHT.Known))\n\n\t\tbuf[offset+2] = uint8(m.VHT.Flags)\n\t\tbuf[offset+3] = uint8(m.VHT.Bandwidth)\n\t\tbuf[offset+4] = uint8(m.VHT.MCSNSS[0])\n\t\tbuf[offset+5] = uint8(m.VHT.MCSNSS[1])\n\t\tbuf[offset+6] = uint8(m.VHT.MCSNSS[2])\n\t\tbuf[offset+7] = uint8(m.VHT.MCSNSS[3])\n\t\tbuf[offset+8] = uint8(m.VHT.Coding)\n\t\tbuf[offset+9] = uint8(m.VHT.GroupId)\n\n\t\tbinary.LittleEndian.PutUint16(buf[offset+10:offset+12], m.VHT.PartialAID)\n\n\t\toffset += 12\n\t}\n\n\tpacketBuf, err := b.PrependBytes(int(offset))\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif opts.FixLengths {\n\t\tm.Length = offset\n\t}\n\n\tbinary.LittleEndian.PutUint16(buf[2:4], m.Length)\n\n\tcopy(packetBuf, buf)\n\n\treturn nil\n}\n\nfunc (m *RadioTap) CanDecode() gopacket.LayerClass    { return LayerTypeRadioTap }\nfunc (m *RadioTap) NextLayerType() gopacket.LayerType { return LayerTypeDot11 }\n"
  },
  {
    "path": "layers/radiotap_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n\t\"testing\"\n)\n\n// testPacketRadiotap0 is the packet:\n//   09:34:34.799438 1.0 Mb/s 2412 MHz 11b -58dB signal antenna 7 Acknowledgment RA:88:1f:a1:ae:9d:cb\n//      0x0000:  0000 1200 2e48 0000 1002 6c09 a000 c607  .....H....l.....\n//      0x0010:  0000 d400 0000 881f a1ae 9dcb c630 4b4b  .............0KK\nvar testPacketRadiotap0 = []byte{\n\t0x00, 0x00, 0x12, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x02, 0x6c, 0x09, 0xa0, 0x00, 0xc6, 0x07,\n\t0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x88, 0x1f, 0xa1, 0xae, 0x9d, 0xcb, 0xc6, 0x30, 0x4b, 0x4b,\n}\n\nfunc TestPacketRadiotap0(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketRadiotap0, LayerTypeRadioTap, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)\n\trt := p.Layer(LayerTypeRadioTap).(*RadioTap)\n\tif rt.ChannelFrequency != 2412 || rt.DBMAntennaSignal != -58 || rt.Antenna != 7 {\n\t\tt.Error(\"Radiotap decode error\")\n\t}\n\tif rt.Rate != 2 { // 500Kbps unit\n\t\tt.Error(\"Radiotap Rate decode error\")\n\t}\n}\nfunc BenchmarkDecodePacketRadiotap0(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketRadiotap0, LayerTypeRadioTap, gopacket.NoCopy)\n\t}\n}\n\n// testPacketRadiotap1 is the packet:\n//   05:24:21.380948 2412 MHz 11g -36dB signal antenna 5 65.0 Mb/s MCS 7 20 MHz lon GI\n//   \t0x0000:  0000 1500 2a48 0800 1000 6c09 8004 dc05  ....*H....l.....\n//   \t0x0010:  0000 0700 0748 112c 0000 3a9d aaf0 191c  .....H.,..:.....\n//   \t0x0020:  aba7 f213 9d00 3a9d aaf0 1970 b2ee a9f1  ......:....p....\n//   \t0x0030:  16                                       .\nvar testPacketRadiotap1 = []byte{\n\t0x00, 0x00, 0x15, 0x00, 0x2a, 0x48, 0x08, 0x00, 0x10, 0x00, 0x6c, 0x09, 0x80, 0x04, 0xdc, 0x05,\n\t0x00, 0x00, 0x07, 0x00, 0x07, 0x48, 0x11, 0x2c, 0x00, 0x00, 0x3a, 0x9d, 0xaa, 0xf0, 0x19, 0x1c,\n\t0xab, 0xa7, 0xf2, 0x13, 0x9d, 0x00, 0x3a, 0x9d, 0xaa, 0xf0, 0x19, 0x70, 0xb2, 0xee, 0xa9, 0xf1,\n\t0x16,\n}\n\nfunc TestPacketRadiotap1(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketRadiotap1, LayerTypeRadioTap, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)\n\trt := p.Layer(LayerTypeRadioTap).(*RadioTap)\n\tif rt.ChannelFrequency != 2412 || rt.DBMAntennaSignal != -36 || rt.Antenna != 5 {\n\t\tt.Error(\"Radiotap decode error\")\n\t}\n\tif !rt.MCS.Known.MCSIndex() || rt.MCS.MCS != 7 {\n\t\tt.Error(\"Radiotap MCS error\")\n\t}\n\tif !rt.MCS.Known.Bandwidth() || rt.MCS.Flags.Bandwidth() != 0 {\n\t\tt.Error(\"Radiotap bandwidth error\")\n\t}\n\tif !rt.MCS.Known.GuardInterval() || rt.MCS.Flags.ShortGI() {\n\t\tt.Error(\"Radiotap GI error\")\n\t}\n}\nfunc BenchmarkDecodePacketRadiotap1(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketRadiotap1, LayerTypeRadioTap, gopacket.NoCopy)\n\t}\n}\n"
  },
  {
    "path": "layers/radius.go",
    "content": "// Copyright 2020 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license that can be found\n// in the LICENSE file in the root of the source tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\nconst (\n\t// RFC 2865 3.  Packet Format\n\t// `The minimum length is 20 and maximum length is 4096.`\n\tradiusMinimumRecordSizeInBytes int = 20\n\tradiusMaximumRecordSizeInBytes int = 4096\n\n\t// RFC 2865 5.  Attributes\n\t// `The Length field is one octet, and indicates the length of this Attribute including the Type, Length and Value fields.`\n\t// `The Value field is zero or more octets and contains information specific to the Attribute.`\n\tradiusAttributesMinimumRecordSizeInBytes int = 2\n)\n\n// RADIUS represents a Remote Authentication Dial In User Service layer.\ntype RADIUS struct {\n\tBaseLayer\n\n\tCode          RADIUSCode\n\tIdentifier    RADIUSIdentifier\n\tLength        RADIUSLength\n\tAuthenticator RADIUSAuthenticator\n\tAttributes    []RADIUSAttribute\n}\n\n// RADIUSCode represents packet type.\ntype RADIUSCode uint8\n\n// constants that define RADIUSCode.\nconst (\n\tRADIUSCodeAccessRequest      RADIUSCode = 1   // RFC2865 3.  Packet Format\n\tRADIUSCodeAccessAccept       RADIUSCode = 2   // RFC2865 3.  Packet Format\n\tRADIUSCodeAccessReject       RADIUSCode = 3   // RFC2865 3.  Packet Format\n\tRADIUSCodeAccountingRequest  RADIUSCode = 4   // RFC2865 3.  Packet Format\n\tRADIUSCodeAccountingResponse RADIUSCode = 5   // RFC2865 3.  Packet Format\n\tRADIUSCodeAccessChallenge    RADIUSCode = 11  // RFC2865 3.  Packet Format\n\tRADIUSCodeStatusServer       RADIUSCode = 12  // RFC2865 3.  Packet Format (experimental)\n\tRADIUSCodeStatusClient       RADIUSCode = 13  // RFC2865 3.  Packet Format (experimental)\n\tRADIUSCodeReserved           RADIUSCode = 255 // RFC2865 3.  Packet Format\n)\n\n// String returns a string version of a RADIUSCode.\nfunc (t RADIUSCode) String() (s string) {\n\tswitch t {\n\tcase RADIUSCodeAccessRequest:\n\t\ts = \"Access-Request\"\n\tcase RADIUSCodeAccessAccept:\n\t\ts = \"Access-Accept\"\n\tcase RADIUSCodeAccessReject:\n\t\ts = \"Access-Reject\"\n\tcase RADIUSCodeAccountingRequest:\n\t\ts = \"Accounting-Request\"\n\tcase RADIUSCodeAccountingResponse:\n\t\ts = \"Accounting-Response\"\n\tcase RADIUSCodeAccessChallenge:\n\t\ts = \"Access-Challenge\"\n\tcase RADIUSCodeStatusServer:\n\t\ts = \"Status-Server\"\n\tcase RADIUSCodeStatusClient:\n\t\ts = \"Status-Client\"\n\tcase RADIUSCodeReserved:\n\t\ts = \"Reserved\"\n\tdefault:\n\t\ts = fmt.Sprintf(\"Unknown(%d)\", t)\n\t}\n\treturn\n}\n\n// RADIUSIdentifier represents packet identifier.\ntype RADIUSIdentifier uint8\n\n// RADIUSLength represents packet length.\ntype RADIUSLength uint16\n\n// RADIUSAuthenticator represents authenticator.\ntype RADIUSAuthenticator [16]byte\n\n// RADIUSAttribute represents attributes.\ntype RADIUSAttribute struct {\n\tType   RADIUSAttributeType\n\tLength RADIUSAttributeLength\n\tValue  RADIUSAttributeValue\n}\n\n// RADIUSAttributeType represents attribute type.\ntype RADIUSAttributeType uint8\n\n// constants that define RADIUSAttributeType.\nconst (\n\tRADIUSAttributeTypeUserName               RADIUSAttributeType = 1  // RFC2865  5.1.  User-Name\n\tRADIUSAttributeTypeUserPassword           RADIUSAttributeType = 2  // RFC2865  5.2.  User-Password\n\tRADIUSAttributeTypeCHAPPassword           RADIUSAttributeType = 3  // RFC2865  5.3.  CHAP-Password\n\tRADIUSAttributeTypeNASIPAddress           RADIUSAttributeType = 4  // RFC2865  5.4.  NAS-IP-Address\n\tRADIUSAttributeTypeNASPort                RADIUSAttributeType = 5  // RFC2865  5.5.  NAS-Port\n\tRADIUSAttributeTypeServiceType            RADIUSAttributeType = 6  // RFC2865  5.6.  Service-Type\n\tRADIUSAttributeTypeFramedProtocol         RADIUSAttributeType = 7  // RFC2865  5.7.  Framed-Protocol\n\tRADIUSAttributeTypeFramedIPAddress        RADIUSAttributeType = 8  // RFC2865  5.8.  Framed-IP-Address\n\tRADIUSAttributeTypeFramedIPNetmask        RADIUSAttributeType = 9  // RFC2865  5.9.  Framed-IP-Netmask\n\tRADIUSAttributeTypeFramedRouting          RADIUSAttributeType = 10 // RFC2865 5.10.  Framed-Routing\n\tRADIUSAttributeTypeFilterId               RADIUSAttributeType = 11 // RFC2865 5.11.  Filter-Id\n\tRADIUSAttributeTypeFramedMTU              RADIUSAttributeType = 12 // RFC2865 5.12.  Framed-MTU\n\tRADIUSAttributeTypeFramedCompression      RADIUSAttributeType = 13 // RFC2865 5.13.  Framed-Compression\n\tRADIUSAttributeTypeLoginIPHost            RADIUSAttributeType = 14 // RFC2865 5.14.  Login-IP-Host\n\tRADIUSAttributeTypeLoginService           RADIUSAttributeType = 15 // RFC2865 5.15.  Login-Service\n\tRADIUSAttributeTypeLoginTCPPort           RADIUSAttributeType = 16 // RFC2865 5.16.  Login-TCP-Port\n\tRADIUSAttributeTypeReplyMessage           RADIUSAttributeType = 18 // RFC2865 5.18.  Reply-Message\n\tRADIUSAttributeTypeCallbackNumber         RADIUSAttributeType = 19 // RFC2865 5.19.  Callback-Number\n\tRADIUSAttributeTypeCallbackId             RADIUSAttributeType = 20 // RFC2865 5.20.  Callback-Id\n\tRADIUSAttributeTypeFramedRoute            RADIUSAttributeType = 22 // RFC2865 5.22.  Framed-Route\n\tRADIUSAttributeTypeFramedIPXNetwork       RADIUSAttributeType = 23 // RFC2865 5.23.  Framed-IPX-Network\n\tRADIUSAttributeTypeState                  RADIUSAttributeType = 24 // RFC2865 5.24.  State\n\tRADIUSAttributeTypeClass                  RADIUSAttributeType = 25 // RFC2865 5.25.  Class\n\tRADIUSAttributeTypeVendorSpecific         RADIUSAttributeType = 26 // RFC2865 5.26.  Vendor-Specific\n\tRADIUSAttributeTypeSessionTimeout         RADIUSAttributeType = 27 // RFC2865 5.27.  Session-Timeout\n\tRADIUSAttributeTypeIdleTimeout            RADIUSAttributeType = 28 // RFC2865 5.28.  Idle-Timeout\n\tRADIUSAttributeTypeTerminationAction      RADIUSAttributeType = 29 // RFC2865 5.29.  Termination-Action\n\tRADIUSAttributeTypeCalledStationId        RADIUSAttributeType = 30 // RFC2865 5.30.  Called-Station-Id\n\tRADIUSAttributeTypeCallingStationId       RADIUSAttributeType = 31 // RFC2865 5.31.  Calling-Station-Id\n\tRADIUSAttributeTypeNASIdentifier          RADIUSAttributeType = 32 // RFC2865 5.32.  NAS-Identifier\n\tRADIUSAttributeTypeProxyState             RADIUSAttributeType = 33 // RFC2865 5.33.  Proxy-State\n\tRADIUSAttributeTypeLoginLATService        RADIUSAttributeType = 34 // RFC2865 5.34.  Login-LAT-Service\n\tRADIUSAttributeTypeLoginLATNode           RADIUSAttributeType = 35 // RFC2865 5.35.  Login-LAT-Node\n\tRADIUSAttributeTypeLoginLATGroup          RADIUSAttributeType = 36 // RFC2865 5.36.  Login-LAT-Group\n\tRADIUSAttributeTypeFramedAppleTalkLink    RADIUSAttributeType = 37 // RFC2865 5.37.  Framed-AppleTalk-Link\n\tRADIUSAttributeTypeFramedAppleTalkNetwork RADIUSAttributeType = 38 // RFC2865 5.38.  Framed-AppleTalk-Network\n\tRADIUSAttributeTypeFramedAppleTalkZone    RADIUSAttributeType = 39 // RFC2865 5.39.  Framed-AppleTalk-Zone\n\tRADIUSAttributeTypeAcctStatusType         RADIUSAttributeType = 40 // RFC2866  5.1.  Acct-Status-Type\n\tRADIUSAttributeTypeAcctDelayTime          RADIUSAttributeType = 41 // RFC2866  5.2.  Acct-Delay-Time\n\tRADIUSAttributeTypeAcctInputOctets        RADIUSAttributeType = 42 // RFC2866  5.3.  Acct-Input-Octets\n\tRADIUSAttributeTypeAcctOutputOctets       RADIUSAttributeType = 43 // RFC2866  5.4.  Acct-Output-Octets\n\tRADIUSAttributeTypeAcctSessionId          RADIUSAttributeType = 44 // RFC2866  5.5.  Acct-Session-Id\n\tRADIUSAttributeTypeAcctAuthentic          RADIUSAttributeType = 45 // RFC2866  5.6.  Acct-Authentic\n\tRADIUSAttributeTypeAcctSessionTime        RADIUSAttributeType = 46 // RFC2866  5.7.  Acct-Session-Time\n\tRADIUSAttributeTypeAcctInputPackets       RADIUSAttributeType = 47 // RFC2866  5.8.  Acct-Input-Packets\n\tRADIUSAttributeTypeAcctOutputPackets      RADIUSAttributeType = 48 // RFC2866  5.9.  Acct-Output-Packets\n\tRADIUSAttributeTypeAcctTerminateCause     RADIUSAttributeType = 49 // RFC2866 5.10.  Acct-Terminate-Cause\n\tRADIUSAttributeTypeAcctMultiSessionId     RADIUSAttributeType = 50 // RFC2866 5.11.  Acct-Multi-Session-Id\n\tRADIUSAttributeTypeAcctLinkCount          RADIUSAttributeType = 51 // RFC2866 5.12.  Acct-Link-Count\n\tRADIUSAttributeTypeAcctInputGigawords     RADIUSAttributeType = 52 // RFC2869  5.1.  Acct-Input-Gigawords\n\tRADIUSAttributeTypeAcctOutputGigawords    RADIUSAttributeType = 53 // RFC2869  5.2.  Acct-Output-Gigawords\n\tRADIUSAttributeTypeEventTimestamp         RADIUSAttributeType = 55 // RFC2869  5.3.  Event-Timestamp\n\tRADIUSAttributeTypeCHAPChallenge          RADIUSAttributeType = 60 // RFC2865 5.40.  CHAP-Challenge\n\tRADIUSAttributeTypeNASPortType            RADIUSAttributeType = 61 // RFC2865 5.41.  NAS-Port-Type\n\tRADIUSAttributeTypePortLimit              RADIUSAttributeType = 62 // RFC2865 5.42.  Port-Limit\n\tRADIUSAttributeTypeLoginLATPort           RADIUSAttributeType = 63 // RFC2865 5.43.  Login-LAT-Port\n\tRADIUSAttributeTypeTunnelType             RADIUSAttributeType = 64 // RFC2868  3.1.  Tunnel-Type\n\tRADIUSAttributeTypeTunnelMediumType       RADIUSAttributeType = 65 // RFC2868  3.2.  Tunnel-Medium-Type\n\tRADIUSAttributeTypeTunnelClientEndpoint   RADIUSAttributeType = 66 // RFC2868  3.3.  Tunnel-Client-Endpoint\n\tRADIUSAttributeTypeTunnelServerEndpoint   RADIUSAttributeType = 67 // RFC2868  3.4.  Tunnel-Server-Endpoint\n\tRADIUSAttributeTypeAcctTunnelConnection   RADIUSAttributeType = 68 // RFC2867  4.1.  Acct-Tunnel-Connection\n\tRADIUSAttributeTypeTunnelPassword         RADIUSAttributeType = 69 // RFC2868  3.5.  Tunnel-Password\n\tRADIUSAttributeTypeARAPPassword           RADIUSAttributeType = 70 // RFC2869  5.4.  ARAP-Password\n\tRADIUSAttributeTypeARAPFeatures           RADIUSAttributeType = 71 // RFC2869  5.5.  ARAP-Features\n\tRADIUSAttributeTypeARAPZoneAccess         RADIUSAttributeType = 72 // RFC2869  5.6.  ARAP-Zone-Access\n\tRADIUSAttributeTypeARAPSecurity           RADIUSAttributeType = 73 // RFC2869  5.7.  ARAP-Security\n\tRADIUSAttributeTypeARAPSecurityData       RADIUSAttributeType = 74 // RFC2869  5.8.  ARAP-Security-Data\n\tRADIUSAttributeTypePasswordRetry          RADIUSAttributeType = 75 // RFC2869  5.9.  Password-Retry\n\tRADIUSAttributeTypePrompt                 RADIUSAttributeType = 76 // RFC2869 5.10.  Prompt\n\tRADIUSAttributeTypeConnectInfo            RADIUSAttributeType = 77 // RFC2869 5.11.  Connect-Info\n\tRADIUSAttributeTypeConfigurationToken     RADIUSAttributeType = 78 // RFC2869 5.12.  Configuration-Token\n\tRADIUSAttributeTypeEAPMessage             RADIUSAttributeType = 79 // RFC2869 5.13.  EAP-Message\n\tRADIUSAttributeTypeMessageAuthenticator   RADIUSAttributeType = 80 // RFC2869 5.14.  Message-Authenticator\n\tRADIUSAttributeTypeTunnelPrivateGroupID   RADIUSAttributeType = 81 // RFC2868  3.6.  Tunnel-Private-Group-ID\n\tRADIUSAttributeTypeTunnelAssignmentID     RADIUSAttributeType = 82 // RFC2868  3.7.  Tunnel-Assignment-ID\n\tRADIUSAttributeTypeTunnelPreference       RADIUSAttributeType = 83 // RFC2868  3.8.  Tunnel-Preference\n\tRADIUSAttributeTypeARAPChallengeResponse  RADIUSAttributeType = 84 // RFC2869 5.15.  ARAP-Challenge-Response\n\tRADIUSAttributeTypeAcctInterimInterval    RADIUSAttributeType = 85 // RFC2869 5.16.  Acct-Interim-Interval\n\tRADIUSAttributeTypeAcctTunnelPacketsLost  RADIUSAttributeType = 86 // RFC2867  4.2.  Acct-Tunnel-Packets-Lost\n\tRADIUSAttributeTypeNASPortId              RADIUSAttributeType = 87 // RFC2869 5.17.  NAS-Port-Id\n\tRADIUSAttributeTypeFramedPool             RADIUSAttributeType = 88 // RFC2869 5.18.  Framed-Pool\n\tRADIUSAttributeTypeTunnelClientAuthID     RADIUSAttributeType = 90 // RFC2868  3.9.  Tunnel-Client-Auth-ID\n\tRADIUSAttributeTypeTunnelServerAuthID     RADIUSAttributeType = 91 // RFC2868 3.10.  Tunnel-Server-Auth-ID\n)\n\n// RADIUSAttributeType represents attribute length.\ntype RADIUSAttributeLength uint8\n\n// RADIUSAttributeType represents attribute value.\ntype RADIUSAttributeValue []byte\n\n// String returns a string version of a RADIUSAttributeType.\nfunc (t RADIUSAttributeType) String() (s string) {\n\tswitch t {\n\tcase RADIUSAttributeTypeUserName:\n\t\ts = \"User-Name\"\n\tcase RADIUSAttributeTypeUserPassword:\n\t\ts = \"User-Password\"\n\tcase RADIUSAttributeTypeCHAPPassword:\n\t\ts = \"CHAP-Password\"\n\tcase RADIUSAttributeTypeNASIPAddress:\n\t\ts = \"NAS-IP-Address\"\n\tcase RADIUSAttributeTypeNASPort:\n\t\ts = \"NAS-Port\"\n\tcase RADIUSAttributeTypeServiceType:\n\t\ts = \"Service-Type\"\n\tcase RADIUSAttributeTypeFramedProtocol:\n\t\ts = \"Framed-Protocol\"\n\tcase RADIUSAttributeTypeFramedIPAddress:\n\t\ts = \"Framed-IP-Address\"\n\tcase RADIUSAttributeTypeFramedIPNetmask:\n\t\ts = \"Framed-IP-Netmask\"\n\tcase RADIUSAttributeTypeFramedRouting:\n\t\ts = \"Framed-Routing\"\n\tcase RADIUSAttributeTypeFilterId:\n\t\ts = \"Filter-Id\"\n\tcase RADIUSAttributeTypeFramedMTU:\n\t\ts = \"Framed-MTU\"\n\tcase RADIUSAttributeTypeFramedCompression:\n\t\ts = \"Framed-Compression\"\n\tcase RADIUSAttributeTypeLoginIPHost:\n\t\ts = \"Login-IP-Host\"\n\tcase RADIUSAttributeTypeLoginService:\n\t\ts = \"Login-Service\"\n\tcase RADIUSAttributeTypeLoginTCPPort:\n\t\ts = \"Login-TCP-Port\"\n\tcase RADIUSAttributeTypeReplyMessage:\n\t\ts = \"Reply-Message\"\n\tcase RADIUSAttributeTypeCallbackNumber:\n\t\ts = \"Callback-Number\"\n\tcase RADIUSAttributeTypeCallbackId:\n\t\ts = \"Callback-Id\"\n\tcase RADIUSAttributeTypeFramedRoute:\n\t\ts = \"Framed-Route\"\n\tcase RADIUSAttributeTypeFramedIPXNetwork:\n\t\ts = \"Framed-IPX-Network\"\n\tcase RADIUSAttributeTypeState:\n\t\ts = \"State\"\n\tcase RADIUSAttributeTypeClass:\n\t\ts = \"Class\"\n\tcase RADIUSAttributeTypeVendorSpecific:\n\t\ts = \"Vendor-Specific\"\n\tcase RADIUSAttributeTypeSessionTimeout:\n\t\ts = \"Session-Timeout\"\n\tcase RADIUSAttributeTypeIdleTimeout:\n\t\ts = \"Idle-Timeout\"\n\tcase RADIUSAttributeTypeTerminationAction:\n\t\ts = \"Termination-Action\"\n\tcase RADIUSAttributeTypeCalledStationId:\n\t\ts = \"Called-Station-Id\"\n\tcase RADIUSAttributeTypeCallingStationId:\n\t\ts = \"Calling-Station-Id\"\n\tcase RADIUSAttributeTypeNASIdentifier:\n\t\ts = \"NAS-Identifier\"\n\tcase RADIUSAttributeTypeProxyState:\n\t\ts = \"Proxy-State\"\n\tcase RADIUSAttributeTypeLoginLATService:\n\t\ts = \"Login-LAT-Service\"\n\tcase RADIUSAttributeTypeLoginLATNode:\n\t\ts = \"Login-LAT-Node\"\n\tcase RADIUSAttributeTypeLoginLATGroup:\n\t\ts = \"Login-LAT-Group\"\n\tcase RADIUSAttributeTypeFramedAppleTalkLink:\n\t\ts = \"Framed-AppleTalk-Link\"\n\tcase RADIUSAttributeTypeFramedAppleTalkNetwork:\n\t\ts = \"Framed-AppleTalk-Network\"\n\tcase RADIUSAttributeTypeFramedAppleTalkZone:\n\t\ts = \"Framed-AppleTalk-Zone\"\n\tcase RADIUSAttributeTypeAcctStatusType:\n\t\ts = \"Acct-Status-Type\"\n\tcase RADIUSAttributeTypeAcctDelayTime:\n\t\ts = \"Acct-Delay-Time\"\n\tcase RADIUSAttributeTypeAcctInputOctets:\n\t\ts = \"Acct-Input-Octets\"\n\tcase RADIUSAttributeTypeAcctOutputOctets:\n\t\ts = \"Acct-Output-Octets\"\n\tcase RADIUSAttributeTypeAcctSessionId:\n\t\ts = \"Acct-Session-Id\"\n\tcase RADIUSAttributeTypeAcctAuthentic:\n\t\ts = \"Acct-Authentic\"\n\tcase RADIUSAttributeTypeAcctSessionTime:\n\t\ts = \"Acct-Session-Time\"\n\tcase RADIUSAttributeTypeAcctInputPackets:\n\t\ts = \"Acct-Input-Packets\"\n\tcase RADIUSAttributeTypeAcctOutputPackets:\n\t\ts = \"Acct-Output-Packets\"\n\tcase RADIUSAttributeTypeAcctTerminateCause:\n\t\ts = \"Acct-Terminate-Cause\"\n\tcase RADIUSAttributeTypeAcctMultiSessionId:\n\t\ts = \"Acct-Multi-Session-Id\"\n\tcase RADIUSAttributeTypeAcctLinkCount:\n\t\ts = \"Acct-Link-Count\"\n\tcase RADIUSAttributeTypeAcctInputGigawords:\n\t\ts = \"Acct-Input-Gigawords\"\n\tcase RADIUSAttributeTypeAcctOutputGigawords:\n\t\ts = \"Acct-Output-Gigawords\"\n\tcase RADIUSAttributeTypeEventTimestamp:\n\t\ts = \"Event-Timestamp\"\n\tcase RADIUSAttributeTypeCHAPChallenge:\n\t\ts = \"CHAP-Challenge\"\n\tcase RADIUSAttributeTypeNASPortType:\n\t\ts = \"NAS-Port-Type\"\n\tcase RADIUSAttributeTypePortLimit:\n\t\ts = \"Port-Limit\"\n\tcase RADIUSAttributeTypeLoginLATPort:\n\t\ts = \"Login-LAT-Port\"\n\tcase RADIUSAttributeTypeTunnelType:\n\t\ts = \"Tunnel-Type\"\n\tcase RADIUSAttributeTypeTunnelMediumType:\n\t\ts = \"Tunnel-Medium-Type\"\n\tcase RADIUSAttributeTypeTunnelClientEndpoint:\n\t\ts = \"Tunnel-Client-Endpoint\"\n\tcase RADIUSAttributeTypeTunnelServerEndpoint:\n\t\ts = \"Tunnel-Server-Endpoint\"\n\tcase RADIUSAttributeTypeAcctTunnelConnection:\n\t\ts = \"Acct-Tunnel-Connection\"\n\tcase RADIUSAttributeTypeTunnelPassword:\n\t\ts = \"Tunnel-Password\"\n\tcase RADIUSAttributeTypeARAPPassword:\n\t\ts = \"ARAP-Password\"\n\tcase RADIUSAttributeTypeARAPFeatures:\n\t\ts = \"ARAP-Features\"\n\tcase RADIUSAttributeTypeARAPZoneAccess:\n\t\ts = \"ARAP-Zone-Access\"\n\tcase RADIUSAttributeTypeARAPSecurity:\n\t\ts = \"ARAP-Security\"\n\tcase RADIUSAttributeTypeARAPSecurityData:\n\t\ts = \"ARAP-Security-Data\"\n\tcase RADIUSAttributeTypePasswordRetry:\n\t\ts = \"Password-Retry\"\n\tcase RADIUSAttributeTypePrompt:\n\t\ts = \"Prompt\"\n\tcase RADIUSAttributeTypeConnectInfo:\n\t\ts = \"Connect-Info\"\n\tcase RADIUSAttributeTypeConfigurationToken:\n\t\ts = \"Configuration-Token\"\n\tcase RADIUSAttributeTypeEAPMessage:\n\t\ts = \"EAP-Message\"\n\tcase RADIUSAttributeTypeMessageAuthenticator:\n\t\ts = \"Message-Authenticator\"\n\tcase RADIUSAttributeTypeTunnelPrivateGroupID:\n\t\ts = \"Tunnel-Private-Group-ID\"\n\tcase RADIUSAttributeTypeTunnelAssignmentID:\n\t\ts = \"Tunnel-Assignment-ID\"\n\tcase RADIUSAttributeTypeTunnelPreference:\n\t\ts = \"Tunnel-Preference\"\n\tcase RADIUSAttributeTypeARAPChallengeResponse:\n\t\ts = \"ARAP-Challenge-Response\"\n\tcase RADIUSAttributeTypeAcctInterimInterval:\n\t\ts = \"Acct-Interim-Interval\"\n\tcase RADIUSAttributeTypeAcctTunnelPacketsLost:\n\t\ts = \"Acct-Tunnel-Packets-Lost\"\n\tcase RADIUSAttributeTypeNASPortId:\n\t\ts = \"NAS-Port-Id\"\n\tcase RADIUSAttributeTypeFramedPool:\n\t\ts = \"Framed-Pool\"\n\tcase RADIUSAttributeTypeTunnelClientAuthID:\n\t\ts = \"Tunnel-Client-Auth-ID\"\n\tcase RADIUSAttributeTypeTunnelServerAuthID:\n\t\ts = \"Tunnel-Server-Auth-ID\"\n\tdefault:\n\t\ts = fmt.Sprintf(\"Unknown(%d)\", t)\n\t}\n\treturn\n}\n\n// Len returns the length of a RADIUS packet.\nfunc (radius *RADIUS) Len() (int, error) {\n\tn := radiusMinimumRecordSizeInBytes\n\tfor _, v := range radius.Attributes {\n\t\talen, err := attributeValueLength(v.Value)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tn += int(alen) + 2 // Added Type and Length\n\t}\n\treturn n, nil\n}\n\n// LayerType returns LayerTypeRADIUS.\nfunc (radius *RADIUS) LayerType() gopacket.LayerType {\n\treturn LayerTypeRADIUS\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (radius *RADIUS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) > radiusMaximumRecordSizeInBytes {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"RADIUS length %d too big\", len(data))\n\t}\n\n\tif len(data) < radiusMinimumRecordSizeInBytes {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"RADIUS length %d too short\", len(data))\n\t}\n\n\tradius.BaseLayer = BaseLayer{Contents: data}\n\n\tradius.Code = RADIUSCode(data[0])\n\tradius.Identifier = RADIUSIdentifier(data[1])\n\tradius.Length = RADIUSLength(binary.BigEndian.Uint16(data[2:4]))\n\n\tif int(radius.Length) > radiusMaximumRecordSizeInBytes {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"RADIUS length %d too big\", radius.Length)\n\t}\n\n\tif int(radius.Length) < radiusMinimumRecordSizeInBytes {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"RADIUS length %d too short\", radius.Length)\n\t}\n\n\t// RFC 2865 3.  Packet Format\n\t// `If the packet is shorter than the Length field indicates, it MUST be silently discarded.`\n\tif int(radius.Length) > len(data) {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"RADIUS length %d too big\", radius.Length)\n\t}\n\n\t// RFC 2865 3.  Packet Format\n\t// `Octets outside the range of the Length field MUST be treated as padding and ignored on reception.`\n\tif int(radius.Length) < len(data) {\n\t\tdf.SetTruncated()\n\t\tdata = data[:radius.Length]\n\t}\n\n\tcopy(radius.Authenticator[:], data[4:20])\n\n\tif len(data) == radiusMinimumRecordSizeInBytes {\n\t\treturn nil\n\t}\n\n\tpos := radiusMinimumRecordSizeInBytes\n\tfor {\n\t\tif len(data) == pos {\n\t\t\tbreak\n\t\t}\n\n\t\tif len(data[pos:]) < radiusAttributesMinimumRecordSizeInBytes {\n\t\t\tdf.SetTruncated()\n\t\t\treturn fmt.Errorf(\"RADIUS attributes length %d too short\", len(data[pos:]))\n\t\t}\n\n\t\tattr := RADIUSAttribute{}\n\t\tattr.Type = RADIUSAttributeType(data[pos])\n\t\tattr.Length = RADIUSAttributeLength(data[pos+1])\n\n\t\tif int(attr.Length) > len(data[pos:]) {\n\t\t\tdf.SetTruncated()\n\t\t\treturn fmt.Errorf(\"RADIUS attributes length %d too big\", attr.Length)\n\t\t}\n\n\t\tif int(attr.Length) < radiusAttributesMinimumRecordSizeInBytes {\n\t\t\tdf.SetTruncated()\n\t\t\treturn fmt.Errorf(\"RADIUS attributes length %d too short\", attr.Length)\n\t\t}\n\n\t\tif int(attr.Length) > radiusAttributesMinimumRecordSizeInBytes {\n\t\t\tattr.Value = make([]byte, attr.Length-2)\n\t\t\tcopy(attr.Value[:], data[pos+2:pos+int(attr.Length)])\n\t\t\tradius.Attributes = append(radius.Attributes, attr)\n\t\t}\n\n\t\tpos += int(attr.Length)\n\t}\n\n\tfor _, v := range radius.Attributes {\n\t\tif v.Type == RADIUSAttributeTypeEAPMessage {\n\t\t\tradius.BaseLayer.Payload = append(radius.BaseLayer.Payload, v.Value...)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (radius *RADIUS) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tplen, err := radius.Len()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif opts.FixLengths {\n\t\tradius.Length = RADIUSLength(plen)\n\t}\n\n\tdata, err := b.PrependBytes(plen)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdata[0] = byte(radius.Code)\n\tdata[1] = byte(radius.Identifier)\n\tbinary.BigEndian.PutUint16(data[2:], uint16(radius.Length))\n\tcopy(data[4:20], radius.Authenticator[:])\n\n\tpos := radiusMinimumRecordSizeInBytes\n\tfor _, v := range radius.Attributes {\n\t\tif opts.FixLengths {\n\t\t\tv.Length, err = attributeValueLength(v.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tdata[pos] = byte(v.Type)\n\t\tdata[pos+1] = byte(v.Length)\n\t\tcopy(data[pos+2:], v.Value[:])\n\n\t\tpos += len(v.Value) + 2 // Added Type and Length\n\t}\n\n\treturn nil\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (radius *RADIUS) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeRADIUS\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (radius *RADIUS) NextLayerType() gopacket.LayerType {\n\tif len(radius.BaseLayer.Payload) > 0 {\n\t\treturn LayerTypeEAP\n\t} else {\n\t\treturn gopacket.LayerTypeZero\n\t}\n}\n\n// Payload returns the EAP Type-Data for EAP-Message attributes.\nfunc (radius *RADIUS) Payload() []byte {\n\treturn radius.BaseLayer.Payload\n}\n\nfunc decodeRADIUS(data []byte, p gopacket.PacketBuilder) error {\n\tradius := &RADIUS{}\n\terr := radius.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(radius)\n\tp.SetApplicationLayer(radius)\n\tnext := radius.NextLayerType()\n\tif next == gopacket.LayerTypeZero {\n\t\treturn nil\n\t}\n\treturn p.NextDecoder(next)\n}\n\nfunc attributeValueLength(v []byte) (RADIUSAttributeLength, error) {\n\tn := len(v)\n\tif n > 255 {\n\t\treturn 0, fmt.Errorf(\"RADIUS attribute value length %d too long\", n)\n\t} else {\n\t\treturn RADIUSAttributeLength(n), nil\n\t}\n}\n"
  },
  {
    "path": "layers/radius_test.go",
    "content": "// Copyright 2020 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license that can be found\n// in the LICENSE file in the root of the source tree.\n\npackage layers\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc checkRADIUS(desc string, t *testing.T, packetBytes []byte, pExpectedRADIUS *RADIUS) {\n\t// Analyse the packet bytes, yielding a new packet object p.\n\tp := gopacket.NewPacket(packetBytes, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Errorf(\"Failed to decode packet %s: %v\", desc, p.ErrorLayer().Error())\n\t}\n\n\t// Ensure that the packet analysis yielded the correct set of layers:\n\t//    Link Layer        = Ethernet.\n\t//    Network Layer     = IPv4.\n\t//    Transport Layer   = UDP.\n\t//    Application Layer = RADIUS.\n\tcheckLayers(p, []gopacket.LayerType{\n\t\tLayerTypeEthernet,\n\t\tLayerTypeIPv4,\n\t\tLayerTypeUDP,\n\t\tLayerTypeRADIUS,\n\t}, t)\n\n\t// Select the Application (RADIUS) layer.\n\tpResultRADIUS, ok := p.ApplicationLayer().(*RADIUS)\n\tif !ok {\n\t\tt.Error(\"No RADIUS layer type found in packet in \" + desc + \".\")\n\t}\n\n\t// Compare the generated RADIUS object with the expected RADIUS object.\n\tif !reflect.DeepEqual(pResultRADIUS, pExpectedRADIUS) {\n\t\tt.Errorf(\"RADIUS packet processing failed for packet \"+desc+\n\t\t\t\":\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", pResultRADIUS, pExpectedRADIUS)\n\t}\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{}\n\terr := pResultRADIUS.SerializeTo(buf, opts)\n\tif err != nil {\n\t\tt.Error(err)\n\t}\n\tif !reflect.DeepEqual(pResultRADIUS.BaseLayer.Contents, buf.Bytes()) {\n\t\tt.Errorf(\"RADIUS packet serialization failed for packet \"+desc+\n\t\t\t\":\\ngot  :\\n%x\\n\\nwant :\\n%x\\n\\n\", buf.Bytes(), packetBytes)\n\t}\n}\n\nfunc faliedRADIUS(t *testing.T, desc string, data *RADIUS) {\n\tt.Run(desc, func(t *testing.T) {\n\t\tbuf := gopacket.NewSerializeBuffer()\n\t\topts := gopacket.SerializeOptions{}\n\t\tif err := data.SerializeTo(buf, opts); err != nil {\n\t\t\tt.Error(err)\n\t\t}\n\n\t\tp := gopacket.NewPacket(buf.Bytes(), LayerTypeRADIUS, gopacket.Default)\n\t\tif p.ErrorLayer() == nil {\n\t\t\tt.Errorf(\"No Error layer type found in packet in %s.\\n\", desc)\n\t\t}\n\t})\n}\n\nfunc TestRADIUSCode(t *testing.T) {\n\ttests := []struct {\n\t\tname string\n\t\tcode RADIUSCode\n\t}{\n\t\t{name: \"Unknown(0)\", code: RADIUSCode(0)},\n\t\t{name: \"Access-Request\", code: RADIUSCodeAccessRequest},\n\t\t{name: \"Access-Accept\", code: RADIUSCodeAccessAccept},\n\t\t{name: \"Access-Reject\", code: RADIUSCodeAccessReject},\n\t\t{name: \"Accounting-Request\", code: RADIUSCodeAccountingRequest},\n\t\t{name: \"Accounting-Response\", code: RADIUSCodeAccountingResponse},\n\t\t{name: \"Access-Challenge\", code: RADIUSCodeAccessChallenge},\n\t\t{name: \"Status-Server\", code: RADIUSCodeStatusServer},\n\t\t{name: \"Status-Client\", code: RADIUSCodeStatusClient},\n\t\t{name: \"Reserved\", code: RADIUSCodeReserved},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tif tt.name != tt.code.String() {\n\t\t\t\tt.Errorf(\"Failed to convert constrant value to string: %d\\n\", tt.code)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestRADIUSAttributeType(t *testing.T) {\n\ttests := []struct {\n\t\tname string\n\t\tcode RADIUSAttributeType\n\t}{\n\t\t{name: \"Unknown(0)\", code: RADIUSAttributeType(0)},\n\t\t{name: \"User-Name\", code: RADIUSAttributeTypeUserName},\n\t\t{name: \"User-Password\", code: RADIUSAttributeTypeUserPassword},\n\t\t{name: \"CHAP-Password\", code: RADIUSAttributeTypeCHAPPassword},\n\t\t{name: \"NAS-IP-Address\", code: RADIUSAttributeTypeNASIPAddress},\n\t\t{name: \"NAS-Port\", code: RADIUSAttributeTypeNASPort},\n\t\t{name: \"Service-Type\", code: RADIUSAttributeTypeServiceType},\n\t\t{name: \"Framed-Protocol\", code: RADIUSAttributeTypeFramedProtocol},\n\t\t{name: \"Framed-IP-Address\", code: RADIUSAttributeTypeFramedIPAddress},\n\t\t{name: \"Framed-IP-Netmask\", code: RADIUSAttributeTypeFramedIPNetmask},\n\t\t{name: \"Framed-Routing\", code: RADIUSAttributeTypeFramedRouting},\n\t\t{name: \"Filter-Id\", code: RADIUSAttributeTypeFilterId},\n\t\t{name: \"Framed-MTU\", code: RADIUSAttributeTypeFramedMTU},\n\t\t{name: \"Framed-Compression\", code: RADIUSAttributeTypeFramedCompression},\n\t\t{name: \"Login-IP-Host\", code: RADIUSAttributeTypeLoginIPHost},\n\t\t{name: \"Login-Service\", code: RADIUSAttributeTypeLoginService},\n\t\t{name: \"Login-TCP-Port\", code: RADIUSAttributeTypeLoginTCPPort},\n\t\t{name: \"Reply-Message\", code: RADIUSAttributeTypeReplyMessage},\n\t\t{name: \"Callback-Number\", code: RADIUSAttributeTypeCallbackNumber},\n\t\t{name: \"Callback-Id\", code: RADIUSAttributeTypeCallbackId},\n\t\t{name: \"Framed-Route\", code: RADIUSAttributeTypeFramedRoute},\n\t\t{name: \"Framed-IPX-Network\", code: RADIUSAttributeTypeFramedIPXNetwork},\n\t\t{name: \"State\", code: RADIUSAttributeTypeState},\n\t\t{name: \"Class\", code: RADIUSAttributeTypeClass},\n\t\t{name: \"Vendor-Specific\", code: RADIUSAttributeTypeVendorSpecific},\n\t\t{name: \"Session-Timeout\", code: RADIUSAttributeTypeSessionTimeout},\n\t\t{name: \"Idle-Timeout\", code: RADIUSAttributeTypeIdleTimeout},\n\t\t{name: \"Termination-Action\", code: RADIUSAttributeTypeTerminationAction},\n\t\t{name: \"Called-Station-Id\", code: RADIUSAttributeTypeCalledStationId},\n\t\t{name: \"Calling-Station-Id\", code: RADIUSAttributeTypeCallingStationId},\n\t\t{name: \"NAS-Identifier\", code: RADIUSAttributeTypeNASIdentifier},\n\t\t{name: \"Proxy-State\", code: RADIUSAttributeTypeProxyState},\n\t\t{name: \"Login-LAT-Service\", code: RADIUSAttributeTypeLoginLATService},\n\t\t{name: \"Login-LAT-Node\", code: RADIUSAttributeTypeLoginLATNode},\n\t\t{name: \"Login-LAT-Group\", code: RADIUSAttributeTypeLoginLATGroup},\n\t\t{name: \"Framed-AppleTalk-Link\", code: RADIUSAttributeTypeFramedAppleTalkLink},\n\t\t{name: \"Framed-AppleTalk-Network\", code: RADIUSAttributeTypeFramedAppleTalkNetwork},\n\t\t{name: \"Framed-AppleTalk-Zone\", code: RADIUSAttributeTypeFramedAppleTalkZone},\n\t\t{name: \"Acct-Status-Type\", code: RADIUSAttributeTypeAcctStatusType},\n\t\t{name: \"Acct-Delay-Time\", code: RADIUSAttributeTypeAcctDelayTime},\n\t\t{name: \"Acct-Input-Octets\", code: RADIUSAttributeTypeAcctInputOctets},\n\t\t{name: \"Acct-Output-Octets\", code: RADIUSAttributeTypeAcctOutputOctets},\n\t\t{name: \"Acct-Session-Id\", code: RADIUSAttributeTypeAcctSessionId},\n\t\t{name: \"Acct-Authentic\", code: RADIUSAttributeTypeAcctAuthentic},\n\t\t{name: \"Acct-Session-Time\", code: RADIUSAttributeTypeAcctSessionTime},\n\t\t{name: \"Acct-Input-Packets\", code: RADIUSAttributeTypeAcctInputPackets},\n\t\t{name: \"Acct-Output-Packets\", code: RADIUSAttributeTypeAcctOutputPackets},\n\t\t{name: \"Acct-Terminate-Cause\", code: RADIUSAttributeTypeAcctTerminateCause},\n\t\t{name: \"Acct-Multi-Session-Id\", code: RADIUSAttributeTypeAcctMultiSessionId},\n\t\t{name: \"Acct-Link-Count\", code: RADIUSAttributeTypeAcctLinkCount},\n\t\t{name: \"Acct-Input-Gigawords\", code: RADIUSAttributeTypeAcctInputGigawords},\n\t\t{name: \"Acct-Output-Gigawords\", code: RADIUSAttributeTypeAcctOutputGigawords},\n\t\t{name: \"Event-Timestamp\", code: RADIUSAttributeTypeEventTimestamp},\n\t\t{name: \"CHAP-Challenge\", code: RADIUSAttributeTypeCHAPChallenge},\n\t\t{name: \"NAS-Port-Type\", code: RADIUSAttributeTypeNASPortType},\n\t\t{name: \"Port-Limit\", code: RADIUSAttributeTypePortLimit},\n\t\t{name: \"Login-LAT-Port\", code: RADIUSAttributeTypeLoginLATPort},\n\t\t{name: \"Tunnel-Type\", code: RADIUSAttributeTypeTunnelType},\n\t\t{name: \"Tunnel-Medium-Type\", code: RADIUSAttributeTypeTunnelMediumType},\n\t\t{name: \"Tunnel-Client-Endpoint\", code: RADIUSAttributeTypeTunnelClientEndpoint},\n\t\t{name: \"Tunnel-Server-Endpoint\", code: RADIUSAttributeTypeTunnelServerEndpoint},\n\t\t{name: \"Acct-Tunnel-Connection\", code: RADIUSAttributeTypeAcctTunnelConnection},\n\t\t{name: \"Tunnel-Password\", code: RADIUSAttributeTypeTunnelPassword},\n\t\t{name: \"ARAP-Password\", code: RADIUSAttributeTypeARAPPassword},\n\t\t{name: \"ARAP-Features\", code: RADIUSAttributeTypeARAPFeatures},\n\t\t{name: \"ARAP-Zone-Access\", code: RADIUSAttributeTypeARAPZoneAccess},\n\t\t{name: \"ARAP-Security\", code: RADIUSAttributeTypeARAPSecurity},\n\t\t{name: \"ARAP-Security-Data\", code: RADIUSAttributeTypeARAPSecurityData},\n\t\t{name: \"Password-Retry\", code: RADIUSAttributeTypePasswordRetry},\n\t\t{name: \"Prompt\", code: RADIUSAttributeTypePrompt},\n\t\t{name: \"Connect-Info\", code: RADIUSAttributeTypeConnectInfo},\n\t\t{name: \"Configuration-Token\", code: RADIUSAttributeTypeConfigurationToken},\n\t\t{name: \"EAP-Message\", code: RADIUSAttributeTypeEAPMessage},\n\t\t{name: \"Message-Authenticator\", code: RADIUSAttributeTypeMessageAuthenticator},\n\t\t{name: \"Tunnel-Private-Group-ID\", code: RADIUSAttributeTypeTunnelPrivateGroupID},\n\t\t{name: \"Tunnel-Assignment-ID\", code: RADIUSAttributeTypeTunnelAssignmentID},\n\t\t{name: \"Tunnel-Preference\", code: RADIUSAttributeTypeTunnelPreference},\n\t\t{name: \"ARAP-Challenge-Response\", code: RADIUSAttributeTypeARAPChallengeResponse},\n\t\t{name: \"Acct-Interim-Interval\", code: RADIUSAttributeTypeAcctInterimInterval},\n\t\t{name: \"Acct-Tunnel-Packets-Lost\", code: RADIUSAttributeTypeAcctTunnelPacketsLost},\n\t\t{name: \"NAS-Port-Id\", code: RADIUSAttributeTypeNASPortId},\n\t\t{name: \"Framed-Pool\", code: RADIUSAttributeTypeFramedPool},\n\t\t{name: \"Tunnel-Client-Auth-ID\", code: RADIUSAttributeTypeTunnelClientAuthID},\n\t\t{name: \"Tunnel-Server-Auth-ID\", code: RADIUSAttributeTypeTunnelServerAuthID},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tif tt.name != tt.code.String() {\n\t\t\t\tt.Errorf(\"Failed to convert constrant value to string: %d\\n\", tt.code)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestRADIUSRecordSize(t *testing.T) {\n\ttests := []struct {\n\t\tname string\n\t\tsize int\n\t}{\n\t\t{name: \"Minimum-1\", size: radiusMinimumRecordSizeInBytes - 1},\n\t\t{name: \"Maximum+1\", size: radiusMaximumRecordSizeInBytes + 1},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tvar testPacketRADIUS = make([]byte, tt.size)\n\t\t\tp := gopacket.NewPacket(testPacketRADIUS, LayerTypeRADIUS, gopacket.Default)\n\t\t\tif p.ErrorLayer() == nil {\n\t\t\t\tt.Errorf(\"No Error layer type found in packet in %s.\\n\", tt.name)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestRADIUSLengthField(t *testing.T) {\n\ttests := []struct {\n\t\tname string\n\t\tdata *RADIUS\n\t}{\n\t\t{\n\t\t\tname: \"Minimum-1\",\n\t\t\tdata: &RADIUS{\n\t\t\t\tLength: RADIUSLength(radiusMinimumRecordSizeInBytes - 1),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"Minimum+1\",\n\t\t\tdata: &RADIUS{\n\t\t\t\tLength: RADIUSLength(radiusMinimumRecordSizeInBytes + 1),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"Maximum-1\",\n\t\t\tdata: &RADIUS{\n\t\t\t\tLength: RADIUSLength(radiusMaximumRecordSizeInBytes - 1),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"Maximum+1\",\n\t\t\tdata: &RADIUS{\n\t\t\t\tLength: RADIUSLength(radiusMaximumRecordSizeInBytes + 1),\n\t\t\t},\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tfaliedRADIUS(t, tt.name, tt.data)\n\t}\n}\n\nfunc TestRADIUSAttributesLengthField(t *testing.T) {\n\ttests := []struct {\n\t\tname string\n\t\tdata *RADIUS\n\t}{\n\t\t{\n\t\t\tname: \"Minimum-1\",\n\t\t\tdata: &RADIUS{\n\t\t\t\tLength: RADIUSLength(radiusMinimumRecordSizeInBytes + radiusAttributesMinimumRecordSizeInBytes),\n\t\t\t\tAttributes: []RADIUSAttribute{\n\t\t\t\t\t{\n\t\t\t\t\t\tLength: RADIUSAttributeLength(radiusAttributesMinimumRecordSizeInBytes - 1),\n\t\t\t\t\t\tValue:  make([]byte, 1),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"Minimum-1\",\n\t\t\tdata: &RADIUS{\n\t\t\t\tLength: RADIUSLength(radiusMinimumRecordSizeInBytes + radiusAttributesMinimumRecordSizeInBytes - 1),\n\t\t\t\tAttributes: []RADIUSAttribute{\n\t\t\t\t\t{\n\t\t\t\t\t\tLength: RADIUSAttributeLength(radiusAttributesMinimumRecordSizeInBytes),\n\t\t\t\t\t\tValue:  make([]byte, 1),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"Minimum+1\",\n\t\t\tdata: &RADIUS{\n\t\t\t\tLength: RADIUSLength(radiusMinimumRecordSizeInBytes + radiusAttributesMinimumRecordSizeInBytes),\n\t\t\t\tAttributes: []RADIUSAttribute{\n\t\t\t\t\t{\n\t\t\t\t\t\tLength: RADIUSAttributeLength(radiusAttributesMinimumRecordSizeInBytes + 1),\n\t\t\t\t\t\tValue:  make([]byte, 1),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"Minimum+1\",\n\t\t\tdata: &RADIUS{\n\t\t\t\tLength: RADIUSLength(radiusMinimumRecordSizeInBytes + radiusAttributesMinimumRecordSizeInBytes + 1),\n\t\t\t\tAttributes: []RADIUSAttribute{\n\t\t\t\t\t{\n\t\t\t\t\t\tLength: RADIUSAttributeLength(radiusAttributesMinimumRecordSizeInBytes),\n\t\t\t\t\t\tValue:  make([]byte, 1),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tfaliedRADIUS(t, tt.name, tt.data)\n\t}\n}\n\nfunc TestRADIUSAccessRequest(t *testing.T) {\n\t// This test packet is the first RADIUS packet in the RADIUS sample capture\n\t// pcap file radtest.pcap on the Wireshark sample captures page:\n\t//\n\t//    https://github.com/egxp/docker-compose-test-radius\n\tvar testPacketRADIUS = []byte{\n\t\t0x02, 0x42, 0xac, 0x14, 0x00, 0x02, 0x02, 0x42, 0x06, 0x4d, 0xad, 0xbf, 0x08, 0x00, 0x45, 0x00,\n\t\t0x00, 0x67, 0xee, 0xea, 0x40, 0x00, 0x40, 0x11, 0xf3, 0x6f, 0xac, 0x14, 0x00, 0x01, 0xac, 0x14,\n\t\t0x00, 0x02, 0xd8, 0x29, 0x07, 0x14, 0x00, 0x53, 0x58, 0x90, 0x01, 0x8d, 0x00, 0x4b, 0x3b, 0xbd,\n\t\t0x22, 0x52, 0xb4, 0xc8, 0xd8, 0x44, 0x1b, 0x46, 0x79, 0xbf, 0x4a, 0x2b, 0x86, 0x01, 0x01, 0x07,\n\t\t0x41, 0x64, 0x6d, 0x69, 0x6e, 0x02, 0x12, 0x4d, 0x2f, 0x62, 0x0b, 0x33, 0x9d, 0x6d, 0x1f, 0xe0,\n\t\t0xe4, 0x6d, 0x1f, 0x9b, 0xda, 0xff, 0xf0, 0x04, 0x06, 0x7f, 0x00, 0x01, 0x01, 0x05, 0x06, 0x00,\n\t\t0x00, 0x00, 0x00, 0x50, 0x12, 0x41, 0x73, 0xed, 0x26, 0xd3, 0xb3, 0xa9, 0x64, 0xff, 0x4d, 0xc3,\n\t\t0x0d, 0x94, 0x33, 0xe8, 0x2a,\n\t}\n\n\t// Assemble the RADIUS object that we expect to emerge from this test.\n\tpExpectedRADIUS := &RADIUS{\n\t\tBaseLayer: BaseLayer{\n\t\t\tContents: []byte{\n\t\t\t\t0x01, 0x8d, 0x00, 0x4b, 0x3b, 0xbd, 0x22, 0x52, 0xb4, 0xc8, 0xd8, 0x44, 0x1b, 0x46, 0x79, 0xbf,\n\t\t\t\t0x4a, 0x2b, 0x86, 0x01, 0x01, 0x07, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x02, 0x12, 0x4d, 0x2f, 0x62,\n\t\t\t\t0x0b, 0x33, 0x9d, 0x6d, 0x1f, 0xe0, 0xe4, 0x6d, 0x1f, 0x9b, 0xda, 0xff, 0xf0, 0x04, 0x06, 0x7f,\n\t\t\t\t0x00, 0x01, 0x01, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x50, 0x12, 0x41, 0x73, 0xed, 0x26, 0xd3,\n\t\t\t\t0xb3, 0xa9, 0x64, 0xff, 0x4d, 0xc3, 0x0d, 0x94, 0x33, 0xe8, 0x2a,\n\t\t\t},\n\t\t\tPayload: nil,\n\t\t},\n\t\tCode:       RADIUSCodeAccessRequest,\n\t\tIdentifier: RADIUSIdentifier(0x8d),\n\t\tLength:     RADIUSLength(0x004b),\n\t\tAuthenticator: RADIUSAuthenticator([16]byte{\n\t\t\t0x3b, 0xbd, 0x22, 0x52, 0xb4, 0xc8, 0xd8, 0x44, 0x1b, 0x46, 0x79, 0xbf, 0x4a, 0x2b, 0x86, 0x01,\n\t\t}),\n\t\tAttributes: []RADIUSAttribute{\n\t\t\t{\n\t\t\t\tType:   RADIUSAttributeTypeUserName,\n\t\t\t\tLength: RADIUSAttributeLength(0x07),\n\t\t\t\tValue:  RADIUSAttributeValue(\"Admin\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tType:   RADIUSAttributeTypeUserPassword,\n\t\t\t\tLength: RADIUSAttributeLength(0x12),\n\t\t\t\tValue:  RADIUSAttributeValue(\"\\x4d\\x2f\\x62\\x0b\\x33\\x9d\\x6d\\x1f\\xe0\\xe4\\x6d\\x1f\\x9b\\xda\\xff\\xf0\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tType:   RADIUSAttributeTypeNASIPAddress,\n\t\t\t\tLength: RADIUSAttributeLength(0x06),\n\t\t\t\tValue:  RADIUSAttributeValue(\"\\x7f\\x00\\x01\\x01\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tType:   RADIUSAttributeTypeNASPort,\n\t\t\t\tLength: RADIUSAttributeLength(0x06),\n\t\t\t\tValue:  RADIUSAttributeValue(\"\\x00\\x00\\x00\\x00\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tType:   RADIUSAttributeTypeMessageAuthenticator,\n\t\t\t\tLength: RADIUSAttributeLength(0x12),\n\t\t\t\tValue:  RADIUSAttributeValue(\"\\x41\\x73\\xed\\x26\\xd3\\xb3\\xa9\\x64\\xff\\x4d\\xc3\\x0d\\x94\\x33\\xe8\\x2a\"),\n\t\t\t},\n\t\t},\n\t}\n\n\tcheckRADIUS(\"AccessRequest\", t, testPacketRADIUS, pExpectedRADIUS)\n}\n\nfunc TestRADIUSAccessAccept(t *testing.T) {\n\t// This test packet is the first RADIUS packet in the RADIUS sample capture\n\t// pcap file radtest.pcap on the Wireshark sample captures page:\n\t//\n\t//    https://github.com/egxp/docker-compose-test-radius\n\tvar testPacketRADIUS = []byte{\n\t\t0x02, 0x42, 0x06, 0x4d, 0xad, 0xbf, 0x02, 0x42, 0xac, 0x14, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00,\n\t\t0x00, 0x30, 0xee, 0xfd, 0x00, 0x00, 0x40, 0x11, 0x33, 0x94, 0xac, 0x14, 0x00, 0x02, 0xac, 0x14,\n\t\t0x00, 0x01, 0x07, 0x14, 0xd8, 0x29, 0x00, 0x1c, 0x58, 0x59, 0x02, 0x8d, 0x00, 0x14, 0x86, 0xa8,\n\t\t0xd5, 0xcd, 0x69, 0x3c, 0x07, 0x5e, 0x9e, 0x18, 0xa2, 0x2d, 0xdd, 0x5f, 0x2b, 0xff,\n\t}\n\n\t// Assemble the RADIUS object that we expect to emerge from this test.\n\tpExpectedRADIUS := &RADIUS{\n\t\tBaseLayer: BaseLayer{\n\t\t\tContents: []byte{\n\t\t\t\t0x02, 0x8d, 0x00, 0x14, 0x86, 0xa8, 0xd5, 0xcd, 0x69, 0x3c, 0x07, 0x5e, 0x9e, 0x18, 0xa2, 0x2d,\n\t\t\t\t0xdd, 0x5f, 0x2b, 0xff,\n\t\t\t},\n\t\t\tPayload: nil,\n\t\t},\n\t\tCode:       RADIUSCodeAccessAccept,\n\t\tIdentifier: RADIUSIdentifier(0x8d),\n\t\tLength:     RADIUSLength(0x0014),\n\t\tAuthenticator: RADIUSAuthenticator([16]byte{\n\t\t\t0x86, 0xa8, 0xd5, 0xcd, 0x69, 0x3c, 0x07, 0x5e, 0x9e, 0x18, 0xa2, 0x2d, 0xdd, 0x5f, 0x2b, 0xff,\n\t\t}),\n\t}\n\n\tcheckRADIUS(\"AccessAccept\", t, testPacketRADIUS, pExpectedRADIUS)\n}\n"
  },
  {
    "path": "layers/rmcp.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license that can be found\n// in the LICENSE file in the root of the source tree.\n\npackage layers\n\n// This file implements the ASF-RMCP header specified in section 3.2.2.2 of\n// https://www.dmtf.org/sites/default/files/standards/documents/DSP0136.pdf\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// RMCPClass is the class of a RMCP layer's payload, e.g. ASF or IPMI. This is a\n// 4-bit unsigned int on the wire; all but 6 (ASF), 7 (IPMI) and 8 (OEM-defined)\n// are currently reserved.\ntype RMCPClass uint8\n\n// LayerType returns the payload layer type corresponding to a RMCP class.\nfunc (c RMCPClass) LayerType() gopacket.LayerType {\n\tif lt := rmcpClassLayerTypes[uint8(c)]; lt != 0 {\n\t\treturn lt\n\t}\n\treturn gopacket.LayerTypePayload\n}\n\nfunc (c RMCPClass) String() string {\n\treturn fmt.Sprintf(\"%v(%v)\", uint8(c), c.LayerType())\n}\n\nconst (\n\t// RMCPVersion1 identifies RMCP v1.0 in the Version header field. Lower\n\t// values are considered legacy, while higher values are reserved by the\n\t// specification.\n\tRMCPVersion1 uint8 = 0x06\n\n\t// RMCPNormal indicates a \"normal\" message, i.e. not an acknowledgement.\n\tRMCPNormal uint8 = 0\n\n\t// RMCPAck indicates a message is acknowledging a received normal message.\n\tRMCPAck uint8 = 1 << 7\n\n\t// RMCPClassASF identifies an RMCP message as containing an ASF-RMCP\n\t// payload.\n\tRMCPClassASF RMCPClass = 0x06\n\n\t// RMCPClassIPMI identifies an RMCP message as containing an IPMI payload.\n\tRMCPClassIPMI RMCPClass = 0x07\n\n\t// RMCPClassOEM identifies an RMCP message as containing an OEM-defined\n\t// payload.\n\tRMCPClassOEM RMCPClass = 0x08\n)\n\nvar (\n\trmcpClassLayerTypes = [16]gopacket.LayerType{\n\t\tRMCPClassASF: LayerTypeASF,\n\t\t// RMCPClassIPMI is to implement; RMCPClassOEM is deliberately not\n\t\t// implemented, so we return LayerTypePayload\n\t}\n)\n\n// RegisterRMCPLayerType allows specifying that the payload of a RMCP packet of\n// a certain class should processed by the provided layer type. This overrides\n// any existing registrations, including defaults.\nfunc RegisterRMCPLayerType(c RMCPClass, l gopacket.LayerType) {\n\trmcpClassLayerTypes[c] = l\n}\n\n// RMCP describes the format of an RMCP header, which forms a UDP payload. See\n// section 3.2.2.2.\ntype RMCP struct {\n\tBaseLayer\n\n\t// Version identifies the version of the RMCP header. 0x06 indicates RMCP\n\t// v1.0; lower values are legacy, higher values are reserved.\n\tVersion uint8\n\n\t// Sequence is the sequence number assicated with the message. Note that\n\t// this rolls over to 0 after 254, not 255. Seq num 255 indicates the\n\t// receiver must not send an ACK.\n\tSequence uint8\n\n\t// Ack indicates whether this packet is an acknowledgement. If it is, the\n\t// payload will be empty.\n\tAck bool\n\n\t// Class idicates the structure of the payload. There are only 2^4 valid\n\t// values, however there is no uint4 data type. N.B. the Ack bit has been\n\t// split off into another field. The most significant 4 bits of this field\n\t// will always be 0.\n\tClass RMCPClass\n}\n\n// LayerType returns LayerTypeRMCP. It partially satisfies Layer and\n// SerializableLayer.\nfunc (*RMCP) LayerType() gopacket.LayerType {\n\treturn LayerTypeRMCP\n}\n\n// CanDecode returns LayerTypeRMCP. It partially satisfies DecodingLayer.\nfunc (r *RMCP) CanDecode() gopacket.LayerClass {\n\treturn r.LayerType()\n}\n\n// DecodeFromBytes makes the layer represent the provided bytes. It partially\n// satisfies DecodingLayer.\nfunc (r *RMCP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 4 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"invalid RMCP header, length %v less than 4\",\n\t\t\tlen(data))\n\t}\n\n\tr.BaseLayer.Contents = data[:4]\n\tr.BaseLayer.Payload = data[4:]\n\n\tr.Version = uint8(data[0])\n\t// 1 byte reserved\n\tr.Sequence = uint8(data[2])\n\tr.Ack = data[3]&RMCPAck != 0\n\tr.Class = RMCPClass(data[3] & 0xF)\n\treturn nil\n}\n\n// NextLayerType returns the data layer of this RMCP layer. This partially\n// satisfies DecodingLayer.\nfunc (r *RMCP) NextLayerType() gopacket.LayerType {\n\treturn r.Class.LayerType()\n}\n\n// Payload returns the data layer. It partially satisfies ApplicationLayer.\nfunc (r *RMCP) Payload() []byte {\n\treturn r.BaseLayer.Payload\n}\n\n// SerializeTo writes the serialized fom of this layer into the SerializeBuffer,\n// partially satisfying SerializableLayer.\nfunc (r *RMCP) SerializeTo(b gopacket.SerializeBuffer, _ gopacket.SerializeOptions) error {\n\t// The IPMI v1.5 spec contains a pad byte for frame sizes of certain lengths\n\t// to work around issues in LAN chips. This is no longer necessary as of\n\t// IPMI v2.0 (renamed to \"legacy pad\") so we do not attempt to add it. The\n\t// same approach is taken by FreeIPMI:\n\t// http://git.savannah.gnu.org/cgit/freeipmi.git/tree/libfreeipmi/interface/ipmi-lan-interface.c?id=b5ffcd38317daf42074458879f4c55ba6804a595#n836\n\tbytes, err := b.PrependBytes(4)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = r.Version\n\tbytes[1] = 0x00\n\tbytes[2] = r.Sequence\n\tbytes[3] = bool2uint8(r.Ack)<<7 | uint8(r.Class) // thanks, BFD layer\n\treturn nil\n}\n\n// decodeRMCP decodes the byte slice into an RMCP type, and sets the application\n// layer to it.\nfunc decodeRMCP(data []byte, p gopacket.PacketBuilder) error {\n\trmcp := &RMCP{}\n\terr := rmcp.DecodeFromBytes(data, p)\n\tp.AddLayer(rmcp)\n\tp.SetApplicationLayer(rmcp)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn p.NextDecoder(rmcp.NextLayerType())\n}\n"
  },
  {
    "path": "layers/rmcp_test.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license that can be found\n// in the LICENSE file in the root of the source tree.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc TestRMCPDecodeFromBytes(t *testing.T) {\n\tb, err := hex.DecodeString(\"0600ff06\")\n\tif err != nil {\n\t\tt.Fatalf(\"Failed to decode RMCP message\")\n\t}\n\n\trmcp := &RMCP{}\n\tif err := rmcp.DecodeFromBytes(b, gopacket.NilDecodeFeedback); err != nil {\n\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t}\n\tif !bytes.Equal(rmcp.BaseLayer.Payload, []byte{}) {\n\t\tt.Errorf(\"payload is %v, want %v\", rmcp.BaseLayer.Payload, b)\n\t}\n\tif !bytes.Equal(rmcp.BaseLayer.Contents, b) {\n\t\tt.Errorf(\"contents is %v, want %v\", rmcp.BaseLayer.Contents, b)\n\t}\n\tif rmcp.Version != RMCPVersion1 {\n\t\tt.Errorf(\"version is %v, want %v\", rmcp.Version, RMCPVersion1)\n\t}\n\tif rmcp.Sequence != 0xFF {\n\t\tt.Errorf(\"sequence is %v, want %v\", rmcp.Sequence, 0xFF)\n\t}\n\tif rmcp.Ack {\n\t\tt.Errorf(\"ack is true, want false\")\n\t}\n\tif rmcp.Class != RMCPClassASF {\n\t\tt.Errorf(\"class is %v, want %v\", rmcp.Class, RMCPClassASF)\n\t}\n}\n\nfunc serializeRMCP(rmcp *RMCP) ([]byte, error) {\n\tsb := gopacket.NewSerializeBuffer()\n\terr := rmcp.SerializeTo(sb, gopacket.SerializeOptions{})\n\treturn sb.Bytes(), err\n}\n\nfunc TestRMCPTestSerializeTo(t *testing.T) {\n\ttable := []struct {\n\t\tlayer *RMCP\n\t\twant  []byte\n\t}{\n\t\t{\n\t\t\t&RMCP{\n\t\t\t\tVersion:  RMCPVersion1,\n\t\t\t\tSequence: 1,\n\t\t\t\tAck:      false,\n\t\t\t\tClass:    RMCPClassASF,\n\t\t\t},\n\t\t\t[]byte{0x6, 0x0, 0x1, 0x6},\n\t\t},\n\t\t{\n\t\t\t&RMCP{\n\t\t\t\tVersion:  RMCPVersion1,\n\t\t\t\tSequence: 0xFF,\n\t\t\t\tAck:      true,\n\t\t\t\tClass:    RMCPClassIPMI,\n\t\t\t},\n\t\t\t[]byte{0x6, 0x0, 0xFF, 0x87},\n\t\t},\n\t}\n\tfor _, test := range table {\n\t\tb, err := serializeRMCP(test.layer)\n\t\tswitch {\n\t\tcase err != nil && test.want != nil:\n\t\t\tt.Errorf(\"serialize %v failed with %v, wanted %v\", test.layer,\n\t\t\t\terr, test.want)\n\t\tcase err == nil && !bytes.Equal(b, test.want):\n\t\t\tt.Errorf(\"serialize %v = %v, want %v\", test.layer, b, test.want)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "layers/rudp.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"github.com/google/gopacket\"\n)\n\ntype RUDP struct {\n\tBaseLayer\n\tSYN, ACK, EACK, RST, NUL bool\n\tVersion                  uint8\n\tHeaderLength             uint8\n\tSrcPort, DstPort         RUDPPort\n\tDataLength               uint16\n\tSeq, Ack, Checksum       uint32\n\tVariableHeaderArea       []byte\n\t// RUDPHeaderSyn contains SYN information for the RUDP packet,\n\t// if the SYN flag is set\n\t*RUDPHeaderSYN\n\t// RUDPHeaderEack contains EACK information for the RUDP packet,\n\t// if the EACK flag is set.\n\t*RUDPHeaderEACK\n}\n\ntype RUDPHeaderSYN struct {\n\tMaxOutstandingSegments, MaxSegmentSize, OptionFlags uint16\n}\n\ntype RUDPHeaderEACK struct {\n\tSeqsReceivedOK []uint32\n}\n\n// LayerType returns gopacket.LayerTypeRUDP.\nfunc (r *RUDP) LayerType() gopacket.LayerType { return LayerTypeRUDP }\n\nfunc decodeRUDP(data []byte, p gopacket.PacketBuilder) error {\n\tr := &RUDP{\n\t\tSYN:          data[0]&0x80 != 0,\n\t\tACK:          data[0]&0x40 != 0,\n\t\tEACK:         data[0]&0x20 != 0,\n\t\tRST:          data[0]&0x10 != 0,\n\t\tNUL:          data[0]&0x08 != 0,\n\t\tVersion:      data[0] & 0x3,\n\t\tHeaderLength: data[1],\n\t\tSrcPort:      RUDPPort(data[2]),\n\t\tDstPort:      RUDPPort(data[3]),\n\t\tDataLength:   binary.BigEndian.Uint16(data[4:6]),\n\t\tSeq:          binary.BigEndian.Uint32(data[6:10]),\n\t\tAck:          binary.BigEndian.Uint32(data[10:14]),\n\t\tChecksum:     binary.BigEndian.Uint32(data[14:18]),\n\t}\n\tif r.HeaderLength < 9 {\n\t\treturn fmt.Errorf(\"RUDP packet with too-short header length %d\", r.HeaderLength)\n\t}\n\thlen := int(r.HeaderLength) * 2\n\tr.Contents = data[:hlen]\n\tr.Payload = data[hlen : hlen+int(r.DataLength)]\n\tr.VariableHeaderArea = data[18:hlen]\n\theaderData := r.VariableHeaderArea\n\tswitch {\n\tcase r.SYN:\n\t\tif len(headerData) != 6 {\n\t\t\treturn fmt.Errorf(\"RUDP packet invalid SYN header length: %d\", len(headerData))\n\t\t}\n\t\tr.RUDPHeaderSYN = &RUDPHeaderSYN{\n\t\t\tMaxOutstandingSegments: binary.BigEndian.Uint16(headerData[:2]),\n\t\t\tMaxSegmentSize:         binary.BigEndian.Uint16(headerData[2:4]),\n\t\t\tOptionFlags:            binary.BigEndian.Uint16(headerData[4:6]),\n\t\t}\n\tcase r.EACK:\n\t\tif len(headerData)%4 != 0 {\n\t\t\treturn fmt.Errorf(\"RUDP packet invalid EACK header length: %d\", len(headerData))\n\t\t}\n\t\tr.RUDPHeaderEACK = &RUDPHeaderEACK{make([]uint32, len(headerData)/4)}\n\t\tfor i := 0; i < len(headerData); i += 4 {\n\t\t\tr.SeqsReceivedOK[i/4] = binary.BigEndian.Uint32(headerData[i : i+4])\n\t\t}\n\t}\n\tp.AddLayer(r)\n\tp.SetTransportLayer(r)\n\treturn p.NextDecoder(gopacket.LayerTypePayload)\n}\n\nfunc (r *RUDP) TransportFlow() gopacket.Flow {\n\treturn gopacket.NewFlow(EndpointRUDPPort, []byte{byte(r.SrcPort)}, []byte{byte(r.DstPort)})\n}\n"
  },
  {
    "path": "layers/sctp.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"hash/crc32\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// SCTP contains information on the top level of an SCTP packet.\ntype SCTP struct {\n\tBaseLayer\n\tSrcPort, DstPort SCTPPort\n\tVerificationTag  uint32\n\tChecksum         uint32\n\tsPort, dPort     []byte\n}\n\n// LayerType returns gopacket.LayerTypeSCTP\nfunc (s *SCTP) LayerType() gopacket.LayerType { return LayerTypeSCTP }\n\nfunc decodeSCTP(data []byte, p gopacket.PacketBuilder) error {\n\tsctp := &SCTP{}\n\terr := sctp.DecodeFromBytes(data, p)\n\tp.AddLayer(sctp)\n\tp.SetTransportLayer(sctp)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn p.NextDecoder(sctpChunkTypePrefixDecoder)\n}\n\nvar sctpChunkTypePrefixDecoder = gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix)\n\n// TransportFlow returns a flow based on the source and destination SCTP port.\nfunc (s *SCTP) TransportFlow() gopacket.Flow {\n\treturn gopacket.NewFlow(EndpointSCTPPort, s.sPort, s.dPort)\n}\n\nfunc decodeWithSCTPChunkTypePrefix(data []byte, p gopacket.PacketBuilder) error {\n\tchunkType := SCTPChunkType(data[0])\n\treturn chunkType.Decode(data, p)\n}\n\n// SerializeTo is for gopacket.SerializableLayer.\nfunc (s SCTP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbytes, err := b.PrependBytes(12)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbinary.BigEndian.PutUint16(bytes[0:2], uint16(s.SrcPort))\n\tbinary.BigEndian.PutUint16(bytes[2:4], uint16(s.DstPort))\n\tbinary.BigEndian.PutUint32(bytes[4:8], s.VerificationTag)\n\tif opts.ComputeChecksums {\n\t\t// Note:  MakeTable(Castagnoli) actually only creates the table once, then\n\t\t// passes back a singleton on every other call, so this shouldn't cause\n\t\t// excessive memory allocation.\n\t\tbinary.LittleEndian.PutUint32(bytes[8:12], crc32.Checksum(b.Bytes(), crc32.MakeTable(crc32.Castagnoli)))\n\t}\n\treturn nil\n}\n\nfunc (sctp *SCTP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 12 {\n\t\treturn errors.New(\"Invalid SCTP common header length\")\n\t}\n\tsctp.SrcPort = SCTPPort(binary.BigEndian.Uint16(data[:2]))\n\tsctp.sPort = data[:2]\n\tsctp.DstPort = SCTPPort(binary.BigEndian.Uint16(data[2:4]))\n\tsctp.dPort = data[2:4]\n\tsctp.VerificationTag = binary.BigEndian.Uint32(data[4:8])\n\tsctp.Checksum = binary.BigEndian.Uint32(data[8:12])\n\tsctp.BaseLayer = BaseLayer{data[:12], data[12:]}\n\n\treturn nil\n}\n\nfunc (t *SCTP) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeSCTP\n}\n\nfunc (t *SCTP) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\n// SCTPChunk contains the common fields in all SCTP chunks.\ntype SCTPChunk struct {\n\tBaseLayer\n\tType   SCTPChunkType\n\tFlags  uint8\n\tLength uint16\n\t// ActualLength is the total length of an SCTP chunk, including padding.\n\t// SCTP chunks start and end on 4-byte boundaries.  So if a chunk has a length\n\t// of 18, it means that it has data up to and including byte 18, then padding\n\t// up to the next 4-byte boundary, 20.  In this case, Length would be 18, and\n\t// ActualLength would be 20.\n\tActualLength int\n}\n\nfunc roundUpToNearest4(i int) int {\n\tif i%4 == 0 {\n\t\treturn i\n\t}\n\treturn i + 4 - (i % 4)\n}\n\nfunc decodeSCTPChunk(data []byte) (SCTPChunk, error) {\n\tlength := binary.BigEndian.Uint16(data[2:4])\n\tif length < 4 {\n\t\treturn SCTPChunk{}, errors.New(\"invalid SCTP chunk length\")\n\t}\n\tactual := roundUpToNearest4(int(length))\n\tct := SCTPChunkType(data[0])\n\n\t// For SCTP Data, use a separate layer for the payload\n\tdelta := 0\n\tif ct == SCTPChunkTypeData {\n\t\tdelta = int(actual) - int(length)\n\t\tactual = 16\n\t}\n\n\treturn SCTPChunk{\n\t\tType:         ct,\n\t\tFlags:        data[1],\n\t\tLength:       length,\n\t\tActualLength: actual,\n\t\tBaseLayer:    BaseLayer{data[:actual], data[actual : len(data)-delta]},\n\t}, nil\n}\n\n// SCTPParameter is a TLV parameter inside a SCTPChunk.\ntype SCTPParameter struct {\n\tType         uint16\n\tLength       uint16\n\tActualLength int\n\tValue        []byte\n}\n\nfunc decodeSCTPParameter(data []byte) SCTPParameter {\n\tlength := binary.BigEndian.Uint16(data[2:4])\n\treturn SCTPParameter{\n\t\tType:         binary.BigEndian.Uint16(data[0:2]),\n\t\tLength:       length,\n\t\tValue:        data[4:length],\n\t\tActualLength: roundUpToNearest4(int(length)),\n\t}\n}\n\nfunc (p SCTPParameter) Bytes() []byte {\n\tlength := 4 + len(p.Value)\n\tdata := make([]byte, roundUpToNearest4(length))\n\tbinary.BigEndian.PutUint16(data[0:2], p.Type)\n\tbinary.BigEndian.PutUint16(data[2:4], uint16(length))\n\tcopy(data[4:], p.Value)\n\treturn data\n}\n\n// SCTPUnknownChunkType is the layer type returned when we don't recognize the\n// chunk type.  Since there's a length in a known location, we can skip over\n// it even if we don't know what it is, and continue parsing the rest of the\n// chunks.  This chunk is stored as an ErrorLayer in the packet.\ntype SCTPUnknownChunkType struct {\n\tSCTPChunk\n\tbytes []byte\n}\n\nfunc decodeSCTPChunkTypeUnknown(data []byte, p gopacket.PacketBuilder) error {\n\tchunk, err := decodeSCTPChunk(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\tsc := &SCTPUnknownChunkType{SCTPChunk: chunk}\n\tsc.bytes = data[:sc.ActualLength]\n\tp.AddLayer(sc)\n\tp.SetErrorLayer(sc)\n\treturn p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))\n}\n\n// SerializeTo is for gopacket.SerializableLayer.\nfunc (s SCTPUnknownChunkType) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbytes, err := b.PrependBytes(s.ActualLength)\n\tif err != nil {\n\t\treturn err\n\t}\n\tcopy(bytes, s.bytes)\n\treturn nil\n}\n\n// LayerType returns gopacket.LayerTypeSCTPUnknownChunkType.\nfunc (s *SCTPUnknownChunkType) LayerType() gopacket.LayerType { return LayerTypeSCTPUnknownChunkType }\n\n// Payload returns all bytes in this header, including the decoded Type, Length,\n// and Flags.\nfunc (s *SCTPUnknownChunkType) Payload() []byte { return s.bytes }\n\n// Error implements ErrorLayer.\nfunc (s *SCTPUnknownChunkType) Error() error {\n\treturn fmt.Errorf(\"No decode method available for SCTP chunk type %s\", s.Type)\n}\n\n// SCTPData is the SCTP Data chunk layer.\ntype SCTPData struct {\n\tSCTPChunk\n\tUnordered, BeginFragment, EndFragment bool\n\tTSN                                   uint32\n\tStreamId                              uint16\n\tStreamSequence                        uint16\n\tPayloadProtocol                       SCTPPayloadProtocol\n}\n\n// LayerType returns gopacket.LayerTypeSCTPData.\nfunc (s *SCTPData) LayerType() gopacket.LayerType { return LayerTypeSCTPData }\n\n// SCTPPayloadProtocol represents a payload protocol\ntype SCTPPayloadProtocol uint32\n\n// SCTPPayloadProtocol constonts from http://www.iana.org/assignments/sctp-parameters/sctp-parameters.xhtml\nconst (\n\tSCTPProtocolReserved  SCTPPayloadProtocol = 0\n\tSCTPPayloadUIA                            = 1\n\tSCTPPayloadM2UA                           = 2\n\tSCTPPayloadM3UA                           = 3\n\tSCTPPayloadSUA                            = 4\n\tSCTPPayloadM2PA                           = 5\n\tSCTPPayloadV5UA                           = 6\n\tSCTPPayloadH248                           = 7\n\tSCTPPayloadBICC                           = 8\n\tSCTPPayloadTALI                           = 9\n\tSCTPPayloadDUA                            = 10\n\tSCTPPayloadASAP                           = 11\n\tSCTPPayloadENRP                           = 12\n\tSCTPPayloadH323                           = 13\n\tSCTPPayloadQIPC                           = 14\n\tSCTPPayloadSIMCO                          = 15\n\tSCTPPayloadDDPSegment                     = 16\n\tSCTPPayloadDDPStream                      = 17\n\tSCTPPayloadS1AP                           = 18\n)\n\nfunc (p SCTPPayloadProtocol) String() string {\n\tswitch p {\n\tcase SCTPProtocolReserved:\n\t\treturn \"Reserved\"\n\tcase SCTPPayloadUIA:\n\t\treturn \"UIA\"\n\tcase SCTPPayloadM2UA:\n\t\treturn \"M2UA\"\n\tcase SCTPPayloadM3UA:\n\t\treturn \"M3UA\"\n\tcase SCTPPayloadSUA:\n\t\treturn \"SUA\"\n\tcase SCTPPayloadM2PA:\n\t\treturn \"M2PA\"\n\tcase SCTPPayloadV5UA:\n\t\treturn \"V5UA\"\n\tcase SCTPPayloadH248:\n\t\treturn \"H.248\"\n\tcase SCTPPayloadBICC:\n\t\treturn \"BICC\"\n\tcase SCTPPayloadTALI:\n\t\treturn \"TALI\"\n\tcase SCTPPayloadDUA:\n\t\treturn \"DUA\"\n\tcase SCTPPayloadASAP:\n\t\treturn \"ASAP\"\n\tcase SCTPPayloadENRP:\n\t\treturn \"ENRP\"\n\tcase SCTPPayloadH323:\n\t\treturn \"H.323\"\n\tcase SCTPPayloadQIPC:\n\t\treturn \"QIPC\"\n\tcase SCTPPayloadSIMCO:\n\t\treturn \"SIMCO\"\n\tcase SCTPPayloadDDPSegment:\n\t\treturn \"DDPSegment\"\n\tcase SCTPPayloadDDPStream:\n\t\treturn \"DDPStream\"\n\tcase SCTPPayloadS1AP:\n\t\treturn \"S1AP\"\n\t}\n\treturn fmt.Sprintf(\"Unknown(%d)\", p)\n}\n\nfunc decodeSCTPData(data []byte, p gopacket.PacketBuilder) error {\n\tchunk, err := decodeSCTPChunk(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\tsc := &SCTPData{\n\t\tSCTPChunk:       chunk,\n\t\tUnordered:       data[1]&0x4 != 0,\n\t\tBeginFragment:   data[1]&0x2 != 0,\n\t\tEndFragment:     data[1]&0x1 != 0,\n\t\tTSN:             binary.BigEndian.Uint32(data[4:8]),\n\t\tStreamId:        binary.BigEndian.Uint16(data[8:10]),\n\t\tStreamSequence:  binary.BigEndian.Uint16(data[10:12]),\n\t\tPayloadProtocol: SCTPPayloadProtocol(binary.BigEndian.Uint32(data[12:16])),\n\t}\n\t// Length is the length in bytes of the data, INCLUDING the 16-byte header.\n\tp.AddLayer(sc)\n\treturn p.NextDecoder(gopacket.LayerTypePayload)\n}\n\n// SerializeTo is for gopacket.SerializableLayer.\nfunc (sc SCTPData) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tpayload := b.Bytes()\n\t// Pad the payload to a 32 bit boundary\n\tif rem := len(payload) % 4; rem != 0 {\n\t\tb.AppendBytes(4 - rem)\n\t}\n\tlength := 16\n\tbytes, err := b.PrependBytes(length)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = uint8(sc.Type)\n\tflags := uint8(0)\n\tif sc.Unordered {\n\t\tflags |= 0x4\n\t}\n\tif sc.BeginFragment {\n\t\tflags |= 0x2\n\t}\n\tif sc.EndFragment {\n\t\tflags |= 0x1\n\t}\n\tbytes[1] = flags\n\tbinary.BigEndian.PutUint16(bytes[2:4], uint16(length+len(payload)))\n\tbinary.BigEndian.PutUint32(bytes[4:8], sc.TSN)\n\tbinary.BigEndian.PutUint16(bytes[8:10], sc.StreamId)\n\tbinary.BigEndian.PutUint16(bytes[10:12], sc.StreamSequence)\n\tbinary.BigEndian.PutUint32(bytes[12:16], uint32(sc.PayloadProtocol))\n\treturn nil\n}\n\n// SCTPInitParameter is a parameter for an SCTP Init or InitAck packet.\ntype SCTPInitParameter SCTPParameter\n\n// SCTPInit is used as the return value for both SCTPInit and SCTPInitAck\n// messages.\ntype SCTPInit struct {\n\tSCTPChunk\n\tInitiateTag                     uint32\n\tAdvertisedReceiverWindowCredit  uint32\n\tOutboundStreams, InboundStreams uint16\n\tInitialTSN                      uint32\n\tParameters                      []SCTPInitParameter\n}\n\n// LayerType returns either gopacket.LayerTypeSCTPInit or gopacket.LayerTypeSCTPInitAck.\nfunc (sc *SCTPInit) LayerType() gopacket.LayerType {\n\tif sc.Type == SCTPChunkTypeInitAck {\n\t\treturn LayerTypeSCTPInitAck\n\t}\n\t// sc.Type == SCTPChunkTypeInit\n\treturn LayerTypeSCTPInit\n}\n\nfunc decodeSCTPInit(data []byte, p gopacket.PacketBuilder) error {\n\tchunk, err := decodeSCTPChunk(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\tsc := &SCTPInit{\n\t\tSCTPChunk:                      chunk,\n\t\tInitiateTag:                    binary.BigEndian.Uint32(data[4:8]),\n\t\tAdvertisedReceiverWindowCredit: binary.BigEndian.Uint32(data[8:12]),\n\t\tOutboundStreams:                binary.BigEndian.Uint16(data[12:14]),\n\t\tInboundStreams:                 binary.BigEndian.Uint16(data[14:16]),\n\t\tInitialTSN:                     binary.BigEndian.Uint32(data[16:20]),\n\t}\n\tparamData := data[20:sc.ActualLength]\n\tfor len(paramData) > 0 {\n\t\tp := SCTPInitParameter(decodeSCTPParameter(paramData))\n\t\tparamData = paramData[p.ActualLength:]\n\t\tsc.Parameters = append(sc.Parameters, p)\n\t}\n\tp.AddLayer(sc)\n\treturn p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))\n}\n\n// SerializeTo is for gopacket.SerializableLayer.\nfunc (sc SCTPInit) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tvar payload []byte\n\tfor _, param := range sc.Parameters {\n\t\tpayload = append(payload, SCTPParameter(param).Bytes()...)\n\t}\n\tlength := 20 + len(payload)\n\tbytes, err := b.PrependBytes(roundUpToNearest4(length))\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = uint8(sc.Type)\n\tbytes[1] = sc.Flags\n\tbinary.BigEndian.PutUint16(bytes[2:4], uint16(length))\n\tbinary.BigEndian.PutUint32(bytes[4:8], sc.InitiateTag)\n\tbinary.BigEndian.PutUint32(bytes[8:12], sc.AdvertisedReceiverWindowCredit)\n\tbinary.BigEndian.PutUint16(bytes[12:14], sc.OutboundStreams)\n\tbinary.BigEndian.PutUint16(bytes[14:16], sc.InboundStreams)\n\tbinary.BigEndian.PutUint32(bytes[16:20], sc.InitialTSN)\n\tcopy(bytes[20:], payload)\n\treturn nil\n}\n\n// SCTPSack is the SCTP Selective ACK chunk layer.\ntype SCTPSack struct {\n\tSCTPChunk\n\tCumulativeTSNAck               uint32\n\tAdvertisedReceiverWindowCredit uint32\n\tNumGapACKs, NumDuplicateTSNs   uint16\n\tGapACKs                        []uint16\n\tDuplicateTSNs                  []uint32\n}\n\n// LayerType return LayerTypeSCTPSack\nfunc (sc *SCTPSack) LayerType() gopacket.LayerType {\n\treturn LayerTypeSCTPSack\n}\n\nfunc decodeSCTPSack(data []byte, p gopacket.PacketBuilder) error {\n\tchunk, err := decodeSCTPChunk(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\tsc := &SCTPSack{\n\t\tSCTPChunk:                      chunk,\n\t\tCumulativeTSNAck:               binary.BigEndian.Uint32(data[4:8]),\n\t\tAdvertisedReceiverWindowCredit: binary.BigEndian.Uint32(data[8:12]),\n\t\tNumGapACKs:                     binary.BigEndian.Uint16(data[12:14]),\n\t\tNumDuplicateTSNs:               binary.BigEndian.Uint16(data[14:16]),\n\t}\n\t// We maximize gapAcks and dupTSNs here so we're not allocating tons\n\t// of memory based on a user-controlable field.  Our maximums are not exact,\n\t// but should give us sane defaults... we'll still hit slice boundaries and\n\t// fail if the user-supplied values are too high (in the for loops below), but\n\t// the amount of memory we'll have allocated because of that should be small\n\t// (< sc.ActualLength)\n\tgapAcks := sc.SCTPChunk.ActualLength / 2\n\tdupTSNs := (sc.SCTPChunk.ActualLength - gapAcks*2) / 4\n\tif gapAcks > int(sc.NumGapACKs) {\n\t\tgapAcks = int(sc.NumGapACKs)\n\t}\n\tif dupTSNs > int(sc.NumDuplicateTSNs) {\n\t\tdupTSNs = int(sc.NumDuplicateTSNs)\n\t}\n\tsc.GapACKs = make([]uint16, 0, gapAcks)\n\tsc.DuplicateTSNs = make([]uint32, 0, dupTSNs)\n\tbytesRemaining := data[16:]\n\tfor i := 0; i < int(sc.NumGapACKs); i++ {\n\t\tsc.GapACKs = append(sc.GapACKs, binary.BigEndian.Uint16(bytesRemaining[:2]))\n\t\tbytesRemaining = bytesRemaining[2:]\n\t}\n\tfor i := 0; i < int(sc.NumDuplicateTSNs); i++ {\n\t\tsc.DuplicateTSNs = append(sc.DuplicateTSNs, binary.BigEndian.Uint32(bytesRemaining[:4]))\n\t\tbytesRemaining = bytesRemaining[4:]\n\t}\n\tp.AddLayer(sc)\n\treturn p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))\n}\n\n// SerializeTo is for gopacket.SerializableLayer.\nfunc (sc SCTPSack) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tlength := 16 + 2*len(sc.GapACKs) + 4*len(sc.DuplicateTSNs)\n\tbytes, err := b.PrependBytes(roundUpToNearest4(length))\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = uint8(sc.Type)\n\tbytes[1] = sc.Flags\n\tbinary.BigEndian.PutUint16(bytes[2:4], uint16(length))\n\tbinary.BigEndian.PutUint32(bytes[4:8], sc.CumulativeTSNAck)\n\tbinary.BigEndian.PutUint32(bytes[8:12], sc.AdvertisedReceiverWindowCredit)\n\tbinary.BigEndian.PutUint16(bytes[12:14], uint16(len(sc.GapACKs)))\n\tbinary.BigEndian.PutUint16(bytes[14:16], uint16(len(sc.DuplicateTSNs)))\n\tfor i, v := range sc.GapACKs {\n\t\tbinary.BigEndian.PutUint16(bytes[16+i*2:], v)\n\t}\n\toffset := 16 + 2*len(sc.GapACKs)\n\tfor i, v := range sc.DuplicateTSNs {\n\t\tbinary.BigEndian.PutUint32(bytes[offset+i*4:], v)\n\t}\n\treturn nil\n}\n\n// SCTPHeartbeatParameter is the parameter type used by SCTP heartbeat and\n// heartbeat ack layers.\ntype SCTPHeartbeatParameter SCTPParameter\n\n// SCTPHeartbeat is the SCTP heartbeat layer, also used for heatbeat ack.\ntype SCTPHeartbeat struct {\n\tSCTPChunk\n\tParameters []SCTPHeartbeatParameter\n}\n\n// LayerType returns gopacket.LayerTypeSCTPHeartbeat.\nfunc (sc *SCTPHeartbeat) LayerType() gopacket.LayerType {\n\tif sc.Type == SCTPChunkTypeHeartbeatAck {\n\t\treturn LayerTypeSCTPHeartbeatAck\n\t}\n\t// sc.Type == SCTPChunkTypeHeartbeat\n\treturn LayerTypeSCTPHeartbeat\n}\n\nfunc decodeSCTPHeartbeat(data []byte, p gopacket.PacketBuilder) error {\n\tchunk, err := decodeSCTPChunk(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\tsc := &SCTPHeartbeat{\n\t\tSCTPChunk: chunk,\n\t}\n\tparamData := data[4:sc.Length]\n\tfor len(paramData) > 0 {\n\t\tp := SCTPHeartbeatParameter(decodeSCTPParameter(paramData))\n\t\tparamData = paramData[p.ActualLength:]\n\t\tsc.Parameters = append(sc.Parameters, p)\n\t}\n\tp.AddLayer(sc)\n\treturn p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))\n}\n\n// SerializeTo is for gopacket.SerializableLayer.\nfunc (sc SCTPHeartbeat) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tvar payload []byte\n\tfor _, param := range sc.Parameters {\n\t\tpayload = append(payload, SCTPParameter(param).Bytes()...)\n\t}\n\tlength := 4 + len(payload)\n\n\tbytes, err := b.PrependBytes(roundUpToNearest4(length))\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = uint8(sc.Type)\n\tbytes[1] = sc.Flags\n\tbinary.BigEndian.PutUint16(bytes[2:4], uint16(length))\n\tcopy(bytes[4:], payload)\n\treturn nil\n}\n\n// SCTPErrorParameter is the parameter type used by SCTP Abort and Error layers.\ntype SCTPErrorParameter SCTPParameter\n\n// SCTPError is the SCTP error layer, also used for SCTP aborts.\ntype SCTPError struct {\n\tSCTPChunk\n\tParameters []SCTPErrorParameter\n}\n\n// LayerType returns LayerTypeSCTPAbort or LayerTypeSCTPError.\nfunc (sc *SCTPError) LayerType() gopacket.LayerType {\n\tif sc.Type == SCTPChunkTypeAbort {\n\t\treturn LayerTypeSCTPAbort\n\t}\n\t// sc.Type == SCTPChunkTypeError\n\treturn LayerTypeSCTPError\n}\n\nfunc decodeSCTPError(data []byte, p gopacket.PacketBuilder) error {\n\t// remarkably similar to decodeSCTPHeartbeat ;)\n\tchunk, err := decodeSCTPChunk(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\tsc := &SCTPError{\n\t\tSCTPChunk: chunk,\n\t}\n\tparamData := data[4:sc.Length]\n\tfor len(paramData) > 0 {\n\t\tp := SCTPErrorParameter(decodeSCTPParameter(paramData))\n\t\tparamData = paramData[p.ActualLength:]\n\t\tsc.Parameters = append(sc.Parameters, p)\n\t}\n\tp.AddLayer(sc)\n\treturn p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))\n}\n\n// SerializeTo is for gopacket.SerializableLayer.\nfunc (sc SCTPError) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tvar payload []byte\n\tfor _, param := range sc.Parameters {\n\t\tpayload = append(payload, SCTPParameter(param).Bytes()...)\n\t}\n\tlength := 4 + len(payload)\n\n\tbytes, err := b.PrependBytes(roundUpToNearest4(length))\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = uint8(sc.Type)\n\tbytes[1] = sc.Flags\n\tbinary.BigEndian.PutUint16(bytes[2:4], uint16(length))\n\tcopy(bytes[4:], payload)\n\treturn nil\n}\n\n// SCTPShutdown is the SCTP shutdown layer.\ntype SCTPShutdown struct {\n\tSCTPChunk\n\tCumulativeTSNAck uint32\n}\n\n// LayerType returns gopacket.LayerTypeSCTPShutdown.\nfunc (sc *SCTPShutdown) LayerType() gopacket.LayerType { return LayerTypeSCTPShutdown }\n\nfunc decodeSCTPShutdown(data []byte, p gopacket.PacketBuilder) error {\n\tchunk, err := decodeSCTPChunk(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\tsc := &SCTPShutdown{\n\t\tSCTPChunk:        chunk,\n\t\tCumulativeTSNAck: binary.BigEndian.Uint32(data[4:8]),\n\t}\n\tp.AddLayer(sc)\n\treturn p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))\n}\n\n// SerializeTo is for gopacket.SerializableLayer.\nfunc (sc SCTPShutdown) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbytes, err := b.PrependBytes(8)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = uint8(sc.Type)\n\tbytes[1] = sc.Flags\n\tbinary.BigEndian.PutUint16(bytes[2:4], 8)\n\tbinary.BigEndian.PutUint32(bytes[4:8], sc.CumulativeTSNAck)\n\treturn nil\n}\n\n// SCTPShutdownAck is the SCTP shutdown layer.\ntype SCTPShutdownAck struct {\n\tSCTPChunk\n}\n\n// LayerType returns gopacket.LayerTypeSCTPShutdownAck.\nfunc (sc *SCTPShutdownAck) LayerType() gopacket.LayerType { return LayerTypeSCTPShutdownAck }\n\nfunc decodeSCTPShutdownAck(data []byte, p gopacket.PacketBuilder) error {\n\tchunk, err := decodeSCTPChunk(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\tsc := &SCTPShutdownAck{\n\t\tSCTPChunk: chunk,\n\t}\n\tp.AddLayer(sc)\n\treturn p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))\n}\n\n// SerializeTo is for gopacket.SerializableLayer.\nfunc (sc SCTPShutdownAck) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbytes, err := b.PrependBytes(4)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = uint8(sc.Type)\n\tbytes[1] = sc.Flags\n\tbinary.BigEndian.PutUint16(bytes[2:4], 4)\n\treturn nil\n}\n\n// SCTPCookieEcho is the SCTP Cookie Echo layer.\ntype SCTPCookieEcho struct {\n\tSCTPChunk\n\tCookie []byte\n}\n\n// LayerType returns gopacket.LayerTypeSCTPCookieEcho.\nfunc (sc *SCTPCookieEcho) LayerType() gopacket.LayerType { return LayerTypeSCTPCookieEcho }\n\nfunc decodeSCTPCookieEcho(data []byte, p gopacket.PacketBuilder) error {\n\tchunk, err := decodeSCTPChunk(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\tsc := &SCTPCookieEcho{\n\t\tSCTPChunk: chunk,\n\t}\n\tsc.Cookie = data[4:sc.Length]\n\tp.AddLayer(sc)\n\treturn p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))\n}\n\n// SerializeTo is for gopacket.SerializableLayer.\nfunc (sc SCTPCookieEcho) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tlength := 4 + len(sc.Cookie)\n\tbytes, err := b.PrependBytes(roundUpToNearest4(length))\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = uint8(sc.Type)\n\tbytes[1] = sc.Flags\n\tbinary.BigEndian.PutUint16(bytes[2:4], uint16(length))\n\tcopy(bytes[4:], sc.Cookie)\n\treturn nil\n}\n\n// This struct is used by all empty SCTP chunks (currently CookieAck and\n// ShutdownComplete).\ntype SCTPEmptyLayer struct {\n\tSCTPChunk\n}\n\n// LayerType returns either gopacket.LayerTypeSCTPShutdownComplete or\n// LayerTypeSCTPCookieAck.\nfunc (sc *SCTPEmptyLayer) LayerType() gopacket.LayerType {\n\tif sc.Type == SCTPChunkTypeShutdownComplete {\n\t\treturn LayerTypeSCTPShutdownComplete\n\t}\n\t// sc.Type == SCTPChunkTypeCookieAck\n\treturn LayerTypeSCTPCookieAck\n}\n\nfunc decodeSCTPEmptyLayer(data []byte, p gopacket.PacketBuilder) error {\n\tchunk, err := decodeSCTPChunk(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\tsc := &SCTPEmptyLayer{\n\t\tSCTPChunk: chunk,\n\t}\n\tp.AddLayer(sc)\n\treturn p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))\n}\n\n// SerializeTo is for gopacket.SerializableLayer.\nfunc (sc SCTPEmptyLayer) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbytes, err := b.PrependBytes(4)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbytes[0] = uint8(sc.Type)\n\tbytes[1] = sc.Flags\n\tbinary.BigEndian.PutUint16(bytes[2:4], 4)\n\treturn nil\n}\n"
  },
  {
    "path": "layers/sflow.go",
    "content": "// Copyright 2014 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n/*\nThis layer decodes SFlow version 5 datagrams.\n\nThe specification can be found here: http://sflow.org/sflow_version_5.txt\n\nAdditional developer information about sflow can be found at:\nhttp://sflow.org/developers/specifications.php\n\nAnd SFlow in general:\nhttp://sflow.org/index.php\n\nTwo forms of sample data are defined: compact and expanded. The\nSpecification has this to say:\n\n    Compact and expand forms of counter and flow samples are defined.\n    An agent must not mix compact/expanded encodings.  If an agent\n    will never use ifIndex numbers >= 2^24 then it must use compact\n    encodings for all interfaces.  Otherwise the expanded formats must\n    be used for all interfaces.\n\nThis decoder only supports the compact form, because that is the only\none for which data was available.\n\nThe datagram is composed of one or more samples of type flow or counter,\nand each sample is composed of one or more records describing the sample.\nA sample is a single instance of sampled inforamtion, and each record in\nthe sample gives additional / supplimentary information about the sample.\n\nThe following sample record types are supported:\n\n\tRaw Packet Header\n\topaque = flow_data; enterprise = 0; format = 1\n\n\tExtended Switch Data\n\topaque = flow_data; enterprise = 0; format = 1001\n\n\tExtended Router Data\n\topaque = flow_data; enterprise = 0; format = 1002\n\n\tExtended Gateway Data\n\topaque = flow_data; enterprise = 0; format = 1003\n\n\tExtended User Data\n\topaque = flow_data; enterprise = 0; format = 1004\n\n\tExtended URL Data\n\topaque = flow_data; enterprise = 0; format = 1005\n\nThe following types of counter records are supported:\n\n\tGeneric Interface Counters - see RFC 2233\n\topaque = counter_data; enterprise = 0; format = 1\n\n\tEthernet Interface Counters - see RFC 2358\n\topaque = counter_data; enterprise = 0; format = 2\n\nSFlow is encoded using XDR (RFC4506). There are a few places\nwhere the standard 4-byte fields are partitioned into two\nbitfields of different lengths. I'm not sure why the designers\nchose to pack together two values like this in some places, and\nin others they use the entire 4-byte value to store a number that\nwill never be more than a few bits. In any case, there are a couple\nof types defined to handle the decoding of these bitfields, and\nthat's why they're there. */\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// SFlowRecord holds both flow sample records and counter sample records.\n// A Record is the structure that actually holds the sampled data\n// and / or counters.\ntype SFlowRecord interface {\n}\n\n// SFlowDataSource encodes a 2-bit SFlowSourceFormat in its most significant\n// 2 bits, and an SFlowSourceValue in its least significant 30 bits.\n// These types and values define the meaning of the inteface information\n// presented in the sample metadata.\ntype SFlowDataSource int32\n\nfunc (sdc SFlowDataSource) decode() (SFlowSourceFormat, SFlowSourceValue) {\n\tleftField := sdc >> 30\n\trightField := uint32(0x3FFFFFFF) & uint32(sdc)\n\treturn SFlowSourceFormat(leftField), SFlowSourceValue(rightField)\n}\n\ntype SFlowDataSourceExpanded struct {\n\tSourceIDClass SFlowSourceFormat\n\tSourceIDIndex SFlowSourceValue\n}\n\nfunc (sdce SFlowDataSourceExpanded) decode() (SFlowSourceFormat, SFlowSourceValue) {\n\tleftField := sdce.SourceIDClass >> 30\n\trightField := uint32(0x3FFFFFFF) & uint32(sdce.SourceIDIndex)\n\treturn SFlowSourceFormat(leftField), SFlowSourceValue(rightField)\n}\n\ntype SFlowSourceFormat uint32\n\ntype SFlowSourceValue uint32\n\nconst (\n\tSFlowTypeSingleInterface      SFlowSourceFormat = 0\n\tSFlowTypePacketDiscarded      SFlowSourceFormat = 1\n\tSFlowTypeMultipleDestinations SFlowSourceFormat = 2\n)\n\nfunc (sdf SFlowSourceFormat) String() string {\n\tswitch sdf {\n\tcase SFlowTypeSingleInterface:\n\t\treturn \"Single Interface\"\n\tcase SFlowTypePacketDiscarded:\n\t\treturn \"Packet Discarded\"\n\tcase SFlowTypeMultipleDestinations:\n\t\treturn \"Multiple Destinations\"\n\tdefault:\n\t\treturn \"UNKNOWN\"\n\t}\n}\n\nfunc decodeSFlow(data []byte, p gopacket.PacketBuilder) error {\n\ts := &SFlowDatagram{}\n\terr := s.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(s)\n\tp.SetApplicationLayer(s)\n\treturn nil\n}\n\n// SFlowDatagram is the outermost container which holds some basic information\n// about the reporting agent, and holds at least one sample record\ntype SFlowDatagram struct {\n\tBaseLayer\n\n\tDatagramVersion uint32\n\tAgentAddress    net.IP\n\tSubAgentID      uint32\n\tSequenceNumber  uint32\n\tAgentUptime     uint32\n\tSampleCount     uint32\n\tFlowSamples     []SFlowFlowSample\n\tCounterSamples  []SFlowCounterSample\n}\n\n// An SFlow  datagram's outer container has the following\n// structure:\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |           int sFlow version (2|4|5)           |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |   int IP version of the Agent (1=v4|2=v6)     |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /    Agent IP address (v4=4byte|v6=16byte)      /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |               int sub agent id                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |         int datagram sequence number          |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |            int switch uptime in ms            |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |          int n samples in datagram            |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /                  n samples                    /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\n// SFlowDataFormat encodes the EnterpriseID in the most\n// significant 12 bits, and the SampleType in the least significant\n// 20 bits.\ntype SFlowDataFormat uint32\n\nfunc (sdf SFlowDataFormat) decode() (SFlowEnterpriseID, SFlowSampleType) {\n\tleftField := sdf >> 12\n\trightField := uint32(0xFFF) & uint32(sdf)\n\treturn SFlowEnterpriseID(leftField), SFlowSampleType(rightField)\n}\n\n// SFlowEnterpriseID is used to differentiate between the\n// official SFlow standard, and other, vendor-specific\n// types of flow data. (Similiar to SNMP's enterprise MIB\n// OIDs) Only the office SFlow Enterprise ID is decoded\n// here.\ntype SFlowEnterpriseID uint32\n\nconst (\n\tSFlowStandard SFlowEnterpriseID = 0\n)\n\nfunc (eid SFlowEnterpriseID) String() string {\n\tswitch eid {\n\tcase SFlowStandard:\n\t\treturn \"Standard SFlow\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc (eid SFlowEnterpriseID) GetType() SFlowEnterpriseID {\n\treturn SFlowStandard\n}\n\n// SFlowSampleType specifies the type of sample. Only flow samples\n// and counter samples are supported\ntype SFlowSampleType uint32\n\nconst (\n\tSFlowTypeFlowSample            SFlowSampleType = 1\n\tSFlowTypeCounterSample         SFlowSampleType = 2\n\tSFlowTypeExpandedFlowSample    SFlowSampleType = 3\n\tSFlowTypeExpandedCounterSample SFlowSampleType = 4\n)\n\nfunc (st SFlowSampleType) GetType() SFlowSampleType {\n\tswitch st {\n\tcase SFlowTypeFlowSample:\n\t\treturn SFlowTypeFlowSample\n\tcase SFlowTypeCounterSample:\n\t\treturn SFlowTypeCounterSample\n\tcase SFlowTypeExpandedFlowSample:\n\t\treturn SFlowTypeExpandedFlowSample\n\tcase SFlowTypeExpandedCounterSample:\n\t\treturn SFlowTypeExpandedCounterSample\n\tdefault:\n\t\tpanic(\"Invalid Sample Type\")\n\t}\n}\n\nfunc (st SFlowSampleType) String() string {\n\tswitch st {\n\tcase SFlowTypeFlowSample:\n\t\treturn \"Flow Sample\"\n\tcase SFlowTypeCounterSample:\n\t\treturn \"Counter Sample\"\n\tcase SFlowTypeExpandedFlowSample:\n\t\treturn \"Expanded Flow Sample\"\n\tcase SFlowTypeExpandedCounterSample:\n\t\treturn \"Expanded Counter Sample\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc (s *SFlowDatagram) LayerType() gopacket.LayerType { return LayerTypeSFlow }\n\nfunc (d *SFlowDatagram) Payload() []byte { return nil }\n\nfunc (d *SFlowDatagram) CanDecode() gopacket.LayerClass { return LayerTypeSFlow }\n\nfunc (d *SFlowDatagram) NextLayerType() gopacket.LayerType { return gopacket.LayerTypePayload }\n\n// SFlowIPType determines what form the IP address being decoded will\n// take. This is an XDR union type allowing for both IPv4 and IPv6\ntype SFlowIPType uint32\n\nconst (\n\tSFlowIPv4 SFlowIPType = 1\n\tSFlowIPv6 SFlowIPType = 2\n)\n\nfunc (s SFlowIPType) String() string {\n\tswitch s {\n\tcase SFlowIPv4:\n\t\treturn \"IPv4\"\n\tcase SFlowIPv6:\n\t\treturn \"IPv6\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc (s SFlowIPType) Length() int {\n\tswitch s {\n\tcase SFlowIPv4:\n\t\treturn 4\n\tcase SFlowIPv6:\n\t\treturn 16\n\tdefault:\n\t\treturn 0\n\t}\n}\n\nfunc (s *SFlowDatagram) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tvar agentAddressType SFlowIPType\n\n\tdata, s.DatagramVersion = data[4:], binary.BigEndian.Uint32(data[:4])\n\tdata, agentAddressType = data[4:], SFlowIPType(binary.BigEndian.Uint32(data[:4]))\n\tdata, s.AgentAddress = data[agentAddressType.Length():], data[:agentAddressType.Length()]\n\tdata, s.SubAgentID = data[4:], binary.BigEndian.Uint32(data[:4])\n\tdata, s.SequenceNumber = data[4:], binary.BigEndian.Uint32(data[:4])\n\tdata, s.AgentUptime = data[4:], binary.BigEndian.Uint32(data[:4])\n\tdata, s.SampleCount = data[4:], binary.BigEndian.Uint32(data[:4])\n\n\tif s.SampleCount < 1 {\n\t\treturn fmt.Errorf(\"SFlow Datagram has invalid sample length: %d\", s.SampleCount)\n\t}\n\tfor i := uint32(0); i < s.SampleCount; i++ {\n\t\tsdf := SFlowDataFormat(binary.BigEndian.Uint32(data[:4]))\n\t\t_, sampleType := sdf.decode()\n\t\tswitch sampleType {\n\t\tcase SFlowTypeFlowSample:\n\t\t\tif flowSample, err := decodeFlowSample(&data, false); err == nil {\n\t\t\t\ts.FlowSamples = append(s.FlowSamples, flowSample)\n\t\t\t} else {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase SFlowTypeCounterSample:\n\t\t\tif counterSample, err := decodeCounterSample(&data, false); err == nil {\n\t\t\t\ts.CounterSamples = append(s.CounterSamples, counterSample)\n\t\t\t} else {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase SFlowTypeExpandedFlowSample:\n\t\t\tif flowSample, err := decodeFlowSample(&data, true); err == nil {\n\t\t\t\ts.FlowSamples = append(s.FlowSamples, flowSample)\n\t\t\t} else {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase SFlowTypeExpandedCounterSample:\n\t\t\tif counterSample, err := decodeCounterSample(&data, true); err == nil {\n\t\t\t\ts.CounterSamples = append(s.CounterSamples, counterSample)\n\t\t\t} else {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"Unsupported SFlow sample type %d\", sampleType)\n\t\t}\n\t}\n\treturn nil\n}\n\n// SFlowFlowSample represents a sampled packet and contains\n// one or more records describing the packet\ntype SFlowFlowSample struct {\n\tEnterpriseID          SFlowEnterpriseID\n\tFormat                SFlowSampleType\n\tSampleLength          uint32\n\tSequenceNumber        uint32\n\tSourceIDClass         SFlowSourceFormat\n\tSourceIDIndex         SFlowSourceValue\n\tSamplingRate          uint32\n\tSamplePool            uint32\n\tDropped               uint32\n\tInputInterfaceFormat  uint32\n\tInputInterface        uint32\n\tOutputInterfaceFormat uint32\n\tOutputInterface       uint32\n\tRecordCount           uint32\n\tRecords               []SFlowRecord\n}\n\n// Flow samples have the following structure. Note\n// the bit fields to encode the Enterprise ID and the\n// Flow record format: type 1\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  sample length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |          int sample sequence number           |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |id type |       src id index value             |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |               int sampling rate               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                int sample pool                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    int drops                  |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                 int input ifIndex             |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                int output ifIndex             |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |               int number of records           |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /                   flow records                /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\n// Flow samples have the following structure.\n// Flow record format: type 3\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  sample length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |          int sample sequence number           |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |               int src id type                 |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |             int src id index value            |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |               int sampling rate               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                int sample pool                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    int drops                  |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |           int input interface format          |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |           int input interface value           |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |           int output interface format         |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |           int output interface value          |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |               int number of records           |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /                   flow records                /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\ntype SFlowFlowDataFormat uint32\n\nfunc (fdf SFlowFlowDataFormat) decode() (SFlowEnterpriseID, SFlowFlowRecordType) {\n\tleftField := fdf >> 12\n\trightField := uint32(0xFFF) & uint32(fdf)\n\treturn SFlowEnterpriseID(leftField), SFlowFlowRecordType(rightField)\n}\n\nfunc (fs SFlowFlowSample) GetRecords() []SFlowRecord {\n\treturn fs.Records\n}\n\nfunc (fs SFlowFlowSample) GetType() SFlowSampleType {\n\treturn SFlowTypeFlowSample\n}\n\nfunc skipRecord(data *[]byte) {\n\trecordLength := int(binary.BigEndian.Uint32((*data)[4:]))\n\t*data = (*data)[(recordLength+((4-recordLength)%4))+8:]\n}\n\nfunc decodeFlowSample(data *[]byte, expanded bool) (SFlowFlowSample, error) {\n\ts := SFlowFlowSample{}\n\tvar sdf SFlowDataFormat\n\t*data, sdf = (*data)[4:], SFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\tvar sdc SFlowDataSource\n\n\ts.EnterpriseID, s.Format = sdf.decode()\n\tif len(*data) < 4 {\n\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, s.SampleLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, s.SequenceNumber = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif expanded {\n\t\tif len(*data) < 4 {\n\t\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t\t}\n\t\t*data, s.SourceIDClass = (*data)[4:], SFlowSourceFormat(binary.BigEndian.Uint32((*data)[:4]))\n\t\tif len(*data) < 4 {\n\t\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t\t}\n\t\t*data, s.SourceIDIndex = (*data)[4:], SFlowSourceValue(binary.BigEndian.Uint32((*data)[:4]))\n\t} else {\n\t\tif len(*data) < 4 {\n\t\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t\t}\n\t\t*data, sdc = (*data)[4:], SFlowDataSource(binary.BigEndian.Uint32((*data)[:4]))\n\t\ts.SourceIDClass, s.SourceIDIndex = sdc.decode()\n\t}\n\tif len(*data) < 4 {\n\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, s.SamplingRate = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, s.SamplePool = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, s.Dropped = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\tif expanded {\n\t\tif len(*data) < 4 {\n\t\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t\t}\n\t\t*data, s.InputInterfaceFormat = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t\tif len(*data) < 4 {\n\t\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t\t}\n\t\t*data, s.InputInterface = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t\tif len(*data) < 4 {\n\t\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t\t}\n\t\t*data, s.OutputInterfaceFormat = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t\tif len(*data) < 4 {\n\t\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t\t}\n\t\t*data, s.OutputInterface = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t} else {\n\t\tif len(*data) < 4 {\n\t\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t\t}\n\t\t*data, s.InputInterface = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t\tif len(*data) < 4 {\n\t\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t\t}\n\t\t*data, s.OutputInterface = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t}\n\tif len(*data) < 4 {\n\t\treturn SFlowFlowSample{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, s.RecordCount = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\tfor i := uint32(0); i < s.RecordCount; i++ {\n\t\trdf := SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\t\tenterpriseID, flowRecordType := rdf.decode()\n\n\t\t// Try to decode when EnterpriseID is 0 signaling\n\t\t// default sflow structs are used according specification\n\t\t// Unexpected behavior detected for e.g. with pmacct\n\t\tif enterpriseID == 0 {\n\t\t\tswitch flowRecordType {\n\t\t\tcase SFlowTypeRawPacketFlow:\n\t\t\t\tif record, err := decodeRawPacketFlowRecord(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeExtendedUserFlow:\n\t\t\t\tif record, err := decodeExtendedUserFlow(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeExtendedUrlFlow:\n\t\t\t\tif record, err := decodeExtendedURLRecord(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeExtendedSwitchFlow:\n\t\t\t\tif record, err := decodeExtendedSwitchFlowRecord(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeExtendedRouterFlow:\n\t\t\t\tif record, err := decodeExtendedRouterFlowRecord(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeExtendedGatewayFlow:\n\t\t\t\tif record, err := decodeExtendedGatewayFlowRecord(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeEthernetFrameFlow:\n\t\t\t\tif record, err := decodeEthernetFrameFlowRecord(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeIpv4Flow:\n\t\t\t\tif record, err := decodeSFlowIpv4Record(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeIpv6Flow:\n\t\t\t\tif record, err := decodeSFlowIpv6Record(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeExtendedMlpsFlow:\n\t\t\t\t// TODO\n\t\t\t\tskipRecord(data)\n\t\t\t\treturn s, errors.New(\"skipping TypeExtendedMlpsFlow\")\n\t\t\tcase SFlowTypeExtendedNatFlow:\n\t\t\t\t// TODO\n\t\t\t\tskipRecord(data)\n\t\t\t\treturn s, errors.New(\"skipping TypeExtendedNatFlow\")\n\t\t\tcase SFlowTypeExtendedMlpsTunnelFlow:\n\t\t\t\t// TODO\n\t\t\t\tskipRecord(data)\n\t\t\t\treturn s, errors.New(\"skipping TypeExtendedMlpsTunnelFlow\")\n\t\t\tcase SFlowTypeExtendedMlpsVcFlow:\n\t\t\t\t// TODO\n\t\t\t\tskipRecord(data)\n\t\t\t\treturn s, errors.New(\"skipping TypeExtendedMlpsVcFlow\")\n\t\t\tcase SFlowTypeExtendedMlpsFecFlow:\n\t\t\t\t// TODO\n\t\t\t\tskipRecord(data)\n\t\t\t\treturn s, errors.New(\"skipping TypeExtendedMlpsFecFlow\")\n\t\t\tcase SFlowTypeExtendedMlpsLvpFecFlow:\n\t\t\t\t// TODO\n\t\t\t\tskipRecord(data)\n\t\t\t\treturn s, errors.New(\"skipping TypeExtendedMlpsLvpFecFlow\")\n\t\t\tcase SFlowTypeExtendedVlanFlow:\n\t\t\t\t// TODO\n\t\t\t\tskipRecord(data)\n\t\t\t\treturn s, errors.New(\"skipping TypeExtendedVlanFlow\")\n\t\t\tcase SFlowTypeExtendedIpv4TunnelEgressFlow:\n\t\t\t\tif record, err := decodeExtendedIpv4TunnelEgress(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeExtendedIpv4TunnelIngressFlow:\n\t\t\t\tif record, err := decodeExtendedIpv4TunnelIngress(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeExtendedIpv6TunnelEgressFlow:\n\t\t\t\tif record, err := decodeExtendedIpv6TunnelEgress(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeExtendedIpv6TunnelIngressFlow:\n\t\t\t\tif record, err := decodeExtendedIpv6TunnelIngress(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeExtendedDecapsulateEgressFlow:\n\t\t\t\tif record, err := decodeExtendedDecapsulateEgress(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeExtendedDecapsulateIngressFlow:\n\t\t\t\tif record, err := decodeExtendedDecapsulateIngress(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeExtendedVniEgressFlow:\n\t\t\t\tif record, err := decodeExtendedVniEgress(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tcase SFlowTypeExtendedVniIngressFlow:\n\t\t\t\tif record, err := decodeExtendedVniIngress(data); err == nil {\n\t\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t\t} else {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn s, fmt.Errorf(\"Unsupported flow record type: %d\", flowRecordType)\n\t\t\t}\n\t\t} else {\n\t\t\tskipRecord(data)\n\t\t}\n\t}\n\treturn s, nil\n}\n\n// Counter samples report information about various counter\n// objects. Typically these are items like IfInOctets, or\n// CPU / Memory stats, etc. SFlow will report these at regular\n// intervals as configured on the agent. If one were sufficiently\n// industrious, this could be used to replace the typical\n// SNMP polling used for such things.\ntype SFlowCounterSample struct {\n\tEnterpriseID   SFlowEnterpriseID\n\tFormat         SFlowSampleType\n\tSampleLength   uint32\n\tSequenceNumber uint32\n\tSourceIDClass  SFlowSourceFormat\n\tSourceIDIndex  SFlowSourceValue\n\tRecordCount    uint32\n\tRecords        []SFlowRecord\n}\n\n// Counter samples have the following structure:\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |          int sample sequence number           |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |id type |       src id index value             |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |               int number of records           |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /                counter records                /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\ntype SFlowCounterDataFormat uint32\n\nfunc (cdf SFlowCounterDataFormat) decode() (SFlowEnterpriseID, SFlowCounterRecordType) {\n\tleftField := cdf >> 12\n\trightField := uint32(0xFFF) & uint32(cdf)\n\treturn SFlowEnterpriseID(leftField), SFlowCounterRecordType(rightField)\n}\n\n// GetRecords will return a slice of interface types\n// representing records. A type switch can be used to\n// get at the underlying SFlowCounterRecordType.\nfunc (cs SFlowCounterSample) GetRecords() []SFlowRecord {\n\treturn cs.Records\n}\n\n// GetType will report the type of sample. Only the\n// compact form of counter samples is supported\nfunc (cs SFlowCounterSample) GetType() SFlowSampleType {\n\treturn SFlowTypeCounterSample\n}\n\ntype SFlowCounterRecordType uint32\n\nconst (\n\tSFlowTypeGenericInterfaceCounters   SFlowCounterRecordType = 1\n\tSFlowTypeEthernetInterfaceCounters  SFlowCounterRecordType = 2\n\tSFlowTypeTokenRingInterfaceCounters SFlowCounterRecordType = 3\n\tSFlowType100BaseVGInterfaceCounters SFlowCounterRecordType = 4\n\tSFlowTypeVLANCounters               SFlowCounterRecordType = 5\n\tSFlowTypeLACPCounters               SFlowCounterRecordType = 7\n\tSFlowTypeProcessorCounters          SFlowCounterRecordType = 1001\n\tSFlowTypeOpenflowPortCounters       SFlowCounterRecordType = 1004\n\tSFlowTypePORTNAMECounters           SFlowCounterRecordType = 1005\n\tSFLowTypeAPPRESOURCESCounters       SFlowCounterRecordType = 2203\n\tSFlowTypeOVSDPCounters              SFlowCounterRecordType = 2207\n)\n\nfunc (cr SFlowCounterRecordType) String() string {\n\tswitch cr {\n\tcase SFlowTypeGenericInterfaceCounters:\n\t\treturn \"Generic Interface Counters\"\n\tcase SFlowTypeEthernetInterfaceCounters:\n\t\treturn \"Ethernet Interface Counters\"\n\tcase SFlowTypeTokenRingInterfaceCounters:\n\t\treturn \"Token Ring Interface Counters\"\n\tcase SFlowType100BaseVGInterfaceCounters:\n\t\treturn \"100BaseVG Interface Counters\"\n\tcase SFlowTypeVLANCounters:\n\t\treturn \"VLAN Counters\"\n\tcase SFlowTypeLACPCounters:\n\t\treturn \"LACP Counters\"\n\tcase SFlowTypeProcessorCounters:\n\t\treturn \"Processor Counters\"\n\tcase SFlowTypeOpenflowPortCounters:\n\t\treturn \"Openflow Port Counters\"\n\tcase SFlowTypePORTNAMECounters:\n\t\treturn \"PORT NAME Counters\"\n\tcase SFLowTypeAPPRESOURCESCounters:\n\t\treturn \"App Resources Counters\"\n\tcase SFlowTypeOVSDPCounters:\n\t\treturn \"OVSDP Counters\"\n\tdefault:\n\t\treturn \"\"\n\n\t}\n}\n\nfunc decodeCounterSample(data *[]byte, expanded bool) (SFlowCounterSample, error) {\n\ts := SFlowCounterSample{}\n\tvar sdc SFlowDataSource\n\tvar sdce SFlowDataSourceExpanded\n\tvar sdf SFlowDataFormat\n\n\t*data, sdf = (*data)[4:], SFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\ts.EnterpriseID, s.Format = sdf.decode()\n\t*data, s.SampleLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, s.SequenceNumber = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif expanded {\n\t\t*data, sdce = (*data)[8:], SFlowDataSourceExpanded{SFlowSourceFormat(binary.BigEndian.Uint32((*data)[:4])), SFlowSourceValue(binary.BigEndian.Uint32((*data)[4:8]))}\n\t\ts.SourceIDClass, s.SourceIDIndex = sdce.decode()\n\t} else {\n\t\t*data, sdc = (*data)[4:], SFlowDataSource(binary.BigEndian.Uint32((*data)[:4]))\n\t\ts.SourceIDClass, s.SourceIDIndex = sdc.decode()\n\t}\n\t*data, s.RecordCount = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\tfor i := uint32(0); i < s.RecordCount; i++ {\n\t\tcdf := SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\t\t_, counterRecordType := cdf.decode()\n\t\tswitch counterRecordType {\n\t\tcase SFlowTypeGenericInterfaceCounters:\n\t\t\tif record, err := decodeGenericInterfaceCounters(data); err == nil {\n\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t} else {\n\t\t\t\treturn s, err\n\t\t\t}\n\t\tcase SFlowTypeEthernetInterfaceCounters:\n\t\t\tif record, err := decodeEthernetCounters(data); err == nil {\n\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t} else {\n\t\t\t\treturn s, err\n\t\t\t}\n\t\tcase SFlowTypeTokenRingInterfaceCounters:\n\t\t\tskipRecord(data)\n\t\t\treturn s, errors.New(\"skipping TypeTokenRingInterfaceCounters\")\n\t\tcase SFlowType100BaseVGInterfaceCounters:\n\t\t\tskipRecord(data)\n\t\t\treturn s, errors.New(\"skipping Type100BaseVGInterfaceCounters\")\n\t\tcase SFlowTypeVLANCounters:\n\t\t\tif record, err := decodeVLANCounters(data); err == nil {\n\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t} else {\n\t\t\t\treturn s, err\n\t\t\t}\n\t\tcase SFlowTypeLACPCounters:\n\t\t\tif record, err := decodeLACPCounters(data); err == nil {\n\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t} else {\n\t\t\t\treturn s, err\n\t\t\t}\n\t\tcase SFlowTypeProcessorCounters:\n\t\t\tif record, err := decodeProcessorCounters(data); err == nil {\n\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t} else {\n\t\t\t\treturn s, err\n\t\t\t}\n\t\tcase SFlowTypeOpenflowPortCounters:\n\t\t\tif record, err := decodeOpenflowportCounters(data); err == nil {\n\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t} else {\n\t\t\t\treturn s, err\n\t\t\t}\n\t\tcase SFlowTypePORTNAMECounters:\n\t\t\tif record, err := decodePortnameCounters(data); err == nil {\n\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t} else {\n\t\t\t\treturn s, err\n\t\t\t}\n\t\tcase SFLowTypeAPPRESOURCESCounters:\n\t\t\tif record, err := decodeAppresourcesCounters(data); err == nil {\n\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t} else {\n\t\t\t\treturn s, err\n\t\t\t}\n\t\tcase SFlowTypeOVSDPCounters:\n\t\t\tif record, err := decodeOVSDPCounters(data); err == nil {\n\t\t\t\ts.Records = append(s.Records, record)\n\t\t\t} else {\n\t\t\t\treturn s, err\n\t\t\t}\n\t\tdefault:\n\t\t\treturn s, fmt.Errorf(\"Invalid counter record type: %d\", counterRecordType)\n\t\t}\n\t}\n\treturn s, nil\n}\n\n// SFlowBaseFlowRecord holds the fields common to all records\n// of type SFlowFlowRecordType\ntype SFlowBaseFlowRecord struct {\n\tEnterpriseID   SFlowEnterpriseID\n\tFormat         SFlowFlowRecordType\n\tFlowDataLength uint32\n}\n\nfunc (bfr SFlowBaseFlowRecord) GetType() SFlowFlowRecordType {\n\treturn bfr.Format\n}\n\n// SFlowFlowRecordType denotes what kind of Flow Record is\n// represented. See RFC 3176\ntype SFlowFlowRecordType uint32\n\nconst (\n\tSFlowTypeRawPacketFlow                  SFlowFlowRecordType = 1\n\tSFlowTypeEthernetFrameFlow              SFlowFlowRecordType = 2\n\tSFlowTypeIpv4Flow                       SFlowFlowRecordType = 3\n\tSFlowTypeIpv6Flow                       SFlowFlowRecordType = 4\n\tSFlowTypeExtendedSwitchFlow             SFlowFlowRecordType = 1001\n\tSFlowTypeExtendedRouterFlow             SFlowFlowRecordType = 1002\n\tSFlowTypeExtendedGatewayFlow            SFlowFlowRecordType = 1003\n\tSFlowTypeExtendedUserFlow               SFlowFlowRecordType = 1004\n\tSFlowTypeExtendedUrlFlow                SFlowFlowRecordType = 1005\n\tSFlowTypeExtendedMlpsFlow               SFlowFlowRecordType = 1006\n\tSFlowTypeExtendedNatFlow                SFlowFlowRecordType = 1007\n\tSFlowTypeExtendedMlpsTunnelFlow         SFlowFlowRecordType = 1008\n\tSFlowTypeExtendedMlpsVcFlow             SFlowFlowRecordType = 1009\n\tSFlowTypeExtendedMlpsFecFlow            SFlowFlowRecordType = 1010\n\tSFlowTypeExtendedMlpsLvpFecFlow         SFlowFlowRecordType = 1011\n\tSFlowTypeExtendedVlanFlow               SFlowFlowRecordType = 1012\n\tSFlowTypeExtendedIpv4TunnelEgressFlow   SFlowFlowRecordType = 1023\n\tSFlowTypeExtendedIpv4TunnelIngressFlow  SFlowFlowRecordType = 1024\n\tSFlowTypeExtendedIpv6TunnelEgressFlow   SFlowFlowRecordType = 1025\n\tSFlowTypeExtendedIpv6TunnelIngressFlow  SFlowFlowRecordType = 1026\n\tSFlowTypeExtendedDecapsulateEgressFlow  SFlowFlowRecordType = 1027\n\tSFlowTypeExtendedDecapsulateIngressFlow SFlowFlowRecordType = 1028\n\tSFlowTypeExtendedVniEgressFlow          SFlowFlowRecordType = 1029\n\tSFlowTypeExtendedVniIngressFlow         SFlowFlowRecordType = 1030\n)\n\nfunc (rt SFlowFlowRecordType) String() string {\n\tswitch rt {\n\tcase SFlowTypeRawPacketFlow:\n\t\treturn \"Raw Packet Flow Record\"\n\tcase SFlowTypeEthernetFrameFlow:\n\t\treturn \"Ethernet Frame Flow Record\"\n\tcase SFlowTypeIpv4Flow:\n\t\treturn \"IPv4 Flow Record\"\n\tcase SFlowTypeIpv6Flow:\n\t\treturn \"IPv6 Flow Record\"\n\tcase SFlowTypeExtendedSwitchFlow:\n\t\treturn \"Extended Switch Flow Record\"\n\tcase SFlowTypeExtendedRouterFlow:\n\t\treturn \"Extended Router Flow Record\"\n\tcase SFlowTypeExtendedGatewayFlow:\n\t\treturn \"Extended Gateway Flow Record\"\n\tcase SFlowTypeExtendedUserFlow:\n\t\treturn \"Extended User Flow Record\"\n\tcase SFlowTypeExtendedUrlFlow:\n\t\treturn \"Extended URL Flow Record\"\n\tcase SFlowTypeExtendedMlpsFlow:\n\t\treturn \"Extended MPLS Flow Record\"\n\tcase SFlowTypeExtendedNatFlow:\n\t\treturn \"Extended NAT Flow Record\"\n\tcase SFlowTypeExtendedMlpsTunnelFlow:\n\t\treturn \"Extended MPLS Tunnel Flow Record\"\n\tcase SFlowTypeExtendedMlpsVcFlow:\n\t\treturn \"Extended MPLS VC Flow Record\"\n\tcase SFlowTypeExtendedMlpsFecFlow:\n\t\treturn \"Extended MPLS FEC Flow Record\"\n\tcase SFlowTypeExtendedMlpsLvpFecFlow:\n\t\treturn \"Extended MPLS LVP FEC Flow Record\"\n\tcase SFlowTypeExtendedVlanFlow:\n\t\treturn \"Extended VLAN Flow Record\"\n\tcase SFlowTypeExtendedIpv4TunnelEgressFlow:\n\t\treturn \"Extended IPv4 Tunnel Egress Record\"\n\tcase SFlowTypeExtendedIpv4TunnelIngressFlow:\n\t\treturn \"Extended IPv4 Tunnel Ingress Record\"\n\tcase SFlowTypeExtendedIpv6TunnelEgressFlow:\n\t\treturn \"Extended IPv6 Tunnel Egress Record\"\n\tcase SFlowTypeExtendedIpv6TunnelIngressFlow:\n\t\treturn \"Extended IPv6 Tunnel Ingress Record\"\n\tcase SFlowTypeExtendedDecapsulateEgressFlow:\n\t\treturn \"Extended Decapsulate Egress Record\"\n\tcase SFlowTypeExtendedDecapsulateIngressFlow:\n\t\treturn \"Extended Decapsulate Ingress Record\"\n\tcase SFlowTypeExtendedVniEgressFlow:\n\t\treturn \"Extended VNI Ingress Record\"\n\tcase SFlowTypeExtendedVniIngressFlow:\n\t\treturn \"Extended VNI Ingress Record\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\n// SFlowRawPacketFlowRecords hold information about a sampled\n// packet grabbed as it transited the agent. This is\n// perhaps the most useful and interesting record type,\n// as it holds the headers of the sampled packet and\n// can be used to build up a complete picture of the\n// traffic patterns on a network.\n//\n// The raw packet header is sent back into gopacket for\n// decoding, and the resulting gopackt.Packet is stored\n// in the Header member\ntype SFlowRawPacketFlowRecord struct {\n\tSFlowBaseFlowRecord\n\tHeaderProtocol SFlowRawHeaderProtocol\n\tFrameLength    uint32\n\tPayloadRemoved uint32\n\tHeaderLength   uint32\n\tHeader         gopacket.Packet\n}\n\n// Raw packet record types have the following structure:\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                 Header Protocol               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                 Frame Length                  |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                 Payload Removed               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                 Header Length                 |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  \\                     Header                    \\\n//  \\                                               \\\n//  \\                                               \\\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\ntype SFlowRawHeaderProtocol uint32\n\nconst (\n\tSFlowProtoEthernet   SFlowRawHeaderProtocol = 1\n\tSFlowProtoISO88024   SFlowRawHeaderProtocol = 2\n\tSFlowProtoISO88025   SFlowRawHeaderProtocol = 3\n\tSFlowProtoFDDI       SFlowRawHeaderProtocol = 4\n\tSFlowProtoFrameRelay SFlowRawHeaderProtocol = 5\n\tSFlowProtoX25        SFlowRawHeaderProtocol = 6\n\tSFlowProtoPPP        SFlowRawHeaderProtocol = 7\n\tSFlowProtoSMDS       SFlowRawHeaderProtocol = 8\n\tSFlowProtoAAL5       SFlowRawHeaderProtocol = 9\n\tSFlowProtoAAL5_IP    SFlowRawHeaderProtocol = 10 /* e.g. Cisco AAL5 mux */\n\tSFlowProtoIPv4       SFlowRawHeaderProtocol = 11\n\tSFlowProtoIPv6       SFlowRawHeaderProtocol = 12\n\tSFlowProtoMPLS       SFlowRawHeaderProtocol = 13\n\tSFlowProtoPOS        SFlowRawHeaderProtocol = 14 /* RFC 1662, 2615 */\n)\n\nfunc (sfhp SFlowRawHeaderProtocol) String() string {\n\tswitch sfhp {\n\tcase SFlowProtoEthernet:\n\t\treturn \"ETHERNET-ISO88023\"\n\tcase SFlowProtoISO88024:\n\t\treturn \"ISO88024-TOKENBUS\"\n\tcase SFlowProtoISO88025:\n\t\treturn \"ISO88025-TOKENRING\"\n\tcase SFlowProtoFDDI:\n\t\treturn \"FDDI\"\n\tcase SFlowProtoFrameRelay:\n\t\treturn \"FRAME-RELAY\"\n\tcase SFlowProtoX25:\n\t\treturn \"X25\"\n\tcase SFlowProtoPPP:\n\t\treturn \"PPP\"\n\tcase SFlowProtoSMDS:\n\t\treturn \"SMDS\"\n\tcase SFlowProtoAAL5:\n\t\treturn \"AAL5\"\n\tcase SFlowProtoAAL5_IP:\n\t\treturn \"AAL5-IP\"\n\tcase SFlowProtoIPv4:\n\t\treturn \"IPv4\"\n\tcase SFlowProtoIPv6:\n\t\treturn \"IPv6\"\n\tcase SFlowProtoMPLS:\n\t\treturn \"MPLS\"\n\tcase SFlowProtoPOS:\n\t\treturn \"POS\"\n\t}\n\treturn \"UNKNOWN\"\n}\n\nfunc decodeRawPacketFlowRecord(data *[]byte) (SFlowRawPacketFlowRecord, error) {\n\trec := SFlowRawPacketFlowRecord{}\n\theader := []byte{}\n\tvar fdf SFlowFlowDataFormat\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\trec.EnterpriseID, rec.Format = fdf.decode()\n\t*data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, rec.HeaderProtocol = (*data)[4:], SFlowRawHeaderProtocol(binary.BigEndian.Uint32((*data)[:4]))\n\t*data, rec.FrameLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, rec.PayloadRemoved = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, rec.HeaderLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\theaderLenWithPadding := int(rec.HeaderLength + ((4 - rec.HeaderLength) % 4))\n\t*data, header = (*data)[headerLenWithPadding:], (*data)[:headerLenWithPadding]\n\trec.Header = gopacket.NewPacket(header, LayerTypeEthernet, gopacket.Default)\n\treturn rec, nil\n}\n\n// SFlowExtendedSwitchFlowRecord give additional information\n// about the sampled packet if it's available. It's mainly\n// useful for getting at the incoming and outgoing VLANs\n// An agent may or may not provide this information.\ntype SFlowExtendedSwitchFlowRecord struct {\n\tSFlowBaseFlowRecord\n\tIncomingVLAN         uint32\n\tIncomingVLANPriority uint32\n\tOutgoingVLAN         uint32\n\tOutgoingVLANPriority uint32\n}\n\n// Extended switch records have the following structure:\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   Incoming VLAN               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                Incoming VLAN Priority         |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   Outgoing VLAN               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                Outgoing VLAN Priority         |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\nfunc decodeExtendedSwitchFlowRecord(data *[]byte) (SFlowExtendedSwitchFlowRecord, error) {\n\tes := SFlowExtendedSwitchFlowRecord{}\n\tvar fdf SFlowFlowDataFormat\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\tes.EnterpriseID, es.Format = fdf.decode()\n\t*data, es.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, es.IncomingVLAN = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, es.IncomingVLANPriority = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, es.OutgoingVLAN = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, es.OutgoingVLANPriority = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\treturn es, nil\n}\n\n// SFlowExtendedRouterFlowRecord gives additional information\n// about the layer 3 routing information used to forward\n// the packet\ntype SFlowExtendedRouterFlowRecord struct {\n\tSFlowBaseFlowRecord\n\tNextHop                net.IP\n\tNextHopSourceMask      uint32\n\tNextHopDestinationMask uint32\n}\n\n// Extended router records have the following structure:\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |   IP version of next hop router (1=v4|2=v6)   |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /     Next Hop address (v4=4byte|v6=16byte)     /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |              Next Hop Source Mask             |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |              Next Hop Destination Mask        |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\nfunc decodeExtendedRouterFlowRecord(data *[]byte) (SFlowExtendedRouterFlowRecord, error) {\n\ter := SFlowExtendedRouterFlowRecord{}\n\tvar fdf SFlowFlowDataFormat\n\tvar extendedRouterAddressType SFlowIPType\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\ter.EnterpriseID, er.Format = fdf.decode()\n\t*data, er.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, extendedRouterAddressType = (*data)[4:], SFlowIPType(binary.BigEndian.Uint32((*data)[:4]))\n\t*data, er.NextHop = (*data)[extendedRouterAddressType.Length():], (*data)[:extendedRouterAddressType.Length()]\n\t*data, er.NextHopSourceMask = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, er.NextHopDestinationMask = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\treturn er, nil\n}\n\n// SFlowExtendedGatewayFlowRecord describes information treasured by\n// nework engineers everywhere: AS path information listing which\n// BGP peer sent the packet, and various other BGP related info.\n// This information is vital because it gives a picture of how much\n// traffic is being sent from / received by various BGP peers.\n\n// Extended gateway records have the following structure:\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |   IP version of next hop router (1=v4|2=v6)   |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /     Next Hop address (v4=4byte|v6=16byte)     /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                       AS                      |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  Source AS                    |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    Peer AS                    |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  AS Path Count                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /                AS Path / Sequence             /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /                   Communities                 /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    Local Pref                 |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\n// AS Path / Sequence:\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |     AS Source Type (Path=1 / Sequence=2)      |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |              Path / Sequence length           |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /              Path / Sequence Members          /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\n// Communities:\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                communitiy length              |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /              communitiy Members               /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\ntype SFlowExtendedGatewayFlowRecord struct {\n\tSFlowBaseFlowRecord\n\tNextHop     net.IP\n\tAS          uint32\n\tSourceAS    uint32\n\tPeerAS      uint32\n\tASPathCount uint32\n\tASPath      []SFlowASDestination\n\tCommunities []uint32\n\tLocalPref   uint32\n}\n\ntype SFlowASPathType uint32\n\nconst (\n\tSFlowASSet      SFlowASPathType = 1\n\tSFlowASSequence SFlowASPathType = 2\n)\n\nfunc (apt SFlowASPathType) String() string {\n\tswitch apt {\n\tcase SFlowASSet:\n\t\treturn \"AS Set\"\n\tcase SFlowASSequence:\n\t\treturn \"AS Sequence\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\ntype SFlowASDestination struct {\n\tType    SFlowASPathType\n\tCount   uint32\n\tMembers []uint32\n}\n\nfunc (asd SFlowASDestination) String() string {\n\tswitch asd.Type {\n\tcase SFlowASSet:\n\t\treturn fmt.Sprint(\"AS Set:\", asd.Members)\n\tcase SFlowASSequence:\n\t\treturn fmt.Sprint(\"AS Sequence:\", asd.Members)\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc (ad *SFlowASDestination) decodePath(data *[]byte) {\n\t*data, ad.Type = (*data)[4:], SFlowASPathType(binary.BigEndian.Uint32((*data)[:4]))\n\t*data, ad.Count = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tad.Members = make([]uint32, ad.Count)\n\tfor i := uint32(0); i < ad.Count; i++ {\n\t\tvar member uint32\n\t\t*data, member = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t\tad.Members[i] = member\n\t}\n}\n\nfunc decodeExtendedGatewayFlowRecord(data *[]byte) (SFlowExtendedGatewayFlowRecord, error) {\n\teg := SFlowExtendedGatewayFlowRecord{}\n\tvar fdf SFlowFlowDataFormat\n\tvar extendedGatewayAddressType SFlowIPType\n\tvar communitiesLength uint32\n\tvar community uint32\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\teg.EnterpriseID, eg.Format = fdf.decode()\n\t*data, eg.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, extendedGatewayAddressType = (*data)[4:], SFlowIPType(binary.BigEndian.Uint32((*data)[:4]))\n\t*data, eg.NextHop = (*data)[extendedGatewayAddressType.Length():], (*data)[:extendedGatewayAddressType.Length()]\n\t*data, eg.AS = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, eg.SourceAS = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, eg.PeerAS = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, eg.ASPathCount = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tfor i := uint32(0); i < eg.ASPathCount; i++ {\n\t\tasPath := SFlowASDestination{}\n\t\tasPath.decodePath(data)\n\t\teg.ASPath = append(eg.ASPath, asPath)\n\t}\n\t*data, communitiesLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\teg.Communities = make([]uint32, communitiesLength)\n\tfor j := uint32(0); j < communitiesLength; j++ {\n\t\t*data, community = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t\teg.Communities[j] = community\n\t}\n\t*data, eg.LocalPref = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\treturn eg, nil\n}\n\n// **************************************************\n//  Extended URL Flow Record\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   direction                   |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                      URL                      |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                      Host                     |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\ntype SFlowURLDirection uint32\n\nconst (\n\tSFlowURLsrc SFlowURLDirection = 1\n\tSFlowURLdst SFlowURLDirection = 2\n)\n\nfunc (urld SFlowURLDirection) String() string {\n\tswitch urld {\n\tcase SFlowURLsrc:\n\t\treturn \"Source address is the server\"\n\tcase SFlowURLdst:\n\t\treturn \"Destination address is the server\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\ntype SFlowExtendedURLRecord struct {\n\tSFlowBaseFlowRecord\n\tDirection SFlowURLDirection\n\tURL       string\n\tHost      string\n}\n\nfunc decodeExtendedURLRecord(data *[]byte) (SFlowExtendedURLRecord, error) {\n\teur := SFlowExtendedURLRecord{}\n\tvar fdf SFlowFlowDataFormat\n\tvar urlLen uint32\n\tvar urlLenWithPad int\n\tvar hostLen uint32\n\tvar hostLenWithPad int\n\tvar urlBytes []byte\n\tvar hostBytes []byte\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\teur.EnterpriseID, eur.Format = fdf.decode()\n\t*data, eur.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, eur.Direction = (*data)[4:], SFlowURLDirection(binary.BigEndian.Uint32((*data)[:4]))\n\t*data, urlLen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\turlLenWithPad = int(urlLen + ((4 - urlLen) % 4))\n\t*data, urlBytes = (*data)[urlLenWithPad:], (*data)[:urlLenWithPad]\n\teur.URL = string(urlBytes[:urlLen])\n\t*data, hostLen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\thostLenWithPad = int(hostLen + ((4 - hostLen) % 4))\n\t*data, hostBytes = (*data)[hostLenWithPad:], (*data)[:hostLenWithPad]\n\teur.Host = string(hostBytes[:hostLen])\n\treturn eur, nil\n}\n\n// **************************************************\n//  Extended User Flow Record\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                Source Character Set           |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                 Source User Id                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |              Destination Character Set        |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |               Destination User ID             |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\ntype SFlowExtendedUserFlow struct {\n\tSFlowBaseFlowRecord\n\tSourceCharSet      SFlowCharSet\n\tSourceUserID       string\n\tDestinationCharSet SFlowCharSet\n\tDestinationUserID  string\n}\n\ntype SFlowCharSet uint32\n\nconst (\n\tSFlowCSunknown                 SFlowCharSet = 2\n\tSFlowCSASCII                   SFlowCharSet = 3\n\tSFlowCSISOLatin1               SFlowCharSet = 4\n\tSFlowCSISOLatin2               SFlowCharSet = 5\n\tSFlowCSISOLatin3               SFlowCharSet = 6\n\tSFlowCSISOLatin4               SFlowCharSet = 7\n\tSFlowCSISOLatinCyrillic        SFlowCharSet = 8\n\tSFlowCSISOLatinArabic          SFlowCharSet = 9\n\tSFlowCSISOLatinGreek           SFlowCharSet = 10\n\tSFlowCSISOLatinHebrew          SFlowCharSet = 11\n\tSFlowCSISOLatin5               SFlowCharSet = 12\n\tSFlowCSISOLatin6               SFlowCharSet = 13\n\tSFlowCSISOTextComm             SFlowCharSet = 14\n\tSFlowCSHalfWidthKatakana       SFlowCharSet = 15\n\tSFlowCSJISEncoding             SFlowCharSet = 16\n\tSFlowCSShiftJIS                SFlowCharSet = 17\n\tSFlowCSEUCPkdFmtJapanese       SFlowCharSet = 18\n\tSFlowCSEUCFixWidJapanese       SFlowCharSet = 19\n\tSFlowCSISO4UnitedKingdom       SFlowCharSet = 20\n\tSFlowCSISO11SwedishForNames    SFlowCharSet = 21\n\tSFlowCSISO15Italian            SFlowCharSet = 22\n\tSFlowCSISO17Spanish            SFlowCharSet = 23\n\tSFlowCSISO21German             SFlowCharSet = 24\n\tSFlowCSISO60DanishNorwegian    SFlowCharSet = 25\n\tSFlowCSISO69French             SFlowCharSet = 26\n\tSFlowCSISO10646UTF1            SFlowCharSet = 27\n\tSFlowCSISO646basic1983         SFlowCharSet = 28\n\tSFlowCSINVARIANT               SFlowCharSet = 29\n\tSFlowCSISO2IntlRefVersion      SFlowCharSet = 30\n\tSFlowCSNATSSEFI                SFlowCharSet = 31\n\tSFlowCSNATSSEFIADD             SFlowCharSet = 32\n\tSFlowCSNATSDANO                SFlowCharSet = 33\n\tSFlowCSNATSDANOADD             SFlowCharSet = 34\n\tSFlowCSISO10Swedish            SFlowCharSet = 35\n\tSFlowCSKSC56011987             SFlowCharSet = 36\n\tSFlowCSISO2022KR               SFlowCharSet = 37\n\tSFlowCSEUCKR                   SFlowCharSet = 38\n\tSFlowCSISO2022JP               SFlowCharSet = 39\n\tSFlowCSISO2022JP2              SFlowCharSet = 40\n\tSFlowCSISO13JISC6220jp         SFlowCharSet = 41\n\tSFlowCSISO14JISC6220ro         SFlowCharSet = 42\n\tSFlowCSISO16Portuguese         SFlowCharSet = 43\n\tSFlowCSISO18Greek7Old          SFlowCharSet = 44\n\tSFlowCSISO19LatinGreek         SFlowCharSet = 45\n\tSFlowCSISO25French             SFlowCharSet = 46\n\tSFlowCSISO27LatinGreek1        SFlowCharSet = 47\n\tSFlowCSISO5427Cyrillic         SFlowCharSet = 48\n\tSFlowCSISO42JISC62261978       SFlowCharSet = 49\n\tSFlowCSISO47BSViewdata         SFlowCharSet = 50\n\tSFlowCSISO49INIS               SFlowCharSet = 51\n\tSFlowCSISO50INIS8              SFlowCharSet = 52\n\tSFlowCSISO51INISCyrillic       SFlowCharSet = 53\n\tSFlowCSISO54271981             SFlowCharSet = 54\n\tSFlowCSISO5428Greek            SFlowCharSet = 55\n\tSFlowCSISO57GB1988             SFlowCharSet = 56\n\tSFlowCSISO58GB231280           SFlowCharSet = 57\n\tSFlowCSISO61Norwegian2         SFlowCharSet = 58\n\tSFlowCSISO70VideotexSupp1      SFlowCharSet = 59\n\tSFlowCSISO84Portuguese2        SFlowCharSet = 60\n\tSFlowCSISO85Spanish2           SFlowCharSet = 61\n\tSFlowCSISO86Hungarian          SFlowCharSet = 62\n\tSFlowCSISO87JISX0208           SFlowCharSet = 63\n\tSFlowCSISO88Greek7             SFlowCharSet = 64\n\tSFlowCSISO89ASMO449            SFlowCharSet = 65\n\tSFlowCSISO90                   SFlowCharSet = 66\n\tSFlowCSISO91JISC62291984a      SFlowCharSet = 67\n\tSFlowCSISO92JISC62991984b      SFlowCharSet = 68\n\tSFlowCSISO93JIS62291984badd    SFlowCharSet = 69\n\tSFlowCSISO94JIS62291984hand    SFlowCharSet = 70\n\tSFlowCSISO95JIS62291984handadd SFlowCharSet = 71\n\tSFlowCSISO96JISC62291984kana   SFlowCharSet = 72\n\tSFlowCSISO2033                 SFlowCharSet = 73\n\tSFlowCSISO99NAPLPS             SFlowCharSet = 74\n\tSFlowCSISO102T617bit           SFlowCharSet = 75\n\tSFlowCSISO103T618bit           SFlowCharSet = 76\n\tSFlowCSISO111ECMACyrillic      SFlowCharSet = 77\n\tSFlowCSa71                     SFlowCharSet = 78\n\tSFlowCSa72                     SFlowCharSet = 79\n\tSFlowCSISO123CSAZ24341985gr    SFlowCharSet = 80\n\tSFlowCSISO88596E               SFlowCharSet = 81\n\tSFlowCSISO88596I               SFlowCharSet = 82\n\tSFlowCSISO128T101G2            SFlowCharSet = 83\n\tSFlowCSISO88598E               SFlowCharSet = 84\n\tSFlowCSISO88598I               SFlowCharSet = 85\n\tSFlowCSISO139CSN369103         SFlowCharSet = 86\n\tSFlowCSISO141JUSIB1002         SFlowCharSet = 87\n\tSFlowCSISO143IECP271           SFlowCharSet = 88\n\tSFlowCSISO146Serbian           SFlowCharSet = 89\n\tSFlowCSISO147Macedonian        SFlowCharSet = 90\n\tSFlowCSISO150                  SFlowCharSet = 91\n\tSFlowCSISO151Cuba              SFlowCharSet = 92\n\tSFlowCSISO6937Add              SFlowCharSet = 93\n\tSFlowCSISO153GOST1976874       SFlowCharSet = 94\n\tSFlowCSISO8859Supp             SFlowCharSet = 95\n\tSFlowCSISO10367Box             SFlowCharSet = 96\n\tSFlowCSISO158Lap               SFlowCharSet = 97\n\tSFlowCSISO159JISX02121990      SFlowCharSet = 98\n\tSFlowCSISO646Danish            SFlowCharSet = 99\n\tSFlowCSUSDK                    SFlowCharSet = 100\n\tSFlowCSDKUS                    SFlowCharSet = 101\n\tSFlowCSKSC5636                 SFlowCharSet = 102\n\tSFlowCSUnicode11UTF7           SFlowCharSet = 103\n\tSFlowCSISO2022CN               SFlowCharSet = 104\n\tSFlowCSISO2022CNEXT            SFlowCharSet = 105\n\tSFlowCSUTF8                    SFlowCharSet = 106\n\tSFlowCSISO885913               SFlowCharSet = 109\n\tSFlowCSISO885914               SFlowCharSet = 110\n\tSFlowCSISO885915               SFlowCharSet = 111\n\tSFlowCSISO885916               SFlowCharSet = 112\n\tSFlowCSGBK                     SFlowCharSet = 113\n\tSFlowCSGB18030                 SFlowCharSet = 114\n\tSFlowCSOSDEBCDICDF0415         SFlowCharSet = 115\n\tSFlowCSOSDEBCDICDF03IRV        SFlowCharSet = 116\n\tSFlowCSOSDEBCDICDF041          SFlowCharSet = 117\n\tSFlowCSISO115481               SFlowCharSet = 118\n\tSFlowCSKZ1048                  SFlowCharSet = 119\n\tSFlowCSUnicode                 SFlowCharSet = 1000\n\tSFlowCSUCS4                    SFlowCharSet = 1001\n\tSFlowCSUnicodeASCII            SFlowCharSet = 1002\n\tSFlowCSUnicodeLatin1           SFlowCharSet = 1003\n\tSFlowCSUnicodeJapanese         SFlowCharSet = 1004\n\tSFlowCSUnicodeIBM1261          SFlowCharSet = 1005\n\tSFlowCSUnicodeIBM1268          SFlowCharSet = 1006\n\tSFlowCSUnicodeIBM1276          SFlowCharSet = 1007\n\tSFlowCSUnicodeIBM1264          SFlowCharSet = 1008\n\tSFlowCSUnicodeIBM1265          SFlowCharSet = 1009\n\tSFlowCSUnicode11               SFlowCharSet = 1010\n\tSFlowCSSCSU                    SFlowCharSet = 1011\n\tSFlowCSUTF7                    SFlowCharSet = 1012\n\tSFlowCSUTF16BE                 SFlowCharSet = 1013\n\tSFlowCSUTF16LE                 SFlowCharSet = 1014\n\tSFlowCSUTF16                   SFlowCharSet = 1015\n\tSFlowCSCESU8                   SFlowCharSet = 1016\n\tSFlowCSUTF32                   SFlowCharSet = 1017\n\tSFlowCSUTF32BE                 SFlowCharSet = 1018\n\tSFlowCSUTF32LE                 SFlowCharSet = 1019\n\tSFlowCSBOCU1                   SFlowCharSet = 1020\n\tSFlowCSWindows30Latin1         SFlowCharSet = 2000\n\tSFlowCSWindows31Latin1         SFlowCharSet = 2001\n\tSFlowCSWindows31Latin2         SFlowCharSet = 2002\n\tSFlowCSWindows31Latin5         SFlowCharSet = 2003\n\tSFlowCSHPRoman8                SFlowCharSet = 2004\n\tSFlowCSAdobeStandardEncoding   SFlowCharSet = 2005\n\tSFlowCSVenturaUS               SFlowCharSet = 2006\n\tSFlowCSVenturaInternational    SFlowCharSet = 2007\n\tSFlowCSDECMCS                  SFlowCharSet = 2008\n\tSFlowCSPC850Multilingual       SFlowCharSet = 2009\n\tSFlowCSPCp852                  SFlowCharSet = 2010\n\tSFlowCSPC8CodePage437          SFlowCharSet = 2011\n\tSFlowCSPC8DanishNorwegian      SFlowCharSet = 2012\n\tSFlowCSPC862LatinHebrew        SFlowCharSet = 2013\n\tSFlowCSPC8Turkish              SFlowCharSet = 2014\n\tSFlowCSIBMSymbols              SFlowCharSet = 2015\n\tSFlowCSIBMThai                 SFlowCharSet = 2016\n\tSFlowCSHPLegal                 SFlowCharSet = 2017\n\tSFlowCSHPPiFont                SFlowCharSet = 2018\n\tSFlowCSHPMath8                 SFlowCharSet = 2019\n\tSFlowCSHPPSMath                SFlowCharSet = 2020\n\tSFlowCSHPDesktop               SFlowCharSet = 2021\n\tSFlowCSVenturaMath             SFlowCharSet = 2022\n\tSFlowCSMicrosoftPublishing     SFlowCharSet = 2023\n\tSFlowCSWindows31J              SFlowCharSet = 2024\n\tSFlowCSGB2312                  SFlowCharSet = 2025\n\tSFlowCSBig5                    SFlowCharSet = 2026\n\tSFlowCSMacintosh               SFlowCharSet = 2027\n\tSFlowCSIBM037                  SFlowCharSet = 2028\n\tSFlowCSIBM038                  SFlowCharSet = 2029\n\tSFlowCSIBM273                  SFlowCharSet = 2030\n\tSFlowCSIBM274                  SFlowCharSet = 2031\n\tSFlowCSIBM275                  SFlowCharSet = 2032\n\tSFlowCSIBM277                  SFlowCharSet = 2033\n\tSFlowCSIBM278                  SFlowCharSet = 2034\n\tSFlowCSIBM280                  SFlowCharSet = 2035\n\tSFlowCSIBM281                  SFlowCharSet = 2036\n\tSFlowCSIBM284                  SFlowCharSet = 2037\n\tSFlowCSIBM285                  SFlowCharSet = 2038\n\tSFlowCSIBM290                  SFlowCharSet = 2039\n\tSFlowCSIBM297                  SFlowCharSet = 2040\n\tSFlowCSIBM420                  SFlowCharSet = 2041\n\tSFlowCSIBM423                  SFlowCharSet = 2042\n\tSFlowCSIBM424                  SFlowCharSet = 2043\n\tSFlowCSIBM500                  SFlowCharSet = 2044\n\tSFlowCSIBM851                  SFlowCharSet = 2045\n\tSFlowCSIBM855                  SFlowCharSet = 2046\n\tSFlowCSIBM857                  SFlowCharSet = 2047\n\tSFlowCSIBM860                  SFlowCharSet = 2048\n\tSFlowCSIBM861                  SFlowCharSet = 2049\n\tSFlowCSIBM863                  SFlowCharSet = 2050\n\tSFlowCSIBM864                  SFlowCharSet = 2051\n\tSFlowCSIBM865                  SFlowCharSet = 2052\n\tSFlowCSIBM868                  SFlowCharSet = 2053\n\tSFlowCSIBM869                  SFlowCharSet = 2054\n\tSFlowCSIBM870                  SFlowCharSet = 2055\n\tSFlowCSIBM871                  SFlowCharSet = 2056\n\tSFlowCSIBM880                  SFlowCharSet = 2057\n\tSFlowCSIBM891                  SFlowCharSet = 2058\n\tSFlowCSIBM903                  SFlowCharSet = 2059\n\tSFlowCSIBBM904                 SFlowCharSet = 2060\n\tSFlowCSIBM905                  SFlowCharSet = 2061\n\tSFlowCSIBM918                  SFlowCharSet = 2062\n\tSFlowCSIBM1026                 SFlowCharSet = 2063\n\tSFlowCSIBMEBCDICATDE           SFlowCharSet = 2064\n\tSFlowCSEBCDICATDEA             SFlowCharSet = 2065\n\tSFlowCSEBCDICCAFR              SFlowCharSet = 2066\n\tSFlowCSEBCDICDKNO              SFlowCharSet = 2067\n\tSFlowCSEBCDICDKNOA             SFlowCharSet = 2068\n\tSFlowCSEBCDICFISE              SFlowCharSet = 2069\n\tSFlowCSEBCDICFISEA             SFlowCharSet = 2070\n\tSFlowCSEBCDICFR                SFlowCharSet = 2071\n\tSFlowCSEBCDICIT                SFlowCharSet = 2072\n\tSFlowCSEBCDICPT                SFlowCharSet = 2073\n\tSFlowCSEBCDICES                SFlowCharSet = 2074\n\tSFlowCSEBCDICESA               SFlowCharSet = 2075\n\tSFlowCSEBCDICESS               SFlowCharSet = 2076\n\tSFlowCSEBCDICUK                SFlowCharSet = 2077\n\tSFlowCSEBCDICUS                SFlowCharSet = 2078\n\tSFlowCSUnknown8BiT             SFlowCharSet = 2079\n\tSFlowCSMnemonic                SFlowCharSet = 2080\n\tSFlowCSMnem                    SFlowCharSet = 2081\n\tSFlowCSVISCII                  SFlowCharSet = 2082\n\tSFlowCSVIQR                    SFlowCharSet = 2083\n\tSFlowCSKOI8R                   SFlowCharSet = 2084\n\tSFlowCSHZGB2312                SFlowCharSet = 2085\n\tSFlowCSIBM866                  SFlowCharSet = 2086\n\tSFlowCSPC775Baltic             SFlowCharSet = 2087\n\tSFlowCSKOI8U                   SFlowCharSet = 2088\n\tSFlowCSIBM00858                SFlowCharSet = 2089\n\tSFlowCSIBM00924                SFlowCharSet = 2090\n\tSFlowCSIBM01140                SFlowCharSet = 2091\n\tSFlowCSIBM01141                SFlowCharSet = 2092\n\tSFlowCSIBM01142                SFlowCharSet = 2093\n\tSFlowCSIBM01143                SFlowCharSet = 2094\n\tSFlowCSIBM01144                SFlowCharSet = 2095\n\tSFlowCSIBM01145                SFlowCharSet = 2096\n\tSFlowCSIBM01146                SFlowCharSet = 2097\n\tSFlowCSIBM01147                SFlowCharSet = 2098\n\tSFlowCSIBM01148                SFlowCharSet = 2099\n\tSFlowCSIBM01149                SFlowCharSet = 2100\n\tSFlowCSBig5HKSCS               SFlowCharSet = 2101\n\tSFlowCSIBM1047                 SFlowCharSet = 2102\n\tSFlowCSPTCP154                 SFlowCharSet = 2103\n\tSFlowCSAmiga1251               SFlowCharSet = 2104\n\tSFlowCSKOI7switched            SFlowCharSet = 2105\n\tSFlowCSBRF                     SFlowCharSet = 2106\n\tSFlowCSTSCII                   SFlowCharSet = 2107\n\tSFlowCSCP51932                 SFlowCharSet = 2108\n\tSFlowCSWindows874              SFlowCharSet = 2109\n\tSFlowCSWindows1250             SFlowCharSet = 2250\n\tSFlowCSWindows1251             SFlowCharSet = 2251\n\tSFlowCSWindows1252             SFlowCharSet = 2252\n\tSFlowCSWindows1253             SFlowCharSet = 2253\n\tSFlowCSWindows1254             SFlowCharSet = 2254\n\tSFlowCSWindows1255             SFlowCharSet = 2255\n\tSFlowCSWindows1256             SFlowCharSet = 2256\n\tSFlowCSWindows1257             SFlowCharSet = 2257\n\tSFlowCSWindows1258             SFlowCharSet = 2258\n\tSFlowCSTIS620                  SFlowCharSet = 2259\n\tSFlowCS50220                   SFlowCharSet = 2260\n\tSFlowCSreserved                SFlowCharSet = 3000\n)\n\nfunc decodeExtendedUserFlow(data *[]byte) (SFlowExtendedUserFlow, error) {\n\teu := SFlowExtendedUserFlow{}\n\tvar fdf SFlowFlowDataFormat\n\tvar srcUserLen uint32\n\tvar srcUserLenWithPad int\n\tvar srcUserBytes []byte\n\tvar dstUserLen uint32\n\tvar dstUserLenWithPad int\n\tvar dstUserBytes []byte\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\teu.EnterpriseID, eu.Format = fdf.decode()\n\t*data, eu.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, eu.SourceCharSet = (*data)[4:], SFlowCharSet(binary.BigEndian.Uint32((*data)[:4]))\n\t*data, srcUserLen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tsrcUserLenWithPad = int(srcUserLen + ((4 - srcUserLen) % 4))\n\t*data, srcUserBytes = (*data)[srcUserLenWithPad:], (*data)[:srcUserLenWithPad]\n\teu.SourceUserID = string(srcUserBytes[:srcUserLen])\n\t*data, eu.DestinationCharSet = (*data)[4:], SFlowCharSet(binary.BigEndian.Uint32((*data)[:4]))\n\t*data, dstUserLen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tdstUserLenWithPad = int(dstUserLen + ((4 - dstUserLen) % 4))\n\t*data, dstUserBytes = (*data)[dstUserLenWithPad:], (*data)[:dstUserLenWithPad]\n\teu.DestinationUserID = string(dstUserBytes[:dstUserLen])\n\treturn eu, nil\n}\n\n// **************************************************\n//  Packet IP version 4 Record\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                     Length                    |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    Protocol                   |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  Source IPv4                  |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                Destination IPv4               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   Source Port                 |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                Destionation Port              |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   TCP Flags                   |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                      TOS                      |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\ntype SFlowIpv4Record struct {\n\t// The length of the IP packet excluding ower layer encapsulations\n\tLength uint32\n\t// IP Protocol type (for example, TCP = 6, UDP = 17)\n\tProtocol uint32\n\t// Source IP Address\n\tIPSrc net.IP\n\t// Destination IP Address\n\tIPDst net.IP\n\t// TCP/UDP source port number or equivalent\n\tPortSrc uint32\n\t// TCP/UDP destination port number or equivalent\n\tPortDst uint32\n\t// TCP flags\n\tTCPFlags uint32\n\t// IP type of service\n\tTOS uint32\n}\n\nfunc decodeSFlowIpv4Record(data *[]byte) (SFlowIpv4Record, error) {\n\tsi := SFlowIpv4Record{}\n\n\t*data, si.Length = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, si.Protocol = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, si.IPSrc = (*data)[4:], net.IP((*data)[:4])\n\t*data, si.IPDst = (*data)[4:], net.IP((*data)[:4])\n\t*data, si.PortSrc = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, si.PortDst = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, si.TCPFlags = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, si.TOS = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\treturn si, nil\n}\n\n// **************************************************\n//  Packet IP version 6 Record\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                     Length                    |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    Protocol                   |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  Source IPv4                  |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                Destination IPv4               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   Source Port                 |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                Destionation Port              |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   TCP Flags                   |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    Priority                   |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\ntype SFlowIpv6Record struct {\n\t// The length of the IP packet excluding ower layer encapsulations\n\tLength uint32\n\t// IP Protocol type (for example, TCP = 6, UDP = 17)\n\tProtocol uint32\n\t// Source IP Address\n\tIPSrc net.IP\n\t// Destination IP Address\n\tIPDst net.IP\n\t// TCP/UDP source port number or equivalent\n\tPortSrc uint32\n\t// TCP/UDP destination port number or equivalent\n\tPortDst uint32\n\t// TCP flags\n\tTCPFlags uint32\n\t// IP priority\n\tPriority uint32\n}\n\nfunc decodeSFlowIpv6Record(data *[]byte) (SFlowIpv6Record, error) {\n\tsi := SFlowIpv6Record{}\n\n\t*data, si.Length = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, si.Protocol = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, si.IPSrc = (*data)[16:], net.IP((*data)[:16])\n\t*data, si.IPDst = (*data)[16:], net.IP((*data)[:16])\n\t*data, si.PortSrc = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, si.PortDst = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, si.TCPFlags = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, si.Priority = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\treturn si, nil\n}\n\n// **************************************************\n//  Extended IPv4 Tunnel Egress\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /           Packet IP version 4 Record          /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\ntype SFlowExtendedIpv4TunnelEgressRecord struct {\n\tSFlowBaseFlowRecord\n\tSFlowIpv4Record SFlowIpv4Record\n}\n\nfunc decodeExtendedIpv4TunnelEgress(data *[]byte) (SFlowExtendedIpv4TunnelEgressRecord, error) {\n\trec := SFlowExtendedIpv4TunnelEgressRecord{}\n\tvar fdf SFlowFlowDataFormat\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\trec.EnterpriseID, rec.Format = fdf.decode()\n\t*data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\trec.SFlowIpv4Record, _ = decodeSFlowIpv4Record(data)\n\n\treturn rec, nil\n}\n\n// **************************************************\n//  Extended IPv4 Tunnel Ingress\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /           Packet IP version 4 Record          /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\ntype SFlowExtendedIpv4TunnelIngressRecord struct {\n\tSFlowBaseFlowRecord\n\tSFlowIpv4Record SFlowIpv4Record\n}\n\nfunc decodeExtendedIpv4TunnelIngress(data *[]byte) (SFlowExtendedIpv4TunnelIngressRecord, error) {\n\trec := SFlowExtendedIpv4TunnelIngressRecord{}\n\tvar fdf SFlowFlowDataFormat\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\trec.EnterpriseID, rec.Format = fdf.decode()\n\t*data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\trec.SFlowIpv4Record, _ = decodeSFlowIpv4Record(data)\n\n\treturn rec, nil\n}\n\n// **************************************************\n//  Extended IPv6 Tunnel Egress\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /           Packet IP version 6 Record          /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\ntype SFlowExtendedIpv6TunnelEgressRecord struct {\n\tSFlowBaseFlowRecord\n\tSFlowIpv6Record\n}\n\nfunc decodeExtendedIpv6TunnelEgress(data *[]byte) (SFlowExtendedIpv6TunnelEgressRecord, error) {\n\trec := SFlowExtendedIpv6TunnelEgressRecord{}\n\tvar fdf SFlowFlowDataFormat\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\trec.EnterpriseID, rec.Format = fdf.decode()\n\t*data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\trec.SFlowIpv6Record, _ = decodeSFlowIpv6Record(data)\n\n\treturn rec, nil\n}\n\n// **************************************************\n//  Extended IPv6 Tunnel Ingress\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /           Packet IP version 6 Record          /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\ntype SFlowExtendedIpv6TunnelIngressRecord struct {\n\tSFlowBaseFlowRecord\n\tSFlowIpv6Record\n}\n\nfunc decodeExtendedIpv6TunnelIngress(data *[]byte) (SFlowExtendedIpv6TunnelIngressRecord, error) {\n\trec := SFlowExtendedIpv6TunnelIngressRecord{}\n\tvar fdf SFlowFlowDataFormat\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\trec.EnterpriseID, rec.Format = fdf.decode()\n\t*data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\trec.SFlowIpv6Record, _ = decodeSFlowIpv6Record(data)\n\n\treturn rec, nil\n}\n\n// **************************************************\n//  Extended Decapsulate Egress\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |               Inner Header Offset             |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\ntype SFlowExtendedDecapsulateEgressRecord struct {\n\tSFlowBaseFlowRecord\n\tInnerHeaderOffset uint32\n}\n\nfunc decodeExtendedDecapsulateEgress(data *[]byte) (SFlowExtendedDecapsulateEgressRecord, error) {\n\trec := SFlowExtendedDecapsulateEgressRecord{}\n\tvar fdf SFlowFlowDataFormat\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\trec.EnterpriseID, rec.Format = fdf.decode()\n\t*data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, rec.InnerHeaderOffset = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\treturn rec, nil\n}\n\n// **************************************************\n//  Extended Decapsulate Ingress\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |               Inner Header Offset             |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\ntype SFlowExtendedDecapsulateIngressRecord struct {\n\tSFlowBaseFlowRecord\n\tInnerHeaderOffset uint32\n}\n\nfunc decodeExtendedDecapsulateIngress(data *[]byte) (SFlowExtendedDecapsulateIngressRecord, error) {\n\trec := SFlowExtendedDecapsulateIngressRecord{}\n\tvar fdf SFlowFlowDataFormat\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\trec.EnterpriseID, rec.Format = fdf.decode()\n\t*data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, rec.InnerHeaderOffset = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\treturn rec, nil\n}\n\n// **************************************************\n//  Extended VNI Egress\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                       VNI                     |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\ntype SFlowExtendedVniEgressRecord struct {\n\tSFlowBaseFlowRecord\n\tVNI uint32\n}\n\nfunc decodeExtendedVniEgress(data *[]byte) (SFlowExtendedVniEgressRecord, error) {\n\trec := SFlowExtendedVniEgressRecord{}\n\tvar fdf SFlowFlowDataFormat\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\trec.EnterpriseID, rec.Format = fdf.decode()\n\t*data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, rec.VNI = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\treturn rec, nil\n}\n\n// **************************************************\n//  Extended VNI Ingress\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                       VNI                     |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\ntype SFlowExtendedVniIngressRecord struct {\n\tSFlowBaseFlowRecord\n\tVNI uint32\n}\n\nfunc decodeExtendedVniIngress(data *[]byte) (SFlowExtendedVniIngressRecord, error) {\n\trec := SFlowExtendedVniIngressRecord{}\n\tvar fdf SFlowFlowDataFormat\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\trec.EnterpriseID, rec.Format = fdf.decode()\n\t*data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, rec.VNI = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\treturn rec, nil\n}\n\n// **************************************************\n//  Counter Record\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  counter length               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /                   counter data                /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\ntype SFlowBaseCounterRecord struct {\n\tEnterpriseID   SFlowEnterpriseID\n\tFormat         SFlowCounterRecordType\n\tFlowDataLength uint32\n}\n\nfunc (bcr SFlowBaseCounterRecord) GetType() SFlowCounterRecordType {\n\tswitch bcr.Format {\n\tcase SFlowTypeGenericInterfaceCounters:\n\t\treturn SFlowTypeGenericInterfaceCounters\n\tcase SFlowTypeEthernetInterfaceCounters:\n\t\treturn SFlowTypeEthernetInterfaceCounters\n\tcase SFlowTypeTokenRingInterfaceCounters:\n\t\treturn SFlowTypeTokenRingInterfaceCounters\n\tcase SFlowType100BaseVGInterfaceCounters:\n\t\treturn SFlowType100BaseVGInterfaceCounters\n\tcase SFlowTypeVLANCounters:\n\t\treturn SFlowTypeVLANCounters\n\tcase SFlowTypeLACPCounters:\n\t\treturn SFlowTypeLACPCounters\n\tcase SFlowTypeProcessorCounters:\n\t\treturn SFlowTypeProcessorCounters\n\tcase SFlowTypeOpenflowPortCounters:\n\t\treturn SFlowTypeOpenflowPortCounters\n\tcase SFlowTypePORTNAMECounters:\n\t\treturn SFlowTypePORTNAMECounters\n\tcase SFLowTypeAPPRESOURCESCounters:\n\t\treturn SFLowTypeAPPRESOURCESCounters\n\tcase SFlowTypeOVSDPCounters:\n\t\treturn SFlowTypeOVSDPCounters\n\t}\n\tunrecognized := fmt.Sprint(\"Unrecognized counter record type:\", bcr.Format)\n\tpanic(unrecognized)\n}\n\n// **************************************************\n//  Counter Record\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  counter length               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    IfIndex                    |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    IfType                     |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   IfSpeed                     |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   IfDirection                 |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    IfStatus                   |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   IFInOctets                  |\n//  |                                               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   IfInUcastPkts               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  IfInMulticastPkts            |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  IfInBroadcastPkts            |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    IfInDiscards               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    InInErrors                 |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  IfInUnknownProtos            |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   IfOutOctets                 |\n//  |                                               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   IfOutUcastPkts              |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  IfOutMulticastPkts           |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  IfOutBroadcastPkts           |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   IfOutDiscards               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    IfOUtErrors                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                 IfPromiscouousMode            |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\ntype SFlowGenericInterfaceCounters struct {\n\tSFlowBaseCounterRecord\n\tIfIndex            uint32\n\tIfType             uint32\n\tIfSpeed            uint64\n\tIfDirection        uint32\n\tIfStatus           uint32\n\tIfInOctets         uint64\n\tIfInUcastPkts      uint32\n\tIfInMulticastPkts  uint32\n\tIfInBroadcastPkts  uint32\n\tIfInDiscards       uint32\n\tIfInErrors         uint32\n\tIfInUnknownProtos  uint32\n\tIfOutOctets        uint64\n\tIfOutUcastPkts     uint32\n\tIfOutMulticastPkts uint32\n\tIfOutBroadcastPkts uint32\n\tIfOutDiscards      uint32\n\tIfOutErrors        uint32\n\tIfPromiscuousMode  uint32\n}\n\nfunc decodeGenericInterfaceCounters(data *[]byte) (SFlowGenericInterfaceCounters, error) {\n\tgic := SFlowGenericInterfaceCounters{}\n\tvar cdf SFlowCounterDataFormat\n\n\t*data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\tgic.EnterpriseID, gic.Format = cdf.decode()\n\t*data, gic.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfIndex = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfType = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfSpeed = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])\n\t*data, gic.IfDirection = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfStatus = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfInOctets = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])\n\t*data, gic.IfInUcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfInMulticastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfInBroadcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfInDiscards = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfInErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfInUnknownProtos = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfOutOctets = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])\n\t*data, gic.IfOutUcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfOutMulticastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfOutBroadcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfOutDiscards = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfOutErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, gic.IfPromiscuousMode = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\treturn gic, nil\n}\n\n// **************************************************\n//  Counter Record\n// **************************************************\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  counter length               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  /                   counter data                /\n//  /                                               /\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\ntype SFlowEthernetCounters struct {\n\tSFlowBaseCounterRecord\n\tAlignmentErrors           uint32\n\tFCSErrors                 uint32\n\tSingleCollisionFrames     uint32\n\tMultipleCollisionFrames   uint32\n\tSQETestErrors             uint32\n\tDeferredTransmissions     uint32\n\tLateCollisions            uint32\n\tExcessiveCollisions       uint32\n\tInternalMacTransmitErrors uint32\n\tCarrierSenseErrors        uint32\n\tFrameTooLongs             uint32\n\tInternalMacReceiveErrors  uint32\n\tSymbolErrors              uint32\n}\n\nfunc decodeEthernetCounters(data *[]byte) (SFlowEthernetCounters, error) {\n\tec := SFlowEthernetCounters{}\n\tvar cdf SFlowCounterDataFormat\n\n\t*data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\tec.EnterpriseID, ec.Format = cdf.decode()\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.AlignmentErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.FCSErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.SingleCollisionFrames = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.MultipleCollisionFrames = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.SQETestErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.DeferredTransmissions = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.LateCollisions = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.ExcessiveCollisions = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.InternalMacTransmitErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.CarrierSenseErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.FrameTooLongs = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.InternalMacReceiveErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tif len(*data) < 4 {\n\t\treturn SFlowEthernetCounters{}, errors.New(\"ethernet counters too small\")\n\t}\n\t*data, ec.SymbolErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\treturn ec, nil\n}\n\n// VLAN Counter\n\ntype SFlowVLANCounters struct {\n\tSFlowBaseCounterRecord\n\tVlanID        uint32\n\tOctets        uint64\n\tUcastPkts     uint32\n\tMulticastPkts uint32\n\tBroadcastPkts uint32\n\tDiscards      uint32\n}\n\nfunc decodeVLANCounters(data *[]byte) (SFlowVLANCounters, error) {\n\tvc := SFlowVLANCounters{}\n\tvar cdf SFlowCounterDataFormat\n\n\t*data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\tvc.EnterpriseID, vc.Format = cdf.decode()\n\tvc.EnterpriseID, vc.Format = cdf.decode()\n\t*data, vc.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, vc.VlanID = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, vc.Octets = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])\n\t*data, vc.UcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, vc.MulticastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, vc.BroadcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, vc.Discards = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\treturn vc, nil\n}\n\n//SFLLACPportState  :  SFlow LACP Port State (All(4) - 32 bit)\ntype SFLLACPPortState struct {\n\tPortStateAll uint32\n}\n\n//LACPcounters  :  LACP SFlow Counters  ( 64 Bytes )\ntype SFlowLACPCounters struct {\n\tSFlowBaseCounterRecord\n\tActorSystemID        net.HardwareAddr\n\tPartnerSystemID      net.HardwareAddr\n\tAttachedAggID        uint32\n\tLacpPortState        SFLLACPPortState\n\tLACPDUsRx            uint32\n\tMarkerPDUsRx         uint32\n\tMarkerResponsePDUsRx uint32\n\tUnknownRx            uint32\n\tIllegalRx            uint32\n\tLACPDUsTx            uint32\n\tMarkerPDUsTx         uint32\n\tMarkerResponsePDUsTx uint32\n}\n\nfunc decodeLACPCounters(data *[]byte) (SFlowLACPCounters, error) {\n\tla := SFlowLACPCounters{}\n\tvar cdf SFlowCounterDataFormat\n\n\t*data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\tla.EnterpriseID, la.Format = cdf.decode()\n\t*data, la.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, la.ActorSystemID = (*data)[6:], (*data)[:6]\n\t*data = (*data)[2:] // remove padding\n\t*data, la.PartnerSystemID = (*data)[6:], (*data)[:6]\n\t*data = (*data)[2:] //remove padding\n\t*data, la.AttachedAggID = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, la.LacpPortState.PortStateAll = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, la.LACPDUsRx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, la.MarkerPDUsRx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, la.MarkerResponsePDUsRx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, la.UnknownRx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, la.IllegalRx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, la.LACPDUsTx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, la.MarkerPDUsTx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, la.MarkerResponsePDUsTx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\treturn la, nil\n\n}\n\n// **************************************************\n//  Processor Counter Record\n// **************************************************\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  counter length               |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    FiveSecCpu                 |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    OneMinCpu                  |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    GiveMinCpu                 |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                   TotalMemory                 |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                    FreeMemory                 |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\ntype SFlowProcessorCounters struct {\n\tSFlowBaseCounterRecord\n\tFiveSecCpu  uint32 // 5 second average CPU utilization\n\tOneMinCpu   uint32 // 1 minute average CPU utilization\n\tFiveMinCpu  uint32 // 5 minute average CPU utilization\n\tTotalMemory uint64 // total memory (in bytes)\n\tFreeMemory  uint64 // free memory (in bytes)\n}\n\nfunc decodeProcessorCounters(data *[]byte) (SFlowProcessorCounters, error) {\n\tpc := SFlowProcessorCounters{}\n\tvar cdf SFlowCounterDataFormat\n\tvar high32, low32 uint32\n\n\t*data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\tpc.EnterpriseID, pc.Format = cdf.decode()\n\t*data, pc.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\t*data, pc.FiveSecCpu = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, pc.OneMinCpu = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, pc.FiveMinCpu = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, high32 = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, low32 = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tpc.TotalMemory = (uint64(high32) << 32) + uint64(low32)\n\t*data, high32 = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, low32 = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tpc.FreeMemory = (uint64(high32)) + uint64(low32)\n\n\treturn pc, nil\n}\n\n// SFlowEthernetFrameFlowRecord give additional information\n// about the sampled packet if it's available.\n// An agent may or may not provide this information.\ntype SFlowEthernetFrameFlowRecord struct {\n\tSFlowBaseFlowRecord\n\tFrameLength uint32\n\tSrcMac      net.HardwareAddr\n\tDstMac      net.HardwareAddr\n\tType        uint32\n}\n\n// Ethernet frame flow records have the following structure:\n\n//  0                      15                      31\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |      20 bit Interprise (0)     |12 bit format |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                  record length                |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |                Source Mac Address             |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |             Destination Mac Address           |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n//  |               Ethernet Packet Type            |\n//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+\n\nfunc decodeEthernetFrameFlowRecord(data *[]byte) (SFlowEthernetFrameFlowRecord, error) {\n\tes := SFlowEthernetFrameFlowRecord{}\n\tvar fdf SFlowFlowDataFormat\n\n\t*data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\tes.EnterpriseID, es.Format = fdf.decode()\n\t*data, es.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\t*data, es.FrameLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, es.SrcMac = (*data)[8:], net.HardwareAddr((*data)[:6])\n\t*data, es.DstMac = (*data)[8:], net.HardwareAddr((*data)[:6])\n\t*data, es.Type = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\treturn es, nil\n}\n\n//SFlowOpenflowPortCounters  :  OVS-Sflow OpenFlow Port Counter  ( 20 Bytes )\ntype SFlowOpenflowPortCounters struct {\n\tSFlowBaseCounterRecord\n\tDatapathID uint64\n\tPortNo     uint32\n}\n\nfunc decodeOpenflowportCounters(data *[]byte) (SFlowOpenflowPortCounters, error) {\n\tofp := SFlowOpenflowPortCounters{}\n\tvar cdf SFlowCounterDataFormat\n\n\t*data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\tofp.EnterpriseID, ofp.Format = cdf.decode()\n\t*data, ofp.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, ofp.DatapathID = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])\n\t*data, ofp.PortNo = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\treturn ofp, nil\n}\n\n//SFlowAppresourcesCounters  :  OVS_Sflow App Resources Counter ( 48 Bytes )\ntype SFlowAppresourcesCounters struct {\n\tSFlowBaseCounterRecord\n\tUserTime   uint32\n\tSystemTime uint32\n\tMemUsed    uint64\n\tMemMax     uint64\n\tFdOpen     uint32\n\tFdMax      uint32\n\tConnOpen   uint32\n\tConnMax    uint32\n}\n\nfunc decodeAppresourcesCounters(data *[]byte) (SFlowAppresourcesCounters, error) {\n\tapp := SFlowAppresourcesCounters{}\n\tvar cdf SFlowCounterDataFormat\n\n\t*data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\tapp.EnterpriseID, app.Format = cdf.decode()\n\t*data, app.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, app.UserTime = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, app.SystemTime = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, app.MemUsed = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])\n\t*data, app.MemMax = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])\n\t*data, app.FdOpen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, app.FdMax = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, app.ConnOpen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, app.ConnMax = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\treturn app, nil\n}\n\n//SFlowOVSDPCounters  :  OVS-Sflow DataPath Counter  ( 32 Bytes )\ntype SFlowOVSDPCounters struct {\n\tSFlowBaseCounterRecord\n\tNHit     uint32\n\tNMissed  uint32\n\tNLost    uint32\n\tNMaskHit uint32\n\tNFlows   uint32\n\tNMasks   uint32\n}\n\nfunc decodeOVSDPCounters(data *[]byte) (SFlowOVSDPCounters, error) {\n\tdp := SFlowOVSDPCounters{}\n\tvar cdf SFlowCounterDataFormat\n\n\t*data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\tdp.EnterpriseID, dp.Format = cdf.decode()\n\t*data, dp.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, dp.NHit = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, dp.NMissed = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, dp.NLost = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, dp.NMaskHit = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, dp.NFlows = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\t*data, dp.NMasks = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\n\treturn dp, nil\n}\n\n//SFlowPORTNAME  :  OVS-Sflow PORTNAME Counter Sampletype ( 20 Bytes )\ntype SFlowPORTNAME struct {\n\tSFlowBaseCounterRecord\n\tLen uint32\n\tStr string\n}\n\nfunc decodeString(data *[]byte) (len uint32, str string) {\n\t*data, len = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tstr = string((*data)[:len])\n\tif (len % 4) != 0 {\n\t\tlen += 4 - len%4\n\t}\n\t*data = (*data)[len:]\n\treturn\n}\n\nfunc decodePortnameCounters(data *[]byte) (SFlowPORTNAME, error) {\n\tpn := SFlowPORTNAME{}\n\tvar cdf SFlowCounterDataFormat\n\n\t*data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))\n\tpn.EnterpriseID, pn.Format = cdf.decode()\n\t*data, pn.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])\n\tpn.Len, pn.Str = decodeString(data)\n\n\treturn pn, nil\n}\n"
  },
  {
    "path": "layers/sflow_test.go",
    "content": "// Copyright 2014 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\npackage layers\n\nimport (\n\t\"net\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// Test packet collected from live network. See the test below for contents\nvar SFlowTestPacket1 = []byte{\n\t0x84, 0x2b, 0x2b, 0x16, 0x8b, 0x62, 0xf0, 0x50, 0x56, 0x85, 0x3a, 0xfd, 0x08, 0x00, 0x45, 0x00,\n\t0x05, 0xbc, 0x9c, 0x04, 0x40, 0x00, 0xff, 0x11, 0xc7, 0x00, 0x0a, 0x01, 0xff, 0x0e, 0x0a, 0x01,\n\t0x00, 0x1b, 0xc7, 0x57, 0x18, 0xc7, 0x05, 0xa8, 0x22, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,\n\t0x00, 0x01, 0x0a, 0x01, 0xf8, 0x16, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x9d, 0xfb, 0x40, 0x49,\n\t0xc6, 0xcd, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x26,\n\t0x27, 0xe8, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x3e, 0x80, 0x50, 0xbd, 0xe5, 0x80, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,\n\t0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0xd2, 0x00, 0x00,\n\t0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a, 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6d,\n\t0xf0, 0x40, 0x08, 0x00, 0x45, 0x00, 0x05, 0xc0, 0x6b, 0xaa, 0x40, 0x00, 0x40, 0x06, 0x8f, 0x41,\n\t0x0a, 0x01, 0x0e, 0x16, 0x36, 0xf0, 0xeb, 0x45, 0x76, 0xfd, 0x00, 0x50, 0xca, 0x77, 0xef, 0x96,\n\t0xfc, 0x28, 0x63, 0x40, 0x50, 0x10, 0x00, 0x3c, 0x64, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,\n\t0xf4, 0x00, 0x00, 0x02, 0x77, 0x00, 0x00, 0x00, 0xfd, 0x3b, 0x8c, 0xe7, 0x04, 0x4a, 0x2d, 0xb2,\n\t0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x48, 0xcc, 0x11, 0x0d, 0xe3, 0x00,\n\t0x26, 0x85, 0x30, 0x00, 0x00, 0x07, 0x66, 0x00, 0x02, 0xd0, 0x8a, 0x00, 0x02, 0xce, 0xf0, 0x00,\n\t0x29, 0x7e, 0x80, 0x00, 0x02, 0xd0, 0x98, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x26, 0x85, 0x30, 0x00,\n\t0x00, 0x00, 0xf4, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,\n\t0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5e, 0x5c, 0x1e, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,\n\t0x07, 0xd0, 0xb1, 0x2f, 0xa2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00,\n\t0x00, 0x01, 0x00, 0x00, 0x05, 0xee, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a,\n\t0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0x08, 0x00, 0x45, 0x00, 0x05, 0xdc,\n\t0x9f, 0xfd, 0x40, 0x00, 0x40, 0x06, 0x6a, 0xfa, 0x0a, 0x01, 0x0e, 0x10, 0x0a, 0x01, 0x08, 0x13,\n\t0x23, 0x84, 0xb7, 0x22, 0x8a, 0xc9, 0x50, 0xb5, 0x4e, 0x10, 0x2a, 0x87, 0x80, 0x10, 0x06, 0x01,\n\t0x10, 0xa6, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xef, 0x1f, 0xf4, 0x07, 0x99, 0x3a, 0xd8, 0x5b,\n\t0x01, 0x46, 0x09, 0x00, 0x0c, 0x00, 0x0c, 0x3c, 0xac, 0x4a, 0x1b, 0x06, 0x04, 0x78, 0x78, 0x4e,\n\t0xc2, 0x05, 0x46, 0x43, 0x06, 0x04, 0x78, 0x78, 0xee, 0x9c, 0x00, 0x41, 0xef, 0x05, 0x81, 0x32,\n\t0x1b, 0x06, 0x04, 0x78, 0x78, 0x56, 0x72, 0x05, 0x4e, 0x92, 0x00, 0x96, 0x39, 0x00, 0xea, 0x3f,\n\t0x01, 0x15, 0xa3, 0x08, 0x04, 0x42, 0x6a, 0x82, 0x87, 0x08, 0x05, 0xcc, 0x00, 0x04, 0x00, 0x00,\n\t0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5a,\n\t0xcd, 0xd0, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x07, 0xd0, 0x95, 0x67, 0xe1, 0x30, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,\n\t0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x46, 0x00, 0x00,\n\t0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a, 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f,\n\t0x11, 0x28, 0x08, 0x00, 0x45, 0x00, 0x04, 0x34, 0xdb, 0x36, 0x40, 0x00, 0x40, 0x06, 0x38, 0xac,\n\t0x0a, 0x01, 0x0e, 0x11, 0x0a, 0x01, 0x00, 0xcf, 0x23, 0x84, 0xa0, 0x3f, 0x3c, 0xce, 0xd5, 0x4a,\n\t0x72, 0x0b, 0x5d, 0x1a, 0x80, 0x10, 0x06, 0x01, 0x8a, 0x50, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a,\n\t0xef, 0x1f, 0xa2, 0xba, 0xe6, 0xfa, 0xae, 0xb3, 0xfe, 0xcf, 0x00, 0x19, 0xcf, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x01, 0xb9, 0x79, 0xdd, 0x42, 0x00, 0x00, 0x02, 0x84, 0x9b, 0xa9, 0x02, 0xe2, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x06, 0x32, 0x39, 0x35, 0x34, 0x33, 0x36, 0x00, 0x00, 0x02, 0x70, 0xcd,\n\t0x16, 0x40, 0xa6, 0x98, 0x88, 0x24, 0x06, 0x50, 0xb0, 0xf4, 0xee, 0x03, 0xa6, 0xfa, 0x87, 0xaf,\n\t0xc1, 0x99, 0x52, 0x0d, 0x07, 0xa8, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,\n\t0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x02, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x20, 0xf2, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00,\n\t0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00,\n\t0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x54, 0x0b, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,\n\t0x00, 0x03, 0x00, 0x01, 0x29, 0x82, 0x6d, 0xb0, 0x6c, 0x0b, 0xcb, 0x0d, 0xdd, 0x96, 0x00, 0x06,\n\t0xa8, 0xc6, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x34, 0x02, 0x35, 0x58, 0x7c, 0x9e, 0x56, 0x64, 0x25, 0x71, 0x00, 0x70,\n\t0x5a, 0xc4, 0x00, 0x09, 0x08, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5e, 0x5c, 0x1f, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,\n\t0x07, 0xd0, 0xb1, 0x2f, 0xaa, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00,\n\t0x00, 0x01, 0x00, 0x00, 0x05, 0xee, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a,\n\t0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0x08, 0x00, 0x45, 0x00, 0x05, 0xdc,\n\t0x0f, 0xba, 0x40, 0x00, 0x40, 0x06, 0xf4, 0x3f, 0x0a, 0x01, 0x0e, 0x10, 0x0a, 0x01, 0x0f, 0x11,\n\t0x23, 0x84, 0xcd, 0xc0, 0xf4, 0x0e, 0x90, 0x23, 0xd7, 0x32, 0x8b, 0x31, 0x80, 0x10, 0x00, 0x1d,\n\t0x6b, 0x12, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xef, 0x1f, 0xf4, 0x28, 0xef, 0x1f, 0xec, 0x76,\n\t0xaa, 0x25, 0x01, 0x04, 0xc0, 0xac, 0xfe, 0x25, 0x01, 0x8e, 0x25, 0x01, 0x16, 0xc7, 0x28, 0xfe,\n\t0x7e, 0x70, 0xfe, 0x7e, 0x70, 0x52, 0x7e, 0x70, 0x15, 0x9b, 0xfe, 0x35, 0x01, 0xfe, 0x35, 0x01,\n\t0x42, 0x35, 0x01, 0xfe, 0x95, 0x77, 0xfe, 0x95, 0x77, 0xfe, 0x95, 0x77, 0x52, 0x95, 0x77, 0x00,\n\t0xd2, 0xfe, 0x70, 0x02, 0x92, 0x70, 0x02, 0x16, 0x60, 0x22, 0x00, 0x7e, 0xb2, 0x15, 0x00, 0x00,\n\t0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5a,\n\t0xcd, 0xd1, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x07, 0xd0, 0x95, 0x67, 0xe9, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,\n\t0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0xee, 0x00, 0x00,\n\t0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0xb8, 0xca, 0x3a, 0x6f,\n\t0x11, 0x28, 0x08, 0x00, 0x45, 0x00, 0x05, 0xdc, 0xfe, 0x05, 0x40, 0x00, 0x40, 0x06, 0x06, 0xf4,\n\t0x0a, 0x01, 0x0e, 0x11, 0x0a, 0x01, 0x0e, 0x10, 0x23, 0x84, 0xfa, 0x29, 0xae, 0xd4, 0x95, 0x03,\n\t0x99, 0xb8, 0x77, 0xd0, 0x80, 0x10, 0x00, 0x1d, 0x6f, 0x4f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a,\n\t0xef, 0x1f, 0xa2, 0xcc, 0xef, 0x1f, 0xf4, 0x2c, 0xfe, 0xdb, 0x05, 0xa1, 0xdb, 0x04, 0x9e, 0xc0,\n\t0xfe, 0x30, 0x08, 0xb2, 0x30, 0x08, 0xda, 0x2b, 0xbd, 0xfe, 0x2a, 0x01, 0xfe, 0x2a, 0x01, 0x21,\n\t0x2a, 0x00, 0xb2, 0xfe, 0x57, 0xb0, 0xb6, 0x57, 0xb0, 0x14, 0x74, 0xf4, 0xf0, 0x4c, 0x05, 0x68,\n\t0xfe, 0x54, 0x02, 0xfe, 0x54, 0x02, 0xd2, 0x54, 0x02, 0x00, 0xbe, 0xfe, 0x32, 0x0f, 0xb6, 0x32,\n\t0x0f, 0x14, 0x2e, 0x16, 0xaf, 0x47, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,\n\t0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x01, 0x5e, 0x5c, 0x20, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,\n\t0x07, 0xd0, 0xb1, 0x2f, 0xb2, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00,\n\t0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x42, 0x3c, 0x8a,\n\t0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0x08, 0x00, 0x45, 0x00, 0x00, 0x34,\n\t0xa8, 0x23, 0x40, 0x00, 0x40, 0x06, 0x61, 0x7f, 0x0a, 0x01, 0x0e, 0x10, 0x0a, 0x01, 0x0f, 0x10,\n\t0x97, 0x91, 0x23, 0x84, 0x24, 0xfa, 0x91, 0xf7, 0xb4, 0xe8, 0xf3, 0x2d, 0x80, 0x10, 0x00, 0xab,\n\t0x7b, 0x7d, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xef, 0x1f, 0xf4, 0x36, 0xef, 0x1f, 0xdc, 0xde,\n\t0x00, 0x00, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\n// Test collected from the SFlow reference agent. Contains dummy data for several record types\n// that wern't available on an actual network for sampling.\nvar SFlowTestPacket2 = []byte{\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,\n\t0x04, 0x88, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, 0x38, 0x63, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,\n\t0x00, 0x01, 0xdc, 0xb8, 0x18, 0xc7, 0x04, 0x74, 0x02, 0x88, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,\n\t0x00, 0x01, 0xc0, 0xa8, 0x5b, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x3a, 0x00, 0x00,\n\t0xcb, 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x54, 0x00, 0x02,\n\t0x1f, 0x6e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x1f, 0x6e, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,\n\t0x03, 0xed, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x68, 0x74,\n\t0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f,\n\t0x72, 0x67, 0x00, 0x00, 0x00, 0x0f, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x2e, 0x73, 0x66, 0x6c, 0x6f,\n\t0x77, 0x2e, 0x6f, 0x72, 0x67, 0x06, 0x00, 0x00, 0x03, 0xec, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00,\n\t0x00, 0x6a, 0x00, 0x00, 0x00, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x75, 0x73, 0x65,\n\t0x72, 0xdc, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e,\n\t0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x00,\n\t0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x0c, 0x0b, 0x0a, 0x00, 0x00, 0xfd, 0xe9, 0x00, 0x00,\n\t0x00, 0x7b, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,\n\t0x00, 0x03, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x01, 0xc8, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00,\n\t0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x2b, 0x67, 0x00, 0x00, 0x56, 0xce, 0x00, 0x00,\n\t0x82, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00,\n\t0x03, 0x78, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,\n\t0x00, 0x0d, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00,\n\t0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x42, 0x00, 0x0c,\n\t0x29, 0x67, 0xa0, 0xe5, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x09, 0x08, 0x00, 0x45, 0x10, 0x00, 0x34,\n\t0x92, 0xc3, 0x40, 0x00, 0x40, 0x06, 0x70, 0x8d, 0xc0, 0xa8, 0x5b, 0x01, 0xc0, 0xa8, 0x5b, 0x11,\n\t0xd3, 0xdd, 0x00, 0x16, 0xe3, 0x2e, 0x84, 0x77, 0x13, 0x6d, 0xc5, 0x53, 0x80, 0x10, 0x1f, 0xf7,\n\t0xe7, 0x7d, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x2e, 0xc6, 0x70, 0x3a, 0x00, 0x0f, 0x84, 0x7a,\n\t0xbc, 0xd2, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x90, 0x00, 0x02, 0x1f, 0x6f, 0x00, 0x00,\n\t0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x1f, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff,\n\t0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0xed, 0x00, 0x00,\n\t0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,\n\t0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f, 0x72, 0x67, 0x00, 0x00,\n\t0x00, 0x0f, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x2e, 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f, 0x72,\n\t0x67, 0x03, 0x00, 0x00, 0x03, 0xec, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00,\n\t0x00, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x77, 0x00, 0x00,\n\t0x00, 0x6a, 0x00, 0x00, 0x00, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,\n\t0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00,\n\t0x00, 0x01, 0x0d, 0x0c, 0x0b, 0x0a, 0x00, 0x00, 0xfd, 0xe9, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00,\n\t0x03, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,\n\t0x00, 0x7b, 0x00, 0x00, 0x01, 0xc8, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,\n\t0x00, 0x03, 0x00, 0x00, 0x2b, 0x67, 0x00, 0x00, 0x56, 0xce, 0x00, 0x00, 0x82, 0x35, 0x00, 0x00,\n\t0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x03, 0x78, 0x00, 0x00,\n\t0x03, 0xe7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00,\n\t0x01, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,\n\t0x01, 0x86, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x09,\n\t0x00, 0x0c, 0x29, 0x67, 0xa0, 0xe5, 0x08, 0x00, 0x45, 0x10, 0x01, 0x74, 0xbb, 0xfa, 0x40, 0x00,\n\t0x40, 0x06, 0x46, 0x16, 0xc0, 0xa8, 0x5b, 0x11, 0xc0, 0xa8, 0x5b, 0x01, 0x00, 0x16, 0xd3, 0xdd,\n\t0x13, 0x6d, 0xc5, 0x53, 0xe3, 0x2e, 0x84, 0x77, 0x80, 0x18, 0x01, 0x10, 0x38, 0xca, 0x00, 0x00,\n\t0x01, 0x01, 0x08, 0x0a, 0x00, 0x0f, 0x84, 0x7d, 0x2e, 0xc6, 0x70, 0x3a, 0xe3, 0x92, 0x97, 0x1a,\n\t0x67, 0x3b, 0xac, 0xec, 0xfa, 0x43, 0x71, 0x5e, 0x36, 0xa1, 0x0a, 0xc6, 0x1a, 0x6a, 0xed, 0x08,\n\t0xac, 0xf4, 0xbe, 0xd8, 0x36, 0x59, 0xf6, 0xe2, 0x3d, 0x34, 0x26, 0xf2, 0x42, 0xbd, 0x32, 0xd3,\n\t0x37, 0x52, 0xb8, 0xf4, 0x38, 0xf0, 0xf4, 0xeb, 0x76, 0x3b, 0xda, 0x23, 0xf1, 0x92, 0x96, 0xca,\n\t0xbb, 0x9c, 0x20, 0x0a, 0x38, 0x37, 0x6f, 0xd9, 0x26, 0xe6, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,\n\t0x01, 0x54, 0x00, 0x02, 0x1f, 0x70, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02,\n\t0x1f, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00,\n\t0x00, 0x04, 0x00, 0x00, 0x03, 0xed, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,\n\t0x00, 0x14, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x66, 0x6c,\n\t0x6f, 0x77, 0x2e, 0x6f, 0x72, 0x67, 0x00, 0x00, 0x00, 0x0f, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x2e,\n\t0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f, 0x72, 0x67, 0xff, 0x00, 0x00, 0x03, 0xec, 0x00, 0x00,\n\t0x00, 0x2c, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,\n\t0x20, 0x75, 0x73, 0x65, 0x72, 0x77, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x10, 0x64, 0x65,\n\t0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x00, 0x00,\n\t0x03, 0xeb, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x0c, 0x0b, 0x0a, 0x00, 0x00,\n\t0xfd, 0xe9, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,\n\t0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x01, 0xc8, 0x00, 0x00,\n\t0x03, 0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x2b, 0x67, 0x00, 0x00,\n\t0x56, 0xce, 0x00, 0x00, 0x82, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,\n\t0x03, 0x09, 0x00, 0x00, 0x03, 0x78, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,\n\t0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,\n\t0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,\n\t0x00, 0x42, 0x00, 0x0c, 0x29, 0x67, 0xa0, 0xe5, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x09, 0x08, 0x00,\n\t0x45, 0x10, 0x00, 0x34, 0x65, 0x7d, 0x40, 0x00, 0x40, 0x06, 0x9d, 0xd3, 0xc0, 0xa8, 0x5b, 0x01,\n\t0xc0, 0xa8, 0x5b, 0x11, 0xd3, 0xdd, 0x00, 0x16, 0xe3, 0x2e, 0x84, 0x77, 0x13, 0x6d, 0xc6, 0x93,\n\t0x80, 0x10, 0x1f, 0xec, 0xe6, 0x43, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x2e, 0xc6, 0x70, 0x3c,\n\t0x00, 0x0f, 0x84, 0x7d, 0x00, 0x50,\n}\n\n// processor counter sample\nvar SFlowTestPacket3 = []byte{\n\t0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,\n\t0x0a, 0x14, 0x04, 0x00, 0x00, 0x00, 0x00, 0x64,\n\t0x00, 0x01, 0x78, 0xe0, 0x73, 0x03, 0x48, 0x78,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04,\n\t0x00, 0x00, 0x00, 0x34, 0x00, 0x01, 0x78, 0xe0,\n\t0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xe9,\n\t0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x05, 0xaa,\n\t0x00, 0x00, 0x05, 0x5a, 0x00, 0x00, 0x05, 0x32,\n\t0x00, 0x00, 0x00, 0x00, 0xe7, 0x8d, 0x70, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x55, 0xe7, 0x70, 0x00,\n}\n\n// expanded flow sample - extended switch flow record\nvar SFlowTestPacket4 = []byte{\n\t0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,\n\t0xc0, 0xa8, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x02, 0x7e, 0x32, 0xe0, 0xe4, 0x7c,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x23,\n\t0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00,\n\t0x00, 0x00, 0x03, 0x37, 0x00, 0x00, 0x56, 0x23,\n\t0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xe9,\n\t0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03,\n\t0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05,\n\t0xff, 0xff, 0xff, 0xff,\n}\n\n// expanded flow sample - extended router flow record\nvar SFlowTestPacket5 = []byte{\n\t0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,\n\t0xc0, 0xa8, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x02, 0x7e, 0x32, 0xe0, 0xe4, 0x7c,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x01, 0x23,\n\t0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00,\n\t0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x56, 0x02,\n\t0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xea,\n\t0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,\n\t0xc0, 0xa8, 0x01, 0x21, 0xff, 0xff, 0xff, 0xff,\n\t0xff, 0xff, 0xff, 0x80,\n}\n\n// expanded flow sample - Ipv4 Tunnel Ingress record\nvar SFlowTestPacket6 = []byte{\n\t0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x01, 0xbd, 0x50,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48,\n\t0x00, 0x00, 0x00, 0x74, 0x02, 0x00, 0x03, 0xe8, 0x00, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00,\n\t0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f,\n\t0xc0, 0xa8, 0x00, 0x54, 0xc0, 0xa8, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\n// expanded flow sample - Ipv4 Tunnel Egress record\nvar SFlowTestPacket7 = []byte{\n\t0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x42, 0x68,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48,\n\t0x00, 0x00, 0x00, 0x12, 0x02, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c,\n\t0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xa8, 0x00, 0x54,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00,\n}\n\n// expanded flow sample - extended router flow record IPv6 next hop\nvar SFlowTestPacket8 = []byte{\n\t0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,\n\t0xc0, 0xa8, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x02, 0x7e, 0x32, 0xe0, 0xe4, 0x7c,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x01, 0x23,\n\t0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00,\n\t0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x56, 0x02,\n\t0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xea,\n\t0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x02,\n\t0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,\n}\n\n// Counter Sample - port name\nvar SFlowTestPacket9 = []byte{\n\t0x00, 0x00, 0x00, 0x05,\n\t0x00, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb3, 0x6d,\n\t0x0e, 0x04, 0xd2, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xd8,\n\t0x00, 0x00, 0x5b, 0xe0, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02,\n\t0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,\n\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x03, 0xec, 0x00, 0x00, 0x00, 0x0c,\n\t0x00, 0x00, 0x62, 0xd3, 0x3c, 0xe7, 0x6e, 0x49, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xed,\n\t0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0e, 0x74, 0x61, 0x70, 0x64, 0x39, 0x38, 0x31, 0x35,\n\t0x34, 0x66, 0x32, 0x2d, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58,\n\t0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x54, 0x0b, 0xe4, 0x00,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x49,\n\t0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x0b,\n\t0x00, 0x00, 0x01, 0xd2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\n// Vlan counter samples\nvar SFlowTestPacket10 = []byte{\n\t0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,\n\t0x0a, 0x14, 0x04, 0x00, 0x00, 0x00, 0x00, 0x64,\n\t0x00, 0x01, 0x78, 0xe0, 0x73, 0x03, 0x48, 0x78,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04,\n\t0x00, 0x00, 0x00, 0x34, 0x00, 0x01, 0x78, 0xe0,\n\t0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05,\n\t0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0a,\n\t0x00, 0x00, 0x00, 0x00, 0x01, 0x8c, 0x2c, 0xcc,\n\t0x00, 0x00, 0x96, 0x83, 0x00, 0x02, 0x90, 0x16,\n\t0x00, 0x01, 0xf6, 0x73, 0x00, 0x00, 0x00, 0x00,\n}\n\n//LACP counter samples\nvar SFlowTestPacket11 = []byte{\n\t0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,\n\t0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x38, 0xe5, 0x05, 0xae, 0x16, 0x18,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,\n\t0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x0d, 0x30,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x38,\n\t0x7e, 0x60, 0x69, 0x73, 0x8f, 0x42, 0x00, 0x06,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00,\n\t0x00, 0x00, 0x00, 0x01, 0x05, 0x75, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,\n\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x95,\n\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n}\n\n// Test packet collected from live network. - contains ethernet frame flow record\nvar SFlowEthernetFramePacket = []byte{\n\t0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0xb9, 0x78, 0x16, 0xf6, 0x00, 0x01, 0x86, 0xa0,\n\t0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x32, 0x97, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8,\n\t0x00, 0x01, 0xe8, 0x48, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10,\n\t0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00, 0x00, 0x1d, 0xb5, 0xa2, 0x5f, 0xc0, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x7e,\n\t0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8, 0x00, 0x01, 0xec, 0x30, 0x00, 0x00, 0x00, 0x00,\n\t0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,\n\t0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00,\n\t0x7a, 0x7d, 0x48, 0x51, 0xaa, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8,\n\t0x00, 0x01, 0xf0, 0x18, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10,\n\t0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00, 0x7a, 0x7d, 0x48, 0x51, 0xaa, 0xc7, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80,\n\t0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8, 0x00, 0x01, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,\n\t0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00,\n\t0x7a, 0x7d, 0x48, 0x51, 0xaa, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8,\n\t0x00, 0x01, 0xf7, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10,\n\t0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00, 0x9e, 0x2b, 0xbb, 0x23, 0x50, 0xb5, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x82,\n\t0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8, 0x00, 0x01, 0xfb, 0xd0, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,\n\t0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x1d, 0xb5, 0xa2, 0x5f, 0xc0, 0x00, 0x00,\n\t0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01,\n\t0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8,\n\t0x00, 0x01, 0xff, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03,\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10,\n\t0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00, 0x9e, 0x2b, 0xbb, 0x23, 0x50, 0xb5, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x03,\n}\n\n// Openflow counter sample\nvar SFlowTestPacket12 = []byte{\n\t0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x01, 0xb3, 0x5a, 0x0e, 0x04, 0x12, 0xe0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,\n\t0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x5b, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x04,\n\t0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x03, 0xec,\n\t0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x62, 0xd3, 0x3c, 0xe7, 0x6e, 0x49, 0x00, 0x00, 0xff, 0xfe,\n\t0x00, 0x00, 0x03, 0xed, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x06, 0x62, 0x72, 0x2d, 0x69,\n\t0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x0b,\n\t0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x05, 0xf5, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00,\n}\n\n// AppResources and Ovsdb counter samples\nvar SFlowTestPacket13 = []byte{\n\t0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x01, 0xb3, 0x5f, 0x0e, 0x04, 0x51, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,\n\t0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x5b, 0xdd, 0x02, 0x00, 0x03, 0xe8, 0x00, 0x00, 0x00, 0x02,\n\t0x00, 0x00, 0x08, 0x9b, 0x00, 0x00, 0x00, 0x28, 0x00, 0x0b, 0x15, 0x2d, 0x00, 0x0a, 0x37, 0x39,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x08, 0x9f, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x03, 0xf7, 0x00, 0x00, 0x01, 0x48,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestDecodeUDPSFlow(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket1, LayerTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeSFlow}, t)\n\tif got, ok := p.TransportLayer().(*UDP); ok {\n\t\twant := &UDP{\n\t\t\tBaseLayer: BaseLayer{SFlowTestPacket1[34:42], SFlowTestPacket1[42:]},\n\t\t\tsPort:     []byte{199, 87},\n\t\t\tdPort:     []byte{24, 199},\n\t\t\tSrcPort:   51031,\n\t\t\tDstPort:   6343,\n\t\t\tChecksum:  8763,\n\t\t\tLength:    1448,\n\t\t}\n\t\tif !reflect.DeepEqual(want, got) {\n\t\t\tt.Errorf(\"UDP layer mismatch, \\nwant  %#v\\ngot %#v\\n\", want, got)\n\t\t}\n\t} else {\n\t\tt.Error(\"Transport layer packet not UDP\")\n\t}\n}\n\nfunc TestDecodeSFlowDatagram(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket1, LayerTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeSFlow}, t)\n\tif got, ok := p.ApplicationLayer().(*SFlowDatagram); ok {\n\t\twant := &SFlowDatagram{\n\t\t\tDatagramVersion: uint32(5),\n\t\t\tAgentAddress:    []byte{0xa, 0x1, 0xf8, 0x16},\n\t\t\tSubAgentID:      uint32(17),\n\t\t\tSequenceNumber:  uint32(40443),\n\t\t\tAgentUptime:     uint32(1078576845),\n\t\t\tSampleCount:     uint32(7),\n\t\t\tFlowSamples: []SFlowFlowSample{\n\t\t\t\tSFlowFlowSample{\n\t\t\t\t\tEnterpriseID:    0x0,\n\t\t\t\t\tFormat:          0x1,\n\t\t\t\t\tSampleLength:    0xd0,\n\t\t\t\t\tSequenceNumber:  0x2627e8,\n\t\t\t\t\tSourceIDClass:   0x0,\n\t\t\t\t\tSourceIDIndex:   0x213,\n\t\t\t\t\tSamplingRate:    0x3e80,\n\t\t\t\t\tSamplePool:      0x50bde580,\n\t\t\t\t\tDropped:         0x0,\n\t\t\t\t\tInputInterface:  0x213,\n\t\t\t\t\tOutputInterface: 0x0,\n\t\t\t\t\tRecordCount:     0x2,\n\t\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\t\tSFlowRawPacketFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x1,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x90,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tHeaderProtocol: 0x1,\n\t\t\t\t\t\t\tFrameLength:    0x5d2,\n\t\t\t\t\t\t\tPayloadRemoved: 0x4,\n\t\t\t\t\t\t\tHeaderLength:   0x80,\n\t\t\t\t\t\t\tHeader:         gopacket.NewPacket(SFlowTestPacket1[134:262], LayerTypeEthernet, gopacket.Default),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowExtendedSwitchFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x3e9,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x10,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tIncomingVLAN:         0x202,\n\t\t\t\t\t\t\tIncomingVLANPriority: 0x0,\n\t\t\t\t\t\t\tOutgoingVLAN:         0x0,\n\t\t\t\t\t\t\tOutgoingVLANPriority: 0x0,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSFlowFlowSample{\n\t\t\t\t\tEnterpriseID:    0x0,\n\t\t\t\t\tFormat:          0x1,\n\t\t\t\t\tSampleLength:    0xd0,\n\t\t\t\t\tSequenceNumber:  0x15e5c1e,\n\t\t\t\t\tSourceIDClass:   0x0,\n\t\t\t\t\tSourceIDIndex:   0x257,\n\t\t\t\t\tSamplingRate:    0x7d0,\n\t\t\t\t\tSamplePool:      0xb12fa290,\n\t\t\t\t\tDropped:         0x0,\n\t\t\t\t\tInputInterface:  0x257,\n\t\t\t\t\tOutputInterface: 0x0,\n\t\t\t\t\tRecordCount:     0x2,\n\t\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\t\tSFlowRawPacketFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x1,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x90,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tHeaderProtocol: 0x1,\n\t\t\t\t\t\t\tFrameLength:    0x5ee,\n\t\t\t\t\t\t\tPayloadRemoved: 0x4,\n\t\t\t\t\t\t\tHeaderLength:   0x80,\n\t\t\t\t\t\t\tHeader:         gopacket.NewPacket(SFlowTestPacket1[350:478], LayerTypeEthernet, gopacket.Default),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowExtendedSwitchFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x3e9,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x10,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tIncomingVLAN:         0x202,\n\t\t\t\t\t\t\tIncomingVLANPriority: 0x0,\n\t\t\t\t\t\t\tOutgoingVLAN:         0x0,\n\t\t\t\t\t\t\tOutgoingVLANPriority: 0x0,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSFlowFlowSample{\n\t\t\t\t\tEnterpriseID:    0x0,\n\t\t\t\t\tFormat:          0x1,\n\t\t\t\t\tSampleLength:    0xd0,\n\t\t\t\t\tSequenceNumber:  0x15acdd0,\n\t\t\t\t\tSourceIDClass:   0x0,\n\t\t\t\t\tSourceIDIndex:   0x255,\n\t\t\t\t\tSamplingRate:    0x7d0,\n\t\t\t\t\tSamplePool:      0x9567e130,\n\t\t\t\t\tDropped:         0x0,\n\t\t\t\t\tInputInterface:  0x255,\n\t\t\t\t\tOutputInterface: 0x0,\n\t\t\t\t\tRecordCount:     0x2,\n\t\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\t\tSFlowRawPacketFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x1,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x90,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tHeaderProtocol: 0x1,\n\t\t\t\t\t\t\tFrameLength:    0x446,\n\t\t\t\t\t\t\tPayloadRemoved: 0x4,\n\t\t\t\t\t\t\tHeaderLength:   0x80,\n\t\t\t\t\t\t\tHeader:         gopacket.NewPacket(SFlowTestPacket1[566:694], LayerTypeEthernet, gopacket.Default),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowExtendedSwitchFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x3e9,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x10,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tIncomingVLAN:         0x202,\n\t\t\t\t\t\t\tIncomingVLANPriority: 0x0,\n\t\t\t\t\t\t\tOutgoingVLAN:         0x0,\n\t\t\t\t\t\t\tOutgoingVLANPriority: 0x0,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSFlowFlowSample{\n\t\t\t\t\tEnterpriseID:    0x0,\n\t\t\t\t\tFormat:          0x1,\n\t\t\t\t\tSampleLength:    0xd0,\n\t\t\t\t\tSequenceNumber:  0x15e5c1f,\n\t\t\t\t\tSourceIDClass:   0x0,\n\t\t\t\t\tSourceIDIndex:   0x257,\n\t\t\t\t\tSamplingRate:    0x7d0,\n\t\t\t\t\tSamplePool:      0xb12faa60,\n\t\t\t\t\tDropped:         0x0,\n\t\t\t\t\tInputInterface:  0x257,\n\t\t\t\t\tOutputInterface: 0x0,\n\t\t\t\t\tRecordCount:     0x2,\n\t\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\t\tSFlowRawPacketFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x1,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x90,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tHeaderProtocol: 0x1,\n\t\t\t\t\t\t\tFrameLength:    0x5ee,\n\t\t\t\t\t\t\tPayloadRemoved: 0x4,\n\t\t\t\t\t\t\tHeaderLength:   0x80,\n\t\t\t\t\t\t\tHeader:         gopacket.NewPacket(SFlowTestPacket1[958:1086], LayerTypeEthernet, gopacket.Default),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowExtendedSwitchFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x3e9,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x10,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tIncomingVLAN:         0x202,\n\t\t\t\t\t\t\tIncomingVLANPriority: 0x0,\n\t\t\t\t\t\t\tOutgoingVLAN:         0x0,\n\t\t\t\t\t\t\tOutgoingVLANPriority: 0x0,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSFlowFlowSample{\n\t\t\t\t\tEnterpriseID:    0x0,\n\t\t\t\t\tFormat:          0x1,\n\t\t\t\t\tSampleLength:    0xd0,\n\t\t\t\t\tSequenceNumber:  0x15acdd1,\n\t\t\t\t\tSourceIDClass:   0x0,\n\t\t\t\t\tSourceIDIndex:   0x255,\n\t\t\t\t\tSamplingRate:    0x7d0,\n\t\t\t\t\tSamplePool:      0x9567e900,\n\t\t\t\t\tDropped:         0x0,\n\t\t\t\t\tInputInterface:  0x255,\n\t\t\t\t\tOutputInterface: 0x257,\n\t\t\t\t\tRecordCount:     0x2,\n\t\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\t\tSFlowRawPacketFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x1,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x90,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tHeaderProtocol: 0x1,\n\t\t\t\t\t\t\tFrameLength:    0x5ee,\n\t\t\t\t\t\t\tPayloadRemoved: 0x4,\n\t\t\t\t\t\t\tHeaderLength:   0x80,\n\t\t\t\t\t\t\tHeader:         gopacket.NewPacket(SFlowTestPacket1[1174:1302], LayerTypeEthernet, gopacket.Default),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowExtendedSwitchFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x3e9,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x10,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tIncomingVLAN:         0x202,\n\t\t\t\t\t\t\tIncomingVLANPriority: 0x0,\n\t\t\t\t\t\t\tOutgoingVLAN:         0x202,\n\t\t\t\t\t\t\tOutgoingVLANPriority: 0x0,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSFlowFlowSample{\n\t\t\t\t\tEnterpriseID:    0x0,\n\t\t\t\t\tFormat:          0x1,\n\t\t\t\t\tSampleLength:    0x94,\n\t\t\t\t\tSequenceNumber:  0x15e5c20,\n\t\t\t\t\tSourceIDClass:   0x0,\n\t\t\t\t\tSourceIDIndex:   0x257,\n\t\t\t\t\tSamplingRate:    0x7d0,\n\t\t\t\t\tSamplePool:      0xb12fb230,\n\t\t\t\t\tDropped:         0x0,\n\t\t\t\t\tInputInterface:  0x257,\n\t\t\t\t\tOutputInterface: 0x0,\n\t\t\t\t\tRecordCount:     0x2,\n\t\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\t\tSFlowRawPacketFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x1,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x54,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tHeaderProtocol: 0x1,\n\t\t\t\t\t\t\tFrameLength:    0x46,\n\t\t\t\t\t\t\tPayloadRemoved: 0x4,\n\t\t\t\t\t\t\tHeaderLength:   0x42,\n\t\t\t\t\t\t\tHeader:         gopacket.NewPacket(SFlowTestPacket1[1390:1458], LayerTypeEthernet, gopacket.Default),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowExtendedSwitchFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x3e9,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x10,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tIncomingVLAN:         0x202,\n\t\t\t\t\t\t\tIncomingVLANPriority: 0x0,\n\t\t\t\t\t\t\tOutgoingVLAN:         0x0,\n\t\t\t\t\t\t\tOutgoingVLANPriority: 0x0,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCounterSamples: []SFlowCounterSample{\n\t\t\t\tSFlowCounterSample{\n\t\t\t\t\tFormat:         0x2,\n\t\t\t\t\tSampleLength:   0xa8,\n\t\t\t\t\tSequenceNumber: 0x20f2,\n\t\t\t\t\tSourceIDClass:  0x0,\n\t\t\t\t\tSourceIDIndex:  0x20a,\n\t\t\t\t\tRecordCount:    0x2,\n\t\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\t\tSFlowGenericInterfaceCounters{\n\t\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x1,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x58,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tIfIndex:            0x20a,\n\t\t\t\t\t\t\tIfType:             0x6,\n\t\t\t\t\t\t\tIfSpeed:            0x2540be400,\n\t\t\t\t\t\t\tIfDirection:        0x1,\n\t\t\t\t\t\t\tIfStatus:           0x3,\n\t\t\t\t\t\t\tIfInOctets:         0x129826db06c0b,\n\t\t\t\t\t\t\tIfInUcastPkts:      0xcb0ddd96,\n\t\t\t\t\t\t\tIfInMulticastPkts:  0x6a8c6,\n\t\t\t\t\t\t\tIfInBroadcastPkts:  0x7b,\n\t\t\t\t\t\t\tIfInDiscards:       0x0,\n\t\t\t\t\t\t\tIfInErrors:         0x0,\n\t\t\t\t\t\t\tIfInUnknownProtos:  0x0,\n\t\t\t\t\t\t\tIfOutOctets:        0x340235587c9e,\n\t\t\t\t\t\t\tIfOutUcastPkts:     0x56642571,\n\t\t\t\t\t\t\tIfOutMulticastPkts: 0x705ac4,\n\t\t\t\t\t\t\tIfOutBroadcastPkts: 0x908f1,\n\t\t\t\t\t\t\tIfOutDiscards:      0x0,\n\t\t\t\t\t\t\tIfOutErrors:        0x0,\n\t\t\t\t\t\t\tIfPromiscuousMode:  0x0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowEthernetCounters{\n\t\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x2,\n\t\t\t\t\t\t\t\tFlowDataLength: 0x34,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tAlignmentErrors:           0x0,\n\t\t\t\t\t\t\tFCSErrors:                 0x0,\n\t\t\t\t\t\t\tSingleCollisionFrames:     0x0,\n\t\t\t\t\t\t\tMultipleCollisionFrames:   0x0,\n\t\t\t\t\t\t\tSQETestErrors:             0x0,\n\t\t\t\t\t\t\tDeferredTransmissions:     0x0,\n\t\t\t\t\t\t\tLateCollisions:            0x0,\n\t\t\t\t\t\t\tExcessiveCollisions:       0x0,\n\t\t\t\t\t\t\tInternalMacTransmitErrors: 0x0,\n\t\t\t\t\t\t\tCarrierSenseErrors:        0x0,\n\t\t\t\t\t\t\tFrameTooLongs:             0x0,\n\t\t\t\t\t\t\tInternalMacReceiveErrors:  0x0,\n\t\t\t\t\t\t\tSymbolErrors:              0x0,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tif !reflect.DeepEqual(want, got) {\n\t\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t\t}\n\t} else {\n\t\tt.Error(\"Application layer packet not UDP\")\n\t}\n}\n\nfunc TestPacketPacket0(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket2, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeSFlow}, t)\n\tif got, ok := p.ApplicationLayer().(*SFlowDatagram); ok {\n\t\twant := &SFlowDatagram{\n\t\t\tDatagramVersion: uint32(5),\n\t\t\tAgentAddress:    []byte{192, 168, 91, 17},\n\t\t\tSubAgentID:      uint32(0),\n\t\t\tSequenceNumber:  uint32(46394),\n\t\t\tAgentUptime:     uint32(52000),\n\t\t\tSampleCount:     uint32(3),\n\t\t\tFlowSamples: []SFlowFlowSample{\n\t\t\t\tSFlowFlowSample{\n\t\t\t\t\tEnterpriseID:    0x0,\n\t\t\t\t\tFormat:          0x1,\n\t\t\t\t\tSampleLength:    340,\n\t\t\t\t\tSequenceNumber:  139118,\n\t\t\t\t\tSourceIDClass:   0,\n\t\t\t\t\tSourceIDIndex:   3,\n\t\t\t\t\tSamplingRate:    1,\n\t\t\t\t\tSamplePool:      139118,\n\t\t\t\t\tDropped:         0,\n\t\t\t\t\tInputInterface:  3,\n\t\t\t\t\tOutputInterface: 1073741823,\n\t\t\t\t\tRecordCount:     4,\n\t\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\t\tSFlowExtendedURLRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0,\n\t\t\t\t\t\t\t\tFormat:         1005,\n\t\t\t\t\t\t\t\tFlowDataLength: 48,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDirection: SFlowURLsrc,\n\t\t\t\t\t\t\tURL:       \"http://www.sflow.org\",\n\t\t\t\t\t\t\tHost:      \"host1.sflow.org\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowExtendedUserFlow{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0,\n\t\t\t\t\t\t\t\tFormat:         1004,\n\t\t\t\t\t\t\t\tFlowDataLength: 44,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSourceCharSet:      SFlowCSUTF8,\n\t\t\t\t\t\t\tSourceUserID:       \"source user\",\n\t\t\t\t\t\t\tDestinationCharSet: SFlowCSUTF8,\n\t\t\t\t\t\t\tDestinationUserID:  \"destination user\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowExtendedGatewayFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0,\n\t\t\t\t\t\t\t\tFormat:         1003,\n\t\t\t\t\t\t\t\tFlowDataLength: 100,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tNextHop:     []byte{0x0d, 0x0c, 0x0b, 0x0a},\n\t\t\t\t\t\t\tAS:          65001,\n\t\t\t\t\t\t\tSourceAS:    123,\n\t\t\t\t\t\t\tPeerAS:      999,\n\t\t\t\t\t\t\tASPathCount: 3,\n\t\t\t\t\t\t\tASPath: []SFlowASDestination{\n\t\t\t\t\t\t\t\tSFlowASDestination{\n\t\t\t\t\t\t\t\t\tType:    SFlowASSequence,\n\t\t\t\t\t\t\t\t\tCount:   3,\n\t\t\t\t\t\t\t\t\tMembers: []uint32{123, 456, 789},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tSFlowASDestination{\n\t\t\t\t\t\t\t\t\tType:    SFlowASSet,\n\t\t\t\t\t\t\t\t\tCount:   3,\n\t\t\t\t\t\t\t\t\tMembers: []uint32{11111, 22222, 33333},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tSFlowASDestination{\n\t\t\t\t\t\t\t\t\tType:    SFlowASSequence,\n\t\t\t\t\t\t\t\t\tCount:   3,\n\t\t\t\t\t\t\t\t\tMembers: []uint32{777, 888, 999},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tCommunities: []uint32{12, 13},\n\t\t\t\t\t\t\tLocalPref:   432,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowRawPacketFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x1,\n\t\t\t\t\t\t\t\tFlowDataLength: 84,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tHeaderProtocol: 1,\n\t\t\t\t\t\t\tFrameLength:    70,\n\t\t\t\t\t\t\tPayloadRemoved: 4,\n\t\t\t\t\t\t\tHeaderLength:   0x42,\n\t\t\t\t\t\t\tHeader:         gopacket.NewPacket(SFlowTestPacket2[350:418], LayerTypeEthernet, gopacket.Default),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSFlowFlowSample{\n\t\t\t\t\tEnterpriseID:    0x0,\n\t\t\t\t\tFormat:          0x1,\n\t\t\t\t\tSampleLength:    400,\n\t\t\t\t\tSequenceNumber:  139119,\n\t\t\t\t\tSourceIDClass:   0,\n\t\t\t\t\tSourceIDIndex:   3,\n\t\t\t\t\tSamplingRate:    1,\n\t\t\t\t\tSamplePool:      139119,\n\t\t\t\t\tDropped:         0,\n\t\t\t\t\tInputInterface:  1073741823,\n\t\t\t\t\tOutputInterface: 3,\n\t\t\t\t\tRecordCount:     4,\n\t\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\t\tSFlowExtendedURLRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0,\n\t\t\t\t\t\t\t\tFormat:         1005,\n\t\t\t\t\t\t\t\tFlowDataLength: 48,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDirection: SFlowURLsrc,\n\t\t\t\t\t\t\tURL:       \"http://www.sflow.org\",\n\t\t\t\t\t\t\tHost:      \"host1.sflow.org\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowExtendedUserFlow{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0,\n\t\t\t\t\t\t\t\tFormat:         1004,\n\t\t\t\t\t\t\t\tFlowDataLength: 44,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSourceCharSet:      SFlowCSUTF8,\n\t\t\t\t\t\t\tSourceUserID:       \"source user\",\n\t\t\t\t\t\t\tDestinationCharSet: SFlowCSUTF8,\n\t\t\t\t\t\t\tDestinationUserID:  \"destination user\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowExtendedGatewayFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0,\n\t\t\t\t\t\t\t\tFormat:         1003,\n\t\t\t\t\t\t\t\tFlowDataLength: 100,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tNextHop:     []byte{0x0d, 0x0c, 0x0b, 0x0a},\n\t\t\t\t\t\t\tAS:          65001,\n\t\t\t\t\t\t\tSourceAS:    123,\n\t\t\t\t\t\t\tPeerAS:      999,\n\t\t\t\t\t\t\tASPathCount: 3,\n\t\t\t\t\t\t\tASPath: []SFlowASDestination{\n\t\t\t\t\t\t\t\tSFlowASDestination{\n\t\t\t\t\t\t\t\t\tType:    SFlowASSequence,\n\t\t\t\t\t\t\t\t\tCount:   3,\n\t\t\t\t\t\t\t\t\tMembers: []uint32{123, 456, 789},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tSFlowASDestination{\n\t\t\t\t\t\t\t\t\tType:    SFlowASSet,\n\t\t\t\t\t\t\t\t\tCount:   3,\n\t\t\t\t\t\t\t\t\tMembers: []uint32{11111, 22222, 33333},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tSFlowASDestination{\n\t\t\t\t\t\t\t\t\tType:    SFlowASSequence,\n\t\t\t\t\t\t\t\t\tCount:   3,\n\t\t\t\t\t\t\t\t\tMembers: []uint32{777, 888, 999},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tCommunities: []uint32{12, 13},\n\t\t\t\t\t\t\tLocalPref:   432,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowRawPacketFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x1,\n\t\t\t\t\t\t\t\tFlowDataLength: 144,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tHeaderProtocol: 1,\n\t\t\t\t\t\t\tFrameLength:    390,\n\t\t\t\t\t\t\tPayloadRemoved: 4,\n\t\t\t\t\t\t\tHeaderLength:   0x80,\n\t\t\t\t\t\t\tHeader:         gopacket.NewPacket(SFlowTestPacket2[698:826], LayerTypeEthernet, gopacket.Default),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSFlowFlowSample{\n\t\t\t\t\tEnterpriseID:    0x0,\n\t\t\t\t\tFormat:          0x1,\n\t\t\t\t\tSampleLength:    340,\n\t\t\t\t\tSequenceNumber:  139120,\n\t\t\t\t\tSourceIDClass:   0,\n\t\t\t\t\tSourceIDIndex:   3,\n\t\t\t\t\tSamplingRate:    1,\n\t\t\t\t\tSamplePool:      139120,\n\t\t\t\t\tDropped:         0,\n\t\t\t\t\tInputInterface:  3,\n\t\t\t\t\tOutputInterface: 1073741823,\n\t\t\t\t\tRecordCount:     4,\n\t\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\t\tSFlowExtendedURLRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0,\n\t\t\t\t\t\t\t\tFormat:         1005,\n\t\t\t\t\t\t\t\tFlowDataLength: 48,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDirection: SFlowURLsrc,\n\t\t\t\t\t\t\tURL:       \"http://www.sflow.org\",\n\t\t\t\t\t\t\tHost:      \"host1.sflow.org\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowExtendedUserFlow{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0,\n\t\t\t\t\t\t\t\tFormat:         1004,\n\t\t\t\t\t\t\t\tFlowDataLength: 44,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSourceCharSet:      SFlowCSUTF8,\n\t\t\t\t\t\t\tSourceUserID:       \"source user\",\n\t\t\t\t\t\t\tDestinationCharSet: SFlowCSUTF8,\n\t\t\t\t\t\t\tDestinationUserID:  \"destination user\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowExtendedGatewayFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0,\n\t\t\t\t\t\t\t\tFormat:         1003,\n\t\t\t\t\t\t\t\tFlowDataLength: 100,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tNextHop:     []byte{0x0d, 0x0c, 0x0b, 0x0a},\n\t\t\t\t\t\t\tAS:          65001,\n\t\t\t\t\t\t\tSourceAS:    123,\n\t\t\t\t\t\t\tPeerAS:      999,\n\t\t\t\t\t\t\tASPathCount: 3,\n\t\t\t\t\t\t\tASPath: []SFlowASDestination{\n\t\t\t\t\t\t\t\tSFlowASDestination{\n\t\t\t\t\t\t\t\t\tType:    SFlowASSequence,\n\t\t\t\t\t\t\t\t\tCount:   3,\n\t\t\t\t\t\t\t\t\tMembers: []uint32{123, 456, 789},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tSFlowASDestination{\n\t\t\t\t\t\t\t\t\tType:    SFlowASSet,\n\t\t\t\t\t\t\t\t\tCount:   3,\n\t\t\t\t\t\t\t\t\tMembers: []uint32{11111, 22222, 33333},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tSFlowASDestination{\n\t\t\t\t\t\t\t\t\tType:    SFlowASSequence,\n\t\t\t\t\t\t\t\t\tCount:   3,\n\t\t\t\t\t\t\t\t\tMembers: []uint32{777, 888, 999},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tCommunities: []uint32{12, 13},\n\t\t\t\t\t\t\tLocalPref:   432,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowRawPacketFlowRecord{\n\t\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\t\tFormat:         0x1,\n\t\t\t\t\t\t\t\tFlowDataLength: 84,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tHeaderProtocol: 1,\n\t\t\t\t\t\t\tFrameLength:    70,\n\t\t\t\t\t\t\tPayloadRemoved: 4,\n\t\t\t\t\t\t\tHeaderLength:   0x42,\n\t\t\t\t\t\t\tHeader:         gopacket.NewPacket(SFlowTestPacket2[1106:1174], LayerTypeEthernet, gopacket.Default),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tif !reflect.DeepEqual(want, got) {\n\t\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t\t}\n\t} else {\n\t\tt.Error(\"Application layer packet not UDP\")\n\t}\n}\n\nfunc TestDecodeProcessorCounter(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket3, LayerTypeSFlow, gopacket.Default)\n\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)\n\n\tgot := p.ApplicationLayer().(*SFlowDatagram)\n\n\twant := &SFlowDatagram{\n\t\tDatagramVersion: uint32(5),\n\t\tAgentAddress:    []byte{0x0a, 0x14, 0x04, 0x00},\n\t\tSubAgentID:      uint32(0x64),\n\t\tSequenceNumber:  uint32(96480),\n\t\tAgentUptime:     uint32(1929595000),\n\t\tSampleCount:     uint32(1),\n\t\tCounterSamples: []SFlowCounterSample{\n\t\t\tSFlowCounterSample{\n\t\t\t\tFormat:         SFlowTypeExpandedCounterSample,\n\t\t\t\tSampleLength:   0x34,\n\t\t\t\tSequenceNumber: 0x0178e0,\n\t\t\t\tSourceIDClass:  0x00,\n\t\t\t\tSourceIDIndex:  0x01,\n\t\t\t\tRecordCount:    0x01,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowProcessorCounters{\n\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         SFlowTypeProcessorCounters,\n\t\t\t\t\t\t\tFlowDataLength: 0x1c,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFiveSecCpu:  0x05aa,\n\t\t\t\t\t\tOneMinCpu:   0x055a,\n\t\t\t\t\t\tFiveMinCpu:  0x0532,\n\t\t\t\t\t\tTotalMemory: 0xe78d7000,\n\t\t\t\t\t\tFreeMemory:  0x55e77000,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tif !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t}\n}\n\nfunc TestDecodeExtendedSwitchFlow(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket4, LayerTypeSFlow, gopacket.Default)\n\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)\n\n\tgot := p.ApplicationLayer().(*SFlowDatagram)\n\n\twant := &SFlowDatagram{\n\t\tDatagramVersion: uint32(5),\n\t\tAgentAddress:    []byte{0xc0, 0xa8, 0x01, 0x07},\n\t\tSubAgentID:      uint32(0x00),\n\t\tSequenceNumber:  uint32(0x027e),\n\t\tAgentUptime:     uint32(0x32e0e47c),\n\t\tSampleCount:     uint32(1),\n\t\tFlowSamples: []SFlowFlowSample{\n\t\t\tSFlowFlowSample{\n\t\t\t\tFormat:                SFlowTypeFlowSample,\n\t\t\t\tSampleLength:          0x38,\n\t\t\t\tSequenceNumber:        0x123,\n\t\t\t\tSourceIDClass:         0x00,\n\t\t\t\tSourceIDIndex:         0x1d,\n\t\t\t\tSamplingRate:          0x100,\n\t\t\t\tSamplePool:            0x337,\n\t\t\t\tDropped:               0x5623,\n\t\t\t\tInputInterfaceFormat:  0x00,\n\t\t\t\tInputInterface:        0x1d,\n\t\t\t\tOutputInterfaceFormat: 0x00,\n\t\t\t\tOutputInterface:       0x04,\n\t\t\t\tRecordCount:           0x01,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowExtendedSwitchFlowRecord{\n\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         SFlowTypeExtendedSwitchFlow,\n\t\t\t\t\t\t\tFlowDataLength: 0x10,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tIncomingVLAN:         0x03,\n\t\t\t\t\t\tIncomingVLANPriority: 0x02,\n\t\t\t\t\t\tOutgoingVLAN:         0x05,\n\t\t\t\t\t\tOutgoingVLANPriority: 0xffffffff,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tif !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t}\n}\n\nfunc TestDecodeExtendedRouterFlow(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket5, LayerTypeSFlow, gopacket.Default)\n\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)\n\n\tgot := p.ApplicationLayer().(*SFlowDatagram)\n\n\twant := &SFlowDatagram{\n\t\tDatagramVersion: uint32(5),\n\t\tAgentAddress:    []byte{0xc0, 0xa8, 0x01, 0x12},\n\t\tSubAgentID:      uint32(0x00),\n\t\tSequenceNumber:  uint32(0x027e),\n\t\tAgentUptime:     uint32(0x32e0e47c),\n\t\tSampleCount:     uint32(1),\n\t\tFlowSamples: []SFlowFlowSample{\n\t\t\tSFlowFlowSample{\n\t\t\t\tFormat:                SFlowTypeFlowSample,\n\t\t\t\tSampleLength:          0x34,\n\t\t\t\tSequenceNumber:        0x123,\n\t\t\t\tSourceIDClass:         0x00,\n\t\t\t\tSourceIDIndex:         0x1d,\n\t\t\t\tSamplingRate:          0x100,\n\t\t\t\tSamplePool:            0x334,\n\t\t\t\tDropped:               0x5602,\n\t\t\t\tInputInterfaceFormat:  0x00,\n\t\t\t\tInputInterface:        0x1d,\n\t\t\t\tOutputInterfaceFormat: 0x00,\n\t\t\t\tOutputInterface:       0x04,\n\t\t\t\tRecordCount:           0x01,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowExtendedRouterFlowRecord{\n\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         SFlowTypeExtendedRouterFlow,\n\t\t\t\t\t\t\tFlowDataLength: 0x10,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNextHop:                []byte{0xc0, 0xa8, 0x01, 0x21},\n\t\t\t\t\t\tNextHopSourceMask:      0xffffffff,\n\t\t\t\t\t\tNextHopDestinationMask: 0xffffff80,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tif !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t}\n}\n\nfunc TestDecodeExtendedRouterFlowIPv6(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket8, LayerTypeSFlow, gopacket.Default)\n\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)\n\n\tgot := p.ApplicationLayer().(*SFlowDatagram)\n\n\twant := &SFlowDatagram{\n\t\tDatagramVersion: uint32(5),\n\t\tAgentAddress:    []byte{0xc0, 0xa8, 0x01, 0x12},\n\t\tSubAgentID:      uint32(0x00),\n\t\tSequenceNumber:  uint32(0x027e),\n\t\tAgentUptime:     uint32(0x32e0e47c),\n\t\tSampleCount:     uint32(1),\n\t\tFlowSamples: []SFlowFlowSample{\n\t\t\tSFlowFlowSample{\n\t\t\t\tFormat:                SFlowTypeFlowSample,\n\t\t\t\tSampleLength:          0x34,\n\t\t\t\tSequenceNumber:        0x123,\n\t\t\t\tSourceIDClass:         0x00,\n\t\t\t\tSourceIDIndex:         0x1d,\n\t\t\t\tSamplingRate:          0x100,\n\t\t\t\tSamplePool:            0x334,\n\t\t\t\tDropped:               0x5602,\n\t\t\t\tInputInterfaceFormat:  0x00,\n\t\t\t\tInputInterface:        0x1d,\n\t\t\t\tOutputInterfaceFormat: 0x00,\n\t\t\t\tOutputInterface:       0x04,\n\t\t\t\tRecordCount:           0x01,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowExtendedRouterFlowRecord{\n\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         SFlowTypeExtendedRouterFlow,\n\t\t\t\t\t\t\tFlowDataLength: 0x1c,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNextHop:                []byte{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},\n\t\t\t\t\t\tNextHopSourceMask:      0xffffffff,\n\t\t\t\t\t\tNextHopDestinationMask: 0xffffff80,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tif !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t}\n}\n\nfunc TestDecodeExtendedIpv4TunnelIngressFlow(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket6, LayerTypeSFlow, gopacket.Default)\n\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)\n\n\tgot := p.ApplicationLayer().(*SFlowDatagram)\n\n\twant := &SFlowDatagram{\n\t\tDatagramVersion: uint32(5),\n\t\tAgentAddress:    []byte{0x7f, 0x0, 0x0, 0x1},\n\t\tSubAgentID:      uint32(0),\n\t\tSequenceNumber:  uint32(0x72),\n\t\tAgentUptime:     uint32(0x1bd50),\n\t\tSampleCount:     uint32(1),\n\t\tFlowSamples: []SFlowFlowSample{\n\t\t\tSFlowFlowSample{\n\t\t\t\tFormat:                SFlowTypeFlowSample,\n\t\t\t\tSampleLength:          0x48,\n\t\t\t\tSequenceNumber:        0x74,\n\t\t\t\tSourceIDClass:         0x0,\n\t\t\t\tSourceIDIndex:         0x20003e8,\n\t\t\t\tSamplingRate:          0x1,\n\t\t\t\tSamplePool:            0x74,\n\t\t\t\tDropped:               0x0,\n\t\t\t\tInputInterfaceFormat:  0x0,\n\t\t\t\tInputInterface:        0x0,\n\t\t\t\tOutputInterfaceFormat: 0x0,\n\t\t\t\tOutputInterface:       0x80000001,\n\t\t\t\tRecordCount:           0x1,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowExtendedIpv4TunnelIngressRecord{\n\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         SFlowTypeExtendedIpv4TunnelIngressFlow,\n\t\t\t\t\t\t\tFlowDataLength: 0x20,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowIpv4Record: SFlowIpv4Record{\n\t\t\t\t\t\t\tLength:   0x0,\n\t\t\t\t\t\t\tProtocol: 0x2f,\n\t\t\t\t\t\t\tIPSrc:    net.IP{0xc0, 0xa8, 0x0, 0x54},\n\t\t\t\t\t\t\tIPDst:    net.IP{0xc0, 0xa8, 0x0, 0x53},\n\t\t\t\t\t\t\tPortSrc:  0x0,\n\t\t\t\t\t\t\tPortDst:  0x0,\n\t\t\t\t\t\t\tTCPFlags: 0x0,\n\t\t\t\t\t\t\tTOS:      0x0,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tif !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t}\n}\n\nfunc TestDecodeExtendedIpv4TunnelEgressFlow(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket7, LayerTypeSFlow, gopacket.Default)\n\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)\n\n\tgot := p.ApplicationLayer().(*SFlowDatagram)\n\n\twant := &SFlowDatagram{\n\t\tDatagramVersion: uint32(5),\n\t\tAgentAddress:    []byte{0x7f, 0x0, 0x0, 0x1},\n\t\tSubAgentID:      uint32(1),\n\t\tSequenceNumber:  uint32(0x12),\n\t\tAgentUptime:     uint32(0x4268),\n\t\tSampleCount:     uint32(1),\n\t\tFlowSamples: []SFlowFlowSample{\n\t\t\tSFlowFlowSample{\n\t\t\t\tFormat:                SFlowTypeFlowSample,\n\t\t\t\tSampleLength:          0x48,\n\t\t\t\tSequenceNumber:        0x12,\n\t\t\t\tSourceIDClass:         0x0,\n\t\t\t\tSourceIDIndex:         0x20003e9,\n\t\t\t\tSamplingRate:          0x1,\n\t\t\t\tSamplePool:            0x12,\n\t\t\t\tDropped:               0x0,\n\t\t\t\tInputInterfaceFormat:  0x0,\n\t\t\t\tInputInterface:        0x6c,\n\t\t\t\tOutputInterfaceFormat: 0x0,\n\t\t\t\tOutputInterface:       0x80000001,\n\t\t\t\tRecordCount:           0x1,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowExtendedIpv4TunnelEgressRecord{\n\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         SFlowTypeExtendedIpv4TunnelEgressFlow,\n\t\t\t\t\t\t\tFlowDataLength: 0x20,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSFlowIpv4Record: SFlowIpv4Record{\n\t\t\t\t\t\t\tLength:   0x0,\n\t\t\t\t\t\t\tProtocol: 0x0,\n\t\t\t\t\t\t\tIPSrc:    net.IP{0x0, 0x0, 0x0, 0x0},\n\t\t\t\t\t\t\tIPDst:    net.IP{0xc0, 0xa8, 0x0, 0x54},\n\t\t\t\t\t\t\tPortSrc:  0x0,\n\t\t\t\t\t\t\tPortDst:  0x0,\n\t\t\t\t\t\t\tTCPFlags: 0x0,\n\t\t\t\t\t\t\tTOS:      0x0,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tif !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t}\n}\n\nfunc TestDecodeEthernetFrameFlow(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowEthernetFramePacket, LayerTypeSFlow, gopacket.Default)\n\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)\n\n\tgot := p.ApplicationLayer().(*SFlowDatagram)\n\n\twant := &SFlowDatagram{\n\t\tDatagramVersion: uint32(5),\n\t\tAgentAddress:    net.IP{0xb9, 0x78, 0x16, 0xf6},\n\t\tSubAgentID:      0x186a0,\n\t\tSequenceNumber:  0xb,\n\t\tAgentUptime:     0x3297,\n\t\tSampleCount:     0x7,\n\t\tFlowSamples: []SFlowFlowSample{\n\t\t\tSFlowFlowSample{\n\t\t\t\tEnterpriseID:          0x0,\n\t\t\t\tFormat:                0x1,\n\t\t\t\tSampleLength:          0x40,\n\t\t\t\tSequenceNumber:        0x7d,\n\t\t\t\tSourceIDClass:         0x0,\n\t\t\t\tSourceIDIndex:         0x3,\n\t\t\t\tSamplingRate:          0x3e8,\n\t\t\t\tSamplePool:            0x1e848,\n\t\t\t\tDropped:               0x0,\n\t\t\t\tInputInterfaceFormat:  0x0,\n\t\t\t\tInputInterface:        0x3fffffff,\n\t\t\t\tOutputInterfaceFormat: 0x0,\n\t\t\t\tOutputInterface:       0x3,\n\t\t\t\tRecordCount:           0x1,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowEthernetFrameFlowRecord{\n\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\t0x0,\n\t\t\t\t\t\t\t0x2,\n\t\t\t\t\t\t\t0x18,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFrameLength: 0x10,\n\t\t\t\t\t\tSrcMac:      net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},\n\t\t\t\t\t\tDstMac:      net.HardwareAddr{0x0, 0x1d, 0xb5, 0xa2, 0x5f, 0xc0},\n\t\t\t\t\t\tType:        0x3,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSFlowFlowSample{\n\t\t\t\tEnterpriseID:          0x0,\n\t\t\t\tFormat:                0x1,\n\t\t\t\tSampleLength:          0x40,\n\t\t\t\tSequenceNumber:        0x7e,\n\t\t\t\tSourceIDClass:         0x0,\n\t\t\t\tSourceIDIndex:         0x3,\n\t\t\t\tSamplingRate:          0x3e8,\n\t\t\t\tSamplePool:            0x1ec30,\n\t\t\t\tDropped:               0x0,\n\t\t\t\tInputInterfaceFormat:  0x0,\n\t\t\t\tInputInterface:        0x3fffffff,\n\t\t\t\tOutputInterfaceFormat: 0x0,\n\t\t\t\tOutputInterface:       0x3,\n\t\t\t\tRecordCount:           0x1,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowEthernetFrameFlowRecord{\n\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         0x2,\n\t\t\t\t\t\t\tFlowDataLength: 0x18,\n\t\t\t\t\t\t}, FrameLength: 0x10,\n\t\t\t\t\t\tSrcMac: net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},\n\t\t\t\t\t\tDstMac: net.HardwareAddr{0x7a, 0x7d, 0x48, 0x51, 0xaa, 0xc7},\n\t\t\t\t\t\tType:   0x3,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}, SFlowFlowSample{\n\t\t\t\tEnterpriseID:          0x0,\n\t\t\t\tFormat:                0x1,\n\t\t\t\tSampleLength:          0x40,\n\t\t\t\tSequenceNumber:        0x7f,\n\t\t\t\tSourceIDClass:         0x0,\n\t\t\t\tSourceIDIndex:         0x3,\n\t\t\t\tSamplingRate:          0x3e8,\n\t\t\t\tSamplePool:            0x1f018,\n\t\t\t\tDropped:               0x0,\n\t\t\t\tInputInterfaceFormat:  0x0,\n\t\t\t\tInputInterface:        0x3fffffff,\n\t\t\t\tOutputInterfaceFormat: 0x0,\n\t\t\t\tOutputInterface:       0x3,\n\t\t\t\tRecordCount:           0x1,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowEthernetFrameFlowRecord{\n\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         0x2,\n\t\t\t\t\t\t\tFlowDataLength: 0x18,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFrameLength: 0x10,\n\t\t\t\t\t\tSrcMac:      net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},\n\t\t\t\t\t\tDstMac:      net.HardwareAddr{0x7a, 0x7d, 0x48, 0x51, 0xaa, 0xc7},\n\t\t\t\t\t\tType:        0x3,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSFlowFlowSample{\n\t\t\t\tEnterpriseID:          0x0,\n\t\t\t\tFormat:                0x1,\n\t\t\t\tSampleLength:          0x40,\n\t\t\t\tSequenceNumber:        0x80,\n\t\t\t\tSourceIDClass:         0x0,\n\t\t\t\tSourceIDIndex:         0x3,\n\t\t\t\tSamplingRate:          0x3e8,\n\t\t\t\tSamplePool:            0x1f400,\n\t\t\t\tDropped:               0x0,\n\t\t\t\tInputInterfaceFormat:  0x0,\n\t\t\t\tInputInterface:        0x3fffffff,\n\t\t\t\tOutputInterfaceFormat: 0x0,\n\t\t\t\tOutputInterface:       0x3,\n\t\t\t\tRecordCount:           0x1,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowEthernetFrameFlowRecord{\n\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         0x2,\n\t\t\t\t\t\t\tFlowDataLength: 0x18,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFrameLength: 0x10,\n\t\t\t\t\t\tSrcMac:      net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},\n\t\t\t\t\t\tDstMac:      net.HardwareAddr{0x7a, 0x7d, 0x48, 0x51, 0xaa, 0xc7},\n\t\t\t\t\t\tType:        0x3,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSFlowFlowSample{\n\t\t\t\tEnterpriseID:          0x0,\n\t\t\t\tFormat:                0x1,\n\t\t\t\tSampleLength:          0x40,\n\t\t\t\tSequenceNumber:        0x81,\n\t\t\t\tSourceIDClass:         0x0,\n\t\t\t\tSourceIDIndex:         0x3,\n\t\t\t\tSamplingRate:          0x3e8,\n\t\t\t\tSamplePool:            0x1f7e8,\n\t\t\t\tDropped:               0x0,\n\t\t\t\tInputInterfaceFormat:  0x0,\n\t\t\t\tInputInterface:        0x3fffffff,\n\t\t\t\tOutputInterfaceFormat: 0x0,\n\t\t\t\tOutputInterface:       0x3,\n\t\t\t\tRecordCount:           0x1,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowEthernetFrameFlowRecord{\n\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         0x2,\n\t\t\t\t\t\t\tFlowDataLength: 0x18,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFrameLength: 0x10,\n\t\t\t\t\t\tSrcMac:      net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},\n\t\t\t\t\t\tDstMac:      net.HardwareAddr{0x9e, 0x2b, 0xbb, 0x23, 0x50, 0xb5},\n\t\t\t\t\t\tType:        0x3,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSFlowFlowSample{\n\t\t\t\tEnterpriseID:          0x0,\n\t\t\t\tFormat:                0x1,\n\t\t\t\tSampleLength:          0x40,\n\t\t\t\tSequenceNumber:        0x82,\n\t\t\t\tSourceIDClass:         0x0,\n\t\t\t\tSourceIDIndex:         0x3,\n\t\t\t\tSamplingRate:          0x3e8,\n\t\t\t\tSamplePool:            0x1fbd0,\n\t\t\t\tDropped:               0x0,\n\t\t\t\tInputInterfaceFormat:  0x0,\n\t\t\t\tInputInterface:        0x3,\n\t\t\t\tOutputInterfaceFormat: 0x0,\n\t\t\t\tOutputInterface:       0x3fffffff,\n\t\t\t\tRecordCount:           0x1,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowEthernetFrameFlowRecord{\n\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         0x2,\n\t\t\t\t\t\t\tFlowDataLength: 0x18,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFrameLength: 0x10,\n\t\t\t\t\t\tSrcMac:      net.HardwareAddr{0x0, 0x1d, 0xb5, 0xa2, 0x5f, 0xc0},\n\t\t\t\t\t\tDstMac:      net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},\n\t\t\t\t\t\tType:        0x3,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSFlowFlowSample{\n\t\t\t\tEnterpriseID:          0x0,\n\t\t\t\tFormat:                0x1,\n\t\t\t\tSampleLength:          0x40,\n\t\t\t\tSequenceNumber:        0x83,\n\t\t\t\tSourceIDClass:         0x0,\n\t\t\t\tSourceIDIndex:         0x3,\n\t\t\t\tSamplingRate:          0x3e8,\n\t\t\t\tSamplePool:            0x1ffb8,\n\t\t\t\tDropped:               0x0,\n\t\t\t\tInputInterfaceFormat:  0x0,\n\t\t\t\tInputInterface:        0x3fffffff,\n\t\t\t\tOutputInterfaceFormat: 0x0,\n\t\t\t\tOutputInterface:       0x3,\n\t\t\t\tRecordCount:           0x1,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowEthernetFrameFlowRecord{\n\t\t\t\t\t\tSFlowBaseFlowRecord: SFlowBaseFlowRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         0x2,\n\t\t\t\t\t\t\tFlowDataLength: 0x18,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFrameLength: 0x10,\n\t\t\t\t\t\tSrcMac:      net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},\n\t\t\t\t\t\tDstMac:      net.HardwareAddr{0x9e, 0x2b, 0xbb, 0x23, 0x50, 0xb5},\n\t\t\t\t\t\tType:        0x3,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tCounterSamples: []SFlowCounterSample(nil),\n\t}\n\tif !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t}\n}\n\nfunc TestDecodePortnameCounter(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket9, LayerTypeSFlow, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)\n\n\tgot := p.ApplicationLayer().(*SFlowDatagram)\n\n\twant := &SFlowDatagram{\n\t\tDatagramVersion: 0x5,\n\t\tAgentAddress:    net.IP{0x7f, 0x0, 0x0, 0x1},\n\t\tSequenceNumber:  0x1b36d,\n\t\tAgentUptime:     0xe04d248,\n\t\tSampleCount:     0x1,\n\t\tCounterSamples: []SFlowCounterSample{\n\t\t\tSFlowCounterSample{\n\t\t\t\tFormat:         0x2,\n\t\t\t\tSampleLength:   0xd8,\n\t\t\t\tSequenceNumber: 0x5be0,\n\t\t\t\tSourceIDIndex:  0xe,\n\t\t\t\tRecordCount:    0x4,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowEthernetCounters{\n\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\tFormat:         SFlowTypeEthernetInterfaceCounters,\n\t\t\t\t\t\t\tFlowDataLength: 0x34,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSingleCollisionFrames:     0xffffffff,\n\t\t\t\t\t\tMultipleCollisionFrames:   0xffffffff,\n\t\t\t\t\t\tSQETestErrors:             0xffffffff,\n\t\t\t\t\t\tDeferredTransmissions:     0xffffffff,\n\t\t\t\t\t\tLateCollisions:            0xffffffff,\n\t\t\t\t\t\tExcessiveCollisions:       0xffffffff,\n\t\t\t\t\t\tInternalMacTransmitErrors: 0xffffffff,\n\t\t\t\t\t\tCarrierSenseErrors:        0xffffffff,\n\t\t\t\t\t\tFrameTooLongs:             0xffffffff,\n\t\t\t\t\t\tInternalMacReceiveErrors:  0xffffffff,\n\t\t\t\t\t\tSymbolErrors:              0xffffffff,\n\t\t\t\t\t},\n\t\t\t\t\tSFlowOpenflowPortCounters{\n\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\tFormat:         SFlowTypeOpenflowPortCounters,\n\t\t\t\t\t\t\tFlowDataLength: 0xc,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDatapathID: 0x62d33ce76e49,\n\t\t\t\t\t\tPortNo:     0x3,\n\t\t\t\t\t},\n\t\t\t\t\tSFlowPORTNAME{\n\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\tFormat:         SFlowTypePORTNAMECounters,\n\t\t\t\t\t\t\tFlowDataLength: 0x14,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLen: 0x10,\n\t\t\t\t\t\tStr: \"tapd98154f2-00\",\n\t\t\t\t\t},\n\t\t\t\t\tSFlowGenericInterfaceCounters{\n\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\tFormat:         SFlowTypeGenericInterfaceCounters,\n\t\t\t\t\t\t\tFlowDataLength: 0x58,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tIfIndex:            0xe,\n\t\t\t\t\t\tIfType:             0x6,\n\t\t\t\t\t\tIfSpeed:            0x2540be400,\n\t\t\t\t\t\tIfDirection:        0x1,\n\t\t\t\t\t\tIfStatus:           0x3,\n\t\t\t\t\t\tIfInOctets:         0x4749,\n\t\t\t\t\t\tIfInUcastPkts:      0xb5,\n\t\t\t\t\t\tIfInBroadcastPkts:  0xffffffff,\n\t\t\t\t\t\tIfInUnknownProtos:  0xffffffff,\n\t\t\t\t\t\tIfOutOctets:        0x8a0b,\n\t\t\t\t\t\tIfOutUcastPkts:     0x1d2,\n\t\t\t\t\t\tIfOutMulticastPkts: 0xffffffff,\n\t\t\t\t\t\tIfOutBroadcastPkts: 0xffffffff,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tif !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t}\n}\n\nfunc TestDecodeVLANCounter(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket10, LayerTypeSFlow, gopacket.Default)\n\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)\n\n\tgot := p.ApplicationLayer().(*SFlowDatagram)\n\n\twant := &SFlowDatagram{\n\t\tDatagramVersion: uint32(5),\n\t\tAgentAddress:    []byte{0x0a, 0x14, 0x04, 0x00},\n\t\tSubAgentID:      uint32(0x64),\n\t\tSequenceNumber:  uint32(96480),\n\t\tAgentUptime:     uint32(1929595000),\n\t\tSampleCount:     uint32(1),\n\t\tCounterSamples: []SFlowCounterSample{\n\t\t\tSFlowCounterSample{\n\t\t\t\tFormat:         SFlowTypeExpandedCounterSample,\n\t\t\t\tSampleLength:   0x34,\n\t\t\t\tSequenceNumber: 0x0178e0,\n\t\t\t\tSourceIDClass:  0x00,\n\t\t\t\tSourceIDIndex:  0x01,\n\t\t\t\tRecordCount:    0x01,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowVLANCounters{\n\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         SFlowTypeVLANCounters,\n\t\t\t\t\t\t\tFlowDataLength: 0x1c,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVlanID:        0x0a,\n\t\t\t\t\t\tOctets:        0x018c2ccc,\n\t\t\t\t\t\tUcastPkts:     0x9683,\n\t\t\t\t\t\tMulticastPkts: 0x029016,\n\t\t\t\t\t\tBroadcastPkts: 0x01f673,\n\t\t\t\t\t\tDiscards:      0x00,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tif !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t}\n}\n\nfunc TestDecodeLACPCounter(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket11, LayerTypeSFlow, gopacket.Default)\n\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)\n\n\tgot := p.ApplicationLayer().(*SFlowDatagram)\n\n\twant := &SFlowDatagram{\n\t\tDatagramVersion: uint32(5),\n\t\tAgentAddress:    []byte{0x7f, 0x00, 0x00, 0x01},\n\t\tSubAgentID:      uint32(0x00),\n\t\tSequenceNumber:  uint32(14565),    //38e5\n\t\tAgentUptime:     uint32(95295000), //5AE1618\n\t\tSampleCount:     uint32(1),\n\t\tCounterSamples: []SFlowCounterSample{\n\t\t\tSFlowCounterSample{\n\t\t\t\tFormat:         SFlowTypeCounterSample,\n\t\t\t\tSampleLength:   0x74,\n\t\t\t\tSequenceNumber: 0x0d30,\n\t\t\t\tSourceIDClass:  0x00,\n\t\t\t\tSourceIDIndex:  0x1,\n\t\t\t\tRecordCount:    0x01,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowLACPCounters{\n\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\tEnterpriseID:   0x0,\n\t\t\t\t\t\t\tFormat:         SFlowTypeLACPCounters,\n\t\t\t\t\t\t\tFlowDataLength: 0x38,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tActorSystemID:        net.HardwareAddr{0x7e, 0x60, 0x69, 0x73, 0x8f, 0x42},\n\t\t\t\t\t\tPartnerSystemID:      net.HardwareAddr{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},\n\t\t\t\t\t\tAttachedAggID:        uint32(1),\n\t\t\t\t\t\tLacpPortState:        SFLLACPPortState{PortStateAll: uint32(91553792)},\n\t\t\t\t\t\tLACPDUsRx:            uint32(0),\n\t\t\t\t\t\tMarkerPDUsRx:         uint32(4294967295),\n\t\t\t\t\t\tMarkerResponsePDUsRx: uint32(4294967295),\n\t\t\t\t\t\tUnknownRx:            uint32(4294967295),\n\t\t\t\t\t\tIllegalRx:            uint32(0),\n\t\t\t\t\t\tLACPDUsTx:            uint32(1173),\n\t\t\t\t\t\tMarkerPDUsTx:         uint32(4294967295),\n\t\t\t\t\t\tMarkerResponsePDUsTx: uint32(4294967295),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tif !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t}\n}\n\nfunc TestDecodeOpenflowCounter(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket12, LayerTypeSFlow, gopacket.Default)\n\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)\n\n\tgot := p.ApplicationLayer().(*SFlowDatagram)\n\n\twant := &SFlowDatagram{\n\t\tDatagramVersion: 0x5,\n\t\tAgentAddress:    net.IP{0x7f, 0x0, 0x0, 0x1},\n\t\tSequenceNumber:  0x1b35a,\n\t\tAgentUptime:     0xe0412e0,\n\t\tSampleCount:     0x1,\n\t\tCounterSamples: []SFlowCounterSample{\n\t\t\tSFlowCounterSample{\n\t\t\t\tFormat:         SFlowTypeCounterSample,\n\t\t\t\tSampleLength:   0xd0,\n\t\t\t\tSequenceNumber: 0x5bdb,\n\t\t\t\tSourceIDIndex:  0xb,\n\t\t\t\tRecordCount:    0x4,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowEthernetCounters{\n\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\tFormat:         SFlowTypeEthernetInterfaceCounters,\n\t\t\t\t\t\t\tFlowDataLength: 0x34,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSingleCollisionFrames:     0xffffffff,\n\t\t\t\t\t\tMultipleCollisionFrames:   0xffffffff,\n\t\t\t\t\t\tSQETestErrors:             0xffffffff,\n\t\t\t\t\t\tDeferredTransmissions:     0xffffffff,\n\t\t\t\t\t\tLateCollisions:            0xffffffff,\n\t\t\t\t\t\tExcessiveCollisions:       0xffffffff,\n\t\t\t\t\t\tInternalMacTransmitErrors: 0xffffffff,\n\t\t\t\t\t\tCarrierSenseErrors:        0xffffffff,\n\t\t\t\t\t\tFrameTooLongs:             0xffffffff,\n\t\t\t\t\t\tInternalMacReceiveErrors:  0xffffffff,\n\t\t\t\t\t\tSymbolErrors:              0xffffffff,\n\t\t\t\t\t},\n\t\t\t\t\tSFlowOpenflowPortCounters{\n\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\tFormat:         SFlowTypeOpenflowPortCounters,\n\t\t\t\t\t\t\tFlowDataLength: 0xc,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDatapathID: 0x62d33ce76e49,\n\t\t\t\t\t\tPortNo:     0xfffe,\n\t\t\t\t\t},\n\t\t\t\t\tSFlowPORTNAME{\n\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\tFormat:         SFlowTypePORTNAMECounters,\n\t\t\t\t\t\t\tFlowDataLength: 0xc,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLen: 0x8,\n\t\t\t\t\t\tStr: \"br-int\",\n\t\t\t\t\t},\n\t\t\t\t\tSFlowGenericInterfaceCounters{\n\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\tFormat:         SFlowTypeGenericInterfaceCounters,\n\t\t\t\t\t\t\tFlowDataLength: 0x58,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tIfIndex:            0xb,\n\t\t\t\t\t\tIfType:             0x6,\n\t\t\t\t\t\tIfSpeed:            0x5f5e100,\n\t\t\t\t\t\tIfInBroadcastPkts:  0xffffffff,\n\t\t\t\t\t\tIfInUnknownProtos:  0xffffffff,\n\t\t\t\t\t\tIfOutMulticastPkts: 0xffffffff,\n\t\t\t\t\t\tIfOutBroadcastPkts: 0xffffffff,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tif !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t}\n}\n\nfunc TestDecodeAppResourcesOvsdbCounter(t *testing.T) {\n\tp := gopacket.NewPacket(SFlowTestPacket13, LayerTypeSFlow, gopacket.Default)\n\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)\n\n\tgot := p.ApplicationLayer().(*SFlowDatagram)\n\n\twant := &SFlowDatagram{\n\t\tDatagramVersion: 0x5,\n\t\tAgentAddress:    net.IP{0x7f, 0x0, 0x0, 0x1},\n\t\tSequenceNumber:  0x1b35f,\n\t\tAgentUptime:     0xe045160,\n\t\tSampleCount:     0x1,\n\t\tCounterSamples: []SFlowCounterSample{\n\t\t\tSFlowCounterSample{\n\t\t\t\tFormat:         SFlowTypeCounterSample,\n\t\t\t\tSampleLength:   0x5c,\n\t\t\t\tSequenceNumber: 0x5bdd,\n\t\t\t\tSourceIDIndex:  0x20003e8,\n\t\t\t\tRecordCount:    0x2,\n\t\t\t\tRecords: []SFlowRecord{\n\t\t\t\t\tSFlowAppresourcesCounters{\n\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\tFormat:         SFLowTypeAPPRESOURCESCounters,\n\t\t\t\t\t\t\tFlowDataLength: 0x28,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tUserTime:   0xb152d,\n\t\t\t\t\t\tSystemTime: 0xa3739,\n\t\t\t\t\t\tMemUsed:    0x58b000,\n\t\t\t\t\t},\n\t\t\t\t\tSFlowOVSDPCounters{\n\t\t\t\t\t\tSFlowBaseCounterRecord: SFlowBaseCounterRecord{\n\t\t\t\t\t\t\tFormat:         SFlowTypeOVSDPCounters,\n\t\t\t\t\t\t\tFlowDataLength: 0x18,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNHit:     0x3f7,\n\t\t\t\t\t\tNMissed:  0x148,\n\t\t\t\t\t\tNMaskHit: 0xa3b,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tif !reflect.DeepEqual(want, got) {\n\t\tt.Errorf(\"SFlow layer mismatch, \\nwant:\\n\\n%#v\\ngot:\\n\\n\\n%#v\\n\\n\", want, got)\n\t}\n}\n\nfunc BenchmarkDecodeSFlowPacket1(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(SFlowTestPacket1, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\nfunc BenchmarkDecodeSFlowPacket2(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(SFlowTestPacket2, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\nfunc BenchmarkDecodeSFlowPacket3(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(SFlowTestPacket3, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\nfunc BenchmarkDecodeSFlowPacket4(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(SFlowTestPacket4, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\nfunc BenchmarkDecodeSFlowPacket9(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(SFlowTestPacket9, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\nfunc BenchmarkDecodeSFlowPacket10(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(SFlowTestPacket10, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\nfunc BenchmarkDecodeSFlowPacket11(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(SFlowTestPacket11, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\nfunc BenchmarkDecodeSFlowLayerPacket1(b *testing.B) {\n\tvar sflow SFlowDatagram\n\tfor i := 0; i < b.N; i++ {\n\t\tsflow.DecodeFromBytes(SFlowTestPacket1[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback)\n\t}\n}\n\nfunc BenchmarkDecodeSFlowLayerPacket2(b *testing.B) {\n\tvar sflow SFlowDatagram\n\tfor i := 0; i < b.N; i++ {\n\t\tsflow.DecodeFromBytes(SFlowTestPacket2[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback)\n\t}\n}\n"
  },
  {
    "path": "layers/sip.go",
    "content": "// Copyright 2017 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// SIPVersion defines the different versions of the SIP Protocol\ntype SIPVersion uint8\n\n// Represents all the versions of SIP protocol\nconst (\n\tSIPVersion1 SIPVersion = 1\n\tSIPVersion2 SIPVersion = 2\n)\n\nfunc (sv SIPVersion) String() string {\n\tswitch sv {\n\tdefault:\n\t\t// Defaulting to SIP/2.0\n\t\treturn \"SIP/2.0\"\n\tcase SIPVersion1:\n\t\treturn \"SIP/1.0\"\n\tcase SIPVersion2:\n\t\treturn \"SIP/2.0\"\n\t}\n}\n\n// GetSIPVersion is used to get SIP version constant\nfunc GetSIPVersion(version string) (SIPVersion, error) {\n\tswitch strings.ToUpper(version) {\n\tcase \"SIP/1.0\":\n\t\treturn SIPVersion1, nil\n\tcase \"SIP/2.0\":\n\t\treturn SIPVersion2, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"Unknown SIP version: '%s'\", version)\n\n\t}\n}\n\n// SIPMethod defines the different methods of the SIP Protocol\n// defined in the different RFC's\ntype SIPMethod uint16\n\n// Here are all the SIP methods\nconst (\n\tSIPMethodInvite    SIPMethod = 1  // INVITE\t[RFC3261]\n\tSIPMethodAck       SIPMethod = 2  // ACK\t[RFC3261]\n\tSIPMethodBye       SIPMethod = 3  // BYE\t[RFC3261]\n\tSIPMethodCancel    SIPMethod = 4  // CANCEL\t[RFC3261]\n\tSIPMethodOptions   SIPMethod = 5  // OPTIONS\t[RFC3261]\n\tSIPMethodRegister  SIPMethod = 6  // REGISTER\t[RFC3261]\n\tSIPMethodPrack     SIPMethod = 7  // PRACK\t[RFC3262]\n\tSIPMethodSubscribe SIPMethod = 8  // SUBSCRIBE\t[RFC6665]\n\tSIPMethodNotify    SIPMethod = 9  // NOTIFY\t[RFC6665]\n\tSIPMethodPublish   SIPMethod = 10 // PUBLISH\t[RFC3903]\n\tSIPMethodInfo      SIPMethod = 11 // INFO\t[RFC6086]\n\tSIPMethodRefer     SIPMethod = 12 // REFER\t[RFC3515]\n\tSIPMethodMessage   SIPMethod = 13 // MESSAGE\t[RFC3428]\n\tSIPMethodUpdate    SIPMethod = 14 // UPDATE\t[RFC3311]\n\tSIPMethodPing      SIPMethod = 15 // PING\t[https://tools.ietf.org/html/draft-fwmiller-ping-03]\n)\n\nfunc (sm SIPMethod) String() string {\n\tswitch sm {\n\tdefault:\n\t\treturn \"Unknown method\"\n\tcase SIPMethodInvite:\n\t\treturn \"INVITE\"\n\tcase SIPMethodAck:\n\t\treturn \"ACK\"\n\tcase SIPMethodBye:\n\t\treturn \"BYE\"\n\tcase SIPMethodCancel:\n\t\treturn \"CANCEL\"\n\tcase SIPMethodOptions:\n\t\treturn \"OPTIONS\"\n\tcase SIPMethodRegister:\n\t\treturn \"REGISTER\"\n\tcase SIPMethodPrack:\n\t\treturn \"PRACK\"\n\tcase SIPMethodSubscribe:\n\t\treturn \"SUBSCRIBE\"\n\tcase SIPMethodNotify:\n\t\treturn \"NOTIFY\"\n\tcase SIPMethodPublish:\n\t\treturn \"PUBLISH\"\n\tcase SIPMethodInfo:\n\t\treturn \"INFO\"\n\tcase SIPMethodRefer:\n\t\treturn \"REFER\"\n\tcase SIPMethodMessage:\n\t\treturn \"MESSAGE\"\n\tcase SIPMethodUpdate:\n\t\treturn \"UPDATE\"\n\tcase SIPMethodPing:\n\t\treturn \"PING\"\n\t}\n}\n\n// GetSIPMethod returns the constant of a SIP method\n// from its string\nfunc GetSIPMethod(method string) (SIPMethod, error) {\n\tswitch strings.ToUpper(method) {\n\tcase \"INVITE\":\n\t\treturn SIPMethodInvite, nil\n\tcase \"ACK\":\n\t\treturn SIPMethodAck, nil\n\tcase \"BYE\":\n\t\treturn SIPMethodBye, nil\n\tcase \"CANCEL\":\n\t\treturn SIPMethodCancel, nil\n\tcase \"OPTIONS\":\n\t\treturn SIPMethodOptions, nil\n\tcase \"REGISTER\":\n\t\treturn SIPMethodRegister, nil\n\tcase \"PRACK\":\n\t\treturn SIPMethodPrack, nil\n\tcase \"SUBSCRIBE\":\n\t\treturn SIPMethodSubscribe, nil\n\tcase \"NOTIFY\":\n\t\treturn SIPMethodNotify, nil\n\tcase \"PUBLISH\":\n\t\treturn SIPMethodPublish, nil\n\tcase \"INFO\":\n\t\treturn SIPMethodInfo, nil\n\tcase \"REFER\":\n\t\treturn SIPMethodRefer, nil\n\tcase \"MESSAGE\":\n\t\treturn SIPMethodMessage, nil\n\tcase \"UPDATE\":\n\t\treturn SIPMethodUpdate, nil\n\tcase \"PING\":\n\t\treturn SIPMethodPing, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"Unknown SIP method: '%s'\", method)\n\t}\n}\n\n// Here is a correspondance between long header names and short\n// as defined in rfc3261 in section 20\nvar compactSipHeadersCorrespondance = map[string]string{\n\t\"accept-contact\":      \"a\",\n\t\"allow-events\":        \"u\",\n\t\"call-id\":             \"i\",\n\t\"contact\":             \"m\",\n\t\"content-encoding\":    \"e\",\n\t\"content-length\":      \"l\",\n\t\"content-type\":        \"c\",\n\t\"event\":               \"o\",\n\t\"from\":                \"f\",\n\t\"identity\":            \"y\",\n\t\"refer-to\":            \"r\",\n\t\"referred-by\":         \"b\",\n\t\"reject-contact\":      \"j\",\n\t\"request-disposition\": \"d\",\n\t\"session-expires\":     \"x\",\n\t\"subject\":             \"s\",\n\t\"supported\":           \"k\",\n\t\"to\":                  \"t\",\n\t\"via\":                 \"v\",\n}\n\n// SIP object will contains information about decoded SIP packet.\n// -> The SIP Version\n// -> The SIP Headers (in a map[string][]string because of multiple headers with the same name\n// -> The SIP Method\n// -> The SIP Response code (if it's a response)\n// -> The SIP Status line (if it's a response)\n// You can easily know the type of the packet with the IsResponse boolean\n//\ntype SIP struct {\n\tBaseLayer\n\n\t// Base information\n\tVersion SIPVersion\n\tMethod  SIPMethod\n\tHeaders map[string][]string\n\n\t// Request\n\tRequestURI string\n\n\t// Response\n\tIsResponse     bool\n\tResponseCode   int\n\tResponseStatus string\n\n\t// Private fields\n\tcseq             int64\n\tcontentLength    int64\n\tlastHeaderParsed string\n}\n\n// decodeSIP decodes the byte slice into a SIP type. It also\n// setups the application Layer in PacketBuilder.\nfunc decodeSIP(data []byte, p gopacket.PacketBuilder) error {\n\ts := NewSIP()\n\terr := s.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(s)\n\tp.SetApplicationLayer(s)\n\treturn nil\n}\n\n// NewSIP instantiates a new empty SIP object\nfunc NewSIP() *SIP {\n\ts := new(SIP)\n\ts.Headers = make(map[string][]string)\n\treturn s\n}\n\n// LayerType returns gopacket.LayerTypeSIP.\nfunc (s *SIP) LayerType() gopacket.LayerType {\n\treturn LayerTypeSIP\n}\n\n// Payload returns the base layer payload\nfunc (s *SIP) Payload() []byte {\n\treturn s.BaseLayer.Payload\n}\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode\nfunc (s *SIP) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeSIP\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer\nfunc (s *SIP) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\n// DecodeFromBytes decodes the slice into the SIP struct.\nfunc (s *SIP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\t// Init some vars for parsing follow-up\n\tvar countLines int\n\tvar line []byte\n\tvar err error\n\tvar offset int\n\n\t// Iterate on all lines of the SIP Headers\n\t// and stop when we reach the SDP (aka when the new line\n\t// is at index 0 of the remaining packet)\n\tbuffer := bytes.NewBuffer(data)\n\n\tfor {\n\n\t\t// Read next line\n\t\tline, err = buffer.ReadBytes(byte('\\n'))\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tif len(bytes.Trim(line, \"\\r\\n\")) > 0 {\n\t\t\t\t\tdf.SetTruncated()\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\toffset += len(line)\n\n\t\t// Trim the new line delimiters\n\t\tline = bytes.Trim(line, \"\\r\\n\")\n\n\t\t// Empty line, we hit Body\n\t\tif len(line) == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\t// First line is the SIP request/response line\n\t\t// Other lines are headers\n\t\tif countLines == 0 {\n\t\t\terr = s.ParseFirstLine(line)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t} else {\n\t\t\terr = s.ParseHeader(line)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tcountLines++\n\t}\n\ts.BaseLayer = BaseLayer{Contents: data[:offset], Payload: data[offset:]}\n\n\treturn nil\n}\n\n// ParseFirstLine will compute the first line of a SIP packet.\n// The first line will tell us if it's a request or a response.\n//\n// Examples of first line of SIP Prococol :\n//\n// \tRequest \t: INVITE bob@example.com SIP/2.0\n// \tResponse \t: SIP/2.0 200 OK\n// \tResponse\t: SIP/2.0 501 Not Implemented\n//\nfunc (s *SIP) ParseFirstLine(firstLine []byte) error {\n\n\tvar err error\n\n\t// Splits line by space\n\tsplits := strings.SplitN(string(firstLine), \" \", 3)\n\n\t// We must have at least 3 parts\n\tif len(splits) < 3 {\n\t\treturn fmt.Errorf(\"invalid first SIP line: '%s'\", string(firstLine))\n\t}\n\n\t// Determine the SIP packet type\n\tif strings.HasPrefix(splits[0], \"SIP\") {\n\n\t\t// --> Response\n\t\ts.IsResponse = true\n\n\t\t// Validate SIP Version\n\t\ts.Version, err = GetSIPVersion(splits[0])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Compute code\n\t\ts.ResponseCode, err = strconv.Atoi(splits[1])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Compute status line\n\t\ts.ResponseStatus = splits[2]\n\n\t} else {\n\n\t\t// --> Request\n\n\t\t// Validate method\n\t\ts.Method, err = GetSIPMethod(splits[0])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\ts.RequestURI = splits[1]\n\n\t\t// Validate SIP Version\n\t\ts.Version, err = GetSIPVersion(splits[2])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// ParseHeader will parse a SIP Header\n// SIP Headers are quite simple, there are colon separated name and value\n// Headers can be spread over multiple lines\n//\n// Examples of header :\n//\n//  CSeq: 1 REGISTER\n//  Via: SIP/2.0/UDP there.com:5060\n//  Authorization:Digest username=\"UserB\",\n//\t  realm=\"MCI WorldCom SIP\",\n//    nonce=\"1cec4341ae6cbe5a359ea9c8e88df84f\", opaque=\"\",\n//    uri=\"sip:ss2.wcom.com\", response=\"71ba27c64bd01de719686aa4590d5824\"\n//\nfunc (s *SIP) ParseHeader(header []byte) (err error) {\n\n\t// Ignore empty headers\n\tif len(header) == 0 {\n\t\treturn\n\t}\n\n\t// Check if this is the following of last header\n\t// RFC 3261 - 7.3.1 - Header Field Format specify that following lines of\n\t// multiline headers must begin by SP or TAB\n\tif header[0] == '\\t' || header[0] == ' ' {\n\n\t\theader = bytes.TrimSpace(header)\n\t\ts.Headers[s.lastHeaderParsed][len(s.Headers[s.lastHeaderParsed])-1] += fmt.Sprintf(\" %s\", string(header))\n\t\treturn\n\t}\n\n\t// Find the ':' to separate header name and value\n\tindex := bytes.Index(header, []byte(\":\"))\n\tif index >= 0 {\n\n\t\theaderName := strings.ToLower(string(bytes.Trim(header[:index], \" \")))\n\t\theaderValue := string(bytes.Trim(header[index+1:], \" \"))\n\n\t\t// Add header to object\n\t\ts.Headers[headerName] = append(s.Headers[headerName], headerValue)\n\t\ts.lastHeaderParsed = headerName\n\n\t\t// Compute specific headers\n\t\terr = s.ParseSpecificHeaders(headerName, headerValue)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// ParseSpecificHeaders will parse some specific key values from\n// specific headers like CSeq or Content-Length integer values\nfunc (s *SIP) ParseSpecificHeaders(headerName string, headerValue string) (err error) {\n\n\tswitch headerName {\n\tcase \"cseq\":\n\n\t\t// CSeq header value is formatted like that :\n\t\t// CSeq: 123 INVITE\n\t\t// We split the value to parse Cseq integer value, and method\n\t\tsplits := strings.Split(headerValue, \" \")\n\t\tif len(splits) > 1 {\n\n\t\t\t// Parse Cseq\n\t\t\ts.cseq, err = strconv.ParseInt(splits[0], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Validate method\n\t\t\tif s.IsResponse {\n\t\t\t\ts.Method, err = GetSIPMethod(splits[1])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\tcase \"content-length\":\n\n\t\t// Parse Content-Length\n\t\ts.contentLength, err = strconv.ParseInt(headerValue, 10, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// GetAllHeaders will return the full headers of the\n// current SIP packets in a map[string][]string\nfunc (s *SIP) GetAllHeaders() map[string][]string {\n\treturn s.Headers\n}\n\n// GetHeader will return all the headers with\n// the specified name.\nfunc (s *SIP) GetHeader(headerName string) []string {\n\theaderName = strings.ToLower(headerName)\n\th := make([]string, 0)\n\tif _, ok := s.Headers[headerName]; ok {\n\t\treturn s.Headers[headerName]\n\t}\n\tcompactHeader := compactSipHeadersCorrespondance[headerName]\n\tif _, ok := s.Headers[compactHeader]; ok {\n\t\treturn s.Headers[compactHeader]\n\t}\n\treturn h\n}\n\n// GetFirstHeader will return the first header with\n// the specified name. If the current SIP packet has multiple\n// headers with the same name, it returns the first.\nfunc (s *SIP) GetFirstHeader(headerName string) string {\n\theaders := s.GetHeader(headerName)\n\tif len(headers) > 0 {\n\t\treturn headers[0]\n\t}\n\treturn \"\"\n}\n\n//\n// Some handy getters for most used SIP headers\n//\n\n// GetAuthorization will return the Authorization\n// header of the current SIP packet\nfunc (s *SIP) GetAuthorization() string {\n\treturn s.GetFirstHeader(\"Authorization\")\n}\n\n// GetFrom will return the From\n// header of the current SIP packet\nfunc (s *SIP) GetFrom() string {\n\treturn s.GetFirstHeader(\"From\")\n}\n\n// GetTo will return the To\n// header of the current SIP packet\nfunc (s *SIP) GetTo() string {\n\treturn s.GetFirstHeader(\"To\")\n}\n\n// GetContact will return the Contact\n// header of the current SIP packet\nfunc (s *SIP) GetContact() string {\n\treturn s.GetFirstHeader(\"Contact\")\n}\n\n// GetCallID will return the Call-ID\n// header of the current SIP packet\nfunc (s *SIP) GetCallID() string {\n\treturn s.GetFirstHeader(\"Call-ID\")\n}\n\n// GetUserAgent will return the User-Agent\n// header of the current SIP packet\nfunc (s *SIP) GetUserAgent() string {\n\treturn s.GetFirstHeader(\"User-Agent\")\n}\n\n// GetContentLength will return the parsed integer\n// Content-Length header of the current SIP packet\nfunc (s *SIP) GetContentLength() int64 {\n\treturn s.contentLength\n}\n\n// GetCSeq will return the parsed integer CSeq header\n// header of the current SIP packet\nfunc (s *SIP) GetCSeq() int64 {\n\treturn s.cseq\n}\n"
  },
  {
    "path": "layers/sip_test.go",
    "content": "// Copyright 2017 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// First packet is a REGISTER Request\n//\n// REGISTER sip:sip.provider.com SIP/2.0\n// Via:SIP/2.0/UDP 172.16.254.66:5060;branch=z9hG4bK3e5380d454981e88702eb2269669462;rport\n// From:\"Bob\" <sip:bob@sip.provider.com>;tag=3718850509\n// To:\"Alice\" <sip:alice@sip.provider.com>\n// Call-ID:306366781@172_16_254_66\n// CSeq:3 REGISTER\n// Max-Forwards:70\n// Allow:INVITE,ACK,CANCEL,BYE,OPTIONS,INFO,SUBSCRIBE,NOTIFY,REFER,UPDATE\n// Contact: <sip:bob@172.16.254.66:5060>\n// Expires:1800\n// User-Agent:C530 IP/42.245.00.000.000\n// Content-Length:0\n//\nvar testPacketSIPRequest = []byte{\n\t0x00, 0x07, 0x7d, 0x41, 0x2e, 0x40, 0x00, 0xd0, 0x03, 0x75, 0xe0, 0x00, 0x08, 0x00, 0x45, 0x00,\n\t0x01, 0xf4, 0x73, 0x74, 0x00, 0x00, 0x75, 0x11, 0xca, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,\n\t0x02, 0x02, 0x13, 0xc4, 0x13, 0xc4, 0x01, 0xe0, 0x86, 0xa0, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54,\n\t0x45, 0x52, 0x20, 0x73, 0x69, 0x70, 0x3a, 0x73, 0x69, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69,\n\t0x64, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x53, 0x49, 0x50, 0x2f, 0x32, 0x2e, 0x30, 0x0d,\n\t0x0a, 0x56, 0x69, 0x61, 0x3a, 0x53, 0x49, 0x50, 0x2f, 0x32, 0x2e, 0x30, 0x2f, 0x55, 0x44, 0x50,\n\t0x20, 0x31, 0x37, 0x32, 0x2e, 0x31, 0x36, 0x2e, 0x32, 0x35, 0x34, 0x2e, 0x36, 0x36, 0x3a, 0x35,\n\t0x30, 0x36, 0x30, 0x3b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x3d, 0x7a, 0x39, 0x68, 0x47, 0x34,\n\t0x62, 0x4b, 0x33, 0x65, 0x35, 0x33, 0x38, 0x30, 0x64, 0x34, 0x35, 0x34, 0x39, 0x38, 0x31, 0x65,\n\t0x38, 0x38, 0x37, 0x30, 0x32, 0x65, 0x62, 0x32, 0x32, 0x36, 0x39, 0x36, 0x36, 0x39, 0x34, 0x36,\n\t0x32, 0x3b, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x0d, 0x0a, 0x46, 0x72, 0x6f, 0x6d, 0x3a, 0x22, 0x42,\n\t0x6f, 0x62, 0x22, 0x20, 0x3c, 0x73, 0x69, 0x70, 0x3a, 0x62, 0x6f, 0x62, 0x40, 0x73, 0x69, 0x70,\n\t0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x3b, 0x74,\n\t0x61, 0x67, 0x3d, 0x33, 0x37, 0x31, 0x38, 0x38, 0x35, 0x30, 0x35, 0x30, 0x39, 0x0d, 0x0a, 0x54,\n\t0x6f, 0x3a, 0x22, 0x41, 0x6c, 0x69, 0x63, 0x65, 0x22, 0x20, 0x3c, 0x73, 0x69, 0x70, 0x3a, 0x61,\n\t0x6c, 0x69, 0x63, 0x65, 0x40, 0x73, 0x69, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,\n\t0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a, 0x43, 0x61, 0x6c, 0x6c, 0x2d, 0x49, 0x44, 0x3a,\n\t0x33, 0x30, 0x36, 0x33, 0x36, 0x36, 0x37, 0x38, 0x31, 0x40, 0x31, 0x37, 0x32, 0x5f, 0x31, 0x36,\n\t0x5f, 0x32, 0x35, 0x34, 0x5f, 0x36, 0x36, 0x0d, 0x0a, 0x43, 0x53, 0x65, 0x71, 0x3a, 0x33, 0x20,\n\t0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x0d, 0x0a, 0x4d, 0x61, 0x78, 0x2d, 0x46, 0x6f,\n\t0x72, 0x77, 0x61, 0x72, 0x64, 0x73, 0x3a, 0x37, 0x30, 0x0d, 0x0a, 0x41, 0x6c, 0x6c, 0x6f, 0x77,\n\t0x3a, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x2c, 0x41, 0x43, 0x4b, 0x2c, 0x43, 0x41, 0x4e, 0x43,\n\t0x45, 0x4c, 0x2c, 0x42, 0x59, 0x45, 0x2c, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x2c, 0x49,\n\t0x4e, 0x46, 0x4f, 0x2c, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x2c, 0x4e, 0x4f,\n\t0x54, 0x49, 0x46, 0x59, 0x2c, 0x52, 0x45, 0x46, 0x45, 0x52, 0x2c, 0x55, 0x50, 0x44, 0x41, 0x54,\n\t0x45, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x3a, 0x20, 0x3c, 0x73, 0x69, 0x70,\n\t0x3a, 0x62, 0x6f, 0x62, 0x40, 0x31, 0x37, 0x32, 0x2e, 0x31, 0x36, 0x2e, 0x32, 0x35, 0x34, 0x2e,\n\t0x36, 0x36, 0x3a, 0x35, 0x30, 0x36, 0x30, 0x3e, 0x0d, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65,\n\t0x73, 0x3a, 0x31, 0x38, 0x30, 0x30, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, 0x67, 0x65,\n\t0x6e, 0x74, 0x3a, 0x43, 0x35, 0x33, 0x30, 0x20, 0x49, 0x50, 0x2f, 0x34, 0x32, 0x2e, 0x32, 0x34,\n\t0x35, 0x2e, 0x30, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x0d, 0x0a, 0x43, 0x6f,\n\t0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x30, 0x0d, 0x0a,\n\t0x0d, 0x0a,\n}\n\n// Second packet is a REGISTER Response\n//\n// SIP/2.0 200 OK\n// Via:SIP/2.0/UDP 172.16.254.66:5060;received=8.8.8.8;rport=5060;branch=z9hG4bK3e5380d454981e88702eb2269669462\n// From:\"Bob\" <sip:bob@sip.provider.com>;tag=3718850509\n// To:\"Alice\" <sip:alice@sip.provider.com>;tag=02-32748-1417c4ac-24835dbf3\n// Call-ID:306366781@172_16_254_66\n// CSeq:3 REGISTER\n// Contact: <sip:bob@172.16.254.66:5060>;expires=1800\n// P-Associated-URI: <sip:bob@sip.provider.com>\n// Content-Length:0\n//\nvar testPacketSIPResponse = []byte{\n\t0x00, 0xd0, 0x00, 0x4a, 0x2c, 0x00, 0x00, 0x07, 0x7d, 0x41, 0x2e, 0x40, 0x08, 0x00, 0x45, 0x00,\n\t0x01, 0xc1, 0x00, 0x00, 0x40, 0x00, 0x3f, 0x11, 0x34, 0x27, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01,\n\t0x01, 0x01, 0x13, 0xc4, 0x13, 0xc4, 0x01, 0xad, 0x60, 0x36, 0x53, 0x49, 0x50, 0x2f, 0x32, 0x2e,\n\t0x30, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0x0d, 0x0a, 0x56, 0x69, 0x61, 0x3a, 0x53, 0x49,\n\t0x50, 0x2f, 0x32, 0x2e, 0x30, 0x2f, 0x55, 0x44, 0x50, 0x20, 0x31, 0x37, 0x32, 0x2e, 0x31, 0x36,\n\t0x2e, 0x32, 0x35, 0x34, 0x2e, 0x36, 0x36, 0x3a, 0x35, 0x30, 0x36, 0x30, 0x3b, 0x72, 0x65, 0x63,\n\t0x65, 0x69, 0x76, 0x65, 0x64, 0x3d, 0x38, 0x2e, 0x38, 0x2e, 0x38, 0x2e, 0x38, 0x3b, 0x72, 0x70,\n\t0x6f, 0x72, 0x74, 0x3d, 0x35, 0x30, 0x36, 0x30, 0x3b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x3d,\n\t0x7a, 0x39, 0x68, 0x47, 0x34, 0x62, 0x4b, 0x33, 0x65, 0x35, 0x33, 0x38, 0x30, 0x64, 0x34, 0x35,\n\t0x34, 0x39, 0x38, 0x31, 0x65, 0x38, 0x38, 0x37, 0x30, 0x32, 0x65, 0x62, 0x32, 0x32, 0x36, 0x39,\n\t0x36, 0x36, 0x39, 0x34, 0x36, 0x32, 0x0d, 0x0a, 0x46, 0x72, 0x6f, 0x6d, 0x3a, 0x22, 0x42, 0x6f,\n\t0x62, 0x22, 0x20, 0x3c, 0x73, 0x69, 0x70, 0x3a, 0x62, 0x6f, 0x62, 0x40, 0x73, 0x69, 0x70, 0x2e,\n\t0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x3b, 0x74, 0x61,\n\t0x67, 0x3d, 0x33, 0x37, 0x31, 0x38, 0x38, 0x35, 0x30, 0x35, 0x30, 0x39, 0x0d, 0x0a, 0x54, 0x6f,\n\t0x3a, 0x22, 0x41, 0x6c, 0x69, 0x63, 0x65, 0x22, 0x20, 0x3c, 0x73, 0x69, 0x70, 0x3a, 0x61, 0x6c,\n\t0x69, 0x63, 0x65, 0x40, 0x73, 0x69, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72,\n\t0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x3b, 0x74, 0x61, 0x67, 0x3d, 0x30, 0x32, 0x2d, 0x33, 0x32, 0x37,\n\t0x34, 0x38, 0x2d, 0x31, 0x34, 0x31, 0x37, 0x63, 0x34, 0x61, 0x63, 0x2d, 0x32, 0x34, 0x38, 0x33,\n\t0x35, 0x64, 0x62, 0x66, 0x33, 0x0d, 0x0a, 0x43, 0x61, 0x6c, 0x6c, 0x2d, 0x49, 0x44, 0x3a, 0x33,\n\t0x30, 0x36, 0x33, 0x36, 0x36, 0x37, 0x38, 0x31, 0x40, 0x31, 0x37, 0x32, 0x5f, 0x31, 0x36, 0x5f,\n\t0x32, 0x35, 0x34, 0x5f, 0x36, 0x36, 0x0d, 0x0a, 0x43, 0x53, 0x65, 0x71, 0x3a, 0x33, 0x20, 0x52,\n\t0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74,\n\t0x3a, 0x20, 0x3c, 0x73, 0x69, 0x70, 0x3a, 0x62, 0x6f, 0x62, 0x40, 0x31, 0x37, 0x32, 0x2e, 0x31,\n\t0x36, 0x2e, 0x32, 0x35, 0x34, 0x2e, 0x36, 0x36, 0x3a, 0x35, 0x30, 0x36, 0x30, 0x3e, 0x3b, 0x65,\n\t0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x3d, 0x31, 0x38, 0x30, 0x30, 0x0d, 0x0a, 0x50, 0x2d, 0x41,\n\t0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x2d, 0x55, 0x52, 0x49, 0x3a, 0x20, 0x3c,\n\t0x73, 0x69, 0x70, 0x3a, 0x62, 0x6f, 0x62, 0x40, 0x73, 0x69, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x76,\n\t0x69, 0x64, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65,\n\t0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x30, 0x0d, 0x0a, 0x0d, 0x0a,\n}\n\n// Third packet is an INVITE which uses short header forms.\n//\n// INVITE sip:sip.provider.com SIP/2.0\n// v:SIP/2.0/UDP 172.16.254.66:5060;branch=z9hG4bK3e5380d454981e88702eb2269669462;rport\n// f:\"Bob\" <sip:bob@sip.provider.com>\n// t:\"Alice\" <sip:alice@sip.provider.com>\n// i:306366781@172_16_254_66\n// CSeq:1 INVITE\n// Allow:INVITE,ACK,CANCEL,BYE,OPTIONS,INFO,SUBSCRIBE,NOTIFY,REFER,UPDATE\n// m: <sip:bob@172.16.254.66:5060>\n// l:0\n\nvar testPacketSIPCompactInvite = []byte{\n\t0xb4, 0xfb, 0xe4, 0x1d, 0x65, 0x18, 0x94, 0xc6, 0x91, 0xa3, 0xb8, 0xc6, 0x08, 0x00, 0x45, 0x00,\n\t0x01, 0x7d, 0xd4, 0x08, 0x40, 0x00, 0x40, 0x11, 0x50, 0x8f, 0x0a, 0x25, 0x00, 0x89, 0x0a, 0x2a,\n\t0x00, 0x01, 0xcf, 0x80, 0x13, 0xc4, 0x01, 0x69, 0x16, 0x53, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45,\n\t0x20, 0x73, 0x69, 0x70, 0x3a, 0x73, 0x69, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,\n\t0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x53, 0x49, 0x50, 0x2f, 0x32, 0x2e, 0x30, 0x0d, 0x0a, 0x76,\n\t0x3a, 0x53, 0x49, 0x50, 0x2f, 0x32, 0x2e, 0x30, 0x2f, 0x55, 0x44, 0x50, 0x20, 0x31, 0x37, 0x32,\n\t0x2e, 0x31, 0x36, 0x2e, 0x32, 0x35, 0x34, 0x2e, 0x36, 0x36, 0x3a, 0x35, 0x30, 0x36, 0x30, 0x3b,\n\t0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x3d, 0x7a, 0x39, 0x68, 0x47, 0x34, 0x62, 0x4b, 0x33, 0x65,\n\t0x35, 0x33, 0x38, 0x30, 0x64, 0x34, 0x35, 0x34, 0x39, 0x38, 0x31, 0x65, 0x38, 0x38, 0x37, 0x30,\n\t0x32, 0x65, 0x62, 0x32, 0x32, 0x36, 0x39, 0x36, 0x36, 0x39, 0x34, 0x36, 0x32, 0x3b, 0x72, 0x70,\n\t0x6f, 0x72, 0x74, 0x0d, 0x0a, 0x66, 0x3a, 0x22, 0x42, 0x6f, 0x62, 0x22, 0x20, 0x3c, 0x73, 0x69,\n\t0x70, 0x3a, 0x62, 0x6f, 0x62, 0x40, 0x73, 0x69, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64,\n\t0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a, 0x74, 0x3a, 0x22, 0x41, 0x6c, 0x69, 0x63,\n\t0x65, 0x22, 0x20, 0x3c, 0x73, 0x69, 0x70, 0x3a, 0x61, 0x6c, 0x69, 0x63, 0x65, 0x40, 0x73, 0x69,\n\t0x70, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x0d,\n\t0x0a, 0x69, 0x3a, 0x33, 0x30, 0x36, 0x33, 0x36, 0x36, 0x37, 0x38, 0x31, 0x40, 0x31, 0x37, 0x32,\n\t0x5f, 0x31, 0x36, 0x5f, 0x32, 0x35, 0x34, 0x5f, 0x36, 0x36, 0x0d, 0x0a, 0x43, 0x53, 0x65, 0x71,\n\t0x3a, 0x31, 0x20, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x0d, 0x0a, 0x41, 0x6c, 0x6c, 0x6f, 0x77,\n\t0x3a, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x2c, 0x41, 0x43, 0x4b, 0x2c, 0x43, 0x41, 0x4e, 0x43,\n\t0x45, 0x4c, 0x2c, 0x42, 0x59, 0x45, 0x2c, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x2c, 0x49,\n\t0x4e, 0x46, 0x4f, 0x2c, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x2c, 0x4e, 0x4f,\n\t0x54, 0x49, 0x46, 0x59, 0x2c, 0x52, 0x45, 0x46, 0x45, 0x52, 0x2c, 0x55, 0x50, 0x44, 0x41, 0x54,\n\t0x45, 0x0d, 0x0a, 0x6d, 0x3a, 0x20, 0x3c, 0x73, 0x69, 0x70, 0x3a, 0x62, 0x6f, 0x62, 0x40, 0x31,\n\t0x37, 0x32, 0x2e, 0x31, 0x36, 0x2e, 0x32, 0x35, 0x34, 0x2e, 0x36, 0x36, 0x3a, 0x35, 0x30, 0x36,\n\t0x30, 0x3e, 0x0d, 0x0a, 0x6c, 0x3a, 0x30, 0x0d, 0x0a, 0x0d, 0x0a,\n}\n\nfunc TestSIPMain(t *testing.T) {\n\texpectedHeaders := map[string]string{\"Call-ID\": \"306366781@172_16_254_66\", \"Contact\": \"<sip:bob@172.16.254.66:5060>\"}\n\t_TestPacketSIP(t, testPacketSIPRequest, SIPMethodRegister, false, 3, expectedHeaders, \"sip:sip.provider.com\")\n\n\texpectedHeaders = map[string]string{\"Call-ID\": \"306366781@172_16_254_66\", \"Contact\": \"<sip:bob@172.16.254.66:5060>;expires=1800\"}\n\t_TestPacketSIP(t, testPacketSIPResponse, SIPMethodRegister, true, 3, expectedHeaders, \"\")\n\n\texpectedHeaders = map[string]string{\"Call-ID\": \"306366781@172_16_254_66\", \"Contact\": \"<sip:bob@172.16.254.66:5060>\", \"f\": \"\\\"Bob\\\" <sip:bob@sip.provider.com>\"}\n\t_TestPacketSIP(t, testPacketSIPCompactInvite, SIPMethodInvite, false, 1, expectedHeaders, \"sip:sip.provider.com\")\n}\n\nfunc _TestPacketSIP(t *testing.T, packetData []byte, methodWanted SIPMethod, isResponse bool, wantedCseq int64, expectedHeaders map[string]string, expectedRequestURI string) {\n\n\tp := gopacket.NewPacket(packetData, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\n\tif got, ok := p.Layer(LayerTypeSIP).(*SIP); ok {\n\n\t\t// Check method\n\t\tif got.Method != methodWanted {\n\t\t\tt.Errorf(\"SIP Packet should be a %s method, got : %s\", methodWanted, got.Method)\n\t\t}\n\n\t\t// Check if it's right packet type\n\t\tif got.IsResponse != isResponse {\n\t\t\tt.Errorf(\"SIP packet type is not the same as expected\")\n\t\t}\n\n\t\t// Check the RequestURI if it's a request\n\t\tif !isResponse {\n\t\t\tif got.RequestURI != expectedRequestURI {\n\t\t\t\tt.Errorf(\"SIP packet type is not the same as expected\")\n\t\t\t}\n\t\t}\n\n\t\t// Check headers\n\t\tfor headerName, headerValue := range expectedHeaders {\n\t\t\tif got.GetFirstHeader(headerName) != headerValue {\n\t\t\t\tt.Errorf(\"Header %s shoud be %s, got : %s\", headerName, headerValue, got.GetFirstHeader(headerName))\n\t\t\t}\n\t\t}\n\n\t\t// Check CSeq\n\t\tif got.GetCSeq() != wantedCseq {\n\t\t\tt.Errorf(\"SIP Packet should be %d. Got : %d\", wantedCseq, got.GetCSeq())\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "layers/stp.go",
    "content": "// Copyright 2017 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/google/gopacket\"\n)\n\ntype STPSwitchID struct {\n\tPriority uint16 // Bridge priority\n\tSysID    uint16 // VLAN ID\n\tHwAddr   net.HardwareAddr\n}\n\n// STP decode spanning tree protocol packets to transport BPDU (bridge protocol data unit) message.\ntype STP struct {\n\tBaseLayer\n\tProtocolID        uint16\n\tVersion           uint8\n\tType              uint8\n\tTC, TCA           bool // TC: Topologie change ; TCA: Topologie change ack\n\tRouteID, BridgeID STPSwitchID\n\tCost              uint32\n\tPortID            uint16\n\tMessageAge        uint16\n\tMaxAge            uint16\n\tHelloTime         uint16\n\tFDelay            uint16\n}\n\n// LayerType returns gopacket.LayerTypeSTP.\nfunc (s *STP) LayerType() gopacket.LayerType { return LayerTypeSTP }\n\n// CanDecode returns the set of layer types that this DecodingLayer can decode.\nfunc (s *STP) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeSTP\n}\n\n// DecodeFromBytes decodes the given bytes into this layer.\nfunc (stp *STP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tstpLength := 35\n\tif len(data) < stpLength {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"STP length %d too short\", len(data))\n\t}\n\n\tstp.ProtocolID = binary.BigEndian.Uint16(data[:2])\n\tstp.Version = uint8(data[2])\n\tstp.Type = uint8(data[3])\n\tstp.TC = data[4]&0x01 != 0\n\tstp.TCA = data[4]&0x80 != 0\n\tstp.RouteID.Priority = binary.BigEndian.Uint16(data[5:7]) & 0xf000\n\tstp.RouteID.SysID = binary.BigEndian.Uint16(data[5:7]) & 0x0fff\n\tstp.RouteID.HwAddr = net.HardwareAddr(data[7:13])\n\tstp.Cost = binary.BigEndian.Uint32(data[13:17])\n\tstp.BridgeID.Priority = binary.BigEndian.Uint16(data[17:19]) & 0xf000\n\tstp.BridgeID.SysID = binary.BigEndian.Uint16(data[17:19]) & 0x0fff\n\tstp.BridgeID.HwAddr = net.HardwareAddr(data[19:25])\n\tstp.PortID = binary.BigEndian.Uint16(data[25:27])\n\tstp.MessageAge = binary.BigEndian.Uint16(data[27:29])\n\tstp.MaxAge = binary.BigEndian.Uint16(data[29:31])\n\tstp.HelloTime = binary.BigEndian.Uint16(data[31:33])\n\tstp.FDelay = binary.BigEndian.Uint16(data[33:35])\n\tstp.Contents = data[:stpLength]\n\tstp.Payload = data[stpLength:]\n\n\treturn nil\n}\n\n// NextLayerType returns the layer type contained by this DecodingLayer.\nfunc (stp *STP) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\n// Check if the priority value is correct.\nfunc checkPriority(prio uint16) (uint16, error) {\n\tif prio == 0 {\n\t\treturn prio, errors.New(\"Invalid Priority value must be in the rage <4096-61440> with an increment of 4096\")\n\t}\n\tif prio%4096 == 0 {\n\t\treturn prio, nil\n\t} else {\n\t\treturn prio, errors.New(\"Invalid Priority value must be in the rage <4096-61440> with an increment of 4096\")\n\t}\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (s *STP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tvar flags uint8 = 0x00\n\tbytes, err := b.PrependBytes(35)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbinary.BigEndian.PutUint16(bytes, s.ProtocolID)\n\tbytes[2] = s.Version\n\tbytes[3] = s.Type\n\tif s.TC {\n\t\tflags |= 0x01\n\t}\n\tif s.TCA {\n\t\tflags |= 0x80\n\t}\n\tbytes[4] = flags\n\n\tprioRoot, err := checkPriority(s.RouteID.Priority)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tif s.RouteID.SysID >= 4096 {\n\t\tpanic(\"Invalid VlanID value ..!\")\n\t}\n\tbinary.BigEndian.PutUint16(bytes[5:7], prioRoot|s.RouteID.SysID)\n\tcopy(bytes[7:13], s.RouteID.HwAddr)\n\n\tbinary.BigEndian.PutUint32(bytes[13:17], s.Cost)\n\n\tprioBridge, err := checkPriority(s.BridgeID.Priority)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tif s.BridgeID.SysID >= 4096 {\n\t\tpanic(\"Invalid VlanID value ..!\")\n\t}\n\tbinary.BigEndian.PutUint16(bytes[17:19], prioBridge|s.BridgeID.SysID)\n\tcopy(bytes[19:25], s.BridgeID.HwAddr)\n\n\tbinary.BigEndian.PutUint16(bytes[25:27], s.PortID)\n\tbinary.BigEndian.PutUint16(bytes[27:29], s.MessageAge)\n\tbinary.BigEndian.PutUint16(bytes[29:31], s.MaxAge)\n\tbinary.BigEndian.PutUint16(bytes[31:33], s.HelloTime)\n\tbinary.BigEndian.PutUint16(bytes[33:35], s.FDelay)\n\n\treturn nil\n}\n\nfunc decodeSTP(data []byte, p gopacket.PacketBuilder) error {\n\tstp := &STP{}\n\treturn decodingLayerDecoder(stp, data, p)\n}\n"
  },
  {
    "path": "layers/stp_test.go",
    "content": "// Copyright 2021 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\npackage layers\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nvar testPacketSTPRDATA = []byte{\n\t0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0xAA, 0xBB, 0xCC,\n\t0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xAA,\n\t0xBB, 0xCC, 0x00, 0x01, 0x00, 0x80, 0x01, 0x00, 0x00, 0x14,\n\t0x00, 0x02, 0x00, 0x0F, 0x00,\n}\n\n// real stp packet data with the following value :\n// {\n// \tProtocolID: 0,\n// \tVersion: 0,\n// \tType: 0,\n// \tTCA: false,\n//  TC: true,\n// \tRooteID : {\n// \t\tPriority: 32768,\n// \t\tSysID: 1,\n// \t\tHwAddr: aa bb cc 00 01 00\n// \t},\n// \tCost: 0,\n// \tBridgeID: {\n// \t\tPriority: 32768,\n// \t\tSysID: 1,\n// \t\tHwAddr: aa bb cc 00 01 00\n// \t},\n// \tPortID : 0x8001,\n// \tMessageAge: 0,\n// \tMaxAge: 5120,\n// \tHelloTime: 512, // we must divide by 256 to have the value in seconds\n// \tFDelay : 3840,\n// }\n\n//   00 00 00 00 01 80 01 AA  BB CC 00 01 00 00 00 00  ................\n//   00 80 01 AA BB CC 00 01  00 80 01 00 00 14 00 02  ................\n//   00 0F 00                                          ...\n\nfunc TestPacketSTPNilRdata(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketSTPRDATA, LayerTypeSTP, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeSTP}, t)\n}\n\n// test decoding stp layer on real packet data\nfunc TestDecodeSTPRData(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketSTPRDATA, LayerTypeSTP, testDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\texpectedSTP := &STP{\n\t\tProtocolID: 0,\n\t\tVersion:    0,\n\t\tType:       0,\n\t\tTCA:        false,\n\t\tTC:         true,\n\t\tRouteID: STPSwitchID{\n\t\t\tPriority: 32768,\n\t\t\tSysID:    1,\n\t\t\tHwAddr:   net.HardwareAddr{0xaa, 0xbb, 0xcc, 0x00, 0x01, 0x00},\n\t\t},\n\t\tCost: 0,\n\t\tBridgeID: STPSwitchID{\n\t\t\tPriority: 32768,\n\t\t\tSysID:    1,\n\t\t\tHwAddr:   net.HardwareAddr{0xaa, 0xbb, 0xcc, 0x00, 0x01, 0x00},\n\t\t},\n\t\tPortID:     0x8001,\n\t\tMessageAge: 0,\n\t\tMaxAge:     5120,\n\t\tHelloTime:  512, // we must divide by 256 to have the value in seconds\n\t\tFDelay:     3840,\n\t}\n\n\tdecodedSTP := p.Layer(LayerTypeSTP).(*STP)\n\tdecodedSTP.BaseLayer = BaseLayer{}\n\n\tif !reflect.DeepEqual(expectedSTP, decodedSTP) {\n\t\tt.Error(\"Expect \", expectedSTP, \"actual \", decodedSTP)\n\t}\n\n}\n\n// test harness to ensure the stp layer can be encoded/decoded properly\n// return error if decoded data not match.\nfunc testEncodeDecodeSTP(stp *STP) error {\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{\n\t\t// ComputeChecksums: true,\n\t\t// FixLengths:       true,\n\t}\n\texpectedSTP := stp\n\n\terr := stp.SerializeTo(buf, opts)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tnewSTP := &STP{}\n\terr = newSTP.DecodeFromBytes(buf.Bytes(), gopacket.NilDecodeFeedback)\n\tif err != nil {\n\t\treturn err\n\t}\n\tnewSTP.BaseLayer = BaseLayer{}\n\n\tif !reflect.DeepEqual(expectedSTP, newSTP) {\n\t\treturn fmt.Errorf(\"Expect %v actual %v\", expectedSTP, newSTP)\n\t}\n\treturn nil\n\n}\n\n// Test to ensure what has been encode can be decoded\nfunc TestEncodeDecodeSTP(t *testing.T) {\n\tSTPs := []*STP{\n\t\t&STP{\n\t\t\tProtocolID: 0,\n\t\t\tVersion:    0,\n\t\t\tType:       0,\n\t\t\tRouteID: STPSwitchID{\n\t\t\t\tPriority: 32768,\n\t\t\t\tSysID:    1,\n\t\t\t\tHwAddr:   net.HardwareAddr{0x64, 0x5a, 0x04, 0xaf, 0x33, 0xdc},\n\t\t\t},\n\t\t\tCost: 0,\n\t\t\tBridgeID: STPSwitchID{\n\t\t\t\tPriority: 32768,\n\t\t\t\tSysID:    1,\n\t\t\t\tHwAddr:   net.HardwareAddr{0x64, 0x5a, 0x04, 0xaf, 0x33, 0xdc},\n\t\t\t},\n\t\t\tPortID:     0x8001,\n\t\t\tMessageAge: 0,\n\t\t\tMaxAge:     20 * 256,\n\t\t\tHelloTime:  2 * 256,\n\t\t\tFDelay:     15 * 256,\n\t\t},\n\t\t&STP{\n\t\t\tProtocolID: 0,\n\t\t\tVersion:    0,\n\t\t\tType:       0,\n\t\t\tRouteID: STPSwitchID{\n\t\t\t\tPriority: 32768,\n\t\t\t\tSysID:    1,\n\t\t\t\tHwAddr:   net.HardwareAddr{0x64, 0x5a, 0x04, 0xaf, 0x33, 0xdc},\n\t\t\t},\n\t\t\tTC:   true,\n\t\t\tTCA:  true,\n\t\t\tCost: 0,\n\t\t\tBridgeID: STPSwitchID{\n\t\t\t\tPriority: 32768,\n\t\t\t\tSysID:    1,\n\t\t\t\tHwAddr:   net.HardwareAddr{0x64, 0x5a, 0x04, 0xaf, 0x33, 0xdc},\n\t\t\t},\n\t\t\tPortID:     0x8001,\n\t\t\tMessageAge: 0,\n\t\t\tMaxAge:     20 * 256,\n\t\t\tHelloTime:  2 * 256,\n\t\t\tFDelay:     15 * 256,\n\t\t},\n\t}\n\n\tfor i, curTest := range STPs {\n\t\terr := testEncodeDecodeSTP(curTest)\n\t\tif err != nil {\n\t\t\tt.Error(\"Error with item \", i, \" with error message :\", err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "layers/tcp.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// TCP is the layer for TCP headers.\ntype TCP struct {\n\tBaseLayer\n\tSrcPort, DstPort                           TCPPort\n\tSeq                                        uint32\n\tAck                                        uint32\n\tDataOffset                                 uint8\n\tFIN, SYN, RST, PSH, ACK, URG, ECE, CWR, NS bool\n\tWindow                                     uint16\n\tChecksum                                   uint16\n\tUrgent                                     uint16\n\tsPort, dPort                               []byte\n\tOptions                                    []TCPOption\n\tPadding                                    []byte\n\topts                                       [4]TCPOption\n\ttcpipchecksum\n}\n\n// TCPOptionKind represents a TCP option code.\ntype TCPOptionKind uint8\n\nconst (\n\tTCPOptionKindEndList                         = 0\n\tTCPOptionKindNop                             = 1\n\tTCPOptionKindMSS                             = 2  // len = 4\n\tTCPOptionKindWindowScale                     = 3  // len = 3\n\tTCPOptionKindSACKPermitted                   = 4  // len = 2\n\tTCPOptionKindSACK                            = 5  // len = n\n\tTCPOptionKindEcho                            = 6  // len = 6, obsolete\n\tTCPOptionKindEchoReply                       = 7  // len = 6, obsolete\n\tTCPOptionKindTimestamps                      = 8  // len = 10\n\tTCPOptionKindPartialOrderConnectionPermitted = 9  // len = 2, obsolete\n\tTCPOptionKindPartialOrderServiceProfile      = 10 // len = 3, obsolete\n\tTCPOptionKindCC                              = 11 // obsolete\n\tTCPOptionKindCCNew                           = 12 // obsolete\n\tTCPOptionKindCCEcho                          = 13 // obsolete\n\tTCPOptionKindAltChecksum                     = 14 // len = 3, obsolete\n\tTCPOptionKindAltChecksumData                 = 15 // len = n, obsolete\n)\n\nfunc (k TCPOptionKind) String() string {\n\tswitch k {\n\tcase TCPOptionKindEndList:\n\t\treturn \"EndList\"\n\tcase TCPOptionKindNop:\n\t\treturn \"NOP\"\n\tcase TCPOptionKindMSS:\n\t\treturn \"MSS\"\n\tcase TCPOptionKindWindowScale:\n\t\treturn \"WindowScale\"\n\tcase TCPOptionKindSACKPermitted:\n\t\treturn \"SACKPermitted\"\n\tcase TCPOptionKindSACK:\n\t\treturn \"SACK\"\n\tcase TCPOptionKindEcho:\n\t\treturn \"Echo\"\n\tcase TCPOptionKindEchoReply:\n\t\treturn \"EchoReply\"\n\tcase TCPOptionKindTimestamps:\n\t\treturn \"Timestamps\"\n\tcase TCPOptionKindPartialOrderConnectionPermitted:\n\t\treturn \"PartialOrderConnectionPermitted\"\n\tcase TCPOptionKindPartialOrderServiceProfile:\n\t\treturn \"PartialOrderServiceProfile\"\n\tcase TCPOptionKindCC:\n\t\treturn \"CC\"\n\tcase TCPOptionKindCCNew:\n\t\treturn \"CCNew\"\n\tcase TCPOptionKindCCEcho:\n\t\treturn \"CCEcho\"\n\tcase TCPOptionKindAltChecksum:\n\t\treturn \"AltChecksum\"\n\tcase TCPOptionKindAltChecksumData:\n\t\treturn \"AltChecksumData\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"Unknown(%d)\", k)\n\t}\n}\n\ntype TCPOption struct {\n\tOptionType   TCPOptionKind\n\tOptionLength uint8\n\tOptionData   []byte\n}\n\nfunc (t TCPOption) String() string {\n\thd := hex.EncodeToString(t.OptionData)\n\tif len(hd) > 0 {\n\t\thd = \" 0x\" + hd\n\t}\n\tswitch t.OptionType {\n\tcase TCPOptionKindMSS:\n\t\tif len(t.OptionData) >= 2 {\n\t\t\treturn fmt.Sprintf(\"TCPOption(%s:%v%s)\",\n\t\t\t\tt.OptionType,\n\t\t\t\tbinary.BigEndian.Uint16(t.OptionData),\n\t\t\t\thd)\n\t\t}\n\n\tcase TCPOptionKindTimestamps:\n\t\tif len(t.OptionData) == 8 {\n\t\t\treturn fmt.Sprintf(\"TCPOption(%s:%v/%v%s)\",\n\t\t\t\tt.OptionType,\n\t\t\t\tbinary.BigEndian.Uint32(t.OptionData[:4]),\n\t\t\t\tbinary.BigEndian.Uint32(t.OptionData[4:8]),\n\t\t\t\thd)\n\t\t}\n\t}\n\treturn fmt.Sprintf(\"TCPOption(%s:%s)\", t.OptionType, hd)\n}\n\n// LayerType returns gopacket.LayerTypeTCP\nfunc (t *TCP) LayerType() gopacket.LayerType { return LayerTypeTCP }\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (t *TCP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tvar optionLength int\n\tfor _, o := range t.Options {\n\t\tswitch o.OptionType {\n\t\tcase 0, 1:\n\t\t\toptionLength += 1\n\t\tdefault:\n\t\t\toptionLength += 2 + len(o.OptionData)\n\t\t}\n\t}\n\tif opts.FixLengths {\n\t\tif rem := optionLength % 4; rem != 0 {\n\t\t\tt.Padding = lotsOfZeros[:4-rem]\n\t\t}\n\t\tt.DataOffset = uint8((len(t.Padding) + optionLength + 20) / 4)\n\t}\n\tbytes, err := b.PrependBytes(20 + optionLength + len(t.Padding))\n\tif err != nil {\n\t\treturn err\n\t}\n\tbinary.BigEndian.PutUint16(bytes, uint16(t.SrcPort))\n\tbinary.BigEndian.PutUint16(bytes[2:], uint16(t.DstPort))\n\tbinary.BigEndian.PutUint32(bytes[4:], t.Seq)\n\tbinary.BigEndian.PutUint32(bytes[8:], t.Ack)\n\tbinary.BigEndian.PutUint16(bytes[12:], t.flagsAndOffset())\n\tbinary.BigEndian.PutUint16(bytes[14:], t.Window)\n\tbinary.BigEndian.PutUint16(bytes[18:], t.Urgent)\n\tstart := 20\n\tfor _, o := range t.Options {\n\t\tbytes[start] = byte(o.OptionType)\n\t\tswitch o.OptionType {\n\t\tcase 0, 1:\n\t\t\tstart++\n\t\tdefault:\n\t\t\tif opts.FixLengths {\n\t\t\t\to.OptionLength = uint8(len(o.OptionData) + 2)\n\t\t\t}\n\t\t\tbytes[start+1] = o.OptionLength\n\t\t\tcopy(bytes[start+2:start+len(o.OptionData)+2], o.OptionData)\n\t\t\tstart += len(o.OptionData) + 2\n\t\t}\n\t}\n\tcopy(bytes[start:], t.Padding)\n\tif opts.ComputeChecksums {\n\t\t// zero out checksum bytes in current serialization.\n\t\tbytes[16] = 0\n\t\tbytes[17] = 0\n\t\tcsum, err := t.computeChecksum(b.Bytes(), IPProtocolTCP)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tt.Checksum = csum\n\t}\n\tbinary.BigEndian.PutUint16(bytes[16:], t.Checksum)\n\treturn nil\n}\n\nfunc (t *TCP) ComputeChecksum() (uint16, error) {\n\treturn t.computeChecksum(append(t.Contents, t.Payload...), IPProtocolTCP)\n}\n\nfunc (t *TCP) flagsAndOffset() uint16 {\n\tf := uint16(t.DataOffset) << 12\n\tif t.FIN {\n\t\tf |= 0x0001\n\t}\n\tif t.SYN {\n\t\tf |= 0x0002\n\t}\n\tif t.RST {\n\t\tf |= 0x0004\n\t}\n\tif t.PSH {\n\t\tf |= 0x0008\n\t}\n\tif t.ACK {\n\t\tf |= 0x0010\n\t}\n\tif t.URG {\n\t\tf |= 0x0020\n\t}\n\tif t.ECE {\n\t\tf |= 0x0040\n\t}\n\tif t.CWR {\n\t\tf |= 0x0080\n\t}\n\tif t.NS {\n\t\tf |= 0x0100\n\t}\n\treturn f\n}\n\nfunc (tcp *TCP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 20 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Invalid TCP header. Length %d less than 20\", len(data))\n\t}\n\ttcp.SrcPort = TCPPort(binary.BigEndian.Uint16(data[0:2]))\n\ttcp.sPort = data[0:2]\n\ttcp.DstPort = TCPPort(binary.BigEndian.Uint16(data[2:4]))\n\ttcp.dPort = data[2:4]\n\ttcp.Seq = binary.BigEndian.Uint32(data[4:8])\n\ttcp.Ack = binary.BigEndian.Uint32(data[8:12])\n\ttcp.DataOffset = data[12] >> 4\n\ttcp.FIN = data[13]&0x01 != 0\n\ttcp.SYN = data[13]&0x02 != 0\n\ttcp.RST = data[13]&0x04 != 0\n\ttcp.PSH = data[13]&0x08 != 0\n\ttcp.ACK = data[13]&0x10 != 0\n\ttcp.URG = data[13]&0x20 != 0\n\ttcp.ECE = data[13]&0x40 != 0\n\ttcp.CWR = data[13]&0x80 != 0\n\ttcp.NS = data[12]&0x01 != 0\n\ttcp.Window = binary.BigEndian.Uint16(data[14:16])\n\ttcp.Checksum = binary.BigEndian.Uint16(data[16:18])\n\ttcp.Urgent = binary.BigEndian.Uint16(data[18:20])\n\tif tcp.Options == nil {\n\t\t// Pre-allocate to avoid allocating a slice.\n\t\ttcp.Options = tcp.opts[:0]\n\t} else {\n\t\ttcp.Options = tcp.Options[:0]\n\t}\n\ttcp.Padding = tcp.Padding[:0]\n\tif tcp.DataOffset < 5 {\n\t\treturn fmt.Errorf(\"Invalid TCP data offset %d < 5\", tcp.DataOffset)\n\t}\n\tdataStart := int(tcp.DataOffset) * 4\n\tif dataStart > len(data) {\n\t\tdf.SetTruncated()\n\t\ttcp.Payload = nil\n\t\ttcp.Contents = data\n\t\treturn errors.New(\"TCP data offset greater than packet length\")\n\t}\n\ttcp.Contents = data[:dataStart]\n\ttcp.Payload = data[dataStart:]\n\t// From here on, data points just to the header options.\n\tdata = data[20:dataStart]\nOPTIONS:\n\tfor len(data) > 0 {\n\t\ttcp.Options = append(tcp.Options, TCPOption{OptionType: TCPOptionKind(data[0])})\n\t\topt := &tcp.Options[len(tcp.Options)-1]\n\t\tswitch opt.OptionType {\n\t\tcase TCPOptionKindEndList: // End of options\n\t\t\topt.OptionLength = 1\n\t\t\ttcp.Padding = data[1:]\n\t\t\tbreak OPTIONS\n\t\tcase TCPOptionKindNop: // 1 byte padding\n\t\t\topt.OptionLength = 1\n\t\tdefault:\n\t\t\tif len(data) < 2 {\n\t\t\t\tdf.SetTruncated()\n\t\t\t\treturn fmt.Errorf(\"Invalid TCP option length. Length %d less than 2\", len(data))\n\t\t\t}\n\t\t\topt.OptionLength = data[1]\n\t\t\tif opt.OptionLength < 2 {\n\t\t\t\treturn fmt.Errorf(\"Invalid TCP option length %d < 2\", opt.OptionLength)\n\t\t\t} else if int(opt.OptionLength) > len(data) {\n\t\t\t\tdf.SetTruncated()\n\t\t\t\treturn fmt.Errorf(\"Invalid TCP option length %d exceeds remaining %d bytes\", opt.OptionLength, len(data))\n\t\t\t}\n\t\t\topt.OptionData = data[2:opt.OptionLength]\n\t\t}\n\t\tdata = data[opt.OptionLength:]\n\t}\n\treturn nil\n}\n\nfunc (t *TCP) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeTCP\n}\n\nfunc (t *TCP) NextLayerType() gopacket.LayerType {\n\tlt := t.DstPort.LayerType()\n\tif lt == gopacket.LayerTypePayload {\n\t\tlt = t.SrcPort.LayerType()\n\t}\n\treturn lt\n}\n\nfunc decodeTCP(data []byte, p gopacket.PacketBuilder) error {\n\ttcp := &TCP{}\n\terr := tcp.DecodeFromBytes(data, p)\n\tp.AddLayer(tcp)\n\tp.SetTransportLayer(tcp)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif p.DecodeOptions().DecodeStreamsAsDatagrams {\n\t\treturn p.NextDecoder(tcp.NextLayerType())\n\t} else {\n\t\treturn p.NextDecoder(gopacket.LayerTypePayload)\n\t}\n}\n\nfunc (t *TCP) TransportFlow() gopacket.Flow {\n\treturn gopacket.NewFlow(EndpointTCPPort, t.sPort, t.dPort)\n}\n\n// For testing only\nfunc (t *TCP) SetInternalPortsForTesting() {\n\tt.sPort = make([]byte, 2)\n\tt.dPort = make([]byte, 2)\n\tbinary.BigEndian.PutUint16(t.sPort, uint16(t.SrcPort))\n\tbinary.BigEndian.PutUint16(t.dPort, uint16(t.DstPort))\n}\n"
  },
  {
    "path": "layers/tcp_test.go",
    "content": "// Copyright 2016, Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc TestTCPOptionKindString(t *testing.T) {\n\ttestData := []struct {\n\t\to *TCPOption\n\t\ts string\n\t}{\n\t\t{&TCPOption{\n\t\t\tOptionType:   TCPOptionKindNop,\n\t\t\tOptionLength: 1,\n\t\t},\n\t\t\t\"TCPOption(NOP:)\"},\n\t\t{&TCPOption{\n\t\t\tOptionType:   TCPOptionKindMSS,\n\t\t\tOptionLength: 4,\n\t\t\tOptionData:   []byte{0x12, 0x34},\n\t\t},\n\t\t\t\"TCPOption(MSS:4660 0x1234)\"},\n\t\t{&TCPOption{\n\t\t\tOptionType:   TCPOptionKindTimestamps,\n\t\t\tOptionLength: 10,\n\t\t\tOptionData:   []byte{0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01},\n\t\t},\n\t\t\t\"TCPOption(Timestamps:2/1 0x0000000200000001)\"}}\n\n\tfor _, tc := range testData {\n\t\tif s := tc.o.String(); s != tc.s {\n\t\t\tt.Errorf(\"expected %#v string to be %s, got %s\", tc.o, tc.s, s)\n\t\t}\n\t}\n}\n\nfunc TestTCPSerializePadding(t *testing.T) {\n\ttcp := &TCP{}\n\ttcp.Options = append(tcp.Options, TCPOption{\n\t\tOptionType:   TCPOptionKindNop,\n\t\tOptionLength: 1,\n\t})\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\terr := gopacket.SerializeLayers(buf, opts, tcp)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif len(buf.Bytes())%4 != 0 {\n\t\tt.Errorf(\"TCP data of len %d not padding to 32 bit boundary\", len(buf.Bytes()))\n\t}\n}\n\n// testPacketTCPOptionDecode is the packet:\n//   16:17:26.239051 IP 192.168.0.1.12345 > 192.168.0.2.54321: Flags [S], seq 3735928559:3735928563, win 0, options [mss 8192,eol], length 4\n//   \t0x0000:  0000 0000 0001 0000 0000 0001 0800 4500  ..............E.\n//   \t0x0010:  0034 0000 0000 8006 b970 c0a8 0001 c0a8  .4.......p......\n//   \t0x0020:  0002 3039 d431 dead beef 0000 0000 7002  ..09.1........p.\n//   \t0x0030:  0000 829c 0000 0204 2000 0000 0000 5465  ..............Te\n//   \t0x0040:  7374                                     st\nvar testPacketTCPOptionDecode = []byte{\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x80, 0x06, 0xb9, 0x70, 0xc0, 0xa8, 0x00, 0x01, 0xc0, 0xa8,\n\t0x00, 0x02, 0x30, 0x39, 0xd4, 0x31, 0xde, 0xad, 0xbe, 0xef, 0x00, 0x00, 0x00, 0x00, 0x70, 0x02,\n\t0x00, 0x00, 0x82, 0x9c, 0x00, 0x00, 0x02, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x65,\n\t0x73, 0x74,\n}\n\nfunc TestPacketTCPOptionDecode(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketTCPOptionDecode, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\ttcp := p.Layer(LayerTypeTCP).(*TCP)\n\tif tcp == nil {\n\t\tt.Error(\"Expected TCP layer, but got none\")\n\t}\n\n\texpected := []TCPOption{\n\t\t{\n\t\t\tOptionType:   TCPOptionKindMSS,\n\t\t\tOptionLength: 4,\n\t\t\tOptionData:   []byte{32, 00},\n\t\t},\n\t\t{\n\t\t\tOptionType:   TCPOptionKindEndList,\n\t\t\tOptionLength: 1,\n\t\t},\n\t}\n\n\tif !reflect.DeepEqual(expected, tcp.Options) {\n\t\tt.Errorf(\"expected options to be %#v, but got %#v\", expected, tcp.Options)\n\t}\n}\n"
  },
  {
    "path": "layers/tcpip.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// Checksum computation for TCP/UDP.\ntype tcpipchecksum struct {\n\tpseudoheader tcpipPseudoHeader\n}\n\ntype tcpipPseudoHeader interface {\n\tpseudoheaderChecksum() (uint32, error)\n}\n\nfunc (ip *IPv4) pseudoheaderChecksum() (csum uint32, err error) {\n\tif err := ip.AddressTo4(); err != nil {\n\t\treturn 0, err\n\t}\n\tcsum += (uint32(ip.SrcIP[0]) + uint32(ip.SrcIP[2])) << 8\n\tcsum += uint32(ip.SrcIP[1]) + uint32(ip.SrcIP[3])\n\tcsum += (uint32(ip.DstIP[0]) + uint32(ip.DstIP[2])) << 8\n\tcsum += uint32(ip.DstIP[1]) + uint32(ip.DstIP[3])\n\treturn csum, nil\n}\n\nfunc (ip *IPv6) pseudoheaderChecksum() (csum uint32, err error) {\n\tif err := ip.AddressTo16(); err != nil {\n\t\treturn 0, err\n\t}\n\tfor i := 0; i < 16; i += 2 {\n\t\tcsum += uint32(ip.SrcIP[i]) << 8\n\t\tcsum += uint32(ip.SrcIP[i+1])\n\t\tcsum += uint32(ip.DstIP[i]) << 8\n\t\tcsum += uint32(ip.DstIP[i+1])\n\t}\n\treturn csum, nil\n}\n\n// Calculate the TCP/IP checksum defined in rfc1071.  The passed-in csum is any\n// initial checksum data that's already been computed.\nfunc tcpipChecksum(data []byte, csum uint32) uint16 {\n\t// to handle odd lengths, we loop to length - 1, incrementing by 2, then\n\t// handle the last byte specifically by checking against the original\n\t// length.\n\tlength := len(data) - 1\n\tfor i := 0; i < length; i += 2 {\n\t\t// For our test packet, doing this manually is about 25% faster\n\t\t// (740 ns vs. 1000ns) than doing it by calling binary.BigEndian.Uint16.\n\t\tcsum += uint32(data[i]) << 8\n\t\tcsum += uint32(data[i+1])\n\t}\n\tif len(data)%2 == 1 {\n\t\tcsum += uint32(data[length]) << 8\n\t}\n\tfor csum > 0xffff {\n\t\tcsum = (csum >> 16) + (csum & 0xffff)\n\t}\n\treturn ^uint16(csum)\n}\n\n// computeChecksum computes a TCP or UDP checksum.  headerAndPayload is the\n// serialized TCP or UDP header plus its payload, with the checksum zero'd\n// out. headerProtocol is the IP protocol number of the upper-layer header.\nfunc (c *tcpipchecksum) computeChecksum(headerAndPayload []byte, headerProtocol IPProtocol) (uint16, error) {\n\tif c.pseudoheader == nil {\n\t\treturn 0, errors.New(\"TCP/IP layer 4 checksum cannot be computed without network layer... call SetNetworkLayerForChecksum to set which layer to use\")\n\t}\n\tlength := uint32(len(headerAndPayload))\n\tcsum, err := c.pseudoheader.pseudoheaderChecksum()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tcsum += uint32(headerProtocol)\n\tcsum += length & 0xffff\n\tcsum += length >> 16\n\treturn tcpipChecksum(headerAndPayload, csum), nil\n}\n\n// SetNetworkLayerForChecksum tells this layer which network layer is wrapping it.\n// This is needed for computing the checksum when serializing, since TCP/IP transport\n// layer checksums depends on fields in the IPv4 or IPv6 layer that contains it.\n// The passed in layer must be an *IPv4 or *IPv6.\nfunc (i *tcpipchecksum) SetNetworkLayerForChecksum(l gopacket.NetworkLayer) error {\n\tswitch v := l.(type) {\n\tcase *IPv4:\n\t\ti.pseudoheader = v\n\tcase *IPv6:\n\t\ti.pseudoheader = v\n\tdefault:\n\t\treturn fmt.Errorf(\"cannot use layer type %v for tcp checksum network layer\", l.LayerType())\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "layers/tcpip_test.go",
    "content": "// Copyright 2014, Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n\t\"net\"\n\t\"testing\"\n)\n\nconst (\n\tipv4UDPChecksum                = uint16(0xbc5f) // Wireshark\n\tipv6UDPChecksumWithIPv6DstOpts = uint16(0x4d21) // Wireshark\n\tipv6UDPChecksumJumbogram       = uint16(0xcda8)\n)\n\nfunc createIPv4ChecksumTestLayer() (ip4 *IPv4) {\n\tip4 = &IPv4{}\n\tip4.Version = 4\n\tip4.TTL = 64\n\tip4.SrcIP = net.ParseIP(\"192.0.2.1\")\n\tip4.DstIP = net.ParseIP(\"198.51.100.1\")\n\treturn\n}\n\nfunc createIPv6ChecksumTestLayer() (ip6 *IPv6) {\n\tip6 = &IPv6{}\n\tip6.Version = 6\n\tip6.NextHeader = IPProtocolNoNextHeader\n\tip6.HopLimit = 64\n\tip6.SrcIP = net.ParseIP(\"2001:db8::1\")\n\tip6.DstIP = net.ParseIP(\"2001:db8::2\")\n\treturn\n}\n\nfunc createIPv6DestinationChecksumTestLayer() (dst *IPv6Destination) {\n\ttlv := &IPv6DestinationOption{}\n\ttlv.OptionType = 0x01 //PadN\n\ttlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00}\n\tdst = &IPv6Destination{}\n\tdst.Options = append(dst.Options, tlv)\n\tdst.NextHeader = IPProtocolNoNextHeader\n\treturn\n}\n\nfunc createUDPChecksumTestLayer() (udp *UDP) {\n\tudp = &UDP{}\n\tudp.SrcPort = UDPPort(12345)\n\tudp.DstPort = UDPPort(9999)\n\treturn\n}\n\nfunc TestIPv4UDPChecksum(t *testing.T) {\n\tvar serialize = make([]gopacket.SerializableLayer, 0, 2)\n\tvar u *UDP\n\tvar err error\n\n\tip4 := createIPv4ChecksumTestLayer()\n\tip4.Protocol = IPProtocolUDP\n\tserialize = append(serialize, ip4)\n\n\tudp := createUDPChecksumTestLayer()\n\tudp.SetNetworkLayerForChecksum(ip4)\n\tserialize = append(serialize, udp)\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}\n\terr = gopacket.SerializeLayers(buf, opts, serialize...)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tp := gopacket.NewPacket(buf.Bytes(), LinkTypeRaw, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Fatal(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeIPv4, LayerTypeUDP}, t)\n\n\tif l, ok := p.Layer(LayerTypeUDP).(*UDP); !ok {\n\t\tt.Fatal(\"No UDP layer type found in packet\")\n\t} else {\n\t\tu = l\n\t}\n\tgot := u.Checksum\n\twant := ipv4UDPChecksum\n\tif got != want {\n\t\tt.Errorf(\"Bad checksum:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t}\n}\n\nfunc TestIPv6UDPChecksumWithIPv6DstOpts(t *testing.T) {\n\tvar serialize = make([]gopacket.SerializableLayer, 0, 3)\n\tvar u *UDP\n\tvar err error\n\n\tip6 := createIPv6ChecksumTestLayer()\n\tip6.NextHeader = IPProtocolIPv6Destination\n\tserialize = append(serialize, ip6)\n\n\tdst := createIPv6DestinationChecksumTestLayer()\n\tdst.NextHeader = IPProtocolUDP\n\tserialize = append(serialize, dst)\n\n\tudp := createUDPChecksumTestLayer()\n\tudp.SetNetworkLayerForChecksum(ip6)\n\tserialize = append(serialize, udp)\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}\n\terr = gopacket.SerializeLayers(buf, opts, serialize...)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tp := gopacket.NewPacket(buf.Bytes(), LinkTypeRaw, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Fatal(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6Destination, LayerTypeUDP}, t)\n\n\tif l, ok := p.Layer(LayerTypeUDP).(*UDP); !ok {\n\t\tt.Fatal(\"No UDP layer type found in packet\")\n\t} else {\n\t\tu = l\n\t}\n\tgot := u.Checksum\n\twant := ipv6UDPChecksumWithIPv6DstOpts\n\tif got != want {\n\t\tt.Errorf(\"Bad checksum:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t}\n}\n\nfunc TestIPv6JumbogramUDPChecksum(t *testing.T) {\n\tvar serialize = make([]gopacket.SerializableLayer, 0, 4)\n\tvar u *UDP\n\tvar err error\n\n\tip6 := &IPv6{}\n\tip6.Version = 6\n\tip6.NextHeader = IPProtocolUDP\n\tip6.HopLimit = 64\n\tip6.SrcIP = net.ParseIP(\"2001:db8::1\")\n\tip6.DstIP = net.ParseIP(\"2001:db8::2\")\n\tserialize = append(serialize, ip6)\n\n\tudp := &UDP{}\n\tudp.SrcPort = UDPPort(12345)\n\tudp.DstPort = UDPPort(9999)\n\tudp.SetNetworkLayerForChecksum(ip6)\n\tserialize = append(serialize, udp)\n\n\tpayload := make([]byte, ipv6MaxPayloadLength+1)\n\tfor i := range payload {\n\t\tpayload[i] = 0xfe\n\t}\n\tserialize = append(serialize, gopacket.Payload(payload))\n\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}\n\terr = gopacket.SerializeLayers(buf, opts, serialize...)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tp := gopacket.NewPacket(buf.Bytes(), LinkTypeRaw, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Fatal(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeUDP, gopacket.LayerTypePayload}, t)\n\n\tif l, ok := p.Layer(LayerTypeUDP).(*UDP); !ok {\n\t\tt.Fatal(\"No UDP layer type found in packet\")\n\t} else {\n\t\tu = l\n\t}\n\tgot := u.Checksum\n\twant := ipv6UDPChecksumJumbogram\n\tif got != want {\n\t\tt.Errorf(\"Bad checksum:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t}\n}\n"
  },
  {
    "path": "layers/test_creator.py",
    "content": "#!/usr/bin/python\n# Copyright 2012 Google, Inc. All rights reserved.\n\n\"\"\"TestCreator creates test templates from pcap files.\"\"\"\n\nimport argparse\nimport base64\nimport glob\nimport re\nimport string\nimport subprocess\nimport sys\n\n\nclass Packet(object):\n  \"\"\"Helper class encapsulating packet from a pcap file.\"\"\"\n\n  def __init__(self, packet_lines):\n    self.packet_lines = packet_lines\n    self.data = self._DecodeText(packet_lines)\n\n  @classmethod\n  def _DecodeText(cls, packet_lines):\n    packet_bytes = []\n    # First line is timestamp and stuff, skip it.\n    # Format: 0x0010:  0000 0020 3aff 3ffe 0000 0000 0000 0000  ....:.?.........\n\n    for line in packet_lines[1:]:\n      m = re.match(r'\\s+0x[a-f\\d]+:\\s+((?:[\\da-f]{2,4}\\s)*)', line, re.IGNORECASE)\n      if m is None: continue\n      for hexpart in m.group(1).split():\n        packet_bytes.append(base64.b16decode(hexpart.upper()))\n    return ''.join(packet_bytes)\n\n  def Test(self, name, link_type):\n    \"\"\"Yields a test using this packet, as a set of lines.\"\"\"\n    yield '// testPacket%s is the packet:' % name\n    for line in self.packet_lines:\n      yield '//   ' + line\n    yield 'var testPacket%s = []byte{' % name\n    data = list(self.data)\n    while data:\n      linebytes, data = data[:16], data[16:]\n      yield ''.join(['\\t'] + ['0x%02x, ' % ord(c) for c in linebytes])\n    yield '}'\n    yield 'func TestPacket%s(t *testing.T) {' % name\n    yield '\\tp := gopacket.NewPacket(testPacket%s, LinkType%s, gopacket.Default)' % (name, link_type)\n    yield '\\tif p.ErrorLayer() != nil {'\n    yield '\\t\\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())'\n    yield '\\t}'\n    yield '\\tcheckLayers(p, []gopacket.LayerType{LayerType%s, FILL_ME_IN_WITH_ACTUAL_LAYERS}, t)' % link_type\n    yield '}'\n    yield 'func BenchmarkDecodePacket%s(b *testing.B) {' % name\n    yield '\\tfor i := 0; i < b.N; i++ {'\n    yield '\\t\\tgopacket.NewPacket(testPacket%s, LinkType%s, gopacket.NoCopy)' % (name, link_type)\n    yield '\\t}'\n    yield '}'\n\n\n\ndef GetTcpdumpOutput(filename):\n  \"\"\"Runs tcpdump on the given file, returning output as string.\"\"\"\n  return subprocess.check_output(\n      ['tcpdump', '-XX', '-s', '0', '-n', '-r', filename])\n\n\ndef TcpdumpOutputToPackets(output):\n  \"\"\"Reads a pcap file with TCPDump, yielding Packet objects.\"\"\"\n  pdata = []\n  for line in output.splitlines():\n    if line[0] not in string.whitespace and pdata:\n      yield Packet(pdata)\n      pdata = []\n    pdata.append(line)\n  if pdata:\n    yield Packet(pdata)\n\n\ndef main():\n  class CustomHelpFormatter(argparse.ArgumentDefaultsHelpFormatter):\n    def _format_usage(self, usage, actions, groups, prefix=None):\n      header =('TestCreator creates gopacket tests using a pcap file.\\n\\n'\n               'Tests are written to standard out... they can then be \\n'\n               'copied into the file of your choice and modified as \\n'\n               'you see.\\n\\n')\n      return header + argparse.ArgumentDefaultsHelpFormatter._format_usage(\n        self, usage, actions, groups, prefix)\n\n  parser = argparse.ArgumentParser(formatter_class=CustomHelpFormatter)\n  parser.add_argument('--link_type', default='Ethernet', help='the link type (default: %(default)s)')\n  parser.add_argument('--name', default='Packet%d', help='the layer type, must have \"%d\" inside it')\n  parser.add_argument('files', metavar='file.pcap', type=str, nargs='+', help='the files to process')\n\n  args = parser.parse_args()\n\n  for arg in args.files:\n    for path in glob.glob(arg):\n      for i, packet in enumerate(TcpdumpOutputToPackets(GetTcpdumpOutput(path))):\n        print '\\n'.join(packet.Test(\n          args.name % i, args.link_type))\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "layers/testdata/fuzz/FuzzDecodeFromBytes/27d23183d8ce7b719228870c23869cf21bf8829d7160c82da88f80aeff2d861c",
    "content": "go test fuzz v1\n[]byte(\"0000000\\x10\\x10\\x00\\x01\\x01\\x01\\x01\\x01\\x01\\x00\")\n"
  },
  {
    "path": "layers/testdata/fuzz/FuzzDecodeFromBytes/3b53f220d321f20980b59f64e1617d6b334b152a90b141a7407c3c8fa4837a31",
    "content": "go test fuzz v1\n[]byte(\"000000000000\\x00\")\n"
  },
  {
    "path": "layers/testdata/fuzz/FuzzDecodeFromBytes/f539b7a397cf68c2129abd63d4c7cfb1979c489ad9bad6898510a4d4759bb85f",
    "content": "go test fuzz v1\n[]byte(\"01000\\x10\\x10\\xdfd\\x01\\x01\\x01\\x00d\\x01\\x01\\x01\\x00\")\n"
  },
  {
    "path": "layers/testdata/fuzz/FuzzDecodeFromBytes/fe20300d6b2057b406a06ec4f04065f6d0dda6b2b362c0a89192c1933e927adf",
    "content": "go test fuzz v1\n[]byte(\"0000\\x00\\x00000000\\x010\\x000\")\n"
  },
  {
    "path": "layers/tls.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// TLSType defines the type of data after the TLS Record\ntype TLSType uint8\n\n// TLSType known values.\nconst (\n\tTLSChangeCipherSpec TLSType = 20\n\tTLSAlert            TLSType = 21\n\tTLSHandshake        TLSType = 22\n\tTLSApplicationData  TLSType = 23\n\tTLSUnknown          TLSType = 255\n)\n\n// String shows the register type nicely formatted\nfunc (tt TLSType) String() string {\n\tswitch tt {\n\tdefault:\n\t\treturn \"Unknown\"\n\tcase TLSChangeCipherSpec:\n\t\treturn \"Change Cipher Spec\"\n\tcase TLSAlert:\n\t\treturn \"Alert\"\n\tcase TLSHandshake:\n\t\treturn \"Handshake\"\n\tcase TLSApplicationData:\n\t\treturn \"Application Data\"\n\t}\n}\n\n// TLSVersion represents the TLS version in numeric format\ntype TLSVersion uint16\n\n// Strings shows the TLS version nicely formatted\nfunc (tv TLSVersion) String() string {\n\tswitch tv {\n\tdefault:\n\t\treturn \"Unknown\"\n\tcase 0x0200:\n\t\treturn \"SSL 2.0\"\n\tcase 0x0300:\n\t\treturn \"SSL 3.0\"\n\tcase 0x0301:\n\t\treturn \"TLS 1.0\"\n\tcase 0x0302:\n\t\treturn \"TLS 1.1\"\n\tcase 0x0303:\n\t\treturn \"TLS 1.2\"\n\tcase 0x0304:\n\t\treturn \"TLS 1.3\"\n\t}\n}\n\n// TLS is specified in RFC 5246\n//\n//  TLS Record Protocol\n//  0  1  2  3  4  5  6  7  8\n//  +--+--+--+--+--+--+--+--+\n//  |     Content Type      |\n//  +--+--+--+--+--+--+--+--+\n//  |    Version (major)    |\n//  +--+--+--+--+--+--+--+--+\n//  |    Version (minor)    |\n//  +--+--+--+--+--+--+--+--+\n//  |        Length         |\n//  +--+--+--+--+--+--+--+--+\n//  |        Length         |\n//  +--+--+--+--+--+--+--+--+\n\n// TLS is actually a slide of TLSrecord structures\ntype TLS struct {\n\tBaseLayer\n\n\t// TLS Records\n\tChangeCipherSpec []TLSChangeCipherSpecRecord\n\tHandshake        []TLSHandshakeRecord\n\tAppData          []TLSAppDataRecord\n\tAlert            []TLSAlertRecord\n}\n\n// TLSRecordHeader contains all the information that each TLS Record types should have\ntype TLSRecordHeader struct {\n\tContentType TLSType\n\tVersion     TLSVersion\n\tLength      uint16\n}\n\n// LayerType returns gopacket.LayerTypeTLS.\nfunc (t *TLS) LayerType() gopacket.LayerType { return LayerTypeTLS }\n\n// decodeTLS decodes the byte slice into a TLS type. It also\n// setups the application Layer in PacketBuilder.\nfunc decodeTLS(data []byte, p gopacket.PacketBuilder) error {\n\tt := &TLS{}\n\terr := t.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.AddLayer(t)\n\tp.SetApplicationLayer(t)\n\treturn nil\n}\n\n// DecodeFromBytes decodes the slice into the TLS struct.\nfunc (t *TLS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tt.BaseLayer.Contents = data\n\tt.BaseLayer.Payload = nil\n\n\tt.ChangeCipherSpec = t.ChangeCipherSpec[:0]\n\tt.Handshake = t.Handshake[:0]\n\tt.AppData = t.AppData[:0]\n\tt.Alert = t.Alert[:0]\n\n\treturn t.decodeTLSRecords(data, df)\n}\n\nfunc (t *TLS) decodeTLSRecords(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 5 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"TLS record too short\")\n\t}\n\n\t// since there are no further layers, the baselayer's content is\n\t// pointing to this layer\n\t// TODO: Consider removing this\n\tt.BaseLayer = BaseLayer{Contents: data[:len(data)]}\n\n\tvar h TLSRecordHeader\n\th.ContentType = TLSType(data[0])\n\th.Version = TLSVersion(binary.BigEndian.Uint16(data[1:3]))\n\th.Length = binary.BigEndian.Uint16(data[3:5])\n\n\tif h.ContentType.String() == \"Unknown\" {\n\t\treturn errors.New(\"Unknown TLS record type\")\n\t}\n\n\thl := 5 // header length\n\ttl := hl + int(h.Length)\n\tif len(data) < tl {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"TLS packet length mismatch\")\n\t}\n\n\tswitch h.ContentType {\n\tdefault:\n\t\treturn errors.New(\"Unknown TLS record type\")\n\tcase TLSChangeCipherSpec:\n\t\tvar r TLSChangeCipherSpecRecord\n\t\te := r.decodeFromBytes(h, data[hl:tl], df)\n\t\tif e != nil {\n\t\t\treturn e\n\t\t}\n\t\tt.ChangeCipherSpec = append(t.ChangeCipherSpec, r)\n\tcase TLSAlert:\n\t\tvar r TLSAlertRecord\n\t\te := r.decodeFromBytes(h, data[hl:tl], df)\n\t\tif e != nil {\n\t\t\treturn e\n\t\t}\n\t\tt.Alert = append(t.Alert, r)\n\tcase TLSHandshake:\n\t\tvar r TLSHandshakeRecord\n\t\te := r.decodeFromBytes(h, data[hl:tl], df)\n\t\tif e != nil {\n\t\t\treturn e\n\t\t}\n\t\tt.Handshake = append(t.Handshake, r)\n\tcase TLSApplicationData:\n\t\tvar r TLSAppDataRecord\n\t\te := r.decodeFromBytes(h, data[hl:tl], df)\n\t\tif e != nil {\n\t\t\treturn e\n\t\t}\n\t\tt.AppData = append(t.AppData, r)\n\t}\n\n\tif len(data) == tl {\n\t\treturn nil\n\t}\n\treturn t.decodeTLSRecords(data[tl:len(data)], df)\n}\n\n// CanDecode implements gopacket.DecodingLayer.\nfunc (t *TLS) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeTLS\n}\n\n// NextLayerType implements gopacket.DecodingLayer.\nfunc (t *TLS) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypeZero\n}\n\n// Payload returns nil, since TLS encrypted payload is inside TLSAppDataRecord\nfunc (t *TLS) Payload() []byte {\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\nfunc (t *TLS) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\ttotalLength := 0\n\tfor _, record := range t.ChangeCipherSpec {\n\t\tif opts.FixLengths {\n\t\t\trecord.Length = 1\n\t\t}\n\t\ttotalLength += 5 + 1 // length of header + record\n\t}\n\tfor range t.Handshake {\n\t\ttotalLength += 5\n\t\t// TODO\n\t}\n\tfor _, record := range t.AppData {\n\t\tif opts.FixLengths {\n\t\t\trecord.Length = uint16(len(record.Payload))\n\t\t}\n\t\ttotalLength += 5 + len(record.Payload)\n\t}\n\tfor _, record := range t.Alert {\n\t\tif len(record.EncryptedMsg) == 0 {\n\t\t\tif opts.FixLengths {\n\t\t\t\trecord.Length = 2\n\t\t\t}\n\t\t\ttotalLength += 5 + 2\n\t\t} else {\n\t\t\tif opts.FixLengths {\n\t\t\t\trecord.Length = uint16(len(record.EncryptedMsg))\n\t\t\t}\n\t\t\ttotalLength += 5 + len(record.EncryptedMsg)\n\t\t}\n\t}\n\tdata, err := b.PrependBytes(totalLength)\n\tif err != nil {\n\t\treturn err\n\t}\n\toff := 0\n\tfor _, record := range t.ChangeCipherSpec {\n\t\toff = encodeHeader(record.TLSRecordHeader, data, off)\n\t\tdata[off] = byte(record.Message)\n\t\toff++\n\t}\n\tfor _, record := range t.Handshake {\n\t\toff = encodeHeader(record.TLSRecordHeader, data, off)\n\t\t// TODO\n\t}\n\tfor _, record := range t.AppData {\n\t\toff = encodeHeader(record.TLSRecordHeader, data, off)\n\t\tcopy(data[off:], record.Payload)\n\t\toff += len(record.Payload)\n\t}\n\tfor _, record := range t.Alert {\n\t\toff = encodeHeader(record.TLSRecordHeader, data, off)\n\t\tif len(record.EncryptedMsg) == 0 {\n\t\t\tdata[off] = byte(record.Level)\n\t\t\tdata[off+1] = byte(record.Description)\n\t\t\toff += 2\n\t\t} else {\n\t\t\tcopy(data[off:], record.EncryptedMsg)\n\t\t\toff += len(record.EncryptedMsg)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc encodeHeader(header TLSRecordHeader, data []byte, offset int) int {\n\tdata[offset] = byte(header.ContentType)\n\tbinary.BigEndian.PutUint16(data[offset+1:], uint16(header.Version))\n\tbinary.BigEndian.PutUint16(data[offset+3:], header.Length)\n\n\treturn offset + 5\n}\n"
  },
  {
    "path": "layers/tls_alert.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// TLSAlertLevel defines the alert level data type\ntype TLSAlertLevel uint8\n\n// TLSAlertDescr defines the alert descrption data type\ntype TLSAlertDescr uint8\n\nconst (\n\tTLSAlertWarning      TLSAlertLevel = 1\n\tTLSAlertFatal        TLSAlertLevel = 2\n\tTLSAlertUnknownLevel TLSAlertLevel = 255\n\n\tTLSAlertCloseNotify               TLSAlertDescr = 0\n\tTLSAlertUnexpectedMessage         TLSAlertDescr = 10\n\tTLSAlertBadRecordMac              TLSAlertDescr = 20\n\tTLSAlertDecryptionFailedRESERVED  TLSAlertDescr = 21\n\tTLSAlertRecordOverflow            TLSAlertDescr = 22\n\tTLSAlertDecompressionFailure      TLSAlertDescr = 30\n\tTLSAlertHandshakeFailure          TLSAlertDescr = 40\n\tTLSAlertNoCertificateRESERVED     TLSAlertDescr = 41\n\tTLSAlertBadCertificate            TLSAlertDescr = 42\n\tTLSAlertUnsupportedCertificate    TLSAlertDescr = 43\n\tTLSAlertCertificateRevoked        TLSAlertDescr = 44\n\tTLSAlertCertificateExpired        TLSAlertDescr = 45\n\tTLSAlertCertificateUnknown        TLSAlertDescr = 46\n\tTLSAlertIllegalParameter          TLSAlertDescr = 47\n\tTLSAlertUnknownCa                 TLSAlertDescr = 48\n\tTLSAlertAccessDenied              TLSAlertDescr = 49\n\tTLSAlertDecodeError               TLSAlertDescr = 50\n\tTLSAlertDecryptError              TLSAlertDescr = 51\n\tTLSAlertExportRestrictionRESERVED TLSAlertDescr = 60\n\tTLSAlertProtocolVersion           TLSAlertDescr = 70\n\tTLSAlertInsufficientSecurity      TLSAlertDescr = 71\n\tTLSAlertInternalError             TLSAlertDescr = 80\n\tTLSAlertUserCanceled              TLSAlertDescr = 90\n\tTLSAlertNoRenegotiation           TLSAlertDescr = 100\n\tTLSAlertUnsupportedExtension      TLSAlertDescr = 110\n\tTLSAlertUnknownDescription        TLSAlertDescr = 255\n)\n\n//  TLS Alert\n//  0  1  2  3  4  5  6  7  8\n//  +--+--+--+--+--+--+--+--+\n//  |         Level         |\n//  +--+--+--+--+--+--+--+--+\n//  |      Description      |\n//  +--+--+--+--+--+--+--+--+\n\n// TLSAlertRecord contains all the information that each Alert Record type should have\ntype TLSAlertRecord struct {\n\tTLSRecordHeader\n\n\tLevel       TLSAlertLevel\n\tDescription TLSAlertDescr\n\n\tEncryptedMsg []byte\n}\n\n// DecodeFromBytes decodes the slice into the TLS struct.\nfunc (t *TLSAlertRecord) decodeFromBytes(h TLSRecordHeader, data []byte, df gopacket.DecodeFeedback) error {\n\t// TLS Record Header\n\tt.ContentType = h.ContentType\n\tt.Version = h.Version\n\tt.Length = h.Length\n\n\tif len(data) < 2 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"TLS Alert packet too short\")\n\t}\n\n\tif t.Length == 2 {\n\t\tt.Level = TLSAlertLevel(data[0])\n\t\tt.Description = TLSAlertDescr(data[1])\n\t} else {\n\t\tt.Level = TLSAlertUnknownLevel\n\t\tt.Description = TLSAlertUnknownDescription\n\t\tt.EncryptedMsg = data\n\t}\n\n\treturn nil\n}\n\n// Strings shows the TLS alert level nicely formatted\nfunc (al TLSAlertLevel) String() string {\n\tswitch al {\n\tdefault:\n\t\treturn fmt.Sprintf(\"Unknown(%d)\", al)\n\tcase TLSAlertWarning:\n\t\treturn \"Warning\"\n\tcase TLSAlertFatal:\n\t\treturn \"Fatal\"\n\t}\n}\n\n// Strings shows the TLS alert description nicely formatted\nfunc (ad TLSAlertDescr) String() string {\n\tswitch ad {\n\tdefault:\n\t\treturn \"Unknown\"\n\tcase TLSAlertCloseNotify:\n\t\treturn \"close_notify\"\n\tcase TLSAlertUnexpectedMessage:\n\t\treturn \"unexpected_message\"\n\tcase TLSAlertBadRecordMac:\n\t\treturn \"bad_record_mac\"\n\tcase TLSAlertDecryptionFailedRESERVED:\n\t\treturn \"decryption_failed_RESERVED\"\n\tcase TLSAlertRecordOverflow:\n\t\treturn \"record_overflow\"\n\tcase TLSAlertDecompressionFailure:\n\t\treturn \"decompression_failure\"\n\tcase TLSAlertHandshakeFailure:\n\t\treturn \"handshake_failure\"\n\tcase TLSAlertNoCertificateRESERVED:\n\t\treturn \"no_certificate_RESERVED\"\n\tcase TLSAlertBadCertificate:\n\t\treturn \"bad_certificate\"\n\tcase TLSAlertUnsupportedCertificate:\n\t\treturn \"unsupported_certificate\"\n\tcase TLSAlertCertificateRevoked:\n\t\treturn \"certificate_revoked\"\n\tcase TLSAlertCertificateExpired:\n\t\treturn \"certificate_expired\"\n\tcase TLSAlertCertificateUnknown:\n\t\treturn \"certificate_unknown\"\n\tcase TLSAlertIllegalParameter:\n\t\treturn \"illegal_parameter\"\n\tcase TLSAlertUnknownCa:\n\t\treturn \"unknown_ca\"\n\tcase TLSAlertAccessDenied:\n\t\treturn \"access_denied\"\n\tcase TLSAlertDecodeError:\n\t\treturn \"decode_error\"\n\tcase TLSAlertDecryptError:\n\t\treturn \"decrypt_error\"\n\tcase TLSAlertExportRestrictionRESERVED:\n\t\treturn \"export_restriction_RESERVED\"\n\tcase TLSAlertProtocolVersion:\n\t\treturn \"protocol_version\"\n\tcase TLSAlertInsufficientSecurity:\n\t\treturn \"insufficient_security\"\n\tcase TLSAlertInternalError:\n\t\treturn \"internal_error\"\n\tcase TLSAlertUserCanceled:\n\t\treturn \"user_canceled\"\n\tcase TLSAlertNoRenegotiation:\n\t\treturn \"no_renegotiation\"\n\tcase TLSAlertUnsupportedExtension:\n\t\treturn \"unsupported_extension\"\n\t}\n}\n"
  },
  {
    "path": "layers/tls_appdata.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"errors\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// TLSAppDataRecord contains all the information that each AppData Record types should have\ntype TLSAppDataRecord struct {\n\tTLSRecordHeader\n\tPayload []byte\n}\n\n// DecodeFromBytes decodes the slice into the TLS struct.\nfunc (t *TLSAppDataRecord) decodeFromBytes(h TLSRecordHeader, data []byte, df gopacket.DecodeFeedback) error {\n\t// TLS Record Header\n\tt.ContentType = h.ContentType\n\tt.Version = h.Version\n\tt.Length = h.Length\n\n\tif len(data) != int(t.Length) {\n\t\treturn errors.New(\"TLS Application Data length mismatch\")\n\t}\n\n\tt.Payload = data\n\treturn nil\n}\n"
  },
  {
    "path": "layers/tls_cipherspec.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"errors\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// TLSchangeCipherSpec defines the message value inside ChangeCipherSpec Record\ntype TLSchangeCipherSpec uint8\n\nconst (\n\tTLSChangecipherspecMessage TLSchangeCipherSpec = 1\n\tTLSChangecipherspecUnknown TLSchangeCipherSpec = 255\n)\n\n//  TLS Change Cipher Spec\n//  0  1  2  3  4  5  6  7  8\n//  +--+--+--+--+--+--+--+--+\n//  |        Message        |\n//  +--+--+--+--+--+--+--+--+\n\n// TLSChangeCipherSpecRecord defines the type of data inside ChangeCipherSpec Record\ntype TLSChangeCipherSpecRecord struct {\n\tTLSRecordHeader\n\n\tMessage TLSchangeCipherSpec\n}\n\n// DecodeFromBytes decodes the slice into the TLS struct.\nfunc (t *TLSChangeCipherSpecRecord) decodeFromBytes(h TLSRecordHeader, data []byte, df gopacket.DecodeFeedback) error {\n\t// TLS Record Header\n\tt.ContentType = h.ContentType\n\tt.Version = h.Version\n\tt.Length = h.Length\n\n\tif len(data) != 1 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"TLS Change Cipher Spec record incorrect length\")\n\t}\n\n\tt.Message = TLSchangeCipherSpec(data[0])\n\tif t.Message != TLSChangecipherspecMessage {\n\t\tt.Message = TLSChangecipherspecUnknown\n\t}\n\n\treturn nil\n}\n\n// String shows the message value nicely formatted\nfunc (ccs TLSchangeCipherSpec) String() string {\n\tswitch ccs {\n\tdefault:\n\t\treturn \"Unknown\"\n\tcase TLSChangecipherspecMessage:\n\t\treturn \"Change Cipher Spec Message\"\n\t}\n}\n"
  },
  {
    "path": "layers/tls_handshake.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n)\n\n// TLSHandshakeRecord defines the structure of a Handshare Record\ntype TLSHandshakeRecord struct {\n\tTLSRecordHeader\n}\n\n// DecodeFromBytes decodes the slice into the TLS struct.\nfunc (t *TLSHandshakeRecord) decodeFromBytes(h TLSRecordHeader, data []byte, df gopacket.DecodeFeedback) error {\n\t// TLS Record Header\n\tt.ContentType = h.ContentType\n\tt.Version = h.Version\n\tt.Length = h.Length\n\n\t// TODO\n\n\treturn nil\n}\n"
  },
  {
    "path": "layers/tls_test.go",
    "content": "// Copyright 2020 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license that can be found\n// in the LICENSE file in the root of the source tree.\npackage layers\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// https://github.com/tintinweb/scapy-ssl_tls/blob/master/tests/files/RSA_WITH_AES_128_CBC_SHA.pcap\n// WARNING! Tests are specific for each packet. If you change a packet, please review their tests.\n\n// Packet 4 - Client Hello (full packet, from Ethernet to TLS layers)\nvar testClientHello = []byte{\n\t0x00, 0x0c, 0x29, 0x1f, 0xab, 0x17, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x08, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0xfe, 0x71, 0x42, 0x40, 0x00, 0x80, 0x06, 0x4e, 0xe1, 0xc0, 0xa8, 0xdc, 0x01, 0xc0, 0xa8,\n\t0xdc, 0x83, 0x2f, 0x0e, 0x01, 0xbb, 0x25, 0x6c, 0xbd, 0x3d, 0xcc, 0xce, 0xe1, 0xf7, 0x50, 0x18,\n\t0xff, 0xff, 0x7c, 0xaf, 0x00, 0x00, 0x16, 0x03, 0x01, 0x00, 0xd1, 0x01, 0x00, 0x00, 0xcd, 0x03,\n\t0x01, 0xff, 0xa2, 0x88, 0x97, 0x7c, 0x41, 0xa1, 0x08, 0x34, 0x2c, 0x98, 0xc2, 0x70, 0x04, 0xa0,\n\t0x5d, 0x5f, 0x39, 0xef, 0xe0, 0x70, 0xd5, 0x12, 0xf1, 0x35, 0x17, 0xb6, 0x0d, 0xc4, 0xd3, 0x09,\n\t0x85, 0x00, 0x00, 0x5a, 0xc0, 0x14, 0xc0, 0x0a, 0x00, 0x39, 0x00, 0x38, 0x00, 0x88, 0x00, 0x87,\n\t0xc0, 0x0f, 0xc0, 0x05, 0x00, 0x35, 0x00, 0x84, 0xc0, 0x13, 0xc0, 0x09, 0x00, 0x33, 0x00, 0x32,\n\t0x00, 0x9a, 0x00, 0x99, 0x00, 0x45, 0x00, 0x44, 0xc0, 0x0e, 0xc0, 0x04, 0x00, 0x2f, 0x00, 0x96,\n\t0x00, 0x41, 0xc0, 0x11, 0xc0, 0x07, 0xc0, 0x0c, 0xc0, 0x02, 0x00, 0x05, 0x00, 0x04, 0xc0, 0x12,\n\t0xc0, 0x08, 0x00, 0x16, 0x00, 0x13, 0xc0, 0x0d, 0xc0, 0x03, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x12,\n\t0x00, 0x09, 0x00, 0x14, 0x00, 0x11, 0x00, 0x08, 0x00, 0x06, 0x00, 0x03, 0x00, 0xff, 0x02, 0x01,\n\t0x00, 0x00, 0x49, 0x00, 0x0b, 0x00, 0x04, 0x03, 0x00, 0x01, 0x02, 0x00, 0x0a, 0x00, 0x34, 0x00,\n\t0x32, 0x00, 0x0e, 0x00, 0x0d, 0x00, 0x19, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x09, 0x00,\n\t0x0a, 0x00, 0x16, 0x00, 0x17, 0x00, 0x08, 0x00, 0x06, 0x00, 0x07, 0x00, 0x14, 0x00, 0x15, 0x00,\n\t0x04, 0x00, 0x05, 0x00, 0x12, 0x00, 0x13, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x0f, 0x00,\n\t0x10, 0x00, 0x11, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x01, 0x01,\n}\nvar testClientHelloDecoded = &TLS{\n\tBaseLayer: BaseLayer{\n\t\tContents: testClientHello[54:],\n\t\tPayload:  nil,\n\t},\n\tChangeCipherSpec: nil,\n\tHandshake: []TLSHandshakeRecord{\n\t\t{\n\t\t\tTLSRecordHeader{\n\t\t\t\tContentType: 22,\n\t\t\t\tVersion:     0x0301,\n\t\t\t\tLength:      209,\n\t\t\t},\n\t\t},\n\t},\n\tAppData: nil,\n\tAlert:   nil,\n}\n\n// Packet 6 - Server Hello, Certificate, Server Hello Done\nvar testServerHello = []byte{\n\t0x16, 0x03, 0x01, 0x00, 0x3a, 0x02, 0x00, 0x00, 0x36, 0x03, 0x01, 0x55, 0x5c, 0xd6, 0x97, 0xa3,\n\t0x97, 0xe9, 0xf4, 0x0c, 0xf4, 0x56, 0x14, 0x9f, 0xe4, 0x24, 0xf9, 0xeb, 0x49, 0xd4, 0xd1, 0x5f,\n\t0xfc, 0x12, 0xb4, 0xfd, 0x45, 0x4e, 0x3d, 0xeb, 0x6a, 0xad, 0xcf, 0x00, 0x00, 0x2f, 0x01, 0x00,\n\t0x0e, 0xff, 0x01, 0x00, 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x01, 0x01, 0x16,\n\t0x03, 0x01, 0x01, 0x90, 0x0b, 0x00, 0x01, 0x8c, 0x00, 0x01, 0x89, 0x00, 0x01, 0x86, 0x30, 0x82,\n\t0x01, 0x82, 0x30, 0x82, 0x01, 0x2c, 0x02, 0x01, 0x04, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48,\n\t0x86, 0xf7, 0x0d, 0x01, 0x01, 0x04, 0x05, 0x00, 0x30, 0x38, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,\n\t0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x08,\n\t0x13, 0x03, 0x51, 0x4c, 0x44, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x12,\n\t0x53, 0x53, 0x4c, 0x65, 0x61, 0x79, 0x2f, 0x72, 0x73, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20,\n\t0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x39, 0x35, 0x31, 0x30, 0x30, 0x39, 0x32, 0x33, 0x33, 0x32,\n\t0x30, 0x35, 0x5a, 0x17, 0x0d, 0x39, 0x38, 0x30, 0x37, 0x30, 0x35, 0x32, 0x33, 0x33, 0x32, 0x30,\n\t0x35, 0x5a, 0x30, 0x60, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41,\n\t0x55, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x03, 0x51, 0x4c, 0x44, 0x31,\n\t0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x4d, 0x69, 0x6e, 0x63, 0x6f, 0x6d,\n\t0x20, 0x50, 0x74, 0x79, 0x2e, 0x20, 0x4c, 0x74, 0x64, 0x2e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,\n\t0x55, 0x04, 0x0b, 0x13, 0x02, 0x43, 0x53, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03,\n\t0x13, 0x12, 0x53, 0x53, 0x4c, 0x65, 0x61, 0x79, 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x20, 0x73, 0x65,\n\t0x72, 0x76, 0x65, 0x72, 0x30, 0x5c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,\n\t0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x4b, 0x00, 0x30, 0x48, 0x02, 0x41, 0x00, 0xb7, 0x2c, 0x25,\n\t0xdc, 0x49, 0xc5, 0xae, 0x6b, 0x43, 0xc5, 0x2e, 0x41, 0xc1, 0x2e, 0x6d, 0x95, 0x7a, 0x3a, 0xa9,\n\t0x03, 0x51, 0x78, 0x45, 0x0f, 0x2a, 0xd1, 0x58, 0xd1, 0x88, 0xf6, 0x9f, 0x8f, 0x1f, 0xd9, 0xfd,\n\t0xa5, 0x87, 0xde, 0x2a, 0x5d, 0x31, 0x5b, 0xee, 0x24, 0x66, 0xbf, 0xc0, 0x55, 0xdb, 0xfe, 0x70,\n\t0xc5, 0x2c, 0x39, 0x5f, 0x5a, 0x9f, 0xa8, 0x08, 0xfc, 0x21, 0x06, 0xd5, 0x4f, 0x02, 0x03, 0x01,\n\t0x00, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x04, 0x05,\n\t0x00, 0x03, 0x41, 0x00, 0x2b, 0x34, 0x5b, 0x22, 0x85, 0x62, 0x23, 0x07, 0x36, 0xf4, 0x0c, 0x2b,\n\t0x14, 0xd0, 0x1b, 0xcb, 0xd9, 0xbb, 0xd2, 0xc0, 0x9a, 0xcf, 0x12, 0xa1, 0x65, 0x90, 0x3a, 0xb7,\n\t0x17, 0x83, 0x3a, 0x10, 0x6b, 0xad, 0x2f, 0xd6, 0xb1, 0x11, 0xc0, 0x0d, 0x5a, 0x06, 0xdb, 0x11,\n\t0xd0, 0x2f, 0x34, 0x90, 0xf5, 0x76, 0x61, 0x26, 0xa1, 0x69, 0xf2, 0xdb, 0xb3, 0xe7, 0x20, 0xcb,\n\t0x3a, 0x64, 0xe6, 0x41, 0x16, 0x03, 0x01, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00,\n}\n\n// Packet 7 - Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message\nvar testClientKeyExchange = []byte{\n\t0x16, 0x03, 0x01, 0x00, 0x46, 0x10, 0x00, 0x00, 0x42, 0x00, 0x40, 0x9e, 0x73, 0xdf, 0xe0, 0xf2,\n\t0xd0, 0x40, 0x32, 0x44, 0x9a, 0x34, 0x7f, 0x57, 0x86, 0x10, 0xea, 0x3d, 0xc5, 0xe2, 0xf9, 0xa5,\n\t0x69, 0x43, 0xc9, 0x0b, 0x00, 0x7e, 0x91, 0x31, 0x57, 0xfc, 0xc5, 0x65, 0x18, 0x0d, 0x44, 0xfd,\n\t0x51, 0xf8, 0xda, 0x8a, 0x7a, 0xab, 0x16, 0x03, 0xeb, 0xac, 0x23, 0x6e, 0x8d, 0xdd, 0xbb, 0xf4,\n\t0x75, 0xe7, 0xb7, 0xa3, 0xce, 0xdb, 0x67, 0x6b, 0x7d, 0x30, 0x2a, 0x14, 0x03, 0x01, 0x00, 0x01,\n\t0x01, 0x16, 0x03, 0x01, 0x00, 0x30, 0x15, 0xcb, 0x7a, 0x5b, 0x2d, 0xc0, 0x27, 0x09, 0x28, 0x62,\n\t0x95, 0x44, 0x9f, 0xa1, 0x1e, 0x4e, 0x6a, 0xfb, 0x49, 0x9d, 0x6a, 0x24, 0x44, 0xc6, 0x8e, 0x26,\n\t0xbc, 0xc1, 0x28, 0x8c, 0x27, 0xcc, 0xa2, 0xba, 0xec, 0x38, 0x63, 0x6e, 0x64, 0xd8, 0x52, 0x94,\n\t0x17, 0x96, 0x61, 0xfd, 0x9c, 0x54,\n}\nvar testClientKeyExchangeDecoded = &TLS{\n\tBaseLayer: BaseLayer{\n\t\tContents: testClientKeyExchange[81:],\n\t\tPayload:  nil,\n\t},\n\tChangeCipherSpec: []TLSChangeCipherSpecRecord{\n\t\t{\n\t\t\tTLSRecordHeader{\n\t\t\t\tContentType: 20,\n\t\t\t\tVersion:     0x0301,\n\t\t\t\tLength:      1,\n\t\t\t},\n\t\t\t1,\n\t\t},\n\t},\n\tHandshake: []TLSHandshakeRecord{\n\t\t{\n\t\t\tTLSRecordHeader{\n\t\t\t\tContentType: 22,\n\t\t\t\tVersion:     0x0301,\n\t\t\t\tLength:      70,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tTLSRecordHeader{\n\t\t\t\tContentType: 22,\n\t\t\t\tVersion:     0x0301,\n\t\t\t\tLength:      48,\n\t\t\t},\n\t\t},\n\t},\n\tAppData: nil,\n\tAlert:   nil,\n}\n\n// Packet 9 - New Session Ticket, Change Cipher Spec, Encryption Handshake Message\nvar testNewSessionTicket = []byte{\n\t0x16, 0x03, 0x01, 0x00, 0xaa, 0x04, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x1c, 0x20, 0x00, 0xa0, 0xd4,\n\t0xee, 0xb0, 0x9b, 0xb5, 0xa2, 0xd3, 0x00, 0x57, 0x84, 0x59, 0xec, 0x0d, 0xbf, 0x05, 0x0c, 0xd5,\n\t0xb9, 0xe2, 0xf8, 0x32, 0xb5, 0xec, 0xce, 0xe2, 0x9c, 0x25, 0x25, 0xd9, 0x3e, 0x4a, 0x94, 0x5b,\n\t0xca, 0x18, 0x2b, 0x0f, 0x5f, 0xf6, 0x73, 0x38, 0x62, 0xcd, 0xcc, 0xf1, 0x32, 0x39, 0xe4, 0x5e,\n\t0x30, 0xf3, 0x94, 0xf5, 0xc5, 0x94, 0x3a, 0x8c, 0x8e, 0xe5, 0x12, 0x4a, 0x1e, 0xd8, 0x31, 0xb5,\n\t0x17, 0x09, 0xa6, 0x4c, 0x69, 0xca, 0xae, 0xfb, 0x04, 0x17, 0x64, 0x54, 0x9e, 0xc2, 0xfa, 0xf3,\n\t0x6d, 0xe9, 0xa5, 0xed, 0xa6, 0x65, 0xfe, 0x2f, 0xf3, 0xc6, 0xce, 0x78, 0x40, 0xf7, 0x65, 0xe0,\n\t0x13, 0xd3, 0x77, 0xc7, 0xc5, 0x79, 0x16, 0x56, 0x4c, 0x30, 0x94, 0xcf, 0xb0, 0x3c, 0x00, 0x91,\n\t0xbd, 0x86, 0x08, 0x9f, 0x2f, 0x05, 0x67, 0x03, 0x6f, 0xa7, 0x3b, 0xb9, 0x36, 0xf2, 0x80, 0x4f,\n\t0x60, 0x5d, 0x4c, 0xc4, 0x42, 0x5d, 0x02, 0x44, 0xba, 0x31, 0x8f, 0x39, 0x8e, 0x0c, 0x1e, 0xa8,\n\t0x26, 0x4f, 0x3e, 0x01, 0x96, 0xb3, 0x6f, 0xc6, 0x25, 0xe4, 0x30, 0x03, 0xd6, 0x3a, 0x7d, 0x14,\n\t0x03, 0x01, 0x00, 0x01, 0x01, 0x16, 0x03, 0x01, 0x00, 0x30, 0x25, 0xb8, 0x58, 0xc1, 0xa6, 0x3f,\n\t0xf8, 0xbd, 0xe6, 0xae, 0xbd, 0x98, 0xd4, 0x75, 0xa5, 0x45, 0x1b, 0xd8, 0x6a, 0x70, 0x79, 0x86,\n\t0x29, 0x4e, 0x4f, 0x64, 0xba, 0xe7, 0x1f, 0xca, 0x4b, 0x96, 0x9b, 0xf7, 0x0b, 0x50, 0xf5, 0x4f,\n\t0xfd, 0xda, 0xda, 0xcd, 0xcd, 0x4b, 0x12, 0x2e, 0xdf, 0xd5,\n}\n\n// Packet 13 - Two Application Data Records\nvar testDoubleAppData = []byte{\n\t0x17, 0x03, 0x01, 0x00, 0x20, 0x77, 0x3a, 0x94, 0x7d, 0xb4, 0x47, 0x4a, 0x1d, 0xd4, 0x6c, 0x5a,\n\t0x69, 0x74, 0x03, 0x93, 0x32, 0xca, 0x54, 0x5e, 0xa5, 0x81, 0x99, 0x6a, 0x73, 0x66, 0xbf, 0x06,\n\t0xa0, 0xdc, 0x6a, 0x9c, 0xb1, 0x17, 0x03, 0x01, 0x00, 0x20, 0x44, 0x64, 0xc8, 0xc2, 0x5a, 0xfc,\n\t0x4a, 0x82, 0xdd, 0x53, 0x6d, 0x30, 0x82, 0x4d, 0x35, 0x22, 0xf1, 0x5f, 0x3b, 0x96, 0x66, 0x79,\n\t0x61, 0x9f, 0x51, 0x93, 0x1b, 0xbf, 0x53, 0x3b, 0xf8, 0x26,\n}\nvar testDoubleAppDataDecoded = &TLS{\n\tBaseLayer: BaseLayer{\n\t\tContents: testDoubleAppData[37:],\n\t\tPayload:  nil,\n\t},\n\tChangeCipherSpec: nil,\n\tHandshake:        nil,\n\tAppData: []TLSAppDataRecord{\n\t\t{\n\t\t\tTLSRecordHeader{\n\t\t\t\tContentType: 23,\n\t\t\t\tVersion:     0x0301,\n\t\t\t\tLength:      32,\n\t\t\t},\n\t\t\ttestDoubleAppData[5 : 5+32],\n\t\t},\n\t\t{\n\t\t\tTLSRecordHeader{\n\t\t\t\tContentType: 23,\n\t\t\t\tVersion:     0x0301,\n\t\t\t\tLength:      32,\n\t\t\t},\n\t\t\ttestDoubleAppData[42 : 42+32],\n\t\t},\n\t},\n\tAlert: nil,\n}\n\nvar testAlertEncrypted = []byte{\n\t0x15, 0x03, 0x03, 0x00, 0x20, 0x44, 0xb9, 0x9c, 0x2c, 0x6e, 0xab, 0xa3, 0xdf, 0xb1, 0x77, 0x04,\n\t0xa2, 0xa4, 0x3a, 0x9a, 0x08, 0x1d, 0xe6, 0x51, 0xac, 0xa0, 0x5f, 0xab, 0x74, 0xa7, 0x96, 0x24,\n\t0xfe, 0x62, 0xfe, 0xe8, 0x5e,\n}\nvar testAlertEncryptedDecoded = &TLS{\n\tBaseLayer: BaseLayer{\n\t\tContents: testAlertEncrypted,\n\t\tPayload:  nil,\n\t},\n\tChangeCipherSpec: nil,\n\tHandshake:        nil,\n\tAppData:          nil,\n\tAlert: []TLSAlertRecord{\n\t\t{\n\t\t\tTLSRecordHeader{\n\t\t\t\tContentType: 21,\n\t\t\t\tVersion:     0x0303,\n\t\t\t\tLength:      32,\n\t\t\t},\n\t\t\t0xFF,\n\t\t\t0xFF,\n\t\t\ttestAlertEncrypted[5:],\n\t\t},\n\t},\n}\n\n// Malformed TLS records\nvar testMalformed = []byte{\n\t0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,\n\t0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,\n\t0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,\n}\n\nvar testTLSDecodeOptions = gopacket.DecodeOptions{\n\tSkipDecodeRecovery:       true,\n\tDecodeStreamsAsDatagrams: true,\n}\n\nfunc TestParseTLSClientHello(t *testing.T) {\n\tp := gopacket.NewPacket(testClientHello, LinkTypeEthernet, testTLSDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeTCP, LayerTypeTLS}, t)\n\n\tif got, ok := p.Layer(LayerTypeTLS).(*TLS); ok {\n\t\twant := testClientHelloDecoded\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"TLS ClientHello packet processing failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No TLS layer type found in packet\")\n\t}\n}\n\nfunc TestTLSClientHelloDecodeFromBytes(t *testing.T) {\n\tvar got TLS\n\twant := *testClientKeyExchangeDecoded\n\n\tif err := got.DecodeFromBytes(testClientKeyExchange, gopacket.NilDecodeFeedback); err != nil {\n\t\tt.Errorf(\"TLS DecodeFromBytes first decode failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t}\n\n\tif !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(\"TLS DecodeFromBytes first decode doesn't match:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t}\n\n\tif err := got.DecodeFromBytes(testClientKeyExchange, gopacket.NilDecodeFeedback); err != nil {\n\t\tt.Errorf(\"TLS DecodeFromBytes second decode failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t}\n\n\tif !reflect.DeepEqual(got, want) {\n\t\tt.Errorf(\"TLS DecodeFromBytes second decode doesn't match:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t}\n}\n\nfunc TestParseTLSChangeCipherSpec(t *testing.T) {\n\tp := gopacket.NewPacket(testClientKeyExchange, LayerTypeTLS, testTLSDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeTLS}, t)\n\n\tif got, ok := p.Layer(LayerTypeTLS).(*TLS); ok {\n\t\twant := testClientKeyExchangeDecoded\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"TLS ChangeCipherSpec packet processing failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No TLS layer type found in packet\")\n\t}\n}\n\nfunc TestParseTLSAppData(t *testing.T) {\n\tp := gopacket.NewPacket(testDoubleAppData, LayerTypeTLS, testTLSDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeTLS}, t)\n\n\tif got, ok := p.Layer(LayerTypeTLS).(*TLS); ok {\n\t\twant := testDoubleAppDataDecoded\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"TLS TLSAppData packet processing failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No TLS layer type found in packet\")\n\t}\n}\n\nfunc TestSerializeTLSAppData(t *testing.T) {\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\terr := gopacket.SerializeLayers(buf, opts, testDoubleAppDataDecoded)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tp2 := gopacket.NewPacket(buf.Bytes(), LayerTypeTLS, testTLSDecodeOptions)\n\tif p2.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p2.ErrorLayer().Error())\n\t}\n\tcheckLayers(p2, []gopacket.LayerType{LayerTypeTLS}, t)\n\n\tif got, ok := p2.Layer(LayerTypeTLS).(*TLS); ok {\n\t\twant := testDoubleAppDataDecoded\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"Reconstructed TLSAppData packet processing failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No TLS layer type found in reconstructed packet\")\n\t}\n}\n\nfunc TestParseTLSMalformed(t *testing.T) {\n\tp := gopacket.NewPacket(testMalformed, LayerTypeTLS, testTLSDecodeOptions)\n\tif p.ErrorLayer() == nil {\n\t\tt.Error(\"No Decoding Error when parsing a malformed data\")\n\t}\n}\n\nfunc TestParseTLSTooShort(t *testing.T) {\n\tp := gopacket.NewPacket(testMalformed[0:2], LayerTypeTLS, testTLSDecodeOptions)\n\tif p.ErrorLayer() == nil {\n\t\tt.Error(\"No Decoding Error when parsing a malformed data\")\n\t}\n}\n\nfunc TestParseTLSLengthMismatch(t *testing.T) {\n\tvar testLengthMismatch = make([]byte, len(testDoubleAppData))\n\tcopy(testLengthMismatch, testDoubleAppData)\n\ttestLengthMismatch[3] = 0xFF\n\ttestLengthMismatch[4] = 0xFF\n\tp := gopacket.NewPacket(testLengthMismatch, LayerTypeTLS, testTLSDecodeOptions)\n\tif p.ErrorLayer() == nil {\n\t\tt.Error(\"No Decoding Error when parsing a malformed data\")\n\t}\n}\n\nfunc TestParseTLSAlertEncrypted(t *testing.T) {\n\tp := gopacket.NewPacket(testAlertEncrypted, LayerTypeTLS, testTLSDecodeOptions)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeTLS}, t)\n\n\tif got, ok := p.Layer(LayerTypeTLS).(*TLS); ok {\n\t\twant := testAlertEncryptedDecoded\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"TLS TLSAlert packet processing failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No TLS layer type found in packet\")\n\t}\n}\n\nfunc TestSerializeTLSAlertEncrypted(t *testing.T) {\n\tbuf := gopacket.NewSerializeBuffer()\n\topts := gopacket.SerializeOptions{FixLengths: true}\n\terr := gopacket.SerializeLayers(buf, opts, testAlertEncryptedDecoded)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tp2 := gopacket.NewPacket(buf.Bytes(), LayerTypeTLS, testTLSDecodeOptions)\n\tif p2.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p2.ErrorLayer().Error())\n\t}\n\tcheckLayers(p2, []gopacket.LayerType{LayerTypeTLS}, t)\n\n\tif got, ok := p2.Layer(LayerTypeTLS).(*TLS); ok {\n\t\twant := testAlertEncryptedDecoded\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"Reconstructed TLSAlertEncrypted packet processing failed:\\ngot:\\n%#v\\n\\nwant:\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"No TLS layer type found in reconstructed packet\")\n\t}\n}\n"
  },
  {
    "path": "layers/udp.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// UDP is the layer for UDP headers.\ntype UDP struct {\n\tBaseLayer\n\tSrcPort, DstPort UDPPort\n\tLength           uint16\n\tChecksum         uint16\n\tsPort, dPort     []byte\n\ttcpipchecksum\n}\n\n// LayerType returns gopacket.LayerTypeUDP\nfunc (u *UDP) LayerType() gopacket.LayerType { return LayerTypeUDP }\n\nfunc (udp *UDP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 8 {\n\t\tdf.SetTruncated()\n\t\treturn fmt.Errorf(\"Invalid UDP header. Length %d less than 8\", len(data))\n\t}\n\tudp.SrcPort = UDPPort(binary.BigEndian.Uint16(data[0:2]))\n\tudp.sPort = data[0:2]\n\tudp.DstPort = UDPPort(binary.BigEndian.Uint16(data[2:4]))\n\tudp.dPort = data[2:4]\n\tudp.Length = binary.BigEndian.Uint16(data[4:6])\n\tudp.Checksum = binary.BigEndian.Uint16(data[6:8])\n\tudp.BaseLayer = BaseLayer{Contents: data[:8]}\n\tswitch {\n\tcase udp.Length >= 8:\n\t\thlen := int(udp.Length)\n\t\tif hlen > len(data) {\n\t\t\tdf.SetTruncated()\n\t\t\thlen = len(data)\n\t\t}\n\t\tudp.Payload = data[8:hlen]\n\tcase udp.Length == 0: // Jumbogram, use entire rest of data\n\t\tudp.Payload = data[8:]\n\tdefault:\n\t\treturn fmt.Errorf(\"UDP packet too small: %d bytes\", udp.Length)\n\t}\n\treturn nil\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (u *UDP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tvar jumbo bool\n\n\tpayload := b.Bytes()\n\tif _, ok := u.pseudoheader.(*IPv6); ok {\n\t\tif len(payload)+8 > 65535 {\n\t\t\tjumbo = true\n\t\t}\n\t}\n\tbytes, err := b.PrependBytes(8)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbinary.BigEndian.PutUint16(bytes, uint16(u.SrcPort))\n\tbinary.BigEndian.PutUint16(bytes[2:], uint16(u.DstPort))\n\tif opts.FixLengths {\n\t\tif jumbo {\n\t\t\tu.Length = 0\n\t\t} else {\n\t\t\tu.Length = uint16(len(payload)) + 8\n\t\t}\n\t}\n\tbinary.BigEndian.PutUint16(bytes[4:], u.Length)\n\tif opts.ComputeChecksums {\n\t\t// zero out checksum bytes\n\t\tbytes[6] = 0\n\t\tbytes[7] = 0\n\t\tcsum, err := u.computeChecksum(b.Bytes(), IPProtocolUDP)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tu.Checksum = csum\n\t}\n\tbinary.BigEndian.PutUint16(bytes[6:], u.Checksum)\n\treturn nil\n}\n\nfunc (u *UDP) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeUDP\n}\n\n// NextLayerType use the destination port to select the\n// right next decoder. It tries first to decode via the\n// destination port, then the source port.\nfunc (u *UDP) NextLayerType() gopacket.LayerType {\n\tif lt := u.DstPort.LayerType(); lt != gopacket.LayerTypePayload {\n\t\treturn lt\n\t}\n\treturn u.SrcPort.LayerType()\n}\n\nfunc decodeUDP(data []byte, p gopacket.PacketBuilder) error {\n\tudp := &UDP{}\n\terr := udp.DecodeFromBytes(data, p)\n\tp.AddLayer(udp)\n\tp.SetTransportLayer(udp)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn p.NextDecoder(udp.NextLayerType())\n}\n\nfunc (u *UDP) TransportFlow() gopacket.Flow {\n\treturn gopacket.NewFlow(EndpointUDPPort, u.sPort, u.dPort)\n}\n\n// For testing only\nfunc (u *UDP) SetInternalPortsForTesting() {\n\tu.sPort = make([]byte, 2)\n\tu.dPort = make([]byte, 2)\n\tbinary.BigEndian.PutUint16(u.sPort, uint16(u.SrcPort))\n\tbinary.BigEndian.PutUint16(u.dPort, uint16(u.DstPort))\n}\n"
  },
  {
    "path": "layers/udp_test.go",
    "content": "// Copyright 2012, Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n)\n\n// testUDPPacketDNS is the packet:\n//   10:33:07.883637 IP 172.16.255.1.53 > 172.29.20.15.35181: 47320 7/0/0 MX ALT2.ASPMX.L.GOOGLE.com. 20, MX ASPMX2.GOOGLEMAIL.com. 30, MX ASPMX3.GOOGLEMAIL.com. 30, MX ASPMX4.GOOGLEMAIL.com. 30, MX ASPMX5.GOOGLEMAIL.com. 30, MX ASPMX.L.GOOGLE.com. 10, MX ALT1.ASPMX.L.GOOGLE.com. 20 (202)\n//      0x0000:  24be 0527 0b17 001f cab3 75c0 0800 4500  $..'......u...E.\n//      0x0010:  00e6 68cf 0000 3f11 a6f9 ac10 ff01 ac1d  ..h...?.........\n//      0x0020:  140f 0035 896d 00d2 754a b8d8 8180 0001  ...5.m..uJ......\n//      0x0030:  0007 0000 0000 0478 6b63 6403 636f 6d00  .......xkcd.com.\n//      0x0040:  000f 0001 c00c 000f 0001 0000 0258 0018  .............X..\n//      0x0050:  0014 0441 4c54 3205 4153 504d 5801 4c06  ...ALT2.ASPMX.L.\n//      0x0060:  474f 4f47 4c45 c011 c00c 000f 0001 0000  GOOGLE..........\n//      0x0070:  0258 0016 001e 0641 5350 4d58 320a 474f  .X.....ASPMX2.GO\n//      0x0080:  4f47 4c45 4d41 494c c011 c00c 000f 0001  OGLEMAIL........\n//      0x0090:  0000 0258 000b 001e 0641 5350 4d58 33c0  ...X.....ASPMX3.\n//      0x00a0:  53c0 0c00 0f00 0100 0002 5800 0b00 1e06  S.........X.....\n//      0x00b0:  4153 504d 5834 c053 c00c 000f 0001 0000  ASPMX4.S........\n//      0x00c0:  0258 000b 001e 0641 5350 4d58 35c0 53c0  .X.....ASPMX5.S.\n//      0x00d0:  0c00 0f00 0100 0002 5800 0400 0ac0 2dc0  ........X.....-.\n//      0x00e0:  0c00 0f00 0100 0002 5800 0900 1404 414c  ........X.....AL\n//      0x00f0:  5431 c02d                                T1.-\n// Packet generated by doing DNS query for 'xkcd.com'\nvar testUDPPacketDNS = []byte{\n\t0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0xe6, 0x68, 0xcf, 0x00, 0x00, 0x3f, 0x11, 0xa6, 0xf9, 0xac, 0x10, 0xff, 0x01, 0xac, 0x1d,\n\t0x14, 0x0f, 0x00, 0x35, 0x89, 0x6d, 0x00, 0xd2, 0x75, 0x4a, 0xb8, 0xd8, 0x81, 0x80, 0x00, 0x01,\n\t0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x04, 0x78, 0x6b, 0x63, 0x64, 0x03, 0x63, 0x6f, 0x6d, 0x00,\n\t0x00, 0x0f, 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x18,\n\t0x00, 0x14, 0x04, 0x41, 0x4c, 0x54, 0x32, 0x05, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x01, 0x4c, 0x06,\n\t0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0xc0, 0x11, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00,\n\t0x02, 0x58, 0x00, 0x16, 0x00, 0x1e, 0x06, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x32, 0x0a, 0x47, 0x4f,\n\t0x4f, 0x47, 0x4c, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0xc0, 0x11, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01,\n\t0x00, 0x00, 0x02, 0x58, 0x00, 0x0b, 0x00, 0x1e, 0x06, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x33, 0xc0,\n\t0x53, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x0b, 0x00, 0x1e, 0x06,\n\t0x41, 0x53, 0x50, 0x4d, 0x58, 0x34, 0xc0, 0x53, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00,\n\t0x02, 0x58, 0x00, 0x0b, 0x00, 0x1e, 0x06, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x35, 0xc0, 0x53, 0xc0,\n\t0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x04, 0x00, 0x0a, 0xc0, 0x2d, 0xc0,\n\t0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x09, 0x00, 0x14, 0x04, 0x41, 0x4c,\n\t0x54, 0x31, 0xc0, 0x2d,\n}\n\nfunc TestUDPPacketDNS(t *testing.T) {\n\tp := gopacket.NewPacket(testUDPPacketDNS, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t)\n\tif got, ok := p.TransportLayer().(*UDP); ok {\n\t\twant := &UDP{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: []byte{0x0, 0x35, 0x89, 0x6d, 0x0, 0xd2, 0x75, 0x4a},\n\t\t\t\tPayload: []byte{0xb8, 0xd8, 0x81, 0x80, 0x0, 0x1, 0x0,\n\t\t\t\t\t0x7, 0x0, 0x0, 0x0, 0x0, 0x4, 0x78, 0x6b, 0x63, 0x64, 0x3, 0x63, 0x6f,\n\t\t\t\t\t0x6d, 0x0, 0x0, 0xf, 0x0, 0x1, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0,\n\t\t\t\t\t0x2, 0x58, 0x0, 0x18, 0x0, 0x14, 0x4, 0x41, 0x4c, 0x54, 0x32, 0x5, 0x41,\n\t\t\t\t\t0x53, 0x50, 0x4d, 0x58, 0x1, 0x4c, 0x6, 0x47, 0x4f, 0x4f, 0x47, 0x4c,\n\t\t\t\t\t0x45, 0xc0, 0x11, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0,\n\t\t\t\t\t0x16, 0x0, 0x1e, 0x6, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x32, 0xa, 0x47, 0x4f,\n\t\t\t\t\t0x4f, 0x47, 0x4c, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0xc0, 0x11, 0xc0, 0xc,\n\t\t\t\t\t0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0, 0xb, 0x0, 0x1e, 0x6, 0x41,\n\t\t\t\t\t0x53, 0x50, 0x4d, 0x58, 0x33, 0xc0, 0x53, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1,\n\t\t\t\t\t0x0, 0x0, 0x2, 0x58, 0x0, 0xb, 0x0, 0x1e, 0x6, 0x41, 0x53, 0x50, 0x4d,\n\t\t\t\t\t0x58, 0x34, 0xc0, 0x53, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2,\n\t\t\t\t\t0x58, 0x0, 0xb, 0x0, 0x1e, 0x6, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x35, 0xc0,\n\t\t\t\t\t0x53, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0, 0x4, 0x0,\n\t\t\t\t\t0xa, 0xc0, 0x2d, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0,\n\t\t\t\t\t0x9, 0x0, 0x14, 0x4, 0x41, 0x4c, 0x54, 0x31, 0xc0, 0x2d},\n\t\t\t},\n\t\t\tSrcPort:  53,\n\t\t\tDstPort:  35181,\n\t\t\tLength:   210,\n\t\t\tChecksum: 30026,\n\t\t\tsPort:    []byte{0x0, 0x35},\n\t\t\tdPort:    []byte{0x89, 0x6d},\n\t\t}\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"UDP packet mismatch:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t} else {\n\t\tt.Error(\"Transport layer packet not UDP\")\n\t}\n}\n\nfunc loadDNS(dnspacket []byte, t *testing.T) *DNS {\n\tp := gopacket.NewPacket(dnspacket, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4,\n\t\tLayerTypeUDP, LayerTypeDNS}, t)\n\n\tdnsL := p.Layer(LayerTypeDNS)\n\tif dnsL == nil {\n\t\tt.Error(\"No DNS Layer found\")\n\t}\n\n\tdns, ok := dnsL.(*DNS)\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn dns\n}\n\nvar testDNSQueryA = []byte{\n\t0xfe, 0x54, 0x00, 0x3e, 0x00, 0x96, 0x52, 0x54, /* .T.>..RT */\n\t0x00, 0xbd, 0x1c, 0x70, 0x08, 0x00, 0x45, 0x00, /* ...p..E. */\n\t0x00, 0x3c, 0x22, 0xe0, 0x00, 0x00, 0x40, 0x11, /* .<\"...@. */\n\t0xe2, 0x38, 0xc0, 0xa8, 0x7a, 0x46, 0xc0, 0xa8, /* .8..zF.. */\n\t0x7a, 0x01, 0xc3, 0x35, 0x00, 0x35, 0x00, 0x28, /* z..5.5.( */\n\t0x75, 0xd2, 0x52, 0x41, 0x01, 0x00, 0x00, 0x01, /* u.RA.... */\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x77, /* .......w */\n\t0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */\n\t0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x01, /* e.com... */\n\t0x00, 0x01, /* .. */\n}\n\nfunc TestDNSQueryA(t *testing.T) {\n\tdns := loadDNS(testDNSQueryA, t)\n\tif dns == nil {\n\t\tt.Fatal(\"Failed to get a pointer to DNS struct\")\n\t}\n\n\tif uint16(len(dns.Questions)) != dns.QDCount {\n\t\tt.Fatal(\"Invalid query decoding, not the right number of questions\")\n\t}\n\n\tif string(dns.Questions[0].Name) != \"www.google.com\" {\n\t\tt.Errorf(\"Invalid query decoding, expecting 'www.google.com', got '%s'\",\n\t\t\tdns.Questions[0].Name)\n\t}\n\tif dns.Questions[0].Class != DNSClassIN {\n\t\tt.Errorf(\"Invalid query decoding, expecting Class IN, got '%d'\",\n\t\t\tdns.Questions[0].Class)\n\t}\n\n\tif dns.Questions[0].Type != DNSTypeA {\n\t\tt.Errorf(\"Invalid query decoding, expecting Type A, got '%d'\",\n\t\t\tdns.Questions[0].Type)\n\t}\n}\n\nvar testDNSRRA = []byte{\n\t0x52, 0x54, 0x00, 0xbd, 0x1c, 0x70, 0xfe, 0x54, /* RT...p.T */\n\t0x00, 0x3e, 0x00, 0x96, 0x08, 0x00, 0x45, 0x00, /* .>....E. */\n\t0x01, 0x24, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, /* .$..@.@. */\n\t0xc4, 0x30, 0xc0, 0xa8, 0x7a, 0x01, 0xc0, 0xa8, /* .0..z... */\n\t0x7a, 0x46, 0x00, 0x35, 0xc3, 0x35, 0x01, 0x10, /* zF.5.5.. */\n\t0x76, 0xba, 0x52, 0x41, 0x81, 0x80, 0x00, 0x01, /* v.RA.... */\n\t0x00, 0x06, 0x00, 0x04, 0x00, 0x04, 0x03, 0x77, /* .......w */\n\t0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */\n\t0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x01, /* e.com... */\n\t0x00, 0x01, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* ........ */\n\t0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */\n\t0xc3, 0x67, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .g...... */\n\t0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */\n\t0xc3, 0x68, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .h...... */\n\t0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */\n\t0xc3, 0x69, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .i...... */\n\t0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */\n\t0xc3, 0x6a, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .j...... */\n\t0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */\n\t0xc3, 0x93, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* ........ */\n\t0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */\n\t0xc3, 0x63, 0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, /* .c...... */\n\t0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, /* .......n */\n\t0x73, 0x32, 0xc0, 0x10, 0xc0, 0x10, 0x00, 0x02, /* s2...... */\n\t0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, /* ........ */\n\t0x03, 0x6e, 0x73, 0x33, 0xc0, 0x10, 0xc0, 0x10, /* .ns3.... */\n\t0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */\n\t0x00, 0x06, 0x03, 0x6e, 0x73, 0x31, 0xc0, 0x10, /* ...ns1.. */\n\t0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, /* ........ */\n\t0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, 0x73, 0x34, /* .....ns4 */\n\t0xc0, 0x10, 0xc0, 0xb0, 0x00, 0x01, 0x00, 0x01, /* ........ */\n\t0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */\n\t0x20, 0x0a, 0xc0, 0x8c, 0x00, 0x01, 0x00, 0x01, /*  ....... */\n\t0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */\n\t0x22, 0x0a, 0xc0, 0x9e, 0x00, 0x01, 0x00, 0x01, /* \"....... */\n\t0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */\n\t0x24, 0x0a, 0xc0, 0xc2, 0x00, 0x01, 0x00, 0x01, /* $....... */\n\t0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */\n\t0x26, 0x0a, /* &. */\n}\n\nfunc TestDNSRRA(t *testing.T) {\n\tdns := loadDNS(testDNSRRA, t)\n\tif dns == nil {\n\t\tt.Fatal(\"Failed to get a pointer to DNS struct\")\n\t\treturn\n\t}\n\n\tif uint16(len(dns.Questions)) != dns.QDCount {\n\t\tt.Fatal(\"Invalid query decoding, not the right number of questions\")\n\t} else if uint16(len(dns.Answers)) != dns.ANCount {\n\t\tt.Fatal(\"Invalid query decoding, not the right number of answers\")\n\t} else if uint16(len(dns.Authorities)) != dns.NSCount {\n\t\tt.Fatal(\"Invalid query decoding, not the right number of authorities\")\n\t} else if uint16(len(dns.Additionals)) != dns.ARCount {\n\t\tt.Fatal(\"Invalid query decoding, not the right number of additionals info\")\n\t}\n\n\tif string(dns.Questions[0].Name) != \"www.google.com\" {\n\t\tt.Errorf(\"Invalid query decoding, expecting 'www.google.com', got '%s'\",\n\t\t\tdns.Questions[0].Name)\n\t}\n\tif string(dns.Answers[0].Name) != \"www.google.com\" {\n\t\tt.Errorf(\"Invalid query decoding, expecting 'www.google.com', got '%d'\",\n\t\t\tdns.Questions[0].Class)\n\t}\n\tif dns.Answers[0].Class != DNSClassIN {\n\t\tt.Errorf(\"Invalid query decoding, expecting Class IN, got '%d'\",\n\t\t\tdns.Questions[0].Class)\n\t}\n\tif dns.Answers[0].Type != DNSTypeA {\n\t\tt.Errorf(\"Invalid query decoding, expecting Type A, got '%d'\",\n\t\t\tdns.Questions[0].Type)\n\t}\n\tif !dns.Answers[0].IP.Equal([]byte{74, 125, 195, 103}) {\n\t\tt.Errorf(\"Invalid query decoding, invalid IP address,\"+\n\t\t\t\" expecting '74.125.195.103', got '%s'\",\n\t\t\tdns.Answers[0].IP.String())\n\t}\n\tif len(dns.Answers) != 6 {\n\t\tt.Errorf(\"No correct number of answers, expecting 6, go '%d'\",\n\t\t\tlen(dns.Answers))\n\t}\n\tif len(dns.Authorities) != 4 {\n\t\tt.Errorf(\"No correct number of answers, expecting 4, go '%d'\",\n\t\t\tlen(dns.Answers))\n\t}\n\tif len(dns.Additionals) != 4 {\n\t\tt.Errorf(\"No correct number of answers, expecting 4, go '%d'\",\n\t\t\tlen(dns.Answers))\n\t} else {\n\t\tfor i, want := range []string{\n\t\t\t\"ns1.google.com\",\n\t\t\t\"ns2.google.com\",\n\t\t\t\"ns3.google.com\",\n\t\t\t\"ns4.google.com\",\n\t\t} {\n\t\t\tif got := string(dns.Additionals[i].Name); got != want {\n\t\t\t\tt.Errorf(\"got %q want %q\", got, want)\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar testDNSAAAA = []byte{\n\t0x52, 0x54, 0x00, 0xbd, 0x1c, 0x70, 0xfe, 0x54, /* RT...p.T */\n\t0x00, 0x3e, 0x00, 0x96, 0x08, 0x00, 0x45, 0x00, /* .>....E. */\n\t0x00, 0xe0, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, /* ....@.@. */\n\t0xc4, 0x74, 0xc0, 0xa8, 0x7a, 0x01, 0xc0, 0xa8, /* .t..z... */\n\t0x7a, 0x46, 0x00, 0x35, 0xdb, 0x13, 0x00, 0xcc, /* zF.5.... */\n\t0x76, 0x76, 0xf3, 0x03, 0x81, 0x80, 0x00, 0x01, /* vv...... */\n\t0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x03, 0x77, /* .......w */\n\t0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */\n\t0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x1c, /* e.com... */\n\t0x00, 0x01, 0xc0, 0x0c, 0x00, 0x1c, 0x00, 0x01, /* ........ */\n\t0x00, 0x00, 0x01, 0x2c, 0x00, 0x10, 0x2a, 0x00, /* ...,..*. */\n\t0x14, 0x50, 0x40, 0x0c, 0x0c, 0x01, 0x00, 0x00, /* .P@..... */\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0xc0, 0x10, /* .....i.. */\n\t0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */\n\t0x00, 0x06, 0x03, 0x6e, 0x73, 0x34, 0xc0, 0x10, /* ...ns4.. */\n\t0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, /* ........ */\n\t0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, 0x73, 0x32, /* .....ns2 */\n\t0xc0, 0x10, 0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, /* ........ */\n\t0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, /* .......n */\n\t0x73, 0x31, 0xc0, 0x10, 0xc0, 0x10, 0x00, 0x02, /* s1...... */\n\t0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, /* ........ */\n\t0x03, 0x6e, 0x73, 0x33, 0xc0, 0x10, 0xc0, 0x6c, /* .ns3...l */\n\t0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */\n\t0x00, 0x04, 0xd8, 0xef, 0x20, 0x0a, 0xc0, 0x5a, /* .... ..Z */\n\t0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */\n\t0x00, 0x04, 0xd8, 0xef, 0x22, 0x0a, 0xc0, 0x7e, /* ....\"..~ */\n\t0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */\n\t0x00, 0x04, 0xd8, 0xef, 0x24, 0x0a, 0xc0, 0x48, /* ....$..H */\n\t0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */\n\t0x00, 0x04, 0xd8, 0xef, 0x26, 0x0a, /* ....&. */\n}\n\nfunc TestDNSAAAA(t *testing.T) {\n\tdns := loadDNS(testDNSAAAA, t)\n\tif dns == nil {\n\t\tt.Error(\"Failed to get a pointer to DNS struct\")\n\t\treturn\n\t}\n\n\tif len(dns.Questions) != 1 {\n\t\tt.Error(\"Invalid number of question\")\n\t\treturn\n\t}\n\tif dns.Questions[0].Type != DNSTypeAAAA {\n\t\tt.Errorf(\"Invalid question, Type is not AAAA, found %d\",\n\t\t\tdns.Questions[0].Type)\n\t}\n\n\tif len(dns.Answers) != 1 {\n\t\tt.Error(\"Invalid number of answers\")\n\t}\n\tif !dns.Answers[0].IP.Equal([]byte{0x2a, 0x00, 0x14, 0x50, 0x40,\n\t\t0x0c, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69}) {\n\t\tt.Error(\"Invalid IP address, found \",\n\t\t\tdns.Answers[0].IP.String())\n\t}\n}\n\nvar testDNSMXSOA = []byte{\n\t0x52, 0x54, 0x00, 0xbd, 0x1c, 0x70, 0xfe, 0x54, /* RT...p.T */\n\t0x00, 0x3e, 0x00, 0x96, 0x08, 0x00, 0x45, 0x00, /* .>....E. */\n\t0x00, 0x6e, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, /* .n..@.@. */\n\t0xc4, 0xe6, 0xc0, 0xa8, 0x7a, 0x01, 0xc0, 0xa8, /* ....z... */\n\t0x7a, 0x46, 0x00, 0x35, 0x9c, 0x60, 0x00, 0x5a, /* zF.5.`.Z */\n\t0x76, 0x04, 0xfc, 0x7a, 0x81, 0x80, 0x00, 0x01, /* v..z.... */\n\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x77, /* .......w */\n\t0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */\n\t0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x0f, /* e.com... */\n\t0x00, 0x01, 0xc0, 0x10, 0x00, 0x06, 0x00, 0x01, /* ........ */\n\t0x00, 0x00, 0x00, 0x3c, 0x00, 0x26, 0x03, 0x6e, /* ...<.&.n */\n\t0x73, 0x31, 0xc0, 0x10, 0x09, 0x64, 0x6e, 0x73, /* s1...dns */\n\t0x2d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0xc0, 0x10, /* -admin.. */\n\t0x00, 0x17, 0x9f, 0x64, 0x00, 0x00, 0x1c, 0x20, /* ...d...  */\n\t0x00, 0x00, 0x07, 0x08, 0x00, 0x12, 0x75, 0x00, /* ......u. */\n\t0x00, 0x00, 0x01, 0x2c, /* ..., */\n}\n\nfunc TestDNSMXSOA(t *testing.T) {\n\tdns := loadDNS(testDNSMXSOA, t)\n\tif dns == nil {\n\t\tt.Error(\"Failed to get a pointer to DNS struct\")\n\t\treturn\n\t}\n\n\tif len(dns.Authorities) != 1 {\n\t\tt.Error(\"Invalid number of authoritative answers, found \",\n\t\t\tlen(dns.Authorities))\n\t\treturn\n\t}\n}\n\nfunc BenchmarkDecodeDNS(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testDNSQueryA, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\nfunc BenchmarkDecodeDNSLayer(b *testing.B) {\n\tvar dns DNS\n\tfor i := 0; i < b.N; i++ {\n\t\tdns.DecodeFromBytes(testDNSAAAA[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback)\n\t}\n}\nfunc TestDNSDoesNotMalloc(t *testing.T) {\n\tvar dns DNS\n\tif n := testing.AllocsPerRun(1000, func() {\n\t\tif err := dns.DecodeFromBytes(testDNSAAAA[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t}); n > 0 {\n\t\tt.Error(n, \"mallocs decoding DNS\")\n\t}\n}\n"
  },
  {
    "path": "layers/udplite.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"github.com/google/gopacket\"\n)\n\n// UDPLite is the layer for UDP-Lite headers (rfc 3828).\ntype UDPLite struct {\n\tBaseLayer\n\tSrcPort, DstPort UDPLitePort\n\tChecksumCoverage uint16\n\tChecksum         uint16\n\tsPort, dPort     []byte\n}\n\n// LayerType returns gopacket.LayerTypeUDPLite\nfunc (u *UDPLite) LayerType() gopacket.LayerType { return LayerTypeUDPLite }\n\nfunc decodeUDPLite(data []byte, p gopacket.PacketBuilder) error {\n\tudp := &UDPLite{\n\t\tSrcPort:          UDPLitePort(binary.BigEndian.Uint16(data[0:2])),\n\t\tsPort:            data[0:2],\n\t\tDstPort:          UDPLitePort(binary.BigEndian.Uint16(data[2:4])),\n\t\tdPort:            data[2:4],\n\t\tChecksumCoverage: binary.BigEndian.Uint16(data[4:6]),\n\t\tChecksum:         binary.BigEndian.Uint16(data[6:8]),\n\t\tBaseLayer:        BaseLayer{data[:8], data[8:]},\n\t}\n\tp.AddLayer(udp)\n\tp.SetTransportLayer(udp)\n\treturn p.NextDecoder(gopacket.LayerTypePayload)\n}\n\nfunc (u *UDPLite) TransportFlow() gopacket.Flow {\n\treturn gopacket.NewFlow(EndpointUDPLitePort, u.sPort, u.dPort)\n}\n"
  },
  {
    "path": "layers/usb.go",
    "content": "// Copyright 2014 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"github.com/google/gopacket\"\n)\n\ntype USBEventType uint8\n\nconst (\n\tUSBEventTypeSubmit   USBEventType = 'S'\n\tUSBEventTypeComplete USBEventType = 'C'\n\tUSBEventTypeError    USBEventType = 'E'\n)\n\nfunc (a USBEventType) String() string {\n\tswitch a {\n\tcase USBEventTypeSubmit:\n\t\treturn \"SUBMIT\"\n\tcase USBEventTypeComplete:\n\t\treturn \"COMPLETE\"\n\tcase USBEventTypeError:\n\t\treturn \"ERROR\"\n\tdefault:\n\t\treturn \"Unknown event type\"\n\t}\n}\n\ntype USBRequestBlockSetupRequest uint8\n\nconst (\n\tUSBRequestBlockSetupRequestGetStatus        USBRequestBlockSetupRequest = 0x00\n\tUSBRequestBlockSetupRequestClearFeature     USBRequestBlockSetupRequest = 0x01\n\tUSBRequestBlockSetupRequestSetFeature       USBRequestBlockSetupRequest = 0x03\n\tUSBRequestBlockSetupRequestSetAddress       USBRequestBlockSetupRequest = 0x05\n\tUSBRequestBlockSetupRequestGetDescriptor    USBRequestBlockSetupRequest = 0x06\n\tUSBRequestBlockSetupRequestSetDescriptor    USBRequestBlockSetupRequest = 0x07\n\tUSBRequestBlockSetupRequestGetConfiguration USBRequestBlockSetupRequest = 0x08\n\tUSBRequestBlockSetupRequestSetConfiguration USBRequestBlockSetupRequest = 0x09\n\tUSBRequestBlockSetupRequestSetIdle          USBRequestBlockSetupRequest = 0x0a\n)\n\nfunc (a USBRequestBlockSetupRequest) String() string {\n\tswitch a {\n\tcase USBRequestBlockSetupRequestGetStatus:\n\t\treturn \"GET_STATUS\"\n\tcase USBRequestBlockSetupRequestClearFeature:\n\t\treturn \"CLEAR_FEATURE\"\n\tcase USBRequestBlockSetupRequestSetFeature:\n\t\treturn \"SET_FEATURE\"\n\tcase USBRequestBlockSetupRequestSetAddress:\n\t\treturn \"SET_ADDRESS\"\n\tcase USBRequestBlockSetupRequestGetDescriptor:\n\t\treturn \"GET_DESCRIPTOR\"\n\tcase USBRequestBlockSetupRequestSetDescriptor:\n\t\treturn \"SET_DESCRIPTOR\"\n\tcase USBRequestBlockSetupRequestGetConfiguration:\n\t\treturn \"GET_CONFIGURATION\"\n\tcase USBRequestBlockSetupRequestSetConfiguration:\n\t\treturn \"SET_CONFIGURATION\"\n\tcase USBRequestBlockSetupRequestSetIdle:\n\t\treturn \"SET_IDLE\"\n\tdefault:\n\t\treturn \"UNKNOWN\"\n\t}\n}\n\ntype USBTransportType uint8\n\nconst (\n\tUSBTransportTypeTransferIn  USBTransportType = 0x80 // Indicates send or receive\n\tUSBTransportTypeIsochronous USBTransportType = 0x00 // Isochronous transfers occur continuously and periodically. They typically contain time sensitive information, such as an audio or video stream.\n\tUSBTransportTypeInterrupt   USBTransportType = 0x01 // Interrupt transfers are typically non-periodic, small device \"initiated\" communication requiring bounded latency, such as pointing devices or keyboards.\n\tUSBTransportTypeControl     USBTransportType = 0x02 // Control transfers are typically used for command and status operations.\n\tUSBTransportTypeBulk        USBTransportType = 0x03 // Bulk transfers can be used for large bursty data, using all remaining available bandwidth, no guarantees on bandwidth or latency, such as file transfers.\n)\n\ntype USBDirectionType uint8\n\nconst (\n\tUSBDirectionTypeUnknown USBDirectionType = iota\n\tUSBDirectionTypeIn\n\tUSBDirectionTypeOut\n)\n\nfunc (a USBDirectionType) String() string {\n\tswitch a {\n\tcase USBDirectionTypeIn:\n\t\treturn \"In\"\n\tcase USBDirectionTypeOut:\n\t\treturn \"Out\"\n\tdefault:\n\t\treturn \"Unknown direction type\"\n\t}\n}\n\n// The reference at http://www.beyondlogic.org/usbnutshell/usb1.shtml contains more information about the protocol.\ntype USB struct {\n\tBaseLayer\n\tID             uint64\n\tEventType      USBEventType\n\tTransferType   USBTransportType\n\tDirection      USBDirectionType\n\tEndpointNumber uint8\n\tDeviceAddress  uint8\n\tBusID          uint16\n\tTimestampSec   int64\n\tTimestampUsec  int32\n\tSetup          bool\n\tData           bool\n\tStatus         int32\n\tUrbLength      uint32\n\tUrbDataLength  uint32\n\n\tUrbInterval            uint32\n\tUrbStartFrame          uint32\n\tUrbCopyOfTransferFlags uint32\n\tIsoNumDesc             uint32\n}\n\nfunc (u *USB) LayerType() gopacket.LayerType { return LayerTypeUSB }\n\nfunc (m *USB) NextLayerType() gopacket.LayerType {\n\tif m.Setup {\n\t\treturn LayerTypeUSBRequestBlockSetup\n\t} else if m.Data {\n\t}\n\n\treturn m.TransferType.LayerType()\n}\n\nfunc decodeUSB(data []byte, p gopacket.PacketBuilder) error {\n\td := &USB{}\n\n\treturn decodingLayerDecoder(d, data, p)\n}\n\nfunc (m *USB) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 40 {\n\t\tdf.SetTruncated()\n\t\treturn errors.New(\"USB < 40 bytes\")\n\t}\n\tm.ID = binary.LittleEndian.Uint64(data[0:8])\n\tm.EventType = USBEventType(data[8])\n\tm.TransferType = USBTransportType(data[9])\n\n\tm.EndpointNumber = data[10] & 0x7f\n\tif data[10]&uint8(USBTransportTypeTransferIn) > 0 {\n\t\tm.Direction = USBDirectionTypeIn\n\t} else {\n\t\tm.Direction = USBDirectionTypeOut\n\t}\n\n\tm.DeviceAddress = data[11]\n\tm.BusID = binary.LittleEndian.Uint16(data[12:14])\n\n\tif uint(data[14]) == 0 {\n\t\tm.Setup = true\n\t}\n\n\tif uint(data[15]) == 0 {\n\t\tm.Data = true\n\t}\n\n\tm.TimestampSec = int64(binary.LittleEndian.Uint64(data[16:24]))\n\tm.TimestampUsec = int32(binary.LittleEndian.Uint32(data[24:28]))\n\tm.Status = int32(binary.LittleEndian.Uint32(data[28:32]))\n\tm.UrbLength = binary.LittleEndian.Uint32(data[32:36])\n\tm.UrbDataLength = binary.LittleEndian.Uint32(data[36:40])\n\n\tm.Contents = data[:40]\n\tm.Payload = data[40:]\n\n\tif m.Setup {\n\t\tm.Payload = data[40:]\n\t} else if m.Data {\n\t\tm.Payload = data[uint32(len(data))-m.UrbDataLength:]\n\t}\n\n\t// if 64 bit, dissect_linux_usb_pseudo_header_ext\n\tif false {\n\t\tm.UrbInterval = binary.LittleEndian.Uint32(data[40:44])\n\t\tm.UrbStartFrame = binary.LittleEndian.Uint32(data[44:48])\n\t\tm.UrbDataLength = binary.LittleEndian.Uint32(data[48:52])\n\t\tm.IsoNumDesc = binary.LittleEndian.Uint32(data[52:56])\n\t\tm.Contents = data[:56]\n\t\tm.Payload = data[56:]\n\t}\n\n\t// crc5 or crc16\n\t// eop (end of packet)\n\n\treturn nil\n}\n\ntype USBRequestBlockSetup struct {\n\tBaseLayer\n\tRequestType uint8\n\tRequest     USBRequestBlockSetupRequest\n\tValue       uint16\n\tIndex       uint16\n\tLength      uint16\n}\n\nfunc (u *USBRequestBlockSetup) LayerType() gopacket.LayerType { return LayerTypeUSBRequestBlockSetup }\n\nfunc (m *USBRequestBlockSetup) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\nfunc (m *USBRequestBlockSetup) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tm.RequestType = data[0]\n\tm.Request = USBRequestBlockSetupRequest(data[1])\n\tm.Value = binary.LittleEndian.Uint16(data[2:4])\n\tm.Index = binary.LittleEndian.Uint16(data[4:6])\n\tm.Length = binary.LittleEndian.Uint16(data[6:8])\n\tm.Contents = data[:8]\n\tm.Payload = data[8:]\n\treturn nil\n}\n\nfunc decodeUSBRequestBlockSetup(data []byte, p gopacket.PacketBuilder) error {\n\td := &USBRequestBlockSetup{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\ntype USBControl struct {\n\tBaseLayer\n}\n\nfunc (u *USBControl) LayerType() gopacket.LayerType { return LayerTypeUSBControl }\n\nfunc (m *USBControl) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\nfunc (m *USBControl) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tm.Contents = data\n\treturn nil\n}\n\nfunc decodeUSBControl(data []byte, p gopacket.PacketBuilder) error {\n\td := &USBControl{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\ntype USBInterrupt struct {\n\tBaseLayer\n}\n\nfunc (u *USBInterrupt) LayerType() gopacket.LayerType { return LayerTypeUSBInterrupt }\n\nfunc (m *USBInterrupt) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\nfunc (m *USBInterrupt) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tm.Contents = data\n\treturn nil\n}\n\nfunc decodeUSBInterrupt(data []byte, p gopacket.PacketBuilder) error {\n\td := &USBInterrupt{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n\ntype USBBulk struct {\n\tBaseLayer\n}\n\nfunc (u *USBBulk) LayerType() gopacket.LayerType { return LayerTypeUSBBulk }\n\nfunc (m *USBBulk) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypePayload\n}\n\nfunc (m *USBBulk) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tm.Contents = data\n\treturn nil\n}\n\nfunc decodeUSBBulk(data []byte, p gopacket.PacketBuilder) error {\n\td := &USBBulk{}\n\treturn decodingLayerDecoder(d, data, p)\n}\n"
  },
  {
    "path": "layers/usb_test.go",
    "content": "// Copyright 2014, Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t_ \"fmt\"\n\t\"github.com/google/gopacket\"\n\t\"reflect\"\n\t\"testing\"\n)\n\n// Generator python layers/test_creator.py --link_type USB --name USB dongle.pcap\n// http://wiki.wireshark.org/SampleCaptures#Sample_Captures\n\n// testPacketUSB0 is the packet:\n//   02:41:04.689546 INTERRUPT COMPLETE to 2:1:1\n//   \t0x0000:  0038 4a3b 0088 ffff 4301 8101 0200 2d00  .8J;....C.....-.\n//   \t0x0010:  c0d3 5b50 0000 0000 8a85 0a00 0000 0000  ..[P............\n//   \t0x0020:  0100 0000 0100 0000 0000 0000 0000 0000  ................\n//   \t0x0030:  8000 0000 0000 0000 0002 0000 0000 0000  ................\n//   \t0x0040:  04                                       .\nvar testPacketUSB0 = []byte{\n\t0x00, 0x38, 0x4a, 0x3b, 0x00, 0x88, 0xff, 0xff, 0x43, 0x01, 0x81, 0x01, 0x02, 0x00, 0x2d, 0x00,\n\t0xc0, 0xd3, 0x5b, 0x50, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x85, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x04,\n}\n\nfunc TestPacketUSB0(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketUSB0, LinkTypeLinuxUSB, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeUSB, LayerTypeUSBInterrupt}, t)\n\n\tif got, ok := p.Layer(LayerTypeUSB).(*USB); ok {\n\t\twant := &USB{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: []uint8{0x0, 0x38, 0x4a, 0x3b, 0x0, 0x88, 0xff, 0xff, 0x43, 0x1, 0x81, 0x1, 0x2, 0x0, 0x2d, 0x0, 0xc0, 0xd3, 0x5b, 0x50, 0x0, 0x0, 0x0, 0x0, 0x8a, 0x85, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0},\n\t\t\t\tPayload:  []uint8{0x4},\n\t\t\t},\n\t\t\tID:             0xffff88003b4a3800,\n\t\t\tEventType:      USBEventTypeComplete,\n\t\t\tTransferType:   USBTransportTypeInterrupt,\n\t\t\tDirection:      0x1,\n\t\t\tEndpointNumber: 0x1,\n\t\t\tDeviceAddress:  0x1,\n\t\t\tBusID:          0x2,\n\t\t\tTimestampSec:   1348195264,\n\t\t\tTimestampUsec:  689546,\n\t\t\tSetup:          false,\n\t\t\tData:           true,\n\t\t\tStatus:         0,\n\t\t\tUrbLength:      0x1,\n\t\t\tUrbDataLength:  0x1,\n\t\t}\n\n\t\tif !reflect.DeepEqual(got, want) {\n\t\t\tt.Errorf(\"USB packet processing failed:\\ngot  :\\n%#v\\n\\nwant :\\n%#v\\n\\n\", got, want)\n\t\t}\n\t}\n\n}\nfunc BenchmarkDecodePacketUSB0(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketUSB0, LinkTypeLinuxUSB, gopacket.NoCopy)\n\t}\n}\n"
  },
  {
    "path": "layers/vrrp.go",
    "content": "// Copyright 2016 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"net\"\n\n\t\"github.com/google/gopacket\"\n)\n\n/*\n\tThis layer provides decoding for Virtual Router Redundancy Protocol (VRRP) v2.\n\thttps://tools.ietf.org/html/rfc3768#section-5\n    0                   1                   2                   3\n    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |Version| Type  | Virtual Rtr ID|   Priority    | Count IP Addrs|\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |   Auth Type   |   Adver Int   |          Checksum             |\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |                         IP Address (1)                        |\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |                            .                                  |\n   |                            .                                  |\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |                         IP Address (n)                        |\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |                     Authentication Data (1)                   |\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |                     Authentication Data (2)                   |\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n*/\n\ntype VRRPv2Type uint8\ntype VRRPv2AuthType uint8\n\nconst (\n\tVRRPv2Advertisement VRRPv2Type = 0x01 // router advertisement\n)\n\n// String conversions for VRRP message types\nfunc (v VRRPv2Type) String() string {\n\tswitch v {\n\tcase VRRPv2Advertisement:\n\t\treturn \"VRRPv2 Advertisement\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nconst (\n\tVRRPv2AuthNoAuth    VRRPv2AuthType = 0x00 // No Authentication\n\tVRRPv2AuthReserved1 VRRPv2AuthType = 0x01 // Reserved field 1\n\tVRRPv2AuthReserved2 VRRPv2AuthType = 0x02 // Reserved field 2\n)\n\nfunc (v VRRPv2AuthType) String() string {\n\tswitch v {\n\tcase VRRPv2AuthNoAuth:\n\t\treturn \"No Authentication\"\n\tcase VRRPv2AuthReserved1:\n\t\treturn \"Reserved\"\n\tcase VRRPv2AuthReserved2:\n\t\treturn \"Reserved\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\n// VRRPv2 represents an VRRP v2 message.\ntype VRRPv2 struct {\n\tBaseLayer\n\tVersion      uint8          // The version field specifies the VRRP protocol version of this packet (v2)\n\tType         VRRPv2Type     // The type field specifies the type of this VRRP packet.  The only type defined in v2 is ADVERTISEMENT\n\tVirtualRtrID uint8          // identifies the virtual router this packet is reporting status for\n\tPriority     uint8          // specifies the sending VRRP router's priority for the virtual router (100 = default)\n\tCountIPAddr  uint8          // The number of IP addresses contained in this VRRP advertisement.\n\tAuthType     VRRPv2AuthType // identifies the authentication method being utilized\n\tAdverInt     uint8          // The Advertisement interval indicates the time interval (in seconds) between ADVERTISEMENTS.  The default is 1 second\n\tChecksum     uint16         // used to detect data corruption in the VRRP message.\n\tIPAddress    []net.IP       // one or more IP addresses associated with the virtual router. Specified in the CountIPAddr field.\n}\n\n// LayerType returns LayerTypeVRRP for VRRP v2 message.\nfunc (v *VRRPv2) LayerType() gopacket.LayerType { return LayerTypeVRRP }\n\nfunc (v *VRRPv2) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\n\tv.BaseLayer = BaseLayer{Contents: data[:len(data)]}\n\tv.Version = data[0] >> 4 // high nibble == VRRP version. We're expecting v2\n\n\tv.Type = VRRPv2Type(data[0] & 0x0F) // low nibble == VRRP type. Expecting 1 (advertisement)\n\tif v.Type != 1 {\n\t\t// rfc3768: A packet with unknown type MUST be discarded.\n\t\treturn errors.New(\"Unrecognized VRRPv2 type field.\")\n\t}\n\n\tv.VirtualRtrID = data[1]\n\tv.Priority = data[2]\n\n\tv.CountIPAddr = data[3]\n\tif v.CountIPAddr < 1 {\n\t\treturn errors.New(\"VRRPv2 number of IP addresses is not valid.\")\n\t}\n\n\tv.AuthType = VRRPv2AuthType(data[4])\n\tv.AdverInt = uint8(data[5])\n\tv.Checksum = binary.BigEndian.Uint16(data[6:8])\n\n\t// populate the IPAddress field. The number of addresses is specified in the v.CountIPAddr field\n\t// offset references the starting byte containing the list of ip addresses\n\toffset := 8\n\tfor i := uint8(0); i < v.CountIPAddr; i++ {\n\t\tv.IPAddress = append(v.IPAddress, data[offset:offset+4])\n\t\toffset += 4\n\t}\n\n\t//\tany trailing packets here may be authentication data and *should* be ignored in v2 as per RFC\n\t//\n\t//\t\t\t5.3.10.  Authentication Data\n\t//\n\t//\t\t\tThe authentication string is currently only used to maintain\n\t//\t\t\tbackwards compatibility with RFC 2338.  It SHOULD be set to zero on\n\t//\t   \t\ttransmission and ignored on reception.\n\treturn nil\n}\n\n// CanDecode specifies the layer type in which we are attempting to unwrap.\nfunc (v *VRRPv2) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeVRRP\n}\n\n// NextLayerType specifies the next layer that should be decoded. VRRP does not contain any further payload, so we set to 0\nfunc (v *VRRPv2) NextLayerType() gopacket.LayerType {\n\treturn gopacket.LayerTypeZero\n}\n\n// The VRRP packet does not include payload data. Setting byte slice to nil\nfunc (v *VRRPv2) Payload() []byte {\n\treturn nil\n}\n\n// decodeVRRP will parse VRRP v2\nfunc decodeVRRP(data []byte, p gopacket.PacketBuilder) error {\n\tif len(data) < 8 {\n\t\treturn errors.New(\"Not a valid VRRP packet. Packet length is too small.\")\n\t}\n\tv := &VRRPv2{}\n\treturn decodingLayerDecoder(v, data, p)\n}\n"
  },
  {
    "path": "layers/vrrp_test.go",
    "content": "// Copyright 2016 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n\t\"testing\"\n)\n\n// vrrpPacketPriority100 is the packet:\n//   06:12:21.813317 IP 192.168.0.30 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 100, authtype none, intvl 1s, length 20\n//   \t0x0000:  0100 5e00 0012 0000 5e00 0101 0800 45c0  ..^.....^.....E.\n//   \t0x0010:  0028 0000 0000 ff70 19cd c0a8 001e e000  .(.....p........\n//   \t0x0020:  0012 2101 6401 0001 ba52 c0a8 0001 0000  ..!.d....R......\n//   \t0x0030:  0000 0000 0000 0000 0000 0000            ............\nvar vrrpPacketPriority100 = []byte{\n\t0x01, 0x00, 0x5e, 0x00, 0x00, 0x12, 0x00, 0x00, 0x5e, 0x00, 0x01, 0x01, 0x08, 0x00, 0x45, 0xc0,\n\t0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0xff, 0x70, 0x19, 0xcd, 0xc0, 0xa8, 0x00, 0x1e, 0xe0, 0x00,\n\t0x00, 0x12, 0x21, 0x01, 0x64, 0x01, 0x00, 0x01, 0xba, 0x52, 0xc0, 0xa8, 0x00, 0x01, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n}\n\nfunc TestVRRPPacketPacket0(t *testing.T) {\n\tp := gopacket.NewPacket(vrrpPacketPriority100, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeVRRP}, t)\n\n\t// Version=2 Type=VRRPv2 Advertisement VirtualRtrID=1 Priority=100\n\tvrrp := p.Layer(LayerTypeVRRP).(*VRRPv2)\n\tif vrrp.Version != 2 {\n\t\tt.Fatalf(\"Unable to decode VRRPv2 version. Received %d, expected %d\", vrrp.Version, 2)\n\t}\n\n\tif vrrp.Type != 1 {\n\t\tt.Fatalf(\"Unable to decode VRRPv2 type. Received %d, expected %d\", vrrp.Type, 1)\n\t}\n\n\tif vrrp.Priority != 100 {\n\t\tt.Fatalf(\"Unable to decode VRRPv2 priority. Received %d, expected %d\", vrrp.Priority, 100)\n\t}\n\n\tif vrrp.Checksum != 47698 {\n\t\tt.Fatalf(\"Unable to decode VRRPv2 checksum. Received %d, expected %d\", vrrp.Checksum, 47698)\n\t}\n}\nfunc BenchmarkDecodeVRRPPacket0(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(vrrpPacketPriority100, LayerTypeEthernet, gopacket.NoCopy)\n\t}\n}\n"
  },
  {
    "path": "layers/vxlan.go",
    "content": "// Copyright 2016 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n)\n\n//  VXLAN is specifed in RFC 7348 https://tools.ietf.org/html/rfc7348\n//  G, D, A, Group Policy ID from https://tools.ietf.org/html/draft-smith-vxlan-group-policy-00\n//  0                   1                   2                   3\n//  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n//  0             8               16              24              32\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |G|R|R|R|I|R|R|R|R|D|R|R|A|R|R|R|       Group Policy ID         |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |     24 bit VXLAN Network Identifier           |   Reserved    |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n// VXLAN is a VXLAN packet header\ntype VXLAN struct {\n\tBaseLayer\n\tValidIDFlag      bool   // 'I' bit per RFC 7348\n\tVNI              uint32 // 'VXLAN Network Identifier' 24 bits per RFC 7348\n\tGBPExtension     bool   // 'G' bit per Group Policy https://tools.ietf.org/html/draft-smith-vxlan-group-policy-00\n\tGBPDontLearn     bool   // 'D' bit per Group Policy\n\tGBPApplied       bool   // 'A' bit per Group Policy\n\tGBPGroupPolicyID uint16 // 'Group Policy ID' 16 bits per Group Policy\n}\n\n// LayerType returns LayerTypeVXLAN\nfunc (vx *VXLAN) LayerType() gopacket.LayerType { return LayerTypeVXLAN }\n\n// CanDecode returns the layer type this DecodingLayer can decode\nfunc (vx *VXLAN) CanDecode() gopacket.LayerClass {\n\treturn LayerTypeVXLAN\n}\n\n// NextLayerType retuns the next layer we should see after vxlan\nfunc (vx *VXLAN) NextLayerType() gopacket.LayerType {\n\treturn LayerTypeEthernet\n}\n\n// DecodeFromBytes takes a byte buffer and decodes\nfunc (vx *VXLAN) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {\n\tif len(data) < 8 {\n\t\treturn errors.New(\"vxlan packet too small\")\n\t}\n\t// VNI is a 24bit number, Uint32 requires 32 bits\n\tvar buf [4]byte\n\tcopy(buf[1:], data[4:7])\n\n\t// RFC 7348 https://tools.ietf.org/html/rfc7348\n\tvx.ValidIDFlag = data[0]&0x08 > 0        // 'I' bit per RFC7348\n\tvx.VNI = binary.BigEndian.Uint32(buf[:]) // VXLAN Network Identifier per RFC7348\n\n\t// Group Based Policy https://tools.ietf.org/html/draft-smith-vxlan-group-policy-00\n\tvx.GBPExtension = data[0]&0x80 > 0                       // 'G' bit per the group policy draft\n\tvx.GBPDontLearn = data[1]&0x40 > 0                       // 'D' bit - the egress VTEP MUST NOT learn the source address of the encapsulated frame.\n\tvx.GBPApplied = data[1]&0x80 > 0                         // 'A' bit - indicates that the group policy has already been applied to this packet.\n\tvx.GBPGroupPolicyID = binary.BigEndian.Uint16(data[2:4]) // Policy ID as per the group policy draft\n\n\t// Layer information\n\tconst vxlanLength = 8\n\tvx.Contents = data[:vxlanLength]\n\tvx.Payload = data[vxlanLength:]\n\n\treturn nil\n\n}\n\nfunc decodeVXLAN(data []byte, p gopacket.PacketBuilder) error {\n\tvx := &VXLAN{}\n\terr := vx.DecodeFromBytes(data, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tp.AddLayer(vx)\n\treturn p.NextDecoder(LinkTypeEthernet)\n}\n\n// SerializeTo writes the serialized form of this layer into the\n// SerializationBuffer, implementing gopacket.SerializableLayer.\n// See the docs for gopacket.SerializableLayer for more info.\nfunc (vx *VXLAN) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {\n\tbytes, err := b.PrependBytes(8)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// PrependBytes does not guarantee that bytes are zeroed.  Setting flags via OR requires that they start off at zero\n\tbytes[0] = 0\n\tbytes[1] = 0\n\n\tif vx.ValidIDFlag {\n\t\tbytes[0] |= 0x08\n\t}\n\tif vx.GBPExtension {\n\t\tbytes[0] |= 0x80\n\t}\n\tif vx.GBPDontLearn {\n\t\tbytes[1] |= 0x40\n\t}\n\tif vx.GBPApplied {\n\t\tbytes[1] |= 0x80\n\t}\n\n\tbinary.BigEndian.PutUint16(bytes[2:4], vx.GBPGroupPolicyID)\n\tif vx.VNI >= 1<<24 {\n\t\treturn fmt.Errorf(\"Virtual Network Identifier = %x exceeds max for 24-bit uint\", vx.VNI)\n\t}\n\tbinary.BigEndian.PutUint32(bytes[4:8], vx.VNI<<8)\n\treturn nil\n}\n"
  },
  {
    "path": "layers/vxlan_test.go",
    "content": "// Copyright 2016 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage layers\n\nimport (\n\t\"github.com/google/gopacket\"\n\t\"reflect\"\n\t\"testing\"\n)\n\n// VXLAN is specifed in RFC 7348\n//  0                   1                   2                   3\n//  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n//  0             8               16              24              32\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |G|R|R|R|I|R|R|R|R|D|R|R|A|R|R|R|       Group Policy ID         |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |     24 bit VXLAN Network Identifier           |   Reserved    |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n// Ethernet[IP[UDP[VXLAN[Ethernet[IP[ICMP]]]]]]\n\n// testPacketVXLAN\n// 0000   00 16 3e 08 71 cf 36 dc 85 1e b3 40 08 00 45 00  ..>.q.6....@..E.\n// 0010   00 86 d2 c0 40 00 40 11 51 52 c0 a8 cb 01 c0 a8  ....@.@.QR......\n// 0020   ca 01 b0 5d 12 b5 00 72 00 00 08 00 00 00 00 00  ...]...r........\n// 0030   00 00 00 30 88 01 00 02 00 16 3e 37 f6 04 08 00  ...0......>7....\n// 0040   45 00 00 54 00 00 40 00 40 01 23 4f c0 a8 cb 03  E..T..@.@.#O....\n// 0050   c0 a8 cb 05 08 00 f6 f2 05 0c 00 01 fc e2 97 51  ...............Q\n// 0060   00 00 00 00 a6 f8 02 00 00 00 00 00 10 11 12 13  ................\n// 0070   14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23  ............ !\"#\n// 0080   24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33  $%&'()*+,-./0123\n// 0090   34 35 36 37                                      4567               ./01234567\nvar testPacketVXLAN = []byte{\n\t0x00, 0x16, 0x3e, 0x08, 0x71, 0xcf, 0x36, 0xdc, 0x85, 0x1e, 0xb3, 0x40, 0x08, 0x00, 0x45, 0x00,\n\t0x00, 0x86, 0xd2, 0xc0, 0x40, 0x00, 0x40, 0x11, 0x51, 0x52, 0xc0, 0xa8, 0xcb, 0x01, 0xc0, 0xa8,\n\t0xca, 0x01, 0xb0, 0x5d, 0x12, 0xb5, 0x00, 0x72, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t0xff, 0x00, 0x00, 0x30, 0x88, 0x01, 0x00, 0x02, 0x00, 0x16, 0x3e, 0x37, 0xf6, 0x04, 0x08, 0x00,\n\t0x45, 0x00, 0x00, 0x54, 0x00, 0x00, 0x40, 0x00, 0x40, 0x01, 0x23, 0x4f, 0xc0, 0xa8, 0xcb, 0x03,\n\t0xc0, 0xa8, 0xcb, 0x05, 0x08, 0x00, 0xf6, 0xf2, 0x05, 0x0c, 0x00, 0x01, 0xfc, 0xe2, 0x97, 0x51,\n\t0x00, 0x00, 0x00, 0x00, 0xa6, 0xf8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13,\n\t0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,\n\t0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33,\n\t0x34, 0x35, 0x36, 0x37,\n}\n\nfunc TestPacketVXLAN(t *testing.T) {\n\tp := gopacket.NewPacket(testPacketVXLAN, LinkTypeEthernet, gopacket.Default)\n\tif p.ErrorLayer() != nil {\n\t\tt.Error(\"Failed to decode packet:\", p.ErrorLayer().Error())\n\t}\n\tcheckLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeVXLAN, LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)\n\tif got, ok := p.Layer(LayerTypeVXLAN).(*VXLAN); ok {\n\t\twant := &VXLAN{\n\t\t\tBaseLayer: BaseLayer{\n\t\t\t\tContents: []byte{0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00},\n\t\t\t\tPayload: []byte{0x00, 0x30, 0x88, 0x01, 0x00, 0x02, 0x00, 0x16, 0x3e, 0x37, 0xf6, 0x04, 0x08, 0x00,\n\t\t\t\t\t0x45, 0x00, 0x00, 0x54, 0x00, 0x00, 0x40, 0x00, 0x40, 0x01, 0x23, 0x4f, 0xc0, 0xa8, 0xcb, 0x03,\n\t\t\t\t\t0xc0, 0xa8, 0xcb, 0x05, 0x08, 0x00, 0xf6, 0xf2, 0x05, 0x0c, 0x00, 0x01, 0xfc, 0xe2, 0x97, 0x51,\n\t\t\t\t\t0x00, 0x00, 0x00, 0x00, 0xa6, 0xf8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13,\n\t\t\t\t\t0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,\n\t\t\t\t\t0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33,\n\t\t\t\t\t0x34, 0x35, 0x36, 0x37},\n\t\t\t},\n\t\t\tValidIDFlag:      true,\n\t\t\tVNI:              255,\n\t\t\tGBPExtension:     false,\n\t\t\tGBPApplied:       false,\n\t\t\tGBPDontLearn:     false,\n\t\t\tGBPGroupPolicyID: 0,\n\t\t}\n\t\tif !reflect.DeepEqual(want, got) {\n\t\t\tt.Errorf(\"VXLAN layer mismatch, \\nwant %#v\\ngot %#v\\n\", want, got)\n\t\t}\n\t}\n}\n\nfunc BenchmarkDecodePacketVXLAN(b *testing.B) {\n\tfor i := 0; i < b.N; i++ {\n\t\tgopacket.NewPacket(testPacketVXLAN, LinkTypeEthernet, gopacket.NoCopy)\n\t}\n}\n\nfunc TestIsomorphicPacketVXLAN(t *testing.T) {\n\tvx := &VXLAN{\n\t\tValidIDFlag:      true,\n\t\tVNI:              255,\n\t\tGBPExtension:     true,\n\t\tGBPApplied:       true,\n\t\tGBPDontLearn:     true,\n\t\tGBPGroupPolicyID: 777,\n\t}\n\n\tb := gopacket.NewSerializeBuffer()\n\tvx.SerializeTo(b, gopacket.SerializeOptions{})\n\n\tp := gopacket.NewPacket(b.Bytes(), gopacket.DecodeFunc(decodeVXLAN), gopacket.Default)\n\tvxTranslated := p.Layer(LayerTypeVXLAN).(*VXLAN)\n\tvxTranslated.BaseLayer = BaseLayer{}\n\n\tif !reflect.DeepEqual(vx, vxTranslated) {\n\t\tt.Errorf(\"VXLAN isomorph mismatch, \\nwant %#v\\ngot %#v\\n\", vx, vxTranslated)\n\t}\n}\n"
  },
  {
    "path": "layers_decoder.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n\npackage gopacket\n\n// Created by gen.go, don't edit manually\n// Generated at 2019-06-18 11:37:31.308731293 +0600 +06 m=+0.000842599\n\n// LayersDecoder returns DecodingLayerFunc for specified\n// DecodingLayerContainer, LayerType value to start decoding with and\n// some DecodeFeedback.\nfunc LayersDecoder(dl DecodingLayerContainer, first LayerType, df DecodeFeedback) DecodingLayerFunc {\n\tfirstDec, ok := dl.Decoder(first)\n\tif !ok {\n\t\treturn func([]byte, *[]LayerType) (LayerType, error) {\n\t\t\treturn first, nil\n\t\t}\n\t}\n\tif dlc, ok := dl.(DecodingLayerSparse); ok {\n\t\treturn func(data []byte, decoded *[]LayerType) (LayerType, error) {\n\t\t\t*decoded = (*decoded)[:0] // Truncated decoded layers.\n\t\t\ttyp := first\n\t\t\tdecoder := firstDec\n\t\t\tfor {\n\t\t\t\tif err := decoder.DecodeFromBytes(data, df); err != nil {\n\t\t\t\t\treturn LayerTypeZero, err\n\t\t\t\t}\n\t\t\t\t*decoded = append(*decoded, typ)\n\t\t\t\ttyp = decoder.NextLayerType()\n\t\t\t\tif data = decoder.LayerPayload(); len(data) == 0 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif decoder, ok = dlc.Decoder(typ); !ok {\n\t\t\t\t\treturn typ, nil\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn LayerTypeZero, nil\n\t\t}\n\t}\n\tif dlc, ok := dl.(DecodingLayerArray); ok {\n\t\treturn func(data []byte, decoded *[]LayerType) (LayerType, error) {\n\t\t\t*decoded = (*decoded)[:0] // Truncated decoded layers.\n\t\t\ttyp := first\n\t\t\tdecoder := firstDec\n\t\t\tfor {\n\t\t\t\tif err := decoder.DecodeFromBytes(data, df); err != nil {\n\t\t\t\t\treturn LayerTypeZero, err\n\t\t\t\t}\n\t\t\t\t*decoded = append(*decoded, typ)\n\t\t\t\ttyp = decoder.NextLayerType()\n\t\t\t\tif data = decoder.LayerPayload(); len(data) == 0 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif decoder, ok = dlc.Decoder(typ); !ok {\n\t\t\t\t\treturn typ, nil\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn LayerTypeZero, nil\n\t\t}\n\t}\n\tif dlc, ok := dl.(DecodingLayerMap); ok {\n\t\treturn func(data []byte, decoded *[]LayerType) (LayerType, error) {\n\t\t\t*decoded = (*decoded)[:0] // Truncated decoded layers.\n\t\t\ttyp := first\n\t\t\tdecoder := firstDec\n\t\t\tfor {\n\t\t\t\tif err := decoder.DecodeFromBytes(data, df); err != nil {\n\t\t\t\t\treturn LayerTypeZero, err\n\t\t\t\t}\n\t\t\t\t*decoded = append(*decoded, typ)\n\t\t\t\ttyp = decoder.NextLayerType()\n\t\t\t\tif data = decoder.LayerPayload(); len(data) == 0 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif decoder, ok = dlc.Decoder(typ); !ok {\n\t\t\t\t\treturn typ, nil\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn LayerTypeZero, nil\n\t\t}\n\t}\n\tdlc := dl\n\treturn func(data []byte, decoded *[]LayerType) (LayerType, error) {\n\t\t*decoded = (*decoded)[:0] // Truncated decoded layers.\n\t\ttyp := first\n\t\tdecoder := firstDec\n\t\tfor {\n\t\t\tif err := decoder.DecodeFromBytes(data, df); err != nil {\n\t\t\t\treturn LayerTypeZero, err\n\t\t\t}\n\t\t\t*decoded = append(*decoded, typ)\n\t\t\ttyp = decoder.NextLayerType()\n\t\t\tif data = decoder.LayerPayload(); len(data) == 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif decoder, ok = dlc.Decoder(typ); !ok {\n\t\t\t\treturn typ, nil\n\t\t\t}\n\t\t}\n\t\treturn LayerTypeZero, nil\n\t}\n}\n"
  },
  {
    "path": "layertype.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage gopacket\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n)\n\n// LayerType is a unique identifier for each type of layer.  This enumeration\n// does not match with any externally available numbering scheme... it's solely\n// usable/useful within this library as a means for requesting layer types\n// (see Packet.Layer) and determining which types of layers have been decoded.\n//\n// New LayerTypes may be created by calling gopacket.RegisterLayerType.\ntype LayerType int64\n\n// LayerTypeMetadata contains metadata associated with each LayerType.\ntype LayerTypeMetadata struct {\n\t// Name is the string returned by each layer type's String method.\n\tName string\n\t// Decoder is the decoder to use when the layer type is passed in as a\n\t// Decoder.\n\tDecoder Decoder\n}\n\ntype layerTypeMetadata struct {\n\tinUse bool\n\tLayerTypeMetadata\n}\n\n// DecodersByLayerName maps layer names to decoders for those layers.\n// This allows users to specify decoders by name to a program and have that\n// program pick the correct decoder accordingly.\nvar DecodersByLayerName = map[string]Decoder{}\n\nconst maxLayerType = 2000\n\nvar ltMeta [maxLayerType]layerTypeMetadata\nvar ltMetaMap = map[LayerType]layerTypeMetadata{}\n\n// RegisterLayerType creates a new layer type and registers it globally.\n// The number passed in must be unique, or a runtime panic will occur.  Numbers\n// 0-999 are reserved for the gopacket library.  Numbers 1000-1999 should be\n// used for common application-specific types, and are very fast.  Any other\n// number (negative or >= 2000) may be used for uncommon application-specific\n// types, and are somewhat slower (they require a map lookup over an array\n// index).\nfunc RegisterLayerType(num int, meta LayerTypeMetadata) LayerType {\n\tif 0 <= num && num < maxLayerType {\n\t\tif ltMeta[num].inUse {\n\t\t\tpanic(\"Layer type already exists\")\n\t\t}\n\t} else {\n\t\tif ltMetaMap[LayerType(num)].inUse {\n\t\t\tpanic(\"Layer type already exists\")\n\t\t}\n\t}\n\treturn OverrideLayerType(num, meta)\n}\n\n// OverrideLayerType acts like RegisterLayerType, except that if the layer type\n// has already been registered, it overrides the metadata with the passed-in\n// metadata intead of panicing.\nfunc OverrideLayerType(num int, meta LayerTypeMetadata) LayerType {\n\tif 0 <= num && num < maxLayerType {\n\t\tltMeta[num] = layerTypeMetadata{\n\t\t\tinUse:             true,\n\t\t\tLayerTypeMetadata: meta,\n\t\t}\n\t} else {\n\t\tltMetaMap[LayerType(num)] = layerTypeMetadata{\n\t\t\tinUse:             true,\n\t\t\tLayerTypeMetadata: meta,\n\t\t}\n\t}\n\tDecodersByLayerName[meta.Name] = meta.Decoder\n\treturn LayerType(num)\n}\n\n// Decode decodes the given data using the decoder registered with the layer\n// type.\nfunc (t LayerType) Decode(data []byte, c PacketBuilder) error {\n\tvar d Decoder\n\tif 0 <= int(t) && int(t) < maxLayerType {\n\t\td = ltMeta[int(t)].Decoder\n\t} else {\n\t\td = ltMetaMap[t].Decoder\n\t}\n\tif d != nil {\n\t\treturn d.Decode(data, c)\n\t}\n\treturn fmt.Errorf(\"Layer type %v has no associated decoder\", t)\n}\n\n// String returns the string associated with this layer type.\nfunc (t LayerType) String() (s string) {\n\tif 0 <= int(t) && int(t) < maxLayerType {\n\t\ts = ltMeta[int(t)].Name\n\t} else {\n\t\ts = ltMetaMap[t].Name\n\t}\n\tif s == \"\" {\n\t\ts = strconv.Itoa(int(t))\n\t}\n\treturn\n}\n"
  },
  {
    "path": "macs/benchmark_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage macs\n\nimport (\n\t\"testing\"\n)\n\nfunc BenchmarkCheckEthernetPrefix(b *testing.B) {\n\tkey := [3]byte{5, 5, 5}\n\tfor i := 0; i < b.N; i++ {\n\t\t_ = ValidMACPrefixMap[key]\n\t}\n}\n"
  },
  {
    "path": "macs/doc.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// Package macs provides an in-memory mapping of all valid Ethernet MAC address\n// prefixes to their associated organization.\n//\n// The ValidMACPrefixMap map maps 3-byte prefixes to organization strings.  It\n// can be updated using 'go run gen.go' in this directory.\npackage macs\n"
  },
  {
    "path": "macs/gen.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build ignore\n\n// This binary pulls the list of known MAC\n// prefixes from IEEE and writes them out to a go file which is compiled\n// into gopacket.  It should be run as follows:\n//\n//  go run gen.go | gofmt > valid_mac_prefixes.go\npackage main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"regexp\"\n\t\"sort\"\n\t\"time\"\n)\n\nconst header = `// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage macs\n\n// Created by gen.go, don't edit manually\n// Generated at %s\n// Fetched from %q\n\n// ValidMACPrefixMap maps a valid MAC address prefix to the name of the\n// organization that owns the rights to use it.  We map it to a hidden\n// variable so it won't show up in godoc, since it's a very large map.\nvar ValidMACPrefixMap = validMACPrefixMap\nvar validMACPrefixMap = map[[3]byte]string{\n`\n\nvar url = flag.String(\"url\", \"http://standards-oui.ieee.org/oui/oui.txt\", \"URL to fetch MACs from\")\n\ntype mac struct {\n\tprefix  [3]byte\n\tcompany string\n}\n\ntype macs []mac\n\nfunc (m macs) Len() int           { return len(m) }\nfunc (m macs) Less(i, j int) bool { return bytes.Compare(m[i].prefix[:], m[j].prefix[:]) < 0 }\nfunc (m macs) Swap(i, j int)      { m[i], m[j] = m[j], m[i] }\n\nfunc main() {\n\tflag.Parse()\n\tfmt.Fprintf(os.Stderr, \"Fetching MACs from %q\\n\", *url)\n\tresp, err := http.Get(*url)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer resp.Body.Close()\n\tbuffered := bufio.NewReader(resp.Body)\n\tfinder := regexp.MustCompile(`^\\s*([0-9A-F]{6})\\s+\\(base 16\\)\\s+(.*\\S)`)\n\tgot := macs{}\n\tfor {\n\t\tline, err := buffered.ReadString('\\n')\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t} else if err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tif matches := finder.FindStringSubmatch(line); matches != nil {\n\t\t\tvar prefix [3]byte\n\t\t\thex.Decode(prefix[:], []byte(matches[1]))\n\t\t\tcompany := matches[2]\n\t\t\tif company == \"\" {\n\t\t\t\tcompany = \"PRIVATE\"\n\t\t\t}\n\t\t\tfmt.Fprint(os.Stderr, \"*\")\n\t\t\tgot = append(got, mac{prefix: prefix, company: company})\n\t\t}\n\t}\n\tfmt.Fprintln(os.Stderr, \"\\nSorting macs\")\n\tsort.Sort(got)\n\tfmt.Fprintln(os.Stderr, \"Starting write to standard output\")\n\tfmt.Printf(header, time.Now(), *url)\n\tfor _, m := range got {\n\t\tfmt.Printf(\"\\t[3]byte{%d, %d, %d}: %q,\\n\", m.prefix[0], m.prefix[1], m.prefix[2], m.company)\n\t}\n\tfmt.Println(\"}\")\n}\n"
  },
  {
    "path": "macs/valid_mac_prefixes.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage macs\n\n// Created by gen.go, don't edit manually\n// Generated at 2020-07-21 18:20:42.682231316 -0600 MDT m=+2.075718455\n// Fetched from \"http://standards-oui.ieee.org/oui/oui.csv\"\n\n// ValidMACPrefixMap maps a valid MAC address prefix to the name of the\n// organization that owns the rights to use it.  We map it to a hidden\n// variable so it won't show up in godoc, since it's a very large map.\nvar ValidMACPrefixMap = validMACPrefixMap\nvar validMACPrefixMap = map[[3]byte]string{\n\t[3]byte{0, 0, 0}:       \"XEROX CORPORATION\",\n\t[3]byte{0, 0, 1}:       \"XEROX CORPORATION\",\n\t[3]byte{0, 0, 2}:       \"XEROX CORPORATION\",\n\t[3]byte{0, 0, 3}:       \"XEROX CORPORATION\",\n\t[3]byte{0, 0, 4}:       \"XEROX CORPORATION\",\n\t[3]byte{0, 0, 5}:       \"XEROX CORPORATION\",\n\t[3]byte{0, 0, 6}:       \"XEROX CORPORATION\",\n\t[3]byte{0, 0, 7}:       \"XEROX CORPORATION\",\n\t[3]byte{0, 0, 8}:       \"XEROX CORPORATION\",\n\t[3]byte{0, 0, 9}:       \"XEROX CORPORATION\",\n\t[3]byte{0, 0, 10}:      \"OMRON TATEISI ELECTRONICS CO.\",\n\t[3]byte{0, 0, 11}:      \"MATRIX CORPORATION\",\n\t[3]byte{0, 0, 12}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 0, 13}:      \"FIBRONICS LTD.\",\n\t[3]byte{0, 0, 14}:      \"FUJITSU LIMITED\",\n\t[3]byte{0, 0, 15}:      \"NEXT, INC.\",\n\t[3]byte{0, 0, 16}:      \"SYTEK INC.\",\n\t[3]byte{0, 0, 17}:      \"NORMEREL SYSTEMES\",\n\t[3]byte{0, 0, 18}:      \"INFORMATION TECHNOLOGY LIMITED\",\n\t[3]byte{0, 0, 19}:      \"CAMEX\",\n\t[3]byte{0, 0, 20}:      \"NETRONIX\",\n\t[3]byte{0, 0, 21}:      \"DATAPOINT CORPORATION\",\n\t[3]byte{0, 0, 22}:      \"DU PONT PIXEL SYSTEMS     .\",\n\t[3]byte{0, 0, 23}:      \"Oracle\",\n\t[3]byte{0, 0, 24}:      \"WEBSTER COMPUTER CORPORATION\",\n\t[3]byte{0, 0, 25}:      \"APPLIED DYNAMICS INTERNATIONAL\",\n\t[3]byte{0, 0, 26}:      \"ADVANCED MICRO DEVICES\",\n\t[3]byte{0, 0, 27}:      \"Novell, Inc.\",\n\t[3]byte{0, 0, 28}:      \"BELL TECHNOLOGIES\",\n\t[3]byte{0, 0, 29}:      \"Cabletron Systems, Inc.\",\n\t[3]byte{0, 0, 30}:      \"TELSIST INDUSTRIA ELECTRONICA\",\n\t[3]byte{0, 0, 31}:      \"Telco Systems, Inc. \",\n\t[3]byte{0, 0, 32}:      \"DATAINDUSTRIER DIAB AB\",\n\t[3]byte{0, 0, 33}:      \"SUREMAN COMP. & COMMUN. CORP.\",\n\t[3]byte{0, 0, 34}:      \"VISUAL TECHNOLOGY INC.\",\n\t[3]byte{0, 0, 35}:      \"ABB INDUSTRIAL SYSTEMS AB\",\n\t[3]byte{0, 0, 36}:      \"CONNECT AS\",\n\t[3]byte{0, 0, 37}:      \"RAMTEK CORP.\",\n\t[3]byte{0, 0, 38}:      \"SHA-KEN CO., LTD.\",\n\t[3]byte{0, 0, 39}:      \"JAPAN RADIO COMPANY\",\n\t[3]byte{0, 0, 40}:      \"PRODIGY SYSTEMS CORPORATION\",\n\t[3]byte{0, 0, 41}:      \"IMC NETWORKS CORP.\",\n\t[3]byte{0, 0, 42}:      \"TRW - SEDD/INP\",\n\t[3]byte{0, 0, 43}:      \"CRISP AUTOMATION, INC\",\n\t[3]byte{0, 0, 44}:      \"AUTOTOTE LIMITED\",\n\t[3]byte{0, 0, 45}:      \"CHROMATICS INC\",\n\t[3]byte{0, 0, 46}:      \"SOCIETE EVIRA\",\n\t[3]byte{0, 0, 47}:      \"TIMEPLEX INC.\",\n\t[3]byte{0, 0, 48}:      \"VG LABORATORY SYSTEMS LTD\",\n\t[3]byte{0, 0, 49}:      \"QPSX COMMUNICATIONS, LTD.\",\n\t[3]byte{0, 0, 50}:      \"Marconi plc\",\n\t[3]byte{0, 0, 51}:      \"EGAN MACHINERY COMPANY\",\n\t[3]byte{0, 0, 52}:      \"NETWORK RESOURCES CORPORATION\",\n\t[3]byte{0, 0, 53}:      \"SPECTRAGRAPHICS CORPORATION\",\n\t[3]byte{0, 0, 54}:      \"ATARI CORPORATION\",\n\t[3]byte{0, 0, 55}:      \"OXFORD METRICS LIMITED\",\n\t[3]byte{0, 0, 56}:      \"CSS LABS\",\n\t[3]byte{0, 0, 57}:      \"TOSHIBA CORPORATION\",\n\t[3]byte{0, 0, 58}:      \"CHYRON CORPORATION\",\n\t[3]byte{0, 0, 59}:      \"i Controls, Inc.\",\n\t[3]byte{0, 0, 60}:      \"AUSPEX SYSTEMS INC.\",\n\t[3]byte{0, 0, 61}:      \"UNISYS\",\n\t[3]byte{0, 0, 62}:      \"SIMPACT\",\n\t[3]byte{0, 0, 63}:      \"SYNTREX, INC.\",\n\t[3]byte{0, 0, 64}:      \"APPLICON, INC.\",\n\t[3]byte{0, 0, 65}:      \"ICE CORPORATION\",\n\t[3]byte{0, 0, 66}:      \"METIER MANAGEMENT SYSTEMS LTD.\",\n\t[3]byte{0, 0, 67}:      \"MICRO TECHNOLOGY\",\n\t[3]byte{0, 0, 68}:      \"CASTELLE CORPORATION\",\n\t[3]byte{0, 0, 69}:      \"FORD AEROSPACE & COMM. CORP.\",\n\t[3]byte{0, 0, 70}:      \"OLIVETTI NORTH AMERICA\",\n\t[3]byte{0, 0, 71}:      \"NICOLET INSTRUMENTS CORP.\",\n\t[3]byte{0, 0, 72}:      \"Seiko Epson Corporation\",\n\t[3]byte{0, 0, 73}:      \"APRICOT COMPUTERS, LTD\",\n\t[3]byte{0, 0, 74}:      \"ADC CODENOLL TECHNOLOGY CORP.\",\n\t[3]byte{0, 0, 75}:      \"ICL DATA OY\",\n\t[3]byte{0, 0, 76}:      \"NEC Corporation\",\n\t[3]byte{0, 0, 77}:      \"DCI CORPORATION\",\n\t[3]byte{0, 0, 78}:      \"AMPEX CORPORATION\",\n\t[3]byte{0, 0, 79}:      \"LOGICRAFT, INC.\",\n\t[3]byte{0, 0, 80}:      \"RADISYS CORPORATION\",\n\t[3]byte{0, 0, 81}:      \"HOB ELECTRONIC GMBH & CO. KG\",\n\t[3]byte{0, 0, 82}:      \"Intrusion.com, Inc.\",\n\t[3]byte{0, 0, 83}:      \"COMPUCORP\",\n\t[3]byte{0, 0, 84}:      \"Schneider Electric\",\n\t[3]byte{0, 0, 85}:      \"COMMISSARIAT A L`ENERGIE ATOM.\",\n\t[3]byte{0, 0, 86}:      \"DR. B. STRUCK\",\n\t[3]byte{0, 0, 87}:      \"SCITEX CORPORATION LTD.\",\n\t[3]byte{0, 0, 88}:      \"RACORE COMPUTER PRODUCTS INC.\",\n\t[3]byte{0, 0, 89}:      \"Hellige GMBH\",\n\t[3]byte{0, 0, 90}:      \"SysKonnect GmbH\",\n\t[3]byte{0, 0, 91}:      \"ELTEC ELEKTRONIK AG\",\n\t[3]byte{0, 0, 92}:      \"TELEMATICS INTERNATIONAL INC.\",\n\t[3]byte{0, 0, 93}:      \"CS TELECOM\",\n\t[3]byte{0, 0, 94}:      \"ICANN, IANA Department\",\n\t[3]byte{0, 0, 95}:      \"Sumitomo Electric Industries, Ltd\",\n\t[3]byte{0, 0, 96}:      \"KONTRON ELEKTRONIK GMBH\",\n\t[3]byte{0, 0, 97}:      \"GATEWAY COMMUNICATIONS\",\n\t[3]byte{0, 0, 98}:      \"BULL HN INFORMATION SYSTEMS\",\n\t[3]byte{0, 0, 99}:      \"BARCO CONTROL ROOMS GMBH\",\n\t[3]byte{0, 0, 100}:     \"Yokogawa Digital Computer Corporation\",\n\t[3]byte{0, 0, 101}:     \"Network General Corporation\",\n\t[3]byte{0, 0, 102}:     \"TALARIS SYSTEMS, INC.\",\n\t[3]byte{0, 0, 103}:     \"SOFT * RITE, INC.\",\n\t[3]byte{0, 0, 104}:     \"ROSEMOUNT CONTROLS\",\n\t[3]byte{0, 0, 105}:     \"CONCORD COMMUNICATIONS INC\",\n\t[3]byte{0, 0, 106}:     \"COMPUTER CONSOLES INC.\",\n\t[3]byte{0, 0, 107}:     \"Silicon Graphics\",\n\t[3]byte{0, 0, 108}:     \"Private\",\n\t[3]byte{0, 0, 109}:     \"CRAY COMMUNICATIONS, LTD.\",\n\t[3]byte{0, 0, 110}:     \"Artisoft Inc.\",\n\t[3]byte{0, 0, 111}:     \"Madge Ltd.\",\n\t[3]byte{0, 0, 112}:     \"HCL LIMITED\",\n\t[3]byte{0, 0, 113}:     \"ADRA SYSTEMS INC.\",\n\t[3]byte{0, 0, 114}:     \"MINIWARE TECHNOLOGY\",\n\t[3]byte{0, 0, 115}:     \"SIECOR CORPORATION\",\n\t[3]byte{0, 0, 116}:     \"RICOH COMPANY LTD.\",\n\t[3]byte{0, 0, 117}:     \"Nortel Networks\",\n\t[3]byte{0, 0, 118}:     \"ABEKAS VIDEO SYSTEM\",\n\t[3]byte{0, 0, 119}:     \"INTERPHASE CORPORATION\",\n\t[3]byte{0, 0, 120}:     \"LABTAM LIMITED\",\n\t[3]byte{0, 0, 121}:     \"NETWORTH INCORPORATED\",\n\t[3]byte{0, 0, 122}:     \"DANA COMPUTER INC.\",\n\t[3]byte{0, 0, 123}:     \"RESEARCH MACHINES\",\n\t[3]byte{0, 0, 124}:     \"AMPERE INCORPORATED\",\n\t[3]byte{0, 0, 125}:     \"Oracle Corporation\",\n\t[3]byte{0, 0, 126}:     \"CLUSTRIX CORPORATION\",\n\t[3]byte{0, 0, 127}:     \"LINOTYPE-HELL AG\",\n\t[3]byte{0, 0, 128}:     \"CRAY COMMUNICATIONS A/S\",\n\t[3]byte{0, 0, 129}:     \"Bay Networks\",\n\t[3]byte{0, 0, 130}:     \"LECTRA SYSTEMES SA\",\n\t[3]byte{0, 0, 131}:     \"TADPOLE TECHNOLOGY PLC\",\n\t[3]byte{0, 0, 132}:     \"SUPERNET\",\n\t[3]byte{0, 0, 133}:     \"CANON INC.\",\n\t[3]byte{0, 0, 134}:     \"MEGAHERTZ CORPORATION\",\n\t[3]byte{0, 0, 135}:     \"HITACHI, LTD.\",\n\t[3]byte{0, 0, 136}:     \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 0, 137}:     \"CAYMAN SYSTEMS INC.\",\n\t[3]byte{0, 0, 138}:     \"DATAHOUSE INFORMATION SYSTEMS\",\n\t[3]byte{0, 0, 139}:     \"INFOTRON\",\n\t[3]byte{0, 0, 140}:     \"Alloy Computer Products (Australia) Pty Ltd\",\n\t[3]byte{0, 0, 141}:     \"Cryptek Inc.\",\n\t[3]byte{0, 0, 142}:     \"SOLBOURNE COMPUTER, INC.\",\n\t[3]byte{0, 0, 143}:     \"Raytheon\",\n\t[3]byte{0, 0, 144}:     \"MICROCOM\",\n\t[3]byte{0, 0, 145}:     \"ANRITSU CORPORATION\",\n\t[3]byte{0, 0, 146}:     \"COGENT DATA TECHNOLOGIES\",\n\t[3]byte{0, 0, 147}:     \"PROTEON INC.\",\n\t[3]byte{0, 0, 148}:     \"ASANTE TECHNOLOGIES\",\n\t[3]byte{0, 0, 149}:     \"SONY TEKTRONIX CORP.\",\n\t[3]byte{0, 0, 150}:     \"MARCONI ELECTRONICS LTD.\",\n\t[3]byte{0, 0, 151}:     \"Dell EMC\",\n\t[3]byte{0, 0, 152}:     \"CROSSCOMM CORPORATION\",\n\t[3]byte{0, 0, 153}:     \"MTX, INC.\",\n\t[3]byte{0, 0, 154}:     \"RC COMPUTER A/S\",\n\t[3]byte{0, 0, 155}:     \"INFORMATION INTERNATIONAL, INC\",\n\t[3]byte{0, 0, 156}:     \"ROLM MIL-SPEC COMPUTERS\",\n\t[3]byte{0, 0, 157}:     \"LOCUS COMPUTING CORPORATION\",\n\t[3]byte{0, 0, 158}:     \"MARLI S.A.\",\n\t[3]byte{0, 0, 159}:     \"AMERISTAR TECHNOLOGIES INC.\",\n\t[3]byte{0, 0, 160}:     \"SANYO Electric Co., Ltd.\",\n\t[3]byte{0, 0, 161}:     \"MARQUETTE ELECTRIC CO.\",\n\t[3]byte{0, 0, 162}:     \"Bay Networks\",\n\t[3]byte{0, 0, 163}:     \"NETWORK APPLICATION TECHNOLOGY\",\n\t[3]byte{0, 0, 164}:     \"ACORN COMPUTERS LIMITED\",\n\t[3]byte{0, 0, 165}:     \"Tattile SRL \",\n\t[3]byte{0, 0, 166}:     \"NETWORK GENERAL CORPORATION\",\n\t[3]byte{0, 0, 167}:     \"NETWORK COMPUTING DEVICES INC.\",\n\t[3]byte{0, 0, 168}:     \"Stratus Technologies\",\n\t[3]byte{0, 0, 169}:     \"NETWORK SYSTEMS CORP.\",\n\t[3]byte{0, 0, 170}:     \"XEROX CORPORATION\",\n\t[3]byte{0, 0, 171}:     \"LOGIC MODELING CORPORATION\",\n\t[3]byte{0, 0, 172}:     \"CONWARE COMPUTER CONSULTING\",\n\t[3]byte{0, 0, 173}:     \"BRUKER INSTRUMENTS INC.\",\n\t[3]byte{0, 0, 174}:     \"DASSAULT ELECTRONIQUE\",\n\t[3]byte{0, 0, 175}:     \"Canberra Industries, Inc.\",\n\t[3]byte{0, 0, 176}:     \"RND-RAD NETWORK DEVICES\",\n\t[3]byte{0, 0, 177}:     \"Alpha Micro\",\n\t[3]byte{0, 0, 178}:     \"TELEVIDEO SYSTEMS, INC.\",\n\t[3]byte{0, 0, 179}:     \"CIMLINC INCORPORATED\",\n\t[3]byte{0, 0, 180}:     \"Edimax Technology Co. Ltd.\",\n\t[3]byte{0, 0, 181}:     \"DATABILITY SOFTWARE SYS. INC.\",\n\t[3]byte{0, 0, 182}:     \"MICRO-MATIC RESEARCH\",\n\t[3]byte{0, 0, 183}:     \"DOVE COMPUTER CORPORATION\",\n\t[3]byte{0, 0, 184}:     \"SEIKOSHA CO., LTD.\",\n\t[3]byte{0, 0, 185}:     \"MCDONNELL DOUGLAS COMPUTER SYS\",\n\t[3]byte{0, 0, 186}:     \"SIIG, INC.\",\n\t[3]byte{0, 0, 187}:     \"TRI-DATA\",\n\t[3]byte{0, 0, 188}:     \"Rockwell Automation\",\n\t[3]byte{0, 0, 189}:     \"Mitsubishi Cable Industries, Ltd. / Ryosei Systems\",\n\t[3]byte{0, 0, 190}:     \"THE NTI GROUP\",\n\t[3]byte{0, 0, 191}:     \"SYMMETRIC COMPUTER SYSTEMS\",\n\t[3]byte{0, 0, 192}:     \"WESTERN DIGITAL CORPORATION\",\n\t[3]byte{0, 0, 193}:     \"Madge Ltd.\",\n\t[3]byte{0, 0, 194}:     \"INFORMATION PRESENTATION TECH.\",\n\t[3]byte{0, 0, 195}:     \"Harris Corporation\",\n\t[3]byte{0, 0, 196}:     \"WATERS DIV. OF MILLIPORE\",\n\t[3]byte{0, 0, 197}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 0, 198}:     \"EON SYSTEMS\",\n\t[3]byte{0, 0, 199}:     \"ARIX CORPORATION\",\n\t[3]byte{0, 0, 200}:     \"ALTOS COMPUTER SYSTEMS\",\n\t[3]byte{0, 0, 201}:     \"Emulex Corporation\",\n\t[3]byte{0, 0, 202}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 0, 203}:     \"COMPU-SHACK ELECTRONIC GMBH\",\n\t[3]byte{0, 0, 204}:     \"DENSAN CO., LTD.\",\n\t[3]byte{0, 0, 205}:     \"Allied Telesis Labs Ltd\",\n\t[3]byte{0, 0, 206}:     \"MEGADATA CORP.\",\n\t[3]byte{0, 0, 207}:     \"HAYES MICROCOMPUTER PRODUCTS\",\n\t[3]byte{0, 0, 208}:     \"DEVELCON ELECTRONICS LTD.\",\n\t[3]byte{0, 0, 209}:     \"ADAPTEC INCORPORATED\",\n\t[3]byte{0, 0, 210}:     \"SBE, INC.\",\n\t[3]byte{0, 0, 211}:     \"WANG LABORATORIES INC.\",\n\t[3]byte{0, 0, 212}:     \"PURE DATA LTD.\",\n\t[3]byte{0, 0, 213}:     \"MICROGNOSIS INTERNATIONAL\",\n\t[3]byte{0, 0, 214}:     \"PUNCH LINE HOLDING\",\n\t[3]byte{0, 0, 215}:     \"DARTMOUTH COLLEGE\",\n\t[3]byte{0, 0, 216}:     \"Novell, Inc.\",\n\t[3]byte{0, 0, 217}:     \"NIPPON TELEGRAPH & TELEPHONE\",\n\t[3]byte{0, 0, 218}:     \"ATEX\",\n\t[3]byte{0, 0, 219}:     \"British Telecommunications plc\",\n\t[3]byte{0, 0, 220}:     \"HAYES MICROCOMPUTER PRODUCTS\",\n\t[3]byte{0, 0, 221}:     \"TCL INCORPORATED\",\n\t[3]byte{0, 0, 222}:     \"CETIA\",\n\t[3]byte{0, 0, 223}:     \"BELL & HOWELL PUB SYS DIV\",\n\t[3]byte{0, 0, 224}:     \"QUADRAM CORP.\",\n\t[3]byte{0, 0, 225}:     \"GRID SYSTEMS\",\n\t[3]byte{0, 0, 226}:     \"ACER TECHNOLOGIES CORP.\",\n\t[3]byte{0, 0, 227}:     \"INTEGRATED MICRO PRODUCTS LTD\",\n\t[3]byte{0, 0, 228}:     \"IN2 GROUPE INTERTECHNIQUE\",\n\t[3]byte{0, 0, 229}:     \"SIGMEX LTD.\",\n\t[3]byte{0, 0, 230}:     \"APTOR PRODUITS DE COMM INDUST\",\n\t[3]byte{0, 0, 231}:     \"Star Gate Technologies\",\n\t[3]byte{0, 0, 232}:     \"ACCTON TECHNOLOGY CORP.\",\n\t[3]byte{0, 0, 233}:     \"ISICAD, INC.\",\n\t[3]byte{0, 0, 234}:     \"UPNOD AB\",\n\t[3]byte{0, 0, 235}:     \"MATSUSHITA COMM. IND. CO. LTD.\",\n\t[3]byte{0, 0, 236}:     \"MICROPROCESS\",\n\t[3]byte{0, 0, 237}:     \"APRIL\",\n\t[3]byte{0, 0, 238}:     \"NETWORK DESIGNERS, LTD.\",\n\t[3]byte{0, 0, 239}:     \"KTI\",\n\t[3]byte{0, 0, 240}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 0, 241}:     \"MAGNA COMPUTER CORPORATION\",\n\t[3]byte{0, 0, 242}:     \"SPIDER COMMUNICATIONS\",\n\t[3]byte{0, 0, 243}:     \"GANDALF DATA LIMITED\",\n\t[3]byte{0, 0, 244}:     \"Allied Telesis, Inc.\",\n\t[3]byte{0, 0, 245}:     \"DIAMOND SALES LIMITED\",\n\t[3]byte{0, 0, 246}:     \"APPLIED MICROSYSTEMS CORP.\",\n\t[3]byte{0, 0, 247}:     \"YOUTH KEEP ENTERPRISE CO LTD\",\n\t[3]byte{0, 0, 248}:     \"DIGITAL EQUIPMENT CORPORATION\",\n\t[3]byte{0, 0, 249}:     \"QUOTRON SYSTEMS INC.\",\n\t[3]byte{0, 0, 250}:     \"MICROSAGE COMPUTER SYSTEMS INC\",\n\t[3]byte{0, 0, 251}:     \"RECHNER ZUR KOMMUNIKATION\",\n\t[3]byte{0, 0, 252}:     \"MEIKO\",\n\t[3]byte{0, 0, 253}:     \"HIGH LEVEL HARDWARE\",\n\t[3]byte{0, 0, 254}:     \"Annapolis Micro Systems, Inc.\",\n\t[3]byte{0, 0, 255}:     \"CAMTEC ELECTRONICS LTD.\",\n\t[3]byte{0, 1, 0}:       \"EQUIP'TRANS\",\n\t[3]byte{0, 1, 1}:       \"Private\",\n\t[3]byte{0, 1, 2}:       \"3COM\",\n\t[3]byte{0, 1, 3}:       \"3COM\",\n\t[3]byte{0, 1, 4}:       \"DVICO Co., Ltd.\",\n\t[3]byte{0, 1, 5}:       \"Beckhoff Automation GmbH\",\n\t[3]byte{0, 1, 6}:       \"Tews Datentechnik GmbH\",\n\t[3]byte{0, 1, 7}:       \"Leiser GmbH\",\n\t[3]byte{0, 1, 8}:       \"AVLAB Technology, Inc.\",\n\t[3]byte{0, 1, 9}:       \"Nagano Japan Radio Co., Ltd.\",\n\t[3]byte{0, 1, 10}:      \"CIS TECHNOLOGY INC.\",\n\t[3]byte{0, 1, 11}:      \"Space CyberLink, Inc.\",\n\t[3]byte{0, 1, 12}:      \"System Talks Inc.\",\n\t[3]byte{0, 1, 13}:      \"Teledyne DALSA Inc.\",\n\t[3]byte{0, 1, 14}:      \"Bri-Link Technologies Co., Ltd\",\n\t[3]byte{0, 1, 15}:      \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 1, 16}:      \"Gotham Networks\",\n\t[3]byte{0, 1, 17}:      \"iDigm Inc.\",\n\t[3]byte{0, 1, 18}:      \"Shark Multimedia Inc.\",\n\t[3]byte{0, 1, 19}:      \"OLYMPUS CORPORATION\",\n\t[3]byte{0, 1, 20}:      \"KANDA TSUSHIN KOGYO CO., LTD.\",\n\t[3]byte{0, 1, 21}:      \"EXTRATECH CORPORATION\",\n\t[3]byte{0, 1, 22}:      \"Netspect Technologies, Inc.\",\n\t[3]byte{0, 1, 23}:      \"Canal +\",\n\t[3]byte{0, 1, 24}:      \"EZ Digital Co., Ltd.\",\n\t[3]byte{0, 1, 25}:      \"RTUnet (Australia)\",\n\t[3]byte{0, 1, 26}:      \"Hoffmann und Burmeister GbR\",\n\t[3]byte{0, 1, 27}:      \"Unizone Technologies, Inc.\",\n\t[3]byte{0, 1, 28}:      \"Universal Talkware Corporation\",\n\t[3]byte{0, 1, 29}:      \"Centillium Communications\",\n\t[3]byte{0, 1, 30}:      \"Precidia Technologies, Inc.\",\n\t[3]byte{0, 1, 31}:      \"RC Networks, Inc.\",\n\t[3]byte{0, 1, 32}:      \"OSCILLOQUARTZ S.A.\",\n\t[3]byte{0, 1, 33}:      \"WatchGuard Technologies, Inc.\",\n\t[3]byte{0, 1, 34}:      \"Trend Communications, Ltd.\",\n\t[3]byte{0, 1, 35}:      \"Schneider Electric Japan Holdings Ltd.\",\n\t[3]byte{0, 1, 36}:      \"Acer Incorporated\",\n\t[3]byte{0, 1, 37}:      \"YAESU MUSEN CO., LTD.\",\n\t[3]byte{0, 1, 38}:      \"PAC Labs\",\n\t[3]byte{0, 1, 39}:      \"OPEN Networks Pty Ltd\",\n\t[3]byte{0, 1, 40}:      \"EnjoyWeb, Inc.\",\n\t[3]byte{0, 1, 41}:      \"DFI Inc.\",\n\t[3]byte{0, 1, 42}:      \"Telematica Sistems Inteligente\",\n\t[3]byte{0, 1, 43}:      \"TELENET Co., Ltd.\",\n\t[3]byte{0, 1, 44}:      \"Aravox Technologies, Inc.\",\n\t[3]byte{0, 1, 45}:      \"Komodo Technology\",\n\t[3]byte{0, 1, 46}:      \"PC Partner Ltd.\",\n\t[3]byte{0, 1, 47}:      \"Twinhead International Corp\",\n\t[3]byte{0, 1, 48}:      \"Extreme Networks, Inc.\",\n\t[3]byte{0, 1, 49}:      \"Bosch Security Systems, Inc.\",\n\t[3]byte{0, 1, 50}:      \"Dranetz - BMI\",\n\t[3]byte{0, 1, 51}:      \"KYOWA Electronic Instruments C\",\n\t[3]byte{0, 1, 52}:      \"Selectron Systems AG\",\n\t[3]byte{0, 1, 53}:      \"KDC Corp.\",\n\t[3]byte{0, 1, 54}:      \"CyberTAN Technology Inc.\",\n\t[3]byte{0, 1, 55}:      \"IT Farm Corporation\",\n\t[3]byte{0, 1, 56}:      \"XAVi Technologies Corp.\",\n\t[3]byte{0, 1, 57}:      \"Point Multimedia Systems\",\n\t[3]byte{0, 1, 58}:      \"SHELCAD COMMUNICATIONS, LTD.\",\n\t[3]byte{0, 1, 59}:      \"BNA SYSTEMS\",\n\t[3]byte{0, 1, 60}:      \"TIW SYSTEMS\",\n\t[3]byte{0, 1, 61}:      \"RiscStation Ltd.\",\n\t[3]byte{0, 1, 62}:      \"Ascom Tateco AB\",\n\t[3]byte{0, 1, 63}:      \"Neighbor World Co., Ltd.\",\n\t[3]byte{0, 1, 64}:      \"Sendtek Corporation\",\n\t[3]byte{0, 1, 65}:      \"CABLE PRINT\",\n\t[3]byte{0, 1, 66}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 1, 67}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 1, 68}:      \"Dell EMC\",\n\t[3]byte{0, 1, 69}:      \"WINSYSTEMS, INC.\",\n\t[3]byte{0, 1, 70}:      \"Tesco Controls, Inc.\",\n\t[3]byte{0, 1, 71}:      \"Zhone Technologies\",\n\t[3]byte{0, 1, 72}:      \"X-traWeb Inc.\",\n\t[3]byte{0, 1, 73}:      \"TDT AG\",\n\t[3]byte{0, 1, 74}:      \"Sony Corporation\",\n\t[3]byte{0, 1, 75}:      \"Ennovate Networks, Inc.\",\n\t[3]byte{0, 1, 76}:      \"Berkeley Process Control\",\n\t[3]byte{0, 1, 77}:      \"Shin Kin Enterprises Co., Ltd\",\n\t[3]byte{0, 1, 78}:      \"WIN Enterprises, Inc.\",\n\t[3]byte{0, 1, 79}:      \"Adtran Inc\",\n\t[3]byte{0, 1, 80}:      \"GILAT COMMUNICATIONS, LTD.\",\n\t[3]byte{0, 1, 81}:      \"Ensemble Communications\",\n\t[3]byte{0, 1, 82}:      \"CHROMATEK INC.\",\n\t[3]byte{0, 1, 83}:      \"ARCHTEK TELECOM CORPORATION\",\n\t[3]byte{0, 1, 84}:      \"G3M Corporation\",\n\t[3]byte{0, 1, 85}:      \"Promise Technology, Inc.\",\n\t[3]byte{0, 1, 86}:      \"FIREWIREDIRECT.COM, INC.\",\n\t[3]byte{0, 1, 87}:      \"SYSWAVE CO., LTD\",\n\t[3]byte{0, 1, 88}:      \"Electro Industries/Gauge Tech\",\n\t[3]byte{0, 1, 89}:      \"S1 Corporation\",\n\t[3]byte{0, 1, 90}:      \"Digital Video Broadcasting\",\n\t[3]byte{0, 1, 91}:      \"ITALTEL S.p.A/RF-UP-I\",\n\t[3]byte{0, 1, 92}:      \"CADANT INC.\",\n\t[3]byte{0, 1, 93}:      \"Oracle Corporation \",\n\t[3]byte{0, 1, 94}:      \"BEST TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 1, 95}:      \"DIGITAL DESIGN GmbH\",\n\t[3]byte{0, 1, 96}:      \"ELMEX Co., LTD.\",\n\t[3]byte{0, 1, 97}:      \"Meta Machine Technology\",\n\t[3]byte{0, 1, 98}:      \"Cygnet Technologies, Inc.\",\n\t[3]byte{0, 1, 99}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 1, 100}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 1, 101}:     \"AirSwitch Corporation\",\n\t[3]byte{0, 1, 102}:     \"TC GROUP A/S\",\n\t[3]byte{0, 1, 103}:     \"HIOKI E.E. CORPORATION\",\n\t[3]byte{0, 1, 104}:     \"VITANA CORPORATION\",\n\t[3]byte{0, 1, 105}:     \"Celestix Networks Pte Ltd.\",\n\t[3]byte{0, 1, 106}:     \"ALITEC\",\n\t[3]byte{0, 1, 107}:     \"LightChip, Inc.\",\n\t[3]byte{0, 1, 108}:     \"FOXCONN\",\n\t[3]byte{0, 1, 109}:     \"CarrierComm Inc.\",\n\t[3]byte{0, 1, 110}:     \"Conklin Corporation\",\n\t[3]byte{0, 1, 111}:     \"Inkel Corp.\",\n\t[3]byte{0, 1, 112}:     \"ESE Embedded System Engineer'g\",\n\t[3]byte{0, 1, 113}:     \"Allied Data Technologies\",\n\t[3]byte{0, 1, 114}:     \"TechnoLand Co., LTD.\",\n\t[3]byte{0, 1, 115}:     \"AMCC\",\n\t[3]byte{0, 1, 116}:     \"CyberOptics Corporation\",\n\t[3]byte{0, 1, 117}:     \"Radiant Communications Corp.\",\n\t[3]byte{0, 1, 118}:     \"Orient Silver Enterprises\",\n\t[3]byte{0, 1, 119}:     \"EDSL\",\n\t[3]byte{0, 1, 120}:     \"MARGI Systems, Inc.\",\n\t[3]byte{0, 1, 121}:     \"WIRELESS TECHNOLOGY, INC.\",\n\t[3]byte{0, 1, 122}:     \"Chengdu Maipu Electric Industrial Co., Ltd.\",\n\t[3]byte{0, 1, 123}:     \"Heidelberger Druckmaschinen AG\",\n\t[3]byte{0, 1, 124}:     \"AG-E GmbH\",\n\t[3]byte{0, 1, 125}:     \"ThermoQuest\",\n\t[3]byte{0, 1, 126}:     \"ADTEK System Science Co., Ltd.\",\n\t[3]byte{0, 1, 127}:     \"Experience Music Project\",\n\t[3]byte{0, 1, 128}:     \"AOpen, Inc.\",\n\t[3]byte{0, 1, 129}:     \"Nortel Networks\",\n\t[3]byte{0, 1, 130}:     \"DICA TECHNOLOGIES AG\",\n\t[3]byte{0, 1, 131}:     \"ANITE TELECOMS\",\n\t[3]byte{0, 1, 132}:     \"SIEB & MEYER AG\",\n\t[3]byte{0, 1, 133}:     \"Hitachi Aloka Medical, Ltd.\",\n\t[3]byte{0, 1, 134}:     \"Uwe Disch\",\n\t[3]byte{0, 1, 135}:     \"I2SE GmbH\",\n\t[3]byte{0, 1, 136}:     \"LXCO Technologies ag\",\n\t[3]byte{0, 1, 137}:     \"Refraction Technology, Inc.\",\n\t[3]byte{0, 1, 138}:     \"ROI COMPUTER AG\",\n\t[3]byte{0, 1, 139}:     \"NetLinks Co., Ltd.\",\n\t[3]byte{0, 1, 140}:     \"Mega Vision\",\n\t[3]byte{0, 1, 141}:     \"AudeSi Technologies\",\n\t[3]byte{0, 1, 142}:     \"Logitec Corporation\",\n\t[3]byte{0, 1, 143}:     \"Kenetec, Inc.\",\n\t[3]byte{0, 1, 144}:     \"SMK-M\",\n\t[3]byte{0, 1, 145}:     \"SYRED Data Systems\",\n\t[3]byte{0, 1, 146}:     \"Texas Digital Systems\",\n\t[3]byte{0, 1, 147}:     \"Hanbyul Telecom Co., Ltd.\",\n\t[3]byte{0, 1, 148}:     \"Capital Equipment Corporation\",\n\t[3]byte{0, 1, 149}:     \"Sena Technologies, Inc.\",\n\t[3]byte{0, 1, 150}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 1, 151}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 1, 152}:     \"Darim Vision\",\n\t[3]byte{0, 1, 153}:     \"HeiSei Electronics\",\n\t[3]byte{0, 1, 154}:     \"LEUNIG GmbH\",\n\t[3]byte{0, 1, 155}:     \"Kyoto Microcomputer Co., Ltd.\",\n\t[3]byte{0, 1, 156}:     \"JDS Uniphase Inc.\",\n\t[3]byte{0, 1, 157}:     \"E-Control Systems, Inc.\",\n\t[3]byte{0, 1, 158}:     \"ESS Technology, Inc.\",\n\t[3]byte{0, 1, 159}:     \"ReadyNet\",\n\t[3]byte{0, 1, 160}:     \"Infinilink Corporation\",\n\t[3]byte{0, 1, 161}:     \"Mag-Tek, Inc.\",\n\t[3]byte{0, 1, 162}:     \"Logical Co., Ltd.\",\n\t[3]byte{0, 1, 163}:     \"GENESYS LOGIC, INC.\",\n\t[3]byte{0, 1, 164}:     \"Microlink Corporation\",\n\t[3]byte{0, 1, 165}:     \"Nextcomm, Inc.\",\n\t[3]byte{0, 1, 166}:     \"Scientific-Atlanta Arcodan A/S\",\n\t[3]byte{0, 1, 167}:     \"UNEX TECHNOLOGY CORPORATION\",\n\t[3]byte{0, 1, 168}:     \"Welltech Computer Co., Ltd.\",\n\t[3]byte{0, 1, 169}:     \"BMW AG\",\n\t[3]byte{0, 1, 170}:     \"Airspan Communications, Ltd.\",\n\t[3]byte{0, 1, 171}:     \"Main Street Networks\",\n\t[3]byte{0, 1, 172}:     \"Sitara Networks, Inc.\",\n\t[3]byte{0, 1, 173}:     \"Coach Master International  d.b.a. CMI Worldwide, Inc.\",\n\t[3]byte{0, 1, 174}:     \"Trex Enterprises\",\n\t[3]byte{0, 1, 175}:     \"Artesyn Embedded Technologies\",\n\t[3]byte{0, 1, 176}:     \"Fulltek Technology Co., Ltd.\",\n\t[3]byte{0, 1, 177}:     \"General Bandwidth\",\n\t[3]byte{0, 1, 178}:     \"Digital Processing Systems, Inc.\",\n\t[3]byte{0, 1, 179}:     \"Precision Electronic Manufacturing\",\n\t[3]byte{0, 1, 180}:     \"Wayport, Inc.\",\n\t[3]byte{0, 1, 181}:     \"Turin Networks, Inc.\",\n\t[3]byte{0, 1, 182}:     \"SAEJIN T&M Co., Ltd.\",\n\t[3]byte{0, 1, 183}:     \"Centos, Inc.\",\n\t[3]byte{0, 1, 184}:     \"Netsensity, Inc.\",\n\t[3]byte{0, 1, 185}:     \"SKF (U.K.) Limited\",\n\t[3]byte{0, 1, 186}:     \"IC-Net, Inc.\",\n\t[3]byte{0, 1, 187}:     \"Frequentis\",\n\t[3]byte{0, 1, 188}:     \"Brains Corporation\",\n\t[3]byte{0, 1, 189}:     \"Peterson Electro-Musical Products, Inc.\",\n\t[3]byte{0, 1, 190}:     \"Gigalink Co., Ltd.\",\n\t[3]byte{0, 1, 191}:     \"Teleforce Co., Ltd.\",\n\t[3]byte{0, 1, 192}:     \"CompuLab, Ltd.\",\n\t[3]byte{0, 1, 193}:     \"Vitesse Semiconductor Corporation\",\n\t[3]byte{0, 1, 194}:     \"ARK Research Corp.\",\n\t[3]byte{0, 1, 195}:     \"Acromag, Inc.\",\n\t[3]byte{0, 1, 196}:     \"NeoWave, Inc.\",\n\t[3]byte{0, 1, 197}:     \"Simpler Networks\",\n\t[3]byte{0, 1, 198}:     \"Quarry Technologies\",\n\t[3]byte{0, 1, 199}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 1, 200}:     \"CONRAD CORP.\",\n\t[3]byte{0, 1, 200}:     \"THOMAS CONRAD CORP.\",\n\t[3]byte{0, 1, 201}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 1, 202}:     \"Geocast Network Systems, Inc.\",\n\t[3]byte{0, 1, 203}:     \"EVR\",\n\t[3]byte{0, 1, 204}:     \"Japan Total Design Communication Co., Ltd.\",\n\t[3]byte{0, 1, 205}:     \"ARtem\",\n\t[3]byte{0, 1, 206}:     \"Custom Micro Products, Ltd.\",\n\t[3]byte{0, 1, 207}:     \"Alpha Data Parallel Systems, Ltd.\",\n\t[3]byte{0, 1, 208}:     \"VitalPoint, Inc.\",\n\t[3]byte{0, 1, 209}:     \"CoNet Communications, Inc.\",\n\t[3]byte{0, 1, 210}:     \"inXtron, Inc. \",\n\t[3]byte{0, 1, 211}:     \"PAXCOMM, Inc.\",\n\t[3]byte{0, 1, 212}:     \"Leisure Time, Inc.\",\n\t[3]byte{0, 1, 213}:     \"HAEDONG INFO & COMM CO., LTD\",\n\t[3]byte{0, 1, 214}:     \"manroland AG\",\n\t[3]byte{0, 1, 215}:     \"F5 Networks, Inc.\",\n\t[3]byte{0, 1, 216}:     \"Teltronics, Inc.\",\n\t[3]byte{0, 1, 217}:     \"Sigma, Inc.\",\n\t[3]byte{0, 1, 218}:     \"WINCOMM Corporation\",\n\t[3]byte{0, 1, 219}:     \"Freecom Technologies GmbH\",\n\t[3]byte{0, 1, 220}:     \"Activetelco\",\n\t[3]byte{0, 1, 221}:     \"Avail Networks\",\n\t[3]byte{0, 1, 222}:     \"Trango Systems, Inc.\",\n\t[3]byte{0, 1, 223}:     \"ISDN Communications, Ltd.\",\n\t[3]byte{0, 1, 224}:     \"Fast Systems, Inc.\",\n\t[3]byte{0, 1, 225}:     \"Kinpo Electronics, Inc.\",\n\t[3]byte{0, 1, 226}:     \"Ando Electric Corporation\",\n\t[3]byte{0, 1, 227}:     \"Siemens AG\",\n\t[3]byte{0, 1, 228}:     \"Sitera, Inc.\",\n\t[3]byte{0, 1, 229}:     \"Supernet, Inc.\",\n\t[3]byte{0, 1, 230}:     \"Hewlett Packard\",\n\t[3]byte{0, 1, 231}:     \"Hewlett Packard\",\n\t[3]byte{0, 1, 232}:     \"Force10 Networks, Inc.\",\n\t[3]byte{0, 1, 233}:     \"Litton Marine Systems B.V.\",\n\t[3]byte{0, 1, 234}:     \"Cirilium Corp.\",\n\t[3]byte{0, 1, 235}:     \"C-COM Corporation\",\n\t[3]byte{0, 1, 236}:     \"Ericsson Group\",\n\t[3]byte{0, 1, 237}:     \"SETA Corp.\",\n\t[3]byte{0, 1, 238}:     \"Comtrol Europe, Ltd.\",\n\t[3]byte{0, 1, 239}:     \"Camtel Technology Corp.\",\n\t[3]byte{0, 1, 240}:     \"Tridium, Inc.\",\n\t[3]byte{0, 1, 241}:     \"Innovative Concepts, Inc.\",\n\t[3]byte{0, 1, 242}:     \"Mark of the Unicorn, Inc.\",\n\t[3]byte{0, 1, 243}:     \"QPS, Inc.\",\n\t[3]byte{0, 1, 244}:     \"Enterasys\",\n\t[3]byte{0, 1, 245}:     \"ERIM S.A.\",\n\t[3]byte{0, 1, 246}:     \"Association of Musical Electronics Industry\",\n\t[3]byte{0, 1, 247}:     \"Image Display Systems, Inc.\",\n\t[3]byte{0, 1, 248}:     \"TEXIO TECHNOLOGY CORPORATION\",\n\t[3]byte{0, 1, 249}:     \"TeraGlobal Communications Corp.\",\n\t[3]byte{0, 1, 250}:     \"HOROSCAS\",\n\t[3]byte{0, 1, 251}:     \"DoTop Technology, Inc.\",\n\t[3]byte{0, 1, 252}:     \"Keyence Corporation\",\n\t[3]byte{0, 1, 253}:     \"Digital Voice Systems, Inc.\",\n\t[3]byte{0, 1, 254}:     \"DIGITAL EQUIPMENT CORPORATION\",\n\t[3]byte{0, 1, 255}:     \"Data Direct Networks, Inc.\",\n\t[3]byte{0, 2, 0}:       \"Net & Sys Co., Ltd.\",\n\t[3]byte{0, 2, 1}:       \"IFM Electronic gmbh\",\n\t[3]byte{0, 2, 2}:       \"Amino Communications, Ltd.\",\n\t[3]byte{0, 2, 3}:       \"Woonsang Telecom, Inc.\",\n\t[3]byte{0, 2, 4}:       \"Bodmann Industries Elektronik GmbH\",\n\t[3]byte{0, 2, 5}:       \"Hitachi Denshi, Ltd.\",\n\t[3]byte{0, 2, 6}:       \"Telital R&D Denmark A/S\",\n\t[3]byte{0, 2, 7}:       \"VisionGlobal Network Corp.\",\n\t[3]byte{0, 2, 8}:       \"Unify Networks, Inc.\",\n\t[3]byte{0, 2, 9}:       \"Shenzhen SED Information Technology Co., Ltd.\",\n\t[3]byte{0, 2, 10}:      \"Gefran Spa\",\n\t[3]byte{0, 2, 11}:      \"Native Networks, Inc.\",\n\t[3]byte{0, 2, 12}:      \"Metro-Optix\",\n\t[3]byte{0, 2, 13}:      \"Micronpc.com\",\n\t[3]byte{0, 2, 14}:      \"ECI Telecom Ltd.\",\n\t[3]byte{0, 2, 15}:      \"AATR\",\n\t[3]byte{0, 2, 16}:      \"Fenecom\",\n\t[3]byte{0, 2, 17}:      \"Nature Worldwide Technology Corp.\",\n\t[3]byte{0, 2, 18}:      \"SierraCom\",\n\t[3]byte{0, 2, 19}:      \"S.D.E.L.\",\n\t[3]byte{0, 2, 20}:      \"DTVRO\",\n\t[3]byte{0, 2, 21}:      \"Cotas Computer Technology A/B\",\n\t[3]byte{0, 2, 22}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 2, 23}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 2, 24}:      \"Advanced Scientific Corp\",\n\t[3]byte{0, 2, 25}:      \"Paralon Technologies\",\n\t[3]byte{0, 2, 26}:      \"Zuma Networks\",\n\t[3]byte{0, 2, 27}:      \"Kollmorgen-Servotronix\",\n\t[3]byte{0, 2, 28}:      \"Network Elements, Inc.\",\n\t[3]byte{0, 2, 29}:      \"Data General Communication Ltd.\",\n\t[3]byte{0, 2, 30}:      \"SIMTEL S.R.L.\",\n\t[3]byte{0, 2, 31}:      \"Aculab PLC\",\n\t[3]byte{0, 2, 32}:      \"CANON FINETECH INC.\",\n\t[3]byte{0, 2, 33}:      \"DSP Application, Ltd.\",\n\t[3]byte{0, 2, 34}:      \"Chromisys, Inc.\",\n\t[3]byte{0, 2, 35}:      \"ClickTV\",\n\t[3]byte{0, 2, 36}:      \"C-COR\",\n\t[3]byte{0, 2, 37}:      \"One Stop Systems\",\n\t[3]byte{0, 2, 38}:      \"XESystems, Inc.\",\n\t[3]byte{0, 2, 39}:      \"ESD Electronic System Design GmbH\",\n\t[3]byte{0, 2, 40}:      \"Necsom, Ltd.\",\n\t[3]byte{0, 2, 41}:      \"Adtec Corporation\",\n\t[3]byte{0, 2, 42}:      \"Asound Electronic\",\n\t[3]byte{0, 2, 43}:      \"SAXA, Inc.\",\n\t[3]byte{0, 2, 44}:      \"ABB Bomem, Inc.\",\n\t[3]byte{0, 2, 45}:      \"Agere Systems\",\n\t[3]byte{0, 2, 46}:      \"TEAC Corp. R& D\",\n\t[3]byte{0, 2, 47}:      \"P-Cube, Ltd.\",\n\t[3]byte{0, 2, 48}:      \"Intersoft Electronics\",\n\t[3]byte{0, 2, 49}:      \"Ingersoll-Rand\",\n\t[3]byte{0, 2, 50}:      \"Avision, Inc.\",\n\t[3]byte{0, 2, 51}:      \"Mantra Communications, Inc.\",\n\t[3]byte{0, 2, 52}:      \"Imperial Technology, Inc.\",\n\t[3]byte{0, 2, 53}:      \"Paragon Networks International\",\n\t[3]byte{0, 2, 54}:      \"INIT GmbH\",\n\t[3]byte{0, 2, 55}:      \"Cosmo Research Corp.\",\n\t[3]byte{0, 2, 56}:      \"Serome Technology, Inc.\",\n\t[3]byte{0, 2, 57}:      \"Visicom\",\n\t[3]byte{0, 2, 58}:      \"ZSK Stickmaschinen GmbH\",\n\t[3]byte{0, 2, 59}:      \"Ericsson\",\n\t[3]byte{0, 2, 60}:      \"Creative Technology, Ltd.\",\n\t[3]byte{0, 2, 61}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 2, 62}:      \"Selta Telematica S.p.a\",\n\t[3]byte{0, 2, 63}:      \"Compal Electronics INC.\",\n\t[3]byte{0, 2, 64}:      \"Seedek Co., Ltd.\",\n\t[3]byte{0, 2, 65}:      \"Amer.com\",\n\t[3]byte{0, 2, 66}:      \"Videoframe Systems\",\n\t[3]byte{0, 2, 67}:      \"Raysis Co., Ltd.\",\n\t[3]byte{0, 2, 68}:      \"SURECOM Technology Co.\",\n\t[3]byte{0, 2, 69}:      \"Lampus Co, Ltd.\",\n\t[3]byte{0, 2, 70}:      \"All-Win Tech Co., Ltd.\",\n\t[3]byte{0, 2, 71}:      \"Great Dragon Information Technology (Group) Co., Ltd.\",\n\t[3]byte{0, 2, 72}:      \"Pilz GmbH & Co.\",\n\t[3]byte{0, 2, 73}:      \"Aviv Infocom Co, Ltd.\",\n\t[3]byte{0, 2, 74}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 2, 75}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 2, 76}:      \"SiByte, Inc.\",\n\t[3]byte{0, 2, 77}:      \"Mannesman Dematic Colby Pty. Ltd.\",\n\t[3]byte{0, 2, 78}:      \"Datacard Group\",\n\t[3]byte{0, 2, 79}:      \"IPM Datacom S.R.L.\",\n\t[3]byte{0, 2, 80}:      \"Geyser Networks, Inc.\",\n\t[3]byte{0, 2, 81}:      \"Soma Networks, Inc.\",\n\t[3]byte{0, 2, 82}:      \"Carrier Corporation\",\n\t[3]byte{0, 2, 83}:      \"Televideo, Inc.\",\n\t[3]byte{0, 2, 84}:      \"WorldGate\",\n\t[3]byte{0, 2, 85}:      \"IBM Corp\",\n\t[3]byte{0, 2, 86}:      \"Alpha Processor, Inc.\",\n\t[3]byte{0, 2, 87}:      \"Microcom Corp.\",\n\t[3]byte{0, 2, 88}:      \"Flying Packets Communications\",\n\t[3]byte{0, 2, 89}:      \"Tsann Kuen China (Shanghai)Enterprise Co., Ltd. IT Group\",\n\t[3]byte{0, 2, 90}:      \"Catena Networks\",\n\t[3]byte{0, 2, 91}:      \"Cambridge Silicon Radio\",\n\t[3]byte{0, 2, 92}:      \"SCI Systems (Kunshan) Co., Ltd.\",\n\t[3]byte{0, 2, 93}:      \"Calix Networks\",\n\t[3]byte{0, 2, 94}:      \"High Technology Ltd\",\n\t[3]byte{0, 2, 95}:      \"Nortel Networks\",\n\t[3]byte{0, 2, 96}:      \"Accordion Networks, Inc.\",\n\t[3]byte{0, 2, 97}:      \"Tilgin AB\",\n\t[3]byte{0, 2, 98}:      \"Soyo Group Soyo Com Tech Co., Ltd\",\n\t[3]byte{0, 2, 99}:      \"UPS Manufacturing SRL\",\n\t[3]byte{0, 2, 100}:     \"AudioRamp.com\",\n\t[3]byte{0, 2, 101}:     \"Virditech Co. Ltd.\",\n\t[3]byte{0, 2, 102}:     \"Thermalogic Corporation\",\n\t[3]byte{0, 2, 103}:     \"NODE RUNNER, INC.\",\n\t[3]byte{0, 2, 104}:     \"Harris Government Communications\",\n\t[3]byte{0, 2, 105}:     \"Nadatel Co., Ltd\",\n\t[3]byte{0, 2, 106}:     \"Cocess Telecom Co., Ltd.\",\n\t[3]byte{0, 2, 107}:     \"BCM Computers Co., Ltd.\",\n\t[3]byte{0, 2, 108}:     \"Philips CFT\",\n\t[3]byte{0, 2, 109}:     \"Adept Telecom\",\n\t[3]byte{0, 2, 110}:     \"NeGeN Access, Inc.\",\n\t[3]byte{0, 2, 111}:     \"Senao International Co., Ltd.\",\n\t[3]byte{0, 2, 112}:     \"Crewave Co., Ltd.\",\n\t[3]byte{0, 2, 113}:     \"Zhone Technologies\",\n\t[3]byte{0, 2, 114}:     \"CC&C Technologies, Inc.\",\n\t[3]byte{0, 2, 115}:     \"Coriolis Networks\",\n\t[3]byte{0, 2, 116}:     \"Tommy Technologies Corp.\",\n\t[3]byte{0, 2, 117}:     \"SMART Technologies, Inc.\",\n\t[3]byte{0, 2, 118}:     \"Primax Electronics Ltd.\",\n\t[3]byte{0, 2, 119}:     \"Cash Systemes Industrie\",\n\t[3]byte{0, 2, 120}:     \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{0, 2, 121}:     \"Control Applications, Ltd.\",\n\t[3]byte{0, 2, 122}:     \"IOI Technology Corporation\",\n\t[3]byte{0, 2, 123}:     \"Amplify Net, Inc.\",\n\t[3]byte{0, 2, 124}:     \"Trilithic, Inc.\",\n\t[3]byte{0, 2, 125}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 2, 126}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 2, 127}:     \"ask-technologies.com\",\n\t[3]byte{0, 2, 128}:     \"Mu Net, Inc.\",\n\t[3]byte{0, 2, 129}:     \"Madge Ltd.\",\n\t[3]byte{0, 2, 130}:     \"ViaClix, Inc.\",\n\t[3]byte{0, 2, 131}:     \"Spectrum Controls, Inc.\",\n\t[3]byte{0, 2, 132}:     \"UK Grid Solutions Limited\",\n\t[3]byte{0, 2, 133}:     \"Riverstone Networks\",\n\t[3]byte{0, 2, 134}:     \"Occam Networks\",\n\t[3]byte{0, 2, 135}:     \"Adapcom\",\n\t[3]byte{0, 2, 136}:     \"GLOBAL VILLAGE COMMUNICATION\",\n\t[3]byte{0, 2, 137}:     \"DNE Technologies\",\n\t[3]byte{0, 2, 138}:     \"Ambit Microsystems Corporation\",\n\t[3]byte{0, 2, 139}:     \"VDSL Systems OY\",\n\t[3]byte{0, 2, 140}:     \"Micrel-Synergy Semiconductor\",\n\t[3]byte{0, 2, 141}:     \"Movita Technologies, Inc.\",\n\t[3]byte{0, 2, 142}:     \"Rapid 5 Networks, Inc.\",\n\t[3]byte{0, 2, 143}:     \"Globetek, Inc.\",\n\t[3]byte{0, 2, 144}:     \"Woorigisool, Inc.\",\n\t[3]byte{0, 2, 145}:     \"Open Network Co., Ltd.\",\n\t[3]byte{0, 2, 146}:     \"Logic Innovations, Inc.\",\n\t[3]byte{0, 2, 147}:     \"Solid Data Systems\",\n\t[3]byte{0, 2, 148}:     \"Tokyo Sokushin Co., Ltd.\",\n\t[3]byte{0, 2, 149}:     \"IP.Access Limited\",\n\t[3]byte{0, 2, 150}:     \"Lectron Co,. Ltd.\",\n\t[3]byte{0, 2, 151}:     \"C-COR.net\",\n\t[3]byte{0, 2, 152}:     \"Broadframe Corporation\",\n\t[3]byte{0, 2, 153}:     \"Apex, Inc.\",\n\t[3]byte{0, 2, 154}:     \"Storage Apps\",\n\t[3]byte{0, 2, 155}:     \"Kreatel Communications AB\",\n\t[3]byte{0, 2, 156}:     \"3COM\",\n\t[3]byte{0, 2, 157}:     \"Merix Corp.\",\n\t[3]byte{0, 2, 158}:     \"Information Equipment Co., Ltd.\",\n\t[3]byte{0, 2, 159}:     \"L-3 Communication Aviation Recorders\",\n\t[3]byte{0, 2, 160}:     \"Flatstack Ltd.\",\n\t[3]byte{0, 2, 161}:     \"World Wide Packets\",\n\t[3]byte{0, 2, 162}:     \"Hilscher GmbH\",\n\t[3]byte{0, 2, 163}:     \"ABB Switzerland Ltd, Power Systems\",\n\t[3]byte{0, 2, 164}:     \"AddPac Technology Co., Ltd.\",\n\t[3]byte{0, 2, 165}:     \"Hewlett Packard\",\n\t[3]byte{0, 2, 166}:     \"Effinet Systems Co., Ltd.\",\n\t[3]byte{0, 2, 167}:     \"Vivace Networks\",\n\t[3]byte{0, 2, 168}:     \"Air Link Technology\",\n\t[3]byte{0, 2, 169}:     \"RACOM, s.r.o.\",\n\t[3]byte{0, 2, 170}:     \"PLcom Co., Ltd.\",\n\t[3]byte{0, 2, 171}:     \"CTC Union Technologies Co., Ltd.\",\n\t[3]byte{0, 2, 172}:     \"3PAR data\",\n\t[3]byte{0, 2, 173}:     \"HOYA Corporation\",\n\t[3]byte{0, 2, 174}:     \"Scannex Electronics Ltd.\",\n\t[3]byte{0, 2, 175}:     \"TeleCruz Technology, Inc.\",\n\t[3]byte{0, 2, 176}:     \"Hokubu Communication & Industrial Co., Ltd.\",\n\t[3]byte{0, 2, 177}:     \"Anritsu, Ltd.\",\n\t[3]byte{0, 2, 178}:     \"Cablevision\",\n\t[3]byte{0, 2, 179}:     \"Intel Corporation\",\n\t[3]byte{0, 2, 180}:     \"DAPHNE\",\n\t[3]byte{0, 2, 181}:     \"Avnet, Inc.\",\n\t[3]byte{0, 2, 182}:     \"Acrosser Technology Co., Ltd.\",\n\t[3]byte{0, 2, 183}:     \"Watanabe Electric Industry Co., Ltd.\",\n\t[3]byte{0, 2, 184}:     \"WHI KONSULT AB\",\n\t[3]byte{0, 2, 185}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 2, 186}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 2, 187}:     \"Continuous Computing Corp\",\n\t[3]byte{0, 2, 188}:     \"LVL 7 Systems, Inc.\",\n\t[3]byte{0, 2, 189}:     \"Bionet Co., Ltd.\",\n\t[3]byte{0, 2, 190}:     \"Totsu Engineering, Inc.\",\n\t[3]byte{0, 2, 191}:     \"dotRocket, Inc.\",\n\t[3]byte{0, 2, 192}:     \"Bencent Tzeng Industry Co., Ltd.\",\n\t[3]byte{0, 2, 193}:     \"Innovative Electronic Designs, Inc.\",\n\t[3]byte{0, 2, 194}:     \"Net Vision Telecom\",\n\t[3]byte{0, 2, 195}:     \"Arelnet Ltd.\",\n\t[3]byte{0, 2, 196}:     \"OPT Machine Vision Tech Co., Ltd\",\n\t[3]byte{0, 2, 197}:     \"Evertz Microsystems Ltd.\",\n\t[3]byte{0, 2, 198}:     \"Data Track Technology PLC\",\n\t[3]byte{0, 2, 199}:     \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{0, 2, 200}:     \"Technocom Communications Technology (pte) Ltd\",\n\t[3]byte{0, 2, 201}:     \"Mellanox Technologies, Inc.\",\n\t[3]byte{0, 2, 202}:     \"EndPoints, Inc.\",\n\t[3]byte{0, 2, 203}:     \"TriState Ltd.\",\n\t[3]byte{0, 2, 204}:     \"M.C.C.I\",\n\t[3]byte{0, 2, 205}:     \"TeleDream, Inc.\",\n\t[3]byte{0, 2, 206}:     \"FoxJet, Inc.\",\n\t[3]byte{0, 2, 207}:     \"ZyGate Communications, Inc.\",\n\t[3]byte{0, 2, 208}:     \"Comdial Corporation\",\n\t[3]byte{0, 2, 209}:     \"Vivotek, Inc.\",\n\t[3]byte{0, 2, 210}:     \"Workstation AG\",\n\t[3]byte{0, 2, 211}:     \"NetBotz, Inc.\",\n\t[3]byte{0, 2, 212}:     \"PDA Peripherals, Inc.\",\n\t[3]byte{0, 2, 213}:     \"ACR\",\n\t[3]byte{0, 2, 214}:     \"NICE Systems\",\n\t[3]byte{0, 2, 215}:     \"EMPEG Ltd\",\n\t[3]byte{0, 2, 216}:     \"BRECIS Communications Corporation\",\n\t[3]byte{0, 2, 217}:     \"Reliable Controls\",\n\t[3]byte{0, 2, 218}:     \"ExiO Communications, Inc.\",\n\t[3]byte{0, 2, 219}:     \"NETSEC\",\n\t[3]byte{0, 2, 220}:     \"Fujitsu General Limited\",\n\t[3]byte{0, 2, 221}:     \"Bromax Communications, Ltd.\",\n\t[3]byte{0, 2, 222}:     \"Astrodesign, Inc.\",\n\t[3]byte{0, 2, 223}:     \"Net Com Systems, Inc.\",\n\t[3]byte{0, 2, 224}:     \"ETAS GmbH\",\n\t[3]byte{0, 2, 225}:     \"Integrated Network Corporation\",\n\t[3]byte{0, 2, 226}:     \"NDC Infared Engineering\",\n\t[3]byte{0, 2, 227}:     \"LITE-ON Communications, Inc.\",\n\t[3]byte{0, 2, 228}:     \"JC HYUN Systems, Inc.\",\n\t[3]byte{0, 2, 229}:     \"Timeware Ltd.\",\n\t[3]byte{0, 2, 230}:     \"Gould Instrument Systems, Inc.\",\n\t[3]byte{0, 2, 231}:     \"CAB GmbH & Co KG\",\n\t[3]byte{0, 2, 232}:     \"E.D.&A.\",\n\t[3]byte{0, 2, 233}:     \"CS Systemes De Securite - C3S\",\n\t[3]byte{0, 2, 234}:     \"Focus Enhancements\",\n\t[3]byte{0, 2, 235}:     \"Pico Communications\",\n\t[3]byte{0, 2, 236}:     \"Maschoff Design Engineering\",\n\t[3]byte{0, 2, 237}:     \"DXO Telecom Co., Ltd.\",\n\t[3]byte{0, 2, 238}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 2, 239}:     \"CCC Network Systems Group Ltd.\",\n\t[3]byte{0, 2, 240}:     \"AME Optimedia Technology Co., Ltd.\",\n\t[3]byte{0, 2, 241}:     \"Pinetron Co., Ltd.\",\n\t[3]byte{0, 2, 242}:     \"eDevice, Inc.\",\n\t[3]byte{0, 2, 243}:     \"Media Serve Co., Ltd.\",\n\t[3]byte{0, 2, 244}:     \"PCTEL, Inc.\",\n\t[3]byte{0, 2, 245}:     \"VIVE Synergies, Inc.\",\n\t[3]byte{0, 2, 246}:     \"Equipe Communications\",\n\t[3]byte{0, 2, 247}:     \"ARM\",\n\t[3]byte{0, 2, 248}:     \"SEAKR Engineering, Inc.\",\n\t[3]byte{0, 2, 249}:     \"MIMOS Berhad\",\n\t[3]byte{0, 2, 250}:     \"DX Antenna Co., Ltd.\",\n\t[3]byte{0, 2, 251}:     \"Baumuller Aulugen-Systemtechnik GmbH\",\n\t[3]byte{0, 2, 252}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 2, 253}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 2, 254}:     \"Viditec, Inc.\",\n\t[3]byte{0, 2, 255}:     \"Handan BroadInfoCom\",\n\t[3]byte{0, 3, 0}:       \"Barracuda Networks, Inc.\",\n\t[3]byte{0, 3, 1}:       \"EXFO\",\n\t[3]byte{0, 3, 2}:       \"Charles Industries, Ltd.\",\n\t[3]byte{0, 3, 3}:       \"JAMA Electronics Co., Ltd.\",\n\t[3]byte{0, 3, 4}:       \"Pacific Broadband Communications\",\n\t[3]byte{0, 3, 5}:       \"MSC Vertriebs GmbH\",\n\t[3]byte{0, 3, 6}:       \"Fusion In Tech Co., Ltd.\",\n\t[3]byte{0, 3, 7}:       \"Secure Works, Inc.\",\n\t[3]byte{0, 3, 8}:       \"AM Communications, Inc.\",\n\t[3]byte{0, 3, 9}:       \"Texcel Technology PLC\",\n\t[3]byte{0, 3, 10}:      \"Argus Technologies\",\n\t[3]byte{0, 3, 11}:      \"Hunter Technology, Inc.\",\n\t[3]byte{0, 3, 12}:      \"Telesoft Technologies Ltd.\",\n\t[3]byte{0, 3, 13}:      \"Uniwill Computer Corp.\",\n\t[3]byte{0, 3, 14}:      \"Core Communications Co., Ltd.\",\n\t[3]byte{0, 3, 15}:      \"Digital China (Shanghai) Networks Ltd.\",\n\t[3]byte{0, 3, 16}:      \"E-Globaledge Corporation\",\n\t[3]byte{0, 3, 17}:      \"Micro Technology Co., Ltd.\",\n\t[3]byte{0, 3, 18}:      \"TRsystems GmbH\",\n\t[3]byte{0, 3, 19}:      \"Access Media SPA\",\n\t[3]byte{0, 3, 20}:      \"Teleware Network Systems\",\n\t[3]byte{0, 3, 21}:      \"Cidco Incorporated\",\n\t[3]byte{0, 3, 22}:      \"Nobell Communications, Inc.\",\n\t[3]byte{0, 3, 23}:      \"Merlin Systems, Inc.\",\n\t[3]byte{0, 3, 24}:      \"Cyras Systems, Inc.\",\n\t[3]byte{0, 3, 25}:      \"Infineon AG\",\n\t[3]byte{0, 3, 26}:      \"Beijing Broad Telecom Ltd., China\",\n\t[3]byte{0, 3, 27}:      \"Cellvision Systems, Inc.\",\n\t[3]byte{0, 3, 28}:      \"Svenska Hardvarufabriken AB\",\n\t[3]byte{0, 3, 29}:      \"Taiwan Commate Computer, Inc.\",\n\t[3]byte{0, 3, 30}:      \"Optranet, Inc.\",\n\t[3]byte{0, 3, 31}:      \"Condev Ltd.\",\n\t[3]byte{0, 3, 32}:      \"Xpeed, Inc.\",\n\t[3]byte{0, 3, 33}:      \"Reco Research Co., Ltd.\",\n\t[3]byte{0, 3, 34}:      \"IDIS Co., Ltd.\",\n\t[3]byte{0, 3, 35}:      \"Cornet Technology, Inc.\",\n\t[3]byte{0, 3, 36}:      \"SANYO Consumer Electronics Co., Ltd.\",\n\t[3]byte{0, 3, 37}:      \"Arima Computer Corp.\",\n\t[3]byte{0, 3, 38}:      \"Iwasaki Information Systems Co., Ltd.\",\n\t[3]byte{0, 3, 39}:      \"ACT'L\",\n\t[3]byte{0, 3, 40}:      \"Mace Group, Inc.\",\n\t[3]byte{0, 3, 41}:      \"F3, Inc.\",\n\t[3]byte{0, 3, 42}:      \"UniData Communication Systems, Inc.\",\n\t[3]byte{0, 3, 43}:      \"GAI Datenfunksysteme GmbH\",\n\t[3]byte{0, 3, 44}:      \"ABB Switzerland Ltd\",\n\t[3]byte{0, 3, 45}:      \"IBASE Technology, Inc.\",\n\t[3]byte{0, 3, 46}:      \"Scope Information Management, Ltd.\",\n\t[3]byte{0, 3, 47}:      \"Global Sun Technology, Inc.\",\n\t[3]byte{0, 3, 48}:      \"Imagenics, Co., Ltd.\",\n\t[3]byte{0, 3, 49}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 3, 50}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 3, 51}:      \"Digitel Co., Ltd.\",\n\t[3]byte{0, 3, 52}:      \"Newport Electronics\",\n\t[3]byte{0, 3, 53}:      \"Mirae Technology\",\n\t[3]byte{0, 3, 54}:      \"Zetes Technologies\",\n\t[3]byte{0, 3, 55}:      \"Vaone, Inc.\",\n\t[3]byte{0, 3, 56}:      \"Oak Technology\",\n\t[3]byte{0, 3, 57}:      \"Eurologic Systems, Ltd.\",\n\t[3]byte{0, 3, 58}:      \"Silicon Wave, Inc.\",\n\t[3]byte{0, 3, 59}:      \"TAMI Tech Co., Ltd.\",\n\t[3]byte{0, 3, 60}:      \"Daiden Co., Ltd.\",\n\t[3]byte{0, 3, 61}:      \"ILSHin Lab\",\n\t[3]byte{0, 3, 62}:      \"Tateyama System Laboratory Co., Ltd.\",\n\t[3]byte{0, 3, 63}:      \"BigBand Networks, Ltd.\",\n\t[3]byte{0, 3, 64}:      \"Floware Wireless Systems, Ltd.\",\n\t[3]byte{0, 3, 65}:      \"Axon Digital Design\",\n\t[3]byte{0, 3, 66}:      \"Nortel Networks\",\n\t[3]byte{0, 3, 67}:      \"Martin Professional A/S\",\n\t[3]byte{0, 3, 68}:      \"Tietech.Co., Ltd.\",\n\t[3]byte{0, 3, 69}:      \"Routrek Networks Corporation\",\n\t[3]byte{0, 3, 70}:      \"Hitachi Kokusai Electric, Inc.\",\n\t[3]byte{0, 3, 71}:      \"Intel Corporation\",\n\t[3]byte{0, 3, 72}:      \"Norscan Instruments, Ltd.\",\n\t[3]byte{0, 3, 73}:      \"Vidicode Datacommunicatie B.V.\",\n\t[3]byte{0, 3, 74}:      \"RIAS Corporation\",\n\t[3]byte{0, 3, 75}:      \"Nortel Networks\",\n\t[3]byte{0, 3, 76}:      \"Shanghai DigiVision Technology Co., Ltd.\",\n\t[3]byte{0, 3, 77}:      \"Chiaro Networks, Ltd.\",\n\t[3]byte{0, 3, 78}:      \"Pos Data Company, Ltd.\",\n\t[3]byte{0, 3, 79}:      \"Sur-Gard Security\",\n\t[3]byte{0, 3, 80}:      \"BTICINO SPA\",\n\t[3]byte{0, 3, 81}:      \"Diebold, Inc.\",\n\t[3]byte{0, 3, 82}:      \"Colubris Networks\",\n\t[3]byte{0, 3, 83}:      \"Mitac, Inc.\",\n\t[3]byte{0, 3, 84}:      \"Fiber Logic Communications\",\n\t[3]byte{0, 3, 85}:      \"TeraBeam Internet Systems\",\n\t[3]byte{0, 3, 86}:      \"Wincor Nixdorf International GmbH\",\n\t[3]byte{0, 3, 87}:      \"Intervoice-Brite, Inc.\",\n\t[3]byte{0, 3, 88}:      \"Hanyang Digitech Co.Ltd\",\n\t[3]byte{0, 3, 89}:      \"DigitalSis\",\n\t[3]byte{0, 3, 90}:      \"Photron Limited\",\n\t[3]byte{0, 3, 91}:      \"BridgeWave Communications\",\n\t[3]byte{0, 3, 92}:      \"Saint Song Corp.\",\n\t[3]byte{0, 3, 93}:      \"Bosung Hi-Net Co., Ltd.\",\n\t[3]byte{0, 3, 94}:      \"Metropolitan Area Networks, Inc.\",\n\t[3]byte{0, 3, 95}:      \"Prüftechnik Condition Monitoring GmbH & Co. KG\",\n\t[3]byte{0, 3, 96}:      \"PAC Interactive Technology, Inc.\",\n\t[3]byte{0, 3, 97}:      \"Widcomm, Inc.\",\n\t[3]byte{0, 3, 98}:      \"Vodtel Communications, Inc.\",\n\t[3]byte{0, 3, 99}:      \"Miraesys Co., Ltd.\",\n\t[3]byte{0, 3, 100}:     \"Scenix Semiconductor, Inc.\",\n\t[3]byte{0, 3, 101}:     \"Kira Information & Communications, Ltd.\",\n\t[3]byte{0, 3, 102}:     \"ASM Pacific Technology\",\n\t[3]byte{0, 3, 103}:     \"Jasmine Networks, Inc.\",\n\t[3]byte{0, 3, 104}:     \"Embedone Co., Ltd.\",\n\t[3]byte{0, 3, 105}:     \"Nippon Antenna Co., Ltd.\",\n\t[3]byte{0, 3, 106}:     \"Mainnet, Ltd.\",\n\t[3]byte{0, 3, 107}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 3, 108}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 3, 109}:     \"Runtop, Inc.\",\n\t[3]byte{0, 3, 110}:     \"Nicon Systems (Pty) Limited\",\n\t[3]byte{0, 3, 111}:     \"Telsey SPA\",\n\t[3]byte{0, 3, 112}:     \"NXTV, Inc.\",\n\t[3]byte{0, 3, 113}:     \"Acomz Networks Corp.\",\n\t[3]byte{0, 3, 114}:     \"ULAN\",\n\t[3]byte{0, 3, 115}:     \"Aselsan A.S\",\n\t[3]byte{0, 3, 116}:     \"Control Microsystems\",\n\t[3]byte{0, 3, 117}:     \"NetMedia, Inc.\",\n\t[3]byte{0, 3, 118}:     \"Graphtec Technology, Inc.\",\n\t[3]byte{0, 3, 119}:     \"Gigabit Wireless\",\n\t[3]byte{0, 3, 120}:     \"HUMAX Co., Ltd.\",\n\t[3]byte{0, 3, 121}:     \"Proscend Communications, Inc.\",\n\t[3]byte{0, 3, 122}:     \"Taiyo Yuden Co., Ltd.\",\n\t[3]byte{0, 3, 123}:     \"IDEC IZUMI Corporation\",\n\t[3]byte{0, 3, 124}:     \"Coax Media\",\n\t[3]byte{0, 3, 125}:     \"Stellcom\",\n\t[3]byte{0, 3, 126}:     \"PORTech Communications, Inc.\",\n\t[3]byte{0, 3, 127}:     \"Atheros Communications, Inc.\",\n\t[3]byte{0, 3, 128}:     \"SSH Communications Security Corp.\",\n\t[3]byte{0, 3, 129}:     \"Ingenico International\",\n\t[3]byte{0, 3, 130}:     \"A-One Co., Ltd.\",\n\t[3]byte{0, 3, 131}:     \"Metera Networks, Inc.\",\n\t[3]byte{0, 3, 132}:     \"AETA\",\n\t[3]byte{0, 3, 133}:     \"Actelis Networks, Inc.\",\n\t[3]byte{0, 3, 134}:     \"Ho Net, Inc.\",\n\t[3]byte{0, 3, 135}:     \"Blaze Network Products\",\n\t[3]byte{0, 3, 136}:     \"Fastfame Technology Co., Ltd.\",\n\t[3]byte{0, 3, 137}:     \"PLANTRONICS, INC.\",\n\t[3]byte{0, 3, 138}:     \"America Online, Inc.\",\n\t[3]byte{0, 3, 139}:     \"PLUS-ONE I&T, Inc.\",\n\t[3]byte{0, 3, 140}:     \"Total Impact\",\n\t[3]byte{0, 3, 141}:     \"PCS Revenue Control Systems, Inc.\",\n\t[3]byte{0, 3, 142}:     \"Atoga Systems, Inc.\",\n\t[3]byte{0, 3, 143}:     \"Weinschel Corporation\",\n\t[3]byte{0, 3, 144}:     \"Digital Video Communications, Inc.\",\n\t[3]byte{0, 3, 145}:     \"Advanced Digital Broadcast, Ltd.\",\n\t[3]byte{0, 3, 146}:     \"Hyundai Teletek Co., Ltd.\",\n\t[3]byte{0, 3, 147}:     \"Apple, Inc.\",\n\t[3]byte{0, 3, 148}:     \"Connect One\",\n\t[3]byte{0, 3, 149}:     \"California Amplifier\",\n\t[3]byte{0, 3, 150}:     \"EZ Cast Co., Ltd.\",\n\t[3]byte{0, 3, 151}:     \"FireBrick Limited\",\n\t[3]byte{0, 3, 152}:     \"WISI\",\n\t[3]byte{0, 3, 153}:     \"Dongju Informations & Communications Co., Ltd.\",\n\t[3]byte{0, 3, 154}:     \"SiConnect\",\n\t[3]byte{0, 3, 155}:     \"NetChip Technology, Inc.\",\n\t[3]byte{0, 3, 156}:     \"OptiMight Communications, Inc.\",\n\t[3]byte{0, 3, 157}:     \"Qisda Corporation\",\n\t[3]byte{0, 3, 158}:     \"Tera System Co., Ltd.\",\n\t[3]byte{0, 3, 159}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 3, 160}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 3, 161}:     \"HIPER Information & Communication, Inc.\",\n\t[3]byte{0, 3, 162}:     \"Catapult Communications\",\n\t[3]byte{0, 3, 163}:     \"MAVIX, Ltd.\",\n\t[3]byte{0, 3, 164}:     \"Imation Corp.\",\n\t[3]byte{0, 3, 165}:     \"Medea Corporation\",\n\t[3]byte{0, 3, 166}:     \"Traxit Technology, Inc.\",\n\t[3]byte{0, 3, 167}:     \"Unixtar Technology, Inc.\",\n\t[3]byte{0, 3, 168}:     \"IDOT Computers, Inc.\",\n\t[3]byte{0, 3, 169}:     \"AXCENT Media AG\",\n\t[3]byte{0, 3, 170}:     \"Watlow\",\n\t[3]byte{0, 3, 171}:     \"Bridge Information Systems\",\n\t[3]byte{0, 3, 172}:     \"Fronius Schweissmaschinen\",\n\t[3]byte{0, 3, 173}:     \"Emerson Energy Systems AB\",\n\t[3]byte{0, 3, 174}:     \"Allied Advanced Manufacturing Pte, Ltd.\",\n\t[3]byte{0, 3, 175}:     \"Paragea Communications\",\n\t[3]byte{0, 3, 176}:     \"Xsense Technology Corp.\",\n\t[3]byte{0, 3, 177}:     \"Hospira Inc.\",\n\t[3]byte{0, 3, 178}:     \"Radware\",\n\t[3]byte{0, 3, 179}:     \"IA Link Systems Co., Ltd.\",\n\t[3]byte{0, 3, 180}:     \"Macrotek International Corp.\",\n\t[3]byte{0, 3, 181}:     \"Entra Technology Co.\",\n\t[3]byte{0, 3, 182}:     \"QSI Corporation\",\n\t[3]byte{0, 3, 183}:     \"ZACCESS Systems\",\n\t[3]byte{0, 3, 184}:     \"NetKit Solutions, LLC\",\n\t[3]byte{0, 3, 185}:     \"Hualong Telecom Co., Ltd.\",\n\t[3]byte{0, 3, 186}:     \"Oracle Corporation\",\n\t[3]byte{0, 3, 187}:     \"Signal Communications Limited\",\n\t[3]byte{0, 3, 188}:     \"COT GmbH\",\n\t[3]byte{0, 3, 189}:     \"OmniCluster Technologies, Inc.\",\n\t[3]byte{0, 3, 190}:     \"Netility\",\n\t[3]byte{0, 3, 191}:     \"Centerpoint Broadband Technologies, Inc.\",\n\t[3]byte{0, 3, 192}:     \"RFTNC Co., Ltd.\",\n\t[3]byte{0, 3, 193}:     \"Packet Dynamics Ltd\",\n\t[3]byte{0, 3, 194}:     \"Solphone K.K.\",\n\t[3]byte{0, 3, 195}:     \"Micronik Multimedia\",\n\t[3]byte{0, 3, 196}:     \"Tomra Systems ASA\",\n\t[3]byte{0, 3, 197}:     \"Mobotix AG\",\n\t[3]byte{0, 3, 198}:     \"ICUE Systems, Inc.\",\n\t[3]byte{0, 3, 199}:     \"hopf Elektronik GmbH\",\n\t[3]byte{0, 3, 200}:     \"CML Emergency Services\",\n\t[3]byte{0, 3, 201}:     \"TECOM Co., Ltd.\",\n\t[3]byte{0, 3, 202}:     \"MTS Systems Corp.\",\n\t[3]byte{0, 3, 203}:     \"SystemGear Co., Ltd.\",\n\t[3]byte{0, 3, 204}:     \"Momentum Computer, Inc.\",\n\t[3]byte{0, 3, 205}:     \"Clovertech, Inc.\",\n\t[3]byte{0, 3, 206}:     \"ETEN Technologies, Inc.\",\n\t[3]byte{0, 3, 207}:     \"Muxcom, Inc.\",\n\t[3]byte{0, 3, 208}:     \"KOANKEISO Co., Ltd.\",\n\t[3]byte{0, 3, 209}:     \"Takaya Corporation\",\n\t[3]byte{0, 3, 210}:     \"Crossbeam Systems, Inc.\",\n\t[3]byte{0, 3, 211}:     \"Internet Energy Systems, Inc.\",\n\t[3]byte{0, 3, 212}:     \"Alloptic, Inc.\",\n\t[3]byte{0, 3, 213}:     \"Advanced Communications Co., Ltd.\",\n\t[3]byte{0, 3, 214}:     \"RADVision, Ltd.\",\n\t[3]byte{0, 3, 215}:     \"NextNet Wireless, Inc.\",\n\t[3]byte{0, 3, 216}:     \"iMPath Networks, Inc.\",\n\t[3]byte{0, 3, 217}:     \"Secheron SA\",\n\t[3]byte{0, 3, 218}:     \"Takamisawa Cybernetics Co., Ltd.\",\n\t[3]byte{0, 3, 219}:     \"Apogee Electronics Corp.\",\n\t[3]byte{0, 3, 220}:     \"Lexar Media, Inc.\",\n\t[3]byte{0, 3, 221}:     \"Comark Interactive Solutions\",\n\t[3]byte{0, 3, 222}:     \"OTC Wireless\",\n\t[3]byte{0, 3, 223}:     \"Desana Systems\",\n\t[3]byte{0, 3, 224}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 3, 225}:     \"Winmate Communication, Inc.\",\n\t[3]byte{0, 3, 226}:     \"Comspace Corporation\",\n\t[3]byte{0, 3, 227}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 3, 228}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 3, 229}:     \"Hermstedt SG\",\n\t[3]byte{0, 3, 230}:     \"Entone, Inc.\",\n\t[3]byte{0, 3, 231}:     \"Logostek Co. Ltd.\",\n\t[3]byte{0, 3, 232}:     \"Wavesight Limited\",\n\t[3]byte{0, 3, 233}:     \"Akara Canada, Inc.\",\n\t[3]byte{0, 3, 234}:     \"Mega System Technologies, Inc.\",\n\t[3]byte{0, 3, 235}:     \"Atrica\",\n\t[3]byte{0, 3, 236}:     \"ICG Research, Inc.\",\n\t[3]byte{0, 3, 237}:     \"Shinkawa Electric Co., Ltd.\",\n\t[3]byte{0, 3, 238}:     \"MKNet Corporation\",\n\t[3]byte{0, 3, 239}:     \"Oneline AG\",\n\t[3]byte{0, 3, 240}:     \"Redfern Broadband Networks\",\n\t[3]byte{0, 3, 241}:     \"Cicada Semiconductor, Inc.\",\n\t[3]byte{0, 3, 242}:     \"Seneca Networks\",\n\t[3]byte{0, 3, 243}:     \"Dazzle Multimedia, Inc.\",\n\t[3]byte{0, 3, 244}:     \"NetBurner\",\n\t[3]byte{0, 3, 245}:     \"Chip2Chip\",\n\t[3]byte{0, 3, 246}:     \"Allegro Networks, Inc.\",\n\t[3]byte{0, 3, 247}:     \"Plast-Control GmbH\",\n\t[3]byte{0, 3, 248}:     \"SanCastle Technologies, Inc.\",\n\t[3]byte{0, 3, 249}:     \"Pleiades Communications, Inc.\",\n\t[3]byte{0, 3, 250}:     \"TiMetra Networks\",\n\t[3]byte{0, 3, 251}:     \"ENEGATE Co.,Ltd.\",\n\t[3]byte{0, 3, 252}:     \"Intertex Data AB\",\n\t[3]byte{0, 3, 253}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 3, 254}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 3, 255}:     \"Microsoft Corporation\",\n\t[3]byte{0, 4, 0}:       \"LEXMARK INTERNATIONAL, INC.\",\n\t[3]byte{0, 4, 1}:       \"Osaki Electric Co., Ltd.\",\n\t[3]byte{0, 4, 2}:       \"Nexsan Technologies, Ltd.\",\n\t[3]byte{0, 4, 3}:       \"Nexsi Corporation\",\n\t[3]byte{0, 4, 4}:       \"Makino Milling Machine Co., Ltd.\",\n\t[3]byte{0, 4, 5}:       \"ACN Technologies\",\n\t[3]byte{0, 4, 6}:       \"Fa. Metabox AG\",\n\t[3]byte{0, 4, 7}:       \"Topcon Positioning Systems, Inc.\",\n\t[3]byte{0, 4, 8}:       \"Sanko Electronics Co., Ltd.\",\n\t[3]byte{0, 4, 9}:       \"Cratos Networks\",\n\t[3]byte{0, 4, 10}:      \"Sage Systems\",\n\t[3]byte{0, 4, 11}:      \"3COM EUROPE LTD\",\n\t[3]byte{0, 4, 12}:      \"Kanno Works, Ltd.\",\n\t[3]byte{0, 4, 13}:      \"Avaya Inc\",\n\t[3]byte{0, 4, 14}:      \"AVM GmbH\",\n\t[3]byte{0, 4, 15}:      \"Asus Network Technologies, Inc.\",\n\t[3]byte{0, 4, 16}:      \"Spinnaker Networks, Inc.\",\n\t[3]byte{0, 4, 17}:      \"Inkra Networks, Inc.\",\n\t[3]byte{0, 4, 18}:      \"WaveSmith Networks, Inc.\",\n\t[3]byte{0, 4, 19}:      \"snom technology GmbH\",\n\t[3]byte{0, 4, 20}:      \"Umezawa Musen Denki Co., Ltd.\",\n\t[3]byte{0, 4, 21}:      \"Rasteme Systems Co., Ltd.\",\n\t[3]byte{0, 4, 22}:      \"Parks S/A Comunicacoes Digitais\",\n\t[3]byte{0, 4, 23}:      \"ELAU AG\",\n\t[3]byte{0, 4, 24}:      \"Teltronic S.A.U.\",\n\t[3]byte{0, 4, 25}:      \"Fibercycle Networks, Inc.\",\n\t[3]byte{0, 4, 26}:      \"Ines Test and Measurement GmbH & CoKG\",\n\t[3]byte{0, 4, 27}:      \"Bridgeworks Ltd.\",\n\t[3]byte{0, 4, 28}:      \"ipDialog, Inc.\",\n\t[3]byte{0, 4, 29}:      \"Corega of America\",\n\t[3]byte{0, 4, 30}:      \"Shikoku Instrumentation Co., Ltd.\",\n\t[3]byte{0, 4, 31}:      \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{0, 4, 32}:      \"Slim Devices, Inc.\",\n\t[3]byte{0, 4, 33}:      \"Ocular Networks\",\n\t[3]byte{0, 4, 34}:      \"Studio Technologies, Inc\",\n\t[3]byte{0, 4, 35}:      \"Intel Corporation\",\n\t[3]byte{0, 4, 36}:      \"TMC s.r.l.\",\n\t[3]byte{0, 4, 37}:      \"Atmel Corporation\",\n\t[3]byte{0, 4, 38}:      \"Autosys\",\n\t[3]byte{0, 4, 39}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 4, 40}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 4, 41}:      \"Pixord Corporation\",\n\t[3]byte{0, 4, 42}:      \"Wireless Networks, Inc.\",\n\t[3]byte{0, 4, 43}:      \"IT Access Co., Ltd.\",\n\t[3]byte{0, 4, 44}:      \"Minet, Inc.\",\n\t[3]byte{0, 4, 45}:      \"Sarian Systems, Ltd.\",\n\t[3]byte{0, 4, 46}:      \"Netous Technologies, Ltd.\",\n\t[3]byte{0, 4, 47}:      \"International Communications Products, Inc.\",\n\t[3]byte{0, 4, 48}:      \"Netgem\",\n\t[3]byte{0, 4, 49}:      \"GlobalStreams, Inc.\",\n\t[3]byte{0, 4, 50}:      \"Voyetra Turtle Beach, Inc.\",\n\t[3]byte{0, 4, 51}:      \"Cyberboard A/S\",\n\t[3]byte{0, 4, 52}:      \"Accelent Systems, Inc.\",\n\t[3]byte{0, 4, 53}:      \"InfiNet LLC\",\n\t[3]byte{0, 4, 54}:      \"ELANsat Technologies, Inc.\",\n\t[3]byte{0, 4, 55}:      \"Powin Information Technology, Inc.\",\n\t[3]byte{0, 4, 56}:      \"Nortel Networks\",\n\t[3]byte{0, 4, 57}:      \"Rosco Entertainment Technology, Inc.\",\n\t[3]byte{0, 4, 58}:      \"Intelligent Telecommunications, Inc.\",\n\t[3]byte{0, 4, 59}:      \"Lava Computer Mfg., Inc.\",\n\t[3]byte{0, 4, 60}:      \"SONOS Co., Ltd.\",\n\t[3]byte{0, 4, 61}:      \"INDEL AG\",\n\t[3]byte{0, 4, 62}:      \"Telencomm\",\n\t[3]byte{0, 4, 63}:      \"ESTeem Wireless Modems, Inc\",\n\t[3]byte{0, 4, 64}:      \"cyberPIXIE, Inc.\",\n\t[3]byte{0, 4, 65}:      \"Half Dome Systems, Inc.\",\n\t[3]byte{0, 4, 66}:      \"NACT\",\n\t[3]byte{0, 4, 67}:      \"Agilent Technologies, Inc.\",\n\t[3]byte{0, 4, 68}:      \"Western Multiplex Corporation\",\n\t[3]byte{0, 4, 69}:      \"LMS Skalar Instruments GmbH\",\n\t[3]byte{0, 4, 70}:      \"CYZENTECH Co., Ltd.\",\n\t[3]byte{0, 4, 71}:      \"Acrowave Systems Co., Ltd.\",\n\t[3]byte{0, 4, 72}:      \"Polaroid Corporation\",\n\t[3]byte{0, 4, 73}:      \"Mapletree Networks\",\n\t[3]byte{0, 4, 74}:      \"iPolicy Networks, Inc.\",\n\t[3]byte{0, 4, 75}:      \"NVIDIA\",\n\t[3]byte{0, 4, 76}:      \"JENOPTIK\",\n\t[3]byte{0, 4, 77}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 4, 78}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 4, 79}:      \"Schubert System Elektronik Gmbh\",\n\t[3]byte{0, 4, 80}:      \"DMD Computers SRL\",\n\t[3]byte{0, 4, 81}:      \"Medrad, Inc.\",\n\t[3]byte{0, 4, 82}:      \"RocketLogix, Inc.\",\n\t[3]byte{0, 4, 83}:      \"YottaYotta, Inc.\",\n\t[3]byte{0, 4, 84}:      \"Quadriga UK\",\n\t[3]byte{0, 4, 85}:      \"ANTARA.net\",\n\t[3]byte{0, 4, 86}:      \"Cambium Networks Limited\",\n\t[3]byte{0, 4, 87}:      \"Universal Access Technology, Inc.\",\n\t[3]byte{0, 4, 88}:      \"Fusion X Co., Ltd.\",\n\t[3]byte{0, 4, 89}:      \"Veristar Corporation\",\n\t[3]byte{0, 4, 90}:      \"The Linksys Group, Inc.\",\n\t[3]byte{0, 4, 91}:      \"Techsan Electronics Co., Ltd.\",\n\t[3]byte{0, 4, 92}:      \"Mobiwave Pte Ltd\",\n\t[3]byte{0, 4, 93}:      \"BEKA Elektronik\",\n\t[3]byte{0, 4, 94}:      \"PolyTrax Information Technology AG\",\n\t[3]byte{0, 4, 95}:      \"Avalue Technology, Inc.\",\n\t[3]byte{0, 4, 96}:      \"Knilink Technology, Inc.\",\n\t[3]byte{0, 4, 97}:      \"EPOX Computer Co., Ltd.\",\n\t[3]byte{0, 4, 98}:      \"DAKOS Data & Communication Co., Ltd.\",\n\t[3]byte{0, 4, 99}:      \"Bosch Security Systems\",\n\t[3]byte{0, 4, 100}:     \"Pulse-Link Inc\",\n\t[3]byte{0, 4, 101}:     \"i.s.t isdn-support technik GmbH\",\n\t[3]byte{0, 4, 102}:     \"ARMITEL Co.\",\n\t[3]byte{0, 4, 103}:     \"Wuhan Research Institute of MII\",\n\t[3]byte{0, 4, 104}:     \"Vivity, Inc.\",\n\t[3]byte{0, 4, 105}:     \"Innocom, Inc.\",\n\t[3]byte{0, 4, 106}:     \"Navini Networks\",\n\t[3]byte{0, 4, 107}:     \"Palm Wireless, Inc.\",\n\t[3]byte{0, 4, 108}:     \"Cyber Technology Co., Ltd.\",\n\t[3]byte{0, 4, 109}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 4, 110}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 4, 111}:     \"Digitel S/A Industria Eletronica\",\n\t[3]byte{0, 4, 112}:     \"ipUnplugged AB\",\n\t[3]byte{0, 4, 113}:     \"IPrad\",\n\t[3]byte{0, 4, 114}:     \"Telelynx, Inc.\",\n\t[3]byte{0, 4, 115}:     \"Photonex Corporation\",\n\t[3]byte{0, 4, 116}:     \"LEGRAND\",\n\t[3]byte{0, 4, 117}:     \"3COM\",\n\t[3]byte{0, 4, 118}:     \"3COM\",\n\t[3]byte{0, 4, 119}:     \"Scalant Systems, Inc.\",\n\t[3]byte{0, 4, 120}:     \"G. Star Technology Corporation\",\n\t[3]byte{0, 4, 121}:     \"Radius Co., Ltd.\",\n\t[3]byte{0, 4, 122}:     \"AXXESSIT ASA\",\n\t[3]byte{0, 4, 123}:     \"Schlumberger\",\n\t[3]byte{0, 4, 124}:     \"Skidata AG\",\n\t[3]byte{0, 4, 125}:     \"Pelco\",\n\t[3]byte{0, 4, 126}:     \"Siqura B.V.\",\n\t[3]byte{0, 4, 127}:     \"Chr. Mayr GmbH & Co. KG\",\n\t[3]byte{0, 4, 128}:     \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 4, 129}:     \"Econolite Control Products, Inc.\",\n\t[3]byte{0, 4, 130}:     \"Medialogic Corp.\",\n\t[3]byte{0, 4, 131}:     \"Deltron Technology, Inc.\",\n\t[3]byte{0, 4, 132}:     \"Amann GmbH\",\n\t[3]byte{0, 4, 133}:     \"PicoLight\",\n\t[3]byte{0, 4, 134}:     \"ITTC, University of Kansas\",\n\t[3]byte{0, 4, 135}:     \"Cogency Semiconductor, Inc.\",\n\t[3]byte{0, 4, 136}:     \"Eurotherm Controls\",\n\t[3]byte{0, 4, 137}:     \"YAFO Networks, Inc.\",\n\t[3]byte{0, 4, 138}:     \"Temia Vertriebs GmbH\",\n\t[3]byte{0, 4, 139}:     \"Poscon Corporation\",\n\t[3]byte{0, 4, 140}:     \"Nayna Networks, Inc.\",\n\t[3]byte{0, 4, 141}:     \" Teo Technologies, Inc\",\n\t[3]byte{0, 4, 142}:     \"Ohm Tech Labs, Inc.\",\n\t[3]byte{0, 4, 143}:     \"TD Systems Corporation\",\n\t[3]byte{0, 4, 144}:     \"Optical Access\",\n\t[3]byte{0, 4, 145}:     \"Technovision, Inc.\",\n\t[3]byte{0, 4, 146}:     \"Hive Internet, Ltd.\",\n\t[3]byte{0, 4, 147}:     \"Tsinghua Unisplendour Co., Ltd.\",\n\t[3]byte{0, 4, 148}:     \"Breezecom, Ltd.\",\n\t[3]byte{0, 4, 149}:     \"Tejas Networks India Limited\",\n\t[3]byte{0, 4, 150}:     \"Extreme Networks, Inc.\",\n\t[3]byte{0, 4, 151}:     \"MacroSystem Digital Video AG\",\n\t[3]byte{0, 4, 152}:     \"Mahi Networks\",\n\t[3]byte{0, 4, 153}:     \"Chino Corporation\",\n\t[3]byte{0, 4, 154}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 4, 155}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 4, 156}:     \"Surgient Networks, Inc.\",\n\t[3]byte{0, 4, 157}:     \"Ipanema Technologies\",\n\t[3]byte{0, 4, 158}:     \"Wirelink Co., Ltd.\",\n\t[3]byte{0, 4, 159}:     \"Freescale Semiconductor\",\n\t[3]byte{0, 4, 160}:     \"Verity Instruments, Inc.\",\n\t[3]byte{0, 4, 161}:     \"Pathway Connectivity\",\n\t[3]byte{0, 4, 162}:     \"L.S.I. Japan Co., Ltd.\",\n\t[3]byte{0, 4, 163}:     \"Microchip Technology Inc.\",\n\t[3]byte{0, 4, 164}:     \"NetEnabled, Inc.\",\n\t[3]byte{0, 4, 165}:     \"Barco Projection Systems NV\",\n\t[3]byte{0, 4, 166}:     \"SAF Tehnika Ltd.\",\n\t[3]byte{0, 4, 167}:     \"FabiaTech Corporation\",\n\t[3]byte{0, 4, 168}:     \"Broadmax Technologies, Inc.\",\n\t[3]byte{0, 4, 169}:     \"SandStream Technologies, Inc.\",\n\t[3]byte{0, 4, 170}:     \"Jetstream Communications\",\n\t[3]byte{0, 4, 171}:     \"Mavenir Inc.\",\n\t[3]byte{0, 4, 172}:     \"IBM Corp\",\n\t[3]byte{0, 4, 173}:     \"Malibu Networks\",\n\t[3]byte{0, 4, 174}:     \"Sullair Corporation\",\n\t[3]byte{0, 4, 175}:     \"Digital Fountain, Inc.\",\n\t[3]byte{0, 4, 176}:     \"ELESIGN Co., Ltd.\",\n\t[3]byte{0, 4, 177}:     \"Signal Technology, Inc.\",\n\t[3]byte{0, 4, 178}:     \"ESSEGI SRL\",\n\t[3]byte{0, 4, 179}:     \"Videotek, Inc.\",\n\t[3]byte{0, 4, 180}:     \"CIAC\",\n\t[3]byte{0, 4, 181}:     \"Equitrac Corporation\",\n\t[3]byte{0, 4, 182}:     \"Stratex Networks, Inc.\",\n\t[3]byte{0, 4, 183}:     \"AMB i.t. Holding\",\n\t[3]byte{0, 4, 184}:     \"Kumahira Co., Ltd.\",\n\t[3]byte{0, 4, 185}:     \"S.I. Soubou, Inc.\",\n\t[3]byte{0, 4, 186}:     \"KDD Media Will Corporation\",\n\t[3]byte{0, 4, 187}:     \"Bardac Corporation\",\n\t[3]byte{0, 4, 188}:     \"Giantec, Inc.\",\n\t[3]byte{0, 4, 189}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 4, 190}:     \"OptXCon, Inc.\",\n\t[3]byte{0, 4, 191}:     \"VersaLogic Corp.\",\n\t[3]byte{0, 4, 192}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 4, 193}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 4, 194}:     \"Magnipix, Inc.\",\n\t[3]byte{0, 4, 195}:     \"CASTOR Informatique\",\n\t[3]byte{0, 4, 196}:     \"Audiotonix Group Limited\",\n\t[3]byte{0, 4, 197}:     \"ASE Technologies, USA\",\n\t[3]byte{0, 4, 198}:     \"YAMAHA MOTOR CO.,LTD\",\n\t[3]byte{0, 4, 199}:     \"NetMount\",\n\t[3]byte{0, 4, 200}:     \"LIBA Maschinenfabrik GmbH\",\n\t[3]byte{0, 4, 201}:     \"Micro Electron Co., Ltd.\",\n\t[3]byte{0, 4, 202}:     \"FreeMs Corp.\",\n\t[3]byte{0, 4, 203}:     \"Tdsoft Communication, Ltd.\",\n\t[3]byte{0, 4, 204}:     \"Peek Traffic B.V.\",\n\t[3]byte{0, 4, 205}:     \"Extenway Solutions Inc\",\n\t[3]byte{0, 4, 206}:     \"Patria Ailon\",\n\t[3]byte{0, 4, 207}:     \"Seagate Technology\",\n\t[3]byte{0, 4, 208}:     \"Softlink s.r.o.\",\n\t[3]byte{0, 4, 209}:     \"Drew Technologies, Inc.\",\n\t[3]byte{0, 4, 210}:     \"Adcon Telemetry GmbH\",\n\t[3]byte{0, 4, 211}:     \"Toyokeiki Co., Ltd.\",\n\t[3]byte{0, 4, 212}:     \"Proview Electronics Co., Ltd.\",\n\t[3]byte{0, 4, 213}:     \"Hitachi Information & Communication Engineering, Ltd.\",\n\t[3]byte{0, 4, 214}:     \"Takagi Industrial Co., Ltd.\",\n\t[3]byte{0, 4, 215}:     \"Omitec Instrumentation Ltd.\",\n\t[3]byte{0, 4, 216}:     \"IPWireless, Inc.\",\n\t[3]byte{0, 4, 217}:     \"Titan Electronics, Inc.\",\n\t[3]byte{0, 4, 218}:     \"Relax Technology, Inc.\",\n\t[3]byte{0, 4, 219}:     \"Tellus Group Corp.\",\n\t[3]byte{0, 4, 220}:     \"Nortel Networks\",\n\t[3]byte{0, 4, 221}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 4, 222}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 4, 223}:     \"TERACOM TELEMATICA S.A\",\n\t[3]byte{0, 4, 224}:     \"Procket Networks\",\n\t[3]byte{0, 4, 225}:     \"Infinior Microsystems\",\n\t[3]byte{0, 4, 226}:     \"SMC Networks, Inc.\",\n\t[3]byte{0, 4, 227}:     \"Accton Technology Corp\",\n\t[3]byte{0, 4, 228}:     \"Daeryung Ind., Inc.\",\n\t[3]byte{0, 4, 229}:     \"Glonet Systems, Inc.\",\n\t[3]byte{0, 4, 230}:     \"Banyan Network Private Limited\",\n\t[3]byte{0, 4, 231}:     \"Lightpointe Communications, Inc\",\n\t[3]byte{0, 4, 232}:     \"IER, Inc.\",\n\t[3]byte{0, 4, 233}:     \"Infiniswitch Corporation\",\n\t[3]byte{0, 4, 234}:     \"Hewlett Packard\",\n\t[3]byte{0, 4, 235}:     \"Paxonet Communications, Inc.\",\n\t[3]byte{0, 4, 236}:     \"Memobox SA\",\n\t[3]byte{0, 4, 237}:     \"Billion Electric Co., Ltd.\",\n\t[3]byte{0, 4, 238}:     \"Lincoln Electric Company\",\n\t[3]byte{0, 4, 239}:     \"Polestar Corp.\",\n\t[3]byte{0, 4, 240}:     \"International Computers, Ltd\",\n\t[3]byte{0, 4, 241}:     \"WhereNet\",\n\t[3]byte{0, 4, 242}:     \"Polycom\",\n\t[3]byte{0, 4, 243}:     \"FS FORTH-SYSTEME GmbH\",\n\t[3]byte{0, 4, 244}:     \"Infinite Electronics Inc.\",\n\t[3]byte{0, 4, 245}:     \"SnowShore Networks, Inc.\",\n\t[3]byte{0, 4, 246}:     \"Amphus\",\n\t[3]byte{0, 4, 247}:     \"Omega Band, Inc.\",\n\t[3]byte{0, 4, 248}:     \"QUALICABLE TV Industria E Com., Ltda\",\n\t[3]byte{0, 4, 249}:     \"Xtera Communications, Inc.\",\n\t[3]byte{0, 4, 250}:     \"NBS Technologies Inc.\",\n\t[3]byte{0, 4, 251}:     \"Commtech, Inc.\",\n\t[3]byte{0, 4, 252}:     \"Stratus Technologies\",\n\t[3]byte{0, 4, 253}:     \"Japan Control Engineering Co., Ltd.\",\n\t[3]byte{0, 4, 254}:     \"Pelago Networks\",\n\t[3]byte{0, 4, 255}:     \"Acronet Co., Ltd.\",\n\t[3]byte{0, 5, 0}:       \"Cisco Systems, Inc\",\n\t[3]byte{0, 5, 1}:       \"Cisco Systems, Inc\",\n\t[3]byte{0, 5, 2}:       \"Apple, Inc.\",\n\t[3]byte{0, 5, 3}:       \"ICONAG\",\n\t[3]byte{0, 5, 4}:       \"Naray Information & Communication Enterprise\",\n\t[3]byte{0, 5, 5}:       \"Systems Integration Solutions, Inc.\",\n\t[3]byte{0, 5, 6}:       \"Reddo Networks AB\",\n\t[3]byte{0, 5, 7}:       \"Fine Appliance Corp.\",\n\t[3]byte{0, 5, 8}:       \"Inetcam, Inc.\",\n\t[3]byte{0, 5, 9}:       \"AVOC Nishimura Ltd.\",\n\t[3]byte{0, 5, 10}:      \"ICS Spa\",\n\t[3]byte{0, 5, 11}:      \"SICOM Systems, Inc.\",\n\t[3]byte{0, 5, 12}:      \"Network Photonics, Inc.\",\n\t[3]byte{0, 5, 13}:      \"Midstream Technologies, Inc.\",\n\t[3]byte{0, 5, 14}:      \"3ware, Inc.\",\n\t[3]byte{0, 5, 15}:      \"Tanaka S/S Ltd.\",\n\t[3]byte{0, 5, 16}:      \"Infinite Shanghai Communication Terminals Ltd.\",\n\t[3]byte{0, 5, 17}:      \"Complementary Technologies Ltd\",\n\t[3]byte{0, 5, 18}:      \"Zebra Technologies Inc\",\n\t[3]byte{0, 5, 19}:      \"VTLinx Multimedia Systems, Inc.\",\n\t[3]byte{0, 5, 20}:      \"KDT Systems Co., Ltd.\",\n\t[3]byte{0, 5, 21}:      \"Nuark Co., Ltd.\",\n\t[3]byte{0, 5, 22}:      \"SMART Modular Technologies\",\n\t[3]byte{0, 5, 23}:      \"Shellcomm, Inc.\",\n\t[3]byte{0, 5, 24}:      \"Jupiters Technology\",\n\t[3]byte{0, 5, 25}:      \"Siemens Building Technologies AG,\",\n\t[3]byte{0, 5, 26}:      \"3COM EUROPE LTD\",\n\t[3]byte{0, 5, 27}:      \"Magic Control Technology Corporation\",\n\t[3]byte{0, 5, 28}:      \"Xnet Technology Corp.\",\n\t[3]byte{0, 5, 29}:      \"Airocon, Inc.\",\n\t[3]byte{0, 5, 30}:      \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 5, 31}:      \"Taijin Media Co., Ltd.\",\n\t[3]byte{0, 5, 32}:      \"Smartronix, Inc.\",\n\t[3]byte{0, 5, 33}:      \"Control Microsystems\",\n\t[3]byte{0, 5, 34}:      \"LEA*D Corporation, Inc.\",\n\t[3]byte{0, 5, 35}:      \"AVL List GmbH\",\n\t[3]byte{0, 5, 36}:      \"BTL System (HK) Limited\",\n\t[3]byte{0, 5, 37}:      \"Puretek Industrial Co., Ltd.\",\n\t[3]byte{0, 5, 38}:      \"IPAS GmbH\",\n\t[3]byte{0, 5, 39}:      \"SJ Tek Co. Ltd\",\n\t[3]byte{0, 5, 40}:      \"New Focus, Inc.\",\n\t[3]byte{0, 5, 41}:      \"Shanghai Broadan Communication Technology Co., Ltd\",\n\t[3]byte{0, 5, 42}:      \"Ikegami Tsushinki Co., Ltd.\",\n\t[3]byte{0, 5, 43}:      \"HORIBA, Ltd.\",\n\t[3]byte{0, 5, 44}:      \"Supreme Magic Corporation\",\n\t[3]byte{0, 5, 45}:      \"Zoltrix International Limited\",\n\t[3]byte{0, 5, 46}:      \"Cinta Networks\",\n\t[3]byte{0, 5, 47}:      \"Leviton Network Solutions\",\n\t[3]byte{0, 5, 48}:      \"Andiamo Systems, Inc.\",\n\t[3]byte{0, 5, 49}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 5, 50}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 5, 51}:      \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 5, 52}:      \"Northstar Engineering Ltd.\",\n\t[3]byte{0, 5, 53}:      \"Chip PC Ltd.\",\n\t[3]byte{0, 5, 54}:      \"Danam Communications, Inc.\",\n\t[3]byte{0, 5, 55}:      \"Nets Technology Co., Ltd.\",\n\t[3]byte{0, 5, 56}:      \"Merilus, Inc.\",\n\t[3]byte{0, 5, 57}:      \"A Brand New World in Sweden AB\",\n\t[3]byte{0, 5, 58}:      \"Willowglen Services Pte Ltd\",\n\t[3]byte{0, 5, 59}:      \"Harbour Networks Ltd., Co. Beijing\",\n\t[3]byte{0, 5, 60}:      \"XIRCOM\",\n\t[3]byte{0, 5, 61}:      \"Agere Systems\",\n\t[3]byte{0, 5, 62}:      \"KID Systeme GmbH\",\n\t[3]byte{0, 5, 63}:      \"VisionTek, Inc.\",\n\t[3]byte{0, 5, 64}:      \"FAST Corporation\",\n\t[3]byte{0, 5, 65}:      \"Advanced Systems Co., Ltd.\",\n\t[3]byte{0, 5, 66}:      \"Otari, Inc.\",\n\t[3]byte{0, 5, 67}:      \"IQ Wireless GmbH\",\n\t[3]byte{0, 5, 68}:      \"Valley Technologies, Inc.\",\n\t[3]byte{0, 5, 69}:      \"Internet Photonics\",\n\t[3]byte{0, 5, 70}:      \"KDDI Network & Solultions Inc.\",\n\t[3]byte{0, 5, 71}:      \"Starent Networks\",\n\t[3]byte{0, 5, 72}:      \"Disco Corporation\",\n\t[3]byte{0, 5, 73}:      \"Salira Optical Network Systems\",\n\t[3]byte{0, 5, 74}:      \"Ario Data Networks, Inc.\",\n\t[3]byte{0, 5, 75}:      \"Eaton Automation AG\",\n\t[3]byte{0, 5, 76}:      \"RF Innovations Pty Ltd\",\n\t[3]byte{0, 5, 77}:      \"Brans Technologies, Inc.\",\n\t[3]byte{0, 5, 78}:      \"Philips\",\n\t[3]byte{0, 5, 79}:      \"Garmin International\",\n\t[3]byte{0, 5, 80}:      \"Vcomms Connect Limited\",\n\t[3]byte{0, 5, 81}:      \"F & S Elektronik Systeme GmbH\",\n\t[3]byte{0, 5, 82}:      \"Xycotec Computer GmbH\",\n\t[3]byte{0, 5, 83}:      \"DVC Company, Inc.\",\n\t[3]byte{0, 5, 84}:      \"Rangestar Wireless\",\n\t[3]byte{0, 5, 85}:      \"Japan Cash Machine Co., Ltd.\",\n\t[3]byte{0, 5, 86}:      \"360 Systems\",\n\t[3]byte{0, 5, 87}:      \"Agile TV Corporation\",\n\t[3]byte{0, 5, 88}:      \"Synchronous, Inc.\",\n\t[3]byte{0, 5, 89}:      \"Intracom S.A.\",\n\t[3]byte{0, 5, 90}:      \"Power Dsine Ltd.\",\n\t[3]byte{0, 5, 91}:      \"Charles Industries, Ltd.\",\n\t[3]byte{0, 5, 92}:      \"Kowa Company, Ltd.\",\n\t[3]byte{0, 5, 93}:      \"D-LINK SYSTEMS, INC.\",\n\t[3]byte{0, 5, 94}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 5, 95}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 5, 96}:      \"LEADER COMM.CO., LTD\",\n\t[3]byte{0, 5, 97}:      \"nac Image Technology, Inc.\",\n\t[3]byte{0, 5, 98}:      \"Digital View Limited\",\n\t[3]byte{0, 5, 99}:      \"J-Works, Inc.\",\n\t[3]byte{0, 5, 100}:     \"Tsinghua Bitway Co., Ltd.\",\n\t[3]byte{0, 5, 101}:     \"Tailyn Communication Company Ltd.\",\n\t[3]byte{0, 5, 102}:     \"Secui.com Corporation\",\n\t[3]byte{0, 5, 103}:     \"Etymonic Design, Inc.\",\n\t[3]byte{0, 5, 104}:     \"Piltofish Networks AB\",\n\t[3]byte{0, 5, 105}:     \"VMware, Inc.\",\n\t[3]byte{0, 5, 106}:     \"Heuft Systemtechnik GmbH\",\n\t[3]byte{0, 5, 107}:     \"C.P. Technology Co., Ltd.\",\n\t[3]byte{0, 5, 108}:     \"Hung Chang Co., Ltd.\",\n\t[3]byte{0, 5, 109}:     \"Pacific Corporation\",\n\t[3]byte{0, 5, 110}:     \"National Enhance Technology, Inc.\",\n\t[3]byte{0, 5, 111}:     \"Innomedia Technologies Pvt. Ltd.\",\n\t[3]byte{0, 5, 112}:     \"Baydel Ltd.\",\n\t[3]byte{0, 5, 113}:     \"Seiwa Electronics Co.\",\n\t[3]byte{0, 5, 114}:     \"Deonet Co., Ltd.\",\n\t[3]byte{0, 5, 115}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 5, 116}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 5, 117}:     \"CDS-Electronics BV\",\n\t[3]byte{0, 5, 118}:     \"NSM Technology Ltd.\",\n\t[3]byte{0, 5, 119}:     \"SM Information & Communication\",\n\t[3]byte{0, 5, 120}:     \"Private\",\n\t[3]byte{0, 5, 121}:     \"Universal Control Solution Corp.\",\n\t[3]byte{0, 5, 122}:     \"Overture Networks\",\n\t[3]byte{0, 5, 123}:     \"Chung Nam Electronic Co., Ltd.\",\n\t[3]byte{0, 5, 124}:     \"RCO Security AB\",\n\t[3]byte{0, 5, 125}:     \"Sun Communications, Inc.\",\n\t[3]byte{0, 5, 126}:     \"Eckelmann Steuerungstechnik GmbH\",\n\t[3]byte{0, 5, 127}:     \"Acqis Technology\",\n\t[3]byte{0, 5, 128}:     \"FibroLAN Ltd.\",\n\t[3]byte{0, 5, 129}:     \"Snell\",\n\t[3]byte{0, 5, 130}:     \"ClearCube Technology\",\n\t[3]byte{0, 5, 131}:     \"ImageCom Limited\",\n\t[3]byte{0, 5, 132}:     \"AbsoluteValue Systems, Inc.\",\n\t[3]byte{0, 5, 133}:     \"Juniper Networks\",\n\t[3]byte{0, 5, 134}:     \"Lucent Technologies\",\n\t[3]byte{0, 5, 135}:     \"Locus, Incorporated\",\n\t[3]byte{0, 5, 136}:     \"Sensoria Corp.\",\n\t[3]byte{0, 5, 137}:     \"National Datacomputer\",\n\t[3]byte{0, 5, 138}:     \"Netcom Co., Ltd.\",\n\t[3]byte{0, 5, 139}:     \"IPmental, Inc.\",\n\t[3]byte{0, 5, 140}:     \"Opentech Inc.\",\n\t[3]byte{0, 5, 141}:     \"Lynx Photonic Networks, Inc.\",\n\t[3]byte{0, 5, 142}:     \"Flextronics International GmbH & Co. Nfg. KG\",\n\t[3]byte{0, 5, 143}:     \"CLCsoft co.\",\n\t[3]byte{0, 5, 144}:     \"Swissvoice Ltd.\",\n\t[3]byte{0, 5, 145}:     \"Active Silicon Ltd\",\n\t[3]byte{0, 5, 146}:     \"Pultek Corp.\",\n\t[3]byte{0, 5, 147}:     \"Grammar Engine Inc.\",\n\t[3]byte{0, 5, 148}:     \"HMS Industrial Networks\",\n\t[3]byte{0, 5, 149}:     \"Alesis Corporation\",\n\t[3]byte{0, 5, 150}:     \"Genotech Co., Ltd.\",\n\t[3]byte{0, 5, 151}:     \"Eagle Traffic Control Systems\",\n\t[3]byte{0, 5, 152}:     \"CRONOS S.r.l.\",\n\t[3]byte{0, 5, 153}:     \"DRS Test and Energy Management or DRS-TEM\",\n\t[3]byte{0, 5, 154}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 5, 155}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 5, 156}:     \"Kleinknecht GmbH, Ing. Büro\",\n\t[3]byte{0, 5, 157}:     \"Daniel Computing Systems, Inc.\",\n\t[3]byte{0, 5, 158}:     \"Zinwell Corporation\",\n\t[3]byte{0, 5, 159}:     \"Yotta Networks, Inc.\",\n\t[3]byte{0, 5, 160}:     \"MOBILINE Kft.\",\n\t[3]byte{0, 5, 161}:     \"Zenocom\",\n\t[3]byte{0, 5, 162}:     \"CELOX Networks\",\n\t[3]byte{0, 5, 163}:     \"QEI, Inc.\",\n\t[3]byte{0, 5, 164}:     \"Lucid Voice Ltd.\",\n\t[3]byte{0, 5, 165}:     \"KOTT\",\n\t[3]byte{0, 5, 166}:     \"Extron Electronics\",\n\t[3]byte{0, 5, 167}:     \"HYPERCHIP Inc.\",\n\t[3]byte{0, 5, 168}:     \"WYLE ELECTRONICS\",\n\t[3]byte{0, 5, 169}:     \"Princeton Networks, Inc.\",\n\t[3]byte{0, 5, 170}:     \"Moore Industries International Inc.\",\n\t[3]byte{0, 5, 171}:     \"Cyber Fone, Inc.\",\n\t[3]byte{0, 5, 172}:     \"Northern Digital, Inc.\",\n\t[3]byte{0, 5, 173}:     \"Topspin Communications, Inc.\",\n\t[3]byte{0, 5, 174}:     \"Mediaport USA\",\n\t[3]byte{0, 5, 175}:     \"InnoScan Computing A/S\",\n\t[3]byte{0, 5, 176}:     \"Korea Computer Technology Co., Ltd.\",\n\t[3]byte{0, 5, 177}:     \"ASB Technology BV\",\n\t[3]byte{0, 5, 178}:     \"Medison Co., Ltd.\",\n\t[3]byte{0, 5, 179}:     \"Asahi-Engineering Co., Ltd.\",\n\t[3]byte{0, 5, 180}:     \"Aceex Corporation\",\n\t[3]byte{0, 5, 181}:     \"Broadcom Technologies\",\n\t[3]byte{0, 5, 182}:     \"INSYS Microelectronics GmbH\",\n\t[3]byte{0, 5, 183}:     \"Arbor Technology Corp.\",\n\t[3]byte{0, 5, 184}:     \"Electronic Design Associates, Inc.\",\n\t[3]byte{0, 5, 185}:     \"Airvana, Inc.\",\n\t[3]byte{0, 5, 186}:     \"Area Netwoeks, Inc.\",\n\t[3]byte{0, 5, 187}:     \"Myspace AB\",\n\t[3]byte{0, 5, 188}:     \"Resource Data Management Ltd\",\n\t[3]byte{0, 5, 189}:     \"ROAX BV\",\n\t[3]byte{0, 5, 190}:     \"Kongsberg Seatex AS\",\n\t[3]byte{0, 5, 191}:     \"JustEzy Technology, Inc.\",\n\t[3]byte{0, 5, 192}:     \"Digital Network Alacarte Co., Ltd.\",\n\t[3]byte{0, 5, 193}:     \"A-Kyung Motion, Inc.\",\n\t[3]byte{0, 5, 194}:     \"Soronti, Inc.\",\n\t[3]byte{0, 5, 195}:     \"Pacific Instruments, Inc.\",\n\t[3]byte{0, 5, 196}:     \"Telect, Inc.\",\n\t[3]byte{0, 5, 197}:     \"Flaga HF\",\n\t[3]byte{0, 5, 198}:     \"Triz Communications\",\n\t[3]byte{0, 5, 199}:     \"I/F-COM A/S\",\n\t[3]byte{0, 5, 200}:     \"VERYTECH\",\n\t[3]byte{0, 5, 201}:     \"LG Innotek\",\n\t[3]byte{0, 5, 202}:     \"Hitron Technology, Inc.\",\n\t[3]byte{0, 5, 203}:     \"ROIS Technologies, Inc.\",\n\t[3]byte{0, 5, 204}:     \"Sumtel Communications, Inc.\",\n\t[3]byte{0, 5, 205}:     \"D&M Holdings Inc.\",\n\t[3]byte{0, 5, 206}:     \"Prolink Microsystems Corporation\",\n\t[3]byte{0, 5, 207}:     \"Thunder River Technologies, Inc.\",\n\t[3]byte{0, 5, 208}:     \"Solinet Systems\",\n\t[3]byte{0, 5, 209}:     \"Metavector Technologies\",\n\t[3]byte{0, 5, 210}:     \"DAP Technologies\",\n\t[3]byte{0, 5, 211}:     \"eProduction Solutions, Inc.\",\n\t[3]byte{0, 5, 212}:     \"FutureSmart Networks, Inc.\",\n\t[3]byte{0, 5, 213}:     \"Speedcom Wireless\",\n\t[3]byte{0, 5, 214}:     \"L-3 Linkabit\",\n\t[3]byte{0, 5, 215}:     \"Vista Imaging, Inc.\",\n\t[3]byte{0, 5, 216}:     \"Arescom, Inc.\",\n\t[3]byte{0, 5, 217}:     \"Techno Valley, Inc.\",\n\t[3]byte{0, 5, 218}:     \"Apex Automationstechnik\",\n\t[3]byte{0, 5, 219}:     \"PSI Nentec GmbH\",\n\t[3]byte{0, 5, 220}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 5, 221}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 5, 222}:     \"Gi Fone Korea, Inc.\",\n\t[3]byte{0, 5, 223}:     \"Electronic Innovation, Inc.\",\n\t[3]byte{0, 5, 224}:     \"Empirix Corp.\",\n\t[3]byte{0, 5, 225}:     \"Trellis Photonics, Ltd.\",\n\t[3]byte{0, 5, 226}:     \"Creativ Network Technologies\",\n\t[3]byte{0, 5, 227}:     \"LightSand Communications, Inc.\",\n\t[3]byte{0, 5, 228}:     \"Red Lion Controls Inc.\",\n\t[3]byte{0, 5, 229}:     \"Renishaw PLC\",\n\t[3]byte{0, 5, 230}:     \"Egenera, Inc.\",\n\t[3]byte{0, 5, 231}:     \"Netrake an AudioCodes Company\",\n\t[3]byte{0, 5, 232}:     \"TurboWave, Inc.\",\n\t[3]byte{0, 5, 233}:     \"Unicess Network, Inc.\",\n\t[3]byte{0, 5, 234}:     \"Rednix\",\n\t[3]byte{0, 5, 235}:     \"Blue Ridge Networks, Inc.\",\n\t[3]byte{0, 5, 236}:     \"Mosaic Systems Inc.\",\n\t[3]byte{0, 5, 237}:     \"Technikum Joanneum GmbH\",\n\t[3]byte{0, 5, 238}:     \"Vanderbilt International (SWE) AB \",\n\t[3]byte{0, 5, 239}:     \"ADOIR Digital Technology\",\n\t[3]byte{0, 5, 240}:     \"SATEC\",\n\t[3]byte{0, 5, 241}:     \"Vrcom, Inc.\",\n\t[3]byte{0, 5, 242}:     \"Power R, Inc.\",\n\t[3]byte{0, 5, 243}:     \"Webyn\",\n\t[3]byte{0, 5, 244}:     \"System Base Co., Ltd.\",\n\t[3]byte{0, 5, 245}:     \"Geospace Technologies\",\n\t[3]byte{0, 5, 246}:     \"Young Chang Co. Ltd.\",\n\t[3]byte{0, 5, 247}:     \"Analog Devices, Inc.\",\n\t[3]byte{0, 5, 248}:     \"Real Time Access, Inc.\",\n\t[3]byte{0, 5, 249}:     \"TOA Corporation\",\n\t[3]byte{0, 5, 250}:     \"IPOptical, Inc.\",\n\t[3]byte{0, 5, 251}:     \"ShareGate, Inc.\",\n\t[3]byte{0, 5, 252}:     \"Schenck Pegasus Corp.\",\n\t[3]byte{0, 5, 253}:     \"PacketLight Networks Ltd.\",\n\t[3]byte{0, 5, 254}:     \"Traficon N.V.\",\n\t[3]byte{0, 5, 255}:     \"SNS Solutions, Inc.\",\n\t[3]byte{0, 6, 0}:       \"Toshiba Teli Corporation\",\n\t[3]byte{0, 6, 1}:       \"Otanikeiki Co., Ltd.\",\n\t[3]byte{0, 6, 2}:       \"Cirkitech Electronics Co.\",\n\t[3]byte{0, 6, 3}:       \"Baker Hughes Inc.\",\n\t[3]byte{0, 6, 4}:       \"@Track Communications, Inc.\",\n\t[3]byte{0, 6, 5}:       \"Inncom International, Inc.\",\n\t[3]byte{0, 6, 6}:       \"RapidWAN, Inc.\",\n\t[3]byte{0, 6, 7}:       \"Omni Directional Control Technology Inc.\",\n\t[3]byte{0, 6, 8}:       \"At-Sky SAS\",\n\t[3]byte{0, 6, 9}:       \"Crossport Systems\",\n\t[3]byte{0, 6, 10}:      \"Blue2space\",\n\t[3]byte{0, 6, 11}:      \"Artesyn Embedded Technologies\",\n\t[3]byte{0, 6, 12}:      \"Melco Industries, Inc.\",\n\t[3]byte{0, 6, 13}:      \"Wave7 Optics\",\n\t[3]byte{0, 6, 14}:      \"IGYS Systems, Inc.\",\n\t[3]byte{0, 6, 15}:      \"Narad Networks Inc\",\n\t[3]byte{0, 6, 16}:      \"Abeona Networks Inc\",\n\t[3]byte{0, 6, 17}:      \"Zeus Wireless, Inc.\",\n\t[3]byte{0, 6, 18}:      \"Accusys, Inc.\",\n\t[3]byte{0, 6, 19}:      \"Kawasaki Microelectronics Incorporated\",\n\t[3]byte{0, 6, 20}:      \"Prism Holdings\",\n\t[3]byte{0, 6, 21}:      \"Kimoto Electric Co., Ltd.\",\n\t[3]byte{0, 6, 22}:      \"Tel Net Co., Ltd.\",\n\t[3]byte{0, 6, 23}:      \"Redswitch Inc.\",\n\t[3]byte{0, 6, 24}:      \"DigiPower Manufacturing Inc.\",\n\t[3]byte{0, 6, 25}:      \"Connection Technology Systems\",\n\t[3]byte{0, 6, 26}:      \"Zetari Inc.\",\n\t[3]byte{0, 6, 27}:      \"Notebook Development Lab.  Lenovo Japan Ltd.\",\n\t[3]byte{0, 6, 28}:      \"Hoshino Metal Industries, Ltd.\",\n\t[3]byte{0, 6, 29}:      \"MIP Telecom, Inc.\",\n\t[3]byte{0, 6, 30}:      \"Maxan Systems\",\n\t[3]byte{0, 6, 31}:      \"Vision Components GmbH\",\n\t[3]byte{0, 6, 32}:      \"Serial System Ltd.\",\n\t[3]byte{0, 6, 33}:      \"Hinox, Co., Ltd.\",\n\t[3]byte{0, 6, 34}:      \"Chung Fu Chen Yeh Enterprise Corp.\",\n\t[3]byte{0, 6, 35}:      \"MGE UPS Systems France\",\n\t[3]byte{0, 6, 36}:      \"Gentner Communications Corp.\",\n\t[3]byte{0, 6, 37}:      \"The Linksys Group, Inc.\",\n\t[3]byte{0, 6, 38}:      \"MWE GmbH\",\n\t[3]byte{0, 6, 39}:      \"Uniwide Technologies, Inc.\",\n\t[3]byte{0, 6, 40}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 6, 41}:      \"IBM Corp\",\n\t[3]byte{0, 6, 42}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 6, 43}:      \"INTRASERVER TECHNOLOGY\",\n\t[3]byte{0, 6, 44}:      \"Bivio Networks\",\n\t[3]byte{0, 6, 45}:      \"TouchStar Technologies, L.L.C.\",\n\t[3]byte{0, 6, 46}:      \"Aristos Logic Corp.\",\n\t[3]byte{0, 6, 47}:      \"Pivotech Systems Inc.\",\n\t[3]byte{0, 6, 48}:      \"Adtranz Sweden\",\n\t[3]byte{0, 6, 49}:      \"Calix Inc.\",\n\t[3]byte{0, 6, 50}:      \"Mesco Engineering GmbH\",\n\t[3]byte{0, 6, 51}:      \"Cross Match Technologies GmbH\",\n\t[3]byte{0, 6, 52}:      \"GTE Airfone Inc.\",\n\t[3]byte{0, 6, 53}:      \"PacketAir Networks, Inc.\",\n\t[3]byte{0, 6, 54}:      \"Jedai Broadband Networks\",\n\t[3]byte{0, 6, 55}:      \"Toptrend-Meta Information (ShenZhen) Inc.\",\n\t[3]byte{0, 6, 56}:      \"Sungjin C&C Co., Ltd.\",\n\t[3]byte{0, 6, 57}:      \"Newtec\",\n\t[3]byte{0, 6, 58}:      \"Dura Micro, Inc.\",\n\t[3]byte{0, 6, 59}:      \"Arcturus Networks Inc.\",\n\t[3]byte{0, 6, 60}:      \"Intrinsyc Software International Inc.\",\n\t[3]byte{0, 6, 61}:      \"Microwave Data Systems Inc.\",\n\t[3]byte{0, 6, 62}:      \"Opthos Inc.\",\n\t[3]byte{0, 6, 63}:      \"Everex Communications Inc.\",\n\t[3]byte{0, 6, 64}:      \"White Rock Networks\",\n\t[3]byte{0, 6, 65}:      \"ITCN\",\n\t[3]byte{0, 6, 66}:      \"Genetel Systems Inc.\",\n\t[3]byte{0, 6, 67}:      \"SONO Computer Co., Ltd.\",\n\t[3]byte{0, 6, 68}:      \"NextGen Business Solutions, Inc\",\n\t[3]byte{0, 6, 69}:      \"Meisei Electric Co. Ltd.\",\n\t[3]byte{0, 6, 70}:      \"ShenZhen XunBao Network Technology Co Ltd\",\n\t[3]byte{0, 6, 71}:      \"Etrali S.A.\",\n\t[3]byte{0, 6, 72}:      \"Seedsware, Inc.\",\n\t[3]byte{0, 6, 73}:      \"3M Deutschland GmbH\",\n\t[3]byte{0, 6, 74}:      \"Honeywell Co., Ltd. (KOREA)\",\n\t[3]byte{0, 6, 75}:      \"Alexon Co., Ltd.\",\n\t[3]byte{0, 6, 76}:      \"Invicta Networks, Inc.\",\n\t[3]byte{0, 6, 77}:      \"Sencore\",\n\t[3]byte{0, 6, 78}:      \"Broad Net Technology Inc.\",\n\t[3]byte{0, 6, 79}:      \"PRO-NETS Technology Corporation\",\n\t[3]byte{0, 6, 80}:      \"Tiburon Networks, Inc.\",\n\t[3]byte{0, 6, 81}:      \"Aspen Networks Inc.\",\n\t[3]byte{0, 6, 82}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 6, 83}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 6, 84}:      \"Winpresa Building Automation Technologies GmbH\",\n\t[3]byte{0, 6, 85}:      \"Yipee, Inc.\",\n\t[3]byte{0, 6, 86}:      \"Tactel AB\",\n\t[3]byte{0, 6, 87}:      \"Market Central, Inc.\",\n\t[3]byte{0, 6, 88}:      \"Helmut Fischer GmbH Institut für Elektronik und Messtechnik\",\n\t[3]byte{0, 6, 89}:      \"EAL (Apeldoorn) B.V.\",\n\t[3]byte{0, 6, 90}:      \"Strix Systems\",\n\t[3]byte{0, 6, 91}:      \"Dell Inc.\",\n\t[3]byte{0, 6, 92}:      \"Malachite Technologies, Inc.\",\n\t[3]byte{0, 6, 93}:      \"Heidelberg Web Systems\",\n\t[3]byte{0, 6, 94}:      \"Photuris, Inc.\",\n\t[3]byte{0, 6, 95}:      \"ECI Telecom Ltd.\",\n\t[3]byte{0, 6, 96}:      \"NADEX Co., Ltd.\",\n\t[3]byte{0, 6, 97}:      \"NIA Home Technologies Corp.\",\n\t[3]byte{0, 6, 98}:      \"MBM Technology Ltd.\",\n\t[3]byte{0, 6, 99}:      \"Human Technology Co., Ltd.\",\n\t[3]byte{0, 6, 100}:     \"Fostex Corporation\",\n\t[3]byte{0, 6, 101}:     \"Sunny Giken, Inc.\",\n\t[3]byte{0, 6, 102}:     \"Roving Networks\",\n\t[3]byte{0, 6, 103}:     \"Tripp Lite\",\n\t[3]byte{0, 6, 104}:     \"Vicon Industries Inc.\",\n\t[3]byte{0, 6, 105}:     \"Datasound Laboratories Ltd\",\n\t[3]byte{0, 6, 106}:     \"InfiniCon Systems, Inc.\",\n\t[3]byte{0, 6, 107}:     \"Sysmex Corporation\",\n\t[3]byte{0, 6, 108}:     \"Robinson Corporation\",\n\t[3]byte{0, 6, 109}:     \"Compuprint S.P.A.\",\n\t[3]byte{0, 6, 110}:     \"Delta Electronics, Inc.\",\n\t[3]byte{0, 6, 111}:     \"Korea Data Systems\",\n\t[3]byte{0, 6, 112}:     \"Upponetti Oy\",\n\t[3]byte{0, 6, 113}:     \"Softing AG\",\n\t[3]byte{0, 6, 114}:     \"Netezza\",\n\t[3]byte{0, 6, 115}:     \"TKH Security Solutions USA\",\n\t[3]byte{0, 6, 116}:     \"Spectrum Control, Inc.\",\n\t[3]byte{0, 6, 117}:     \"Banderacom, Inc.\",\n\t[3]byte{0, 6, 118}:     \"Novra Technologies Inc.\",\n\t[3]byte{0, 6, 119}:     \"SICK AG\",\n\t[3]byte{0, 6, 120}:     \"D&M Holdings Inc.\",\n\t[3]byte{0, 6, 121}:     \"Konami Corporation\",\n\t[3]byte{0, 6, 122}:     \"JMP Systems\",\n\t[3]byte{0, 6, 123}:     \"Toplink C&C Corporation\",\n\t[3]byte{0, 6, 124}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 6, 125}:     \"Takasago Ltd.\",\n\t[3]byte{0, 6, 126}:     \"WinCom Systems, Inc.\",\n\t[3]byte{0, 6, 127}:     \"Digeo, Inc.\",\n\t[3]byte{0, 6, 128}:     \"Card Access, Inc.\",\n\t[3]byte{0, 6, 129}:     \"Goepel Electronic GmbH\",\n\t[3]byte{0, 6, 130}:     \"Convedia\",\n\t[3]byte{0, 6, 131}:     \"Bravara Communications, Inc.\",\n\t[3]byte{0, 6, 132}:     \"Biacore AB\",\n\t[3]byte{0, 6, 133}:     \"NetNearU Corporation\",\n\t[3]byte{0, 6, 134}:     \"ZARDCOM Co., Ltd.\",\n\t[3]byte{0, 6, 135}:     \"Omnitron Systems Technology, Inc.\",\n\t[3]byte{0, 6, 136}:     \"Telways Communication Co., Ltd.\",\n\t[3]byte{0, 6, 137}:     \"yLez Technologies Pte Ltd\",\n\t[3]byte{0, 6, 138}:     \"NeuronNet Co. Ltd. R&D Center\",\n\t[3]byte{0, 6, 139}:     \"AirRunner Technologies, Inc.\",\n\t[3]byte{0, 6, 140}:     \"3COM\",\n\t[3]byte{0, 6, 141}:     \"SEPATON, Inc.\",\n\t[3]byte{0, 6, 142}:     \"HID Corporation\",\n\t[3]byte{0, 6, 143}:     \"Telemonitor, Inc.\",\n\t[3]byte{0, 6, 144}:     \"Euracom Communication GmbH\",\n\t[3]byte{0, 6, 145}:     \"PT Inovacao\",\n\t[3]byte{0, 6, 146}:     \"Intruvert Networks, Inc.\",\n\t[3]byte{0, 6, 147}:     \"Flexus Computer Technology, Inc.\",\n\t[3]byte{0, 6, 148}:     \"Mobillian Corporation\",\n\t[3]byte{0, 6, 149}:     \"Ensure Technologies, Inc.\",\n\t[3]byte{0, 6, 150}:     \"Advent Networks\",\n\t[3]byte{0, 6, 151}:     \"R & D Center\",\n\t[3]byte{0, 6, 152}:     \"egnite GmbH\",\n\t[3]byte{0, 6, 153}:     \"Vida Design Co.\",\n\t[3]byte{0, 6, 154}:     \"e & Tel\",\n\t[3]byte{0, 6, 155}:     \"AVT Audio Video Technologies GmbH\",\n\t[3]byte{0, 6, 156}:     \"Transmode Systems AB\",\n\t[3]byte{0, 6, 157}:     \"Petards Ltd\",\n\t[3]byte{0, 6, 158}:     \"UNIQA, Inc.\",\n\t[3]byte{0, 6, 159}:     \"Kuokoa Networks\",\n\t[3]byte{0, 6, 160}:     \"Mx Imaging\",\n\t[3]byte{0, 6, 161}:     \"Celsian Technologies, Inc.\",\n\t[3]byte{0, 6, 162}:     \"Microtune, Inc.\",\n\t[3]byte{0, 6, 163}:     \"Bitran Corporation\",\n\t[3]byte{0, 6, 164}:     \"INNOWELL Corp.\",\n\t[3]byte{0, 6, 165}:     \"PINON Corp.\",\n\t[3]byte{0, 6, 166}:     \"Artistic Licence Engineering Ltd\",\n\t[3]byte{0, 6, 167}:     \"Primarion\",\n\t[3]byte{0, 6, 168}:     \"KC Technology, Inc.\",\n\t[3]byte{0, 6, 169}:     \"Universal Instruments Corp.\",\n\t[3]byte{0, 6, 170}:     \"VT Miltope\",\n\t[3]byte{0, 6, 171}:     \"W-Link Systems, Inc.\",\n\t[3]byte{0, 6, 172}:     \"Intersoft Co.\",\n\t[3]byte{0, 6, 173}:     \"KB Electronics Ltd.\",\n\t[3]byte{0, 6, 174}:     \"Himachal Futuristic Communications Ltd\",\n\t[3]byte{0, 6, 175}:     \"Xalted Networks\",\n\t[3]byte{0, 6, 176}:     \"Comtech EF Data Corp.\",\n\t[3]byte{0, 6, 177}:     \"Sonicwall\",\n\t[3]byte{0, 6, 178}:     \"Linxtek Co.\",\n\t[3]byte{0, 6, 179}:     \"Diagraph Corporation\",\n\t[3]byte{0, 6, 180}:     \"Vorne Industries, Inc.\",\n\t[3]byte{0, 6, 181}:     \"Source Photonics, Inc.\",\n\t[3]byte{0, 6, 182}:     \"Nir-Or Israel Ltd.\",\n\t[3]byte{0, 6, 183}:     \"TELEM GmbH\",\n\t[3]byte{0, 6, 184}:     \"Bandspeed Pty Ltd\",\n\t[3]byte{0, 6, 185}:     \"A5TEK Corp.\",\n\t[3]byte{0, 6, 186}:     \"Westwave Communications\",\n\t[3]byte{0, 6, 187}:     \"ATI Technologies Inc.\",\n\t[3]byte{0, 6, 188}:     \"Macrolink, Inc.\",\n\t[3]byte{0, 6, 189}:     \"BNTECHNOLOGY Co., Ltd.\",\n\t[3]byte{0, 6, 190}:     \"Baumer Optronic GmbH\",\n\t[3]byte{0, 6, 191}:     \"Accella Technologies Co., Ltd.\",\n\t[3]byte{0, 6, 192}:     \"United Internetworks, Inc.\",\n\t[3]byte{0, 6, 193}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 6, 194}:     \"Smartmatic Corporation\",\n\t[3]byte{0, 6, 195}:     \"Schindler Elevator Ltd.\",\n\t[3]byte{0, 6, 196}:     \"Piolink Inc.\",\n\t[3]byte{0, 6, 197}:     \"INNOVI Technologies Limited\",\n\t[3]byte{0, 6, 198}:     \"lesswire AG\",\n\t[3]byte{0, 6, 199}:     \"RFNET Technologies Pte Ltd (S)\",\n\t[3]byte{0, 6, 200}:     \"Sumitomo Metal Micro Devices, Inc.\",\n\t[3]byte{0, 6, 201}:     \"Technical Marketing Research, Inc.\",\n\t[3]byte{0, 6, 202}:     \"American Computer & Digital Components, Inc. (ACDC)\",\n\t[3]byte{0, 6, 203}:     \"Jotron Electronics A/S\",\n\t[3]byte{0, 6, 204}:     \"JMI Electronics Co., Ltd.\",\n\t[3]byte{0, 6, 205}:     \"Leaf Imaging Ltd.\",\n\t[3]byte{0, 6, 206}:     \"DATENO\",\n\t[3]byte{0, 6, 207}:     \"Thales Avionics In-Flight Systems, LLC\",\n\t[3]byte{0, 6, 208}:     \"Elgar Electronics Corp.\",\n\t[3]byte{0, 6, 209}:     \"Tahoe Networks, Inc.\",\n\t[3]byte{0, 6, 210}:     \"Tundra Semiconductor Corp.\",\n\t[3]byte{0, 6, 211}:     \"Alpha Telecom, Inc. U.S.A.\",\n\t[3]byte{0, 6, 212}:     \"Interactive Objects, Inc.\",\n\t[3]byte{0, 6, 213}:     \"Diamond Systems Corp.\",\n\t[3]byte{0, 6, 214}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 6, 215}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 6, 216}:     \"Maple Optical Systems\",\n\t[3]byte{0, 6, 217}:     \"IPM-Net S.p.A.\",\n\t[3]byte{0, 6, 218}:     \"ITRAN Communications Ltd.\",\n\t[3]byte{0, 6, 219}:     \"ICHIPS Co., Ltd.\",\n\t[3]byte{0, 6, 220}:     \"Syabas Technology (Amquest)\",\n\t[3]byte{0, 6, 221}:     \"AT & T Laboratories - Cambridge Ltd\",\n\t[3]byte{0, 6, 222}:     \"Flash Technology\",\n\t[3]byte{0, 6, 223}:     \"AIDONIC Corporation\",\n\t[3]byte{0, 6, 224}:     \"MAT Co., Ltd.\",\n\t[3]byte{0, 6, 225}:     \"Techno Trade s.a\",\n\t[3]byte{0, 6, 226}:     \"Ceemax Technology Co., Ltd.\",\n\t[3]byte{0, 6, 227}:     \"Quantitative Imaging Corporation\",\n\t[3]byte{0, 6, 228}:     \"Citel Technologies Ltd.\",\n\t[3]byte{0, 6, 229}:     \"Fujian Newland Computer Ltd. Co.\",\n\t[3]byte{0, 6, 230}:     \"DongYang Telecom Co., Ltd.\",\n\t[3]byte{0, 6, 231}:     \"Bit Blitz Communications Inc.\",\n\t[3]byte{0, 6, 232}:     \"Optical Network Testing, Inc.\",\n\t[3]byte{0, 6, 233}:     \"Intime Corp.\",\n\t[3]byte{0, 6, 234}:     \"ELZET80 Mikrocomputer GmbH&Co. KG\",\n\t[3]byte{0, 6, 235}:     \"Global Data\",\n\t[3]byte{0, 6, 236}:     \"Harris Corporation\",\n\t[3]byte{0, 6, 237}:     \"Inara Networks\",\n\t[3]byte{0, 6, 238}:     \"Shenyang Neu-era Information & Technology Stock Co., Ltd\",\n\t[3]byte{0, 6, 239}:     \"Maxxan Systems, Inc.\",\n\t[3]byte{0, 6, 240}:     \"Digeo, Inc.\",\n\t[3]byte{0, 6, 241}:     \"Optillion\",\n\t[3]byte{0, 6, 242}:     \"Platys Communications\",\n\t[3]byte{0, 6, 243}:     \"AcceLight Networks\",\n\t[3]byte{0, 6, 244}:     \"Prime Electronics & Satellitics Inc.\",\n\t[3]byte{0, 6, 245}:     \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{0, 6, 246}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 6, 247}:     \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{0, 6, 248}:     \"The Boeing Company\",\n\t[3]byte{0, 6, 249}:     \"Mitsui Zosen Systems Research Inc.\",\n\t[3]byte{0, 6, 250}:     \"IP SQUARE Co, Ltd.\",\n\t[3]byte{0, 6, 251}:     \"Hitachi Printing Solutions, Ltd.\",\n\t[3]byte{0, 6, 252}:     \"Fnet Co., Ltd.\",\n\t[3]byte{0, 6, 253}:     \"Comjet Information Systems Corp.\",\n\t[3]byte{0, 6, 254}:     \"Ambrado, Inc\",\n\t[3]byte{0, 6, 255}:     \"Sheba Systems Co., Ltd.\",\n\t[3]byte{0, 7, 0}:       \"Zettamedia Korea\",\n\t[3]byte{0, 7, 1}:       \"RACAL-DATACOM\",\n\t[3]byte{0, 7, 2}:       \"Varex Imaging\",\n\t[3]byte{0, 7, 3}:       \"CSEE Transport\",\n\t[3]byte{0, 7, 4}:       \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{0, 7, 5}:       \"Endress & Hauser GmbH & Co\",\n\t[3]byte{0, 7, 6}:       \"Sanritz Corporation\",\n\t[3]byte{0, 7, 7}:       \"Interalia Inc.\",\n\t[3]byte{0, 7, 8}:       \"Bitrage Inc.\",\n\t[3]byte{0, 7, 9}:       \"Westerstrand Urfabrik AB\",\n\t[3]byte{0, 7, 10}:      \"Unicom Automation Co., Ltd.\",\n\t[3]byte{0, 7, 11}:      \"Novabase SGPS, SA\",\n\t[3]byte{0, 7, 12}:      \"SVA-Intrusion.com Co. Ltd.\",\n\t[3]byte{0, 7, 13}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 7, 14}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 7, 15}:      \"Fujant, Inc.\",\n\t[3]byte{0, 7, 16}:      \"Adax, Inc.\",\n\t[3]byte{0, 7, 17}:      \"Acterna\",\n\t[3]byte{0, 7, 18}:      \"JAL Information Technology\",\n\t[3]byte{0, 7, 19}:      \"IP One, Inc.\",\n\t[3]byte{0, 7, 20}:      \"Brightcom\",\n\t[3]byte{0, 7, 21}:      \"General Research of Electronics, Inc.\",\n\t[3]byte{0, 7, 22}:      \"J & S Marine Ltd.\",\n\t[3]byte{0, 7, 23}:      \"Wieland Electric GmbH\",\n\t[3]byte{0, 7, 24}:      \"iCanTek Co., Ltd.\",\n\t[3]byte{0, 7, 25}:      \"Mobiis Co., Ltd.\",\n\t[3]byte{0, 7, 26}:      \"Finedigital Inc.\",\n\t[3]byte{0, 7, 27}:      \"CDVI Americas Ltd\",\n\t[3]byte{0, 7, 28}:      \"AT&T\",\n\t[3]byte{0, 7, 29}:      \"Satelsa Sistemas Y Aplicaciones De Telecomunicaciones, S.A.\",\n\t[3]byte{0, 7, 30}:      \"Tri-M Engineering / Nupak Dev. Corp.\",\n\t[3]byte{0, 7, 31}:      \"European Systems Integration\",\n\t[3]byte{0, 7, 32}:      \"Trutzschler GmbH & Co. KG\",\n\t[3]byte{0, 7, 33}:      \"Formac Elektronik GmbH\",\n\t[3]byte{0, 7, 34}:      \"The Nielsen Company\",\n\t[3]byte{0, 7, 35}:      \"ELCON Systemtechnik GmbH\",\n\t[3]byte{0, 7, 36}:      \"Telemax Co., Ltd.\",\n\t[3]byte{0, 7, 37}:      \"Bematech International Corp.\",\n\t[3]byte{0, 7, 38}:      \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{0, 7, 39}:      \"Zi Corporation (HK) Ltd.\",\n\t[3]byte{0, 7, 40}:      \"Neo Telecom\",\n\t[3]byte{0, 7, 41}:      \"Kistler Instrumente AG\",\n\t[3]byte{0, 7, 42}:      \"Innovance Networks\",\n\t[3]byte{0, 7, 43}:      \"Jung Myung Telecom Co., Ltd.\",\n\t[3]byte{0, 7, 44}:      \"Fabricom\",\n\t[3]byte{0, 7, 45}:      \"CNSystems\",\n\t[3]byte{0, 7, 46}:      \"North Node AB\",\n\t[3]byte{0, 7, 47}:      \"Intransa, Inc.\",\n\t[3]byte{0, 7, 48}:      \"Hutchison OPTEL Telecom Technology Co., Ltd.\",\n\t[3]byte{0, 7, 49}:      \"Ophir-Spiricon LLC\",\n\t[3]byte{0, 7, 50}:      \"AAEON Technology Inc.\",\n\t[3]byte{0, 7, 51}:      \"DANCONTROL Engineering\",\n\t[3]byte{0, 7, 52}:      \"ONStor, Inc.\",\n\t[3]byte{0, 7, 53}:      \"Flarion Technologies, Inc.\",\n\t[3]byte{0, 7, 54}:      \"Data Video Technologies Co., Ltd.\",\n\t[3]byte{0, 7, 55}:      \"Soriya Co. Ltd.\",\n\t[3]byte{0, 7, 56}:      \"Young Technology Co., Ltd.\",\n\t[3]byte{0, 7, 57}:      \"Scotty Group Austria Gmbh\",\n\t[3]byte{0, 7, 58}:      \"INVENTEL\",\n\t[3]byte{0, 7, 59}:      \"Tenovis GmbH & Co KG\",\n\t[3]byte{0, 7, 60}:      \"Telecom Design\",\n\t[3]byte{0, 7, 61}:      \"Nanjing Postel Telecommunications Co., Ltd.\",\n\t[3]byte{0, 7, 62}:      \"China Great-Wall Computer Shenzhen Co., Ltd.\",\n\t[3]byte{0, 7, 63}:      \"Woojyun Systec Co., Ltd.\",\n\t[3]byte{0, 7, 64}:      \"BUFFALO.INC\",\n\t[3]byte{0, 7, 65}:      \"Sierra Automated Systems\",\n\t[3]byte{0, 7, 66}:      \"Ormazabal\",\n\t[3]byte{0, 7, 67}:      \"Chelsio Communications\",\n\t[3]byte{0, 7, 68}:      \"Unico, Inc.\",\n\t[3]byte{0, 7, 69}:      \"Radlan Computer Communications Ltd.\",\n\t[3]byte{0, 7, 70}:      \"TURCK, Inc.\",\n\t[3]byte{0, 7, 71}:      \"Mecalc\",\n\t[3]byte{0, 7, 72}:      \"The Imaging Source Europe\",\n\t[3]byte{0, 7, 73}:      \"CENiX Inc.\",\n\t[3]byte{0, 7, 74}:      \"Carl Valentin GmbH\",\n\t[3]byte{0, 7, 75}:      \"Daihen Corporation\",\n\t[3]byte{0, 7, 76}:      \"Beicom Inc.\",\n\t[3]byte{0, 7, 77}:      \"Zebra Technologies Corp.\",\n\t[3]byte{0, 7, 78}:      \"IPFRONT Inc\",\n\t[3]byte{0, 7, 79}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 7, 80}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 7, 81}:      \"m-u-t AG\",\n\t[3]byte{0, 7, 82}:      \"Rhythm Watch Co., Ltd.\",\n\t[3]byte{0, 7, 83}:      \"Beijing Qxcomm Technology Co., Ltd.\",\n\t[3]byte{0, 7, 84}:      \"Xyterra Computing, Inc.\",\n\t[3]byte{0, 7, 85}:      \"Lafon\",\n\t[3]byte{0, 7, 86}:      \"Juyoung Telecom\",\n\t[3]byte{0, 7, 87}:      \"Topcall International AG\",\n\t[3]byte{0, 7, 88}:      \"DragonWave Inc.\",\n\t[3]byte{0, 7, 89}:      \"Boris Manufacturing Corp.\",\n\t[3]byte{0, 7, 90}:      \"Air Products and Chemicals, Inc.\",\n\t[3]byte{0, 7, 91}:      \"Gibson Guitars\",\n\t[3]byte{0, 7, 92}:      \"Eastman Kodak Company\",\n\t[3]byte{0, 7, 93}:      \"Celleritas Inc.\",\n\t[3]byte{0, 7, 94}:      \"Ametek Power Instruments\",\n\t[3]byte{0, 7, 95}:      \"VCS Video Communication Systems AG\",\n\t[3]byte{0, 7, 96}:      \"TOMIS Information & Telecom Corp.\",\n\t[3]byte{0, 7, 97}:      \"29530\",\n\t[3]byte{0, 7, 98}:      \"Group Sense Limited\",\n\t[3]byte{0, 7, 99}:      \"Sunniwell Cyber Tech. Co., Ltd.\",\n\t[3]byte{0, 7, 100}:     \"YoungWoo Telecom Co. Ltd.\",\n\t[3]byte{0, 7, 101}:     \"Jade Quantum Technologies, Inc.\",\n\t[3]byte{0, 7, 102}:     \"Chou Chin Industrial Co., Ltd.\",\n\t[3]byte{0, 7, 103}:     \"Yuxing Electronics Company Limited\",\n\t[3]byte{0, 7, 104}:     \"Danfoss A/S\",\n\t[3]byte{0, 7, 105}:     \"Italiana Macchi SpA\",\n\t[3]byte{0, 7, 106}:     \"NEXTEYE Co., Ltd.\",\n\t[3]byte{0, 7, 107}:     \"Stralfors AB\",\n\t[3]byte{0, 7, 108}:     \"Daehanet, Inc.\",\n\t[3]byte{0, 7, 109}:     \"Flexlight Networks\",\n\t[3]byte{0, 7, 110}:     \"Sinetica Corporation Limited\",\n\t[3]byte{0, 7, 111}:     \"Synoptics Limited\",\n\t[3]byte{0, 7, 112}:     \"Ubiquoss Inc\",\n\t[3]byte{0, 7, 113}:     \"Embedded System Corporation\",\n\t[3]byte{0, 7, 114}:     \"Alcatel-Lucent Shanghai Bell Co., Ltd\",\n\t[3]byte{0, 7, 115}:     \"Ascom Powerline Communications Ltd.\",\n\t[3]byte{0, 7, 116}:     \"GuangZhou Thinker Technology Co. Ltd.\",\n\t[3]byte{0, 7, 117}:     \"Valence Semiconductor, Inc.\",\n\t[3]byte{0, 7, 118}:     \"Federal APD\",\n\t[3]byte{0, 7, 119}:     \"Motah Ltd.\",\n\t[3]byte{0, 7, 120}:     \"GERSTEL GmbH & Co. KG\",\n\t[3]byte{0, 7, 121}:     \"Sungil Telecom Co., Ltd.\",\n\t[3]byte{0, 7, 122}:     \"Infoware System Co., Ltd.\",\n\t[3]byte{0, 7, 123}:     \"Millimetrix Broadband Networks\",\n\t[3]byte{0, 7, 124}:     \"Westermo Network Technologies AB\",\n\t[3]byte{0, 7, 125}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 7, 126}:     \"Elrest GmbH\",\n\t[3]byte{0, 7, 127}:     \"J Communications Co., Ltd.\",\n\t[3]byte{0, 7, 128}:     \"Bluegiga Technologies OY\",\n\t[3]byte{0, 7, 129}:     \"Itron Inc.\",\n\t[3]byte{0, 7, 130}:     \"Oracle Corporation \",\n\t[3]byte{0, 7, 131}:     \"SynCom Network, Inc.\",\n\t[3]byte{0, 7, 132}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 7, 133}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 7, 134}:     \"Wireless Networks Inc.\",\n\t[3]byte{0, 7, 135}:     \"Idea System Co., Ltd.\",\n\t[3]byte{0, 7, 136}:     \"Clipcomm, Inc.\",\n\t[3]byte{0, 7, 137}:     \"Allradio Co., Ltd\",\n\t[3]byte{0, 7, 138}:     \"Mentor Data System Inc.\",\n\t[3]byte{0, 7, 139}:     \"Wegener Communications, Inc.\",\n\t[3]byte{0, 7, 140}:     \"Elektronikspecialisten i Borlange AB\",\n\t[3]byte{0, 7, 141}:     \"NetEngines Ltd.\",\n\t[3]byte{0, 7, 142}:     \"Garz & Fricke GmbH\",\n\t[3]byte{0, 7, 143}:     \"Emkay Innovative Products\",\n\t[3]byte{0, 7, 144}:     \"Tri-M Technologies (s) Limited\",\n\t[3]byte{0, 7, 145}:     \"International Data Communications, Inc.\",\n\t[3]byte{0, 7, 146}:     \"Sütron Electronic GmbH\",\n\t[3]byte{0, 7, 147}:     \"Shin Satellite Public Company Limited\",\n\t[3]byte{0, 7, 148}:     \"Simple Devices, Inc.\",\n\t[3]byte{0, 7, 149}:     \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{0, 7, 150}:     \"LSI Systems, Inc.\",\n\t[3]byte{0, 7, 151}:     \"Netpower Co., Ltd.\",\n\t[3]byte{0, 7, 152}:     \"Selea SRL\",\n\t[3]byte{0, 7, 153}:     \"Tipping Point Technologies, Inc.\",\n\t[3]byte{0, 7, 154}:     \"Verint Systems Inc\",\n\t[3]byte{0, 7, 155}:     \"Aurora Networks\",\n\t[3]byte{0, 7, 156}:     \"Golden Electronics Technology Co., Ltd.\",\n\t[3]byte{0, 7, 157}:     \"Musashi Co., Ltd.\",\n\t[3]byte{0, 7, 158}:     \"Ilinx Co., Ltd.\",\n\t[3]byte{0, 7, 159}:     \"Action Digital Inc.\",\n\t[3]byte{0, 7, 160}:     \"e-Watch Inc.\",\n\t[3]byte{0, 7, 161}:     \"VIASYS Healthcare GmbH\",\n\t[3]byte{0, 7, 162}:     \"Opteon Corporation\",\n\t[3]byte{0, 7, 163}:     \"Ositis Software, Inc.\",\n\t[3]byte{0, 7, 164}:     \"GN Netcom Ltd.\",\n\t[3]byte{0, 7, 165}:     \"Y.D.K Co. Ltd.\",\n\t[3]byte{0, 7, 166}:     \"Leviton Manufacturing Co., Inc.\",\n\t[3]byte{0, 7, 167}:     \"A-Z Inc.\",\n\t[3]byte{0, 7, 168}:     \"Haier Group Technologies Ltd\",\n\t[3]byte{0, 7, 169}:     \"Novasonics\",\n\t[3]byte{0, 7, 170}:     \"Quantum Data Inc.\",\n\t[3]byte{0, 7, 171}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 7, 172}:     \"Eolring\",\n\t[3]byte{0, 7, 173}:     \"Pentacon GmbH Foto-und Feinwerktechnik\",\n\t[3]byte{0, 7, 174}:     \"Britestream Networks, Inc.\",\n\t[3]byte{0, 7, 175}:     \"Red Lion Controls, LP\",\n\t[3]byte{0, 7, 176}:     \"Office Details, Inc.\",\n\t[3]byte{0, 7, 177}:     \"Equator Technologies\",\n\t[3]byte{0, 7, 178}:     \"Transaccess S.A.\",\n\t[3]byte{0, 7, 179}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 7, 180}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 7, 181}:     \"Any One Wireless Ltd.\",\n\t[3]byte{0, 7, 182}:     \"Telecom Technology Ltd.\",\n\t[3]byte{0, 7, 183}:     \"Samurai Ind. Prods Eletronicos Ltda\",\n\t[3]byte{0, 7, 184}:     \"Corvalent Corporation\",\n\t[3]byte{0, 7, 185}:     \"Ginganet Corporation\",\n\t[3]byte{0, 7, 186}:     \"UTStarcom Inc\",\n\t[3]byte{0, 7, 187}:     \"Candera Inc.\",\n\t[3]byte{0, 7, 188}:     \"Identix Inc.\",\n\t[3]byte{0, 7, 189}:     \"Radionet Ltd.\",\n\t[3]byte{0, 7, 190}:     \"DataLogic SpA\",\n\t[3]byte{0, 7, 191}:     \"Armillaire Technologies, Inc.\",\n\t[3]byte{0, 7, 192}:     \"NetZerver Inc.\",\n\t[3]byte{0, 7, 193}:     \"Overture Networks, Inc.\",\n\t[3]byte{0, 7, 194}:     \"Netsys Telecom\",\n\t[3]byte{0, 7, 195}:     \"Thomson\",\n\t[3]byte{0, 7, 196}:     \"JEAN Co. Ltd.\",\n\t[3]byte{0, 7, 197}:     \"Gcom, Inc.\",\n\t[3]byte{0, 7, 198}:     \"VDS Vosskuhler GmbH\",\n\t[3]byte{0, 7, 199}:     \"Synectics Systems Limited\",\n\t[3]byte{0, 7, 200}:     \"Brain21, Inc.\",\n\t[3]byte{0, 7, 201}:     \"Technol Seven Co., Ltd.\",\n\t[3]byte{0, 7, 202}:     \"Creatix Polymedia Ges Fur Kommunikaitonssysteme\",\n\t[3]byte{0, 7, 203}:     \"FREEBOX SAS\",\n\t[3]byte{0, 7, 204}:     \"Kaba Benzing GmbH\",\n\t[3]byte{0, 7, 205}:     \"Kumoh Electronic Co, Ltd\",\n\t[3]byte{0, 7, 206}:     \"Cabletime Limited\",\n\t[3]byte{0, 7, 207}:     \"Anoto AB\",\n\t[3]byte{0, 7, 208}:     \"Automat Engenharia de Automação Ltda.\",\n\t[3]byte{0, 7, 209}:     \"Spectrum Signal Processing Inc.\",\n\t[3]byte{0, 7, 210}:     \"Logopak Systeme GmbH & Co. KG\",\n\t[3]byte{0, 7, 211}:     \"SPGPrints B.V.\",\n\t[3]byte{0, 7, 212}:     \"Zhejiang Yutong Network Communication Co Ltd.\",\n\t[3]byte{0, 7, 213}:     \"3e Technologies Int;., Inc.\",\n\t[3]byte{0, 7, 214}:     \"Commil Ltd.\",\n\t[3]byte{0, 7, 215}:     \"Caporis Networks AG\",\n\t[3]byte{0, 7, 216}:     \"Hitron Technologies. Inc\",\n\t[3]byte{0, 7, 217}:     \"Splicecom\",\n\t[3]byte{0, 7, 218}:     \"Neuro Telecom Co., Ltd.\",\n\t[3]byte{0, 7, 219}:     \"Kirana Networks, Inc.\",\n\t[3]byte{0, 7, 220}:     \"Atek Co, Ltd.\",\n\t[3]byte{0, 7, 221}:     \"Cradle Technologies\",\n\t[3]byte{0, 7, 222}:     \"eCopilt AB\",\n\t[3]byte{0, 7, 223}:     \"Vbrick Systems Inc.\",\n\t[3]byte{0, 7, 224}:     \"Palm Inc.\",\n\t[3]byte{0, 7, 225}:     \"WIS Communications Co. Ltd.\",\n\t[3]byte{0, 7, 226}:     \"Bitworks, Inc.\",\n\t[3]byte{0, 7, 227}:     \"Navcom Technology, Inc.\",\n\t[3]byte{0, 7, 228}:     \"SoftRadio Co., Ltd.\",\n\t[3]byte{0, 7, 229}:     \"Coup Corporation\",\n\t[3]byte{0, 7, 230}:     \"edgeflow Canada Inc.\",\n\t[3]byte{0, 7, 231}:     \"FreeWave Technologies\",\n\t[3]byte{0, 7, 232}:     \"EdgeWave\",\n\t[3]byte{0, 7, 233}:     \"Intel Corporation\",\n\t[3]byte{0, 7, 234}:     \"Massana, Inc.\",\n\t[3]byte{0, 7, 235}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 7, 236}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 7, 237}:     \"Altera Corporation\",\n\t[3]byte{0, 7, 238}:     \"telco Informationssysteme GmbH\",\n\t[3]byte{0, 7, 239}:     \"Lockheed Martin Tactical Systems\",\n\t[3]byte{0, 7, 240}:     \"LogiSync LLC\",\n\t[3]byte{0, 7, 241}:     \"TeraBurst Networks Inc.\",\n\t[3]byte{0, 7, 242}:     \"IOA Corporation\",\n\t[3]byte{0, 7, 243}:     \"Thinkengine Networks\",\n\t[3]byte{0, 7, 244}:     \"Eletex Co., Ltd.\",\n\t[3]byte{0, 7, 245}:     \"Bridgeco Co AG\",\n\t[3]byte{0, 7, 246}:     \"Qqest Software Systems\",\n\t[3]byte{0, 7, 247}:     \"Galtronics\",\n\t[3]byte{0, 7, 248}:     \"ITDevices, Inc.\",\n\t[3]byte{0, 7, 249}:     \"Sensaphone\",\n\t[3]byte{0, 7, 250}:     \"ITT Co., Ltd.\",\n\t[3]byte{0, 7, 251}:     \"Giga Stream UMTS Technologies GmbH\",\n\t[3]byte{0, 7, 252}:     \"Adept Systems Inc.\",\n\t[3]byte{0, 7, 253}:     \"LANergy Ltd.\",\n\t[3]byte{0, 7, 254}:     \"Rigaku Corporation\",\n\t[3]byte{0, 7, 255}:     \"Gluon Networks\",\n\t[3]byte{0, 8, 0}:       \"MULTITECH SYSTEMS, INC.\",\n\t[3]byte{0, 8, 1}:       \"HighSpeed Surfing Inc.\",\n\t[3]byte{0, 8, 2}:       \"Hewlett Packard\",\n\t[3]byte{0, 8, 3}:       \"Cos Tron\",\n\t[3]byte{0, 8, 4}:       \"ICA Inc.\",\n\t[3]byte{0, 8, 5}:       \"Techno-Holon Corporation\",\n\t[3]byte{0, 8, 6}:       \"Raonet Systems, Inc.\",\n\t[3]byte{0, 8, 7}:       \"Access Devices Limited\",\n\t[3]byte{0, 8, 8}:       \"PPT Vision, Inc.\",\n\t[3]byte{0, 8, 9}:       \"Systemonic AG\",\n\t[3]byte{0, 8, 10}:      \"Espera-Werke GmbH\",\n\t[3]byte{0, 8, 11}:      \"Birka BPA Informationssystem AB\",\n\t[3]byte{0, 8, 12}:      \"VDA Elettronica spa\",\n\t[3]byte{0, 8, 13}:      \"Toshiba\",\n\t[3]byte{0, 8, 14}:      \"ARRIS Group, Inc.\",\n\t[3]byte{0, 8, 15}:      \"Proximion Fiber Optics AB\",\n\t[3]byte{0, 8, 16}:      \"Key Technology, Inc.\",\n\t[3]byte{0, 8, 17}:      \"VOIX Corporation\",\n\t[3]byte{0, 8, 18}:      \"GM-2 Corporation\",\n\t[3]byte{0, 8, 19}:      \"Diskbank, Inc.\",\n\t[3]byte{0, 8, 20}:      \"TIL Technologies\",\n\t[3]byte{0, 8, 21}:      \"CATS Co., Ltd.\",\n\t[3]byte{0, 8, 22}:      \"Bluelon ApS\",\n\t[3]byte{0, 8, 23}:      \"EmergeCore Networks LLC\",\n\t[3]byte{0, 8, 24}:      \"Pixelworks, Inc.\",\n\t[3]byte{0, 8, 25}:      \"Banksys\",\n\t[3]byte{0, 8, 26}:      \"Sanrad Intelligence Storage Communications (2000) Ltd.\",\n\t[3]byte{0, 8, 27}:      \"Windigo Systems\",\n\t[3]byte{0, 8, 28}:      \"@pos.com\",\n\t[3]byte{0, 8, 29}:      \"Ipsil, Incorporated\",\n\t[3]byte{0, 8, 30}:      \"Repeatit AB\",\n\t[3]byte{0, 8, 31}:      \"Pou Yuen Tech Corp. Ltd.\",\n\t[3]byte{0, 8, 32}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 8, 33}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 8, 34}:      \"InPro Comm\",\n\t[3]byte{0, 8, 35}:      \"Texa Corp.\",\n\t[3]byte{0, 8, 36}:      \"Nuance Document Imaging\",\n\t[3]byte{0, 8, 37}:      \"Acme Packet\",\n\t[3]byte{0, 8, 38}:      \"Colorado Med Tech\",\n\t[3]byte{0, 8, 39}:      \"ADB Broadband Italia\",\n\t[3]byte{0, 8, 40}:      \"Koei Engineering Ltd.\",\n\t[3]byte{0, 8, 41}:      \"TOKYO ELECTRON DEVICE NAGASAKI LIMITED\",\n\t[3]byte{0, 8, 42}:      \"Powerwallz Network Security\",\n\t[3]byte{0, 8, 43}:      \"Wooksung Electronics, Inc.\",\n\t[3]byte{0, 8, 44}:      \"Homag AG\",\n\t[3]byte{0, 8, 45}:      \"Indus Teqsite Private Limited\",\n\t[3]byte{0, 8, 46}:      \"Multitone Electronics PLC\",\n\t[3]byte{0, 8, 47}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 8, 48}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 8, 49}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 8, 50}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 8, 78}:      \"DivergeNet, Inc.\",\n\t[3]byte{0, 8, 79}:      \"Qualstar Corporation\",\n\t[3]byte{0, 8, 80}:      \"Arizona Instrument Corp.\",\n\t[3]byte{0, 8, 81}:      \"Canadian Bank Note Company, Ltd.\",\n\t[3]byte{0, 8, 82}:      \"Davolink Co. Inc.\",\n\t[3]byte{0, 8, 83}:      \"Schleicher GmbH & Co. Relaiswerke KG\",\n\t[3]byte{0, 8, 84}:      \"Netronix, Inc.\",\n\t[3]byte{0, 8, 85}:      \"NASA-Goddard Space Flight Center\",\n\t[3]byte{0, 8, 86}:      \"Gamatronic Electronic Industries Ltd.\",\n\t[3]byte{0, 8, 87}:      \"Polaris Networks, Inc.\",\n\t[3]byte{0, 8, 88}:      \"Novatechnology Inc.\",\n\t[3]byte{0, 8, 89}:      \"ShenZhen Unitone Electronics Co., Ltd.\",\n\t[3]byte{0, 8, 90}:      \"IntiGate Inc.\",\n\t[3]byte{0, 8, 91}:      \"Hanbit Electronics Co., Ltd.\",\n\t[3]byte{0, 8, 92}:      \"Shanghai Dare Technologies Co. Ltd.\",\n\t[3]byte{0, 8, 93}:      \"Mitel Corporation\",\n\t[3]byte{0, 8, 94}:      \"PCO AG\",\n\t[3]byte{0, 8, 95}:      \"Picanol N.V.\",\n\t[3]byte{0, 8, 96}:      \"LodgeNet Entertainment Corp.\",\n\t[3]byte{0, 8, 97}:      \"SoftEnergy Co., Ltd.\",\n\t[3]byte{0, 8, 98}:      \"NEC Eluminant Technologies, Inc.\",\n\t[3]byte{0, 8, 99}:      \"Entrisphere Inc.\",\n\t[3]byte{0, 8, 100}:     \"Fasy S.p.A.\",\n\t[3]byte{0, 8, 101}:     \"JASCOM CO., LTD\",\n\t[3]byte{0, 8, 102}:     \"DSX Access Systems, Inc.\",\n\t[3]byte{0, 8, 103}:     \"Uptime Devices\",\n\t[3]byte{0, 8, 104}:     \"PurOptix\",\n\t[3]byte{0, 8, 105}:     \"Command-e Technology Co.,Ltd.\",\n\t[3]byte{0, 8, 106}:     \"Securiton Gmbh\",\n\t[3]byte{0, 8, 107}:     \"MIPSYS\",\n\t[3]byte{0, 8, 108}:     \"Plasmon LMS\",\n\t[3]byte{0, 8, 109}:     \"Missouri FreeNet\",\n\t[3]byte{0, 8, 110}:     \"Hyglo AB\",\n\t[3]byte{0, 8, 111}:     \"Resources Computer Network Ltd.\",\n\t[3]byte{0, 8, 112}:     \"Rasvia Systems, Inc.\",\n\t[3]byte{0, 8, 113}:     \"NORTHDATA Co., Ltd.\",\n\t[3]byte{0, 8, 114}:     \"Sorenson Communications\",\n\t[3]byte{0, 8, 115}:     \"DapTechnology B.V.\",\n\t[3]byte{0, 8, 116}:     \"Dell Inc.\",\n\t[3]byte{0, 8, 117}:     \"Acorp Electronics Corp.\",\n\t[3]byte{0, 8, 118}:     \"SDSystem\",\n\t[3]byte{0, 8, 119}:     \"Liebert-Hiross Spa\",\n\t[3]byte{0, 8, 120}:     \"Benchmark Storage Innovations\",\n\t[3]byte{0, 8, 121}:     \"CEM Corporation\",\n\t[3]byte{0, 8, 122}:     \"Wipotec GmbH\",\n\t[3]byte{0, 8, 123}:     \"RTX Telecom A/S\",\n\t[3]byte{0, 8, 124}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 8, 125}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 8, 126}:     \"Bon Electro-Telecom Inc.\",\n\t[3]byte{0, 8, 127}:     \"SPAUN electronic GmbH & Co. KG\",\n\t[3]byte{0, 8, 128}:     \"BroadTel Canada Communications inc.\",\n\t[3]byte{0, 8, 129}:     \"DIGITAL HANDS CO.,LTD.\",\n\t[3]byte{0, 8, 130}:     \"SIGMA CORPORATION\",\n\t[3]byte{0, 8, 131}:     \"Hewlett Packard\",\n\t[3]byte{0, 8, 132}:     \"Index Braille AB\",\n\t[3]byte{0, 8, 133}:     \"EMS Dr. Thomas Wünsche\",\n\t[3]byte{0, 8, 134}:     \"Hansung Teliann, Inc.\",\n\t[3]byte{0, 8, 135}:     \"Maschinenfabrik Reinhausen GmbH\",\n\t[3]byte{0, 8, 136}:     \"OULLIM Information Technology Inc,.\",\n\t[3]byte{0, 8, 137}:     \"Dish Technologies Corp\",\n\t[3]byte{0, 8, 138}:     \"Minds@Work\",\n\t[3]byte{0, 8, 139}:     \"Tropic Networks Inc.\",\n\t[3]byte{0, 8, 140}:     \"Quanta Network Systems Inc.\",\n\t[3]byte{0, 8, 141}:     \"Sigma-Links Inc.\",\n\t[3]byte{0, 8, 142}:     \"Nihon Computer Co., Ltd.\",\n\t[3]byte{0, 8, 143}:     \"ADVANCED DIGITAL TECHNOLOGY\",\n\t[3]byte{0, 8, 144}:     \"AVILINKS SA\",\n\t[3]byte{0, 8, 145}:     \"Lyan Inc.\",\n\t[3]byte{0, 8, 146}:     \"EM Solutions\",\n\t[3]byte{0, 8, 147}:     \"LE INFORMATION COMMUNICATION INC.\",\n\t[3]byte{0, 8, 148}:     \"InnoVISION Multimedia Ltd.\",\n\t[3]byte{0, 8, 149}:     \"DIRC Technologie GmbH & Co.KG\",\n\t[3]byte{0, 8, 150}:     \"Printronix, Inc.\",\n\t[3]byte{0, 8, 151}:     \"Quake Technologies\",\n\t[3]byte{0, 8, 152}:     \"Gigabit Optics Corporation\",\n\t[3]byte{0, 8, 153}:     \"Netbind, Inc.\",\n\t[3]byte{0, 8, 154}:     \"Alcatel Microelectronics\",\n\t[3]byte{0, 8, 155}:     \"ICP Electronics Inc.\",\n\t[3]byte{0, 8, 156}:     \"Elecs Industry Co., Ltd.\",\n\t[3]byte{0, 8, 157}:     \"UHD-Elektronik\",\n\t[3]byte{0, 8, 158}:     \"Beijing Enter-Net co.LTD\",\n\t[3]byte{0, 8, 159}:     \"EFM Networks\",\n\t[3]byte{0, 8, 160}:     \"Stotz Feinmesstechnik GmbH\",\n\t[3]byte{0, 8, 161}:     \"CNet Technology Inc.\",\n\t[3]byte{0, 8, 162}:     \"ADI Engineering, Inc.\",\n\t[3]byte{0, 8, 163}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 8, 164}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 8, 165}:     \"Peninsula Systems Inc.\",\n\t[3]byte{0, 8, 166}:     \"Multiware & Image Co., Ltd.\",\n\t[3]byte{0, 8, 167}:     \"iLogic Inc.\",\n\t[3]byte{0, 8, 168}:     \"Systec Co., Ltd.\",\n\t[3]byte{0, 8, 169}:     \"SangSang Technology, Inc.\",\n\t[3]byte{0, 8, 170}:     \"KARAM\",\n\t[3]byte{0, 8, 171}:     \"EnerLinx.com, Inc.\",\n\t[3]byte{0, 8, 172}:     \"Eltromat GmbH\",\n\t[3]byte{0, 8, 173}:     \"Toyo-Linx Co., Ltd.\",\n\t[3]byte{0, 8, 174}:     \"PacketFront Network Products AB\",\n\t[3]byte{0, 8, 175}:     \"Novatec Corporation\",\n\t[3]byte{0, 8, 176}:     \"BKtel communications GmbH\",\n\t[3]byte{0, 8, 177}:     \"ProQuent Systems\",\n\t[3]byte{0, 8, 178}:     \"SHENZHEN COMPASS TECHNOLOGY DEVELOPMENT CO.,LTD\",\n\t[3]byte{0, 8, 179}:     \"Fastwel\",\n\t[3]byte{0, 8, 180}:     \"SYSPOL\",\n\t[3]byte{0, 8, 181}:     \"TAI GUEN ENTERPRISE CO., LTD\",\n\t[3]byte{0, 8, 182}:     \"RouteFree, Inc.\",\n\t[3]byte{0, 8, 183}:     \"HIT Incorporated\",\n\t[3]byte{0, 8, 184}:     \"E.F. Johnson\",\n\t[3]byte{0, 8, 185}:     \"Kaonmedia CO., LTD.\",\n\t[3]byte{0, 8, 186}:     \"Erskine Systems Ltd\",\n\t[3]byte{0, 8, 187}:     \"NetExcell\",\n\t[3]byte{0, 8, 188}:     \"Ilevo AB\",\n\t[3]byte{0, 8, 189}:     \"TEPG-US\",\n\t[3]byte{0, 8, 190}:     \"XENPAK MSA Group\",\n\t[3]byte{0, 8, 191}:     \"Aptus Elektronik AB\",\n\t[3]byte{0, 8, 192}:     \"ASA SYSTEMS\",\n\t[3]byte{0, 8, 193}:     \"Avistar Communications Corporation\",\n\t[3]byte{0, 8, 194}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 8, 195}:     \"Contex A/S\",\n\t[3]byte{0, 8, 196}:     \"Hikari Co.,Ltd.\",\n\t[3]byte{0, 8, 197}:     \"Liontech Co., Ltd.\",\n\t[3]byte{0, 8, 198}:     \"Philips Consumer Communications\",\n\t[3]byte{0, 8, 199}:     \"Hewlett Packard\",\n\t[3]byte{0, 8, 200}:     \"Soneticom, Inc.\",\n\t[3]byte{0, 8, 201}:     \"TechniSat Digital GmbH Daun\",\n\t[3]byte{0, 8, 202}:     \"TwinHan Technology Co.,Ltd\",\n\t[3]byte{0, 8, 203}:     \"Zeta Broadband Inc.\",\n\t[3]byte{0, 8, 204}:     \"Remotec, Inc.\",\n\t[3]byte{0, 8, 205}:     \"With-Net Inc\",\n\t[3]byte{0, 8, 206}:     \"IPMobileNet Inc.\",\n\t[3]byte{0, 8, 207}:     \"Nippon Koei Power Systems Co., Ltd.\",\n\t[3]byte{0, 8, 208}:     \"Musashi Engineering Co., LTD.\",\n\t[3]byte{0, 8, 209}:     \"KAREL INC.\",\n\t[3]byte{0, 8, 210}:     \"ZOOM Networks Inc.\",\n\t[3]byte{0, 8, 211}:     \"Hercules Technologies S.A.S.\",\n\t[3]byte{0, 8, 212}:     \"IneoQuest Technologies, Inc\",\n\t[3]byte{0, 8, 213}:     \"Vanguard Networks Solutions, LLC\",\n\t[3]byte{0, 8, 214}:     \"HASSNET Inc.\",\n\t[3]byte{0, 8, 215}:     \"HOW CORPORATION\",\n\t[3]byte{0, 8, 216}:     \"Dowkey Microwave\",\n\t[3]byte{0, 8, 217}:     \"Mitadenshi Co.,LTD\",\n\t[3]byte{0, 8, 218}:     \"SofaWare Technologies Ltd.\",\n\t[3]byte{0, 8, 219}:     \"Corrigent Systems\",\n\t[3]byte{0, 8, 220}:     \"Wiznet\",\n\t[3]byte{0, 8, 221}:     \"Telena Communications, Inc.\",\n\t[3]byte{0, 8, 222}:     \"3UP Systems\",\n\t[3]byte{0, 8, 223}:     \"Alistel Inc.\",\n\t[3]byte{0, 8, 224}:     \"ATO Technology Ltd.\",\n\t[3]byte{0, 8, 225}:     \"Barix AG\",\n\t[3]byte{0, 8, 226}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 8, 227}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 8, 228}:     \"Envenergy Inc\",\n\t[3]byte{0, 8, 229}:     \"IDK Corporation\",\n\t[3]byte{0, 8, 230}:     \"Littlefeet\",\n\t[3]byte{0, 8, 231}:     \"SHI ControlSystems,Ltd.\",\n\t[3]byte{0, 8, 232}:     \"Excel Master Ltd.\",\n\t[3]byte{0, 8, 233}:     \"NextGig\",\n\t[3]byte{0, 8, 234}:     \"Motion Control Engineering, Inc\",\n\t[3]byte{0, 8, 235}:     \"ROMWin Co.,Ltd.\",\n\t[3]byte{0, 8, 236}:     \"Optical Zonu Corporation\",\n\t[3]byte{0, 8, 237}:     \"ST&T Instrument Corp.\",\n\t[3]byte{0, 8, 238}:     \"Logic Product Development\",\n\t[3]byte{0, 8, 239}:     \"DIBAL,S.A.\",\n\t[3]byte{0, 8, 240}:     \"Next Generation Systems, Inc.\",\n\t[3]byte{0, 8, 241}:     \"Voltaire\",\n\t[3]byte{0, 8, 242}:     \"C&S Technology\",\n\t[3]byte{0, 8, 243}:     \"WANY\",\n\t[3]byte{0, 8, 244}:     \"Bluetake Technology Co., Ltd.\",\n\t[3]byte{0, 8, 245}:     \"YESTECHNOLOGY Co.,Ltd.\",\n\t[3]byte{0, 8, 246}:     \"Sumitomo Electric Industries, Ltd\",\n\t[3]byte{0, 8, 247}:     \"Hitachi Ltd, Semiconductor & Integrated Circuits Gr\",\n\t[3]byte{0, 8, 248}:     \"UTC CCS\",\n\t[3]byte{0, 8, 249}:     \"Artesyn Embedded Technologies\",\n\t[3]byte{0, 8, 250}:     \"KEB Automation KG\",\n\t[3]byte{0, 8, 251}:     \"SonoSite, Inc.\",\n\t[3]byte{0, 8, 252}:     \"Gigaphoton Inc.\",\n\t[3]byte{0, 8, 253}:     \"BlueKorea Co., Ltd.\",\n\t[3]byte{0, 8, 254}:     \"UNIK C&C Co.,Ltd.\",\n\t[3]byte{0, 8, 255}:     \"Trilogy Communications Ltd\",\n\t[3]byte{0, 9, 0}:       \"TMT\",\n\t[3]byte{0, 9, 1}:       \"Shenzhen Shixuntong Information & Technoligy Co\",\n\t[3]byte{0, 9, 2}:       \"Redline Communications Inc.\",\n\t[3]byte{0, 9, 3}:       \"Panasas, Inc\",\n\t[3]byte{0, 9, 4}:       \"MONDIAL electronic\",\n\t[3]byte{0, 9, 5}:       \"iTEC Technologies Ltd.\",\n\t[3]byte{0, 9, 6}:       \"Esteem Networks\",\n\t[3]byte{0, 9, 7}:       \"Chrysalis Development\",\n\t[3]byte{0, 9, 8}:       \"VTech Technology Corp.\",\n\t[3]byte{0, 9, 9}:       \"Telenor Connect A/S\",\n\t[3]byte{0, 9, 10}:      \"SnedFar Technology Co., Ltd.\",\n\t[3]byte{0, 9, 11}:      \"MTL  Instruments PLC\",\n\t[3]byte{0, 9, 12}:      \"Mayekawa Mfg. Co. Ltd.\",\n\t[3]byte{0, 9, 13}:      \"LEADER ELECTRONICS CORP.\",\n\t[3]byte{0, 9, 14}:      \"Helix Technology Inc.\",\n\t[3]byte{0, 9, 15}:      \"Fortinet Inc.\",\n\t[3]byte{0, 9, 16}:      \"Simple Access Inc.\",\n\t[3]byte{0, 9, 17}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 9, 18}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 9, 19}:      \"SystemK Corporation\",\n\t[3]byte{0, 9, 20}:      \"COMPUTROLS INC.\",\n\t[3]byte{0, 9, 21}:      \"CAS Corp.\",\n\t[3]byte{0, 9, 22}:      \"Listman Home Technologies, Inc.\",\n\t[3]byte{0, 9, 23}:      \"WEM Technology Inc\",\n\t[3]byte{0, 9, 24}:      \"SAMSUNG TECHWIN CO.,LTD\",\n\t[3]byte{0, 9, 25}:      \"MDS Gateways\",\n\t[3]byte{0, 9, 26}:      \"Macat Optics & Electronics Co., Ltd.\",\n\t[3]byte{0, 9, 27}:      \"Digital Generation Inc.\",\n\t[3]byte{0, 9, 28}:      \"CacheVision, Inc\",\n\t[3]byte{0, 9, 29}:      \"Proteam Computer Corporation\",\n\t[3]byte{0, 9, 30}:      \"Firstech Technology Corp.\",\n\t[3]byte{0, 9, 31}:      \"A&D Co., Ltd.\",\n\t[3]byte{0, 9, 32}:      \"EpoX COMPUTER CO.,LTD.\",\n\t[3]byte{0, 9, 33}:      \"Planmeca Oy\",\n\t[3]byte{0, 9, 34}:      \"TST Biometrics GmbH\",\n\t[3]byte{0, 9, 35}:      \"Heaman System Co., Ltd\",\n\t[3]byte{0, 9, 36}:      \"Telebau GmbH\",\n\t[3]byte{0, 9, 37}:      \"VSN Systemen BV\",\n\t[3]byte{0, 9, 38}:      \"YODA COMMUNICATIONS, INC.\",\n\t[3]byte{0, 9, 39}:      \"TOYOKEIKI CO.,LTD.\",\n\t[3]byte{0, 9, 40}:      \"Telecore\",\n\t[3]byte{0, 9, 41}:      \"Sanyo Industries (UK) Limited\",\n\t[3]byte{0, 9, 42}:      \"MYTECS Co.,Ltd.\",\n\t[3]byte{0, 9, 43}:      \"iQstor Networks, Inc.\",\n\t[3]byte{0, 9, 44}:      \"Hitpoint Inc.\",\n\t[3]byte{0, 9, 45}:      \"HTC Corporation\",\n\t[3]byte{0, 9, 46}:      \"B&Tech System Inc.\",\n\t[3]byte{0, 9, 47}:      \"Akom Technology Corporation\",\n\t[3]byte{0, 9, 48}:      \"AeroConcierge Inc.\",\n\t[3]byte{0, 9, 49}:      \"Future Internet, Inc.\",\n\t[3]byte{0, 9, 50}:      \"Omnilux\",\n\t[3]byte{0, 9, 51}:      \"Ophit Co.Ltd.\",\n\t[3]byte{0, 9, 52}:      \"Dream-Multimedia-Tv GmbH\",\n\t[3]byte{0, 9, 53}:      \"Sandvine Incorporated\",\n\t[3]byte{0, 9, 54}:      \"Ipetronik GmbH & Co. KG\",\n\t[3]byte{0, 9, 55}:      \"Inventec Appliance Corp\",\n\t[3]byte{0, 9, 56}:      \"Allot Communications\",\n\t[3]byte{0, 9, 57}:      \"ShibaSoku Co.,Ltd.\",\n\t[3]byte{0, 9, 58}:      \"Molex CMS\",\n\t[3]byte{0, 9, 59}:      \"HYUNDAI NETWORKS INC.\",\n\t[3]byte{0, 9, 60}:      \"Jacques Technologies P/L\",\n\t[3]byte{0, 9, 61}:      \"Newisys,Inc.\",\n\t[3]byte{0, 9, 62}:      \"C&I Technologies\",\n\t[3]byte{0, 9, 63}:      \"Double-Win Enterpirse CO., LTD\",\n\t[3]byte{0, 9, 64}:      \"AGFEO GmbH & Co. KG\",\n\t[3]byte{0, 9, 65}:      \"Allied Telesis R&D Center K.K.\",\n\t[3]byte{0, 9, 66}:      \"Wireless Technologies, Inc\",\n\t[3]byte{0, 9, 67}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 9, 68}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 9, 69}:      \"Palmmicro Communications Inc\",\n\t[3]byte{0, 9, 70}:      \"Cluster Labs GmbH\",\n\t[3]byte{0, 9, 71}:      \"Aztek, Inc.\",\n\t[3]byte{0, 9, 72}:      \"Vista Control Systems, Corp.\",\n\t[3]byte{0, 9, 73}:      \"Glyph Technologies Inc.\",\n\t[3]byte{0, 9, 74}:      \"Homenet Communications\",\n\t[3]byte{0, 9, 75}:      \"FillFactory NV\",\n\t[3]byte{0, 9, 76}:      \"Communication Weaver Co.,Ltd.\",\n\t[3]byte{0, 9, 77}:      \"Braintree Communications Pty Ltd\",\n\t[3]byte{0, 9, 78}:      \"BARTECH SYSTEMS INTERNATIONAL, INC\",\n\t[3]byte{0, 9, 79}:      \"elmegt GmbH & Co. KG\",\n\t[3]byte{0, 9, 80}:      \"Independent Storage Corporation\",\n\t[3]byte{0, 9, 81}:      \"Apogee Imaging Systems\",\n\t[3]byte{0, 9, 82}:      \"Auerswald GmbH & Co. KG\",\n\t[3]byte{0, 9, 83}:      \"Linkage System Integration Co.Ltd.\",\n\t[3]byte{0, 9, 84}:      \"AMiT spol. s. r. o.\",\n\t[3]byte{0, 9, 85}:      \"Young Generation International Corp.\",\n\t[3]byte{0, 9, 86}:      \"Network Systems Group, Ltd. (NSG)\",\n\t[3]byte{0, 9, 87}:      \"Supercaller, Inc.\",\n\t[3]byte{0, 9, 88}:      \"INTELNET S.A.\",\n\t[3]byte{0, 9, 89}:      \"Sitecsoft\",\n\t[3]byte{0, 9, 90}:      \"RACEWOOD TECHNOLOGY\",\n\t[3]byte{0, 9, 91}:      \"NETGEAR\",\n\t[3]byte{0, 9, 92}:      \"Philips Medical Systems - Cardiac and Monitoring Systems (CM\",\n\t[3]byte{0, 9, 93}:      \"Dialogue Technology Corp.\",\n\t[3]byte{0, 9, 94}:      \"Masstech Group Inc.\",\n\t[3]byte{0, 9, 95}:      \"Telebyte, Inc.\",\n\t[3]byte{0, 9, 96}:      \"YOZAN Inc.\",\n\t[3]byte{0, 9, 97}:      \"Switchgear and Instrumentation Ltd\",\n\t[3]byte{0, 9, 98}:      \"Sonitor Technologies AS\",\n\t[3]byte{0, 9, 99}:      \"Dominion Lasercom Inc.\",\n\t[3]byte{0, 9, 100}:     \"Hi-Techniques, Inc.\",\n\t[3]byte{0, 9, 101}:     \"HyunJu Computer Co., Ltd.\",\n\t[3]byte{0, 9, 102}:     \"TRIMBLE EUROPE BV\",\n\t[3]byte{0, 9, 103}:     \"Tachyon, Inc\",\n\t[3]byte{0, 9, 104}:     \"TECHNOVENTURE, INC.\",\n\t[3]byte{0, 9, 105}:     \"Meret Optical Communications\",\n\t[3]byte{0, 9, 106}:     \"Cloverleaf Communications Inc.\",\n\t[3]byte{0, 9, 107}:     \"IBM Corp\",\n\t[3]byte{0, 9, 108}:     \"Imedia Semiconductor Corp.\",\n\t[3]byte{0, 9, 109}:     \"Powernet Technologies Corp.\",\n\t[3]byte{0, 9, 110}:     \"GIANT ELECTRONICS LTD.\",\n\t[3]byte{0, 9, 111}:     \"Beijing Zhongqing Elegant Tech. Corp.,Limited\",\n\t[3]byte{0, 9, 112}:     \"Vibration Research Corporation\",\n\t[3]byte{0, 9, 113}:     \"Time Management, Inc.\",\n\t[3]byte{0, 9, 114}:     \"Securebase,Inc\",\n\t[3]byte{0, 9, 115}:     \"Lenten Technology Co., Ltd.\",\n\t[3]byte{0, 9, 116}:     \"Innopia Technologies, Inc.\",\n\t[3]byte{0, 9, 117}:     \"fSONA Communications Corporation\",\n\t[3]byte{0, 9, 118}:     \"Datasoft ISDN Systems GmbH\",\n\t[3]byte{0, 9, 119}:     \"Brunner Elektronik AG\",\n\t[3]byte{0, 9, 120}:     \"AIJI System Co., Ltd.\",\n\t[3]byte{0, 9, 121}:     \"Advanced Television Systems Committee, Inc.\",\n\t[3]byte{0, 9, 122}:     \"Louis Design Labs.\",\n\t[3]byte{0, 9, 123}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 9, 124}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 9, 125}:     \"SecWell Networks Oy\",\n\t[3]byte{0, 9, 126}:     \"IMI TECHNOLOGY CO., LTD\",\n\t[3]byte{0, 9, 127}:     \"Vsecure 2000 LTD.\",\n\t[3]byte{0, 9, 128}:     \"Power Zenith Inc.\",\n\t[3]byte{0, 9, 129}:     \"Newport Networks\",\n\t[3]byte{0, 9, 130}:     \"Loewe Opta GmbH\",\n\t[3]byte{0, 9, 131}:     \"GlobalTop Technology, Inc.\",\n\t[3]byte{0, 9, 132}:     \"MyCasa Network Inc.\",\n\t[3]byte{0, 9, 133}:     \"Auto Telecom Company\",\n\t[3]byte{0, 9, 134}:     \"Metalink LTD.\",\n\t[3]byte{0, 9, 135}:     \"NISHI NIPPON ELECTRIC WIRE & CABLE CO.,LTD.\",\n\t[3]byte{0, 9, 136}:     \"Nudian Electron Co., Ltd.\",\n\t[3]byte{0, 9, 137}:     \"VividLogic Inc.\",\n\t[3]byte{0, 9, 138}:     \"EqualLogic Inc\",\n\t[3]byte{0, 9, 139}:     \"Entropic Communications, Inc.\",\n\t[3]byte{0, 9, 140}:     \"Option Wireless Sweden\",\n\t[3]byte{0, 9, 141}:     \"Velocity Semiconductor\",\n\t[3]byte{0, 9, 142}:     \"ipcas GmbH\",\n\t[3]byte{0, 9, 143}:     \"Cetacean Networks\",\n\t[3]byte{0, 9, 144}:     \"ACKSYS Communications & systems\",\n\t[3]byte{0, 9, 145}:     \"Intelligent Platforms, LLC.\",\n\t[3]byte{0, 9, 146}:     \"InterEpoch Technology,INC.\",\n\t[3]byte{0, 9, 147}:     \"Visteon Corporation\",\n\t[3]byte{0, 9, 148}:     \"Cronyx Engineering\",\n\t[3]byte{0, 9, 149}:     \"Castle Technology Ltd\",\n\t[3]byte{0, 9, 150}:     \"RDI\",\n\t[3]byte{0, 9, 151}:     \"Nortel Networks\",\n\t[3]byte{0, 9, 152}:     \"Capinfo Company Limited\",\n\t[3]byte{0, 9, 153}:     \"CP GEORGES RENAULT\",\n\t[3]byte{0, 9, 154}:     \"ELMO COMPANY, LIMITED\",\n\t[3]byte{0, 9, 155}:     \"Western Telematic Inc.\",\n\t[3]byte{0, 9, 156}:     \"Naval Research Laboratory\",\n\t[3]byte{0, 9, 157}:     \"Haliplex Communications\",\n\t[3]byte{0, 9, 158}:     \"Testech, Inc.\",\n\t[3]byte{0, 9, 159}:     \"VIDEX INC.\",\n\t[3]byte{0, 9, 160}:     \"Microtechno Corporation\",\n\t[3]byte{0, 9, 161}:     \"Telewise Communications, Inc.\",\n\t[3]byte{0, 9, 162}:     \"Interface Co., Ltd.\",\n\t[3]byte{0, 9, 163}:     \"Leadfly Techologies Corp. Ltd.\",\n\t[3]byte{0, 9, 164}:     \"HARTEC Corporation\",\n\t[3]byte{0, 9, 165}:     \"HANSUNG ELETRONIC INDUSTRIES DEVELOPMENT CO., LTD\",\n\t[3]byte{0, 9, 166}:     \"Ignis Optics, Inc.\",\n\t[3]byte{0, 9, 167}:     \"Bang & Olufsen A/S\",\n\t[3]byte{0, 9, 168}:     \"Eastmode Pte Ltd\",\n\t[3]byte{0, 9, 169}:     \"Ikanos Communications\",\n\t[3]byte{0, 9, 170}:     \"Data Comm for Business, Inc.\",\n\t[3]byte{0, 9, 171}:     \"Netcontrol Oy\",\n\t[3]byte{0, 9, 172}:     \"LANVOICE\",\n\t[3]byte{0, 9, 173}:     \"HYUNDAI SYSCOMM, INC.\",\n\t[3]byte{0, 9, 174}:     \"OKANO ELECTRIC CO.,LTD\",\n\t[3]byte{0, 9, 175}:     \"e-generis\",\n\t[3]byte{0, 9, 176}:     \"Onkyo Corporation\",\n\t[3]byte{0, 9, 177}:     \"Kanematsu Electronics, Ltd.\",\n\t[3]byte{0, 9, 178}:     \"L&F Inc.\",\n\t[3]byte{0, 9, 179}:     \"MCM Systems Ltd\",\n\t[3]byte{0, 9, 180}:     \"KISAN TELECOM CO., LTD.\",\n\t[3]byte{0, 9, 181}:     \"3J Tech. Co., Ltd.\",\n\t[3]byte{0, 9, 182}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 9, 183}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 9, 184}:     \"Entise Systems\",\n\t[3]byte{0, 9, 185}:     \"Action Imaging Solutions\",\n\t[3]byte{0, 9, 186}:     \"MAKU Informationstechik GmbH\",\n\t[3]byte{0, 9, 187}:     \"MathStar, Inc.\",\n\t[3]byte{0, 9, 188}:     \"Utility, Inc\",\n\t[3]byte{0, 9, 189}:     \"Epygi Technologies, Ltd.\",\n\t[3]byte{0, 9, 190}:     \"Mamiya-OP Co.,Ltd.\",\n\t[3]byte{0, 9, 191}:     \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 9, 192}:     \"6WIND\",\n\t[3]byte{0, 9, 193}:     \"PROCES-DATA A/S\",\n\t[3]byte{0, 9, 194}:     \"Onity, Inc.\",\n\t[3]byte{0, 9, 195}:     \"NETAS\",\n\t[3]byte{0, 9, 196}:     \"Medicore Co., Ltd\",\n\t[3]byte{0, 9, 197}:     \"KINGENE Technology Corporation\",\n\t[3]byte{0, 9, 198}:     \"Visionics Corporation\",\n\t[3]byte{0, 9, 199}:     \"Movistec\",\n\t[3]byte{0, 9, 200}:     \"SINAGAWA TSUSHIN KEISOU SERVICE\",\n\t[3]byte{0, 9, 201}:     \"BlueWINC Co., Ltd.\",\n\t[3]byte{0, 9, 202}:     \"iMaxNetworks(Shenzhen)Limited.\",\n\t[3]byte{0, 9, 203}:     \"HBrain\",\n\t[3]byte{0, 9, 204}:     \"Moog GmbH\",\n\t[3]byte{0, 9, 205}:     \"HUDSON SOFT CO.,LTD.\",\n\t[3]byte{0, 9, 206}:     \"SpaceBridge Semiconductor Corp.\",\n\t[3]byte{0, 9, 207}:     \"iAd GmbH\",\n\t[3]byte{0, 9, 208}:     \"Solacom Technologies Inc.\",\n\t[3]byte{0, 9, 209}:     \"SERANOA NETWORKS INC\",\n\t[3]byte{0, 9, 210}:     \"Mai Logic Inc.\",\n\t[3]byte{0, 9, 211}:     \"Western DataCom Co., Inc.\",\n\t[3]byte{0, 9, 212}:     \"Transtech Networks\",\n\t[3]byte{0, 9, 213}:     \"Signal Communication, Inc.\",\n\t[3]byte{0, 9, 214}:     \"KNC One GmbH\",\n\t[3]byte{0, 9, 215}:     \"DC Security Products\",\n\t[3]byte{0, 9, 216}:     \"Fält Communications AB\",\n\t[3]byte{0, 9, 217}:     \"Neoscale Systems, Inc\",\n\t[3]byte{0, 9, 218}:     \"Control Module Inc.\",\n\t[3]byte{0, 9, 219}:     \"eSpace\",\n\t[3]byte{0, 9, 220}:     \"Galaxis Technology AG\",\n\t[3]byte{0, 9, 221}:     \"Mavin Technology Inc.\",\n\t[3]byte{0, 9, 222}:     \"Samjin Information & Communications Co., Ltd.\",\n\t[3]byte{0, 9, 223}:     \"Vestel Elektronik San ve Tic. A.Ş.\",\n\t[3]byte{0, 9, 224}:     \"XEMICS S.A.\",\n\t[3]byte{0, 9, 225}:     \"Gemtek Technology Co., Ltd.\",\n\t[3]byte{0, 9, 226}:     \"Sinbon Electronics Co., Ltd.\",\n\t[3]byte{0, 9, 227}:     \"Angel Iglesias S.A.\",\n\t[3]byte{0, 9, 228}:     \"K Tech Infosystem Inc.\",\n\t[3]byte{0, 9, 229}:     \"Hottinger Baldwin Messtechnik GmbH\",\n\t[3]byte{0, 9, 230}:     \"Cyber Switching Inc.\",\n\t[3]byte{0, 9, 231}:     \"ADC Techonology\",\n\t[3]byte{0, 9, 232}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 9, 233}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 9, 234}:     \"YEM Inc.\",\n\t[3]byte{0, 9, 235}:     \"HuMANDATA LTD.\",\n\t[3]byte{0, 9, 236}:     \"Daktronics, Inc.\",\n\t[3]byte{0, 9, 237}:     \"CipherOptics\",\n\t[3]byte{0, 9, 238}:     \"MEIKYO ELECTRIC CO.,LTD\",\n\t[3]byte{0, 9, 239}:     \"Vocera Communications\",\n\t[3]byte{0, 9, 240}:     \"Shimizu Technology Inc.\",\n\t[3]byte{0, 9, 241}:     \"Yamaki Electric Corporation\",\n\t[3]byte{0, 9, 242}:     \"Cohu, Inc., Electronics Division\",\n\t[3]byte{0, 9, 243}:     \"WELL Communication Corp.\",\n\t[3]byte{0, 9, 244}:     \"Alcon Laboratories, Inc.\",\n\t[3]byte{0, 9, 245}:     \"Emerson Network Power Co.,Ltd\",\n\t[3]byte{0, 9, 246}:     \"Shenzhen Eastern Digital Tech Ltd.\",\n\t[3]byte{0, 9, 247}:     \"SED, a division of Calian\",\n\t[3]byte{0, 9, 248}:     \"UNIMO TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 9, 249}:     \"ART JAPAN CO., LTD.\",\n\t[3]byte{0, 9, 251}:     \"Philips Patient Monitoring\",\n\t[3]byte{0, 9, 252}:     \"IPFLEX Inc.\",\n\t[3]byte{0, 9, 253}:     \"Ubinetics Limited\",\n\t[3]byte{0, 9, 254}:     \"Daisy Technologies, Inc.\",\n\t[3]byte{0, 9, 255}:     \"X.net 2000 GmbH\",\n\t[3]byte{0, 10, 0}:      \"Mediatek Corp.\",\n\t[3]byte{0, 10, 1}:      \"SOHOware, Inc.\",\n\t[3]byte{0, 10, 2}:      \"ANNSO CO., LTD.\",\n\t[3]byte{0, 10, 3}:      \"ENDESA SERVICIOS, S.L.\",\n\t[3]byte{0, 10, 4}:      \"3Com Ltd\",\n\t[3]byte{0, 10, 5}:      \"Widax Corp.\",\n\t[3]byte{0, 10, 6}:      \"Teledex LLC\",\n\t[3]byte{0, 10, 7}:      \"WebWayOne Ltd\",\n\t[3]byte{0, 10, 8}:      \"Alpine Electronics, Inc.\",\n\t[3]byte{0, 10, 9}:      \"TaraCom Integrated Products, Inc.\",\n\t[3]byte{0, 10, 10}:     \"SUNIX Co., Ltd.\",\n\t[3]byte{0, 10, 11}:     \"Sealevel Systems, Inc.\",\n\t[3]byte{0, 10, 12}:     \"Scientific Research Corporation\",\n\t[3]byte{0, 10, 13}:     \"Amphenol\",\n\t[3]byte{0, 10, 14}:     \"Invivo Research Inc.\",\n\t[3]byte{0, 10, 15}:     \"Ilryung Telesys, Inc\",\n\t[3]byte{0, 10, 16}:     \"FAST media integrations AG\",\n\t[3]byte{0, 10, 17}:     \"ExPet Technologies, Inc\",\n\t[3]byte{0, 10, 18}:     \"Azylex Technology, Inc\",\n\t[3]byte{0, 10, 19}:     \"Honeywell Video Systems\",\n\t[3]byte{0, 10, 20}:     \"TECO a.s.\",\n\t[3]byte{0, 10, 21}:     \"Silicon Data, Inc\",\n\t[3]byte{0, 10, 22}:     \"Lassen Research\",\n\t[3]byte{0, 10, 23}:     \"NESTAR COMMUNICATIONS, INC\",\n\t[3]byte{0, 10, 24}:     \"Vichel Inc.\",\n\t[3]byte{0, 10, 25}:     \"Valere Power, Inc.\",\n\t[3]byte{0, 10, 26}:     \"Imerge Ltd\",\n\t[3]byte{0, 10, 27}:     \"Stream Labs\",\n\t[3]byte{0, 10, 28}:     \"Bridge Information Co., Ltd.\",\n\t[3]byte{0, 10, 29}:     \"Optical Communications Products Inc.\",\n\t[3]byte{0, 10, 30}:     \"Red-M Products Limited\",\n\t[3]byte{0, 10, 31}:     \"ART WARE Telecommunication Co., Ltd.\",\n\t[3]byte{0, 10, 32}:     \"SVA Networks, Inc.\",\n\t[3]byte{0, 10, 33}:     \"Integra Telecom Co. Ltd\",\n\t[3]byte{0, 10, 34}:     \"Amperion Inc\",\n\t[3]byte{0, 10, 35}:     \"Parama Networks Inc\",\n\t[3]byte{0, 10, 36}:     \"Octave Communications\",\n\t[3]byte{0, 10, 37}:     \"CERAGON NETWORKS\",\n\t[3]byte{0, 10, 38}:     \"CEIA S.p.A.\",\n\t[3]byte{0, 10, 39}:     \"Apple, Inc.\",\n\t[3]byte{0, 10, 40}:     \"Motorola\",\n\t[3]byte{0, 10, 41}:     \"Pan Dacom Networking AG\",\n\t[3]byte{0, 10, 42}:     \"QSI Systems Inc.\",\n\t[3]byte{0, 10, 43}:     \"Etherstuff\",\n\t[3]byte{0, 10, 44}:     \"Active Tchnology Corporation\",\n\t[3]byte{0, 10, 45}:     \"Cabot Communications Limited\",\n\t[3]byte{0, 10, 46}:     \"MAPLE NETWORKS CO., LTD\",\n\t[3]byte{0, 10, 47}:     \"Artnix Inc.\",\n\t[3]byte{0, 10, 48}:     \"Visteon Corporation\",\n\t[3]byte{0, 10, 49}:     \"HCV Consulting\",\n\t[3]byte{0, 10, 50}:     \"Xsido Corporation\",\n\t[3]byte{0, 10, 51}:     \"Emulex Corporation\",\n\t[3]byte{0, 10, 52}:     \"Identicard Systems Incorporated\",\n\t[3]byte{0, 10, 53}:     \"Xilinx\",\n\t[3]byte{0, 10, 54}:     \"Synelec Telecom Multimedia\",\n\t[3]byte{0, 10, 55}:     \"Procera Networks, Inc.\",\n\t[3]byte{0, 10, 56}:     \"Apani Networks\",\n\t[3]byte{0, 10, 57}:     \"LoPA Information Technology\",\n\t[3]byte{0, 10, 58}:     \"J-THREE INTERNATIONAL Holding Co., Ltd.\",\n\t[3]byte{0, 10, 59}:     \"GCT Semiconductor, Inc\",\n\t[3]byte{0, 10, 60}:     \"Enerpoint Ltd.\",\n\t[3]byte{0, 10, 61}:     \"Elo Sistemas Eletronicos S.A.\",\n\t[3]byte{0, 10, 62}:     \"EADS Telecom\",\n\t[3]byte{0, 10, 63}:     \"Data East Corporation\",\n\t[3]byte{0, 10, 64}:     \"Crown Audio -- Harmanm International\",\n\t[3]byte{0, 10, 65}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 10, 66}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 10, 67}:     \"Chunghwa Telecom Co., Ltd.\",\n\t[3]byte{0, 10, 68}:     \"Avery Dennison Deutschland GmbH\",\n\t[3]byte{0, 10, 69}:     \"Audio-Technica Corp.\",\n\t[3]byte{0, 10, 70}:     \"ARO WELDING TECHNOLOGIES SAS\",\n\t[3]byte{0, 10, 71}:     \"Allied Vision Technologies\",\n\t[3]byte{0, 10, 72}:     \"Albatron Technology\",\n\t[3]byte{0, 10, 73}:     \"F5 Networks, Inc.\",\n\t[3]byte{0, 10, 74}:     \"Targa Systems Ltd.\",\n\t[3]byte{0, 10, 75}:     \"DataPower Technology, Inc.\",\n\t[3]byte{0, 10, 76}:     \"Molecular Devices Corporation\",\n\t[3]byte{0, 10, 77}:     \"Noritz Corporation\",\n\t[3]byte{0, 10, 78}:     \"UNITEK Electronics INC.\",\n\t[3]byte{0, 10, 79}:     \"Brain Boxes Limited\",\n\t[3]byte{0, 10, 80}:     \"REMOTEK CORPORATION\",\n\t[3]byte{0, 10, 81}:     \"GyroSignal Technology Co., Ltd.\",\n\t[3]byte{0, 10, 82}:     \"AsiaRF Ltd.\",\n\t[3]byte{0, 10, 83}:     \"Intronics, Incorporated\",\n\t[3]byte{0, 10, 84}:     \"Laguna Hills, Inc.\",\n\t[3]byte{0, 10, 85}:     \"MARKEM Corporation\",\n\t[3]byte{0, 10, 86}:     \"HITACHI Maxell Ltd.\",\n\t[3]byte{0, 10, 87}:     \"Hewlett Packard\",\n\t[3]byte{0, 10, 88}:     \"Freyer & Siegel Elektronik GmbH & Co. KG\",\n\t[3]byte{0, 10, 89}:     \"HW server\",\n\t[3]byte{0, 10, 90}:     \"GreenNET Technologies Co.,Ltd.\",\n\t[3]byte{0, 10, 91}:     \"Power-One as\",\n\t[3]byte{0, 10, 92}:     \"Carel s.p.a.\",\n\t[3]byte{0, 10, 93}:     \"FingerTec Worldwide Sdn Bhd\",\n\t[3]byte{0, 10, 94}:     \"3COM\",\n\t[3]byte{0, 10, 95}:     \"almedio inc.\",\n\t[3]byte{0, 10, 96}:     \"Autostar Technology Pte Ltd\",\n\t[3]byte{0, 10, 97}:     \"Cellinx Systems Inc.\",\n\t[3]byte{0, 10, 98}:     \"Crinis Networks, Inc.\",\n\t[3]byte{0, 10, 99}:     \"DHD GmbH\",\n\t[3]byte{0, 10, 100}:    \"Eracom Technologies\",\n\t[3]byte{0, 10, 101}:    \"GentechMedia.co.,ltd.\",\n\t[3]byte{0, 10, 102}:    \"MITSUBISHI ELECTRIC SYSTEM & SERVICE CO.,LTD.\",\n\t[3]byte{0, 10, 103}:    \"OngCorp\",\n\t[3]byte{0, 10, 104}:    \"Solarflare Communications Inc.\",\n\t[3]byte{0, 10, 105}:    \"SUNNY bell Technology Co., Ltd.\",\n\t[3]byte{0, 10, 106}:    \"SVM Microwaves s.r.o.\",\n\t[3]byte{0, 10, 107}:    \"Tadiran Telecom Business Systems LTD\",\n\t[3]byte{0, 10, 108}:    \"Walchem Corporation\",\n\t[3]byte{0, 10, 109}:    \"EKS Elektronikservice GmbH\",\n\t[3]byte{0, 10, 110}:    \"Harmonic, Inc\",\n\t[3]byte{0, 10, 111}:    \"ZyFLEX Technologies Inc\",\n\t[3]byte{0, 10, 112}:    \"MPLS Forum\",\n\t[3]byte{0, 10, 113}:    \"Avrio Technologies, Inc\",\n\t[3]byte{0, 10, 114}:    \"STEC, INC.\",\n\t[3]byte{0, 10, 115}:    \"Scientific Atlanta\",\n\t[3]byte{0, 10, 116}:    \"Manticom Networks Inc.\",\n\t[3]byte{0, 10, 117}:    \"Caterpillar, Inc\",\n\t[3]byte{0, 10, 118}:    \"Beida Jade Bird Huaguang Technology Co.,Ltd\",\n\t[3]byte{0, 10, 119}:    \"Bluewire Technologies LLC\",\n\t[3]byte{0, 10, 120}:    \"OLITEC\",\n\t[3]byte{0, 10, 121}:    \"corega K.K\",\n\t[3]byte{0, 10, 122}:    \"Kyoritsu Electric Co., Ltd.\",\n\t[3]byte{0, 10, 123}:    \"Cornelius Consult\",\n\t[3]byte{0, 10, 124}:    \"Tecton Ltd\",\n\t[3]byte{0, 10, 125}:    \"Valo, Inc.\",\n\t[3]byte{0, 10, 126}:    \"The Advantage Group\",\n\t[3]byte{0, 10, 127}:    \"Teradon Industries, Inc\",\n\t[3]byte{0, 10, 128}:    \"Telkonet Inc.\",\n\t[3]byte{0, 10, 129}:    \"TEIMA Audiotex S.L.\",\n\t[3]byte{0, 10, 130}:    \"TATSUTA SYSTEM ELECTRONICS CO.,LTD.\",\n\t[3]byte{0, 10, 131}:    \"SALTO SYSTEMS S.L.\",\n\t[3]byte{0, 10, 132}:    \"Rainsun Enterprise Co., Ltd.\",\n\t[3]byte{0, 10, 133}:    \"PLAT'C2,Inc\",\n\t[3]byte{0, 10, 134}:    \"Lenze\",\n\t[3]byte{0, 10, 135}:    \"Integrated Micromachines Inc.\",\n\t[3]byte{0, 10, 136}:    \"InCypher S.A.\",\n\t[3]byte{0, 10, 137}:    \"Creval Systems, Inc.\",\n\t[3]byte{0, 10, 138}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 10, 139}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 10, 140}:    \"Guardware Systems Ltd.\",\n\t[3]byte{0, 10, 141}:    \"EUROTHERM LIMITED\",\n\t[3]byte{0, 10, 142}:    \"Invacom Ltd\",\n\t[3]byte{0, 10, 143}:    \"Aska International Inc.\",\n\t[3]byte{0, 10, 144}:    \"Bayside Interactive, Inc.\",\n\t[3]byte{0, 10, 145}:    \"HemoCue AB\",\n\t[3]byte{0, 10, 146}:    \"Presonus Corporation\",\n\t[3]byte{0, 10, 147}:    \"W2 Networks, Inc.\",\n\t[3]byte{0, 10, 148}:    \"ShangHai cellink CO., LTD\",\n\t[3]byte{0, 10, 149}:    \"Apple, Inc.\",\n\t[3]byte{0, 10, 150}:    \"MEWTEL TECHNOLOGY INC.\",\n\t[3]byte{0, 10, 151}:    \"SONICblue, Inc.\",\n\t[3]byte{0, 10, 152}:    \"M+F Gwinner GmbH & Co\",\n\t[3]byte{0, 10, 153}:    \"Calamp Wireless Networks Inc\",\n\t[3]byte{0, 10, 154}:    \"Aiptek International Inc\",\n\t[3]byte{0, 10, 155}:    \"TB Group Inc\",\n\t[3]byte{0, 10, 156}:    \"Server Technology, Inc.\",\n\t[3]byte{0, 10, 157}:    \"King Young Technology Co. Ltd.\",\n\t[3]byte{0, 10, 158}:    \"BroadWeb Corportation\",\n\t[3]byte{0, 10, 159}:    \"Pannaway Technologies, Inc.\",\n\t[3]byte{0, 10, 160}:    \"Cedar Point Communications\",\n\t[3]byte{0, 10, 161}:    \"V V S Limited\",\n\t[3]byte{0, 10, 162}:    \"SYSTEK INC.\",\n\t[3]byte{0, 10, 163}:    \"SHIMAFUJI ELECTRIC CO.,LTD.\",\n\t[3]byte{0, 10, 164}:    \"SHANGHAI SURVEILLANCE TECHNOLOGY CO,LTD\",\n\t[3]byte{0, 10, 165}:    \"MAXLINK INDUSTRIES LIMITED\",\n\t[3]byte{0, 10, 166}:    \"Hochiki Corporation\",\n\t[3]byte{0, 10, 167}:    \"FEI Electron Optics\",\n\t[3]byte{0, 10, 168}:    \"ePipe Pty. Ltd.\",\n\t[3]byte{0, 10, 169}:    \"Brooks Automation GmbH\",\n\t[3]byte{0, 10, 170}:    \"AltiGen Communications Inc.\",\n\t[3]byte{0, 10, 171}:    \"Toyota Technical Development Corporation\",\n\t[3]byte{0, 10, 172}:    \"TerraTec Electronic GmbH\",\n\t[3]byte{0, 10, 173}:    \"Stargames Corporation\",\n\t[3]byte{0, 10, 174}:    \"Rosemount Process Analytical\",\n\t[3]byte{0, 10, 175}:    \"Pipal Systems\",\n\t[3]byte{0, 10, 176}:    \"LOYTEC electronics GmbH\",\n\t[3]byte{0, 10, 177}:    \"GENETEC Corporation\",\n\t[3]byte{0, 10, 178}:    \"Fresnel Wireless Systems\",\n\t[3]byte{0, 10, 179}:    \"Fa. GIRA\",\n\t[3]byte{0, 10, 180}:    \"ETIC Telecommunications\",\n\t[3]byte{0, 10, 181}:    \"Digital Electronic Network\",\n\t[3]byte{0, 10, 182}:    \"COMPUNETIX, INC\",\n\t[3]byte{0, 10, 183}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 10, 184}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 10, 185}:    \"Astera Technologies Corp.\",\n\t[3]byte{0, 10, 186}:    \"Arcon Technology Limited\",\n\t[3]byte{0, 10, 187}:    \"Taiwan Secom Co,. Ltd\",\n\t[3]byte{0, 10, 188}:    \"Seabridge Ltd.\",\n\t[3]byte{0, 10, 189}:    \"Rupprecht & Patashnick Co.\",\n\t[3]byte{0, 10, 190}:    \"OPNET Technologies CO., LTD.\",\n\t[3]byte{0, 10, 191}:    \"HIROTA SS\",\n\t[3]byte{0, 10, 192}:    \"Fuyoh Video Industry CO., LTD.\",\n\t[3]byte{0, 10, 193}:    \"Futuretel\",\n\t[3]byte{0, 10, 194}:    \"Wuhan FiberHome Digital Technology Co.,Ltd.\",\n\t[3]byte{0, 10, 195}:    \"eM Technics Co., Ltd.\",\n\t[3]byte{0, 10, 196}:    \"Daewoo Teletech Co., Ltd\",\n\t[3]byte{0, 10, 197}:    \"Color Kinetics\",\n\t[3]byte{0, 10, 198}:    \"Overture Networks.\",\n\t[3]byte{0, 10, 199}:    \"Unication Group\",\n\t[3]byte{0, 10, 200}:    \"ZPSYS CO.,LTD. (Planning&Management)\",\n\t[3]byte{0, 10, 201}:    \"Zambeel Inc\",\n\t[3]byte{0, 10, 202}:    \"YOKOYAMA SHOKAI CO.,Ltd.\",\n\t[3]byte{0, 10, 203}:    \"XPAK MSA Group\",\n\t[3]byte{0, 10, 204}:    \"Winnow Networks, Inc.\",\n\t[3]byte{0, 10, 205}:    \"Sunrich Technology Limited\",\n\t[3]byte{0, 10, 206}:    \"RADIANTECH, INC.\",\n\t[3]byte{0, 10, 207}:    \"PROVIDEO Multimedia Co. Ltd.\",\n\t[3]byte{0, 10, 208}:    \"Niigata Develoment Center,  F.I.T. Co., Ltd.\",\n\t[3]byte{0, 10, 209}:    \"MWS\",\n\t[3]byte{0, 10, 210}:    \"JEPICO Corporation\",\n\t[3]byte{0, 10, 211}:    \"INITECH Co., Ltd\",\n\t[3]byte{0, 10, 212}:    \"CoreBell Systems Inc.\",\n\t[3]byte{0, 10, 213}:    \"Brainchild Electronic Co., Ltd.\",\n\t[3]byte{0, 10, 214}:    \"BeamReach Networks\",\n\t[3]byte{0, 10, 215}:    \"Origin ELECTRIC CO.,LTD.\",\n\t[3]byte{0, 10, 216}:    \"IPCserv Technology Corp.\",\n\t[3]byte{0, 10, 217}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 10, 218}:    \"Vindicator Technologies\",\n\t[3]byte{0, 10, 219}:    \"Trilliant\",\n\t[3]byte{0, 10, 220}:    \"RuggedCom Inc.\",\n\t[3]byte{0, 10, 221}:    \"Allworx Corp.\",\n\t[3]byte{0, 10, 222}:    \"Happy Communication Co., Ltd.\",\n\t[3]byte{0, 10, 223}:    \"Gennum Corporation\",\n\t[3]byte{0, 10, 224}:    \"Fujitsu Softek\",\n\t[3]byte{0, 10, 225}:    \"EG Technology\",\n\t[3]byte{0, 10, 226}:    \"Binatone Electronics International, Ltd\",\n\t[3]byte{0, 10, 227}:    \"YANG MEI TECHNOLOGY CO., LTD\",\n\t[3]byte{0, 10, 228}:    \"Wistron Corporation\",\n\t[3]byte{0, 10, 229}:    \"ScottCare Corporation\",\n\t[3]byte{0, 10, 230}:    \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{0, 10, 231}:    \"ELIOP S.A.\",\n\t[3]byte{0, 10, 232}:    \"Cathay Roxus Information Technology Co. LTD\",\n\t[3]byte{0, 10, 233}:    \"AirVast Technology Inc.\",\n\t[3]byte{0, 10, 234}:    \"ADAM ELEKTRONIK LTD. ŞTI\",\n\t[3]byte{0, 10, 235}:    \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{0, 10, 236}:    \"Koatsu Gas Kogyo Co., Ltd.\",\n\t[3]byte{0, 10, 237}:    \"HARTING Electronics GmbH\",\n\t[3]byte{0, 10, 238}:    \"GCD Hard- & Software GmbH\",\n\t[3]byte{0, 10, 239}:    \"OTRUM ASA\",\n\t[3]byte{0, 10, 240}:    \"SHIN-OH ELECTRONICS CO., LTD. R&D\",\n\t[3]byte{0, 10, 241}:    \"Clarity Design, Inc.\",\n\t[3]byte{0, 10, 242}:    \"NeoAxiom Corp.\",\n\t[3]byte{0, 10, 243}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 10, 244}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 10, 245}:    \"Airgo Networks, Inc.\",\n\t[3]byte{0, 10, 246}:    \"Emerson Climate Technologies Retail Solutions, Inc.\",\n\t[3]byte{0, 10, 247}:    \"Broadcom\",\n\t[3]byte{0, 10, 248}:    \"American Telecare Inc.\",\n\t[3]byte{0, 10, 249}:    \"HiConnect, Inc.\",\n\t[3]byte{0, 10, 250}:    \"Traverse Technologies Australia\",\n\t[3]byte{0, 10, 251}:    \"Ambri Limited\",\n\t[3]byte{0, 10, 252}:    \"Core Tec Communications, LLC\",\n\t[3]byte{0, 10, 253}:    \"Kentec Electronics\",\n\t[3]byte{0, 10, 254}:    \"NovaPal Ltd\",\n\t[3]byte{0, 10, 255}:    \"Kilchherr Elektronik AG\",\n\t[3]byte{0, 11, 0}:      \"FUJIAN START COMPUTER EQUIPMENT CO.,LTD\",\n\t[3]byte{0, 11, 1}:      \"DAIICHI ELECTRONICS CO., LTD.\",\n\t[3]byte{0, 11, 2}:      \"Dallmeier electronic\",\n\t[3]byte{0, 11, 3}:      \"Taekwang Industrial Co., Ltd\",\n\t[3]byte{0, 11, 4}:      \"Volktek Corporation\",\n\t[3]byte{0, 11, 5}:      \"Pacific Broadband Networks\",\n\t[3]byte{0, 11, 6}:      \"ARRIS Group, Inc.\",\n\t[3]byte{0, 11, 7}:      \"Voxpath Networks\",\n\t[3]byte{0, 11, 8}:      \"Pillar Data Systems\",\n\t[3]byte{0, 11, 9}:      \"Ifoundry Systems Singapore\",\n\t[3]byte{0, 11, 10}:     \"dBm Optics\",\n\t[3]byte{0, 11, 11}:     \"Corrent Corporation\",\n\t[3]byte{0, 11, 12}:     \"Agile Systems Inc.\",\n\t[3]byte{0, 11, 13}:     \"Air2U, Inc.\",\n\t[3]byte{0, 11, 14}:     \"Trapeze Networks\",\n\t[3]byte{0, 11, 15}:     \"Bosch Rexroth\",\n\t[3]byte{0, 11, 16}:     \"11wave Technonlogy Co.,Ltd\",\n\t[3]byte{0, 11, 17}:     \"HIMEJI ABC TRADING CO.,LTD.\",\n\t[3]byte{0, 11, 18}:     \"NURI Telecom Co., Ltd.\",\n\t[3]byte{0, 11, 19}:     \"ZETRON INC\",\n\t[3]byte{0, 11, 20}:     \"ViewSonic Corporation\",\n\t[3]byte{0, 11, 21}:     \"Platypus Technology\",\n\t[3]byte{0, 11, 22}:     \"Communication Machinery Corporation\",\n\t[3]byte{0, 11, 23}:     \"MKS Instruments\",\n\t[3]byte{0, 11, 24}:     \"Private\",\n\t[3]byte{0, 11, 25}:     \"Vernier Networks, Inc.\",\n\t[3]byte{0, 11, 26}:     \"Industrial Defender, Inc.\",\n\t[3]byte{0, 11, 27}:     \"Systronix, Inc.\",\n\t[3]byte{0, 11, 28}:     \"SIBCO bv\",\n\t[3]byte{0, 11, 29}:     \"LayerZero Power Systems, Inc.\",\n\t[3]byte{0, 11, 30}:     \"KAPPA opto-electronics GmbH\",\n\t[3]byte{0, 11, 31}:     \"I CON Computer Co.\",\n\t[3]byte{0, 11, 32}:     \"Hirata corporation\",\n\t[3]byte{0, 11, 33}:     \"G-Star Communications Inc.\",\n\t[3]byte{0, 11, 34}:     \"Environmental Systems and Services\",\n\t[3]byte{0, 11, 35}:     \"Siemens Home & Office Comm. Devices\",\n\t[3]byte{0, 11, 36}:     \"AirLogic\",\n\t[3]byte{0, 11, 37}:     \"Aeluros\",\n\t[3]byte{0, 11, 38}:     \"Wetek Corporation\",\n\t[3]byte{0, 11, 39}:     \"Scion Corporation\",\n\t[3]byte{0, 11, 40}:     \"Quatech Inc.\",\n\t[3]byte{0, 11, 41}:     \"LS(LG) Industrial Systems co.,Ltd\",\n\t[3]byte{0, 11, 42}:     \"HOWTEL Co., Ltd.\",\n\t[3]byte{0, 11, 43}:     \"HOSTNET CORPORATION\",\n\t[3]byte{0, 11, 44}:     \"Eiki Industrial Co. Ltd.\",\n\t[3]byte{0, 11, 45}:     \"Danfoss Inc.\",\n\t[3]byte{0, 11, 46}:     \"Cal-Comp Electronics & Communications Company Ltd.\",\n\t[3]byte{0, 11, 47}:     \"bplan GmbH\",\n\t[3]byte{0, 11, 48}:     \"Beijing Gongye Science & Technology Co.,Ltd\",\n\t[3]byte{0, 11, 49}:     \"Yantai ZhiYang Scientific and technology industry CO., LTD\",\n\t[3]byte{0, 11, 50}:     \"VORMETRIC, INC.\",\n\t[3]byte{0, 11, 51}:     \"Vivato Technologies\",\n\t[3]byte{0, 11, 52}:     \"ShangHai Broadband Technologies CO.LTD\",\n\t[3]byte{0, 11, 53}:     \"Quad Bit System co., Ltd.\",\n\t[3]byte{0, 11, 54}:     \"Productivity Systems, Inc.\",\n\t[3]byte{0, 11, 55}:     \"MANUFACTURE DES MONTRES ROLEX SA\",\n\t[3]byte{0, 11, 56}:     \"Knürr GmbH\",\n\t[3]byte{0, 11, 57}:     \"Keisoku Giken Co.,Ltd.\",\n\t[3]byte{0, 11, 58}:     \"QuStream Corporation\",\n\t[3]byte{0, 11, 59}:     \"devolo AG\",\n\t[3]byte{0, 11, 60}:     \"Cygnal Integrated Products, Inc.\",\n\t[3]byte{0, 11, 61}:     \"CONTAL OK Ltd.\",\n\t[3]byte{0, 11, 62}:     \"BittWare, Inc\",\n\t[3]byte{0, 11, 63}:     \"Anthology Solutions Inc.\",\n\t[3]byte{0, 11, 64}:     \"Cambridge Industries Group (CIG)\",\n\t[3]byte{0, 11, 65}:     \"Ing. Büro Dr. Beutlhauser\",\n\t[3]byte{0, 11, 66}:     \"commax Co., Ltd.\",\n\t[3]byte{0, 11, 67}:     \"Microscan Systems, Inc.\",\n\t[3]byte{0, 11, 68}:     \"Concord IDea Corp.\",\n\t[3]byte{0, 11, 69}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 11, 70}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 11, 71}:     \"Advanced Energy\",\n\t[3]byte{0, 11, 72}:     \"sofrel\",\n\t[3]byte{0, 11, 73}:     \"RF-Link System Inc.\",\n\t[3]byte{0, 11, 74}:     \"Visimetrics (UK) Ltd\",\n\t[3]byte{0, 11, 75}:     \"VISIOWAVE SA\",\n\t[3]byte{0, 11, 76}:     \"Clarion (M) Sdn Bhd\",\n\t[3]byte{0, 11, 77}:     \"Emuzed\",\n\t[3]byte{0, 11, 78}:     \"VertexRSI, General Dynamics SatCOM Technologies, Inc.\",\n\t[3]byte{0, 11, 79}:     \"Verifone\",\n\t[3]byte{0, 11, 80}:     \"Oxygnet\",\n\t[3]byte{0, 11, 81}:     \"Micetek International Inc.\",\n\t[3]byte{0, 11, 82}:     \"JOYMAX ELECTRONICS CO. LTD.\",\n\t[3]byte{0, 11, 83}:     \"INITIUM Co., Ltd.\",\n\t[3]byte{0, 11, 84}:     \"BiTMICRO Networks, Inc.\",\n\t[3]byte{0, 11, 85}:     \"ADInstruments\",\n\t[3]byte{0, 11, 86}:     \"Cybernetics\",\n\t[3]byte{0, 11, 87}:     \"Silicon Laboratories\",\n\t[3]byte{0, 11, 88}:     \"Astronautics C.A  LTD\",\n\t[3]byte{0, 11, 89}:     \"ScriptPro, LLC\",\n\t[3]byte{0, 11, 90}:     \"HyperEdge\",\n\t[3]byte{0, 11, 91}:     \"Rincon Research Corporation\",\n\t[3]byte{0, 11, 92}:     \"Newtech Co.,Ltd\",\n\t[3]byte{0, 11, 93}:     \"FUJITSU LIMITED\",\n\t[3]byte{0, 11, 94}:     \"Audio Engineering Society Inc.\",\n\t[3]byte{0, 11, 95}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 11, 96}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 11, 97}:     \"Friedrich Lütze GmbH & Co. KG\",\n\t[3]byte{0, 11, 98}:     \"ib-mohnen KG\",\n\t[3]byte{0, 11, 99}:     \"Kaleidescape\",\n\t[3]byte{0, 11, 100}:    \"Kieback & Peter GmbH & Co KG\",\n\t[3]byte{0, 11, 101}:    \"Sy.A.C. srl\",\n\t[3]byte{0, 11, 102}:    \"Teralink Communications\",\n\t[3]byte{0, 11, 103}:    \"Topview Technology Corporation\",\n\t[3]byte{0, 11, 104}:    \"Addvalue Communications Pte Ltd\",\n\t[3]byte{0, 11, 105}:    \"Franke Finland Oy\",\n\t[3]byte{0, 11, 106}:    \"Asiarock Technology Limited\",\n\t[3]byte{0, 11, 107}:    \"Wistron Neweb Corporation\",\n\t[3]byte{0, 11, 108}:    \"Sychip Inc.\",\n\t[3]byte{0, 11, 109}:    \"SOLECTRON JAPAN NAKANIIDA\",\n\t[3]byte{0, 11, 110}:    \"Neff Instrument Corp.\",\n\t[3]byte{0, 11, 111}:    \"Media Streaming Networks Inc\",\n\t[3]byte{0, 11, 112}:    \"Load Technology, Inc.\",\n\t[3]byte{0, 11, 113}:    \"Litchfield Communications Inc.\",\n\t[3]byte{0, 11, 114}:    \"Lawo AG\",\n\t[3]byte{0, 11, 115}:    \"Kodeos Communications\",\n\t[3]byte{0, 11, 116}:    \"Kingwave Technology Co., Ltd.\",\n\t[3]byte{0, 11, 117}:    \"Iosoft Ltd.\",\n\t[3]byte{0, 11, 118}:    \"ET&T Technology Co. Ltd.\",\n\t[3]byte{0, 11, 119}:    \"Cogent Systems, Inc.\",\n\t[3]byte{0, 11, 120}:    \"TAIFATECH INC.\",\n\t[3]byte{0, 11, 121}:    \"X-COM, Inc.\",\n\t[3]byte{0, 11, 122}:    \"L-3 Linkabit\",\n\t[3]byte{0, 11, 123}:    \"Test-Um Inc.\",\n\t[3]byte{0, 11, 124}:    \"Telex Communications\",\n\t[3]byte{0, 11, 125}:    \"SOLOMON EXTREME INTERNATIONAL LTD.\",\n\t[3]byte{0, 11, 126}:    \"SAGINOMIYA Seisakusho Inc.\",\n\t[3]byte{0, 11, 127}:    \"Align Engineering LLC\",\n\t[3]byte{0, 11, 128}:    \"Lycium Networks\",\n\t[3]byte{0, 11, 129}:    \"Kaparel Corporation\",\n\t[3]byte{0, 11, 130}:    \"Grandstream Networks, Inc.\",\n\t[3]byte{0, 11, 131}:    \"DATAWATT B.V.\",\n\t[3]byte{0, 11, 132}:    \"BODET\",\n\t[3]byte{0, 11, 133}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 11, 134}:    \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{0, 11, 135}:    \"American Reliance Inc.\",\n\t[3]byte{0, 11, 136}:    \"Vidisco ltd.\",\n\t[3]byte{0, 11, 137}:    \"Top Global Technology, Ltd.\",\n\t[3]byte{0, 11, 138}:    \"MITEQ Inc.\",\n\t[3]byte{0, 11, 139}:    \"KERAJET, S.A.\",\n\t[3]byte{0, 11, 140}:    \"Flextronics\",\n\t[3]byte{0, 11, 141}:    \"Avvio Networks\",\n\t[3]byte{0, 11, 142}:    \"Ascent Corporation\",\n\t[3]byte{0, 11, 143}:    \"AKITA ELECTRONICS SYSTEMS CO.,LTD.\",\n\t[3]byte{0, 11, 144}:    \"ADVA Optical Networking Ltd.\",\n\t[3]byte{0, 11, 145}:    \"Aglaia Gesellschaft für Bildverarbeitung und Kommunikation mbH\",\n\t[3]byte{0, 11, 146}:    \"Ascom Danmark A/S\",\n\t[3]byte{0, 11, 147}:    \"Ritter Elektronik\",\n\t[3]byte{0, 11, 148}:    \"Digital Monitoring Products, Inc.\",\n\t[3]byte{0, 11, 149}:    \"eBet Gaming Systems Pty Ltd\",\n\t[3]byte{0, 11, 150}:    \"Innotrac Diagnostics Oy\",\n\t[3]byte{0, 11, 151}:    \"Matsushita Electric Industrial Co.,Ltd.\",\n\t[3]byte{0, 11, 152}:    \"NiceTechVision\",\n\t[3]byte{0, 11, 153}:    \"SensAble Technologies, Inc.\",\n\t[3]byte{0, 11, 154}:    \"Shanghai Ulink Telecom Equipment Co. Ltd.\",\n\t[3]byte{0, 11, 155}:    \"Sirius System Co, Ltd.\",\n\t[3]byte{0, 11, 156}:    \"TriBeam Technologies, Inc.\",\n\t[3]byte{0, 11, 157}:    \"TwinMOS Technologies Inc.\",\n\t[3]byte{0, 11, 158}:    \"Yasing Technology Corp.\",\n\t[3]byte{0, 11, 159}:    \"Neue ELSA GmbH\",\n\t[3]byte{0, 11, 160}:    \"T&L Information Inc.\",\n\t[3]byte{0, 11, 161}:    \"Fujikura Solutions Ltd.\",\n\t[3]byte{0, 11, 162}:    \"Sumitomo Electric Industries, Ltd\",\n\t[3]byte{0, 11, 163}:    \"Siemens AG\",\n\t[3]byte{0, 11, 164}:    \"Shiron Satellite Communications Ltd. (1996)\",\n\t[3]byte{0, 11, 165}:    \"Quasar Cipta Mandiri, PT\",\n\t[3]byte{0, 11, 166}:    \"Miyakawa Electric Works Ltd.\",\n\t[3]byte{0, 11, 167}:    \"Maranti Networks\",\n\t[3]byte{0, 11, 168}:    \"HANBACK ELECTRONICS CO., LTD.\",\n\t[3]byte{0, 11, 169}:    \"CloudShield Technologies, Inc.\",\n\t[3]byte{0, 11, 170}:    \"Aiphone co.,Ltd\",\n\t[3]byte{0, 11, 171}:    \"Advantech Technology (CHINA) Co., Ltd.\",\n\t[3]byte{0, 11, 172}:    \"3Com Ltd\",\n\t[3]byte{0, 11, 173}:    \"PC-PoS Inc.\",\n\t[3]byte{0, 11, 174}:    \"Vitals System Inc.\",\n\t[3]byte{0, 11, 175}:    \"WOOJU COMMUNICATIONS Co,.Ltd\",\n\t[3]byte{0, 11, 176}:    \"Sysnet Telematica srl\",\n\t[3]byte{0, 11, 177}:    \"Super Star Technology Co., Ltd.\",\n\t[3]byte{0, 11, 178}:    \"SMALLBIG TECHNOLOGY\",\n\t[3]byte{0, 11, 179}:    \"RiT technologies Ltd.\",\n\t[3]byte{0, 11, 180}:    \"RDC Semiconductor Inc.,\",\n\t[3]byte{0, 11, 181}:    \"nStor Technologies, Inc.\",\n\t[3]byte{0, 11, 182}:    \"Metalligence Technology Corp.\",\n\t[3]byte{0, 11, 183}:    \"Micro Systems Co.,Ltd.\",\n\t[3]byte{0, 11, 184}:    \"Kihoku Electronic Co.\",\n\t[3]byte{0, 11, 185}:    \"Imsys AB\",\n\t[3]byte{0, 11, 186}:    \"Harmonic, Inc\",\n\t[3]byte{0, 11, 187}:    \"Etin Systems Co., Ltd\",\n\t[3]byte{0, 11, 188}:    \"En Garde Systems, Inc.\",\n\t[3]byte{0, 11, 189}:    \"Connexionz Limited\",\n\t[3]byte{0, 11, 190}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 11, 191}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 11, 192}:    \"China IWNComm Co., Ltd.\",\n\t[3]byte{0, 11, 193}:    \"Bay Microsystems, Inc.\",\n\t[3]byte{0, 11, 194}:    \"Corinex Communication Corp.\",\n\t[3]byte{0, 11, 195}:    \"Multiplex, Inc.\",\n\t[3]byte{0, 11, 196}:    \"BIOTRONIK GmbH & Co\",\n\t[3]byte{0, 11, 197}:    \"SMC Networks, Inc.\",\n\t[3]byte{0, 11, 198}:    \"ISAC, Inc.\",\n\t[3]byte{0, 11, 199}:    \"ICET S.p.A.\",\n\t[3]byte{0, 11, 200}:    \"AirFlow Networks\",\n\t[3]byte{0, 11, 201}:    \"Electroline Equipment\",\n\t[3]byte{0, 11, 202}:    \"DATAVAN TC\",\n\t[3]byte{0, 11, 203}:    \"Fagor Automation , S. Coop\",\n\t[3]byte{0, 11, 204}:    \"JUSAN, S.A.\",\n\t[3]byte{0, 11, 205}:    \"Hewlett Packard\",\n\t[3]byte{0, 11, 206}:    \"Free2move AB\",\n\t[3]byte{0, 11, 207}:    \"AGFA NDT INC.\",\n\t[3]byte{0, 11, 208}:    \"XiMeta Technology Americas Inc.\",\n\t[3]byte{0, 11, 209}:    \"Aeronix, Inc.\",\n\t[3]byte{0, 11, 210}:    \"Remopro Technology Inc.\",\n\t[3]byte{0, 11, 211}:    \"cd3o\",\n\t[3]byte{0, 11, 212}:    \"Beijing Wise Technology & Science Development Co.Ltd\",\n\t[3]byte{0, 11, 213}:    \"Nvergence, Inc.\",\n\t[3]byte{0, 11, 214}:    \"Paxton Access Ltd\",\n\t[3]byte{0, 11, 215}:    \"DORMA Time + Access GmbH\",\n\t[3]byte{0, 11, 216}:    \"Industrial Scientific Corp.\",\n\t[3]byte{0, 11, 217}:    \"General Hydrogen\",\n\t[3]byte{0, 11, 218}:    \"EyeCross Co.,Inc.\",\n\t[3]byte{0, 11, 219}:    \"Dell Inc.\",\n\t[3]byte{0, 11, 220}:    \"AKCP\",\n\t[3]byte{0, 11, 221}:    \"TOHOKU RICOH Co., LTD.\",\n\t[3]byte{0, 11, 222}:    \"TELDIX GmbH\",\n\t[3]byte{0, 11, 223}:    \"Shenzhen RouterD Networks Limited\",\n\t[3]byte{0, 11, 224}:    \"SercoNet Ltd.\",\n\t[3]byte{0, 11, 225}:    \"Nokia NET Product Operations\",\n\t[3]byte{0, 11, 226}:    \"Lumenera Corporation\",\n\t[3]byte{0, 11, 227}:    \"Key Stream Co., Ltd.\",\n\t[3]byte{0, 11, 228}:    \"Hosiden Corporation\",\n\t[3]byte{0, 11, 229}:    \"HIMS International Corporation\",\n\t[3]byte{0, 11, 230}:    \"Datel Electronics\",\n\t[3]byte{0, 11, 231}:    \"COMFLUX TECHNOLOGY INC.\",\n\t[3]byte{0, 11, 232}:    \"AOIP\",\n\t[3]byte{0, 11, 233}:    \"Actel Corporation\",\n\t[3]byte{0, 11, 234}:    \"Zultys Technologies\",\n\t[3]byte{0, 11, 235}:    \"Systegra AG\",\n\t[3]byte{0, 11, 236}:    \"NIPPON ELECTRIC INSTRUMENT, INC.\",\n\t[3]byte{0, 11, 237}:    \"ELM Inc.\",\n\t[3]byte{0, 11, 238}:    \"inc.jet, Incorporated\",\n\t[3]byte{0, 11, 239}:    \"Code Corporation\",\n\t[3]byte{0, 11, 240}:    \"MoTEX Products Co., Ltd.\",\n\t[3]byte{0, 11, 241}:    \"LAP Laser Applikations\",\n\t[3]byte{0, 11, 242}:    \"Chih-Kan Technology Co., Ltd.\",\n\t[3]byte{0, 11, 243}:    \"BAE SYSTEMS\",\n\t[3]byte{0, 11, 244}:    \"Private\",\n\t[3]byte{0, 11, 245}:    \"Shanghai Sibo Telecom Technology Co.,Ltd\",\n\t[3]byte{0, 11, 246}:    \"Nitgen Co., Ltd\",\n\t[3]byte{0, 11, 247}:    \"NIDEK CO.,LTD\",\n\t[3]byte{0, 11, 248}:    \"Infinera\",\n\t[3]byte{0, 11, 249}:    \"Gemstone Communications, Inc.\",\n\t[3]byte{0, 11, 250}:    \"EXEMYS SRL\",\n\t[3]byte{0, 11, 251}:    \"D-NET International Corporation\",\n\t[3]byte{0, 11, 252}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 11, 253}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 11, 254}:    \"CASTEL Broadband Limited\",\n\t[3]byte{0, 11, 255}:    \"Berkeley Camera Engineering\",\n\t[3]byte{0, 12, 0}:      \"BEB Industrie-Elektronik AG\",\n\t[3]byte{0, 12, 1}:      \"Abatron AG\",\n\t[3]byte{0, 12, 2}:      \"ABB Oy\",\n\t[3]byte{0, 12, 3}:      \"HDMI Licensing, LLC\",\n\t[3]byte{0, 12, 4}:      \"Tecnova\",\n\t[3]byte{0, 12, 5}:      \"RPA Reserch Co., Ltd.\",\n\t[3]byte{0, 12, 6}:      \"Nixvue Systems  Pte Ltd\",\n\t[3]byte{0, 12, 7}:      \"Iftest AG\",\n\t[3]byte{0, 12, 8}:      \"HUMEX Technologies Corp.\",\n\t[3]byte{0, 12, 9}:      \"Hitachi IE Systems Co., Ltd\",\n\t[3]byte{0, 12, 10}:     \"Guangdong Province Electronic Technology Research Institute\",\n\t[3]byte{0, 12, 11}:     \"Broadbus Technologies\",\n\t[3]byte{0, 12, 12}:     \"APPRO TECHNOLOGY INC.\",\n\t[3]byte{0, 12, 13}:     \"Communications & Power Industries / Satcom Division\",\n\t[3]byte{0, 12, 14}:     \"XtremeSpectrum, Inc.\",\n\t[3]byte{0, 12, 15}:     \"Techno-One Co., Ltd\",\n\t[3]byte{0, 12, 16}:     \"PNI Corporation\",\n\t[3]byte{0, 12, 17}:     \"NIPPON DEMPA CO.,LTD.\",\n\t[3]byte{0, 12, 18}:     \"Micro-Optronic-Messtechnik GmbH\",\n\t[3]byte{0, 12, 19}:     \"MediaQ\",\n\t[3]byte{0, 12, 20}:     \"Diagnostic Instruments, Inc.\",\n\t[3]byte{0, 12, 21}:     \"CyberPower Systems, Inc.\",\n\t[3]byte{0, 12, 22}:     \"Concorde Microsystems Inc.\",\n\t[3]byte{0, 12, 23}:     \"AJA Video Systems Inc\",\n\t[3]byte{0, 12, 24}:     \"Zenisu Keisoku Inc.\",\n\t[3]byte{0, 12, 25}:     \"Telio Communications GmbH\",\n\t[3]byte{0, 12, 26}:     \"Quest Technical Solutions Inc.\",\n\t[3]byte{0, 12, 27}:     \"ORACOM Co, Ltd.\",\n\t[3]byte{0, 12, 28}:     \"MicroWeb Co., Ltd.\",\n\t[3]byte{0, 12, 29}:     \"Mettler & Fuchs AG\",\n\t[3]byte{0, 12, 30}:     \"Global Cache\",\n\t[3]byte{0, 12, 31}:     \"Glimmerglass Networks\",\n\t[3]byte{0, 12, 32}:     \"Fi WIn, Inc.\",\n\t[3]byte{0, 12, 33}:     \"Faculty of Science and Technology, Keio University\",\n\t[3]byte{0, 12, 34}:     \"Double D Electronics Ltd\",\n\t[3]byte{0, 12, 35}:     \"Beijing Lanchuan Tech. Co., Ltd.\",\n\t[3]byte{0, 12, 36}:     \"ANATOR\",\n\t[3]byte{0, 12, 37}:     \"Allied Telesis Labs, Inc. \",\n\t[3]byte{0, 12, 38}:     \"Weintek Labs. Inc.\",\n\t[3]byte{0, 12, 39}:     \"Sammy Corporation\",\n\t[3]byte{0, 12, 40}:     \"RIFATRON\",\n\t[3]byte{0, 12, 41}:     \"VMware, Inc.\",\n\t[3]byte{0, 12, 42}:     \"OCTTEL Communication Co., Ltd.\",\n\t[3]byte{0, 12, 43}:     \"ELIAS Technology, Inc.\",\n\t[3]byte{0, 12, 44}:     \"Enwiser Inc.\",\n\t[3]byte{0, 12, 45}:     \"FullWave Technology Co., Ltd.\",\n\t[3]byte{0, 12, 46}:     \"Openet information technology(shenzhen) Co., Ltd.\",\n\t[3]byte{0, 12, 47}:     \"SeorimTechnology Co.,Ltd.\",\n\t[3]byte{0, 12, 48}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 12, 49}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 12, 50}:     \"Avionic Design GmbH\",\n\t[3]byte{0, 12, 51}:     \"Compucase Enterprise Co. Ltd.\",\n\t[3]byte{0, 12, 52}:     \"Vixen Co., Ltd.\",\n\t[3]byte{0, 12, 53}:     \"KaVo Dental GmbH & Co. KG\",\n\t[3]byte{0, 12, 54}:     \"SHARP TAKAYA ELECTRONICS INDUSTRY CO.,LTD.\",\n\t[3]byte{0, 12, 55}:     \"Geomation, Inc.\",\n\t[3]byte{0, 12, 56}:     \"TelcoBridges Inc.\",\n\t[3]byte{0, 12, 57}:     \"Sentinel Wireless Inc.\",\n\t[3]byte{0, 12, 58}:     \"Oxance\",\n\t[3]byte{0, 12, 59}:     \"Orion Electric Co., Ltd.\",\n\t[3]byte{0, 12, 60}:     \"MediaChorus, Inc.\",\n\t[3]byte{0, 12, 61}:     \"Glsystech Co., Ltd.\",\n\t[3]byte{0, 12, 62}:     \"Crest Audio\",\n\t[3]byte{0, 12, 63}:     \"Cogent Defence & Security Networks,\",\n\t[3]byte{0, 12, 64}:     \"Altech Controls\",\n\t[3]byte{0, 12, 65}:     \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 12, 66}:     \"Routerboard.com\",\n\t[3]byte{0, 12, 67}:     \"Ralink Technology, Corp.\",\n\t[3]byte{0, 12, 68}:     \"Automated Interfaces, Inc.\",\n\t[3]byte{0, 12, 69}:     \"Animation Technologies Inc.\",\n\t[3]byte{0, 12, 70}:     \"Allied Telesyn Inc.\",\n\t[3]byte{0, 12, 71}:     \"SK Teletech(R&D Planning Team)\",\n\t[3]byte{0, 12, 72}:     \"QoStek Corporation\",\n\t[3]byte{0, 12, 73}:     \"Dangaard Telecom Denmark A/S\",\n\t[3]byte{0, 12, 74}:     \"Cygnus Microsystems (P) Limited\",\n\t[3]byte{0, 12, 75}:     \"Cheops Elektronik\",\n\t[3]byte{0, 12, 76}:     \"Arcor AG&Co.\",\n\t[3]byte{0, 12, 77}:     \"Curtiss-Wright Controls Avionics & Electronics\",\n\t[3]byte{0, 12, 78}:     \"Winbest Technology CO,LT\",\n\t[3]byte{0, 12, 79}:     \"UDTech Japan Corporation\",\n\t[3]byte{0, 12, 80}:     \"Seagate Technology\",\n\t[3]byte{0, 12, 81}:     \"Scientific Technologies Inc.\",\n\t[3]byte{0, 12, 82}:     \"Roll Systems Inc.\",\n\t[3]byte{0, 12, 83}:     \"Private\",\n\t[3]byte{0, 12, 84}:     \"Pedestal Networks, Inc\",\n\t[3]byte{0, 12, 85}:     \"Microlink Communications Inc.\",\n\t[3]byte{0, 12, 86}:     \"Megatel Computer (1986) Corp.\",\n\t[3]byte{0, 12, 87}:     \"MACKIE Engineering Services Belgium BVBA\",\n\t[3]byte{0, 12, 88}:     \"M&S Systems\",\n\t[3]byte{0, 12, 89}:     \"Indyme Electronics, Inc.\",\n\t[3]byte{0, 12, 90}:     \"IBSmm Embedded Electronics Consulting\",\n\t[3]byte{0, 12, 91}:     \"HANWANG TECHNOLOGY CO.,LTD\",\n\t[3]byte{0, 12, 92}:     \"GTN Systems B.V.\",\n\t[3]byte{0, 12, 93}:     \"CHIC TECHNOLOGY (CHINA) CORP.\",\n\t[3]byte{0, 12, 94}:     \"Calypso Medical\",\n\t[3]byte{0, 12, 95}:     \"Avtec, Inc.\",\n\t[3]byte{0, 12, 96}:     \"ACM Systems\",\n\t[3]byte{0, 12, 97}:     \"AC Tech corporation DBA Advanced Digital\",\n\t[3]byte{0, 12, 98}:     \"ABB AB, Cewe-Control \",\n\t[3]byte{0, 12, 99}:     \"Zenith Electronics Corporation\",\n\t[3]byte{0, 12, 100}:    \"X2 MSA Group\",\n\t[3]byte{0, 12, 101}:    \"Sunin Telecom\",\n\t[3]byte{0, 12, 102}:    \"Pronto Networks Inc\",\n\t[3]byte{0, 12, 103}:    \"OYO ELECTRIC CO.,LTD\",\n\t[3]byte{0, 12, 104}:    \"SigmaTel, Inc.\",\n\t[3]byte{0, 12, 105}:    \"National Radio Astronomy Observatory\",\n\t[3]byte{0, 12, 106}:    \"MBARI\",\n\t[3]byte{0, 12, 107}:    \"Kurz Industrie-Elektronik GmbH\",\n\t[3]byte{0, 12, 108}:    \"Eve Systems GmbH\",\n\t[3]byte{0, 12, 109}:    \"Edwards Ltd.\",\n\t[3]byte{0, 12, 110}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 12, 111}:    \"Amtek system co.,LTD.\",\n\t[3]byte{0, 12, 112}:    \"ACC GmbH\",\n\t[3]byte{0, 12, 113}:    \"Wybron, Inc\",\n\t[3]byte{0, 12, 114}:    \"Tempearl Industrial Co., Ltd.\",\n\t[3]byte{0, 12, 115}:    \"TELSON ELECTRONICS CO., LTD\",\n\t[3]byte{0, 12, 116}:    \"RIVERTEC CORPORATION\",\n\t[3]byte{0, 12, 117}:    \"Oriental integrated electronics. LTD\",\n\t[3]byte{0, 12, 118}:    \"MICRO-STAR INTERNATIONAL CO., LTD.\",\n\t[3]byte{0, 12, 119}:    \"Life Racing Ltd\",\n\t[3]byte{0, 12, 120}:    \"In-Tech Electronics Limited\",\n\t[3]byte{0, 12, 121}:    \"Extel Communications P/L\",\n\t[3]byte{0, 12, 122}:    \"DaTARIUS Technologies GmbH\",\n\t[3]byte{0, 12, 123}:    \"ALPHA PROJECT Co.,Ltd.\",\n\t[3]byte{0, 12, 124}:    \"Internet Information Image Inc.\",\n\t[3]byte{0, 12, 125}:    \"TEIKOKU ELECTRIC MFG. CO., LTD\",\n\t[3]byte{0, 12, 126}:    \"Tellium Incorporated\",\n\t[3]byte{0, 12, 127}:    \"synertronixx GmbH\",\n\t[3]byte{0, 12, 128}:    \"Opelcomm Inc.\",\n\t[3]byte{0, 12, 129}:    \"Schneider Electric (Australia) \",\n\t[3]byte{0, 12, 130}:    \"NETWORK TECHNOLOGIES INC\",\n\t[3]byte{0, 12, 131}:    \"Logical Solutions\",\n\t[3]byte{0, 12, 132}:    \"Eazix, Inc.\",\n\t[3]byte{0, 12, 133}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 12, 134}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 12, 135}:    \"AMD\",\n\t[3]byte{0, 12, 136}:    \"Apache Micro Peripherals, Inc.\",\n\t[3]byte{0, 12, 137}:    \"AC Electric Vehicles, Ltd.\",\n\t[3]byte{0, 12, 138}:    \"Bose Corporation\",\n\t[3]byte{0, 12, 139}:    \"Connect Tech Inc\",\n\t[3]byte{0, 12, 140}:    \"KODICOM CO.,LTD.\",\n\t[3]byte{0, 12, 141}:    \"MATRIX VISION GmbH\",\n\t[3]byte{0, 12, 142}:    \"Mentor Engineering Inc\",\n\t[3]byte{0, 12, 143}:    \"Nergal s.r.l.\",\n\t[3]byte{0, 12, 144}:    \"Octasic Inc.\",\n\t[3]byte{0, 12, 145}:    \"Riverhead Networks Inc.\",\n\t[3]byte{0, 12, 146}:    \"WolfVision Gmbh\",\n\t[3]byte{0, 12, 147}:    \"Xeline Co., Ltd.\",\n\t[3]byte{0, 12, 148}:    \"United Electronic Industries, Inc. (EUI)\",\n\t[3]byte{0, 12, 149}:    \"PrimeNet\",\n\t[3]byte{0, 12, 150}:    \"OQO, Inc.\",\n\t[3]byte{0, 12, 151}:    \"NV ADB TTV Technologies SA\",\n\t[3]byte{0, 12, 152}:    \"LETEK Communications Inc.\",\n\t[3]byte{0, 12, 153}:    \"HITEL LINK Co.,Ltd\",\n\t[3]byte{0, 12, 154}:    \"Hitech Electronics Corp.\",\n\t[3]byte{0, 12, 155}:    \"EE Solutions, Inc\",\n\t[3]byte{0, 12, 156}:    \"Chongho information & communications\",\n\t[3]byte{0, 12, 157}:    \"UbeeAirWalk, Inc.\",\n\t[3]byte{0, 12, 158}:    \"MemoryLink Corp.\",\n\t[3]byte{0, 12, 159}:    \"NKE Corporation\",\n\t[3]byte{0, 12, 160}:    \"StorCase Technology, Inc.\",\n\t[3]byte{0, 12, 161}:    \"SIGMACOM Co., LTD.\",\n\t[3]byte{0, 12, 162}:    \"Harmonic Video Network\",\n\t[3]byte{0, 12, 163}:    \"Rancho Technology, Inc.\",\n\t[3]byte{0, 12, 164}:    \"Prompttec Product Management GmbH\",\n\t[3]byte{0, 12, 165}:    \"Naman NZ LTd\",\n\t[3]byte{0, 12, 166}:    \"Mintera Corporation\",\n\t[3]byte{0, 12, 167}:    \"Metro (Suzhou) Technologies Co., Ltd.\",\n\t[3]byte{0, 12, 168}:    \"Garuda Networks Corporation\",\n\t[3]byte{0, 12, 169}:    \"Ebtron Inc.\",\n\t[3]byte{0, 12, 170}:    \"Cubic Transportation Systems Inc\",\n\t[3]byte{0, 12, 171}:    \"Commend International GmbH\",\n\t[3]byte{0, 12, 172}:    \"Citizen Watch Co., Ltd.\",\n\t[3]byte{0, 12, 173}:    \"BTU International\",\n\t[3]byte{0, 12, 174}:    \"Ailocom Oy\",\n\t[3]byte{0, 12, 175}:    \"TRI TERM CO.,LTD.\",\n\t[3]byte{0, 12, 176}:    \"Star Semiconductor Corporation\",\n\t[3]byte{0, 12, 177}:    \"Salland Engineering (Europe) BV\",\n\t[3]byte{0, 12, 178}:    \"UNION co., ltd.\",\n\t[3]byte{0, 12, 179}:    \"ROUND Co.,Ltd.\",\n\t[3]byte{0, 12, 180}:    \"AutoCell Laboratories, Inc.\",\n\t[3]byte{0, 12, 181}:    \"Premier Technolgies, Inc\",\n\t[3]byte{0, 12, 182}:    \"NANJING SEU MOBILE & INTERNET TECHNOLOGY CO.,LTD\",\n\t[3]byte{0, 12, 183}:    \"Nanjing Huazhuo Electronics Co., Ltd.\",\n\t[3]byte{0, 12, 184}:    \"MEDION AG\",\n\t[3]byte{0, 12, 185}:    \"LEA\",\n\t[3]byte{0, 12, 186}:    \"Jamex, Inc.\",\n\t[3]byte{0, 12, 187}:    \"ISKRAEMECO\",\n\t[3]byte{0, 12, 188}:    \"Iscutum\",\n\t[3]byte{0, 12, 189}:    \"Interface Masters, Inc\",\n\t[3]byte{0, 12, 190}:    \"Innominate Security Technologies AG\",\n\t[3]byte{0, 12, 191}:    \"Holy Stone Ent. Co., Ltd.\",\n\t[3]byte{0, 12, 192}:    \"Genera Oy\",\n\t[3]byte{0, 12, 193}:    \"Eaton Corporation\",\n\t[3]byte{0, 12, 194}:    \"ControlNet (India) Private Limited\",\n\t[3]byte{0, 12, 195}:    \"BeWAN systems\",\n\t[3]byte{0, 12, 196}:    \"Tiptel AG\",\n\t[3]byte{0, 12, 197}:    \"Nextlink Co., Ltd.\",\n\t[3]byte{0, 12, 198}:    \"Ka-Ro electronics GmbH\",\n\t[3]byte{0, 12, 199}:    \"Intelligent Computer Solutions Inc.\",\n\t[3]byte{0, 12, 200}:    \"Xytronix Research & Design, Inc.\",\n\t[3]byte{0, 12, 201}:    \"ILWOO DATA & TECHNOLOGY CO.,LTD\",\n\t[3]byte{0, 12, 202}:    \"HGST a Western Digital Company\",\n\t[3]byte{0, 12, 203}:    \"Design Combus Ltd\",\n\t[3]byte{0, 12, 204}:    \"Aeroscout Ltd.\",\n\t[3]byte{0, 12, 205}:    \"IEC - TC57\",\n\t[3]byte{0, 12, 206}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 12, 207}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 12, 208}:    \"Symetrix\",\n\t[3]byte{0, 12, 209}:    \"SFOM Technology Corp.\",\n\t[3]byte{0, 12, 210}:    \"Schaffner EMV AG\",\n\t[3]byte{0, 12, 211}:    \"Prettl Elektronik Radeberg GmbH\",\n\t[3]byte{0, 12, 212}:    \"Positron Public Safety Systems inc.\",\n\t[3]byte{0, 12, 213}:    \"Passave Inc.\",\n\t[3]byte{0, 12, 214}:    \"PARTNER TECH\",\n\t[3]byte{0, 12, 215}:    \"Nallatech Ltd\",\n\t[3]byte{0, 12, 216}:    \"M. K. Juchheim GmbH & Co\",\n\t[3]byte{0, 12, 217}:    \"Itcare Co., Ltd\",\n\t[3]byte{0, 12, 218}:    \"FreeHand Systems, Inc.\",\n\t[3]byte{0, 12, 219}:    \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 12, 220}:    \"BECS Technology, Inc\",\n\t[3]byte{0, 12, 221}:    \"AOS technologies AG\",\n\t[3]byte{0, 12, 222}:    \"ABB STOTZ-KONTAKT GmbH\",\n\t[3]byte{0, 12, 223}:    \"JAI Manufacturing\",\n\t[3]byte{0, 12, 224}:    \"Trek Diagnostics Inc.\",\n\t[3]byte{0, 12, 225}:    \"The Open Group\",\n\t[3]byte{0, 12, 226}:    \"Rolls-Royce\",\n\t[3]byte{0, 12, 227}:    \"Option International N.V.\",\n\t[3]byte{0, 12, 228}:    \"NeuroCom International, Inc.\",\n\t[3]byte{0, 12, 229}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 12, 230}:    \"Fortinet Inc.\",\n\t[3]byte{0, 12, 231}:    \"MediaTek Inc.\",\n\t[3]byte{0, 12, 232}:    \"GuangZhou AnJuBao Co., Ltd\",\n\t[3]byte{0, 12, 233}:    \"BLOOMBERG L.P.\",\n\t[3]byte{0, 12, 234}:    \"aphona Kommunikationssysteme\",\n\t[3]byte{0, 12, 235}:    \"CNMP Networks, Inc.\",\n\t[3]byte{0, 12, 236}:    \"Spectracom Corp.\",\n\t[3]byte{0, 12, 237}:    \"Real Digital Media\",\n\t[3]byte{0, 12, 238}:    \"jp-embedded\",\n\t[3]byte{0, 12, 239}:    \"Open Networks Engineering Ltd\",\n\t[3]byte{0, 12, 240}:    \"M & N GmbH\",\n\t[3]byte{0, 12, 241}:    \"Intel Corporation\",\n\t[3]byte{0, 12, 242}:    \"GAMESA Eólica\",\n\t[3]byte{0, 12, 243}:    \"CALL IMAGE SA\",\n\t[3]byte{0, 12, 244}:    \"AKATSUKI ELECTRIC MFG.CO.,LTD.\",\n\t[3]byte{0, 12, 245}:    \"InfoExpress\",\n\t[3]byte{0, 12, 246}:    \"Sitecom Europe BV\",\n\t[3]byte{0, 12, 247}:    \"Nortel Networks\",\n\t[3]byte{0, 12, 248}:    \"Nortel Networks\",\n\t[3]byte{0, 12, 249}:    \"Xylem Water Solutions\",\n\t[3]byte{0, 12, 250}:    \"Digital Systems Corp\",\n\t[3]byte{0, 12, 251}:    \"Korea Network Systems\",\n\t[3]byte{0, 12, 252}:    \"S2io Technologies Corp\",\n\t[3]byte{0, 12, 253}:    \"Hyundai ImageQuest Co.,Ltd.\",\n\t[3]byte{0, 12, 254}:    \"Grand Electronic Co., Ltd\",\n\t[3]byte{0, 12, 255}:    \"MRO-TEK Realty Limited\",\n\t[3]byte{0, 13, 0}:      \"Seaway Networks Inc.\",\n\t[3]byte{0, 13, 1}:      \"P&E Microcomputer Systems, Inc.\",\n\t[3]byte{0, 13, 2}:      \"NEC Platforms, Ltd.\",\n\t[3]byte{0, 13, 3}:      \"Matrics, Inc.\",\n\t[3]byte{0, 13, 4}:      \"Foxboro Eckardt Development GmbH\",\n\t[3]byte{0, 13, 5}:      \"cybernet manufacturing inc.\",\n\t[3]byte{0, 13, 6}:      \"Compulogic Limited\",\n\t[3]byte{0, 13, 7}:      \"Calrec Audio Ltd\",\n\t[3]byte{0, 13, 8}:      \"AboveCable, Inc.\",\n\t[3]byte{0, 13, 9}:      \"Yuehua(Zhuhai) Electronic CO. LTD\",\n\t[3]byte{0, 13, 10}:     \"Barco Projection Systems NV\",\n\t[3]byte{0, 13, 11}:     \"BUFFALO.INC\",\n\t[3]byte{0, 13, 12}:     \"MDI Security Systems\",\n\t[3]byte{0, 13, 13}:     \"ITSupported, LLC\",\n\t[3]byte{0, 13, 14}:     \"Inqnet Systems, Inc.\",\n\t[3]byte{0, 13, 15}:     \"Finlux Ltd\",\n\t[3]byte{0, 13, 16}:     \"Embedtronics Oy\",\n\t[3]byte{0, 13, 17}:     \"DENTSPLY - Gendex\",\n\t[3]byte{0, 13, 18}:     \"AXELL Corporation\",\n\t[3]byte{0, 13, 19}:     \"Wilhelm Rutenbeck GmbH&Co.KG\",\n\t[3]byte{0, 13, 20}:     \"Vtech Innovation LP dba Advanced American Telephones\",\n\t[3]byte{0, 13, 21}:     \"Voipac s.r.o.\",\n\t[3]byte{0, 13, 22}:     \"UHS Systems Pty Ltd\",\n\t[3]byte{0, 13, 23}:     \"Turbo Networks Co.Ltd\",\n\t[3]byte{0, 13, 24}:     \"Mega-Trend Electronics CO., LTD.\",\n\t[3]byte{0, 13, 25}:     \"ROBE Show lighting\",\n\t[3]byte{0, 13, 26}:     \"Mustek System Inc.\",\n\t[3]byte{0, 13, 27}:     \"Kyoto Electronics Manufacturing Co., Ltd.\",\n\t[3]byte{0, 13, 28}:     \"Amesys Defense\",\n\t[3]byte{0, 13, 29}:     \"HIGH-TEK HARNESS ENT. CO., LTD.\",\n\t[3]byte{0, 13, 30}:     \"Control Techniques\",\n\t[3]byte{0, 13, 31}:     \"AV Digital\",\n\t[3]byte{0, 13, 32}:     \"ASAHIKASEI TECHNOSYSTEM CO.,LTD.\",\n\t[3]byte{0, 13, 33}:     \"WISCORE Inc.\",\n\t[3]byte{0, 13, 34}:     \"Unitronics LTD\",\n\t[3]byte{0, 13, 35}:     \"Smart Solution, Inc\",\n\t[3]byte{0, 13, 36}:     \"SENTEC E&E CO., LTD.\",\n\t[3]byte{0, 13, 37}:     \"SANDEN CORPORATION\",\n\t[3]byte{0, 13, 38}:     \"Primagraphics Limited\",\n\t[3]byte{0, 13, 39}:     \"MICROPLEX Printware AG\",\n\t[3]byte{0, 13, 40}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 13, 41}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 13, 42}:     \"Scanmatic AS\",\n\t[3]byte{0, 13, 43}:     \"Racal Instruments\",\n\t[3]byte{0, 13, 44}:     \"Net2Edge Limited\",\n\t[3]byte{0, 13, 45}:     \"NCT Deutschland GmbH\",\n\t[3]byte{0, 13, 46}:     \"Matsushita Avionics Systems Corporation\",\n\t[3]byte{0, 13, 47}:     \"AIN Comm.Tech.Co., LTD\",\n\t[3]byte{0, 13, 48}:     \"IceFyre Semiconductor\",\n\t[3]byte{0, 13, 49}:     \"Compellent Technologies, Inc.\",\n\t[3]byte{0, 13, 50}:     \"DispenseSource, Inc.\",\n\t[3]byte{0, 13, 51}:     \"Prediwave Corp.\",\n\t[3]byte{0, 13, 52}:     \"Shell International Exploration and Production, Inc.\",\n\t[3]byte{0, 13, 53}:     \"PAC International Ltd\",\n\t[3]byte{0, 13, 54}:     \"Wu Han Routon Electronic Co., Ltd\",\n\t[3]byte{0, 13, 55}:     \"WIPLUG\",\n\t[3]byte{0, 13, 56}:     \"NISSIN INC.\",\n\t[3]byte{0, 13, 57}:     \"Network Electronics\",\n\t[3]byte{0, 13, 58}:     \"Microsoft Corp.\",\n\t[3]byte{0, 13, 59}:     \"Microelectronics Technology Inc.\",\n\t[3]byte{0, 13, 60}:     \"i.Tech Dynamic Ltd\",\n\t[3]byte{0, 13, 61}:     \"Hammerhead Systems, Inc.\",\n\t[3]byte{0, 13, 62}:     \"APLUX Communications Ltd.\",\n\t[3]byte{0, 13, 63}:     \"VTI Instruments Corporation\",\n\t[3]byte{0, 13, 64}:     \"Verint Loronix Video Solutions\",\n\t[3]byte{0, 13, 65}:     \"Siemens AG ICM MP UC RD IT KLF1\",\n\t[3]byte{0, 13, 66}:     \"Newbest Development Limited\",\n\t[3]byte{0, 13, 67}:     \"DRS Tactical Systems Inc.\",\n\t[3]byte{0, 13, 68}:     \"Audio BU - Logitech\",\n\t[3]byte{0, 13, 69}:     \"Tottori SANYO Electric Co., Ltd.\",\n\t[3]byte{0, 13, 70}:     \"Parker SSD Drives\",\n\t[3]byte{0, 13, 71}:     \"Collex\",\n\t[3]byte{0, 13, 72}:     \"AEWIN Technologies Co., Ltd.\",\n\t[3]byte{0, 13, 73}:     \"Triton Systems of Delaware, Inc.\",\n\t[3]byte{0, 13, 74}:     \"Steag ETA-Optik\",\n\t[3]byte{0, 13, 75}:     \"Roku, Inc.\",\n\t[3]byte{0, 13, 76}:     \"Outline Electronics Ltd.\",\n\t[3]byte{0, 13, 77}:     \"Ninelanes\",\n\t[3]byte{0, 13, 78}:     \"NDR Co.,LTD.\",\n\t[3]byte{0, 13, 79}:     \"Kenwood Corporation\",\n\t[3]byte{0, 13, 80}:     \"Galazar Networks\",\n\t[3]byte{0, 13, 81}:     \"DIVR Systems, Inc.\",\n\t[3]byte{0, 13, 82}:     \"Comart system\",\n\t[3]byte{0, 13, 83}:     \"Beijing 5w Communication Corp.\",\n\t[3]byte{0, 13, 84}:     \"3Com Ltd\",\n\t[3]byte{0, 13, 85}:     \"SANYCOM Technology Co.,Ltd\",\n\t[3]byte{0, 13, 86}:     \"Dell Inc.\",\n\t[3]byte{0, 13, 87}:     \"Fujitsu I-Network Systems Limited.\",\n\t[3]byte{0, 13, 88}:     \"Private\",\n\t[3]byte{0, 13, 89}:     \"Amity Systems, Inc.\",\n\t[3]byte{0, 13, 90}:     \"Tiesse SpA\",\n\t[3]byte{0, 13, 91}:     \"Smart Empire Investments Limited\",\n\t[3]byte{0, 13, 92}:     \"Robert Bosch GmbH, VT-ATMO\",\n\t[3]byte{0, 13, 93}:     \"Raritan Computer, Inc\",\n\t[3]byte{0, 13, 94}:     \"NEC Personal Products\",\n\t[3]byte{0, 13, 95}:     \"Minds Inc\",\n\t[3]byte{0, 13, 96}:     \"IBM Corp\",\n\t[3]byte{0, 13, 97}:     \"Giga-Byte Technology Co., Ltd.\",\n\t[3]byte{0, 13, 98}:     \"Funkwerk Dabendorf GmbH\",\n\t[3]byte{0, 13, 99}:     \"DENT Instruments, Inc.\",\n\t[3]byte{0, 13, 100}:    \"COMAG Handels AG\",\n\t[3]byte{0, 13, 101}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 13, 102}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 13, 103}:    \"Ericsson\",\n\t[3]byte{0, 13, 104}:    \"Vinci Systems, Inc.\",\n\t[3]byte{0, 13, 105}:    \"TMT&D Corporation\",\n\t[3]byte{0, 13, 106}:    \"Redwood Technologies LTD\",\n\t[3]byte{0, 13, 107}:    \"Mita-Teknik A/S\",\n\t[3]byte{0, 13, 108}:    \"M-Audio\",\n\t[3]byte{0, 13, 109}:    \"K-Tech Devices Corp.\",\n\t[3]byte{0, 13, 110}:    \"K-Patents Oy\",\n\t[3]byte{0, 13, 111}:    \"Ember Corporation\",\n\t[3]byte{0, 13, 112}:    \"Datamax Corporation\",\n\t[3]byte{0, 13, 113}:    \"boca systems\",\n\t[3]byte{0, 13, 114}:    \"2Wire Inc\",\n\t[3]byte{0, 13, 115}:    \"Technical Support, Inc.\",\n\t[3]byte{0, 13, 116}:    \"Sand Network Systems, Inc.\",\n\t[3]byte{0, 13, 117}:    \"Kobian Pte Ltd - Taiwan Branch\",\n\t[3]byte{0, 13, 118}:    \"Hokuto Denshi Co,. Ltd.\",\n\t[3]byte{0, 13, 119}:    \"FalconStor Software\",\n\t[3]byte{0, 13, 120}:    \"Engineering & Security\",\n\t[3]byte{0, 13, 121}:    \"Dynamic Solutions Co,.Ltd.\",\n\t[3]byte{0, 13, 122}:    \"DiGATTO Asia Pacific Pte Ltd\",\n\t[3]byte{0, 13, 123}:    \"Consensys Computers Inc.\",\n\t[3]byte{0, 13, 124}:    \"Codian Ltd\",\n\t[3]byte{0, 13, 125}:    \"Afco Systems\",\n\t[3]byte{0, 13, 126}:    \"Axiowave Networks, Inc.\",\n\t[3]byte{0, 13, 127}:    \"MIDAS  COMMUNICATION TECHNOLOGIES PTE LTD ( Foreign Branch)\",\n\t[3]byte{0, 13, 128}:    \"Online Development Inc\",\n\t[3]byte{0, 13, 129}:    \"Pepperl+Fuchs GmbH\",\n\t[3]byte{0, 13, 130}:    \"PHSNET\",\n\t[3]byte{0, 13, 131}:    \"Sanmina-SCI Hungary  Ltd.\",\n\t[3]byte{0, 13, 132}:    \"Makus Inc.\",\n\t[3]byte{0, 13, 133}:    \"Tapwave, Inc.\",\n\t[3]byte{0, 13, 134}:    \"Huber + Suhner AG\",\n\t[3]byte{0, 13, 135}:    \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{0, 13, 136}:    \"D-Link Corporation\",\n\t[3]byte{0, 13, 137}:    \"Bils Technology Inc\",\n\t[3]byte{0, 13, 138}:    \"Winners Electronics Co., Ltd.\",\n\t[3]byte{0, 13, 139}:    \"T&D Corporation\",\n\t[3]byte{0, 13, 140}:    \"Shanghai Wedone Digital Ltd. CO.\",\n\t[3]byte{0, 13, 141}:    \"Prosoft Technology, Inc\",\n\t[3]byte{0, 13, 142}:    \"Koden Electronics Co., Ltd.\",\n\t[3]byte{0, 13, 143}:    \"King Tsushin Kogyo Co., LTD.\",\n\t[3]byte{0, 13, 144}:    \"Factum Electronics AB\",\n\t[3]byte{0, 13, 145}:    \"Eclipse (HQ Espana) S.L.\",\n\t[3]byte{0, 13, 146}:    \"ARIMA Communications Corp.\",\n\t[3]byte{0, 13, 147}:    \"Apple, Inc.\",\n\t[3]byte{0, 13, 148}:    \"AFAR Communications,Inc\",\n\t[3]byte{0, 13, 149}:    \"Opti-cell, Inc.\",\n\t[3]byte{0, 13, 150}:    \"Vtera Technology Inc.\",\n\t[3]byte{0, 13, 151}:    \"ABB Inc./Tropos\",\n\t[3]byte{0, 13, 152}:    \"S.W.A.C. Schmitt-Walter Automation Consult GmbH\",\n\t[3]byte{0, 13, 153}:    \"Orbital Sciences Corp.; Launch Systems Group\",\n\t[3]byte{0, 13, 154}:    \"INFOTEC LTD\",\n\t[3]byte{0, 13, 155}:    \"Heraeus Electro-Nite International N.V.\",\n\t[3]byte{0, 13, 156}:    \"Elan GmbH & Co KG\",\n\t[3]byte{0, 13, 157}:    \"Hewlett Packard\",\n\t[3]byte{0, 13, 158}:    \"TOKUDEN OHIZUMI SEISAKUSYO Co.,Ltd.\",\n\t[3]byte{0, 13, 159}:    \"RF Micro Devices\",\n\t[3]byte{0, 13, 160}:    \"NEDAP N.V.\",\n\t[3]byte{0, 13, 161}:    \"MIRAE ITS Co.,LTD.\",\n\t[3]byte{0, 13, 162}:    \"Infrant Technologies, Inc.\",\n\t[3]byte{0, 13, 163}:    \"Emerging Technologies Limited\",\n\t[3]byte{0, 13, 164}:    \"DOSCH & AMAND SYSTEMS AG\",\n\t[3]byte{0, 13, 165}:    \"Fabric7 Systems, Inc\",\n\t[3]byte{0, 13, 166}:    \"Universal Switching Corporation\",\n\t[3]byte{0, 13, 167}:    \"Private\",\n\t[3]byte{0, 13, 168}:    \"Teletronics Technology Corporation\",\n\t[3]byte{0, 13, 169}:    \"T.E.A.M. S.L.\",\n\t[3]byte{0, 13, 170}:    \"S.A.Tehnology co.,Ltd.\",\n\t[3]byte{0, 13, 171}:    \"Parker Hannifin GmbH Electromechanical Division Europe\",\n\t[3]byte{0, 13, 172}:    \"Japan CBM Corporation\",\n\t[3]byte{0, 13, 173}:    \"Dataprobe, Inc.\",\n\t[3]byte{0, 13, 174}:    \"SAMSUNG HEAVY INDUSTRIES CO., LTD.\",\n\t[3]byte{0, 13, 175}:    \"Plexus Corp (UK) Ltd\",\n\t[3]byte{0, 13, 176}:    \"Olym-tech Co.,Ltd.\",\n\t[3]byte{0, 13, 177}:    \"Japan Network Service Co., Ltd.\",\n\t[3]byte{0, 13, 178}:    \"Ammasso, Inc.\",\n\t[3]byte{0, 13, 179}:    \"SDO Communication Corperation\",\n\t[3]byte{0, 13, 180}:    \"Stormshield\",\n\t[3]byte{0, 13, 181}:    \"GLOBALSAT TECHNOLOGY CORPORATION\",\n\t[3]byte{0, 13, 182}:    \"Broadcom\",\n\t[3]byte{0, 13, 183}:    \"SANKO ELECTRIC CO,.LTD\",\n\t[3]byte{0, 13, 184}:    \"SCHILLER AG\",\n\t[3]byte{0, 13, 185}:    \"PC Engines GmbH\",\n\t[3]byte{0, 13, 186}:    \"Océ Document Technologies GmbH\",\n\t[3]byte{0, 13, 187}:    \"Nippon Dentsu Co.,Ltd.\",\n\t[3]byte{0, 13, 188}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 13, 189}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 13, 190}:    \"Bel Fuse Europe Ltd.,UK\",\n\t[3]byte{0, 13, 191}:    \"TekTone Sound & Signal Mfg., Inc.\",\n\t[3]byte{0, 13, 192}:    \"Spagat AS\",\n\t[3]byte{0, 13, 193}:    \"SafeWeb Inc\",\n\t[3]byte{0, 13, 194}:    \"Private\",\n\t[3]byte{0, 13, 195}:    \"First Communication, Inc.\",\n\t[3]byte{0, 13, 196}:    \"Emcore Corporation\",\n\t[3]byte{0, 13, 197}:    \"EchoStar Global B.V. \",\n\t[3]byte{0, 13, 198}:    \"DigiRose Technology Co., Ltd.\",\n\t[3]byte{0, 13, 199}:    \"COSMIC ENGINEERING INC.\",\n\t[3]byte{0, 13, 200}:    \"AirMagnet, Inc\",\n\t[3]byte{0, 13, 201}:    \"THALES Elektronik Systeme GmbH\",\n\t[3]byte{0, 13, 202}:    \"Tait Electronics\",\n\t[3]byte{0, 13, 203}:    \"Petcomkorea Co., Ltd.\",\n\t[3]byte{0, 13, 204}:    \"NEOSMART Corp.\",\n\t[3]byte{0, 13, 205}:    \"GROUPE TXCOM\",\n\t[3]byte{0, 13, 206}:    \"Dynavac Technology Pte Ltd\",\n\t[3]byte{0, 13, 207}:    \"Cidra Corp.\",\n\t[3]byte{0, 13, 208}:    \"TetraTec Instruments GmbH\",\n\t[3]byte{0, 13, 209}:    \"Stryker Corporation\",\n\t[3]byte{0, 13, 210}:    \"Simrad Optronics ASA\",\n\t[3]byte{0, 13, 211}:    \"SAMWOO Telecommunication Co.,Ltd.\",\n\t[3]byte{0, 13, 212}:    \"Symantec Corporation\",\n\t[3]byte{0, 13, 213}:    \"O'RITE TECHNOLOGY CO.,LTD\",\n\t[3]byte{0, 13, 214}:    \"ITI    LTD\",\n\t[3]byte{0, 13, 215}:    \"Bright\",\n\t[3]byte{0, 13, 216}:    \"BBN\",\n\t[3]byte{0, 13, 217}:    \"Anton Paar GmbH\",\n\t[3]byte{0, 13, 218}:    \"ALLIED TELESIS K.K.\",\n\t[3]byte{0, 13, 219}:    \"AIRWAVE TECHNOLOGIES INC.\",\n\t[3]byte{0, 13, 220}:    \"VAC\",\n\t[3]byte{0, 13, 221}:    \"Profilo Telra Elektronik Sanayi ve Ticaret. A.Ş\",\n\t[3]byte{0, 13, 222}:    \"Joyteck Co., Ltd.\",\n\t[3]byte{0, 13, 223}:    \"Japan Image & Network Inc.\",\n\t[3]byte{0, 13, 224}:    \"ICPDAS Co.,LTD\",\n\t[3]byte{0, 13, 225}:    \"Control Products, Inc.\",\n\t[3]byte{0, 13, 226}:    \"CMZ Sistemi Elettronici\",\n\t[3]byte{0, 13, 227}:    \"AT Sweden AB\",\n\t[3]byte{0, 13, 228}:    \"DIGINICS, Inc.\",\n\t[3]byte{0, 13, 229}:    \"Samsung Thales\",\n\t[3]byte{0, 13, 230}:    \"YOUNGBO ENGINEERING CO.,LTD\",\n\t[3]byte{0, 13, 231}:    \"Snap-on OEM Group\",\n\t[3]byte{0, 13, 232}:    \"Nasaco Electronics Pte. Ltd\",\n\t[3]byte{0, 13, 233}:    \"Napatech Aps\",\n\t[3]byte{0, 13, 234}:    \"Kingtel Telecommunication Corp.\",\n\t[3]byte{0, 13, 235}:    \"CompXs Limited\",\n\t[3]byte{0, 13, 236}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 13, 237}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 13, 238}:    \"Andrew RF Power Amplifier Group\",\n\t[3]byte{0, 13, 239}:    \"Soc. Coop. Bilanciai\",\n\t[3]byte{0, 13, 240}:    \"QCOM TECHNOLOGY INC.\",\n\t[3]byte{0, 13, 241}:    \"IONIX INC.\",\n\t[3]byte{0, 13, 242}:    \"Private\",\n\t[3]byte{0, 13, 243}:    \"Asmax Solutions\",\n\t[3]byte{0, 13, 244}:    \"Watertek Co.\",\n\t[3]byte{0, 13, 245}:    \"Teletronics International Inc.\",\n\t[3]byte{0, 13, 246}:    \"Technology Thesaurus Corp.\",\n\t[3]byte{0, 13, 247}:    \"Space Dynamics Lab\",\n\t[3]byte{0, 13, 248}:    \"ORGA Kartensysteme GmbH\",\n\t[3]byte{0, 13, 249}:    \"NDS Limited\",\n\t[3]byte{0, 13, 250}:    \"Micro Control Systems Ltd.\",\n\t[3]byte{0, 13, 251}:    \"Komax AG\",\n\t[3]byte{0, 13, 252}:    \"ITFOR Inc.\",\n\t[3]byte{0, 13, 253}:    \"Huges Hi-Tech Inc.,\",\n\t[3]byte{0, 13, 254}:    \"Hauppauge Computer Works, Inc.\",\n\t[3]byte{0, 13, 255}:    \"CHENMING MOLD INDUSTRY CORP.\",\n\t[3]byte{0, 14, 0}:      \"Atrie\",\n\t[3]byte{0, 14, 1}:      \"ASIP Technologies Inc.\",\n\t[3]byte{0, 14, 2}:      \"Advantech AMT Inc.\",\n\t[3]byte{0, 14, 3}:      \"Emulex Corporation\",\n\t[3]byte{0, 14, 4}:      \"CMA/Microdialysis AB\",\n\t[3]byte{0, 14, 5}:      \"WIRELESS MATRIX CORP.\",\n\t[3]byte{0, 14, 6}:      \"Team Simoco Ltd\",\n\t[3]byte{0, 14, 7}:      \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 14, 8}:      \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 14, 9}:      \"Shenzhen Coship Software Co.,LTD.\",\n\t[3]byte{0, 14, 10}:     \"SAKUMA DESIGN OFFICE\",\n\t[3]byte{0, 14, 11}:     \"Netac Technology Co., Ltd.\",\n\t[3]byte{0, 14, 12}:     \"Intel Corporation\",\n\t[3]byte{0, 14, 13}:     \"Hesch Schröder GmbH\",\n\t[3]byte{0, 14, 14}:     \"ESA elettronica S.P.A.\",\n\t[3]byte{0, 14, 15}:     \"ERMME\",\n\t[3]byte{0, 14, 16}:     \"C-guys, Inc.\",\n\t[3]byte{0, 14, 17}:     \"BDT Büro und Datentechnik GmbH & Co.KG \",\n\t[3]byte{0, 14, 18}:     \"Adaptive Micro Systems Inc.\",\n\t[3]byte{0, 14, 19}:     \"Accu-Sort Systems inc.\",\n\t[3]byte{0, 14, 20}:     \"Visionary Solutions, Inc.\",\n\t[3]byte{0, 14, 21}:     \"Tadlys LTD\",\n\t[3]byte{0, 14, 22}:     \"SouthWing S.L.\",\n\t[3]byte{0, 14, 23}:     \"Private\",\n\t[3]byte{0, 14, 24}:     \"MyA Technology\",\n\t[3]byte{0, 14, 25}:     \"LogicaCMG Pty Ltd\",\n\t[3]byte{0, 14, 26}:     \"JPS Communications\",\n\t[3]byte{0, 14, 27}:     \"IAV GmbH\",\n\t[3]byte{0, 14, 28}:     \"Hach Company\",\n\t[3]byte{0, 14, 29}:     \"ARION Technology Inc.\",\n\t[3]byte{0, 14, 30}:     \"QLogic Corporation\",\n\t[3]byte{0, 14, 31}:     \"TCL Networks Equipment Co., Ltd.\",\n\t[3]byte{0, 14, 32}:     \"ACCESS Systems Americas, Inc.\",\n\t[3]byte{0, 14, 33}:     \"MTU Friedrichshafen GmbH\",\n\t[3]byte{0, 14, 34}:     \"Private\",\n\t[3]byte{0, 14, 35}:     \"Incipient, Inc.\",\n\t[3]byte{0, 14, 36}:     \"Huwell Technology Inc.\",\n\t[3]byte{0, 14, 37}:     \"Hannae Technology Co., Ltd\",\n\t[3]byte{0, 14, 38}:     \"Gincom Technology Corp.\",\n\t[3]byte{0, 14, 39}:     \"Crere Networks, Inc.\",\n\t[3]byte{0, 14, 40}:     \"Dynamic Ratings P/L\",\n\t[3]byte{0, 14, 41}:     \"Shester Communications Inc\",\n\t[3]byte{0, 14, 42}:     \"Private\",\n\t[3]byte{0, 14, 43}:     \"Safari Technologies\",\n\t[3]byte{0, 14, 44}:     \"Netcodec co.\",\n\t[3]byte{0, 14, 45}:     \"Hyundai Digital Technology Co.,Ltd.\",\n\t[3]byte{0, 14, 46}:     \"Edimax Technology Co. Ltd.\",\n\t[3]byte{0, 14, 47}:     \"Roche Diagnostics GmbH\",\n\t[3]byte{0, 14, 48}:     \"AERAS Networks, Inc.\",\n\t[3]byte{0, 14, 49}:     \"Olympus Soft Imaging Solutions GmbH\",\n\t[3]byte{0, 14, 50}:     \"Kontron Medical\",\n\t[3]byte{0, 14, 51}:     \"Shuko Electronics Co.,Ltd\",\n\t[3]byte{0, 14, 52}:     \"NexGen City, LP\",\n\t[3]byte{0, 14, 53}:     \"Intel Corporation\",\n\t[3]byte{0, 14, 54}:     \"HEINESYS, Inc.\",\n\t[3]byte{0, 14, 55}:     \"Harms & Wende GmbH & Co.KG\",\n\t[3]byte{0, 14, 56}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 14, 57}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 14, 58}:     \"Cirrus Logic\",\n\t[3]byte{0, 14, 59}:     \"Hawking Technologies, Inc.\",\n\t[3]byte{0, 14, 60}:     \"Transact Technologies Inc\",\n\t[3]byte{0, 14, 61}:     \"Televic N.V.\",\n\t[3]byte{0, 14, 62}:     \"Sun Optronics Inc\",\n\t[3]byte{0, 14, 63}:     \"Soronti, Inc.\",\n\t[3]byte{0, 14, 64}:     \"Nortel Networks\",\n\t[3]byte{0, 14, 65}:     \"NIHON MECHATRONICS CO.,LTD.\",\n\t[3]byte{0, 14, 66}:     \"Motic Incoporation Ltd.\",\n\t[3]byte{0, 14, 67}:     \"G-Tek Electronics Sdn. Bhd.\",\n\t[3]byte{0, 14, 68}:     \"Digital 5, Inc.\",\n\t[3]byte{0, 14, 69}:     \"Beijing Newtry Electronic Technology Ltd\",\n\t[3]byte{0, 14, 70}:     \"Niigata Seimitsu Co.,Ltd.\",\n\t[3]byte{0, 14, 71}:     \"NCI System Co.,Ltd.\",\n\t[3]byte{0, 14, 72}:     \"Lipman TransAction Solutions\",\n\t[3]byte{0, 14, 73}:     \"Forsway Scandinavia AB\",\n\t[3]byte{0, 14, 74}:     \"Changchun Huayu WEBPAD Co.,LTD\",\n\t[3]byte{0, 14, 75}:     \"atrium c and i\",\n\t[3]byte{0, 14, 76}:     \"Bermai Inc.\",\n\t[3]byte{0, 14, 77}:     \"Numesa Inc.\",\n\t[3]byte{0, 14, 78}:     \"Waveplus Technology Co., Ltd.\",\n\t[3]byte{0, 14, 79}:     \"Trajet GmbH\",\n\t[3]byte{0, 14, 80}:     \"Thomson Telecom Belgium\",\n\t[3]byte{0, 14, 81}:     \"tecna elettronica srl\",\n\t[3]byte{0, 14, 82}:     \"Optium Corporation\",\n\t[3]byte{0, 14, 83}:     \"AV TECH CORPORATION\",\n\t[3]byte{0, 14, 84}:     \"AlphaCell Wireless Ltd.\",\n\t[3]byte{0, 14, 85}:     \"AUVITRAN\",\n\t[3]byte{0, 14, 86}:     \"4G Systems GmbH & Co. KG\",\n\t[3]byte{0, 14, 87}:     \"Iworld Networking, Inc.\",\n\t[3]byte{0, 14, 88}:     \"Sonos, Inc.\",\n\t[3]byte{0, 14, 89}:     \"Sagemcom Broadband SAS\",\n\t[3]byte{0, 14, 90}:     \"TELEFIELD inc.\",\n\t[3]byte{0, 14, 91}:     \"ParkerVision - Direct2Data\",\n\t[3]byte{0, 14, 92}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 14, 93}:     \"Triple Play Technologies A/S\",\n\t[3]byte{0, 14, 94}:     \"Raisecom Technology\",\n\t[3]byte{0, 14, 95}:     \"activ-net GmbH & Co. KG\",\n\t[3]byte{0, 14, 96}:     \"360SUN Digital Broadband Corporation\",\n\t[3]byte{0, 14, 97}:     \"MICROTROL LIMITED\",\n\t[3]byte{0, 14, 98}:     \"Nortel Networks\",\n\t[3]byte{0, 14, 99}:     \"Lemke Diagnostics GmbH\",\n\t[3]byte{0, 14, 100}:    \"Elphel, Inc\",\n\t[3]byte{0, 14, 101}:    \"TransCore\",\n\t[3]byte{0, 14, 102}:    \"Hitachi Industry & Control Solutions, Ltd.\",\n\t[3]byte{0, 14, 103}:    \"Eltis Microelectronics Ltd.\",\n\t[3]byte{0, 14, 104}:    \"E-TOP Network Technology Inc.\",\n\t[3]byte{0, 14, 105}:    \"China Electric Power Research Institute\",\n\t[3]byte{0, 14, 106}:    \"3Com Ltd\",\n\t[3]byte{0, 14, 107}:    \"Janitza electronics GmbH\",\n\t[3]byte{0, 14, 108}:    \"Device Drivers Limited\",\n\t[3]byte{0, 14, 109}:    \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{0, 14, 110}:    \"MAT S.A. (Mircrelec Advanced Technology)\",\n\t[3]byte{0, 14, 111}:    \"IRIS Corporation Berhad\",\n\t[3]byte{0, 14, 112}:    \"in2 Networks\",\n\t[3]byte{0, 14, 113}:    \"Gemstar Technology Development Ltd.\",\n\t[3]byte{0, 14, 114}:    \"CTS electronics\",\n\t[3]byte{0, 14, 115}:    \"Tpack A/S\",\n\t[3]byte{0, 14, 116}:    \"Solar Telecom. Tech\",\n\t[3]byte{0, 14, 117}:    \"New York Air Brake Corp.\",\n\t[3]byte{0, 14, 118}:    \"GEMSOC INNOVISION INC.\",\n\t[3]byte{0, 14, 119}:    \"Decru, Inc.\",\n\t[3]byte{0, 14, 120}:    \"Amtelco\",\n\t[3]byte{0, 14, 121}:    \"Ample Communications Inc.\",\n\t[3]byte{0, 14, 122}:    \"GemWon Communications Co., Ltd.\",\n\t[3]byte{0, 14, 123}:    \"Toshiba\",\n\t[3]byte{0, 14, 124}:    \"Televes S.A.\",\n\t[3]byte{0, 14, 125}:    \"Electronics Line 3000 Ltd.\",\n\t[3]byte{0, 14, 126}:    \"ionSign Oy\",\n\t[3]byte{0, 14, 127}:    \"Hewlett Packard\",\n\t[3]byte{0, 14, 128}:    \"Thomson Technology Inc\",\n\t[3]byte{0, 14, 129}:    \"Devicescape Software, Inc.\",\n\t[3]byte{0, 14, 130}:    \"Commtech Wireless\",\n\t[3]byte{0, 14, 131}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 14, 132}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 14, 133}:    \"Catalyst Enterprises, Inc.\",\n\t[3]byte{0, 14, 134}:    \"Alcatel North America\",\n\t[3]byte{0, 14, 135}:    \"adp Gauselmann GmbH\",\n\t[3]byte{0, 14, 136}:    \"VIDEOTRON CORP.\",\n\t[3]byte{0, 14, 137}:    \"CLEMATIC\",\n\t[3]byte{0, 14, 138}:    \"Avara Technologies Pty. Ltd.\",\n\t[3]byte{0, 14, 139}:    \"Astarte Technology Co, Ltd.\",\n\t[3]byte{0, 14, 140}:    \"Siemens AG\",\n\t[3]byte{0, 14, 141}:    \"Systems in Progress Holding GmbH\",\n\t[3]byte{0, 14, 142}:    \"SparkLAN Communications, Inc.\",\n\t[3]byte{0, 14, 143}:    \"Sercomm Corporation.\",\n\t[3]byte{0, 14, 144}:    \"PONICO CORP.\",\n\t[3]byte{0, 14, 145}:    \"Navico Auckland Ltd\",\n\t[3]byte{0, 14, 146}:    \"Open Telecom\",\n\t[3]byte{0, 14, 147}:    \"Milénio 3 Sistemas Electrónicos, Lda.\",\n\t[3]byte{0, 14, 148}:    \"Maas International BV\",\n\t[3]byte{0, 14, 149}:    \"Fujiya Denki Seisakusho Co.,Ltd.\",\n\t[3]byte{0, 14, 150}:    \"Cubic Defense Applications, Inc.\",\n\t[3]byte{0, 14, 151}:    \"Ultracker Technology CO., Inc\",\n\t[3]byte{0, 14, 152}:    \"HME Clear-Com LTD.\",\n\t[3]byte{0, 14, 153}:    \"Spectrum Digital, Inc\",\n\t[3]byte{0, 14, 154}:    \"BOE TECHNOLOGY GROUP CO.,LTD\",\n\t[3]byte{0, 14, 155}:    \"Ambit Microsystems Corporation\",\n\t[3]byte{0, 14, 156}:    \"Benchmark Electronics \",\n\t[3]byte{0, 14, 157}:    \"Tiscali UK Ltd\",\n\t[3]byte{0, 14, 158}:    \"Topfield Co., Ltd\",\n\t[3]byte{0, 14, 159}:    \"TEMIC SDS GmbH\",\n\t[3]byte{0, 14, 160}:    \"NetKlass Technology Inc.\",\n\t[3]byte{0, 14, 161}:    \"Formosa Teletek Corporation\",\n\t[3]byte{0, 14, 162}:    \"McAfee, Inc\",\n\t[3]byte{0, 14, 163}:    \"CNCR-IT CO.,LTD,HangZhou P.R.CHINA\",\n\t[3]byte{0, 14, 164}:    \"Quantum Corp.\",\n\t[3]byte{0, 14, 165}:    \"BLIP Systems\",\n\t[3]byte{0, 14, 166}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 14, 167}:    \"Endace Technology\",\n\t[3]byte{0, 14, 168}:    \"United Technologists Europe Limited\",\n\t[3]byte{0, 14, 169}:    \"Shanghai Xun Shi Communications Equipment Ltd. Co.\",\n\t[3]byte{0, 14, 170}:    \"Scalent Systems, Inc.\",\n\t[3]byte{0, 14, 171}:    \"Cray Inc\",\n\t[3]byte{0, 14, 172}:    \"MINTRON ENTERPRISE CO., LTD.\",\n\t[3]byte{0, 14, 173}:    \"Metanoia Technologies, Inc.\",\n\t[3]byte{0, 14, 174}:    \"GAWELL TECHNOLOGIES CORP.\",\n\t[3]byte{0, 14, 175}:    \"CASTEL\",\n\t[3]byte{0, 14, 176}:    \"Solutions Radio BV\",\n\t[3]byte{0, 14, 177}:    \"Newcotech,Ltd\",\n\t[3]byte{0, 14, 178}:    \"Micro-Research Finland Oy\",\n\t[3]byte{0, 14, 179}:    \"Hewlett Packard\",\n\t[3]byte{0, 14, 180}:    \"GUANGZHOU GAOKE COMMUNICATIONS TECHNOLOGY CO.LTD.\",\n\t[3]byte{0, 14, 181}:    \"Ecastle Electronics Co., Ltd.\",\n\t[3]byte{0, 14, 182}:    \"Riverbed Technology, Inc.\",\n\t[3]byte{0, 14, 183}:    \"Knovative, Inc.\",\n\t[3]byte{0, 14, 184}:    \"Iiga co.,Ltd\",\n\t[3]byte{0, 14, 185}:    \"HASHIMOTO Electronics Industry Co.,Ltd.\",\n\t[3]byte{0, 14, 186}:    \"HANMI SEMICONDUCTOR CO., LTD.\",\n\t[3]byte{0, 14, 187}:    \"Everbee Networks\",\n\t[3]byte{0, 14, 188}:    \"Paragon Fidelity GmbH\",\n\t[3]byte{0, 14, 189}:    \"Burdick, a Quinton Compny\",\n\t[3]byte{0, 14, 190}:    \"B&B Electronics Manufacturing Co.\",\n\t[3]byte{0, 14, 191}:    \"Remsdaq Limited\",\n\t[3]byte{0, 14, 192}:    \"Nortel Networks\",\n\t[3]byte{0, 14, 193}:    \"MYNAH Technologies\",\n\t[3]byte{0, 14, 194}:    \"Lowrance Electronics, Inc.\",\n\t[3]byte{0, 14, 195}:    \"Logic Controls, Inc.\",\n\t[3]byte{0, 14, 196}:    \"Iskra Transmission d.d.\",\n\t[3]byte{0, 14, 197}:    \"Digital Multitools Inc\",\n\t[3]byte{0, 14, 198}:    \"ASIX ELECTRONICS CORP.\",\n\t[3]byte{0, 14, 199}:    \"Motorola Korea\",\n\t[3]byte{0, 14, 200}:    \"Zoran Corporation\",\n\t[3]byte{0, 14, 201}:    \"YOKO Technology Corp.\",\n\t[3]byte{0, 14, 202}:    \"WTSS Inc\",\n\t[3]byte{0, 14, 203}:    \"VineSys Technology\",\n\t[3]byte{0, 14, 204}:    \"Tableau, LLC\",\n\t[3]byte{0, 14, 205}:    \"SKOV A/S\",\n\t[3]byte{0, 14, 206}:    \"S.I.T.T.I. S.p.A.\",\n\t[3]byte{0, 14, 207}:    \"PROFIBUS Nutzerorganisation e.V.\",\n\t[3]byte{0, 14, 208}:    \"Privaris, Inc.\",\n\t[3]byte{0, 14, 209}:    \"Osaka Micro Computer.\",\n\t[3]byte{0, 14, 210}:    \"Filtronic plc\",\n\t[3]byte{0, 14, 211}:    \"Epicenter, Inc.\",\n\t[3]byte{0, 14, 212}:    \"CRESITT INDUSTRIE\",\n\t[3]byte{0, 14, 213}:    \"COPAN Systems Inc.\",\n\t[3]byte{0, 14, 214}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 14, 215}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 14, 216}:    \"Positron Access Solutions Corp\",\n\t[3]byte{0, 14, 217}:    \"Aksys, Ltd.\",\n\t[3]byte{0, 14, 218}:    \"C-TECH UNITED CORP.\",\n\t[3]byte{0, 14, 219}:    \"XiNCOM Corp.\",\n\t[3]byte{0, 14, 220}:    \"Tellion INC.\",\n\t[3]byte{0, 14, 221}:    \"SHURE INCORPORATED\",\n\t[3]byte{0, 14, 222}:    \"REMEC, Inc.\",\n\t[3]byte{0, 14, 223}:    \"PLX Technology\",\n\t[3]byte{0, 14, 224}:    \"Mcharge\",\n\t[3]byte{0, 14, 225}:    \"ExtremeSpeed Inc.\",\n\t[3]byte{0, 14, 226}:    \"Custom Engineering\",\n\t[3]byte{0, 14, 227}:    \"Chiyu Technology Co.,Ltd\",\n\t[3]byte{0, 14, 228}:    \"BOE TECHNOLOGY GROUP CO.,LTD\",\n\t[3]byte{0, 14, 229}:    \"bitWallet, Inc.\",\n\t[3]byte{0, 14, 230}:    \"Adimos Systems LTD\",\n\t[3]byte{0, 14, 231}:    \"AAC ELECTRONICS CORP.\",\n\t[3]byte{0, 14, 232}:    \"Zioncom Electronics (Shenzhen) Ltd.\",\n\t[3]byte{0, 14, 233}:    \"WayTech Development, Inc.\",\n\t[3]byte{0, 14, 234}:    \"Shadong Luneng Jicheng Electronics,Co.,Ltd\",\n\t[3]byte{0, 14, 235}:    \"Sandmartin(zhong shan)Electronics Co.,Ltd\",\n\t[3]byte{0, 14, 236}:    \"Orban\",\n\t[3]byte{0, 14, 237}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 14, 238}:    \"Muco Industrie BV\",\n\t[3]byte{0, 14, 239}:    \"Private\",\n\t[3]byte{0, 14, 240}:    \"Festo AG & Co. KG\",\n\t[3]byte{0, 14, 241}:    \"EZQUEST INC.\",\n\t[3]byte{0, 14, 242}:    \"Infinico Corporation\",\n\t[3]byte{0, 14, 243}:    \"Smartlabs, Inc. \",\n\t[3]byte{0, 14, 244}:    \"Kasda Networks Inc\",\n\t[3]byte{0, 14, 245}:    \"iPAC Technology Co., Ltd.\",\n\t[3]byte{0, 14, 246}:    \"E-TEN Information Systems Co., Ltd.\",\n\t[3]byte{0, 14, 247}:    \"Vulcan Portals Inc\",\n\t[3]byte{0, 14, 248}:    \"SBC ASI\",\n\t[3]byte{0, 14, 249}:    \"REA Elektronik GmbH\",\n\t[3]byte{0, 14, 250}:    \"Optoway Technology Incorporation\",\n\t[3]byte{0, 14, 251}:    \"Macey Enterprises\",\n\t[3]byte{0, 14, 252}:    \"JTAG Technologies B.V.\",\n\t[3]byte{0, 14, 253}:    \"FUJINON CORPORATION\",\n\t[3]byte{0, 14, 254}:    \"EndRun Technologies LLC\",\n\t[3]byte{0, 14, 255}:    \"Megasolution,Inc.\",\n\t[3]byte{0, 15, 0}:      \"Legra Systems, Inc.\",\n\t[3]byte{0, 15, 1}:      \"DIGITALKS INC\",\n\t[3]byte{0, 15, 2}:      \"Digicube Technology Co., Ltd\",\n\t[3]byte{0, 15, 3}:      \"COM&C CO., LTD\",\n\t[3]byte{0, 15, 4}:      \"cim-usa inc\",\n\t[3]byte{0, 15, 5}:      \"3B SYSTEM INC.\",\n\t[3]byte{0, 15, 6}:      \"Nortel Networks\",\n\t[3]byte{0, 15, 7}:      \"Mangrove Systems, Inc.\",\n\t[3]byte{0, 15, 8}:      \"Indagon Oy\",\n\t[3]byte{0, 15, 9}:      \"Private\",\n\t[3]byte{0, 15, 10}:     \"Clear Edge Networks\",\n\t[3]byte{0, 15, 11}:     \"Kentima Technologies AB\",\n\t[3]byte{0, 15, 12}:     \"SYNCHRONIC ENGINEERING\",\n\t[3]byte{0, 15, 13}:     \"Hunt Electronic Co., Ltd.\",\n\t[3]byte{0, 15, 14}:     \"WaveSplitter Technologies, Inc.\",\n\t[3]byte{0, 15, 15}:     \"Real ID Technology Co., Ltd.\",\n\t[3]byte{0, 15, 16}:     \"RDM Corporation\",\n\t[3]byte{0, 15, 17}:     \"Prodrive B.V.\",\n\t[3]byte{0, 15, 18}:     \"Panasonic Europe Ltd.\",\n\t[3]byte{0, 15, 19}:     \"Nisca corporation\",\n\t[3]byte{0, 15, 20}:     \"Mindray Co., Ltd.\",\n\t[3]byte{0, 15, 21}:     \"Icotera A/S\",\n\t[3]byte{0, 15, 22}:     \"JAY HOW TECHNOLOGY CO.,\",\n\t[3]byte{0, 15, 23}:     \"Insta Elektro GmbH\",\n\t[3]byte{0, 15, 24}:     \"Industrial Control Systems\",\n\t[3]byte{0, 15, 25}:     \"Boston Scientific\",\n\t[3]byte{0, 15, 26}:     \"Gaming Support B.V.\",\n\t[3]byte{0, 15, 27}:     \"Ego Systems Inc.\",\n\t[3]byte{0, 15, 28}:     \"DigitAll World Co., Ltd\",\n\t[3]byte{0, 15, 29}:     \"Cosmo Techs Co., Ltd.\",\n\t[3]byte{0, 15, 30}:     \"Chengdu KT Electric Co.of High & New Technology\",\n\t[3]byte{0, 15, 31}:     \"Dell Inc.\",\n\t[3]byte{0, 15, 32}:     \"Hewlett Packard\",\n\t[3]byte{0, 15, 33}:     \"Scientific Atlanta, Inc\",\n\t[3]byte{0, 15, 34}:     \"Helius, Inc.\",\n\t[3]byte{0, 15, 35}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 15, 36}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 15, 37}:     \"AimValley B.V.\",\n\t[3]byte{0, 15, 38}:     \"WorldAccxx  LLC\",\n\t[3]byte{0, 15, 39}:     \"TEAL Electronics, Inc.\",\n\t[3]byte{0, 15, 40}:     \"Itronix Corporation\",\n\t[3]byte{0, 15, 41}:     \"Augmentix Corporation\",\n\t[3]byte{0, 15, 42}:     \"Cableware Electronics\",\n\t[3]byte{0, 15, 43}:     \"GREENBELL SYSTEMS\",\n\t[3]byte{0, 15, 44}:     \"Uplogix, Inc.\",\n\t[3]byte{0, 15, 45}:     \"CHUNG-HSIN ELECTRIC & MACHINERY MFG.CORP.\",\n\t[3]byte{0, 15, 46}:     \"Megapower International Corp.\",\n\t[3]byte{0, 15, 47}:     \"W-LINX TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 15, 48}:     \"Raza Microelectronics Inc\",\n\t[3]byte{0, 15, 49}:     \"Allied Vision Technologies Canada Inc\",\n\t[3]byte{0, 15, 50}:     \"Lootom Telcovideo Network Wuxi Co Ltd\",\n\t[3]byte{0, 15, 51}:     \"DUALi Inc.\",\n\t[3]byte{0, 15, 52}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 15, 53}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 15, 54}:     \"Accurate Techhnologies, Inc.\",\n\t[3]byte{0, 15, 55}:     \"Xambala Incorporated\",\n\t[3]byte{0, 15, 56}:     \"Netstar\",\n\t[3]byte{0, 15, 57}:     \"IRIS SENSORS\",\n\t[3]byte{0, 15, 58}:     \"HISHARP\",\n\t[3]byte{0, 15, 59}:     \"Fuji System Machines Co., Ltd.\",\n\t[3]byte{0, 15, 60}:     \"Endeleo Limited\",\n\t[3]byte{0, 15, 61}:     \"D-Link Corporation\",\n\t[3]byte{0, 15, 62}:     \"CardioNet, Inc\",\n\t[3]byte{0, 15, 63}:     \"Big Bear Networks\",\n\t[3]byte{0, 15, 64}:     \"Optical Internetworking Forum\",\n\t[3]byte{0, 15, 65}:     \"Zipher Ltd\",\n\t[3]byte{0, 15, 66}:     \"Xalyo Systems\",\n\t[3]byte{0, 15, 67}:     \"Wasabi Systems Inc.\",\n\t[3]byte{0, 15, 68}:     \"Tivella Inc.\",\n\t[3]byte{0, 15, 69}:     \"Stretch, Inc.\",\n\t[3]byte{0, 15, 70}:     \"SINAR AG\",\n\t[3]byte{0, 15, 71}:     \"ROBOX SPA\",\n\t[3]byte{0, 15, 72}:     \"Polypix Inc.\",\n\t[3]byte{0, 15, 73}:     \"Northover Solutions Limited\",\n\t[3]byte{0, 15, 74}:     \"Kyushu-kyohan co.,ltd\",\n\t[3]byte{0, 15, 75}:     \"Oracle Corporation\",\n\t[3]byte{0, 15, 76}:     \"Elextech INC\",\n\t[3]byte{0, 15, 77}:     \"TalkSwitch\",\n\t[3]byte{0, 15, 78}:     \"Cellink\",\n\t[3]byte{0, 15, 79}:     \"PCS Systemtechnik GmbH\",\n\t[3]byte{0, 15, 80}:     \"StreamScale Limited\",\n\t[3]byte{0, 15, 81}:     \"Azul Systems, Inc.\",\n\t[3]byte{0, 15, 82}:     \"YORK Refrigeration, Marine & Controls\",\n\t[3]byte{0, 15, 83}:     \"Solarflare Communications Inc.\",\n\t[3]byte{0, 15, 84}:     \"Entrelogic Corporation\",\n\t[3]byte{0, 15, 85}:     \"Datawire Communication Networks Inc.\",\n\t[3]byte{0, 15, 86}:     \"Continuum Photonics Inc\",\n\t[3]byte{0, 15, 87}:     \"CABLELOGIC Co., Ltd.\",\n\t[3]byte{0, 15, 88}:     \"Adder Technology Limited\",\n\t[3]byte{0, 15, 89}:     \"Phonak AG\",\n\t[3]byte{0, 15, 90}:     \"Peribit Networks\",\n\t[3]byte{0, 15, 91}:     \"Delta Information Systems, Inc.\",\n\t[3]byte{0, 15, 92}:     \"Day One Digital Media Limited\",\n\t[3]byte{0, 15, 93}:     \"Genexis BV\",\n\t[3]byte{0, 15, 94}:     \"Veo\",\n\t[3]byte{0, 15, 95}:     \"Nicety Technologies Inc. (NTS)\",\n\t[3]byte{0, 15, 96}:     \"Lifetron Co.,Ltd\",\n\t[3]byte{0, 15, 97}:     \"Hewlett Packard\",\n\t[3]byte{0, 15, 98}:     \"Alcatel Bell Space N.V.\",\n\t[3]byte{0, 15, 99}:     \"Obzerv Technologies\",\n\t[3]byte{0, 15, 100}:    \"D&R Electronica Weesp BV\",\n\t[3]byte{0, 15, 101}:    \"icube Corp.\",\n\t[3]byte{0, 15, 102}:    \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 15, 103}:    \"West Instruments\",\n\t[3]byte{0, 15, 104}:    \"Vavic Network Technology, Inc.\",\n\t[3]byte{0, 15, 105}:    \"SEW Eurodrive GmbH & Co. KG\",\n\t[3]byte{0, 15, 106}:    \"Nortel Networks\",\n\t[3]byte{0, 15, 107}:    \"GateWare Communications GmbH\",\n\t[3]byte{0, 15, 108}:    \"ADDI-DATA GmbH\",\n\t[3]byte{0, 15, 109}:    \"Midas Engineering\",\n\t[3]byte{0, 15, 110}:    \"BBox\",\n\t[3]byte{0, 15, 111}:    \"FTA Communication Technologies\",\n\t[3]byte{0, 15, 112}:    \"Wintec Industries, inc.\",\n\t[3]byte{0, 15, 113}:    \"Sanmei Electronics Co.,Ltd\",\n\t[3]byte{0, 15, 114}:    \"Sandburst\",\n\t[3]byte{0, 15, 115}:    \"RS Automation Co., Ltd\",\n\t[3]byte{0, 15, 116}:    \"Qamcom Technology AB\",\n\t[3]byte{0, 15, 117}:    \"First Silicon Solutions\",\n\t[3]byte{0, 15, 118}:    \"Digital Keystone, Inc.\",\n\t[3]byte{0, 15, 119}:    \"DENTUM CO.,LTD\",\n\t[3]byte{0, 15, 120}:    \"Datacap Systems Inc\",\n\t[3]byte{0, 15, 121}:    \"Bluetooth Interest Group Inc.\",\n\t[3]byte{0, 15, 122}:    \"BeiJing NuQX Technology CO.,LTD\",\n\t[3]byte{0, 15, 123}:    \"Arce Sistemas, S.A.\",\n\t[3]byte{0, 15, 124}:    \"ACTi Corporation\",\n\t[3]byte{0, 15, 125}:    \"Xirrus\",\n\t[3]byte{0, 15, 126}:    \"Ablerex Electronics Co., LTD\",\n\t[3]byte{0, 15, 127}:    \"UBSTORAGE Co.,Ltd.\",\n\t[3]byte{0, 15, 128}:    \"Trinity Security Systems,Inc.\",\n\t[3]byte{0, 15, 129}:    \"PAL Pacific Inc.\",\n\t[3]byte{0, 15, 130}:    \"Mortara Instrument, Inc.\",\n\t[3]byte{0, 15, 131}:    \"Brainium Technologies Inc.\",\n\t[3]byte{0, 15, 132}:    \"Astute Networks, Inc.\",\n\t[3]byte{0, 15, 133}:    \"ADDO-Japan Corporation\",\n\t[3]byte{0, 15, 134}:    \"BlackBerry RTS\",\n\t[3]byte{0, 15, 135}:    \"Maxcess International\",\n\t[3]byte{0, 15, 136}:    \"AMETEK, Inc.\",\n\t[3]byte{0, 15, 137}:    \"Winnertec System Co., Ltd.\",\n\t[3]byte{0, 15, 138}:    \"WideView\",\n\t[3]byte{0, 15, 139}:    \"Orion MultiSystems Inc\",\n\t[3]byte{0, 15, 140}:    \"Gigawavetech Pte Ltd\",\n\t[3]byte{0, 15, 141}:    \"FAST TV-Server AG\",\n\t[3]byte{0, 15, 142}:    \"DONGYANG TELECOM CO.,LTD.\",\n\t[3]byte{0, 15, 143}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 15, 144}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 15, 145}:    \"Aerotelecom Co.,Ltd.\",\n\t[3]byte{0, 15, 146}:    \"Microhard Systems Inc.\",\n\t[3]byte{0, 15, 147}:    \"Landis+Gyr Ltd.\",\n\t[3]byte{0, 15, 148}:    \"Genexis BV\",\n\t[3]byte{0, 15, 149}:    \"ELECOM Co.,LTD Laneed Division\",\n\t[3]byte{0, 15, 150}:    \"Telco Systems, Inc. \",\n\t[3]byte{0, 15, 151}:    \"Avanex Corporation\",\n\t[3]byte{0, 15, 152}:    \"Avamax Co. Ltd.\",\n\t[3]byte{0, 15, 153}:    \"APAC opto Electronics Inc.\",\n\t[3]byte{0, 15, 154}:    \"Synchrony, Inc.\",\n\t[3]byte{0, 15, 155}:    \"Ross Video Limited\",\n\t[3]byte{0, 15, 156}:    \"Panduit Corp\",\n\t[3]byte{0, 15, 157}:    \"DisplayLink (UK) Ltd\",\n\t[3]byte{0, 15, 158}:    \"Murrelektronik GmbH\",\n\t[3]byte{0, 15, 159}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 15, 160}:    \"CANON KOREA BUSINESS SOLUTIONS INC.\",\n\t[3]byte{0, 15, 161}:    \"Gigabit Systems Inc.\",\n\t[3]byte{0, 15, 162}:    \"2xWireless\",\n\t[3]byte{0, 15, 163}:    \"Alpha Networks Inc.\",\n\t[3]byte{0, 15, 164}:    \"Sprecher Automation GmbH\",\n\t[3]byte{0, 15, 165}:    \"BWA Technology GmbH\",\n\t[3]byte{0, 15, 166}:    \"S2 Security Corporation\",\n\t[3]byte{0, 15, 167}:    \"Raptor Networks Technology\",\n\t[3]byte{0, 15, 168}:    \"Photometrics, Inc.\",\n\t[3]byte{0, 15, 169}:    \"PC Fabrik\",\n\t[3]byte{0, 15, 170}:    \"Nexus Technologies\",\n\t[3]byte{0, 15, 171}:    \"Kyushu Electronics Systems Inc.\",\n\t[3]byte{0, 15, 172}:    \"IEEE 802.11\",\n\t[3]byte{0, 15, 173}:    \"FMN communications GmbH\",\n\t[3]byte{0, 15, 174}:    \"E2O Communications\",\n\t[3]byte{0, 15, 175}:    \"Dialog Inc.\",\n\t[3]byte{0, 15, 176}:    \"Compal Electronics INC.\",\n\t[3]byte{0, 15, 177}:    \"Cognio Inc.\",\n\t[3]byte{0, 15, 178}:    \"Broadband Pacenet (India) Pvt. Ltd.\",\n\t[3]byte{0, 15, 179}:    \"Actiontec Electronics, Inc\",\n\t[3]byte{0, 15, 180}:    \"Timespace Technology\",\n\t[3]byte{0, 15, 181}:    \"NETGEAR\",\n\t[3]byte{0, 15, 182}:    \"Europlex Technologies\",\n\t[3]byte{0, 15, 183}:    \"Cavium\",\n\t[3]byte{0, 15, 184}:    \"CallURL Inc.\",\n\t[3]byte{0, 15, 185}:    \"Adaptive Instruments\",\n\t[3]byte{0, 15, 186}:    \"Tevebox AB\",\n\t[3]byte{0, 15, 187}:    \"Nokia Siemens Networks GmbH & Co. KG.\",\n\t[3]byte{0, 15, 188}:    \"Onkey Technologies, Inc.\",\n\t[3]byte{0, 15, 189}:    \"MRV Communications (Networks) LTD\",\n\t[3]byte{0, 15, 190}:    \"e-w/you Inc.\",\n\t[3]byte{0, 15, 191}:    \"DGT Sp. z o.o.\",\n\t[3]byte{0, 15, 192}:    \"DELCOMp\",\n\t[3]byte{0, 15, 193}:    \"WAVE Corporation\",\n\t[3]byte{0, 15, 194}:    \"Uniwell Corporation\",\n\t[3]byte{0, 15, 195}:    \"PalmPalm Technology, Inc.\",\n\t[3]byte{0, 15, 196}:    \"NST co.,LTD.\",\n\t[3]byte{0, 15, 197}:    \"KeyMed Ltd\",\n\t[3]byte{0, 15, 198}:    \"Eurocom Industries A/S\",\n\t[3]byte{0, 15, 199}:    \"Dionica R&D Ltd.\",\n\t[3]byte{0, 15, 200}:    \"Chantry Networks\",\n\t[3]byte{0, 15, 201}:    \"Allnet GmbH\",\n\t[3]byte{0, 15, 202}:    \"A-JIN TECHLINE CO, LTD\",\n\t[3]byte{0, 15, 203}:    \"3Com Ltd\",\n\t[3]byte{0, 15, 204}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 15, 205}:    \"Nortel Networks\",\n\t[3]byte{0, 15, 206}:    \"Kikusui Electronics Corp.\",\n\t[3]byte{0, 15, 207}:    \"DataWind Research\",\n\t[3]byte{0, 15, 208}:    \"ASTRI\",\n\t[3]byte{0, 15, 209}:    \"Applied Wireless Identifications Group, Inc.\",\n\t[3]byte{0, 15, 210}:    \"EWA Technologies, Inc.\",\n\t[3]byte{0, 15, 211}:    \"Digium\",\n\t[3]byte{0, 15, 212}:    \"Soundcraft\",\n\t[3]byte{0, 15, 213}:    \"Schwechat - RISE\",\n\t[3]byte{0, 15, 214}:    \"Sarotech Co., Ltd\",\n\t[3]byte{0, 15, 215}:    \"Harman Music Group\",\n\t[3]byte{0, 15, 216}:    \"Force, Inc.\",\n\t[3]byte{0, 15, 217}:    \"FlexDSL Telecommunications AG\",\n\t[3]byte{0, 15, 218}:    \"YAZAKI CORPORATION\",\n\t[3]byte{0, 15, 219}:    \"Westell Technologies Inc.\",\n\t[3]byte{0, 15, 220}:    \"Ueda Japan  Radio Co., Ltd.\",\n\t[3]byte{0, 15, 221}:    \"SORDIN AB\",\n\t[3]byte{0, 15, 222}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 15, 223}:    \"SOLOMON Technology Corp.\",\n\t[3]byte{0, 15, 224}:    \"NComputing Co.,Ltd.\",\n\t[3]byte{0, 15, 225}:    \"ID DIGITAL CORPORATION\",\n\t[3]byte{0, 15, 226}:    \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{0, 15, 227}:    \"Damm Cellular Systems A/S\",\n\t[3]byte{0, 15, 228}:    \"Pantech Co.,Ltd\",\n\t[3]byte{0, 15, 229}:    \"MERCURY SECURITY CORPORATION\",\n\t[3]byte{0, 15, 230}:    \"MBTech Systems, Inc.\",\n\t[3]byte{0, 15, 231}:    \"Lutron Electronics Co., Inc.\",\n\t[3]byte{0, 15, 232}:    \"Lobos, Inc.\",\n\t[3]byte{0, 15, 233}:    \"GW TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{0, 15, 234}:    \"Giga-Byte Technology Co.,LTD.\",\n\t[3]byte{0, 15, 235}:    \"Cylon Controls\",\n\t[3]byte{0, 15, 236}:    \"ARKUS Inc.\",\n\t[3]byte{0, 15, 237}:    \"Anam Electronics Co., Ltd\",\n\t[3]byte{0, 15, 238}:    \"XTec, Incorporated\",\n\t[3]byte{0, 15, 239}:    \"Thales e-Transactions GmbH\",\n\t[3]byte{0, 15, 240}:    \"Sunray Co. Ltd.\",\n\t[3]byte{0, 15, 241}:    \"nex-G Systems Pte.Ltd\",\n\t[3]byte{0, 15, 242}:    \"Loud Technologies Inc.\",\n\t[3]byte{0, 15, 243}:    \"Jung Myoung Communications&Technology\",\n\t[3]byte{0, 15, 244}:    \"Guntermann & Drunck GmbH\",\n\t[3]byte{0, 15, 245}:    \"GN&S company\",\n\t[3]byte{0, 15, 246}:    \"DARFON LIGHTING CORP\",\n\t[3]byte{0, 15, 247}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 15, 248}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 15, 249}:    \"Valcretec, Inc.\",\n\t[3]byte{0, 15, 250}:    \"Optinel Systems, Inc.\",\n\t[3]byte{0, 15, 251}:    \"Nippon Denso Industry Co., Ltd.\",\n\t[3]byte{0, 15, 252}:    \"Merit Li-Lin Ent.\",\n\t[3]byte{0, 15, 253}:    \"Glorytek Network Inc.\",\n\t[3]byte{0, 15, 254}:    \"G-PRO COMPUTER\",\n\t[3]byte{0, 15, 255}:    \"Control4\",\n\t[3]byte{0, 16, 0}:      \"CABLE TELEVISION LABORATORIES, INC.\",\n\t[3]byte{0, 16, 1}:      \"Citel\",\n\t[3]byte{0, 16, 2}:      \"ACTIA\",\n\t[3]byte{0, 16, 3}:      \"IMATRON, INC.\",\n\t[3]byte{0, 16, 4}:      \"THE BRANTLEY COILE COMPANY,INC\",\n\t[3]byte{0, 16, 5}:      \"UEC COMMERCIAL\",\n\t[3]byte{0, 16, 6}:      \"Thales Contact Solutions Ltd.\",\n\t[3]byte{0, 16, 7}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 16, 8}:      \"VIENNA SYSTEMS CORPORATION\",\n\t[3]byte{0, 16, 9}:      \"HORANET\",\n\t[3]byte{0, 16, 10}:     \"WILLIAMS COMMUNICATIONS GROUP\",\n\t[3]byte{0, 16, 11}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 16, 12}:     \"ITO CO., LTD.\",\n\t[3]byte{0, 16, 13}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 16, 14}:     \"MICRO LINEAR COPORATION\",\n\t[3]byte{0, 16, 15}:     \"INDUSTRIAL CPU SYSTEMS\",\n\t[3]byte{0, 16, 16}:     \"INITIO CORPORATION\",\n\t[3]byte{0, 16, 17}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 16, 18}:     \"PROCESSOR SYSTEMS (I) PVT LTD\",\n\t[3]byte{0, 16, 19}:     \"Kontron America, Inc.\",\n\t[3]byte{0, 16, 20}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 16, 21}:     \"OOmon Inc.\",\n\t[3]byte{0, 16, 22}:     \"T.SQWARE\",\n\t[3]byte{0, 16, 23}:     \"Bosch Access Systems GmbH\",\n\t[3]byte{0, 16, 24}:     \"Broadcom\",\n\t[3]byte{0, 16, 25}:     \"SIRONA DENTAL SYSTEMS GmbH & Co. KG\",\n\t[3]byte{0, 16, 26}:     \"PictureTel Corp.\",\n\t[3]byte{0, 16, 27}:     \"CORNET TECHNOLOGY, INC.\",\n\t[3]byte{0, 16, 28}:     \"OHM TECHNOLOGIES INTL, LLC\",\n\t[3]byte{0, 16, 29}:     \"WINBOND ELECTRONICS CORP.\",\n\t[3]byte{0, 16, 30}:     \"MATSUSHITA ELECTRONIC INSTRUMENTS CORP.\",\n\t[3]byte{0, 16, 31}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 16, 32}:     \"Hand Held Products Inc\",\n\t[3]byte{0, 16, 33}:     \"ENCANTO NETWORKS, INC.\",\n\t[3]byte{0, 16, 34}:     \"SatCom Media Corporation\",\n\t[3]byte{0, 16, 35}:     \"Network Equipment Technologies\",\n\t[3]byte{0, 16, 36}:     \"NAGOYA ELECTRIC WORKS CO., LTD\",\n\t[3]byte{0, 16, 37}:     \"Grayhill, Inc\",\n\t[3]byte{0, 16, 38}:     \"ACCELERATED NETWORKS, INC.\",\n\t[3]byte{0, 16, 39}:     \"L-3 COMMUNICATIONS EAST\",\n\t[3]byte{0, 16, 40}:     \"COMPUTER TECHNICA, INC.\",\n\t[3]byte{0, 16, 41}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 16, 42}:     \"ZF MICROSYSTEMS, INC.\",\n\t[3]byte{0, 16, 43}:     \"UMAX DATA SYSTEMS, INC.\",\n\t[3]byte{0, 16, 44}:     \"Lasat Networks A/S\",\n\t[3]byte{0, 16, 45}:     \"HITACHI SOFTWARE ENGINEERING\",\n\t[3]byte{0, 16, 46}:     \"NETWORK SYSTEMS & TECHNOLOGIES PVT. LTD.\",\n\t[3]byte{0, 16, 47}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 16, 48}:     \"EION Inc.\",\n\t[3]byte{0, 16, 49}:     \"OBJECTIVE COMMUNICATIONS, INC.\",\n\t[3]byte{0, 16, 50}:     \"ALTA TECHNOLOGY\",\n\t[3]byte{0, 16, 51}:     \"ACCESSLAN COMMUNICATIONS, INC.\",\n\t[3]byte{0, 16, 52}:     \"GNP Computers\",\n\t[3]byte{0, 16, 53}:     \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{0, 16, 54}:     \"INTER-TEL INTEGRATED SYSTEMS\",\n\t[3]byte{0, 16, 55}:     \"CYQ've Technology Co., Ltd.\",\n\t[3]byte{0, 16, 56}:     \"Micro Research Ltd.\",\n\t[3]byte{0, 16, 57}:     \"Vectron Systems AG\",\n\t[3]byte{0, 16, 58}:     \"DIAMOND NETWORK TECH\",\n\t[3]byte{0, 16, 59}:     \"HIPPI NETWORKING FORUM\",\n\t[3]byte{0, 16, 60}:     \"IC ENSEMBLE, INC.\",\n\t[3]byte{0, 16, 61}:     \"PHASECOM, LTD.\",\n\t[3]byte{0, 16, 62}:     \"NETSCHOOLS CORPORATION\",\n\t[3]byte{0, 16, 63}:     \"TOLLGRADE COMMUNICATIONS, INC.\",\n\t[3]byte{0, 16, 64}:     \"INTERMEC CORPORATION\",\n\t[3]byte{0, 16, 65}:     \"BRISTOL BABCOCK, INC.\",\n\t[3]byte{0, 16, 66}:     \"Alacritech, Inc.\",\n\t[3]byte{0, 16, 67}:     \"A2 CORPORATION\",\n\t[3]byte{0, 16, 68}:     \"InnoLabs Corporation\",\n\t[3]byte{0, 16, 69}:     \"Nortel Networks\",\n\t[3]byte{0, 16, 70}:     \"ALCORN MCBRIDE INC.\",\n\t[3]byte{0, 16, 71}:     \"ECHO ELETRIC CO. LTD.\",\n\t[3]byte{0, 16, 72}:     \"HTRC AUTOMATION, INC.\",\n\t[3]byte{0, 16, 73}:     \"ShoreTel, Inc\",\n\t[3]byte{0, 16, 74}:     \"The Parvus Corporation\",\n\t[3]byte{0, 16, 75}:     \"3COM\",\n\t[3]byte{0, 16, 76}:     \"Teledyne LeCroy, Inc\",\n\t[3]byte{0, 16, 77}:     \"SURTEC INDUSTRIES, INC.\",\n\t[3]byte{0, 16, 78}:     \"CEOLOGIC\",\n\t[3]byte{0, 16, 79}:     \"Oracle Corporation \",\n\t[3]byte{0, 16, 80}:     \"RION CO., LTD.\",\n\t[3]byte{0, 16, 81}:     \"CMICRO CORPORATION\",\n\t[3]byte{0, 16, 82}:     \"METTLER-TOLEDO (ALBSTADT) GMBH\",\n\t[3]byte{0, 16, 83}:     \"COMPUTER TECHNOLOGY CORP.\",\n\t[3]byte{0, 16, 84}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 16, 85}:     \"FUJITSU MICROELECTRONICS, INC.\",\n\t[3]byte{0, 16, 86}:     \"SODICK CO., LTD.\",\n\t[3]byte{0, 16, 87}:     \"Rebel.com, Inc.\",\n\t[3]byte{0, 16, 88}:     \"ArrowPoint Communications\",\n\t[3]byte{0, 16, 89}:     \"DIABLO RESEARCH CO. LLC\",\n\t[3]byte{0, 16, 90}:     \"3COM\",\n\t[3]byte{0, 16, 91}:     \"NET INSIGHT AB\",\n\t[3]byte{0, 16, 92}:     \"QUANTUM DESIGNS (H.K.) LTD.\",\n\t[3]byte{0, 16, 93}:     \"Draeger Medical\",\n\t[3]byte{0, 16, 94}:     \"Spirent plc, Service Assurance Broadband\",\n\t[3]byte{0, 16, 95}:     \"ZODIAC DATA SYSTEMS\",\n\t[3]byte{0, 16, 96}:     \"BILLIONTON SYSTEMS, INC.\",\n\t[3]byte{0, 16, 97}:     \"HOSTLINK CORP.\",\n\t[3]byte{0, 16, 98}:     \"NX SERVER, ILNC.\",\n\t[3]byte{0, 16, 99}:     \"STARGUIDE DIGITAL NETWORKS\",\n\t[3]byte{0, 16, 100}:    \"DNPG, LLC\",\n\t[3]byte{0, 16, 101}:    \"RADYNE CORPORATION\",\n\t[3]byte{0, 16, 102}:    \"ADVANCED CONTROL SYSTEMS, INC.\",\n\t[3]byte{0, 16, 103}:    \"Ericsson\",\n\t[3]byte{0, 16, 104}:    \"COMOS TELECOM\",\n\t[3]byte{0, 16, 105}:    \"HELIOSS COMMUNICATIONS, INC.\",\n\t[3]byte{0, 16, 106}:    \"DIGITAL MICROWAVE CORPORATION\",\n\t[3]byte{0, 16, 107}:    \"SONUS NETWORKS, INC.\",\n\t[3]byte{0, 16, 108}:    \"EDNT GmbH\",\n\t[3]byte{0, 16, 109}:    \"Axxcelera Broadband Wireless\",\n\t[3]byte{0, 16, 110}:    \"TADIRAN COM. LTD.\",\n\t[3]byte{0, 16, 111}:    \"TRENTON TECHNOLOGY INC.\",\n\t[3]byte{0, 16, 112}:    \"CARADON TREND LTD.\",\n\t[3]byte{0, 16, 113}:    \"ADVANET INC.\",\n\t[3]byte{0, 16, 114}:    \"GVN TECHNOLOGIES, INC.\",\n\t[3]byte{0, 16, 115}:    \"TECHNOBOX, INC.\",\n\t[3]byte{0, 16, 116}:    \"ATEN INTERNATIONAL CO., LTD.\",\n\t[3]byte{0, 16, 117}:    \"Segate Technology LLC\",\n\t[3]byte{0, 16, 118}:    \"EUREM GmbH\",\n\t[3]byte{0, 16, 119}:    \"SAF DRIVE SYSTEMS, LTD.\",\n\t[3]byte{0, 16, 120}:    \"NUERA COMMUNICATIONS, INC.\",\n\t[3]byte{0, 16, 121}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 16, 122}:    \"AmbiCom, Inc.\",\n\t[3]byte{0, 16, 123}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 16, 124}:    \"P-COM, INC.\",\n\t[3]byte{0, 16, 125}:    \"AURORA COMMUNICATIONS, LTD.\",\n\t[3]byte{0, 16, 126}:    \"BACHMANN ELECTRONIC GmbH\",\n\t[3]byte{0, 16, 127}:    \"CRESTRON ELECTRONICS, INC.\",\n\t[3]byte{0, 16, 128}:    \"METAWAVE COMMUNICATIONS\",\n\t[3]byte{0, 16, 129}:    \"DPS, INC.\",\n\t[3]byte{0, 16, 130}:    \"JNA TELECOMMUNICATIONS LIMITED\",\n\t[3]byte{0, 16, 131}:    \"Hewlett Packard\",\n\t[3]byte{0, 16, 132}:    \"K-BOT COMMUNICATIONS\",\n\t[3]byte{0, 16, 133}:    \"POLARIS COMMUNICATIONS, INC.\",\n\t[3]byte{0, 16, 134}:    \"ATTO Technology, Inc.\",\n\t[3]byte{0, 16, 135}:    \"XSTREAMIS PLC\",\n\t[3]byte{0, 16, 136}:    \"AMERICAN NETWORKS INC.\",\n\t[3]byte{0, 16, 137}:    \"WebSonic\",\n\t[3]byte{0, 16, 138}:    \"TeraLogic, Inc.\",\n\t[3]byte{0, 16, 139}:    \"LASERANIMATION SOLLINGER GMBH\",\n\t[3]byte{0, 16, 140}:    \"Fujitsu Services Ltd\",\n\t[3]byte{0, 16, 141}:    \"Johnson Controls, Inc.\",\n\t[3]byte{0, 16, 142}:    \"HUGH SYMONS CONCEPT Technologies Ltd.\",\n\t[3]byte{0, 16, 143}:    \"RAPTOR SYSTEMS\",\n\t[3]byte{0, 16, 144}:    \"CIMETRICS, INC.\",\n\t[3]byte{0, 16, 145}:    \"NO WIRES NEEDED BV\",\n\t[3]byte{0, 16, 146}:    \"NETCORE INC.\",\n\t[3]byte{0, 16, 147}:    \"CMS COMPUTERS, LTD.\",\n\t[3]byte{0, 16, 148}:    \"Performance Analysis Broadband, Spirent plc\",\n\t[3]byte{0, 16, 149}:    \"Thomson Inc.\",\n\t[3]byte{0, 16, 150}:    \"TRACEWELL SYSTEMS, INC.\",\n\t[3]byte{0, 16, 151}:    \"WinNet Metropolitan Communications Systems, Inc.\",\n\t[3]byte{0, 16, 152}:    \"STARNET TECHNOLOGIES, INC.\",\n\t[3]byte{0, 16, 153}:    \"InnoMedia, Inc.\",\n\t[3]byte{0, 16, 154}:    \"NETLINE\",\n\t[3]byte{0, 16, 155}:    \"Emulex Corporation\",\n\t[3]byte{0, 16, 156}:    \"M-SYSTEM CO., LTD.\",\n\t[3]byte{0, 16, 157}:    \"CLARINET SYSTEMS, INC.\",\n\t[3]byte{0, 16, 158}:    \"AWARE, INC.\",\n\t[3]byte{0, 16, 159}:    \"PAVO, INC.\",\n\t[3]byte{0, 16, 160}:    \"INNOVEX TECHNOLOGIES, INC.\",\n\t[3]byte{0, 16, 161}:    \"KENDIN SEMICONDUCTOR, INC.\",\n\t[3]byte{0, 16, 162}:    \"TNS\",\n\t[3]byte{0, 16, 163}:    \"OMNITRONIX, INC.\",\n\t[3]byte{0, 16, 164}:    \"XIRCOM\",\n\t[3]byte{0, 16, 165}:    \"OXFORD INSTRUMENTS\",\n\t[3]byte{0, 16, 166}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 16, 167}:    \"UNEX TECHNOLOGY CORPORATION\",\n\t[3]byte{0, 16, 168}:    \"RELIANCE COMPUTER CORP.\",\n\t[3]byte{0, 16, 169}:    \"ADHOC TECHNOLOGIES\",\n\t[3]byte{0, 16, 170}:    \"MEDIA4, INC.\",\n\t[3]byte{0, 16, 171}:    \"KOITO ELECTRIC INDUSTRIES, LTD.\",\n\t[3]byte{0, 16, 172}:    \"IMCI TECHNOLOGIES\",\n\t[3]byte{0, 16, 173}:    \"SOFTRONICS USB, INC.\",\n\t[3]byte{0, 16, 174}:    \"SHINKO ELECTRIC INDUSTRIES CO.\",\n\t[3]byte{0, 16, 175}:    \"TAC SYSTEMS, INC.\",\n\t[3]byte{0, 16, 176}:    \"MERIDIAN TECHNOLOGY CORP.\",\n\t[3]byte{0, 16, 177}:    \"FOR-A CO., LTD.\",\n\t[3]byte{0, 16, 178}:    \"COACTIVE AESTHETICS\",\n\t[3]byte{0, 16, 179}:    \"NOKIA MULTIMEDIA TERMINALS\",\n\t[3]byte{0, 16, 180}:    \"ATMOSPHERE NETWORKS\",\n\t[3]byte{0, 16, 181}:    \"Accton Technology Corp\",\n\t[3]byte{0, 16, 182}:    \"ENTRATA COMMUNICATIONS CORP.\",\n\t[3]byte{0, 16, 183}:    \"COYOTE TECHNOLOGIES, LLC\",\n\t[3]byte{0, 16, 184}:    \"ISHIGAKI COMPUTER SYSTEM CO.\",\n\t[3]byte{0, 16, 185}:    \"MAXTOR CORP.\",\n\t[3]byte{0, 16, 186}:    \"MARTINHO-DAVIS SYSTEMS, INC.\",\n\t[3]byte{0, 16, 187}:    \"DATA & INFORMATION TECHNOLOGY\",\n\t[3]byte{0, 16, 188}:    \"Aastra Telecom\",\n\t[3]byte{0, 16, 189}:    \"THE TELECOMMUNICATION TECHNOLOGY COMMITTEE (TTC)\",\n\t[3]byte{0, 16, 190}:    \"MARCH NETWORKS CORPORATION\",\n\t[3]byte{0, 16, 191}:    \"InterAir Wireless\",\n\t[3]byte{0, 16, 192}:    \"ARMA, Inc.\",\n\t[3]byte{0, 16, 193}:    \"OI ELECTRIC CO.,LTD\",\n\t[3]byte{0, 16, 194}:    \"WILLNET, INC.\",\n\t[3]byte{0, 16, 195}:    \"CSI-CONTROL SYSTEMS\",\n\t[3]byte{0, 16, 196}:    \"MEDIA GLOBAL LINKS CO., LTD.\",\n\t[3]byte{0, 16, 197}:    \"PROTOCOL TECHNOLOGIES, INC.\",\n\t[3]byte{0, 16, 198}:    \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{0, 16, 199}:    \"DATA TRANSMISSION NETWORK\",\n\t[3]byte{0, 16, 200}:    \"COMMUNICATIONS ELECTRONICS SECURITY GROUP\",\n\t[3]byte{0, 16, 201}:    \"MITSUBISHI ELECTRONICS LOGISTIC SUPPORT CO.\",\n\t[3]byte{0, 16, 202}:    \"Telco Systems, Inc. \",\n\t[3]byte{0, 16, 203}:    \"FACIT K.K.\",\n\t[3]byte{0, 16, 204}:    \"CLP COMPUTER LOGISTIK PLANUNG GmbH\",\n\t[3]byte{0, 16, 205}:    \"INTERFACE CONCEPT\",\n\t[3]byte{0, 16, 206}:    \"VOLAMP, LTD.\",\n\t[3]byte{0, 16, 207}:    \"FIBERLANE COMMUNICATIONS\",\n\t[3]byte{0, 16, 208}:    \"WITCOM, LTD.\",\n\t[3]byte{0, 16, 209}:    \"Top Layer Networks, Inc.\",\n\t[3]byte{0, 16, 210}:    \"NITTO TSUSHINKI CO., LTD\",\n\t[3]byte{0, 16, 211}:    \"GRIPS ELECTRONIC GMBH\",\n\t[3]byte{0, 16, 212}:    \"STORAGE COMPUTER CORPORATION\",\n\t[3]byte{0, 16, 213}:    \"IMASDE CANARIAS, S.A.\",\n\t[3]byte{0, 16, 214}:    \"Exelis\",\n\t[3]byte{0, 16, 215}:    \"ARGOSY RESEARCH INC.\",\n\t[3]byte{0, 16, 216}:    \"CALISTA\",\n\t[3]byte{0, 16, 217}:    \"IBM JAPAN, FUJISAWA MT+D\",\n\t[3]byte{0, 16, 218}:    \"Kollmorgen Corp\",\n\t[3]byte{0, 16, 219}:    \"Juniper Networks\",\n\t[3]byte{0, 16, 220}:    \"MICRO-STAR INTERNATIONAL CO., LTD.\",\n\t[3]byte{0, 16, 221}:    \"ENABLE SEMICONDUCTOR, INC.\",\n\t[3]byte{0, 16, 222}:    \"INTERNATIONAL DATACASTING CORPORATION\",\n\t[3]byte{0, 16, 223}:    \"RISE COMPUTER INC.\",\n\t[3]byte{0, 16, 224}:    \"Oracle Corporation \",\n\t[3]byte{0, 16, 225}:    \"S.I. TECH, INC.\",\n\t[3]byte{0, 16, 226}:    \"ArrayComm, Inc.\",\n\t[3]byte{0, 16, 227}:    \"Hewlett Packard\",\n\t[3]byte{0, 16, 228}:    \"NSI CORPORATION\",\n\t[3]byte{0, 16, 229}:    \"SOLECTRON TEXAS\",\n\t[3]byte{0, 16, 230}:    \"APPLIED INTELLIGENT SYSTEMS, INC.\",\n\t[3]byte{0, 16, 231}:    \"Breezecom, Ltd.\",\n\t[3]byte{0, 16, 232}:    \"TELOCITY, INCORPORATED\",\n\t[3]byte{0, 16, 233}:    \"RAIDTEC LTD.\",\n\t[3]byte{0, 16, 234}:    \"ADEPT TECHNOLOGY\",\n\t[3]byte{0, 16, 235}:    \"SELSIUS SYSTEMS, INC.\",\n\t[3]byte{0, 16, 236}:    \"RPCG, LLC\",\n\t[3]byte{0, 16, 237}:    \"SUNDANCE TECHNOLOGY, INC.\",\n\t[3]byte{0, 16, 238}:    \"CTI PRODUCTS, INC.\",\n\t[3]byte{0, 16, 239}:    \"DBTEL INCORPORATED\",\n\t[3]byte{0, 16, 240}:    \"RITTAL-WERK RUDOLF LOH GmbH & Co.\",\n\t[3]byte{0, 16, 241}:    \"I-O CORPORATION\",\n\t[3]byte{0, 16, 242}:    \"ANTEC\",\n\t[3]byte{0, 16, 243}:    \"Nexcom International Co., Ltd.\",\n\t[3]byte{0, 16, 244}:    \"Vertical Communications\",\n\t[3]byte{0, 16, 245}:    \"AMHERST SYSTEMS, INC.\",\n\t[3]byte{0, 16, 246}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 16, 247}:    \"IRIICHI TECHNOLOGIES Inc.\",\n\t[3]byte{0, 16, 248}:    \"TEXIO TECHNOLOGY CORPORATION\",\n\t[3]byte{0, 16, 249}:    \"UNIQUE SYSTEMS, INC.\",\n\t[3]byte{0, 16, 250}:    \"Apple, Inc.\",\n\t[3]byte{0, 16, 251}:    \"ZIDA TECHNOLOGIES LIMITED\",\n\t[3]byte{0, 16, 252}:    \"BROADBAND NETWORKS, INC.\",\n\t[3]byte{0, 16, 253}:    \"COCOM A/S\",\n\t[3]byte{0, 16, 254}:    \"DIGITAL EQUIPMENT CORPORATION\",\n\t[3]byte{0, 16, 255}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 17, 0}:      \"Schneider Electric\",\n\t[3]byte{0, 17, 1}:      \"CET Technologies Pte Ltd\",\n\t[3]byte{0, 17, 2}:      \"Aurora Multimedia Corp.\",\n\t[3]byte{0, 17, 3}:      \"kawamura electric inc.\",\n\t[3]byte{0, 17, 4}:      \"TELEXY\",\n\t[3]byte{0, 17, 5}:      \"Sunplus Technology Co., Ltd.\",\n\t[3]byte{0, 17, 6}:      \"Siemens NV (Belgium)\",\n\t[3]byte{0, 17, 7}:      \"RGB Networks Inc.\",\n\t[3]byte{0, 17, 8}:      \"Orbital Data Corporation\",\n\t[3]byte{0, 17, 9}:      \"Micro-Star International\",\n\t[3]byte{0, 17, 10}:     \"Hewlett Packard\",\n\t[3]byte{0, 17, 11}:     \"Franklin Technology Systems\",\n\t[3]byte{0, 17, 12}:     \"Atmark Techno, Inc.\",\n\t[3]byte{0, 17, 13}:     \"SANBlaze Technology, Inc.\",\n\t[3]byte{0, 17, 14}:     \"Tsurusaki Sealand Transportation Co. Ltd.\",\n\t[3]byte{0, 17, 15}:     \"netplat,Inc.\",\n\t[3]byte{0, 17, 16}:     \"Maxanna Technology Co., Ltd.\",\n\t[3]byte{0, 17, 17}:     \"Intel Corporation\",\n\t[3]byte{0, 17, 18}:     \"Honeywell CMSS\",\n\t[3]byte{0, 17, 19}:     \"Fraunhofer FOKUS\",\n\t[3]byte{0, 17, 20}:     \"EverFocus Electronics Corp.\",\n\t[3]byte{0, 17, 21}:     \"EPIN Technologies, Inc.\",\n\t[3]byte{0, 17, 22}:     \"COTEAU VERT CO., LTD.\",\n\t[3]byte{0, 17, 23}:     \"CESNET\",\n\t[3]byte{0, 17, 24}:     \"BLX IC Design Corp., Ltd.\",\n\t[3]byte{0, 17, 25}:     \"Solteras, Inc.\",\n\t[3]byte{0, 17, 26}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 17, 27}:     \"Targa Systems Div L-3 Communications\",\n\t[3]byte{0, 17, 28}:     \"Pleora Technologies Inc.\",\n\t[3]byte{0, 17, 29}:     \"Hectrix Limited\",\n\t[3]byte{0, 17, 30}:     \"ETHERNET Powerlink Standarization Group (EPSG)\",\n\t[3]byte{0, 17, 31}:     \"Doremi Labs, Inc.\",\n\t[3]byte{0, 17, 32}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 17, 33}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 17, 34}:     \"CIMSYS Inc\",\n\t[3]byte{0, 17, 35}:     \"Appointech, Inc.\",\n\t[3]byte{0, 17, 36}:     \"Apple, Inc.\",\n\t[3]byte{0, 17, 37}:     \"IBM Corp\",\n\t[3]byte{0, 17, 38}:     \"Venstar Inc.\",\n\t[3]byte{0, 17, 39}:     \"TASI, Inc\",\n\t[3]byte{0, 17, 40}:     \"Streamit\",\n\t[3]byte{0, 17, 41}:     \"Paradise Datacom Ltd.\",\n\t[3]byte{0, 17, 42}:     \"Niko NV\",\n\t[3]byte{0, 17, 43}:     \"NetModule AG\",\n\t[3]byte{0, 17, 44}:     \"IZT GmbH\",\n\t[3]byte{0, 17, 45}:     \"iPulse Systems\",\n\t[3]byte{0, 17, 46}:     \"CEICOM\",\n\t[3]byte{0, 17, 47}:     \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 17, 48}:     \"Allied Telesis (Hong Kong) Ltd.\",\n\t[3]byte{0, 17, 49}:     \"UNATECH. CO.,LTD\",\n\t[3]byte{0, 17, 50}:     \"Synology Incorporated\",\n\t[3]byte{0, 17, 51}:     \"Siemens AG Austria\",\n\t[3]byte{0, 17, 52}:     \"MediaCell, Inc.\",\n\t[3]byte{0, 17, 53}:     \"Grandeye Ltd\",\n\t[3]byte{0, 17, 54}:     \"Goodrich Sensor Systems\",\n\t[3]byte{0, 17, 55}:     \"AICHI ELECTRIC CO., LTD.\",\n\t[3]byte{0, 17, 56}:     \"TAISHIN CO., LTD.\",\n\t[3]byte{0, 17, 57}:     \"STOEBER ANTRIEBSTECHNIK GmbH + Co. KG.\",\n\t[3]byte{0, 17, 58}:     \"SHINBORAM\",\n\t[3]byte{0, 17, 59}:     \"Micronet Communications Inc.\",\n\t[3]byte{0, 17, 60}:     \"Micronas GmbH\",\n\t[3]byte{0, 17, 61}:     \"KN SOLTEC CO.,LTD.\",\n\t[3]byte{0, 17, 62}:     \"JL Corporation\",\n\t[3]byte{0, 17, 63}:     \"Alcatel DI\",\n\t[3]byte{0, 17, 64}:     \"Nanometrics Inc.\",\n\t[3]byte{0, 17, 65}:     \"GoodMan Corporation\",\n\t[3]byte{0, 17, 66}:     \"e-SMARTCOM  INC.\",\n\t[3]byte{0, 17, 67}:     \"Dell Inc.\",\n\t[3]byte{0, 17, 68}:     \"Assurance Technology Corp\",\n\t[3]byte{0, 17, 69}:     \"ValuePoint Networks\",\n\t[3]byte{0, 17, 70}:     \"Telecard-Pribor Ltd\",\n\t[3]byte{0, 17, 71}:     \"Secom-Industry co.LTD.\",\n\t[3]byte{0, 17, 72}:     \"Prolon Control Systems\",\n\t[3]byte{0, 17, 73}:     \"Proliphix Inc.\",\n\t[3]byte{0, 17, 74}:     \"KAYABA INDUSTRY Co,.Ltd.\",\n\t[3]byte{0, 17, 75}:     \"Francotyp-Postalia GmbH\",\n\t[3]byte{0, 17, 76}:     \"caffeina applied research ltd.\",\n\t[3]byte{0, 17, 77}:     \"Atsumi Electric Co.,LTD.\",\n\t[3]byte{0, 17, 78}:     \"690885 Ontario Inc.\",\n\t[3]byte{0, 17, 79}:     \"US Digital Television, Inc\",\n\t[3]byte{0, 17, 80}:     \"Belkin Corporation\",\n\t[3]byte{0, 17, 81}:     \"Mykotronx\",\n\t[3]byte{0, 17, 82}:     \"Eidsvoll Electronics AS\",\n\t[3]byte{0, 17, 83}:     \"Trident Tek, Inc.\",\n\t[3]byte{0, 17, 84}:     \"Webpro Technologies Inc.\",\n\t[3]byte{0, 17, 85}:     \"Sevis Systems\",\n\t[3]byte{0, 17, 86}:     \"Pharos Systems NZ\",\n\t[3]byte{0, 17, 87}:     \"Oki Electric Industry Co., Ltd.\",\n\t[3]byte{0, 17, 88}:     \"Nortel Networks\",\n\t[3]byte{0, 17, 89}:     \"MATISSE NETWORKS INC\",\n\t[3]byte{0, 17, 90}:     \"Ivoclar Vivadent AG\",\n\t[3]byte{0, 17, 91}:     \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{0, 17, 92}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 17, 93}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 17, 94}:     \"ProMinent Dosiertechnik GmbH\",\n\t[3]byte{0, 17, 95}:     \"ITX Security Co., Ltd.\",\n\t[3]byte{0, 17, 96}:     \"ARTDIO Company Co., LTD\",\n\t[3]byte{0, 17, 97}:     \"NetStreams, LLC\",\n\t[3]byte{0, 17, 98}:     \"STAR MICRONICS CO.,LTD.\",\n\t[3]byte{0, 17, 99}:     \"SYSTEM SPA DEPT. ELECTRONICS\",\n\t[3]byte{0, 17, 100}:    \"ACARD Technology Corp.\",\n\t[3]byte{0, 17, 101}:    \"ZNYX Networks, Inc.\",\n\t[3]byte{0, 17, 102}:    \"Taelim Electronics Co., Ltd.\",\n\t[3]byte{0, 17, 103}:    \"Integrated System Solution Corp.\",\n\t[3]byte{0, 17, 104}:    \"HomeLogic LLC\",\n\t[3]byte{0, 17, 105}:    \"EMS Satcom\",\n\t[3]byte{0, 17, 106}:    \"Domo Ltd\",\n\t[3]byte{0, 17, 107}:    \"Digital Data Communications Asia Co.,Ltd\",\n\t[3]byte{0, 17, 108}:    \"Nanwang Multimedia Inc.,Ltd\",\n\t[3]byte{0, 17, 109}:    \"American Time and Signal\",\n\t[3]byte{0, 17, 110}:    \"Peplink International Ltd.\",\n\t[3]byte{0, 17, 111}:    \"Netforyou Co., LTD.\",\n\t[3]byte{0, 17, 112}:    \"GSC SRL\",\n\t[3]byte{0, 17, 113}:    \"DEXTER Communications, Inc.\",\n\t[3]byte{0, 17, 114}:    \"COTRON CORPORATION\",\n\t[3]byte{0, 17, 115}:    \"SMART Storage Systems\",\n\t[3]byte{0, 17, 116}:    \" Mojo Networks, Inc.\",\n\t[3]byte{0, 17, 117}:    \"Intel Corporation\",\n\t[3]byte{0, 17, 118}:    \"Intellambda Systems, Inc.\",\n\t[3]byte{0, 17, 119}:    \"Coaxial Networks, Inc.\",\n\t[3]byte{0, 17, 120}:    \"Chiron Technology Ltd\",\n\t[3]byte{0, 17, 121}:    \"Singular Technology Co. Ltd.\",\n\t[3]byte{0, 17, 122}:    \"Singim International Corp.\",\n\t[3]byte{0, 17, 123}:    \"Büchi  Labortechnik AG\",\n\t[3]byte{0, 17, 124}:    \"e-zy.net\",\n\t[3]byte{0, 17, 125}:    \"ZMD America, Inc.\",\n\t[3]byte{0, 17, 126}:    \"Midmark Corp\",\n\t[3]byte{0, 17, 127}:    \"Neotune Information Technology Corporation,.LTD\",\n\t[3]byte{0, 17, 128}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 17, 129}:    \"InterEnergy Co.Ltd,\",\n\t[3]byte{0, 17, 130}:    \"IMI Norgren Ltd\",\n\t[3]byte{0, 17, 131}:    \"Datalogic ADC, Inc.\",\n\t[3]byte{0, 17, 132}:    \"Humo Laboratory,Ltd.\",\n\t[3]byte{0, 17, 133}:    \"Hewlett Packard\",\n\t[3]byte{0, 17, 134}:    \"Prime Systems, Inc.\",\n\t[3]byte{0, 17, 135}:    \"Category Solutions, Inc\",\n\t[3]byte{0, 17, 136}:    \"Enterasys\",\n\t[3]byte{0, 17, 137}:    \"Aerotech Inc\",\n\t[3]byte{0, 17, 138}:    \"Viewtran Technology Limited\",\n\t[3]byte{0, 17, 139}:    \"Alcatel-Lucent Enterprise\",\n\t[3]byte{0, 17, 140}:    \"Missouri Department of Transportation\",\n\t[3]byte{0, 17, 141}:    \"Hanchang System Corp.\",\n\t[3]byte{0, 17, 142}:    \"Halytech Mace\",\n\t[3]byte{0, 17, 143}:    \"EUTECH INSTRUMENTS PTE. LTD.\",\n\t[3]byte{0, 17, 144}:    \"Digital Design Corporation\",\n\t[3]byte{0, 17, 145}:    \"CTS-Clima Temperatur Systeme GmbH\",\n\t[3]byte{0, 17, 146}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 17, 147}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 17, 148}:    \"Chi Mei Communication Systems, Inc.\",\n\t[3]byte{0, 17, 149}:    \"D-Link Corporation\",\n\t[3]byte{0, 17, 150}:    \"Actuality Systems, Inc.\",\n\t[3]byte{0, 17, 151}:    \"Monitoring Technologies Limited\",\n\t[3]byte{0, 17, 152}:    \"Prism Media Products Limited\",\n\t[3]byte{0, 17, 153}:    \"2wcom Systems GmbH\",\n\t[3]byte{0, 17, 154}:    \"Alkeria srl\",\n\t[3]byte{0, 17, 155}:    \"Telesynergy Research Inc.\",\n\t[3]byte{0, 17, 156}:    \"EP&T Energy\",\n\t[3]byte{0, 17, 157}:    \"Diginfo Technology Corporation\",\n\t[3]byte{0, 17, 158}:    \"Solectron Brazil\",\n\t[3]byte{0, 17, 159}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 17, 160}:    \"Vtech Engineering Canada Ltd\",\n\t[3]byte{0, 17, 161}:    \"VISION NETWARE CO.,LTD\",\n\t[3]byte{0, 17, 162}:    \"Manufacturing Technology Inc\",\n\t[3]byte{0, 17, 163}:    \"LanReady Technologies Inc.\",\n\t[3]byte{0, 17, 164}:    \"JStream Technologies Inc.\",\n\t[3]byte{0, 17, 165}:    \"Fortuna Electronic Corp.\",\n\t[3]byte{0, 17, 166}:    \"Sypixx Networks\",\n\t[3]byte{0, 17, 167}:    \"Infilco Degremont Inc.\",\n\t[3]byte{0, 17, 168}:    \"Quest Technologies\",\n\t[3]byte{0, 17, 169}:    \"MOIMSTONE Co., LTD\",\n\t[3]byte{0, 17, 170}:    \"Uniclass Technology, Co., LTD\",\n\t[3]byte{0, 17, 171}:    \"TRUSTABLE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{0, 17, 172}:    \"Simtec Electronics\",\n\t[3]byte{0, 17, 173}:    \"Shanghai Ruijie Technology\",\n\t[3]byte{0, 17, 174}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 17, 175}:    \"Medialink-i,Inc\",\n\t[3]byte{0, 17, 176}:    \"Fortelink Inc.\",\n\t[3]byte{0, 17, 177}:    \"BlueExpert Technology Corp.\",\n\t[3]byte{0, 17, 178}:    \"2001 Technology Inc.\",\n\t[3]byte{0, 17, 179}:    \"YOSHIMIYA CO.,LTD.\",\n\t[3]byte{0, 17, 180}:    \"Westermo Network Technologies AB\",\n\t[3]byte{0, 17, 181}:    \"Shenzhen Powercom Co.,Ltd\",\n\t[3]byte{0, 17, 182}:    \"Open Systems International\",\n\t[3]byte{0, 17, 183}:    \"Octalix B.V.\",\n\t[3]byte{0, 17, 184}:    \"Liebherr - Elektronik GmbH\",\n\t[3]byte{0, 17, 185}:    \"Inner Range Pty. Ltd.\",\n\t[3]byte{0, 17, 186}:    \"Elexol Pty Ltd\",\n\t[3]byte{0, 17, 187}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 17, 188}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 17, 189}:    \"Bombardier Transportation\",\n\t[3]byte{0, 17, 190}:    \"AGP Telecom Co. Ltd\",\n\t[3]byte{0, 17, 191}:    \"AESYS S.p.A.\",\n\t[3]byte{0, 17, 192}:    \"Aday Technology Inc\",\n\t[3]byte{0, 17, 193}:    \"4P MOBILE DATA PROCESSING\",\n\t[3]byte{0, 17, 194}:    \"United Fiber Optic Communication\",\n\t[3]byte{0, 17, 195}:    \"Transceiving System Technology Corporation\",\n\t[3]byte{0, 17, 196}:    \"Terminales de Telecomunicacion Terrestre, S.L.\",\n\t[3]byte{0, 17, 197}:    \"TEN Technology\",\n\t[3]byte{0, 17, 198}:    \"Seagate Technology\",\n\t[3]byte{0, 17, 199}:    \"Raymarine UK Ltd\",\n\t[3]byte{0, 17, 200}:    \"Powercom Co., Ltd.\",\n\t[3]byte{0, 17, 201}:    \"MTT Corporation\",\n\t[3]byte{0, 17, 202}:    \"Long Range Systems, Inc.\",\n\t[3]byte{0, 17, 203}:    \"Jacobsons AB\",\n\t[3]byte{0, 17, 204}:    \"Guangzhou Jinpeng Group Co.,Ltd.\",\n\t[3]byte{0, 17, 205}:    \"Axsun Technologies\",\n\t[3]byte{0, 17, 206}:    \"Ubisense Limited\",\n\t[3]byte{0, 17, 207}:    \"Thrane & Thrane A/S\",\n\t[3]byte{0, 17, 208}:    \"Tandberg Data ASA\",\n\t[3]byte{0, 17, 209}:    \"Soft Imaging System GmbH\",\n\t[3]byte{0, 17, 210}:    \"Perception Digital Ltd\",\n\t[3]byte{0, 17, 211}:    \"NextGenTel Holding ASA\",\n\t[3]byte{0, 17, 212}:    \"NetEnrich, Inc\",\n\t[3]byte{0, 17, 213}:    \"Hangzhou Sunyard System Engineering Co.,Ltd.\",\n\t[3]byte{0, 17, 214}:    \"HandEra, Inc.\",\n\t[3]byte{0, 17, 215}:    \"eWerks Inc\",\n\t[3]byte{0, 17, 216}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 17, 217}:    \"TiVo\",\n\t[3]byte{0, 17, 218}:    \"Vivaas Technology Inc.\",\n\t[3]byte{0, 17, 219}:    \"Land-Cellular Corporation\",\n\t[3]byte{0, 17, 220}:    \"Glunz & Jensen\",\n\t[3]byte{0, 17, 221}:    \"FROMUS TEC. Co., Ltd.\",\n\t[3]byte{0, 17, 222}:    \"EURILOGIC\",\n\t[3]byte{0, 17, 223}:    \"Current Energy\",\n\t[3]byte{0, 17, 224}:    \"U-MEDIA Communications, Inc.\",\n\t[3]byte{0, 17, 225}:    \"Arcelik A.S\",\n\t[3]byte{0, 17, 226}:    \"Hua Jung Components Co., Ltd.\",\n\t[3]byte{0, 17, 227}:    \"Thomson, Inc.\",\n\t[3]byte{0, 17, 228}:    \"Danelec Electronics A/S\",\n\t[3]byte{0, 17, 229}:    \"KCodes Corporation\",\n\t[3]byte{0, 17, 230}:    \"Scientific Atlanta\",\n\t[3]byte{0, 17, 231}:    \"WORLDSAT - Texas de France\",\n\t[3]byte{0, 17, 232}:    \"Tixi.Com\",\n\t[3]byte{0, 17, 233}:    \"STARNEX CO., LTD.\",\n\t[3]byte{0, 17, 234}:    \"IWICS Inc.\",\n\t[3]byte{0, 17, 235}:    \"Innovative Integration\",\n\t[3]byte{0, 17, 236}:    \"AVIX INC.\",\n\t[3]byte{0, 17, 237}:    \"802 Global\",\n\t[3]byte{0, 17, 238}:    \"Estari, Inc.\",\n\t[3]byte{0, 17, 239}:    \"Conitec Datensysteme GmbH\",\n\t[3]byte{0, 17, 240}:    \"Wideful Limited\",\n\t[3]byte{0, 17, 241}:    \"QinetiQ Ltd\",\n\t[3]byte{0, 17, 242}:    \"Institute of Network Technologies\",\n\t[3]byte{0, 17, 243}:    \"NeoMedia Europe AG\",\n\t[3]byte{0, 17, 244}:    \"woori-net\",\n\t[3]byte{0, 17, 245}:    \"ASKEY COMPUTER CORP\",\n\t[3]byte{0, 17, 246}:    \"Asia Pacific Microsystems , Inc.\",\n\t[3]byte{0, 17, 247}:    \"Shenzhen Forward Industry Co., Ltd\",\n\t[3]byte{0, 17, 248}:    \"AIRAYA Corp\",\n\t[3]byte{0, 17, 249}:    \"Nortel Networks\",\n\t[3]byte{0, 17, 250}:    \"Rane Corporation\",\n\t[3]byte{0, 17, 251}:    \"Heidelberg Engineering GmbH\",\n\t[3]byte{0, 17, 252}:    \"HARTING Electronics GmbH\",\n\t[3]byte{0, 17, 253}:    \"KORG INC.\",\n\t[3]byte{0, 17, 254}:    \"Keiyo System Research, Inc.\",\n\t[3]byte{0, 17, 255}:    \"Digitro Tecnologia Ltda\",\n\t[3]byte{0, 18, 0}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 18, 1}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 18, 2}:      \"Decrane Aerospace - Audio International Inc.\",\n\t[3]byte{0, 18, 3}:      \"ActivNetworks\",\n\t[3]byte{0, 18, 4}:      \"u10 Networks, Inc.\",\n\t[3]byte{0, 18, 5}:      \"Terrasat Communications, Inc.\",\n\t[3]byte{0, 18, 6}:      \"iQuest (NZ) Ltd\",\n\t[3]byte{0, 18, 7}:      \"Head Strong International Limited\",\n\t[3]byte{0, 18, 8}:      \"Gantner Instruments GmbH\",\n\t[3]byte{0, 18, 9}:      \"Fastrax Ltd\",\n\t[3]byte{0, 18, 10}:     \"Emerson Climate Technologies GmbH\",\n\t[3]byte{0, 18, 11}:     \"Chinasys Technologies Limited\",\n\t[3]byte{0, 18, 12}:     \"CE-Infosys Pte Ltd\",\n\t[3]byte{0, 18, 13}:     \"Advanced Telecommunication Technologies, Inc.\",\n\t[3]byte{0, 18, 14}:     \"AboCom\",\n\t[3]byte{0, 18, 15}:     \"IEEE 802.3\",\n\t[3]byte{0, 18, 16}:     \"WideRay Corp\",\n\t[3]byte{0, 18, 17}:     \"Protechna Herbst GmbH & Co. KG\",\n\t[3]byte{0, 18, 18}:     \"PLUS  Corporation\",\n\t[3]byte{0, 18, 19}:     \"Metrohm AG\",\n\t[3]byte{0, 18, 20}:     \"Koenig & Bauer AG\",\n\t[3]byte{0, 18, 21}:     \"iStor Networks, Inc.\",\n\t[3]byte{0, 18, 22}:     \"ICP Internet Communication Payment AG\",\n\t[3]byte{0, 18, 23}:     \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 18, 24}:     \"ARUZE Corporation\",\n\t[3]byte{0, 18, 25}:     \"General Datacomm LLC\",\n\t[3]byte{0, 18, 26}:     \"Techno Soft Systemnics Inc.\",\n\t[3]byte{0, 18, 27}:     \"Sound Devices, LLC\",\n\t[3]byte{0, 18, 28}:     \"PARROT SA\",\n\t[3]byte{0, 18, 29}:     \"Netfabric Corporation\",\n\t[3]byte{0, 18, 30}:     \"Juniper Networks\",\n\t[3]byte{0, 18, 31}:     \"Harding Instruments\",\n\t[3]byte{0, 18, 32}:     \"Cadco Systems\",\n\t[3]byte{0, 18, 33}:     \"B.Braun Melsungen AG\",\n\t[3]byte{0, 18, 34}:     \"Skardin (UK) Ltd\",\n\t[3]byte{0, 18, 35}:     \"Pixim\",\n\t[3]byte{0, 18, 36}:     \"NexQL Corporation\",\n\t[3]byte{0, 18, 37}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 18, 38}:     \"Japan Direx Corporation\",\n\t[3]byte{0, 18, 39}:     \"Franklin Electric Co., Inc.\",\n\t[3]byte{0, 18, 40}:     \"Data Ltd.\",\n\t[3]byte{0, 18, 41}:     \"BroadEasy Technologies Co.,Ltd\",\n\t[3]byte{0, 18, 42}:     \"VTech Telecommunications Ltd.\",\n\t[3]byte{0, 18, 43}:     \"Virbiage Pty Ltd\",\n\t[3]byte{0, 18, 44}:     \"Soenen Controls N.V.\",\n\t[3]byte{0, 18, 45}:     \"SiNett Corporation\",\n\t[3]byte{0, 18, 46}:     \"Signal Technology - AISD\",\n\t[3]byte{0, 18, 47}:     \"Sanei Electric Inc.\",\n\t[3]byte{0, 18, 48}:     \"Picaso Infocommunication CO., LTD.\",\n\t[3]byte{0, 18, 49}:     \"Motion Control Systems, Inc.\",\n\t[3]byte{0, 18, 50}:     \"LeWiz Communications Inc.\",\n\t[3]byte{0, 18, 51}:     \"JRC TOKKI Co.,Ltd.\",\n\t[3]byte{0, 18, 52}:     \"Camille Bauer\",\n\t[3]byte{0, 18, 53}:     \"Andrew Corporation\",\n\t[3]byte{0, 18, 54}:     \"ConSentry Networks\",\n\t[3]byte{0, 18, 55}:     \"Texas Instruments\",\n\t[3]byte{0, 18, 56}:     \"SetaBox Technology Co., Ltd.\",\n\t[3]byte{0, 18, 57}:     \"S Net Systems Inc.\",\n\t[3]byte{0, 18, 58}:     \"Posystech Inc., Co.\",\n\t[3]byte{0, 18, 59}:     \"KeRo Systems ApS\",\n\t[3]byte{0, 18, 60}:     \"Second Rule LLC\",\n\t[3]byte{0, 18, 61}:     \"GES Co, Ltd\",\n\t[3]byte{0, 18, 62}:     \"ERUNE technology Co., Ltd.\",\n\t[3]byte{0, 18, 63}:     \"Dell Inc.\",\n\t[3]byte{0, 18, 64}:     \"AMOI ELECTRONICS CO.,LTD\",\n\t[3]byte{0, 18, 65}:     \"a2i marketing center\",\n\t[3]byte{0, 18, 66}:     \"Millennial Net\",\n\t[3]byte{0, 18, 67}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 18, 68}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 18, 69}:     \"Zellweger Analytics, Inc.\",\n\t[3]byte{0, 18, 70}:     \"T.O.M TECHNOLOGY INC..\",\n\t[3]byte{0, 18, 71}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 18, 72}:     \"Dell EMC\",\n\t[3]byte{0, 18, 73}:     \"Delta Elettronica S.p.A.\",\n\t[3]byte{0, 18, 74}:     \"Dedicated Devices, Inc.\",\n\t[3]byte{0, 18, 75}:     \"Texas Instruments\",\n\t[3]byte{0, 18, 76}:     \"BBWM Corporation\",\n\t[3]byte{0, 18, 77}:     \"Inducon BV\",\n\t[3]byte{0, 18, 78}:     \"XAC AUTOMATION CORP.\",\n\t[3]byte{0, 18, 79}:     \"nVent\",\n\t[3]byte{0, 18, 80}:     \"Tokyo Aircaft Instrument Co., Ltd.\",\n\t[3]byte{0, 18, 81}:     \"SILINK\",\n\t[3]byte{0, 18, 82}:     \"Citronix, LLC\",\n\t[3]byte{0, 18, 83}:     \"AudioDev AB\",\n\t[3]byte{0, 18, 84}:     \"Spectra Technologies Holdings Company Ltd\",\n\t[3]byte{0, 18, 85}:     \"NetEffect Incorporated\",\n\t[3]byte{0, 18, 86}:     \"LG INFORMATION & COMM.\",\n\t[3]byte{0, 18, 87}:     \"LeapComm Communication Technologies Inc.\",\n\t[3]byte{0, 18, 88}:     \"TechVoIP Sp z o.o.\",\n\t[3]byte{0, 18, 89}:     \"THERMO ELECTRON KARLSRUHE\",\n\t[3]byte{0, 18, 90}:     \"Microsoft Corporation\",\n\t[3]byte{0, 18, 91}:     \"KAIMEI ELECTRONI\",\n\t[3]byte{0, 18, 92}:     \"Green Hills Software, Inc.\",\n\t[3]byte{0, 18, 93}:     \"CyberNet Inc.\",\n\t[3]byte{0, 18, 94}:     \"CAEN\",\n\t[3]byte{0, 18, 95}:     \"AWIND Inc.\",\n\t[3]byte{0, 18, 96}:     \"Stanton Magnetics,inc.\",\n\t[3]byte{0, 18, 97}:     \"Adaptix, Inc\",\n\t[3]byte{0, 18, 98}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 18, 99}:     \"Data Voice Technologies GmbH\",\n\t[3]byte{0, 18, 100}:    \"daum electronic gmbh\",\n\t[3]byte{0, 18, 101}:    \"Enerdyne Technologies, Inc.\",\n\t[3]byte{0, 18, 102}:    \"Swisscom Hospitality Services SA\",\n\t[3]byte{0, 18, 103}:    \"Panasonic Corporation\",\n\t[3]byte{0, 18, 104}:    \"IPS d.o.o.\",\n\t[3]byte{0, 18, 105}:    \"Value Electronics\",\n\t[3]byte{0, 18, 106}:    \"OPTOELECTRONICS Co., Ltd.\",\n\t[3]byte{0, 18, 107}:    \"Ascalade Communications Limited\",\n\t[3]byte{0, 18, 108}:    \"Visonic Technologies 1993 Ltd.\",\n\t[3]byte{0, 18, 109}:    \"University of California, Berkeley\",\n\t[3]byte{0, 18, 110}:    \"Seidel Elektronik GmbH Nfg.KG\",\n\t[3]byte{0, 18, 111}:    \"Rayson Technology Co., Ltd.\",\n\t[3]byte{0, 18, 112}:    \"NGES Denro Systems\",\n\t[3]byte{0, 18, 113}:    \"Measurement Computing Corp\",\n\t[3]byte{0, 18, 114}:    \"Redux Communications Ltd.\",\n\t[3]byte{0, 18, 115}:    \"Stoke Inc\",\n\t[3]byte{0, 18, 116}:    \"NIT lab\",\n\t[3]byte{0, 18, 117}:    \"Sentilla Corporation\",\n\t[3]byte{0, 18, 118}:    \"CG Power Systems Ireland Limited\",\n\t[3]byte{0, 18, 119}:    \"Korenix Technologies Co., Ltd.\",\n\t[3]byte{0, 18, 120}:    \"International Bar Code\",\n\t[3]byte{0, 18, 121}:    \"Hewlett Packard\",\n\t[3]byte{0, 18, 122}:    \"Sanyu Industry Co.,Ltd.\",\n\t[3]byte{0, 18, 123}:    \"VIA Networking Technologies, Inc.\",\n\t[3]byte{0, 18, 124}:    \"SWEGON AB\",\n\t[3]byte{0, 18, 125}:    \"MobileAria\",\n\t[3]byte{0, 18, 126}:    \"Digital Lifestyles Group, Inc.\",\n\t[3]byte{0, 18, 127}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 18, 128}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 18, 129}:    \"March Networks S.p.A.\",\n\t[3]byte{0, 18, 130}:    \"Qovia\",\n\t[3]byte{0, 18, 131}:    \"Nortel Networks\",\n\t[3]byte{0, 18, 132}:    \"Lab33 Srl\",\n\t[3]byte{0, 18, 133}:    \"Gizmondo Europe Ltd\",\n\t[3]byte{0, 18, 134}:    \"ENDEVCO CORP\",\n\t[3]byte{0, 18, 135}:    \"Digital Everywhere Unterhaltungselektronik GmbH\",\n\t[3]byte{0, 18, 136}:    \"2Wire Inc\",\n\t[3]byte{0, 18, 137}:    \"Advance Sterilization Products\",\n\t[3]byte{0, 18, 138}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 18, 139}:    \"Sensory Networks Inc\",\n\t[3]byte{0, 18, 140}:    \"Woodward Governor\",\n\t[3]byte{0, 18, 141}:    \"STB Datenservice GmbH\",\n\t[3]byte{0, 18, 142}:    \"Q-Free ASA\",\n\t[3]byte{0, 18, 143}:    \"Montilio\",\n\t[3]byte{0, 18, 144}:    \"KYOWA Electric & Machinery Corp.\",\n\t[3]byte{0, 18, 145}:    \"KWS Computersysteme GmbH\",\n\t[3]byte{0, 18, 146}:    \"Griffin Technology\",\n\t[3]byte{0, 18, 147}:    \"GE Energy\",\n\t[3]byte{0, 18, 148}:    \"SUMITOMO ELECTRIC DEVICE INNOVATIONS, INC\",\n\t[3]byte{0, 18, 149}:    \"Aiware Inc.\",\n\t[3]byte{0, 18, 150}:    \"Addlogix\",\n\t[3]byte{0, 18, 151}:    \"O2Micro, Inc.\",\n\t[3]byte{0, 18, 152}:    \"MICO ELECTRIC(SHENZHEN) LIMITED\",\n\t[3]byte{0, 18, 153}:    \"Ktech Telecommunications Inc\",\n\t[3]byte{0, 18, 154}:    \"IRT Electronics Pty Ltd\",\n\t[3]byte{0, 18, 155}:    \"E2S Electronic Engineering Solutions, S.L.\",\n\t[3]byte{0, 18, 156}:    \"Yulinet\",\n\t[3]byte{0, 18, 157}:    \"First International Computer do Brasil\",\n\t[3]byte{0, 18, 158}:    \"Surf Communications Inc.\",\n\t[3]byte{0, 18, 159}:    \"RAE Systems\",\n\t[3]byte{0, 18, 160}:    \"NeoMeridian Sdn Bhd\",\n\t[3]byte{0, 18, 161}:    \"BluePacket Communications Co., Ltd.\",\n\t[3]byte{0, 18, 162}:    \"VITA\",\n\t[3]byte{0, 18, 163}:    \"Trust International B.V.\",\n\t[3]byte{0, 18, 164}:    \"ThingMagic, LLC\",\n\t[3]byte{0, 18, 165}:    \"Dolphin Interconnect Solutions AS\",\n\t[3]byte{0, 18, 166}:    \"Dolby Australia\",\n\t[3]byte{0, 18, 167}:    \"ISR TECHNOLOGIES Inc\",\n\t[3]byte{0, 18, 168}:    \"intec GmbH\",\n\t[3]byte{0, 18, 169}:    \"3Com Ltd\",\n\t[3]byte{0, 18, 170}:    \"IEE, Inc.\",\n\t[3]byte{0, 18, 171}:    \"WiLife, Inc.\",\n\t[3]byte{0, 18, 172}:    \"ONTIMETEK INC.\",\n\t[3]byte{0, 18, 173}:    \"IDS GmbH\",\n\t[3]byte{0, 18, 174}:    \"HLS HARD-LINE Solutions Inc.\",\n\t[3]byte{0, 18, 175}:    \"ELPRO Technologies\",\n\t[3]byte{0, 18, 176}:    \"Efore Oyj   (Plc)\",\n\t[3]byte{0, 18, 177}:    \"Dai Nippon Printing Co., Ltd\",\n\t[3]byte{0, 18, 178}:    \"AVOLITES LTD.\",\n\t[3]byte{0, 18, 179}:    \"Advance Wireless Technology Corp.\",\n\t[3]byte{0, 18, 180}:    \"Work Microwave GmbH\",\n\t[3]byte{0, 18, 181}:    \"Vialta, Inc.\",\n\t[3]byte{0, 18, 182}:    \"Santa Barbara Infrared, Inc.\",\n\t[3]byte{0, 18, 183}:    \"PTW Freiburg\",\n\t[3]byte{0, 18, 184}:    \"G2 Microsystems\",\n\t[3]byte{0, 18, 185}:    \"Fusion Digital Technology\",\n\t[3]byte{0, 18, 186}:    \"FSI Systems, Inc.\",\n\t[3]byte{0, 18, 187}:    \"Telecommunications Industry Association TR-41 Committee\",\n\t[3]byte{0, 18, 188}:    \"Echolab LLC\",\n\t[3]byte{0, 18, 189}:    \"Avantec Manufacturing Limited\",\n\t[3]byte{0, 18, 190}:    \"Astek Corporation\",\n\t[3]byte{0, 18, 191}:    \"Arcadyan Technology Corporation\",\n\t[3]byte{0, 18, 192}:    \"HotLava Systems, Inc.\",\n\t[3]byte{0, 18, 193}:    \"Check Point Software Technologies\",\n\t[3]byte{0, 18, 194}:    \"Apex Electronics Factory\",\n\t[3]byte{0, 18, 195}:    \"WIT S.A.\",\n\t[3]byte{0, 18, 196}:    \"Viseon, Inc.\",\n\t[3]byte{0, 18, 197}:    \"V-Show  Technology (China) Co.,Ltd\",\n\t[3]byte{0, 18, 198}:    \"TGC America, Inc\",\n\t[3]byte{0, 18, 199}:    \"SECURAY Technologies Ltd.Co.\",\n\t[3]byte{0, 18, 200}:    \"Perfect tech\",\n\t[3]byte{0, 18, 201}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 18, 202}:    \"Mechatronic Brick Aps\",\n\t[3]byte{0, 18, 203}:    \"CSS Inc.\",\n\t[3]byte{0, 18, 204}:    \"Bitatek CO., LTD\",\n\t[3]byte{0, 18, 205}:    \"ASEM SpA\",\n\t[3]byte{0, 18, 206}:    \"Advanced Cybernetics Group\",\n\t[3]byte{0, 18, 207}:    \"Accton Technology Corp\",\n\t[3]byte{0, 18, 208}:    \"Gossen-Metrawatt-GmbH\",\n\t[3]byte{0, 18, 209}:    \"Texas Instruments\",\n\t[3]byte{0, 18, 210}:    \"Texas Instruments\",\n\t[3]byte{0, 18, 211}:    \"Zetta Systems, Inc.\",\n\t[3]byte{0, 18, 212}:    \"Princeton Technology, Ltd\",\n\t[3]byte{0, 18, 213}:    \"Motion Reality Inc.\",\n\t[3]byte{0, 18, 214}:    \"Jiangsu Yitong High-Tech Co.,Ltd\",\n\t[3]byte{0, 18, 215}:    \"Invento Networks, Inc.\",\n\t[3]byte{0, 18, 216}:    \"International Games System Co., Ltd.\",\n\t[3]byte{0, 18, 217}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 18, 218}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 18, 219}:    \"ZIEHL industrie-elektronik GmbH + Co KG\",\n\t[3]byte{0, 18, 220}:    \"SunCorp Industrial Limited\",\n\t[3]byte{0, 18, 221}:    \"Shengqu Information Technology (Shanghai) Co., Ltd.\",\n\t[3]byte{0, 18, 222}:    \"Radio Components Sweden AB\",\n\t[3]byte{0, 18, 223}:    \"Novomatic AG\",\n\t[3]byte{0, 18, 224}:    \"Codan Limited\",\n\t[3]byte{0, 18, 225}:    \"Alliant Networks, Inc\",\n\t[3]byte{0, 18, 226}:    \"ALAXALA Networks Corporation\",\n\t[3]byte{0, 18, 227}:    \"Agat Soft LLC\",\n\t[3]byte{0, 18, 228}:    \"ZIEHL industrie-electronik GmbH + Co KG\",\n\t[3]byte{0, 18, 229}:    \"Time America, Inc.\",\n\t[3]byte{0, 18, 230}:    \"SPECTEC COMPUTER CO., LTD.\",\n\t[3]byte{0, 18, 231}:    \"Projectek Networking Electronics Corp.\",\n\t[3]byte{0, 18, 232}:    \"Fraunhofer IMS\",\n\t[3]byte{0, 18, 233}:    \"Abbey Systems Ltd\",\n\t[3]byte{0, 18, 234}:    \"Trane\",\n\t[3]byte{0, 18, 235}:    \"PDH Solutions, LLC\",\n\t[3]byte{0, 18, 236}:    \"Movacolor b.v.\",\n\t[3]byte{0, 18, 237}:    \"AVG Advanced Technologies\",\n\t[3]byte{0, 18, 238}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 18, 239}:    \"OneAccess SA\",\n\t[3]byte{0, 18, 240}:    \"Intel Corporate\",\n\t[3]byte{0, 18, 241}:    \"IFOTEC\",\n\t[3]byte{0, 18, 242}:    \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 18, 243}:    \"connectBlue AB\",\n\t[3]byte{0, 18, 244}:    \"Belco International Co.,Ltd.\",\n\t[3]byte{0, 18, 245}:    \"Imarda New Zealand Limited\",\n\t[3]byte{0, 18, 246}:    \"MDK CO.,LTD.\",\n\t[3]byte{0, 18, 247}:    \"Xiamen Xinglian Electronics Co., Ltd.\",\n\t[3]byte{0, 18, 248}:    \"WNI Resources, LLC\",\n\t[3]byte{0, 18, 249}:    \"URYU SEISAKU, LTD.\",\n\t[3]byte{0, 18, 250}:    \"THX LTD\",\n\t[3]byte{0, 18, 251}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 18, 252}:    \"PLANET System Co.,LTD\",\n\t[3]byte{0, 18, 253}:    \"OPTIMUS IC S.A.\",\n\t[3]byte{0, 18, 254}:    \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{0, 18, 255}:    \"Lely Industries N.V.\",\n\t[3]byte{0, 19, 0}:      \"IT-FACTORY, INC.\",\n\t[3]byte{0, 19, 1}:      \"IronGate S.L.\",\n\t[3]byte{0, 19, 2}:      \"Intel Corporate\",\n\t[3]byte{0, 19, 3}:      \"GateConnect\",\n\t[3]byte{0, 19, 4}:      \"Flaircomm Technologies Co. LTD\",\n\t[3]byte{0, 19, 5}:      \"Epicom, Inc.\",\n\t[3]byte{0, 19, 6}:      \"Always On Wireless\",\n\t[3]byte{0, 19, 7}:      \"Paravirtual Corporation\",\n\t[3]byte{0, 19, 8}:      \"Nuvera Fuel Cells\",\n\t[3]byte{0, 19, 9}:      \"Ocean Broadband Networks\",\n\t[3]byte{0, 19, 10}:     \"Nortel Networks\",\n\t[3]byte{0, 19, 11}:     \"Mextal B.V.\",\n\t[3]byte{0, 19, 12}:     \"HF System Corporation\",\n\t[3]byte{0, 19, 13}:     \"GALILEO AVIONICA\",\n\t[3]byte{0, 19, 14}:     \"Focusrite Audio Engineering Limited\",\n\t[3]byte{0, 19, 15}:     \"EGEMEN Bilgisayar Muh San ve Tic LTD STI\",\n\t[3]byte{0, 19, 16}:     \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 19, 17}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 19, 18}:     \"Amedia Networks Inc.\",\n\t[3]byte{0, 19, 19}:     \"GuangZhou Post & Telecom Equipment ltd\",\n\t[3]byte{0, 19, 20}:     \"Asiamajor Inc.\",\n\t[3]byte{0, 19, 21}:     \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{0, 19, 22}:     \"L-S-B Broadcast Technologies GmbH\",\n\t[3]byte{0, 19, 23}:     \"GN Netcom A/S\",\n\t[3]byte{0, 19, 24}:     \"DGSTATION Co., Ltd.\",\n\t[3]byte{0, 19, 25}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 19, 26}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 19, 27}:     \"BeCell Innovations Corp.\",\n\t[3]byte{0, 19, 28}:     \"LiteTouch, Inc.\",\n\t[3]byte{0, 19, 29}:     \"Scanvaegt International A/S\",\n\t[3]byte{0, 19, 30}:     \"peiker acustic GmbH\",\n\t[3]byte{0, 19, 31}:     \"NxtPhase T&D, Corp.\",\n\t[3]byte{0, 19, 32}:     \"Intel Corporate\",\n\t[3]byte{0, 19, 33}:     \"Hewlett Packard\",\n\t[3]byte{0, 19, 34}:     \"DAQ Electronics, Inc.\",\n\t[3]byte{0, 19, 35}:     \"Cap Co., Ltd.\",\n\t[3]byte{0, 19, 36}:     \"Schneider Electric Ultra Terminal\",\n\t[3]byte{0, 19, 37}:     \"Cortina Systems Inc\",\n\t[3]byte{0, 19, 38}:     \"ECM Systems Ltd\",\n\t[3]byte{0, 19, 39}:     \"Data Acquisitions limited\",\n\t[3]byte{0, 19, 40}:     \"Westech Korea Inc.,\",\n\t[3]byte{0, 19, 41}:     \"VSST Co., LTD\",\n\t[3]byte{0, 19, 42}:     \"Sitronics Telecom Solutions\",\n\t[3]byte{0, 19, 43}:     \"Phoenix Digital\",\n\t[3]byte{0, 19, 44}:     \"MAZ Brandenburg GmbH\",\n\t[3]byte{0, 19, 45}:     \"iWise Communications\",\n\t[3]byte{0, 19, 46}:     \"ITian Coporation\",\n\t[3]byte{0, 19, 47}:     \"Interactek\",\n\t[3]byte{0, 19, 48}:     \"EURO PROTECTION SURVEILLANCE\",\n\t[3]byte{0, 19, 49}:     \"CellPoint Connect\",\n\t[3]byte{0, 19, 50}:     \"Beijing Topsec Network Security Technology Co., Ltd.\",\n\t[3]byte{0, 19, 51}:     \"BaudTec Corporation\",\n\t[3]byte{0, 19, 52}:     \"Arkados, Inc.\",\n\t[3]byte{0, 19, 53}:     \"VS Industry Berhad\",\n\t[3]byte{0, 19, 54}:     \"Tianjin 712 Communication Broadcasting co., ltd.\",\n\t[3]byte{0, 19, 55}:     \"Orient Power Home Network Ltd.\",\n\t[3]byte{0, 19, 56}:     \"FRESENIUS-VIAL\",\n\t[3]byte{0, 19, 57}:     \"CCV Deutschland GmbH\",\n\t[3]byte{0, 19, 58}:     \"VadaTech Inc.\",\n\t[3]byte{0, 19, 59}:     \"Speed Dragon Multimedia Limited\",\n\t[3]byte{0, 19, 60}:     \"QUINTRON SYSTEMS INC.\",\n\t[3]byte{0, 19, 61}:     \"Micro Memory Curtiss Wright Co\",\n\t[3]byte{0, 19, 62}:     \"MetaSwitch\",\n\t[3]byte{0, 19, 63}:     \"Eppendorf Instrumente GmbH\",\n\t[3]byte{0, 19, 64}:     \"AD.EL s.r.l.\",\n\t[3]byte{0, 19, 65}:     \"Shandong New Beiyang Information Technology Co.,Ltd\",\n\t[3]byte{0, 19, 66}:     \"Vision Research, Inc.\",\n\t[3]byte{0, 19, 67}:     \"Matsushita Electronic Components (Europe) GmbH\",\n\t[3]byte{0, 19, 68}:     \"Fargo Electronics Inc.\",\n\t[3]byte{0, 19, 69}:     \"Eaton Corporation\",\n\t[3]byte{0, 19, 70}:     \"D-Link Corporation\",\n\t[3]byte{0, 19, 71}:     \"Red Lion Controls, LP\",\n\t[3]byte{0, 19, 72}:     \"Artila Electronics Co., Ltd.\",\n\t[3]byte{0, 19, 73}:     \"Zyxel Communications Corporation\",\n\t[3]byte{0, 19, 74}:     \"Engim, Inc.\",\n\t[3]byte{0, 19, 75}:     \"ToGoldenNet Technology Inc.\",\n\t[3]byte{0, 19, 76}:     \"YDT Technology International\",\n\t[3]byte{0, 19, 77}:     \"Inepro BV\",\n\t[3]byte{0, 19, 78}:     \"Valox Systems, Inc.\",\n\t[3]byte{0, 19, 79}:     \"Rapidus Wireless Networks Inc.\",\n\t[3]byte{0, 19, 80}:     \"Silver Spring Networks, Inc\",\n\t[3]byte{0, 19, 81}:     \"Niles Audio Corporation\",\n\t[3]byte{0, 19, 82}:     \"Naztec, Inc.\",\n\t[3]byte{0, 19, 83}:     \"HYDAC Filtertechnik GMBH\",\n\t[3]byte{0, 19, 84}:     \"Zcomax Technologies, Inc.\",\n\t[3]byte{0, 19, 85}:     \"TOMEN Cyber-business Solutions, Inc.\",\n\t[3]byte{0, 19, 86}:     \"FLIR Radiation Inc\",\n\t[3]byte{0, 19, 87}:     \"Soyal Technology Co., Ltd.\",\n\t[3]byte{0, 19, 88}:     \"Realm Systems, Inc.\",\n\t[3]byte{0, 19, 89}:     \"ProTelevision Technologies A/S\",\n\t[3]byte{0, 19, 90}:     \"Project T&E Limited\",\n\t[3]byte{0, 19, 91}:     \"PanelLink Cinema, LLC\",\n\t[3]byte{0, 19, 92}:     \"OnSite Systems, Inc.\",\n\t[3]byte{0, 19, 93}:     \"NTTPC Communications, Inc.\",\n\t[3]byte{0, 19, 94}:     \"EAB/RWI/K\",\n\t[3]byte{0, 19, 95}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 19, 96}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 19, 97}:     \"Biospace Co., Ltd.\",\n\t[3]byte{0, 19, 98}:     \"ShinHeung Precision Co., Ltd.\",\n\t[3]byte{0, 19, 99}:     \"Verascape, Inc.\",\n\t[3]byte{0, 19, 100}:    \"Paradigm Technology Inc..\",\n\t[3]byte{0, 19, 101}:    \"Nortel Networks\",\n\t[3]byte{0, 19, 102}:    \"Neturity Technologies Inc.\",\n\t[3]byte{0, 19, 103}:    \"Narayon. Co., Ltd.\",\n\t[3]byte{0, 19, 104}:    \"Saab Danmark A/S\",\n\t[3]byte{0, 19, 105}:    \"Honda Electron Co., LED.\",\n\t[3]byte{0, 19, 106}:    \"Hach Lange Sarl\",\n\t[3]byte{0, 19, 107}:    \"E-TEC\",\n\t[3]byte{0, 19, 108}:    \"TomTom\",\n\t[3]byte{0, 19, 109}:    \"Tentaculus AB\",\n\t[3]byte{0, 19, 110}:    \"Techmetro Corp.\",\n\t[3]byte{0, 19, 111}:    \"PacketMotion, Inc.\",\n\t[3]byte{0, 19, 112}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 19, 113}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 19, 114}:    \"Dell Inc.\",\n\t[3]byte{0, 19, 115}:    \"BLwave Electronics Co., Ltd\",\n\t[3]byte{0, 19, 116}:    \"Atheros Communications, Inc.\",\n\t[3]byte{0, 19, 117}:    \"American Security Products Co.\",\n\t[3]byte{0, 19, 118}:    \"Tabor Electronics Ltd.\",\n\t[3]byte{0, 19, 119}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 19, 120}:    \"Qsan Technology, Inc.\",\n\t[3]byte{0, 19, 121}:    \"PONDER INFORMATION INDUSTRIES LTD.\",\n\t[3]byte{0, 19, 122}:    \"Netvox Technology Co., Ltd.\",\n\t[3]byte{0, 19, 123}:    \"Movon Corporation\",\n\t[3]byte{0, 19, 124}:    \"Kaicom co., Ltd.\",\n\t[3]byte{0, 19, 125}:    \"Dynalab, Inc.\",\n\t[3]byte{0, 19, 126}:    \"CorEdge Networks, Inc.\",\n\t[3]byte{0, 19, 127}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 19, 128}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 19, 129}:    \"CHIPS & Systems, Inc.\",\n\t[3]byte{0, 19, 130}:    \"Cetacea Networks Corporation\",\n\t[3]byte{0, 19, 131}:    \"Application Technologies and Engineering Research Laboratory\",\n\t[3]byte{0, 19, 132}:    \"Advanced Motion Controls\",\n\t[3]byte{0, 19, 133}:    \"Add-On Technology Co., LTD.\",\n\t[3]byte{0, 19, 134}:    \"ABB Inc/Totalflow\",\n\t[3]byte{0, 19, 135}:    \"27M Technologies AB\",\n\t[3]byte{0, 19, 136}:    \"WiMedia Alliance\",\n\t[3]byte{0, 19, 137}:    \"Redes de Telefonía Móvil S.A.\",\n\t[3]byte{0, 19, 138}:    \"Qingdao GoerTek Technology Co., Ltd.\",\n\t[3]byte{0, 19, 139}:    \"Phantom Technologies LLC\",\n\t[3]byte{0, 19, 140}:    \"Kumyoung.Co.Ltd\",\n\t[3]byte{0, 19, 141}:    \"Kinghold\",\n\t[3]byte{0, 19, 142}:    \"FOAB Elektronik AB\",\n\t[3]byte{0, 19, 143}:    \"Asiarock Technology Limited\",\n\t[3]byte{0, 19, 144}:    \"Termtek Computer Co., Ltd\",\n\t[3]byte{0, 19, 145}:    \"OUEN CO.,LTD.\",\n\t[3]byte{0, 19, 146}:    \"Ruckus Wireless\",\n\t[3]byte{0, 19, 147}:    \"Panta Systems, Inc.\",\n\t[3]byte{0, 19, 148}:    \"Infohand Co.,Ltd\",\n\t[3]byte{0, 19, 149}:    \"congatec AG\",\n\t[3]byte{0, 19, 150}:    \"Acbel Polytech Inc.\",\n\t[3]byte{0, 19, 151}:    \"Oracle Corporation \",\n\t[3]byte{0, 19, 152}:    \"TrafficSim Co.,Ltd\",\n\t[3]byte{0, 19, 153}:    \"STAC Corporation.\",\n\t[3]byte{0, 19, 154}:    \"K-ubique ID Corp.\",\n\t[3]byte{0, 19, 155}:    \"ioIMAGE Ltd.\",\n\t[3]byte{0, 19, 156}:    \"Exavera Technologies, Inc.\",\n\t[3]byte{0, 19, 157}:    \"MaxLinear Hispania S.L.U.\",\n\t[3]byte{0, 19, 158}:    \"Ciara Technologies Inc.\",\n\t[3]byte{0, 19, 159}:    \"Electronics Design Services, Co., Ltd.\",\n\t[3]byte{0, 19, 160}:    \"ALGOSYSTEM Co., Ltd.\",\n\t[3]byte{0, 19, 161}:    \"Crow Electronic Engeneering\",\n\t[3]byte{0, 19, 162}:    \"MaxStream, Inc\",\n\t[3]byte{0, 19, 163}:    \"Siemens Home & Office Comm. Devices\",\n\t[3]byte{0, 19, 164}:    \"KeyEye Communications\",\n\t[3]byte{0, 19, 165}:    \"General Solutions, LTD.\",\n\t[3]byte{0, 19, 166}:    \"Extricom Ltd\",\n\t[3]byte{0, 19, 167}:    \"BATTELLE MEMORIAL INSTITUTE\",\n\t[3]byte{0, 19, 168}:    \"Tanisys Technology\",\n\t[3]byte{0, 19, 169}:    \"Sony Corporation\",\n\t[3]byte{0, 19, 170}:    \"ALS  & TEC Ltd.\",\n\t[3]byte{0, 19, 171}:    \"Telemotive AG\",\n\t[3]byte{0, 19, 172}:    \"Sunmyung Electronics Co., LTD\",\n\t[3]byte{0, 19, 173}:    \"Sendo Ltd\",\n\t[3]byte{0, 19, 174}:    \"Radiance Technologies, Inc.\",\n\t[3]byte{0, 19, 175}:    \"NUMA Technology,Inc.\",\n\t[3]byte{0, 19, 176}:    \"Jablotron\",\n\t[3]byte{0, 19, 177}:    \"Intelligent Control Systems (Asia) Pte Ltd\",\n\t[3]byte{0, 19, 178}:    \"Carallon Limited\",\n\t[3]byte{0, 19, 179}:    \"Ecom Communications Technology Co., Ltd.\",\n\t[3]byte{0, 19, 180}:    \"Appear TV\",\n\t[3]byte{0, 19, 181}:    \"Wavesat\",\n\t[3]byte{0, 19, 182}:    \"Sling Media, Inc.\",\n\t[3]byte{0, 19, 183}:    \"Scantech ID\",\n\t[3]byte{0, 19, 184}:    \"RyCo Electronic Systems Limited\",\n\t[3]byte{0, 19, 185}:    \"BM SPA\",\n\t[3]byte{0, 19, 186}:    \"ReadyLinks Inc\",\n\t[3]byte{0, 19, 187}:    \"Smartvue Corporation\",\n\t[3]byte{0, 19, 188}:    \"Artimi Ltd\",\n\t[3]byte{0, 19, 189}:    \"HYMATOM SA\",\n\t[3]byte{0, 19, 190}:    \"Virtual Conexions\",\n\t[3]byte{0, 19, 191}:    \"Media System Planning Corp.\",\n\t[3]byte{0, 19, 192}:    \"Trix Tecnologia Ltda.\",\n\t[3]byte{0, 19, 193}:    \"Asoka USA Corporation\",\n\t[3]byte{0, 19, 194}:    \"WACOM Co.,Ltd\",\n\t[3]byte{0, 19, 195}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 19, 196}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 19, 197}:    \"LIGHTRON FIBER-OPTIC DEVICES INC.\",\n\t[3]byte{0, 19, 198}:    \"OpenGear, Inc\",\n\t[3]byte{0, 19, 199}:    \"IONOS Co.,Ltd.\",\n\t[3]byte{0, 19, 200}:    \"ADB Broadband Italia\",\n\t[3]byte{0, 19, 201}:    \"Beyond Achieve Enterprises Ltd.\",\n\t[3]byte{0, 19, 202}:    \"Pico Digital\",\n\t[3]byte{0, 19, 203}:    \"Zenitel Norway AS\",\n\t[3]byte{0, 19, 204}:    \"Tall Maple Systems\",\n\t[3]byte{0, 19, 205}:    \"MTI co. LTD\",\n\t[3]byte{0, 19, 206}:    \"Intel Corporate\",\n\t[3]byte{0, 19, 207}:    \"4Access Communications\",\n\t[3]byte{0, 19, 208}:    \"t+ Medical Ltd\",\n\t[3]byte{0, 19, 209}:    \"KIRK telecom A/S\",\n\t[3]byte{0, 19, 210}:    \"PAGE IBERICA, S.A.\",\n\t[3]byte{0, 19, 211}:    \"MICRO-STAR INTERNATIONAL CO., LTD.\",\n\t[3]byte{0, 19, 212}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 19, 213}:    \"RuggedCom\",\n\t[3]byte{0, 19, 214}:    \"TII NETWORK TECHNOLOGIES, INC.\",\n\t[3]byte{0, 19, 215}:    \"SPIDCOM Technologies SA\",\n\t[3]byte{0, 19, 216}:    \"Princeton Instruments\",\n\t[3]byte{0, 19, 217}:    \"Matrix Product Development, Inc.\",\n\t[3]byte{0, 19, 218}:    \"Diskware Co., Ltd\",\n\t[3]byte{0, 19, 219}:    \"SHOEI Electric Co.,Ltd\",\n\t[3]byte{0, 19, 220}:    \"IBTEK INC.\",\n\t[3]byte{0, 19, 221}:    \"Abbott Diagnostics\",\n\t[3]byte{0, 19, 222}:    \"Adapt4, LLC\",\n\t[3]byte{0, 19, 223}:    \"Ryvor Corp.\",\n\t[3]byte{0, 19, 224}:    \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{0, 19, 225}:    \"Iprobe AB\",\n\t[3]byte{0, 19, 226}:    \"GeoVision Inc.\",\n\t[3]byte{0, 19, 227}:    \"CoVi Technologies, Inc.\",\n\t[3]byte{0, 19, 228}:    \"YANGJAE SYSTEMS CORP.\",\n\t[3]byte{0, 19, 229}:    \"TENOSYS, INC.\",\n\t[3]byte{0, 19, 230}:    \"Technolution\",\n\t[3]byte{0, 19, 231}:    \"Halcro\",\n\t[3]byte{0, 19, 232}:    \"Intel Corporate\",\n\t[3]byte{0, 19, 233}:    \"VeriWave, Inc.\",\n\t[3]byte{0, 19, 234}:    \"Kamstrup A/S\",\n\t[3]byte{0, 19, 235}:    \"Sysmaster Corporation\",\n\t[3]byte{0, 19, 236}:    \"Netsnapper Technologies SARL\",\n\t[3]byte{0, 19, 237}:    \"PSIA\",\n\t[3]byte{0, 19, 238}:    \"JBX Designs Inc.\",\n\t[3]byte{0, 19, 239}:    \"Kingjon Digital Technology Co.,Ltd\",\n\t[3]byte{0, 19, 240}:    \"Wavefront Semiconductor\",\n\t[3]byte{0, 19, 241}:    \"AMOD Technology Co., Ltd.\",\n\t[3]byte{0, 19, 242}:    \"Klas Ltd\",\n\t[3]byte{0, 19, 243}:    \"Giga-byte Communications Inc.\",\n\t[3]byte{0, 19, 244}:    \"Psitek (Pty) Ltd\",\n\t[3]byte{0, 19, 245}:    \"Akimbi Systems\",\n\t[3]byte{0, 19, 246}:    \"Cintech\",\n\t[3]byte{0, 19, 247}:    \"SMC Networks, Inc.\",\n\t[3]byte{0, 19, 248}:    \"Dex Security Solutions\",\n\t[3]byte{0, 19, 249}:    \"Cavera Systems\",\n\t[3]byte{0, 19, 250}:    \"LifeSize Communications, Inc\",\n\t[3]byte{0, 19, 251}:    \"RKC INSTRUMENT INC.\",\n\t[3]byte{0, 19, 252}:    \"SiCortex, Inc\",\n\t[3]byte{0, 19, 253}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 19, 254}:    \"GRANDTEC ELECTRONIC CORP.\",\n\t[3]byte{0, 19, 255}:    \"Dage-MTI of MC, Inc.\",\n\t[3]byte{0, 20, 0}:      \"MINERVA KOREA CO., LTD\",\n\t[3]byte{0, 20, 1}:      \"Rivertree Networks Corp.\",\n\t[3]byte{0, 20, 2}:      \"kk-electronic a/s\",\n\t[3]byte{0, 20, 3}:      \"Renasis, LLC\",\n\t[3]byte{0, 20, 4}:      \"ARRIS Group, Inc.\",\n\t[3]byte{0, 20, 5}:      \"OpenIB, Inc.\",\n\t[3]byte{0, 20, 6}:      \"Go Networks\",\n\t[3]byte{0, 20, 7}:      \"Sperian Protection Instrumentation\",\n\t[3]byte{0, 20, 8}:      \"Eka Systems Inc.\",\n\t[3]byte{0, 20, 9}:      \"MAGNETI MARELLI   S.E. S.p.A.\",\n\t[3]byte{0, 20, 10}:     \"WEPIO Co., Ltd.\",\n\t[3]byte{0, 20, 11}:     \"FIRST INTERNATIONAL COMPUTER, INC.\",\n\t[3]byte{0, 20, 12}:     \"GKB CCTV CO., LTD.\",\n\t[3]byte{0, 20, 13}:     \"Nortel Networks\",\n\t[3]byte{0, 20, 14}:     \"Nortel Networks\",\n\t[3]byte{0, 20, 15}:     \"Federal State Unitary Enterprise Leningrad R&D Institute of\",\n\t[3]byte{0, 20, 16}:     \"Suzhou Keda Technology CO.,Ltd\",\n\t[3]byte{0, 20, 17}:     \"Deutschmann Automation GmbH & Co. KG\",\n\t[3]byte{0, 20, 18}:     \"S-TEC electronics AG\",\n\t[3]byte{0, 20, 19}:     \"Trebing & Himstedt Prozeßautomation GmbH & Co. KG\",\n\t[3]byte{0, 20, 20}:     \"Jumpnode Systems LLC.\",\n\t[3]byte{0, 20, 21}:     \"Intec Automation inc.\",\n\t[3]byte{0, 20, 22}:     \"Scosche Industries, Inc.\",\n\t[3]byte{0, 20, 23}:     \"RSE Informations Technologie GmbH\",\n\t[3]byte{0, 20, 24}:     \"C4Line\",\n\t[3]byte{0, 20, 25}:     \"SIDSA\",\n\t[3]byte{0, 20, 26}:     \"DEICY CORPORATION\",\n\t[3]byte{0, 20, 27}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 20, 28}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 20, 29}:     \"LTI-Motion GmbH\",\n\t[3]byte{0, 20, 30}:     \"P.A. Semi, Inc.\",\n\t[3]byte{0, 20, 31}:     \"SunKwang Electronics Co., Ltd\",\n\t[3]byte{0, 20, 32}:     \"G-Links networking company\",\n\t[3]byte{0, 20, 33}:     \"Total Wireless Technologies Pte. Ltd.\",\n\t[3]byte{0, 20, 34}:     \"Dell Inc.\",\n\t[3]byte{0, 20, 35}:     \"J-S Co. NEUROCOM\",\n\t[3]byte{0, 20, 36}:     \"Merry Electrics CO., LTD.\",\n\t[3]byte{0, 20, 37}:     \"Galactic Computing Corp.\",\n\t[3]byte{0, 20, 38}:     \"NL Technology\",\n\t[3]byte{0, 20, 39}:     \"JazzMutant\",\n\t[3]byte{0, 20, 40}:     \"Vocollect Inc\",\n\t[3]byte{0, 20, 41}:     \"V Center Technologies Co., Ltd.\",\n\t[3]byte{0, 20, 42}:     \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{0, 20, 43}:     \"Edata Communication Inc.\",\n\t[3]byte{0, 20, 44}:     \"Koncept International, Inc.\",\n\t[3]byte{0, 20, 45}:     \"Toradex AG\",\n\t[3]byte{0, 20, 46}:     \"77 Elektronika Kft.\",\n\t[3]byte{0, 20, 47}:     \"Savvius\",\n\t[3]byte{0, 20, 48}:     \"ViPowER, Inc\",\n\t[3]byte{0, 20, 49}:     \"PDL Electronics Ltd\",\n\t[3]byte{0, 20, 50}:     \"Tarallax Wireless, Inc.\",\n\t[3]byte{0, 20, 51}:     \"Empower Technologies(Canada) Inc.\",\n\t[3]byte{0, 20, 52}:     \"Keri Systems, Inc\",\n\t[3]byte{0, 20, 53}:     \"CityCom Corp.\",\n\t[3]byte{0, 20, 54}:     \"Qwerty Elektronik AB\",\n\t[3]byte{0, 20, 55}:     \"GSTeletech Co.,Ltd.\",\n\t[3]byte{0, 20, 56}:     \"Hewlett Packard Enterprise\",\n\t[3]byte{0, 20, 57}:     \"Blonder Tongue Laboratories, Inc\",\n\t[3]byte{0, 20, 58}:     \"RAYTALK INTERNATIONAL SRL\",\n\t[3]byte{0, 20, 59}:     \"Sensovation AG\",\n\t[3]byte{0, 20, 60}:     \"Rheinmetall Canada Inc.\",\n\t[3]byte{0, 20, 61}:     \"Aevoe Inc.\",\n\t[3]byte{0, 20, 62}:     \"AirLink Communications, Inc.\",\n\t[3]byte{0, 20, 63}:     \"Hotway Technology Corporation\",\n\t[3]byte{0, 20, 64}:     \"ATOMIC Corporation\",\n\t[3]byte{0, 20, 65}:     \"Innovation Sound Technology Co., LTD.\",\n\t[3]byte{0, 20, 66}:     \"ATTO CORPORATION\",\n\t[3]byte{0, 20, 67}:     \"Consultronics Europe Ltd\",\n\t[3]byte{0, 20, 68}:     \"Grundfos Holding\",\n\t[3]byte{0, 20, 69}:     \"Telefon-Gradnja d.o.o.\",\n\t[3]byte{0, 20, 70}:     \"SuperVision Solutions LLC\",\n\t[3]byte{0, 20, 71}:     \"BOAZ Inc.\",\n\t[3]byte{0, 20, 72}:     \"Inventec Multimedia & Telecom Corporation\",\n\t[3]byte{0, 20, 73}:     \"Sichuan Changhong Electric Ltd.\",\n\t[3]byte{0, 20, 74}:     \"Taiwan Thick-Film Ind. Corp.\",\n\t[3]byte{0, 20, 75}:     \"Hifn, Inc.\",\n\t[3]byte{0, 20, 76}:     \"General Meters Corp.\",\n\t[3]byte{0, 20, 77}:     \"Intelligent Systems\",\n\t[3]byte{0, 20, 78}:     \"SRISA\",\n\t[3]byte{0, 20, 79}:     \"Oracle Corporation \",\n\t[3]byte{0, 20, 80}:     \"Heim Systems GmbH\",\n\t[3]byte{0, 20, 81}:     \"Apple, Inc.\",\n\t[3]byte{0, 20, 82}:     \"CALCULEX,INC.\",\n\t[3]byte{0, 20, 83}:     \"ADVANTECH TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 20, 84}:     \"Symwave\",\n\t[3]byte{0, 20, 85}:     \"Coder Electronics Corporation\",\n\t[3]byte{0, 20, 86}:     \"Edge Products\",\n\t[3]byte{0, 20, 87}:     \"T-VIPS AS\",\n\t[3]byte{0, 20, 88}:     \"HS Automatic ApS\",\n\t[3]byte{0, 20, 89}:     \"Moram Co., Ltd.\",\n\t[3]byte{0, 20, 90}:     \"Neratec Solutions AG\",\n\t[3]byte{0, 20, 91}:     \"SeekerNet Inc.\",\n\t[3]byte{0, 20, 92}:     \"Intronics B.V.\",\n\t[3]byte{0, 20, 93}:     \"WJ Communications, Inc.\",\n\t[3]byte{0, 20, 94}:     \"IBM Corp\",\n\t[3]byte{0, 20, 95}:     \"ADITEC CO. LTD\",\n\t[3]byte{0, 20, 96}:     \"Kyocera Wireless Corp.\",\n\t[3]byte{0, 20, 97}:     \"CORONA CORPORATION\",\n\t[3]byte{0, 20, 98}:     \"Digiwell Technology, inc\",\n\t[3]byte{0, 20, 99}:     \"IDCS N.V.\",\n\t[3]byte{0, 20, 100}:    \"Cryptosoft\",\n\t[3]byte{0, 20, 101}:    \"Novo Nordisk A/S\",\n\t[3]byte{0, 20, 102}:    \"Kleinhenz Elektronik GmbH\",\n\t[3]byte{0, 20, 103}:    \"ArrowSpan Inc.\",\n\t[3]byte{0, 20, 104}:    \"CelPlan International, Inc.\",\n\t[3]byte{0, 20, 105}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 20, 106}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 20, 107}:    \"Anagran, Inc.\",\n\t[3]byte{0, 20, 108}:    \"NETGEAR\",\n\t[3]byte{0, 20, 109}:    \"RF Technologies\",\n\t[3]byte{0, 20, 110}:    \"H. Stoll GmbH & Co. KG\",\n\t[3]byte{0, 20, 111}:    \"Kohler Co\",\n\t[3]byte{0, 20, 112}:    \"Prokom Software SA\",\n\t[3]byte{0, 20, 113}:    \"Eastern Asia Technology Limited\",\n\t[3]byte{0, 20, 114}:    \"China Broadband Wireless IP Standard group(ChinaBWIPS)\",\n\t[3]byte{0, 20, 115}:    \"Bookham Inc\",\n\t[3]byte{0, 20, 116}:    \"K40 Electronics\",\n\t[3]byte{0, 20, 117}:    \"Wiline Networks, Inc.\",\n\t[3]byte{0, 20, 118}:    \"MultiCom Industries Limited\",\n\t[3]byte{0, 20, 119}:    \"Trilliant\",\n\t[3]byte{0, 20, 120}:    \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{0, 20, 121}:    \"NEC Magnus Communications,Ltd.\",\n\t[3]byte{0, 20, 122}:    \"Eubus GmbH\",\n\t[3]byte{0, 20, 123}:    \"Iteris, Inc.\",\n\t[3]byte{0, 20, 124}:    \"3Com Ltd\",\n\t[3]byte{0, 20, 125}:    \"Aeon Digital International\",\n\t[3]byte{0, 20, 126}:    \"InnerWireless\",\n\t[3]byte{0, 20, 127}:    \"Thomson Telecom Belgium\",\n\t[3]byte{0, 20, 128}:    \"Hitachi-LG Data Storage Korea, Inc\",\n\t[3]byte{0, 20, 129}:    \"Multilink Inc\",\n\t[3]byte{0, 20, 130}:    \"Aurora Networks\",\n\t[3]byte{0, 20, 131}:    \"eXS Inc.\",\n\t[3]byte{0, 20, 132}:    \"Cermate Technologies Inc.\",\n\t[3]byte{0, 20, 133}:    \"Giga-Byte\",\n\t[3]byte{0, 20, 134}:    \"Echo Digital Audio Corporation\",\n\t[3]byte{0, 20, 135}:    \"American Technology Integrators\",\n\t[3]byte{0, 20, 136}:    \"Akorri\",\n\t[3]byte{0, 20, 137}:    \"B15402100 - JANDEI, S.L.\",\n\t[3]byte{0, 20, 138}:    \"Elin Ebg Traction Gmbh\",\n\t[3]byte{0, 20, 139}:    \"Globo Electronic GmbH & Co. KG\",\n\t[3]byte{0, 20, 140}:    \"General Dynamics Mission Systems\",\n\t[3]byte{0, 20, 141}:    \"Cubic Defense Simulation Systems\",\n\t[3]byte{0, 20, 142}:    \"Tele Power Inc.\",\n\t[3]byte{0, 20, 143}:    \"Protronic (Far East) Ltd.\",\n\t[3]byte{0, 20, 144}:    \"ASP Corporation\",\n\t[3]byte{0, 20, 145}:    \"Daniels Electronics Ltd. dbo Codan Rado Communications\",\n\t[3]byte{0, 20, 146}:    \"Liteon, Mobile Media Solution SBU\",\n\t[3]byte{0, 20, 147}:    \"Systimax Solutions\",\n\t[3]byte{0, 20, 148}:    \"ESU AG\",\n\t[3]byte{0, 20, 149}:    \"2Wire Inc\",\n\t[3]byte{0, 20, 150}:    \"Phonic Corp.\",\n\t[3]byte{0, 20, 151}:    \"ZHIYUAN Eletronics co.,ltd.\",\n\t[3]byte{0, 20, 152}:    \"Viking Design Technology\",\n\t[3]byte{0, 20, 153}:    \"Helicomm Inc\",\n\t[3]byte{0, 20, 154}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 20, 155}:    \"Nokota Communications, LLC\",\n\t[3]byte{0, 20, 156}:    \"HF Company\",\n\t[3]byte{0, 20, 157}:    \"Sound ID Inc.\",\n\t[3]byte{0, 20, 158}:    \"UbONE Co., Ltd\",\n\t[3]byte{0, 20, 159}:    \"System and Chips, Inc.\",\n\t[3]byte{0, 20, 160}:    \"Accsense, Inc.\",\n\t[3]byte{0, 20, 161}:    \"Synchronous Communication Corp\",\n\t[3]byte{0, 20, 162}:    \"Core Micro Systems Inc.\",\n\t[3]byte{0, 20, 163}:    \"Vitelec BV\",\n\t[3]byte{0, 20, 164}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 20, 165}:    \"Gemtek Technology Co., Ltd.\",\n\t[3]byte{0, 20, 166}:    \"Teranetics, Inc.\",\n\t[3]byte{0, 20, 167}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 20, 168}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 20, 169}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 20, 170}:    \"Ashly Audio, Inc.\",\n\t[3]byte{0, 20, 171}:    \"Senhai Electronic Technology Co., Ltd.\",\n\t[3]byte{0, 20, 172}:    \"Bountiful WiFi\",\n\t[3]byte{0, 20, 173}:    \"Gassner Wiege- und Meßtechnik GmbH\",\n\t[3]byte{0, 20, 174}:    \"Wizlogics Co., Ltd.\",\n\t[3]byte{0, 20, 175}:    \"Datasym POS Inc.\",\n\t[3]byte{0, 20, 176}:    \"Naeil Community\",\n\t[3]byte{0, 20, 177}:    \"Axell Wireless Limited\",\n\t[3]byte{0, 20, 178}:    \"mCubelogics Corporation\",\n\t[3]byte{0, 20, 179}:    \"CoreStar International Corp\",\n\t[3]byte{0, 20, 180}:    \"General Dynamics United Kingdom Ltd\",\n\t[3]byte{0, 20, 181}:    \"PHYSIOMETRIX,INC\",\n\t[3]byte{0, 20, 182}:    \"Enswer Technology Inc.\",\n\t[3]byte{0, 20, 183}:    \"AR Infotek Inc.\",\n\t[3]byte{0, 20, 184}:    \"Hill-Rom\",\n\t[3]byte{0, 20, 185}:    \"MSTAR SEMICONDUCTOR\",\n\t[3]byte{0, 20, 186}:    \"Carvers SA de CV\",\n\t[3]byte{0, 20, 187}:    \"Open Interface North America\",\n\t[3]byte{0, 20, 188}:    \"SYNECTIC TELECOM EXPORTS PVT. LTD.\",\n\t[3]byte{0, 20, 189}:    \"incNETWORKS, Inc\",\n\t[3]byte{0, 20, 190}:    \"Wink communication technology CO.LTD\",\n\t[3]byte{0, 20, 191}:    \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 20, 192}:    \"Symstream Technology Group Ltd\",\n\t[3]byte{0, 20, 193}:    \"U.S. Robotics Corporation\",\n\t[3]byte{0, 20, 194}:    \"Hewlett Packard\",\n\t[3]byte{0, 20, 195}:    \"Seagate Technology\",\n\t[3]byte{0, 20, 196}:    \"Vitelcom Mobile Technology\",\n\t[3]byte{0, 20, 197}:    \"Alive Technologies Pty Ltd\",\n\t[3]byte{0, 20, 198}:    \"Quixant Ltd\",\n\t[3]byte{0, 20, 199}:    \"Nortel Networks\",\n\t[3]byte{0, 20, 200}:    \"Contemporary Research Corp\",\n\t[3]byte{0, 20, 201}:    \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 20, 202}:    \"Key Radio Systems Limited\",\n\t[3]byte{0, 20, 203}:    \"LifeSync Corporation\",\n\t[3]byte{0, 20, 204}:    \"Zetec, Inc.\",\n\t[3]byte{0, 20, 205}:    \"DigitalZone Co., Ltd.\",\n\t[3]byte{0, 20, 206}:    \"NF CORPORATION\",\n\t[3]byte{0, 20, 207}:    \"INVISIO Communications\",\n\t[3]byte{0, 20, 208}:    \"BTI Systems Inc.\",\n\t[3]byte{0, 20, 209}:    \"TRENDnet, Inc.\",\n\t[3]byte{0, 20, 210}:    \"Kyuden Technosystems Corporation\",\n\t[3]byte{0, 20, 211}:    \"SEPSA\",\n\t[3]byte{0, 20, 212}:    \"K Technology Corporation\",\n\t[3]byte{0, 20, 213}:    \"Datang Telecom Technology CO. , LCD,Optical Communication Br\",\n\t[3]byte{0, 20, 214}:    \"Jeongmin Electronics Co.,Ltd.\",\n\t[3]byte{0, 20, 215}:    \"Datastore Technology Corp\",\n\t[3]byte{0, 20, 216}:    \"bio-logic SA\",\n\t[3]byte{0, 20, 217}:    \"IP Fabrics, Inc.\",\n\t[3]byte{0, 20, 218}:    \"Huntleigh Healthcare\",\n\t[3]byte{0, 20, 219}:    \"Elma Trenew Electronic GmbH\",\n\t[3]byte{0, 20, 220}:    \"Communication System Design & Manufacturing (CSDM)\",\n\t[3]byte{0, 20, 221}:    \"Covergence Inc.\",\n\t[3]byte{0, 20, 222}:    \"Sage Instruments Inc.\",\n\t[3]byte{0, 20, 223}:    \"HI-P Tech Corporation\",\n\t[3]byte{0, 20, 224}:    \"LET'S Corporation\",\n\t[3]byte{0, 20, 225}:    \"Data Display AG\",\n\t[3]byte{0, 20, 226}:    \"datacom systems inc.\",\n\t[3]byte{0, 20, 227}:    \"mm-lab GmbH\",\n\t[3]byte{0, 20, 228}:    \"infinias, LLC\",\n\t[3]byte{0, 20, 229}:    \"Alticast\",\n\t[3]byte{0, 20, 230}:    \"AIM Infrarotmodule GmbH\",\n\t[3]byte{0, 20, 231}:    \"Stolinx,. Inc\",\n\t[3]byte{0, 20, 232}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 20, 233}:    \"Nortech International\",\n\t[3]byte{0, 20, 234}:    \"S Digm Inc. (Safe Paradigm Inc.)\",\n\t[3]byte{0, 20, 235}:    \"AwarePoint Corporation\",\n\t[3]byte{0, 20, 236}:    \"Acro Telecom\",\n\t[3]byte{0, 20, 237}:    \"Airak, Inc.\",\n\t[3]byte{0, 20, 238}:    \"Western Digital Technologies, Inc.\",\n\t[3]byte{0, 20, 239}:    \"TZero Technologies, Inc.\",\n\t[3]byte{0, 20, 240}:    \"Business Security OL AB\",\n\t[3]byte{0, 20, 241}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 20, 242}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 20, 243}:    \"ViXS Systems Inc\",\n\t[3]byte{0, 20, 244}:    \"DekTec Digital Video B.V.\",\n\t[3]byte{0, 20, 245}:    \"OSI Security Devices\",\n\t[3]byte{0, 20, 246}:    \"Juniper Networks\",\n\t[3]byte{0, 20, 247}:    \"CREVIS Co., LTD\",\n\t[3]byte{0, 20, 248}:    \"Scientific Atlanta\",\n\t[3]byte{0, 20, 249}:    \"Vantage Controls\",\n\t[3]byte{0, 20, 250}:    \"AsGa S.A.\",\n\t[3]byte{0, 20, 251}:    \"Technical Solutions Inc.\",\n\t[3]byte{0, 20, 252}:    \"Extandon, Inc.\",\n\t[3]byte{0, 20, 253}:    \"Thecus Technology Corp.\",\n\t[3]byte{0, 20, 254}:    \"Artech Electronics\",\n\t[3]byte{0, 20, 255}:    \"Precise Automation, Inc.\",\n\t[3]byte{0, 21, 0}:      \"Intel Corporate\",\n\t[3]byte{0, 21, 1}:      \"LexBox\",\n\t[3]byte{0, 21, 2}:      \"BETA tech\",\n\t[3]byte{0, 21, 3}:      \"PROFIcomms s.r.o.\",\n\t[3]byte{0, 21, 4}:      \"GAME PLUS CO., LTD.\",\n\t[3]byte{0, 21, 5}:      \"Actiontec Electronics, Inc\",\n\t[3]byte{0, 21, 6}:      \"Neo Photonics\",\n\t[3]byte{0, 21, 7}:      \"Renaissance Learning Inc\",\n\t[3]byte{0, 21, 8}:      \"Global Target Enterprise Inc\",\n\t[3]byte{0, 21, 9}:      \"Plus Technology Co., Ltd\",\n\t[3]byte{0, 21, 10}:     \"Sonoa Systems, Inc\",\n\t[3]byte{0, 21, 11}:     \"SAGE INFOTECH LTD.\",\n\t[3]byte{0, 21, 12}:     \"AVM GmbH\",\n\t[3]byte{0, 21, 13}:     \"Hoana Medical, Inc.\",\n\t[3]byte{0, 21, 14}:     \"OPENBRAIN TECHNOLOGIES CO., LTD.\",\n\t[3]byte{0, 21, 15}:     \"mingjong\",\n\t[3]byte{0, 21, 16}:     \"Techsphere Co., Ltd\",\n\t[3]byte{0, 21, 17}:     \"Data Center Systems\",\n\t[3]byte{0, 21, 18}:     \"Zurich University of Applied Sciences\",\n\t[3]byte{0, 21, 19}:     \"EFS sas\",\n\t[3]byte{0, 21, 20}:     \"Hu Zhou NAVA Networks&Electronics Ltd.\",\n\t[3]byte{0, 21, 21}:     \"Leipold+Co.GmbH\",\n\t[3]byte{0, 21, 22}:     \"URIEL SYSTEMS INC.\",\n\t[3]byte{0, 21, 23}:     \"Intel Corporate\",\n\t[3]byte{0, 21, 24}:     \"Shenzhen 10MOONS Technology Development CO.,Ltd\",\n\t[3]byte{0, 21, 25}:     \"StoreAge Networking Technologies\",\n\t[3]byte{0, 21, 26}:     \"Hunter Engineering Company\",\n\t[3]byte{0, 21, 27}:     \"Isilon Systems Inc.\",\n\t[3]byte{0, 21, 28}:     \"LENECO\",\n\t[3]byte{0, 21, 29}:     \"M2I CORPORATION\",\n\t[3]byte{0, 21, 30}:     \"ETHERNET Powerlink Standarization Group (EPSG)\",\n\t[3]byte{0, 21, 31}:     \"Multivision Intelligent Surveillance (Hong Kong) Ltd\",\n\t[3]byte{0, 21, 32}:     \"Radiocrafts AS\",\n\t[3]byte{0, 21, 33}:     \"Horoquartz\",\n\t[3]byte{0, 21, 34}:     \"Dea Security\",\n\t[3]byte{0, 21, 35}:     \"Meteor Communications Corporation\",\n\t[3]byte{0, 21, 36}:     \"Numatics, Inc.\",\n\t[3]byte{0, 21, 37}:     \"Chamberlain Access Solutions\",\n\t[3]byte{0, 21, 38}:     \"Remote Technologies Inc\",\n\t[3]byte{0, 21, 39}:     \"Balboa Instruments\",\n\t[3]byte{0, 21, 40}:     \"Beacon Medical Products LLC d.b.a. BeaconMedaes\",\n\t[3]byte{0, 21, 41}:     \"N3 Corporation\",\n\t[3]byte{0, 21, 42}:     \"Nokia Corporation\",\n\t[3]byte{0, 21, 43}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 21, 44}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 21, 45}:     \"TenX Networks, LLC\",\n\t[3]byte{0, 21, 46}:     \"PacketHop, Inc.\",\n\t[3]byte{0, 21, 47}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 21, 48}:     \"Dell EMC\",\n\t[3]byte{0, 21, 49}:     \"KOCOM\",\n\t[3]byte{0, 21, 50}:     \"Consumer Technologies Group, LLC\",\n\t[3]byte{0, 21, 51}:     \"NADAM.CO.,LTD\",\n\t[3]byte{0, 21, 52}:     \"A Beltrónica-Companhia de Comunicações, Lda\",\n\t[3]byte{0, 21, 53}:     \"OTE Spa\",\n\t[3]byte{0, 21, 54}:     \"Powertech co.,Ltd\",\n\t[3]byte{0, 21, 55}:     \"Ventus Networks\",\n\t[3]byte{0, 21, 56}:     \"RFID, Inc.\",\n\t[3]byte{0, 21, 57}:     \"Technodrive srl\",\n\t[3]byte{0, 21, 58}:     \"Shenzhen Syscan Technology Co.,Ltd.\",\n\t[3]byte{0, 21, 59}:     \"EMH metering GmbH & Co. KG\",\n\t[3]byte{0, 21, 60}:     \"Kprotech Co., Ltd.\",\n\t[3]byte{0, 21, 61}:     \"ELIM PRODUCT CO.\",\n\t[3]byte{0, 21, 62}:     \"Q-Matic Sweden AB\",\n\t[3]byte{0, 21, 63}:     \"Alcatel Alenia Space Italia\",\n\t[3]byte{0, 21, 64}:     \"Nortel Networks\",\n\t[3]byte{0, 21, 65}:     \"StrataLight Communications, Inc.\",\n\t[3]byte{0, 21, 66}:     \"MICROHARD S.R.L.\",\n\t[3]byte{0, 21, 67}:     \"Aberdeen Test Center\",\n\t[3]byte{0, 21, 68}:     \"coM.s.a.t. AG\",\n\t[3]byte{0, 21, 69}:     \"SEECODE Co., Ltd.\",\n\t[3]byte{0, 21, 70}:     \"ITG Worldwide Sdn Bhd\",\n\t[3]byte{0, 21, 71}:     \"AiZen Solutions Inc.\",\n\t[3]byte{0, 21, 72}:     \"CUBE TECHNOLOGIES\",\n\t[3]byte{0, 21, 73}:     \"Dixtal Biomedica Ind. Com. Ltda\",\n\t[3]byte{0, 21, 74}:     \"WANSHIH ELECTRONIC CO., LTD\",\n\t[3]byte{0, 21, 75}:     \"Wonde Proud Technology Co., Ltd\",\n\t[3]byte{0, 21, 76}:     \"Saunders Electronics\",\n\t[3]byte{0, 21, 77}:     \"Netronome Systems, Inc.\",\n\t[3]byte{0, 21, 78}:     \"IEC\",\n\t[3]byte{0, 21, 79}:     \"one RF Technology\",\n\t[3]byte{0, 21, 80}:     \"Nits Technology Inc\",\n\t[3]byte{0, 21, 81}:     \"RadioPulse Inc.\",\n\t[3]byte{0, 21, 82}:     \"Wi-Gear Inc.\",\n\t[3]byte{0, 21, 83}:     \"Cytyc Corporation\",\n\t[3]byte{0, 21, 84}:     \"Atalum Wireless S.A.\",\n\t[3]byte{0, 21, 85}:     \"DFM GmbH\",\n\t[3]byte{0, 21, 86}:     \"Sagemcom Broadband SAS\",\n\t[3]byte{0, 21, 87}:     \"Olivetti\",\n\t[3]byte{0, 21, 88}:     \"FOXCONN\",\n\t[3]byte{0, 21, 89}:     \"Securaplane Technologies, Inc.\",\n\t[3]byte{0, 21, 90}:     \"DAINIPPON PHARMACEUTICAL CO., LTD.\",\n\t[3]byte{0, 21, 91}:     \"Sampo Corporation\",\n\t[3]byte{0, 21, 92}:     \"Dresser Wayne\",\n\t[3]byte{0, 21, 93}:     \"Microsoft Corporation\",\n\t[3]byte{0, 21, 94}:     \"Morgan Stanley\",\n\t[3]byte{0, 21, 95}:     \"GreenPeak Technologies\",\n\t[3]byte{0, 21, 96}:     \"Hewlett Packard\",\n\t[3]byte{0, 21, 97}:     \"JJPlus Corporation\",\n\t[3]byte{0, 21, 98}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 21, 99}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 21, 100}:    \"BEHRINGER Spezielle Studiotechnik GmbH\",\n\t[3]byte{0, 21, 101}:    \"XIAMEN YEALINK NETWORK TECHNOLOGY CO.,LTD\",\n\t[3]byte{0, 21, 102}:    \"A-First Technology Co., Ltd.\",\n\t[3]byte{0, 21, 103}:    \"RADWIN Inc.\",\n\t[3]byte{0, 21, 104}:    \"Dilithium Networks\",\n\t[3]byte{0, 21, 105}:    \"PECO II, Inc.\",\n\t[3]byte{0, 21, 106}:    \"DG2L Technologies Pvt. Ltd.\",\n\t[3]byte{0, 21, 107}:    \"Perfisans Networks Corp.\",\n\t[3]byte{0, 21, 108}:    \"SANE SYSTEM CO., LTD\",\n\t[3]byte{0, 21, 109}:    \"Ubiquiti Networks Inc.\",\n\t[3]byte{0, 21, 110}:    \"A. W. Communication Systems Ltd\",\n\t[3]byte{0, 21, 111}:    \"Xiranet Communications GmbH\",\n\t[3]byte{0, 21, 112}:    \"Zebra Technologies Inc\",\n\t[3]byte{0, 21, 113}:    \"Nolan Systems\",\n\t[3]byte{0, 21, 114}:    \"Red-Lemon\",\n\t[3]byte{0, 21, 115}:    \"NewSoft  Technology Corporation\",\n\t[3]byte{0, 21, 116}:    \"Horizon Semiconductors Ltd.\",\n\t[3]byte{0, 21, 117}:    \"Nevis Networks Inc.\",\n\t[3]byte{0, 21, 118}:    \"LABiTec - Labor Biomedical Technologies GmbH\",\n\t[3]byte{0, 21, 119}:    \"Allied Telesis, Inc.\",\n\t[3]byte{0, 21, 120}:    \"Audio / Video Innovations\",\n\t[3]byte{0, 21, 121}:    \"Lunatone Industrielle Elektronik GmbH\",\n\t[3]byte{0, 21, 122}:    \"Telefin S.p.A.\",\n\t[3]byte{0, 21, 123}:    \"Leuze electronic GmbH + Co. KG\",\n\t[3]byte{0, 21, 124}:    \"Dave Networks, Inc.\",\n\t[3]byte{0, 21, 125}:    \"POSDATA\",\n\t[3]byte{0, 21, 126}:    \"Weidmüller Interface GmbH & Co. KG\",\n\t[3]byte{0, 21, 127}:    \"ChuanG International Holding CO.,LTD.\",\n\t[3]byte{0, 21, 128}:    \"U-WAY CORPORATION\",\n\t[3]byte{0, 21, 129}:    \"MAKUS Inc.\",\n\t[3]byte{0, 21, 130}:    \"Pulse Eight Limited\",\n\t[3]byte{0, 21, 131}:    \"IVT corporation\",\n\t[3]byte{0, 21, 132}:    \"Schenck Process GmbH\",\n\t[3]byte{0, 21, 133}:    \"Aonvision Technolopy Corp.\",\n\t[3]byte{0, 21, 134}:    \"Xiamen Overseas Chinese Electronic Co., Ltd.\",\n\t[3]byte{0, 21, 135}:    \"Takenaka Seisakusho Co.,Ltd\",\n\t[3]byte{0, 21, 136}:    \"Salutica Allied Solutions Sdn Bhd\",\n\t[3]byte{0, 21, 137}:    \"D-MAX Technology Co.,Ltd\",\n\t[3]byte{0, 21, 138}:    \"SURECOM Technology Corp.\",\n\t[3]byte{0, 21, 139}:    \"Park Air Systems Ltd\",\n\t[3]byte{0, 21, 140}:    \"Liab ApS\",\n\t[3]byte{0, 21, 141}:    \"Jennic Ltd\",\n\t[3]byte{0, 21, 142}:    \"Plustek.INC\",\n\t[3]byte{0, 21, 143}:    \"NTT Advanced Technology Corporation\",\n\t[3]byte{0, 21, 144}:    \"Hectronic GmbH\",\n\t[3]byte{0, 21, 145}:    \"RLW Inc.\",\n\t[3]byte{0, 21, 146}:    \"Facom UK Ltd (Melksham)\",\n\t[3]byte{0, 21, 147}:    \"U4EA Technologies Inc.\",\n\t[3]byte{0, 21, 148}:    \"BIXOLON CO.,LTD\",\n\t[3]byte{0, 21, 149}:    \"Quester Tangent Corporation\",\n\t[3]byte{0, 21, 150}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 21, 151}:    \"AETA AUDIO SYSTEMS\",\n\t[3]byte{0, 21, 152}:    \"Kolektor group\",\n\t[3]byte{0, 21, 153}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 21, 154}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 21, 155}:    \"Nortel Networks\",\n\t[3]byte{0, 21, 156}:    \"B-KYUNG SYSTEM Co.,Ltd.\",\n\t[3]byte{0, 21, 157}:    \"Tripp Lite \",\n\t[3]byte{0, 21, 158}:    \"Mad Catz Interactive Inc\",\n\t[3]byte{0, 21, 159}:    \"Terascala, Inc.\",\n\t[3]byte{0, 21, 160}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 21, 161}:    \"ECA-SINTERS\",\n\t[3]byte{0, 21, 162}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 21, 163}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 21, 164}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 21, 165}:    \"DCI Co., Ltd.\",\n\t[3]byte{0, 21, 166}:    \"Digital Electronics Products Ltd.\",\n\t[3]byte{0, 21, 167}:    \"Robatech AG\",\n\t[3]byte{0, 21, 168}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 21, 169}:    \"KWANG WOO I&C CO.,LTD\",\n\t[3]byte{0, 21, 170}:    \"Rextechnik International Co.,\",\n\t[3]byte{0, 21, 171}:    \"PRO CO SOUND INC\",\n\t[3]byte{0, 21, 172}:    \"Capelon AB\",\n\t[3]byte{0, 21, 173}:    \"Accedian Networks\",\n\t[3]byte{0, 21, 174}:    \"kyung il\",\n\t[3]byte{0, 21, 175}:    \"AzureWave Technology Inc.\",\n\t[3]byte{0, 21, 176}:    \"AUTOTELENET CO.,LTD\",\n\t[3]byte{0, 21, 177}:    \"Ambient Corporation\",\n\t[3]byte{0, 21, 178}:    \"Advanced Industrial Computer, Inc.\",\n\t[3]byte{0, 21, 179}:    \"Caretech AB\",\n\t[3]byte{0, 21, 180}:    \"Polymap  Wireless LLC\",\n\t[3]byte{0, 21, 181}:    \"CI Network Corp.\",\n\t[3]byte{0, 21, 182}:    \"ShinMaywa Industries, Ltd.\",\n\t[3]byte{0, 21, 183}:    \"Toshiba\",\n\t[3]byte{0, 21, 184}:    \"Tahoe\",\n\t[3]byte{0, 21, 185}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 21, 186}:    \"iba AG\",\n\t[3]byte{0, 21, 187}:    \"SMA Solar Technology AG\",\n\t[3]byte{0, 21, 188}:    \"Develco\",\n\t[3]byte{0, 21, 189}:    \"Group 4 Technology Ltd\",\n\t[3]byte{0, 21, 190}:    \"Iqua Ltd.\",\n\t[3]byte{0, 21, 191}:    \"technicob\",\n\t[3]byte{0, 21, 192}:    \"DIGITAL TELEMEDIA CO.,LTD.\",\n\t[3]byte{0, 21, 193}:    \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{0, 21, 194}:    \"3M Germany\",\n\t[3]byte{0, 21, 195}:    \"Ruf Telematik AG\",\n\t[3]byte{0, 21, 196}:    \"FLOVEL CO., LTD.\",\n\t[3]byte{0, 21, 197}:    \"Dell Inc.\",\n\t[3]byte{0, 21, 198}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 21, 199}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 21, 200}:    \"FlexiPanel Ltd\",\n\t[3]byte{0, 21, 201}:    \"Gumstix, Inc\",\n\t[3]byte{0, 21, 202}:    \"TeraRecon, Inc.\",\n\t[3]byte{0, 21, 203}:    \"Surf Communication Solutions Ltd.\",\n\t[3]byte{0, 21, 204}:    \"UQUEST, LTD.\",\n\t[3]byte{0, 21, 205}:    \"Exartech International Corp.\",\n\t[3]byte{0, 21, 206}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 21, 207}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 21, 208}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 21, 209}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 21, 210}:    \"Xantech Corporation\",\n\t[3]byte{0, 21, 211}:    \"Pantech&Curitel Communications, Inc.\",\n\t[3]byte{0, 21, 212}:    \"Emitor AB\",\n\t[3]byte{0, 21, 213}:    \"NICEVT\",\n\t[3]byte{0, 21, 214}:    \"OSLiNK Sp. z o.o.\",\n\t[3]byte{0, 21, 215}:    \"Reti Corporation\",\n\t[3]byte{0, 21, 216}:    \"Interlink Electronics\",\n\t[3]byte{0, 21, 217}:    \"PKC Electronics Oy\",\n\t[3]byte{0, 21, 218}:    \"IRITEL A.D.\",\n\t[3]byte{0, 21, 219}:    \"Canesta Inc.\",\n\t[3]byte{0, 21, 220}:    \"KT&C Co., Ltd.\",\n\t[3]byte{0, 21, 221}:    \"IP Control Systems Ltd.\",\n\t[3]byte{0, 21, 222}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 21, 223}:    \"Clivet S.p.A.\",\n\t[3]byte{0, 21, 224}:    \"Ericsson\",\n\t[3]byte{0, 21, 225}:    \"Picochip Ltd\",\n\t[3]byte{0, 21, 226}:    \"Dr.Ing. Herbert Knauer GmbH\",\n\t[3]byte{0, 21, 227}:    \"Dream Technologies Corporation\",\n\t[3]byte{0, 21, 228}:    \"Zimmer Elektromedizin\",\n\t[3]byte{0, 21, 229}:    \"Cheertek Inc.\",\n\t[3]byte{0, 21, 230}:    \"MOBILE TECHNIKA Inc.\",\n\t[3]byte{0, 21, 231}:    \"Quantec Tontechnik\",\n\t[3]byte{0, 21, 232}:    \"Nortel Networks\",\n\t[3]byte{0, 21, 233}:    \"D-Link Corporation\",\n\t[3]byte{0, 21, 234}:    \"Tellumat (Pty) Ltd\",\n\t[3]byte{0, 21, 235}:    \"zte corporation\",\n\t[3]byte{0, 21, 236}:    \"Boca Devices LLC\",\n\t[3]byte{0, 21, 237}:    \"Fulcrum Microsystems, Inc.\",\n\t[3]byte{0, 21, 238}:    \"Omnex Control Systems\",\n\t[3]byte{0, 21, 239}:    \"NEC TOKIN Corporation\",\n\t[3]byte{0, 21, 240}:    \"EGO BV\",\n\t[3]byte{0, 21, 241}:    \"KYLINK Communications Corp.\",\n\t[3]byte{0, 21, 242}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 21, 243}:    \"PELTOR AB\",\n\t[3]byte{0, 21, 244}:    \"Eventide\",\n\t[3]byte{0, 21, 245}:    \"Sustainable Energy Systems\",\n\t[3]byte{0, 21, 246}:    \"SCIENCE AND ENGINEERING SERVICES, INC.\",\n\t[3]byte{0, 21, 247}:    \"Wintecronics Ltd.\",\n\t[3]byte{0, 21, 248}:    \"Kingtronics Industrial Co. Ltd.\",\n\t[3]byte{0, 21, 249}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 21, 250}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 21, 251}:    \"setex schermuly textile computer gmbh\",\n\t[3]byte{0, 21, 252}:    \"Littelfuse Startco\",\n\t[3]byte{0, 21, 253}:    \"Complete Media Systems\",\n\t[3]byte{0, 21, 254}:    \"SCHILLING ROBOTICS LLC\",\n\t[3]byte{0, 21, 255}:    \"Novatel Wireless Solutions, Inc.\",\n\t[3]byte{0, 22, 0}:      \"CelleBrite Mobile Synchronization\",\n\t[3]byte{0, 22, 1}:      \"BUFFALO.INC\",\n\t[3]byte{0, 22, 2}:      \"CEYON TECHNOLOGY CO.,LTD.\",\n\t[3]byte{0, 22, 3}:      \"COOLKSKY Co., LTD\",\n\t[3]byte{0, 22, 4}:      \"Sigpro\",\n\t[3]byte{0, 22, 5}:      \"YORKVILLE SOUND INC.\",\n\t[3]byte{0, 22, 6}:      \"Ideal Industries\",\n\t[3]byte{0, 22, 7}:      \"Curves International Inc.\",\n\t[3]byte{0, 22, 8}:      \"Sequans Communications\",\n\t[3]byte{0, 22, 9}:      \"Unitech electronics co., ltd.\",\n\t[3]byte{0, 22, 10}:     \"SWEEX Europe BV\",\n\t[3]byte{0, 22, 11}:     \"TVWorks LLC\",\n\t[3]byte{0, 22, 12}:     \"LPL  DEVELOPMENT S.A. DE C.V\",\n\t[3]byte{0, 22, 13}:     \"Be Here Corporation\",\n\t[3]byte{0, 22, 14}:     \"Optica Technologies Inc.\",\n\t[3]byte{0, 22, 15}:     \"BADGER METER INC\",\n\t[3]byte{0, 22, 16}:     \"Carina Technology\",\n\t[3]byte{0, 22, 17}:     \"Altecon Srl\",\n\t[3]byte{0, 22, 18}:     \"Otsuka Electronics Co., Ltd.\",\n\t[3]byte{0, 22, 19}:     \"LibreStream Technologies Inc.\",\n\t[3]byte{0, 22, 20}:     \"Picosecond Pulse Labs\",\n\t[3]byte{0, 22, 21}:     \"Nittan Company, Limited\",\n\t[3]byte{0, 22, 22}:     \"BROWAN COMMUNICATION INC.\",\n\t[3]byte{0, 22, 23}:     \"MSI\",\n\t[3]byte{0, 22, 24}:     \"HIVION Co., Ltd.\",\n\t[3]byte{0, 22, 25}:     \"Lancelan Technologies S.L.\",\n\t[3]byte{0, 22, 26}:     \"Dametric AB\",\n\t[3]byte{0, 22, 27}:     \"Micronet Corporation\",\n\t[3]byte{0, 22, 28}:     \"e:cue\",\n\t[3]byte{0, 22, 29}:     \"Innovative Wireless Technologies, Inc.\",\n\t[3]byte{0, 22, 30}:     \"Woojinnet\",\n\t[3]byte{0, 22, 31}:     \"SUNWAVETEC Co., Ltd.\",\n\t[3]byte{0, 22, 32}:     \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 22, 33}:     \"Colorado Vnet\",\n\t[3]byte{0, 22, 34}:     \"BBH SYSTEMS GMBH\",\n\t[3]byte{0, 22, 35}:     \"Interval Media\",\n\t[3]byte{0, 22, 36}:     \"Teneros, Inc.\",\n\t[3]byte{0, 22, 37}:     \"Impinj, Inc.\",\n\t[3]byte{0, 22, 38}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 22, 39}:     \"embedded-logic DESIGN AND MORE GmbH\",\n\t[3]byte{0, 22, 40}:     \"Magicard Ltd\",\n\t[3]byte{0, 22, 41}:     \"Nivus GmbH\",\n\t[3]byte{0, 22, 42}:     \"Antik computers & communications s.r.o.\",\n\t[3]byte{0, 22, 43}:     \"Togami Electric Mfg.co.,Ltd.\",\n\t[3]byte{0, 22, 44}:     \"Xanboo\",\n\t[3]byte{0, 22, 45}:     \"STNet Co., Ltd.\",\n\t[3]byte{0, 22, 46}:     \"Space Shuttle Hi-Tech Co., Ltd.\",\n\t[3]byte{0, 22, 47}:     \"Geutebrück GmbH\",\n\t[3]byte{0, 22, 48}:     \"Vativ Technologies\",\n\t[3]byte{0, 22, 49}:     \"Xteam\",\n\t[3]byte{0, 22, 50}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 22, 51}:     \"Oxford Diagnostics Ltd.\",\n\t[3]byte{0, 22, 52}:     \"Mathtech, Inc.\",\n\t[3]byte{0, 22, 53}:     \"Hewlett Packard\",\n\t[3]byte{0, 22, 54}:     \"Quanta Computer Inc.\",\n\t[3]byte{0, 22, 55}:     \"CITEL SpA\",\n\t[3]byte{0, 22, 56}:     \"TECOM Co., Ltd.\",\n\t[3]byte{0, 22, 57}:     \"Ubiquam Co., Ltd.\",\n\t[3]byte{0, 22, 58}:     \"YVES TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 22, 59}:     \"VertexRSI/General Dynamics\",\n\t[3]byte{0, 22, 60}:     \"Rebox B.V.\",\n\t[3]byte{0, 22, 61}:     \"Tsinghua Tongfang Legend Silicon Tech. Co., Ltd.\",\n\t[3]byte{0, 22, 62}:     \"Xensource, Inc.\",\n\t[3]byte{0, 22, 63}:     \"CReTE SYSTEMS Inc.\",\n\t[3]byte{0, 22, 64}:     \"Asmobile Communication Inc.\",\n\t[3]byte{0, 22, 65}:     \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{0, 22, 66}:     \"Pangolin\",\n\t[3]byte{0, 22, 67}:     \"Sunhillo Corporation\",\n\t[3]byte{0, 22, 68}:     \"LITE-ON Technology Corp.\",\n\t[3]byte{0, 22, 69}:     \"Power Distribution, Inc.\",\n\t[3]byte{0, 22, 70}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 22, 71}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 22, 72}:     \"SSD Company Limited\",\n\t[3]byte{0, 22, 73}:     \"SetOne GmbH\",\n\t[3]byte{0, 22, 74}:     \"Vibration Technology Limited\",\n\t[3]byte{0, 22, 75}:     \"Quorion Data Systems GmbH\",\n\t[3]byte{0, 22, 76}:     \"PLANET INT Co., Ltd\",\n\t[3]byte{0, 22, 77}:     \"Alcatel-Lucent IPD\",\n\t[3]byte{0, 22, 78}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 22, 79}:     \"World Ethnic Broadcastin Inc.\",\n\t[3]byte{0, 22, 80}:     \" Kratos EPD    \",\n\t[3]byte{0, 22, 81}:     \"Exeo Systems\",\n\t[3]byte{0, 22, 82}:     \"Hoatech Technologies, Inc.\",\n\t[3]byte{0, 22, 83}:     \"LEGO System A/S IE Electronics Division\",\n\t[3]byte{0, 22, 84}:     \"Flex-P Industries Sdn. Bhd.\",\n\t[3]byte{0, 22, 85}:     \"FUHO TECHNOLOGY Co., LTD\",\n\t[3]byte{0, 22, 86}:     \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 22, 87}:     \"Aegate Ltd\",\n\t[3]byte{0, 22, 88}:     \"Fusiontech Technologies Inc.\",\n\t[3]byte{0, 22, 89}:     \"Z.M.P. RADWAG\",\n\t[3]byte{0, 22, 90}:     \"Harman Specialty Group\",\n\t[3]byte{0, 22, 91}:     \"Grip Audio\",\n\t[3]byte{0, 22, 92}:     \"Trackflow Ltd.\",\n\t[3]byte{0, 22, 93}:     \"AirDefense, Inc.\",\n\t[3]byte{0, 22, 94}:     \"Precision I/O\",\n\t[3]byte{0, 22, 95}:     \"Fairmount Automation\",\n\t[3]byte{0, 22, 96}:     \"Nortel Networks\",\n\t[3]byte{0, 22, 97}:     \"Novatium Solutions (P) Ltd\",\n\t[3]byte{0, 22, 98}:     \"Liyuh Technology Ltd.\",\n\t[3]byte{0, 22, 99}:     \"KBT Mobile\",\n\t[3]byte{0, 22, 100}:    \"Prod-El SpA\",\n\t[3]byte{0, 22, 101}:    \"Cellon France\",\n\t[3]byte{0, 22, 102}:    \"Quantier Communication Inc.\",\n\t[3]byte{0, 22, 103}:    \"A-TEC Subsystem INC.\",\n\t[3]byte{0, 22, 104}:    \"Eishin Electronics\",\n\t[3]byte{0, 22, 105}:    \"MRV Communication (Networks) LTD\",\n\t[3]byte{0, 22, 106}:    \"TPS\",\n\t[3]byte{0, 22, 107}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 22, 108}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 22, 109}:    \"Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\",\n\t[3]byte{0, 22, 110}:    \"Arbitron Inc.\",\n\t[3]byte{0, 22, 111}:    \"Intel Corporate\",\n\t[3]byte{0, 22, 112}:    \"SKNET Corporation\",\n\t[3]byte{0, 22, 113}:    \"Symphox Information Co.\",\n\t[3]byte{0, 22, 114}:    \"Zenway enterprise ltd\",\n\t[3]byte{0, 22, 115}:    \"Bury GmbH & Co. KG\",\n\t[3]byte{0, 22, 116}:    \"EuroCB (Phils.), Inc.\",\n\t[3]byte{0, 22, 117}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 22, 118}:    \"Intel Corporate\",\n\t[3]byte{0, 22, 119}:    \"Bihl + Wiedemann GmbH\",\n\t[3]byte{0, 22, 120}:    \"SHENZHEN BAOAN GAOKE ELECTRONICS CO., LTD\",\n\t[3]byte{0, 22, 121}:    \"eOn Communications\",\n\t[3]byte{0, 22, 122}:    \"Skyworth Overseas Development Ltd.\",\n\t[3]byte{0, 22, 123}:    \"Haver&Boecker\",\n\t[3]byte{0, 22, 124}:    \"iRex Technologies BV\",\n\t[3]byte{0, 22, 125}:    \"Sky-Line Information Co., Ltd.\",\n\t[3]byte{0, 22, 126}:    \"DIBOSS.CO.,LTD\",\n\t[3]byte{0, 22, 127}:    \"Bluebird Soft Inc.\",\n\t[3]byte{0, 22, 128}:    \"Bally Gaming + Systems\",\n\t[3]byte{0, 22, 129}:    \"Vector Informatik GmbH\",\n\t[3]byte{0, 22, 130}:    \"Pro Dex, Inc\",\n\t[3]byte{0, 22, 131}:    \"WEBIO International Co.,.Ltd.\",\n\t[3]byte{0, 22, 132}:    \"Donjin Co.,Ltd.\",\n\t[3]byte{0, 22, 133}:    \"Elisa Oyj\",\n\t[3]byte{0, 22, 134}:    \"Karl Storz Imaging\",\n\t[3]byte{0, 22, 135}:    \"Chubb CSC-Vendor AP\",\n\t[3]byte{0, 22, 136}:    \"ServerEngines LLC\",\n\t[3]byte{0, 22, 137}:    \"Pilkor Electronics Co., Ltd\",\n\t[3]byte{0, 22, 138}:    \"id-Confirm Inc\",\n\t[3]byte{0, 22, 139}:    \"Paralan Corporation\",\n\t[3]byte{0, 22, 140}:    \"DSL Partner AS\",\n\t[3]byte{0, 22, 141}:    \"KORWIN CO., Ltd.\",\n\t[3]byte{0, 22, 142}:    \"Vimicro corporation\",\n\t[3]byte{0, 22, 143}:    \"GN Netcom A/S\",\n\t[3]byte{0, 22, 144}:    \"J-TEK INCORPORATION\",\n\t[3]byte{0, 22, 145}:    \"Moser-Baer AG\",\n\t[3]byte{0, 22, 146}:    \"Scientific-Atlanta, Inc.\",\n\t[3]byte{0, 22, 147}:    \"PowerLink Technology Inc.\",\n\t[3]byte{0, 22, 148}:    \"Sennheiser Communications A/S\",\n\t[3]byte{0, 22, 149}:    \"AVC Technology (International) Limited\",\n\t[3]byte{0, 22, 150}:    \"QDI Technology (H.K.) Limited\",\n\t[3]byte{0, 22, 151}:    \"NEC Corporation\",\n\t[3]byte{0, 22, 152}:    \"T&A Mobile Phones\",\n\t[3]byte{0, 22, 153}:    \"Tonic DVB Marketing Ltd\",\n\t[3]byte{0, 22, 154}:    \"Quadrics Ltd\",\n\t[3]byte{0, 22, 155}:    \"Alstom Transport\",\n\t[3]byte{0, 22, 156}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 22, 157}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 22, 158}:    \"TV One Ltd\",\n\t[3]byte{0, 22, 159}:    \"Vimtron Electronics Co., Ltd.\",\n\t[3]byte{0, 22, 160}:    \"Auto-Maskin\",\n\t[3]byte{0, 22, 161}:    \"3Leaf Networks\",\n\t[3]byte{0, 22, 162}:    \"CentraLite Systems, Inc.\",\n\t[3]byte{0, 22, 163}:    \"Ingeteam Transmission&Distribution, S.A.\",\n\t[3]byte{0, 22, 164}:    \"Ezurio Ltd\",\n\t[3]byte{0, 22, 165}:    \"Tandberg Storage ASA\",\n\t[3]byte{0, 22, 166}:    \"Dovado FZ-LLC\",\n\t[3]byte{0, 22, 167}:    \"AWETA G&P\",\n\t[3]byte{0, 22, 168}:    \"CWT CO., LTD.\",\n\t[3]byte{0, 22, 169}:    \"2EI\",\n\t[3]byte{0, 22, 170}:    \"Kei Communication Technology Inc.\",\n\t[3]byte{0, 22, 171}:    \"Dansensor A/S\",\n\t[3]byte{0, 22, 172}:    \"Toho Technology Corp.\",\n\t[3]byte{0, 22, 173}:    \"BT-Links Company Limited\",\n\t[3]byte{0, 22, 174}:    \"INVENTEL\",\n\t[3]byte{0, 22, 175}:    \"Shenzhen Union Networks Equipment Co.,Ltd.\",\n\t[3]byte{0, 22, 176}:    \"VK Corporation\",\n\t[3]byte{0, 22, 177}:    \"KBS\",\n\t[3]byte{0, 22, 178}:    \"DriveCam Inc\",\n\t[3]byte{0, 22, 179}:    \"Photonicbridges (China) Co., Ltd.\",\n\t[3]byte{0, 22, 180}:    \"Private\",\n\t[3]byte{0, 22, 181}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 22, 182}:    \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 22, 183}:    \"Seoul Commtech\",\n\t[3]byte{0, 22, 184}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 22, 185}:    \"ProCurve Networking by HP\",\n\t[3]byte{0, 22, 186}:    \"WEATHERNEWS INC.\",\n\t[3]byte{0, 22, 187}:    \"Law-Chain Computer Technology Co Ltd\",\n\t[3]byte{0, 22, 188}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 22, 189}:    \"ATI Industrial Automation\",\n\t[3]byte{0, 22, 190}:    \"INFRANET, Inc.\",\n\t[3]byte{0, 22, 191}:    \"PaloDEx Group Oy\",\n\t[3]byte{0, 22, 192}:    \"Semtech Corporation\",\n\t[3]byte{0, 22, 193}:    \"Eleksen Ltd\",\n\t[3]byte{0, 22, 194}:    \"Avtec Systems Inc\",\n\t[3]byte{0, 22, 195}:    \"BA Systems Inc\",\n\t[3]byte{0, 22, 196}:    \"SiRF Technology, Inc.\",\n\t[3]byte{0, 22, 197}:    \"Shenzhen Xing Feng Industry Co.,Ltd\",\n\t[3]byte{0, 22, 198}:    \"North Atlantic Industries\",\n\t[3]byte{0, 22, 199}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 22, 200}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 22, 201}:    \"NAT Seattle, Inc.\",\n\t[3]byte{0, 22, 202}:    \"Nortel Networks\",\n\t[3]byte{0, 22, 203}:    \"Apple, Inc.\",\n\t[3]byte{0, 22, 204}:    \"Xcute Mobile Corp.\",\n\t[3]byte{0, 22, 205}:    \"HIJI HIGH-TECH CO., LTD.\",\n\t[3]byte{0, 22, 206}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 22, 207}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 22, 208}:    \"ATech elektronika d.o.o.\",\n\t[3]byte{0, 22, 209}:    \"ZAT a.s.\",\n\t[3]byte{0, 22, 210}:    \"Caspian\",\n\t[3]byte{0, 22, 211}:    \"Wistron Corporation\",\n\t[3]byte{0, 22, 212}:    \"Compal Communications, Inc.\",\n\t[3]byte{0, 22, 213}:    \"Synccom Co., Ltd\",\n\t[3]byte{0, 22, 214}:    \"TDA Tech Pty Ltd\",\n\t[3]byte{0, 22, 215}:    \"Sunways AG\",\n\t[3]byte{0, 22, 216}:    \"Senea AB\",\n\t[3]byte{0, 22, 217}:    \"NINGBO BIRD CO.,LTD.\",\n\t[3]byte{0, 22, 218}:    \"Futronic Technology Co. Ltd.\",\n\t[3]byte{0, 22, 219}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 22, 220}:    \"ARCHOS\",\n\t[3]byte{0, 22, 221}:    \"Gigabeam Corporation\",\n\t[3]byte{0, 22, 222}:    \"FAST Inc\",\n\t[3]byte{0, 22, 223}:    \"Lundinova AB\",\n\t[3]byte{0, 22, 224}:    \"3Com Ltd\",\n\t[3]byte{0, 22, 225}:    \"SiliconStor, Inc.\",\n\t[3]byte{0, 22, 226}:    \"American Fibertek, Inc.\",\n\t[3]byte{0, 22, 227}:    \"ASKEY COMPUTER CORP\",\n\t[3]byte{0, 22, 228}:    \"VANGUARD SECURITY ENGINEERING CORP.\",\n\t[3]byte{0, 22, 229}:    \"FORDLEY DEVELOPMENT LIMITED\",\n\t[3]byte{0, 22, 230}:    \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{0, 22, 231}:    \"Dynamix Promotions Limited\",\n\t[3]byte{0, 22, 232}:    \"Sigma Designs, Inc.\",\n\t[3]byte{0, 22, 233}:    \"Tiba Medical Inc\",\n\t[3]byte{0, 22, 234}:    \"Intel Corporate\",\n\t[3]byte{0, 22, 235}:    \"Intel Corporate\",\n\t[3]byte{0, 22, 236}:    \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{0, 22, 237}:    \"Utility, Inc\",\n\t[3]byte{0, 22, 238}:    \"Royaldigital Inc.\",\n\t[3]byte{0, 22, 239}:    \"Koko Fitness, Inc.\",\n\t[3]byte{0, 22, 240}:    \"Dell\",\n\t[3]byte{0, 22, 241}:    \"OmniSense, LLC\",\n\t[3]byte{0, 22, 242}:    \"Dmobile System Co., Ltd.\",\n\t[3]byte{0, 22, 243}:    \"CAST Information Co., Ltd\",\n\t[3]byte{0, 22, 244}:    \"Eidicom Co., Ltd.\",\n\t[3]byte{0, 22, 245}:    \"Dalian Golden Hualu Digital Technology Co.,Ltd\",\n\t[3]byte{0, 22, 246}:    \"Video Products Group\",\n\t[3]byte{0, 22, 247}:    \"L-3 Communications, Aviation Recorders\",\n\t[3]byte{0, 22, 248}:    \"AVIQTECH TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 22, 249}:    \"CETRTA POT, d.o.o., Kranj\",\n\t[3]byte{0, 22, 250}:    \"ECI Telecom Ltd.\",\n\t[3]byte{0, 22, 251}:    \"SHENZHEN MTC CO LTD\",\n\t[3]byte{0, 22, 252}:    \"TOHKEN CO.,LTD.\",\n\t[3]byte{0, 22, 253}:    \"Jaty Electronics\",\n\t[3]byte{0, 22, 254}:    \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{0, 22, 255}:    \"Wamin Optocomm Mfg Corp\",\n\t[3]byte{0, 23, 0}:      \"ARRIS Group, Inc.\",\n\t[3]byte{0, 23, 1}:      \"KDE, Inc.\",\n\t[3]byte{0, 23, 2}:      \"Osung Midicom Co., Ltd\",\n\t[3]byte{0, 23, 3}:      \"MOSDAN Internation Co.,Ltd\",\n\t[3]byte{0, 23, 4}:      \"Shinco Electronics Group Co.,Ltd\",\n\t[3]byte{0, 23, 5}:      \"Methode Electronics\",\n\t[3]byte{0, 23, 6}:      \"Techfaithwireless Communication Technology Limited.\",\n\t[3]byte{0, 23, 7}:      \"InGrid, Inc\",\n\t[3]byte{0, 23, 8}:      \"Hewlett Packard\",\n\t[3]byte{0, 23, 9}:      \"Exalt Communications\",\n\t[3]byte{0, 23, 10}:     \"INEW DIGITAL COMPANY\",\n\t[3]byte{0, 23, 11}:     \"Contela, Inc.\",\n\t[3]byte{0, 23, 12}:     \"Twig Com Ltd.\",\n\t[3]byte{0, 23, 13}:     \"Dust Networks Inc.\",\n\t[3]byte{0, 23, 14}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 23, 15}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 23, 16}:     \"Casa Systems Inc.\",\n\t[3]byte{0, 23, 17}:     \"Cytiva Sweden AB\",\n\t[3]byte{0, 23, 18}:     \"ISCO International\",\n\t[3]byte{0, 23, 19}:     \"Tiger NetCom\",\n\t[3]byte{0, 23, 20}:     \"BR Controls Nederland bv\",\n\t[3]byte{0, 23, 21}:     \"Qstik\",\n\t[3]byte{0, 23, 22}:     \"Qno Technology Inc.\",\n\t[3]byte{0, 23, 23}:     \"Leica Geosystems AG\",\n\t[3]byte{0, 23, 24}:     \"Vansco Electronics Oy\",\n\t[3]byte{0, 23, 25}:     \"Audiocodes USA, Inc\",\n\t[3]byte{0, 23, 26}:     \"Winegard Company\",\n\t[3]byte{0, 23, 27}:     \"Innovation Lab Corp.\",\n\t[3]byte{0, 23, 28}:     \"NT MicroSystems, Inc.\",\n\t[3]byte{0, 23, 29}:     \"DIGIT\",\n\t[3]byte{0, 23, 30}:     \"Theo Benning GmbH & Co. KG\",\n\t[3]byte{0, 23, 31}:     \"IMV Corporation\",\n\t[3]byte{0, 23, 32}:     \"Image Sensing Systems, Inc.\",\n\t[3]byte{0, 23, 33}:     \"FITRE S.p.A.\",\n\t[3]byte{0, 23, 34}:     \"Hanazeder Electronic GmbH\",\n\t[3]byte{0, 23, 35}:     \"Summit Data Communications\",\n\t[3]byte{0, 23, 36}:     \"Studer Professional Audio GmbH\",\n\t[3]byte{0, 23, 37}:     \"Liquid Computing\",\n\t[3]byte{0, 23, 38}:     \"m2c Electronic Technology Ltd.\",\n\t[3]byte{0, 23, 39}:     \"Thermo Ramsey Italia s.r.l.\",\n\t[3]byte{0, 23, 40}:     \"Selex Communications\",\n\t[3]byte{0, 23, 41}:     \"Ubicod Co.LTD\",\n\t[3]byte{0, 23, 42}:     \"Proware Technology Corp.(By Unifosa)\",\n\t[3]byte{0, 23, 43}:     \"Global Technologies Inc.\",\n\t[3]byte{0, 23, 44}:     \"TAEJIN INFOTECH\",\n\t[3]byte{0, 23, 45}:     \"Axcen Photonics Corporation\",\n\t[3]byte{0, 23, 46}:     \"FXC Inc.\",\n\t[3]byte{0, 23, 47}:     \"NeuLion Incorporated\",\n\t[3]byte{0, 23, 48}:     \"Automation Electronics\",\n\t[3]byte{0, 23, 49}:     \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 23, 50}:     \"Science-Technical Center \\\"RISSA\\\"\",\n\t[3]byte{0, 23, 51}:     \"SFR\",\n\t[3]byte{0, 23, 52}:     \"ADC Telecommunications\",\n\t[3]byte{0, 23, 53}:     \"Intel Wireless Network Group\",\n\t[3]byte{0, 23, 54}:     \"iiTron Inc.\",\n\t[3]byte{0, 23, 55}:     \"Industrie Dial Face S.p.A.\",\n\t[3]byte{0, 23, 56}:     \"International Business Machines\",\n\t[3]byte{0, 23, 57}:     \"Bright Headphone Electronics Company\",\n\t[3]byte{0, 23, 58}:     \"Cloudastructure Inc\",\n\t[3]byte{0, 23, 59}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 23, 60}:     \"Extreme Engineering Solutions\",\n\t[3]byte{0, 23, 61}:     \"Neology\",\n\t[3]byte{0, 23, 62}:     \"LeucotronEquipamentos Ltda.\",\n\t[3]byte{0, 23, 63}:     \"Belkin International Inc.\",\n\t[3]byte{0, 23, 64}:     \"Bluberi Gaming Technologies Inc\",\n\t[3]byte{0, 23, 65}:     \"DEFIDEV\",\n\t[3]byte{0, 23, 66}:     \"FUJITSU LIMITED\",\n\t[3]byte{0, 23, 67}:     \"Deck Srl\",\n\t[3]byte{0, 23, 68}:     \"Araneo Ltd.\",\n\t[3]byte{0, 23, 69}:     \"INNOTZ CO., Ltd\",\n\t[3]byte{0, 23, 70}:     \"Freedom9 Inc.\",\n\t[3]byte{0, 23, 71}:     \"Trimble\",\n\t[3]byte{0, 23, 72}:     \"Neokoros Brasil Ltda\",\n\t[3]byte{0, 23, 73}:     \"HYUNDAE YONG-O-SA CO.,LTD\",\n\t[3]byte{0, 23, 74}:     \"SOCOMEC\",\n\t[3]byte{0, 23, 75}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 23, 76}:     \"Millipore\",\n\t[3]byte{0, 23, 77}:     \"DYNAMIC NETWORK FACTORY, INC.\",\n\t[3]byte{0, 23, 78}:     \"Parama-tech Co.,Ltd.\",\n\t[3]byte{0, 23, 79}:     \"iCatch Inc.\",\n\t[3]byte{0, 23, 80}:     \"GSI Group, MicroE Systems\",\n\t[3]byte{0, 23, 81}:     \"Online Corporation\",\n\t[3]byte{0, 23, 82}:     \"DAGS, Inc\",\n\t[3]byte{0, 23, 83}:     \"nFore Technology Inc.\",\n\t[3]byte{0, 23, 84}:     \"Arkino HiTOP Corporation Limited\",\n\t[3]byte{0, 23, 85}:     \"GE Security\",\n\t[3]byte{0, 23, 86}:     \"Vinci Labs Oy\",\n\t[3]byte{0, 23, 87}:     \"RIX TECHNOLOGY LIMITED\",\n\t[3]byte{0, 23, 88}:     \"ThruVision Ltd\",\n\t[3]byte{0, 23, 89}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 23, 90}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 23, 91}:     \"ACS Solutions Switzerland Ltd.\",\n\t[3]byte{0, 23, 92}:     \"SHARP CORPORATION\",\n\t[3]byte{0, 23, 93}:     \"Dongseo system.\",\n\t[3]byte{0, 23, 94}:     \"Zed-3\",\n\t[3]byte{0, 23, 95}:     \"XENOLINK Communications Co., Ltd.\",\n\t[3]byte{0, 23, 96}:     \"Naito Densei Machida MFG.CO.,LTD\",\n\t[3]byte{0, 23, 97}:     \"Private\",\n\t[3]byte{0, 23, 98}:     \"Solar Technology, Inc.\",\n\t[3]byte{0, 23, 99}:     \"Essentia S.p.A.\",\n\t[3]byte{0, 23, 100}:    \"ATMedia GmbH\",\n\t[3]byte{0, 23, 101}:    \"Nortel Networks\",\n\t[3]byte{0, 23, 102}:    \"Accense Technology, Inc.\",\n\t[3]byte{0, 23, 103}:    \"Earforce AS\",\n\t[3]byte{0, 23, 104}:    \"Zinwave Ltd\",\n\t[3]byte{0, 23, 105}:    \"Cymphonix Corp\",\n\t[3]byte{0, 23, 106}:    \"Avago Technologies\",\n\t[3]byte{0, 23, 107}:    \"Kiyon, Inc.\",\n\t[3]byte{0, 23, 108}:    \"Pivot3, Inc.\",\n\t[3]byte{0, 23, 109}:    \"CORE CORPORATION\",\n\t[3]byte{0, 23, 110}:    \"DUCATI SISTEMI\",\n\t[3]byte{0, 23, 111}:    \"PAX Computer Technology(Shenzhen) Ltd.\",\n\t[3]byte{0, 23, 112}:    \"Arti Industrial Electronics Ltd.\",\n\t[3]byte{0, 23, 113}:    \"APD Communications Ltd\",\n\t[3]byte{0, 23, 114}:    \"ASTRO Strobel Kommunikationssysteme GmbH\",\n\t[3]byte{0, 23, 115}:    \"Laketune Technologies Co. Ltd\",\n\t[3]byte{0, 23, 116}:    \"Elesta GmbH\",\n\t[3]byte{0, 23, 117}:    \"TTE Germany GmbH\",\n\t[3]byte{0, 23, 118}:    \"Meso Scale Diagnostics, LLC\",\n\t[3]byte{0, 23, 119}:    \"Obsidian Research Corporation\",\n\t[3]byte{0, 23, 120}:    \"Central Music Co.\",\n\t[3]byte{0, 23, 121}:    \"QuickTel\",\n\t[3]byte{0, 23, 122}:    \"ASSA ABLOY AB\",\n\t[3]byte{0, 23, 123}:    \"Azalea Networks inc\",\n\t[3]byte{0, 23, 124}:    \"Smartlink Network Systems Limited\",\n\t[3]byte{0, 23, 125}:    \"IDT Technology Limited\",\n\t[3]byte{0, 23, 126}:    \"Meshcom Technologies Inc.\",\n\t[3]byte{0, 23, 127}:    \"Worldsmart Retech\",\n\t[3]byte{0, 23, 128}:    \"Applied Biosystems B.V.\",\n\t[3]byte{0, 23, 129}:    \"Greystone Data System, Inc.\",\n\t[3]byte{0, 23, 130}:    \"LoBenn Inc.\",\n\t[3]byte{0, 23, 131}:    \"Texas Instruments\",\n\t[3]byte{0, 23, 132}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 23, 133}:    \"Sparr Electronics Ltd\",\n\t[3]byte{0, 23, 134}:    \"wisembed\",\n\t[3]byte{0, 23, 135}:    \"Brother, Brother & Sons ApS\",\n\t[3]byte{0, 23, 136}:    \"Philips Lighting BV\",\n\t[3]byte{0, 23, 137}:    \"Zenitron Corporation\",\n\t[3]byte{0, 23, 138}:    \"DARTS TECHNOLOGIES CORP.\",\n\t[3]byte{0, 23, 139}:    \"Teledyne Technologies Incorporated\",\n\t[3]byte{0, 23, 140}:    \"Independent Witness, Inc\",\n\t[3]byte{0, 23, 141}:    \"Checkpoint Systems, Inc.\",\n\t[3]byte{0, 23, 142}:    \"Gunnebo Cash Automation AB\",\n\t[3]byte{0, 23, 143}:    \"NINGBO YIDONG ELECTRONIC CO.,LTD.\",\n\t[3]byte{0, 23, 144}:    \"HYUNDAI DIGITECH Co, Ltd.\",\n\t[3]byte{0, 23, 145}:    \"LinTech GmbH\",\n\t[3]byte{0, 23, 146}:    \"Falcom Wireless Comunications Gmbh\",\n\t[3]byte{0, 23, 147}:    \"Tigi Corporation\",\n\t[3]byte{0, 23, 148}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 23, 149}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 23, 150}:    \"Rittmeyer AG\",\n\t[3]byte{0, 23, 151}:    \"Telsy Elettronica S.p.A.\",\n\t[3]byte{0, 23, 152}:    \"Azonic Technology Co., LTD\",\n\t[3]byte{0, 23, 153}:    \"SmarTire Systems Inc.\",\n\t[3]byte{0, 23, 154}:    \"D-Link Corporation\",\n\t[3]byte{0, 23, 155}:    \"CHANT SINCERE CO.,LTD\",\n\t[3]byte{0, 23, 156}:    \"DEPRAG SCHULZ GMBH u. CO.\",\n\t[3]byte{0, 23, 157}:    \"Kelman Limited\",\n\t[3]byte{0, 23, 158}:    \"Sirit Inc\",\n\t[3]byte{0, 23, 159}:    \"Apricorn\",\n\t[3]byte{0, 23, 160}:    \"RoboTech srl\",\n\t[3]byte{0, 23, 161}:    \"3soft inc.\",\n\t[3]byte{0, 23, 162}:    \"Camrivox Ltd.\",\n\t[3]byte{0, 23, 163}:    \"MIX s.r.l.\",\n\t[3]byte{0, 23, 164}:    \"Hewlett Packard\",\n\t[3]byte{0, 23, 165}:    \"Ralink Technology Corp\",\n\t[3]byte{0, 23, 166}:    \"YOSIN ELECTRONICS CO., LTD.\",\n\t[3]byte{0, 23, 167}:    \"Mobile Computing Promotion Consortium\",\n\t[3]byte{0, 23, 168}:    \"EDM Corporation\",\n\t[3]byte{0, 23, 169}:    \"Sentivision\",\n\t[3]byte{0, 23, 170}:    \"elab-experience inc.\",\n\t[3]byte{0, 23, 171}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 23, 172}:    \"O'Neil Product Development Inc.\",\n\t[3]byte{0, 23, 173}:    \"AceNet Corporation\",\n\t[3]byte{0, 23, 174}:    \"GAI-Tronics\",\n\t[3]byte{0, 23, 175}:    \"Enermet\",\n\t[3]byte{0, 23, 176}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 23, 177}:    \"ACIST Medical Systems, Inc.\",\n\t[3]byte{0, 23, 178}:    \"SK Telesys\",\n\t[3]byte{0, 23, 179}:    \"Aftek Infosys Limited\",\n\t[3]byte{0, 23, 180}:    \"Remote Security Systems, LLC\",\n\t[3]byte{0, 23, 181}:    \"Peerless Systems Corporation\",\n\t[3]byte{0, 23, 182}:    \"Aquantia Corporation\",\n\t[3]byte{0, 23, 183}:    \"Tonze Technology Co.\",\n\t[3]byte{0, 23, 184}:    \"NOVATRON CO., LTD.\",\n\t[3]byte{0, 23, 185}:    \"Gambro Lundia AB\",\n\t[3]byte{0, 23, 186}:    \"SEDO CO., LTD.\",\n\t[3]byte{0, 23, 187}:    \"Syrinx Industrial Electronics\",\n\t[3]byte{0, 23, 188}:    \"Touchtunes Music Corporation\",\n\t[3]byte{0, 23, 189}:    \"Tibetsystem\",\n\t[3]byte{0, 23, 190}:    \"Tratec Telecom B.V.\",\n\t[3]byte{0, 23, 191}:    \"Coherent Research Limited\",\n\t[3]byte{0, 23, 192}:    \"PureTech Systems, Inc.\",\n\t[3]byte{0, 23, 193}:    \"CM Precision Technology LTD.\",\n\t[3]byte{0, 23, 194}:    \"ADB Broadband Italia\",\n\t[3]byte{0, 23, 195}:    \"KTF Technologies Inc.\",\n\t[3]byte{0, 23, 196}:    \"Quanta Microsystems, INC.\",\n\t[3]byte{0, 23, 197}:    \"SonicWALL\",\n\t[3]byte{0, 23, 198}:    \"Cross Match Technologies Inc\",\n\t[3]byte{0, 23, 199}:    \"MARA Systems Consulting AB\",\n\t[3]byte{0, 23, 200}:    \"KYOCERA Display Corporation\",\n\t[3]byte{0, 23, 201}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 23, 202}:    \"Qisda Corporation\",\n\t[3]byte{0, 23, 203}:    \"Juniper Networks\",\n\t[3]byte{0, 23, 204}:    \"Alcatel-Lucent\",\n\t[3]byte{0, 23, 205}:    \"CEC Wireless R&D Ltd.\",\n\t[3]byte{0, 23, 206}:    \"Screen Service Spa\",\n\t[3]byte{0, 23, 207}:    \"iMCA-GmbH\",\n\t[3]byte{0, 23, 208}:    \"Opticom Communications, LLC\",\n\t[3]byte{0, 23, 209}:    \"Nortel Networks\",\n\t[3]byte{0, 23, 210}:    \"THINLINX PTY LTD\",\n\t[3]byte{0, 23, 211}:    \"Etymotic Research, Inc.\",\n\t[3]byte{0, 23, 212}:    \"Monsoon Multimedia, Inc\",\n\t[3]byte{0, 23, 213}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 23, 214}:    \"Bluechips Microhouse Co.,Ltd.\",\n\t[3]byte{0, 23, 215}:    \"ION Geophysical Corporation Inc.\",\n\t[3]byte{0, 23, 216}:    \"Magnum Semiconductor, Inc.\",\n\t[3]byte{0, 23, 217}:    \"AAI Corporation\",\n\t[3]byte{0, 23, 218}:    \"Spans Logic\",\n\t[3]byte{0, 23, 219}:    \"CANKO TECHNOLOGIES INC.\",\n\t[3]byte{0, 23, 220}:    \"DAEMYUNG ZERO1\",\n\t[3]byte{0, 23, 221}:    \"Clipsal Australia\",\n\t[3]byte{0, 23, 222}:    \"Advantage Six Ltd\",\n\t[3]byte{0, 23, 223}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 23, 224}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 23, 225}:    \"DACOS Technologies Co., Ltd.\",\n\t[3]byte{0, 23, 226}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 23, 227}:    \"Texas Instruments\",\n\t[3]byte{0, 23, 228}:    \"Texas Instruments\",\n\t[3]byte{0, 23, 229}:    \"Texas Instruments\",\n\t[3]byte{0, 23, 230}:    \"Texas Instruments\",\n\t[3]byte{0, 23, 231}:    \"Texas Instruments\",\n\t[3]byte{0, 23, 232}:    \"Texas Instruments\",\n\t[3]byte{0, 23, 233}:    \"Texas Instruments\",\n\t[3]byte{0, 23, 234}:    \"Texas Instruments\",\n\t[3]byte{0, 23, 235}:    \"Texas Instruments\",\n\t[3]byte{0, 23, 236}:    \"Texas Instruments\",\n\t[3]byte{0, 23, 237}:    \"WooJooIT Ltd.\",\n\t[3]byte{0, 23, 238}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 23, 239}:    \"IBM Corp\",\n\t[3]byte{0, 23, 240}:    \"SZCOM Broadband Network Technology Co.,Ltd\",\n\t[3]byte{0, 23, 241}:    \"Renu Electronics Pvt Ltd\",\n\t[3]byte{0, 23, 242}:    \"Apple, Inc.\",\n\t[3]byte{0, 23, 243}:    \"Harris Corporation\",\n\t[3]byte{0, 23, 244}:    \"ZERON ALLIANCE\",\n\t[3]byte{0, 23, 245}:    \"LIG NEOPTEK\",\n\t[3]byte{0, 23, 246}:    \"Pyramid Meriden Inc.\",\n\t[3]byte{0, 23, 247}:    \"CEM Solutions Pvt Ltd\",\n\t[3]byte{0, 23, 248}:    \"Motech Industries Inc.\",\n\t[3]byte{0, 23, 249}:    \"Forcom Sp. z o.o.\",\n\t[3]byte{0, 23, 250}:    \"Microsoft Corporation\",\n\t[3]byte{0, 23, 251}:    \"FA\",\n\t[3]byte{0, 23, 252}:    \"Suprema Inc.\",\n\t[3]byte{0, 23, 253}:    \"Amulet Hotkey\",\n\t[3]byte{0, 23, 254}:    \"TALOS SYSTEM INC.\",\n\t[3]byte{0, 23, 255}:    \"PLAYLINE Co.,Ltd.\",\n\t[3]byte{0, 24, 0}:      \"UNIGRAND LTD\",\n\t[3]byte{0, 24, 1}:      \"Actiontec Electronics, Inc\",\n\t[3]byte{0, 24, 2}:      \"Alpha Networks Inc.\",\n\t[3]byte{0, 24, 3}:      \"ArcSoft Shanghai Co. LTD\",\n\t[3]byte{0, 24, 4}:      \"E-TEK DIGITAL TECHNOLOGY LIMITED\",\n\t[3]byte{0, 24, 5}:      \"Beijing InHand Networking Technology Co.,Ltd.\",\n\t[3]byte{0, 24, 6}:      \"Hokkei Industries Co., Ltd.\",\n\t[3]byte{0, 24, 7}:      \"Fanstel Corp.\",\n\t[3]byte{0, 24, 8}:      \"SightLogix, Inc.\",\n\t[3]byte{0, 24, 9}:      \"CRESYN\",\n\t[3]byte{0, 24, 10}:     \"Cisco Meraki\",\n\t[3]byte{0, 24, 11}:     \"Brilliant Telecommunications\",\n\t[3]byte{0, 24, 12}:     \"Optelian Access Networks\",\n\t[3]byte{0, 24, 13}:     \"Terabytes Server Storage Tech Corp\",\n\t[3]byte{0, 24, 14}:     \"Avega Systems\",\n\t[3]byte{0, 24, 15}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 24, 16}:     \"IPTrade S.A.\",\n\t[3]byte{0, 24, 17}:     \"Neuros Technology International, LLC.\",\n\t[3]byte{0, 24, 18}:     \"Beijing Xinwei Telecom Technology Co., Ltd.\",\n\t[3]byte{0, 24, 19}:     \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 24, 20}:     \"Mitutoyo Corporation\",\n\t[3]byte{0, 24, 21}:     \"GZ Technologies, Inc.\",\n\t[3]byte{0, 24, 22}:     \"Ubixon Co., Ltd.\",\n\t[3]byte{0, 24, 23}:     \"D. E. Shaw Research, LLC\",\n\t[3]byte{0, 24, 24}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 24, 25}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 24, 26}:     \"AVerMedia Information Inc.\",\n\t[3]byte{0, 24, 27}:     \"TaiJin Metal Co., Ltd.\",\n\t[3]byte{0, 24, 28}:     \"Exterity Limited\",\n\t[3]byte{0, 24, 29}:     \"ASIA ELECTRONICS CO.,LTD\",\n\t[3]byte{0, 24, 30}:     \"GDX Technologies Ltd.\",\n\t[3]byte{0, 24, 31}:     \"Palmmicro Communications\",\n\t[3]byte{0, 24, 32}:     \"w5networks\",\n\t[3]byte{0, 24, 33}:     \"SINDORICOH\",\n\t[3]byte{0, 24, 34}:     \"CEC TELECOM CO.,LTD.\",\n\t[3]byte{0, 24, 35}:     \"Delta Electronics, Inc.\",\n\t[3]byte{0, 24, 36}:     \"Kimaldi Electronics, S.L.\",\n\t[3]byte{0, 24, 37}:     \"Private\",\n\t[3]byte{0, 24, 38}:     \"Cale Access AB\",\n\t[3]byte{0, 24, 39}:     \"NEC UNIFIED SOLUTIONS NEDERLAND B.V.\",\n\t[3]byte{0, 24, 40}:     \"e2v technologies (UK) ltd.\",\n\t[3]byte{0, 24, 41}:     \"Gatsometer\",\n\t[3]byte{0, 24, 42}:     \"Taiwan Video & Monitor\",\n\t[3]byte{0, 24, 43}:     \"Softier\",\n\t[3]byte{0, 24, 44}:     \"Ascend Networks, Inc.\",\n\t[3]byte{0, 24, 45}:     \"Artec Design\",\n\t[3]byte{0, 24, 46}:     \"XStreamHD\",\n\t[3]byte{0, 24, 47}:     \"Texas Instruments\",\n\t[3]byte{0, 24, 48}:     \"Texas Instruments\",\n\t[3]byte{0, 24, 49}:     \"Texas Instruments\",\n\t[3]byte{0, 24, 50}:     \"Texas Instruments\",\n\t[3]byte{0, 24, 51}:     \"Texas Instruments\",\n\t[3]byte{0, 24, 52}:     \"Texas Instruments\",\n\t[3]byte{0, 24, 53}:     \"Thoratec / ITC\",\n\t[3]byte{0, 24, 54}:     \"REJ Co.,Ltd\",\n\t[3]byte{0, 24, 55}:     \"Universal ABIT Co., Ltd.\",\n\t[3]byte{0, 24, 56}:     \"PanAccess Communications,Inc.\",\n\t[3]byte{0, 24, 57}:     \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 24, 58}:     \"Westell Technologies Inc.\",\n\t[3]byte{0, 24, 59}:     \"CENITS Co., Ltd.\",\n\t[3]byte{0, 24, 60}:     \"Encore Software Limited\",\n\t[3]byte{0, 24, 61}:     \"Vertex Link Corporation\",\n\t[3]byte{0, 24, 62}:     \"Digilent, Inc\",\n\t[3]byte{0, 24, 63}:     \"2Wire Inc\",\n\t[3]byte{0, 24, 64}:     \"3 Phoenix, Inc.\",\n\t[3]byte{0, 24, 65}:     \"High Tech Computer Corp\",\n\t[3]byte{0, 24, 66}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 24, 67}:     \"Dawevision Ltd\",\n\t[3]byte{0, 24, 68}:     \"Heads Up Technologies, Inc.\",\n\t[3]byte{0, 24, 69}:     \"Pulsar-Telecom LLC.\",\n\t[3]byte{0, 24, 70}:     \"Crypto S.A.\",\n\t[3]byte{0, 24, 71}:     \"AceNet Technology Inc.\",\n\t[3]byte{0, 24, 72}:     \"Vecima Networks Inc.\",\n\t[3]byte{0, 24, 73}:     \"nVent, Schroff GmbH\",\n\t[3]byte{0, 24, 74}:     \"Catcher, Inc.\",\n\t[3]byte{0, 24, 75}:     \"Las Vegas Gaming, Inc.\",\n\t[3]byte{0, 24, 76}:     \"Bogen Communications\",\n\t[3]byte{0, 24, 77}:     \"NETGEAR\",\n\t[3]byte{0, 24, 78}:     \"Lianhe Technologies, Inc.\",\n\t[3]byte{0, 24, 79}:     \"8 Ways Technology Corp.\",\n\t[3]byte{0, 24, 80}:     \"Secfone Kft\",\n\t[3]byte{0, 24, 81}:     \"SWsoft\",\n\t[3]byte{0, 24, 82}:     \"StorLink Semiconductors, Inc.\",\n\t[3]byte{0, 24, 83}:     \"Atera Networks LTD.\",\n\t[3]byte{0, 24, 84}:     \"Argard Co., Ltd\",\n\t[3]byte{0, 24, 85}:     \"Aeromaritime Systembau GmbH\",\n\t[3]byte{0, 24, 86}:     \"EyeFi, Inc\",\n\t[3]byte{0, 24, 87}:     \"Unilever R&D\",\n\t[3]byte{0, 24, 88}:     \"TagMaster AB\",\n\t[3]byte{0, 24, 89}:     \"Strawberry Linux Co.,Ltd.\",\n\t[3]byte{0, 24, 90}:     \"uControl, Inc.\",\n\t[3]byte{0, 24, 91}:     \"Network Chemistry, Inc\",\n\t[3]byte{0, 24, 92}:     \"EDSLAB Technologies\",\n\t[3]byte{0, 24, 93}:     \"TAIGUEN TECHNOLOGY (SHEN-ZHEN) CO., LTD.\",\n\t[3]byte{0, 24, 94}:     \"Nexterm Inc.\",\n\t[3]byte{0, 24, 95}:     \"TAC Inc.\",\n\t[3]byte{0, 24, 96}:     \"SIM Technology Group Shanghai Simcom Ltd.,\",\n\t[3]byte{0, 24, 97}:     \"Ooma, Inc.\",\n\t[3]byte{0, 24, 98}:     \"Seagate Technology\",\n\t[3]byte{0, 24, 99}:     \"Veritech Electronics Limited\",\n\t[3]byte{0, 24, 100}:    \"Eaton Corporation\",\n\t[3]byte{0, 24, 101}:    \"Siemens Healthcare Diagnostics Manufacturing Ltd\",\n\t[3]byte{0, 24, 102}:    \"Leutron Vision\",\n\t[3]byte{0, 24, 103}:    \"Datalogic ADC\",\n\t[3]byte{0, 24, 104}:    \"Cisco SPVTG\",\n\t[3]byte{0, 24, 105}:    \"KINGJIM\",\n\t[3]byte{0, 24, 106}:    \"Global Link Digital Technology Co,.LTD\",\n\t[3]byte{0, 24, 107}:    \"Sambu Communics CO., LTD.\",\n\t[3]byte{0, 24, 108}:    \"Neonode AB\",\n\t[3]byte{0, 24, 109}:    \"Zhenjiang Sapphire Electronic Industry CO.\",\n\t[3]byte{0, 24, 110}:    \"3Com Ltd\",\n\t[3]byte{0, 24, 111}:    \"Setha Industria Eletronica LTDA\",\n\t[3]byte{0, 24, 112}:    \"E28 Shanghai Limited\",\n\t[3]byte{0, 24, 113}:    \"Hewlett Packard\",\n\t[3]byte{0, 24, 114}:    \"Expertise Engineering\",\n\t[3]byte{0, 24, 115}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 24, 116}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 24, 117}:    \"AnaCise Testnology Pte Ltd\",\n\t[3]byte{0, 24, 118}:    \"WowWee Ltd.\",\n\t[3]byte{0, 24, 119}:    \"Amplex A/S\",\n\t[3]byte{0, 24, 120}:    \"Mackware GmbH\",\n\t[3]byte{0, 24, 121}:    \"dSys\",\n\t[3]byte{0, 24, 122}:    \"Wiremold\",\n\t[3]byte{0, 24, 123}:    \"4NSYS Co. Ltd.\",\n\t[3]byte{0, 24, 124}:    \"INTERCROSS, LLC\",\n\t[3]byte{0, 24, 125}:    \"Armorlink Co .Ltd\",\n\t[3]byte{0, 24, 126}:    \"RGB Spectrum\",\n\t[3]byte{0, 24, 127}:    \"ZODIANET\",\n\t[3]byte{0, 24, 128}:    \"Maxim Integrated Products\",\n\t[3]byte{0, 24, 129}:    \"Buyang Electronics Industrial Co., Ltd\",\n\t[3]byte{0, 24, 130}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 24, 131}:    \"FORMOSA21 INC.\",\n\t[3]byte{0, 24, 132}:    \"Fon Technology S.L.\",\n\t[3]byte{0, 24, 133}:    \"Avigilon Corporation\",\n\t[3]byte{0, 24, 134}:    \"EL-TECH, INC.\",\n\t[3]byte{0, 24, 135}:    \"Metasystem SpA\",\n\t[3]byte{0, 24, 136}:    \"GOTIVE a.s.\",\n\t[3]byte{0, 24, 137}:    \"WinNet Solutions Limited\",\n\t[3]byte{0, 24, 138}:    \"Infinova LLC\",\n\t[3]byte{0, 24, 139}:    \"Dell Inc.\",\n\t[3]byte{0, 24, 140}:    \"Mobile Action Technology Inc.\",\n\t[3]byte{0, 24, 141}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 24, 142}:    \"Ekahau, Inc.\",\n\t[3]byte{0, 24, 143}:    \"Montgomery Technology, Inc.\",\n\t[3]byte{0, 24, 144}:    \"RadioCOM, s.r.o.\",\n\t[3]byte{0, 24, 145}:    \"Zhongshan General K-mate Electronics Co., Ltd\",\n\t[3]byte{0, 24, 146}:    \"ads-tec GmbH\",\n\t[3]byte{0, 24, 147}:    \"SHENZHEN PHOTON BROADBAND TECHNOLOGY CO.,LTD\",\n\t[3]byte{0, 24, 148}:    \"NPCore, Inc.\",\n\t[3]byte{0, 24, 149}:    \"Hansun Technologies Inc.\",\n\t[3]byte{0, 24, 150}:    \"Great Well Electronic LTD\",\n\t[3]byte{0, 24, 151}:    \"JESS-LINK PRODUCTS Co., LTD\",\n\t[3]byte{0, 24, 152}:    \"KINGSTATE ELECTRONICS CORPORATION\",\n\t[3]byte{0, 24, 153}:    \"ShenZhen jieshun Science&Technology Industry CO,LTD.\",\n\t[3]byte{0, 24, 154}:    \"HANA Micron Inc.\",\n\t[3]byte{0, 24, 155}:    \"Thomson Inc.\",\n\t[3]byte{0, 24, 156}:    \"Weldex Corporation\",\n\t[3]byte{0, 24, 157}:    \"Navcast Inc.\",\n\t[3]byte{0, 24, 158}:    \"OMNIKEY GmbH.\",\n\t[3]byte{0, 24, 159}:    \"Lenntek Corporation\",\n\t[3]byte{0, 24, 160}:    \"Cierma Ascenseurs\",\n\t[3]byte{0, 24, 161}:    \"Tiqit Computers, Inc.\",\n\t[3]byte{0, 24, 162}:    \"XIP Technology AB\",\n\t[3]byte{0, 24, 163}:    \"ZIPPY TECHNOLOGY CORP.\",\n\t[3]byte{0, 24, 164}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 24, 165}:    \"ADigit Technologies Corp.\",\n\t[3]byte{0, 24, 166}:    \"Persistent Systems, LLC\",\n\t[3]byte{0, 24, 167}:    \"Yoggie Security Systems LTD.\",\n\t[3]byte{0, 24, 168}:    \"AnNeal Technology Inc.\",\n\t[3]byte{0, 24, 169}:    \"Ethernet Direct Corporation\",\n\t[3]byte{0, 24, 170}:    \"Protec Fire Detection plc\",\n\t[3]byte{0, 24, 171}:    \"BEIJING LHWT MICROELECTRONICS INC.\",\n\t[3]byte{0, 24, 172}:    \"Shanghai Jiao Da HISYS Technology Co. Ltd.\",\n\t[3]byte{0, 24, 173}:    \"NIDEC SANKYO CORPORATION\",\n\t[3]byte{0, 24, 174}:    \"TVT CO.,LTD\",\n\t[3]byte{0, 24, 175}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 24, 176}:    \"Nortel Networks\",\n\t[3]byte{0, 24, 177}:    \"IBM Corp\",\n\t[3]byte{0, 24, 178}:    \"ADEUNIS RF\",\n\t[3]byte{0, 24, 179}:    \"TEC WizHome Co., Ltd.\",\n\t[3]byte{0, 24, 180}:    \"Dawon Media Inc.\",\n\t[3]byte{0, 24, 181}:    \"Magna Carta\",\n\t[3]byte{0, 24, 182}:    \"S3C, Inc.\",\n\t[3]byte{0, 24, 183}:    \"D3 LED, LLC\",\n\t[3]byte{0, 24, 184}:    \"New Voice International AG\",\n\t[3]byte{0, 24, 185}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 24, 186}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 24, 187}:    \"Eliwell Controls srl\",\n\t[3]byte{0, 24, 188}:    \"ZAO NVP Bolid\",\n\t[3]byte{0, 24, 189}:    \"SHENZHEN DVBWORLD TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 24, 190}:    \"ANSA Corporation\",\n\t[3]byte{0, 24, 191}:    \"Essence Technology Solution, Inc.\",\n\t[3]byte{0, 24, 192}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 24, 193}:    \"Almitec Informática e Comércio\",\n\t[3]byte{0, 24, 194}:    \"Firetide, Inc\",\n\t[3]byte{0, 24, 195}:    \"CS Corporation\",\n\t[3]byte{0, 24, 196}:    \"Raba Technologies LLC\",\n\t[3]byte{0, 24, 197}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 24, 198}:    \"OPW Fuel Management Systems\",\n\t[3]byte{0, 24, 199}:    \"Real Time Automation\",\n\t[3]byte{0, 24, 200}:    \"ISONAS Inc.\",\n\t[3]byte{0, 24, 201}:    \"EOps Technology Limited\",\n\t[3]byte{0, 24, 202}:    \"Viprinet GmbH\",\n\t[3]byte{0, 24, 203}:    \"Tecobest Technology Limited\",\n\t[3]byte{0, 24, 204}:    \"AXIOHM SAS\",\n\t[3]byte{0, 24, 205}:    \"Erae Electronics Industry Co., Ltd\",\n\t[3]byte{0, 24, 206}:    \"Dreamtech Co., Ltd\",\n\t[3]byte{0, 24, 207}:    \"Baldor Electric Company\",\n\t[3]byte{0, 24, 208}:    \"AtRoad,  A Trimble Company\",\n\t[3]byte{0, 24, 209}:    \"Siemens Home & Office Comm. Devices\",\n\t[3]byte{0, 24, 210}:    \"High-Gain Antennas LLC\",\n\t[3]byte{0, 24, 211}:    \"TEAMCAST\",\n\t[3]byte{0, 24, 212}:    \"Unified Display Interface SIG\",\n\t[3]byte{0, 24, 213}:    \"REIGNCOM\",\n\t[3]byte{0, 24, 214}:    \"Swirlnet A/S\",\n\t[3]byte{0, 24, 215}:    \"JAVAD GNSS, Inc.\",\n\t[3]byte{0, 24, 216}:    \"ARCH METER Corporation\",\n\t[3]byte{0, 24, 217}:    \"Santosha Internatonal, Inc\",\n\t[3]byte{0, 24, 218}:    \"Würth Elektronik eiSos GmbH & Co. KG\",\n\t[3]byte{0, 24, 219}:    \"EPL Technology Ltd\",\n\t[3]byte{0, 24, 220}:    \"Prostar Co., Ltd.\",\n\t[3]byte{0, 24, 221}:    \"Silicondust Engineering Ltd\",\n\t[3]byte{0, 24, 222}:    \"Intel Corporate\",\n\t[3]byte{0, 24, 223}:    \"The Morey Corporation\",\n\t[3]byte{0, 24, 224}:    \"ANAVEO\",\n\t[3]byte{0, 24, 225}:    \"Verkerk Service Systemen\",\n\t[3]byte{0, 24, 226}:    \"Topdata Sistemas de Automacao Ltda\",\n\t[3]byte{0, 24, 227}:    \"Visualgate Systems, Inc.\",\n\t[3]byte{0, 24, 228}:    \"YIGUANG\",\n\t[3]byte{0, 24, 229}:    \"Adhoco AG\",\n\t[3]byte{0, 24, 230}:    \"Computer Hardware Design SIA\",\n\t[3]byte{0, 24, 231}:    \"Cameo Communications, INC.\",\n\t[3]byte{0, 24, 232}:    \"Hacetron Corporation\",\n\t[3]byte{0, 24, 233}:    \"Numata Corporation\",\n\t[3]byte{0, 24, 234}:    \"Alltec GmbH\",\n\t[3]byte{0, 24, 235}:    \"Blue Zen Enterprises Private Limited\",\n\t[3]byte{0, 24, 236}:    \"Welding Technology Corporation\",\n\t[3]byte{0, 24, 237}:    \"Accutech Ultrasystems Co., Ltd.\",\n\t[3]byte{0, 24, 238}:    \"Videology Imaging Solutions, Inc.\",\n\t[3]byte{0, 24, 239}:    \"Escape Communications, Inc.\",\n\t[3]byte{0, 24, 240}:    \"JOYTOTO Co., Ltd.\",\n\t[3]byte{0, 24, 241}:    \"Chunichi Denshi Co.,LTD.\",\n\t[3]byte{0, 24, 242}:    \"Beijing Tianyu Communication Equipment Co., Ltd\",\n\t[3]byte{0, 24, 243}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 24, 244}:    \"EO TECHNICS Co., Ltd.\",\n\t[3]byte{0, 24, 245}:    \"Shenzhen Streaming Video Technology Company Limited\",\n\t[3]byte{0, 24, 246}:    \"Thomson Telecom Belgium\",\n\t[3]byte{0, 24, 247}:    \"Kameleon Technologies\",\n\t[3]byte{0, 24, 248}:    \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 24, 249}:    \"VVOND, Inc.\",\n\t[3]byte{0, 24, 250}:    \"Yushin Precision Equipment Co.,Ltd.\",\n\t[3]byte{0, 24, 251}:    \"Compro Technology\",\n\t[3]byte{0, 24, 252}:    \"Altec Electronic AG\",\n\t[3]byte{0, 24, 253}:    \"Optimal Technologies International Inc.\",\n\t[3]byte{0, 24, 254}:    \"Hewlett Packard\",\n\t[3]byte{0, 24, 255}:    \"PowerQuattro Co.\",\n\t[3]byte{0, 25, 0}:      \"Intelliverese - DBA Voicecom\",\n\t[3]byte{0, 25, 1}:      \"F1MEDIA\",\n\t[3]byte{0, 25, 2}:      \"Cambridge Consultants Ltd\",\n\t[3]byte{0, 25, 3}:      \"Bigfoot Networks Inc\",\n\t[3]byte{0, 25, 4}:      \"WB Electronics Sp. z o.o.\",\n\t[3]byte{0, 25, 5}:      \"SCHRACK Seconet AG\",\n\t[3]byte{0, 25, 6}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 25, 7}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 25, 8}:      \"Duaxes Corporation\",\n\t[3]byte{0, 25, 9}:      \"DEVI - Danfoss A/S\",\n\t[3]byte{0, 25, 10}:     \"HASWARE INC.\",\n\t[3]byte{0, 25, 11}:     \"Southern Vision Systems, Inc.\",\n\t[3]byte{0, 25, 12}:     \"Encore Electronics, Inc.\",\n\t[3]byte{0, 25, 13}:     \"IEEE 1394c\",\n\t[3]byte{0, 25, 14}:     \"Atech Technology Co., Ltd.\",\n\t[3]byte{0, 25, 15}:     \"Advansus Corp.\",\n\t[3]byte{0, 25, 16}:     \"Knick Elektronische Messgeraete GmbH & Co. KG\",\n\t[3]byte{0, 25, 17}:     \"Just In Mobile Information Technologies (Shanghai) Co., Ltd.\",\n\t[3]byte{0, 25, 18}:     \"Welcat Inc\",\n\t[3]byte{0, 25, 19}:     \"Chuang-Yi Network Equipment Co.Ltd.\",\n\t[3]byte{0, 25, 20}:     \"Winix Co., Ltd\",\n\t[3]byte{0, 25, 21}:     \"TECOM Co., Ltd.\",\n\t[3]byte{0, 25, 22}:     \"PayTec AG\",\n\t[3]byte{0, 25, 23}:     \"Posiflex Inc.\",\n\t[3]byte{0, 25, 24}:     \"Interactive Wear AG\",\n\t[3]byte{0, 25, 25}:     \"ASTEL Inc.\",\n\t[3]byte{0, 25, 26}:     \"IRLINK\",\n\t[3]byte{0, 25, 27}:     \"Sputnik Engineering AG\",\n\t[3]byte{0, 25, 28}:     \"Sensicast Systems\",\n\t[3]byte{0, 25, 29}:     \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 25, 30}:     \"Beyondwiz Co., Ltd.\",\n\t[3]byte{0, 25, 31}:     \"Microlink communications Inc.\",\n\t[3]byte{0, 25, 32}:     \"KUME electric Co.,Ltd.\",\n\t[3]byte{0, 25, 33}:     \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{0, 25, 34}:     \"CM Comandos Lineares\",\n\t[3]byte{0, 25, 35}:     \"Phonex Korea Co., LTD.\",\n\t[3]byte{0, 25, 36}:     \"LBNL  Engineering\",\n\t[3]byte{0, 25, 37}:     \"Intelicis Corporation\",\n\t[3]byte{0, 25, 38}:     \"BitsGen Co., Ltd.\",\n\t[3]byte{0, 25, 39}:     \"ImCoSys Ltd\",\n\t[3]byte{0, 25, 40}:     \"Siemens AG, Transportation Systems\",\n\t[3]byte{0, 25, 41}:     \"2M2B Montadora de Maquinas Bahia Brasil LTDA\",\n\t[3]byte{0, 25, 42}:     \"Antiope Associates\",\n\t[3]byte{0, 25, 43}:     \"Aclara RF Systems Inc.\",\n\t[3]byte{0, 25, 44}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 25, 45}:     \"Nokia Corporation\",\n\t[3]byte{0, 25, 46}:     \"Spectral Instruments, Inc.\",\n\t[3]byte{0, 25, 47}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 25, 48}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 25, 49}:     \"Balluff GmbH\",\n\t[3]byte{0, 25, 50}:     \"Gude Systems GmbH\",\n\t[3]byte{0, 25, 51}:     \"Strix Systems, Inc.\",\n\t[3]byte{0, 25, 52}:     \"TRENDON TOUCH TECHNOLOGY CORP.\",\n\t[3]byte{0, 25, 53}:     \"DUERR DENTAL AG\",\n\t[3]byte{0, 25, 54}:     \"STERLITE OPTICAL TECHNOLOGIES LIMITED\",\n\t[3]byte{0, 25, 55}:     \"CommerceGuard AB\",\n\t[3]byte{0, 25, 56}:     \"UMB Communications Co., Ltd.\",\n\t[3]byte{0, 25, 57}:     \"Gigamips\",\n\t[3]byte{0, 25, 58}:     \"OESOLUTIONS\",\n\t[3]byte{0, 25, 59}:     \"LigoWave\",\n\t[3]byte{0, 25, 60}:     \"HighPoint Technologies Incorporated\",\n\t[3]byte{0, 25, 61}:     \"GMC Guardian Mobility Corp.\",\n\t[3]byte{0, 25, 62}:     \"ADB Broadband Italia\",\n\t[3]byte{0, 25, 63}:     \"RDI technology(Shenzhen) Co.,LTD\",\n\t[3]byte{0, 25, 64}:     \"Rackable Systems\",\n\t[3]byte{0, 25, 65}:     \"Pitney Bowes, Inc\",\n\t[3]byte{0, 25, 66}:     \"ON SOFTWARE INTERNATIONAL LIMITED\",\n\t[3]byte{0, 25, 67}:     \"Belden\",\n\t[3]byte{0, 25, 68}:     \"Fossil Partners, L.P.\",\n\t[3]byte{0, 25, 69}:     \"RF COncepts, LLC\",\n\t[3]byte{0, 25, 70}:     \"Cianet Industria e Comercio S/A\",\n\t[3]byte{0, 25, 71}:     \"Cisco SPVTG\",\n\t[3]byte{0, 25, 72}:     \"AireSpider Networks\",\n\t[3]byte{0, 25, 73}:     \"TENTEL  COMTECH CO., LTD.\",\n\t[3]byte{0, 25, 74}:     \"TESTO AG\",\n\t[3]byte{0, 25, 75}:     \"Sagemcom Broadband SAS\",\n\t[3]byte{0, 25, 76}:     \"Fujian Stelcom information & Technology CO.,Ltd\",\n\t[3]byte{0, 25, 77}:     \"Avago Technologies Sdn Bhd\",\n\t[3]byte{0, 25, 78}:     \"Ultra Electronics - TCS (Tactical Communication Systems)\",\n\t[3]byte{0, 25, 79}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 25, 80}:     \"Harman Multimedia\",\n\t[3]byte{0, 25, 81}:     \"NETCONS, s.r.o.\",\n\t[3]byte{0, 25, 82}:     \"ACOGITO Co., Ltd\",\n\t[3]byte{0, 25, 83}:     \"Chainleader Communications Corp.\",\n\t[3]byte{0, 25, 84}:     \"Leaf Corporation.\",\n\t[3]byte{0, 25, 85}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 25, 86}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 25, 87}:     \"Saafnet Canada Inc.\",\n\t[3]byte{0, 25, 88}:     \"Bluetooth SIG, Inc.\",\n\t[3]byte{0, 25, 89}:     \"Staccato Communications Inc.\",\n\t[3]byte{0, 25, 90}:     \"Jenaer Antriebstechnik GmbH\",\n\t[3]byte{0, 25, 91}:     \"D-Link Corporation\",\n\t[3]byte{0, 25, 92}:     \"Innotech Corporation\",\n\t[3]byte{0, 25, 93}:     \"ShenZhen XinHuaTong Opto Electronics Co.,Ltd\",\n\t[3]byte{0, 25, 94}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 25, 95}:     \"Valemount Networks Corporation\",\n\t[3]byte{0, 25, 96}:     \"DoCoMo Systems, Inc.\",\n\t[3]byte{0, 25, 97}:     \"Blaupunkt  Embedded Systems GmbH\",\n\t[3]byte{0, 25, 98}:     \"Commerciant, LP\",\n\t[3]byte{0, 25, 99}:     \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 25, 100}:    \"Doorking Inc.\",\n\t[3]byte{0, 25, 101}:    \"YuHua TelTech (ShangHai) Co., Ltd.\",\n\t[3]byte{0, 25, 102}:    \"Asiarock Technology Limited\",\n\t[3]byte{0, 25, 103}:    \"TELDAT Sp.J.\",\n\t[3]byte{0, 25, 104}:    \"Digital Video Networks(Shanghai) CO. LTD.\",\n\t[3]byte{0, 25, 105}:    \"Nortel Networks\",\n\t[3]byte{0, 25, 106}:    \"MikroM GmbH\",\n\t[3]byte{0, 25, 107}:    \"Danpex Corporation\",\n\t[3]byte{0, 25, 108}:    \"ETROVISION TECHNOLOGY\",\n\t[3]byte{0, 25, 109}:    \"Raybit Systems Korea, Inc\",\n\t[3]byte{0, 25, 110}:    \"Metacom (Pty) Ltd.\",\n\t[3]byte{0, 25, 111}:    \"SensoPart GmbH\",\n\t[3]byte{0, 25, 112}:    \"Z-Com, Inc.\",\n\t[3]byte{0, 25, 113}:    \"Guangzhou Unicomp Technology Co.,Ltd\",\n\t[3]byte{0, 25, 114}:    \"Plexus (Xiamen) Co.,ltd.\",\n\t[3]byte{0, 25, 115}:    \"Zeugma Systems\",\n\t[3]byte{0, 25, 116}:    \"16063\",\n\t[3]byte{0, 25, 117}:    \"Beijing Huisen networks technology Inc\",\n\t[3]byte{0, 25, 118}:    \"Xipher Technologies, LLC\",\n\t[3]byte{0, 25, 119}:    \"Extreme Networks, Inc.\",\n\t[3]byte{0, 25, 120}:    \"Datum Systems, Inc.\",\n\t[3]byte{0, 25, 121}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 25, 122}:    \"MAZeT GmbH\",\n\t[3]byte{0, 25, 123}:    \"Picotest Corp.\",\n\t[3]byte{0, 25, 124}:    \"Riedel Communications GmbH\",\n\t[3]byte{0, 25, 125}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 25, 126}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 25, 127}:    \"PLANTRONICS, INC.\",\n\t[3]byte{0, 25, 128}:    \"Gridpoint Systems\",\n\t[3]byte{0, 25, 129}:    \"Vivox Inc\",\n\t[3]byte{0, 25, 130}:    \"SmarDTV\",\n\t[3]byte{0, 25, 131}:    \"CCT R&D Limited\",\n\t[3]byte{0, 25, 132}:    \"ESTIC Corporation\",\n\t[3]byte{0, 25, 133}:    \"IT Watchdogs, Inc\",\n\t[3]byte{0, 25, 134}:    \"Cheng Hongjian\",\n\t[3]byte{0, 25, 135}:    \"Panasonic Mobile Communications Co.,Ltd.\",\n\t[3]byte{0, 25, 136}:    \"Wi2Wi, Inc\",\n\t[3]byte{0, 25, 137}:    \"Sonitrol Corporation\",\n\t[3]byte{0, 25, 138}:    \"Northrop Grumman Systems Corp.\",\n\t[3]byte{0, 25, 139}:    \"Novera Optics Korea, Inc.\",\n\t[3]byte{0, 25, 140}:    \"iXSea\",\n\t[3]byte{0, 25, 141}:    \"Ocean Optics, Inc.\",\n\t[3]byte{0, 25, 142}:    \"Oticon A/S\",\n\t[3]byte{0, 25, 143}:    \"Nokia Bell N.V.\",\n\t[3]byte{0, 25, 144}:    \"ELM DATA Co., Ltd.\",\n\t[3]byte{0, 25, 145}:    \"avinfo\",\n\t[3]byte{0, 25, 146}:    \"Adtran Inc\",\n\t[3]byte{0, 25, 147}:    \"Changshu Switchgear MFG. Co.,Ltd. (Former Changshu Switchgea\",\n\t[3]byte{0, 25, 148}:    \"Jorjin Technologies Inc.\",\n\t[3]byte{0, 25, 149}:    \"Jurong Hi-Tech (Suzhou)Co.ltd\",\n\t[3]byte{0, 25, 150}:    \"TurboChef Technologies Inc.\",\n\t[3]byte{0, 25, 151}:    \"Soft Device Sdn Bhd\",\n\t[3]byte{0, 25, 152}:    \"SATO CORPORATION\",\n\t[3]byte{0, 25, 153}:    \"Fujitsu Technology Solutions GmbH\",\n\t[3]byte{0, 25, 154}:    \"EDO-EVI\",\n\t[3]byte{0, 25, 155}:    \"Diversified Technical Systems, Inc.\",\n\t[3]byte{0, 25, 156}:    \"CTRING\",\n\t[3]byte{0, 25, 157}:    \"Vizio, Inc\",\n\t[3]byte{0, 25, 158}:    \"Nifty\",\n\t[3]byte{0, 25, 159}:    \"DKT A/S\",\n\t[3]byte{0, 25, 160}:    \"NIHON DATA SYSTENS, INC.\",\n\t[3]byte{0, 25, 161}:    \"LG INFORMATION & COMM.\",\n\t[3]byte{0, 25, 162}:    \"ORDYN TECHNOLOGIES\",\n\t[3]byte{0, 25, 163}:    \"asteel electronique atlantique\",\n\t[3]byte{0, 25, 164}:    \"Austar Technology (hang zhou) Co.,Ltd\",\n\t[3]byte{0, 25, 165}:    \"RadarFind Corporation\",\n\t[3]byte{0, 25, 166}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 25, 167}:    \"ITU-T\",\n\t[3]byte{0, 25, 168}:    \"WiQuest Communications\",\n\t[3]byte{0, 25, 169}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 25, 170}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 25, 171}:    \"Raycom CO ., LTD\",\n\t[3]byte{0, 25, 172}:    \"GSP SYSTEMS Inc.\",\n\t[3]byte{0, 25, 173}:    \"BOBST SA\",\n\t[3]byte{0, 25, 174}:    \"Hopling Technologies b.v.\",\n\t[3]byte{0, 25, 175}:    \"Rigol Technologies, Inc.\",\n\t[3]byte{0, 25, 176}:    \"HanYang System\",\n\t[3]byte{0, 25, 177}:    \"Arrow7 Corporation\",\n\t[3]byte{0, 25, 178}:    \"XYnetsoft Co.,Ltd\",\n\t[3]byte{0, 25, 179}:    \"Stanford Research Systems\",\n\t[3]byte{0, 25, 180}:    \"Intellio Ltd\",\n\t[3]byte{0, 25, 181}:    \"Famar Fueguina S.A.\",\n\t[3]byte{0, 25, 182}:    \"Euro Emme s.r.l.\",\n\t[3]byte{0, 25, 183}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 25, 184}:    \"Boundary Devices\",\n\t[3]byte{0, 25, 185}:    \"Dell Inc.\",\n\t[3]byte{0, 25, 186}:    \"Paradox Security Systems Ltd\",\n\t[3]byte{0, 25, 187}:    \"Hewlett Packard\",\n\t[3]byte{0, 25, 188}:    \"ELECTRO CHANCE SRL\",\n\t[3]byte{0, 25, 189}:    \"New Media Life\",\n\t[3]byte{0, 25, 190}:    \"Altai Technologies Limited\",\n\t[3]byte{0, 25, 191}:    \"Citiway technology Co.,ltd\",\n\t[3]byte{0, 25, 192}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 25, 193}:    \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{0, 25, 194}:    \"Equustek Solutions, Inc.\",\n\t[3]byte{0, 25, 195}:    \"Qualitrol\",\n\t[3]byte{0, 25, 196}:    \"Infocrypt Inc.\",\n\t[3]byte{0, 25, 197}:    \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{0, 25, 198}:    \"zte corporation\",\n\t[3]byte{0, 25, 199}:    \"Cambridge Industries(Group) Co.,Ltd.\",\n\t[3]byte{0, 25, 200}:    \"AnyDATA Corporation\",\n\t[3]byte{0, 25, 201}:    \"S&C ELECTRIC COMPANY\",\n\t[3]byte{0, 25, 202}:    \"Broadata Communications, Inc\",\n\t[3]byte{0, 25, 203}:    \"Zyxel Communications Corporation\",\n\t[3]byte{0, 25, 204}:    \"RCG (HK) Ltd\",\n\t[3]byte{0, 25, 205}:    \"Chengdu ethercom information technology Ltd.\",\n\t[3]byte{0, 25, 206}:    \"Progressive Gaming International\",\n\t[3]byte{0, 25, 207}:    \"SALICRU, S.A.\",\n\t[3]byte{0, 25, 208}:    \"Cathexis\",\n\t[3]byte{0, 25, 209}:    \"Intel Corporate\",\n\t[3]byte{0, 25, 210}:    \"Intel Corporate\",\n\t[3]byte{0, 25, 211}:    \"TRAK Microwave\",\n\t[3]byte{0, 25, 212}:    \"ICX Technologies\",\n\t[3]byte{0, 25, 213}:    \"IP Innovations, Inc.\",\n\t[3]byte{0, 25, 214}:    \"LS Cable and System Ltd.\",\n\t[3]byte{0, 25, 215}:    \"FORTUNETEK CO., LTD\",\n\t[3]byte{0, 25, 216}:    \"MAXFOR\",\n\t[3]byte{0, 25, 217}:    \"Zeutschel GmbH\",\n\t[3]byte{0, 25, 218}:    \"Welltrans O&E Technology Co. , Ltd.\",\n\t[3]byte{0, 25, 219}:    \"MICRO-STAR INTERNATIONAL CO., LTD.\",\n\t[3]byte{0, 25, 220}:    \"ENENSYS Technologies\",\n\t[3]byte{0, 25, 221}:    \"FEI-Zyfer, Inc.\",\n\t[3]byte{0, 25, 222}:    \"MOBITEK\",\n\t[3]byte{0, 25, 223}:    \"Thomson Inc.\",\n\t[3]byte{0, 25, 224}:    \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{0, 25, 225}:    \"Nortel Networks\",\n\t[3]byte{0, 25, 226}:    \"Juniper Networks\",\n\t[3]byte{0, 25, 227}:    \"Apple, Inc.\",\n\t[3]byte{0, 25, 228}:    \"2Wire Inc\",\n\t[3]byte{0, 25, 229}:    \"Lynx Studio Technology, Inc.\",\n\t[3]byte{0, 25, 230}:    \"TOYO MEDIC CO.,LTD.\",\n\t[3]byte{0, 25, 231}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 25, 232}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 25, 233}:    \"S-Information Technolgy, Co., Ltd.\",\n\t[3]byte{0, 25, 234}:    \"TeraMage Technologies Co., Ltd.\",\n\t[3]byte{0, 25, 235}:    \"Pyronix Ltd\",\n\t[3]byte{0, 25, 236}:    \"Sagamore Systems, Inc.\",\n\t[3]byte{0, 25, 237}:    \"Axesstel Inc.\",\n\t[3]byte{0, 25, 238}:    \"CARLO GAVAZZI CONTROLS SPA-Controls Division\",\n\t[3]byte{0, 25, 239}:    \"SHENZHEN LINNKING ELECTRONICS CO.,LTD\",\n\t[3]byte{0, 25, 240}:    \"UNIONMAN TECHNOLOGY CO.,LTD\",\n\t[3]byte{0, 25, 241}:    \"Star Communication Network Technology Co.,Ltd\",\n\t[3]byte{0, 25, 242}:    \"Teradyne K.K.\",\n\t[3]byte{0, 25, 243}:    \"Cetis, Inc\",\n\t[3]byte{0, 25, 244}:    \"Convergens Oy Ltd\",\n\t[3]byte{0, 25, 245}:    \"Imagination Technologies Ltd\",\n\t[3]byte{0, 25, 246}:    \"Acconet (PTE) Ltd\",\n\t[3]byte{0, 25, 247}:    \"Onset Computer Corporation\",\n\t[3]byte{0, 25, 248}:    \"Embedded Systems Design, Inc.\",\n\t[3]byte{0, 25, 249}:    \"TDK-Lambda\",\n\t[3]byte{0, 25, 250}:    \"Cable Vision Electronics CO., LTD.\",\n\t[3]byte{0, 25, 251}:    \"BSkyB Ltd\",\n\t[3]byte{0, 25, 252}:    \"PT. Ufoakses Sukses Luarbiasa\",\n\t[3]byte{0, 25, 253}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 25, 254}:    \"SHENZHEN SEECOMM TECHNOLOGY CO.,LTD.\",\n\t[3]byte{0, 25, 255}:    \"Finnzymes\",\n\t[3]byte{0, 26, 0}:      \"MATRIX INC.\",\n\t[3]byte{0, 26, 1}:      \"Smiths Medical\",\n\t[3]byte{0, 26, 2}:      \"SECURE CARE PRODUCTS, INC\",\n\t[3]byte{0, 26, 3}:      \"Angel Electronics Co., Ltd.\",\n\t[3]byte{0, 26, 4}:      \"Interay Solutions BV\",\n\t[3]byte{0, 26, 5}:      \"OPTIBASE LTD\",\n\t[3]byte{0, 26, 6}:      \"OpVista, Inc.\",\n\t[3]byte{0, 26, 7}:      \"Arecont Vision\",\n\t[3]byte{0, 26, 8}:      \"Simoco Ltd.\",\n\t[3]byte{0, 26, 9}:      \"Wayfarer Transit Systems Ltd\",\n\t[3]byte{0, 26, 10}:     \"Adaptive Micro-Ware Inc.\",\n\t[3]byte{0, 26, 11}:     \"BONA TECHNOLOGY INC.\",\n\t[3]byte{0, 26, 12}:     \"Swe-Dish Satellite Systems AB\",\n\t[3]byte{0, 26, 13}:     \"HandHeld entertainment, Inc.\",\n\t[3]byte{0, 26, 14}:     \"Cheng Uei Precision Industry Co.,Ltd\",\n\t[3]byte{0, 26, 15}:     \"Sistemas Avanzados de Control, S.A.\",\n\t[3]byte{0, 26, 16}:     \"LUCENT TRANS ELECTRONICS CO.,LTD\",\n\t[3]byte{0, 26, 17}:     \"Google, Inc.\",\n\t[3]byte{0, 26, 18}:     \"Essilor\",\n\t[3]byte{0, 26, 19}:     \"Wanlida Group Co., LTD\",\n\t[3]byte{0, 26, 20}:     \"Xin Hua Control Engineering Co.,Ltd.\",\n\t[3]byte{0, 26, 21}:     \"gemalto e-Payment\",\n\t[3]byte{0, 26, 22}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 26, 23}:     \"Teak Technologies, Inc.\",\n\t[3]byte{0, 26, 24}:     \"Advanced Simulation Technology inc.\",\n\t[3]byte{0, 26, 25}:     \"Computer Engineering Limited\",\n\t[3]byte{0, 26, 26}:     \"Gentex Corporation/Electro-Acoustic Products\",\n\t[3]byte{0, 26, 27}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 26, 28}:     \"GT&T Engineering Pte Ltd\",\n\t[3]byte{0, 26, 29}:     \"PChome Online Inc.\",\n\t[3]byte{0, 26, 30}:     \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{0, 26, 31}:     \"Coastal Environmental Systems\",\n\t[3]byte{0, 26, 32}:     \"CMOTECH Co. Ltd.\",\n\t[3]byte{0, 26, 33}:     \"Brookhuis Applied Technologies BV\",\n\t[3]byte{0, 26, 34}:     \"eQ-3 Entwicklung GmbH\",\n\t[3]byte{0, 26, 35}:     \"Ice Qube, Inc\",\n\t[3]byte{0, 26, 36}:     \"Galaxy Telecom Technologies Ltd\",\n\t[3]byte{0, 26, 37}:     \"DELTA DORE\",\n\t[3]byte{0, 26, 38}:     \"Deltanode Solutions AB\",\n\t[3]byte{0, 26, 39}:     \"Ubistar\",\n\t[3]byte{0, 26, 40}:     \"ASWT Co., LTD. Taiwan Branch H.K.\",\n\t[3]byte{0, 26, 41}:     \"Johnson Outdoors Marine Electronics d/b/a Minnkota\",\n\t[3]byte{0, 26, 42}:     \"Arcadyan Technology Corporation\",\n\t[3]byte{0, 26, 43}:     \"Ayecom Technology Co., Ltd.\",\n\t[3]byte{0, 26, 44}:     \"SATEC Co.,LTD\",\n\t[3]byte{0, 26, 45}:     \"The Navvo Group\",\n\t[3]byte{0, 26, 46}:     \"Ziova Coporation\",\n\t[3]byte{0, 26, 47}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 26, 48}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 26, 49}:     \"SCAN COIN AB\",\n\t[3]byte{0, 26, 50}:     \"ACTIVA MULTIMEDIA\",\n\t[3]byte{0, 26, 51}:     \"ASI Communications, Inc.\",\n\t[3]byte{0, 26, 52}:     \"Konka Group Co., Ltd.\",\n\t[3]byte{0, 26, 53}:     \"BARTEC GmbH\",\n\t[3]byte{0, 26, 54}:     \"Aipermon GmbH & Co. KG\",\n\t[3]byte{0, 26, 55}:     \"Lear Corporation\",\n\t[3]byte{0, 26, 56}:     \"Sanmina-SCI\",\n\t[3]byte{0, 26, 57}:     \"Merten GmbH&CoKG\",\n\t[3]byte{0, 26, 58}:     \"Dongahelecomm\",\n\t[3]byte{0, 26, 59}:     \"Doah Elecom Inc.\",\n\t[3]byte{0, 26, 60}:     \"Technowave Ltd.\",\n\t[3]byte{0, 26, 61}:     \"Ajin Vision Co.,Ltd\",\n\t[3]byte{0, 26, 62}:     \"Faster Technology LLC\",\n\t[3]byte{0, 26, 63}:     \"Intelbras\",\n\t[3]byte{0, 26, 64}:     \"A-FOUR TECH CO., LTD.\",\n\t[3]byte{0, 26, 65}:     \"INOCOVA Co.,Ltd\",\n\t[3]byte{0, 26, 66}:     \"Techcity Technology co., Ltd.\",\n\t[3]byte{0, 26, 67}:     \"Logical Link Communications\",\n\t[3]byte{0, 26, 68}:     \"JWTrading Co., Ltd\",\n\t[3]byte{0, 26, 69}:     \"GN Netcom A/S\",\n\t[3]byte{0, 26, 70}:     \"Digital Multimedia Technology Co., Ltd\",\n\t[3]byte{0, 26, 71}:     \"Agami Systems, Inc.\",\n\t[3]byte{0, 26, 72}:     \"Takacom Corporation\",\n\t[3]byte{0, 26, 73}:     \"Micro Vision Co.,LTD\",\n\t[3]byte{0, 26, 74}:     \"Qumranet Inc.\",\n\t[3]byte{0, 26, 75}:     \"Hewlett Packard\",\n\t[3]byte{0, 26, 76}:     \"Crossbow Technology, Inc\",\n\t[3]byte{0, 26, 77}:     \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{0, 26, 78}:     \"NTI AG / LinMot\",\n\t[3]byte{0, 26, 79}:     \"AVM GmbH\",\n\t[3]byte{0, 26, 80}:     \"PheeNet Technology Corp.\",\n\t[3]byte{0, 26, 81}:     \"Alfred Mann Foundation\",\n\t[3]byte{0, 26, 82}:     \"Meshlinx Wireless Inc.\",\n\t[3]byte{0, 26, 83}:     \"Zylaya\",\n\t[3]byte{0, 26, 84}:     \"Hip Shing Electronics Ltd.\",\n\t[3]byte{0, 26, 85}:     \"ACA-Digital Corporation\",\n\t[3]byte{0, 26, 86}:     \"ViewTel Co,. Ltd.\",\n\t[3]byte{0, 26, 87}:     \"Matrix Design Group, LLC\",\n\t[3]byte{0, 26, 88}:     \"CCV Deutschland GmbH - Celectronic eHealth Div.\",\n\t[3]byte{0, 26, 89}:     \"Ircona\",\n\t[3]byte{0, 26, 90}:     \"Korea Electric Power Data Network  (KDN) Co., Ltd\",\n\t[3]byte{0, 26, 91}:     \"NetCare Service Co., Ltd.\",\n\t[3]byte{0, 26, 92}:     \"Euchner GmbH+Co. KG\",\n\t[3]byte{0, 26, 93}:     \"Mobinnova Corp.\",\n\t[3]byte{0, 26, 94}:     \"Thincom Technology Co.,Ltd\",\n\t[3]byte{0, 26, 95}:     \"KitWorks.fi Ltd.\",\n\t[3]byte{0, 26, 96}:     \"Wave Electronics Co.,Ltd.\",\n\t[3]byte{0, 26, 97}:     \"PacStar Corp.\",\n\t[3]byte{0, 26, 98}:     \"Data Robotics, Incorporated\",\n\t[3]byte{0, 26, 99}:     \"Elster Solutions, LLC,\",\n\t[3]byte{0, 26, 100}:    \"IBM Corp\",\n\t[3]byte{0, 26, 101}:    \"Seluxit\",\n\t[3]byte{0, 26, 102}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 26, 103}:    \"Infinite QL Sdn Bhd\",\n\t[3]byte{0, 26, 104}:    \"Weltec Enterprise Co., Ltd.\",\n\t[3]byte{0, 26, 105}:    \"Wuhan Yangtze Optical Technology CO.,Ltd.\",\n\t[3]byte{0, 26, 106}:    \"Tranzas, Inc.\",\n\t[3]byte{0, 26, 107}:    \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{0, 26, 108}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 26, 109}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 26, 110}:    \"Impro Technologies\",\n\t[3]byte{0, 26, 111}:    \"MI.TEL s.r.l.\",\n\t[3]byte{0, 26, 112}:    \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 26, 113}:    \"Diostech Co., Ltd.\",\n\t[3]byte{0, 26, 114}:    \"Mosart Semiconductor Corp.\",\n\t[3]byte{0, 26, 115}:    \"Gemtek Technology Co., Ltd.\",\n\t[3]byte{0, 26, 116}:    \"Procare International Co\",\n\t[3]byte{0, 26, 117}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 26, 118}:    \"SDT information Technology Co.,LTD.\",\n\t[3]byte{0, 26, 119}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 26, 120}:    \"ubtos\",\n\t[3]byte{0, 26, 121}:    \"TELECOMUNICATION TECHNOLOGIES LTD.\",\n\t[3]byte{0, 26, 122}:    \"Lismore Instruments Limited\",\n\t[3]byte{0, 26, 123}:    \"Teleco, Inc.\",\n\t[3]byte{0, 26, 124}:    \"Hirschmann Multimedia B.V.\",\n\t[3]byte{0, 26, 125}:    \"cyber-blue(HK)Ltd\",\n\t[3]byte{0, 26, 126}:    \"LN Srithai Comm Ltd.\",\n\t[3]byte{0, 26, 127}:    \"GCI Science & Technology Co.,LTD\",\n\t[3]byte{0, 26, 128}:    \"Sony Corporation\",\n\t[3]byte{0, 26, 129}:    \"Zelax\",\n\t[3]byte{0, 26, 130}:    \"PROBA Building Automation Co.,LTD\",\n\t[3]byte{0, 26, 131}:    \"Pegasus Technologies Inc.\",\n\t[3]byte{0, 26, 132}:    \"V One Multimedia Pte Ltd\",\n\t[3]byte{0, 26, 133}:    \"NV Michel Van de Wiele\",\n\t[3]byte{0, 26, 134}:    \"AdvancedIO Systems Inc\",\n\t[3]byte{0, 26, 135}:    \"Canhold International Limited\",\n\t[3]byte{0, 26, 136}:    \"Venergy,Co,Ltd\",\n\t[3]byte{0, 26, 137}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 26, 138}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 26, 139}:    \"CHUNIL ELECTRIC IND., CO.\",\n\t[3]byte{0, 26, 140}:    \"Sophos Ltd\",\n\t[3]byte{0, 26, 141}:    \"AVECS Bergen GmbH\",\n\t[3]byte{0, 26, 142}:    \"3Way Networks Ltd\",\n\t[3]byte{0, 26, 143}:    \"Nortel Networks\",\n\t[3]byte{0, 26, 144}:    \"Trópico Sistemas e Telecomunicações da Amazônia LTDA. \",\n\t[3]byte{0, 26, 145}:    \"FusionDynamic Ltd.\",\n\t[3]byte{0, 26, 146}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 26, 147}:    \"ERCO Leuchten GmbH\",\n\t[3]byte{0, 26, 148}:    \"Votronic GmbH\",\n\t[3]byte{0, 26, 149}:    \"Hisense Mobile Communications Technoligy Co.,Ltd.\",\n\t[3]byte{0, 26, 150}:    \"ECLER S.A.\",\n\t[3]byte{0, 26, 151}:    \"fitivision technology Inc.\",\n\t[3]byte{0, 26, 152}:    \"Asotel Communication Limited Taiwan Branch\",\n\t[3]byte{0, 26, 153}:    \"Smarty (HZ) Information Electronics Co., Ltd\",\n\t[3]byte{0, 26, 154}:    \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{0, 26, 155}:    \"ADEC & Parter AG\",\n\t[3]byte{0, 26, 156}:    \"RightHand Technologies, Inc.\",\n\t[3]byte{0, 26, 157}:    \"Skipper Wireless, Inc.\",\n\t[3]byte{0, 26, 158}:    \"ICON Digital International Limited\",\n\t[3]byte{0, 26, 159}:    \"A-Link Ltd\",\n\t[3]byte{0, 26, 160}:    \"Dell Inc.\",\n\t[3]byte{0, 26, 161}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 26, 162}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 26, 163}:    \"DELORME\",\n\t[3]byte{0, 26, 164}:    \"Future University-Hakodate\",\n\t[3]byte{0, 26, 165}:    \"BRN Phoenix\",\n\t[3]byte{0, 26, 166}:    \"Telefunken Radio Communication Systems GmbH &CO.KG\",\n\t[3]byte{0, 26, 167}:    \"Torian Wireless\",\n\t[3]byte{0, 26, 168}:    \"Mamiya Digital Imaging Co., Ltd.\",\n\t[3]byte{0, 26, 169}:    \"FUJIAN STAR-NET COMMUNICATION CO.,LTD\",\n\t[3]byte{0, 26, 170}:    \"Analogic Corp.\",\n\t[3]byte{0, 26, 171}:    \"eWings s.r.l.\",\n\t[3]byte{0, 26, 172}:    \"Corelatus AB\",\n\t[3]byte{0, 26, 173}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 26, 174}:    \"Savant Systems LLC\",\n\t[3]byte{0, 26, 175}:    \"BLUSENS TECHNOLOGY\",\n\t[3]byte{0, 26, 176}:    \"Signal Networks Pvt. Ltd.,\",\n\t[3]byte{0, 26, 177}:    \"Asia Pacific Satellite Industries Co., Ltd.\",\n\t[3]byte{0, 26, 178}:    \"Cyber Solutions Inc.\",\n\t[3]byte{0, 26, 179}:    \"VISIONITE INC.\",\n\t[3]byte{0, 26, 180}:    \"FFEI Ltd.\",\n\t[3]byte{0, 26, 181}:    \"Home Network System\",\n\t[3]byte{0, 26, 182}:    \"Texas Instruments\",\n\t[3]byte{0, 26, 183}:    \"Ethos Networks LTD.\",\n\t[3]byte{0, 26, 184}:    \"Anseri Corporation\",\n\t[3]byte{0, 26, 185}:    \"PMC\",\n\t[3]byte{0, 26, 186}:    \"Caton Overseas Limited\",\n\t[3]byte{0, 26, 187}:    \"Fontal Technology Incorporation\",\n\t[3]byte{0, 26, 188}:    \"U4EA Technologies Ltd\",\n\t[3]byte{0, 26, 189}:    \"Impatica Inc.\",\n\t[3]byte{0, 26, 190}:    \"COMPUTER HI-TECH INC.\",\n\t[3]byte{0, 26, 191}:    \"TRUMPF Laser Marking Systems AG\",\n\t[3]byte{0, 26, 192}:    \"JOYBIEN TECHNOLOGIES CO., LTD.\",\n\t[3]byte{0, 26, 193}:    \"3Com Ltd\",\n\t[3]byte{0, 26, 194}:    \"YEC Co.,Ltd.\",\n\t[3]byte{0, 26, 195}:    \"Scientific-Atlanta, Inc\",\n\t[3]byte{0, 26, 196}:    \"2Wire Inc\",\n\t[3]byte{0, 26, 197}:    \"Keysight Technologies, Inc.\",\n\t[3]byte{0, 26, 198}:    \"Micro Control Designs\",\n\t[3]byte{0, 26, 199}:    \"UNIPOINT\",\n\t[3]byte{0, 26, 200}:    \"ISL (Instrumentation Scientifique de Laboratoire)\",\n\t[3]byte{0, 26, 201}:    \"SUZUKEN CO.,LTD\",\n\t[3]byte{0, 26, 202}:    \"Tilera Corporation\",\n\t[3]byte{0, 26, 203}:    \"Autocom Products Ltd\",\n\t[3]byte{0, 26, 204}:    \"Celestial Semiconductor, Ltd\",\n\t[3]byte{0, 26, 205}:    \"Tidel Engineering LP\",\n\t[3]byte{0, 26, 206}:    \"YUPITERU CORPORATION\",\n\t[3]byte{0, 26, 207}:    \"C.T. ELETTRONICA\",\n\t[3]byte{0, 26, 208}:    \"Albis Technologies AG\",\n\t[3]byte{0, 26, 209}:    \"FARGO CO., LTD.\",\n\t[3]byte{0, 26, 210}:    \"Eletronica Nitron Ltda\",\n\t[3]byte{0, 26, 211}:    \"Vamp Ltd.\",\n\t[3]byte{0, 26, 212}:    \"iPOX Technology Co., Ltd.\",\n\t[3]byte{0, 26, 213}:    \"KMC CHAIN INDUSTRIAL CO., LTD.\",\n\t[3]byte{0, 26, 214}:    \"JIAGNSU AETNA ELECTRIC CO.,LTD\",\n\t[3]byte{0, 26, 215}:    \"Christie Digital Systems, Inc.\",\n\t[3]byte{0, 26, 216}:    \"AlsterAero GmbH\",\n\t[3]byte{0, 26, 217}:    \"International Broadband Electric Communications, Inc.\",\n\t[3]byte{0, 26, 218}:    \"Biz-2-Me Inc.\",\n\t[3]byte{0, 26, 219}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 26, 220}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 26, 221}:    \"PePWave Ltd\",\n\t[3]byte{0, 26, 222}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 26, 223}:    \"Interactivetv Pty Limited\",\n\t[3]byte{0, 26, 224}:    \"Mythology Tech Express Inc.\",\n\t[3]byte{0, 26, 225}:    \"EDGE ACCESS INC\",\n\t[3]byte{0, 26, 226}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 26, 227}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 26, 228}:    \"Medicis Technologies Corporation\",\n\t[3]byte{0, 26, 229}:    \"Mvox Technologies Inc.\",\n\t[3]byte{0, 26, 230}:    \"Atlanta Advanced Communications Holdings Limited\",\n\t[3]byte{0, 26, 231}:    \"Aztek Networks, Inc.\",\n\t[3]byte{0, 26, 232}:    \"Unify Software and Solutions GmbH & Co. KG\",\n\t[3]byte{0, 26, 233}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 26, 234}:    \"Radio Terminal Systems Pty Ltd\",\n\t[3]byte{0, 26, 235}:    \"Allied Telesis R&D Center K.K.\",\n\t[3]byte{0, 26, 236}:    \"Keumbee Electronics Co.,Ltd.\",\n\t[3]byte{0, 26, 237}:    \"INCOTEC GmbH\",\n\t[3]byte{0, 26, 238}:    \"Shenztech Ltd\",\n\t[3]byte{0, 26, 239}:    \"Loopcomm Technology, Inc.\",\n\t[3]byte{0, 26, 240}:    \"Alcatel-Lucent IPD\",\n\t[3]byte{0, 26, 241}:    \"Embedded Artists AB\",\n\t[3]byte{0, 26, 242}:    \"Dynavisions Schweiz AG\",\n\t[3]byte{0, 26, 243}:    \"Samyoung Electronics\",\n\t[3]byte{0, 26, 244}:    \"Handreamnet\",\n\t[3]byte{0, 26, 245}:    \"PENTAONE. CO., LTD.\",\n\t[3]byte{0, 26, 246}:    \"Woven Systems, Inc.\",\n\t[3]byte{0, 26, 247}:    \"dataschalt e+a GmbH\",\n\t[3]byte{0, 26, 248}:    \"Copley Controls Corporation\",\n\t[3]byte{0, 26, 249}:    \"AeroVIronment (AV Inc)\",\n\t[3]byte{0, 26, 250}:    \"Welch Allyn, Inc.\",\n\t[3]byte{0, 26, 251}:    \"Joby Inc.\",\n\t[3]byte{0, 26, 252}:    \"ModusLink Corporation\",\n\t[3]byte{0, 26, 253}:    \"EVOLIS\",\n\t[3]byte{0, 26, 254}:    \"SOFACREAL\",\n\t[3]byte{0, 26, 255}:    \"Wizyoung Tech.\",\n\t[3]byte{0, 27, 0}:      \"Neopost Technologies\",\n\t[3]byte{0, 27, 1}:      \"Applied Radio Technologies\",\n\t[3]byte{0, 27, 2}:      \"ED Co.Ltd\",\n\t[3]byte{0, 27, 3}:      \"Action Technology (SZ) Co., Ltd\",\n\t[3]byte{0, 27, 4}:      \"Affinity International S.p.a\",\n\t[3]byte{0, 27, 5}:      \"YMC AG\",\n\t[3]byte{0, 27, 6}:      \"Ateliers R. LAUMONIER\",\n\t[3]byte{0, 27, 7}:      \"Mendocino Software\",\n\t[3]byte{0, 27, 8}:      \"Danfoss Drives A/S\",\n\t[3]byte{0, 27, 9}:      \"Matrix Telecom Pvt. Ltd.\",\n\t[3]byte{0, 27, 10}:     \"Intelligent Distributed Controls Ltd\",\n\t[3]byte{0, 27, 11}:     \"Phidgets Inc.\",\n\t[3]byte{0, 27, 12}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 27, 13}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 27, 14}:     \"InoTec GmbH Organisationssysteme\",\n\t[3]byte{0, 27, 15}:     \"Petratec\",\n\t[3]byte{0, 27, 16}:     \"ShenZhen Kang Hui Technology Co.,ltd\",\n\t[3]byte{0, 27, 17}:     \"D-Link Corporation\",\n\t[3]byte{0, 27, 18}:     \"Apprion\",\n\t[3]byte{0, 27, 19}:     \"Icron Technologies Corporation\",\n\t[3]byte{0, 27, 20}:     \"Carex Lighting Equipment Factory\",\n\t[3]byte{0, 27, 21}:     \"Voxtel, Inc.\",\n\t[3]byte{0, 27, 22}:     \"Celtro Ltd.\",\n\t[3]byte{0, 27, 23}:     \"Palo Alto Networks\",\n\t[3]byte{0, 27, 24}:     \"Tsuken Electric Ind. Co.,Ltd\",\n\t[3]byte{0, 27, 25}:     \"IEEE I&M Society TC9\",\n\t[3]byte{0, 27, 26}:     \"e-trees Japan, Inc.\",\n\t[3]byte{0, 27, 27}:     \"Siemens AG,\",\n\t[3]byte{0, 27, 28}:     \"Coherent\",\n\t[3]byte{0, 27, 29}:     \"Phoenix International Co., Ltd\",\n\t[3]byte{0, 27, 30}:     \"HART Communication Foundation\",\n\t[3]byte{0, 27, 31}:     \"DELTA - Danish Electronics, Light & Acoustics\",\n\t[3]byte{0, 27, 32}:     \"TPine Technology\",\n\t[3]byte{0, 27, 33}:     \"Intel Corporate\",\n\t[3]byte{0, 27, 34}:     \"Palit Microsystems ( H.K.) Ltd.\",\n\t[3]byte{0, 27, 35}:     \"SimpleComTools\",\n\t[3]byte{0, 27, 36}:     \"Quanta Computer Inc.\",\n\t[3]byte{0, 27, 37}:     \"Nortel Networks\",\n\t[3]byte{0, 27, 38}:     \"RON-Telecom ZAO\",\n\t[3]byte{0, 27, 39}:     \"Merlin CSI\",\n\t[3]byte{0, 27, 40}:     \"POLYGON, JSC\",\n\t[3]byte{0, 27, 41}:     \"Avantis.Co.,Ltd\",\n\t[3]byte{0, 27, 42}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 27, 43}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 27, 44}:     \"ATRON electronic GmbH\",\n\t[3]byte{0, 27, 45}:     \"Med-Eng Systems Inc.\",\n\t[3]byte{0, 27, 46}:     \"Sinkyo Electron Inc\",\n\t[3]byte{0, 27, 47}:     \"NETGEAR\",\n\t[3]byte{0, 27, 48}:     \"Solitech Inc.\",\n\t[3]byte{0, 27, 49}:     \"Neural Image. Co. Ltd.\",\n\t[3]byte{0, 27, 50}:     \"QLogic Corporation\",\n\t[3]byte{0, 27, 51}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 27, 52}:     \"Focus System Inc.\",\n\t[3]byte{0, 27, 53}:     \"ChongQing JINOU Science & Technology Development CO.,Ltd\",\n\t[3]byte{0, 27, 54}:     \"Tsubata Engineering Co.,Ltd. (Head Office)\",\n\t[3]byte{0, 27, 55}:     \"Computec Oy\",\n\t[3]byte{0, 27, 56}:     \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{0, 27, 57}:     \"Proxicast\",\n\t[3]byte{0, 27, 58}:     \"SIMS Corp.\",\n\t[3]byte{0, 27, 59}:     \"Yi-Qing CO., LTD\",\n\t[3]byte{0, 27, 60}:     \"Software Technologies Group,Inc.\",\n\t[3]byte{0, 27, 61}:     \"EuroTel Spa\",\n\t[3]byte{0, 27, 62}:     \"Curtis, Inc.\",\n\t[3]byte{0, 27, 63}:     \"ProCurve Networking by HP\",\n\t[3]byte{0, 27, 64}:     \"Network Automation mxc AB\",\n\t[3]byte{0, 27, 65}:     \"General Infinity Co.,Ltd.\",\n\t[3]byte{0, 27, 66}:     \"Wise & Blue\",\n\t[3]byte{0, 27, 67}:     \"Beijing DG Telecommunications equipment Co.,Ltd\",\n\t[3]byte{0, 27, 68}:     \"SanDisk Corporation\",\n\t[3]byte{0, 27, 69}:     \"ABB AS, Division Automation Products\",\n\t[3]byte{0, 27, 70}:     \"Blueone Technology Co.,Ltd\",\n\t[3]byte{0, 27, 71}:     \"Futarque A/S\",\n\t[3]byte{0, 27, 72}:     \"Shenzhen Lantech Electronics Co., Ltd.\",\n\t[3]byte{0, 27, 73}:     \"Roberts Radio limited\",\n\t[3]byte{0, 27, 74}:     \"W&W Communications, Inc.\",\n\t[3]byte{0, 27, 75}:     \"SANION Co., Ltd.\",\n\t[3]byte{0, 27, 76}:     \"Signtech\",\n\t[3]byte{0, 27, 77}:     \"Areca Technology Corporation\",\n\t[3]byte{0, 27, 78}:     \"Navman New Zealand\",\n\t[3]byte{0, 27, 79}:     \"Avaya Inc\",\n\t[3]byte{0, 27, 80}:     \"Nizhny Novgorod Factory named after M.Frunze, FSUE (NZiF)\",\n\t[3]byte{0, 27, 81}:     \"Vector Technology Corp.\",\n\t[3]byte{0, 27, 82}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 27, 83}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 27, 84}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 27, 85}:     \"Hurco Automation Ltd.\",\n\t[3]byte{0, 27, 86}:     \"Tehuti Networks Ltd.\",\n\t[3]byte{0, 27, 87}:     \"SEMINDIA SYSTEMS PRIVATE LIMITED\",\n\t[3]byte{0, 27, 88}:     \"ACE CAD Enterprise Co., Ltd.\",\n\t[3]byte{0, 27, 89}:     \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 27, 90}:     \"Apollo Imaging Technologies, Inc.\",\n\t[3]byte{0, 27, 91}:     \"2Wire Inc\",\n\t[3]byte{0, 27, 92}:     \"Azuretec Co., Ltd.\",\n\t[3]byte{0, 27, 93}:     \"Vololink Pty Ltd\",\n\t[3]byte{0, 27, 94}:     \"BPL Limited\",\n\t[3]byte{0, 27, 95}:     \"Alien Technology\",\n\t[3]byte{0, 27, 96}:     \"NAVIGON AG\",\n\t[3]byte{0, 27, 97}:     \"Digital Acoustics, LLC\",\n\t[3]byte{0, 27, 98}:     \"JHT Optoelectronics Co.,Ltd.\",\n\t[3]byte{0, 27, 99}:     \"Apple, Inc.\",\n\t[3]byte{0, 27, 100}:    \"IsaacLandKorea Co., Ltd,\",\n\t[3]byte{0, 27, 101}:    \"China Gridcom Co., Ltd\",\n\t[3]byte{0, 27, 102}:    \"Sennheiser electronic GmbH & Co. KG\",\n\t[3]byte{0, 27, 103}:    \"Cisco Systems Inc\",\n\t[3]byte{0, 27, 104}:    \"Modnnet Co., Ltd\",\n\t[3]byte{0, 27, 105}:    \"Equaline Corporation\",\n\t[3]byte{0, 27, 106}:    \"Powerwave Technologies Sweden AB\",\n\t[3]byte{0, 27, 107}:    \"Swyx Solutions AG\",\n\t[3]byte{0, 27, 108}:    \"LookX Digital Media BV\",\n\t[3]byte{0, 27, 109}:    \"Midtronics, Inc.\",\n\t[3]byte{0, 27, 110}:    \"Keysight Technologies, Inc.\",\n\t[3]byte{0, 27, 111}:    \"Teletrak Ltd\",\n\t[3]byte{0, 27, 112}:    \"IRI Ubiteq, INC.\",\n\t[3]byte{0, 27, 113}:    \"Telular Corp.\",\n\t[3]byte{0, 27, 114}:    \"Sicep s.p.a.\",\n\t[3]byte{0, 27, 115}:    \"DTL Broadcast Ltd\",\n\t[3]byte{0, 27, 116}:    \"MiraLink Corporation\",\n\t[3]byte{0, 27, 117}:    \"Hypermedia Systems\",\n\t[3]byte{0, 27, 118}:    \"Ripcode, Inc.\",\n\t[3]byte{0, 27, 119}:    \"Intel Corporate\",\n\t[3]byte{0, 27, 120}:    \"Hewlett Packard\",\n\t[3]byte{0, 27, 121}:    \"FAIVELEY TRANSPORT\",\n\t[3]byte{0, 27, 122}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 27, 123}:    \"The Tintometer Ltd\",\n\t[3]byte{0, 27, 124}:    \"A & R Cambridge\",\n\t[3]byte{0, 27, 125}:    \"CXR Anderson Jacobson\",\n\t[3]byte{0, 27, 126}:    \"Beckmann GmbH\",\n\t[3]byte{0, 27, 127}:    \"TMN Technologies Telecomunicacoes Ltda\",\n\t[3]byte{0, 27, 128}:    \"LORD Corporation\",\n\t[3]byte{0, 27, 129}:    \"DATAQ Instruments, Inc.\",\n\t[3]byte{0, 27, 130}:    \"Taiwan Semiconductor Co., Ltd.\",\n\t[3]byte{0, 27, 131}:    \"Finsoft Ltd\",\n\t[3]byte{0, 27, 132}:    \"Scan Engineering Telecom\",\n\t[3]byte{0, 27, 133}:    \"MAN Energy Solutions\",\n\t[3]byte{0, 27, 134}:    \"Bosch Access Systems GmbH\",\n\t[3]byte{0, 27, 135}:    \"Deepsound Tech. Co., Ltd\",\n\t[3]byte{0, 27, 136}:    \"Divinet Access Technologies Ltd\",\n\t[3]byte{0, 27, 137}:    \"EMZA Visual Sense Ltd.\",\n\t[3]byte{0, 27, 138}:    \"2M Electronic A/S\",\n\t[3]byte{0, 27, 139}:    \"NEC Platforms, Ltd.\",\n\t[3]byte{0, 27, 140}:    \"JMicron Technology Corp.\",\n\t[3]byte{0, 27, 141}:    \"Electronic Computer Systems, Inc.\",\n\t[3]byte{0, 27, 142}:    \"Hulu Sweden AB\",\n\t[3]byte{0, 27, 143}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 27, 144}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 27, 145}:    \"EFKON AG\",\n\t[3]byte{0, 27, 146}:    \"l-acoustics\",\n\t[3]byte{0, 27, 147}:    \"JC Decaux SA DNT\",\n\t[3]byte{0, 27, 148}:    \"T.E.M.A. S.p.A.\",\n\t[3]byte{0, 27, 149}:    \"VIDEO SYSTEMS SRL\",\n\t[3]byte{0, 27, 150}:    \"General Sensing\",\n\t[3]byte{0, 27, 151}:    \"Violin Technologies\",\n\t[3]byte{0, 27, 152}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 27, 153}:    \"KS System GmbH\",\n\t[3]byte{0, 27, 154}:    \"Apollo Fire Detectors Ltd\",\n\t[3]byte{0, 27, 155}:    \"Hose-McCann Communications\",\n\t[3]byte{0, 27, 156}:    \"SATEL sp. z o.o.\",\n\t[3]byte{0, 27, 157}:    \"Novus Security Sp. z o.o.\",\n\t[3]byte{0, 27, 158}:    \"ASKEY COMPUTER CORP\",\n\t[3]byte{0, 27, 159}:    \"Calyptech Pty Ltd\",\n\t[3]byte{0, 27, 160}:    \"Awox\",\n\t[3]byte{0, 27, 161}:    \"Åmic AB\",\n\t[3]byte{0, 27, 162}:    \"IDS Imaging Development Systems GmbH\",\n\t[3]byte{0, 27, 163}:    \"Flexit Group GmbH\",\n\t[3]byte{0, 27, 164}:    \"S.A.E Afikim\",\n\t[3]byte{0, 27, 165}:    \"MyungMin Systems, Inc.\",\n\t[3]byte{0, 27, 166}:    \"intotech inc.\",\n\t[3]byte{0, 27, 167}:    \"Lorica Solutions\",\n\t[3]byte{0, 27, 168}:    \"UBI&MOBI,.Inc\",\n\t[3]byte{0, 27, 169}:    \"Brother industries, LTD.\",\n\t[3]byte{0, 27, 170}:    \"XenICs nv\",\n\t[3]byte{0, 27, 171}:    \"Telchemy, Incorporated\",\n\t[3]byte{0, 27, 172}:    \"Curtiss Wright Controls Embedded Computing\",\n\t[3]byte{0, 27, 173}:    \"iControl Incorporated\",\n\t[3]byte{0, 27, 174}:    \"Micro Control Systems, Inc\",\n\t[3]byte{0, 27, 175}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 27, 176}:    \"Bharat Electronics Limited\",\n\t[3]byte{0, 27, 177}:    \"Wistron Neweb Corporation\",\n\t[3]byte{0, 27, 178}:    \"Intellect International NV\",\n\t[3]byte{0, 27, 179}:    \"Condalo GmbH\",\n\t[3]byte{0, 27, 180}:    \"Airvod Limited\",\n\t[3]byte{0, 27, 181}:    \"Cherry GmbH\",\n\t[3]byte{0, 27, 182}:    \"Bird Electronic Corp.\",\n\t[3]byte{0, 27, 183}:    \"Alta Heights Technology Corp.\",\n\t[3]byte{0, 27, 184}:    \"BLUEWAY ELECTRONIC CO;LTD\",\n\t[3]byte{0, 27, 185}:    \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{0, 27, 186}:    \"Nortel Networks\",\n\t[3]byte{0, 27, 187}:    \"RFTech Co.,Ltd\",\n\t[3]byte{0, 27, 188}:    \"Silver Peak Systems, Inc.\",\n\t[3]byte{0, 27, 189}:    \"FMC Kongsberg Subsea AS\",\n\t[3]byte{0, 27, 190}:    \"ICOP Digital\",\n\t[3]byte{0, 27, 191}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{0, 27, 192}:    \"Juniper Networks\",\n\t[3]byte{0, 27, 193}:    \"HOLUX Technology, Inc.\",\n\t[3]byte{0, 27, 194}:    \"Integrated Control Technology Limitied\",\n\t[3]byte{0, 27, 195}:    \"Mobisolution Co.,Ltd\",\n\t[3]byte{0, 27, 196}:    \"Ultratec, Inc.\",\n\t[3]byte{0, 27, 197}:    \"IEEE Registration Authority\",\n\t[3]byte{0, 27, 198}:    \"Strato Rechenzentrum AG\",\n\t[3]byte{0, 27, 199}:    \"StarVedia Technology Inc.\",\n\t[3]byte{0, 27, 200}:    \"MIURA CO.,LTD\",\n\t[3]byte{0, 27, 201}:    \"FSN DISPLAY INC\",\n\t[3]byte{0, 27, 202}:    \"Beijing Run Technology LTD. Company\",\n\t[3]byte{0, 27, 203}:    \"PEMPEK SYSTEMS PTY LTD\",\n\t[3]byte{0, 27, 204}:    \"KINGTEK CCTV ALLIANCE CO., LTD.\",\n\t[3]byte{0, 27, 205}:    \"DAVISCOMMS (S) PTE LTD\",\n\t[3]byte{0, 27, 206}:    \"Measurement Devices Ltd\",\n\t[3]byte{0, 27, 207}:    \"Dataupia Corporation\",\n\t[3]byte{0, 27, 208}:    \"IDENTEC SOLUTIONS\",\n\t[3]byte{0, 27, 209}:    \"SOGESTMATIC\",\n\t[3]byte{0, 27, 210}:    \"ULTRA-X ASIA PACIFIC Inc.\",\n\t[3]byte{0, 27, 211}:    \"Panasonic Corporation AVC Networks Company\",\n\t[3]byte{0, 27, 212}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 27, 213}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 27, 214}:    \"Kelvin Hughes Ltd\",\n\t[3]byte{0, 27, 215}:    \"Cisco SPVTG\",\n\t[3]byte{0, 27, 216}:    \"FLIR Systems Inc\",\n\t[3]byte{0, 27, 217}:    \"Edgewater Wireless Systems Inc\",\n\t[3]byte{0, 27, 218}:    \"UTStarcom Inc\",\n\t[3]byte{0, 27, 219}:    \"Valeo VECS\",\n\t[3]byte{0, 27, 220}:    \"Vencer Co., Ltd.\",\n\t[3]byte{0, 27, 221}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 27, 222}:    \"Renkus-Heinz, Inc.\",\n\t[3]byte{0, 27, 223}:    \"Iskra Sistemi d.d.\",\n\t[3]byte{0, 27, 224}:    \"TELENOT ELECTRONIC GmbH\",\n\t[3]byte{0, 27, 225}:    \"ViaLogy\",\n\t[3]byte{0, 27, 226}:    \"AhnLab,Inc.\",\n\t[3]byte{0, 27, 227}:    \"Health Hero Network, Inc.\",\n\t[3]byte{0, 27, 228}:    \"TOWNET SRL\",\n\t[3]byte{0, 27, 229}:    \"802automation Limited\",\n\t[3]byte{0, 27, 230}:    \"VR AG\",\n\t[3]byte{0, 27, 231}:    \"Postek Electronics Co., Ltd.\",\n\t[3]byte{0, 27, 232}:    \"Ultratronik GmbH\",\n\t[3]byte{0, 27, 233}:    \"Broadcom\",\n\t[3]byte{0, 27, 234}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 27, 235}:    \"DMP Electronics INC.\",\n\t[3]byte{0, 27, 236}:    \"Netio Technologies Co., Ltd\",\n\t[3]byte{0, 27, 237}:    \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 27, 238}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 27, 239}:    \"Blossoms Digital Technology Co.,Ltd.\",\n\t[3]byte{0, 27, 240}:    \"Value Platforms Limited\",\n\t[3]byte{0, 27, 241}:    \"Nanjing SilverNet Software Co., Ltd.\",\n\t[3]byte{0, 27, 242}:    \"KWORLD COMPUTER CO., LTD\",\n\t[3]byte{0, 27, 243}:    \"TRANSRADIO SenderSysteme Berlin AG\",\n\t[3]byte{0, 27, 244}:    \"KENWIN INDUSTRIAL(HK) LTD.\",\n\t[3]byte{0, 27, 245}:    \"Tellink Sistemas de Telecomunicación S.L.\",\n\t[3]byte{0, 27, 246}:    \"CONWISE Technology Corporation Ltd.\",\n\t[3]byte{0, 27, 247}:    \"Lund IP Products AB\",\n\t[3]byte{0, 27, 248}:    \"Digitrax Inc.\",\n\t[3]byte{0, 27, 249}:    \"Intellitect Water Ltd\",\n\t[3]byte{0, 27, 250}:    \"G.i.N. mbH\",\n\t[3]byte{0, 27, 251}:    \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{0, 27, 252}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 27, 253}:    \"Dignsys Inc.\",\n\t[3]byte{0, 27, 254}:    \"Zavio Inc.\",\n\t[3]byte{0, 27, 255}:    \"Millennia Media inc.\",\n\t[3]byte{0, 28, 0}:      \"Entry Point, LLC\",\n\t[3]byte{0, 28, 1}:      \"ABB Oy Drives\",\n\t[3]byte{0, 28, 2}:      \"Pano Logic\",\n\t[3]byte{0, 28, 3}:      \"Betty TV Technology AG\",\n\t[3]byte{0, 28, 4}:      \"Airgain, Inc.\",\n\t[3]byte{0, 28, 5}:      \"Nonin Medical Inc.\",\n\t[3]byte{0, 28, 6}:      \"Siemens Numerical Control Ltd., Nanjing\",\n\t[3]byte{0, 28, 7}:      \"Cwlinux Limited\",\n\t[3]byte{0, 28, 8}:      \"Echo360, Inc.\",\n\t[3]byte{0, 28, 9}:      \"SAE Electronic Co.,Ltd.\",\n\t[3]byte{0, 28, 10}:     \"Shenzhen AEE Technology Co.,Ltd.\",\n\t[3]byte{0, 28, 11}:     \"SmartAnt Telecom\",\n\t[3]byte{0, 28, 12}:     \"TANITA Corporation\",\n\t[3]byte{0, 28, 13}:     \"G-Technology, Inc.\",\n\t[3]byte{0, 28, 14}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 28, 15}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 28, 16}:     \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 28, 17}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 28, 18}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 28, 19}:     \"OPTSYS TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 28, 20}:     \"VMware, Inc.\",\n\t[3]byte{0, 28, 21}:     \"iPhotonix LLC\",\n\t[3]byte{0, 28, 22}:     \"ThyssenKrupp Elevator\",\n\t[3]byte{0, 28, 23}:     \"Nortel Networks\",\n\t[3]byte{0, 28, 24}:     \"Sicert S.r.L.\",\n\t[3]byte{0, 28, 25}:     \"secunet Security Networks AG\",\n\t[3]byte{0, 28, 26}:     \"Thomas Instrumentation, Inc\",\n\t[3]byte{0, 28, 27}:     \"Hyperstone GmbH\",\n\t[3]byte{0, 28, 28}:     \"Center Communication Systems GmbH\",\n\t[3]byte{0, 28, 29}:     \"CHENZHOU GOSPELL DIGITAL TECHNOLOGY CO.,LTD\",\n\t[3]byte{0, 28, 30}:     \"emtrion GmbH\",\n\t[3]byte{0, 28, 31}:     \"Quest Retail Technology Pty Ltd\",\n\t[3]byte{0, 28, 32}:     \"CLB Benelux\",\n\t[3]byte{0, 28, 33}:     \"Nucsafe Inc.\",\n\t[3]byte{0, 28, 34}:     \"Aeris Elettronica s.r.l.\",\n\t[3]byte{0, 28, 35}:     \"Dell Inc.\",\n\t[3]byte{0, 28, 36}:     \"Formosa Wireless Systems Corp.\",\n\t[3]byte{0, 28, 37}:     \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 28, 38}:     \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 28, 39}:     \"Sunell Electronics Co.\",\n\t[3]byte{0, 28, 40}:     \"Sphairon Technologies GmbH \",\n\t[3]byte{0, 28, 41}:     \"CORE DIGITAL ELECTRONICS CO., LTD\",\n\t[3]byte{0, 28, 42}:     \"Envisacor Technologies Inc.\",\n\t[3]byte{0, 28, 43}:     \"Alertme.com Limited\",\n\t[3]byte{0, 28, 44}:     \"Synapse\",\n\t[3]byte{0, 28, 45}:     \"FlexRadio Systems\",\n\t[3]byte{0, 28, 46}:     \"HPN Supply Chain\",\n\t[3]byte{0, 28, 47}:     \"Pfister GmbH\",\n\t[3]byte{0, 28, 48}:     \"Mode Lighting (UK ) Ltd.\",\n\t[3]byte{0, 28, 49}:     \"Mobile XP Technology Co., LTD\",\n\t[3]byte{0, 28, 50}:     \"Telian Corporation\",\n\t[3]byte{0, 28, 51}:     \"Sutron\",\n\t[3]byte{0, 28, 52}:     \"HUEY CHIAO INTERNATIONAL CO., LTD.\",\n\t[3]byte{0, 28, 53}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 28, 54}:     \"iNEWiT NV\",\n\t[3]byte{0, 28, 55}:     \"Callpod, Inc.\",\n\t[3]byte{0, 28, 56}:     \"Bio-Rad Laboratories, Inc.\",\n\t[3]byte{0, 28, 57}:     \"S Netsystems Inc.\",\n\t[3]byte{0, 28, 58}:     \"Element Labs, Inc.\",\n\t[3]byte{0, 28, 59}:     \"AmRoad Technology Inc.\",\n\t[3]byte{0, 28, 60}:     \"Seon Design Inc.\",\n\t[3]byte{0, 28, 61}:     \"WaveStorm\",\n\t[3]byte{0, 28, 62}:     \"ECKey Corporation\",\n\t[3]byte{0, 28, 63}:     \"International Police Technologies, Inc.\",\n\t[3]byte{0, 28, 64}:     \"VDG-Security bv\",\n\t[3]byte{0, 28, 65}:     \"scemtec Transponder Technology GmbH\",\n\t[3]byte{0, 28, 66}:     \"Parallels, Inc.\",\n\t[3]byte{0, 28, 67}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 28, 68}:     \"Bosch Security Systems BV\",\n\t[3]byte{0, 28, 69}:     \"Chenbro Micom Co., Ltd.\",\n\t[3]byte{0, 28, 70}:     \"QTUM\",\n\t[3]byte{0, 28, 71}:     \"Hangzhou Hollysys Automation Co., Ltd\",\n\t[3]byte{0, 28, 72}:     \"WiDeFi, Inc.\",\n\t[3]byte{0, 28, 73}:     \"Zoltan Technology Inc.\",\n\t[3]byte{0, 28, 74}:     \"AVM GmbH\",\n\t[3]byte{0, 28, 75}:     \"Gener8, Inc.\",\n\t[3]byte{0, 28, 76}:     \"Petrotest Instruments\",\n\t[3]byte{0, 28, 77}:     \"Aplix IP Holdings Corporation\",\n\t[3]byte{0, 28, 78}:     \"TASA International Limited\",\n\t[3]byte{0, 28, 79}:     \"MACAB AB\",\n\t[3]byte{0, 28, 80}:     \"TCL Technoly Electronics (Huizhou) Co., Ltd.\",\n\t[3]byte{0, 28, 81}:     \"Celeno Communications\",\n\t[3]byte{0, 28, 82}:     \"VISIONEE SRL\",\n\t[3]byte{0, 28, 83}:     \"Synergy Lighting Controls\",\n\t[3]byte{0, 28, 84}:     \"Hillstone Networks Inc\",\n\t[3]byte{0, 28, 85}:     \"Shenzhen Kaifa Technology Co.\",\n\t[3]byte{0, 28, 86}:     \"Pado Systems, Inc.\",\n\t[3]byte{0, 28, 87}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 28, 88}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 28, 89}:     \"DEVON IT\",\n\t[3]byte{0, 28, 90}:     \"Advanced Relay Corporation\",\n\t[3]byte{0, 28, 91}:     \"Chubb Electronic Security Systems Ltd\",\n\t[3]byte{0, 28, 92}:     \"Integrated Medical Systems, Inc.\",\n\t[3]byte{0, 28, 93}:     \"Leica Microsystems\",\n\t[3]byte{0, 28, 94}:     \"ASTON France\",\n\t[3]byte{0, 28, 95}:     \"Winland Electronics, Inc.\",\n\t[3]byte{0, 28, 96}:     \"CSP Frontier Technologies,Inc.\",\n\t[3]byte{0, 28, 97}:     \"Galaxy  Microsystems LImited\",\n\t[3]byte{0, 28, 98}:     \"LG Electronics (Mobile Communications)\",\n\t[3]byte{0, 28, 99}:     \"TRUEN\",\n\t[3]byte{0, 28, 100}:    \"Landis+Gyr\",\n\t[3]byte{0, 28, 101}:    \"JoeScan, Inc.\",\n\t[3]byte{0, 28, 102}:    \"UCAMP CO.,LTD\",\n\t[3]byte{0, 28, 103}:    \"Pumpkin Networks, Inc.\",\n\t[3]byte{0, 28, 104}:    \"Anhui Sun Create Electronics Co., Ltd\",\n\t[3]byte{0, 28, 105}:    \"Packet Vision Ltd\",\n\t[3]byte{0, 28, 106}:    \"Weiss Engineering Ltd.\",\n\t[3]byte{0, 28, 107}:    \"COVAX  Co. Ltd\",\n\t[3]byte{0, 28, 108}:    \"30805\",\n\t[3]byte{0, 28, 109}:    \"KYOHRITSU ELECTRONIC INDUSTRY CO., LTD.\",\n\t[3]byte{0, 28, 110}:    \"Newbury Networks, Inc.\",\n\t[3]byte{0, 28, 111}:    \"Emfit Ltd\",\n\t[3]byte{0, 28, 112}:    \"NOVACOMM LTDA\",\n\t[3]byte{0, 28, 113}:    \"Emergent Electronics\",\n\t[3]byte{0, 28, 114}:    \"Mayer & Cie GmbH & Co KG\",\n\t[3]byte{0, 28, 115}:    \"Arista Networks\",\n\t[3]byte{0, 28, 116}:    \"Syswan Technologies Inc.\",\n\t[3]byte{0, 28, 117}:    \"Segnet Ltd.\",\n\t[3]byte{0, 28, 118}:    \"The Wandsworth Group Ltd\",\n\t[3]byte{0, 28, 119}:    \"Prodys\",\n\t[3]byte{0, 28, 120}:    \"WYPLAY SAS\",\n\t[3]byte{0, 28, 121}:    \"Cohesive Financial Technologies LLC\",\n\t[3]byte{0, 28, 122}:    \"Perfectone Netware Company Ltd\",\n\t[3]byte{0, 28, 123}:    \"Castlenet Technology Inc.\",\n\t[3]byte{0, 28, 124}:    \"PERQ SYSTEMS CORPORATION\",\n\t[3]byte{0, 28, 125}:    \"Excelpoint Manufacturing Pte Ltd\",\n\t[3]byte{0, 28, 126}:    \"Toshiba\",\n\t[3]byte{0, 28, 127}:    \"Check Point Software Technologies\",\n\t[3]byte{0, 28, 128}:    \"New Business Division/Rhea-Information CO., LTD.\",\n\t[3]byte{0, 28, 129}:    \"NextGen Venturi LTD\",\n\t[3]byte{0, 28, 130}:    \"Genew Technologies\",\n\t[3]byte{0, 28, 131}:    \"New Level Telecom Co., Ltd.\",\n\t[3]byte{0, 28, 132}:    \"STL Solution Co.,Ltd.\",\n\t[3]byte{0, 28, 133}:    \"Eunicorn\",\n\t[3]byte{0, 28, 134}:    \"Cranite Systems, Inc.\",\n\t[3]byte{0, 28, 135}:    \"Uriver Inc.\",\n\t[3]byte{0, 28, 136}:    \"TRANSYSTEM INC.\",\n\t[3]byte{0, 28, 137}:    \"Force Communications, Inc.\",\n\t[3]byte{0, 28, 138}:    \"Cirrascale Corporation\",\n\t[3]byte{0, 28, 139}:    \"MJ Innovations Ltd.\",\n\t[3]byte{0, 28, 140}:    \"DIAL TECHNOLOGY LTD.\",\n\t[3]byte{0, 28, 141}:    \"Mesa Imaging\",\n\t[3]byte{0, 28, 142}:    \"Alcatel-Lucent IPD\",\n\t[3]byte{0, 28, 143}:    \"Advanced Electronic Design, Inc.\",\n\t[3]byte{0, 28, 144}:    \"Empacket Corporation\",\n\t[3]byte{0, 28, 145}:    \"Gefen LLC\",\n\t[3]byte{0, 28, 146}:    \"Tervela\",\n\t[3]byte{0, 28, 147}:    \"ExaDigm Inc\",\n\t[3]byte{0, 28, 148}:    \"LI-COR Biosciences\",\n\t[3]byte{0, 28, 149}:    \"Opticomm Corporation\",\n\t[3]byte{0, 28, 150}:    \"Linkwise Technology Pte Ltd\",\n\t[3]byte{0, 28, 151}:    \"Enzytek Technology Inc.,\",\n\t[3]byte{0, 28, 152}:    \"LUCKY TECHNOLOGY (HK) COMPANY LIMITED\",\n\t[3]byte{0, 28, 153}:    \"Shunra Software Ltd.\",\n\t[3]byte{0, 28, 154}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 28, 155}:    \"FEIG ELECTRONIC GmbH\",\n\t[3]byte{0, 28, 156}:    \"Nortel Networks\",\n\t[3]byte{0, 28, 157}:    \"Liecthi AG\",\n\t[3]byte{0, 28, 158}:    \"Dualtech IT AB\",\n\t[3]byte{0, 28, 159}:    \"Razorstream, LLC\",\n\t[3]byte{0, 28, 160}:    \"Production Resource Group, LLC\",\n\t[3]byte{0, 28, 161}:    \"AKAMAI TECHNOLOGIES, INC.\",\n\t[3]byte{0, 28, 162}:    \"ADB Broadband Italia\",\n\t[3]byte{0, 28, 163}:    \"Terra\",\n\t[3]byte{0, 28, 164}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 28, 165}:    \"Zygo Corporation\",\n\t[3]byte{0, 28, 166}:    \"Win4NET\",\n\t[3]byte{0, 28, 167}:    \"International Quartz Limited\",\n\t[3]byte{0, 28, 168}:    \"AirTies Wireless Networks\",\n\t[3]byte{0, 28, 169}:    \"Audiomatica Srl\",\n\t[3]byte{0, 28, 170}:    \"Bellon Pty Ltd\",\n\t[3]byte{0, 28, 171}:    \"Meyer Sound Laboratories, Inc.\",\n\t[3]byte{0, 28, 172}:    \"Qniq Technology Corp.\",\n\t[3]byte{0, 28, 173}:    \"Wuhan Telecommunication Devices Co.,Ltd\",\n\t[3]byte{0, 28, 174}:    \"WiChorus, Inc.\",\n\t[3]byte{0, 28, 175}:    \"Plato Networks Inc.\",\n\t[3]byte{0, 28, 176}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 28, 177}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 28, 178}:    \"BPT SPA\",\n\t[3]byte{0, 28, 179}:    \"Apple, Inc.\",\n\t[3]byte{0, 28, 180}:    \"Iridium Satellite LLC\",\n\t[3]byte{0, 28, 181}:    \"Neihua Network Technology Co.,LTD.(NHN)\",\n\t[3]byte{0, 28, 182}:    \"Duzon CNT Co., Ltd.\",\n\t[3]byte{0, 28, 183}:    \"USC DigiArk Corporation\",\n\t[3]byte{0, 28, 184}:    \"CBC Co., Ltd\",\n\t[3]byte{0, 28, 185}:    \"KWANG SUNG ELECTRONICS CO., LTD.\",\n\t[3]byte{0, 28, 186}:    \"VerScient, Inc.\",\n\t[3]byte{0, 28, 187}:    \"MusicianLink\",\n\t[3]byte{0, 28, 188}:    \"CastGrabber, LLC\",\n\t[3]byte{0, 28, 189}:    \"Ezze Mobile Tech., Inc.\",\n\t[3]byte{0, 28, 190}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 28, 191}:    \"Intel Corporate\",\n\t[3]byte{0, 28, 192}:    \"Intel Corporate\",\n\t[3]byte{0, 28, 193}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 28, 194}:    \"Part II Research, Inc.\",\n\t[3]byte{0, 28, 195}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 28, 196}:    \"Hewlett Packard\",\n\t[3]byte{0, 28, 197}:    \"3Com Ltd\",\n\t[3]byte{0, 28, 198}:    \"ProStor Systems\",\n\t[3]byte{0, 28, 199}:    \"Rembrandt Technologies, LLC d/b/a REMSTREAM\",\n\t[3]byte{0, 28, 200}:    \"INDUSTRONIC Industrie-Electronic GmbH & Co. KG\",\n\t[3]byte{0, 28, 201}:    \"Kaise Electronic Technology Co., Ltd.\",\n\t[3]byte{0, 28, 202}:    \"Shanghai Gaozhi Science & Technology Development Co.\",\n\t[3]byte{0, 28, 203}:    \"Forth Corporation Public Company Limited\",\n\t[3]byte{0, 28, 204}:    \"BlackBerry RTS\",\n\t[3]byte{0, 28, 205}:    \"Alektrona Corporation\",\n\t[3]byte{0, 28, 206}:    \"By Techdesign\",\n\t[3]byte{0, 28, 207}:    \"LIMETEK\",\n\t[3]byte{0, 28, 208}:    \"Circleone Co.,Ltd.\",\n\t[3]byte{0, 28, 209}:    \"Waves Audio LTD\",\n\t[3]byte{0, 28, 210}:    \"King Champion (Hong Kong) Limited\",\n\t[3]byte{0, 28, 211}:    \"ZP Engineering SEL\",\n\t[3]byte{0, 28, 212}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 28, 213}:    \"ZeeVee, Inc.\",\n\t[3]byte{0, 28, 214}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 28, 215}:    \"Harman/Becker Automotive Systems GmbH\",\n\t[3]byte{0, 28, 216}:    \"BlueAnt Wireless\",\n\t[3]byte{0, 28, 217}:    \"GlobalTop Technology Inc.\",\n\t[3]byte{0, 28, 218}:    \"Exegin Technologies Limited\",\n\t[3]byte{0, 28, 219}:    \"CARPOINT CO.,LTD\",\n\t[3]byte{0, 28, 220}:    \"Custom Computer Services, Inc.\",\n\t[3]byte{0, 28, 221}:    \"COWBELL ENGINEERING CO., LTD.\",\n\t[3]byte{0, 28, 222}:    \"Interactive Multimedia eXchange Inc.\",\n\t[3]byte{0, 28, 223}:    \"Belkin International Inc.\",\n\t[3]byte{0, 28, 224}:    \"DASAN TPS\",\n\t[3]byte{0, 28, 225}:    \"INDRA SISTEMAS, S.A.\",\n\t[3]byte{0, 28, 226}:    \"Attero Tech, LLC.\",\n\t[3]byte{0, 28, 227}:    \"Optimedical Systems\",\n\t[3]byte{0, 28, 228}:    \"EleSy JSC\",\n\t[3]byte{0, 28, 229}:    \"MBS Electronic Systems GmbH\",\n\t[3]byte{0, 28, 230}:    \"INNES\",\n\t[3]byte{0, 28, 231}:    \"Rocon PLC Research Centre\",\n\t[3]byte{0, 28, 232}:    \"Cummins Inc\",\n\t[3]byte{0, 28, 233}:    \"Galaxy Technology Limited\",\n\t[3]byte{0, 28, 234}:    \"Scientific-Atlanta, Inc\",\n\t[3]byte{0, 28, 235}:    \"Nortel Networks\",\n\t[3]byte{0, 28, 236}:    \"Mobilesoft (Aust.) Pty Ltd\",\n\t[3]byte{0, 28, 237}:    \"ENVIRONNEMENT SA\",\n\t[3]byte{0, 28, 238}:    \"SHARP Corporation\",\n\t[3]byte{0, 28, 239}:    \"Primax Electronics Ltd.\",\n\t[3]byte{0, 28, 240}:    \"D-Link Corporation\",\n\t[3]byte{0, 28, 241}:    \"SUPoX Technology Co. , LTD.\",\n\t[3]byte{0, 28, 242}:    \"Tenlon Technology Co.,Ltd.\",\n\t[3]byte{0, 28, 243}:    \"EVS BROADCAST EQUIPMENT\",\n\t[3]byte{0, 28, 244}:    \"Media Technology Systems Inc\",\n\t[3]byte{0, 28, 245}:    \"Wiseblue Technology Limited\",\n\t[3]byte{0, 28, 246}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 28, 247}:    \"AudioScience\",\n\t[3]byte{0, 28, 248}:    \"Parade Technologies, Ltd.\",\n\t[3]byte{0, 28, 249}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 28, 250}:    \"Alarm.com\",\n\t[3]byte{0, 28, 251}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 28, 252}:    \"Sumitomo Electric Industries, Ltd\",\n\t[3]byte{0, 28, 253}:    \"Universal Electronics, Inc.\",\n\t[3]byte{0, 28, 254}:    \"Quartics Inc\",\n\t[3]byte{0, 28, 255}:    \"Napera Networks Inc\",\n\t[3]byte{0, 29, 0}:      \"Brivo Systems, LLC\",\n\t[3]byte{0, 29, 1}:      \"Neptune Digital\",\n\t[3]byte{0, 29, 2}:      \"Cybertech Telecom Development\",\n\t[3]byte{0, 29, 3}:      \"Design Solutions Inc.\",\n\t[3]byte{0, 29, 4}:      \"Zipit Wireless, Inc.\",\n\t[3]byte{0, 29, 5}:      \"Cooper Lighting Solutions\",\n\t[3]byte{0, 29, 6}:      \"HM Electronics, Inc.\",\n\t[3]byte{0, 29, 7}:      \"Shenzhen Sang Fei Consumer Communications Co.,Ltd\",\n\t[3]byte{0, 29, 8}:      \"Jiangsu Yinhe  Electronics Co.,Ltd.\",\n\t[3]byte{0, 29, 9}:      \"Dell Inc.\",\n\t[3]byte{0, 29, 10}:     \"Davis Instruments, Inc.\",\n\t[3]byte{0, 29, 11}:     \"Power Standards Lab\",\n\t[3]byte{0, 29, 12}:     \"MobileCompia\",\n\t[3]byte{0, 29, 13}:     \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{0, 29, 14}:     \"Agapha Technology co., Ltd.\",\n\t[3]byte{0, 29, 15}:     \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{0, 29, 16}:     \"LightHaus Logic, Inc.\",\n\t[3]byte{0, 29, 17}:     \"Analogue & Micro Ltd\",\n\t[3]byte{0, 29, 18}:     \"ROHM CO., LTD.\",\n\t[3]byte{0, 29, 19}:     \"NextGTV\",\n\t[3]byte{0, 29, 20}:     \"SPERADTONE INFORMATION TECHNOLOGY LIMITED\",\n\t[3]byte{0, 29, 21}:     \"Shenzhen Dolphin Electronic Co., Ltd\",\n\t[3]byte{0, 29, 22}:     \"SFR\",\n\t[3]byte{0, 29, 23}:     \"Digital Sky Corporation\",\n\t[3]byte{0, 29, 24}:     \"Power Innovation GmbH\",\n\t[3]byte{0, 29, 25}:     \"Arcadyan Technology Corporation\",\n\t[3]byte{0, 29, 26}:     \"OvisLink S.A.\",\n\t[3]byte{0, 29, 27}:     \"Sangean Electronics Inc.\",\n\t[3]byte{0, 29, 28}:     \"Gennet s.a.\",\n\t[3]byte{0, 29, 29}:     \"Inter-M Corporation\",\n\t[3]byte{0, 29, 30}:     \"KYUSHU TEN CO.,LTD\",\n\t[3]byte{0, 29, 31}:     \"Siauliu Tauro Televizoriai, JSC\",\n\t[3]byte{0, 29, 32}:     \"Comtrend Corporation\",\n\t[3]byte{0, 29, 33}:     \"Alcad SL\",\n\t[3]byte{0, 29, 34}:     \"Foss Analytical A/S\",\n\t[3]byte{0, 29, 35}:     \"SENSUS \",\n\t[3]byte{0, 29, 36}:     \"Aclara Power-Line Systems Inc.\",\n\t[3]byte{0, 29, 37}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 29, 38}:     \"Rockridgesound Technology Co.\",\n\t[3]byte{0, 29, 39}:     \"NAC-INTERCOM\",\n\t[3]byte{0, 29, 40}:     \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 29, 41}:     \"Doro AB\",\n\t[3]byte{0, 29, 42}:     \"SHENZHEN BUL-TECH CO.,LTD.\",\n\t[3]byte{0, 29, 43}:     \"Wuhan Pont Technology CO. , LTD\",\n\t[3]byte{0, 29, 44}:     \"Wavetrend Technologies (Pty) Limited\",\n\t[3]byte{0, 29, 45}:     \"Pylone, Inc.\",\n\t[3]byte{0, 29, 46}:     \"Ruckus Wireless\",\n\t[3]byte{0, 29, 47}:     \"QuantumVision Corporation\",\n\t[3]byte{0, 29, 48}:     \"YX Wireless S.A.\",\n\t[3]byte{0, 29, 49}:     \"HIGHPRO INTERNATIONAL R&D CO,.LTD.\",\n\t[3]byte{0, 29, 50}:     \"Longkay Communication & Technology (Shanghai) Co. Ltd\",\n\t[3]byte{0, 29, 51}:     \"Maverick Systems Inc.\",\n\t[3]byte{0, 29, 52}:     \"SYRIS Technology Corp\",\n\t[3]byte{0, 29, 53}:     \"Viconics Electronics Inc.\",\n\t[3]byte{0, 29, 54}:     \"ELECTRONICS CORPORATION OF INDIA LIMITED\",\n\t[3]byte{0, 29, 55}:     \"Thales-Panda Transportation System\",\n\t[3]byte{0, 29, 56}:     \"Seagate Technology\",\n\t[3]byte{0, 29, 57}:     \"MOOHADIGITAL CO., LTD\",\n\t[3]byte{0, 29, 58}:     \"mh acoustics LLC\",\n\t[3]byte{0, 29, 59}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 29, 60}:     \"Muscle Corporation\",\n\t[3]byte{0, 29, 61}:     \"Avidyne Corporation\",\n\t[3]byte{0, 29, 62}:     \"SAKA TECHNO SCIENCE CO.,LTD\",\n\t[3]byte{0, 29, 63}:     \"Mitron Pty Ltd\",\n\t[3]byte{0, 29, 64}:     \" Intel – GE Care Innovations LLC\",\n\t[3]byte{0, 29, 65}:     \"Hardy Instruments\",\n\t[3]byte{0, 29, 66}:     \"Nortel Networks\",\n\t[3]byte{0, 29, 67}:     \"Shenzhen G-link Digital Technology Co., Ltd.\",\n\t[3]byte{0, 29, 68}:     \"Krohne\",\n\t[3]byte{0, 29, 69}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 29, 70}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 29, 71}:     \"Covote GmbH & Co KG\",\n\t[3]byte{0, 29, 72}:     \"Sensor-Technik Wiedemann GmbH\",\n\t[3]byte{0, 29, 73}:     \"Innovation Wireless Inc.\",\n\t[3]byte{0, 29, 74}:     \"Carestream Health, Inc.\",\n\t[3]byte{0, 29, 75}:     \"Grid Connect Inc.\",\n\t[3]byte{0, 29, 76}:     \"Alcatel-Lucent\",\n\t[3]byte{0, 29, 77}:     \"Adaptive Recognition Hungary, Inc\",\n\t[3]byte{0, 29, 78}:     \"TCM Mobile LLC\",\n\t[3]byte{0, 29, 79}:     \"Apple, Inc.\",\n\t[3]byte{0, 29, 80}:     \"SPINETIX SA\",\n\t[3]byte{0, 29, 81}:     \"Babcock & Wilcox Power Generation Group, Inc\",\n\t[3]byte{0, 29, 82}:     \"Defzone B.V.\",\n\t[3]byte{0, 29, 83}:     \"S&O Electronics (Malaysia) Sdn. Bhd.\",\n\t[3]byte{0, 29, 84}:     \"Sunnic Technology & Merchandise INC.\",\n\t[3]byte{0, 29, 85}:     \"ZANTAZ, Inc\",\n\t[3]byte{0, 29, 86}:     \"Kramer Electronics Ltd.\",\n\t[3]byte{0, 29, 87}:     \"CAETEC Messtechnik\",\n\t[3]byte{0, 29, 88}:     \"CQ Inc\",\n\t[3]byte{0, 29, 89}:     \"Mitra Energy & Infrastructure\",\n\t[3]byte{0, 29, 90}:     \"2Wire Inc\",\n\t[3]byte{0, 29, 91}:     \"Tecvan Informática Ltda\",\n\t[3]byte{0, 29, 92}:     \"Tom Communication Industrial Co.,Ltd.\",\n\t[3]byte{0, 29, 93}:     \"Control Dynamics Pty. Ltd.\",\n\t[3]byte{0, 29, 94}:     \"COMING MEDIA CORP.\",\n\t[3]byte{0, 29, 95}:     \"OverSpeed SARL\",\n\t[3]byte{0, 29, 96}:     \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 29, 97}:     \"BIJ Corporation\",\n\t[3]byte{0, 29, 98}:     \"InPhase Technologies\",\n\t[3]byte{0, 29, 99}:     \"Miele & Cie. KG\",\n\t[3]byte{0, 29, 100}:    \"Adam Communications Systems Int Ltd\",\n\t[3]byte{0, 29, 101}:    \"Microwave Radio Communications\",\n\t[3]byte{0, 29, 102}:    \"Hyundai Telecom\",\n\t[3]byte{0, 29, 103}:    \"AMEC\",\n\t[3]byte{0, 29, 104}:    \"Thomson Telecom Belgium\",\n\t[3]byte{0, 29, 105}:    \"Knorr-Bremse IT-Services GmbH\",\n\t[3]byte{0, 29, 106}:    \"Alpha Networks Inc.\",\n\t[3]byte{0, 29, 107}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 29, 108}:    \"ClariPhy Communications, Inc.\",\n\t[3]byte{0, 29, 109}:    \"Confidant International LLC\",\n\t[3]byte{0, 29, 110}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 29, 111}:    \"Chainzone Technology Co., Ltd\",\n\t[3]byte{0, 29, 112}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 29, 113}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 29, 114}:    \"Wistron Corporation\",\n\t[3]byte{0, 29, 115}:    \"BUFFALO.INC\",\n\t[3]byte{0, 29, 116}:    \"Tianjin China-Silicon Microelectronics Co., Ltd.\",\n\t[3]byte{0, 29, 117}:    \"Radioscape PLC\",\n\t[3]byte{0, 29, 118}:    \"Eyeheight Ltd.\",\n\t[3]byte{0, 29, 119}:    \"NSGate\",\n\t[3]byte{0, 29, 120}:    \"Invengo Information Technology Co.,Ltd\",\n\t[3]byte{0, 29, 121}:    \"SIGNAMAX LLC\",\n\t[3]byte{0, 29, 122}:    \"Wideband Semiconductor, Inc.\",\n\t[3]byte{0, 29, 123}:    \"Ice Energy, Inc.\",\n\t[3]byte{0, 29, 124}:    \"ABE Elettronica S.p.A.\",\n\t[3]byte{0, 29, 125}:    \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{0, 29, 126}:    \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 29, 127}:    \"Tekron International Ltd\",\n\t[3]byte{0, 29, 128}:    \"Beijing Huahuan Eletronics Co.,Ltd\",\n\t[3]byte{0, 29, 129}:    \"GUANGZHOU GATEWAY ELECTRONICS CO., LTD\",\n\t[3]byte{0, 29, 130}:    \"GN Netcom A/S\",\n\t[3]byte{0, 29, 131}:    \"Emitech Corporation\",\n\t[3]byte{0, 29, 132}:    \"Gateway, Inc.\",\n\t[3]byte{0, 29, 133}:    \"Call Direct Cellular Solutions\",\n\t[3]byte{0, 29, 134}:    \"Shinwa Industries(China) Ltd.\",\n\t[3]byte{0, 29, 135}:    \"VigTech Labs Sdn Bhd\",\n\t[3]byte{0, 29, 136}:    \"Clearwire\",\n\t[3]byte{0, 29, 137}:    \"VaultStor Corporation\",\n\t[3]byte{0, 29, 138}:    \"TechTrex Inc\",\n\t[3]byte{0, 29, 139}:    \"ADB Broadband Italia\",\n\t[3]byte{0, 29, 140}:    \"La Crosse Technology LTD\",\n\t[3]byte{0, 29, 141}:    \"Fluke Process Instruments GmbH\",\n\t[3]byte{0, 29, 142}:    \"Alereon, Inc.\",\n\t[3]byte{0, 29, 143}:    \"PureWave Networks\",\n\t[3]byte{0, 29, 144}:    \"EMCO Flow Systems\",\n\t[3]byte{0, 29, 145}:    \"Digitize, Inc\",\n\t[3]byte{0, 29, 146}:    \"MICRO-STAR INT'L CO.,LTD.\",\n\t[3]byte{0, 29, 147}:    \"Modacom\",\n\t[3]byte{0, 29, 148}:    \"Climax Technology Co., Ltd\",\n\t[3]byte{0, 29, 149}:    \"Flash, Inc.\",\n\t[3]byte{0, 29, 150}:    \"WatchGuard Video\",\n\t[3]byte{0, 29, 151}:    \"Alertus Technologies LLC\",\n\t[3]byte{0, 29, 152}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 29, 153}:    \"Cyan Optic, Inc.\",\n\t[3]byte{0, 29, 154}:    \"GODEX INTERNATIONAL CO., LTD\",\n\t[3]byte{0, 29, 155}:    \"Hokuyo Automatic Co., Ltd.\",\n\t[3]byte{0, 29, 156}:    \"Rockwell Automation\",\n\t[3]byte{0, 29, 157}:    \"ARTJOY INTERNATIONAL LIMITED\",\n\t[3]byte{0, 29, 158}:    \"AXION TECHNOLOGIES\",\n\t[3]byte{0, 29, 159}:    \"MATT   R.P.Traczynscy Sp.J.\",\n\t[3]byte{0, 29, 160}:    \"Heng Yu Electronic Manufacturing Company Limited\",\n\t[3]byte{0, 29, 161}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 29, 162}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 29, 163}:    \"SabiOso\",\n\t[3]byte{0, 29, 164}:    \"Hangzhou System Technology CO., LTD\",\n\t[3]byte{0, 29, 165}:    \"WB Electronics\",\n\t[3]byte{0, 29, 166}:    \"Media Numerics Limited\",\n\t[3]byte{0, 29, 167}:    \"Seamless Internet\",\n\t[3]byte{0, 29, 168}:    \"Takahata Electronics Co.,Ltd\",\n\t[3]byte{0, 29, 169}:    \"Castles Technology, Co., LTD\",\n\t[3]byte{0, 29, 170}:    \"DrayTek Corp.\",\n\t[3]byte{0, 29, 171}:    \"SwissQual License AG\",\n\t[3]byte{0, 29, 172}:    \"Gigamon Systems LLC\",\n\t[3]byte{0, 29, 173}:    \"Sinotech Engineering Consultants, Inc.  Geotechnical Enginee\",\n\t[3]byte{0, 29, 174}:    \"CHANG TSENG TECHNOLOGY CO., LTD\",\n\t[3]byte{0, 29, 175}:    \"Nortel Networks\",\n\t[3]byte{0, 29, 176}:    \"FuJian HengTong Information Technology Co.,Ltd\",\n\t[3]byte{0, 29, 177}:    \"Crescendo Networks\",\n\t[3]byte{0, 29, 178}:    \"HOKKAIDO ELECTRIC ENGINEERING CO.,LTD.\",\n\t[3]byte{0, 29, 179}:    \"HPN Supply Chain\",\n\t[3]byte{0, 29, 180}:    \"KUMHO ENG CO.,LTD\",\n\t[3]byte{0, 29, 181}:    \"Juniper Networks\",\n\t[3]byte{0, 29, 182}:    \"BestComm Networks, Inc.\",\n\t[3]byte{0, 29, 183}:    \"Tendril Networks, Inc.\",\n\t[3]byte{0, 29, 184}:    \"Intoto Inc.\",\n\t[3]byte{0, 29, 185}:    \"Wellspring Wireless\",\n\t[3]byte{0, 29, 186}:    \"Sony Corporation\",\n\t[3]byte{0, 29, 187}:    \"Dynamic System Electronics Corp.\",\n\t[3]byte{0, 29, 188}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 29, 189}:    \"Versamed Inc.\",\n\t[3]byte{0, 29, 190}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 29, 191}:    \"Radiient Technologies, Inc.\",\n\t[3]byte{0, 29, 192}:    \"Enphase Energy\",\n\t[3]byte{0, 29, 193}:    \"Audinate Pty L\",\n\t[3]byte{0, 29, 194}:    \"XORTEC OY\",\n\t[3]byte{0, 29, 195}:    \"RIKOR TV, Ltd\",\n\t[3]byte{0, 29, 196}:    \"AIOI Systems Co., Ltd.\",\n\t[3]byte{0, 29, 197}:    \"Beijing Jiaxun Feihong Electricial Co., Ltd.\",\n\t[3]byte{0, 29, 198}:    \"SNR Inc.\",\n\t[3]byte{0, 29, 199}:    \"L-3 Communications Geneva Aerospace\",\n\t[3]byte{0, 29, 200}:    \"Navionics Research Inc., dba SCADAmetrics\",\n\t[3]byte{0, 29, 201}:    \"GainSpan Corp.\",\n\t[3]byte{0, 29, 202}:    \"PAV Electronics Limited\",\n\t[3]byte{0, 29, 203}:    \"Exéns Development Oy\",\n\t[3]byte{0, 29, 204}:    \"Ayon Cyber Security, Inc\",\n\t[3]byte{0, 29, 205}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 29, 206}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 29, 207}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 29, 208}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 29, 209}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 29, 210}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 29, 211}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 29, 212}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 29, 213}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 29, 214}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 29, 215}:    \"Algolith\",\n\t[3]byte{0, 29, 216}:    \"Microsoft Corporation\",\n\t[3]byte{0, 29, 217}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 29, 218}:    \"Mikroelektronika spol. s r. o.\",\n\t[3]byte{0, 29, 219}:    \"C-BEL Corporation\",\n\t[3]byte{0, 29, 220}:    \"HangZhou DeChangLong Tech&Info Co.,Ltd\",\n\t[3]byte{0, 29, 221}:    \"DAT H.K. LIMITED\",\n\t[3]byte{0, 29, 222}:    \"Zhejiang Broadcast&Television Technology Co.,Ltd.\",\n\t[3]byte{0, 29, 223}:    \"Sunitec Enterprise Co.,Ltd\",\n\t[3]byte{0, 29, 224}:    \"Intel Corporate\",\n\t[3]byte{0, 29, 225}:    \"Intel Corporate\",\n\t[3]byte{0, 29, 226}:    \"Radionor Communications\",\n\t[3]byte{0, 29, 227}:    \"Intuicom\",\n\t[3]byte{0, 29, 228}:    \"Visioneered Image Systems\",\n\t[3]byte{0, 29, 229}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 29, 230}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 29, 231}:    \"Marine Sonic Technology, Ltd.\",\n\t[3]byte{0, 29, 232}:    \"Nikko Denki Tsushin Corporation(NDTC)\",\n\t[3]byte{0, 29, 233}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 29, 234}:    \"Commtest Instruments Ltd\",\n\t[3]byte{0, 29, 235}:    \"DINEC International\",\n\t[3]byte{0, 29, 236}:    \"Marusys\",\n\t[3]byte{0, 29, 237}:    \"Grid Net, Inc.\",\n\t[3]byte{0, 29, 238}:    \"NEXTVISION SISTEMAS DIGITAIS DE TELEVISÃO LTDA.\",\n\t[3]byte{0, 29, 239}:    \"TRIMM, INC.\",\n\t[3]byte{0, 29, 240}:    \"Vidient Systems, Inc.\",\n\t[3]byte{0, 29, 241}:    \"Intego Systems, Inc.\",\n\t[3]byte{0, 29, 242}:    \"Netflix, Inc.\",\n\t[3]byte{0, 29, 243}:    \"SBS Science & Technology Co., Ltd\",\n\t[3]byte{0, 29, 244}:    \"Magellan Technology Pty Limited\",\n\t[3]byte{0, 29, 245}:    \"Sunshine Co,LTD\",\n\t[3]byte{0, 29, 246}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 29, 247}:    \"R. STAHL Schaltgeräte GmbH\",\n\t[3]byte{0, 29, 248}:    \"Webpro Vision Technology Corporation\",\n\t[3]byte{0, 29, 249}:    \"Cybiotronics (Far East) Limited\",\n\t[3]byte{0, 29, 250}:    \"Fujian LANDI Commercial Equipment Co.,Ltd\",\n\t[3]byte{0, 29, 251}:    \"NETCLEUS Systems Corporation\",\n\t[3]byte{0, 29, 252}:    \"KSIC\",\n\t[3]byte{0, 29, 253}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 29, 254}:    \"Palm, Inc\",\n\t[3]byte{0, 29, 255}:    \"Network Critical Solutions Ltd\",\n\t[3]byte{0, 30, 0}:      \"Shantou Institute of Ultrasonic Instruments\",\n\t[3]byte{0, 30, 1}:      \"Renesas Technology Sales Co., Ltd.\",\n\t[3]byte{0, 30, 2}:      \"Sougou Keikaku Kougyou Co.,Ltd.\",\n\t[3]byte{0, 30, 3}:      \"LiComm Co., Ltd.\",\n\t[3]byte{0, 30, 4}:      \"Hanson Research Corporation\",\n\t[3]byte{0, 30, 5}:      \"Xseed Technologies & Computing\",\n\t[3]byte{0, 30, 6}:      \"WIBRAIN\",\n\t[3]byte{0, 30, 7}:      \"Winy Technology Co., Ltd.\",\n\t[3]byte{0, 30, 8}:      \"Centec Networks Inc\",\n\t[3]byte{0, 30, 9}:      \"ZEFATEK Co.,LTD\",\n\t[3]byte{0, 30, 10}:     \"Syba Tech Limited\",\n\t[3]byte{0, 30, 11}:     \"Hewlett Packard\",\n\t[3]byte{0, 30, 12}:     \"Sherwood Information Partners, Inc.\",\n\t[3]byte{0, 30, 13}:     \"Micran Ltd.\",\n\t[3]byte{0, 30, 14}:     \"MAXI VIEW HOLDINGS LIMITED\",\n\t[3]byte{0, 30, 15}:     \"Briot International\",\n\t[3]byte{0, 30, 16}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 30, 17}:     \"ELELUX INTERNATIONAL LTD\",\n\t[3]byte{0, 30, 18}:     \"Ecolab\",\n\t[3]byte{0, 30, 19}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 30, 20}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 30, 21}:     \"Beech Hill Electronics\",\n\t[3]byte{0, 30, 22}:     \"Keytronix\",\n\t[3]byte{0, 30, 23}:     \"STN BV\",\n\t[3]byte{0, 30, 24}:     \"Radio Activity srl\",\n\t[3]byte{0, 30, 25}:     \"GTRI\",\n\t[3]byte{0, 30, 26}:     \"Best Source Taiwan Inc.\",\n\t[3]byte{0, 30, 27}:     \"Digital Stream Technology, Inc.\",\n\t[3]byte{0, 30, 28}:     \"SWS Australia Pty Limited\",\n\t[3]byte{0, 30, 29}:     \"East Coast Datacom, Inc.\",\n\t[3]byte{0, 30, 30}:     \"Honeywell Life Safety\",\n\t[3]byte{0, 30, 31}:     \"Nortel Networks\",\n\t[3]byte{0, 30, 32}:     \"Intertain Inc.\",\n\t[3]byte{0, 30, 33}:     \"Qisda Corporation\",\n\t[3]byte{0, 30, 34}:     \"ARVOO Imaging Products BV\",\n\t[3]byte{0, 30, 35}:     \"Electronic Educational Devices, Inc\",\n\t[3]byte{0, 30, 36}:     \"Zhejiang Bell Technology Co.,ltd\",\n\t[3]byte{0, 30, 37}:     \"INTEK DIGITAL\",\n\t[3]byte{0, 30, 38}:     \"Digifriends Co. Ltd\",\n\t[3]byte{0, 30, 39}:     \"SBN TECH Co.,Ltd.\",\n\t[3]byte{0, 30, 40}:     \"Lumexis Corporation\",\n\t[3]byte{0, 30, 41}:     \"Hypertherm Inc\",\n\t[3]byte{0, 30, 42}:     \"NETGEAR\",\n\t[3]byte{0, 30, 43}:     \"Radio Systems Design, Inc.\",\n\t[3]byte{0, 30, 44}:     \"CyVerse Corporation\",\n\t[3]byte{0, 30, 45}:     \"STIM\",\n\t[3]byte{0, 30, 46}:     \"SIRTI S.p.A.\",\n\t[3]byte{0, 30, 47}:     \"DiMoto Pty Ltd\",\n\t[3]byte{0, 30, 48}:     \"Shireen Inc\",\n\t[3]byte{0, 30, 49}:     \"infomark\",\n\t[3]byte{0, 30, 50}:     \"Zensys\",\n\t[3]byte{0, 30, 51}:     \"INVENTEC CORPORATION\",\n\t[3]byte{0, 30, 52}:     \"CryptoMetrics\",\n\t[3]byte{0, 30, 53}:     \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 30, 54}:     \"IPTE\",\n\t[3]byte{0, 30, 55}:     \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{0, 30, 56}:     \"Bluecard Software Technology Co., Ltd.\",\n\t[3]byte{0, 30, 57}:     \"Comsys Communication Ltd.\",\n\t[3]byte{0, 30, 58}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 30, 59}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 30, 60}:     \"Lyngbox Media AB\",\n\t[3]byte{0, 30, 61}:     \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{0, 30, 62}:     \"KMW Inc.\",\n\t[3]byte{0, 30, 63}:     \"TrellisWare Technologies, Inc.\",\n\t[3]byte{0, 30, 64}:     \"Shanghai DareGlobal Technologies Co.,Ltd\",\n\t[3]byte{0, 30, 65}:     \"Microwave Communication & Component, Inc.\",\n\t[3]byte{0, 30, 66}:     \"Teltonika\",\n\t[3]byte{0, 30, 67}:     \"AISIN AW CO.,LTD.\",\n\t[3]byte{0, 30, 68}:     \"SANTEC\",\n\t[3]byte{0, 30, 69}:     \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 30, 70}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 30, 71}:     \"PT. Hariff Daya Tunggal Engineering\",\n\t[3]byte{0, 30, 72}:     \"Wi-Links\",\n\t[3]byte{0, 30, 73}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 30, 74}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 30, 75}:     \"City Theatrical\",\n\t[3]byte{0, 30, 76}:     \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 30, 77}:     \"Welkin Sciences, LLC\",\n\t[3]byte{0, 30, 78}:     \"DAKO EDV-Ingenieur- und Systemhaus GmbH\",\n\t[3]byte{0, 30, 79}:     \"Dell Inc.\",\n\t[3]byte{0, 30, 80}:     \"BATTISTONI RESEARCH\",\n\t[3]byte{0, 30, 81}:     \"Converter Industry Srl\",\n\t[3]byte{0, 30, 82}:     \"Apple, Inc.\",\n\t[3]byte{0, 30, 83}:     \"Further Tech Co., LTD\",\n\t[3]byte{0, 30, 84}:     \"TOYO ELECTRIC Corporation\",\n\t[3]byte{0, 30, 85}:     \"COWON SYSTEMS,Inc.\",\n\t[3]byte{0, 30, 86}:     \"Bally Wulff Entertainment GmbH\",\n\t[3]byte{0, 30, 87}:     \"ALCOMA, spol. s r.o.\",\n\t[3]byte{0, 30, 88}:     \"D-Link Corporation\",\n\t[3]byte{0, 30, 89}:     \"Silicon Turnkey Express, LLC\",\n\t[3]byte{0, 30, 90}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 30, 91}:     \"Unitron Company, Inc.\",\n\t[3]byte{0, 30, 92}:     \"RB GeneralEkonomik\",\n\t[3]byte{0, 30, 93}:     \"Holosys d.o.o.\",\n\t[3]byte{0, 30, 94}:     \"COmputime Ltd.\",\n\t[3]byte{0, 30, 95}:     \"KwikByte, LLC\",\n\t[3]byte{0, 30, 96}:     \"Digital Lighting Systems, Inc\",\n\t[3]byte{0, 30, 97}:     \"ITEC GmbH\",\n\t[3]byte{0, 30, 98}:     \"Siemon\",\n\t[3]byte{0, 30, 99}:     \"Vibro-Meter SA\",\n\t[3]byte{0, 30, 100}:    \"Intel Corporate\",\n\t[3]byte{0, 30, 101}:    \"Intel Corporate\",\n\t[3]byte{0, 30, 102}:    \"RESOL Elektronische Regelungen GmbH\",\n\t[3]byte{0, 30, 103}:    \"Intel Corporate\",\n\t[3]byte{0, 30, 104}:    \"Quanta Computer Inc.\",\n\t[3]byte{0, 30, 105}:    \"Thomson Inc.\",\n\t[3]byte{0, 30, 106}:    \"Beijing Bluexon Technology Co.,Ltd\",\n\t[3]byte{0, 30, 107}:    \"Cisco SPVTG\",\n\t[3]byte{0, 30, 108}:    \"Opaque Systems\",\n\t[3]byte{0, 30, 109}:    \"IT R&D Center\",\n\t[3]byte{0, 30, 110}:    \"Shenzhen First Mile Communications Ltd\",\n\t[3]byte{0, 30, 111}:    \"Magna-Power Electronics, Inc.\",\n\t[3]byte{0, 30, 112}:    \"Cobham Antenna Systems\",\n\t[3]byte{0, 30, 113}:    \"MIrcom Group of Companies\",\n\t[3]byte{0, 30, 114}:    \"PCS\",\n\t[3]byte{0, 30, 115}:    \"zte corporation\",\n\t[3]byte{0, 30, 116}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{0, 30, 117}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{0, 30, 118}:    \"Thermo Fisher Scientific\",\n\t[3]byte{0, 30, 119}:    \"Air2App\",\n\t[3]byte{0, 30, 120}:    \"Owitek Technology Ltd.,\",\n\t[3]byte{0, 30, 121}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 30, 122}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 30, 123}:    \"R.I.CO. S.r.l.\",\n\t[3]byte{0, 30, 124}:    \"Taiwick Limited\",\n\t[3]byte{0, 30, 125}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 30, 126}:    \"Nortel Networks\",\n\t[3]byte{0, 30, 127}:    \"CBM of America\",\n\t[3]byte{0, 30, 128}:    \"Icotera A/S\",\n\t[3]byte{0, 30, 129}:    \"CNB Technology Inc.\",\n\t[3]byte{0, 30, 130}:    \"SanDisk Corporation\",\n\t[3]byte{0, 30, 131}:    \"LAN/MAN Standards Association (LMSC)\",\n\t[3]byte{0, 30, 132}:    \"Pika Technologies Inc.\",\n\t[3]byte{0, 30, 133}:    \"Lagotek Corporation\",\n\t[3]byte{0, 30, 134}:    \"MEL Co.,Ltd.\",\n\t[3]byte{0, 30, 135}:    \"Realease Limited\",\n\t[3]byte{0, 30, 136}:    \"ANDOR SYSTEM SUPPORT CO., LTD.\",\n\t[3]byte{0, 30, 137}:    \"CRFS Limited\",\n\t[3]byte{0, 30, 138}:    \"eCopy, Inc\",\n\t[3]byte{0, 30, 139}:    \"Infra Access Korea Co., Ltd.\",\n\t[3]byte{0, 30, 140}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 30, 141}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 30, 142}:    \"Hunkeler AG\",\n\t[3]byte{0, 30, 143}:    \"CANON INC.\",\n\t[3]byte{0, 30, 144}:    \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{0, 30, 145}:    \"KIMIN Electronic Co., Ltd.\",\n\t[3]byte{0, 30, 146}:    \"JEULIN S.A.\",\n\t[3]byte{0, 30, 147}:    \"CiriTech Systems Inc\",\n\t[3]byte{0, 30, 148}:    \"SUPERCOM TECHNOLOGY CORPORATION\",\n\t[3]byte{0, 30, 149}:    \"SIGMALINK\",\n\t[3]byte{0, 30, 150}:    \"Sepura Plc\",\n\t[3]byte{0, 30, 151}:    \"Medium Link System Technology CO., LTD,\",\n\t[3]byte{0, 30, 152}:    \"GreenLine Communications\",\n\t[3]byte{0, 30, 153}:    \"Vantanol Industrial Corporation\",\n\t[3]byte{0, 30, 154}:    \"HAMILTON Bonaduz AG\",\n\t[3]byte{0, 30, 155}:    \"San-Eisha, Ltd.\",\n\t[3]byte{0, 30, 156}:    \"Fidustron INC\",\n\t[3]byte{0, 30, 157}:    \"Recall Technologies, Inc.\",\n\t[3]byte{0, 30, 158}:    \"ddm hopt + schuler Gmbh + Co. KG\",\n\t[3]byte{0, 30, 159}:    \"Visioneering Systems, Inc.\",\n\t[3]byte{0, 30, 160}:    \"XLN-t\",\n\t[3]byte{0, 30, 161}:    \"Brunata a/s\",\n\t[3]byte{0, 30, 162}:    \"Symx Systems, Inc.\",\n\t[3]byte{0, 30, 163}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 30, 164}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 30, 165}:    \"ROBOTOUS, Inc.\",\n\t[3]byte{0, 30, 166}:    \"Best IT World (India) Pvt. Ltd.\",\n\t[3]byte{0, 30, 167}:    \"Actiontec Electronics, Inc\",\n\t[3]byte{0, 30, 168}:    \"Datang Mobile Communications Equipment CO.,LTD\",\n\t[3]byte{0, 30, 169}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 30, 170}:    \"E-Senza Technologies GmbH\",\n\t[3]byte{0, 30, 171}:    \"TeleWell Oy\",\n\t[3]byte{0, 30, 172}:    \"Armadeus Systems\",\n\t[3]byte{0, 30, 173}:    \"Wingtech Group Limited\",\n\t[3]byte{0, 30, 174}:    \"Continental Automotive Systems Inc.\",\n\t[3]byte{0, 30, 175}:    \"Ophir Optronics Ltd\",\n\t[3]byte{0, 30, 176}:    \"ImesD Electronica S.L.\",\n\t[3]byte{0, 30, 177}:    \"Cryptsoft Pty Ltd\",\n\t[3]byte{0, 30, 178}:    \"LG Innotek\",\n\t[3]byte{0, 30, 179}:    \"Primex Wireless\",\n\t[3]byte{0, 30, 180}:    \"UNIFAT TECHNOLOGY LTD.\",\n\t[3]byte{0, 30, 181}:    \"Ever Sparkle Technologies Ltd\",\n\t[3]byte{0, 30, 182}:    \"TAG Heuer SA\",\n\t[3]byte{0, 30, 183}:    \"TBTech, Co., Ltd.\",\n\t[3]byte{0, 30, 184}:    \"Aloys, Inc\",\n\t[3]byte{0, 30, 185}:    \"Sing Fai Technology Limited\",\n\t[3]byte{0, 30, 186}:    \"High Density Devices AS\",\n\t[3]byte{0, 30, 187}:    \"BLUELIGHT TECHNOLOGY INC.\",\n\t[3]byte{0, 30, 188}:    \"WINTECH AUTOMATION CO.,LTD.\",\n\t[3]byte{0, 30, 189}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 30, 190}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 30, 191}:    \"Haas Automation Inc.\",\n\t[3]byte{0, 30, 192}:    \"Microchip Technology Inc.\",\n\t[3]byte{0, 30, 193}:    \"3COM EUROPE LTD\",\n\t[3]byte{0, 30, 194}:    \"Apple, Inc.\",\n\t[3]byte{0, 30, 195}:    \"Kozio, Inc.\",\n\t[3]byte{0, 30, 196}:    \"Celio Corp\",\n\t[3]byte{0, 30, 197}:    \"Middle Atlantic Products Inc\",\n\t[3]byte{0, 30, 198}:    \"Obvius Holdings LLC\",\n\t[3]byte{0, 30, 199}:    \"2Wire Inc\",\n\t[3]byte{0, 30, 200}:    \"Rapid Mobile (Pty) Ltd\",\n\t[3]byte{0, 30, 201}:    \"Dell Inc.\",\n\t[3]byte{0, 30, 202}:    \"Nortel Networks\",\n\t[3]byte{0, 30, 203}:    \"\\\"RPC \\\"Energoautomatika\\\" Ltd\",\n\t[3]byte{0, 30, 204}:    \"CDVI\",\n\t[3]byte{0, 30, 205}:    \"KYLAND Technology Co. LTD\",\n\t[3]byte{0, 30, 206}:    \"BISA Technologies (Hong Kong) Limited\",\n\t[3]byte{0, 30, 207}:    \"PHILIPS ELECTRONICS UK LTD\",\n\t[3]byte{0, 30, 208}:    \"Ingespace\",\n\t[3]byte{0, 30, 209}:    \"Keyprocessor B.V.\",\n\t[3]byte{0, 30, 210}:    \"Ray Shine Video Technology Inc\",\n\t[3]byte{0, 30, 211}:    \"Dot Technology Int'l Co., Ltd.\",\n\t[3]byte{0, 30, 212}:    \"Doble Engineering\",\n\t[3]byte{0, 30, 213}:    \"Tekon-Automatics\",\n\t[3]byte{0, 30, 214}:    \"Alentec & Orion AB\",\n\t[3]byte{0, 30, 215}:    \"H-Stream Wireless, Inc.\",\n\t[3]byte{0, 30, 216}:    \"Digital United Inc.\",\n\t[3]byte{0, 30, 217}:    \"Mitsubishi Precision Co.,LTd.\",\n\t[3]byte{0, 30, 218}:    \"Wesemann Elektrotechniek B.V.\",\n\t[3]byte{0, 30, 219}:    \"Giken Trastem Co., Ltd.\",\n\t[3]byte{0, 30, 220}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 30, 221}:    \"WASKO S.A.\",\n\t[3]byte{0, 30, 222}:    \"BYD COMPANY LIMITED\",\n\t[3]byte{0, 30, 223}:    \"Master Industrialization Center Kista\",\n\t[3]byte{0, 30, 224}:    \"Urmet SpA\",\n\t[3]byte{0, 30, 225}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 30, 226}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 30, 227}:    \"T&W Electronics (ShenZhen) Co.,Ltd\",\n\t[3]byte{0, 30, 228}:    \"ACS Solutions France\",\n\t[3]byte{0, 30, 229}:    \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 30, 230}:    \"Shenzhen Advanced Video Info-Tech Co., Ltd.\",\n\t[3]byte{0, 30, 231}:    \"Epic Systems Inc\",\n\t[3]byte{0, 30, 232}:    \"Mytek\",\n\t[3]byte{0, 30, 233}:    \"Stoneridge Electronics AB\",\n\t[3]byte{0, 30, 234}:    \"Sensor Switch, Inc.\",\n\t[3]byte{0, 30, 235}:    \"Talk-A-Phone Co.\",\n\t[3]byte{0, 30, 236}:    \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{0, 30, 237}:    \"Adventiq Ltd.\",\n\t[3]byte{0, 30, 238}:    \"ETL Systems Ltd\",\n\t[3]byte{0, 30, 239}:    \"Cantronic International Limited\",\n\t[3]byte{0, 30, 240}:    \"Gigafin Networks\",\n\t[3]byte{0, 30, 241}:    \"Servimat\",\n\t[3]byte{0, 30, 242}:    \"Micro Motion Inc\",\n\t[3]byte{0, 30, 243}:    \"From2\",\n\t[3]byte{0, 30, 244}:    \"L-3 Communications Display Systems\",\n\t[3]byte{0, 30, 245}:    \"Hitek Automated Inc.\",\n\t[3]byte{0, 30, 246}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 30, 247}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 30, 248}:    \"Emfinity Inc.\",\n\t[3]byte{0, 30, 249}:    \"Pascom Kommunikations systeme GmbH.\",\n\t[3]byte{0, 30, 250}:    \"PROTEI Ltd.\",\n\t[3]byte{0, 30, 251}:    \"Trio Motion Technology Ltd\",\n\t[3]byte{0, 30, 252}:    \"JSC \\\"MASSA-K\\\"\",\n\t[3]byte{0, 30, 253}:    \"Microbit 2.0 AB\",\n\t[3]byte{0, 30, 254}:    \"LEVEL s.r.o.\",\n\t[3]byte{0, 30, 255}:    \"Mueller-Elektronik GmbH & Co. KG\",\n\t[3]byte{0, 31, 0}:      \"Nokia Danmark A/S\",\n\t[3]byte{0, 31, 1}:      \"Nokia Danmark A/S\",\n\t[3]byte{0, 31, 2}:      \"Pixelmetrix Corporation Pte Ltd\",\n\t[3]byte{0, 31, 3}:      \"NUM AG\",\n\t[3]byte{0, 31, 4}:      \"Granch Ltd.\",\n\t[3]byte{0, 31, 5}:      \"iTAS Technology Corp.\",\n\t[3]byte{0, 31, 6}:      \"Integrated Dispatch Solutions\",\n\t[3]byte{0, 31, 7}:      \"AZTEQ Mobile\",\n\t[3]byte{0, 31, 8}:      \"RISCO LTD\",\n\t[3]byte{0, 31, 9}:      \"Jastec\",\n\t[3]byte{0, 31, 10}:     \"Nortel Networks\",\n\t[3]byte{0, 31, 11}:     \"Federal State Unitary Enterprise Industrial Union\\\"Electropribor\\\"\",\n\t[3]byte{0, 31, 12}:     \"Intelligent Digital Services GmbH\",\n\t[3]byte{0, 31, 13}:     \"L3 Communications - Telemetry West\",\n\t[3]byte{0, 31, 14}:     \"Japan Kyastem Co., Ltd\",\n\t[3]byte{0, 31, 15}:     \"Select Engineered Systems\",\n\t[3]byte{0, 31, 16}:     \"TOLEDO DO BRASIL INDUSTRIA DE BALANCAS  LTDA\",\n\t[3]byte{0, 31, 17}:     \"OPENMOKO, INC.\",\n\t[3]byte{0, 31, 18}:     \"Juniper Networks\",\n\t[3]byte{0, 31, 19}:     \"S.& A.S. Ltd.\",\n\t[3]byte{0, 31, 20}:     \"NexG\",\n\t[3]byte{0, 31, 21}:     \"Bioscrypt Inc\",\n\t[3]byte{0, 31, 22}:     \"Wistron Corporation\",\n\t[3]byte{0, 31, 23}:     \"IDX Company, Ltd.\",\n\t[3]byte{0, 31, 24}:     \"Hakusan.Mfg.Co,.Ltd\",\n\t[3]byte{0, 31, 25}:     \"BEN-RI ELECTRONICA S.A.\",\n\t[3]byte{0, 31, 26}:     \"Prominvest\",\n\t[3]byte{0, 31, 27}:     \"RoyalTek Company Ltd.\",\n\t[3]byte{0, 31, 28}:     \"KOBISHI ELECTRIC Co.,Ltd.\",\n\t[3]byte{0, 31, 29}:     \"Atlas Material Testing Technology LLC\",\n\t[3]byte{0, 31, 30}:     \"Astec Technology Co., Ltd\",\n\t[3]byte{0, 31, 31}:     \"Edimax Technology Co. Ltd.\",\n\t[3]byte{0, 31, 32}:     \"Logitech Europe SA\",\n\t[3]byte{0, 31, 33}:     \"Inner Mongolia Yin An Science & Technology Development Co.,L\",\n\t[3]byte{0, 31, 34}:     \"Source Photonics, Inc.\",\n\t[3]byte{0, 31, 35}:     \"Interacoustics\",\n\t[3]byte{0, 31, 36}:     \"DIGITVIEW TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 31, 37}:     \"MBS GmbH\",\n\t[3]byte{0, 31, 38}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 31, 39}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 31, 40}:     \"HPN Supply Chain\",\n\t[3]byte{0, 31, 41}:     \"Hewlett Packard\",\n\t[3]byte{0, 31, 42}:     \"ACCM\",\n\t[3]byte{0, 31, 43}:     \"Orange Logic\",\n\t[3]byte{0, 31, 44}:     \"Starbridge Networks\",\n\t[3]byte{0, 31, 45}:     \"Electro-Optical Imaging, Inc.\",\n\t[3]byte{0, 31, 46}:     \"Triangle Research Int'l Pte Ltd\",\n\t[3]byte{0, 31, 47}:     \"Berker GmbH & Co. KG\",\n\t[3]byte{0, 31, 48}:     \"Travelping\",\n\t[3]byte{0, 31, 49}:     \"Radiocomp\",\n\t[3]byte{0, 31, 50}:     \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 31, 51}:     \"NETGEAR\",\n\t[3]byte{0, 31, 52}:     \"Lung Hwa Electronics Co., Ltd.\",\n\t[3]byte{0, 31, 53}:     \"AIR802 LLC\",\n\t[3]byte{0, 31, 54}:     \"Bellwin Information Co. Ltd.,\",\n\t[3]byte{0, 31, 55}:     \"Genesis I&C\",\n\t[3]byte{0, 31, 56}:     \"POSITRON\",\n\t[3]byte{0, 31, 57}:     \"Construcciones y Auxiliar de Ferrocarriles, S.A.\",\n\t[3]byte{0, 31, 58}:     \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 31, 59}:     \"Intel Corporate\",\n\t[3]byte{0, 31, 60}:     \"Intel Corporate\",\n\t[3]byte{0, 31, 61}:     \"Qbit GmbH\",\n\t[3]byte{0, 31, 62}:     \"RP-Technik e.K.\",\n\t[3]byte{0, 31, 63}:     \"AVM GmbH\",\n\t[3]byte{0, 31, 64}:     \"Speakercraft Inc.\",\n\t[3]byte{0, 31, 65}:     \"Ruckus Wireless\",\n\t[3]byte{0, 31, 66}:     \"Etherstack plc\",\n\t[3]byte{0, 31, 67}:     \"ENTES ELEKTRONIK\",\n\t[3]byte{0, 31, 68}:     \"GE Transportation Systems\",\n\t[3]byte{0, 31, 69}:     \"Enterasys\",\n\t[3]byte{0, 31, 70}:     \"Nortel Networks\",\n\t[3]byte{0, 31, 71}:     \"MCS Logic Inc.\",\n\t[3]byte{0, 31, 72}:     \"Mojix Inc.\",\n\t[3]byte{0, 31, 73}:     \"Manhattan TV Ltd\",\n\t[3]byte{0, 31, 74}:     \"Albentia Systems S.A.\",\n\t[3]byte{0, 31, 75}:     \"Lineage Power\",\n\t[3]byte{0, 31, 76}:     \"Roseman Engineering Ltd\",\n\t[3]byte{0, 31, 77}:     \"Segnetics LLC\",\n\t[3]byte{0, 31, 78}:     \"ConMed Linvatec\",\n\t[3]byte{0, 31, 79}:     \"Thinkware Co. Ltd.\",\n\t[3]byte{0, 31, 80}:     \"Swissdis AG\",\n\t[3]byte{0, 31, 81}:     \"HD Communications Corp\",\n\t[3]byte{0, 31, 82}:     \"UVT Unternehmensberatung fur Verkehr und Technik GmbH\",\n\t[3]byte{0, 31, 83}:     \"GEMAC Chemnitz GmbH\",\n\t[3]byte{0, 31, 84}:     \"Lorex Technology Inc.\",\n\t[3]byte{0, 31, 85}:     \"Honeywell Security (China) Co., Ltd.\",\n\t[3]byte{0, 31, 86}:     \"DIGITAL FORECAST\",\n\t[3]byte{0, 31, 87}:     \"Phonik Innovation Co.,LTD\",\n\t[3]byte{0, 31, 88}:     \"EMH Energiemesstechnik GmbH\",\n\t[3]byte{0, 31, 89}:     \"Kronback Tracers\",\n\t[3]byte{0, 31, 90}:     \"Beckwith Electric Co.\",\n\t[3]byte{0, 31, 91}:     \"Apple, Inc.\",\n\t[3]byte{0, 31, 92}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 31, 93}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 31, 94}:     \"Dyna Technology Co.,Ltd.\",\n\t[3]byte{0, 31, 95}:     \"Blatand GmbH\",\n\t[3]byte{0, 31, 96}:     \"COMPASS SYSTEMS CORP.\",\n\t[3]byte{0, 31, 97}:     \"Talent Communication Networks Inc.\",\n\t[3]byte{0, 31, 98}:     \"JSC \\\"Stilsoft\\\"\",\n\t[3]byte{0, 31, 99}:     \"JSC Goodwin-Europa\",\n\t[3]byte{0, 31, 100}:    \"Beijing Autelan Technology Inc.\",\n\t[3]byte{0, 31, 101}:    \"KOREA ELECTRIC TERMINAL CO., LTD.\",\n\t[3]byte{0, 31, 102}:    \"PLANAR LLC\",\n\t[3]byte{0, 31, 103}:    \"Hitachi,Ltd.\",\n\t[3]byte{0, 31, 104}:    \"Martinsson Elektronik AB\",\n\t[3]byte{0, 31, 105}:    \"Pingood Technology Co., Ltd.\",\n\t[3]byte{0, 31, 106}:    \"PacketFlux Technologies, Inc.\",\n\t[3]byte{0, 31, 107}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{0, 31, 108}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 31, 109}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 31, 110}:    \"Vtech Engineering Corporation\",\n\t[3]byte{0, 31, 111}:    \"Fujian Sunnada Communication Co.,Ltd.\",\n\t[3]byte{0, 31, 112}:    \"Botik Technologies LTD\",\n\t[3]byte{0, 31, 113}:    \"xG Technology, Inc.\",\n\t[3]byte{0, 31, 114}:    \"QingDao Hiphone Technology Co,.Ltd\",\n\t[3]byte{0, 31, 115}:    \"Teraview Technology Co., Ltd.\",\n\t[3]byte{0, 31, 116}:    \"Eigen Development\",\n\t[3]byte{0, 31, 117}:    \"GiBahn Media\",\n\t[3]byte{0, 31, 118}:    \"AirLogic Systems Inc.\",\n\t[3]byte{0, 31, 119}:    \"HEOL DESIGN\",\n\t[3]byte{0, 31, 120}:    \"Blue Fox Porini Textile\",\n\t[3]byte{0, 31, 121}:    \"Lodam Electronics A/S\",\n\t[3]byte{0, 31, 122}:    \"WiWide Inc.\",\n\t[3]byte{0, 31, 123}:    \"TechNexion Ltd.\",\n\t[3]byte{0, 31, 124}:    \"Witelcom AS\",\n\t[3]byte{0, 31, 125}:    \"Embedded Wireless GmbH\",\n\t[3]byte{0, 31, 126}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 31, 127}:    \"Phabrix Limited\",\n\t[3]byte{0, 31, 128}:    \"Lucas Holding bv\",\n\t[3]byte{0, 31, 129}:    \"Accel Semiconductor Corp\",\n\t[3]byte{0, 31, 130}:    \"Cal-Comp Electronics & Communications Company Ltd.\",\n\t[3]byte{0, 31, 131}:    \"Teleplan Technology Services Sdn Bhd\",\n\t[3]byte{0, 31, 132}:    \"Gigle Semiconductor\",\n\t[3]byte{0, 31, 133}:    \"Apriva ISS, LLC\",\n\t[3]byte{0, 31, 134}:    \"digEcor\",\n\t[3]byte{0, 31, 135}:    \"Skydigital Inc.\",\n\t[3]byte{0, 31, 136}:    \"FMS Force Measuring Systems AG\",\n\t[3]byte{0, 31, 137}:    \"Signalion GmbH\",\n\t[3]byte{0, 31, 138}:    \"Ellion Digital Inc.\",\n\t[3]byte{0, 31, 139}:    \"Cache IQ\",\n\t[3]byte{0, 31, 140}:    \"CCS Inc.\",\n\t[3]byte{0, 31, 141}:    \"Ingenieurbuero Stark GmbH und Ko. KG\",\n\t[3]byte{0, 31, 142}:    \"Metris USA Inc.\",\n\t[3]byte{0, 31, 143}:    \"Shanghai Bellmann Digital Source Co.,Ltd.\",\n\t[3]byte{0, 31, 144}:    \"Actiontec Electronics, Inc\",\n\t[3]byte{0, 31, 145}:    \"DBS Lodging Technologies, LLC\",\n\t[3]byte{0, 31, 146}:    \"Avigilon Corporation\",\n\t[3]byte{0, 31, 147}:    \"Xiotech Corporation\",\n\t[3]byte{0, 31, 148}:    \"Lascar Electronics Ltd\",\n\t[3]byte{0, 31, 149}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{0, 31, 150}:    \"APROTECH CO.LTD\",\n\t[3]byte{0, 31, 151}:    \"BERTANA srl\",\n\t[3]byte{0, 31, 152}:    \"DAIICHI-DENTSU LTD.\",\n\t[3]byte{0, 31, 153}:    \"SERONICS co.ltd\",\n\t[3]byte{0, 31, 154}:    \"Nortel Networks\",\n\t[3]byte{0, 31, 155}:    \"POSBRO\",\n\t[3]byte{0, 31, 156}:    \"LEDCO\",\n\t[3]byte{0, 31, 157}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 31, 158}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 31, 159}:    \"Thomson Telecom Belgium\",\n\t[3]byte{0, 31, 160}:    \"A10 Networks\",\n\t[3]byte{0, 31, 161}:    \"Gtran Inc\",\n\t[3]byte{0, 31, 162}:    \"Datron World Communications, Inc.\",\n\t[3]byte{0, 31, 163}:    \"T&W Electronics(Shenzhen)Co.,Ltd.\",\n\t[3]byte{0, 31, 164}:    \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{0, 31, 165}:    \"Blue-White Industries\",\n\t[3]byte{0, 31, 166}:    \"Stilo srl\",\n\t[3]byte{0, 31, 167}:    \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{0, 31, 168}:    \"Smart Energy Instruments Inc.\",\n\t[3]byte{0, 31, 169}:    \"Atlanta DTH, Inc.\",\n\t[3]byte{0, 31, 170}:    \"Taseon, Inc.\",\n\t[3]byte{0, 31, 171}:    \"I.S HIGH TECH.INC\",\n\t[3]byte{0, 31, 172}:    \"Goodmill Systems Ltd\",\n\t[3]byte{0, 31, 173}:    \"Brown Innovations, Inc\",\n\t[3]byte{0, 31, 174}:    \"Blick South Africa (Pty) Ltd\",\n\t[3]byte{0, 31, 175}:    \"NextIO, Inc.\",\n\t[3]byte{0, 31, 176}:    \"TimeIPS, Inc.\",\n\t[3]byte{0, 31, 177}:    \"Cybertech Inc.\",\n\t[3]byte{0, 31, 178}:    \"Sontheim Industrie Elektronik GmbH\",\n\t[3]byte{0, 31, 179}:    \"2Wire Inc\",\n\t[3]byte{0, 31, 180}:    \"SmartShare Systems\",\n\t[3]byte{0, 31, 181}:    \"I/O Interconnect Inc.\",\n\t[3]byte{0, 31, 182}:    \"Chi Lin Technology Co., Ltd.\",\n\t[3]byte{0, 31, 183}:    \"WiMate Technologies Corp.\",\n\t[3]byte{0, 31, 184}:    \"Universal Remote Control, Inc.\",\n\t[3]byte{0, 31, 185}:    \"Paltronics\",\n\t[3]byte{0, 31, 186}:    \"Boyoung Tech\",\n\t[3]byte{0, 31, 187}:    \"Xenatech Co.,LTD\",\n\t[3]byte{0, 31, 188}:    \"EVGA Corporation\",\n\t[3]byte{0, 31, 189}:    \"Kyocera Wireless Corp.\",\n\t[3]byte{0, 31, 190}:    \"Shenzhen Mopnet Industrial Co.,Ltd\",\n\t[3]byte{0, 31, 191}:    \"Fulhua Microelectronics Corp. Taiwan Branch\",\n\t[3]byte{0, 31, 192}:    \"Control Express Finland Oy\",\n\t[3]byte{0, 31, 193}:    \"Hanlong Technology Co.,LTD\",\n\t[3]byte{0, 31, 194}:    \"Jow Tong Technology Co Ltd\",\n\t[3]byte{0, 31, 195}:    \"SmartSynch, Inc\",\n\t[3]byte{0, 31, 196}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 31, 197}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 31, 198}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 31, 199}:    \"Casio Hitachi Mobile Communications Co., Ltd.\",\n\t[3]byte{0, 31, 200}:    \"Up-Today Industrial Co., Ltd.\",\n\t[3]byte{0, 31, 201}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 31, 202}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 31, 203}:    \"NIW Solutions\",\n\t[3]byte{0, 31, 204}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 31, 205}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 31, 206}:    \"QTECH LLC\",\n\t[3]byte{0, 31, 207}:    \"MSI Technology GmbH\",\n\t[3]byte{0, 31, 208}:    \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{0, 31, 209}:    \"OPTEX CO.,LTD.\",\n\t[3]byte{0, 31, 210}:    \"COMMTECH TECHNOLOGY MACAO COMMERCIAL OFFSHORE LTD.\",\n\t[3]byte{0, 31, 211}:    \"RIVA Networks Inc.\",\n\t[3]byte{0, 31, 212}:    \"4IPNET, INC.\",\n\t[3]byte{0, 31, 213}:    \"MICRORISC s.r.o.\",\n\t[3]byte{0, 31, 214}:    \"Shenzhen Allywll\",\n\t[3]byte{0, 31, 215}:    \"TELERAD SA\",\n\t[3]byte{0, 31, 216}:    \"A-TRUST COMPUTER CORPORATION\",\n\t[3]byte{0, 31, 217}:    \"RSD Communications Ltd\",\n\t[3]byte{0, 31, 218}:    \"Nortel Networks\",\n\t[3]byte{0, 31, 219}:    \"Network Supply Corp.,\",\n\t[3]byte{0, 31, 220}:    \"Mobile Safe Track Ltd\",\n\t[3]byte{0, 31, 221}:    \"GDI LLC\",\n\t[3]byte{0, 31, 222}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 31, 223}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 31, 224}:    \"EdgeVelocity Corp\",\n\t[3]byte{0, 31, 225}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 31, 226}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 31, 227}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{0, 31, 228}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 31, 229}:    \"In-Circuit GmbH\",\n\t[3]byte{0, 31, 230}:    \"Alphion Corporation\",\n\t[3]byte{0, 31, 231}:    \"Simet\",\n\t[3]byte{0, 31, 232}:    \"KURUSUGAWA Electronics Industry Inc,.\",\n\t[3]byte{0, 31, 233}:    \"Printrex, Inc.\",\n\t[3]byte{0, 31, 234}:    \"Applied Media Technologies Corporation\",\n\t[3]byte{0, 31, 235}:    \"Trio Datacom Pty Ltd\",\n\t[3]byte{0, 31, 236}:    \"Synapse Électronique\",\n\t[3]byte{0, 31, 237}:    \"Tecan Systems Inc.\",\n\t[3]byte{0, 31, 238}:    \"ubisys technologies GmbH\",\n\t[3]byte{0, 31, 239}:    \"SHINSEI INDUSTRIES CO.,LTD\",\n\t[3]byte{0, 31, 240}:    \"Audio Partnership\",\n\t[3]byte{0, 31, 241}:    \"Paradox Hellas S.A.\",\n\t[3]byte{0, 31, 242}:    \"VIA Technologies, Inc.\",\n\t[3]byte{0, 31, 243}:    \"Apple, Inc.\",\n\t[3]byte{0, 31, 244}:    \"Power Monitors, Inc.\",\n\t[3]byte{0, 31, 245}:    \"Kongsberg Defence & Aerospace\",\n\t[3]byte{0, 31, 246}:    \"PS Audio International\",\n\t[3]byte{0, 31, 247}:    \"Nakajima All Precision Co., Ltd.\",\n\t[3]byte{0, 31, 248}:    \"Siemens AG, Sector Industry, Drive Technologies, Motion Control Systems\",\n\t[3]byte{0, 31, 249}:    \"Advanced Knowledge Associates\",\n\t[3]byte{0, 31, 250}:    \"Coretree, Co, Ltd\",\n\t[3]byte{0, 31, 251}:    \"Green Packet Bhd\",\n\t[3]byte{0, 31, 252}:    \"Riccius+Sohn GmbH\",\n\t[3]byte{0, 31, 253}:    \"Indigo Mobile Technologies Corp.\",\n\t[3]byte{0, 31, 254}:    \"HPN Supply Chain\",\n\t[3]byte{0, 31, 255}:    \"Respironics, Inc.\",\n\t[3]byte{0, 32, 0}:      \"LEXMARK INTERNATIONAL, INC.\",\n\t[3]byte{0, 32, 1}:      \"DSP SOLUTIONS, INC.\",\n\t[3]byte{0, 32, 2}:      \"SERITECH ENTERPRISE CO., LTD.\",\n\t[3]byte{0, 32, 3}:      \"PIXEL POWER LTD.\",\n\t[3]byte{0, 32, 4}:      \"YAMATAKE-HONEYWELL CO., LTD.\",\n\t[3]byte{0, 32, 5}:      \"SIMPLE TECHNOLOGY\",\n\t[3]byte{0, 32, 6}:      \"GARRETT COMMUNICATIONS, INC.\",\n\t[3]byte{0, 32, 7}:      \"SFA, INC.\",\n\t[3]byte{0, 32, 8}:      \"CABLE & COMPUTER TECHNOLOGY\",\n\t[3]byte{0, 32, 9}:      \"PACKARD BELL ELEC., INC.\",\n\t[3]byte{0, 32, 10}:     \"SOURCE-COMM CORP.\",\n\t[3]byte{0, 32, 11}:     \"OCTAGON SYSTEMS CORP.\",\n\t[3]byte{0, 32, 12}:     \"ADASTRA SYSTEMS CORP.\",\n\t[3]byte{0, 32, 13}:     \"CARL ZEISS\",\n\t[3]byte{0, 32, 14}:     \"NSSLGlobal Technologies AS\",\n\t[3]byte{0, 32, 15}:     \"EBRAINS Inc\",\n\t[3]byte{0, 32, 16}:     \"JEOL SYSTEM TECHNOLOGY CO. LTD\",\n\t[3]byte{0, 32, 17}:     \"CANOPUS CO., LTD.\",\n\t[3]byte{0, 32, 18}:     \"CAMTRONICS MEDICAL SYSTEMS\",\n\t[3]byte{0, 32, 19}:     \"DIVERSIFIED TECHNOLOGY, INC.\",\n\t[3]byte{0, 32, 20}:     \"GLOBAL VIEW CO., LTD.\",\n\t[3]byte{0, 32, 21}:     \"ACTIS COMPUTER SA\",\n\t[3]byte{0, 32, 22}:     \"SHOWA ELECTRIC WIRE & CABLE CO\",\n\t[3]byte{0, 32, 23}:     \"ORBOTECH\",\n\t[3]byte{0, 32, 24}:     \"CIS TECHNOLOGY INC.\",\n\t[3]byte{0, 32, 25}:     \"OHLER GMBH\",\n\t[3]byte{0, 32, 26}:     \"MRV Communications, Inc.\",\n\t[3]byte{0, 32, 27}:     \"NORTHERN TELECOM/NETWORK\",\n\t[3]byte{0, 32, 28}:     \"EXCEL, INC.\",\n\t[3]byte{0, 32, 29}:     \"KATANA PRODUCTS\",\n\t[3]byte{0, 32, 30}:     \"NETQUEST CORPORATION\",\n\t[3]byte{0, 32, 31}:     \"BEST POWER TECHNOLOGY, INC.\",\n\t[3]byte{0, 32, 32}:     \"MEGATRON COMPUTER INDUSTRIES PTY, LTD.\",\n\t[3]byte{0, 32, 33}:     \"ALGORITHMS SOFTWARE PVT. LTD.\",\n\t[3]byte{0, 32, 34}:     \"NMS Communications\",\n\t[3]byte{0, 32, 35}:     \"T.C. TECHNOLOGIES PTY. LTD\",\n\t[3]byte{0, 32, 36}:     \"PACIFIC COMMUNICATION SCIENCES\",\n\t[3]byte{0, 32, 37}:     \"CONTROL TECHNOLOGY, INC.\",\n\t[3]byte{0, 32, 38}:     \"AMKLY SYSTEMS, INC.\",\n\t[3]byte{0, 32, 39}:     \"MING FORTUNE INDUSTRY CO., LTD\",\n\t[3]byte{0, 32, 40}:     \"WEST EGG SYSTEMS, INC.\",\n\t[3]byte{0, 32, 41}:     \"TELEPROCESSING PRODUCTS, INC.\",\n\t[3]byte{0, 32, 42}:     \"N.V. DZINE\",\n\t[3]byte{0, 32, 43}:     \"ADVANCED TELECOMMUNICATIONS MODULES, LTD.\",\n\t[3]byte{0, 32, 44}:     \"WELLTRONIX CO., LTD.\",\n\t[3]byte{0, 32, 45}:     \"TAIYO CORPORATION\",\n\t[3]byte{0, 32, 46}:     \"DAYSTAR DIGITAL\",\n\t[3]byte{0, 32, 47}:     \"ZETA COMMUNICATIONS, LTD.\",\n\t[3]byte{0, 32, 48}:     \"ANALOG & DIGITAL SYSTEMS\",\n\t[3]byte{0, 32, 49}:     \"Tattile SRL \",\n\t[3]byte{0, 32, 50}:     \"ALCATEL TAISEL\",\n\t[3]byte{0, 32, 51}:     \"SYNAPSE TECHNOLOGIES, INC.\",\n\t[3]byte{0, 32, 52}:     \"ROTEC INDUSTRIEAUTOMATION GMBH\",\n\t[3]byte{0, 32, 53}:     \"IBM Corp\",\n\t[3]byte{0, 32, 54}:     \"BMC SOFTWARE\",\n\t[3]byte{0, 32, 55}:     \"Seagate Technology\",\n\t[3]byte{0, 32, 56}:     \"VME MICROSYSTEMS INTERNATIONAL CORPORATION\",\n\t[3]byte{0, 32, 57}:     \"SCINETS\",\n\t[3]byte{0, 32, 58}:     \"DIGITAL BI0METRICS INC.\",\n\t[3]byte{0, 32, 59}:     \"WISDM LTD.\",\n\t[3]byte{0, 32, 60}:     \"EUROTIME AB\",\n\t[3]byte{0, 32, 61}:     \"Honeywell Environmental & Combustion Controls\",\n\t[3]byte{0, 32, 62}:     \"LogiCan Technologies, Inc.\",\n\t[3]byte{0, 32, 63}:     \"JUKI CORPORATION\",\n\t[3]byte{0, 32, 64}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 32, 65}:     \"DATA NET\",\n\t[3]byte{0, 32, 66}:     \"DATAMETRICS CORP.\",\n\t[3]byte{0, 32, 67}:     \"NEURON COMPANY LIMITED\",\n\t[3]byte{0, 32, 68}:     \"GENITECH PTY LTD\",\n\t[3]byte{0, 32, 69}:     \"ION Networks, Inc.\",\n\t[3]byte{0, 32, 70}:     \"CIPRICO, INC.\",\n\t[3]byte{0, 32, 71}:     \"STEINBRECHER CORP.\",\n\t[3]byte{0, 32, 72}:     \"Marconi Communications\",\n\t[3]byte{0, 32, 73}:     \"COMTRON, INC.\",\n\t[3]byte{0, 32, 74}:     \"PRONET GMBH\",\n\t[3]byte{0, 32, 75}:     \"AUTOCOMPUTER CO., LTD.\",\n\t[3]byte{0, 32, 76}:     \"MITRON COMPUTER PTE LTD.\",\n\t[3]byte{0, 32, 77}:     \"INOVIS GMBH\",\n\t[3]byte{0, 32, 78}:     \"NETWORK SECURITY SYSTEMS, INC.\",\n\t[3]byte{0, 32, 79}:     \"DEUTSCHE AEROSPACE AG\",\n\t[3]byte{0, 32, 80}:     \"KOREA COMPUTER INC.\",\n\t[3]byte{0, 32, 81}:     \"Verilink Corporation\",\n\t[3]byte{0, 32, 82}:     \"RAGULA SYSTEMS\",\n\t[3]byte{0, 32, 83}:     \"HUNTSVILLE MICROSYSTEMS, INC.\",\n\t[3]byte{0, 32, 84}:     \"Sycamore Networks\",\n\t[3]byte{0, 32, 85}:     \"ALTECH CO., LTD.\",\n\t[3]byte{0, 32, 86}:     \"NEOPRODUCTS\",\n\t[3]byte{0, 32, 87}:     \"TITZE DATENTECHNIK GmbH\",\n\t[3]byte{0, 32, 88}:     \"ALLIED SIGNAL INC.\",\n\t[3]byte{0, 32, 89}:     \"MIRO COMPUTER PRODUCTS AG\",\n\t[3]byte{0, 32, 90}:     \"COMPUTER IDENTICS\",\n\t[3]byte{0, 32, 91}:     \"Kentrox, LLC\",\n\t[3]byte{0, 32, 92}:     \"InterNet Systems of Florida, Inc.\",\n\t[3]byte{0, 32, 93}:     \"NANOMATIC OY\",\n\t[3]byte{0, 32, 94}:     \"CASTLE ROCK, INC.\",\n\t[3]byte{0, 32, 95}:     \"GAMMADATA COMPUTER GMBH\",\n\t[3]byte{0, 32, 96}:     \"ALCATEL ITALIA S.p.A.\",\n\t[3]byte{0, 32, 97}:     \"GarrettCom, Inc.\",\n\t[3]byte{0, 32, 98}:     \"SCORPION LOGIC, LTD.\",\n\t[3]byte{0, 32, 99}:     \"WIPRO INFOTECH LTD.\",\n\t[3]byte{0, 32, 100}:    \"PROTEC MICROSYSTEMS, INC.\",\n\t[3]byte{0, 32, 101}:    \"SUPERNET NETWORKING INC.\",\n\t[3]byte{0, 32, 102}:    \"GENERAL MAGIC, INC.\",\n\t[3]byte{0, 32, 103}:    \"Private\",\n\t[3]byte{0, 32, 104}:    \"ISDYNE\",\n\t[3]byte{0, 32, 105}:    \"ISDN SYSTEMS CORPORATION\",\n\t[3]byte{0, 32, 106}:    \"OSAKA COMPUTER CORP.\",\n\t[3]byte{0, 32, 107}:    \"KONICA MINOLTA HOLDINGS, INC.\",\n\t[3]byte{0, 32, 108}:    \"EVERGREEN TECHNOLOGY CORP.\",\n\t[3]byte{0, 32, 109}:    \"DATA RACE, INC.\",\n\t[3]byte{0, 32, 110}:    \"XACT, INC.\",\n\t[3]byte{0, 32, 111}:    \"FLOWPOINT CORPORATION\",\n\t[3]byte{0, 32, 112}:    \"HYNET, LTD.\",\n\t[3]byte{0, 32, 113}:    \"IBR GMBH\",\n\t[3]byte{0, 32, 114}:    \"WORKLINK INNOVATIONS\",\n\t[3]byte{0, 32, 115}:    \"FUSION SYSTEMS CORPORATION\",\n\t[3]byte{0, 32, 116}:    \"SUNGWOON SYSTEMS\",\n\t[3]byte{0, 32, 117}:    \"MOTOROLA COMMUNICATION ISRAEL\",\n\t[3]byte{0, 32, 118}:    \"REUDO CORPORATION\",\n\t[3]byte{0, 32, 119}:    \"KARDIOS SYSTEMS CORP.\",\n\t[3]byte{0, 32, 120}:    \"RUNTOP, INC.\",\n\t[3]byte{0, 32, 121}:    \"MIKRON GMBH\",\n\t[3]byte{0, 32, 122}:    \"WiSE Communications, Inc.\",\n\t[3]byte{0, 32, 123}:    \"Intel Corporation\",\n\t[3]byte{0, 32, 124}:    \"AUTEC GMBH\",\n\t[3]byte{0, 32, 125}:    \"ADVANCED COMPUTER APPLICATIONS\",\n\t[3]byte{0, 32, 126}:    \"FINECOM CO., LTD.\",\n\t[3]byte{0, 32, 127}:    \"KYOEI SANGYO CO., LTD.\",\n\t[3]byte{0, 32, 128}:    \"SYNERGY (UK) LTD.\",\n\t[3]byte{0, 32, 129}:    \"TITAN ELECTRONICS\",\n\t[3]byte{0, 32, 130}:    \"ONEAC CORPORATION\",\n\t[3]byte{0, 32, 131}:    \"PRESTICOM INCORPORATED\",\n\t[3]byte{0, 32, 132}:    \"OCE PRINTING SYSTEMS, GMBH\",\n\t[3]byte{0, 32, 133}:    \"Eaton Corporation\",\n\t[3]byte{0, 32, 134}:    \"MICROTECH ELECTRONICS LIMITED\",\n\t[3]byte{0, 32, 135}:    \"MEMOTEC, INC.\",\n\t[3]byte{0, 32, 136}:    \"GLOBAL VILLAGE COMMUNICATION\",\n\t[3]byte{0, 32, 137}:    \"T3PLUS NETWORKING, INC.\",\n\t[3]byte{0, 32, 138}:    \"SONIX COMMUNICATIONS, LTD.\",\n\t[3]byte{0, 32, 139}:    \"LAPIS TECHNOLOGIES, INC.\",\n\t[3]byte{0, 32, 140}:    \"GALAXY NETWORKS, INC.\",\n\t[3]byte{0, 32, 141}:    \"CMD TECHNOLOGY\",\n\t[3]byte{0, 32, 142}:    \"CHEVIN SOFTWARE ENG. LTD.\",\n\t[3]byte{0, 32, 143}:    \"ECI Telecom Ltd.\",\n\t[3]byte{0, 32, 144}:    \"ADVANCED COMPRESSION TECHNOLOGY, INC.\",\n\t[3]byte{0, 32, 145}:    \"J125, NATIONAL SECURITY AGENCY\",\n\t[3]byte{0, 32, 146}:    \"CHESS ENGINEERING B.V.\",\n\t[3]byte{0, 32, 147}:    \"LANDINGS TECHNOLOGY CORP.\",\n\t[3]byte{0, 32, 148}:    \"CUBIX CORPORATION\",\n\t[3]byte{0, 32, 149}:    \"RIVA ELECTRONICS\",\n\t[3]byte{0, 32, 150}:    \"Invensys\",\n\t[3]byte{0, 32, 151}:    \"APPLIED SIGNAL TECHNOLOGY\",\n\t[3]byte{0, 32, 152}:    \"HECTRONIC AB\",\n\t[3]byte{0, 32, 153}:    \"BON ELECTRIC CO., LTD.\",\n\t[3]byte{0, 32, 154}:    \"THE 3DO COMPANY\",\n\t[3]byte{0, 32, 155}:    \"ERSAT ELECTRONIC GMBH\",\n\t[3]byte{0, 32, 156}:    \"PRIMARY ACCESS CORP.\",\n\t[3]byte{0, 32, 157}:    \"LIPPERT AUTOMATIONSTECHNIK\",\n\t[3]byte{0, 32, 158}:    \"BROWN'S OPERATING SYSTEM SERVICES, LTD.\",\n\t[3]byte{0, 32, 159}:    \"MERCURY COMPUTER SYSTEMS, INC.\",\n\t[3]byte{0, 32, 160}:    \"OA LABORATORY CO., LTD.\",\n\t[3]byte{0, 32, 161}:    \"DOVATRON\",\n\t[3]byte{0, 32, 162}:    \"GALCOM NETWORKING LTD.\",\n\t[3]byte{0, 32, 163}:    \"Harmonic, Inc\",\n\t[3]byte{0, 32, 164}:    \"MULTIPOINT NETWORKS\",\n\t[3]byte{0, 32, 165}:    \"API ENGINEERING\",\n\t[3]byte{0, 32, 166}:    \"Proxim Wireless\",\n\t[3]byte{0, 32, 167}:    \"PAIRGAIN TECHNOLOGIES, INC.\",\n\t[3]byte{0, 32, 168}:    \"SAST TECHNOLOGY CORP.\",\n\t[3]byte{0, 32, 169}:    \"WHITE HORSE INDUSTRIAL\",\n\t[3]byte{0, 32, 170}:    \"Ericsson Television Limited\",\n\t[3]byte{0, 32, 171}:    \"MICRO INDUSTRIES CORP.\",\n\t[3]byte{0, 32, 172}:    \"INTERFLEX DATENSYSTEME GMBH\",\n\t[3]byte{0, 32, 173}:    \"LINQ SYSTEMS\",\n\t[3]byte{0, 32, 174}:    \"ORNET DATA COMMUNICATION TECH.\",\n\t[3]byte{0, 32, 175}:    \"3COM\",\n\t[3]byte{0, 32, 176}:    \"GATEWAY DEVICES, INC.\",\n\t[3]byte{0, 32, 177}:    \"COMTECH RESEARCH INC.\",\n\t[3]byte{0, 32, 178}:    \"GKD Gesellschaft Fur Kommunikation Und Datentechnik\",\n\t[3]byte{0, 32, 179}:    \"Tattile SRL \",\n\t[3]byte{0, 32, 180}:    \"TERMA ELEKTRONIK AS\",\n\t[3]byte{0, 32, 181}:    \"YASKAWA ELECTRIC CORPORATION\",\n\t[3]byte{0, 32, 182}:    \"AGILE NETWORKS, INC.\",\n\t[3]byte{0, 32, 183}:    \"NAMAQUA COMPUTERWARE\",\n\t[3]byte{0, 32, 184}:    \"PRIME OPTION, INC.\",\n\t[3]byte{0, 32, 185}:    \"METRICOM, INC.\",\n\t[3]byte{0, 32, 186}:    \"CENTER FOR HIGH PERFORMANCE\",\n\t[3]byte{0, 32, 187}:    \"ZAX CORPORATION\",\n\t[3]byte{0, 32, 188}:    \"Long Reach Networks Pty Ltd\",\n\t[3]byte{0, 32, 189}:    \"NIOBRARA R & D CORPORATION\",\n\t[3]byte{0, 32, 190}:    \"LAN ACCESS CORP.\",\n\t[3]byte{0, 32, 191}:    \"AEHR TEST SYSTEMS\",\n\t[3]byte{0, 32, 192}:    \"PULSE ELECTRONICS, INC.\",\n\t[3]byte{0, 32, 193}:    \"SAXA, Inc.\",\n\t[3]byte{0, 32, 194}:    \"TEXAS MEMORY SYSTEMS, INC.\",\n\t[3]byte{0, 32, 195}:    \"COUNTER SOLUTIONS LTD.\",\n\t[3]byte{0, 32, 196}:    \"INET,INC.\",\n\t[3]byte{0, 32, 197}:    \"EAGLE TECHNOLOGY\",\n\t[3]byte{0, 32, 198}:    \"NECTEC\",\n\t[3]byte{0, 32, 199}:    \"AKAI Professional M.I. Corp.\",\n\t[3]byte{0, 32, 200}:    \"LARSCOM INCORPORATED\",\n\t[3]byte{0, 32, 201}:    \"VICTRON BV\",\n\t[3]byte{0, 32, 202}:    \"DIGITAL OCEAN\",\n\t[3]byte{0, 32, 203}:    \"PRETEC ELECTRONICS CORP.\",\n\t[3]byte{0, 32, 204}:    \"DIGITAL SERVICES, LTD.\",\n\t[3]byte{0, 32, 205}:    \"HYBRID NETWORKS, INC.\",\n\t[3]byte{0, 32, 206}:    \"LOGICAL DESIGN GROUP, INC.\",\n\t[3]byte{0, 32, 207}:    \"TEST & MEASUREMENT SYSTEMS INC\",\n\t[3]byte{0, 32, 208}:    \"VERSALYNX CORPORATION\",\n\t[3]byte{0, 32, 209}:    \"MICROCOMPUTER SYSTEMS (M) SDN.\",\n\t[3]byte{0, 32, 210}:    \"RAD DATA COMMUNICATIONS, LTD.\",\n\t[3]byte{0, 32, 211}:    \"OST (OUEST STANDARD TELEMATIQU\",\n\t[3]byte{0, 32, 212}:    \"Cabletron Systems, Inc.\",\n\t[3]byte{0, 32, 213}:    \"VIPA GMBH\",\n\t[3]byte{0, 32, 214}:    \"Breezecom, Ltd.\",\n\t[3]byte{0, 32, 215}:    \"JAPAN MINICOMPUTER SYSTEMS CO., Ltd.\",\n\t[3]byte{0, 32, 216}:    \"Nortel Networks\",\n\t[3]byte{0, 32, 217}:    \"PANASONIC TECHNOLOGIES, INC./MIECO-US\",\n\t[3]byte{0, 32, 218}:    \"Alcatel-Lucent Enterprise\",\n\t[3]byte{0, 32, 219}:    \"XNET TECHNOLOGY, INC.\",\n\t[3]byte{0, 32, 220}:    \"DENSITRON TAIWAN LTD.\",\n\t[3]byte{0, 32, 221}:    \"Cybertec Pty Ltd\",\n\t[3]byte{0, 32, 222}:    \"JAPAN DIGITAL LABORAT'Y CO.LTD\",\n\t[3]byte{0, 32, 223}:    \"KYOSAN ELECTRIC MFG. CO., LTD.\",\n\t[3]byte{0, 32, 224}:    \"Actiontec Electronics, Inc\",\n\t[3]byte{0, 32, 225}:    \"ALAMAR ELECTRONICS\",\n\t[3]byte{0, 32, 226}:    \"INFORMATION RESOURCE ENGINEERING\",\n\t[3]byte{0, 32, 227}:    \"MCD KENCOM CORPORATION\",\n\t[3]byte{0, 32, 228}:    \"HSING TECH ENTERPRISE CO., LTD\",\n\t[3]byte{0, 32, 229}:    \"APEX DATA, INC.\",\n\t[3]byte{0, 32, 230}:    \"LIDKOPING MACHINE TOOLS AB\",\n\t[3]byte{0, 32, 231}:    \"B&W NUCLEAR SERVICE COMPANY\",\n\t[3]byte{0, 32, 232}:    \"DATATREK CORPORATION\",\n\t[3]byte{0, 32, 233}:    \"DANTEL\",\n\t[3]byte{0, 32, 234}:    \"EFFICIENT NETWORKS, INC.\",\n\t[3]byte{0, 32, 235}:    \"CINCINNATI MICROWAVE, INC.\",\n\t[3]byte{0, 32, 236}:    \"TECHWARE SYSTEMS CORP.\",\n\t[3]byte{0, 32, 237}:    \"GIGA-BYTE TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 32, 238}:    \"GTECH CORPORATION\",\n\t[3]byte{0, 32, 239}:    \"USC CORPORATION\",\n\t[3]byte{0, 32, 240}:    \"UNIVERSAL MICROELECTRONICS CO.\",\n\t[3]byte{0, 32, 241}:    \"ALTOS INDIA LIMITED\",\n\t[3]byte{0, 32, 242}:    \"Oracle Corporation \",\n\t[3]byte{0, 32, 243}:    \"RAYNET CORPORATION\",\n\t[3]byte{0, 32, 244}:    \"SPECTRIX CORPORATION\",\n\t[3]byte{0, 32, 245}:    \"PANDATEL AG\",\n\t[3]byte{0, 32, 246}:    \"NET TEK  AND KARLNET, INC.\",\n\t[3]byte{0, 32, 247}:    \"CYBERDATA CORPORATION\",\n\t[3]byte{0, 32, 248}:    \"CARRERA COMPUTERS, INC.\",\n\t[3]byte{0, 32, 249}:    \"PARALINK NETWORKS, INC.\",\n\t[3]byte{0, 32, 250}:    \"GDE SYSTEMS, INC.\",\n\t[3]byte{0, 32, 251}:    \"OCTEL COMMUNICATIONS CORP.\",\n\t[3]byte{0, 32, 252}:    \"MATROX\",\n\t[3]byte{0, 32, 253}:    \"ITV TECHNOLOGIES, INC.\",\n\t[3]byte{0, 32, 254}:    \"TOPWARE INC. / GRAND COMPUTER\",\n\t[3]byte{0, 32, 255}:    \"SYMMETRICAL TECHNOLOGIES\",\n\t[3]byte{0, 33, 0}:      \"Gemtek Technology Co., Ltd.\",\n\t[3]byte{0, 33, 1}:      \"Aplicaciones Electronicas Quasar (AEQ)\",\n\t[3]byte{0, 33, 2}:      \"UpdateLogic Inc.\",\n\t[3]byte{0, 33, 3}:      \"GHI Electronics, LLC\",\n\t[3]byte{0, 33, 4}:      \"Gigaset Communications GmbH\",\n\t[3]byte{0, 33, 5}:      \"Alcatel-Lucent IPD\",\n\t[3]byte{0, 33, 6}:      \"RIM Testing Services\",\n\t[3]byte{0, 33, 7}:      \"Seowonintech Co Ltd.\",\n\t[3]byte{0, 33, 8}:      \"Nokia Danmark A/S\",\n\t[3]byte{0, 33, 9}:      \"Nokia Danmark A/S\",\n\t[3]byte{0, 33, 10}:     \"byd:sign Corporation\",\n\t[3]byte{0, 33, 11}:     \"GEMINI TRAZE RFID PVT. LTD.\",\n\t[3]byte{0, 33, 12}:     \"Cymtec Systems, Inc.\",\n\t[3]byte{0, 33, 13}:     \"SAMSIN INNOTEC\",\n\t[3]byte{0, 33, 14}:     \"Orpak Systems L.T.D.\",\n\t[3]byte{0, 33, 15}:     \"Cernium Corp\",\n\t[3]byte{0, 33, 16}:     \"Clearbox Systems\",\n\t[3]byte{0, 33, 17}:     \"Uniphone Inc.\",\n\t[3]byte{0, 33, 18}:     \"WISCOM SYSTEM CO.,LTD\",\n\t[3]byte{0, 33, 19}:     \"Padtec S/A\",\n\t[3]byte{0, 33, 20}:     \"Hylab Technology Inc.\",\n\t[3]byte{0, 33, 21}:     \"PHYWE Systeme GmbH & Co. KG\",\n\t[3]byte{0, 33, 22}:     \"Transcon Electronic Systems, spol. s r. o.\",\n\t[3]byte{0, 33, 23}:     \"Tellord\",\n\t[3]byte{0, 33, 24}:     \"Athena Tech, Inc.\",\n\t[3]byte{0, 33, 25}:     \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{0, 33, 26}:     \"LInTech Corporation\",\n\t[3]byte{0, 33, 27}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 33, 28}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 33, 29}:     \"Dataline AB\",\n\t[3]byte{0, 33, 30}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 33, 31}:     \"SHINSUNG DELTATECH CO.,LTD.\",\n\t[3]byte{0, 33, 32}:     \"Sequel Technologies\",\n\t[3]byte{0, 33, 33}:     \"VRmagic GmbH\",\n\t[3]byte{0, 33, 34}:     \"Chip-pro Ltd.\",\n\t[3]byte{0, 33, 35}:     \"Aerosat Avionics\",\n\t[3]byte{0, 33, 36}:     \"Optos Plc\",\n\t[3]byte{0, 33, 37}:     \"KUK JE TONG SHIN Co.,LTD\",\n\t[3]byte{0, 33, 38}:     \"Shenzhen Torch Equipment Co., Ltd.\",\n\t[3]byte{0, 33, 39}:     \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{0, 33, 40}:     \"Oracle Corporation\",\n\t[3]byte{0, 33, 41}:     \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 33, 42}:     \"Audiovox Corporation\",\n\t[3]byte{0, 33, 43}:     \"MSA Auer\",\n\t[3]byte{0, 33, 44}:     \"SemIndia System Private Limited\",\n\t[3]byte{0, 33, 45}:     \"SCIMOLEX CORPORATION\",\n\t[3]byte{0, 33, 46}:     \"dresden-elektronik\",\n\t[3]byte{0, 33, 47}:     \"Phoebe Micro Inc.\",\n\t[3]byte{0, 33, 48}:     \"Keico Hightech Inc.\",\n\t[3]byte{0, 33, 49}:     \"Blynke Inc.\",\n\t[3]byte{0, 33, 50}:     \"Masterclock, Inc.\",\n\t[3]byte{0, 33, 51}:     \"Building B, Inc\",\n\t[3]byte{0, 33, 52}:     \"Brandywine Communications\",\n\t[3]byte{0, 33, 53}:     \"ALCATEL-LUCENT\",\n\t[3]byte{0, 33, 54}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 33, 55}:     \"Bay Controls, LLC\",\n\t[3]byte{0, 33, 56}:     \"Cepheid\",\n\t[3]byte{0, 33, 57}:     \"Escherlogic Inc.\",\n\t[3]byte{0, 33, 58}:     \"Winchester Systems Inc.\",\n\t[3]byte{0, 33, 59}:     \"Berkshire Products, Inc\",\n\t[3]byte{0, 33, 60}:     \"AliphCom\",\n\t[3]byte{0, 33, 61}:     \"Cermetek Microelectronics, Inc.\",\n\t[3]byte{0, 33, 62}:     \"TomTom\",\n\t[3]byte{0, 33, 63}:     \"A-Team Technology Ltd.\",\n\t[3]byte{0, 33, 64}:     \"EN Technologies Inc.\",\n\t[3]byte{0, 33, 65}:     \"RADLIVE\",\n\t[3]byte{0, 33, 66}:     \"Advanced Control Systems doo\",\n\t[3]byte{0, 33, 67}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 33, 68}:     \"SS Telecoms\",\n\t[3]byte{0, 33, 69}:     \"Semptian Technologies Ltd.\",\n\t[3]byte{0, 33, 70}:     \"Sanmina-SCI\",\n\t[3]byte{0, 33, 71}:     \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 33, 72}:     \"Kaco Solar Korea\",\n\t[3]byte{0, 33, 73}:     \"China Daheng Group ,Inc.\",\n\t[3]byte{0, 33, 74}:     \"Pixel Velocity, Inc\",\n\t[3]byte{0, 33, 75}:     \"Shenzhen HAMP Science & Technology Co.,Ltd\",\n\t[3]byte{0, 33, 76}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 33, 77}:     \"Guangzhou Skytone Transmission Technology Com. Ltd.\",\n\t[3]byte{0, 33, 78}:     \"GS Yuasa Power Supply Ltd.\",\n\t[3]byte{0, 33, 79}:     \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{0, 33, 80}:     \"EYEVIEW ELECTRONICS\",\n\t[3]byte{0, 33, 81}:     \"Millinet Co., Ltd.\",\n\t[3]byte{0, 33, 82}:     \"General Satellite Research & Development Limited\",\n\t[3]byte{0, 33, 83}:     \"SeaMicro Inc.\",\n\t[3]byte{0, 33, 84}:     \"D-TACQ Solutions Ltd\",\n\t[3]byte{0, 33, 85}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 33, 86}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 33, 87}:     \"National Datacast, Inc.\",\n\t[3]byte{0, 33, 88}:     \"Style Flying Technology Co.\",\n\t[3]byte{0, 33, 89}:     \"Juniper Networks\",\n\t[3]byte{0, 33, 90}:     \"Hewlett Packard\",\n\t[3]byte{0, 33, 91}:     \"SenseAnywhere\",\n\t[3]byte{0, 33, 92}:     \"Intel Corporate\",\n\t[3]byte{0, 33, 93}:     \"Intel Corporate\",\n\t[3]byte{0, 33, 94}:     \"IBM Corp\",\n\t[3]byte{0, 33, 95}:     \"IHSE GmbH\",\n\t[3]byte{0, 33, 96}:     \"Hidea Solutions Co. Ltd.\",\n\t[3]byte{0, 33, 97}:     \"Yournet Inc.\",\n\t[3]byte{0, 33, 98}:     \"Nortel Networks\",\n\t[3]byte{0, 33, 99}:     \"ASKEY COMPUTER CORP\",\n\t[3]byte{0, 33, 100}:    \"Special Design Bureau for Seismic Instrumentation\",\n\t[3]byte{0, 33, 101}:    \"Presstek Inc.\",\n\t[3]byte{0, 33, 102}:    \"NovAtel Inc.\",\n\t[3]byte{0, 33, 103}:    \"HWA JIN T&I Corp.\",\n\t[3]byte{0, 33, 104}:    \"iVeia, LLC\",\n\t[3]byte{0, 33, 105}:    \"Prologix, LLC.\",\n\t[3]byte{0, 33, 106}:    \"Intel Corporate\",\n\t[3]byte{0, 33, 107}:    \"Intel Corporate\",\n\t[3]byte{0, 33, 108}:    \"ODVA\",\n\t[3]byte{0, 33, 109}:    \"Soltech Co., Ltd.\",\n\t[3]byte{0, 33, 110}:    \"Function ATI (Huizhou) Telecommunications Co., Ltd.\",\n\t[3]byte{0, 33, 111}:    \"SymCom, Inc.\",\n\t[3]byte{0, 33, 112}:    \"Dell Inc.\",\n\t[3]byte{0, 33, 113}:    \"Wesung TNC Co., Ltd.\",\n\t[3]byte{0, 33, 114}:    \"Seoultek Valley\",\n\t[3]byte{0, 33, 115}:    \"Ion Torrent Systems, Inc.\",\n\t[3]byte{0, 33, 116}:    \"AvaLAN Wireless\",\n\t[3]byte{0, 33, 117}:    \"Pacific Satellite International Ltd.\",\n\t[3]byte{0, 33, 118}:    \"YMax Telecom Ltd.\",\n\t[3]byte{0, 33, 119}:    \"W. L. Gore & Associates\",\n\t[3]byte{0, 33, 120}:    \"Matuschek Messtechnik GmbH\",\n\t[3]byte{0, 33, 121}:    \"IOGEAR, Inc.\",\n\t[3]byte{0, 33, 122}:    \"Sejin Electron, Inc.\",\n\t[3]byte{0, 33, 123}:    \"Bastec AB\",\n\t[3]byte{0, 33, 124}:    \"2Wire Inc\",\n\t[3]byte{0, 33, 125}:    \"PYXIS S.R.L.\",\n\t[3]byte{0, 33, 126}:    \"Telit Communication s.p.a\",\n\t[3]byte{0, 33, 127}:    \"Intraco Technology Pte Ltd\",\n\t[3]byte{0, 33, 128}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 33, 129}:    \"Si2 Microsystems Limited\",\n\t[3]byte{0, 33, 130}:    \"SandLinks Systems, Ltd.\",\n\t[3]byte{0, 33, 131}:    \"ANDRITZ HYDRO GmbH\",\n\t[3]byte{0, 33, 132}:    \"POWERSOFT SRL\",\n\t[3]byte{0, 33, 133}:    \"MICRO-STAR INT'L CO.,LTD.\",\n\t[3]byte{0, 33, 134}:    \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{0, 33, 135}:    \"Imacs GmbH\",\n\t[3]byte{0, 33, 136}:    \"EMC Corporation\",\n\t[3]byte{0, 33, 137}:    \"AppTech, Inc.\",\n\t[3]byte{0, 33, 138}:    \"Electronic Design and Manufacturing Company\",\n\t[3]byte{0, 33, 139}:    \"Wescon Technology, Inc.\",\n\t[3]byte{0, 33, 140}:    \"TopControl GMBH\",\n\t[3]byte{0, 33, 141}:    \"AP Router Ind. Eletronica LTDA\",\n\t[3]byte{0, 33, 142}:    \"MEKICS CO., LTD.\",\n\t[3]byte{0, 33, 143}:    \"Avantgarde Acoustic Lautsprechersysteme GmbH\",\n\t[3]byte{0, 33, 144}:    \"Goliath Solutions\",\n\t[3]byte{0, 33, 145}:    \"D-Link Corporation\",\n\t[3]byte{0, 33, 146}:    \"Baoding Galaxy Electronic Technology  Co.,Ltd\",\n\t[3]byte{0, 33, 147}:    \"Videofon MV\",\n\t[3]byte{0, 33, 148}:    \"Ping Communication\",\n\t[3]byte{0, 33, 149}:    \"GWD Media Limited\",\n\t[3]byte{0, 33, 150}:    \"Telsey  S.p.A.\",\n\t[3]byte{0, 33, 151}:    \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{0, 33, 152}:    \"Thai Radio Co, LTD\",\n\t[3]byte{0, 33, 153}:    \"Vacon Plc\",\n\t[3]byte{0, 33, 154}:    \"Cambridge Visual Networks Ltd\",\n\t[3]byte{0, 33, 155}:    \"Dell Inc.\",\n\t[3]byte{0, 33, 156}:    \"Honeywld Technology Corp.\",\n\t[3]byte{0, 33, 157}:    \"Adesys BV\",\n\t[3]byte{0, 33, 158}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 33, 159}:    \"SATEL OY\",\n\t[3]byte{0, 33, 160}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 33, 161}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 33, 162}:    \"EKE-Electronics Ltd.\",\n\t[3]byte{0, 33, 163}:    \"Micromint\",\n\t[3]byte{0, 33, 164}:    \"Dbii Networks\",\n\t[3]byte{0, 33, 165}:    \"ERLPhase Power Technologies Ltd.\",\n\t[3]byte{0, 33, 166}:    \"Videotec Spa\",\n\t[3]byte{0, 33, 167}:    \"Hantle System Co., Ltd.\",\n\t[3]byte{0, 33, 168}:    \"Telephonics Corporation\",\n\t[3]byte{0, 33, 169}:    \"Mobilink Telecom Co.,Ltd\",\n\t[3]byte{0, 33, 170}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 33, 171}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 33, 172}:    \"Infrared Integrated Systems Ltd\",\n\t[3]byte{0, 33, 173}:    \"Nordic ID Oy\",\n\t[3]byte{0, 33, 174}:    \"ALCATEL-LUCENT FRANCE - WTD\",\n\t[3]byte{0, 33, 175}:    \"Radio Frequency Systems\",\n\t[3]byte{0, 33, 176}:    \"Tyco Telecommunications\",\n\t[3]byte{0, 33, 177}:    \"DIGITAL SOLUTIONS LTD\",\n\t[3]byte{0, 33, 178}:    \"Fiberblaze A/S\",\n\t[3]byte{0, 33, 179}:    \"Ross Controls\",\n\t[3]byte{0, 33, 180}:    \"APRO MEDIA CO., LTD\",\n\t[3]byte{0, 33, 181}:    \"Galvanic Ltd\",\n\t[3]byte{0, 33, 182}:    \"Triacta Power Technologies Inc.\",\n\t[3]byte{0, 33, 183}:    \"LEXMARK INTERNATIONAL, INC.\",\n\t[3]byte{0, 33, 184}:    \"Inphi Corporation\",\n\t[3]byte{0, 33, 185}:    \"Universal Devices Inc.\",\n\t[3]byte{0, 33, 186}:    \"Texas Instruments\",\n\t[3]byte{0, 33, 187}:    \"Riken Keiki Co., Ltd.\",\n\t[3]byte{0, 33, 188}:    \"ZALA COMPUTER\",\n\t[3]byte{0, 33, 189}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 33, 190}:    \"Cisco SPVTG\",\n\t[3]byte{0, 33, 191}:    \"Hitachi High-Tech Control Systems Corporation\",\n\t[3]byte{0, 33, 192}:    \"Mobile Appliance, Inc.\",\n\t[3]byte{0, 33, 193}:    \"ABB Oy / Medium Voltage Products\",\n\t[3]byte{0, 33, 194}:    \"GL Communications Inc\",\n\t[3]byte{0, 33, 195}:    \"CORNELL Communications, Inc.\",\n\t[3]byte{0, 33, 196}:    \"Consilium AB\",\n\t[3]byte{0, 33, 197}:    \"3DSP Corp\",\n\t[3]byte{0, 33, 198}:    \"CSJ Global, Inc.\",\n\t[3]byte{0, 33, 199}:    \"Russound\",\n\t[3]byte{0, 33, 200}:    \"LOHUIS Networks\",\n\t[3]byte{0, 33, 201}:    \"Wavecom Asia Pacific Limited\",\n\t[3]byte{0, 33, 202}:    \"ART System Co., Ltd.\",\n\t[3]byte{0, 33, 203}:    \"SMS TECNOLOGIA ELETRONICA LTDA\",\n\t[3]byte{0, 33, 204}:    \"Flextronics International\",\n\t[3]byte{0, 33, 205}:    \"LiveTV\",\n\t[3]byte{0, 33, 206}:    \"NTC-Metrotek\",\n\t[3]byte{0, 33, 207}:    \"The Crypto Group\",\n\t[3]byte{0, 33, 208}:    \"Global Display Solutions Spa\",\n\t[3]byte{0, 33, 209}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 33, 210}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 33, 211}:    \"BOCOM SECURITY(ASIA PACIFIC) LIMITED\",\n\t[3]byte{0, 33, 212}:    \"Vollmer Werke GmbH\",\n\t[3]byte{0, 33, 213}:    \"X2E GmbH\",\n\t[3]byte{0, 33, 214}:    \"LXI Consortium\",\n\t[3]byte{0, 33, 215}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 33, 216}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 33, 217}:    \"SEKONIC CORPORATION\",\n\t[3]byte{0, 33, 218}:    \"Automation Products Group Inc.\",\n\t[3]byte{0, 33, 219}:    \"Santachi Video Technology (Shenzhen) Co., Ltd.\",\n\t[3]byte{0, 33, 220}:    \"TECNOALARM S.r.l.\",\n\t[3]byte{0, 33, 221}:    \"Northstar Systems Corp\",\n\t[3]byte{0, 33, 222}:    \"Firepro Wireless\",\n\t[3]byte{0, 33, 223}:    \"Martin Christ GmbH\",\n\t[3]byte{0, 33, 224}:    \"CommAgility Ltd\",\n\t[3]byte{0, 33, 225}:    \"Nortel Networks\",\n\t[3]byte{0, 33, 226}:    \"visago Systems & Controls GmbH & Co. KG\",\n\t[3]byte{0, 33, 227}:    \"SerialTek LLC\",\n\t[3]byte{0, 33, 228}:    \"I-WIN\",\n\t[3]byte{0, 33, 229}:    \"Display Solution AG\",\n\t[3]byte{0, 33, 230}:    \"Starlight Video Limited\",\n\t[3]byte{0, 33, 231}:    \"Informatics Services Corporation\",\n\t[3]byte{0, 33, 232}:    \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{0, 33, 233}:    \"Apple, Inc.\",\n\t[3]byte{0, 33, 234}:    \"Bystronic Laser AG\",\n\t[3]byte{0, 33, 235}:    \"ESP SYSTEMS, LLC\",\n\t[3]byte{0, 33, 236}:    \"Solutronic GmbH\",\n\t[3]byte{0, 33, 237}:    \"Telegesis\",\n\t[3]byte{0, 33, 238}:    \"Full Spectrum Inc.\",\n\t[3]byte{0, 33, 239}:    \"Kapsys\",\n\t[3]byte{0, 33, 240}:    \"EW3 Technologies LLC\",\n\t[3]byte{0, 33, 241}:    \"Tutus Data AB\",\n\t[3]byte{0, 33, 242}:    \"EASY3CALL Technology Limited\",\n\t[3]byte{0, 33, 243}:    \"Si14 SpA\",\n\t[3]byte{0, 33, 244}:    \"INRange Systems, Inc\",\n\t[3]byte{0, 33, 245}:    \"Western Engravers Supply, Inc.\",\n\t[3]byte{0, 33, 246}:    \"Oracle Corporation\",\n\t[3]byte{0, 33, 247}:    \"HPN Supply Chain\",\n\t[3]byte{0, 33, 248}:    \"Enseo, Inc.\",\n\t[3]byte{0, 33, 249}:    \"WIRECOM Technologies\",\n\t[3]byte{0, 33, 250}:    \"A4SP Technologies Ltd.\",\n\t[3]byte{0, 33, 251}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{0, 33, 252}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 33, 253}:    \"LACROIX TRAFFIC S.A.U\",\n\t[3]byte{0, 33, 254}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 33, 255}:    \"Cyfrowy Polsat SA\",\n\t[3]byte{0, 34, 0}:      \"IBM Corp\",\n\t[3]byte{0, 34, 1}:      \"Aksys Networks Inc\",\n\t[3]byte{0, 34, 2}:      \"Excito Elektronik i Skåne AB\",\n\t[3]byte{0, 34, 3}:      \"Glensound Electronics Ltd\",\n\t[3]byte{0, 34, 4}:      \"KORATEK\",\n\t[3]byte{0, 34, 5}:      \"WeLink Solutions, Inc.\",\n\t[3]byte{0, 34, 6}:      \"Cyberdyne Inc.\",\n\t[3]byte{0, 34, 7}:      \"Inteno Broadband Technology AB\",\n\t[3]byte{0, 34, 8}:      \"Certicom Corp\",\n\t[3]byte{0, 34, 9}:      \"Omron Healthcare Co., Ltd\",\n\t[3]byte{0, 34, 10}:     \"OnLive, Inc\",\n\t[3]byte{0, 34, 11}:     \"National Source Coding Center\",\n\t[3]byte{0, 34, 12}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 34, 13}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 34, 14}:     \"Indigo Security Co., Ltd.\",\n\t[3]byte{0, 34, 15}:     \"MoCA (Multimedia over Coax Alliance)\",\n\t[3]byte{0, 34, 16}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 34, 17}:     \"Rohati Systems\",\n\t[3]byte{0, 34, 18}:     \"CAI Networks, Inc.\",\n\t[3]byte{0, 34, 19}:     \"PCI CORPORATION\",\n\t[3]byte{0, 34, 20}:     \"RINNAI KOREA\",\n\t[3]byte{0, 34, 21}:     \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 34, 22}:     \"SHIBAURA VENDING MACHINE CORPORATION\",\n\t[3]byte{0, 34, 23}:     \"Neat Electronics\",\n\t[3]byte{0, 34, 24}:     \"AKAMAI TECHNOLOGIES INC\",\n\t[3]byte{0, 34, 25}:     \"Dell Inc.\",\n\t[3]byte{0, 34, 26}:     \"Audio Precision\",\n\t[3]byte{0, 34, 27}:     \"Morega Systems\",\n\t[3]byte{0, 34, 28}:     \"Private\",\n\t[3]byte{0, 34, 29}:     \"Freegene Technology LTD\",\n\t[3]byte{0, 34, 30}:     \"Media Devices Co., Ltd.\",\n\t[3]byte{0, 34, 31}:     \"eSang Technologies Co., Ltd.\",\n\t[3]byte{0, 34, 32}:     \"Mitac Technology Corp\",\n\t[3]byte{0, 34, 33}:     \"ITOH DENKI CO,LTD.\",\n\t[3]byte{0, 34, 34}:     \"Schaffner Deutschland GmbH\",\n\t[3]byte{0, 34, 35}:     \"TimeKeeping Systems, Inc.\",\n\t[3]byte{0, 34, 36}:     \"Good Will Instrument Co., Ltd.\",\n\t[3]byte{0, 34, 37}:     \"Thales Avionics Ltd\",\n\t[3]byte{0, 34, 38}:     \"Avaak, Inc.\",\n\t[3]byte{0, 34, 39}:     \"uv-electronic GmbH\",\n\t[3]byte{0, 34, 40}:     \"Breeze Innovations Ltd.\",\n\t[3]byte{0, 34, 41}:     \"Compumedics Ltd\",\n\t[3]byte{0, 34, 42}:     \"SoundEar A/S\",\n\t[3]byte{0, 34, 43}:     \"Nucomm, Inc.\",\n\t[3]byte{0, 34, 44}:     \"Ceton Corp\",\n\t[3]byte{0, 34, 45}:     \"SMC Networks Inc.\",\n\t[3]byte{0, 34, 46}:     \"maintech GmbH\",\n\t[3]byte{0, 34, 47}:     \"Open Grid Computing, Inc.\",\n\t[3]byte{0, 34, 48}:     \"FutureLogic Inc.\",\n\t[3]byte{0, 34, 49}:     \"SMT&C Co., Ltd.\",\n\t[3]byte{0, 34, 50}:     \"Design Design Technology Ltd\",\n\t[3]byte{0, 34, 51}:     \"ADB Broadband Italia\",\n\t[3]byte{0, 34, 52}:     \"Corventis Inc.\",\n\t[3]byte{0, 34, 53}:     \"Strukton Systems bv\",\n\t[3]byte{0, 34, 54}:     \"VECTOR SP. Z O.O.\",\n\t[3]byte{0, 34, 55}:     \"Shinhint Group\",\n\t[3]byte{0, 34, 56}:     \"LOGIPLUS\",\n\t[3]byte{0, 34, 57}:     \"Indiana Life Sciences Incorporated\",\n\t[3]byte{0, 34, 58}:     \"Cisco SPVTG\",\n\t[3]byte{0, 34, 59}:     \"Communication Networks, LLC\",\n\t[3]byte{0, 34, 60}:     \"RATIO Entwicklungen GmbH\",\n\t[3]byte{0, 34, 61}:     \"JumpGen Systems, LLC\",\n\t[3]byte{0, 34, 62}:     \"IRTrans GmbH\",\n\t[3]byte{0, 34, 63}:     \"NETGEAR\",\n\t[3]byte{0, 34, 64}:     \"Universal Telecom S/A\",\n\t[3]byte{0, 34, 65}:     \"Apple, Inc.\",\n\t[3]byte{0, 34, 66}:     \"Alacron Inc.\",\n\t[3]byte{0, 34, 67}:     \"AzureWave Technology Inc.\",\n\t[3]byte{0, 34, 68}:     \"Chengdu Linkon Communications Device Co., Ltd\",\n\t[3]byte{0, 34, 69}:     \"Leine & Linde AB\",\n\t[3]byte{0, 34, 70}:     \"Evoc Intelligent Technology Co.,Ltd.\",\n\t[3]byte{0, 34, 71}:     \"DAC ENGINEERING CO., LTD.\",\n\t[3]byte{0, 34, 72}:     \"Microsoft Corporation\",\n\t[3]byte{0, 34, 73}:     \"HOME MULTIENERGY SL\",\n\t[3]byte{0, 34, 74}:     \"RAYLASE AG\",\n\t[3]byte{0, 34, 75}:     \"AIRTECH TECHNOLOGIES, INC.\",\n\t[3]byte{0, 34, 76}:     \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 34, 77}:     \"MITAC INTERNATIONAL CORP.\",\n\t[3]byte{0, 34, 78}:     \"SEEnergy Corp.\",\n\t[3]byte{0, 34, 79}:     \"Byzoro Networks Ltd.\",\n\t[3]byte{0, 34, 80}:     \"Point Six Wireless, LLC\",\n\t[3]byte{0, 34, 81}:     \"Lumasense Technologies\",\n\t[3]byte{0, 34, 82}:     \"ZOLL Lifecor Corporation\",\n\t[3]byte{0, 34, 83}:     \"Entorian Technologies\",\n\t[3]byte{0, 34, 84}:     \"Bigelow Aerospace\",\n\t[3]byte{0, 34, 85}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 34, 86}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 34, 87}:     \"3COM EUROPE LTD\",\n\t[3]byte{0, 34, 88}:     \"Taiyo Yuden Co., Ltd.\",\n\t[3]byte{0, 34, 89}:     \"Guangzhou New Postcom Equipment Co.,Ltd.\",\n\t[3]byte{0, 34, 90}:     \"Garde Security AB\",\n\t[3]byte{0, 34, 91}:     \"Teradici Corporation\",\n\t[3]byte{0, 34, 92}:     \"Multimedia & Communication Technology\",\n\t[3]byte{0, 34, 93}:     \"Digicable Network India Pvt. Ltd.\",\n\t[3]byte{0, 34, 94}:     \"Uwin Technologies Co.,LTD\",\n\t[3]byte{0, 34, 95}:     \"Liteon Technology Corporation\",\n\t[3]byte{0, 34, 96}:     \"AFREEY Inc.\",\n\t[3]byte{0, 34, 97}:     \"Frontier Silicon Ltd\",\n\t[3]byte{0, 34, 98}:     \"BEP Marine\",\n\t[3]byte{0, 34, 99}:     \"Koos Technical Services, Inc.\",\n\t[3]byte{0, 34, 100}:    \"Hewlett Packard\",\n\t[3]byte{0, 34, 101}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 34, 102}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 34, 103}:    \"Nortel Networks\",\n\t[3]byte{0, 34, 104}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 34, 105}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 34, 106}:    \"Honeywell\",\n\t[3]byte{0, 34, 107}:    \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 34, 108}:    \"LinkSprite Technologies, Inc.\",\n\t[3]byte{0, 34, 109}:    \"Shenzhen GIEC Electronics Co., Ltd.\",\n\t[3]byte{0, 34, 110}:    \"Gowell Electronic Limited\",\n\t[3]byte{0, 34, 111}:    \"3onedata Technology Co. Ltd.\",\n\t[3]byte{0, 34, 112}:    \"ABK North America, LLC\",\n\t[3]byte{0, 34, 113}:    \"Jäger Computergesteuerte Meßtechnik GmbH.\",\n\t[3]byte{0, 34, 114}:    \"American Micro-Fuel Device Corp.\",\n\t[3]byte{0, 34, 115}:    \"Techway\",\n\t[3]byte{0, 34, 116}:    \"FamilyPhone AB\",\n\t[3]byte{0, 34, 117}:    \"Belkin International Inc.\",\n\t[3]byte{0, 34, 118}:    \"Triple EYE B.V.\",\n\t[3]byte{0, 34, 119}:    \"NEC Australia Pty Ltd\",\n\t[3]byte{0, 34, 120}:    \"Shenzhen  Tongfang Multimedia  Technology Co.,Ltd.\",\n\t[3]byte{0, 34, 121}:    \"Nippon Conlux Co., Ltd.\",\n\t[3]byte{0, 34, 122}:    \"Telecom Design\",\n\t[3]byte{0, 34, 123}:    \"Apogee Labs, Inc.\",\n\t[3]byte{0, 34, 124}:    \"Woori SMT Co.,ltd\",\n\t[3]byte{0, 34, 125}:    \"YE DATA INC.\",\n\t[3]byte{0, 34, 126}:    \"Chengdu 30Kaitian Communication Industry Co.Ltd\",\n\t[3]byte{0, 34, 127}:    \"Ruckus Wireless\",\n\t[3]byte{0, 34, 128}:    \"A2B Electronics AB\",\n\t[3]byte{0, 34, 129}:    \"Daintree Networks Pty\",\n\t[3]byte{0, 34, 130}:    \"8086 Consultancy\",\n\t[3]byte{0, 34, 131}:    \"Juniper Networks\",\n\t[3]byte{0, 34, 132}:    \"DESAY A&V SCIENCE AND TECHNOLOGY CO.,LTD\",\n\t[3]byte{0, 34, 133}:    \"NOMUS COMM SYSTEMS\",\n\t[3]byte{0, 34, 134}:    \"ASTRON\",\n\t[3]byte{0, 34, 135}:    \"Titan Wireless LLC\",\n\t[3]byte{0, 34, 136}:    \"Sagrad, Inc.\",\n\t[3]byte{0, 34, 137}:    \"Vandelrande APC inc.\",\n\t[3]byte{0, 34, 138}:    \"Teratronik elektronische systeme gmbh\",\n\t[3]byte{0, 34, 139}:    \"Kensington Computer Products Group\",\n\t[3]byte{0, 34, 140}:    \"Photon Europe GmbH\",\n\t[3]byte{0, 34, 141}:    \"GBS Laboratories LLC\",\n\t[3]byte{0, 34, 142}:    \"TV-NUMERIC\",\n\t[3]byte{0, 34, 143}:    \"CNRS\",\n\t[3]byte{0, 34, 144}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 34, 145}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 34, 146}:    \"Cinetal\",\n\t[3]byte{0, 34, 147}:    \"zte corporation\",\n\t[3]byte{0, 34, 148}:    \"KYOCERA CORPORATION \",\n\t[3]byte{0, 34, 149}:    \"SGM Technology for lighting spa\",\n\t[3]byte{0, 34, 150}:    \"LinoWave Corporation\",\n\t[3]byte{0, 34, 151}:    \"XMOS Semiconductor\",\n\t[3]byte{0, 34, 152}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 34, 153}:    \"SeaMicro Inc.\",\n\t[3]byte{0, 34, 154}:    \"Lastar, Inc.\",\n\t[3]byte{0, 34, 155}:    \"AverLogic Technologies, Inc.\",\n\t[3]byte{0, 34, 156}:    \"Verismo Networks Inc\",\n\t[3]byte{0, 34, 157}:    \"PYUNG-HWA IND.CO.,LTD\",\n\t[3]byte{0, 34, 158}:    \"Social Aid Research Co., Ltd.\",\n\t[3]byte{0, 34, 159}:    \"Sensys Traffic AB\",\n\t[3]byte{0, 34, 160}:    \"APTIV SERVICES US, LLC\",\n\t[3]byte{0, 34, 161}:    \"Huawei Symantec Technologies Co.,Ltd.\",\n\t[3]byte{0, 34, 162}:    \"Xtramus Technologies\",\n\t[3]byte{0, 34, 163}:    \"California Eastern Laboratories\",\n\t[3]byte{0, 34, 164}:    \"2Wire Inc\",\n\t[3]byte{0, 34, 165}:    \"Texas Instruments\",\n\t[3]byte{0, 34, 166}:    \"Sony Computer Entertainment America\",\n\t[3]byte{0, 34, 167}:    \"Tyco Electronics AMP GmbH\",\n\t[3]byte{0, 34, 168}:    \"Ouman Oy\",\n\t[3]byte{0, 34, 169}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{0, 34, 170}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 34, 171}:    \"Shenzhen Turbosight Technology Ltd\",\n\t[3]byte{0, 34, 172}:    \"Hangzhou Siyuan Tech. Co., Ltd\",\n\t[3]byte{0, 34, 173}:    \"TELESIS TECHNOLOGIES, INC.\",\n\t[3]byte{0, 34, 174}:    \"Mattel Inc.\",\n\t[3]byte{0, 34, 175}:    \"Safety Vision, LLC\",\n\t[3]byte{0, 34, 176}:    \"D-Link Corporation\",\n\t[3]byte{0, 34, 177}:    \"Elbit Systems Ltd.\",\n\t[3]byte{0, 34, 178}:    \"4RF Communications Ltd\",\n\t[3]byte{0, 34, 179}:    \"Sei S.p.A.\",\n\t[3]byte{0, 34, 180}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 34, 181}:    \"NOVITA\",\n\t[3]byte{0, 34, 182}:    \"Superflow Technologies Group\",\n\t[3]byte{0, 34, 183}:    \"GSS Grundig SAT-Systems GmbH\",\n\t[3]byte{0, 34, 184}:    \"Norcott\",\n\t[3]byte{0, 34, 185}:    \"Analogix Seminconductor, Inc\",\n\t[3]byte{0, 34, 186}:    \"HUTH Elektronik Systeme GmbH\",\n\t[3]byte{0, 34, 187}:    \"beyerdynamic GmbH & Co. KG\",\n\t[3]byte{0, 34, 188}:    \"JDSU France SAS\",\n\t[3]byte{0, 34, 189}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 34, 190}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 34, 191}:    \"SieAmp Group of Companies\",\n\t[3]byte{0, 34, 192}:    \"Shenzhen Forcelink Electronic Co, Ltd\",\n\t[3]byte{0, 34, 193}:    \"Active Storage Inc.\",\n\t[3]byte{0, 34, 194}:    \"Proview Eletrônica do Brasil LTDA\",\n\t[3]byte{0, 34, 195}:    \"Zeeport Technology Inc.\",\n\t[3]byte{0, 34, 196}:    \"epro GmbH\",\n\t[3]byte{0, 34, 197}:    \"INFORSON Co,Ltd.\",\n\t[3]byte{0, 34, 198}:    \"Sutus Inc\",\n\t[3]byte{0, 34, 199}:    \"SEGGER Microcontroller GmbH & Co. KG\",\n\t[3]byte{0, 34, 200}:    \"Applied Instruments B.V.\",\n\t[3]byte{0, 34, 201}:    \"Lenord, Bauer & Co GmbH\",\n\t[3]byte{0, 34, 202}:    \"Anviz Biometric Tech. Co., Ltd.\",\n\t[3]byte{0, 34, 203}:    \"IONODES Inc.\",\n\t[3]byte{0, 34, 204}:    \"SciLog, Inc.\",\n\t[3]byte{0, 34, 205}:    \"Ared Technology Co., Ltd.\",\n\t[3]byte{0, 34, 206}:    \"Cisco SPVTG\",\n\t[3]byte{0, 34, 207}:    \"PLANEX COMMUNICATIONS INC.\",\n\t[3]byte{0, 34, 208}:    \"Polar Electro Oy\",\n\t[3]byte{0, 34, 209}:    \"Albrecht Jung GmbH & Co. KG\",\n\t[3]byte{0, 34, 210}:    \"All Earth Comércio de Eletrônicos LTDA.\",\n\t[3]byte{0, 34, 211}:    \"Hub-Tech\",\n\t[3]byte{0, 34, 212}:    \"ComWorth Co., Ltd.\",\n\t[3]byte{0, 34, 213}:    \"Eaton Corp. Electrical Group Data Center Solutions - Pulizzi\",\n\t[3]byte{0, 34, 214}:    \"Cypak AB\",\n\t[3]byte{0, 34, 215}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 34, 216}:    \"Shenzhen GST Security and Safety Technology Limited\",\n\t[3]byte{0, 34, 217}:    \"Fortex Industrial Ltd.\",\n\t[3]byte{0, 34, 218}:    \"ANATEK, LLC\",\n\t[3]byte{0, 34, 219}:    \"Translogic Corporation\",\n\t[3]byte{0, 34, 220}:    \"Vigil Health Solutions Inc.\",\n\t[3]byte{0, 34, 221}:    \"Protecta Electronics Ltd\",\n\t[3]byte{0, 34, 222}:    \"OPPO Digital, Inc.\",\n\t[3]byte{0, 34, 223}:    \"TAMUZ Monitors\",\n\t[3]byte{0, 34, 224}:    \"Atlantic Software Technologies S.r.L.\",\n\t[3]byte{0, 34, 225}:    \"ZORT Labs, LLC.\",\n\t[3]byte{0, 34, 226}:    \"WABTEC Transit Division\",\n\t[3]byte{0, 34, 227}:    \"Amerigon\",\n\t[3]byte{0, 34, 228}:    \"APASS TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 34, 229}:    \"Fisher-Rosemount Systems Inc.\",\n\t[3]byte{0, 34, 230}:    \"Intelligent Data\",\n\t[3]byte{0, 34, 231}:    \"WPS Parking Systems\",\n\t[3]byte{0, 34, 232}:    \"Applition Co., Ltd.\",\n\t[3]byte{0, 34, 233}:    \"ProVision Communications\",\n\t[3]byte{0, 34, 234}:    \"Rustelcom Inc.\",\n\t[3]byte{0, 34, 235}:    \"Data Respons A/S\",\n\t[3]byte{0, 34, 236}:    \"IDEALBT TECHNOLOGY CORPORATION\",\n\t[3]byte{0, 34, 237}:    \"TSI Power Corporation\",\n\t[3]byte{0, 34, 238}:    \"Algo Communication Products Ltd\",\n\t[3]byte{0, 34, 239}:    \"iWDL Technologies\",\n\t[3]byte{0, 34, 240}:    \"3 Greens Aviation Limited\",\n\t[3]byte{0, 34, 241}:    \"Private\",\n\t[3]byte{0, 34, 242}:    \"SunPower Corp\",\n\t[3]byte{0, 34, 243}:    \"SHARP Corporation\",\n\t[3]byte{0, 34, 244}:    \"AMPAK Technology, Inc.\",\n\t[3]byte{0, 34, 245}:    \"Advanced Realtime Tracking GmbH\",\n\t[3]byte{0, 34, 246}:    \"Syracuse Research Corporation\",\n\t[3]byte{0, 34, 247}:    \"Conceptronic\",\n\t[3]byte{0, 34, 248}:    \"PIMA Electronic Systems Ltd.\",\n\t[3]byte{0, 34, 249}:    \"Pollin Electronic GmbH\",\n\t[3]byte{0, 34, 250}:    \"Intel Corporate\",\n\t[3]byte{0, 34, 251}:    \"Intel Corporate\",\n\t[3]byte{0, 34, 252}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 34, 253}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 34, 254}:    \"Advanced Illumination\",\n\t[3]byte{0, 34, 255}:    \"NIVIS LLC\",\n\t[3]byte{0, 35, 0}:      \"Cayee Computer Ltd.\",\n\t[3]byte{0, 35, 1}:      \"Witron Technology Limited\",\n\t[3]byte{0, 35, 2}:      \"Cobalt Digital, Inc.\",\n\t[3]byte{0, 35, 3}:      \"LITE-ON IT Corporation\",\n\t[3]byte{0, 35, 4}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 35, 5}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 35, 6}:      \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{0, 35, 7}:      \"FUTURE INNOVATION TECH CO.,LTD\",\n\t[3]byte{0, 35, 8}:      \"Arcadyan Technology Corporation\",\n\t[3]byte{0, 35, 9}:      \"Janam Technologies LLC\",\n\t[3]byte{0, 35, 10}:     \"ARBURG GmbH & Co KG\",\n\t[3]byte{0, 35, 11}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 35, 12}:     \"CLOVER ELECTRONICS CO.,LTD.\",\n\t[3]byte{0, 35, 13}:     \"Nortel Networks\",\n\t[3]byte{0, 35, 14}:     \"Gorba AG\",\n\t[3]byte{0, 35, 15}:     \"Hirsch Electronics Corporation\",\n\t[3]byte{0, 35, 16}:     \"LNC Technology Co., Ltd.\",\n\t[3]byte{0, 35, 17}:     \"Gloscom Co., Ltd.\",\n\t[3]byte{0, 35, 18}:     \"Apple, Inc.\",\n\t[3]byte{0, 35, 19}:     \"Qool Technologies Ltd.\",\n\t[3]byte{0, 35, 20}:     \"Intel Corporate\",\n\t[3]byte{0, 35, 21}:     \"Intel Corporate\",\n\t[3]byte{0, 35, 22}:     \"KISAN ELECTRONICS CO\",\n\t[3]byte{0, 35, 23}:     \"Lasercraft Inc\",\n\t[3]byte{0, 35, 24}:     \"Toshiba\",\n\t[3]byte{0, 35, 25}:     \"Sielox LLC\",\n\t[3]byte{0, 35, 26}:     \"ITF Co., Ltd.\",\n\t[3]byte{0, 35, 27}:     \"Danaher Motion - Kollmorgen\",\n\t[3]byte{0, 35, 28}:     \"Fourier Systems Ltd.\",\n\t[3]byte{0, 35, 29}:     \"Deltacom Electronics Ltd\",\n\t[3]byte{0, 35, 30}:     \"Cezzer Multimedia Technologies\",\n\t[3]byte{0, 35, 31}:     \"Guangda Electronic & Telecommunication Technology Development Co., Ltd.\",\n\t[3]byte{0, 35, 32}:     \"Nicira Networks\",\n\t[3]byte{0, 35, 33}:     \"Avitech International Corp\",\n\t[3]byte{0, 35, 34}:     \"KISS Teknical Solutions, Inc.\",\n\t[3]byte{0, 35, 35}:     \"Zylin AS\",\n\t[3]byte{0, 35, 36}:     \"G-PRO COMPUTER\",\n\t[3]byte{0, 35, 37}:     \"IOLAN Holding\",\n\t[3]byte{0, 35, 38}:     \"FUJITSU LIMITED\",\n\t[3]byte{0, 35, 39}:     \"Shouyo Electronics CO., LTD\",\n\t[3]byte{0, 35, 40}:     \"ALCON TELECOMMUNICATIONS CO., LTD.\",\n\t[3]byte{0, 35, 41}:     \"DDRdrive LLC\",\n\t[3]byte{0, 35, 42}:     \"eonas IT-Beratung und -Entwicklung GmbH\",\n\t[3]byte{0, 35, 43}:     \"IRD A/S\",\n\t[3]byte{0, 35, 44}:     \"Senticare\",\n\t[3]byte{0, 35, 45}:     \"SandForce\",\n\t[3]byte{0, 35, 46}:     \"Kedah Electronics Engineering, LLC\",\n\t[3]byte{0, 35, 47}:     \"Advanced Card Systems Ltd.\",\n\t[3]byte{0, 35, 48}:     \"DIZIPIA, INC.\",\n\t[3]byte{0, 35, 49}:     \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 35, 50}:     \"Apple, Inc.\",\n\t[3]byte{0, 35, 51}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 35, 52}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 35, 53}:     \"Linkflex Co.,Ltd\",\n\t[3]byte{0, 35, 54}:     \"METEL s.r.o.\",\n\t[3]byte{0, 35, 55}:     \"Global Star Solutions ULC\",\n\t[3]byte{0, 35, 56}:     \"OJ-Electronics A/S\",\n\t[3]byte{0, 35, 57}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 35, 58}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 35, 59}:     \"C-Matic Systems Ltd\",\n\t[3]byte{0, 35, 60}:     \"Alflex\",\n\t[3]byte{0, 35, 61}:     \"Laird Technologies\",\n\t[3]byte{0, 35, 62}:     \"Alcatel-Lucent IPD\",\n\t[3]byte{0, 35, 63}:     \"Purechoice Inc\",\n\t[3]byte{0, 35, 64}:     \"MiXTelematics\",\n\t[3]byte{0, 35, 65}:     \"Vanderbilt International (SWE) AB \",\n\t[3]byte{0, 35, 66}:     \"Coffee Equipment Company\",\n\t[3]byte{0, 35, 67}:     \"TEM AG\",\n\t[3]byte{0, 35, 68}:     \"Objective Interface Systems, Inc.\",\n\t[3]byte{0, 35, 69}:     \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 35, 70}:     \"Vestac\",\n\t[3]byte{0, 35, 71}:     \"ProCurve Networking by HP\",\n\t[3]byte{0, 35, 72}:     \"Sagemcom Broadband SAS\",\n\t[3]byte{0, 35, 73}:     \"Helmholtz Centre Berlin for Material and Energy\",\n\t[3]byte{0, 35, 74}:     \"Private\",\n\t[3]byte{0, 35, 75}:     \"Inyuan Technology Inc.\",\n\t[3]byte{0, 35, 76}:     \"KTC AB\",\n\t[3]byte{0, 35, 77}:     \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 35, 78}:     \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 35, 79}:     \"Luminous Power Technologies Pvt. Ltd.\",\n\t[3]byte{0, 35, 80}:     \"RDC, Inc. dba LynTec\",\n\t[3]byte{0, 35, 81}:     \"2Wire Inc\",\n\t[3]byte{0, 35, 82}:     \"DATASENSOR S.p.A.\",\n\t[3]byte{0, 35, 83}:     \"F E T Elettronica snc\",\n\t[3]byte{0, 35, 84}:     \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 35, 85}:     \"Kinco Automation(Shanghai) Ltd.\",\n\t[3]byte{0, 35, 86}:     \"Packet Forensics LLC\",\n\t[3]byte{0, 35, 87}:     \"Pitronot Technologies and Engineering P.T.E. Ltd.\",\n\t[3]byte{0, 35, 88}:     \"SYSTEL SA\",\n\t[3]byte{0, 35, 89}:     \"Benchmark Electronics ( Thailand ) Public Company Limited\",\n\t[3]byte{0, 35, 90}:     \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{0, 35, 91}:     \"Gulfstream\",\n\t[3]byte{0, 35, 92}:     \"Aprius, Inc.\",\n\t[3]byte{0, 35, 93}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 35, 94}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 35, 95}:     \"Silicon Micro Sensors GmbH\",\n\t[3]byte{0, 35, 96}:     \"Lookit Technology Co., Ltd\",\n\t[3]byte{0, 35, 97}:     \"Unigen Corporation\",\n\t[3]byte{0, 35, 98}:     \"Goldline Controls\",\n\t[3]byte{0, 35, 99}:     \"Zhuhai Raysharp Technology Co.,Ltd\",\n\t[3]byte{0, 35, 100}:    \"Power Instruments Pte Ltd\",\n\t[3]byte{0, 35, 101}:    \"Insta Elektro GmbH\",\n\t[3]byte{0, 35, 102}:    \"Beijing Siasun Electronic System Co.,Ltd.\",\n\t[3]byte{0, 35, 103}:    \"UniControls a.s.\",\n\t[3]byte{0, 35, 104}:    \"Zebra Technologies Inc\",\n\t[3]byte{0, 35, 105}:    \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 35, 106}:    \"SmartRG Inc\",\n\t[3]byte{0, 35, 107}:    \"Xembedded, Inc.\",\n\t[3]byte{0, 35, 108}:    \"Apple, Inc.\",\n\t[3]byte{0, 35, 109}:    \"ResMed Ltd\",\n\t[3]byte{0, 35, 110}:    \"Burster GmbH & Co KG\",\n\t[3]byte{0, 35, 111}:    \"DAQ System\",\n\t[3]byte{0, 35, 112}:    \"Snell\",\n\t[3]byte{0, 35, 113}:    \"SOAM Systel\",\n\t[3]byte{0, 35, 114}:    \"MORE STAR INDUSTRIAL GROUP LIMITED\",\n\t[3]byte{0, 35, 115}:    \"GridIron Systems, Inc.\",\n\t[3]byte{0, 35, 116}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 35, 117}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 35, 118}:    \"HTC Corporation\",\n\t[3]byte{0, 35, 119}:    \"Isotek Electronics Ltd\",\n\t[3]byte{0, 35, 120}:    \"GN Netcom A/S\",\n\t[3]byte{0, 35, 121}:    \"Union Business Machines Co. Ltd.\",\n\t[3]byte{0, 35, 122}:    \"RIM\",\n\t[3]byte{0, 35, 123}:    \"WHDI LLC\",\n\t[3]byte{0, 35, 124}:    \"NEOTION\",\n\t[3]byte{0, 35, 125}:    \"Hewlett Packard\",\n\t[3]byte{0, 35, 126}:    \"ELSTER GMBH\",\n\t[3]byte{0, 35, 127}:    \"PLANTRONICS, INC.\",\n\t[3]byte{0, 35, 128}:    \"Nanoteq\",\n\t[3]byte{0, 35, 129}:    \"Lengda Technology(Xiamen) Co.,Ltd.\",\n\t[3]byte{0, 35, 130}:    \"Lih Rong electronic Enterprise Co., Ltd.\",\n\t[3]byte{0, 35, 131}:    \"InMage Systems Inc\",\n\t[3]byte{0, 35, 132}:    \"GGH Engineering s.r.l.\",\n\t[3]byte{0, 35, 133}:    \"ANTIPODE\",\n\t[3]byte{0, 35, 134}:    \"Tour & Andersson AB\",\n\t[3]byte{0, 35, 135}:    \"ThinkFlood, Inc.\",\n\t[3]byte{0, 35, 136}:    \"V.T. Telematica S.p.a.\",\n\t[3]byte{0, 35, 137}:    \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{0, 35, 138}:    \"Ciena Corporation\",\n\t[3]byte{0, 35, 139}:    \"Quanta Computer Inc.\",\n\t[3]byte{0, 35, 140}:    \"Private\",\n\t[3]byte{0, 35, 141}:    \"Techno Design Co., Ltd.\",\n\t[3]byte{0, 35, 142}:    \"ADB Broadband Italia\",\n\t[3]byte{0, 35, 143}:    \"NIDEC COPAL CORPORATION\",\n\t[3]byte{0, 35, 144}:    \"Algolware Corporation\",\n\t[3]byte{0, 35, 145}:    \"Maxian\",\n\t[3]byte{0, 35, 146}:    \"Proteus Industries Inc.\",\n\t[3]byte{0, 35, 147}:    \"AJINEXTEK\",\n\t[3]byte{0, 35, 148}:    \"Samjeon\",\n\t[3]byte{0, 35, 149}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 35, 150}:    \"ANDES TECHNOLOGY CORPORATION\",\n\t[3]byte{0, 35, 151}:    \"Westell Technologies Inc.\",\n\t[3]byte{0, 35, 152}:    \"Vutlan sro\",\n\t[3]byte{0, 35, 153}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 35, 154}:    \"EasyData Hardware GmbH\",\n\t[3]byte{0, 35, 155}:    \"Elster Solutions, LLC\",\n\t[3]byte{0, 35, 156}:    \"Juniper Networks\",\n\t[3]byte{0, 35, 157}:    \"Mapower Electronics Co., Ltd\",\n\t[3]byte{0, 35, 158}:    \"Jiangsu Lemote Technology Corporation Limited\",\n\t[3]byte{0, 35, 159}:    \"Institut für Prüftechnik\",\n\t[3]byte{0, 35, 160}:    \"Hana CNS Co., LTD.\",\n\t[3]byte{0, 35, 161}:    \"Trend Electronics Ltd\",\n\t[3]byte{0, 35, 162}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 35, 163}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 35, 164}:    \"New Concepts Development Corp.\",\n\t[3]byte{0, 35, 165}:    \"SageTV, LLC\",\n\t[3]byte{0, 35, 166}:    \"E-Mon\",\n\t[3]byte{0, 35, 167}:    \"Redpine Signals, Inc.\",\n\t[3]byte{0, 35, 168}:    \"Marshall Electronics\",\n\t[3]byte{0, 35, 169}:    \"Beijing Detianquan Electromechanical Equipment Co., Ltd\",\n\t[3]byte{0, 35, 170}:    \"HFR, Inc.\",\n\t[3]byte{0, 35, 171}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 35, 172}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 35, 173}:    \"Xmark Corporation\",\n\t[3]byte{0, 35, 174}:    \"Dell Inc.\",\n\t[3]byte{0, 35, 175}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 35, 176}:    \"COMXION Technology Inc.\",\n\t[3]byte{0, 35, 177}:    \"Longcheer Technology (Singapore) Pte Ltd\",\n\t[3]byte{0, 35, 178}:    \"Intelligent Mechatronic Systems Inc\",\n\t[3]byte{0, 35, 179}:    \"Lyyn AB\",\n\t[3]byte{0, 35, 180}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 35, 181}:    \"ORTANA LTD\",\n\t[3]byte{0, 35, 182}:    \"SECURITE COMMUNICATIONS / HONEYWELL\",\n\t[3]byte{0, 35, 183}:    \"Q-Light Co., Ltd.\",\n\t[3]byte{0, 35, 184}:    \"Sichuan Jiuzhou Electronic Technology Co.,Ltd\",\n\t[3]byte{0, 35, 185}:    \" Airbus Defence and Space Deutschland GmbH\",\n\t[3]byte{0, 35, 186}:    \"Chroma\",\n\t[3]byte{0, 35, 187}:    \"Schmitt Industries\",\n\t[3]byte{0, 35, 188}:    \"EQ-SYS GmbH\",\n\t[3]byte{0, 35, 189}:    \"Digital Ally, Inc.\",\n\t[3]byte{0, 35, 190}:    \"Cisco SPVTG\",\n\t[3]byte{0, 35, 191}:    \"Mainpine, Inc.\",\n\t[3]byte{0, 35, 192}:    \"Broadway Networks\",\n\t[3]byte{0, 35, 193}:    \"Securitas Direct AB\",\n\t[3]byte{0, 35, 194}:    \"SAMSUNG Electronics. Co. LTD\",\n\t[3]byte{0, 35, 195}:    \"LogMeIn, Inc.\",\n\t[3]byte{0, 35, 196}:    \"Lux Lumen\",\n\t[3]byte{0, 35, 197}:    \"Radiation Safety and Control Services Inc\",\n\t[3]byte{0, 35, 198}:    \"SMC Corporation\",\n\t[3]byte{0, 35, 199}:    \"AVSystem\",\n\t[3]byte{0, 35, 200}:    \"TEAM-R\",\n\t[3]byte{0, 35, 201}:    \"Sichuan Tianyi Information Science & Technology Stock CO.,LTD\",\n\t[3]byte{0, 35, 202}:    \"Behind The Set, LLC\",\n\t[3]byte{0, 35, 203}:    \"Shenzhen Full-join Technology Co.,Ltd\",\n\t[3]byte{0, 35, 204}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 35, 205}:    \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{0, 35, 206}:    \"KITA DENSHI CORPORATION\",\n\t[3]byte{0, 35, 207}:    \"CUMMINS-ALLISON CORP.\",\n\t[3]byte{0, 35, 208}:    \"Uniloc USA Inc.\",\n\t[3]byte{0, 35, 209}:    \"TRG\",\n\t[3]byte{0, 35, 210}:    \"Inhand Electronics, Inc.\",\n\t[3]byte{0, 35, 211}:    \"AirLink WiFi Networking Corp.\",\n\t[3]byte{0, 35, 212}:    \"Texas Instruments\",\n\t[3]byte{0, 35, 213}:    \"WAREMA electronic GmbH\",\n\t[3]byte{0, 35, 214}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 35, 215}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 35, 216}:    \"Ball-It Oy\",\n\t[3]byte{0, 35, 217}:    \"Banner Engineering\",\n\t[3]byte{0, 35, 218}:    \"Industrial Computer Source (Deutschland)GmbH\",\n\t[3]byte{0, 35, 219}:    \"saxnet gmbh\",\n\t[3]byte{0, 35, 220}:    \"Benein, Inc\",\n\t[3]byte{0, 35, 221}:    \"ELGIN S.A.\",\n\t[3]byte{0, 35, 222}:    \"Ansync Inc.\",\n\t[3]byte{0, 35, 223}:    \"Apple, Inc.\",\n\t[3]byte{0, 35, 224}:    \"INO Therapeutics LLC\",\n\t[3]byte{0, 35, 225}:    \"Cavena Image Products AB\",\n\t[3]byte{0, 35, 226}:    \"SEA Signalisation\",\n\t[3]byte{0, 35, 227}:    \"Microtronic AG\",\n\t[3]byte{0, 35, 228}:    \"IPnect co. ltd.\",\n\t[3]byte{0, 35, 229}:    \"IPaXiom Networks\",\n\t[3]byte{0, 35, 230}:    \"Innovation Farm, Inc.\",\n\t[3]byte{0, 35, 231}:    \"Hinke A/S\",\n\t[3]byte{0, 35, 232}:    \"Demco Corp.\",\n\t[3]byte{0, 35, 233}:    \"F5 Networks, Inc.\",\n\t[3]byte{0, 35, 234}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 35, 235}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 35, 236}:    \"Algorithmix GmbH\",\n\t[3]byte{0, 35, 237}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 35, 238}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 35, 239}:    \"Zuend Systemtechnik AG\",\n\t[3]byte{0, 35, 240}:    \"Shanghai Jinghan Weighing Apparatus Co. Ltd.\",\n\t[3]byte{0, 35, 241}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 35, 242}:    \"TVLogic\",\n\t[3]byte{0, 35, 243}:    \"Glocom, Inc.\",\n\t[3]byte{0, 35, 244}:    \"Masternaut\",\n\t[3]byte{0, 35, 245}:    \"WILO SE\",\n\t[3]byte{0, 35, 246}:    \"Softwell Technology Co., Ltd.\",\n\t[3]byte{0, 35, 247}:    \"Private\",\n\t[3]byte{0, 35, 248}:    \"Zyxel Communications Corporation\",\n\t[3]byte{0, 35, 249}:    \"Double-Take Software, INC.\",\n\t[3]byte{0, 35, 250}:    \"RG Nets, Inc.\",\n\t[3]byte{0, 35, 251}:    \"IP Datatel, LLC.\",\n\t[3]byte{0, 35, 252}:    \"Ultra Stereo Labs, Inc\",\n\t[3]byte{0, 35, 253}:    \"AFT Atlas Fahrzeugtechnik GmbH\",\n\t[3]byte{0, 35, 254}:    \"Biodevices, SA\",\n\t[3]byte{0, 35, 255}:    \"Beijing HTTC Technology Ltd.\",\n\t[3]byte{0, 36, 0}:      \"Nortel Networks\",\n\t[3]byte{0, 36, 1}:      \"D-Link Corporation\",\n\t[3]byte{0, 36, 2}:      \"Op-Tection GmbH\",\n\t[3]byte{0, 36, 3}:      \"Nokia Danmark A/S\",\n\t[3]byte{0, 36, 4}:      \"Nokia Danmark A/S\",\n\t[3]byte{0, 36, 5}:      \"Dilog Nordic AB\",\n\t[3]byte{0, 36, 6}:      \"Pointmobile\",\n\t[3]byte{0, 36, 7}:      \"TELEM SAS\",\n\t[3]byte{0, 36, 8}:      \"Pacific Biosciences\",\n\t[3]byte{0, 36, 9}:      \"The Toro Company\",\n\t[3]byte{0, 36, 10}:     \"US Beverage Net\",\n\t[3]byte{0, 36, 11}:     \"Virtual Computer Inc.\",\n\t[3]byte{0, 36, 12}:     \"DELEC GmbH\",\n\t[3]byte{0, 36, 13}:     \"OnePath Networks LTD.\",\n\t[3]byte{0, 36, 14}:     \"Inventec Besta Co., Ltd.\",\n\t[3]byte{0, 36, 15}:     \"Ishii Tool & Engineering Corporation\",\n\t[3]byte{0, 36, 16}:     \"NUETEQ Technology,Inc.\",\n\t[3]byte{0, 36, 17}:     \"PharmaSmart LLC\",\n\t[3]byte{0, 36, 18}:     \"Benign Technologies Co, Ltd.\",\n\t[3]byte{0, 36, 19}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 36, 20}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 36, 21}:     \"Magnetic Autocontrol GmbH\",\n\t[3]byte{0, 36, 22}:     \"Any Use\",\n\t[3]byte{0, 36, 23}:     \"Thomson Telecom Belgium\",\n\t[3]byte{0, 36, 24}:     \"Nextwave Semiconductor\",\n\t[3]byte{0, 36, 25}:     \"Private\",\n\t[3]byte{0, 36, 26}:     \"Red Beetle Inc.\",\n\t[3]byte{0, 36, 27}:     \"iWOW Communications Pte Ltd\",\n\t[3]byte{0, 36, 28}:     \"FuGang Electronic (DG) Co.,Ltd\",\n\t[3]byte{0, 36, 29}:     \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{0, 36, 30}:     \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 36, 31}:     \"DCT-Delta GmbH\",\n\t[3]byte{0, 36, 32}:     \"NetUP Inc.\",\n\t[3]byte{0, 36, 33}:     \"MICRO-STAR INT'L CO., LTD.\",\n\t[3]byte{0, 36, 34}:     \"Knapp Logistik Automation GmbH\",\n\t[3]byte{0, 36, 35}:     \"AzureWave Technologies (Shanghai) Inc.\",\n\t[3]byte{0, 36, 36}:     \"Ace Axis Limited\",\n\t[3]byte{0, 36, 37}:     \"Shenzhenshi chuangzhicheng Technology Co.,Ltd\",\n\t[3]byte{0, 36, 38}:     \"NOHMI BOSAI LTD.\",\n\t[3]byte{0, 36, 39}:     \"SSI COMPUTER CORP\",\n\t[3]byte{0, 36, 40}:     \"EnergyICT\",\n\t[3]byte{0, 36, 41}:     \"MK MASTER INC.\",\n\t[3]byte{0, 36, 42}:     \"Hittite Microwave Corporation\",\n\t[3]byte{0, 36, 43}:     \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 36, 44}:     \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 36, 46}:     \"Datastrip Inc.\",\n\t[3]byte{0, 36, 47}:     \"Micron\",\n\t[3]byte{0, 36, 48}:     \"Ruby Tech Corp.\",\n\t[3]byte{0, 36, 49}:     \"Uni-v co.,ltd\",\n\t[3]byte{0, 36, 50}:     \"Neostar Technology Co.,LTD\",\n\t[3]byte{0, 36, 51}:     \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{0, 36, 52}:     \"Lectrosonics, Inc.\",\n\t[3]byte{0, 36, 53}:     \"WIDE CORPORATION\",\n\t[3]byte{0, 36, 54}:     \"Apple, Inc.\",\n\t[3]byte{0, 36, 55}:     \"Motorola - BSG\",\n\t[3]byte{0, 36, 56}:     \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 36, 57}:     \"Digital Barriers Advanced Technologies\",\n\t[3]byte{0, 36, 58}:     \"Ludl Electronic Products\",\n\t[3]byte{0, 36, 59}:     \"CSSI (S) Pte Ltd\",\n\t[3]byte{0, 36, 60}:     \"S.A.A.A.\",\n\t[3]byte{0, 36, 61}:     \"Emerson Appliance Motors and Controls\",\n\t[3]byte{0, 36, 63}:     \"Storwize, Inc.\",\n\t[3]byte{0, 36, 64}:     \"Halo Monitoring, Inc.\",\n\t[3]byte{0, 36, 65}:     \"Wanzl Metallwarenfabrik GmbH\",\n\t[3]byte{0, 36, 66}:     \"Axona Limited\",\n\t[3]byte{0, 36, 67}:     \"Nortel Networks\",\n\t[3]byte{0, 36, 68}:     \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 36, 69}:     \"Adtran Inc\",\n\t[3]byte{0, 36, 70}:     \"MMB Research Inc.\",\n\t[3]byte{0, 36, 71}:     \"Kaztek Systems\",\n\t[3]byte{0, 36, 72}:     \"SpiderCloud Wireless, Inc\",\n\t[3]byte{0, 36, 73}:     \"Shen Zhen Lite Star Electronics Technology Co., Ltd\",\n\t[3]byte{0, 36, 74}:     \"Voyant International\",\n\t[3]byte{0, 36, 75}:     \"PERCEPTRON INC\",\n\t[3]byte{0, 36, 76}:     \"Solartron Metrology Ltd\",\n\t[3]byte{0, 36, 77}:     \"Hokkaido Electronics Corporation\",\n\t[3]byte{0, 36, 78}:     \"RadChips, Inc.\",\n\t[3]byte{0, 36, 79}:     \"Asantron Technologies Ltd.\",\n\t[3]byte{0, 36, 80}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 36, 81}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 36, 82}:     \"Silicon Software GmbH\",\n\t[3]byte{0, 36, 83}:     \"Initra d.o.o.\",\n\t[3]byte{0, 36, 84}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 36, 85}:     \"MuLogic BV\",\n\t[3]byte{0, 36, 86}:     \"2Wire Inc\",\n\t[3]byte{0, 36, 88}:     \"PA Bastion CC\",\n\t[3]byte{0, 36, 89}:     \"ABB Automation products GmbH\",\n\t[3]byte{0, 36, 90}:     \"Nanjing Panda Electronics Company Limited\",\n\t[3]byte{0, 36, 91}:     \"RAIDON TECHNOLOGY, INC.\",\n\t[3]byte{0, 36, 92}:     \"Design-Com Technologies Pty. Ltd.\",\n\t[3]byte{0, 36, 93}:     \"Terberg besturingstechniek B.V.\",\n\t[3]byte{0, 36, 94}:     \"Hivision Co.,ltd\",\n\t[3]byte{0, 36, 95}:     \"Vine Telecom CO.,Ltd.\",\n\t[3]byte{0, 36, 96}:     \"Giaval Science Development Co. Ltd.\",\n\t[3]byte{0, 36, 97}:     \"Shin Wang Tech.\",\n\t[3]byte{0, 36, 98}:     \"Rayzone Corporation\",\n\t[3]byte{0, 36, 99}:     \"Phybridge Inc\",\n\t[3]byte{0, 36, 100}:    \"Bridge Technologies Co AS\",\n\t[3]byte{0, 36, 101}:    \"Elentec\",\n\t[3]byte{0, 36, 102}:    \"Unitron nv\",\n\t[3]byte{0, 36, 103}:    \"AOC International (Europe) GmbH\",\n\t[3]byte{0, 36, 104}:    \"Sumavision Technologies Co.,Ltd\",\n\t[3]byte{0, 36, 105}:    \"Smart Doorphones\",\n\t[3]byte{0, 36, 106}:    \"Solid Year Co., Ltd.\",\n\t[3]byte{0, 36, 107}:    \"Covia, Inc.\",\n\t[3]byte{0, 36, 108}:    \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{0, 36, 109}:    \"Weinzierl Engineering GmbH\",\n\t[3]byte{0, 36, 110}:    \"Phihong USA Corp.\",\n\t[3]byte{0, 36, 111}:    \"Onda Communication spa\",\n\t[3]byte{0, 36, 112}:    \"AUROTECH ultrasound AS.\",\n\t[3]byte{0, 36, 113}:    \"Fusion MultiSystems dba Fusion-io\",\n\t[3]byte{0, 36, 114}:    \"ReDriven Power Inc.\",\n\t[3]byte{0, 36, 115}:    \"3COM EUROPE LTD\",\n\t[3]byte{0, 36, 116}:    \"Autronica Fire And Securirty\",\n\t[3]byte{0, 36, 117}:    \"Compass System(Embedded Dept.)\",\n\t[3]byte{0, 36, 118}:    \"TAP.tv\",\n\t[3]byte{0, 36, 119}:    \"Tibbo Technology\",\n\t[3]byte{0, 36, 120}:    \"Mag Tech Electronics Co Limited\",\n\t[3]byte{0, 36, 121}:    \"Optec Displays, Inc.\",\n\t[3]byte{0, 36, 122}:    \"FU YI CHENG Technology Co., Ltd.\",\n\t[3]byte{0, 36, 123}:    \"Actiontec Electronics, Inc\",\n\t[3]byte{0, 36, 124}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 36, 125}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 36, 126}:    \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{0, 36, 127}:    \"Nortel Networks\",\n\t[3]byte{0, 36, 128}:    \"Meteocontrol GmbH\",\n\t[3]byte{0, 36, 129}:    \"Hewlett Packard\",\n\t[3]byte{0, 36, 130}:    \"Ruckus Wireless\",\n\t[3]byte{0, 36, 131}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{0, 36, 132}:    \"Bang and Olufsen Medicom a/s\",\n\t[3]byte{0, 36, 133}:    \"ConteXtream Ltd\",\n\t[3]byte{0, 36, 134}:    \"DesignArt Networks\",\n\t[3]byte{0, 36, 135}:    \"Transact Campus, Inc.\",\n\t[3]byte{0, 36, 136}:    \"Centre For Development Of Telematics\",\n\t[3]byte{0, 36, 137}:    \"Vodafone Omnitel N.V.\",\n\t[3]byte{0, 36, 138}:    \"Kaga Electronics Co., Ltd.\",\n\t[3]byte{0, 36, 139}:    \"HYBUS CO., LTD.\",\n\t[3]byte{0, 36, 140}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 36, 141}:    \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{0, 36, 142}:    \"Infoware ZRt.\",\n\t[3]byte{0, 36, 143}:    \"DO-MONIX\",\n\t[3]byte{0, 36, 144}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 36, 145}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 36, 146}:    \"Motorola, Broadband Solutions Group\",\n\t[3]byte{0, 36, 147}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 36, 148}:    \"Shenzhen Baoxin Tech CO., Ltd.\",\n\t[3]byte{0, 36, 149}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 36, 150}:    \"Ginzinger electronic systems\",\n\t[3]byte{0, 36, 151}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 36, 152}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 36, 153}:    \"Aquila Technologies\",\n\t[3]byte{0, 36, 154}:    \"Beijing Zhongchuang Telecommunication Test Co., Ltd.\",\n\t[3]byte{0, 36, 155}:    \"Action Star Enterprise Co., Ltd.\",\n\t[3]byte{0, 36, 156}:    \"Bimeng Comunication System Co. Ltd\",\n\t[3]byte{0, 36, 157}:    \"NES Technology Inc.\",\n\t[3]byte{0, 36, 158}:    \"ADC-Elektronik GmbH\",\n\t[3]byte{0, 36, 159}:    \"RIM Testing Services\",\n\t[3]byte{0, 36, 160}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 36, 161}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 36, 162}:    \"Hong Kong Middleware Technology Limited\",\n\t[3]byte{0, 36, 163}:    \"Sonim Technologies Inc\",\n\t[3]byte{0, 36, 164}:    \"Siklu Communication\",\n\t[3]byte{0, 36, 165}:    \"BUFFALO.INC\",\n\t[3]byte{0, 36, 166}:    \"TELESTAR DIGITAL GmbH\",\n\t[3]byte{0, 36, 167}:    \"Advanced Video Communications Inc.\",\n\t[3]byte{0, 36, 168}:    \"ProCurve Networking by HP\",\n\t[3]byte{0, 36, 169}:    \"Ag Leader Technology\",\n\t[3]byte{0, 36, 170}:    \"Dycor Technologies Ltd.\",\n\t[3]byte{0, 36, 171}:    \"A7 Engineering, Inc.\",\n\t[3]byte{0, 36, 172}:    \"Hangzhou DPtech Technologies Co., Ltd.\",\n\t[3]byte{0, 36, 173}:    \"Adolf Thies Gmbh & Co. KG\",\n\t[3]byte{0, 36, 174}:    \"IDEMIA\",\n\t[3]byte{0, 36, 175}:    \"Dish Technologies Corp\",\n\t[3]byte{0, 36, 176}:    \"ESAB AB\",\n\t[3]byte{0, 36, 177}:    \"Coulomb Technologies\",\n\t[3]byte{0, 36, 178}:    \"NETGEAR\",\n\t[3]byte{0, 36, 179}:    \"Graf-Syteco GmbH & Co. KG\",\n\t[3]byte{0, 36, 180}:    \"ESCATRONIC GmbH\",\n\t[3]byte{0, 36, 181}:    \"Nortel Networks\",\n\t[3]byte{0, 36, 182}:    \"Seagate Technology\",\n\t[3]byte{0, 36, 183}:    \"GridPoint, Inc.\",\n\t[3]byte{0, 36, 184}:    \"free alliance sdn bhd\",\n\t[3]byte{0, 36, 185}:    \"Wuhan Higheasy Electronic Technology Development Co.Ltd\",\n\t[3]byte{0, 36, 186}:    \"Texas Instruments\",\n\t[3]byte{0, 36, 187}:    \"CENTRAL Corporation\",\n\t[3]byte{0, 36, 188}:    \"HuRob Co.,Ltd\",\n\t[3]byte{0, 36, 189}:    \"Hainzl Industriesysteme GmbH\",\n\t[3]byte{0, 36, 190}:    \"Sony Corporation\",\n\t[3]byte{0, 36, 191}:    \"CIAT\",\n\t[3]byte{0, 36, 192}:    \"NTI COMODO INC\",\n\t[3]byte{0, 36, 193}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 36, 194}:    \"Asumo Co.,Ltd.\",\n\t[3]byte{0, 36, 195}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 36, 196}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 36, 197}:    \"Meridian Audio Limited\",\n\t[3]byte{0, 36, 198}:    \"Hager Electro SAS\",\n\t[3]byte{0, 36, 199}:    \"Mobilarm Ltd\",\n\t[3]byte{0, 36, 200}:    \"Broadband Solutions Group\",\n\t[3]byte{0, 36, 201}:    \"Broadband Solutions Group\",\n\t[3]byte{0, 36, 202}:    \"Tobii Technology AB\",\n\t[3]byte{0, 36, 203}:    \"Autonet Mobile\",\n\t[3]byte{0, 36, 204}:    \"Fascinations Toys and Gifts, Inc.\",\n\t[3]byte{0, 36, 205}:    \"Willow Garage, Inc.\",\n\t[3]byte{0, 36, 206}:    \"Exeltech Inc\",\n\t[3]byte{0, 36, 207}:    \"Inscape Data Corporation\",\n\t[3]byte{0, 36, 208}:    \"Shenzhen SOGOOD Industry CO.,LTD.\",\n\t[3]byte{0, 36, 209}:    \"Thomson Inc.\",\n\t[3]byte{0, 36, 210}:    \"ASKEY COMPUTER CORP\",\n\t[3]byte{0, 36, 211}:    \"QUALICA Inc.\",\n\t[3]byte{0, 36, 212}:    \"FREEBOX SAS\",\n\t[3]byte{0, 36, 213}:    \"Winward Industrial Limited\",\n\t[3]byte{0, 36, 214}:    \"Intel Corporate\",\n\t[3]byte{0, 36, 215}:    \"Intel Corporate\",\n\t[3]byte{0, 36, 216}:    \"IlSung Precision\",\n\t[3]byte{0, 36, 217}:    \"BICOM, Inc.\",\n\t[3]byte{0, 36, 218}:    \"Innovar Systems Limited\",\n\t[3]byte{0, 36, 219}:    \"Alcohol Monitoring Systems\",\n\t[3]byte{0, 36, 220}:    \"Juniper Networks\",\n\t[3]byte{0, 36, 221}:    \"Centrak, Inc.\",\n\t[3]byte{0, 36, 222}:    \"GLOBAL Technology Inc.\",\n\t[3]byte{0, 36, 223}:    \"Digitalbox Europe GmbH\",\n\t[3]byte{0, 36, 224}:    \"DS Tech, LLC\",\n\t[3]byte{0, 36, 225}:    \"Convey Computer Corp.\",\n\t[3]byte{0, 36, 226}:    \"HASEGAWA ELECTRIC CO.,LTD.\",\n\t[3]byte{0, 36, 227}:    \"CAO Group\",\n\t[3]byte{0, 36, 228}:    \"Withings\",\n\t[3]byte{0, 36, 229}:    \"Seer Technology, Inc\",\n\t[3]byte{0, 36, 230}:    \"In Motion Technology Inc.\",\n\t[3]byte{0, 36, 231}:    \"Plaster Networks\",\n\t[3]byte{0, 36, 232}:    \"Dell Inc.\",\n\t[3]byte{0, 36, 233}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 36, 234}:    \"iris-GmbH infrared & intelligent sensors\",\n\t[3]byte{0, 36, 235}:    \"ClearPath Networks, Inc.\",\n\t[3]byte{0, 36, 236}:    \"United Information Technology Co.,Ltd.\",\n\t[3]byte{0, 36, 237}:    \"YT Elec. Co,.Ltd.\",\n\t[3]byte{0, 36, 238}:    \"Wynmax Inc.\",\n\t[3]byte{0, 36, 239}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 36, 240}:    \"Seanodes\",\n\t[3]byte{0, 36, 241}:    \"Shenzhen Fanhai Sanjiang Electronics Co., Ltd.\",\n\t[3]byte{0, 36, 242}:    \"Uniphone Telecommunication Co., Ltd.\",\n\t[3]byte{0, 36, 243}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 36, 244}:    \"Kaminario, Ltd.\",\n\t[3]byte{0, 36, 245}:    \"NDS Surgical Imaging\",\n\t[3]byte{0, 36, 246}:    \"MIYOSHI ELECTRONICS CORPORATION\",\n\t[3]byte{0, 36, 247}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 36, 248}:    \"Technical Solutions Company Ltd.\",\n\t[3]byte{0, 36, 249}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 36, 250}:    \"Hilger u. Kern GMBH\",\n\t[3]byte{0, 36, 251}:    \"Private\",\n\t[3]byte{0, 36, 252}:    \"QuoPin Co., Ltd.\",\n\t[3]byte{0, 36, 253}:    \"Accedian Networks Inc\",\n\t[3]byte{0, 36, 254}:    \"AVM GmbH\",\n\t[3]byte{0, 36, 255}:    \"QLogic Corporation\",\n\t[3]byte{0, 37, 0}:      \"Apple, Inc.\",\n\t[3]byte{0, 37, 1}:      \"JSC \\\"Supertel\\\"\",\n\t[3]byte{0, 37, 2}:      \"NaturalPoint\",\n\t[3]byte{0, 37, 3}:      \"IBM Corp\",\n\t[3]byte{0, 37, 4}:      \"Valiant Communications Limited\",\n\t[3]byte{0, 37, 5}:      \"eks Engel GmbH & Co. KG\",\n\t[3]byte{0, 37, 6}:      \"A.I. ANTITACCHEGGIO ITALIA SRL\",\n\t[3]byte{0, 37, 7}:      \"ASTAK Inc.\",\n\t[3]byte{0, 37, 8}:      \"Maquet Cardiopulmonary AG\",\n\t[3]byte{0, 37, 9}:      \"SHARETRONIC Group LTD\",\n\t[3]byte{0, 37, 10}:     \"Security Expert Co. Ltd\",\n\t[3]byte{0, 37, 11}:     \"CENTROFACTOR  INC\",\n\t[3]byte{0, 37, 12}:     \"Senet Inc\",\n\t[3]byte{0, 37, 13}:     \"GZT Telkom-Telmor sp. z o.o.\",\n\t[3]byte{0, 37, 14}:     \"gt german telematics gmbh\",\n\t[3]byte{0, 37, 15}:     \"On-Ramp Wireless, Inc.\",\n\t[3]byte{0, 37, 16}:     \"Pico-Tesla Magnetic Therapies\",\n\t[3]byte{0, 37, 17}:     \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{0, 37, 18}:     \"zte corporation\",\n\t[3]byte{0, 37, 19}:     \"CXP DIGITAL BV\",\n\t[3]byte{0, 37, 20}:     \"PC Worth Int'l Co., Ltd.\",\n\t[3]byte{0, 37, 21}:     \"SFR\",\n\t[3]byte{0, 37, 22}:     \"Integrated Design Tools, Inc.\",\n\t[3]byte{0, 37, 23}:     \"Venntis, LLC\",\n\t[3]byte{0, 37, 24}:     \"Power PLUS Communications AG\",\n\t[3]byte{0, 37, 25}:     \"Viaas Inc\",\n\t[3]byte{0, 37, 26}:     \"Psiber Data Systems Inc.\",\n\t[3]byte{0, 37, 27}:     \"Philips CareServant\",\n\t[3]byte{0, 37, 28}:     \"EDT\",\n\t[3]byte{0, 37, 29}:     \"DSA Encore, LLC\",\n\t[3]byte{0, 37, 30}:     \"ROTEL TECHNOLOGIES\",\n\t[3]byte{0, 37, 31}:     \"ZYNUS VISION INC.\",\n\t[3]byte{0, 37, 32}:     \"SMA Railway Technology GmbH\",\n\t[3]byte{0, 37, 33}:     \"Logitek Electronic Systems, Inc.\",\n\t[3]byte{0, 37, 34}:     \"ASRock Incorporation\",\n\t[3]byte{0, 37, 35}:     \"OCP Inc.\",\n\t[3]byte{0, 37, 36}:     \"Lightcomm Technology Co., Ltd\",\n\t[3]byte{0, 37, 37}:     \"CTERA Networks Ltd.\",\n\t[3]byte{0, 37, 38}:     \"Genuine Technologies Co., Ltd.\",\n\t[3]byte{0, 37, 39}:     \"Bitrode Corp.\",\n\t[3]byte{0, 37, 40}:     \"Daido Signal Co., Ltd.\",\n\t[3]byte{0, 37, 41}:     \"COMELIT GROUP S.P.A\",\n\t[3]byte{0, 37, 42}:     \"Chengdu GeeYa Technology Co.,LTD\",\n\t[3]byte{0, 37, 43}:     \"Stirling Energy Systems\",\n\t[3]byte{0, 37, 44}:     \"Entourage Systems, Inc.\",\n\t[3]byte{0, 37, 45}:     \"Kiryung Electronics\",\n\t[3]byte{0, 37, 46}:     \"Cisco SPVTG\",\n\t[3]byte{0, 37, 47}:     \"Energy, Inc.\",\n\t[3]byte{0, 37, 48}:     \"Aetas Systems Inc.\",\n\t[3]byte{0, 37, 49}:     \"Cloud Engines, Inc.\",\n\t[3]byte{0, 37, 50}:     \"Digital Recorders\",\n\t[3]byte{0, 37, 51}:     \"WITTENSTEIN AG\",\n\t[3]byte{0, 37, 53}:     \"Minimax GmbH & Co KG\",\n\t[3]byte{0, 37, 54}:     \"Oki Electric Industry Co., Ltd.\",\n\t[3]byte{0, 37, 55}:     \"Runcom Technologies Ltd.\",\n\t[3]byte{0, 37, 56}:     \"Samsung Electronics Co., Ltd., Memory Division\",\n\t[3]byte{0, 37, 57}:     \"IfTA GmbH\",\n\t[3]byte{0, 37, 58}:     \"CEVA, Ltd.\",\n\t[3]byte{0, 37, 59}:     \"din Dietmar Nocker Facilitymanagement GmbH\",\n\t[3]byte{0, 37, 60}:     \"2Wire Inc\",\n\t[3]byte{0, 37, 61}:     \"DRS Consolidated Controls\",\n\t[3]byte{0, 37, 62}:     \"Sensus Metering Systems\",\n\t[3]byte{0, 37, 64}:     \"Quasar Technologies, Inc.\",\n\t[3]byte{0, 37, 65}:     \"Maquet Critical Care AB\",\n\t[3]byte{0, 37, 66}:     \"Pittasoft\",\n\t[3]byte{0, 37, 67}:     \"MONEYTECH\",\n\t[3]byte{0, 37, 68}:     \"LoJack Corporation\",\n\t[3]byte{0, 37, 69}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 37, 70}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 37, 71}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 37, 72}:     \"Nokia Danmark A/S\",\n\t[3]byte{0, 37, 73}:     \"Jeorich Tech. Co.,Ltd.\",\n\t[3]byte{0, 37, 74}:     \"RingCube Technologies, Inc.\",\n\t[3]byte{0, 37, 75}:     \"Apple, Inc.\",\n\t[3]byte{0, 37, 76}:     \"Videon Central, Inc.\",\n\t[3]byte{0, 37, 77}:     \"Singapore Technologies Electronics Limited\",\n\t[3]byte{0, 37, 78}:     \"Vertex Wireless Co., Ltd.\",\n\t[3]byte{0, 37, 79}:     \"ELETTROLAB Srl\",\n\t[3]byte{0, 37, 80}:     \"Riverbed Technology, Inc.\",\n\t[3]byte{0, 37, 81}:     \"SE-Elektronic GmbH\",\n\t[3]byte{0, 37, 82}:     \"VXi Corporation\",\n\t[3]byte{0, 37, 83}:     \"ADB Broadband Italia\",\n\t[3]byte{0, 37, 84}:     \"Pixel8 Networks\",\n\t[3]byte{0, 37, 85}:     \"Visonic Technologies 1993 Ltd.\",\n\t[3]byte{0, 37, 86}:     \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 37, 87}:     \"BlackBerry RTS\",\n\t[3]byte{0, 37, 88}:     \"MPEDIA\",\n\t[3]byte{0, 37, 89}:     \"Syphan Technologies Ltd\",\n\t[3]byte{0, 37, 90}:     \"Tantalus Systems Corp.\",\n\t[3]byte{0, 37, 91}:     \"CoachComm, LLC\",\n\t[3]byte{0, 37, 92}:     \"NEC Corporation\",\n\t[3]byte{0, 37, 93}:     \"Morningstar Corporation\",\n\t[3]byte{0, 37, 94}:     \"Shanghai Dare Technologies Co.,Ltd.\",\n\t[3]byte{0, 37, 95}:     \"SenTec AG\",\n\t[3]byte{0, 37, 96}:     \"Ibridge Networks & Communications Ltd.\",\n\t[3]byte{0, 37, 97}:     \"ProCurve Networking by HP\",\n\t[3]byte{0, 37, 98}:     \"interbro Co. Ltd.\",\n\t[3]byte{0, 37, 99}:     \"Luxtera Inc\",\n\t[3]byte{0, 37, 100}:    \"Dell Inc.\",\n\t[3]byte{0, 37, 101}:    \"Vizimax Inc.\",\n\t[3]byte{0, 37, 102}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 37, 103}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 37, 104}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 37, 105}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{0, 37, 106}:    \"inIT - Institut Industrial IT\",\n\t[3]byte{0, 37, 107}:    \"ATENIX E.E. s.r.l.\",\n\t[3]byte{0, 37, 108}:    \"\\\"Azimut\\\" Production Association JSC\",\n\t[3]byte{0, 37, 109}:    \"Broadband Forum\",\n\t[3]byte{0, 37, 110}:    \"Van Breda B.V.\",\n\t[3]byte{0, 37, 111}:    \"Dantherm Power\",\n\t[3]byte{0, 37, 112}:    \"Eastern Communications Company Limited\",\n\t[3]byte{0, 37, 113}:    \"Zhejiang Tianle Digital Electric Co.,Ltd\",\n\t[3]byte{0, 37, 114}:    \"Nemo-Q International AB\",\n\t[3]byte{0, 37, 115}:    \"ST Electronics (Info-Security) Pte Ltd\",\n\t[3]byte{0, 37, 116}:    \"KUNIMI MEDIA DEVICE Co., Ltd.\",\n\t[3]byte{0, 37, 117}:    \"FiberPlex Technologies, LLC\",\n\t[3]byte{0, 37, 118}:    \"NELI TECHNOLOGIES\",\n\t[3]byte{0, 37, 119}:    \"D-BOX Technologies\",\n\t[3]byte{0, 37, 120}:    \"JSC \\\"Concern \\\"Sozvezdie\\\"\",\n\t[3]byte{0, 37, 121}:    \"J & F Labs\",\n\t[3]byte{0, 37, 122}:    \"CAMCO Produktions- und Vertriebs-GmbH für  Beschallungs- und Beleuchtungsanlagen\",\n\t[3]byte{0, 37, 123}:    \"STJ  ELECTRONICS  PVT  LTD\",\n\t[3]byte{0, 37, 124}:    \"Huachentel Technology Development Co., Ltd\",\n\t[3]byte{0, 37, 125}:    \"PointRed Telecom Private Ltd.\",\n\t[3]byte{0, 37, 126}:    \"NEW POS TECHNOLOGY LIMITED\",\n\t[3]byte{0, 37, 127}:    \"CallTechSolution Co.,Ltd\",\n\t[3]byte{0, 37, 128}:    \"Equipson S.A.\",\n\t[3]byte{0, 37, 129}:    \"x-star networks Inc.\",\n\t[3]byte{0, 37, 130}:    \"Maksat Technologies (P) Ltd\",\n\t[3]byte{0, 37, 131}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 37, 132}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 37, 133}:    \"KOKUYO S&T Co., Ltd.\",\n\t[3]byte{0, 37, 134}:    \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{0, 37, 135}:    \"Vitality, Inc.\",\n\t[3]byte{0, 37, 136}:    \"Genie Industries, Inc.\",\n\t[3]byte{0, 37, 137}:    \"Hills Industries Limited\",\n\t[3]byte{0, 37, 138}:    \"Pole/Zero Corporation\",\n\t[3]byte{0, 37, 139}:    \"Mellanox Technologies, Inc.\",\n\t[3]byte{0, 37, 140}:    \"ESUS ELEKTRONIK SAN. VE DIS. TIC. LTD. STI.\",\n\t[3]byte{0, 37, 141}:    \"Haier\",\n\t[3]byte{0, 37, 142}:    \"The Weather Channel\",\n\t[3]byte{0, 37, 143}:    \"Trident Microsystems, Inc.\",\n\t[3]byte{0, 37, 144}:    \"Super Micro Computer, Inc.\",\n\t[3]byte{0, 37, 145}:    \"NEXTEK, Inc.\",\n\t[3]byte{0, 37, 146}:    \"Guangzhou Shirui Electronic Co., Ltd\",\n\t[3]byte{0, 37, 147}:    \"DatNet Informatikai Kft.\",\n\t[3]byte{0, 37, 148}:    \"Eurodesign BG LTD\",\n\t[3]byte{0, 37, 149}:    \"Northwest Signal Supply, Inc\",\n\t[3]byte{0, 37, 150}:    \"GIGAVISION srl\",\n\t[3]byte{0, 37, 151}:    \"Kalki Communication Technologies\",\n\t[3]byte{0, 37, 152}:    \"Zhong Shan City Litai Electronic Industrial Co. Ltd\",\n\t[3]byte{0, 37, 153}:    \"Hedon e.d. B.V.\",\n\t[3]byte{0, 37, 154}:    \"CEStronics GmbH\",\n\t[3]byte{0, 37, 155}:    \"Beijing PKUNITY Microsystems Technology Co., Ltd\",\n\t[3]byte{0, 37, 156}:    \"Cisco-Linksys, LLC\",\n\t[3]byte{0, 37, 157}:    \"Private\",\n\t[3]byte{0, 37, 158}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 37, 159}:    \"TechnoDigital Technologies GmbH\",\n\t[3]byte{0, 37, 160}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 37, 161}:    \"Enalasys\",\n\t[3]byte{0, 37, 162}:    \"Alta Definicion LINCEO S.L.\",\n\t[3]byte{0, 37, 163}:    \"Trimax Wireless, Inc.\",\n\t[3]byte{0, 37, 164}:    \"EuroDesign embedded technologies GmbH\",\n\t[3]byte{0, 37, 165}:    \"Walnut Media Network\",\n\t[3]byte{0, 37, 166}:    \"Central Network Solution Co., Ltd.\",\n\t[3]byte{0, 37, 167}:    \"itron\",\n\t[3]byte{0, 37, 168}:    \"Kontron (BeiJing) Technology Co.,Ltd\",\n\t[3]byte{0, 37, 169}:    \"Shanghai Embedway Information Technologies Co.,Ltd\",\n\t[3]byte{0, 37, 170}:    \"Beijing Soul Technology Co.,Ltd.\",\n\t[3]byte{0, 37, 171}:    \"AIO LCD PC BU / TPV\",\n\t[3]byte{0, 37, 172}:    \"I-Tech corporation\",\n\t[3]byte{0, 37, 173}:    \"Manufacturing Resources International\",\n\t[3]byte{0, 37, 174}:    \"Microsoft Corporation\",\n\t[3]byte{0, 37, 175}:    \"COMFILE Technology\",\n\t[3]byte{0, 37, 176}:    \"Schmartz Inc\",\n\t[3]byte{0, 37, 177}:    \"Maya-Creation Corporation\",\n\t[3]byte{0, 37, 178}:    \"MBDA Deutschland GmbH\",\n\t[3]byte{0, 37, 179}:    \"Hewlett Packard\",\n\t[3]byte{0, 37, 180}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 37, 181}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 37, 182}:    \"Telecom FM\",\n\t[3]byte{0, 37, 183}:    \"Costar  electronics, inc.,\",\n\t[3]byte{0, 37, 184}:    \"Agile Communications, Inc.\",\n\t[3]byte{0, 37, 185}:    \"Cypress Solutions Inc\",\n\t[3]byte{0, 37, 186}:    \"Alcatel-Lucent IPD\",\n\t[3]byte{0, 37, 187}:    \"INNERINT Co., Ltd.\",\n\t[3]byte{0, 37, 188}:    \"Apple, Inc.\",\n\t[3]byte{0, 37, 189}:    \"Italdata Ingegneria dell'Idea S.p.A.\",\n\t[3]byte{0, 37, 190}:    \"Tektrap Systems Inc.\",\n\t[3]byte{0, 37, 191}:    \"Wireless Cables Inc.\",\n\t[3]byte{0, 37, 192}:    \"ZillionTV Corporation\",\n\t[3]byte{0, 37, 193}:    \"Nawoo Korea Corp.\",\n\t[3]byte{0, 37, 194}:    \"RingBell Co.,Ltd.\",\n\t[3]byte{0, 37, 195}:    \"21168\",\n\t[3]byte{0, 37, 196}:    \"Ruckus Wireless\",\n\t[3]byte{0, 37, 197}:    \"Star Link Communication Pvt. Ltd.\",\n\t[3]byte{0, 37, 198}:    \"kasercorp, ltd\",\n\t[3]byte{0, 37, 199}:    \"altek Corporation\",\n\t[3]byte{0, 37, 200}:    \"S-Access GmbH\",\n\t[3]byte{0, 37, 201}:    \"SHENZHEN HUAPU DIGITAL CO., LTD\",\n\t[3]byte{0, 37, 202}:    \"LS Research, LLC\",\n\t[3]byte{0, 37, 203}:    \"Reiner SCT\",\n\t[3]byte{0, 37, 204}:    \"Mobile Communications Korea Incorporated\",\n\t[3]byte{0, 37, 205}:    \"Skylane Optics\",\n\t[3]byte{0, 37, 206}:    \"InnerSpace\",\n\t[3]byte{0, 37, 207}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 37, 208}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 37, 209}:    \"Eastern Asia Technology Limited\",\n\t[3]byte{0, 37, 210}:    \"InpegVision Co., Ltd\",\n\t[3]byte{0, 37, 211}:    \"AzureWave Technology Inc.\",\n\t[3]byte{0, 37, 212}:    \"General Dynamics Mission Systems\",\n\t[3]byte{0, 37, 213}:    \"Robonica (Pty) Ltd\",\n\t[3]byte{0, 37, 214}:    \"The Kroger Co.\",\n\t[3]byte{0, 37, 215}:    \"CEDO\",\n\t[3]byte{0, 37, 216}:    \"KOREA MAINTENANCE\",\n\t[3]byte{0, 37, 217}:    \"DataFab Systems Inc.\",\n\t[3]byte{0, 37, 218}:    \"Secura Key\",\n\t[3]byte{0, 37, 219}:    \"ATI Electronics(Shenzhen) Co., LTD\",\n\t[3]byte{0, 37, 220}:    \"Sumitomo Electric Industries, Ltd\",\n\t[3]byte{0, 37, 221}:    \"SUNNYTEK INFORMATION CO., LTD.\",\n\t[3]byte{0, 37, 222}:    \"Probits Co., LTD.\",\n\t[3]byte{0, 37, 223}:    \"Private\",\n\t[3]byte{0, 37, 224}:    \"CeedTec Sdn Bhd\",\n\t[3]byte{0, 37, 225}:    \"SHANGHAI SEEYOO ELECTRONIC & TECHNOLOGY CO., LTD\",\n\t[3]byte{0, 37, 226}:    \"Everspring Industry Co., Ltd.\",\n\t[3]byte{0, 37, 227}:    \"Hanshinit Inc.\",\n\t[3]byte{0, 37, 228}:    \"OMNI-WiFi, LLC\",\n\t[3]byte{0, 37, 229}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{0, 37, 230}:    \"Belgian Monitoring Systems bvba\",\n\t[3]byte{0, 37, 231}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 37, 232}:    \"Idaho Technology\",\n\t[3]byte{0, 37, 233}:    \"i-mate Development, Inc.\",\n\t[3]byte{0, 37, 234}:    \"Iphion BV\",\n\t[3]byte{0, 37, 235}:    \"Reutech Radar Systems (PTY) Ltd\",\n\t[3]byte{0, 37, 236}:    \"Humanware\",\n\t[3]byte{0, 37, 237}:    \"NuVo Technologies LLC\",\n\t[3]byte{0, 37, 238}:    \"Avtex Ltd\",\n\t[3]byte{0, 37, 239}:    \"I-TEC Co., Ltd.\",\n\t[3]byte{0, 37, 240}:    \"Suga Electronics Limited\",\n\t[3]byte{0, 37, 241}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 37, 242}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 37, 243}:    \"Nordwestdeutsche Zählerrevision\",\n\t[3]byte{0, 37, 244}:    \"KoCo Connector AG\",\n\t[3]byte{0, 37, 245}:    \"DVS Korea, Co., Ltd\",\n\t[3]byte{0, 37, 246}:    \"netTALK.com, Inc.\",\n\t[3]byte{0, 37, 247}:    \"Ansaldo STS USA\",\n\t[3]byte{0, 37, 249}:    \"GMK electronic design GmbH\",\n\t[3]byte{0, 37, 250}:    \"J&M Analytik AG\",\n\t[3]byte{0, 37, 251}:    \"Tunstall Healthcare A/S\",\n\t[3]byte{0, 37, 252}:    \"ENDA ENDUSTRIYEL ELEKTRONIK LTD. STI.\",\n\t[3]byte{0, 37, 253}:    \"OBR Centrum Techniki Morskiej S.A.\",\n\t[3]byte{0, 37, 254}:    \"Pilot Electronics Corporation\",\n\t[3]byte{0, 37, 255}:    \"CreNova Multimedia Co., Ltd\",\n\t[3]byte{0, 38, 0}:      \"TEAC Australia Pty Ltd.\",\n\t[3]byte{0, 38, 1}:      \"Cutera Inc\",\n\t[3]byte{0, 38, 2}:      \"SMART Temps LLC\",\n\t[3]byte{0, 38, 3}:      \"Shenzhen Wistar Technology Co., Ltd\",\n\t[3]byte{0, 38, 4}:      \"Audio Processing Technology Ltd\",\n\t[3]byte{0, 38, 5}:      \"CC Systems AB\",\n\t[3]byte{0, 38, 6}:      \"RAUMFELD GmbH\",\n\t[3]byte{0, 38, 7}:      \"Enabling Technology Pty Ltd\",\n\t[3]byte{0, 38, 8}:      \"Apple, Inc.\",\n\t[3]byte{0, 38, 9}:      \"Phyllis Co., Ltd.\",\n\t[3]byte{0, 38, 10}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 38, 11}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 38, 12}:     \"Dataram\",\n\t[3]byte{0, 38, 13}:     \"Mercury Systems, Inc.\",\n\t[3]byte{0, 38, 14}:     \"Ablaze Systems, LLC\",\n\t[3]byte{0, 38, 15}:     \"Linn Products Ltd\",\n\t[3]byte{0, 38, 16}:     \"Apacewave Technologies\",\n\t[3]byte{0, 38, 17}:     \"Licera AB\",\n\t[3]byte{0, 38, 18}:     \"Space Exploration Technologies\",\n\t[3]byte{0, 38, 19}:     \"Engel Axil S.L.\",\n\t[3]byte{0, 38, 20}:     \"KTNF\",\n\t[3]byte{0, 38, 21}:     \"Teracom Limited\",\n\t[3]byte{0, 38, 22}:     \"Rosemount Inc.\",\n\t[3]byte{0, 38, 23}:     \"OEM Worldwide\",\n\t[3]byte{0, 38, 24}:     \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 38, 25}:     \"FRC\",\n\t[3]byte{0, 38, 26}:     \"Femtocomm System Technology Corp.\",\n\t[3]byte{0, 38, 27}:     \"LAUREL BANK MACHINES CO., LTD.\",\n\t[3]byte{0, 38, 28}:     \"NEOVIA INC.\",\n\t[3]byte{0, 38, 29}:     \"COP SECURITY SYSTEM CORP.\",\n\t[3]byte{0, 38, 30}:     \"QINGBANG ELEC(SZ) CO., LTD\",\n\t[3]byte{0, 38, 31}:     \"SAE Magnetics (H.K.) Ltd.\",\n\t[3]byte{0, 38, 32}:     \"ISGUS GmbH\",\n\t[3]byte{0, 38, 33}:     \"InteliCloud Technology Inc.\",\n\t[3]byte{0, 38, 34}:     \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{0, 38, 35}:     \"JRD Communication Inc\",\n\t[3]byte{0, 38, 36}:     \"Thomson Inc.\",\n\t[3]byte{0, 38, 37}:     \"MediaSputnik\",\n\t[3]byte{0, 38, 38}:     \"Geophysical Survey Systems, Inc.\",\n\t[3]byte{0, 38, 39}:     \"Truesell\",\n\t[3]byte{0, 38, 40}:     \"companytec automação e controle ltda.\",\n\t[3]byte{0, 38, 41}:     \"Juphoon System Software Inc.\",\n\t[3]byte{0, 38, 42}:     \"Proxense, LLC\",\n\t[3]byte{0, 38, 43}:     \"Wongs Electronics Co. Ltd.\",\n\t[3]byte{0, 38, 44}:     \"IKT Advanced Technologies s.r.o.\",\n\t[3]byte{0, 38, 45}:     \"Wistron Corporation\",\n\t[3]byte{0, 38, 46}:     \"Chengdu Jiuzhou Electronic Technology Inc\",\n\t[3]byte{0, 38, 47}:     \"HAMAMATSU TOA ELECTRONICS\",\n\t[3]byte{0, 38, 48}:     \"ACOREL S.A.S\",\n\t[3]byte{0, 38, 49}:     \"COMMTACT LTD\",\n\t[3]byte{0, 38, 50}:     \"Instrumentation Technologies d.d.\",\n\t[3]byte{0, 38, 51}:     \"MIR - Medical International Research\",\n\t[3]byte{0, 38, 52}:     \"Infineta Systems, Inc\",\n\t[3]byte{0, 38, 53}:     \"Bluetechnix GmbH\",\n\t[3]byte{0, 38, 54}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 38, 55}:     \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{0, 38, 56}:     \"Xia Men Joyatech Co., Ltd.\",\n\t[3]byte{0, 38, 57}:     \"T.M. Electronics, Inc.\",\n\t[3]byte{0, 38, 58}:     \"Digitec Systems\",\n\t[3]byte{0, 38, 59}:     \"Onbnetech\",\n\t[3]byte{0, 38, 60}:     \"Bachmann Technology GmbH & Co. KG\",\n\t[3]byte{0, 38, 61}:     \"MIA Corporation\",\n\t[3]byte{0, 38, 62}:     \"Trapeze Networks\",\n\t[3]byte{0, 38, 63}:     \"LIOS Technology GmbH\",\n\t[3]byte{0, 38, 64}:     \"Baustem Broadband Technologies, Ltd.\",\n\t[3]byte{0, 38, 65}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 38, 66}:     \"ARRIS Group, Inc.\",\n\t[3]byte{0, 38, 67}:     \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{0, 38, 68}:     \"Thomson Telecom Belgium\",\n\t[3]byte{0, 38, 69}:     \"Circontrol S.A.\",\n\t[3]byte{0, 38, 70}:     \"SHENYANG TONGFANG MULTIMEDIA TECHNOLOGY COMPANY LIMITED\",\n\t[3]byte{0, 38, 71}:     \"WFE TECHNOLOGY CORP.\",\n\t[3]byte{0, 38, 72}:     \"Emitech Corp.\",\n\t[3]byte{0, 38, 74}:     \"Apple, Inc.\",\n\t[3]byte{0, 38, 76}:     \"Shanghai DigiVision Technology Co., Ltd.\",\n\t[3]byte{0, 38, 77}:     \"Arcadyan Technology Corporation\",\n\t[3]byte{0, 38, 78}:     \"Rail & Road Protec GmbH\",\n\t[3]byte{0, 38, 79}:     \"Krüger &Gothe GmbH\",\n\t[3]byte{0, 38, 80}:     \"2Wire Inc\",\n\t[3]byte{0, 38, 81}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 38, 82}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 38, 83}:     \"DaySequerra Corporation\",\n\t[3]byte{0, 38, 84}:     \"3COM\",\n\t[3]byte{0, 38, 85}:     \"Hewlett Packard\",\n\t[3]byte{0, 38, 86}:     \"Sansonic Electronics USA\",\n\t[3]byte{0, 38, 87}:     \"OOO NPP EKRA\",\n\t[3]byte{0, 38, 88}:     \"T-Platforms (Cyprus) Limited\",\n\t[3]byte{0, 38, 89}:     \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 38, 90}:     \"D-Link Corporation\",\n\t[3]byte{0, 38, 91}:     \"Hitron Technologies. Inc\",\n\t[3]byte{0, 38, 92}:     \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 38, 93}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 38, 94}:     \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 38, 95}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 38, 96}:     \"Logiways\",\n\t[3]byte{0, 38, 97}:     \"Irumtek Co., Ltd.\",\n\t[3]byte{0, 38, 98}:     \"Actiontec Electronics, Inc\",\n\t[3]byte{0, 38, 99}:     \"Shenzhen Huitaiwei Tech. Ltd, co.\",\n\t[3]byte{0, 38, 100}:    \"Core System Japan\",\n\t[3]byte{0, 38, 101}:    \"ProtectedLogic Corporation\",\n\t[3]byte{0, 38, 102}:    \"EFM Networks\",\n\t[3]byte{0, 38, 103}:    \"CARECOM CO.,LTD.\",\n\t[3]byte{0, 38, 104}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 38, 105}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 38, 106}:    \"ESSENSIUM NV\",\n\t[3]byte{0, 38, 107}:    \"SHINE UNION ENTERPRISE LIMITED\",\n\t[3]byte{0, 38, 108}:    \"INVENTEC CORPORATION\",\n\t[3]byte{0, 38, 109}:    \"MobileAccess Networks\",\n\t[3]byte{0, 38, 110}:    \"Nissho-denki Co.,LTD.\",\n\t[3]byte{0, 38, 111}:    \"Coordiwise Technology Corp.\",\n\t[3]byte{0, 38, 112}:    \"Cinch Connectors\",\n\t[3]byte{0, 38, 113}:    \"AUTOVISION Co., Ltd\",\n\t[3]byte{0, 38, 114}:    \"AAMP of America\",\n\t[3]byte{0, 38, 115}:    \"RICOH COMPANY,LTD.\",\n\t[3]byte{0, 38, 116}:    \"Hunter Douglas\",\n\t[3]byte{0, 38, 117}:    \"Aztech Electronics Pte Ltd\",\n\t[3]byte{0, 38, 118}:    \"COMMidt AS\",\n\t[3]byte{0, 38, 119}:    \"DEIF A/S\",\n\t[3]byte{0, 38, 120}:    \"Logic Instrument SA\",\n\t[3]byte{0, 38, 121}:    \"Euphonic Technologies, Inc.\",\n\t[3]byte{0, 38, 122}:    \"wuhan hongxin telecommunication technologies co.,ltd\",\n\t[3]byte{0, 38, 123}:    \"GSI Helmholtzzentrum für Schwerionenforschung GmbH\",\n\t[3]byte{0, 38, 124}:    \"Metz-Werke GmbH & Co KG\",\n\t[3]byte{0, 38, 125}:    \"A-Max Technology Macao Commercial Offshore Company Limited\",\n\t[3]byte{0, 38, 126}:    \"PARROT SA\",\n\t[3]byte{0, 38, 127}:    \"Zenterio AB\",\n\t[3]byte{0, 38, 128}:    \"SIL3 Pty.Ltd\",\n\t[3]byte{0, 38, 129}:    \"Interspiro AB\",\n\t[3]byte{0, 38, 130}:    \"Gemtek Technology Co., Ltd.\",\n\t[3]byte{0, 38, 131}:    \"Ajoho Enterprise Co., Ltd.\",\n\t[3]byte{0, 38, 132}:    \"KISAN SYSTEM\",\n\t[3]byte{0, 38, 133}:    \"Digital Innovation\",\n\t[3]byte{0, 38, 134}:    \"Quantenna Communcations, Inc.\",\n\t[3]byte{0, 38, 135}:    \"corega K.K\",\n\t[3]byte{0, 38, 136}:    \"Juniper Networks\",\n\t[3]byte{0, 38, 137}:    \"General Dynamics Robotic Systems\",\n\t[3]byte{0, 38, 138}:    \"Terrier SC Ltd\",\n\t[3]byte{0, 38, 139}:    \"Guangzhou Escene Computer Technology Limited\",\n\t[3]byte{0, 38, 140}:    \"StarLeaf Ltd.\",\n\t[3]byte{0, 38, 141}:    \"CellTel S.p.A.\",\n\t[3]byte{0, 38, 142}:    \"Alta Solutions, Inc.\",\n\t[3]byte{0, 38, 143}:    \"MTA SpA\",\n\t[3]byte{0, 38, 144}:    \"I DO IT\",\n\t[3]byte{0, 38, 145}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{0, 38, 146}:    \"Mitsubishi Electric Corporation\",\n\t[3]byte{0, 38, 147}:    \"QVidium Technologies, Inc.\",\n\t[3]byte{0, 38, 148}:    \"Senscient Ltd\",\n\t[3]byte{0, 38, 149}:    \"ZT Group Int'l Inc\",\n\t[3]byte{0, 38, 150}:    \"NOOLIX Co., Ltd\",\n\t[3]byte{0, 38, 151}:    \"Alpha  Technologies Inc.\",\n\t[3]byte{0, 38, 152}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 38, 153}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 38, 154}:    \"Carina System Co., Ltd.\",\n\t[3]byte{0, 38, 155}:    \"SOKRAT Ltd.\",\n\t[3]byte{0, 38, 156}:    \"ITUS JAPAN CO. LTD\",\n\t[3]byte{0, 38, 157}:    \"M2Mnet Co., Ltd.\",\n\t[3]byte{0, 38, 158}:    \"Quanta Computer Inc.\",\n\t[3]byte{0, 38, 159}:    \"Private\",\n\t[3]byte{0, 38, 160}:    \"moblic\",\n\t[3]byte{0, 38, 161}:    \"Megger\",\n\t[3]byte{0, 38, 162}:    \"Instrumentation Technology Systems\",\n\t[3]byte{0, 38, 163}:    \"FQ Ingenieria Electronica S.A.\",\n\t[3]byte{0, 38, 164}:    \"Novus Produtos Eletronicos Ltda\",\n\t[3]byte{0, 38, 165}:    \"MICROROBOT.CO.,LTD\",\n\t[3]byte{0, 38, 166}:    \"TRIXELL\",\n\t[3]byte{0, 38, 167}:    \"CONNECT SRL\",\n\t[3]byte{0, 38, 168}:    \"DAEHAP HYPER-TECH\",\n\t[3]byte{0, 38, 169}:    \"Strong Technologies Pty Ltd\",\n\t[3]byte{0, 38, 170}:    \"Kenmec Mechanical Engineering Co., Ltd.\",\n\t[3]byte{0, 38, 171}:    \"Seiko Epson Corporation\",\n\t[3]byte{0, 38, 172}:    \"Shanghai LUSTER Teraband photonic Co., Ltd.\",\n\t[3]byte{0, 38, 173}:    \"Arada Systems, Inc.\",\n\t[3]byte{0, 38, 174}:    \"Wireless Measurement Ltd\",\n\t[3]byte{0, 38, 175}:    \"Duelco A/S\",\n\t[3]byte{0, 38, 176}:    \"Apple, Inc.\",\n\t[3]byte{0, 38, 177}:    \"Navis Auto Motive Systems, Inc.\",\n\t[3]byte{0, 38, 178}:    \"Setrix GmbH\",\n\t[3]byte{0, 38, 179}:    \"Thales Communications Inc\",\n\t[3]byte{0, 38, 180}:    \"Ford Motor Company\",\n\t[3]byte{0, 38, 181}:    \"ICOMM Tele Ltd\",\n\t[3]byte{0, 38, 182}:    \"ASKEY COMPUTER CORP\",\n\t[3]byte{0, 38, 183}:    \"Kingston Technology Company, Inc.\",\n\t[3]byte{0, 38, 184}:    \"Actiontec Electronics, Inc\",\n\t[3]byte{0, 38, 185}:    \"Dell Inc.\",\n\t[3]byte{0, 38, 186}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 38, 187}:    \"Apple, Inc.\",\n\t[3]byte{0, 38, 188}:    \"General Jack Technology Ltd.\",\n\t[3]byte{0, 38, 189}:    \"JTEC Card &amp; Communication Co., Ltd\",\n\t[3]byte{0, 38, 190}:    \"Schoonderbeek Elektronica Systemen B.V.\",\n\t[3]byte{0, 38, 191}:    \"ShenZhen Temobi Science&Tech Development Co.,Ltd\",\n\t[3]byte{0, 38, 192}:    \"EnergyHub\",\n\t[3]byte{0, 38, 193}:    \"ARTRAY CO., LTD.\",\n\t[3]byte{0, 38, 194}:    \"SCDI Co. LTD\",\n\t[3]byte{0, 38, 195}:    \"Insightek Corp.\",\n\t[3]byte{0, 38, 196}:    \"Cadmos microsystems S.r.l.\",\n\t[3]byte{0, 38, 197}:    \"Guangdong Gosun Telecommunications Co.,Ltd\",\n\t[3]byte{0, 38, 198}:    \"Intel Corporate\",\n\t[3]byte{0, 38, 199}:    \"Intel Corporate\",\n\t[3]byte{0, 38, 200}:    \"System Sensor\",\n\t[3]byte{0, 38, 201}:    \"Proventix Systems, Inc.\",\n\t[3]byte{0, 38, 202}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 38, 203}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 38, 204}:    \"Nokia Danmark A/S\",\n\t[3]byte{0, 38, 205}:    \"PurpleComm, Inc.\",\n\t[3]byte{0, 38, 206}:    \"Kozumi USA Corp.\",\n\t[3]byte{0, 38, 207}:    \"DEKA R&D\",\n\t[3]byte{0, 38, 208}:    \"Semihalf\",\n\t[3]byte{0, 38, 209}:    \"S Squared Innovations Inc.\",\n\t[3]byte{0, 38, 210}:    \"Pcube Systems, Inc.\",\n\t[3]byte{0, 38, 211}:    \"Zeno Information System\",\n\t[3]byte{0, 38, 212}:    \"IRCA SpA\",\n\t[3]byte{0, 38, 213}:    \"Ory Solucoes em Comercio de Informatica Ltda.\",\n\t[3]byte{0, 38, 214}:    \"Ningbo Andy Optoelectronic Co., Ltd.\",\n\t[3]byte{0, 38, 215}:    \"KM Electornic Technology Co., Ltd.\",\n\t[3]byte{0, 38, 216}:    \"Magic Point Inc.\",\n\t[3]byte{0, 38, 217}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 38, 218}:    \"Universal Media Corporation /Slovakia/ s.r.o.\",\n\t[3]byte{0, 38, 219}:    \"Ionics EMS Inc.\",\n\t[3]byte{0, 38, 220}:    \"Optical Systems Design\",\n\t[3]byte{0, 38, 221}:    \"Fival Science & Technology Co.,Ltd.\",\n\t[3]byte{0, 38, 222}:    \"FDI MATELEC\",\n\t[3]byte{0, 38, 223}:    \"TaiDoc Technology Corp.\",\n\t[3]byte{0, 38, 224}:    \"ASITEQ\",\n\t[3]byte{0, 38, 225}:    \"Stanford University, OpenFlow Group\",\n\t[3]byte{0, 38, 226}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{0, 38, 227}:    \"DTI\",\n\t[3]byte{0, 38, 228}:    \"Canal +\",\n\t[3]byte{0, 38, 229}:    \"AEG Power Solutions\",\n\t[3]byte{0, 38, 230}:    \"Visionhitech Co., Ltd.\",\n\t[3]byte{0, 38, 231}:    \"Shanghai ONLAN Communication Tech. Co., Ltd.\",\n\t[3]byte{0, 38, 232}:    \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{0, 38, 233}:    \"SP Corp\",\n\t[3]byte{0, 38, 234}:    \"Cheerchip Electronic Technology (ShangHai) Co., Ltd.\",\n\t[3]byte{0, 38, 235}:    \"Advanced Spectrum Technology Co., Ltd.\",\n\t[3]byte{0, 38, 236}:    \"Legrand Home Systems, Inc\",\n\t[3]byte{0, 38, 237}:    \"zte corporation\",\n\t[3]byte{0, 38, 238}:    \"TKM GmbH\",\n\t[3]byte{0, 38, 239}:    \"Technology Advancement Group, Inc.\",\n\t[3]byte{0, 38, 240}:    \"cTrixs International GmbH.\",\n\t[3]byte{0, 38, 241}:    \"ProCurve Networking by HP\",\n\t[3]byte{0, 38, 242}:    \"NETGEAR\",\n\t[3]byte{0, 38, 243}:    \"SMC Networks\",\n\t[3]byte{0, 38, 244}:    \"Nesslab\",\n\t[3]byte{0, 38, 245}:    \"XRPLUS Inc.\",\n\t[3]byte{0, 38, 246}:    \"Military Communication Institute\",\n\t[3]byte{0, 38, 247}:    \"Nivetti Systems Pvt. Ltd.\",\n\t[3]byte{0, 38, 248}:    \"Golden Highway Industry Development Co., Ltd.\",\n\t[3]byte{0, 38, 249}:    \"S.E.M. srl\",\n\t[3]byte{0, 38, 250}:    \"BandRich Inc.\",\n\t[3]byte{0, 38, 251}:    \"AirDio Wireless, Inc.\",\n\t[3]byte{0, 38, 252}:    \"AcSiP Technology Corp.\",\n\t[3]byte{0, 38, 253}:    \"Interactive Intelligence\",\n\t[3]byte{0, 38, 254}:    \"MKD Technology Inc.\",\n\t[3]byte{0, 38, 255}:    \"BlackBerry RTS\",\n\t[3]byte{0, 39, 0}:      \"Shenzhen Siglent Technology Co., Ltd.\",\n\t[3]byte{0, 39, 1}:      \"INCOstartec GmbH\",\n\t[3]byte{0, 39, 2}:      \"SolarEdge Technologies\",\n\t[3]byte{0, 39, 3}:      \"Testech Electronics Pte Ltd\",\n\t[3]byte{0, 39, 4}:      \"Accelerated Concepts, Inc\",\n\t[3]byte{0, 39, 5}:      \"Sectronic\",\n\t[3]byte{0, 39, 6}:      \"YOISYS\",\n\t[3]byte{0, 39, 7}:      \"Lift Complex DS, JSC\",\n\t[3]byte{0, 39, 8}:      \"Nordiag ASA\",\n\t[3]byte{0, 39, 9}:      \"Nintendo Co., Ltd.\",\n\t[3]byte{0, 39, 10}:     \"IEE S.A.\",\n\t[3]byte{0, 39, 11}:     \"Adura Technologies\",\n\t[3]byte{0, 39, 12}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 39, 13}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 39, 14}:     \"Intel Corporate\",\n\t[3]byte{0, 39, 15}:     \"Envisionnovation Inc\",\n\t[3]byte{0, 39, 16}:     \"Intel Corporate\",\n\t[3]byte{0, 39, 17}:     \"LanPro Inc\",\n\t[3]byte{0, 39, 18}:     \"MaxVision LLC\",\n\t[3]byte{0, 39, 19}:     \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{0, 39, 20}:     \"Grainmustards, Co,ltd.\",\n\t[3]byte{0, 39, 21}:     \"Rebound Telecom. Co., Ltd\",\n\t[3]byte{0, 39, 22}:     \"Adachi-Syokai Co., Ltd.\",\n\t[3]byte{0, 39, 23}:     \"CE Digital(Zhenjiang)Co.,Ltd\",\n\t[3]byte{0, 39, 24}:     \"Suzhou NEW SEAUNION Video Technology Co.,Ltd\",\n\t[3]byte{0, 39, 25}:     \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{0, 39, 26}:     \"Geenovo Technology Ltd.\",\n\t[3]byte{0, 39, 27}:     \"Alec Sicherheitssysteme GmbH\",\n\t[3]byte{0, 39, 28}:     \"MERCURY CORPORATION\",\n\t[3]byte{0, 39, 29}:     \"Comba Telecom Systems (China) Ltd.\",\n\t[3]byte{0, 39, 30}:     \"Xagyl Communications\",\n\t[3]byte{0, 39, 31}:     \"MIPRO Electronics Co., Ltd\",\n\t[3]byte{0, 39, 32}:     \"NEW-SOL COM\",\n\t[3]byte{0, 39, 33}:     \"Shenzhen Baoan Fenda Industrial Co., Ltd\",\n\t[3]byte{0, 39, 34}:     \"Ubiquiti Networks Inc.\",\n\t[3]byte{0, 39, 144}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 39, 227}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 39, 248}:    \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 40, 159}:    \"Semptian Co., Ltd.\",\n\t[3]byte{0, 40, 248}:    \"Intel Corporate\",\n\t[3]byte{0, 41, 38}:     \"Applied Optoelectronics, Inc Taiwan Branch\",\n\t[3]byte{0, 41, 194}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 42, 16}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 42, 106}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 42, 175}:    \"LARsys-Automation GmbH\",\n\t[3]byte{0, 43, 103}:    \"LCFC(HeFei) Electronics Technology co., ltd\",\n\t[3]byte{0, 44, 200}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 45, 118}:    \"TITECH GmbH\",\n\t[3]byte{0, 46, 199}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 47, 92}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 47, 217}:    \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{0, 48, 0}:      \"ALLWELL TECHNOLOGY CORP.\",\n\t[3]byte{0, 48, 1}:      \"SMP\",\n\t[3]byte{0, 48, 2}:      \"Expand Networks\",\n\t[3]byte{0, 48, 3}:      \"Phasys Ltd.\",\n\t[3]byte{0, 48, 4}:      \"LEADTEK RESEARCH INC.\",\n\t[3]byte{0, 48, 5}:      \"Fujitsu Siemens Computers\",\n\t[3]byte{0, 48, 6}:      \"SUPERPOWER COMPUTER\",\n\t[3]byte{0, 48, 7}:      \"OPTI, INC.\",\n\t[3]byte{0, 48, 8}:      \"AVIO DIGITAL, INC.\",\n\t[3]byte{0, 48, 9}:      \"Tachion Networks, Inc.\",\n\t[3]byte{0, 48, 10}:     \"Aztech Electronics Pte Ltd\",\n\t[3]byte{0, 48, 11}:     \"mPHASE Technologies, Inc.\",\n\t[3]byte{0, 48, 12}:     \"CONGRUENCY, LTD.\",\n\t[3]byte{0, 48, 13}:     \"MMC Technology, Inc.\",\n\t[3]byte{0, 48, 14}:     \"Klotz Digital AG\",\n\t[3]byte{0, 48, 15}:     \"IMT - Information Management T\",\n\t[3]byte{0, 48, 16}:     \"VISIONETICS INTERNATIONAL\",\n\t[3]byte{0, 48, 17}:     \"HMS Industrial Networks   \",\n\t[3]byte{0, 48, 18}:     \"DIGITAL ENGINEERING LTD.\",\n\t[3]byte{0, 48, 19}:     \"NEC Corporation\",\n\t[3]byte{0, 48, 20}:     \"DIVIO, INC.\",\n\t[3]byte{0, 48, 21}:     \"CP CLARE CORP.\",\n\t[3]byte{0, 48, 22}:     \"ISHIDA CO., LTD.\",\n\t[3]byte{0, 48, 23}:     \"BlueArc UK Ltd\",\n\t[3]byte{0, 48, 24}:     \"Jetway Information Co., Ltd.\",\n\t[3]byte{0, 48, 25}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 48, 26}:     \"SMARTBRIDGES PTE. LTD.\",\n\t[3]byte{0, 48, 27}:     \"SHUTTLE, INC.\",\n\t[3]byte{0, 48, 28}:     \"ALTVATER AIRDATA SYSTEMS\",\n\t[3]byte{0, 48, 29}:     \"SKYSTREAM, INC.\",\n\t[3]byte{0, 48, 30}:     \"3COM EUROPE LTD\",\n\t[3]byte{0, 48, 31}:     \"OPTICAL NETWORKS, INC.\",\n\t[3]byte{0, 48, 32}:     \"TSI, Inc..\",\n\t[3]byte{0, 48, 33}:     \"HSING TECH. ENTERPRISE CO.,LTD\",\n\t[3]byte{0, 48, 34}:     \"Fong Kai Industrial Co., Ltd.\",\n\t[3]byte{0, 48, 35}:     \"COGENT COMPUTER SYSTEMS, INC.\",\n\t[3]byte{0, 48, 36}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 48, 37}:     \"CHECKOUT COMPUTER SYSTEMS, LTD\",\n\t[3]byte{0, 48, 38}:     \"HeiTel Digital Video GmbH\",\n\t[3]byte{0, 48, 39}:     \"KERBANGO, INC.\",\n\t[3]byte{0, 48, 40}:     \"FASE Saldatura srl\",\n\t[3]byte{0, 48, 41}:     \"OPICOM\",\n\t[3]byte{0, 48, 42}:     \"SOUTHERN INFORMATION\",\n\t[3]byte{0, 48, 43}:     \"INALP NETWORKS, INC.\",\n\t[3]byte{0, 48, 44}:     \"SYLANTRO SYSTEMS CORPORATION\",\n\t[3]byte{0, 48, 45}:     \"QUANTUM BRIDGE COMMUNICATIONS\",\n\t[3]byte{0, 48, 46}:     \"Hoft & Wessel AG\",\n\t[3]byte{0, 48, 47}:     \"GE Aviation System\",\n\t[3]byte{0, 48, 48}:     \"HARMONIX CORPORATION\",\n\t[3]byte{0, 48, 49}:     \"LIGHTWAVE COMMUNICATIONS, INC.\",\n\t[3]byte{0, 48, 50}:     \"MagicRam, Inc.\",\n\t[3]byte{0, 48, 51}:     \"ORIENT TELECOM CO., LTD.\",\n\t[3]byte{0, 48, 52}:     \"SET ENGINEERING\",\n\t[3]byte{0, 48, 53}:     \"Corning Incorporated\",\n\t[3]byte{0, 48, 54}:     \"RMP ELEKTRONIKSYSTEME GMBH\",\n\t[3]byte{0, 48, 55}:     \"Packard Bell Nec Services\",\n\t[3]byte{0, 48, 56}:     \"XCP, INC.\",\n\t[3]byte{0, 48, 57}:     \"SOFTBOOK PRESS\",\n\t[3]byte{0, 48, 58}:     \"MAATEL\",\n\t[3]byte{0, 48, 59}:     \"PowerCom Technology\",\n\t[3]byte{0, 48, 60}:     \"ONNTO CORP.\",\n\t[3]byte{0, 48, 61}:     \"IVA CORPORATION\",\n\t[3]byte{0, 48, 62}:     \"Radcom Ltd.\",\n\t[3]byte{0, 48, 63}:     \"TurboComm Tech Inc.\",\n\t[3]byte{0, 48, 64}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 48, 65}:     \"SAEJIN T & M CO., LTD.\",\n\t[3]byte{0, 48, 66}:     \"DeTeWe-Deutsche Telephonwerke\",\n\t[3]byte{0, 48, 67}:     \"IDREAM TECHNOLOGIES, PTE. LTD.\",\n\t[3]byte{0, 48, 68}:     \"CradlePoint, Inc\",\n\t[3]byte{0, 48, 69}:     \"Village Networks, Inc. (VNI)\",\n\t[3]byte{0, 48, 70}:     \"Controlled Electronic Manageme\",\n\t[3]byte{0, 48, 71}:     \"NISSEI ELECTRIC CO., LTD.\",\n\t[3]byte{0, 48, 72}:     \"Super Micro Computer, Inc.\",\n\t[3]byte{0, 48, 73}:     \"BRYANT TECHNOLOGY, LTD.\",\n\t[3]byte{0, 48, 74}:     \"Fraunhofer IPMS\",\n\t[3]byte{0, 48, 75}:     \"ORBACOM SYSTEMS, INC.\",\n\t[3]byte{0, 48, 76}:     \"APPIAN COMMUNICATIONS, INC.\",\n\t[3]byte{0, 48, 77}:     \"ESI\",\n\t[3]byte{0, 48, 78}:     \"BUSTEC PRODUCTION LTD.\",\n\t[3]byte{0, 48, 79}:     \"PLANET Technology Corporation\",\n\t[3]byte{0, 48, 80}:     \"Versa Technology\",\n\t[3]byte{0, 48, 81}:     \"ORBIT AVIONIC & COMMUNICATION\",\n\t[3]byte{0, 48, 82}:     \"ELASTIC NETWORKS\",\n\t[3]byte{0, 48, 83}:     \"Basler AG\",\n\t[3]byte{0, 48, 84}:     \"Castlenet Technology Inc.\",\n\t[3]byte{0, 48, 85}:     \"Renesas Technology America, Inc.\",\n\t[3]byte{0, 48, 86}:     \"HMS Industrial Networks\",\n\t[3]byte{0, 48, 87}:     \"QTelNet, Inc.\",\n\t[3]byte{0, 48, 88}:     \"API MOTION\",\n\t[3]byte{0, 48, 89}:     \"KONTRON COMPACT COMPUTERS AG\",\n\t[3]byte{0, 48, 90}:     \"TELGEN CORPORATION\",\n\t[3]byte{0, 48, 91}:     \"Toko Inc.\",\n\t[3]byte{0, 48, 92}:     \"SMAR Laboratories Corp.\",\n\t[3]byte{0, 48, 93}:     \"DIGITRA SYSTEMS, INC.\",\n\t[3]byte{0, 48, 94}:     \"Abelko Innovation\",\n\t[3]byte{0, 48, 95}:     \"Hasselblad\",\n\t[3]byte{0, 48, 96}:     \"Powerfile, Inc.\",\n\t[3]byte{0, 48, 97}:     \"MobyTEL\",\n\t[3]byte{0, 48, 98}:     \"IP Video Networks Inc\",\n\t[3]byte{0, 48, 99}:     \"SANTERA SYSTEMS, INC.\",\n\t[3]byte{0, 48, 100}:    \"ADLINK TECHNOLOGY, INC.\",\n\t[3]byte{0, 48, 101}:    \"Apple, Inc.\",\n\t[3]byte{0, 48, 102}:    \"RFM\",\n\t[3]byte{0, 48, 103}:    \"BIOSTAR Microtech Int'l Corp.\",\n\t[3]byte{0, 48, 104}:    \"CYBERNETICS TECH. CO., LTD.\",\n\t[3]byte{0, 48, 105}:    \"IMPACCT TECHNOLOGY CORP.\",\n\t[3]byte{0, 48, 106}:    \"PENTA MEDIA CO., LTD.\",\n\t[3]byte{0, 48, 107}:    \"CMOS SYSTEMS, INC.\",\n\t[3]byte{0, 48, 108}:    \"Hitex Holding GmbH\",\n\t[3]byte{0, 48, 109}:    \"LUCENT TECHNOLOGIES\",\n\t[3]byte{0, 48, 110}:    \"Hewlett Packard\",\n\t[3]byte{0, 48, 111}:    \"SEYEON TECH. CO., LTD.\",\n\t[3]byte{0, 48, 112}:    \"1Net Corporation\",\n\t[3]byte{0, 48, 113}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 48, 114}:    \"Intellibyte Inc.\",\n\t[3]byte{0, 48, 115}:    \"International Microsystems, In\",\n\t[3]byte{0, 48, 116}:    \"EQUIINET LTD.\",\n\t[3]byte{0, 48, 117}:    \"ADTECH\",\n\t[3]byte{0, 48, 118}:    \"Akamba Corporation\",\n\t[3]byte{0, 48, 119}:    \"ONPREM NETWORKS\",\n\t[3]byte{0, 48, 120}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 48, 121}:    \"CQOS, INC.\",\n\t[3]byte{0, 48, 122}:    \"Advanced Technology & Systems\",\n\t[3]byte{0, 48, 123}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 48, 124}:    \"ADID SA\",\n\t[3]byte{0, 48, 125}:    \"GRE AMERICA, INC.\",\n\t[3]byte{0, 48, 126}:    \"Redflex Communication Systems\",\n\t[3]byte{0, 48, 127}:    \"IRLAN LTD.\",\n\t[3]byte{0, 48, 128}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 48, 129}:    \"ALTOS C&C\",\n\t[3]byte{0, 48, 130}:    \"TAIHAN ELECTRIC WIRE CO., LTD.\",\n\t[3]byte{0, 48, 131}:    \"Ivron Systems\",\n\t[3]byte{0, 48, 132}:    \"ALLIED TELESYN INTERNAIONAL\",\n\t[3]byte{0, 48, 133}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 48, 134}:    \"Transistor Devices, Inc.\",\n\t[3]byte{0, 48, 135}:    \"VEGA GRIESHABER KG\",\n\t[3]byte{0, 48, 136}:    \"Ericsson\",\n\t[3]byte{0, 48, 137}:    \"Spectrapoint Wireless, LLC\",\n\t[3]byte{0, 48, 138}:    \"NICOTRA SISTEMI S.P.A\",\n\t[3]byte{0, 48, 139}:    \"Brix Networks\",\n\t[3]byte{0, 48, 140}:    \"Quantum Corporation\",\n\t[3]byte{0, 48, 141}:    \"Pinnacle Systems, Inc.\",\n\t[3]byte{0, 48, 142}:    \"CROSS MATCH TECHNOLOGIES, INC.\",\n\t[3]byte{0, 48, 143}:    \"MICRILOR, Inc.\",\n\t[3]byte{0, 48, 144}:    \"CYRA TECHNOLOGIES, INC.\",\n\t[3]byte{0, 48, 145}:    \"TAIWAN FIRST LINE ELEC. CORP.\",\n\t[3]byte{0, 48, 146}:    \"Kontron Electronics AG\",\n\t[3]byte{0, 48, 147}:    \"Sonnet Technologies, Inc\",\n\t[3]byte{0, 48, 148}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 48, 149}:    \"Procomp Informatics, Ltd.\",\n\t[3]byte{0, 48, 150}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 48, 151}:    \"AB Regin\",\n\t[3]byte{0, 48, 152}:    \"Global Converging Technologies\",\n\t[3]byte{0, 48, 153}:    \"BOENIG UND KALLENBACH OHG\",\n\t[3]byte{0, 48, 154}:    \"ASTRO TERRA CORP.\",\n\t[3]byte{0, 48, 155}:    \"Smartware\",\n\t[3]byte{0, 48, 156}:    \"Timing Applications, Inc.\",\n\t[3]byte{0, 48, 157}:    \"Nimble Microsystems, Inc.\",\n\t[3]byte{0, 48, 158}:    \"WORKBIT CORPORATION.\",\n\t[3]byte{0, 48, 159}:    \"AMBER NETWORKS\",\n\t[3]byte{0, 48, 160}:    \"TYCO SUBMARINE SYSTEMS, LTD.\",\n\t[3]byte{0, 48, 161}:    \"WEBGATE Inc.\",\n\t[3]byte{0, 48, 162}:    \"Lightner Engineering\",\n\t[3]byte{0, 48, 163}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 48, 164}:    \"Woodwind Communications System\",\n\t[3]byte{0, 48, 165}:    \"ACTIVE POWER\",\n\t[3]byte{0, 48, 166}:    \"VIANET TECHNOLOGIES, LTD.\",\n\t[3]byte{0, 48, 167}:    \"SCHWEITZER ENGINEERING\",\n\t[3]byte{0, 48, 168}:    \"OL'E COMMUNICATIONS, INC.\",\n\t[3]byte{0, 48, 169}:    \"Netiverse, Inc.\",\n\t[3]byte{0, 48, 170}:    \"AXUS MICROSYSTEMS, INC.\",\n\t[3]byte{0, 48, 171}:    \"DELTA NETWORKS, INC.\",\n\t[3]byte{0, 48, 172}:    \"Systeme Lauer GmbH & Co., Ltd.\",\n\t[3]byte{0, 48, 173}:    \"SHANGHAI COMMUNICATION\",\n\t[3]byte{0, 48, 174}:    \"Times N System, Inc.\",\n\t[3]byte{0, 48, 175}:    \"Honeywell GmbH\",\n\t[3]byte{0, 48, 176}:    \"Convergenet Technologies\",\n\t[3]byte{0, 48, 177}:    \"TrunkNet\",\n\t[3]byte{0, 48, 178}:    \"L-3 Sonoma EO\",\n\t[3]byte{0, 48, 179}:    \"San Valley Systems, Inc.\",\n\t[3]byte{0, 48, 180}:    \"INTERSIL CORP.\",\n\t[3]byte{0, 48, 181}:    \"Tadiran Microwave Networks\",\n\t[3]byte{0, 48, 182}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 48, 183}:    \"Teletrol Systems, Inc.\",\n\t[3]byte{0, 48, 184}:    \"RiverDelta Networks\",\n\t[3]byte{0, 48, 185}:    \"ECTEL\",\n\t[3]byte{0, 48, 186}:    \"AC&T SYSTEM CO., LTD.\",\n\t[3]byte{0, 48, 187}:    \"CacheFlow, Inc.\",\n\t[3]byte{0, 48, 188}:    \"Optronic AG\",\n\t[3]byte{0, 48, 189}:    \"BELKIN COMPONENTS\",\n\t[3]byte{0, 48, 190}:    \"City-Net Technology, Inc.\",\n\t[3]byte{0, 48, 191}:    \"MULTIDATA GMBH\",\n\t[3]byte{0, 48, 192}:    \"Lara Technology, Inc.\",\n\t[3]byte{0, 48, 193}:    \"Hewlett Packard\",\n\t[3]byte{0, 48, 194}:    \"COMONE\",\n\t[3]byte{0, 48, 195}:    \"FLUECKIGER ELEKTRONIK AG\",\n\t[3]byte{0, 48, 196}:    \"Canon Imaging Systems Inc.\",\n\t[3]byte{0, 48, 197}:    \"CADENCE DESIGN SYSTEMS, INC.\",\n\t[3]byte{0, 48, 198}:    \"CONTROL SOLUTIONS, INC.\",\n\t[3]byte{0, 48, 199}:    \"Macromate Corp.\",\n\t[3]byte{0, 48, 200}:    \"GAD LINE, LTD.\",\n\t[3]byte{0, 48, 201}:    \"LuxN, N\",\n\t[3]byte{0, 48, 202}:    \"Discovery Com\",\n\t[3]byte{0, 48, 203}:    \"OMNI FLOW COMPUTERS, INC.\",\n\t[3]byte{0, 48, 204}:    \"Tenor Networks, Inc.\",\n\t[3]byte{0, 48, 205}:    \"CONEXANT SYSTEMS, INC.\",\n\t[3]byte{0, 48, 206}:    \"Zaffire\",\n\t[3]byte{0, 48, 207}:    \"TWO TECHNOLOGIES, INC.\",\n\t[3]byte{0, 48, 208}:    \"Tellabs\",\n\t[3]byte{0, 48, 209}:    \"INOVA CORPORATION\",\n\t[3]byte{0, 48, 210}:    \"WIN TECHNOLOGIES, CO., LTD.\",\n\t[3]byte{0, 48, 211}:    \"Agilent Technologies, Inc.\",\n\t[3]byte{0, 48, 212}:    \"AAE Systems, Inc.\",\n\t[3]byte{0, 48, 213}:    \"DResearch GmbH\",\n\t[3]byte{0, 48, 214}:    \"MSC VERTRIEBS GMBH\",\n\t[3]byte{0, 48, 215}:    \"Innovative Systems, L.L.C.\",\n\t[3]byte{0, 48, 216}:    \"SITEK\",\n\t[3]byte{0, 48, 217}:    \"DATACORE SOFTWARE CORP.\",\n\t[3]byte{0, 48, 218}:    \"Comtrend Corporation\",\n\t[3]byte{0, 48, 219}:    \"Mindready Solutions, Inc.\",\n\t[3]byte{0, 48, 220}:    \"RIGHTECH CORPORATION\",\n\t[3]byte{0, 48, 221}:    \"INDIGITA CORPORATION\",\n\t[3]byte{0, 48, 222}:    \"WAGO Kontakttechnik GmbH\",\n\t[3]byte{0, 48, 223}:    \"KB/TEL TELECOMUNICACIONES\",\n\t[3]byte{0, 48, 224}:    \"OXFORD SEMICONDUCTOR LTD.\",\n\t[3]byte{0, 48, 225}:    \"Network Equipment Technologies, Inc.\",\n\t[3]byte{0, 48, 226}:    \"GARNET SYSTEMS CO., LTD.\",\n\t[3]byte{0, 48, 227}:    \"SEDONA NETWORKS CORP.\",\n\t[3]byte{0, 48, 228}:    \"CHIYODA SYSTEM RIKEN\",\n\t[3]byte{0, 48, 229}:    \"Amper Datos S.A.\",\n\t[3]byte{0, 48, 230}:    \"Draeger Medical Systems, Inc.\",\n\t[3]byte{0, 48, 231}:    \"CNF MOBILE SOLUTIONS, INC.\",\n\t[3]byte{0, 48, 232}:    \"ENSIM CORP.\",\n\t[3]byte{0, 48, 233}:    \"GMA COMMUNICATION MANUFACT'G\",\n\t[3]byte{0, 48, 234}:    \"TeraForce Technology Corporation\",\n\t[3]byte{0, 48, 235}:    \"TURBONET COMMUNICATIONS, INC.\",\n\t[3]byte{0, 48, 236}:    \"BORGARDT\",\n\t[3]byte{0, 48, 237}:    \"Expert Magnetics Corp.\",\n\t[3]byte{0, 48, 238}:    \"DSG Technology, Inc.\",\n\t[3]byte{0, 48, 239}:    \"NEON TECHNOLOGY, INC.\",\n\t[3]byte{0, 48, 240}:    \"Uniform Industrial Corp.\",\n\t[3]byte{0, 48, 241}:    \"Accton Technology Corp\",\n\t[3]byte{0, 48, 242}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 48, 243}:    \"At Work Computers\",\n\t[3]byte{0, 48, 244}:    \"STARDOT TECHNOLOGIES\",\n\t[3]byte{0, 48, 245}:    \"Wild Lab. Ltd.\",\n\t[3]byte{0, 48, 246}:    \"SECURELOGIX CORPORATION\",\n\t[3]byte{0, 48, 247}:    \"RAMIX INC.\",\n\t[3]byte{0, 48, 248}:    \"Dynapro Systems, Inc.\",\n\t[3]byte{0, 48, 249}:    \"Sollae Systems Co., Ltd.\",\n\t[3]byte{0, 48, 250}:    \"TELICA, INC.\",\n\t[3]byte{0, 48, 251}:    \"AZS Technology AG\",\n\t[3]byte{0, 48, 252}:    \"Terawave Communications, Inc.\",\n\t[3]byte{0, 48, 253}:    \"INTEGRATED SYSTEMS DESIGN\",\n\t[3]byte{0, 48, 254}:    \"DSA GmbH\",\n\t[3]byte{0, 48, 255}:    \"DataFab Systems Inc.\",\n\t[3]byte{0, 49, 70}:     \"Juniper Networks\",\n\t[3]byte{0, 50, 23}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 50, 58}:     \"so-logic\",\n\t[3]byte{0, 51, 108}:    \"SynapSense Corporation\",\n\t[3]byte{0, 52, 218}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{0, 52, 241}:    \"Radicom Research, Inc.\",\n\t[3]byte{0, 52, 254}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 53, 26}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 53, 50}:     \"Electro-Metrics Corporation\",\n\t[3]byte{0, 53, 96}:     \"Rosen Aviation\",\n\t[3]byte{0, 53, 255}:    \"Texas Instruments\",\n\t[3]byte{0, 54, 118}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 54, 248}:    \"Conti Temic microelectronic GmbH\",\n\t[3]byte{0, 54, 254}:    \"SuperVision\",\n\t[3]byte{0, 55, 109}:    \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{0, 55, 183}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{0, 56, 223}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 58, 125}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 58, 152}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 58, 153}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 58, 154}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 58, 155}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 58, 156}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 58, 157}:    \"NEC Platforms, Ltd.\",\n\t[3]byte{0, 58, 175}:    \"BlueBit Ltd.\",\n\t[3]byte{0, 60, 16}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 60, 197}:    \"WONWOO Engineering Co., Ltd\",\n\t[3]byte{0, 61, 65}:     \"Hatteland Computer AS\",\n\t[3]byte{0, 61, 232}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{0, 62, 225}:    \"Apple, Inc.\",\n\t[3]byte{0, 64, 0}:      \"PCI COMPONENTES DA AMZONIA LTD\",\n\t[3]byte{0, 64, 1}:      \"Zero One Technology Co. Ltd.\",\n\t[3]byte{0, 64, 2}:      \"PERLE SYSTEMS LIMITED\",\n\t[3]byte{0, 64, 3}:      \"Emerson Process Management Power & Water Solutions, Inc.\",\n\t[3]byte{0, 64, 4}:      \"ICM CO. LTD.\",\n\t[3]byte{0, 64, 5}:      \"ANI COMMUNICATIONS INC.\",\n\t[3]byte{0, 64, 6}:      \"SAMPO TECHNOLOGY CORPORATION\",\n\t[3]byte{0, 64, 7}:      \"TELMAT INFORMATIQUE\",\n\t[3]byte{0, 64, 8}:      \"A PLUS INFO CORPORATION\",\n\t[3]byte{0, 64, 9}:      \"TACHIBANA TECTRON CO., LTD.\",\n\t[3]byte{0, 64, 10}:     \"PIVOTAL TECHNOLOGIES, INC.\",\n\t[3]byte{0, 64, 11}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 64, 12}:     \"GENERAL MICRO SYSTEMS, INC.\",\n\t[3]byte{0, 64, 13}:     \"LANNET DATA COMMUNICATIONS,LTD\",\n\t[3]byte{0, 64, 14}:     \"MEMOTEC, INC.\",\n\t[3]byte{0, 64, 15}:     \"DATACOM TECHNOLOGIES\",\n\t[3]byte{0, 64, 16}:     \"SONIC SYSTEMS, INC.\",\n\t[3]byte{0, 64, 17}:     \"ANDOVER CONTROLS CORPORATION\",\n\t[3]byte{0, 64, 18}:     \"WINDATA, INC.\",\n\t[3]byte{0, 64, 19}:     \"NTT DATA COMM. SYSTEMS CORP.\",\n\t[3]byte{0, 64, 20}:     \"COMSOFT GMBH\",\n\t[3]byte{0, 64, 21}:     \"ASCOM INFRASYS AG\",\n\t[3]byte{0, 64, 22}:     \"ADC - Global Connectivity Solutions Division\",\n\t[3]byte{0, 64, 23}:     \"Silex Technology America\",\n\t[3]byte{0, 64, 24}:     \"ADOBE SYSTEMS, INC.\",\n\t[3]byte{0, 64, 25}:     \"AEON SYSTEMS, INC.\",\n\t[3]byte{0, 64, 26}:     \"FUJI ELECTRIC CO., LTD.\",\n\t[3]byte{0, 64, 27}:     \"PRINTER SYSTEMS CORP.\",\n\t[3]byte{0, 64, 28}:     \"AST RESEARCH, INC.\",\n\t[3]byte{0, 64, 29}:     \"INVISIBLE SOFTWARE, INC.\",\n\t[3]byte{0, 64, 30}:     \"ICC\",\n\t[3]byte{0, 64, 31}:     \"COLORGRAPH LTD\",\n\t[3]byte{0, 64, 32}:     \"CommScope Inc\",\n\t[3]byte{0, 64, 33}:     \"RASTER GRAPHICS\",\n\t[3]byte{0, 64, 34}:     \"KLEVER COMPUTERS, INC.\",\n\t[3]byte{0, 64, 35}:     \"LOGIC CORPORATION\",\n\t[3]byte{0, 64, 36}:     \"COMPAC INC.\",\n\t[3]byte{0, 64, 37}:     \"MOLECULAR DYNAMICS\",\n\t[3]byte{0, 64, 38}:     \"BUFFALO.INC\",\n\t[3]byte{0, 64, 39}:     \"SMC MASSACHUSETTS, INC.\",\n\t[3]byte{0, 64, 40}:     \"NETCOMM LIMITED\",\n\t[3]byte{0, 64, 41}:     \"Compex\",\n\t[3]byte{0, 64, 42}:     \"Canoga Perkins Corporation\",\n\t[3]byte{0, 64, 43}:     \"TRIGEM COMPUTER, INC.\",\n\t[3]byte{0, 64, 44}:     \"ISIS DISTRIBUTED SYSTEMS, INC.\",\n\t[3]byte{0, 64, 45}:     \"HARRIS ADACOM CORPORATION\",\n\t[3]byte{0, 64, 46}:     \"PRECISION SOFTWARE, INC.\",\n\t[3]byte{0, 64, 47}:     \"XLNT DESIGNS INC.\",\n\t[3]byte{0, 64, 48}:     \"GK COMPUTER\",\n\t[3]byte{0, 64, 49}:     \"KOKUSAI ELECTRIC CO., LTD\",\n\t[3]byte{0, 64, 50}:     \"DIGITAL COMMUNICATIONS\",\n\t[3]byte{0, 64, 51}:     \"ADDTRON TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 64, 52}:     \"BUSTEK CORPORATION\",\n\t[3]byte{0, 64, 53}:     \"OPCOM\",\n\t[3]byte{0, 64, 54}:     \"Zoom Telephonics, Inc\",\n\t[3]byte{0, 64, 55}:     \"SEA-ILAN, INC.\",\n\t[3]byte{0, 64, 56}:     \"TALENT ELECTRIC INCORPORATED\",\n\t[3]byte{0, 64, 57}:     \"OPTEC DAIICHI DENKO CO., LTD.\",\n\t[3]byte{0, 64, 58}:     \"IMPACT TECHNOLOGIES\",\n\t[3]byte{0, 64, 59}:     \"SYNERJET INTERNATIONAL CORP.\",\n\t[3]byte{0, 64, 60}:     \"FORKS, INC.\",\n\t[3]byte{0, 64, 61}:     \"Teradata Corporation\",\n\t[3]byte{0, 64, 62}:     \"RASTER OPS CORPORATION\",\n\t[3]byte{0, 64, 63}:     \"SSANGYONG COMPUTER SYSTEMS\",\n\t[3]byte{0, 64, 64}:     \"RING ACCESS, INC.\",\n\t[3]byte{0, 64, 65}:     \"FUJIKURA LTD.\",\n\t[3]byte{0, 64, 66}:     \"N.A.T. GMBH\",\n\t[3]byte{0, 64, 67}:     \"Nokia Siemens Networks GmbH & Co. KG.\",\n\t[3]byte{0, 64, 68}:     \"QNIX COMPUTER CO., LTD.\",\n\t[3]byte{0, 64, 69}:     \"TWINHEAD CORPORATION\",\n\t[3]byte{0, 64, 70}:     \"UDC RESEARCH LIMITED\",\n\t[3]byte{0, 64, 71}:     \"WIND RIVER SYSTEMS\",\n\t[3]byte{0, 64, 72}:     \"SMD INFORMATICA S.A.\",\n\t[3]byte{0, 64, 73}:     \"Roche Diagnostics International Ltd.\",\n\t[3]byte{0, 64, 74}:     \"WEST AUSTRALIAN DEPARTMENT\",\n\t[3]byte{0, 64, 75}:     \"MAPLE COMPUTER SYSTEMS\",\n\t[3]byte{0, 64, 76}:     \"HYPERTEC PTY LTD.\",\n\t[3]byte{0, 64, 77}:     \"TELECOMMUNICATIONS TECHNIQUES\",\n\t[3]byte{0, 64, 78}:     \"FLUENT, INC.\",\n\t[3]byte{0, 64, 79}:     \"SPACE & NAVAL WARFARE SYSTEMS\",\n\t[3]byte{0, 64, 80}:     \"IRONICS, INCORPORATED\",\n\t[3]byte{0, 64, 81}:     \"Garbee and Garbee\",\n\t[3]byte{0, 64, 82}:     \"STAR TECHNOLOGIES, INC.\",\n\t[3]byte{0, 64, 83}:     \"AMPRO COMPUTERS\",\n\t[3]byte{0, 64, 84}:     \"CONNECTION MACHINES SERVICES\",\n\t[3]byte{0, 64, 85}:     \"METRONIX GMBH\",\n\t[3]byte{0, 64, 86}:     \"MCM JAPAN LTD.\",\n\t[3]byte{0, 64, 87}:     \"LOCKHEED - SANDERS\",\n\t[3]byte{0, 64, 88}:     \"KRONOS, INC.\",\n\t[3]byte{0, 64, 89}:     \"YOSHIDA KOGYO K. K.\",\n\t[3]byte{0, 64, 90}:     \"GOLDSTAR INFORMATION & COMM.\",\n\t[3]byte{0, 64, 91}:     \"FUNASSET LIMITED\",\n\t[3]byte{0, 64, 92}:     \"FUTURE SYSTEMS, INC.\",\n\t[3]byte{0, 64, 93}:     \"STAR-TEK, INC.\",\n\t[3]byte{0, 64, 94}:     \"NORTH HILLS ISRAEL\",\n\t[3]byte{0, 64, 95}:     \"AFE COMPUTERS LTD.\",\n\t[3]byte{0, 64, 96}:     \"COMENDEC LTD\",\n\t[3]byte{0, 64, 97}:     \"DATATECH ENTERPRISES CO., LTD.\",\n\t[3]byte{0, 64, 98}:     \"E-SYSTEMS, INC./GARLAND DIV.\",\n\t[3]byte{0, 64, 99}:     \"VIA TECHNOLOGIES, INC.\",\n\t[3]byte{0, 64, 100}:    \"KLA INSTRUMENTS CORPORATION\",\n\t[3]byte{0, 64, 101}:    \"GTE SPACENET\",\n\t[3]byte{0, 64, 102}:    \"APRESIA Systems Ltd\",\n\t[3]byte{0, 64, 103}:    \"OMNIBYTE CORPORATION\",\n\t[3]byte{0, 64, 104}:    \"EXTENDED SYSTEMS\",\n\t[3]byte{0, 64, 105}:    \"LEMCOM SYSTEMS, INC.\",\n\t[3]byte{0, 64, 106}:    \"KENTEK INFORMATION SYSTEMS,INC\",\n\t[3]byte{0, 64, 107}:    \"SYSGEN\",\n\t[3]byte{0, 64, 108}:    \"COPERNIQUE\",\n\t[3]byte{0, 64, 109}:    \"LANCO, INC.\",\n\t[3]byte{0, 64, 110}:    \"COROLLARY, INC.\",\n\t[3]byte{0, 64, 111}:    \"SYNC RESEARCH INC.\",\n\t[3]byte{0, 64, 112}:    \"INTERWARE CO., LTD.\",\n\t[3]byte{0, 64, 113}:    \"ATM COMPUTER GMBH\",\n\t[3]byte{0, 64, 114}:    \"Applied Innovation Inc.\",\n\t[3]byte{0, 64, 115}:    \"BASS ASSOCIATES\",\n\t[3]byte{0, 64, 116}:    \"CABLE AND WIRELESS\",\n\t[3]byte{0, 64, 117}:    \"Tattile SRL \",\n\t[3]byte{0, 64, 118}:    \"Sun Conversion Technologies\",\n\t[3]byte{0, 64, 119}:    \"MAXTON TECHNOLOGY CORPORATION\",\n\t[3]byte{0, 64, 120}:    \"WEARNES AUTOMATION PTE LTD\",\n\t[3]byte{0, 64, 121}:    \"JUKO MANUFACTURE COMPANY, LTD.\",\n\t[3]byte{0, 64, 122}:    \"SOCIETE D'EXPLOITATION DU CNIT\",\n\t[3]byte{0, 64, 123}:    \"SCIENTIFIC ATLANTA\",\n\t[3]byte{0, 64, 124}:    \"QUME CORPORATION\",\n\t[3]byte{0, 64, 125}:    \"EXTENSION TECHNOLOGY CORP.\",\n\t[3]byte{0, 64, 126}:    \"EVERGREEN SYSTEMS, INC.\",\n\t[3]byte{0, 64, 127}:    \"FLIR Systems\",\n\t[3]byte{0, 64, 128}:    \"ATHENIX CORPORATION\",\n\t[3]byte{0, 64, 129}:    \"MANNESMANN SCANGRAPHIC GMBH\",\n\t[3]byte{0, 64, 130}:    \"LABORATORY EQUIPMENT CORP.\",\n\t[3]byte{0, 64, 131}:    \"TDA INDUSTRIA DE PRODUTOS\",\n\t[3]byte{0, 64, 132}:    \"Honeywell International HPS\",\n\t[3]byte{0, 64, 133}:    \"SAAB INSTRUMENTS AB\",\n\t[3]byte{0, 64, 134}:    \"MICHELS & KLEBERHOFF COMPUTER\",\n\t[3]byte{0, 64, 135}:    \"UBITREX CORPORATION\",\n\t[3]byte{0, 64, 136}:    \"MOBIUS TECHNOLOGIES, INC.\",\n\t[3]byte{0, 64, 137}:    \"MEIDENSHA CORPORATION\",\n\t[3]byte{0, 64, 138}:    \"TPS TELEPROCESSING SYS. GMBH\",\n\t[3]byte{0, 64, 139}:    \"RAYLAN CORPORATION\",\n\t[3]byte{0, 64, 140}:    \"AXIS COMMUNICATIONS AB\",\n\t[3]byte{0, 64, 141}:    \"THE GOODYEAR TIRE & RUBBER CO.\",\n\t[3]byte{0, 64, 142}:    \"Tattile SRL \",\n\t[3]byte{0, 64, 143}:    \"WM-DATA MINFO AB\",\n\t[3]byte{0, 64, 144}:    \"ANSEL COMMUNICATIONS\",\n\t[3]byte{0, 64, 145}:    \"PROCOMP INDUSTRIA ELETRONICA\",\n\t[3]byte{0, 64, 146}:    \"ASP COMPUTER PRODUCTS, INC.\",\n\t[3]byte{0, 64, 147}:    \"PAXDATA NETWORKS LTD.\",\n\t[3]byte{0, 64, 148}:    \"SHOGRAPHICS, INC.\",\n\t[3]byte{0, 64, 149}:    \"R.P.T. INTERGROUPS INT'L LTD.\",\n\t[3]byte{0, 64, 150}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 64, 151}:    \"DATEX DIVISION OF\",\n\t[3]byte{0, 64, 152}:    \"DRESSLER GMBH & CO.\",\n\t[3]byte{0, 64, 153}:    \"NEWGEN SYSTEMS CORP.\",\n\t[3]byte{0, 64, 154}:    \"NETWORK EXPRESS, INC.\",\n\t[3]byte{0, 64, 155}:    \"HAL COMPUTER SYSTEMS INC.\",\n\t[3]byte{0, 64, 156}:    \"TRANSWARE\",\n\t[3]byte{0, 64, 157}:    \"DigiBoard\",\n\t[3]byte{0, 64, 158}:    \"CONCURRENT TECHNOLOGIES  LTD.\",\n\t[3]byte{0, 64, 159}:    \"Telco Systems, Inc. \",\n\t[3]byte{0, 64, 160}:    \"GOLDSTAR CO., LTD.\",\n\t[3]byte{0, 64, 161}:    \"ERGO COMPUTING\",\n\t[3]byte{0, 64, 162}:    \"KINGSTAR TECHNOLOGY INC.\",\n\t[3]byte{0, 64, 163}:    \"MICROUNITY SYSTEMS ENGINEERING\",\n\t[3]byte{0, 64, 164}:    \"ROSE ELECTRONICS\",\n\t[3]byte{0, 64, 165}:    \"CLINICOMP INTL.\",\n\t[3]byte{0, 64, 166}:    \"Cray, Inc.\",\n\t[3]byte{0, 64, 167}:    \"ITAUTEC PHILCO S.A.\",\n\t[3]byte{0, 64, 168}:    \"IMF INTERNATIONAL LTD.\",\n\t[3]byte{0, 64, 169}:    \"DATACOM INC.\",\n\t[3]byte{0, 64, 170}:    \"Valmet Automation\",\n\t[3]byte{0, 64, 171}:    \"ROLAND DG CORPORATION\",\n\t[3]byte{0, 64, 172}:    \"SUPER WORKSTATION, INC.\",\n\t[3]byte{0, 64, 173}:    \"SMA REGELSYSTEME GMBH\",\n\t[3]byte{0, 64, 174}:    \"DELTA CONTROLS, INC.\",\n\t[3]byte{0, 64, 175}:    \"DIGITAL PRODUCTS, INC.\",\n\t[3]byte{0, 64, 176}:    \"BYTEX CORPORATION, ENGINEERING\",\n\t[3]byte{0, 64, 177}:    \"CODONICS INC.\",\n\t[3]byte{0, 64, 178}:    \"SYSTEMFORSCHUNG\",\n\t[3]byte{0, 64, 179}:    \"ParTech Inc.\",\n\t[3]byte{0, 64, 180}:    \"NEXTCOM K.K.\",\n\t[3]byte{0, 64, 181}:    \"VIDEO TECHNOLOGY COMPUTERS LTD\",\n\t[3]byte{0, 64, 182}:    \"COMPUTERM  CORPORATION\",\n\t[3]byte{0, 64, 183}:    \"STEALTH COMPUTER SYSTEMS\",\n\t[3]byte{0, 64, 184}:    \"IDEA ASSOCIATES\",\n\t[3]byte{0, 64, 185}:    \"MACQ ELECTRONIQUE SA\",\n\t[3]byte{0, 64, 186}:    \"ALLIANT COMPUTER SYSTEMS CORP.\",\n\t[3]byte{0, 64, 187}:    \"GOLDSTAR CABLE CO., LTD.\",\n\t[3]byte{0, 64, 188}:    \"ALGORITHMICS LTD.\",\n\t[3]byte{0, 64, 189}:    \"STARLIGHT NETWORKS, INC.\",\n\t[3]byte{0, 64, 190}:    \"BOEING DEFENSE & SPACE\",\n\t[3]byte{0, 64, 191}:    \"CHANNEL SYSTEMS INTERN'L INC.\",\n\t[3]byte{0, 64, 192}:    \"VISTA CONTROLS CORPORATION\",\n\t[3]byte{0, 64, 193}:    \"BIZERBA-WERKE WILHEIM KRAUT\",\n\t[3]byte{0, 64, 194}:    \"APPLIED COMPUTING DEVICES\",\n\t[3]byte{0, 64, 195}:    \"FISCHER AND PORTER CO.\",\n\t[3]byte{0, 64, 196}:    \"KINKEI SYSTEM CORPORATION\",\n\t[3]byte{0, 64, 197}:    \"MICOM COMMUNICATIONS INC.\",\n\t[3]byte{0, 64, 198}:    \"FIBERNET RESEARCH, INC.\",\n\t[3]byte{0, 64, 199}:    \"RUBY TECH CORPORATION\",\n\t[3]byte{0, 64, 200}:    \"MILAN TECHNOLOGY CORPORATION\",\n\t[3]byte{0, 64, 201}:    \"NCUBE\",\n\t[3]byte{0, 64, 202}:    \"FIRST INTERNAT'L COMPUTER, INC\",\n\t[3]byte{0, 64, 203}:    \"LANWAN TECHNOLOGIES\",\n\t[3]byte{0, 64, 204}:    \"SILCOM MANUF'G TECHNOLOGY INC.\",\n\t[3]byte{0, 64, 205}:    \"TERA MICROSYSTEMS, INC.\",\n\t[3]byte{0, 64, 206}:    \"NET-SOURCE, INC.\",\n\t[3]byte{0, 64, 207}:    \"STRAWBERRY TREE, INC.\",\n\t[3]byte{0, 64, 208}:    \"MITAC INTERNATIONAL CORP.\",\n\t[3]byte{0, 64, 209}:    \"FUKUDA DENSHI CO., LTD.\",\n\t[3]byte{0, 64, 210}:    \"PAGINE CORPORATION\",\n\t[3]byte{0, 64, 211}:    \"KIMPSION INTERNATIONAL CORP.\",\n\t[3]byte{0, 64, 212}:    \"GAGE TALKER CORP.\",\n\t[3]byte{0, 64, 213}:    \"Sartorius Mechatronics T&H GmbH \",\n\t[3]byte{0, 64, 214}:    \"LOCAMATION B.V.\",\n\t[3]byte{0, 64, 215}:    \"STUDIO GEN INC.\",\n\t[3]byte{0, 64, 216}:    \"OCEAN OFFICE AUTOMATION LTD.\",\n\t[3]byte{0, 64, 217}:    \"AMERICAN MEGATRENDS INC.\",\n\t[3]byte{0, 64, 218}:    \"TELSPEC LTD\",\n\t[3]byte{0, 64, 219}:    \"ADVANCED TECHNICAL SOLUTIONS\",\n\t[3]byte{0, 64, 220}:    \"TRITEC ELECTRONIC GMBH\",\n\t[3]byte{0, 64, 221}:    \"HONG TECHNOLOGIES\",\n\t[3]byte{0, 64, 222}:    \"Elsag Datamat spa\",\n\t[3]byte{0, 64, 223}:    \"DIGALOG SYSTEMS, INC.\",\n\t[3]byte{0, 64, 224}:    \"ATOMWIDE LTD.\",\n\t[3]byte{0, 64, 225}:    \"MARNER INTERNATIONAL, INC.\",\n\t[3]byte{0, 64, 226}:    \"MESA RIDGE TECHNOLOGIES, INC.\",\n\t[3]byte{0, 64, 227}:    \"QUIN SYSTEMS LTD\",\n\t[3]byte{0, 64, 228}:    \"E-M TECHNOLOGY, INC.\",\n\t[3]byte{0, 64, 229}:    \"SYBUS CORPORATION\",\n\t[3]byte{0, 64, 230}:    \"C.A.E.N.\",\n\t[3]byte{0, 64, 231}:    \"ARNOS INSTRUMENTS & COMPUTER\",\n\t[3]byte{0, 64, 232}:    \"CHARLES RIVER DATA SYSTEMS,INC\",\n\t[3]byte{0, 64, 233}:    \"ACCORD SYSTEMS, INC.\",\n\t[3]byte{0, 64, 234}:    \"PLAIN TREE SYSTEMS INC\",\n\t[3]byte{0, 64, 235}:    \"MARTIN MARIETTA CORPORATION\",\n\t[3]byte{0, 64, 236}:    \"MIKASA SYSTEM ENGINEERING\",\n\t[3]byte{0, 64, 237}:    \"NETWORK CONTROLS INT'NATL INC.\",\n\t[3]byte{0, 64, 238}:    \"OPTIMEM\",\n\t[3]byte{0, 64, 239}:    \"HYPERCOM, INC.\",\n\t[3]byte{0, 64, 240}:    \"MicroBrain,Inc.\",\n\t[3]byte{0, 64, 241}:    \"CHUO ELECTRONICS CO., LTD.\",\n\t[3]byte{0, 64, 242}:    \"JANICH & KLASS COMPUTERTECHNIK\",\n\t[3]byte{0, 64, 243}:    \"NETCOR\",\n\t[3]byte{0, 64, 244}:    \"CAMEO COMMUNICATIONS, INC.\",\n\t[3]byte{0, 64, 245}:    \"OEM ENGINES\",\n\t[3]byte{0, 64, 246}:    \"KATRON COMPUTERS INC.\",\n\t[3]byte{0, 64, 247}:    \"Polaroid Corporation\",\n\t[3]byte{0, 64, 248}:    \"SYSTEMHAUS DISCOM\",\n\t[3]byte{0, 64, 249}:    \"COMBINET\",\n\t[3]byte{0, 64, 250}:    \"MICROBOARDS, INC.\",\n\t[3]byte{0, 64, 251}:    \"CASCADE COMMUNICATIONS\",\n\t[3]byte{0, 64, 252}:    \"IBR COMPUTER TECHNIK GMBH\",\n\t[3]byte{0, 64, 253}:    \"LXE\",\n\t[3]byte{0, 64, 254}:    \"SYMPLEX COMMUNICATIONS\",\n\t[3]byte{0, 64, 255}:    \"TELEBIT CORPORATION\",\n\t[3]byte{0, 65, 180}:    \"Wuxi Zhongxing Optoelectronics Technology Co.,Ltd.\",\n\t[3]byte{0, 65, 210}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 66, 56}:     \"Intel Corporate\",\n\t[3]byte{0, 66, 82}:     \"RLX Technologies\",\n\t[3]byte{0, 66, 90}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 66, 104}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 66, 121}:    \"Sunitec Enterprise Co.,Ltd\",\n\t[3]byte{0, 67, 255}:    \"KETRON S.R.L.\",\n\t[3]byte{0, 69, 1}:      \"Midmark RTLS\",\n\t[3]byte{0, 69, 29}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 69, 226}:    \"CyberTAN Technology Inc.\",\n\t[3]byte{0, 70, 75}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 74, 119}:    \"zte corporation\",\n\t[3]byte{0, 75, 243}:    \"SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{0, 77, 50}:     \"Andon Health Co.,Ltd.\",\n\t[3]byte{0, 78, 1}:      \"Dell Inc.\",\n\t[3]byte{0, 78, 53}:     \"Hewlett Packard Enterprise\",\n\t[3]byte{0, 80, 0}:      \"NEXO COMMUNICATIONS, INC.\",\n\t[3]byte{0, 80, 1}:      \"YAMASHITA SYSTEMS CORP.\",\n\t[3]byte{0, 80, 2}:      \"OMNISEC AG\",\n\t[3]byte{0, 80, 3}:      \"Xrite Inc\",\n\t[3]byte{0, 80, 4}:      \"3COM\",\n\t[3]byte{0, 80, 6}:      \"TAC AB\",\n\t[3]byte{0, 80, 7}:      \"SIEMENS TELECOMMUNICATION SYSTEMS LIMITED\",\n\t[3]byte{0, 80, 8}:      \"TIVA MICROCOMPUTER CORP. (TMC)\",\n\t[3]byte{0, 80, 9}:      \"PHILIPS BROADBAND NETWORKS\",\n\t[3]byte{0, 80, 10}:     \"IRIS TECHNOLOGIES, INC.\",\n\t[3]byte{0, 80, 11}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 12}:     \"e-Tek Labs, Inc.\",\n\t[3]byte{0, 80, 13}:     \"SATORI ELECTORIC CO., LTD.\",\n\t[3]byte{0, 80, 14}:     \"CHROMATIS NETWORKS, INC.\",\n\t[3]byte{0, 80, 15}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 16}:     \"NovaNET Learning, Inc.\",\n\t[3]byte{0, 80, 18}:     \"CBL - GMBH\",\n\t[3]byte{0, 80, 19}:     \"Seagate Cloud Systems Inc\",\n\t[3]byte{0, 80, 20}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 21}:     \"BRIGHT STAR ENGINEERING\",\n\t[3]byte{0, 80, 22}:     \"Molex Canada Ltd\",\n\t[3]byte{0, 80, 23}:     \"RSR S.R.L.\",\n\t[3]byte{0, 80, 24}:     \"AMIT, Inc.\",\n\t[3]byte{0, 80, 25}:     \"SPRING TIDE NETWORKS, INC.\",\n\t[3]byte{0, 80, 26}:     \"IQinVision\",\n\t[3]byte{0, 80, 27}:     \"ABL CANADA, INC.\",\n\t[3]byte{0, 80, 28}:     \"JATOM SYSTEMS, INC.\",\n\t[3]byte{0, 80, 30}:     \"Grass Valley, A Belden Brand\",\n\t[3]byte{0, 80, 31}:     \"MRG SYSTEMS, LTD.\",\n\t[3]byte{0, 80, 32}:     \"MEDIASTAR CO., LTD.\",\n\t[3]byte{0, 80, 33}:     \"EIS INTERNATIONAL, INC.\",\n\t[3]byte{0, 80, 34}:     \"ZONET TECHNOLOGY, INC.\",\n\t[3]byte{0, 80, 35}:     \"PG DESIGN ELECTRONICS, INC.\",\n\t[3]byte{0, 80, 36}:     \"NAVIC SYSTEMS, INC.\",\n\t[3]byte{0, 80, 38}:     \"COSYSTEMS, INC.\",\n\t[3]byte{0, 80, 39}:     \"GENICOM CORPORATION\",\n\t[3]byte{0, 80, 40}:     \"AVAL COMMUNICATIONS\",\n\t[3]byte{0, 80, 41}:     \"1394 PRINTER WORKING GROUP\",\n\t[3]byte{0, 80, 42}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 43}:     \"GENRAD LTD.\",\n\t[3]byte{0, 80, 44}:     \"SOYO COMPUTER, INC.\",\n\t[3]byte{0, 80, 45}:     \"ACCEL, INC.\",\n\t[3]byte{0, 80, 46}:     \"CAMBEX CORPORATION\",\n\t[3]byte{0, 80, 47}:     \"TollBridge Technologies, Inc.\",\n\t[3]byte{0, 80, 48}:     \"FUTURE PLUS SYSTEMS\",\n\t[3]byte{0, 80, 49}:     \"AEROFLEX LABORATORIES, INC.\",\n\t[3]byte{0, 80, 50}:     \"PICAZO COMMUNICATIONS, INC.\",\n\t[3]byte{0, 80, 51}:     \"MAYAN NETWORKS\",\n\t[3]byte{0, 80, 54}:     \"NETCAM, LTD.\",\n\t[3]byte{0, 80, 55}:     \"KOGA ELECTRONICS CO.\",\n\t[3]byte{0, 80, 56}:     \"DAIN TELECOM CO., LTD.\",\n\t[3]byte{0, 80, 57}:     \"MARINER NETWORKS\",\n\t[3]byte{0, 80, 58}:     \"DATONG ELECTRONICS LTD.\",\n\t[3]byte{0, 80, 59}:     \"MEDIAFIRE CORPORATION\",\n\t[3]byte{0, 80, 60}:     \"TSINGHUA NOVEL ELECTRONICS\",\n\t[3]byte{0, 80, 62}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 63}:     \"ANCHOR GAMES\",\n\t[3]byte{0, 80, 64}:     \"Panasonic Electric Works Co., Ltd.\",\n\t[3]byte{0, 80, 65}:     \"Coretronic Corporation\",\n\t[3]byte{0, 80, 66}:     \"SCI MANUFACTURING SINGAPORE PTE, LTD.\",\n\t[3]byte{0, 80, 67}:     \"MARVELL SEMICONDUCTOR, INC.\",\n\t[3]byte{0, 80, 68}:     \"ASACA CORPORATION\",\n\t[3]byte{0, 80, 69}:     \"RIOWORKS SOLUTIONS, INC.\",\n\t[3]byte{0, 80, 70}:     \"MENICX INTERNATIONAL CO., LTD.\",\n\t[3]byte{0, 80, 71}:     \"Private\",\n\t[3]byte{0, 80, 72}:     \"INFOLIBRIA\",\n\t[3]byte{0, 80, 73}:     \"Arbor Networks Inc\",\n\t[3]byte{0, 80, 74}:     \"ELTECO A.S.\",\n\t[3]byte{0, 80, 75}:     \"BARCONET N.V.\",\n\t[3]byte{0, 80, 76}:     \"Galil Motion Control\",\n\t[3]byte{0, 80, 77}:     \"Tokyo Electron Device Limited\",\n\t[3]byte{0, 80, 78}:     \"SIERRA MONITOR CORP.\",\n\t[3]byte{0, 80, 79}:     \"OLENCOM ELECTRONICS\",\n\t[3]byte{0, 80, 80}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 81}:     \"IWATSU ELECTRIC CO., LTD.\",\n\t[3]byte{0, 80, 82}:     \"TIARA NETWORKS, INC.\",\n\t[3]byte{0, 80, 83}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 84}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 85}:     \"DOMS A/S\",\n\t[3]byte{0, 80, 86}:     \"VMware, Inc.\",\n\t[3]byte{0, 80, 87}:     \"BROADBAND ACCESS SYSTEMS\",\n\t[3]byte{0, 80, 88}:     \"Sangoma Technologies\",\n\t[3]byte{0, 80, 89}:     \"iBAHN\",\n\t[3]byte{0, 80, 90}:     \"NETWORK ALCHEMY, INC.\",\n\t[3]byte{0, 80, 91}:     \"KAWASAKI LSI U.S.A., INC.\",\n\t[3]byte{0, 80, 92}:     \"TUNDO CORPORATION\",\n\t[3]byte{0, 80, 94}:     \"DIGITEK MICROLOGIC S.A.\",\n\t[3]byte{0, 80, 95}:     \"BRAND INNOVATORS\",\n\t[3]byte{0, 80, 96}:     \"TANDBERG TELECOM AS\",\n\t[3]byte{0, 80, 98}:     \"KOUWELL ELECTRONICS CORP.  **\",\n\t[3]byte{0, 80, 99}:     \"OY COMSEL SYSTEM AB\",\n\t[3]byte{0, 80, 100}:    \"CAE ELECTRONICS\",\n\t[3]byte{0, 80, 101}:    \"TDK-Lambda Corporation\",\n\t[3]byte{0, 80, 102}:    \"AtecoM GmbH advanced telecomunication modules\",\n\t[3]byte{0, 80, 103}:    \"AEROCOMM, INC.\",\n\t[3]byte{0, 80, 104}:    \"ELECTRONIC INDUSTRIES ASSOCIATION\",\n\t[3]byte{0, 80, 105}:    \"PixStream Incorporated\",\n\t[3]byte{0, 80, 106}:    \"EDEVA, INC.\",\n\t[3]byte{0, 80, 107}:    \"SPX-ATEG\",\n\t[3]byte{0, 80, 108}:    \"Beijer Electronics Products AB\",\n\t[3]byte{0, 80, 109}:    \"VIDEOJET SYSTEMS\",\n\t[3]byte{0, 80, 110}:    \"CORDER ENGINEERING CORPORATION\",\n\t[3]byte{0, 80, 111}:    \"G-CONNECT\",\n\t[3]byte{0, 80, 112}:    \"CHAINTECH COMPUTER CO., LTD.\",\n\t[3]byte{0, 80, 113}:    \"AIWA CO., LTD.\",\n\t[3]byte{0, 80, 114}:    \"CORVIS CORPORATION\",\n\t[3]byte{0, 80, 115}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 116}:    \"ADVANCED HI-TECH CORP.\",\n\t[3]byte{0, 80, 117}:    \"KESTREL SOLUTIONS\",\n\t[3]byte{0, 80, 118}:    \"IBM Corp\",\n\t[3]byte{0, 80, 119}:    \"PROLIFIC TECHNOLOGY, INC.\",\n\t[3]byte{0, 80, 120}:    \"MEGATON HOUSE, LTD.\",\n\t[3]byte{0, 80, 121}:    \"Private\",\n\t[3]byte{0, 80, 122}:    \"XPEED, INC.\",\n\t[3]byte{0, 80, 123}:    \"MERLOT COMMUNICATIONS\",\n\t[3]byte{0, 80, 124}:    \"VIDEOCON AG\",\n\t[3]byte{0, 80, 125}:    \"IFP\",\n\t[3]byte{0, 80, 126}:    \"NEWER TECHNOLOGY\",\n\t[3]byte{0, 80, 127}:    \"DrayTek Corp.\",\n\t[3]byte{0, 80, 128}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 129}:    \"MURATA MACHINERY, LTD.\",\n\t[3]byte{0, 80, 130}:    \"FORESSON CORPORATION\",\n\t[3]byte{0, 80, 131}:    \"GILBARCO, INC.\",\n\t[3]byte{0, 80, 132}:    \"Quantum Corp.\",\n\t[3]byte{0, 80, 134}:    \"TELKOM SA, LTD.\",\n\t[3]byte{0, 80, 135}:    \"TERASAKI ELECTRIC CO., LTD.\",\n\t[3]byte{0, 80, 136}:    \"AMANO CORPORATION\",\n\t[3]byte{0, 80, 137}:    \"SAFETY MANAGEMENT SYSTEMS\",\n\t[3]byte{0, 80, 139}:    \"Hewlett Packard\",\n\t[3]byte{0, 80, 140}:    \"RSI SYSTEMS\",\n\t[3]byte{0, 80, 141}:    \"ABIT COMPUTER CORPORATION\",\n\t[3]byte{0, 80, 142}:    \"OPTIMATION, INC.\",\n\t[3]byte{0, 80, 143}:    \"ASITA TECHNOLOGIES INT'L LTD.\",\n\t[3]byte{0, 80, 144}:    \"DCTRI\",\n\t[3]byte{0, 80, 145}:    \"NETACCESS, INC.\",\n\t[3]byte{0, 80, 146}:    \"Rigaku Corporation Osaka Plant\",\n\t[3]byte{0, 80, 147}:    \"BOEING\",\n\t[3]byte{0, 80, 148}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 80, 149}:    \"PERACOM NETWORKS\",\n\t[3]byte{0, 80, 150}:    \"SALIX TECHNOLOGIES, INC.\",\n\t[3]byte{0, 80, 151}:    \"MMC-EMBEDDED COMPUTERTECHNIK GmbH\",\n\t[3]byte{0, 80, 152}:    \"GLOBALOOP, LTD.\",\n\t[3]byte{0, 80, 153}:    \"3COM EUROPE LTD\",\n\t[3]byte{0, 80, 154}:    \"TAG ELECTRONIC SYSTEMS\",\n\t[3]byte{0, 80, 155}:    \"SWITCHCORE AB\",\n\t[3]byte{0, 80, 156}:    \"BETA RESEARCH\",\n\t[3]byte{0, 80, 157}:    \"THE INDUSTREE B.V.\",\n\t[3]byte{0, 80, 158}:    \"Les Technologies SoftAcoustik Inc.\",\n\t[3]byte{0, 80, 159}:    \"HORIZON COMPUTER\",\n\t[3]byte{0, 80, 160}:    \"DELTA COMPUTER SYSTEMS, INC.\",\n\t[3]byte{0, 80, 161}:    \"CARLO GAVAZZI, INC.\",\n\t[3]byte{0, 80, 162}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 163}:    \"TransMedia Communications, Inc.\",\n\t[3]byte{0, 80, 164}:    \"IO TECH, INC.\",\n\t[3]byte{0, 80, 165}:    \"CAPITOL BUSINESS SYSTEMS, LTD.\",\n\t[3]byte{0, 80, 166}:    \"OPTRONICS\",\n\t[3]byte{0, 80, 167}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 168}:    \"OpenCon Systems, Inc.\",\n\t[3]byte{0, 80, 169}:    \"MOLDAT WIRELESS TECHNOLGIES\",\n\t[3]byte{0, 80, 170}:    \"KONICA MINOLTA HOLDINGS, INC.\",\n\t[3]byte{0, 80, 171}:    \"NALTEC, Inc.\",\n\t[3]byte{0, 80, 172}:    \"MAPLE COMPUTER CORPORATION\",\n\t[3]byte{0, 80, 173}:    \"CommUnique Wireless Corp.\",\n\t[3]byte{0, 80, 174}:    \"FDK Co., Ltd\",\n\t[3]byte{0, 80, 175}:    \"INTERGON, INC.\",\n\t[3]byte{0, 80, 176}:    \"TECHNOLOGY ATLANTA CORPORATION\",\n\t[3]byte{0, 80, 177}:    \"GIDDINGS & LEWIS\",\n\t[3]byte{0, 80, 178}:    \"BRODEL GmbH\",\n\t[3]byte{0, 80, 179}:    \"VOICEBOARD CORPORATION\",\n\t[3]byte{0, 80, 180}:    \"SATCHWELL CONTROL SYSTEMS, LTD\",\n\t[3]byte{0, 80, 181}:    \"FICHET SECURITE ELECTRONIQUE\",\n\t[3]byte{0, 80, 182}:    \"GOOD WAY IND. CO., LTD.\",\n\t[3]byte{0, 80, 183}:    \"BOSER TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 80, 184}:    \"INOVA COMPUTERS GMBH & CO. KG\",\n\t[3]byte{0, 80, 185}:    \"XITRON TECHNOLOGIES, INC.\",\n\t[3]byte{0, 80, 186}:    \"D-Link Corporation\",\n\t[3]byte{0, 80, 187}:    \"CMS TECHNOLOGIES\",\n\t[3]byte{0, 80, 188}:    \"HAMMER STORAGE SOLUTIONS\",\n\t[3]byte{0, 80, 189}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 190}:    \"FAST MULTIMEDIA AG\",\n\t[3]byte{0, 80, 191}:    \"Metalligence Technology Corp.\",\n\t[3]byte{0, 80, 192}:    \"GATAN, INC.\",\n\t[3]byte{0, 80, 193}:    \"GEMFLEX NETWORKS, LTD.\",\n\t[3]byte{0, 80, 194}:    \"IEEE Registration Authority\",\n\t[3]byte{0, 80, 196}:    \"IMD\",\n\t[3]byte{0, 80, 197}:    \"ADS Technologies, Inc\",\n\t[3]byte{0, 80, 198}:    \"LOOP TELECOMMUNICATION INTERNATIONAL, INC.\",\n\t[3]byte{0, 80, 199}:    \"Private\",\n\t[3]byte{0, 80, 200}:    \"Addonics Technologies, Inc.\",\n\t[3]byte{0, 80, 201}:    \"MASPRO DENKOH CORP.\",\n\t[3]byte{0, 80, 202}:    \"NET TO NET TECHNOLOGIES\",\n\t[3]byte{0, 80, 203}:    \"JETTER\",\n\t[3]byte{0, 80, 204}:    \"Seagate Cloud Systems Inc\",\n\t[3]byte{0, 80, 205}:    \"DIGIANSWER A/S\",\n\t[3]byte{0, 80, 206}:    \"LG INTERNATIONAL CORP.\",\n\t[3]byte{0, 80, 207}:    \"VANLINK COMMUNICATION TECHNOLOGY RESEARCH INSTITUTE\",\n\t[3]byte{0, 80, 208}:    \"MINERVA SYSTEMS\",\n\t[3]byte{0, 80, 209}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 210}:    \"CMC Electronics Inc\",\n\t[3]byte{0, 80, 211}:    \"DIGITAL AUDIO PROCESSING PTY. LTD.\",\n\t[3]byte{0, 80, 212}:    \"JOOHONG INFORMATION &\",\n\t[3]byte{0, 80, 213}:    \"AD SYSTEMS CORP.\",\n\t[3]byte{0, 80, 214}:    \"ATLAS COPCO TOOLS AB\",\n\t[3]byte{0, 80, 215}:    \"TELSTRAT\",\n\t[3]byte{0, 80, 216}:    \"UNICORN COMPUTER CORP.\",\n\t[3]byte{0, 80, 217}:    \"ENGETRON-ENGENHARIA ELETRONICA IND. e COM. LTDA\",\n\t[3]byte{0, 80, 218}:    \"3COM\",\n\t[3]byte{0, 80, 219}:    \"CONTEMPORARY CONTROL\",\n\t[3]byte{0, 80, 220}:    \"TAS TELEFONBAU A. SCHWABE GMBH & CO. KG\",\n\t[3]byte{0, 80, 221}:    \"SERRA SOLDADURA, S.A.\",\n\t[3]byte{0, 80, 222}:    \"SIGNUM SYSTEMS CORP.\",\n\t[3]byte{0, 80, 223}:    \"AirFiber, Inc.\",\n\t[3]byte{0, 80, 225}:    \"NS TECH ELECTRONICS SDN BHD\",\n\t[3]byte{0, 80, 226}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 227}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 80, 228}:    \"Apple, Inc.\",\n\t[3]byte{0, 80, 230}:    \"HAKUSAN CORPORATION\",\n\t[3]byte{0, 80, 231}:    \"PARADISE INNOVATIONS (ASIA)\",\n\t[3]byte{0, 80, 232}:    \"NOMADIX INC.\",\n\t[3]byte{0, 80, 234}:    \"XEL COMMUNICATIONS, INC.\",\n\t[3]byte{0, 80, 235}:    \"ALPHA-TOP CORPORATION\",\n\t[3]byte{0, 80, 236}:    \"OLICOM A/S\",\n\t[3]byte{0, 80, 237}:    \"ANDA NETWORKS\",\n\t[3]byte{0, 80, 238}:    \"TEK DIGITEL CORPORATION\",\n\t[3]byte{0, 80, 239}:    \"SPE Systemhaus GmbH\",\n\t[3]byte{0, 80, 240}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 80, 241}:    \"Maxlinear, Inc\",\n\t[3]byte{0, 80, 242}:    \"MICROSOFT CORP.\",\n\t[3]byte{0, 80, 243}:    \"GLOBAL NET INFORMATION CO., Ltd.\",\n\t[3]byte{0, 80, 244}:    \"SIGMATEK GMBH & CO. KG\",\n\t[3]byte{0, 80, 246}:    \"PAN-INTERNATIONAL INDUSTRIAL CORP.\",\n\t[3]byte{0, 80, 247}:    \"VENTURE MANUFACTURING (SINGAPORE) LTD.\",\n\t[3]byte{0, 80, 248}:    \"ENTREGA TECHNOLOGIES, INC.\",\n\t[3]byte{0, 80, 249}:    \"Sensormatic Electronics LLC\",\n\t[3]byte{0, 80, 250}:    \"OXTEL, LTD.\",\n\t[3]byte{0, 80, 251}:    \"VSK ELECTRONICS\",\n\t[3]byte{0, 80, 252}:    \"Edimax Technology Co. Ltd.\",\n\t[3]byte{0, 80, 253}:    \"VISIONCOMM CO., LTD.\",\n\t[3]byte{0, 80, 254}:    \"PCTVnet ASA\",\n\t[3]byte{0, 80, 255}:    \"HAKKO ELECTRONICS CO., LTD.\",\n\t[3]byte{0, 81, 237}:    \"LG Innotek\",\n\t[3]byte{0, 82, 24}:     \"Wuxi Keboda Electron Co.Ltd\",\n\t[3]byte{0, 82, 194}:    \"peiker acustic GmbH\",\n\t[3]byte{0, 84, 159}:    \"Avaya Inc\",\n\t[3]byte{0, 84, 175}:    \"Continental Automotive Systems Inc.\",\n\t[3]byte{0, 84, 189}:    \"Swelaser AB\",\n\t[3]byte{0, 85, 218}:    \"IEEE Registration Authority\",\n\t[3]byte{0, 86, 43}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 86, 205}:    \"Apple, Inc.\",\n\t[3]byte{0, 87, 193}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{0, 87, 210}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 88, 63}:     \"PC Aquarius\",\n\t[3]byte{0, 89, 7}:      \"LenovoEMC Products USA, LLC\",\n\t[3]byte{0, 89, 121}:    \"Networked Energy Services\",\n\t[3]byte{0, 89, 172}:    \"KPN. B.V.\",\n\t[3]byte{0, 89, 220}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 90, 19}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 90, 57}:     \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 91, 148}:    \"Apple, Inc.\",\n\t[3]byte{0, 91, 161}:    \"shanghai huayuan chuangxin software CO., LTD.\",\n\t[3]byte{0, 92, 134}:    \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 92, 177}:    \"Gospell DIGITAL TECHNOLOGY CO., LTD\",\n\t[3]byte{0, 93, 3}:      \"Xilinx, Inc\",\n\t[3]byte{0, 93, 115}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 94, 12}:     \"HMD Global Oy\",\n\t[3]byte{0, 95, 134}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 96, 0}:      \"XYCOM INC.\",\n\t[3]byte{0, 96, 1}:      \"InnoSys, Inc.\",\n\t[3]byte{0, 96, 2}:      \"SCREEN SUBTITLING SYSTEMS, LTD\",\n\t[3]byte{0, 96, 3}:      \"TERAOKA WEIGH SYSTEM PTE, LTD.\",\n\t[3]byte{0, 96, 4}:      \"COMPUTADORES MODULARES SA\",\n\t[3]byte{0, 96, 5}:      \"FEEDBACK DATA LTD.\",\n\t[3]byte{0, 96, 6}:      \"SOTEC CO., LTD\",\n\t[3]byte{0, 96, 7}:      \"ACRES GAMING, INC.\",\n\t[3]byte{0, 96, 8}:      \"3COM\",\n\t[3]byte{0, 96, 9}:      \"Cisco Systems, Inc\",\n\t[3]byte{0, 96, 10}:     \"SORD COMPUTER CORPORATION\",\n\t[3]byte{0, 96, 11}:     \"LOGWARE GmbH\",\n\t[3]byte{0, 96, 12}:     \"Eurotech Inc.\",\n\t[3]byte{0, 96, 13}:     \"Digital Logic GmbH\",\n\t[3]byte{0, 96, 14}:     \"WAVENET INTERNATIONAL, INC.\",\n\t[3]byte{0, 96, 15}:     \"Westell Technologies Inc.\",\n\t[3]byte{0, 96, 16}:     \"NETWORK MACHINES, INC.\",\n\t[3]byte{0, 96, 17}:     \"CRYSTAL SEMICONDUCTOR CORP.\",\n\t[3]byte{0, 96, 18}:     \"POWER COMPUTING CORPORATION\",\n\t[3]byte{0, 96, 19}:     \"NETSTAL MASCHINEN AG\",\n\t[3]byte{0, 96, 20}:     \"EDEC CO., LTD.\",\n\t[3]byte{0, 96, 21}:     \"NET2NET CORPORATION\",\n\t[3]byte{0, 96, 22}:     \"CLARIION\",\n\t[3]byte{0, 96, 23}:     \"TOKIMEC INC.\",\n\t[3]byte{0, 96, 24}:     \"STELLAR ONE CORPORATION\",\n\t[3]byte{0, 96, 25}:     \"Roche Diagnostics\",\n\t[3]byte{0, 96, 26}:     \"KEITHLEY INSTRUMENTS\",\n\t[3]byte{0, 96, 27}:     \"MESA ELECTRONICS\",\n\t[3]byte{0, 96, 28}:     \"TELXON CORPORATION\",\n\t[3]byte{0, 96, 29}:     \"LUCENT TECHNOLOGIES\",\n\t[3]byte{0, 96, 30}:     \"SOFTLAB, INC.\",\n\t[3]byte{0, 96, 31}:     \"STALLION TECHNOLOGIES\",\n\t[3]byte{0, 96, 32}:     \"PIVOTAL NETWORKING, INC.\",\n\t[3]byte{0, 96, 33}:     \"DSC CORPORATION\",\n\t[3]byte{0, 96, 34}:     \"VICOM SYSTEMS, INC.\",\n\t[3]byte{0, 96, 35}:     \"PERICOM SEMICONDUCTOR CORP.\",\n\t[3]byte{0, 96, 36}:     \"GRADIENT TECHNOLOGIES, INC.\",\n\t[3]byte{0, 96, 37}:     \"ACTIVE IMAGING PLC\",\n\t[3]byte{0, 96, 38}:     \"VIKING Modular Solutions\",\n\t[3]byte{0, 96, 39}:     \"Superior Modular Products\",\n\t[3]byte{0, 96, 40}:     \"MACROVISION CORPORATION\",\n\t[3]byte{0, 96, 41}:     \"CARY PERIPHERALS INC.\",\n\t[3]byte{0, 96, 42}:     \"SYMICRON COMPUTER COMMUNICATIONS, LTD.\",\n\t[3]byte{0, 96, 43}:     \"PEAK AUDIO\",\n\t[3]byte{0, 96, 44}:     \"LINX Data Terminals, Inc.\",\n\t[3]byte{0, 96, 45}:     \"ALERTON TECHNOLOGIES, INC.\",\n\t[3]byte{0, 96, 46}:     \"CYCLADES CORPORATION\",\n\t[3]byte{0, 96, 47}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 96, 48}:     \"VILLAGE TRONIC ENTWICKLUNG\",\n\t[3]byte{0, 96, 49}:     \"HRK SYSTEMS\",\n\t[3]byte{0, 96, 50}:     \"I-CUBE, INC.\",\n\t[3]byte{0, 96, 51}:     \"ACUITY IMAGING, INC.\",\n\t[3]byte{0, 96, 52}:     \"ROBERT BOSCH GmbH\",\n\t[3]byte{0, 96, 53}:     \"DALLAS SEMICONDUCTOR, INC.\",\n\t[3]byte{0, 96, 54}:     \"AIT Austrian Institute of Technology GmbH\",\n\t[3]byte{0, 96, 55}:     \"NXP Semiconductors\",\n\t[3]byte{0, 96, 56}:     \"Nortel Networks\",\n\t[3]byte{0, 96, 57}:     \"SanCom Technology, Inc.\",\n\t[3]byte{0, 96, 58}:     \"QUICK CONTROLS LTD.\",\n\t[3]byte{0, 96, 59}:     \"AMTEC spa\",\n\t[3]byte{0, 96, 60}:     \"HAGIWARA SYS-COM CO., LTD.\",\n\t[3]byte{0, 96, 61}:     \"3CX\",\n\t[3]byte{0, 96, 62}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 96, 63}:     \"PATAPSCO DESIGNS\",\n\t[3]byte{0, 96, 64}:     \"NETRO CORP.\",\n\t[3]byte{0, 96, 65}:     \"Yokogawa Digital Computer Corporation\",\n\t[3]byte{0, 96, 66}:     \"TKS (USA), INC.\",\n\t[3]byte{0, 96, 67}:     \"iDirect, INC.\",\n\t[3]byte{0, 96, 68}:     \"LITTON/POLY-SCIENTIFIC\",\n\t[3]byte{0, 96, 69}:     \"PATHLIGHT TECHNOLOGIES\",\n\t[3]byte{0, 96, 70}:     \"VMETRO, INC.\",\n\t[3]byte{0, 96, 71}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 96, 72}:     \"Dell EMC\",\n\t[3]byte{0, 96, 73}:     \"VINA TECHNOLOGIES\",\n\t[3]byte{0, 96, 74}:     \"SAIC IDEAS GROUP\",\n\t[3]byte{0, 96, 75}:     \"Safe-com GmbH & Co. KG\",\n\t[3]byte{0, 96, 76}:     \"Sagemcom Broadband SAS\",\n\t[3]byte{0, 96, 77}:     \"MMC NETWORKS, INC.\",\n\t[3]byte{0, 96, 78}:     \"CYCLE COMPUTER CORPORATION, INC.\",\n\t[3]byte{0, 96, 79}:     \"Tattile SRL \",\n\t[3]byte{0, 96, 80}:     \"INTERNIX INC.\",\n\t[3]byte{0, 96, 81}:     \"QUALITY SEMICONDUCTOR\",\n\t[3]byte{0, 96, 82}:     \"PERIPHERALS ENTERPRISE CO., Ltd.\",\n\t[3]byte{0, 96, 83}:     \"TOYODA MACHINE WORKS, LTD.\",\n\t[3]byte{0, 96, 84}:     \"CONTROLWARE GMBH\",\n\t[3]byte{0, 96, 85}:     \"CORNELL UNIVERSITY\",\n\t[3]byte{0, 96, 86}:     \"NETWORK TOOLS, INC.\",\n\t[3]byte{0, 96, 87}:     \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{0, 96, 88}:     \"COPPER MOUNTAIN COMMUNICATIONS, INC.\",\n\t[3]byte{0, 96, 89}:     \"TECHNICAL COMMUNICATIONS CORP.\",\n\t[3]byte{0, 96, 90}:     \"CELCORE, INC.\",\n\t[3]byte{0, 96, 91}:     \"IntraServer Technology, Inc.\",\n\t[3]byte{0, 96, 92}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 96, 93}:     \"SCANIVALVE CORP.\",\n\t[3]byte{0, 96, 94}:     \"LIBERTY TECHNOLOGY NETWORKING\",\n\t[3]byte{0, 96, 95}:     \"NIPPON UNISOFT CORPORATION\",\n\t[3]byte{0, 96, 96}:     \"Data Innovations North America\",\n\t[3]byte{0, 96, 97}:     \"WHISTLE COMMUNICATIONS CORP.\",\n\t[3]byte{0, 96, 98}:     \"TELESYNC, INC.\",\n\t[3]byte{0, 96, 99}:     \"PSION DACOM PLC.\",\n\t[3]byte{0, 96, 100}:    \"NETCOMM LIMITED\",\n\t[3]byte{0, 96, 101}:    \"BERNECKER & RAINER INDUSTRIE-ELEKTRONIC GmbH\",\n\t[3]byte{0, 96, 102}:    \"LACROIX Trafic\",\n\t[3]byte{0, 96, 103}:    \"ACER NETXUS INC.\",\n\t[3]byte{0, 96, 104}:    \"Dialogic Corporation\",\n\t[3]byte{0, 96, 105}:    \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 96, 106}:    \"MITSUBISHI WIRELESS COMMUNICATIONS. INC.\",\n\t[3]byte{0, 96, 107}:    \"Synclayer Inc.\",\n\t[3]byte{0, 96, 108}:    \"ARESCOM\",\n\t[3]byte{0, 96, 109}:    \"DIGITAL EQUIPMENT CORP.\",\n\t[3]byte{0, 96, 110}:    \"DAVICOM SEMICONDUCTOR, INC.\",\n\t[3]byte{0, 96, 111}:    \"CLARION CORPORATION OF AMERICA\",\n\t[3]byte{0, 96, 112}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 96, 113}:    \"MIDAS LAB, INC.\",\n\t[3]byte{0, 96, 114}:    \"VXL INSTRUMENTS, LIMITED\",\n\t[3]byte{0, 96, 115}:    \"REDCREEK COMMUNICATIONS, INC.\",\n\t[3]byte{0, 96, 116}:    \"QSC LLC\",\n\t[3]byte{0, 96, 117}:    \"PENTEK, INC.\",\n\t[3]byte{0, 96, 118}:    \"SCHLUMBERGER TECHNOLOGIES RETAIL PETROLEUM SYSTEMS\",\n\t[3]byte{0, 96, 119}:    \"PRISA NETWORKS\",\n\t[3]byte{0, 96, 120}:    \"POWER MEASUREMENT LTD.\",\n\t[3]byte{0, 96, 121}:    \"Mainstream Data, Inc.\",\n\t[3]byte{0, 96, 122}:    \"DVS GMBH\",\n\t[3]byte{0, 96, 123}:    \"FORE SYSTEMS, INC.\",\n\t[3]byte{0, 96, 124}:    \"WaveAccess, Ltd.\",\n\t[3]byte{0, 96, 125}:    \"SENTIENT NETWORKS INC.\",\n\t[3]byte{0, 96, 126}:    \"GIGALABS, INC.\",\n\t[3]byte{0, 96, 127}:    \"AURORA TECHNOLOGIES, INC.\",\n\t[3]byte{0, 96, 128}:    \"MICROTRONIX DATACOM LTD.\",\n\t[3]byte{0, 96, 129}:    \"TV/COM INTERNATIONAL\",\n\t[3]byte{0, 96, 130}:    \"NOVALINK TECHNOLOGIES, INC.\",\n\t[3]byte{0, 96, 131}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 96, 132}:    \"DIGITAL VIDEO\",\n\t[3]byte{0, 96, 133}:    \"Storage Concepts\",\n\t[3]byte{0, 96, 134}:    \"LOGIC REPLACEMENT TECH. LTD.\",\n\t[3]byte{0, 96, 135}:    \"KANSAI ELECTRIC CO., LTD.\",\n\t[3]byte{0, 96, 136}:    \"Analog Devices, Inc.\",\n\t[3]byte{0, 96, 137}:    \"XATA\",\n\t[3]byte{0, 96, 138}:    \"CITADEL COMPUTER\",\n\t[3]byte{0, 96, 139}:    \"ConferTech International\",\n\t[3]byte{0, 96, 140}:    \"3COM\",\n\t[3]byte{0, 96, 141}:    \"UNIPULSE CORP.\",\n\t[3]byte{0, 96, 142}:    \"HE ELECTRONICS, TECHNOLOGIE & SYSTEMTECHNIK GmbH\",\n\t[3]byte{0, 96, 143}:    \"TEKRAM TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 96, 144}:    \"Artiza Networks Inc\",\n\t[3]byte{0, 96, 145}:    \"FIRST PACIFIC NETWORKS, INC.\",\n\t[3]byte{0, 96, 146}:    \"MICRO/SYS, INC.\",\n\t[3]byte{0, 96, 147}:    \"VARIAN\",\n\t[3]byte{0, 96, 148}:    \"IBM Corp\",\n\t[3]byte{0, 96, 149}:    \"ACCU-TIME SYSTEMS, INC.\",\n\t[3]byte{0, 96, 150}:    \"T.S. MICROTECH INC.\",\n\t[3]byte{0, 96, 151}:    \"3COM\",\n\t[3]byte{0, 96, 152}:    \"HT COMMUNICATIONS\",\n\t[3]byte{0, 96, 153}:    \"SBE, Inc.\",\n\t[3]byte{0, 96, 154}:    \"NJK TECHNO CO.\",\n\t[3]byte{0, 96, 155}:    \"AstroNova, Inc\",\n\t[3]byte{0, 96, 156}:    \"Perkin-Elmer Incorporated\",\n\t[3]byte{0, 96, 157}:    \"PMI FOOD EQUIPMENT GROUP\",\n\t[3]byte{0, 96, 158}:    \"ASC X3 - INFORMATION TECHNOLOGY STANDARDS SECRETARIATS\",\n\t[3]byte{0, 96, 159}:    \"PHAST CORPORATION\",\n\t[3]byte{0, 96, 160}:    \"SWITCHED NETWORK TECHNOLOGIES, INC.\",\n\t[3]byte{0, 96, 161}:    \"VPNet, Inc.\",\n\t[3]byte{0, 96, 162}:    \"NIHON UNISYS LIMITED CO.\",\n\t[3]byte{0, 96, 163}:    \"CONTINUUM TECHNOLOGY CORP.\",\n\t[3]byte{0, 96, 164}:    \"GEW Technologies (PTY)Ltd\",\n\t[3]byte{0, 96, 165}:    \"PERFORMANCE TELECOM CORP.\",\n\t[3]byte{0, 96, 166}:    \"PARTICLE MEASURING SYSTEMS\",\n\t[3]byte{0, 96, 167}:    \"MICROSENS GmbH & CO. KG\",\n\t[3]byte{0, 96, 168}:    \"TIDOMAT AB\",\n\t[3]byte{0, 96, 169}:    \"GESYTEC MBH\",\n\t[3]byte{0, 96, 170}:    \"INTELLIGENT DEVICES INC. (IDI)\",\n\t[3]byte{0, 96, 171}:    \"LARSCOM INCORPORATED\",\n\t[3]byte{0, 96, 172}:    \"RESILIENCE CORPORATION\",\n\t[3]byte{0, 96, 173}:    \"MegaChips Corporation\",\n\t[3]byte{0, 96, 174}:    \"TRIO INFORMATION SYSTEMS AB\",\n\t[3]byte{0, 96, 175}:    \"PACIFIC MICRO DATA, INC.\",\n\t[3]byte{0, 96, 176}:    \"Hewlett Packard\",\n\t[3]byte{0, 96, 177}:    \"Input/Output, Inc.\",\n\t[3]byte{0, 96, 178}:    \"PROCESS CONTROL CORP.\",\n\t[3]byte{0, 96, 179}:    \"Z-COM, INC.\",\n\t[3]byte{0, 96, 180}:    \"GLENAYRE R&D INC.\",\n\t[3]byte{0, 96, 181}:    \"KEBA GmbH\",\n\t[3]byte{0, 96, 182}:    \"LAND COMPUTER CO., LTD.\",\n\t[3]byte{0, 96, 183}:    \"CHANNELMATIC, INC.\",\n\t[3]byte{0, 96, 184}:    \"CORELIS Inc.\",\n\t[3]byte{0, 96, 185}:    \"NEC Platforms, Ltd\",\n\t[3]byte{0, 96, 186}:    \"SAHARA NETWORKS, INC.\",\n\t[3]byte{0, 96, 187}:    \"Cabletron Systems, Inc.\",\n\t[3]byte{0, 96, 188}:    \"KeunYoung Electronics & Communication Co., Ltd.\",\n\t[3]byte{0, 96, 189}:    \"Enginuity Communications\",\n\t[3]byte{0, 96, 190}:    \"WEBTRONICS\",\n\t[3]byte{0, 96, 191}:    \"MACRAIGOR SYSTEMS, INC.\",\n\t[3]byte{0, 96, 192}:    \"Nera Networks AS\",\n\t[3]byte{0, 96, 193}:    \"WaveSpan Corporation\",\n\t[3]byte{0, 96, 194}:    \"MPL AG\",\n\t[3]byte{0, 96, 195}:    \"NETVISION CORPORATION\",\n\t[3]byte{0, 96, 196}:    \"SOLITON SYSTEMS K.K.\",\n\t[3]byte{0, 96, 197}:    \"ANCOT CORP.\",\n\t[3]byte{0, 96, 198}:    \"DCS AG\",\n\t[3]byte{0, 96, 199}:    \"AMATI COMMUNICATIONS CORP.\",\n\t[3]byte{0, 96, 200}:    \"KUKA WELDING SYSTEMS & ROBOTS\",\n\t[3]byte{0, 96, 201}:    \"ControlNet, Inc.\",\n\t[3]byte{0, 96, 202}:    \"HARMONIC SYSTEMS INCORPORATED\",\n\t[3]byte{0, 96, 203}:    \"HITACHI ZOSEN CORPORATION\",\n\t[3]byte{0, 96, 204}:    \"EMTRAK, INCORPORATED\",\n\t[3]byte{0, 96, 205}:    \"VideoServer, Inc.\",\n\t[3]byte{0, 96, 206}:    \"ACCLAIM COMMUNICATIONS\",\n\t[3]byte{0, 96, 207}:    \"ALTEON NETWORKS, INC.\",\n\t[3]byte{0, 96, 208}:    \"SNMP RESEARCH INCORPORATED\",\n\t[3]byte{0, 96, 209}:    \"CASCADE COMMUNICATIONS\",\n\t[3]byte{0, 96, 210}:    \"LUCENT TECHNOLOGIES TAIWAN TELECOMMUNICATIONS CO., LTD.\",\n\t[3]byte{0, 96, 211}:    \"AT&T\",\n\t[3]byte{0, 96, 212}:    \"ELDAT COMMUNICATION LTD.\",\n\t[3]byte{0, 96, 213}:    \"AMADA MIYACHI Co., Ltd\",\n\t[3]byte{0, 96, 214}:    \"NovAtel Inc.\",\n\t[3]byte{0, 96, 215}:    \"ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE (EPFL)\",\n\t[3]byte{0, 96, 216}:    \"ELMIC SYSTEMS, INC.\",\n\t[3]byte{0, 96, 217}:    \"TRANSYS NETWORKS INC.\",\n\t[3]byte{0, 96, 218}:    \"Red Lion Controls, LP\",\n\t[3]byte{0, 96, 219}:    \"NTP ELEKTRONIK A/S\",\n\t[3]byte{0, 96, 220}:    \"NEC Magnus Communications,Ltd.\",\n\t[3]byte{0, 96, 221}:    \"MYRICOM, INC.\",\n\t[3]byte{0, 96, 222}:    \"Kayser-Threde GmbH\",\n\t[3]byte{0, 96, 223}:    \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 96, 224}:    \"AXIOM TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 96, 225}:    \"ORCKIT COMMUNICATIONS LTD.\",\n\t[3]byte{0, 96, 226}:    \"QUEST ENGINEERING & DEVELOPMENT\",\n\t[3]byte{0, 96, 227}:    \"ARBIN INSTRUMENTS\",\n\t[3]byte{0, 96, 228}:    \"COMPUSERVE, INC.\",\n\t[3]byte{0, 96, 229}:    \"FUJI AUTOMATION CO., LTD.\",\n\t[3]byte{0, 96, 230}:    \"SHOMITI SYSTEMS INCORPORATED\",\n\t[3]byte{0, 96, 231}:    \"RANDATA\",\n\t[3]byte{0, 96, 232}:    \"HITACHI COMPUTER PRODUCTS (AMERICA), INC.\",\n\t[3]byte{0, 96, 233}:    \"ATOP TECHNOLOGIES, INC.\",\n\t[3]byte{0, 96, 234}:    \"StreamLogic\",\n\t[3]byte{0, 96, 235}:    \"FOURTHTRACK SYSTEMS\",\n\t[3]byte{0, 96, 236}:    \"HERMARY OPTO ELECTRONICS INC.\",\n\t[3]byte{0, 96, 237}:    \"RICARDO TEST AUTOMATION LTD.\",\n\t[3]byte{0, 96, 238}:    \"APOLLO\",\n\t[3]byte{0, 96, 239}:    \"FLYTECH TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 96, 240}:    \"JOHNSON & JOHNSON MEDICAL, INC\",\n\t[3]byte{0, 96, 241}:    \"EXP COMPUTER, INC.\",\n\t[3]byte{0, 96, 242}:    \"LASERGRAPHICS, INC.\",\n\t[3]byte{0, 96, 243}:    \"Performance Analysis Broadband, Spirent plc\",\n\t[3]byte{0, 96, 244}:    \"ADVANCED COMPUTER SOLUTIONS, Inc.\",\n\t[3]byte{0, 96, 245}:    \"ICON WEST, INC.\",\n\t[3]byte{0, 96, 246}:    \"NEXTEST COMMUNICATIONS PRODUCTS, INC.\",\n\t[3]byte{0, 96, 247}:    \"DATAFUSION SYSTEMS\",\n\t[3]byte{0, 96, 248}:    \"Loran International Technologies Inc.\",\n\t[3]byte{0, 96, 249}:    \"DIAMOND LANE COMMUNICATIONS\",\n\t[3]byte{0, 96, 250}:    \"EDUCATIONAL TECHNOLOGY RESOURCES, INC.\",\n\t[3]byte{0, 96, 251}:    \"PACKETEER, INC.\",\n\t[3]byte{0, 96, 252}:    \"CONSERVATION THROUGH INNOVATION LTD.\",\n\t[3]byte{0, 96, 253}:    \"NetICs, Inc.\",\n\t[3]byte{0, 96, 254}:    \"LYNX SYSTEM DEVELOPERS, INC.\",\n\t[3]byte{0, 96, 255}:    \"QuVis, Inc.\",\n\t[3]byte{0, 97, 81}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 97, 113}:    \"Apple, Inc.\",\n\t[3]byte{0, 98, 236}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 99, 222}:    \"CLOUDWALK TECHNOLOGY CO.,LTD\",\n\t[3]byte{0, 100, 64}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 100, 166}:   \"Maquet CardioVascular\",\n\t[3]byte{0, 102, 25}:    \"Huawei Device Co., Ltd.\",\n\t[3]byte{0, 102, 75}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 103, 98}:    \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{0, 104, 235}:   \"HP Inc.\",\n\t[3]byte{0, 105, 45}:    \"Sunnovo International Limited\",\n\t[3]byte{0, 105, 103}:   \"IEEE Registration Authority\",\n\t[3]byte{0, 107, 142}:   \"Shanghai Feixun Communication Co.,Ltd.\",\n\t[3]byte{0, 107, 158}:   \"Vizio, Inc\",\n\t[3]byte{0, 107, 160}:   \"SHENZHEN UNIVERSAL INTELLISYS PTE LTD\",\n\t[3]byte{0, 107, 241}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 108, 188}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 108, 253}:   \"Sichuan Changhong Electric Ltd.\",\n\t[3]byte{0, 109, 82}:    \"Apple, Inc.\",\n\t[3]byte{0, 109, 97}:    \"Guangzhou V-SOLUTION Electronic Technology Co., Ltd.\",\n\t[3]byte{0, 109, 251}:   \"Vutrix Technologies Ltd\",\n\t[3]byte{0, 111, 100}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 111, 242}:   \"MITSUMI ELECTRIC CO.,LTD.\",\n\t[3]byte{0, 112, 176}:   \"M/A-COM INC. COMPANIES\",\n\t[3]byte{0, 112, 179}:   \"DATA RECALL LTD.\",\n\t[3]byte{0, 113, 71}:    \"Amazon Technologies Inc.\",\n\t[3]byte{0, 113, 194}:   \"PEGATRON CORPORATION\",\n\t[3]byte{0, 113, 204}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{0, 114, 4}:     \"Samsung Electronics Co., Ltd. ARTIK\",\n\t[3]byte{0, 114, 99}:    \"Netcore Technology Inc.\",\n\t[3]byte{0, 114, 120}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 115, 141}:   \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{0, 115, 224}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 116, 156}:   \"Ruijie Networks Co.,LTD\",\n\t[3]byte{0, 117, 50}:    \"INID BV\",\n\t[3]byte{0, 117, 225}:   \"Ampt, LLC\",\n\t[3]byte{0, 118, 61}:    \"Veea\",\n\t[3]byte{0, 118, 134}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 118, 177}:   \"Somfy-Protect By Myfox SAS\",\n\t[3]byte{0, 119, 141}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 119, 228}:   \"Nokia\",\n\t[3]byte{0, 120, 136}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 120, 158}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{0, 120, 205}:   \"Ignition Design Labs\",\n\t[3]byte{0, 123, 24}:    \"SENTRY Co., LTD.\",\n\t[3]byte{0, 124, 45}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 125, 250}:   \"Volkswagen Group of America\",\n\t[3]byte{0, 126, 86}:    \"China Dragon Technology Limited\",\n\t[3]byte{0, 126, 149}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 127, 40}:    \"Actiontec Electronics, Inc\",\n\t[3]byte{0, 128, 0}:     \"MULTITECH SYSTEMS, INC.\",\n\t[3]byte{0, 128, 1}:     \"PERIPHONICS CORPORATION\",\n\t[3]byte{0, 128, 2}:     \"SATELCOM (UK) LTD\",\n\t[3]byte{0, 128, 3}:     \"HYTEC ELECTRONICS LTD.\",\n\t[3]byte{0, 128, 4}:     \"ANTLOW COMMUNICATIONS, LTD.\",\n\t[3]byte{0, 128, 5}:     \"CACTUS COMPUTER INC.\",\n\t[3]byte{0, 128, 6}:     \"COMPUADD CORPORATION\",\n\t[3]byte{0, 128, 7}:     \"DLOG NC-SYSTEME\",\n\t[3]byte{0, 128, 8}:     \"DYNATECH COMPUTER SYSTEMS\",\n\t[3]byte{0, 128, 9}:     \"JUPITER SYSTEMS, INC.\",\n\t[3]byte{0, 128, 10}:    \"JAPAN COMPUTER CORP.\",\n\t[3]byte{0, 128, 11}:    \"CSK CORPORATION\",\n\t[3]byte{0, 128, 12}:    \"VIDECOM LIMITED\",\n\t[3]byte{0, 128, 13}:    \"VOSSWINKEL F.U.\",\n\t[3]byte{0, 128, 14}:    \"ATLANTIX CORPORATION\",\n\t[3]byte{0, 128, 15}:    \"STANDARD MICROSYSTEMS\",\n\t[3]byte{0, 128, 16}:    \"COMMODORE INTERNATIONAL\",\n\t[3]byte{0, 128, 17}:    \"DIGITAL SYSTEMS INT'L. INC.\",\n\t[3]byte{0, 128, 18}:    \"INTEGRATED MEASUREMENT SYSTEMS\",\n\t[3]byte{0, 128, 19}:    \"THOMAS-CONRAD CORPORATION\",\n\t[3]byte{0, 128, 20}:    \"ESPRIT SYSTEMS\",\n\t[3]byte{0, 128, 21}:    \"SEIKO SYSTEMS, INC.\",\n\t[3]byte{0, 128, 22}:    \"WANDEL AND GOLTERMANN\",\n\t[3]byte{0, 128, 23}:    \"PFU LIMITED\",\n\t[3]byte{0, 128, 24}:    \"KOBE STEEL, LTD.\",\n\t[3]byte{0, 128, 25}:    \"DAYNA COMMUNICATIONS, INC.\",\n\t[3]byte{0, 128, 26}:    \"BELL ATLANTIC\",\n\t[3]byte{0, 128, 27}:    \"KODIAK TECHNOLOGY\",\n\t[3]byte{0, 128, 28}:    \"NEWPORT SYSTEMS SOLUTIONS\",\n\t[3]byte{0, 128, 29}:    \"INTEGRATED INFERENCE MACHINES\",\n\t[3]byte{0, 128, 30}:    \"XINETRON, INC.\",\n\t[3]byte{0, 128, 31}:    \"KRUPP ATLAS ELECTRONIK GMBH\",\n\t[3]byte{0, 128, 32}:    \"NETWORK PRODUCTS\",\n\t[3]byte{0, 128, 33}:    \"Alcatel Canada Inc.\",\n\t[3]byte{0, 128, 34}:    \"SCAN-OPTICS\",\n\t[3]byte{0, 128, 35}:    \"INTEGRATED BUSINESS NETWORKS\",\n\t[3]byte{0, 128, 36}:    \"KALPANA, INC.\",\n\t[3]byte{0, 128, 37}:    \"Telit Wireless Solutions GmbH\",\n\t[3]byte{0, 128, 38}:    \"NETWORK PRODUCTS CORPORATION\",\n\t[3]byte{0, 128, 39}:    \"ADAPTIVE SYSTEMS, INC.\",\n\t[3]byte{0, 128, 40}:    \"TRADPOST (HK) LTD\",\n\t[3]byte{0, 128, 41}:    \"EAGLE TECHNOLOGY, INC.\",\n\t[3]byte{0, 128, 42}:    \"TEST SYSTEMS & SIMULATIONS INC\",\n\t[3]byte{0, 128, 43}:    \"INTEGRATED MARKETING CO\",\n\t[3]byte{0, 128, 44}:    \"THE SAGE GROUP PLC\",\n\t[3]byte{0, 128, 45}:    \"XYLOGICS INC\",\n\t[3]byte{0, 128, 46}:    \"CASTLE ROCK COMPUTING\",\n\t[3]byte{0, 128, 47}:    \"NATIONAL INSTRUMENTS CORP.\",\n\t[3]byte{0, 128, 48}:    \"NEXUS ELECTRONICS\",\n\t[3]byte{0, 128, 49}:    \"BASYS, CORP.\",\n\t[3]byte{0, 128, 50}:    \"ACCESS CO., LTD.\",\n\t[3]byte{0, 128, 51}:    \"EMS Aviation, Inc.\",\n\t[3]byte{0, 128, 52}:    \"SMT GOUPIL\",\n\t[3]byte{0, 128, 53}:    \"TECHNOLOGY WORKS, INC.\",\n\t[3]byte{0, 128, 54}:    \"REFLEX MANUFACTURING SYSTEMS\",\n\t[3]byte{0, 128, 55}:    \"Ericsson Group\",\n\t[3]byte{0, 128, 56}:    \"DATA RESEARCH & APPLICATIONS\",\n\t[3]byte{0, 128, 57}:    \"ALCATEL STC AUSTRALIA\",\n\t[3]byte{0, 128, 58}:    \"VARITYPER, INC.\",\n\t[3]byte{0, 128, 59}:    \"APT COMMUNICATIONS, INC.\",\n\t[3]byte{0, 128, 60}:    \"TVS ELECTRONICS LTD\",\n\t[3]byte{0, 128, 61}:    \"SURIGIKEN CO.,  LTD.\",\n\t[3]byte{0, 128, 62}:    \"SYNERNETICS\",\n\t[3]byte{0, 128, 63}:    \"TATUNG COMPANY\",\n\t[3]byte{0, 128, 64}:    \"JOHN FLUKE MANUFACTURING CO.\",\n\t[3]byte{0, 128, 65}:    \"VEB KOMBINAT ROBOTRON\",\n\t[3]byte{0, 128, 66}:    \"Artesyn Embedded Technologies\",\n\t[3]byte{0, 128, 67}:    \"NETWORLD, INC.\",\n\t[3]byte{0, 128, 68}:    \"SYSTECH COMPUTER CORP.\",\n\t[3]byte{0, 128, 69}:    \"MATSUSHITA ELECTRIC IND. CO\",\n\t[3]byte{0, 128, 70}:    \"Tattile SRL \",\n\t[3]byte{0, 128, 71}:    \"IN-NET CORP.\",\n\t[3]byte{0, 128, 72}:    \"COMPEX INCORPORATED\",\n\t[3]byte{0, 128, 73}:    \"NISSIN ELECTRIC CO., LTD.\",\n\t[3]byte{0, 128, 74}:    \"PRO-LOG\",\n\t[3]byte{0, 128, 75}:    \"EAGLE TECHNOLOGIES PTY.LTD.\",\n\t[3]byte{0, 128, 76}:    \"CONTEC CO., LTD.\",\n\t[3]byte{0, 128, 77}:    \"CYCLONE MICROSYSTEMS, INC.\",\n\t[3]byte{0, 128, 78}:    \"APEX COMPUTER COMPANY\",\n\t[3]byte{0, 128, 79}:    \"DAIKIN INDUSTRIES, LTD.\",\n\t[3]byte{0, 128, 80}:    \"ZIATECH CORPORATION\",\n\t[3]byte{0, 128, 81}:    \"FIBERMUX\",\n\t[3]byte{0, 128, 82}:    \"TECHNICALLY ELITE CONCEPTS\",\n\t[3]byte{0, 128, 83}:    \"INTELLICOM, INC.\",\n\t[3]byte{0, 128, 84}:    \"FRONTIER TECHNOLOGIES CORP.\",\n\t[3]byte{0, 128, 85}:    \"FERMILAB\",\n\t[3]byte{0, 128, 86}:    \"SPHINX Electronics GmbH & Co KG\",\n\t[3]byte{0, 128, 87}:    \"ADSOFT, LTD.\",\n\t[3]byte{0, 128, 88}:    \"PRINTER SYSTEMS CORP.\",\n\t[3]byte{0, 128, 89}:    \"STANLEY ELECTRIC CO., LTD\",\n\t[3]byte{0, 128, 90}:    \"TULIP COMPUTERS INTERNAT'L B.V\",\n\t[3]byte{0, 128, 91}:    \"CONDOR SYSTEMS, INC.\",\n\t[3]byte{0, 128, 92}:    \"AGILIS CORPORATION\",\n\t[3]byte{0, 128, 93}:    \"CANSTAR\",\n\t[3]byte{0, 128, 94}:    \"LSI LOGIC CORPORATION\",\n\t[3]byte{0, 128, 95}:    \"Hewlett Packard\",\n\t[3]byte{0, 128, 96}:    \"NETWORK INTERFACE CORPORATION\",\n\t[3]byte{0, 128, 97}:    \"LITTON SYSTEMS, INC.\",\n\t[3]byte{0, 128, 98}:    \"INTERFACE  CO.\",\n\t[3]byte{0, 128, 99}:    \"Hirschmann Automation and Control GmbH\",\n\t[3]byte{0, 128, 100}:   \"WYSE TECHNOLOGY LLC\",\n\t[3]byte{0, 128, 101}:   \"CYBERGRAPHIC SYSTEMS PTY LTD.\",\n\t[3]byte{0, 128, 102}:   \"ARCOM CONTROL SYSTEMS, LTD.\",\n\t[3]byte{0, 128, 103}:   \"SQUARE D COMPANY\",\n\t[3]byte{0, 128, 104}:   \"YAMATECH SCIENTIFIC LTD.\",\n\t[3]byte{0, 128, 105}:   \"COMPUTONE SYSTEMS\",\n\t[3]byte{0, 128, 106}:   \"ERI (EMPAC RESEARCH INC.)\",\n\t[3]byte{0, 128, 107}:   \"SCHMID TELECOMMUNICATION\",\n\t[3]byte{0, 128, 108}:   \"Secure Systems & Services\",\n\t[3]byte{0, 128, 109}:   \"CENTURY SYSTEMS CORP.\",\n\t[3]byte{0, 128, 110}:   \"NIPPON STEEL CORPORATION\",\n\t[3]byte{0, 128, 111}:   \"ONELAN LTD.\",\n\t[3]byte{0, 128, 112}:   \"COMPUTADORAS MICRON\",\n\t[3]byte{0, 128, 113}:   \"SAI TECHNOLOGY\",\n\t[3]byte{0, 128, 114}:   \"MICROPLEX SYSTEMS LTD.\",\n\t[3]byte{0, 128, 115}:   \"DWB ASSOCIATES\",\n\t[3]byte{0, 128, 116}:   \"FISHER CONTROLS\",\n\t[3]byte{0, 128, 117}:   \"PARSYTEC GMBH\",\n\t[3]byte{0, 128, 118}:   \"MCNC\",\n\t[3]byte{0, 128, 119}:   \"Brother industries, LTD.\",\n\t[3]byte{0, 128, 120}:   \"PRACTICAL PERIPHERALS, INC.\",\n\t[3]byte{0, 128, 121}:   \"MICROBUS DESIGNS LTD.\",\n\t[3]byte{0, 128, 122}:   \"AITECH SYSTEMS LTD.\",\n\t[3]byte{0, 128, 123}:   \"ARTEL COMMUNICATIONS CORP.\",\n\t[3]byte{0, 128, 124}:   \"FIBERCOM, INC.\",\n\t[3]byte{0, 128, 125}:   \"EQUINOX SYSTEMS INC.\",\n\t[3]byte{0, 128, 126}:   \"SOUTHERN PACIFIC LTD.\",\n\t[3]byte{0, 128, 127}:   \"DY-4 INCORPORATED\",\n\t[3]byte{0, 128, 128}:   \"DATAMEDIA CORPORATION\",\n\t[3]byte{0, 128, 129}:   \"KENDALL SQUARE RESEARCH CORP.\",\n\t[3]byte{0, 128, 130}:   \"PEP MODULAR COMPUTERS GMBH\",\n\t[3]byte{0, 128, 131}:   \"AMDAHL\",\n\t[3]byte{0, 128, 132}:   \"THE CLOUD INC.\",\n\t[3]byte{0, 128, 133}:   \"H-THREE SYSTEMS CORPORATION\",\n\t[3]byte{0, 128, 134}:   \"COMPUTER GENERATION INC.\",\n\t[3]byte{0, 128, 135}:   \"OKI ELECTRIC INDUSTRY CO., LTD\",\n\t[3]byte{0, 128, 136}:   \"VICTOR COMPANY OF JAPAN, LTD.\",\n\t[3]byte{0, 128, 137}:   \"TECNETICS (PTY) LTD.\",\n\t[3]byte{0, 128, 138}:   \"SUMMIT MICROSYSTEMS CORP.\",\n\t[3]byte{0, 128, 139}:   \"DACOLL LIMITED\",\n\t[3]byte{0, 128, 140}:   \"NetAlly\",\n\t[3]byte{0, 128, 141}:   \"WESTCOAST TECHNOLOGY B.V.\",\n\t[3]byte{0, 128, 142}:   \"RADSTONE TECHNOLOGY\",\n\t[3]byte{0, 128, 143}:   \"C. ITOH ELECTRONICS, INC.\",\n\t[3]byte{0, 128, 144}:   \"MICROTEK INTERNATIONAL, INC.\",\n\t[3]byte{0, 128, 145}:   \"TOKYO ELECTRIC CO.,LTD\",\n\t[3]byte{0, 128, 146}:   \"Silex Technology, Inc.\",\n\t[3]byte{0, 128, 147}:   \"XYRON CORPORATION\",\n\t[3]byte{0, 128, 148}:   \"ALFA LAVAL AUTOMATION AB\",\n\t[3]byte{0, 128, 149}:   \"BASIC MERTON HANDELSGES.M.B.H.\",\n\t[3]byte{0, 128, 150}:   \"HUMAN DESIGNED SYSTEMS, INC.\",\n\t[3]byte{0, 128, 151}:   \"CENTRALP AUTOMATISMES\",\n\t[3]byte{0, 128, 152}:   \"TDK CORPORATION\",\n\t[3]byte{0, 128, 153}:   \"Eaton Industries GmbH\",\n\t[3]byte{0, 128, 154}:   \"NOVUS NETWORKS LTD\",\n\t[3]byte{0, 128, 155}:   \"JUSTSYSTEM CORPORATION\",\n\t[3]byte{0, 128, 156}:   \"LUXCOM, INC.\",\n\t[3]byte{0, 128, 157}:   \"Commscraft Ltd.\",\n\t[3]byte{0, 128, 158}:   \"DATUS GMBH\",\n\t[3]byte{0, 128, 159}:   \"ALE International\",\n\t[3]byte{0, 128, 160}:   \"Hewlett Packard\",\n\t[3]byte{0, 128, 161}:   \"MICROTEST, INC.\",\n\t[3]byte{0, 128, 162}:   \"CREATIVE ELECTRONIC SYSTEMS\",\n\t[3]byte{0, 128, 163}:   \"Lantronix\",\n\t[3]byte{0, 128, 164}:   \"LIBERTY ELECTRONICS\",\n\t[3]byte{0, 128, 165}:   \"SPEED INTERNATIONAL\",\n\t[3]byte{0, 128, 166}:   \"REPUBLIC TECHNOLOGY, INC.\",\n\t[3]byte{0, 128, 167}:   \"Honeywell International Inc\",\n\t[3]byte{0, 128, 168}:   \"VITACOM CORPORATION\",\n\t[3]byte{0, 128, 169}:   \"CLEARPOINT RESEARCH\",\n\t[3]byte{0, 128, 170}:   \"MAXPEED\",\n\t[3]byte{0, 128, 171}:   \"DUKANE NETWORK INTEGRATION\",\n\t[3]byte{0, 128, 172}:   \"IMLOGIX, DIVISION OF GENESYS\",\n\t[3]byte{0, 128, 173}:   \"CNET TECHNOLOGY, INC.\",\n\t[3]byte{0, 128, 174}:   \"HUGHES NETWORK SYSTEMS\",\n\t[3]byte{0, 128, 175}:   \"ALLUMER CO., LTD.\",\n\t[3]byte{0, 128, 176}:   \"ADVANCED INFORMATION\",\n\t[3]byte{0, 128, 177}:   \"SOFTCOM A/S\",\n\t[3]byte{0, 128, 178}:   \"NETWORK EQUIPMENT TECHNOLOGIES\",\n\t[3]byte{0, 128, 179}:   \"AVAL DATA CORPORATION\",\n\t[3]byte{0, 128, 180}:   \"SOPHIA SYSTEMS\",\n\t[3]byte{0, 128, 181}:   \"UNITED NETWORKS INC.\",\n\t[3]byte{0, 128, 182}:   \"Mercury Systems – Trusted Mission Solutions, Inc. \",\n\t[3]byte{0, 128, 183}:   \"STELLAR COMPUTER\",\n\t[3]byte{0, 128, 184}:   \"DMG MORI B.U.G. CO., LTD.\",\n\t[3]byte{0, 128, 185}:   \"ARCHE TECHNOLIGIES INC.\",\n\t[3]byte{0, 128, 186}:   \"SPECIALIX (ASIA) PTE, LTD\",\n\t[3]byte{0, 128, 187}:   \"HUGHES LAN SYSTEMS\",\n\t[3]byte{0, 128, 188}:   \"HITACHI ENGINEERING CO., LTD\",\n\t[3]byte{0, 128, 189}:   \"THE FURUKAWA ELECTRIC CO., LTD\",\n\t[3]byte{0, 128, 190}:   \"ARIES RESEARCH\",\n\t[3]byte{0, 128, 191}:   \"TAKAOKA ELECTRIC MFG. CO. LTD.\",\n\t[3]byte{0, 128, 192}:   \"PENRIL DATACOMM\",\n\t[3]byte{0, 128, 193}:   \"LANEX CORPORATION\",\n\t[3]byte{0, 128, 194}:   \"IEEE 802.1 Working Group\",\n\t[3]byte{0, 128, 195}:   \"BICC INFORMATION SYSTEMS & SVC\",\n\t[3]byte{0, 128, 196}:   \"DOCUMENT TECHNOLOGIES, INC.\",\n\t[3]byte{0, 128, 197}:   \"NOVELLCO DE MEXICO\",\n\t[3]byte{0, 128, 198}:   \"NATIONAL DATACOMM CORPORATION\",\n\t[3]byte{0, 128, 199}:   \"XIRCOM\",\n\t[3]byte{0, 128, 200}:   \"D-LINK SYSTEMS, INC.\",\n\t[3]byte{0, 128, 201}:   \"ALBERTA MICROELECTRONIC CENTRE\",\n\t[3]byte{0, 128, 202}:   \"NETCOM RESEARCH INCORPORATED\",\n\t[3]byte{0, 128, 203}:   \"FALCO DATA PRODUCTS\",\n\t[3]byte{0, 128, 204}:   \"MICROWAVE BYPASS SYSTEMS\",\n\t[3]byte{0, 128, 205}:   \"MICRONICS COMPUTER, INC.\",\n\t[3]byte{0, 128, 206}:   \"BROADCAST TELEVISION SYSTEMS\",\n\t[3]byte{0, 128, 207}:   \"EMBEDDED PERFORMANCE INC.\",\n\t[3]byte{0, 128, 208}:   \"COMPUTER PERIPHERALS, INC.\",\n\t[3]byte{0, 128, 209}:   \"KIMTRON CORPORATION\",\n\t[3]byte{0, 128, 210}:   \"SHINNIHONDENKO CO., LTD.\",\n\t[3]byte{0, 128, 211}:   \"SHIVA CORP.\",\n\t[3]byte{0, 128, 212}:   \"CHASE RESEARCH LTD.\",\n\t[3]byte{0, 128, 213}:   \"CADRE TECHNOLOGIES\",\n\t[3]byte{0, 128, 214}:   \"NUVOTECH, INC.\",\n\t[3]byte{0, 128, 215}:   \"Fantum Engineering\",\n\t[3]byte{0, 128, 216}:   \"NETWORK PERIPHERALS INC.\",\n\t[3]byte{0, 128, 217}:   \"EMK Elektronik GmbH & Co. KG\",\n\t[3]byte{0, 128, 218}:   \"Bruel & Kjaer Sound & Vibration Measurement A/S\",\n\t[3]byte{0, 128, 219}:   \"GRAPHON CORPORATION\",\n\t[3]byte{0, 128, 220}:   \"PICKER INTERNATIONAL\",\n\t[3]byte{0, 128, 221}:   \"GMX INC/GIMIX\",\n\t[3]byte{0, 128, 222}:   \"GIPSI S.A.\",\n\t[3]byte{0, 128, 223}:   \"ADC CODENOLL TECHNOLOGY CORP.\",\n\t[3]byte{0, 128, 224}:   \"XTP SYSTEMS, INC.\",\n\t[3]byte{0, 128, 225}:   \"STMicroelectronics SRL\",\n\t[3]byte{0, 128, 226}:   \"T.D.I. CO., LTD.\",\n\t[3]byte{0, 128, 227}:   \"CORAL NETWORK CORPORATION\",\n\t[3]byte{0, 128, 228}:   \"NORTHWEST DIGITAL SYSTEMS, INC\",\n\t[3]byte{0, 128, 229}:   \"NetApp\",\n\t[3]byte{0, 128, 230}:   \"PEER NETWORKS, INC.\",\n\t[3]byte{0, 128, 231}:   \"Leonardo Tactical Systems.\",\n\t[3]byte{0, 128, 232}:   \"CUMULUS CORPORATIION\",\n\t[3]byte{0, 128, 233}:   \"Madge Ltd.\",\n\t[3]byte{0, 128, 234}:   \"ADVA Optical Networking Ltd.\",\n\t[3]byte{0, 128, 235}:   \"COMPCONTROL B.V.\",\n\t[3]byte{0, 128, 236}:   \"SUPERCOMPUTING SOLUTIONS, INC.\",\n\t[3]byte{0, 128, 237}:   \"IQ TECHNOLOGIES, INC.\",\n\t[3]byte{0, 128, 238}:   \"THOMSON CSF\",\n\t[3]byte{0, 128, 239}:   \"RATIONAL\",\n\t[3]byte{0, 128, 240}:   \"Panasonic Communications Co., Ltd.\",\n\t[3]byte{0, 128, 241}:   \"OPUS SYSTEMS\",\n\t[3]byte{0, 128, 242}:   \"RAYCOM SYSTEMS INC\",\n\t[3]byte{0, 128, 243}:   \"SUN ELECTRONICS CORP.\",\n\t[3]byte{0, 128, 244}:   \"TELEMECANIQUE ELECTRIQUE\",\n\t[3]byte{0, 128, 245}:   \"Quantel Ltd\",\n\t[3]byte{0, 128, 246}:   \"SYNERGY MICROSYSTEMS\",\n\t[3]byte{0, 128, 247}:   \"Zenith Electronics Corporation\",\n\t[3]byte{0, 128, 248}:   \"MIZAR, INC.\",\n\t[3]byte{0, 128, 249}:   \"HEURIKON CORPORATION\",\n\t[3]byte{0, 128, 250}:   \"RWT GMBH\",\n\t[3]byte{0, 128, 251}:   \"BVM LIMITED\",\n\t[3]byte{0, 128, 252}:   \"AVATAR CORPORATION\",\n\t[3]byte{0, 128, 253}:   \"EXSCEED CORPRATION\",\n\t[3]byte{0, 128, 254}:   \"AZURE TECHNOLOGIES, INC.\",\n\t[3]byte{0, 128, 255}:   \"SOC. DE TELEINFORMATIQUE RTC\",\n\t[3]byte{0, 129, 196}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 129, 249}:   \"Texas Instruments\",\n\t[3]byte{0, 132, 237}:   \"Private\",\n\t[3]byte{0, 134, 156}:   \"Palo Alto Networks\",\n\t[3]byte{0, 134, 160}:   \"Private\",\n\t[3]byte{0, 135, 1}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 135, 49}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 135, 100}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 136, 101}:   \"Apple, Inc.\",\n\t[3]byte{0, 136, 186}:   \"NC&C\",\n\t[3]byte{0, 138, 150}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 139, 67}:    \"RFTECH\",\n\t[3]byte{0, 139, 252}:   \"mixi,Inc.\",\n\t[3]byte{0, 140, 16}:    \"Black Box Corp.\",\n\t[3]byte{0, 140, 84}:    \"ADB Broadband Italia\",\n\t[3]byte{0, 140, 250}:   \"INVENTEC CORPORATION\",\n\t[3]byte{0, 141, 78}:    \"CJSC NII STT\",\n\t[3]byte{0, 141, 218}:   \"Link One Co., Ltd.\",\n\t[3]byte{0, 142, 115}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 142, 242}:   \"NETGEAR\",\n\t[3]byte{0, 144, 0}:     \"DIAMOND MULTIMEDIA\",\n\t[3]byte{0, 144, 1}:     \"NISHIMU ELECTRONICS INDUSTRIES CO., LTD.\",\n\t[3]byte{0, 144, 2}:     \"ALLGON AB\",\n\t[3]byte{0, 144, 3}:     \"APLIO\",\n\t[3]byte{0, 144, 4}:     \"3COM EUROPE LTD\",\n\t[3]byte{0, 144, 5}:     \"PROTECH SYSTEMS CO., LTD.\",\n\t[3]byte{0, 144, 6}:     \"Hamamatsu Photonics K.K.\",\n\t[3]byte{0, 144, 7}:     \"DOMEX TECHNOLOGY CORP.\",\n\t[3]byte{0, 144, 8}:     \"HanA Systems Inc.\",\n\t[3]byte{0, 144, 9}:     \"I Controls, Inc.\",\n\t[3]byte{0, 144, 10}:    \"PROTON ELECTRONIC INDUSTRIAL CO., LTD.\",\n\t[3]byte{0, 144, 11}:    \"LANNER ELECTRONICS, INC.\",\n\t[3]byte{0, 144, 12}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 13}:    \"Overland Storage Inc.\",\n\t[3]byte{0, 144, 14}:    \"HANDLINK TECHNOLOGIES, INC.\",\n\t[3]byte{0, 144, 15}:    \"KAWASAKI HEAVY INDUSTRIES, LTD\",\n\t[3]byte{0, 144, 16}:    \"SIMULATION LABORATORIES, INC.\",\n\t[3]byte{0, 144, 17}:    \"WAVTrace, Inc.\",\n\t[3]byte{0, 144, 18}:    \"GLOBESPAN SEMICONDUCTOR, INC.\",\n\t[3]byte{0, 144, 19}:    \"SAMSAN CORP.\",\n\t[3]byte{0, 144, 20}:    \"ROTORK INSTRUMENTS, LTD.\",\n\t[3]byte{0, 144, 21}:    \"CENTIGRAM COMMUNICATIONS CORP.\",\n\t[3]byte{0, 144, 22}:    \"ZAC\",\n\t[3]byte{0, 144, 23}:    \"Zypcom, Inc\",\n\t[3]byte{0, 144, 24}:    \"ITO ELECTRIC INDUSTRY CO, LTD.\",\n\t[3]byte{0, 144, 25}:    \"HERMES ELECTRONICS CO., LTD.\",\n\t[3]byte{0, 144, 26}:    \"UNISPHERE SOLUTIONS\",\n\t[3]byte{0, 144, 27}:    \"DIGITAL CONTROLS\",\n\t[3]byte{0, 144, 28}:    \"mps Software Gmbh\",\n\t[3]byte{0, 144, 29}:    \"PEC (NZ) LTD.\",\n\t[3]byte{0, 144, 30}:    \"Selesta Ingegneria S.p.A.\",\n\t[3]byte{0, 144, 31}:    \"ADTEC PRODUCTIONS, INC.\",\n\t[3]byte{0, 144, 32}:    \"PHILIPS ANALYTICAL X-RAY B.V.\",\n\t[3]byte{0, 144, 33}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 34}:    \"IVEX\",\n\t[3]byte{0, 144, 35}:    \"ZILOG INC.\",\n\t[3]byte{0, 144, 36}:    \"PIPELINKS, INC.\",\n\t[3]byte{0, 144, 37}:    \"BAE Systems Australia (Electronic Systems) Pty Ltd\",\n\t[3]byte{0, 144, 38}:    \"ADVANCED SWITCHING COMMUNICATIONS, INC.\",\n\t[3]byte{0, 144, 39}:    \"Intel Corporation\",\n\t[3]byte{0, 144, 40}:    \"NIPPON SIGNAL CO., LTD.\",\n\t[3]byte{0, 144, 41}:    \"CRYPTO AG\",\n\t[3]byte{0, 144, 42}:    \"COMMUNICATION DEVICES, INC.\",\n\t[3]byte{0, 144, 43}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 44}:    \"DATA & CONTROL EQUIPMENT LTD.\",\n\t[3]byte{0, 144, 45}:    \"DATA ELECTRONICS (AUST.) PTY, LTD.\",\n\t[3]byte{0, 144, 46}:    \"NAMCO LIMITED\",\n\t[3]byte{0, 144, 47}:    \"NETCORE SYSTEMS, INC.\",\n\t[3]byte{0, 144, 48}:    \"HONEYWELL-DATING\",\n\t[3]byte{0, 144, 49}:    \"MYSTICOM, LTD.\",\n\t[3]byte{0, 144, 50}:    \"PELCOMBE GROUP LTD.\",\n\t[3]byte{0, 144, 51}:    \"INNOVAPHONE AG\",\n\t[3]byte{0, 144, 52}:    \"IMAGIC, INC.\",\n\t[3]byte{0, 144, 53}:    \"ALPHA TELECOM, INC.\",\n\t[3]byte{0, 144, 54}:    \"ens, inc.\",\n\t[3]byte{0, 144, 55}:    \"ACUCOMM, INC.\",\n\t[3]byte{0, 144, 56}:    \"FOUNTAIN TECHNOLOGIES, INC.\",\n\t[3]byte{0, 144, 57}:    \"SHASTA NETWORKS\",\n\t[3]byte{0, 144, 58}:    \"NIHON MEDIA TOOL INC.\",\n\t[3]byte{0, 144, 59}:    \"TriEMS Research Lab, Inc.\",\n\t[3]byte{0, 144, 60}:    \"ATLANTIC NETWORK SYSTEMS\",\n\t[3]byte{0, 144, 61}:    \"BIOPAC SYSTEMS, INC.\",\n\t[3]byte{0, 144, 62}:    \"N.V. PHILIPS INDUSTRIAL ACTIVITIES\",\n\t[3]byte{0, 144, 63}:    \"AZTEC RADIOMEDIA\",\n\t[3]byte{0, 144, 64}:    \"Siemens Network Convergence LLC\",\n\t[3]byte{0, 144, 65}:    \"APPLIED DIGITAL ACCESS\",\n\t[3]byte{0, 144, 66}:    \"ECCS, Inc.\",\n\t[3]byte{0, 144, 67}:    \"Tattile SRL \",\n\t[3]byte{0, 144, 68}:    \"ASSURED DIGITAL, INC.\",\n\t[3]byte{0, 144, 69}:    \"Marconi Communications\",\n\t[3]byte{0, 144, 70}:    \"DEXDYNE, LTD.\",\n\t[3]byte{0, 144, 71}:    \"GIGA FAST E. LTD.\",\n\t[3]byte{0, 144, 72}:    \"ZEAL CORPORATION\",\n\t[3]byte{0, 144, 73}:    \"ENTRIDIA CORPORATION\",\n\t[3]byte{0, 144, 74}:    \"CONCUR SYSTEM TECHNOLOGIES\",\n\t[3]byte{0, 144, 75}:    \"Gemtek Technology Co., Ltd.\",\n\t[3]byte{0, 144, 76}:    \"Epigram, Inc.\",\n\t[3]byte{0, 144, 77}:    \"SPEC S.A.\",\n\t[3]byte{0, 144, 78}:    \"DELEM BV\",\n\t[3]byte{0, 144, 79}:    \"ABB POWER T&D COMPANY, INC.\",\n\t[3]byte{0, 144, 80}:    \"Teleste Corporation\",\n\t[3]byte{0, 144, 81}:    \"ULTIMATE TECHNOLOGY CORP.\",\n\t[3]byte{0, 144, 82}:    \"SELCOM ELETTRONICA S.R.L.\",\n\t[3]byte{0, 144, 83}:    \"DAEWOO ELECTRONICS CO., LTD.\",\n\t[3]byte{0, 144, 84}:    \"INNOVATIVE SEMICONDUCTORS, INC\",\n\t[3]byte{0, 144, 85}:    \"PARKER HANNIFIN CORPORATION COMPUMOTOR DIVISION\",\n\t[3]byte{0, 144, 86}:    \"TELESTREAM, INC.\",\n\t[3]byte{0, 144, 87}:    \"AANetcom, Inc.\",\n\t[3]byte{0, 144, 88}:    \"Ultra Electronics Command & Control Systems\",\n\t[3]byte{0, 144, 89}:    \"TELECOM DEVICE K.K.\",\n\t[3]byte{0, 144, 90}:    \"DEARBORN GROUP, INC.\",\n\t[3]byte{0, 144, 91}:    \"RAYMOND AND LAE ENGINEERING\",\n\t[3]byte{0, 144, 92}:    \"EDMI\",\n\t[3]byte{0, 144, 93}:    \"NETCOM SICHERHEITSTECHNIK GMBH\",\n\t[3]byte{0, 144, 94}:    \"RAULAND-BORG CORPORATION\",\n\t[3]byte{0, 144, 95}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 96}:    \"SYSTEM CREATE CORP.\",\n\t[3]byte{0, 144, 97}:    \"PACIFIC RESEARCH & ENGINEERING CORPORATION\",\n\t[3]byte{0, 144, 98}:    \"ICP VORTEX COMPUTERSYSTEME GmbH\",\n\t[3]byte{0, 144, 99}:    \"COHERENT COMMUNICATIONS SYSTEMS CORPORATION\",\n\t[3]byte{0, 144, 100}:   \"Thomson Inc.\",\n\t[3]byte{0, 144, 101}:   \"FINISAR CORPORATION\",\n\t[3]byte{0, 144, 102}:   \"Troika Networks, Inc.\",\n\t[3]byte{0, 144, 103}:   \"WalkAbout Computers, Inc.\",\n\t[3]byte{0, 144, 104}:   \"DVT CORP.\",\n\t[3]byte{0, 144, 105}:   \"Juniper Networks\",\n\t[3]byte{0, 144, 106}:   \"TURNSTONE SYSTEMS, INC.\",\n\t[3]byte{0, 144, 107}:   \"APPLIED RESOURCES, INC.\",\n\t[3]byte{0, 144, 108}:   \"Sartorius Hamburg GmbH\",\n\t[3]byte{0, 144, 109}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 110}:   \"PRAXON, INC.\",\n\t[3]byte{0, 144, 111}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 112}:   \"NEO NETWORKS, INC.\",\n\t[3]byte{0, 144, 113}:   \"Applied Innovation Inc.\",\n\t[3]byte{0, 144, 114}:   \"SIMRAD AS\",\n\t[3]byte{0, 144, 115}:   \"GAIO TECHNOLOGY\",\n\t[3]byte{0, 144, 116}:   \"ARGON NETWORKS, INC.\",\n\t[3]byte{0, 144, 117}:   \"NEC DO BRASIL S.A.\",\n\t[3]byte{0, 144, 118}:   \"FMT AIRCRAFT GATE SUPPORT SYSTEMS AB\",\n\t[3]byte{0, 144, 119}:   \"ADVANCED FIBRE COMMUNICATIONS\",\n\t[3]byte{0, 144, 120}:   \"MER TELEMANAGEMENT SOLUTIONS, LTD.\",\n\t[3]byte{0, 144, 121}:   \"ClearOne, Inc.\",\n\t[3]byte{0, 144, 122}:   \"Spectralink, Inc\",\n\t[3]byte{0, 144, 123}:   \"E-TECH, INC.\",\n\t[3]byte{0, 144, 124}:   \"DIGITALCAST, INC.\",\n\t[3]byte{0, 144, 125}:   \"Lake Communications\",\n\t[3]byte{0, 144, 126}:   \"VETRONIX CORP.\",\n\t[3]byte{0, 144, 127}:   \"WatchGuard Technologies, Inc.\",\n\t[3]byte{0, 144, 128}:   \"NOT LIMITED, INC.\",\n\t[3]byte{0, 144, 129}:   \"ALOHA NETWORKS, INC.\",\n\t[3]byte{0, 144, 130}:   \"FORCE INSTITUTE\",\n\t[3]byte{0, 144, 131}:   \"TURBO COMMUNICATION, INC.\",\n\t[3]byte{0, 144, 132}:   \"ATECH SYSTEM\",\n\t[3]byte{0, 144, 133}:   \"GOLDEN ENTERPRISES, INC.\",\n\t[3]byte{0, 144, 134}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 135}:   \"ITIS\",\n\t[3]byte{0, 144, 136}:   \"BAXALL SECURITY LTD.\",\n\t[3]byte{0, 144, 137}:   \"SOFTCOM MICROSYSTEMS, INC.\",\n\t[3]byte{0, 144, 138}:   \"BAYLY COMMUNICATIONS, INC.\",\n\t[3]byte{0, 144, 139}:   \"Tattile SRL\",\n\t[3]byte{0, 144, 140}:   \"ETREND ELECTRONICS, INC.\",\n\t[3]byte{0, 144, 141}:   \"VICKERS ELECTRONICS SYSTEMS\",\n\t[3]byte{0, 144, 142}:   \"Nortel Networks Broadband Access\",\n\t[3]byte{0, 144, 143}:   \"AUDIO CODES LTD.\",\n\t[3]byte{0, 144, 144}:   \"I-BUS\",\n\t[3]byte{0, 144, 145}:   \"DigitalScape, Inc.\",\n\t[3]byte{0, 144, 146}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 147}:   \"EIZO Corporation\",\n\t[3]byte{0, 144, 148}:   \"OSPREY TECHNOLOGIES, INC.\",\n\t[3]byte{0, 144, 149}:   \"UNIVERSAL AVIONICS\",\n\t[3]byte{0, 144, 150}:   \"ASKEY COMPUTER CORP\",\n\t[3]byte{0, 144, 151}:   \"Sycamore Networks\",\n\t[3]byte{0, 144, 152}:   \"SBC DESIGNS, INC.\",\n\t[3]byte{0, 144, 153}:   \"ALLIED TELESIS, K.K.\",\n\t[3]byte{0, 144, 154}:   \"ONE WORLD SYSTEMS, INC.\",\n\t[3]byte{0, 144, 155}:   \"MARKEM-IMAJE\",\n\t[3]byte{0, 144, 156}:   \"ARRIS Group, Inc.\",\n\t[3]byte{0, 144, 157}:   \"NovaTech Process Solutions, LLC\",\n\t[3]byte{0, 144, 158}:   \"Critical IO, LLC\",\n\t[3]byte{0, 144, 159}:   \"DIGI-DATA CORPORATION\",\n\t[3]byte{0, 144, 160}:   \"8X8 INC.\",\n\t[3]byte{0, 144, 161}:   \"Flying Pig Systems/High End Systems Inc.\",\n\t[3]byte{0, 144, 162}:   \"CyberTAN Technology Inc.\",\n\t[3]byte{0, 144, 163}:   \"Corecess Inc.\",\n\t[3]byte{0, 144, 164}:   \"ALTIGA NETWORKS\",\n\t[3]byte{0, 144, 165}:   \"SPECTRA LOGIC\",\n\t[3]byte{0, 144, 166}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 167}:   \"CLIENTEC CORPORATION\",\n\t[3]byte{0, 144, 168}:   \"NineTiles Networks, Ltd.\",\n\t[3]byte{0, 144, 169}:   \"WESTERN DIGITAL\",\n\t[3]byte{0, 144, 170}:   \"INDIGO ACTIVE VISION SYSTEMS LIMITED\",\n\t[3]byte{0, 144, 171}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 172}:   \"OPTIVISION, INC.\",\n\t[3]byte{0, 144, 173}:   \"ASPECT ELECTRONICS, INC.\",\n\t[3]byte{0, 144, 174}:   \"ITALTEL S.p.A/RF-UP-I\",\n\t[3]byte{0, 144, 175}:   \"J. MORITA MFG. CORP.\",\n\t[3]byte{0, 144, 176}:   \"VADEM\",\n\t[3]byte{0, 144, 177}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 178}:   \"AVICI SYSTEMS INC.\",\n\t[3]byte{0, 144, 179}:   \"AGRANAT SYSTEMS\",\n\t[3]byte{0, 144, 180}:   \"WILLOWBROOK TECHNOLOGIES\",\n\t[3]byte{0, 144, 181}:   \"NIKON CORPORATION\",\n\t[3]byte{0, 144, 182}:   \"FIBEX SYSTEMS\",\n\t[3]byte{0, 144, 183}:   \"DIGITAL LIGHTWAVE, INC.\",\n\t[3]byte{0, 144, 184}:   \"ROHDE & SCHWARZ GMBH & CO. KG\",\n\t[3]byte{0, 144, 185}:   \"BERAN INSTRUMENTS LTD.\",\n\t[3]byte{0, 144, 186}:   \"VALID NETWORKS, INC.\",\n\t[3]byte{0, 144, 187}:   \"TAINET COMMUNICATION SYSTEM Corp.\",\n\t[3]byte{0, 144, 188}:   \"TELEMANN CO., LTD.\",\n\t[3]byte{0, 144, 189}:   \"OMNIA COMMUNICATIONS, INC.\",\n\t[3]byte{0, 144, 190}:   \"IBC/INTEGRATED BUSINESS COMPUTERS\",\n\t[3]byte{0, 144, 191}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 192}:   \"K.J. LAW ENGINEERS, INC.\",\n\t[3]byte{0, 144, 193}:   \"Peco II, Inc.\",\n\t[3]byte{0, 144, 194}:   \"JK microsystems, Inc.\",\n\t[3]byte{0, 144, 195}:   \"TOPIC SEMICONDUCTOR CORP.\",\n\t[3]byte{0, 144, 196}:   \"JAVELIN SYSTEMS, INC.\",\n\t[3]byte{0, 144, 197}:   \"INTERNET MAGIC, INC.\",\n\t[3]byte{0, 144, 198}:   \"OPTIM SYSTEMS, INC.\",\n\t[3]byte{0, 144, 199}:   \"ICOM INC.\",\n\t[3]byte{0, 144, 200}:   \"WAVERIDER COMMUNICATIONS (CANADA) INC.\",\n\t[3]byte{0, 144, 201}:   \"DPAC Technologies\",\n\t[3]byte{0, 144, 202}:   \"ACCORD VIDEO TELECOMMUNICATIONS, LTD.\",\n\t[3]byte{0, 144, 203}:   \"Wireless OnLine, Inc.\",\n\t[3]byte{0, 144, 204}:   \"PLANEX COMMUNICATIONS INC.\",\n\t[3]byte{0, 144, 205}:   \"ENT-EMPRESA NACIONAL DE TELECOMMUNICACOES, S.A.\",\n\t[3]byte{0, 144, 206}:   \" avateramedical Mechatronics GmbH\",\n\t[3]byte{0, 144, 207}:   \"NORTEL\",\n\t[3]byte{0, 144, 208}:   \"Thomson Telecom Belgium\",\n\t[3]byte{0, 144, 209}:   \"LEICHU ENTERPRISE CO., LTD.\",\n\t[3]byte{0, 144, 210}:   \"ARTEL VIDEO SYSTEMS\",\n\t[3]byte{0, 144, 211}:   \"GIESECKE & DEVRIENT GmbH\",\n\t[3]byte{0, 144, 212}:   \"BindView Development Corp.\",\n\t[3]byte{0, 144, 213}:   \"EUPHONIX, INC.\",\n\t[3]byte{0, 144, 214}:   \"Crystal Group, Inc.\",\n\t[3]byte{0, 144, 215}:   \"NetBoost Corp.\",\n\t[3]byte{0, 144, 216}:   \"WHITECROSS SYSTEMS\",\n\t[3]byte{0, 144, 217}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 218}:   \"DYNARC, INC.\",\n\t[3]byte{0, 144, 219}:   \"NEXT LEVEL COMMUNICATIONS\",\n\t[3]byte{0, 144, 220}:   \"TECO INFORMATION SYSTEMS\",\n\t[3]byte{0, 144, 221}:   \"MIHARU COMMUNICATIONS Inc\",\n\t[3]byte{0, 144, 222}:   \"CARDKEY SYSTEMS, INC.\",\n\t[3]byte{0, 144, 223}:   \"MITSUBISHI CHEMICAL AMERICA, INC.\",\n\t[3]byte{0, 144, 224}:   \"SYSTRAN CORP.\",\n\t[3]byte{0, 144, 225}:   \"TELENA S.P.A.\",\n\t[3]byte{0, 144, 226}:   \"DISTRIBUTED PROCESSING TECHNOLOGY\",\n\t[3]byte{0, 144, 227}:   \"AVEX ELECTRONICS INC.\",\n\t[3]byte{0, 144, 228}:   \"NEC AMERICA, INC.\",\n\t[3]byte{0, 144, 229}:   \"TEKNEMA, INC.\",\n\t[3]byte{0, 144, 230}:   \"ALi Corporation\",\n\t[3]byte{0, 144, 231}:   \"HORSCH ELEKTRONIK AG\",\n\t[3]byte{0, 144, 232}:   \"MOXA TECHNOLOGIES CORP., LTD.\",\n\t[3]byte{0, 144, 233}:   \"JANZ COMPUTER AG\",\n\t[3]byte{0, 144, 234}:   \"ALPHA TECHNOLOGIES, INC.\",\n\t[3]byte{0, 144, 235}:   \"SENTRY TELECOM SYSTEMS\",\n\t[3]byte{0, 144, 236}:   \"PYRESCOM\",\n\t[3]byte{0, 144, 237}:   \"CENTRAL SYSTEM RESEARCH CO., LTD.\",\n\t[3]byte{0, 144, 238}:   \"PERSONAL COMMUNICATIONS TECHNOLOGIES\",\n\t[3]byte{0, 144, 239}:   \"INTEGRIX, INC.\",\n\t[3]byte{0, 144, 240}:   \"Harmonic Video Systems Ltd.\",\n\t[3]byte{0, 144, 241}:   \"Seagate Cloud Systems Inc\",\n\t[3]byte{0, 144, 242}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 144, 243}:   \"ASPECT COMMUNICATIONS\",\n\t[3]byte{0, 144, 244}:   \"LIGHTNING INSTRUMENTATION\",\n\t[3]byte{0, 144, 245}:   \"CLEVO CO.\",\n\t[3]byte{0, 144, 246}:   \"ESCALATE NETWORKS, INC.\",\n\t[3]byte{0, 144, 247}:   \"NBASE COMMUNICATIONS LTD.\",\n\t[3]byte{0, 144, 248}:   \"MEDIATRIX TELECOM\",\n\t[3]byte{0, 144, 249}:   \"Imagine Communications\",\n\t[3]byte{0, 144, 250}:   \"Emulex Corporation\",\n\t[3]byte{0, 144, 251}:   \"PORTWELL, INC.\",\n\t[3]byte{0, 144, 252}:   \"NETWORK COMPUTING DEVICES\",\n\t[3]byte{0, 144, 253}:   \"CopperCom, Inc.\",\n\t[3]byte{0, 144, 254}:   \"ELECOM CO., LTD.  (LANEED DIV.)\",\n\t[3]byte{0, 144, 255}:   \"TELLUS TECHNOLOGY INC.\",\n\t[3]byte{0, 145, 214}:   \"Crystal Group, Inc.\",\n\t[3]byte{0, 145, 250}:   \"Synapse Product Development\",\n\t[3]byte{0, 146, 125}:   \"Ficosa Internationa(Taicang) C0.,Ltd.\",\n\t[3]byte{0, 146, 250}:   \"SHENZHEN WISKY TECHNOLOGY CO.,LTD\",\n\t[3]byte{0, 147, 99}:    \"Uni-Link Technology Co., Ltd.\",\n\t[3]byte{0, 148, 161}:   \"F5 Networks, Inc.\",\n\t[3]byte{0, 148, 236}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{0, 149, 105}:   \"LSD Science and Technology Co.,Ltd.\",\n\t[3]byte{0, 151, 255}:   \"Heimann Sensor GmbH\",\n\t[3]byte{0, 154, 205}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 154, 210}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 156, 2}:     \"Hewlett Packard\",\n\t[3]byte{0, 157, 107}:   \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{0, 157, 142}:   \"CARDIAC RECORDERS, INC.\",\n\t[3]byte{0, 158, 30}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 158, 200}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{0, 158, 238}:   \"Positivo Tecnologia S.A.\",\n\t[3]byte{0, 160, 0}:     \"CENTILLION NETWORKS, INC.\",\n\t[3]byte{0, 160, 1}:     \"DRS Signal Solutions\",\n\t[3]byte{0, 160, 2}:     \"LEEDS & NORTHRUP AUSTRALIA PTY LTD\",\n\t[3]byte{0, 160, 3}:     \"Siemens Switzerland Ltd., I B T HVP\",\n\t[3]byte{0, 160, 4}:     \"NETPOWER, INC.\",\n\t[3]byte{0, 160, 5}:     \"DANIEL INSTRUMENTS, LTD.\",\n\t[3]byte{0, 160, 6}:     \"IMAGE DATA PROCESSING SYSTEM GROUP\",\n\t[3]byte{0, 160, 7}:     \"APEXX TECHNOLOGY, INC.\",\n\t[3]byte{0, 160, 8}:     \"NETCORP\",\n\t[3]byte{0, 160, 9}:     \"WHITETREE NETWORK\",\n\t[3]byte{0, 160, 10}:    \"Airspan\",\n\t[3]byte{0, 160, 11}:    \"COMPUTEX CO., LTD.\",\n\t[3]byte{0, 160, 12}:    \"KINGMAX TECHNOLOGY, INC.\",\n\t[3]byte{0, 160, 13}:    \"THE PANDA PROJECT\",\n\t[3]byte{0, 160, 14}:    \"NetAlly\",\n\t[3]byte{0, 160, 15}:    \"Broadband Technologies\",\n\t[3]byte{0, 160, 16}:    \"SYSLOGIC DATENTECHNIK AG\",\n\t[3]byte{0, 160, 17}:    \"MUTOH INDUSTRIES LTD.\",\n\t[3]byte{0, 160, 18}:    \"Telco Systems, Inc. \",\n\t[3]byte{0, 160, 19}:    \"TELTREND LTD.\",\n\t[3]byte{0, 160, 20}:    \"CSIR\",\n\t[3]byte{0, 160, 21}:    \"WYLE\",\n\t[3]byte{0, 160, 22}:    \"MICROPOLIS CORP.\",\n\t[3]byte{0, 160, 23}:    \"J B M CORPORATION\",\n\t[3]byte{0, 160, 24}:    \"CREATIVE CONTROLLERS, INC.\",\n\t[3]byte{0, 160, 25}:    \"NEBULA CONSULTANTS, INC.\",\n\t[3]byte{0, 160, 26}:    \"BINAR ELEKTRONIK AB\",\n\t[3]byte{0, 160, 27}:    \"PREMISYS COMMUNICATIONS, INC.\",\n\t[3]byte{0, 160, 28}:    \"NASCENT NETWORKS CORPORATION\",\n\t[3]byte{0, 160, 29}:    \"Red Lion Controls, LP\",\n\t[3]byte{0, 160, 30}:    \"EST CORPORATION\",\n\t[3]byte{0, 160, 31}:    \"TRICORD SYSTEMS, INC.\",\n\t[3]byte{0, 160, 32}:    \"CITICORP/TTI\",\n\t[3]byte{0, 160, 33}:    \"General Dynamics Mission Systems\",\n\t[3]byte{0, 160, 34}:    \"CENTRE FOR DEVELOPMENT OF ADVANCED COMPUTING\",\n\t[3]byte{0, 160, 35}:    \"APPLIED CREATIVE TECHNOLOGY, INC.\",\n\t[3]byte{0, 160, 36}:    \"3COM\",\n\t[3]byte{0, 160, 37}:    \"REDCOM LABS INC.\",\n\t[3]byte{0, 160, 38}:    \"TELDAT, S.A.\",\n\t[3]byte{0, 160, 39}:    \"FIREPOWER SYSTEMS, INC.\",\n\t[3]byte{0, 160, 40}:    \"CONNER PERIPHERALS\",\n\t[3]byte{0, 160, 41}:    \"COULTER CORPORATION\",\n\t[3]byte{0, 160, 42}:    \"TRANCELL SYSTEMS\",\n\t[3]byte{0, 160, 43}:    \"TRANSITIONS RESEARCH CORP.\",\n\t[3]byte{0, 160, 44}:    \"interWAVE Communications\",\n\t[3]byte{0, 160, 45}:    \"1394 Trade Association\",\n\t[3]byte{0, 160, 46}:    \"BRAND COMMUNICATIONS, LTD.\",\n\t[3]byte{0, 160, 47}:    \"ADB Broadband Italia\",\n\t[3]byte{0, 160, 48}:    \"CAPTOR NV/SA\",\n\t[3]byte{0, 160, 49}:    \"HAZELTINE CORPORATION, MS 1-17\",\n\t[3]byte{0, 160, 50}:    \"GES SINGAPORE PTE. LTD.\",\n\t[3]byte{0, 160, 51}:    \"imc MeBsysteme GmbH\",\n\t[3]byte{0, 160, 52}:    \"AXEL\",\n\t[3]byte{0, 160, 53}:    \"CYLINK CORPORATION\",\n\t[3]byte{0, 160, 54}:    \"APPLIED NETWORK TECHNOLOGY\",\n\t[3]byte{0, 160, 55}:    \"Mindray DS USA, Inc.\",\n\t[3]byte{0, 160, 56}:    \"EMAIL ELECTRONICS\",\n\t[3]byte{0, 160, 57}:    \"ROSS TECHNOLOGY, INC.\",\n\t[3]byte{0, 160, 58}:    \"KUBOTEK CORPORATION\",\n\t[3]byte{0, 160, 59}:    \"TOSHIN ELECTRIC CO., LTD.\",\n\t[3]byte{0, 160, 60}:    \"EG&G NUCLEAR INSTRUMENTS\",\n\t[3]byte{0, 160, 61}:    \"OPTO-22\",\n\t[3]byte{0, 160, 62}:    \"ATM FORUM\",\n\t[3]byte{0, 160, 63}:    \"COMPUTER SOCIETY MICROPROCESSOR & MICROPROCESSOR STANDARDS C\",\n\t[3]byte{0, 160, 64}:    \"Apple, Inc.\",\n\t[3]byte{0, 160, 65}:    \"INFICON\",\n\t[3]byte{0, 160, 66}:    \"SPUR PRODUCTS CORP.\",\n\t[3]byte{0, 160, 67}:    \"AMERICAN TECHNOLOGY LABS, INC.\",\n\t[3]byte{0, 160, 68}:    \"NTT IT CO., LTD.\",\n\t[3]byte{0, 160, 69}:    \"PHOENIX CONTACT Electronics GmbH\",\n\t[3]byte{0, 160, 70}:    \"SCITEX CORP. LTD.\",\n\t[3]byte{0, 160, 71}:    \"INTEGRATED FITNESS CORP.\",\n\t[3]byte{0, 160, 72}:    \"QUESTECH, LTD.\",\n\t[3]byte{0, 160, 73}:    \"DIGITECH INDUSTRIES, INC.\",\n\t[3]byte{0, 160, 74}:    \"NISSHIN ELECTRIC CO., LTD.\",\n\t[3]byte{0, 160, 75}:    \"TFL LAN INC.\",\n\t[3]byte{0, 160, 76}:    \"INNOVATIVE SYSTEMS & TECHNOLOGIES, INC.\",\n\t[3]byte{0, 160, 77}:    \"EDA INSTRUMENTS, INC.\",\n\t[3]byte{0, 160, 78}:    \"VOELKER TECHNOLOGIES, INC.\",\n\t[3]byte{0, 160, 79}:    \"AMERITEC CORP.\",\n\t[3]byte{0, 160, 80}:    \"CYPRESS SEMICONDUCTOR\",\n\t[3]byte{0, 160, 81}:    \"ANGIA COMMUNICATIONS. INC.\",\n\t[3]byte{0, 160, 82}:    \"STANILITE ELECTRONICS PTY. LTD\",\n\t[3]byte{0, 160, 83}:    \"COMPACT DEVICES, INC.\",\n\t[3]byte{0, 160, 84}:    \"Private\",\n\t[3]byte{0, 160, 85}:    \"Data Device Corporation\",\n\t[3]byte{0, 160, 86}:    \"MICROPROSS\",\n\t[3]byte{0, 160, 87}:    \"LANCOM Systems GmbH\",\n\t[3]byte{0, 160, 88}:    \"GLORY, LTD.\",\n\t[3]byte{0, 160, 89}:    \"HAMILTON HALLMARK\",\n\t[3]byte{0, 160, 90}:    \"KOFAX IMAGE PRODUCTS\",\n\t[3]byte{0, 160, 91}:    \"MARQUIP, INC.\",\n\t[3]byte{0, 160, 92}:    \"INVENTORY CONVERSION, INC./\",\n\t[3]byte{0, 160, 93}:    \"CS COMPUTER SYSTEME GmbH\",\n\t[3]byte{0, 160, 94}:    \"MYRIAD LOGIC INC.\",\n\t[3]byte{0, 160, 95}:    \"BTG Electronics Design BV\",\n\t[3]byte{0, 160, 96}:    \"ACER PERIPHERALS, INC.\",\n\t[3]byte{0, 160, 97}:    \"PURITAN BENNETT\",\n\t[3]byte{0, 160, 98}:    \"AES PRODATA\",\n\t[3]byte{0, 160, 99}:    \"JRL SYSTEMS, INC.\",\n\t[3]byte{0, 160, 100}:   \"KVB/ANALECT\",\n\t[3]byte{0, 160, 101}:   \"Symantec Corporation\",\n\t[3]byte{0, 160, 102}:   \"ISA CO., LTD.\",\n\t[3]byte{0, 160, 103}:   \"NETWORK SERVICES GROUP\",\n\t[3]byte{0, 160, 104}:   \"BHP LIMITED\",\n\t[3]byte{0, 160, 105}:   \"Symmetricom, Inc.\",\n\t[3]byte{0, 160, 106}:   \"Verilink Corporation\",\n\t[3]byte{0, 160, 107}:   \"DMS DORSCH MIKROSYSTEM GMBH\",\n\t[3]byte{0, 160, 108}:   \"SHINDENGEN ELECTRIC MFG. CO., LTD.\",\n\t[3]byte{0, 160, 109}:   \"MANNESMANN TALLY CORPORATION\",\n\t[3]byte{0, 160, 110}:   \"AUSTRON, INC.\",\n\t[3]byte{0, 160, 111}:   \"Color Sentinel Systems, LLC\",\n\t[3]byte{0, 160, 112}:   \"COASTCOM\",\n\t[3]byte{0, 160, 113}:   \"VIDEO LOTTERY TECHNOLOGIES,INC\",\n\t[3]byte{0, 160, 114}:   \"OVATION SYSTEMS LTD.\",\n\t[3]byte{0, 160, 115}:   \"COM21, INC.\",\n\t[3]byte{0, 160, 116}:   \"PERCEPTION TECHNOLOGY\",\n\t[3]byte{0, 160, 117}:   \"MICRON TECHNOLOGY, INC.\",\n\t[3]byte{0, 160, 118}:   \"CARDWARE LAB, INC.\",\n\t[3]byte{0, 160, 119}:   \"FUJITSU NEXION, INC.\",\n\t[3]byte{0, 160, 120}:   \"Marconi Communications\",\n\t[3]byte{0, 160, 121}:   \"ALPS ELECTRIC (USA), INC.\",\n\t[3]byte{0, 160, 122}:   \"ADVANCED PERIPHERALS TECHNOLOGIES, INC.\",\n\t[3]byte{0, 160, 123}:   \"DAWN COMPUTER INCORPORATION\",\n\t[3]byte{0, 160, 124}:   \"TONYANG NYLON CO., LTD.\",\n\t[3]byte{0, 160, 125}:   \"SEEQ TECHNOLOGY, INC.\",\n\t[3]byte{0, 160, 126}:   \"AVID TECHNOLOGY, INC.\",\n\t[3]byte{0, 160, 127}:   \"GSM-SYNTEL, LTD.\",\n\t[3]byte{0, 160, 128}:   \"Tattile SRL \",\n\t[3]byte{0, 160, 129}:   \"ALCATEL DATA NETWORKS\",\n\t[3]byte{0, 160, 130}:   \"NKT ELEKTRONIK A/S\",\n\t[3]byte{0, 160, 131}:   \"ASIMMPHONY TURKEY\",\n\t[3]byte{0, 160, 132}:   \"Dataplex Pty Ltd\",\n\t[3]byte{0, 160, 133}:   \"Private\",\n\t[3]byte{0, 160, 134}:   \"AMBER WAVE SYSTEMS, INC.\",\n\t[3]byte{0, 160, 135}:   \"Microsemi Corporation\",\n\t[3]byte{0, 160, 136}:   \"ESSENTIAL COMMUNICATIONS\",\n\t[3]byte{0, 160, 137}:   \"XPOINT TECHNOLOGIES, INC.\",\n\t[3]byte{0, 160, 138}:   \"BROOKTROUT TECHNOLOGY, INC.\",\n\t[3]byte{0, 160, 139}:   \"ASTON ELECTRONIC DESIGNS LTD.\",\n\t[3]byte{0, 160, 140}:   \"MultiMedia LANs, Inc.\",\n\t[3]byte{0, 160, 141}:   \"JACOMO CORPORATION\",\n\t[3]byte{0, 160, 142}:   \"Check Point Software Technologies\",\n\t[3]byte{0, 160, 143}:   \"DESKNET SYSTEMS, INC.\",\n\t[3]byte{0, 160, 144}:   \"TimeStep Corporation\",\n\t[3]byte{0, 160, 145}:   \"APPLICOM INTERNATIONAL\",\n\t[3]byte{0, 160, 146}:   \"H. BOLLMANN MANUFACTURERS, LTD\",\n\t[3]byte{0, 160, 147}:   \"B/E AEROSPACE, Inc.\",\n\t[3]byte{0, 160, 148}:   \"COMSAT CORPORATION\",\n\t[3]byte{0, 160, 149}:   \"ACACIA NETWORKS, INC.\",\n\t[3]byte{0, 160, 150}:   \"MITSUMI ELECTRIC CO.,LTD.\",\n\t[3]byte{0, 160, 151}:   \"JC INFORMATION SYSTEMS\",\n\t[3]byte{0, 160, 152}:   \"NetApp\",\n\t[3]byte{0, 160, 153}:   \"K-NET LTD.\",\n\t[3]byte{0, 160, 154}:   \"NIHON KOHDEN AMERICA\",\n\t[3]byte{0, 160, 155}:   \"QPSX COMMUNICATIONS, LTD.\",\n\t[3]byte{0, 160, 156}:   \"Xyplex, Inc.\",\n\t[3]byte{0, 160, 157}:   \"JOHNATHON FREEMAN TECHNOLOGIES\",\n\t[3]byte{0, 160, 158}:   \"ICTV\",\n\t[3]byte{0, 160, 159}:   \"COMMVISION CORP.\",\n\t[3]byte{0, 160, 160}:   \"COMPACT DATA, LTD.\",\n\t[3]byte{0, 160, 161}:   \"EPIC DATA INC.\",\n\t[3]byte{0, 160, 162}:   \"DIGICOM S.P.A.\",\n\t[3]byte{0, 160, 163}:   \"RELIABLE POWER METERS\",\n\t[3]byte{0, 160, 164}:   \"Oracle Corporation \",\n\t[3]byte{0, 160, 165}:   \"TEKNOR MICROSYSTEME, INC.\",\n\t[3]byte{0, 160, 166}:   \"M.I. SYSTEMS, K.K.\",\n\t[3]byte{0, 160, 167}:   \"VORAX CORPORATION\",\n\t[3]byte{0, 160, 168}:   \"RENEX CORPORATION\",\n\t[3]byte{0, 160, 169}:   \"NAVTEL COMMUNICATIONS INC.\",\n\t[3]byte{0, 160, 170}:   \"SPACELABS MEDICAL\",\n\t[3]byte{0, 160, 171}:   \"NETCS INFORMATIONSTECHNIK GMBH\",\n\t[3]byte{0, 160, 172}:   \"GILAT SATELLITE NETWORKS, LTD.\",\n\t[3]byte{0, 160, 173}:   \"MARCONI SPA\",\n\t[3]byte{0, 160, 174}:   \"NUCOM SYSTEMS, INC.\",\n\t[3]byte{0, 160, 175}:   \"WMS INDUSTRIES\",\n\t[3]byte{0, 160, 176}:   \"I-O DATA DEVICE,INC.\",\n\t[3]byte{0, 160, 177}:   \"FIRST VIRTUAL CORPORATION\",\n\t[3]byte{0, 160, 178}:   \"SHIMA SEIKI\",\n\t[3]byte{0, 160, 179}:   \"ZYKRONIX\",\n\t[3]byte{0, 160, 180}:   \"TEXAS MICROSYSTEMS, INC.\",\n\t[3]byte{0, 160, 181}:   \"3H TECHNOLOGY\",\n\t[3]byte{0, 160, 182}:   \"SANRITZ AUTOMATION CO., LTD.\",\n\t[3]byte{0, 160, 183}:   \"CORDANT, INC.\",\n\t[3]byte{0, 160, 184}:   \"NetApp\",\n\t[3]byte{0, 160, 185}:   \"EAGLE TECHNOLOGY, INC.\",\n\t[3]byte{0, 160, 186}:   \"PATTON ELECTRONICS CO.\",\n\t[3]byte{0, 160, 187}:   \"HILAN GMBH\",\n\t[3]byte{0, 160, 188}:   \"VIASAT, INCORPORATED\",\n\t[3]byte{0, 160, 189}:   \"I-TECH CORP.\",\n\t[3]byte{0, 160, 190}:   \"INTEGRATED CIRCUIT SYSTEMS, INC. COMMUNICATIONS GROUP\",\n\t[3]byte{0, 160, 191}:   \"WIRELESS DATA GROUP MOTOROLA\",\n\t[3]byte{0, 160, 192}:   \"DIGITAL LINK CORP.\",\n\t[3]byte{0, 160, 193}:   \"ORTIVUS MEDICAL AB\",\n\t[3]byte{0, 160, 194}:   \"R.A. SYSTEMS CO., LTD.\",\n\t[3]byte{0, 160, 195}:   \"UNICOMPUTER GMBH\",\n\t[3]byte{0, 160, 196}:   \"CRISTIE ELECTRONICS LTD.\",\n\t[3]byte{0, 160, 197}:   \"Zyxel Communications Corporation\",\n\t[3]byte{0, 160, 198}:   \"Qualcomm Inc.\",\n\t[3]byte{0, 160, 199}:   \"TADIRAN TELECOMMUNICATIONS\",\n\t[3]byte{0, 160, 200}:   \"Adtran Inc\",\n\t[3]byte{0, 160, 201}:   \"Intel Corporation\",\n\t[3]byte{0, 160, 202}:   \"FUJITSU DENSO LTD.\",\n\t[3]byte{0, 160, 203}:   \"ARK TELECOMMUNICATIONS, INC.\",\n\t[3]byte{0, 160, 204}:   \"LITE-ON COMMUNICATIONS, INC.\",\n\t[3]byte{0, 160, 205}:   \"DR. JOHANNES HEIDENHAIN GmbH\",\n\t[3]byte{0, 160, 206}:   \"Ecessa\",\n\t[3]byte{0, 160, 207}:   \"SOTAS, INC.\",\n\t[3]byte{0, 160, 208}:   \"TEN X TECHNOLOGY, INC.\",\n\t[3]byte{0, 160, 209}:   \"INVENTEC CORPORATION\",\n\t[3]byte{0, 160, 210}:   \"ALLIED TELESIS INTERNATIONAL CORPORATION\",\n\t[3]byte{0, 160, 211}:   \"INSTEM COMPUTER SYSTEMS, LTD.\",\n\t[3]byte{0, 160, 212}:   \"RADIOLAN,  INC.\",\n\t[3]byte{0, 160, 213}:   \"Sierra Wireless\",\n\t[3]byte{0, 160, 214}:   \"SBE, Inc.\",\n\t[3]byte{0, 160, 215}:   \"KASTEN CHASE APPLIED RESEARCH\",\n\t[3]byte{0, 160, 216}:   \"SPECTRA - TEK\",\n\t[3]byte{0, 160, 217}:   \"CONVEX COMPUTER CORPORATION\",\n\t[3]byte{0, 160, 218}:   \"INTEGRATED SYSTEMS Technology, Inc.\",\n\t[3]byte{0, 160, 219}:   \"FISHER & PAYKEL PRODUCTION\",\n\t[3]byte{0, 160, 220}:   \"O.N. ELECTRONIC CO., LTD.\",\n\t[3]byte{0, 160, 221}:   \"AZONIX CORPORATION\",\n\t[3]byte{0, 160, 222}:   \"YAMAHA CORPORATION\",\n\t[3]byte{0, 160, 223}:   \"STS TECHNOLOGIES, INC.\",\n\t[3]byte{0, 160, 224}:   \"TENNYSON TECHNOLOGIES PTY LTD\",\n\t[3]byte{0, 160, 225}:   \"WESTPORT RESEARCH ASSOCIATES, INC.\",\n\t[3]byte{0, 160, 226}:   \"Keisokugiken Corporation\",\n\t[3]byte{0, 160, 227}:   \"XKL SYSTEMS CORP.\",\n\t[3]byte{0, 160, 228}:   \"OPTIQUEST\",\n\t[3]byte{0, 160, 229}:   \"NHC COMMUNICATIONS\",\n\t[3]byte{0, 160, 230}:   \"DIALOGIC CORPORATION\",\n\t[3]byte{0, 160, 231}:   \"CENTRAL DATA CORPORATION\",\n\t[3]byte{0, 160, 232}:   \"REUTERS HOLDINGS PLC\",\n\t[3]byte{0, 160, 233}:   \"ELECTRONIC RETAILING SYSTEMS INTERNATIONAL\",\n\t[3]byte{0, 160, 234}:   \"ETHERCOM CORP.\",\n\t[3]byte{0, 160, 235}:   \"Encore Networks, Inc.\",\n\t[3]byte{0, 160, 236}:   \"TRANSMITTON LTD.\",\n\t[3]byte{0, 160, 237}:   \"Brooks Automation, Inc.\",\n\t[3]byte{0, 160, 238}:   \"NASHOBA NETWORKS\",\n\t[3]byte{0, 160, 239}:   \"LUCIDATA LTD.\",\n\t[3]byte{0, 160, 240}:   \"TORONTO MICROELECTRONICS INC.\",\n\t[3]byte{0, 160, 241}:   \"MTI\",\n\t[3]byte{0, 160, 242}:   \"INFOTEK COMMUNICATIONS, INC.\",\n\t[3]byte{0, 160, 243}:   \"STAUBLI\",\n\t[3]byte{0, 160, 244}:   \"GE\",\n\t[3]byte{0, 160, 245}:   \"RADGUARD LTD.\",\n\t[3]byte{0, 160, 246}:   \"AutoGas Systems Inc.\",\n\t[3]byte{0, 160, 247}:   \"V.I COMPUTER CORP.\",\n\t[3]byte{0, 160, 248}:   \"Zebra Technologies Inc\",\n\t[3]byte{0, 160, 249}:   \"BINTEC COMMUNICATIONS GMBH\",\n\t[3]byte{0, 160, 250}:   \"Marconi Communication GmbH\",\n\t[3]byte{0, 160, 251}:   \"TORAY ENGINEERING CO., LTD.\",\n\t[3]byte{0, 160, 252}:   \"IMAGE SCIENCES, INC.\",\n\t[3]byte{0, 160, 253}:   \"SCITEX DIGITAL PRINTING, INC.\",\n\t[3]byte{0, 160, 254}:   \"BOSTON TECHNOLOGY, INC.\",\n\t[3]byte{0, 160, 255}:   \"TELLABS OPERATIONS, INC.\",\n\t[3]byte{0, 161, 222}:   \"ShenZhen ShiHua Technology CO.,LTD\",\n\t[3]byte{0, 162, 137}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 162, 218}:   \"INAT GmbH\",\n\t[3]byte{0, 162, 238}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 162, 245}:   \"Guangzhou Yuanyun Network Technology Co.,Ltd\",\n\t[3]byte{0, 162, 255}:   \"abatec group AG\",\n\t[3]byte{0, 163, 142}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 163, 209}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 165, 9}:     \"WigWag Inc.\",\n\t[3]byte{0, 165, 191}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 166, 202}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 167, 66}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 167, 132}:   \"ITX security\",\n\t[3]byte{0, 170, 0}:     \"Intel Corporation\",\n\t[3]byte{0, 170, 1}:     \"Intel Corporation\",\n\t[3]byte{0, 170, 2}:     \"Intel Corporation\",\n\t[3]byte{0, 170, 60}:    \"OLIVETTI TELECOM SPA (OLTECO)\",\n\t[3]byte{0, 170, 110}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 170, 112}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{0, 171, 72}:    \"eero inc.\",\n\t[3]byte{0, 172, 224}:   \"ARRIS Group, Inc.\",\n\t[3]byte{0, 173, 36}:    \"D-Link International\",\n\t[3]byte{0, 173, 99}:    \"Dedicated Micros Malta LTD\",\n\t[3]byte{0, 173, 213}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{0, 174, 205}:   \"Pensando Systems\",\n\t[3]byte{0, 174, 250}:   \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{0, 175, 31}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 176, 9}:     \"Grass Valley, A Belden Brand\",\n\t[3]byte{0, 176, 23}:    \"InfoGear Technology Corp.\",\n\t[3]byte{0, 176, 25}:    \"UTC CCS\",\n\t[3]byte{0, 176, 28}:    \"Westport Technologies\",\n\t[3]byte{0, 176, 30}:    \"Rantic Labs, Inc.\",\n\t[3]byte{0, 176, 42}:    \"ORSYS GmbH\",\n\t[3]byte{0, 176, 45}:    \"ViaGate Technologies, Inc.\",\n\t[3]byte{0, 176, 51}:    \"OAO \\\"Izhevskiy radiozavod\\\"\",\n\t[3]byte{0, 176, 59}:    \"HiQ Networks\",\n\t[3]byte{0, 176, 72}:    \"Marconi Communications Inc.\",\n\t[3]byte{0, 176, 74}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 176, 82}:    \"Atheros Communications\",\n\t[3]byte{0, 176, 100}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 176, 105}:   \"Honewell Oy\",\n\t[3]byte{0, 176, 109}:   \"Jones Futurex Inc.\",\n\t[3]byte{0, 176, 128}:   \"Mannesmann Ipulsys B.V.\",\n\t[3]byte{0, 176, 134}:   \"LocSoft Limited\",\n\t[3]byte{0, 176, 142}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 176, 145}:   \"Transmeta Corp.\",\n\t[3]byte{0, 176, 148}:   \"Alaris, Inc.\",\n\t[3]byte{0, 176, 154}:   \"Morrow Technologies Corp.\",\n\t[3]byte{0, 176, 157}:   \"Point Grey Research Inc.\",\n\t[3]byte{0, 176, 172}:   \"SIAE-Microelettronica S.p.A.\",\n\t[3]byte{0, 176, 174}:   \"Symmetricom\",\n\t[3]byte{0, 176, 179}:   \"XSTREAMIS PLC\",\n\t[3]byte{0, 176, 194}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 176, 199}:   \"Tellabs Operations, Inc.\",\n\t[3]byte{0, 176, 206}:   \"Viveris Technologies\",\n\t[3]byte{0, 176, 208}:   \"Dell Inc.\",\n\t[3]byte{0, 176, 219}:   \"Nextcell, Inc.\",\n\t[3]byte{0, 176, 223}:   \"Starboard Storage Systems\",\n\t[3]byte{0, 176, 225}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 176, 231}:   \"British Federal Ltd.\",\n\t[3]byte{0, 176, 236}:   \"EACEM\",\n\t[3]byte{0, 176, 238}:   \"Ajile Systems, Inc.\",\n\t[3]byte{0, 176, 240}:   \"CALY NETWORKS\",\n\t[3]byte{0, 176, 245}:   \"NetWorth Technologies, Inc.\",\n\t[3]byte{0, 177, 227}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 179, 56}:    \"Kontron Asia Pacific Design Sdn. Bhd\",\n\t[3]byte{0, 179, 66}:    \"MacroSAN Technologies Co., Ltd.\",\n\t[3]byte{0, 179, 98}:    \"Apple, Inc.\",\n\t[3]byte{0, 180, 245}:   \"DongGuan Siyoto Electronics Co., Ltd       \",\n\t[3]byte{0, 181, 109}:   \"David Electronics Co., LTD.\",\n\t[3]byte{0, 181, 208}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 181, 214}:   \"Omnibit Inc.\",\n\t[3]byte{0, 182, 0}:     \"VOIM Co., Ltd.\",\n\t[3]byte{0, 182, 112}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 182, 159}:   \"Latch\",\n\t[3]byte{0, 183, 113}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 183, 141}:   \"Nanjing Shining Electric Automation Co., Ltd\",\n\t[3]byte{0, 183, 168}:   \"Heinzinger electronic GmbH\",\n\t[3]byte{0, 184, 16}:    \"Yichip\\u00a0Microelectronics (Hangzhou) Co.,Ltd\",\n\t[3]byte{0, 184, 179}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 184, 182}:   \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{0, 184, 194}:   \"Heights Telecom T ltd\",\n\t[3]byte{0, 185, 246}:   \"Shenzhen Super Rich Electronics Co.,Ltd\",\n\t[3]byte{0, 186, 192}:   \"Biometric Access Company\",\n\t[3]byte{0, 187, 1}:     \"OCTOTHORPE CORP.\",\n\t[3]byte{0, 187, 28}:    \"Huawei Device Co., Ltd.\",\n\t[3]byte{0, 187, 58}:    \"Amazon Technologies Inc.\",\n\t[3]byte{0, 187, 96}:    \"Intel Corporate\",\n\t[3]byte{0, 187, 142}:   \"HME Co., Ltd.\",\n\t[3]byte{0, 187, 193}:   \"CANON INC.\",\n\t[3]byte{0, 187, 240}:   \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 188, 96}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 189, 39}:    \"Exar Corp.\",\n\t[3]byte{0, 189, 58}:    \"Nokia Corporation\",\n\t[3]byte{0, 189, 130}:   \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{0, 190, 59}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 190, 117}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 190, 158}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{0, 190, 213}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{0, 191, 21}:    \"Genetec Inc.\",\n\t[3]byte{0, 191, 97}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 191, 119}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 192, 0}:     \"LANOPTICS, LTD.\",\n\t[3]byte{0, 192, 1}:     \"DIATEK PATIENT MANAGMENT\",\n\t[3]byte{0, 192, 2}:     \"Sercomm Corporation.\",\n\t[3]byte{0, 192, 3}:     \"GLOBALNET COMMUNICATIONS\",\n\t[3]byte{0, 192, 4}:     \"JAPAN BUSINESS COMPUTER CO.LTD\",\n\t[3]byte{0, 192, 5}:     \"LIVINGSTON ENTERPRISES, INC.\",\n\t[3]byte{0, 192, 6}:     \"NIPPON AVIONICS CO., LTD.\",\n\t[3]byte{0, 192, 7}:     \"PINNACLE DATA SYSTEMS, INC.\",\n\t[3]byte{0, 192, 8}:     \"SECO SRL\",\n\t[3]byte{0, 192, 9}:     \"KT TECHNOLOGY (S) PTE LTD\",\n\t[3]byte{0, 192, 10}:    \"MICRO CRAFT\",\n\t[3]byte{0, 192, 11}:    \"NORCONTROL A.S.\",\n\t[3]byte{0, 192, 12}:    \"RELIA TECHNOLGIES\",\n\t[3]byte{0, 192, 13}:    \"ADVANCED LOGIC RESEARCH, INC.\",\n\t[3]byte{0, 192, 14}:    \"PSITECH, INC.\",\n\t[3]byte{0, 192, 15}:    \"QUANTUM SOFTWARE SYSTEMS LTD.\",\n\t[3]byte{0, 192, 16}:    \"HIRAKAWA HEWTECH CORP.\",\n\t[3]byte{0, 192, 17}:    \"INTERACTIVE COMPUTING DEVICES\",\n\t[3]byte{0, 192, 18}:    \"NETSPAN CORPORATION\",\n\t[3]byte{0, 192, 19}:    \"NETRIX\",\n\t[3]byte{0, 192, 20}:    \"TELEMATICS CALABASAS INT'L,INC\",\n\t[3]byte{0, 192, 21}:    \"NEW MEDIA CORPORATION\",\n\t[3]byte{0, 192, 22}:    \"ELECTRONIC THEATRE CONTROLS\",\n\t[3]byte{0, 192, 23}:    \"NetAlly\",\n\t[3]byte{0, 192, 24}:    \"LANART CORPORATION\",\n\t[3]byte{0, 192, 25}:    \"LEAP TECHNOLOGY, INC.\",\n\t[3]byte{0, 192, 26}:    \"COROMETRICS MEDICAL SYSTEMS\",\n\t[3]byte{0, 192, 27}:    \"SOCKET COMMUNICATIONS, INC.\",\n\t[3]byte{0, 192, 28}:    \"INTERLINK COMMUNICATIONS LTD.\",\n\t[3]byte{0, 192, 29}:    \"GRAND JUNCTION NETWORKS, INC.\",\n\t[3]byte{0, 192, 30}:    \"LA FRANCAISE DES JEUX\",\n\t[3]byte{0, 192, 31}:    \"S.E.R.C.E.L.\",\n\t[3]byte{0, 192, 32}:    \"ARCO ELECTRONIC, CONTROL LTD.\",\n\t[3]byte{0, 192, 33}:    \"NETEXPRESS\",\n\t[3]byte{0, 192, 34}:    \"LASERMASTER TECHNOLOGIES, INC.\",\n\t[3]byte{0, 192, 35}:    \"TUTANKHAMON ELECTRONICS\",\n\t[3]byte{0, 192, 36}:    \"EDEN SISTEMAS DE COMPUTACAO SA\",\n\t[3]byte{0, 192, 37}:    \"DATAPRODUCTS CORPORATION\",\n\t[3]byte{0, 192, 38}:    \"LANS TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 192, 39}:    \"CIPHER SYSTEMS, INC.\",\n\t[3]byte{0, 192, 40}:    \"JASCO CORPORATION\",\n\t[3]byte{0, 192, 41}:    \"Nexans Deutschland GmbH - ANS\",\n\t[3]byte{0, 192, 42}:    \"OHKURA ELECTRIC CO., LTD.\",\n\t[3]byte{0, 192, 43}:    \"GERLOFF GESELLSCHAFT FUR\",\n\t[3]byte{0, 192, 44}:    \"CENTRUM COMMUNICATIONS, INC.\",\n\t[3]byte{0, 192, 45}:    \"FUJI PHOTO FILM CO., LTD.\",\n\t[3]byte{0, 192, 46}:    \"NETWIZ\",\n\t[3]byte{0, 192, 47}:    \"OKUMA CORPORATION\",\n\t[3]byte{0, 192, 48}:    \"INTEGRATED ENGINEERING B. V.\",\n\t[3]byte{0, 192, 49}:    \"DESIGN RESEARCH SYSTEMS, INC.\",\n\t[3]byte{0, 192, 50}:    \"I-CUBED LIMITED\",\n\t[3]byte{0, 192, 51}:    \"TELEBIT COMMUNICATIONS APS\",\n\t[3]byte{0, 192, 52}:    \"TRANSACTION NETWORK\",\n\t[3]byte{0, 192, 53}:    \"QUINTAR COMPANY\",\n\t[3]byte{0, 192, 54}:    \"RAYTECH ELECTRONIC CORP.\",\n\t[3]byte{0, 192, 55}:    \"DYNATEM\",\n\t[3]byte{0, 192, 56}:    \"RASTER IMAGE PROCESSING SYSTEM\",\n\t[3]byte{0, 192, 57}:    \"Teridian Semiconductor Corporation\",\n\t[3]byte{0, 192, 58}:    \"MEN-MIKRO ELEKTRONIK GMBH\",\n\t[3]byte{0, 192, 59}:    \"MULTIACCESS COMPUTING CORP.\",\n\t[3]byte{0, 192, 60}:    \"TOWER TECH S.R.L.\",\n\t[3]byte{0, 192, 61}:    \"WIESEMANN & THEIS GMBH\",\n\t[3]byte{0, 192, 62}:    \"FA. GEBR. HELLER GMBH\",\n\t[3]byte{0, 192, 63}:    \"STORES AUTOMATED SYSTEMS, INC.\",\n\t[3]byte{0, 192, 64}:    \"ECCI\",\n\t[3]byte{0, 192, 65}:    \"DIGITAL TRANSMISSION SYSTEMS\",\n\t[3]byte{0, 192, 66}:    \"DATALUX CORP.\",\n\t[3]byte{0, 192, 67}:    \"STRATACOM\",\n\t[3]byte{0, 192, 68}:    \"EMCOM CORPORATION\",\n\t[3]byte{0, 192, 69}:    \"ISOLATION SYSTEMS, LTD.\",\n\t[3]byte{0, 192, 70}:    \"Blue Chip Technology Ltd\",\n\t[3]byte{0, 192, 71}:    \"UNIMICRO SYSTEMS, INC.\",\n\t[3]byte{0, 192, 72}:    \"BAY TECHNICAL ASSOCIATES\",\n\t[3]byte{0, 192, 73}:    \"U.S. ROBOTICS, INC.\",\n\t[3]byte{0, 192, 74}:    \"GROUP 2000 AG\",\n\t[3]byte{0, 192, 75}:    \"CREATIVE MICROSYSTEMS\",\n\t[3]byte{0, 192, 76}:    \"DEPARTMENT OF FOREIGN AFFAIRS\",\n\t[3]byte{0, 192, 77}:    \"MITEC, INC.\",\n\t[3]byte{0, 192, 78}:    \"COMTROL CORPORATION\",\n\t[3]byte{0, 192, 79}:    \"Dell Inc.\",\n\t[3]byte{0, 192, 80}:    \"TOYO DENKI SEIZO K.K.\",\n\t[3]byte{0, 192, 81}:    \"ADVANCED INTEGRATION RESEARCH\",\n\t[3]byte{0, 192, 82}:    \"BURR-BROWN\",\n\t[3]byte{0, 192, 83}:    \"Aspect Software Inc.\",\n\t[3]byte{0, 192, 84}:    \"NETWORK PERIPHERALS, LTD.\",\n\t[3]byte{0, 192, 85}:    \"MODULAR COMPUTING TECHNOLOGIES\",\n\t[3]byte{0, 192, 86}:    \"SOMELEC\",\n\t[3]byte{0, 192, 87}:    \"MYCO ELECTRONICS\",\n\t[3]byte{0, 192, 88}:    \"DATAEXPERT CORP.\",\n\t[3]byte{0, 192, 89}:    \"DENSO CORPORATION\",\n\t[3]byte{0, 192, 90}:    \"SEMAPHORE COMMUNICATIONS CORP.\",\n\t[3]byte{0, 192, 91}:    \"NETWORKS NORTHWEST, INC.\",\n\t[3]byte{0, 192, 92}:    \"ELONEX PLC\",\n\t[3]byte{0, 192, 93}:    \"L&N TECHNOLOGIES\",\n\t[3]byte{0, 192, 94}:    \"VARI-LITE, INC.\",\n\t[3]byte{0, 192, 95}:    \"FINE-PAL COMPANY LIMITED\",\n\t[3]byte{0, 192, 96}:    \"ID SCANDINAVIA AS\",\n\t[3]byte{0, 192, 97}:    \"SOLECTEK CORPORATION\",\n\t[3]byte{0, 192, 98}:    \"IMPULSE TECHNOLOGY\",\n\t[3]byte{0, 192, 99}:    \"MORNING STAR TECHNOLOGIES, INC\",\n\t[3]byte{0, 192, 100}:   \"General Datacomm LLC\",\n\t[3]byte{0, 192, 101}:   \"SCOPE COMMUNICATIONS, INC.\",\n\t[3]byte{0, 192, 102}:   \"DOCUPOINT, INC.\",\n\t[3]byte{0, 192, 103}:   \"UNITED BARCODE INDUSTRIES\",\n\t[3]byte{0, 192, 104}:   \"HME Clear-Com LTD.\",\n\t[3]byte{0, 192, 105}:   \"Axxcelera Broadband Wireless\",\n\t[3]byte{0, 192, 106}:   \"ZAHNER-ELEKTRIK GMBH & CO. KG\",\n\t[3]byte{0, 192, 107}:   \"OSI PLUS CORPORATION\",\n\t[3]byte{0, 192, 108}:   \"SVEC COMPUTER CORP.\",\n\t[3]byte{0, 192, 109}:   \"BOCA RESEARCH, INC.\",\n\t[3]byte{0, 192, 110}:   \"HAFT TECHNOLOGY, INC.\",\n\t[3]byte{0, 192, 111}:   \"KOMATSU LTD.\",\n\t[3]byte{0, 192, 112}:   \"SECTRA SECURE-TRANSMISSION AB\",\n\t[3]byte{0, 192, 113}:   \"AREANEX COMMUNICATIONS, INC.\",\n\t[3]byte{0, 192, 114}:   \"KNX LTD.\",\n\t[3]byte{0, 192, 115}:   \"XEDIA CORPORATION\",\n\t[3]byte{0, 192, 116}:   \"TOYODA AUTOMATIC LOOM\",\n\t[3]byte{0, 192, 117}:   \"XANTE CORPORATION\",\n\t[3]byte{0, 192, 118}:   \"I-DATA INTERNATIONAL A-S\",\n\t[3]byte{0, 192, 119}:   \"DAEWOO TELECOM LTD.\",\n\t[3]byte{0, 192, 120}:   \"COMPUTER SYSTEMS ENGINEERING\",\n\t[3]byte{0, 192, 121}:   \"FONSYS CO.,LTD.\",\n\t[3]byte{0, 192, 122}:   \"PRIVA B.V.\",\n\t[3]byte{0, 192, 123}:   \"ASCEND COMMUNICATIONS, INC.\",\n\t[3]byte{0, 192, 124}:   \"HIGHTECH INFORMATION\",\n\t[3]byte{0, 192, 125}:   \"RISC DEVELOPMENTS LTD.\",\n\t[3]byte{0, 192, 126}:   \"KUBOTA CORPORATION ELECTRONIC\",\n\t[3]byte{0, 192, 127}:   \"NUPON COMPUTING CORP.\",\n\t[3]byte{0, 192, 128}:   \"NETSTAR, INC.\",\n\t[3]byte{0, 192, 129}:   \"METRODATA LTD.\",\n\t[3]byte{0, 192, 130}:   \"MOORE PRODUCTS CO.\",\n\t[3]byte{0, 192, 131}:   \"TRACE MOUNTAIN PRODUCTS, INC.\",\n\t[3]byte{0, 192, 132}:   \"DATA LINK CORP. LTD.\",\n\t[3]byte{0, 192, 133}:   \"ELECTRONICS FOR IMAGING, INC.\",\n\t[3]byte{0, 192, 134}:   \"THE LYNK CORPORATION\",\n\t[3]byte{0, 192, 135}:   \"UUNET TECHNOLOGIES, INC.\",\n\t[3]byte{0, 192, 136}:   \"EKF ELEKTRONIK GMBH\",\n\t[3]byte{0, 192, 137}:   \"TELINDUS DISTRIBUTION\",\n\t[3]byte{0, 192, 138}:   \"Lauterbach GmbH\",\n\t[3]byte{0, 192, 139}:   \"RISQ MODULAR SYSTEMS, INC.\",\n\t[3]byte{0, 192, 140}:   \"PERFORMANCE TECHNOLOGIES, INC.\",\n\t[3]byte{0, 192, 141}:   \"TRONIX PRODUCT DEVELOPMENT\",\n\t[3]byte{0, 192, 142}:   \"NETWORK INFORMATION TECHNOLOGY\",\n\t[3]byte{0, 192, 143}:   \"Panasonic Electric Works Co., Ltd.\",\n\t[3]byte{0, 192, 144}:   \"PRAIM S.R.L.\",\n\t[3]byte{0, 192, 145}:   \"JABIL CIRCUIT, INC.\",\n\t[3]byte{0, 192, 146}:   \"MENNEN MEDICAL INC.\",\n\t[3]byte{0, 192, 147}:   \"ALTA RESEARCH CORP.\",\n\t[3]byte{0, 192, 148}:   \"VMX INC.\",\n\t[3]byte{0, 192, 149}:   \"ZNYX Networks, Inc.\",\n\t[3]byte{0, 192, 150}:   \"TAMURA CORPORATION\",\n\t[3]byte{0, 192, 151}:   \"ARCHIPEL SA\",\n\t[3]byte{0, 192, 152}:   \"CHUNTEX ELECTRONIC CO., LTD.\",\n\t[3]byte{0, 192, 153}:   \"YOSHIKI INDUSTRIAL CO.,LTD.\",\n\t[3]byte{0, 192, 154}:   \"PHOTONICS CORPORATION\",\n\t[3]byte{0, 192, 155}:   \"RELIANCE COMM/TEC, R-TEC\",\n\t[3]byte{0, 192, 156}:   \"HIOKI E.E. CORPORATION\",\n\t[3]byte{0, 192, 157}:   \"DISTRIBUTED SYSTEMS INT'L, INC\",\n\t[3]byte{0, 192, 158}:   \"CACHE COMPUTERS, INC.\",\n\t[3]byte{0, 192, 159}:   \"Quanta Computer Inc.\",\n\t[3]byte{0, 192, 160}:   \"ADVANCE MICRO RESEARCH, INC.\",\n\t[3]byte{0, 192, 161}:   \"TOKYO DENSHI SEKEI CO.\",\n\t[3]byte{0, 192, 162}:   \"INTERMEDIUM A/S\",\n\t[3]byte{0, 192, 163}:   \"DUAL ENTERPRISES CORPORATION\",\n\t[3]byte{0, 192, 164}:   \"UNIGRAF OY\",\n\t[3]byte{0, 192, 165}:   \"DICKENS DATA SYSTEMS\",\n\t[3]byte{0, 192, 166}:   \"EXICOM AUSTRALIA PTY. LTD\",\n\t[3]byte{0, 192, 167}:   \"SEEL LTD.\",\n\t[3]byte{0, 192, 168}:   \"GVC CORPORATION\",\n\t[3]byte{0, 192, 169}:   \"BARRON MCCANN LTD.\",\n\t[3]byte{0, 192, 170}:   \"SILICON VALLEY COMPUTER\",\n\t[3]byte{0, 192, 171}:   \"Telco Systems, Inc. \",\n\t[3]byte{0, 192, 172}:   \"GAMBIT COMPUTER COMMUNICATIONS\",\n\t[3]byte{0, 192, 173}:   \"MARBEN COMMUNICATION SYSTEMS\",\n\t[3]byte{0, 192, 174}:   \"TOWERCOM CO. INC. DBA PC HOUSE\",\n\t[3]byte{0, 192, 175}:   \"TEKLOGIX INC.\",\n\t[3]byte{0, 192, 176}:   \"GCC TECHNOLOGIES,INC.\",\n\t[3]byte{0, 192, 177}:   \"GENIUS NET CO.\",\n\t[3]byte{0, 192, 178}:   \"NORAND CORPORATION\",\n\t[3]byte{0, 192, 179}:   \"COMSTAT DATACOMM CORPORATION\",\n\t[3]byte{0, 192, 180}:   \"MYSON TECHNOLOGY, INC.\",\n\t[3]byte{0, 192, 181}:   \"CORPORATE NETWORK SYSTEMS,INC.\",\n\t[3]byte{0, 192, 182}:   \"HVE, Inc. \",\n\t[3]byte{0, 192, 183}:   \"AMERICAN POWER CONVERSION CORP\",\n\t[3]byte{0, 192, 184}:   \"FRASER'S HILL LTD.\",\n\t[3]byte{0, 192, 185}:   \"FUNK SOFTWARE, INC.\",\n\t[3]byte{0, 192, 186}:   \"NETVANTAGE\",\n\t[3]byte{0, 192, 187}:   \"FORVAL CREATIVE, INC.\",\n\t[3]byte{0, 192, 188}:   \"TELECOM AUSTRALIA/CSSC\",\n\t[3]byte{0, 192, 189}:   \"INEX TECHNOLOGIES, INC.\",\n\t[3]byte{0, 192, 190}:   \"ALCATEL - SEL\",\n\t[3]byte{0, 192, 191}:   \"TECHNOLOGY CONCEPTS, LTD.\",\n\t[3]byte{0, 192, 192}:   \"SHORE MICROSYSTEMS, INC.\",\n\t[3]byte{0, 192, 193}:   \"QUAD/GRAPHICS, INC.\",\n\t[3]byte{0, 192, 194}:   \"INFINITE NETWORKS LTD.\",\n\t[3]byte{0, 192, 195}:   \"ACUSON COMPUTED SONOGRAPHY\",\n\t[3]byte{0, 192, 196}:   \"COMPUTER OPERATIONAL\",\n\t[3]byte{0, 192, 197}:   \"SID INFORMATICA\",\n\t[3]byte{0, 192, 198}:   \"PERSONAL MEDIA CORP.\",\n\t[3]byte{0, 192, 199}:   \"SPARKTRUM MICROSYSTEMS, INC.\",\n\t[3]byte{0, 192, 200}:   \"MICRO BYTE PTY. LTD.\",\n\t[3]byte{0, 192, 201}:   \"ELSAG BAILEY PROCESS\",\n\t[3]byte{0, 192, 202}:   \"ALFA, INC.\",\n\t[3]byte{0, 192, 203}:   \"CONTROL TECHNOLOGY CORPORATION\",\n\t[3]byte{0, 192, 204}:   \"TELESCIENCES CO SYSTEMS, INC.\",\n\t[3]byte{0, 192, 205}:   \"COMELTA, S.A.\",\n\t[3]byte{0, 192, 206}:   \"CEI SYSTEMS & ENGINEERING PTE\",\n\t[3]byte{0, 192, 207}:   \"IMATRAN VOIMA OY\",\n\t[3]byte{0, 192, 208}:   \"RATOC SYSTEM INC.\",\n\t[3]byte{0, 192, 209}:   \"COMTREE TECHNOLOGY CORPORATION\",\n\t[3]byte{0, 192, 210}:   \"SYNTELLECT, INC.\",\n\t[3]byte{0, 192, 211}:   \"OLYMPUS IMAGE SYSTEMS, INC.\",\n\t[3]byte{0, 192, 212}:   \"AXON NETWORKS, INC.\",\n\t[3]byte{0, 192, 213}:   \"Werbeagentur Jürgen Siebert\",\n\t[3]byte{0, 192, 214}:   \"J1 SYSTEMS, INC.\",\n\t[3]byte{0, 192, 215}:   \"TAIWAN TRADING CENTER DBA\",\n\t[3]byte{0, 192, 216}:   \"UNIVERSAL DATA SYSTEMS\",\n\t[3]byte{0, 192, 217}:   \"QUINTE NETWORK CONFIDENTIALITY\",\n\t[3]byte{0, 192, 218}:   \"NICE SYSTEMS LTD.\",\n\t[3]byte{0, 192, 219}:   \"IPC CORPORATION (PTE) LTD.\",\n\t[3]byte{0, 192, 220}:   \"EOS TECHNOLOGIES, INC.\",\n\t[3]byte{0, 192, 221}:   \"QLogic Corporation\",\n\t[3]byte{0, 192, 222}:   \"ZCOMM, INC.\",\n\t[3]byte{0, 192, 223}:   \"KYE Systems Corp.\",\n\t[3]byte{0, 192, 224}:   \"DSC COMMUNICATION CORP.\",\n\t[3]byte{0, 192, 225}:   \"SONIC SOLUTIONS\",\n\t[3]byte{0, 192, 226}:   \"CALCOMP, INC.\",\n\t[3]byte{0, 192, 227}:   \"OSITECH COMMUNICATIONS, INC.\",\n\t[3]byte{0, 192, 228}:   \"SIEMENS BUILDING\",\n\t[3]byte{0, 192, 229}:   \"GESPAC, S.A.\",\n\t[3]byte{0, 192, 230}:   \"Verilink Corporation\",\n\t[3]byte{0, 192, 231}:   \"FIBERDATA AB\",\n\t[3]byte{0, 192, 232}:   \"PLEXCOM, INC.\",\n\t[3]byte{0, 192, 233}:   \"OAK SOLUTIONS, LTD.\",\n\t[3]byte{0, 192, 234}:   \"ARRAY TECHNOLOGY LTD.\",\n\t[3]byte{0, 192, 235}:   \"SEH COMPUTERTECHNIK GMBH\",\n\t[3]byte{0, 192, 236}:   \"DAUPHIN TECHNOLOGY\",\n\t[3]byte{0, 192, 237}:   \"US ARMY ELECTRONIC\",\n\t[3]byte{0, 192, 238}:   \"KYOCERA Display Corporation\",\n\t[3]byte{0, 192, 239}:   \"ABIT CORPORATION\",\n\t[3]byte{0, 192, 240}:   \"Kingston Technology Company, Inc.\",\n\t[3]byte{0, 192, 241}:   \"SHINKO ELECTRIC CO., LTD.\",\n\t[3]byte{0, 192, 242}:   \"TRANSITION NETWORKS\",\n\t[3]byte{0, 192, 243}:   \"NETWORK COMMUNICATIONS CORP.\",\n\t[3]byte{0, 192, 244}:   \"INTERLINK SYSTEM CO., LTD.\",\n\t[3]byte{0, 192, 245}:   \"METACOMP, INC.\",\n\t[3]byte{0, 192, 246}:   \"CELAN TECHNOLOGY INC.\",\n\t[3]byte{0, 192, 247}:   \"ENGAGE COMMUNICATION, INC.\",\n\t[3]byte{0, 192, 248}:   \"ABOUT COMPUTING INC.\",\n\t[3]byte{0, 192, 249}:   \"Artesyn Embedded Technologies\",\n\t[3]byte{0, 192, 250}:   \"CANARY COMMUNICATIONS, INC.\",\n\t[3]byte{0, 192, 251}:   \"ADVANCED TECHNOLOGY LABS\",\n\t[3]byte{0, 192, 252}:   \"ELASTIC REALITY, INC.\",\n\t[3]byte{0, 192, 253}:   \"PROSUM\",\n\t[3]byte{0, 192, 254}:   \"APTEC COMPUTER SYSTEMS, INC.\",\n\t[3]byte{0, 192, 255}:   \"Seagate Cloud Systems Inc\",\n\t[3]byte{0, 193, 79}:    \"DDL Co,.ltd.\",\n\t[3]byte{0, 193, 100}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 193, 177}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 194, 198}:   \"Intel Corporate\",\n\t[3]byte{0, 195, 244}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 197, 219}:   \"Datatech Sistemas Digitales Avanzados SL\",\n\t[3]byte{0, 198, 16}:    \"Apple, Inc.\",\n\t[3]byte{0, 200, 139}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 202, 229}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 203, 0}:     \"Private\",\n\t[3]byte{0, 203, 81}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{0, 203, 180}:   \"SHENZHEN ATEKO PHOTOELECTRICITY CO.,LTD\",\n\t[3]byte{0, 203, 189}:   \"Cambridge Broadband Networks Group\",\n\t[3]byte{0, 204, 63}:    \"Universal Electronics, Inc.\",\n\t[3]byte{0, 204, 252}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 205, 144}:   \"MAS Elektronik AG\",\n\t[3]byte{0, 205, 254}:   \"Apple, Inc.\",\n\t[3]byte{0, 207, 28}:    \"Communication Machinery Corporation\",\n\t[3]byte{0, 207, 192}:   \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{0, 208, 0}:     \"FERRAN SCIENTIFIC, INC.\",\n\t[3]byte{0, 208, 1}:     \"VST TECHNOLOGIES, INC.\",\n\t[3]byte{0, 208, 2}:     \"DITECH CORPORATION\",\n\t[3]byte{0, 208, 3}:     \"COMDA ENTERPRISES CORP.\",\n\t[3]byte{0, 208, 4}:     \"PENTACOM LTD.\",\n\t[3]byte{0, 208, 5}:     \"ZHS ZEITMANAGEMENTSYSTEME\",\n\t[3]byte{0, 208, 6}:     \"Cisco Systems, Inc\",\n\t[3]byte{0, 208, 7}:     \"MIC ASSOCIATES, INC.\",\n\t[3]byte{0, 208, 8}:     \"MACTELL CORPORATION\",\n\t[3]byte{0, 208, 9}:     \"HSING TECH. ENTERPRISE CO. LTD\",\n\t[3]byte{0, 208, 10}:    \"LANACCESS TELECOM S.A.\",\n\t[3]byte{0, 208, 11}:    \"RHK TECHNOLOGY, INC.\",\n\t[3]byte{0, 208, 12}:    \"SNIJDER MICRO SYSTEMS\",\n\t[3]byte{0, 208, 13}:    \"MICROMERITICS INSTRUMENT\",\n\t[3]byte{0, 208, 14}:    \"PLURIS, INC.\",\n\t[3]byte{0, 208, 15}:    \"SPEECH DESIGN GMBH\",\n\t[3]byte{0, 208, 16}:    \"CONVERGENT NETWORKS, INC.\",\n\t[3]byte{0, 208, 17}:    \"PRISM VIDEO, INC.\",\n\t[3]byte{0, 208, 18}:    \"GATEWORKS CORP.\",\n\t[3]byte{0, 208, 19}:    \"PRIMEX AEROSPACE COMPANY\",\n\t[3]byte{0, 208, 20}:    \"ROOT, INC.\",\n\t[3]byte{0, 208, 21}:    \"UNIVEX MICROTECHNOLOGY CORP.\",\n\t[3]byte{0, 208, 22}:    \"SCM MICROSYSTEMS, INC.\",\n\t[3]byte{0, 208, 23}:    \"SYNTECH INFORMATION CO., LTD.\",\n\t[3]byte{0, 208, 24}:    \"QWES. COM, INC.\",\n\t[3]byte{0, 208, 25}:    \"DAINIPPON SCREEN CORPORATE\",\n\t[3]byte{0, 208, 26}:    \"URMET  TLC S.P.A.\",\n\t[3]byte{0, 208, 27}:    \"MIMAKI ENGINEERING CO., LTD.\",\n\t[3]byte{0, 208, 28}:    \"SBS TECHNOLOGIES,\",\n\t[3]byte{0, 208, 29}:    \"FURUNO ELECTRIC CO., LTD.\",\n\t[3]byte{0, 208, 30}:    \"PINGTEL CORP.\",\n\t[3]byte{0, 208, 31}:    \"Senetas Corporation Ltd\",\n\t[3]byte{0, 208, 32}:    \"AIM SYSTEM, INC.\",\n\t[3]byte{0, 208, 33}:    \"REGENT ELECTRONICS CORP.\",\n\t[3]byte{0, 208, 34}:    \"INCREDIBLE TECHNOLOGIES, INC.\",\n\t[3]byte{0, 208, 35}:    \"INFORTREND TECHNOLOGY, INC.\",\n\t[3]byte{0, 208, 36}:    \"Cognex Corporation\",\n\t[3]byte{0, 208, 37}:    \"XROSSTECH, INC.\",\n\t[3]byte{0, 208, 38}:    \"HIRSCHMANN AUSTRIA GMBH\",\n\t[3]byte{0, 208, 39}:    \"APPLIED AUTOMATION, INC.\",\n\t[3]byte{0, 208, 40}:    \"Harmonic, Inc\",\n\t[3]byte{0, 208, 41}:    \"WAKEFERN FOOD CORPORATION\",\n\t[3]byte{0, 208, 42}:    \"Voxent Systems Ltd.\",\n\t[3]byte{0, 208, 43}:    \"JETCELL, INC.\",\n\t[3]byte{0, 208, 44}:    \"CAMPBELL SCIENTIFIC, INC.\",\n\t[3]byte{0, 208, 45}:    \"Resideo\",\n\t[3]byte{0, 208, 46}:    \"COMMUNICATION AUTOMATION CORP.\",\n\t[3]byte{0, 208, 47}:    \"VLSI TECHNOLOGY INC.\",\n\t[3]byte{0, 208, 48}:    \"Safetran Systems Corp\",\n\t[3]byte{0, 208, 49}:    \"INDUSTRIAL LOGIC CORPORATION\",\n\t[3]byte{0, 208, 50}:    \"YANO ELECTRIC CO., LTD.\",\n\t[3]byte{0, 208, 51}:    \"DALIAN DAXIAN NETWORK\",\n\t[3]byte{0, 208, 52}:    \"ORMEC SYSTEMS CORP.\",\n\t[3]byte{0, 208, 53}:    \"BEHAVIOR TECH. COMPUTER CORP.\",\n\t[3]byte{0, 208, 54}:    \"TECHNOLOGY ATLANTA CORP.\",\n\t[3]byte{0, 208, 55}:    \"ARRIS Group, Inc.\",\n\t[3]byte{0, 208, 56}:    \"FIVEMERE, LTD.\",\n\t[3]byte{0, 208, 57}:    \"UTILICOM, INC.\",\n\t[3]byte{0, 208, 58}:    \"ZONEWORX, INC.\",\n\t[3]byte{0, 208, 59}:    \"VISION PRODUCTS PTY. LTD.\",\n\t[3]byte{0, 208, 60}:    \"Vieo, Inc.\",\n\t[3]byte{0, 208, 61}:    \"GALILEO TECHNOLOGY, LTD.\",\n\t[3]byte{0, 208, 62}:    \"ROCKETCHIPS, INC.\",\n\t[3]byte{0, 208, 63}:    \"AMERICAN COMMUNICATION\",\n\t[3]byte{0, 208, 64}:    \"SYSMATE CO., LTD.\",\n\t[3]byte{0, 208, 65}:    \"AMIGO TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 208, 66}:    \"MAHLO GMBH & CO. UG\",\n\t[3]byte{0, 208, 67}:    \"ZONAL RETAIL DATA SYSTEMS\",\n\t[3]byte{0, 208, 68}:    \"ALIDIAN NETWORKS, INC.\",\n\t[3]byte{0, 208, 69}:    \"KVASER AB\",\n\t[3]byte{0, 208, 70}:    \"DOLBY LABORATORIES, INC.\",\n\t[3]byte{0, 208, 71}:    \"XN TECHNOLOGIES\",\n\t[3]byte{0, 208, 72}:    \"ECTON, INC.\",\n\t[3]byte{0, 208, 73}:    \"IMPRESSTEK CO., LTD.\",\n\t[3]byte{0, 208, 74}:    \"PRESENCE TECHNOLOGY GMBH\",\n\t[3]byte{0, 208, 75}:    \"LA CIE GROUP S.A.\",\n\t[3]byte{0, 208, 76}:    \"EUROTEL TELECOM LTD.\",\n\t[3]byte{0, 208, 77}:    \"DIV OF RESEARCH & STATISTICS\",\n\t[3]byte{0, 208, 78}:    \"LOGIBAG\",\n\t[3]byte{0, 208, 79}:    \"BITRONICS, INC.\",\n\t[3]byte{0, 208, 80}:    \"Iskratel d.o.o.\",\n\t[3]byte{0, 208, 81}:    \"O2 MICRO, INC.\",\n\t[3]byte{0, 208, 82}:    \"ASCEND COMMUNICATIONS, INC.\",\n\t[3]byte{0, 208, 83}:    \"CONNECTED SYSTEMS\",\n\t[3]byte{0, 208, 84}:    \"SAS INSTITUTE INC.\",\n\t[3]byte{0, 208, 85}:    \"KATHREIN-WERKE KG\",\n\t[3]byte{0, 208, 86}:    \"SOMAT CORPORATION\",\n\t[3]byte{0, 208, 87}:    \"ULTRAK, INC.\",\n\t[3]byte{0, 208, 88}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 208, 89}:    \"AMBIT MICROSYSTEMS CORP.\",\n\t[3]byte{0, 208, 90}:    \"SYMBIONICS, LTD.\",\n\t[3]byte{0, 208, 91}:    \"ACROLOOP MOTION CONTROL\",\n\t[3]byte{0, 208, 92}:    \"KATHREIN TechnoTrend GmbH\",\n\t[3]byte{0, 208, 93}:    \"INTELLIWORXX, INC.\",\n\t[3]byte{0, 208, 94}:    \"STRATABEAM TECHNOLOGY, INC.\",\n\t[3]byte{0, 208, 95}:    \"VALCOM, INC.\",\n\t[3]byte{0, 208, 96}:    \"Panasonic Europe Ltd.\",\n\t[3]byte{0, 208, 97}:    \"TREMON ENTERPRISES CO., LTD.\",\n\t[3]byte{0, 208, 98}:    \"DIGIGRAM\",\n\t[3]byte{0, 208, 99}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 208, 100}:   \"MULTITEL\",\n\t[3]byte{0, 208, 101}:   \"TOKO ELECTRIC\",\n\t[3]byte{0, 208, 102}:   \"WINTRISS ENGINEERING CORP.\",\n\t[3]byte{0, 208, 103}:   \"CAMPIO COMMUNICATIONS\",\n\t[3]byte{0, 208, 104}:   \"IWILL CORPORATION\",\n\t[3]byte{0, 208, 105}:   \"TECHNOLOGIC SYSTEMS\",\n\t[3]byte{0, 208, 106}:   \"LINKUP SYSTEMS CORPORATION\",\n\t[3]byte{0, 208, 107}:   \"SR TELECOM INC.\",\n\t[3]byte{0, 208, 108}:   \"SHAREWAVE, INC.\",\n\t[3]byte{0, 208, 109}:   \"ACRISON, INC.\",\n\t[3]byte{0, 208, 110}:   \"TRENDVIEW RECORDERS LTD.\",\n\t[3]byte{0, 208, 111}:   \"KMC CONTROLS\",\n\t[3]byte{0, 208, 112}:   \"LONG WELL ELECTRONICS CORP.\",\n\t[3]byte{0, 208, 113}:   \"ECHELON CORP.\",\n\t[3]byte{0, 208, 114}:   \"BROADLOGIC\",\n\t[3]byte{0, 208, 115}:   \"ACN ADVANCED COMMUNICATIONS\",\n\t[3]byte{0, 208, 116}:   \"TAQUA SYSTEMS, INC.\",\n\t[3]byte{0, 208, 117}:   \"ALARIS MEDICAL SYSTEMS, INC.\",\n\t[3]byte{0, 208, 118}:   \"Bank of America\",\n\t[3]byte{0, 208, 119}:   \"LUCENT TECHNOLOGIES\",\n\t[3]byte{0, 208, 120}:   \"Eltex of Sweden AB\",\n\t[3]byte{0, 208, 121}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 208, 122}:   \"AMAQUEST COMPUTER CORP.\",\n\t[3]byte{0, 208, 123}:   \"COMCAM INTERNATIONAL INC\",\n\t[3]byte{0, 208, 124}:   \"KOYO ELECTRONICS INC. CO.,LTD.\",\n\t[3]byte{0, 208, 125}:   \"COSINE COMMUNICATIONS\",\n\t[3]byte{0, 208, 126}:   \"KEYCORP LTD.\",\n\t[3]byte{0, 208, 127}:   \"STRATEGY & TECHNOLOGY, LIMITED\",\n\t[3]byte{0, 208, 128}:   \"EXABYTE CORPORATION\",\n\t[3]byte{0, 208, 129}:   \"RTD Embedded Technologies, Inc.\",\n\t[3]byte{0, 208, 130}:   \"IOWAVE INC.\",\n\t[3]byte{0, 208, 131}:   \"INVERTEX, INC.\",\n\t[3]byte{0, 208, 132}:   \"NEXCOMM SYSTEMS, INC.\",\n\t[3]byte{0, 208, 133}:   \"OTIS ELEVATOR COMPANY\",\n\t[3]byte{0, 208, 134}:   \"FOVEON, INC.\",\n\t[3]byte{0, 208, 135}:   \"MICROFIRST INC.\",\n\t[3]byte{0, 208, 136}:   \"ARRIS Group, Inc.\",\n\t[3]byte{0, 208, 137}:   \"DYNACOLOR, INC.\",\n\t[3]byte{0, 208, 138}:   \"PHOTRON USA\",\n\t[3]byte{0, 208, 139}:   \"ADVA Optical Networking Ltd.\",\n\t[3]byte{0, 208, 140}:   \"GENOA TECHNOLOGY, INC.\",\n\t[3]byte{0, 208, 141}:   \"PHOENIX GROUP, INC.\",\n\t[3]byte{0, 208, 142}:   \"Grass Valley, A Belden Brand\",\n\t[3]byte{0, 208, 143}:   \"ARDENT TECHNOLOGIES, INC.\",\n\t[3]byte{0, 208, 144}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 208, 145}:   \"SMARTSAN SYSTEMS, INC.\",\n\t[3]byte{0, 208, 146}:   \"GLENAYRE WESTERN MULTIPLEX\",\n\t[3]byte{0, 208, 147}:   \"TQ - COMPONENTS GMBH\",\n\t[3]byte{0, 208, 148}:   \"Seeion Control LLC\",\n\t[3]byte{0, 208, 149}:   \"Alcatel-Lucent Enterprise\",\n\t[3]byte{0, 208, 150}:   \"3COM EUROPE LTD\",\n\t[3]byte{0, 208, 151}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 208, 152}:   \"Photon Dynamics Canada Inc.\",\n\t[3]byte{0, 208, 153}:   \"Elcard Wireless Systems Oy\",\n\t[3]byte{0, 208, 154}:   \"FILANET CORPORATION\",\n\t[3]byte{0, 208, 155}:   \"SPECTEL LTD.\",\n\t[3]byte{0, 208, 156}:   \"KAPADIA COMMUNICATIONS\",\n\t[3]byte{0, 208, 157}:   \"VERIS INDUSTRIES\",\n\t[3]byte{0, 208, 158}:   \"2Wire Inc\",\n\t[3]byte{0, 208, 159}:   \"NOVTEK TEST SYSTEMS\",\n\t[3]byte{0, 208, 160}:   \"MIPS DENMARK\",\n\t[3]byte{0, 208, 161}:   \"OSKAR VIERLING GMBH + CO. KG\",\n\t[3]byte{0, 208, 162}:   \"INTEGRATED DEVICE\",\n\t[3]byte{0, 208, 163}:   \"VOCAL DATA, INC.\",\n\t[3]byte{0, 208, 164}:   \"ALANTRO COMMUNICATIONS\",\n\t[3]byte{0, 208, 165}:   \"AMERICAN ARIUM\",\n\t[3]byte{0, 208, 166}:   \"LANBIRD TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 208, 167}:   \"TOKYO SOKKI KENKYUJO CO., LTD.\",\n\t[3]byte{0, 208, 168}:   \"NETWORK ENGINES, INC.\",\n\t[3]byte{0, 208, 169}:   \"SHINANO KENSHI CO., LTD.\",\n\t[3]byte{0, 208, 170}:   \"CHASE COMMUNICATIONS\",\n\t[3]byte{0, 208, 171}:   \"DELTAKABEL TELECOM CV\",\n\t[3]byte{0, 208, 172}:   \"Commscope, Inc\",\n\t[3]byte{0, 208, 173}:   \"TL INDUSTRIES\",\n\t[3]byte{0, 208, 174}:   \"ORESIS COMMUNICATIONS, INC.\",\n\t[3]byte{0, 208, 175}:   \"CUTLER-HAMMER, INC.\",\n\t[3]byte{0, 208, 176}:   \"BITSWITCH LTD.\",\n\t[3]byte{0, 208, 177}:   \"OMEGA ELECTRONICS SA\",\n\t[3]byte{0, 208, 178}:   \"Xiotech Corporation\",\n\t[3]byte{0, 208, 179}:   \"DRS Technologies Canada Ltd\",\n\t[3]byte{0, 208, 180}:   \"KATSUJIMA CO., LTD.\",\n\t[3]byte{0, 208, 181}:   \"IPricot formerly DotCom\",\n\t[3]byte{0, 208, 182}:   \"CRESCENT NETWORKS, INC.\",\n\t[3]byte{0, 208, 183}:   \"Intel Corporation\",\n\t[3]byte{0, 208, 184}:   \"Iomega Corporation\",\n\t[3]byte{0, 208, 185}:   \"MICROTEK INTERNATIONAL, INC.\",\n\t[3]byte{0, 208, 186}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 208, 187}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 208, 188}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 208, 189}:   \"Lattice Semiconductor Corp. (LPA)\",\n\t[3]byte{0, 208, 190}:   \"EMUTEC INC.\",\n\t[3]byte{0, 208, 191}:   \"PIVOTAL TECHNOLOGIES\",\n\t[3]byte{0, 208, 192}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 208, 193}:   \"HARMONIC DATA SYSTEMS, LTD.\",\n\t[3]byte{0, 208, 194}:   \"BALTHAZAR TECHNOLOGY AB\",\n\t[3]byte{0, 208, 195}:   \"VIVID TECHNOLOGY PTE, LTD.\",\n\t[3]byte{0, 208, 196}:   \"TERATECH CORPORATION\",\n\t[3]byte{0, 208, 197}:   \"COMPUTATIONAL SYSTEMS, INC.\",\n\t[3]byte{0, 208, 198}:   \"THOMAS & BETTS CORP.\",\n\t[3]byte{0, 208, 199}:   \"PATHWAY, INC.\",\n\t[3]byte{0, 208, 200}:   \"Prevas A/S\",\n\t[3]byte{0, 208, 201}:   \"ADVANTECH CO., LTD.\",\n\t[3]byte{0, 208, 202}:   \"Intrinsyc Software International Inc.\",\n\t[3]byte{0, 208, 203}:   \"DASAN CO., LTD.\",\n\t[3]byte{0, 208, 204}:   \"TECHNOLOGIES LYRE INC.\",\n\t[3]byte{0, 208, 205}:   \"ATAN TECHNOLOGY INC.\",\n\t[3]byte{0, 208, 206}:   \"iSystem Labs \",\n\t[3]byte{0, 208, 207}:   \"MORETON BAY\",\n\t[3]byte{0, 208, 208}:   \"ZHONGXING TELECOM LTD.\",\n\t[3]byte{0, 208, 209}:   \"Sycamore Networks\",\n\t[3]byte{0, 208, 210}:   \"EPILOG CORPORATION\",\n\t[3]byte{0, 208, 211}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 208, 212}:   \"V-BITS, INC.\",\n\t[3]byte{0, 208, 213}:   \"GRUNDIG AG\",\n\t[3]byte{0, 208, 214}:   \"AETHRA TELECOMUNICAZIONI\",\n\t[3]byte{0, 208, 215}:   \"B2C2, INC.\",\n\t[3]byte{0, 208, 216}:   \"3COM\",\n\t[3]byte{0, 208, 217}:   \"DEDICATED MICROCOMPUTERS\",\n\t[3]byte{0, 208, 218}:   \"TAICOM DATA SYSTEMS CO., LTD.\",\n\t[3]byte{0, 208, 219}:   \"MCQUAY INTERNATIONAL\",\n\t[3]byte{0, 208, 220}:   \"MODULAR MINING SYSTEMS, INC.\",\n\t[3]byte{0, 208, 221}:   \"SUNRISE TELECOM, INC.\",\n\t[3]byte{0, 208, 222}:   \"PHILIPS MULTIMEDIA NETWORK\",\n\t[3]byte{0, 208, 223}:   \"KUZUMI ELECTRONICS, INC.\",\n\t[3]byte{0, 208, 224}:   \"DOOIN ELECTRONICS CO.\",\n\t[3]byte{0, 208, 225}:   \"AVIONITEK ISRAEL INC.\",\n\t[3]byte{0, 208, 226}:   \"MRT MICRO, INC.\",\n\t[3]byte{0, 208, 227}:   \"ELE-CHEM ENGINEERING CO., LTD.\",\n\t[3]byte{0, 208, 228}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 208, 229}:   \"SOLIDUM SYSTEMS CORP.\",\n\t[3]byte{0, 208, 230}:   \"IBOND INC.\",\n\t[3]byte{0, 208, 231}:   \"VCON TELECOMMUNICATION LTD.\",\n\t[3]byte{0, 208, 232}:   \"MAC SYSTEM CO., LTD.\",\n\t[3]byte{0, 208, 233}:   \"Advantage Century Telecommunication Corp.\",\n\t[3]byte{0, 208, 234}:   \"NEXTONE COMMUNICATIONS, INC.\",\n\t[3]byte{0, 208, 235}:   \"LIGHTERA NETWORKS, INC.\",\n\t[3]byte{0, 208, 236}:   \"NAKAYO Inc\",\n\t[3]byte{0, 208, 237}:   \"XIOX\",\n\t[3]byte{0, 208, 238}:   \"DICTAPHONE CORPORATION\",\n\t[3]byte{0, 208, 239}:   \"IGT\",\n\t[3]byte{0, 208, 240}:   \"CONVISION TECHNOLOGY GMBH\",\n\t[3]byte{0, 208, 241}:   \"SEGA ENTERPRISES, LTD.\",\n\t[3]byte{0, 208, 242}:   \"MONTEREY NETWORKS\",\n\t[3]byte{0, 208, 243}:   \"SOLARI DI UDINE SPA\",\n\t[3]byte{0, 208, 244}:   \"CARINTHIAN TECH INSTITUTE\",\n\t[3]byte{0, 208, 245}:   \"ORANGE MICRO, INC.\",\n\t[3]byte{0, 208, 246}:   \"Nokia\",\n\t[3]byte{0, 208, 247}:   \"NEXT NETS CORPORATION\",\n\t[3]byte{0, 208, 248}:   \"FUJIAN STAR TERMINAL\",\n\t[3]byte{0, 208, 249}:   \"ACUTE COMMUNICATIONS CORP.\",\n\t[3]byte{0, 208, 250}:   \"Thales e-Security Ltd.\",\n\t[3]byte{0, 208, 251}:   \"TEK MICROSYSTEMS, INCORPORATED\",\n\t[3]byte{0, 208, 252}:   \"GRANITE MICROSYSTEMS\",\n\t[3]byte{0, 208, 253}:   \"OPTIMA TELE.COM, INC.\",\n\t[3]byte{0, 208, 254}:   \"ASTRAL POINT\",\n\t[3]byte{0, 208, 255}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 209, 28}:    \"ACETEL\",\n\t[3]byte{0, 210, 121}:   \"VINGROUP JOINT STOCK COMPANY\",\n\t[3]byte{0, 210, 177}:   \"TPV Display Technology (Xiamen) Co.,Ltd.\",\n\t[3]byte{0, 211, 24}:    \"SPG Controls\",\n\t[3]byte{0, 211, 141}:   \"Hotel Technology Next Generation\",\n\t[3]byte{0, 214, 50}:    \"GE Energy\",\n\t[3]byte{0, 214, 254}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 215, 143}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 216, 97}:    \"Micro-Star INTL CO., LTD.\",\n\t[3]byte{0, 217, 209}:   \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{0, 218, 85}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 219, 30}:    \"Albedo Telecom SL\",\n\t[3]byte{0, 219, 69}:    \"THAMWAY CO.,LTD.\",\n\t[3]byte{0, 219, 112}:   \"Apple, Inc.\",\n\t[3]byte{0, 219, 223}:   \"Intel Corporate\",\n\t[3]byte{0, 221, 0}:     \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 1}:     \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 2}:     \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 3}:     \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 4}:     \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 5}:     \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 6}:     \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 7}:     \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 8}:     \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 9}:     \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 10}:    \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 11}:    \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 12}:    \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 13}:    \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 14}:    \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 15}:    \"UNGERMANN-BASS INC.\",\n\t[3]byte{0, 221, 37}:    \"Shenzhen hechengdong Technology Co., Ltd\",\n\t[3]byte{0, 222, 251}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 224, 0}:     \"FUJITSU LIMITED\",\n\t[3]byte{0, 224, 1}:     \"STRAND LIGHTING LIMITED\",\n\t[3]byte{0, 224, 2}:     \"CROSSROADS SYSTEMS, INC.\",\n\t[3]byte{0, 224, 3}:     \"NOKIA WIRELESS BUSINESS COMMUN\",\n\t[3]byte{0, 224, 4}:     \"PMC-SIERRA, INC.\",\n\t[3]byte{0, 224, 5}:     \"TECHNICAL CORP.\",\n\t[3]byte{0, 224, 6}:     \"SILICON INTEGRATED SYS. CORP.\",\n\t[3]byte{0, 224, 7}:     \"Avaya ECS Ltd\",\n\t[3]byte{0, 224, 8}:     \"AMAZING CONTROLS! INC.\",\n\t[3]byte{0, 224, 9}:     \"Stratus Technologies\",\n\t[3]byte{0, 224, 10}:    \"DIBA, INC.\",\n\t[3]byte{0, 224, 11}:    \"ROOFTOP COMMUNICATIONS CORP.\",\n\t[3]byte{0, 224, 12}:    \"MOTOROLA\",\n\t[3]byte{0, 224, 13}:    \"RADIANT SYSTEMS\",\n\t[3]byte{0, 224, 14}:    \"AVALON IMAGING SYSTEMS, INC.\",\n\t[3]byte{0, 224, 15}:    \"Shanghai Baud Data Communication Co.,Ltd.\",\n\t[3]byte{0, 224, 16}:    \"HESS SB-AUTOMATENBAU GmbH\",\n\t[3]byte{0, 224, 17}:    \"UNIDEN CORPORATION\",\n\t[3]byte{0, 224, 18}:    \"PLUTO TECHNOLOGIES INTERNATIONAL INC.\",\n\t[3]byte{0, 224, 19}:    \"EASTERN ELECTRONIC CO., LTD.\",\n\t[3]byte{0, 224, 20}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 224, 21}:    \"HEIWA CORPORATION\",\n\t[3]byte{0, 224, 22}:    \"RAPID CITY COMMUNICATIONS\",\n\t[3]byte{0, 224, 23}:    \"EXXACT GmbH\",\n\t[3]byte{0, 224, 24}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{0, 224, 25}:    \"ING. GIORDANO ELETTRONICA\",\n\t[3]byte{0, 224, 26}:    \"COMTEC SYSTEMS. CO., LTD.\",\n\t[3]byte{0, 224, 27}:    \"SPHERE COMMUNICATIONS, INC.\",\n\t[3]byte{0, 224, 28}:    \"Cradlepoint, Inc\",\n\t[3]byte{0, 224, 29}:    \"WebTV NETWORKS, INC.\",\n\t[3]byte{0, 224, 30}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 224, 31}:    \"AVIDIA Systems, Inc.\",\n\t[3]byte{0, 224, 32}:    \"TECNOMEN OY\",\n\t[3]byte{0, 224, 33}:    \"FREEGATE CORP.\",\n\t[3]byte{0, 224, 34}:    \"Analog Devices, Inc.\",\n\t[3]byte{0, 224, 35}:    \"TELRAD\",\n\t[3]byte{0, 224, 36}:    \"GADZOOX NETWORKS\",\n\t[3]byte{0, 224, 37}:    \"dit Co., Ltd.\",\n\t[3]byte{0, 224, 38}:    \"Redlake MASD LLC\",\n\t[3]byte{0, 224, 39}:    \"DUX, INC.\",\n\t[3]byte{0, 224, 40}:    \"APTIX CORPORATION\",\n\t[3]byte{0, 224, 41}:    \"STANDARD MICROSYSTEMS CORP.\",\n\t[3]byte{0, 224, 42}:    \"TANDBERG TELEVISION AS\",\n\t[3]byte{0, 224, 43}:    \"Extreme Networks, Inc.\",\n\t[3]byte{0, 224, 44}:    \"AST COMPUTER\",\n\t[3]byte{0, 224, 45}:    \"InnoMediaLogic, Inc.\",\n\t[3]byte{0, 224, 46}:    \"SPC ELECTRONICS CORPORATION\",\n\t[3]byte{0, 224, 47}:    \"MCNS HOLDINGS, L.P.\",\n\t[3]byte{0, 224, 48}:    \"MELITA INTERNATIONAL CORP.\",\n\t[3]byte{0, 224, 49}:    \"HAGIWARA ELECTRIC CO., LTD.\",\n\t[3]byte{0, 224, 50}:    \"MISYS FINANCIAL SYSTEMS, LTD.\",\n\t[3]byte{0, 224, 51}:    \"E.E.P.D. GmbH\",\n\t[3]byte{0, 224, 52}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 224, 53}:    \"Artesyn Embedded Technologies\",\n\t[3]byte{0, 224, 54}:    \"PIONEER CORPORATION\",\n\t[3]byte{0, 224, 55}:    \"CENTURY CORPORATION\",\n\t[3]byte{0, 224, 56}:    \"PROXIMA CORPORATION\",\n\t[3]byte{0, 224, 57}:    \"PARADYNE CORP.\",\n\t[3]byte{0, 224, 58}:    \"Cabletron Systems, Inc.\",\n\t[3]byte{0, 224, 59}:    \"PROMINET CORPORATION\",\n\t[3]byte{0, 224, 60}:    \"AdvanSys\",\n\t[3]byte{0, 224, 61}:    \"FOCON ELECTRONIC SYSTEMS A/S\",\n\t[3]byte{0, 224, 62}:    \"ALFATECH, INC.\",\n\t[3]byte{0, 224, 63}:    \"JATON CORPORATION\",\n\t[3]byte{0, 224, 64}:    \"DeskStation Technology, Inc.\",\n\t[3]byte{0, 224, 65}:    \"CSPI\",\n\t[3]byte{0, 224, 66}:    \"Pacom Systems Ltd.\",\n\t[3]byte{0, 224, 67}:    \"VitalCom\",\n\t[3]byte{0, 224, 68}:    \"LSICS CORPORATION\",\n\t[3]byte{0, 224, 69}:    \"TOUCHWAVE, INC.\",\n\t[3]byte{0, 224, 70}:    \"BENTLY NEVADA CORP.\",\n\t[3]byte{0, 224, 71}:    \"InFocus Corporation\",\n\t[3]byte{0, 224, 72}:    \"SDL COMMUNICATIONS, INC.\",\n\t[3]byte{0, 224, 73}:    \"MICROWI ELECTRONIC GmbH\",\n\t[3]byte{0, 224, 74}:    \"ZX Technologies, Inc\",\n\t[3]byte{0, 224, 75}:    \"JUMP INDUSTRIELLE COMPUTERTECHNIK GmbH\",\n\t[3]byte{0, 224, 76}:    \"REALTEK SEMICONDUCTOR CORP.\",\n\t[3]byte{0, 224, 77}:    \"INTERNET INITIATIVE JAPAN, INC\",\n\t[3]byte{0, 224, 78}:    \"SANYO DENKI CO., LTD.\",\n\t[3]byte{0, 224, 79}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 224, 80}:    \"EXECUTONE INFORMATION SYSTEMS, INC.\",\n\t[3]byte{0, 224, 81}:    \"TALX CORPORATION\",\n\t[3]byte{0, 224, 82}:    \"Brocade Communications Systems LLC\",\n\t[3]byte{0, 224, 83}:    \"CELLPORT LABS, INC.\",\n\t[3]byte{0, 224, 84}:    \"KODAI HITEC CO., LTD.\",\n\t[3]byte{0, 224, 85}:    \"INGENIERIA ELECTRONICA COMERCIAL INELCOM S.A.\",\n\t[3]byte{0, 224, 86}:    \"HOLONTECH CORPORATION\",\n\t[3]byte{0, 224, 87}:    \"HAN MICROTELECOM. CO., LTD.\",\n\t[3]byte{0, 224, 88}:    \"PHASE ONE DENMARK A/S\",\n\t[3]byte{0, 224, 89}:    \"CONTROLLED ENVIRONMENTS, LTD.\",\n\t[3]byte{0, 224, 90}:    \"GALEA NETWORK SECURITY\",\n\t[3]byte{0, 224, 91}:    \"WEST END SYSTEMS CORP.\",\n\t[3]byte{0, 224, 92}:    \"PHC Corporation\",\n\t[3]byte{0, 224, 93}:    \"UNITEC CO., LTD.\",\n\t[3]byte{0, 224, 94}:    \"JAPAN AVIATION ELECTRONICS INDUSTRY, LTD.\",\n\t[3]byte{0, 224, 95}:    \"e-Net, Inc.\",\n\t[3]byte{0, 224, 96}:    \"SHERWOOD\",\n\t[3]byte{0, 224, 97}:    \"EdgePoint Networks, Inc.\",\n\t[3]byte{0, 224, 98}:    \"HOST ENGINEERING\",\n\t[3]byte{0, 224, 99}:    \"Cabletron Systems, Inc.\",\n\t[3]byte{0, 224, 100}:   \"SAMSUNG ELECTRONICS\",\n\t[3]byte{0, 224, 101}:   \"OPTICAL ACCESS INTERNATIONAL\",\n\t[3]byte{0, 224, 102}:   \"ProMax Systems, Inc.\",\n\t[3]byte{0, 224, 103}:   \"eac AUTOMATION-CONSULTING GmbH\",\n\t[3]byte{0, 224, 104}:   \"MERRIMAC SYSTEMS INC.\",\n\t[3]byte{0, 224, 105}:   \"JAYCOR\",\n\t[3]byte{0, 224, 106}:   \"KAPSCH AG\",\n\t[3]byte{0, 224, 107}:   \"W&G SPECIAL PRODUCTS\",\n\t[3]byte{0, 224, 108}:   \"Ultra Electronics Command & Control Systems\",\n\t[3]byte{0, 224, 109}:   \"COMPUWARE CORPORATION\",\n\t[3]byte{0, 224, 110}:   \"FAR SYSTEMS S.p.A.\",\n\t[3]byte{0, 224, 111}:   \"ARRIS Group, Inc.\",\n\t[3]byte{0, 224, 112}:   \"DH TECHNOLOGY\",\n\t[3]byte{0, 224, 113}:   \"EPIS MICROCOMPUTER\",\n\t[3]byte{0, 224, 114}:   \"LYNK\",\n\t[3]byte{0, 224, 115}:   \"NATIONAL AMUSEMENT NETWORK, INC.\",\n\t[3]byte{0, 224, 116}:   \"TIERNAN COMMUNICATIONS, INC.\",\n\t[3]byte{0, 224, 117}:   \"Verilink Corporation\",\n\t[3]byte{0, 224, 118}:   \"DEVELOPMENT CONCEPTS, INC.\",\n\t[3]byte{0, 224, 119}:   \"WEBGEAR, INC.\",\n\t[3]byte{0, 224, 120}:   \"BERKELEY NETWORKS\",\n\t[3]byte{0, 224, 121}:   \"A.T.N.R.\",\n\t[3]byte{0, 224, 122}:   \"MIKRODIDAKT AB\",\n\t[3]byte{0, 224, 123}:   \"BAY NETWORKS\",\n\t[3]byte{0, 224, 124}:   \"METTLER-TOLEDO, INC.\",\n\t[3]byte{0, 224, 125}:   \"NETRONIX, INC.\",\n\t[3]byte{0, 224, 126}:   \"WALT DISNEY IMAGINEERING\",\n\t[3]byte{0, 224, 127}:   \"LOGISTISTEM s.r.l.\",\n\t[3]byte{0, 224, 128}:   \"CONTROL RESOURCES CORPORATION\",\n\t[3]byte{0, 224, 129}:   \"TYAN COMPUTER CORP.\",\n\t[3]byte{0, 224, 130}:   \"ANERMA\",\n\t[3]byte{0, 224, 131}:   \"JATO TECHNOLOGIES, INC.\",\n\t[3]byte{0, 224, 132}:   \"COMPULITE R&D\",\n\t[3]byte{0, 224, 133}:   \"GLOBAL MAINTECH, INC.\",\n\t[3]byte{0, 224, 134}:   \"Emerson Network Power, Avocent Division\",\n\t[3]byte{0, 224, 135}:   \"LeCroy - Networking Productions Division\",\n\t[3]byte{0, 224, 136}:   \"LTX-Credence CORPORATION\",\n\t[3]byte{0, 224, 137}:   \"ION Networks, Inc.\",\n\t[3]byte{0, 224, 138}:   \"GEC AVERY, LTD.\",\n\t[3]byte{0, 224, 139}:   \"QLogic Corporation\",\n\t[3]byte{0, 224, 140}:   \"NEOPARADIGM LABS, INC.\",\n\t[3]byte{0, 224, 141}:   \"PRESSURE SYSTEMS, INC.\",\n\t[3]byte{0, 224, 142}:   \"UTSTARCOM\",\n\t[3]byte{0, 224, 143}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 224, 144}:   \"BECKMAN LAB. AUTOMATION DIV.\",\n\t[3]byte{0, 224, 145}:   \"LG Electronics\",\n\t[3]byte{0, 224, 146}:   \"ADMTEK INCORPORATED\",\n\t[3]byte{0, 224, 147}:   \"ACKFIN NETWORKS\",\n\t[3]byte{0, 224, 148}:   \"OSAI SRL\",\n\t[3]byte{0, 224, 149}:   \"ADVANCED-VISION TECHNOLGIES CORP.\",\n\t[3]byte{0, 224, 150}:   \"SHIMADZU CORPORATION\",\n\t[3]byte{0, 224, 151}:   \"CARRIER ACCESS CORPORATION\",\n\t[3]byte{0, 224, 152}:   \"AboCom\",\n\t[3]byte{0, 224, 153}:   \"SAMSON AG\",\n\t[3]byte{0, 224, 154}:   \"Positron Inc.\",\n\t[3]byte{0, 224, 155}:   \"ENGAGE NETWORKS, INC.\",\n\t[3]byte{0, 224, 156}:   \"MII\",\n\t[3]byte{0, 224, 157}:   \"SARNOFF CORPORATION\",\n\t[3]byte{0, 224, 158}:   \"Quantum Corporation\",\n\t[3]byte{0, 224, 159}:   \"PIXEL VISION\",\n\t[3]byte{0, 224, 160}:   \"WILTRON CO.\",\n\t[3]byte{0, 224, 161}:   \"HIMA PAUL HILDEBRANDT GmbH Co. KG\",\n\t[3]byte{0, 224, 162}:   \"MICROSLATE INC.\",\n\t[3]byte{0, 224, 163}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 224, 164}:   \"ESAOTE S.p.A.\",\n\t[3]byte{0, 224, 165}:   \"ComCore Semiconductor, Inc.\",\n\t[3]byte{0, 224, 166}:   \"TELOGY NETWORKS, INC.\",\n\t[3]byte{0, 224, 167}:   \"IPC INFORMATION SYSTEMS, INC.\",\n\t[3]byte{0, 224, 168}:   \"SAT GmbH & Co.\",\n\t[3]byte{0, 224, 169}:   \"FUNAI ELECTRIC CO., LTD.\",\n\t[3]byte{0, 224, 170}:   \"ELECTROSONIC LTD.\",\n\t[3]byte{0, 224, 171}:   \"DIMAT S.A.\",\n\t[3]byte{0, 224, 172}:   \"MIDSCO, INC.\",\n\t[3]byte{0, 224, 173}:   \"EES TECHNOLOGY, LTD.\",\n\t[3]byte{0, 224, 174}:   \"XAQTI CORPORATION\",\n\t[3]byte{0, 224, 175}:   \"GENERAL DYNAMICS INFORMATION SYSTEMS\",\n\t[3]byte{0, 224, 176}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 224, 177}:   \"Alcatel-Lucent Enterprise\",\n\t[3]byte{0, 224, 178}:   \"TELMAX COMMUNICATIONS CORP.\",\n\t[3]byte{0, 224, 179}:   \"EtherWAN Systems, Inc.\",\n\t[3]byte{0, 224, 180}:   \"TECHNO SCOPE CO., LTD.\",\n\t[3]byte{0, 224, 181}:   \"ARDENT COMMUNICATIONS CORP.\",\n\t[3]byte{0, 224, 182}:   \"Entrada Networks\",\n\t[3]byte{0, 224, 183}:   \"Cosworth Electronics Ltd\",\n\t[3]byte{0, 224, 184}:   \"GATEWAY 2000\",\n\t[3]byte{0, 224, 185}:   \"BYAS SYSTEMS\",\n\t[3]byte{0, 224, 186}:   \"BERGHOF AUTOMATIONSTECHNIK GmbH\",\n\t[3]byte{0, 224, 187}:   \"NBX CORPORATION\",\n\t[3]byte{0, 224, 188}:   \"SYMON COMMUNICATIONS, INC.\",\n\t[3]byte{0, 224, 189}:   \"INTERFACE SYSTEMS, INC.\",\n\t[3]byte{0, 224, 190}:   \"GENROCO INTERNATIONAL, INC.\",\n\t[3]byte{0, 224, 191}:   \"TORRENT NETWORKING TECHNOLOGIES CORP.\",\n\t[3]byte{0, 224, 192}:   \"SEIWA ELECTRIC MFG. CO., LTD.\",\n\t[3]byte{0, 224, 193}:   \"MEMOREX TELEX JAPAN, LTD.\",\n\t[3]byte{0, 224, 194}:   \"NECSY S.p.A.\",\n\t[3]byte{0, 224, 195}:   \"SAKAI SYSTEM DEVELOPMENT CORP.\",\n\t[3]byte{0, 224, 196}:   \"HORNER ELECTRIC, INC.\",\n\t[3]byte{0, 224, 197}:   \"BCOM ELECTRONICS INC.\",\n\t[3]byte{0, 224, 198}:   \"LINK2IT, L.L.C.\",\n\t[3]byte{0, 224, 199}:   \"EUROTECH SRL\",\n\t[3]byte{0, 224, 200}:   \"VIRTUAL ACCESS, LTD.\",\n\t[3]byte{0, 224, 201}:   \"AutomatedLogic Corporation\",\n\t[3]byte{0, 224, 202}:   \"BEST DATA PRODUCTS\",\n\t[3]byte{0, 224, 203}:   \"RESON, INC.\",\n\t[3]byte{0, 224, 204}:   \"HERO SYSTEMS, LTD.\",\n\t[3]byte{0, 224, 205}:   \"SAAB SENSIS CORPORATION\",\n\t[3]byte{0, 224, 206}:   \"ARN\",\n\t[3]byte{0, 224, 207}:   \"INTEGRATED DEVICE\",\n\t[3]byte{0, 224, 208}:   \"NETSPEED, INC.\",\n\t[3]byte{0, 224, 209}:   \"TELSIS LIMITED\",\n\t[3]byte{0, 224, 210}:   \"VERSANET COMMUNICATIONS, INC.\",\n\t[3]byte{0, 224, 211}:   \"DATENTECHNIK GmbH\",\n\t[3]byte{0, 224, 212}:   \"EXCELLENT COMPUTER\",\n\t[3]byte{0, 224, 213}:   \"Emulex Corporation\",\n\t[3]byte{0, 224, 214}:   \"COMPUTER & COMMUNICATION RESEARCH LAB.\",\n\t[3]byte{0, 224, 215}:   \"SUNSHINE ELECTRONICS, INC.\",\n\t[3]byte{0, 224, 216}:   \"LANBit Computer, Inc.\",\n\t[3]byte{0, 224, 217}:   \"TAZMO CO., LTD.\",\n\t[3]byte{0, 224, 218}:   \"Alcatel-Lucent Enterprise\",\n\t[3]byte{0, 224, 219}:   \"ViaVideo Communications, Inc.\",\n\t[3]byte{0, 224, 220}:   \"NEXWARE CORP.\",\n\t[3]byte{0, 224, 221}:   \"Zenith Electronics Corporation\",\n\t[3]byte{0, 224, 222}:   \"DATAX NV\",\n\t[3]byte{0, 224, 223}:   \"KEYMILE GmbH\",\n\t[3]byte{0, 224, 224}:   \"SI ELECTRONICS, LTD.\",\n\t[3]byte{0, 224, 225}:   \"G2 NETWORKS, INC.\",\n\t[3]byte{0, 224, 226}:   \"INNOVA CORP.\",\n\t[3]byte{0, 224, 227}:   \"SK-ELEKTRONIK GMBH\",\n\t[3]byte{0, 224, 228}:   \"FANUC ROBOTICS NORTH AMERICA, Inc.\",\n\t[3]byte{0, 224, 229}:   \"CINCO NETWORKS, INC.\",\n\t[3]byte{0, 224, 230}:   \"INCAA Computers\",\n\t[3]byte{0, 224, 231}:   \"RAYTHEON E-SYSTEMS, INC.\",\n\t[3]byte{0, 224, 232}:   \"GRETACODER Data Systems AG\",\n\t[3]byte{0, 224, 233}:   \"DATA LABS, INC.\",\n\t[3]byte{0, 224, 234}:   \"INNOVAT COMMUNICATIONS, INC.\",\n\t[3]byte{0, 224, 235}:   \"DIGICOM SYSTEMS, INCORPORATED\",\n\t[3]byte{0, 224, 236}:   \"CELESTICA INC.\",\n\t[3]byte{0, 224, 237}:   \"SILICOM, LTD.\",\n\t[3]byte{0, 224, 238}:   \"MAREL HF\",\n\t[3]byte{0, 224, 239}:   \"DIONEX\",\n\t[3]byte{0, 224, 240}:   \"ABLER TECHNOLOGY, INC.\",\n\t[3]byte{0, 224, 241}:   \"THAT CORPORATION\",\n\t[3]byte{0, 224, 242}:   \"ARLOTTO COMNET, INC.\",\n\t[3]byte{0, 224, 243}:   \"WebSprint Communications, Inc.\",\n\t[3]byte{0, 224, 244}:   \"INSIDE Technology A/S\",\n\t[3]byte{0, 224, 245}:   \"TELES AG\",\n\t[3]byte{0, 224, 246}:   \"DECISION EUROPE\",\n\t[3]byte{0, 224, 247}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 224, 248}:   \"DICNA CONTROL AB\",\n\t[3]byte{0, 224, 249}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 224, 250}:   \"TRL TECHNOLOGY, LTD.\",\n\t[3]byte{0, 224, 251}:   \"LEIGHTRONIX, INC.\",\n\t[3]byte{0, 224, 252}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 224, 253}:   \"A-TREND TECHNOLOGY CO., LTD.\",\n\t[3]byte{0, 224, 254}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 224, 255}:   \"SECURITY DYNAMICS TECHNOLOGIES, Inc.\",\n\t[3]byte{0, 225, 109}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 225, 117}:   \"AK-Systems Ltd\",\n\t[3]byte{0, 225, 140}:   \"Intel Corporate\",\n\t[3]byte{0, 226, 44}:    \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{0, 227, 178}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 228, 0}:     \"Sichuan Changhong Electric Ltd.\",\n\t[3]byte{0, 228, 6}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 229, 228}:   \"Sichuan Tianyi Comheart Telecom Co., Ltd.\",\n\t[3]byte{0, 230, 102}:   \"ARIMA Communications Corp.\",\n\t[3]byte{0, 230, 211}:   \"NIXDORF COMPUTER CORP.\",\n\t[3]byte{0, 230, 232}:   \"Netzin Technology Corporation,.Ltd.\",\n\t[3]byte{0, 232, 171}:   \"Meggitt Training Systems, Inc.\",\n\t[3]byte{0, 234, 189}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 235, 45}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{0, 235, 213}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 236, 10}:    \"Xiaomi Communications Co Ltd\",\n\t[3]byte{0, 237, 184}:   \"KYOCERA Corporation \",\n\t[3]byte{0, 238, 171}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 238, 189}:   \"HTC Corporation\",\n\t[3]byte{0, 240, 81}:    \"KWB Gmbh\",\n\t[3]byte{0, 242, 44}:    \"Shanghai B-star Technology Co.,Ltd.\",\n\t[3]byte{0, 242, 139}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 243, 219}:   \"WOO Sports\",\n\t[3]byte{0, 244, 3}:     \"Orbis Systems Oy\",\n\t[3]byte{0, 244, 111}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 244, 141}:   \"Liteon Technology Corporation\",\n\t[3]byte{0, 244, 185}:   \"Apple, Inc.\",\n\t[3]byte{0, 246, 32}:    \"Google, Inc.\",\n\t[3]byte{0, 246, 99}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 247, 111}:   \"Apple, Inc.\",\n\t[3]byte{0, 248, 28}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{0, 248, 44}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 248, 96}:    \"PT. Panggung Electric Citrabuana\",\n\t[3]byte{0, 248, 113}:   \"DGS Denmark A/S\",\n\t[3]byte{0, 250, 33}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{0, 250, 59}:    \"CLOOS ELECTRONIC GMBH\",\n\t[3]byte{0, 252, 88}:    \"WebSilicon Ltd.\",\n\t[3]byte{0, 252, 112}:   \"Intrepid Control Systems, Inc.\",\n\t[3]byte{0, 252, 139}:   \"Amazon Technologies Inc.\",\n\t[3]byte{0, 252, 141}:   \"Hitron Technologies. Inc\",\n\t[3]byte{0, 252, 186}:   \"Cisco Systems, Inc\",\n\t[3]byte{0, 253, 34}:    \"Cisco Systems, Inc\",\n\t[3]byte{0, 253, 69}:    \"Hewlett Packard Enterprise\",\n\t[3]byte{0, 253, 76}:    \"NEVATEC\",\n\t[3]byte{0, 254, 200}:   \"Cisco Systems, Inc\",\n\t[3]byte{2, 7, 1}:       \"RACAL-DATACOM\",\n\t[3]byte{2, 28, 124}:    \"PERQ SYSTEMS CORPORATION\",\n\t[3]byte{2, 96, 134}:    \"LOGIC REPLACEMENT TECH. LTD.\",\n\t[3]byte{2, 96, 140}:    \"3COM\",\n\t[3]byte{2, 112, 1}:     \"RACAL-DATACOM\",\n\t[3]byte{2, 112, 176}:   \"M/A-COM INC. COMPANIES\",\n\t[3]byte{2, 112, 179}:   \"DATA RECALL LTD.\",\n\t[3]byte{2, 157, 142}:   \"CARDIAC RECORDERS, INC.\",\n\t[3]byte{2, 170, 60}:    \"OLIVETTI TELECOMM SPA (OLTECO)\",\n\t[3]byte{2, 187, 1}:     \"OCTOTHORPE CORP.\",\n\t[3]byte{2, 192, 140}:   \"3COM\",\n\t[3]byte{2, 207, 28}:    \"Communication Machinery Corporation\",\n\t[3]byte{2, 230, 211}:   \"NIXDORF COMPUTER CORP.\",\n\t[3]byte{4, 2, 31}:      \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 2, 202}:     \"Shenzhen Vtsonic Co.,ltd\",\n\t[3]byte{4, 3, 214}:     \"Nintendo Co.,Ltd\",\n\t[3]byte{4, 4, 234}:     \"Valens Semiconductor Ltd.\",\n\t[3]byte{4, 7, 46}:      \"VTech Electronics Ltd.\",\n\t[3]byte{4, 9, 115}:     \"Hewlett Packard Enterprise\",\n\t[3]byte{4, 9, 165}:     \"HFR, Inc.\",\n\t[3]byte{4, 10, 131}:    \"Alcatel-Lucent\",\n\t[3]byte{4, 10, 224}:    \"XMIT AG COMPUTER NETWORKS\",\n\t[3]byte{4, 12, 206}:    \"Apple, Inc.\",\n\t[3]byte{4, 14, 60}:     \"HP Inc.\",\n\t[3]byte{4, 14, 194}:    \"ViewSonic Mobile China Limited\",\n\t[3]byte{4, 21, 82}:     \"Apple, Inc.\",\n\t[3]byte{4, 21, 217}:    \"Viwone\",\n\t[3]byte{4, 24, 15}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{4, 24, 182}:    \"Private\",\n\t[3]byte{4, 24, 214}:    \"Ubiquiti Networks Inc.\",\n\t[3]byte{4, 25, 127}:    \"Grasphere Japan\",\n\t[3]byte{4, 26, 4}:      \"WaveIP\",\n\t[3]byte{4, 27, 109}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{4, 27, 148}:    \"Host Mobility AB\",\n\t[3]byte{4, 27, 186}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{4, 29, 16}:     \"Dream Ware Inc.\",\n\t[3]byte{4, 29, 199}:    \"zte corporation\",\n\t[3]byte{4, 30, 100}:    \"Apple, Inc.\",\n\t[3]byte{4, 30, 122}:    \"DSPWorks\",\n\t[3]byte{4, 30, 250}:    \"BISSELL Homecare, Inc.\",\n\t[3]byte{4, 32, 154}:    \"Panasonic Corporation AVC Networks Company\",\n\t[3]byte{4, 33, 68}:     \"Sunitec Enterprise Co.,Ltd\",\n\t[3]byte{4, 33, 76}:     \"Insight Energy Ventures LLC\",\n\t[3]byte{4, 34, 52}:     \"Wireless Standard Extensions\",\n\t[3]byte{4, 37, 197}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 38, 5}:      \"GFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH\",\n\t[3]byte{4, 38, 101}:    \"Apple, Inc.\",\n\t[3]byte{4, 39, 88}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 42, 226}:    \"Cisco Systems, Inc\",\n\t[3]byte{4, 43, 187}:    \"PicoCELA, Inc.\",\n\t[3]byte{4, 45, 180}:    \"First Property (Beijing) Co., Ltd Modern MOMA Branch\",\n\t[3]byte{4, 47, 86}:     \"ATOCS (Shenzhen) LTD\",\n\t[3]byte{4, 49, 16}:     \"Inspur Group Co., Ltd.\",\n\t[3]byte{4, 50, 244}:    \"Partron\",\n\t[3]byte{4, 51, 133}:    \"Nanchang BlackShark Co.,Ltd.\",\n\t[3]byte{4, 51, 137}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 51, 194}:    \"Intel Corporate\",\n\t[3]byte{4, 54, 4}:      \"Gyeyoung I&T\",\n\t[3]byte{4, 58, 13}:     \"SM Optics S.r.l.\",\n\t[3]byte{4, 61, 152}:    \"ChongQing QingJia Electronics CO.,LTD\",\n\t[3]byte{4, 63, 114}:    \"Mellanox Technologies, Inc.\",\n\t[3]byte{4, 64, 169}:    \"New H3C Technologies Co., Ltd\",\n\t[3]byte{4, 65, 105}:    \"GoPro\",\n\t[3]byte{4, 68, 161}:    \"TELECON GALICIA,S.A.\",\n\t[3]byte{4, 69, 98}:     \"ANDRA Sp. z o. o.\",\n\t[3]byte{4, 69, 161}:    \"NIRIT- Xinwei  Telecom Technology Co., Ltd.\",\n\t[3]byte{4, 70, 101}:    \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{4, 70, 207}:    \"Beijing Venustech Cybervision Co.,Ltd.\",\n\t[3]byte{4, 72, 154}:    \"Apple, Inc.\",\n\t[3]byte{4, 74, 80}:     \"Ramaxel Technology (Shenzhen) limited company\",\n\t[3]byte{4, 74, 108}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 74, 198}:    \"Aipon Electronics Co., Ltd\",\n\t[3]byte{4, 75, 237}:    \"Apple, Inc.\",\n\t[3]byte{4, 75, 255}:    \"GuangZhou Hedy Digital Technology Co., Ltd\",\n\t[3]byte{4, 76, 239}:    \"Fujian Sanao Technology Co.,Ltd\",\n\t[3]byte{4, 78, 6}:      \"Ericsson AB\",\n\t[3]byte{4, 78, 90}:     \"ARRIS Group, Inc.\",\n\t[3]byte{4, 78, 175}:    \"LG Innotek\",\n\t[3]byte{4, 79, 23}:     \"HUMAX Co., Ltd.\",\n\t[3]byte{4, 79, 76}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 79, 139}:    \"Adapteva, Inc.\",\n\t[3]byte{4, 79, 170}:    \"Ruckus Wireless\",\n\t[3]byte{4, 80, 218}:    \"Qiku Internet Network Scientific (Shenzhen) Co., Ltd\",\n\t[3]byte{4, 82, 199}:    \"Bose Corporation\",\n\t[3]byte{4, 82, 243}:    \"Apple, Inc.\",\n\t[3]byte{4, 83, 213}:    \"Sysorex Global Holdings\",\n\t[3]byte{4, 84, 83}:     \"Apple, Inc.\",\n\t[3]byte{4, 85, 202}:    \"BriView (Xiamen) Corp.\",\n\t[3]byte{4, 86, 4}:      \"Gionee Communication Equipment Co.,Ltd.\",\n\t[3]byte{4, 87, 47}:     \"Sertel Electronics UK Ltd\",\n\t[3]byte{4, 88, 111}:    \"Sichuan Whayer information industry Co.,LTD\",\n\t[3]byte{4, 90, 149}:    \"Nokia Corporation\",\n\t[3]byte{4, 92, 6}:      \"Zmodo Technology Corporation\",\n\t[3]byte{4, 92, 108}:    \"Juniper Networks\",\n\t[3]byte{4, 92, 142}:    \"gosund GROUP CO.,LTD\",\n\t[3]byte{4, 93, 75}:     \"Sony Corporation\",\n\t[3]byte{4, 93, 86}:     \"camtron industrial inc.\",\n\t[3]byte{4, 94, 164}:    \"SHENZHEN NETIS TECHNOLOGY CO.,LTD\",\n\t[3]byte{4, 95, 167}:    \"Shenzhen Yichen Technology Development Co.,LTD\",\n\t[3]byte{4, 95, 185}:    \"Cisco Systems, Inc\",\n\t[3]byte{4, 97, 105}:    \"MEDIA GLOBAL LINKS CO., LTD.\",\n\t[3]byte{4, 98, 115}:    \"Cisco Systems, Inc\",\n\t[3]byte{4, 98, 215}:    \"ALSTOM HYDRO FRANCE\",\n\t[3]byte{4, 99, 224}:    \"Nome Oy\",\n\t[3]byte{4, 101, 101}:   \"Testop\",\n\t[3]byte{4, 103, 133}:   \"scemtec Hard- und Software fuer Mess- und Steuerungstechnik GmbH\",\n\t[3]byte{4, 105, 248}:   \"Apple, Inc.\",\n\t[3]byte{4, 107, 27}:    \"SYSDINE Co., Ltd.\",\n\t[3]byte{4, 107, 37}:    \"SICHUAN TIANYI COMHEART TELECOM CO.,LTD\",\n\t[3]byte{4, 108, 89}:    \"Intel Corporate\",\n\t[3]byte{4, 108, 157}:   \"Cisco Systems, Inc\",\n\t[3]byte{4, 109, 66}:    \"Bryston Ltd.\",\n\t[3]byte{4, 110, 2}:     \"OpenRTLS Group\",\n\t[3]byte{4, 110, 73}:    \"TaiYear Electronic Technology (Suzhou) Co., Ltd\",\n\t[3]byte{4, 112, 188}:   \"Globalstar Inc.\",\n\t[3]byte{4, 113, 75}:    \"IEEE Registration Authority\",\n\t[3]byte{4, 114, 149}:   \"Apple, Inc.\",\n\t[3]byte{4, 116, 161}:   \"Aligera Equipamentos Digitais Ltda\",\n\t[3]byte{4, 117, 3}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 117, 245}:   \"CSST\",\n\t[3]byte{4, 118, 110}:   \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{4, 118, 176}:   \"Cisco Systems, Inc\",\n\t[3]byte{4, 120, 99}:    \"Shanghai MXCHIP Information Technology Co., Ltd.\",\n\t[3]byte{4, 121, 112}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 121, 183}:   \"Texas Instruments\",\n\t[3]byte{4, 125, 80}:    \"Shenzhen Kang Ying Technology Co.Ltd.\",\n\t[3]byte{4, 125, 123}:   \"Quanta Computer Inc.\",\n\t[3]byte{4, 126, 35}:    \"China Mobile IOT Company Limited\",\n\t[3]byte{4, 126, 74}:    \"moobox CO., Ltd.\",\n\t[3]byte{4, 127, 14}:    \"Barrot Technology Limited\",\n\t[3]byte{4, 129, 155}:   \"BSkyB Ltd\",\n\t[3]byte{4, 129, 174}:   \"Clack Corporation\",\n\t[3]byte{4, 132, 138}:   \"7INOVA TECHNOLOGY LIMITED\",\n\t[3]byte{4, 136, 95}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 136, 140}:   \"Eifelwerk Butler Systeme GmbH\",\n\t[3]byte{4, 136, 226}:   \"Beats Electronics LLC\",\n\t[3]byte{4, 138, 21}:    \"Avaya Inc\",\n\t[3]byte{4, 138, 225}:   \"FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.\",\n\t[3]byte{4, 139, 66}:    \"Skspruce Technologies\",\n\t[3]byte{4, 140, 3}:     \"ThinPAD Technology (Shenzhen)CO.,LTD\",\n\t[3]byte{4, 140, 22}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 140, 154}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{4, 141, 56}:    \"Netcore Technology Inc.\",\n\t[3]byte{4, 145, 98}:    \"Microchip Technology Inc.\",\n\t[3]byte{4, 146, 38}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{4, 146, 238}:   \"iway AG\",\n\t[3]byte{4, 148, 107}:   \"TECNO MOBILE LIMITED\",\n\t[3]byte{4, 148, 161}:   \"CATCH THE WIND INC\",\n\t[3]byte{4, 149, 115}:   \"zte corporation\",\n\t[3]byte{4, 149, 230}:   \"Tenda Technology Co.,Ltd.Dongguan branch\",\n\t[3]byte{4, 150, 69}:    \"WUXI SKY CHIP INTERCONNECTION TECHNOLOGY CO.,LTD.\",\n\t[3]byte{4, 151, 144}:   \"Lartech telecom LLC\",\n\t[3]byte{4, 152, 243}:   \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{4, 153, 230}:   \"Shenzhen Yoostar Technology Co., Ltd\",\n\t[3]byte{4, 155, 156}:   \"Eadingcore  Intelligent Technology Co., Ltd.\",\n\t[3]byte{4, 156, 98}:    \"BMT Medical Technology s.r.o.\",\n\t[3]byte{4, 157, 254}:   \"Hivesystem\",\n\t[3]byte{4, 159, 6}:     \"Smobile Co., Ltd.\",\n\t[3]byte{4, 159, 129}:   \"NetAlly\",\n\t[3]byte{4, 159, 202}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 161, 81}:    \"NETGEAR\",\n\t[3]byte{4, 162, 34}:    \"Arcadyan Corporation\",\n\t[3]byte{4, 162, 243}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{4, 163, 22}:    \"Texas Instruments\",\n\t[3]byte{4, 163, 243}:   \"Emicon\",\n\t[3]byte{4, 168, 42}:    \"Nokia Corporation\",\n\t[3]byte{4, 170, 225}:   \"BEIJING MICROVISION TECHNOLOGY CO.,LTD\",\n\t[3]byte{4, 171, 24}:    \"ELECOM CO.,LTD.\",\n\t[3]byte{4, 171, 106}:   \"Chun-il Co.,Ltd.\",\n\t[3]byte{4, 172, 68}:    \"Holtek Semiconductor Inc.\",\n\t[3]byte{4, 176, 231}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 177, 103}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{4, 177, 161}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{4, 179, 182}:   \"Seamap (UK) Ltd\",\n\t[3]byte{4, 180, 41}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{4, 180, 102}:   \"BSP Co., Ltd.\",\n\t[3]byte{4, 182, 72}:    \"ZENNER\",\n\t[3]byte{4, 186, 54}:    \"Li Seng Technology Ltd\",\n\t[3]byte{4, 186, 141}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{4, 187, 249}:   \"Pavilion Data Systems Inc\",\n\t[3]byte{4, 188, 135}:   \"Shenzhen JustLink Technology Co., LTD\",\n\t[3]byte{4, 189, 112}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 189, 136}:   \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{4, 189, 191}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{4, 191, 109}:   \"Zyxel Communications Corporation\",\n\t[3]byte{4, 191, 168}:   \"ISB Corporation\",\n\t[3]byte{4, 192, 91}:    \"Tigo Energy\",\n\t[3]byte{4, 192, 111}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 192, 156}:   \"Tellabs Inc.\",\n\t[3]byte{4, 193, 3}:     \"Clover Network, Inc.\",\n\t[3]byte{4, 193, 185}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{4, 193, 216}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{4, 194, 62}:    \"HTC Corporation\",\n\t[3]byte{4, 194, 65}:    \"Nokia\",\n\t[3]byte{4, 195, 230}:   \"IEEE Registration Authority\",\n\t[3]byte{4, 197, 164}:   \"Cisco Systems, Inc\",\n\t[3]byte{4, 200, 7}:     \"Xiaomi Communications Co Ltd\",\n\t[3]byte{4, 200, 128}:   \"Samtec Inc\",\n\t[3]byte{4, 201, 145}:   \"Phistek INC.\",\n\t[3]byte{4, 201, 217}:   \"Dish Technologies Corp\",\n\t[3]byte{4, 203, 29}:    \"Traka plc\",\n\t[3]byte{4, 203, 136}:   \"Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd\",\n\t[3]byte{4, 206, 20}:    \"Wilocity LTD.\",\n\t[3]byte{4, 206, 126}:   \"NXP France Semiconductors France\",\n\t[3]byte{4, 207, 37}:    \"MANYCOLORS, INC.\",\n\t[3]byte{4, 207, 140}:   \"XIAOMI Electronics,CO.,LTD\",\n\t[3]byte{4, 209, 58}:    \"Xiaomi Communications Co Ltd\",\n\t[3]byte{4, 209, 110}:   \"IEEE Registration Authority\",\n\t[3]byte{4, 211, 149}:   \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{4, 211, 176}:   \"Intel Corporate\",\n\t[3]byte{4, 211, 181}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{4, 211, 207}:   \"Apple, Inc.\",\n\t[3]byte{4, 212, 55}:    \"ZNV\",\n\t[3]byte{4, 212, 196}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{4, 213, 144}:   \"Fortinet, Inc.\",\n\t[3]byte{4, 214, 170}:   \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{4, 215, 131}:   \"Y&H E&C Co.,LTD.\",\n\t[3]byte{4, 215, 165}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{4, 217, 245}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{4, 218, 210}:   \"Cisco Systems, Inc\",\n\t[3]byte{4, 219, 86}:    \"Apple, Inc.\",\n\t[3]byte{4, 219, 138}:   \"Suntech International Ltd.\",\n\t[3]byte{4, 221, 76}:    \"Velocytech\",\n\t[3]byte{4, 222, 219}:   \"Rockport Networks Inc\",\n\t[3]byte{4, 222, 242}:   \"Shenzhen ECOM Technology Co. Ltd\",\n\t[3]byte{4, 223, 105}:   \"Car Connectivity Consortium\",\n\t[3]byte{4, 224, 176}:   \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{4, 224, 196}:   \"TRIUMPH-ADLER AG\",\n\t[3]byte{4, 225, 200}:   \"IMS Soluções em Energia Ltda.\",\n\t[3]byte{4, 226, 41}:    \"Qingdao Haier Technology Co.,Ltd\",\n\t[3]byte{4, 226, 248}:   \"AEP Ticketing solutions srl\",\n\t[3]byte{4, 228, 81}:    \"Texas Instruments\",\n\t[3]byte{4, 229, 54}:    \"Apple, Inc.\",\n\t[3]byte{4, 229, 72}:    \"Cohda Wireless Pty Ltd\",\n\t[3]byte{4, 229, 110}:   \"THUB Co., ltd.\",\n\t[3]byte{4, 229, 152}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{4, 230, 98}:    \"Acroname Inc.\",\n\t[3]byte{4, 230, 118}:   \"AMPAK Technology, Inc.\",\n\t[3]byte{4, 231, 149}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 233, 229}:   \"PJRC.COM, LLC\",\n\t[3]byte{4, 234, 86}:    \"Intel Corporate\",\n\t[3]byte{4, 235, 64}:    \"Cisco Systems, Inc\",\n\t[3]byte{4, 236, 187}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{4, 237, 51}:    \"Intel Corporate\",\n\t[3]byte{4, 238, 3}:     \"Texas Instruments\",\n\t[3]byte{4, 238, 145}:   \"x-fabric GmbH\",\n\t[3]byte{4, 240, 33}:    \"Compex Systems Pte Ltd\",\n\t[3]byte{4, 241, 40}:    \"HMD Global Oy\",\n\t[3]byte{4, 241, 62}:    \"Apple, Inc.\",\n\t[3]byte{4, 241, 105}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{4, 241, 125}:   \"Tarana Wireless\",\n\t[3]byte{4, 244, 188}:   \"Xena Networks\",\n\t[3]byte{4, 245, 244}:   \"Proxim Wireless\",\n\t[3]byte{4, 247, 228}:   \"Apple, Inc.\",\n\t[3]byte{4, 248, 194}:   \"Flaircomm Microelectronics, Inc.\",\n\t[3]byte{4, 248, 248}:   \"Edgecore Networks Corporation\",\n\t[3]byte{4, 249, 56}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 249, 217}:   \"Speaker Electronic(Jiashan) Co.,Ltd\",\n\t[3]byte{4, 250, 63}:    \"Opticore Inc.\",\n\t[3]byte{4, 250, 131}:   \"Qingdao Haier Technology Co.,Ltd\",\n\t[3]byte{4, 254, 49}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{4, 254, 127}:   \"Cisco Systems, Inc\",\n\t[3]byte{4, 254, 141}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{4, 254, 161}:   \"Fihonest communication co.,Ltd\",\n\t[3]byte{4, 255, 81}:    \"NOVAMEDIA INNOVISION SP. Z O.O.\",\n\t[3]byte{8, 0, 1}:       \"COMPUTERVISION CORPORATION\",\n\t[3]byte{8, 0, 2}:       \"BRIDGE COMMUNICATIONS INC.\",\n\t[3]byte{8, 0, 3}:       \"ADVANCED COMPUTER COMM.\",\n\t[3]byte{8, 0, 4}:       \"CROMEMCO INCORPORATED\",\n\t[3]byte{8, 0, 5}:       \"SYMBOLICS INC.\",\n\t[3]byte{8, 0, 6}:       \"SIEMENS AG\",\n\t[3]byte{8, 0, 7}:       \"Apple, Inc.\",\n\t[3]byte{8, 0, 8}:       \"BOLT BERANEK AND NEWMAN INC.\",\n\t[3]byte{8, 0, 9}:       \"Hewlett Packard\",\n\t[3]byte{8, 0, 10}:      \"NESTAR SYSTEMS INCORPORATED\",\n\t[3]byte{8, 0, 11}:      \"UNISYS CORPORATION\",\n\t[3]byte{8, 0, 12}:      \"MIKLYN DEVELOPMENT CO.\",\n\t[3]byte{8, 0, 13}:      \"International Computers, Ltd\",\n\t[3]byte{8, 0, 14}:      \"NCR CORPORATION\",\n\t[3]byte{8, 0, 15}:      \"MITEL CORPORATION\",\n\t[3]byte{8, 0, 17}:      \"TEKTRONIX INC.\",\n\t[3]byte{8, 0, 18}:      \"BELL ATLANTIC INTEGRATED SYST.\",\n\t[3]byte{8, 0, 19}:      \"Exxon\",\n\t[3]byte{8, 0, 20}:      \"EXCELAN\",\n\t[3]byte{8, 0, 21}:      \"STC BUSINESS SYSTEMS\",\n\t[3]byte{8, 0, 22}:      \"BARRISTER INFO SYS CORP\",\n\t[3]byte{8, 0, 23}:      \"NATIONAL SEMICONDUCTOR\",\n\t[3]byte{8, 0, 24}:      \"PIRELLI FOCOM NETWORKS\",\n\t[3]byte{8, 0, 25}:      \"GENERAL ELECTRIC CORPORATION\",\n\t[3]byte{8, 0, 26}:      \"TIARA/ 10NET\",\n\t[3]byte{8, 0, 27}:      \"Dell EMC\",\n\t[3]byte{8, 0, 28}:      \"KDD-KOKUSAI DEBNSIN DENWA CO.\",\n\t[3]byte{8, 0, 29}:      \"ABLE COMMUNICATIONS INC.\",\n\t[3]byte{8, 0, 30}:      \"APOLLO COMPUTER INC.\",\n\t[3]byte{8, 0, 31}:      \"SHARP CORPORATION\",\n\t[3]byte{8, 0, 32}:      \"Oracle Corporation\",\n\t[3]byte{8, 0, 33}:      \"3M COMPANY\",\n\t[3]byte{8, 0, 34}:      \"NBI INC.\",\n\t[3]byte{8, 0, 35}:      \"Panasonic Communications Co., Ltd.\",\n\t[3]byte{8, 0, 36}:      \"10NET COMMUNICATIONS/DCA\",\n\t[3]byte{8, 0, 37}:      \"CONTROL DATA\",\n\t[3]byte{8, 0, 38}:      \"NORSK DATA A.S.\",\n\t[3]byte{8, 0, 39}:      \"PCS Systemtechnik GmbH\",\n\t[3]byte{8, 0, 40}:      \"Texas Instruments\",\n\t[3]byte{8, 0, 41}:      \"Megatek Corporation\",\n\t[3]byte{8, 0, 42}:      \"MOSAIC TECHNOLOGIES INC.\",\n\t[3]byte{8, 0, 43}:      \"DIGITAL EQUIPMENT CORPORATION\",\n\t[3]byte{8, 0, 44}:      \"BRITTON LEE INC.\",\n\t[3]byte{8, 0, 45}:      \"LAN-TEC INC.\",\n\t[3]byte{8, 0, 46}:      \"METAPHOR COMPUTER SYSTEMS\",\n\t[3]byte{8, 0, 47}:      \"PRIME COMPUTER INC.\",\n\t[3]byte{8, 0, 48}:      \"NETWORK RESEARCH CORPORATION\",\n\t[3]byte{8, 0, 48}:      \"ROYAL MELBOURNE INST OF TECH\",\n\t[3]byte{8, 0, 48}:      \"CERN\",\n\t[3]byte{8, 0, 49}:      \"LITTLE MACHINES INC.\",\n\t[3]byte{8, 0, 50}:      \"TIGAN INCORPORATED\",\n\t[3]byte{8, 0, 51}:      \"BAUSCH & LOMB\",\n\t[3]byte{8, 0, 52}:      \"FILENET CORPORATION\",\n\t[3]byte{8, 0, 53}:      \"MICROFIVE CORPORATION\",\n\t[3]byte{8, 0, 54}:      \"INTERGRAPH CORPORATION\",\n\t[3]byte{8, 0, 55}:      \"FUJI-XEROX CO. LTD.\",\n\t[3]byte{8, 0, 56}:      \"BULL S.A.S.\",\n\t[3]byte{8, 0, 57}:      \"SPIDER SYSTEMS LIMITED\",\n\t[3]byte{8, 0, 58}:      \"ORCATECH INC.\",\n\t[3]byte{8, 0, 59}:      \"TORUS SYSTEMS LIMITED\",\n\t[3]byte{8, 0, 60}:      \"SCHLUMBERGER WELL SERVICES\",\n\t[3]byte{8, 0, 61}:      \"CADNETIX CORPORATIONS\",\n\t[3]byte{8, 0, 62}:      \"CODEX CORPORATION\",\n\t[3]byte{8, 0, 63}:      \"FRED KOSCHARA ENTERPRISES\",\n\t[3]byte{8, 0, 64}:      \"FERRANTI COMPUTER SYS. LIMITED\",\n\t[3]byte{8, 0, 65}:      \"RACAL-MILGO INFORMATION SYS..\",\n\t[3]byte{8, 0, 66}:      \"JAPAN MACNICS CORP.\",\n\t[3]byte{8, 0, 67}:      \"PIXEL COMPUTER INC.\",\n\t[3]byte{8, 0, 68}:      \"DAVID SYSTEMS INC.\",\n\t[3]byte{8, 0, 69}:      \"CONCURRENT COMPUTER CORP.\",\n\t[3]byte{8, 0, 70}:      \"Sony Corporation\",\n\t[3]byte{8, 0, 71}:      \"SEQUENT COMPUTER SYSTEMS INC.\",\n\t[3]byte{8, 0, 72}:      \"EUROTHERM GAUGING SYSTEMS\",\n\t[3]byte{8, 0, 73}:      \"UNIVATION\",\n\t[3]byte{8, 0, 74}:      \"BANYAN SYSTEMS INC.\",\n\t[3]byte{8, 0, 75}:      \"Planning Research Corp.\",\n\t[3]byte{8, 0, 76}:      \"HYDRA COMPUTER SYSTEMS INC.\",\n\t[3]byte{8, 0, 77}:      \"CORVUS SYSTEMS INC.\",\n\t[3]byte{8, 0, 78}:      \"3COM EUROPE LTD\",\n\t[3]byte{8, 0, 79}:      \"CYGNET SYSTEMS\",\n\t[3]byte{8, 0, 80}:      \"DAISY SYSTEMS CORP.\",\n\t[3]byte{8, 0, 81}:      \"ExperData\",\n\t[3]byte{8, 0, 82}:      \"INSYSTEC\",\n\t[3]byte{8, 0, 83}:      \"MIDDLE EAST TECH. UNIVERSITY\",\n\t[3]byte{8, 0, 85}:      \"STANFORD TELECOMM. INC.\",\n\t[3]byte{8, 0, 86}:      \"STANFORD LINEAR ACCEL. CENTER\",\n\t[3]byte{8, 0, 87}:      \"Evans & Sutherland\",\n\t[3]byte{8, 0, 88}:      \"SYSTEMS CONCEPTS\",\n\t[3]byte{8, 0, 89}:      \"A/S MYCRON\",\n\t[3]byte{8, 0, 90}:      \"IBM Corp\",\n\t[3]byte{8, 0, 91}:      \"VTA TECHNOLOGIES INC.\",\n\t[3]byte{8, 0, 92}:      \"FOUR PHASE SYSTEMS\",\n\t[3]byte{8, 0, 93}:      \"GOULD INC.\",\n\t[3]byte{8, 0, 94}:      \"COUNTERPOINT COMPUTER INC.\",\n\t[3]byte{8, 0, 95}:      \"SABER TECHNOLOGY CORP.\",\n\t[3]byte{8, 0, 96}:      \"INDUSTRIAL NETWORKING INC.\",\n\t[3]byte{8, 0, 97}:      \"JAROGATE LTD.\",\n\t[3]byte{8, 0, 98}:      \"General Dynamics\",\n\t[3]byte{8, 0, 99}:      \"PLESSEY\",\n\t[3]byte{8, 0, 100}:     \"Sitasys AG\",\n\t[3]byte{8, 0, 101}:     \"GENRAD INC.\",\n\t[3]byte{8, 0, 102}:     \"AGFA CORPORATION\",\n\t[3]byte{8, 0, 103}:     \"ComDesign\",\n\t[3]byte{8, 0, 104}:     \"RIDGE COMPUTERS\",\n\t[3]byte{8, 0, 105}:     \"Silicon Graphics\",\n\t[3]byte{8, 0, 106}:     \"AT&T\",\n\t[3]byte{8, 0, 107}:     \"ACCEL TECHNOLOGIES INC.\",\n\t[3]byte{8, 0, 108}:     \"SUNTEK TECHNOLOGY INT'L\",\n\t[3]byte{8, 0, 109}:     \"WHITECHAPEL COMPUTER WORKS\",\n\t[3]byte{8, 0, 110}:     \"MASSCOMP\",\n\t[3]byte{8, 0, 111}:     \"PHILIPS APELDOORN B.V.\",\n\t[3]byte{8, 0, 112}:     \"Mitsubishi Precision Co.,LTd.\",\n\t[3]byte{8, 0, 113}:     \"MATRA (DSIE)\",\n\t[3]byte{8, 0, 114}:     \"XEROX CORP UNIV GRANT PROGRAM\",\n\t[3]byte{8, 0, 115}:     \"TECMAR INC.\",\n\t[3]byte{8, 0, 116}:     \"CASIO COMPUTER CO. LTD.\",\n\t[3]byte{8, 0, 117}:     \"DANSK DATA ELECTRONIK\",\n\t[3]byte{8, 0, 118}:     \"PC LAN TECHNOLOGIES\",\n\t[3]byte{8, 0, 119}:     \"TSL COMMUNICATIONS LTD.\",\n\t[3]byte{8, 0, 120}:     \"ACCELL CORPORATION\",\n\t[3]byte{8, 0, 121}:     \"THE DROID WORKS\",\n\t[3]byte{8, 0, 122}:     \"INDATA\",\n\t[3]byte{8, 0, 123}:     \"SANYO ELECTRIC CO. LTD.\",\n\t[3]byte{8, 0, 124}:     \"VITALINK COMMUNICATIONS CORP.\",\n\t[3]byte{8, 0, 126}:     \"AMALGAMATED WIRELESS(AUS) LTD\",\n\t[3]byte{8, 0, 127}:     \"CARNEGIE-MELLON UNIVERSITY\",\n\t[3]byte{8, 0, 128}:     \"AES DATA INC.\",\n\t[3]byte{8, 0, 129}:     \"ASTECH INC.\",\n\t[3]byte{8, 0, 130}:     \"VERITAS SOFTWARE\",\n\t[3]byte{8, 0, 131}:     \"Seiko Instruments Inc.\",\n\t[3]byte{8, 0, 132}:     \"TOMEN ELECTRONICS CORP.\",\n\t[3]byte{8, 0, 133}:     \"ELXSI\",\n\t[3]byte{8, 0, 134}:     \"KONICA MINOLTA HOLDINGS, INC.\",\n\t[3]byte{8, 0, 135}:     \"Xyplex, Inc.\",\n\t[3]byte{8, 0, 136}:     \"Brocade Communications Systems LLC\",\n\t[3]byte{8, 0, 137}:     \"Kinetics\",\n\t[3]byte{8, 0, 138}:     \"PerfTech, Inc.\",\n\t[3]byte{8, 0, 139}:     \"PYRAMID TECHNOLOGY CORP.\",\n\t[3]byte{8, 0, 140}:     \"NETWORK RESEARCH CORPORATION\",\n\t[3]byte{8, 0, 141}:     \"XYVISION INC.\",\n\t[3]byte{8, 0, 142}:     \"Tandem Computers\",\n\t[3]byte{8, 0, 143}:     \"CHIPCOM CORPORATION\",\n\t[3]byte{8, 0, 144}:     \"SONOMA SYSTEMS\",\n\t[3]byte{8, 1, 15}:      \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{8, 2, 142}:     \"NETGEAR\",\n\t[3]byte{8, 3, 66}:      \"Palo Alto Networks\",\n\t[3]byte{8, 3, 113}:     \"KRG CORPORATE\",\n\t[3]byte{8, 5, 129}:     \"Roku, Inc.\",\n\t[3]byte{8, 5, 205}:     \"DongGuang EnMai Electronic Product Co.Ltd.\",\n\t[3]byte{8, 8, 194}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{8, 8, 234}:     \"AMSC\",\n\t[3]byte{8, 9, 182}:     \"Masimo Corp\",\n\t[3]byte{8, 9, 199}:     \"Zhuhai Unitech Power Technology Co., Ltd.\",\n\t[3]byte{8, 10, 78}:     \"Planet Bingo® — 3rd Rock Gaming®\",\n\t[3]byte{8, 12, 11}:     \"SysMik GmbH Dresden\",\n\t[3]byte{8, 12, 201}:    \"Mission Technology Group, dba Magma\",\n\t[3]byte{8, 13, 132}:    \"GECO, Inc.\",\n\t[3]byte{8, 14, 168}:    \"Velex s.r.l.\",\n\t[3]byte{8, 15, 250}:    \"KSP INC.\",\n\t[3]byte{8, 17, 94}:     \"Bitel Co., Ltd.\",\n\t[3]byte{8, 17, 150}:    \"Intel Corporate\",\n\t[3]byte{8, 18, 165}:    \"Amazon Technologies Inc.\",\n\t[3]byte{8, 20, 67}:     \"UNIBRAIN S.A.\",\n\t[3]byte{8, 21, 47}:     \"Samsung Electronics Co., Ltd. ARTIK\",\n\t[3]byte{8, 22, 81}:     \"SHENZHEN SEA STAR TECHNOLOGY CO.,LTD\",\n\t[3]byte{8, 23, 53}:     \"Cisco Systems, Inc\",\n\t[3]byte{8, 23, 244}:    \"IBM Corp\",\n\t[3]byte{8, 24, 26}:     \"zte corporation\",\n\t[3]byte{8, 24, 76}:     \"A. S. Thomas, Inc.\",\n\t[3]byte{8, 25, 166}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{8, 29, 196}:    \"Thermo Fisher Scientific Messtechnik GmbH\",\n\t[3]byte{8, 29, 251}:    \"Shanghai Mexon Communication Technology Co.,Ltd\",\n\t[3]byte{8, 31, 63}:     \"WondaLink Inc.\",\n\t[3]byte{8, 31, 113}:    \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{8, 31, 235}:    \"BinCube\",\n\t[3]byte{8, 31, 243}:    \"Cisco Systems, Inc\",\n\t[3]byte{8, 33, 239}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{8, 35, 178}:    \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{8, 37, 34}:     \"ADVANSEE\",\n\t[3]byte{8, 37, 37}:     \"Xiaomi Communications Co Ltd\",\n\t[3]byte{8, 38, 151}:    \"Zyxel Communications Corporation\",\n\t[3]byte{8, 39, 25}:     \"APS systems/electronic AG\",\n\t[3]byte{8, 39, 206}:    \"NAGANO KEIKI CO., LTD.\",\n\t[3]byte{8, 42, 208}:    \"SRD Innovations Inc.\",\n\t[3]byte{8, 44, 176}:    \"Network Instruments\",\n\t[3]byte{8, 44, 182}:    \"Apple, Inc.\",\n\t[3]byte{8, 46, 95}:     \"Hewlett Packard\",\n\t[3]byte{8, 48, 107}:    \"Palo Alto Networks\",\n\t[3]byte{8, 49, 139}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{8, 49, 164}:    \"Huawei Device Co., Ltd.\",\n\t[3]byte{8, 53, 27}:     \"Shenzhen Jialihua Electronic Technology Co., Ltd\",\n\t[3]byte{8, 53, 113}:    \"CASwell INC.\",\n\t[3]byte{8, 53, 178}:    \"CoreEdge Networks Co., Ltd\",\n\t[3]byte{8, 54, 201}:    \"NETGEAR\",\n\t[3]byte{8, 55, 61}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{8, 55, 156}:    \"Topaz Co. LTD.\",\n\t[3]byte{8, 56, 105}:    \"Hong Kong AMobile Intelligent Corp. Limited Taiwan Branch\",\n\t[3]byte{8, 56, 165}:    \"Funkwerk plettac electronic GmbH\",\n\t[3]byte{8, 58, 47}:     \"Guangzhou Juan Intelligent Tech Joint Stock Co.,Ltd\",\n\t[3]byte{8, 58, 92}:     \"Junilab, Inc.\",\n\t[3]byte{8, 58, 136}:    \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{8, 58, 184}:    \"Shinoda Plasma Co., Ltd.\",\n\t[3]byte{8, 58, 242}:    \"Espressif Inc.\",\n\t[3]byte{8, 61, 136}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{8, 62, 12}:     \"ARRIS Group, Inc.\",\n\t[3]byte{8, 62, 93}:     \"Sagemcom Broadband SAS\",\n\t[3]byte{8, 62, 142}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{8, 63, 62}:     \"WSH GmbH\",\n\t[3]byte{8, 63, 118}:    \"Intellian Technologies, Inc.\",\n\t[3]byte{8, 63, 188}:    \"zte corporation\",\n\t[3]byte{8, 64, 39}:     \"Gridstore Inc.\",\n\t[3]byte{8, 64, 243}:    \"Tenda Technology Co.,Ltd.Dongguan branch\",\n\t[3]byte{8, 66, 150}:    \"Mobile Technology Solutions LLC\",\n\t[3]byte{8, 70, 86}:     \"VEO-LABS\",\n\t[3]byte{8, 71, 208}:    \"Nokia Shanghai Bell Co., Ltd.\",\n\t[3]byte{8, 72, 44}:     \"Raycore Taiwan Co., LTD.\",\n\t[3]byte{8, 74, 207}:    \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{8, 78, 28}:     \"H2A Systems, LLC\",\n\t[3]byte{8, 78, 191}:    \"Sumitomo Electric Industries, Ltd\",\n\t[3]byte{8, 79, 10}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{8, 79, 169}:    \"Cisco Systems, Inc\",\n\t[3]byte{8, 79, 249}:    \"Cisco Systems, Inc\",\n\t[3]byte{8, 81, 20}:     \"QINGDAO TOPSCOMM COMMUNICATION CO., LTD\",\n\t[3]byte{8, 81, 46}:     \"Orion Diagnostica Oy\",\n\t[3]byte{8, 82, 64}:     \"EbV Elektronikbau- und Vertriebs GmbH\",\n\t[3]byte{8, 84, 187}:    \"SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\",\n\t[3]byte{8, 87, 0}:      \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{8, 90, 224}:    \"Recovision Technology Co., Ltd.\",\n\t[3]byte{8, 91, 14}:     \"Fortinet, Inc.\",\n\t[3]byte{8, 91, 214}:    \"Intel Corporate\",\n\t[3]byte{8, 91, 218}:    \"CliniCare LTD\",\n\t[3]byte{8, 93, 221}:    \"MERCURY CORPORATION\",\n\t[3]byte{8, 96, 110}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{8, 96, 131}:    \"zte corporation\",\n\t[3]byte{8, 97, 149}:    \"Rockwell Automation\",\n\t[3]byte{8, 98, 102}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{8, 99, 97}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{8, 102, 31}:    \"Palo Alto Networks\",\n\t[3]byte{8, 102, 152}:   \"Apple, Inc.\",\n\t[3]byte{8, 103, 78}:    \"Hisense broadband multimedia technology Co.,Ltd\",\n\t[3]byte{8, 104, 141}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{8, 104, 208}:   \"Japan System Design\",\n\t[3]byte{8, 104, 234}:   \"EITO ELECTRONICS CO., LTD.\",\n\t[3]byte{8, 106, 10}:    \"ASKEY COMPUTER CORP\",\n\t[3]byte{8, 107, 209}:   \"Shenzhen SuperElectron Technology Co.,Ltd.\",\n\t[3]byte{8, 107, 215}:   \"Silicon Laboratories\",\n\t[3]byte{8, 109, 65}:    \"Apple, Inc.\",\n\t[3]byte{8, 109, 242}:   \"Shenzhen MIMOWAVE Technology Co.,Ltd\",\n\t[3]byte{8, 112, 69}:    \"Apple, Inc.\",\n\t[3]byte{8, 113, 144}:   \"Intel Corporate\",\n\t[3]byte{8, 116, 2}:     \"Apple, Inc.\",\n\t[3]byte{8, 116, 246}:   \"Winterhalter Gastronom GmbH\",\n\t[3]byte{8, 117, 114}:   \"Obelux Oy\",\n\t[3]byte{8, 118, 24}:    \"ViE Technologies Sdn. Bhd.\",\n\t[3]byte{8, 118, 149}:   \"Auto Industrial Co., Ltd.\",\n\t[3]byte{8, 118, 255}:   \"Thomson Telecom Belgium\",\n\t[3]byte{8, 120, 8}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{8, 121, 153}:   \"AIM GmbH\",\n\t[3]byte{8, 122, 76}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{8, 123, 170}:   \"SVYAZKOMPLEKTSERVICE, LLC\",\n\t[3]byte{8, 124, 190}:   \"Quintic Corp.\",\n\t[3]byte{8, 125, 33}:    \"Altasec technology corporation\",\n\t[3]byte{8, 126, 100}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{8, 127, 152}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{8, 128, 57}:    \"Cisco SPVTG\",\n\t[3]byte{8, 129, 188}:   \"HongKong Ipro Technology Co., Limited\",\n\t[3]byte{8, 129, 244}:   \"Juniper Networks\",\n\t[3]byte{8, 132, 102}:   \"Novartis Pharma AG\",\n\t[3]byte{8, 132, 157}:   \"Amazon Technologies Inc.\",\n\t[3]byte{8, 134, 32}:    \"TECNO MOBILE LIMITED\",\n\t[3]byte{8, 134, 59}:    \"Belkin International Inc.\",\n\t[3]byte{8, 135, 198}:   \"INGRAM MICRO SERVICES\",\n\t[3]byte{8, 140, 44}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{8, 141, 200}:   \"Ryowa Electronics Co.,Ltd\",\n\t[3]byte{8, 142, 79}:    \"SF Software Solutions\",\n\t[3]byte{8, 143, 44}:    \"Amber Technology Ltd.\",\n\t[3]byte{8, 144, 186}:   \"Danlaw Inc\",\n\t[3]byte{8, 148, 239}:   \"Wistron Infocomm (Zhongshan) Corporation\",\n\t[3]byte{8, 149, 42}:    \"Technicolor CH USA Inc.\",\n\t[3]byte{8, 150, 173}:   \"Cisco Systems, Inc\",\n\t[3]byte{8, 150, 215}:   \"AVM GmbH\",\n\t[3]byte{8, 151, 52}:    \"Hewlett Packard Enterprise\",\n\t[3]byte{8, 151, 88}:    \"Shenzhen Strong Rising Electronics Co.,Ltd DongGuan Subsidiary\",\n\t[3]byte{8, 151, 152}:   \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{8, 155, 75}:    \"iKuai Networks\",\n\t[3]byte{8, 155, 185}:   \"Nokia\",\n\t[3]byte{8, 156, 134}:   \"Nokia Shanghai Bell Co., Ltd.\",\n\t[3]byte{8, 158, 1}:     \"Quanta Computer Inc.\",\n\t[3]byte{8, 158, 8}:     \"Google, Inc.\",\n\t[3]byte{8, 159, 151}:   \"LEROY AUTOMATION\",\n\t[3]byte{8, 161, 43}:    \"ShenZhen EZL Technology Co., Ltd\",\n\t[3]byte{8, 165, 200}:   \"Sunnovo International Limited\",\n\t[3]byte{8, 166, 188}:   \"Amazon Technologies Inc.\",\n\t[3]byte{8, 168, 161}:   \"Cyclotronics Power Concepts, Inc\",\n\t[3]byte{8, 169, 90}:    \"AzureWave Technology Inc.\",\n\t[3]byte{8, 170, 85}:    \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{8, 172, 165}:   \"Benu Video, Inc.\",\n\t[3]byte{8, 172, 196}:   \"FMTech\",\n\t[3]byte{8, 174, 214}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{8, 175, 120}:   \"Totus Solutions, Inc.\",\n\t[3]byte{8, 176, 85}:    \"ASKEY COMPUTER CORP\",\n\t[3]byte{8, 176, 167}:   \"Truebeyond Co., Ltd\",\n\t[3]byte{8, 178, 88}:    \"Juniper Networks\",\n\t[3]byte{8, 178, 163}:   \"Cynny Italia S.r.L.\",\n\t[3]byte{8, 179, 175}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{8, 180, 207}:   \"Abicom International\",\n\t[3]byte{8, 183, 56}:    \"Lite-On Technogy Corp.\",\n\t[3]byte{8, 183, 236}:   \"Wireless Seismic\",\n\t[3]byte{8, 186, 34}:    \"Swaive Corporation\",\n\t[3]byte{8, 186, 95}:    \"Qingdao Hisense Electronics Co.,Ltd.\",\n\t[3]byte{8, 187, 204}:   \"AK-NORD EDV VERTRIEBSGES. mbH\",\n\t[3]byte{8, 188, 32}:    \"Hangzhou Royal Cloud Technology Co., Ltd\",\n\t[3]byte{8, 189, 67}:    \"NETGEAR\",\n\t[3]byte{8, 190, 9}:     \"Astrol Electronic AG\",\n\t[3]byte{8, 190, 119}:   \"Green Electronics\",\n\t[3]byte{8, 190, 172}:   \"Edimax Technology Co. Ltd.\",\n\t[3]byte{8, 191, 160}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{8, 192, 33}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{8, 192, 235}:   \"Mellanox Technologies, Inc.\",\n\t[3]byte{8, 197, 225}:   \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{8, 198, 179}:   \"QTECH LLC\",\n\t[3]byte{8, 202, 69}:    \"Toyou Feiji Electronics Co., Ltd.\",\n\t[3]byte{8, 204, 39}:    \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{8, 204, 104}:   \"Cisco Systems, Inc\",\n\t[3]byte{8, 204, 167}:   \"Cisco Systems, Inc\",\n\t[3]byte{8, 205, 155}:   \"samtec automotive electronics & software GmbH\",\n\t[3]byte{8, 208, 159}:   \"Cisco Systems, Inc\",\n\t[3]byte{8, 208, 183}:   \"Qingdao Hisense Communications Co.,Ltd.\",\n\t[3]byte{8, 210, 62}:    \"Intel Corporate\",\n\t[3]byte{8, 210, 154}:   \"Proformatique\",\n\t[3]byte{8, 211, 75}:    \"Techman Electronics (Changshu) Co., Ltd.\",\n\t[3]byte{8, 212, 12}:    \"Intel Corporate\",\n\t[3]byte{8, 212, 43}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{8, 212, 106}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{8, 213, 157}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{8, 213, 192}:   \"Seers Technology Co., Ltd\",\n\t[3]byte{8, 216, 51}:    \"Shenzhen RF Technology Co., Ltd\",\n\t[3]byte{8, 223, 31}:    \"Bose Corporation\",\n\t[3]byte{8, 223, 203}:   \"Systrome Networks\",\n\t[3]byte{8, 229, 218}:   \"NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD. \",\n\t[3]byte{8, 230, 114}:   \"JEBSEE ELECTRONICS CO.,LTD.\",\n\t[3]byte{8, 230, 137}:   \"Apple, Inc.\",\n\t[3]byte{8, 232, 79}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{8, 233, 246}:   \"AMPAK Technology,Inc.\",\n\t[3]byte{8, 234, 64}:    \"SHENZHEN BILIAN ELECTRONIC CO.，LTD\",\n\t[3]byte{8, 234, 68}:    \"Extreme Networks, Inc.\",\n\t[3]byte{8, 235, 41}:    \"Jiangsu Huitong Group Co.,Ltd.\",\n\t[3]byte{8, 235, 116}:   \"HUMAX Co., Ltd.\",\n\t[3]byte{8, 235, 237}:   \"World Elite Technology Co.,LTD\",\n\t[3]byte{8, 236, 169}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{8, 236, 245}:   \"Cisco Systems, Inc\",\n\t[3]byte{8, 237, 2}:     \"IEEE Registration Authority\",\n\t[3]byte{8, 237, 157}:   \"TECNO MOBILE LIMITED\",\n\t[3]byte{8, 237, 185}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{8, 237, 237}:   \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{8, 238, 139}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{8, 239, 59}:    \"MCS Logic Inc.\",\n\t[3]byte{8, 239, 171}:   \"SAYME WIRELESS SENSOR NETWORK\",\n\t[3]byte{8, 241, 183}:   \"Towerstream Corpration\",\n\t[3]byte{8, 241, 234}:   \"Hewlett Packard Enterprise\",\n\t[3]byte{8, 242, 244}:   \"Net One Partners Co.,Ltd.\",\n\t[3]byte{8, 244, 88}:    \"Huawei Device Co., Ltd.\",\n\t[3]byte{8, 244, 171}:   \"Apple, Inc.\",\n\t[3]byte{8, 246, 156}:   \"Apple, Inc.\",\n\t[3]byte{8, 246, 248}:   \"GET Engineering\",\n\t[3]byte{8, 247, 40}:    \"GLOBO Multimedia Sp. z o.o. Sp.k.\",\n\t[3]byte{8, 247, 233}:   \"HRCP Research and Development Partnership\",\n\t[3]byte{8, 248, 188}:   \"Apple, Inc.\",\n\t[3]byte{8, 250, 121}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{8, 250, 224}:   \"Fohhn Audio AG\",\n\t[3]byte{8, 251, 234}:   \"AMPAK Technology,Inc.\",\n\t[3]byte{8, 252, 82}:    \"OpenXS BV\",\n\t[3]byte{8, 252, 136}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{8, 253, 14}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{12, 1, 219}:    \"Infinix mobility limited\",\n\t[3]byte{12, 2, 39}:     \"Technicolor CH USA Inc.\",\n\t[3]byte{12, 4, 0}:      \"Jantar d.o.o.\",\n\t[3]byte{12, 5, 53}:     \"Juniper Systems\",\n\t[3]byte{12, 8, 180}:    \"HUMAX Co., Ltd.\",\n\t[3]byte{12, 17, 5}:     \"AKUVOX (XIAMEN) NETWORKS CO., LTD\",\n\t[3]byte{12, 17, 103}:   \"Cisco Systems, Inc\",\n\t[3]byte{12, 18, 98}:    \"zte corporation\",\n\t[3]byte{12, 19, 11}:    \"Uniqoteq Ltd.\",\n\t[3]byte{12, 20, 32}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{12, 20, 210}:   \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{12, 21, 57}:    \"Apple, Inc.\",\n\t[3]byte{12, 21, 197}:   \"SDTEC Co., Ltd.\",\n\t[3]byte{12, 23, 241}:   \"TELECSYS\",\n\t[3]byte{12, 25, 31}:    \"Inform Electronik\",\n\t[3]byte{12, 26, 16}:    \"Acoustic Stream\",\n\t[3]byte{12, 28, 25}:    \"LONGCONN ELECTRONICS(SHENZHEN) CO.,LTD\",\n\t[3]byte{12, 28, 32}:    \"Kakao Corp\",\n\t[3]byte{12, 28, 87}:    \"Texas Instruments\",\n\t[3]byte{12, 29, 175}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{12, 29, 194}:   \"SeAH Networks\",\n\t[3]byte{12, 32, 38}:    \"noax Technologies AG\",\n\t[3]byte{12, 32, 211}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{12, 33, 56}:    \"Hengstler GmbH\",\n\t[3]byte{12, 35, 105}:   \"Honeywell SPS\",\n\t[3]byte{12, 37, 118}:   \"LONGCHEER TELECOMMUNICATION LIMITED\",\n\t[3]byte{12, 39, 36}:    \"Cisco Systems, Inc\",\n\t[3]byte{12, 39, 85}:    \"Valuable Techologies Limited\",\n\t[3]byte{12, 41, 239}:   \"Dell Inc.\",\n\t[3]byte{12, 42, 105}:   \"electric imp, incorporated\",\n\t[3]byte{12, 42, 134}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{12, 42, 231}:   \"Beijing General Research Institute of Mining and Metallurgy\",\n\t[3]byte{12, 44, 84}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{12, 45, 137}:   \"QiiQ Communications Inc.\",\n\t[3]byte{12, 47, 176}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{12, 48, 33}:    \"Apple, Inc.\",\n\t[3]byte{12, 49, 220}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{12, 53, 254}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{12, 55, 71}:    \"zte corporation\",\n\t[3]byte{12, 55, 150}:   \"BIZLINK TECHNOLOGY, INC.\",\n\t[3]byte{12, 55, 220}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{12, 56, 62}:    \"Fanvil Technology Co., Ltd.\",\n\t[3]byte{12, 57, 86}:    \"Observator instruments\",\n\t[3]byte{12, 59, 80}:    \"Apple, Inc.\",\n\t[3]byte{12, 60, 101}:   \"Dome Imaging Inc\",\n\t[3]byte{12, 60, 205}:   \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{12, 62, 159}:   \"Apple, Inc.\",\n\t[3]byte{12, 65, 1}:     \"Ruichi Auto Technology (Guangzhou) Co., Ltd.\",\n\t[3]byte{12, 65, 62}:    \"Microsoft Corporation\",\n\t[3]byte{12, 65, 233}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{12, 66, 161}:   \"Mellanox Technologies, Inc.\",\n\t[3]byte{12, 69, 186}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{12, 70, 157}:   \"MS Sedco\",\n\t[3]byte{12, 71, 61}:    \"Hitron Technologies. Inc\",\n\t[3]byte{12, 71, 201}:   \"Amazon Technologies Inc.\",\n\t[3]byte{12, 72, 133}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{12, 72, 198}:   \"CELESTICA INC.\",\n\t[3]byte{12, 73, 51}:    \"Sichuan Jiuzhou Electronic Technology Co., Ltd.\",\n\t[3]byte{12, 75, 84}:    \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{12, 76, 57}:    \"MitraStar Technology Corp.\",\n\t[3]byte{12, 77, 233}:   \"Apple, Inc.\",\n\t[3]byte{12, 79, 90}:    \"ASA-RT s.r.l.\",\n\t[3]byte{12, 81, 1}:     \"Apple, Inc.\",\n\t[3]byte{12, 81, 247}:   \"CHAUVIN ARNOUX\",\n\t[3]byte{12, 82, 3}:     \"AGM GROUP LIMITED\",\n\t[3]byte{12, 83, 49}:    \"ETH Zurich\",\n\t[3]byte{12, 84, 21}:    \"Intel Corporate\",\n\t[3]byte{12, 84, 165}:   \"PEGATRON CORPORATION\",\n\t[3]byte{12, 84, 185}:   \"Nokia\",\n\t[3]byte{12, 85, 33}:    \"Axiros GmbH\",\n\t[3]byte{12, 86, 92}:    \"HyBroad Vision (Hong Kong) Technology Co Ltd\",\n\t[3]byte{12, 87, 235}:   \"Mueller Systems\",\n\t[3]byte{12, 88, 66}:    \"DME Micro\",\n\t[3]byte{12, 89, 156}:   \"Juniper Networks\",\n\t[3]byte{12, 90, 25}:    \"Axtion Sdn Bhd\",\n\t[3]byte{12, 90, 158}:   \"Wi-SUN Alliance\",\n\t[3]byte{12, 92, 216}:   \"DOLI Elektronik GmbH\",\n\t[3]byte{12, 95, 53}:    \"Niagara Video Corporation\",\n\t[3]byte{12, 96, 118}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{12, 97, 17}:    \"Anda Technologies SAC\",\n\t[3]byte{12, 97, 39}:    \"Actiontec Electronics, Inc\",\n\t[3]byte{12, 97, 207}:   \"Texas Instruments\",\n\t[3]byte{12, 98, 166}:   \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{12, 99, 252}:   \"Nanjing Signway Technology Co., Ltd\",\n\t[3]byte{12, 104, 3}:    \"Cisco Systems, Inc\",\n\t[3]byte{12, 106, 188}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{12, 106, 230}:  \"Stanley Security Solutions\",\n\t[3]byte{12, 110, 79}:   \"PrimeVOLT Co., Ltd.\",\n\t[3]byte{12, 111, 156}:  \"Shaw Communications Inc.\",\n\t[3]byte{12, 112, 74}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{12, 113, 93}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{12, 114, 44}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{12, 114, 217}:  \"zte corporation\",\n\t[3]byte{12, 115, 190}:  \"Dongguan Haimai Electronie Technology Co.,Ltd\",\n\t[3]byte{12, 115, 235}:  \"IEEE Registration Authority\",\n\t[3]byte{12, 116, 194}:  \"Apple, Inc.\",\n\t[3]byte{12, 117, 18}:   \"Shenzhen Kunlun TongTai Technology  Co.,Ltd.\",\n\t[3]byte{12, 117, 35}:   \"BEIJING GEHUA CATV NETWORK CO.,LTD\",\n\t[3]byte{12, 117, 108}:  \"Anaren Microwave, Inc.\",\n\t[3]byte{12, 117, 189}:  \"Cisco Systems, Inc\",\n\t[3]byte{12, 119, 26}:   \"Apple, Inc.\",\n\t[3]byte{12, 122, 21}:   \"Intel Corporate\",\n\t[3]byte{12, 124, 40}:   \"Nokia\",\n\t[3]byte{12, 125, 124}:  \"Kexiang Information Technology Co, Ltd.\",\n\t[3]byte{12, 128, 99}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{12, 129, 18}:   \"Private\",\n\t[3]byte{12, 129, 38}:   \"Juniper Networks\",\n\t[3]byte{12, 129, 125}:  \"EEP Elektro-Elektronik Pranjic GmbH\",\n\t[3]byte{12, 130, 48}:   \"SHENZHEN MAGNUS TECHNOLOGIES CO.,LTD\",\n\t[3]byte{12, 130, 104}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{12, 130, 106}:  \"Wuhan Huagong Genuine Optics Technology Co., Ltd\",\n\t[3]byte{12, 131, 154}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{12, 132, 17}:   \"A.O. Smith Water Products\",\n\t[3]byte{12, 132, 71}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{12, 132, 132}:  \"Zenovia Electronics Inc.\",\n\t[3]byte{12, 132, 220}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{12, 133, 37}:   \"Cisco Systems, Inc\",\n\t[3]byte{12, 134, 16}:   \"Juniper Networks\",\n\t[3]byte{12, 137, 16}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{12, 138, 135}:  \"AgLogica Holdings, Inc\",\n\t[3]byte{12, 139, 125}:  \"Vizio, Inc\",\n\t[3]byte{12, 139, 211}:  \"ITEL MOBILE LIMITED\",\n\t[3]byte{12, 139, 253}:  \"Intel Corporate\",\n\t[3]byte{12, 140, 36}:   \"SHENZHEN BILIAN ELECTRONIC CO.，LTD\",\n\t[3]byte{12, 140, 143}:  \"Kamo Technology Limited\",\n\t[3]byte{12, 140, 220}:  \"Suunto Oy\",\n\t[3]byte{12, 141, 152}:  \"TOP EIGHT IND CORP\",\n\t[3]byte{12, 141, 219}:  \"Cisco Meraki\",\n\t[3]byte{12, 142, 41}:   \"Arcadyan Corporation\",\n\t[3]byte{12, 143, 255}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{12, 145, 96}:   \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{12, 146, 78}:   \"Rice Lake Weighing Systems\",\n\t[3]byte{12, 147, 1}:    \"PT. Prasimax Inovasi Teknologi\",\n\t[3]byte{12, 147, 251}:  \"BNS Solutions\",\n\t[3]byte{12, 149, 65}:   \"CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.\",\n\t[3]byte{12, 150, 191}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{12, 150, 230}:  \"Cloud Network Technology (Samoa) Limited\",\n\t[3]byte{12, 152, 56}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{12, 154, 66}:   \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{12, 155, 19}:   \"Shanghai Magic Mobile Telecommunication Co.Ltd.\",\n\t[3]byte{12, 157, 86}:   \"Consort Controls Ltd\",\n\t[3]byte{12, 157, 146}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{12, 158, 145}:  \"Sankosha Corporation\",\n\t[3]byte{12, 160, 108}:  \"Industrial Cyber Sensing Inc.\",\n\t[3]byte{12, 161, 56}:   \"Blinq Wireless Inc.\",\n\t[3]byte{12, 162, 244}:  \"Chameleon Technology (UK) Limited\",\n\t[3]byte{12, 164, 2}:    \"Alcatel-Lucent IPD\",\n\t[3]byte{12, 164, 42}:   \"OB Telecom Electronic Technology Co., Ltd\",\n\t[3]byte{12, 166, 148}:  \"Sunitec Enterprise Co.,Ltd\",\n\t[3]byte{12, 168, 167}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{12, 172, 5}:    \"Unitend Technologies Inc.\",\n\t[3]byte{12, 174, 125}:  \"Texas Instruments\",\n\t[3]byte{12, 175, 90}:   \"GENUS POWER INFRASTRUCTURES LIMITED\",\n\t[3]byte{12, 178, 183}:  \"Texas Instruments\",\n\t[3]byte{12, 179, 25}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{12, 179, 79}:   \"Shenzhen Xiaoqi Intelligent Technology Co., Ltd.\",\n\t[3]byte{12, 180, 89}:   \"Marketech International Corp.\",\n\t[3]byte{12, 180, 164}:  \"Xintai Automobile Intelligent Network Technology\",\n\t[3]byte{12, 180, 239}:  \"Digience Co.,Ltd.\",\n\t[3]byte{12, 181, 39}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{12, 181, 222}:  \"Alcatel Lucent\",\n\t[3]byte{12, 182, 210}:  \"D-Link International\",\n\t[3]byte{12, 183, 113}:  \"ARRIS Group, Inc.\",\n\t[3]byte{12, 185, 18}:   \"JM-DATA GmbH\",\n\t[3]byte{12, 185, 55}:   \"Ubee Interactive Co., Limited\",\n\t[3]byte{12, 188, 159}:  \"Apple, Inc.\",\n\t[3]byte{12, 189, 81}:   \"TCT mobile ltd\",\n\t[3]byte{12, 191, 21}:   \"Genetec Inc.\",\n\t[3]byte{12, 191, 63}:   \"Shenzhen Lencotion Technology Co.,Ltd\",\n\t[3]byte{12, 191, 116}:  \"Morse Micro\",\n\t[3]byte{12, 192, 192}:  \"MAGNETI MARELLI SISTEMAS ELECTRONICOS MEXICO\",\n\t[3]byte{12, 195, 167}:  \"Meritec\",\n\t[3]byte{12, 196, 122}:  \"Super Micro Computer, Inc.\",\n\t[3]byte{12, 196, 126}:  \"EUCAST Co., Ltd.\",\n\t[3]byte{12, 198, 85}:   \"Wuxi YSTen Technology Co.,Ltd.\",\n\t[3]byte{12, 198, 106}:  \"Nokia Corporation\",\n\t[3]byte{12, 198, 172}:  \"DAGS\",\n\t[3]byte{12, 198, 204}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{12, 199, 49}:   \"Currant, Inc.\",\n\t[3]byte{12, 200, 31}:   \"Summer Infant, Inc.\",\n\t[3]byte{12, 200, 68}:   \"Cambridge Mobile Telematics, Inc.\",\n\t[3]byte{12, 201, 198}:  \"Samwin Hong Kong Limited\",\n\t[3]byte{12, 203, 133}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{12, 203, 141}:  \"ASCO Numatics GmbH\",\n\t[3]byte{12, 204, 38}:   \"Airenetworks\",\n\t[3]byte{12, 205, 211}:  \"EASTRIVER TECHNOLOGY CO., LTD.\",\n\t[3]byte{12, 205, 251}:  \"EDIC Systems Inc.\",\n\t[3]byte{12, 206, 246}:  \"Guizhou Fortuneship Technology Co., Ltd\",\n\t[3]byte{12, 207, 209}:  \"SPRINGWAVE Co., Ltd\",\n\t[3]byte{12, 208, 248}:  \"Cisco Systems, Inc\",\n\t[3]byte{12, 210, 146}:  \"Intel Corporate\",\n\t[3]byte{12, 210, 181}:  \"Binatone Telecommunication Pvt. Ltd\",\n\t[3]byte{12, 213, 2}:    \"Westell Technologies Inc.\",\n\t[3]byte{12, 214, 150}:  \"Amimon Ltd\",\n\t[3]byte{12, 214, 189}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{12, 215, 70}:   \"Apple, Inc.\",\n\t[3]byte{12, 215, 194}:  \"Axium Technologies, Inc.\",\n\t[3]byte{12, 216, 108}:  \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{12, 217, 150}:  \"Cisco Systems, Inc\",\n\t[3]byte{12, 217, 193}:  \"Visteon Corporation\",\n\t[3]byte{12, 218, 65}:   \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{12, 220, 126}:  \"Espressif Inc.\",\n\t[3]byte{12, 220, 204}:  \"Inala Technologies\",\n\t[3]byte{12, 221, 36}:   \"Intel Corporate\",\n\t[3]byte{12, 221, 239}:  \"Nokia Corporation\",\n\t[3]byte{12, 223, 164}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{12, 224, 65}:   \"iDruide\",\n\t[3]byte{12, 224, 220}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{12, 224, 228}:  \"PLANTRONICS, INC.\",\n\t[3]byte{12, 228, 160}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{12, 229, 211}:  \"DH electronics GmbH\",\n\t[3]byte{12, 231, 9}:    \"Fox Crypto B.V.\",\n\t[3]byte{12, 231, 37}:   \"Microsoft Corporation\",\n\t[3]byte{12, 232, 47}:   \"Bonfiglioli Vectron GmbH\",\n\t[3]byte{12, 233, 54}:   \"ELIMOS srl\",\n\t[3]byte{12, 233, 154}:  \"ATLS ALTEC\",\n\t[3]byte{12, 234, 201}:  \"ARRIS Group, Inc.\",\n\t[3]byte{12, 236, 128}:  \"Texas Instruments\",\n\t[3]byte{12, 236, 132}:  \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{12, 238, 153}:  \"Amazon Technologies Inc.\",\n\t[3]byte{12, 238, 230}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{12, 239, 124}:  \"AnaCom Inc\",\n\t[3]byte{12, 239, 175}:  \"IEEE Registration Authority\",\n\t[3]byte{12, 240, 25}:   \"Malgn Technology Co., Ltd.\",\n\t[3]byte{12, 240, 180}:  \"Globalsat International Technology Ltd\",\n\t[3]byte{12, 243, 70}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{12, 243, 97}:   \"Java Information\",\n\t[3]byte{12, 243, 238}:  \"EM Microelectronic\",\n\t[3]byte{12, 244, 5}:    \"Beijing Signalway Technologies Co.,Ltd\",\n\t[3]byte{12, 244, 117}:  \"Zliide Technologies ApS\",\n\t[3]byte{12, 244, 213}:  \"Ruckus Wireless\",\n\t[3]byte{12, 245, 164}:  \"Cisco Systems, Inc\",\n\t[3]byte{12, 248, 147}:  \"ARRIS Group, Inc.\",\n\t[3]byte{12, 249, 192}:  \"BSkyB Ltd\",\n\t[3]byte{12, 252, 131}:  \"Airoha Technology Corp.,\",\n\t[3]byte{12, 253, 55}:   \"SUSE Linux GmbH\",\n\t[3]byte{12, 254, 69}:   \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{12, 254, 93}:   \"IEEE Registration Authority\",\n\t[3]byte{16, 0, 0}:      \"Private\",\n\t[3]byte{16, 0, 90}:     \"IBM Corp\",\n\t[3]byte{16, 0, 232}:    \"NATIONAL SEMICONDUCTOR\",\n\t[3]byte{16, 0, 253}:    \"LaonPeople\",\n\t[3]byte{16, 1, 119}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{16, 1, 202}:    \"Ashley Butterworth\",\n\t[3]byte{16, 2, 181}:    \"Intel Corporate\",\n\t[3]byte{16, 5, 1}:      \"PEGATRON CORPORATION\",\n\t[3]byte{16, 5, 177}:    \"ARRIS Group, Inc.\",\n\t[3]byte{16, 5, 202}:    \"Cisco Systems, Inc\",\n\t[3]byte{16, 5, 225}:    \"Nokia\",\n\t[3]byte{16, 6, 69}:     \"Sagemcom Broadband SAS\",\n\t[3]byte{16, 7, 35}:     \"IEEE Registration Authority\",\n\t[3]byte{16, 7, 182}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{16, 8, 44}:     \"Texas Instruments\",\n\t[3]byte{16, 8, 177}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{16, 9, 12}:     \"Janome Sewing Machine Co., Ltd.\",\n\t[3]byte{16, 11, 169}:   \"Intel Corporate\",\n\t[3]byte{16, 12, 36}:    \"pomdevices, LLC\",\n\t[3]byte{16, 12, 107}:   \"NETGEAR\",\n\t[3]byte{16, 13, 47}:    \"Online Security Pty. Ltd.\",\n\t[3]byte{16, 13, 50}:    \"Embedian, Inc.\",\n\t[3]byte{16, 13, 127}:   \"NETGEAR\",\n\t[3]byte{16, 14, 43}:    \"NEC CASIO Mobile Communications\",\n\t[3]byte{16, 14, 126}:   \"Juniper Networks\",\n\t[3]byte{16, 15, 24}:    \"Fu Gang Electronic(KunShan)CO.,LTD\",\n\t[3]byte{16, 16, 182}:   \"McCain Inc\",\n\t[3]byte{16, 18, 18}:    \"Vivo International Corporation Pty Ltd\",\n\t[3]byte{16, 18, 24}:    \"Korins Inc.\",\n\t[3]byte{16, 18, 72}:    \"ITG, Inc.\",\n\t[3]byte{16, 18, 80}:    \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{16, 18, 180}:   \"SICHUAN TIANYI COMHEART TELECOM CO.,LTD\",\n\t[3]byte{16, 18, 251}:   \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{16, 19, 49}:    \"Technicolor\",\n\t[3]byte{16, 19, 238}:   \"Justec International Technology INC.\",\n\t[3]byte{16, 24, 158}:   \"Elmo Motion Control\",\n\t[3]byte{16, 25, 101}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{16, 27, 84}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{16, 28, 12}:    \"Apple, Inc.\",\n\t[3]byte{16, 29, 81}:    \"8Mesh Networks Limited\",\n\t[3]byte{16, 29, 192}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{16, 31, 116}:   \"Hewlett Packard\",\n\t[3]byte{16, 34, 121}:   \"ZeroDesktop, Inc.\",\n\t[3]byte{16, 39, 121}:   \"Sadel S.p.A.\",\n\t[3]byte{16, 39, 190}:   \"TVIP\",\n\t[3]byte{16, 40, 49}:    \"Morion Inc.\",\n\t[3]byte{16, 41, 89}:    \"Apple, Inc.\",\n\t[3]byte{16, 41, 171}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{16, 42, 179}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{16, 44, 107}:   \"AMPAK Technology, Inc.\",\n\t[3]byte{16, 44, 131}:   \"XIMEA\",\n\t[3]byte{16, 45, 150}:   \"Looxcie Inc.\",\n\t[3]byte{16, 46, 175}:   \"Texas Instruments\",\n\t[3]byte{16, 47, 107}:   \"Microsoft Corporation\",\n\t[3]byte{16, 47, 163}:   \"Shenzhen Uvision-tech Technology Co.Ltd\",\n\t[3]byte{16, 48, 37}:    \"Apple, Inc.\",\n\t[3]byte{16, 48, 52}:    \"Cara Systems\",\n\t[3]byte{16, 48, 71}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{16, 50, 126}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{16, 51, 120}:   \"FLECTRON Co., LTD\",\n\t[3]byte{16, 51, 191}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{16, 52, 27}:    \"Spacelink\",\n\t[3]byte{16, 54, 74}:    \"Boston Dynamics\",\n\t[3]byte{16, 55, 17}:    \"Simlink AS\",\n\t[3]byte{16, 57, 23}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{16, 57, 233}:   \"Juniper Networks\",\n\t[3]byte{16, 59, 89}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{16, 61, 10}:    \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{16, 61, 62}:    \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{16, 61, 234}:   \"HFC Technology (Beijing) Ltd. Co.\",\n\t[3]byte{16, 64, 243}:   \"Apple, Inc.\",\n\t[3]byte{16, 65, 127}:   \"Apple, Inc.\",\n\t[3]byte{16, 67, 105}:   \"Soundmax Electronic Limited \",\n\t[3]byte{16, 68, 0}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{16, 68, 90}:    \"Shaanxi Hitech Electronic Co., LTD\",\n\t[3]byte{16, 69, 190}:   \"Norphonic AS\",\n\t[3]byte{16, 69, 248}:   \"LNT-Automation GmbH\",\n\t[3]byte{16, 70, 180}:   \"FormericaOE\",\n\t[3]byte{16, 71, 128}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{16, 72, 177}:   \"Beijing Duokan Technology Limited\",\n\t[3]byte{16, 73, 99}:    \"HARTING K.K.\",\n\t[3]byte{16, 74, 125}:   \"Intel Corporate\",\n\t[3]byte{16, 75, 70}:    \"Mitsubishi Electric Corporation\",\n\t[3]byte{16, 77, 119}:   \"Innovative Computer Engineering\",\n\t[3]byte{16, 78, 7}:     \"Shanghai Genvision Industries Co.,Ltd\",\n\t[3]byte{16, 78, 137}:   \"Garmin International\",\n\t[3]byte{16, 79, 88}:    \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{16, 79, 168}:   \"Sony Corporation\",\n\t[3]byte{16, 80, 114}:   \"Sercomm Corporation.\",\n\t[3]byte{16, 81, 114}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{16, 82, 28}:    \"Espressif Inc.\",\n\t[3]byte{16, 86, 17}:    \"ARRIS Group, Inc.\",\n\t[3]byte{16, 86, 202}:   \"Peplink International Ltd.\",\n\t[3]byte{16, 88, 135}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{16, 89, 23}:    \"Tonal\",\n\t[3]byte{16, 89, 50}:    \"Roku, Inc\",\n\t[3]byte{16, 90, 247}:   \"ADB Italia \",\n\t[3]byte{16, 91, 173}:   \"Mega Well Limited\",\n\t[3]byte{16, 92, 59}:    \"Perma-Pipe, Inc.\",\n\t[3]byte{16, 92, 191}:   \"DuroByte Inc\",\n\t[3]byte{16, 93, 220}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{16, 95, 6}:     \"Actiontec Electronics, Inc\",\n\t[3]byte{16, 95, 73}:    \"Cisco SPVTG\",\n\t[3]byte{16, 95, 212}:   \"Tendyron Corporation\",\n\t[3]byte{16, 96, 75}:    \"Hewlett Packard\",\n\t[3]byte{16, 98, 201}:   \"Adatis GmbH & Co. KG\",\n\t[3]byte{16, 98, 208}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{16, 98, 229}:   \"Hewlett Packard\",\n\t[3]byte{16, 98, 235}:   \"D-Link International\",\n\t[3]byte{16, 99, 200}:   \"Liteon Technology Corporation\",\n\t[3]byte{16, 100, 226}:  \"ADFweb.com s.r.l.\",\n\t[3]byte{16, 101, 48}:   \"Dell Inc.\",\n\t[3]byte{16, 101, 163}:  \"Panamax LLC\",\n\t[3]byte{16, 101, 207}:  \"IQSIM\",\n\t[3]byte{16, 102, 130}:  \"NEC Platforms, Ltd.\",\n\t[3]byte{16, 104, 63}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{16, 111, 63}:   \"BUFFALO.INC\",\n\t[3]byte{16, 111, 239}:  \"Ad-Sol Nissin Corp\",\n\t[3]byte{16, 112, 253}:  \"Mellanox Technologies, Inc.\",\n\t[3]byte{16, 113, 249}:  \"Cloud Telecomputers, LLC\",\n\t[3]byte{16, 114, 35}:   \"TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO \",\n\t[3]byte{16, 116, 111}:  \"MOTOROLA SOLUTIONS MALAYSIA SDN. BHD.\",\n\t[3]byte{16, 118, 138}:  \"EoCell\",\n\t[3]byte{16, 119, 23}:   \"SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\",\n\t[3]byte{16, 119, 176}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{16, 119, 177}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{16, 120, 91}:   \"Actiontec Electronics, Inc\",\n\t[3]byte{16, 120, 115}:  \"Shenzhen Jinkeyi Communication Co., Ltd.\",\n\t[3]byte{16, 120, 206}:  \"Hanvit SI, Inc.\",\n\t[3]byte{16, 120, 210}:  \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{16, 122, 134}:  \"U&U ENGINEERING INC.\",\n\t[3]byte{16, 123, 68}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{16, 123, 164}:  \"Olive & Dove Co.,Ltd.\",\n\t[3]byte{16, 123, 239}:  \"Zyxel Communications Corporation\",\n\t[3]byte{16, 125, 26}:   \"Dell Inc.\",\n\t[3]byte{16, 129, 180}:  \"Hunan Greatwall Galaxy Science and Technology Co.,Ltd.\",\n\t[3]byte{16, 130, 134}:  \"Luxshare Precision Industry Co.,Ltd\",\n\t[3]byte{16, 131, 210}:  \"Microseven Systems, LLC\",\n\t[3]byte{16, 134, 140}:  \"ARRIS Group, Inc.\",\n\t[3]byte{16, 136, 15}:   \"Daruma Telecomunicações e Informática S.A.\",\n\t[3]byte{16, 136, 206}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{16, 137, 251}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{16, 138, 27}:   \"RAONIX Inc.\",\n\t[3]byte{16, 139, 106}:  \"Antailiye Technology Co.,Ltd\",\n\t[3]byte{16, 140, 207}:  \"Cisco Systems, Inc\",\n\t[3]byte{16, 142, 186}:  \"Molekule\",\n\t[3]byte{16, 142, 224}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{16, 146, 102}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{16, 147, 151}:  \"ARRIS Group, Inc.\",\n\t[3]byte{16, 147, 233}:  \"Apple, Inc.\",\n\t[3]byte{16, 148, 187}:  \"Apple, Inc.\",\n\t[3]byte{16, 149, 75}:   \"Megabyte Ltd.\",\n\t[3]byte{16, 152, 54}:   \"Dell Inc.\",\n\t[3]byte{16, 152, 195}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{16, 154, 185}:  \"Tosibox Oy\",\n\t[3]byte{16, 154, 221}:  \"Apple, Inc.\",\n\t[3]byte{16, 156, 112}:  \"Prusa Research s.r.o.\",\n\t[3]byte{16, 158, 58}:   \"Zhejiang Tmall Technology Co., Ltd.\",\n\t[3]byte{16, 159, 169}:  \"Actiontec Electronics, Inc\",\n\t[3]byte{16, 161, 59}:   \"FUJIKURA RUBBER LTD.\",\n\t[3]byte{16, 162, 78}:   \"GOLD3LINK ELECTRONICS CO., LTD\",\n\t[3]byte{16, 163, 184}:  \"Iskratel d.o.o.\",\n\t[3]byte{16, 164, 185}:  \"Baidu Online Network Technology (Beijing) Co., Ltd\",\n\t[3]byte{16, 164, 190}:  \"SHENZHEN BILIAN ELECTRONIC CO.，LTD\",\n\t[3]byte{16, 165, 208}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{16, 166, 89}:   \"Mobile Create Co.,Ltd.\",\n\t[3]byte{16, 167, 67}:   \"SK Mtek Limited\",\n\t[3]byte{16, 169, 50}:   \"Beijing Cyber Cloud Technology Co. ,Ltd.\",\n\t[3]byte{16, 174, 96}:   \"Private\",\n\t[3]byte{16, 175, 120}:  \"Shenzhen ATUE Technology Co., Ltd\",\n\t[3]byte{16, 177, 248}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{16, 178, 107}:  \"base Co.,Ltd.\",\n\t[3]byte{16, 179, 111}:  \"Bowei Technology Company Limited \",\n\t[3]byte{16, 179, 198}:  \"Cisco Systems, Inc\",\n\t[3]byte{16, 179, 213}:  \"Cisco Systems, Inc\",\n\t[3]byte{16, 179, 214}:  \"Cisco Systems, Inc\",\n\t[3]byte{16, 183, 19}:   \"Private\",\n\t[3]byte{16, 183, 246}:  \"Plastoform Industries Ltd.\",\n\t[3]byte{16, 185, 247}:  \"Niko-Servodan\",\n\t[3]byte{16, 185, 254}:  \"Lika srl\",\n\t[3]byte{16, 186, 165}:  \"GANA I&C CO., LTD\",\n\t[3]byte{16, 188, 151}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{16, 189, 24}:   \"Cisco Systems, Inc\",\n\t[3]byte{16, 189, 85}:   \"Q-Lab Corporation\",\n\t[3]byte{16, 190, 245}:  \"D-Link International\",\n\t[3]byte{16, 191, 72}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{16, 192, 124}:  \"Blu-ray Disc Association\",\n\t[3]byte{16, 193, 114}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{16, 194, 47}:   \"China Entropy Co., Ltd.\",\n\t[3]byte{16, 194, 90}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{16, 194, 186}:  \"UTT Co., Ltd.\",\n\t[3]byte{16, 195, 123}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{16, 195, 171}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{16, 197, 134}:  \"BIO SOUND LAB CO., LTD.\",\n\t[3]byte{16, 197, 149}:  \"Lenovo\",\n\t[3]byte{16, 198, 12}:   \"Domino UK Ltd\",\n\t[3]byte{16, 198, 31}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{16, 198, 94}:   \"Adapt-IP\",\n\t[3]byte{16, 198, 126}:  \"SHENZHEN JUCHIN TECHNOLOGY CO., LTD\",\n\t[3]byte{16, 198, 252}:  \"Garmin International\",\n\t[3]byte{16, 199, 63}:   \"Midas Klark Teknik Ltd\",\n\t[3]byte{16, 199, 83}:   \"Qingdao Intelligent&Precise Electronics Co.,Ltd.\",\n\t[3]byte{16, 202, 129}:  \"PRECIA\",\n\t[3]byte{16, 204, 27}:   \"Liverock technologies,INC\",\n\t[3]byte{16, 204, 219}:  \"AXIMUM PRODUITS ELECTRONIQUES\",\n\t[3]byte{16, 205, 110}:  \"FISYS\",\n\t[3]byte{16, 205, 174}:  \"Avaya Inc\",\n\t[3]byte{16, 205, 182}:  \"Essential Products, Inc.\",\n\t[3]byte{16, 206, 69}:   \"Miromico AG\",\n\t[3]byte{16, 206, 169}:  \"Texas Instruments\",\n\t[3]byte{16, 208, 122}:  \"AMPAK Technology, Inc.\",\n\t[3]byte{16, 208, 171}:  \"zte corporation\",\n\t[3]byte{16, 209, 220}:  \"INSTAR Deutschland GmbH\",\n\t[3]byte{16, 211, 138}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{16, 213, 66}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{16, 218, 67}:   \"NETGEAR\",\n\t[3]byte{16, 220, 74}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{16, 220, 182}:  \"IEEE Registration Authority\",\n\t[3]byte{16, 221, 177}:  \"Apple, Inc.\",\n\t[3]byte{16, 221, 244}:  \"Maxway Electronics CO.,LTD\",\n\t[3]byte{16, 222, 228}:  \"automationNEXT GmbH\",\n\t[3]byte{16, 223, 139}:  \"Shenzhen CareDear Communication Technology Co.,Ltd\",\n\t[3]byte{16, 223, 252}:  \"Siemens AG\",\n\t[3]byte{16, 226, 213}:  \"Qi Hardware Inc.\",\n\t[3]byte{16, 227, 199}:  \"Seohwa Telecom\",\n\t[3]byte{16, 228, 175}:  \"APR, LLC\",\n\t[3]byte{16, 230, 143}:  \"KWANGSUNG ELECTRONICS KOREA CO.,LTD.\",\n\t[3]byte{16, 230, 174}:  \"Source Technologies, LLC\",\n\t[3]byte{16, 231, 122}:  \"STMicrolectronics International NV\",\n\t[3]byte{16, 231, 198}:  \"Hewlett Packard\",\n\t[3]byte{16, 232, 120}:  \"Nokia\",\n\t[3]byte{16, 232, 238}:  \"PhaseSpace\",\n\t[3]byte{16, 233, 83}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{16, 234, 89}:   \"Cisco SPVTG\",\n\t[3]byte{16, 238, 217}:  \"Canoga Perkins Corporation\",\n\t[3]byte{16, 240, 5}:    \"Intel Corporate\",\n\t[3]byte{16, 241, 99}:   \"TNK CO.,LTD\",\n\t[3]byte{16, 241, 242}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{16, 243, 17}:   \"Cisco Systems, Inc\",\n\t[3]byte{16, 243, 219}:  \"Gridco Systems, Inc.\",\n\t[3]byte{16, 244, 154}:  \"T3 Innovation\",\n\t[3]byte{16, 246, 129}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{16, 249, 32}:   \"Cisco Systems, Inc\",\n\t[3]byte{16, 249, 111}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{16, 249, 235}:  \"Industria Fueguina de Relojería Electrónica s.a.\",\n\t[3]byte{16, 249, 238}:  \"Nokia Corporation\",\n\t[3]byte{16, 250, 206}:  \"Reacheng Communication Technology Co.,Ltd\",\n\t[3]byte{16, 251, 240}:  \"KangSheng LTD.\",\n\t[3]byte{16, 252, 84}:   \"Shany Electronic Co., Ltd. \",\n\t[3]byte{16, 252, 182}:  \"mirusystems CO.,LTD\",\n\t[3]byte{16, 254, 237}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{17, 0, 170}:    \"Private\",\n\t[3]byte{17, 17, 17}:    \"Private\",\n\t[3]byte{20, 0, 125}:    \"zte corporation\",\n\t[3]byte{20, 1, 82}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{20, 2, 236}:    \"Hewlett Packard Enterprise\",\n\t[3]byte{20, 4, 103}:    \"SNK Technologies Co.,Ltd.\",\n\t[3]byte{20, 7, 8}:      \"Private\",\n\t[3]byte{20, 7, 224}:    \"Abrantix AG\",\n\t[3]byte{20, 9, 220}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{20, 10, 197}:   \"Amazon Technologies Inc.\",\n\t[3]byte{20, 12, 91}:    \"PLNetworks\",\n\t[3]byte{20, 12, 118}:   \"FREEBOX SAS\",\n\t[3]byte{20, 13, 79}:    \"Flextronics International\",\n\t[3]byte{20, 15, 66}:    \"Nokia\",\n\t[3]byte{20, 16, 159}:   \"Apple, Inc.\",\n\t[3]byte{20, 17, 20}:    \"TECNO MOBILE LIMITED\",\n\t[3]byte{20, 17, 93}:    \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{20, 19, 48}:    \"Anakreon UK LLP\",\n\t[3]byte{20, 19, 70}:    \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{20, 19, 87}:    \"ATP Electronics, Inc.\",\n\t[3]byte{20, 19, 251}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{20, 20, 75}:    \"Ruijie Networks Co.,LTD\",\n\t[3]byte{20, 20, 89}:    \"Vodafone Italia S.p.A.\",\n\t[3]byte{20, 20, 230}:   \"Ningbo Sanhe Digital Co.,Ltd\",\n\t[3]byte{20, 21, 124}:   \"TOKYO COSMOS ELECTRIC CO.,LTD.\",\n\t[3]byte{20, 22, 157}:   \"Cisco Systems, Inc\",\n\t[3]byte{20, 22, 158}:   \" Wingtech Group (HongKong）Limited\",\n\t[3]byte{20, 24, 119}:   \"Dell Inc.\",\n\t[3]byte{20, 26, 81}:    \"Treetech Sistemas Digitais\",\n\t[3]byte{20, 26, 163}:   \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{20, 27, 189}:   \"Volex Inc.\",\n\t[3]byte{20, 27, 240}:   \"Intellimedia Systems Ltd\",\n\t[3]byte{20, 31, 120}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{20, 31, 186}:   \"IEEE Registration Authority\",\n\t[3]byte{20, 32, 94}:    \"Apple, Inc.\",\n\t[3]byte{20, 34, 51}:    \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{20, 34, 219}:   \"eero inc.\",\n\t[3]byte{20, 35, 215}:   \"EUTRONIX CO., LTD.\",\n\t[3]byte{20, 36, 117}:   \"4DReplay, Inc\",\n\t[3]byte{20, 40, 130}:   \"MIDICOM ELECTRONICS CO.LTD\",\n\t[3]byte{20, 41, 113}:   \"NEMOA ELECTRONICS (HK) CO. LTD\",\n\t[3]byte{20, 42, 20}:    \"ShenZhen Selenview Digital Technology Co.,Ltd\",\n\t[3]byte{20, 43, 210}:   \"Armtel Ltd.\",\n\t[3]byte{20, 43, 214}:   \"Guangdong Appscomm Co.,Ltd\",\n\t[3]byte{20, 44, 120}:   \"GooWi Wireless Technology Co., Limited\",\n\t[3]byte{20, 45, 39}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{20, 45, 139}:   \"Incipio Technologies, Inc\",\n\t[3]byte{20, 45, 245}:   \"Amphitech\",\n\t[3]byte{20, 46, 94}:    \"Sercomm Corporation.\",\n\t[3]byte{20, 47, 253}:   \"LT SECURITY INC\",\n\t[3]byte{20, 48, 4}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{20, 48, 122}:   \"Avermetrics\",\n\t[3]byte{20, 48, 198}:   \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{20, 50, 209}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{20, 51, 101}:   \"TEM Mobile Limited\",\n\t[3]byte{20, 53, 139}:   \"Mediabridge Products, LLC.\",\n\t[3]byte{20, 53, 179}:   \"Future Designs, Inc.\",\n\t[3]byte{20, 54, 5}:     \"Nokia Corporation\",\n\t[3]byte{20, 54, 198}:   \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{20, 55, 25}:    \"PT Prakarsa Visi Valutama\",\n\t[3]byte{20, 55, 59}:    \"PROCOM Systems\",\n\t[3]byte{20, 58, 234}:   \"Dynapower Company LLC\",\n\t[3]byte{20, 60, 195}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{20, 61, 242}:   \"Beijing Shidai Hongyuan Network Communication Co.,Ltd\",\n\t[3]byte{20, 62, 96}:    \"Nokia\",\n\t[3]byte{20, 62, 191}:   \"zte corporation\",\n\t[3]byte{20, 63, 39}:    \"Noccela Oy\",\n\t[3]byte{20, 63, 195}:   \"SnapAV\",\n\t[3]byte{20, 65, 70}:    \"Honeywell (China) Co., LTD\",\n\t[3]byte{20, 65, 226}:   \"Monaco Enterprises, Inc.\",\n\t[3]byte{20, 66, 252}:   \"Texas Instruments\",\n\t[3]byte{20, 67, 25}:    \"Creative&Link Technology Limited\",\n\t[3]byte{20, 68, 74}:    \"Apollo Seiko Ltd.\",\n\t[3]byte{20, 70, 228}:   \"AVISTEL\",\n\t[3]byte{20, 71, 45}:    \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{20, 72, 2}:     \"THE YEOLRIM Co.,Ltd.\",\n\t[3]byte{20, 72, 139}:   \"Shenzhen Doov Technology Co.,Ltd\",\n\t[3]byte{20, 73, 120}:   \"Digital Control Incorporated\",\n\t[3]byte{20, 73, 188}:   \"DrayTek Corp.\",\n\t[3]byte{20, 73, 224}:   \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{20, 76, 26}:    \"Max Communication GmbH\",\n\t[3]byte{20, 77, 103}:   \"Zioncom Electronics (Shenzhen) Ltd.\",\n\t[3]byte{20, 78, 42}:    \"Ciena Corporation\",\n\t[3]byte{20, 78, 52}:    \"Remote Solution\",\n\t[3]byte{20, 79, 138}:   \"Intel Corporate\",\n\t[3]byte{20, 79, 215}:   \"IEEE Registration Authority\",\n\t[3]byte{20, 81, 32}:    \"Huawei Device Co., Ltd.\",\n\t[3]byte{20, 82, 144}:   \"KNS Group LLC (YADRO Company)\",\n\t[3]byte{20, 84, 18}:    \"Entis Co., Ltd.\",\n\t[3]byte{20, 86, 69}:    \"Savitech Corp.\",\n\t[3]byte{20, 86, 142}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{20, 87, 159}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{20, 88, 208}:   \"Hewlett Packard\",\n\t[3]byte{20, 89, 192}:   \"NETGEAR\",\n\t[3]byte{20, 89, 195}:   \"Creative Chips GmbH\",\n\t[3]byte{20, 90, 5}:     \"Apple, Inc.\",\n\t[3]byte{20, 90, 131}:   \"Logi-D inc\",\n\t[3]byte{20, 91, 209}:   \"ARRIS Group, Inc.\",\n\t[3]byte{20, 91, 225}:   \"nyantec GmbH\",\n\t[3]byte{20, 94, 69}:    \"Bamboo Systems Group\",\n\t[3]byte{20, 95, 148}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{20, 96, 128}:   \"zte corporation\",\n\t[3]byte{20, 96, 203}:   \"Apple, Inc.\",\n\t[3]byte{20, 97, 2}:     \"Alpine Electronics, Inc.\",\n\t[3]byte{20, 97, 47}:    \"Avaya Inc\",\n\t[3]byte{20, 99, 8}:     \"JABIL CIRCUIT (SHANGHAI) LTD.\",\n\t[3]byte{20, 105, 162}:  \"SICHUAN TIANYI COMHEART TELECOM CO.,LTD\",\n\t[3]byte{20, 106, 11}:   \"Cypress Electronics Limited\",\n\t[3]byte{20, 107, 114}:  \"Shenzhen Fortune Ship Technology Co., Ltd.\",\n\t[3]byte{20, 107, 156}:  \"SHENZHEN BILIAN ELECTRONIC CO.，LTD\",\n\t[3]byte{20, 110, 10}:   \"Private\",\n\t[3]byte{20, 115, 115}:  \"TUBITAK UEKAE\",\n\t[3]byte{20, 116, 17}:   \"RIM\",\n\t[3]byte{20, 117, 144}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{20, 119, 64}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{20, 120, 11}:   \"Varex Imaging Deutschland AG\",\n\t[3]byte{20, 121, 243}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{20, 123, 172}:  \"Nokia\",\n\t[3]byte{20, 125, 179}:  \"JOA TELECOM.CO.,LTD\",\n\t[3]byte{20, 125, 197}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{20, 125, 218}:  \"Apple, Inc.\",\n\t[3]byte{20, 130, 91}:   \"Hefei Radio Communication Technology Co., Ltd \",\n\t[3]byte{20, 132, 48}:   \"MITAC COMPUTING TECHNOLOGY CORPORATION\",\n\t[3]byte{20, 134, 146}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{20, 135, 106}:  \"Apple, Inc.\",\n\t[3]byte{20, 137, 62}:   \"VIXTEL TECHNOLOGIES LIMTED\",\n\t[3]byte{20, 137, 253}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{20, 138, 112}:  \"ADS GmbH\",\n\t[3]byte{20, 143, 33}:   \"Garmin International\",\n\t[3]byte{20, 143, 198}:  \"Apple, Inc.\",\n\t[3]byte{20, 144, 144}:  \"KongTop industrial(shen zhen)CO.,LTD\",\n\t[3]byte{20, 145, 56}:   \"Amazon Technologies Inc.\",\n\t[3]byte{20, 145, 130}:  \"Belkin International Inc.\",\n\t[3]byte{20, 147, 70}:   \"PNI sensor corporation\",\n\t[3]byte{20, 148, 47}:   \"USYS CO.,LTD.\",\n\t[3]byte{20, 148, 72}:   \"BLU CASTLE S.A.\",\n\t[3]byte{20, 149, 206}:  \"Apple, Inc.\",\n\t[3]byte{20, 150, 229}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{20, 152, 125}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{20, 153, 226}:  \"Apple, Inc.\",\n\t[3]byte{20, 154, 16}:   \"Microsoft Corporation\",\n\t[3]byte{20, 155, 47}:   \"JiangSu ZhongXie Intelligent Technology co., LTD\",\n\t[3]byte{20, 157, 9}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{20, 157, 153}:  \"Apple, Inc.\",\n\t[3]byte{20, 158, 207}:  \"Dell Inc.\",\n\t[3]byte{20, 159, 60}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{20, 159, 182}:  \"GUANGDONG GENIUS TECHNOLOGY CO., LTD.\",\n\t[3]byte{20, 159, 232}:  \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{20, 160, 248}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{20, 161, 191}:  \"ASSA ABLOY Korea Co., Ltd Unilock\",\n\t[3]byte{20, 162, 160}:  \"Cisco Systems, Inc\",\n\t[3]byte{20, 163, 47}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{20, 163, 100}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{20, 165, 26}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{20, 166, 44}:   \"S.M. Dezac S.A.\",\n\t[3]byte{20, 167, 43}:   \"currentoptronics Pvt.Ltd\",\n\t[3]byte{20, 167, 139}:  \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{20, 168, 107}:  \"ShenZhen Telacom Science&Technology Co., Ltd\",\n\t[3]byte{20, 169, 208}:  \"F5 Networks, Inc.\",\n\t[3]byte{20, 169, 227}:  \"MST CORPORATION\",\n\t[3]byte{20, 171, 86}:   \"WUXI FUNIDE DIGITAL CO.,LTD\",\n\t[3]byte{20, 171, 197}:  \"Intel Corporate\",\n\t[3]byte{20, 171, 240}:  \"ARRIS Group, Inc.\",\n\t[3]byte{20, 173, 202}:  \"China Mobile Iot Limited company\",\n\t[3]byte{20, 174, 133}:  \"IEEE Registration Authority\",\n\t[3]byte{20, 174, 219}:  \"VTech Telecommunications Ltd.\",\n\t[3]byte{20, 177, 38}:   \"Industrial Software Co\",\n\t[3]byte{20, 177, 200}:  \"InfiniWing, Inc.\",\n\t[3]byte{20, 179, 31}:   \"Dell Inc.\",\n\t[3]byte{20, 179, 112}:  \"Gigaset Digital Technology (Shenzhen) Co., Ltd.\",\n\t[3]byte{20, 180, 87}:   \"Silicon Laboratories\",\n\t[3]byte{20, 180, 132}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{20, 183, 61}:   \"ARCHEAN Technologies\",\n\t[3]byte{20, 183, 248}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{20, 184, 55}:   \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{20, 185, 104}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{20, 187, 110}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{20, 189, 97}:   \"Apple, Inc.\",\n\t[3]byte{20, 192, 62}:   \"ARRIS Group, Inc.\",\n\t[3]byte{20, 192, 137}:  \"DUNE HD LTD\",\n\t[3]byte{20, 193, 38}:   \"Nokia Corporation\",\n\t[3]byte{20, 193, 78}:   \"Google, Inc.\",\n\t[3]byte{20, 193, 255}:  \"ShenZhen QianHai Comlan communication Co.,LTD\",\n\t[3]byte{20, 194, 19}:   \"Apple, Inc.\",\n\t[3]byte{20, 194, 29}:   \"Sabtech Industries\",\n\t[3]byte{20, 195, 194}:  \"K.A. Schmersal GmbH & Co. KG\",\n\t[3]byte{20, 198, 151}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{20, 200, 139}:  \"Apple, Inc.\",\n\t[3]byte{20, 201, 19}:   \"LG Electronics\",\n\t[3]byte{20, 202, 160}:  \"Hu&Co\",\n\t[3]byte{20, 204, 32}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{20, 204, 179}:  \"AO \\\"GK NATEKS\\\"\",\n\t[3]byte{20, 207, 141}:  \"OHSUNG\",\n\t[3]byte{20, 207, 146}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{20, 207, 226}:  \"ARRIS Group, Inc.\",\n\t[3]byte{20, 208, 13}:   \"Apple, Inc.\",\n\t[3]byte{20, 209, 31}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{20, 209, 105}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{20, 212, 254}:  \"ARRIS Group, Inc.\",\n\t[3]byte{20, 214, 77}:   \"D-Link International\",\n\t[3]byte{20, 215, 110}:  \"CONCH ELECTRONIC Co.,Ltd\",\n\t[3]byte{20, 218, 233}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{20, 219, 133}:  \"S NET MEDIA\",\n\t[3]byte{20, 221, 169}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{20, 221, 229}:  \"MPMKVVCL\",\n\t[3]byte{20, 222, 57}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{20, 228, 236}:  \"mLogic LLC\",\n\t[3]byte{20, 230, 228}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{20, 231, 200}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{20, 233, 178}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{20, 235, 51}:   \"BSMediasoft Co., Ltd.\",\n\t[3]byte{20, 237, 165}:  \"Wächter GmbH Sicherheitssysteme\",\n\t[3]byte{20, 237, 187}:  \"2Wire Inc\",\n\t[3]byte{20, 237, 228}:  \"Kaiam Corporation\",\n\t[3]byte{20, 238, 157}:  \"AirNav Systems LLC\",\n\t[3]byte{20, 239, 207}:  \"SCHREDER\",\n\t[3]byte{20, 240, 197}:  \"Xtremio Ltd.\",\n\t[3]byte{20, 242, 142}:  \"ShenYang ZhongKe-Allwin Technology Co.LTD\",\n\t[3]byte{20, 244, 42}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{20, 246, 90}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{20, 246, 216}:  \"Intel Corporate\",\n\t[3]byte{20, 248, 147}:  \"Wuhan FiberHome Digital Technology Co.,Ltd.\",\n\t[3]byte{20, 254, 175}:  \"SAGITTAR LIMITED\",\n\t[3]byte{20, 254, 181}:  \"Dell Inc.\",\n\t[3]byte{24, 0, 45}:     \"Sony Mobile Communications Inc\",\n\t[3]byte{24, 0, 219}:    \"Fitbit Inc.\",\n\t[3]byte{24, 1, 125}:    \"Harbin Arteor technology co., LTD\",\n\t[3]byte{24, 1, 227}:    \"Bittium Wireless Ltd\",\n\t[3]byte{24, 1, 241}:    \"Xiaomi Communications Co Ltd\",\n\t[3]byte{24, 2, 45}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{24, 2, 174}:    \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{24, 3, 115}:    \"Dell Inc.\",\n\t[3]byte{24, 3, 250}:    \"IBT Interfaces\",\n\t[3]byte{24, 4, 237}:    \"Texas Instruments\",\n\t[3]byte{24, 6, 117}:    \"Dilax Intelcom GmbH\",\n\t[3]byte{24, 6, 245}:    \"RAD Data Communications, Ltd.\",\n\t[3]byte{24, 6, 255}:    \"Acer Computer(Shanghai) Limited.\",\n\t[3]byte{24, 11, 82}:    \"Nanotron Technologies GmbH\",\n\t[3]byte{24, 12, 20}:    \"iSonea Limited\",\n\t[3]byte{24, 12, 119}:   \"Westinghouse Electric Company, LLC\",\n\t[3]byte{24, 12, 172}:   \"CANON INC.\",\n\t[3]byte{24, 13, 44}:    \"Intelbras\",\n\t[3]byte{24, 15, 118}:   \"D-Link International\",\n\t[3]byte{24, 16, 78}:    \"CEDINT-UPM\",\n\t[3]byte{24, 18, 18}:    \"Cepton Technologies\",\n\t[3]byte{24, 19, 45}:    \"zte corporation\",\n\t[3]byte{24, 20, 32}:    \"TEB SAS\",\n\t[3]byte{24, 20, 86}:    \"Nokia Corporation\",\n\t[3]byte{24, 22, 201}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 23, 20}:    \"DAEWOOIS\",\n\t[3]byte{24, 23, 37}:    \"Cameo Communications, Inc.\",\n\t[3]byte{24, 25, 63}:    \"Tamtron Oy\",\n\t[3]byte{24, 25, 214}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 27, 235}:   \"Actiontec Electronics, Inc\",\n\t[3]byte{24, 29, 234}:   \"Intel Corporate\",\n\t[3]byte{24, 30, 120}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{24, 30, 149}:   \"AuVerte\",\n\t[3]byte{24, 30, 176}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 32, 18}:    \"Aztech Associates Inc.\",\n\t[3]byte{24, 32, 50}:    \"Apple, Inc.\",\n\t[3]byte{24, 32, 76}:    \"Kummler+Matter AG\",\n\t[3]byte{24, 32, 166}:   \"Sage Co., Ltd.\",\n\t[3]byte{24, 32, 213}:   \"ARRIS Group, Inc.\",\n\t[3]byte{24, 33, 149}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 34, 126}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 38, 73}:    \"Intel Corporate\",\n\t[3]byte{24, 38, 102}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 40, 97}:    \"AirTies Wireless Networks\",\n\t[3]byte{24, 42, 68}:    \"HIROSE ELECTRONIC SYSTEM\",\n\t[3]byte{24, 42, 123}:   \"Nintendo Co., Ltd.\",\n\t[3]byte{24, 42, 211}:   \"Juniper Networks\",\n\t[3]byte{24, 43, 5}:     \"8D Technologies\",\n\t[3]byte{24, 44, 145}:   \"Concept Development, Inc.\",\n\t[3]byte{24, 44, 180}:   \"Nectarsoft Co., Ltd.\",\n\t[3]byte{24, 45, 152}:   \"Jinwoo Industrial system\",\n\t[3]byte{24, 48, 9}:     \"Woojin Industrial Systems Co., Ltd.\",\n\t[3]byte{24, 48, 12}:    \"Hisense Electric Co.,Ltd\",\n\t[3]byte{24, 49, 191}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{24, 50, 162}:   \"LAON TECHNOLOGY CO., LTD.\",\n\t[3]byte{24, 51, 157}:   \"Cisco Systems, Inc\",\n\t[3]byte{24, 52, 81}:    \"Apple, Inc.\",\n\t[3]byte{24, 53, 209}:   \"ARRIS Group, Inc.\",\n\t[3]byte{24, 54, 252}:   \"Elecsys International Corporation\",\n\t[3]byte{24, 56, 37}:    \"Wuhan Lingjiu High-tech Co.,Ltd.\",\n\t[3]byte{24, 56, 100}:   \"CAP-TECH INTERNATIONAL CO., LTD.\",\n\t[3]byte{24, 56, 174}:   \"CONSPIN SOLUTION\",\n\t[3]byte{24, 57, 25}:    \"Unicoi Systems\",\n\t[3]byte{24, 57, 110}:   \"SUNSEA TELECOMMUNICATIONS CO.,LTD.\",\n\t[3]byte{24, 57, 156}:   \"Skorpios Technologies\",\n\t[3]byte{24, 58, 45}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 58, 72}:    \"VostroNet\",\n\t[3]byte{24, 59, 210}:   \"BYD Precision Manufacture Company Ltd.\",\n\t[3]byte{24, 60, 183}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{24, 61, 94}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{24, 61, 162}:   \"Intel Corporate\",\n\t[3]byte{24, 62, 239}:   \"Apple, Inc.\",\n\t[3]byte{24, 63, 71}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 64, 164}:   \"Shenzhen Trylong Smart Science and Technology Co., Ltd.\",\n\t[3]byte{24, 65, 254}:   \"Digital 14\",\n\t[3]byte{24, 66, 29}:    \"Private\",\n\t[3]byte{24, 66, 47}:    \"Alcatel Lucent\",\n\t[3]byte{24, 68, 98}:    \"Riava Networks, Inc.\",\n\t[3]byte{24, 68, 230}:   \"zte corporation\",\n\t[3]byte{24, 69, 147}:   \"Taicang T&W Electronics\",\n\t[3]byte{24, 70, 23}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 70, 68}:    \"Home Control Singapore Pte Ltd\",\n\t[3]byte{24, 71, 61}:    \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{24, 72, 202}:   \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{24, 72, 216}:   \"Fastback Networks\",\n\t[3]byte{24, 74, 111}:   \"Alcatel-Lucent Shanghai Bell Co., Ltd\",\n\t[3]byte{24, 75, 13}:    \"Ruckus Wireless\",\n\t[3]byte{24, 75, 223}:   \"Caavo Inc\",\n\t[3]byte{24, 76, 8}:     \"Rockwell Automation\",\n\t[3]byte{24, 78, 22}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 78, 148}:   \"MESSOA TECHNOLOGIES INC.\",\n\t[3]byte{24, 78, 203}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 79, 50}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{24, 80, 42}:    \"SOARNEX\",\n\t[3]byte{24, 82, 7}:     \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{24, 82, 83}:    \"Pixord Corporation\",\n\t[3]byte{24, 82, 130}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{24, 83, 224}:   \"Hanyang Digitech Co.Ltd\",\n\t[3]byte{24, 84, 207}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 85, 15}:    \"Cisco SPVTG\",\n\t[3]byte{24, 85, 227}:   \"Apple, Inc.\",\n\t[3]byte{24, 86, 68}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{24, 86, 128}:   \"Intel Corporate\",\n\t[3]byte{24, 88, 105}:   \"Sailer Electronic Co., Ltd\",\n\t[3]byte{24, 89, 51}:    \"Cisco SPVTG\",\n\t[3]byte{24, 89, 54}:    \"Xiaomi Communications Co Ltd\",\n\t[3]byte{24, 90, 88}:    \"Dell Inc.\",\n\t[3]byte{24, 90, 232}:   \"Zenotech.Co.,Ltd\",\n\t[3]byte{24, 93, 154}:   \"BobjGear LLC\",\n\t[3]byte{24, 94, 15}:    \"Intel Corporate\",\n\t[3]byte{24, 96, 36}:    \"Hewlett Packard\",\n\t[3]byte{24, 97, 199}:   \"lemonbeat GmbH\",\n\t[3]byte{24, 98, 44}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{24, 98, 228}:   \"Texas Instruments\",\n\t[3]byte{24, 100, 114}:  \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{24, 101, 113}:  \"Top Victory Electronics (Taiwan) Co., Ltd.\",\n\t[3]byte{24, 101, 144}:  \"Apple, Inc.\",\n\t[3]byte{24, 102, 199}:  \"Shenzhen Libre Technology Co., Ltd\",\n\t[3]byte{24, 102, 218}:  \"Dell Inc.\",\n\t[3]byte{24, 102, 227}:  \"Veros Systems, Inc.\",\n\t[3]byte{24, 103, 63}:   \"Hanover Displays Limited\",\n\t[3]byte{24, 103, 81}:   \"KOMEG Industrielle Messtechnik GmbH\",\n\t[3]byte{24, 103, 176}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 104, 106}:  \"zte corporation\",\n\t[3]byte{24, 104, 130}:  \"Beward R&D Co., Ltd.\",\n\t[3]byte{24, 104, 203}:  \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{24, 105, 216}:  \"HANGZHOU AIXIANGJI TECHNOLOGY CO., LTD\",\n\t[3]byte{24, 105, 218}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{24, 109, 153}:  \"Adanis Inc.\",\n\t[3]byte{24, 111, 45}:   \"Shenzhen Sundray Technologies Company Limited\",\n\t[3]byte{24, 112, 59}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{24, 113, 23}:   \"eta plus electronic gmbh\",\n\t[3]byte{24, 113, 213}:  \"Hazens Automotive Electronics(SZ)Co.,Ltd.\",\n\t[3]byte{24, 116, 46}:   \"Amazon Technologies Inc.\",\n\t[3]byte{24, 117, 50}:   \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{24, 120, 212}:  \"Verizon \",\n\t[3]byte{24, 121, 162}:  \"GMJ ELECTRIC LIMITED\",\n\t[3]byte{24, 122, 147}:  \"AMICCOM Electronics Corporation\",\n\t[3]byte{24, 124, 11}:   \"Ruckus Wireless\",\n\t[3]byte{24, 124, 129}:  \"Valeo Vision Systems\",\n\t[3]byte{24, 126, 185}:  \"Apple, Inc.\",\n\t[3]byte{24, 126, 213}:  \"shenzhen kaism technology Co. Ltd\",\n\t[3]byte{24, 128, 144}:  \"Cisco Systems, Inc\",\n\t[3]byte{24, 128, 206}:  \"Barberry Solutions Ltd\",\n\t[3]byte{24, 128, 245}:  \"Alcatel-Lucent Shanghai Bell Co., Ltd\",\n\t[3]byte{24, 129, 14}:   \"Apple, Inc.\",\n\t[3]byte{24, 130, 25}:   \"Alibaba Cloud Computing Ltd.\",\n\t[3]byte{24, 130, 140}:  \"Arcadyan Corporation\",\n\t[3]byte{24, 131, 49}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 131, 191}:  \"Arcadyan Technology Corporation\",\n\t[3]byte{24, 132, 16}:   \"CoreTrust Inc.\",\n\t[3]byte{24, 134, 58}:   \"DIGITAL ART SYSTEM\",\n\t[3]byte{24, 134, 172}:  \"Nokia Danmark A/S\",\n\t[3]byte{24, 135, 150}:  \"HTC Corporation\",\n\t[3]byte{24, 136, 87}:   \"Beijing Jinhong Xi-Dian Information Technology Corp.\",\n\t[3]byte{24, 137, 91}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 137, 160}:  \"Wuhan Funshion Online Technologies Co.,Ltd\",\n\t[3]byte{24, 137, 223}:  \"CerebrEX Inc.\",\n\t[3]byte{24, 138, 106}:  \"AVPro Global Hldgs\",\n\t[3]byte{24, 139, 21}:   \"ShenZhen ZhongRuiJing Technology co.,LTD\",\n\t[3]byte{24, 139, 69}:   \"Cisco Systems, Inc\",\n\t[3]byte{24, 139, 157}:  \"Cisco Systems, Inc\",\n\t[3]byte{24, 142, 213}:  \"TP Vision Belgium N.V. - innovation site Brugge\",\n\t[3]byte{24, 142, 249}:  \"G2C Co. Ltd.\",\n\t[3]byte{24, 144, 136}:  \"eero inc.\",\n\t[3]byte{24, 144, 216}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{24, 146, 44}:   \"Virtual Instruments\",\n\t[3]byte{24, 146, 164}:  \"Ciena Corporation\",\n\t[3]byte{24, 147, 127}:  \"AMPAK Technology, Inc.\",\n\t[3]byte{24, 147, 215}:  \"Texas Instruments\",\n\t[3]byte{24, 148, 198}:  \"ShenZhen Chenyee Technology Co., Ltd.\",\n\t[3]byte{24, 149, 82}:   \"1MORE\",\n\t[3]byte{24, 151, 255}:  \"TechFaith Wireless Technology Limited\",\n\t[3]byte{24, 153, 245}:  \"Sichuan Changhong Electric Ltd.\",\n\t[3]byte{24, 154, 103}:  \"CSE-Servelec Limited\",\n\t[3]byte{24, 155, 165}:  \"IEEE Registration Authority\",\n\t[3]byte{24, 156, 39}:   \"ARRIS Group, Inc.\",\n\t[3]byte{24, 156, 93}:   \"Cisco Systems, Inc\",\n\t[3]byte{24, 158, 44}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{24, 158, 252}:  \"Apple, Inc.\",\n\t[3]byte{24, 162, 138}:  \"Essel-T Co., Ltd\",\n\t[3]byte{24, 163, 232}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{24, 164, 169}:  \"Vanu Inc.\",\n\t[3]byte{24, 166, 247}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{24, 167, 241}:  \"Qingdao Haier Technology Co.,Ltd\",\n\t[3]byte{24, 169, 5}:    \"Hewlett Packard\",\n\t[3]byte{24, 169, 88}:   \"PROVISION THAI CO., LTD.\",\n\t[3]byte{24, 169, 155}:  \"Dell Inc.\",\n\t[3]byte{24, 170, 15}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{24, 170, 69}:   \"Fon Technology\",\n\t[3]byte{24, 170, 202}:  \"Sichuan tianyi kanghe communications co., LTD\",\n\t[3]byte{24, 171, 29}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 171, 245}:  \"Ultra Electronics Electrics\",\n\t[3]byte{24, 172, 158}:  \"ITEL MOBILE LIMITED\",\n\t[3]byte{24, 173, 77}:   \"Polostar Technology Corporation\",\n\t[3]byte{24, 174, 187}:  \"Siemens Convergence Creators GmbH&Co.KG\",\n\t[3]byte{24, 175, 97}:   \"Apple, Inc.\",\n\t[3]byte{24, 175, 143}:  \"Apple, Inc.\",\n\t[3]byte{24, 175, 159}:  \"DIGITRONIC Automationsanlagen GmbH\",\n\t[3]byte{24, 177, 105}:  \"Sonicwall\",\n\t[3]byte{24, 178, 9}:    \"Torrey Pines Logic, Inc\",\n\t[3]byte{24, 179, 186}:  \"Netlogic AB\",\n\t[3]byte{24, 180, 48}:   \"Nest Labs Inc.\",\n\t[3]byte{24, 181, 145}:  \"I-Storm\",\n\t[3]byte{24, 182, 247}:  \"NEW POS TECHNOLOGY LIMITED\",\n\t[3]byte{24, 183, 158}:  \"Invoxia\",\n\t[3]byte{24, 184, 31}:   \"ARRIS Group, Inc.\",\n\t[3]byte{24, 185, 5}:    \"Hong Kong Bouffalo Lab Limited\",\n\t[3]byte{24, 187, 38}:   \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{24, 188, 90}:   \"Zhejiang Tmall Technology Co., Ltd.\",\n\t[3]byte{24, 189, 173}:  \"L-TECH CORPORATION\",\n\t[3]byte{24, 190, 146}:  \"Delta Networks, Inc.\",\n\t[3]byte{24, 191, 28}:   \"Jiangsu Huitong Group Co.,Ltd.\",\n\t[3]byte{24, 192, 77}:   \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{24, 192, 134}:  \"Broadcom\",\n\t[3]byte{24, 193, 157}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{24, 194, 191}:  \"BUFFALO.INC\",\n\t[3]byte{24, 196, 81}:   \"Tucson Embedded Systems\",\n\t[3]byte{24, 197, 1}:    \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{24, 197, 138}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{24, 200, 231}:  \"Shenzhen Hualistone Technology Co.,Ltd\",\n\t[3]byte{24, 204, 35}:   \"Philio Technology Corporation\",\n\t[3]byte{24, 204, 136}:  \"Hitachi Johnson Controls Air \",\n\t[3]byte{24, 207, 36}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{24, 207, 94}:   \"Liteon Technology Corporation\",\n\t[3]byte{24, 208, 113}:  \"DASAN CO., LTD.\",\n\t[3]byte{24, 208, 197}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{24, 210, 37}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{24, 210, 118}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{24, 213, 182}:  \"SMG Holdings LLC\",\n\t[3]byte{24, 214, 28}:   \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{24, 214, 106}:  \"Inmarsat\",\n\t[3]byte{24, 214, 199}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{24, 214, 207}:  \"Kurth Electronic GmbH\",\n\t[3]byte{24, 215, 23}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{24, 217, 73}:   \"Qvis Labs, LLC\",\n\t[3]byte{24, 217, 143}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{24, 217, 239}:  \"Shuttle Inc.\",\n\t[3]byte{24, 219, 242}:  \"Dell Inc.\",\n\t[3]byte{24, 220, 86}:   \"Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\",\n\t[3]byte{24, 222, 215}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{24, 223, 180}:  \"BOSUNG POWERTEC CO.,LTD.\",\n\t[3]byte{24, 223, 193}:  \"Aetheros\",\n\t[3]byte{24, 225, 202}:  \"wanze\",\n\t[3]byte{24, 226, 136}:  \"STT Condigi\",\n\t[3]byte{24, 226, 159}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{24, 226, 194}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{24, 227, 188}:  \"TCT mobile ltd\",\n\t[3]byte{24, 231, 40}:   \"Cisco Systems, Inc\",\n\t[3]byte{24, 231, 119}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{24, 231, 244}:  \"Apple, Inc.\",\n\t[3]byte{24, 232, 15}:   \"Viking Electronics Inc.\",\n\t[3]byte{24, 232, 41}:   \"Ubiquiti Networks Inc.\",\n\t[3]byte{24, 232, 221}:  \"MODULETEK\",\n\t[3]byte{24, 236, 231}:  \"BUFFALO.INC\",\n\t[3]byte{24, 238, 105}:  \"Apple, Inc.\",\n\t[3]byte{24, 239, 99}:   \"Cisco Systems, Inc\",\n\t[3]byte{24, 240, 228}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{24, 241, 69}:   \"NetComm Wireless Limited\",\n\t[3]byte{24, 241, 142}:  \"ChipER Technology co. ltd\",\n\t[3]byte{24, 241, 216}:  \"Apple, Inc.\",\n\t[3]byte{24, 242, 146}:  \"Shannon Systems\",\n\t[3]byte{24, 244, 106}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{24, 246, 67}:   \"Apple, Inc.\",\n\t[3]byte{24, 246, 80}:   \"Multimedia Pacific Limited\",\n\t[3]byte{24, 247, 107}:  \"Zhejiang Winsight Technology CO.,LTD\",\n\t[3]byte{24, 248, 122}:  \"i3 International Inc.\",\n\t[3]byte{24, 249, 196}:  \"BAE Systems\",\n\t[3]byte{24, 250, 111}:  \"ISC applied systems corp\",\n\t[3]byte{24, 251, 123}:  \"Dell Inc.\",\n\t[3]byte{24, 252, 159}:  \"Changhe Electronics Co., Ltd.\",\n\t[3]byte{24, 253, 203}:  \"IEEE Registration Authority\",\n\t[3]byte{24, 254, 52}:   \"Espressif Inc.\",\n\t[3]byte{24, 255, 15}:   \"Intel Corporate\",\n\t[3]byte{24, 255, 46}:   \"Shenzhen Rui Ying Da Technology Co., Ltd\",\n\t[3]byte{28, 0, 66}:     \"NARI Technology Co., Ltd.\",\n\t[3]byte{28, 1, 45}:     \"Ficer Technology\",\n\t[3]byte{28, 2, 25}:     \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{28, 5, 183}:    \"Chongqing Trantor Technology Co., Ltd.\",\n\t[3]byte{28, 6, 86}:     \"IDY Corporation\",\n\t[3]byte{28, 8, 193}:    \"LG Innotek\",\n\t[3]byte{28, 11, 82}:    \"EPICOM S.A\",\n\t[3]byte{28, 15, 175}:   \"Lucid Vision Labs\",\n\t[3]byte{28, 15, 207}:   \"Sypro Optics GmbH\",\n\t[3]byte{28, 17, 97}:    \"Ciena Corporation\",\n\t[3]byte{28, 17, 225}:   \"Wartsila Finland Oy\",\n\t[3]byte{28, 18, 157}:   \"IEEE PES PSRC/SUB     \",\n\t[3]byte{28, 18, 176}:   \"Amazon Technologies Inc.\",\n\t[3]byte{28, 19, 56}:    \"Kimball Electronics Group, LLC\",\n\t[3]byte{28, 19, 134}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{28, 20, 72}:    \"ARRIS Group, Inc.\",\n\t[3]byte{28, 20, 179}:   \"Airwire Technologies\",\n\t[3]byte{28, 21, 31}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{28, 23, 211}:   \"Cisco Systems, Inc\",\n\t[3]byte{28, 24, 74}:    \"ShenZhen RicherLink Technologies Co.,LTD\",\n\t[3]byte{28, 25, 222}:   \"eyevis GmbH\",\n\t[3]byte{28, 26, 192}:   \"Apple, Inc.\",\n\t[3]byte{28, 26, 223}:   \"Microsoft Corporation\",\n\t[3]byte{28, 27, 13}:    \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{28, 27, 104}:   \"ARRIS Group, Inc.\",\n\t[3]byte{28, 27, 181}:   \"Intel Corporate\",\n\t[3]byte{28, 28, 253}:   \"Dalian Hi-Think Computer Technology, Corp\",\n\t[3]byte{28, 29, 103}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{28, 29, 134}:   \"Cisco Systems, Inc\",\n\t[3]byte{28, 30, 56}:    \"PCCW Global, Inc.\",\n\t[3]byte{28, 30, 227}:   \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{28, 31, 212}:   \"LifeBEAM Technologies LTD\",\n\t[3]byte{28, 31, 241}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{28, 32, 219}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{28, 33, 209}:   \"IEEE Registration Authority\",\n\t[3]byte{28, 35, 44}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{28, 35, 79}:    \"EDMI  Europe Ltd\",\n\t[3]byte{28, 36, 205}:   \"Askey Computer Corp.\",\n\t[3]byte{28, 36, 235}:   \"Burlywood\",\n\t[3]byte{28, 37, 225}:   \"China Mobile IOT Company Limited\",\n\t[3]byte{28, 39, 4}:     \"zte corporation\",\n\t[3]byte{28, 39, 221}:   \"Datang Gohighsec(zhejiang)Information Technology Co.,Ltd.\",\n\t[3]byte{28, 40, 175}:   \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{28, 42, 163}:   \"Shenzhen HongRui Optical Technology Co., Ltd.\",\n\t[3]byte{28, 46, 27}:    \"Suzhou Tremenet Communication Technology Co., Ltd.\",\n\t[3]byte{28, 51, 14}:    \"PernixData\",\n\t[3]byte{28, 51, 77}:    \"ITS Telecom\",\n\t[3]byte{28, 52, 119}:   \"Innovation Wireless\",\n\t[3]byte{28, 52, 218}:   \"Mellanox Technologies, Inc.\",\n\t[3]byte{28, 53, 241}:   \"NEW Lift Neue Elektronische Wege Steuerungsbau GmbH\",\n\t[3]byte{28, 54, 187}:   \"Apple, Inc.\",\n\t[3]byte{28, 55, 191}:   \"Cloudium Systems Ltd.\",\n\t[3]byte{28, 57, 71}:    \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{28, 57, 138}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{28, 58, 79}:    \"AccuSpec Electronics, LLC\",\n\t[3]byte{28, 58, 96}:    \"Ruckus Wireless\",\n\t[3]byte{28, 58, 222}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{28, 59, 143}:   \"Selve GmbH & Co. KG\",\n\t[3]byte{28, 59, 243}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{28, 61, 47}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{28, 61, 231}:   \"Sigma Koki Co.,Ltd.\",\n\t[3]byte{28, 62, 132}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{28, 64, 36}:    \"Dell Inc.\",\n\t[3]byte{28, 64, 232}:   \"SHENZHEN PROGRESS&WIN TECHNOLOGY CO.,LTD\",\n\t[3]byte{28, 65, 88}:    \"Gemalto M2M GmbH\",\n\t[3]byte{28, 65, 118}:   \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{28, 66, 125}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{28, 67, 99}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{28, 67, 236}:   \"JAPAN CIRCUIT CO.,LTD\",\n\t[3]byte{28, 68, 25}:    \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{28, 68, 85}:    \"Sieb & Meyer AG\",\n\t[3]byte{28, 69, 147}:   \"Texas Instruments\",\n\t[3]byte{28, 72, 64}:    \"IMS Messsysteme GmbH\",\n\t[3]byte{28, 72, 206}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{28, 72, 249}:   \"GN Netcom A/S\",\n\t[3]byte{28, 73, 123}:   \"Gemtek Technology Co., Ltd.\",\n\t[3]byte{28, 74, 247}:   \"AMON INC\",\n\t[3]byte{28, 75, 185}:   \"SMG ENTERPRISE, LLC\",\n\t[3]byte{28, 75, 214}:   \"AzureWave Technology Inc.\",\n\t[3]byte{28, 77, 102}:   \"Amazon Technologies Inc.\",\n\t[3]byte{28, 77, 112}:   \"Intel Corporate\",\n\t[3]byte{28, 80, 30}:    \"Sunplus Technology Co., Ltd.\",\n\t[3]byte{28, 81, 181}:   \"Techaya LTD\",\n\t[3]byte{28, 82, 22}:    \"DONGGUAN HELE ELECTRONICS CO., LTD\",\n\t[3]byte{28, 82, 214}:   \"FLAT DISPLAY TECHNOLOGY CORPORATION\",\n\t[3]byte{28, 84, 158}:   \"Universal Electronics, Inc.\",\n\t[3]byte{28, 85, 58}:    \"QianGua Corp.\",\n\t[3]byte{28, 86, 254}:   \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{28, 87, 216}:   \"Kraftway Corporation PLC\",\n\t[3]byte{28, 89, 155}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{28, 90, 11}:    \"Tegile Systems\",\n\t[3]byte{28, 90, 62}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{28, 90, 107}:   \"Philips Electronics Nederland BV\",\n\t[3]byte{28, 92, 85}:    \"PRIMA Cinema, Inc\",\n\t[3]byte{28, 92, 96}:    \"Shenzhen Belzon Technology Co.,LTD.\",\n\t[3]byte{28, 92, 242}:   \"Apple, Inc.\",\n\t[3]byte{28, 93, 128}:   \"Mitubishi Hitachi Power Systems Industries Co., Ltd.\",\n\t[3]byte{28, 95, 43}:    \"D-Link International\",\n\t[3]byte{28, 95, 255}:   \"Beijing Ereneben Information Technology Co.,Ltd Shenzhen Branch\",\n\t[3]byte{28, 96, 210}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{28, 96, 222}:   \"MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{28, 98, 184}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{28, 99, 183}:   \"OpenProducts 237 AB\",\n\t[3]byte{28, 99, 191}:   \"SHENZHEN BROADTEL  TELECOM CO.,LTD\",\n\t[3]byte{28, 100, 153}:  \"Comtrend Corporation\",\n\t[3]byte{28, 101, 157}:  \"Liteon Technology Corporation\",\n\t[3]byte{28, 102, 109}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{28, 102, 170}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{28, 103, 88}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{28, 104, 126}:  \"Shenzhen Qihu Intelligent Technology Company Limited\",\n\t[3]byte{28, 105, 122}:  \"EliteGroup Computer Systems Co., LTD\",\n\t[3]byte{28, 105, 165}:  \"BlackBerry RTS\",\n\t[3]byte{28, 106, 122}:  \"Cisco Systems, Inc\",\n\t[3]byte{28, 107, 202}:  \"Mitsunami Co., Ltd.\",\n\t[3]byte{28, 110, 76}:   \"Logistic Service & Engineering Co.,Ltd\",\n\t[3]byte{28, 110, 118}:  \"Quarion Technology Inc\",\n\t[3]byte{28, 111, 101}:  \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{28, 112, 34}:   \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{28, 114, 29}:   \"Dell Inc.\",\n\t[3]byte{28, 115, 40}:   \"Connected Home\",\n\t[3]byte{28, 115, 112}:  \"Neotech\",\n\t[3]byte{28, 116, 13}:   \"Zyxel Communications Corporation\",\n\t[3]byte{28, 117, 8}:    \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{28, 118, 202}:  \"Terasic Technologies Inc.\",\n\t[3]byte{28, 119, 246}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{28, 120, 57}:   \"Shenzhen Tencent Computer System Co., Ltd.\",\n\t[3]byte{28, 120, 78}:   \"China Mobile Iot Limited company\",\n\t[3]byte{28, 123, 33}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{28, 123, 35}:   \"Qingdao Hisense Communications Co.,Ltd.\",\n\t[3]byte{28, 124, 17}:   \"EID \",\n\t[3]byte{28, 124, 69}:   \"Vitek Industrial Video Products, Inc.\",\n\t[3]byte{28, 124, 199}:  \"Coriant GmbH\",\n\t[3]byte{28, 125, 34}:   \"Fuji Xerox Co., Ltd.\",\n\t[3]byte{28, 126, 81}:   \"3bumen.com\",\n\t[3]byte{28, 126, 229}:  \"D-Link International\",\n\t[3]byte{28, 127, 44}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{28, 130, 89}:   \"IEEE Registration Authority\",\n\t[3]byte{28, 131, 65}:   \"Hefei Bitland Information Technology Co.Ltd\",\n\t[3]byte{28, 131, 176}:  \"Linked IP GmbH\",\n\t[3]byte{28, 132, 100}:  \"FORMOSA WIRELESS COMMUNICATION CORP.\",\n\t[3]byte{28, 134, 173}:  \"MCT CO., LTD.\",\n\t[3]byte{28, 135, 44}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{28, 142, 92}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{28, 142, 142}:  \"DB Communication & Systems Co., ltd.\",\n\t[3]byte{28, 143, 138}:  \"Phase Motion Control SpA\",\n\t[3]byte{28, 145, 72}:   \"Apple, Inc.\",\n\t[3]byte{28, 145, 121}:  \"Integrated System Technologies Ltd\",\n\t[3]byte{28, 145, 157}:  \"Dongguan Liesheng Electronic Co., Ltd.\",\n\t[3]byte{28, 148, 146}:  \"RUAG Schweiz AG\",\n\t[3]byte{28, 149, 93}:   \"I-LAX ELECTRONICS INC.\",\n\t[3]byte{28, 149, 159}:  \"Veethree Electronics And Marine LLC\",\n\t[3]byte{28, 150, 90}:   \"WEIFANG GOERTEK ELECTRONICS CO.,LTD\",\n\t[3]byte{28, 151, 61}:   \"PRICOM Design\",\n\t[3]byte{28, 151, 197}:  \"Ynomia Pty Ltd\",\n\t[3]byte{28, 152, 193}:  \"CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.\",\n\t[3]byte{28, 152, 236}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{28, 153, 76}:   \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{28, 156, 38}:   \"Zoovel Technologies\",\n\t[3]byte{28, 156, 140}:  \"Juniper Networks\",\n\t[3]byte{28, 157, 62}:   \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{28, 158, 70}:   \"Apple, Inc.\",\n\t[3]byte{28, 158, 203}:  \"Beijing Nari Smartchip Microelectronics Company Limited\",\n\t[3]byte{28, 160, 184}:  \"Hon Hai Precision Ind. Co., Ltd.\",\n\t[3]byte{28, 160, 211}:  \"IEEE Registration Authority\",\n\t[3]byte{28, 162, 177}:  \"ruwido austria gmbh\",\n\t[3]byte{28, 165, 50}:   \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{28, 167, 112}:  \"SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\",\n\t[3]byte{28, 170, 7}:    \"Cisco Systems, Inc\",\n\t[3]byte{28, 171, 1}:    \"Innovolt\",\n\t[3]byte{28, 171, 52}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{28, 171, 167}:  \"Apple, Inc.\",\n\t[3]byte{28, 171, 192}:  \"Hitron Technologies. Inc\",\n\t[3]byte{28, 173, 209}:  \"Bosung Electronics Co., Ltd.\",\n\t[3]byte{28, 174, 203}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{28, 175, 5}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{28, 175, 247}:  \"D-Link International\",\n\t[3]byte{28, 176, 68}:   \"ASKEY COMPUTER CORP\",\n\t[3]byte{28, 176, 148}:  \"HTC Corporation\",\n\t[3]byte{28, 177, 127}:  \"NEC Platforms, Ltd.\",\n\t[3]byte{28, 178, 67}:   \"TDC A/S\",\n\t[3]byte{28, 179, 233}:  \" Shenzhen Zhongke United Communication Technology \",\n\t[3]byte{28, 183, 44}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{28, 183, 150}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{28, 184, 87}:   \"Becon Technologies Co,.Ltd.\",\n\t[3]byte{28, 185, 196}:  \"Ruckus Wireless\",\n\t[3]byte{28, 186, 140}:  \"Texas Instruments\",\n\t[3]byte{28, 187, 168}:  \"OJSC \\\"Ufimskiy Zavod \\\"Promsvyaz\\\"\",\n\t[3]byte{28, 189, 14}:   \"Amplified Engineering Pty Ltd\",\n\t[3]byte{28, 189, 185}:  \"D-Link International\",\n\t[3]byte{28, 191, 192}:  \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{28, 191, 206}:  \"Shenzhen Century Xinyang Technology Co., Ltd\",\n\t[3]byte{28, 192, 53}:   \"PLANEX COMMUNICATIONS INC.\",\n\t[3]byte{28, 192, 225}:  \"IEEE Registration Authority\",\n\t[3]byte{28, 193, 26}:   \"Wavetronix\",\n\t[3]byte{28, 193, 188}:  \"Yichip\\u00a0Microelectronics (Hangzhou) Co.,Ltd\",\n\t[3]byte{28, 193, 222}:  \"Hewlett Packard\",\n\t[3]byte{28, 195, 22}:   \"MileSight Technology Co., Ltd.\",\n\t[3]byte{28, 195, 235}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{28, 197, 134}:  \"Absolute Acoustics\",\n\t[3]byte{28, 198, 60}:   \"Arcadyan Technology Corporation\",\n\t[3]byte{28, 199, 45}:   \"Shenzhen Huapu Digital CO.,Ltd\",\n\t[3]byte{28, 202, 227}:  \"IEEE Registration Authority\",\n\t[3]byte{28, 203, 153}:  \"TCT mobile ltd\",\n\t[3]byte{28, 204, 214}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{28, 205, 229}:  \"Shanghai Wind Technologies Co.,Ltd\",\n\t[3]byte{28, 212, 12}:   \"Kriwan Industrie-Elektronik GmbH\",\n\t[3]byte{28, 213, 226}:  \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{28, 214, 189}:  \"LEEDARSON LIGHTING CO., LTD.\",\n\t[3]byte{28, 214, 190}:  \"Wistron Neweb Corporation\",\n\t[3]byte{28, 218, 39}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{28, 221, 234}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{28, 222, 87}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{28, 222, 167}:  \"Cisco Systems, Inc\",\n\t[3]byte{28, 223, 15}:   \"Cisco Systems, Inc\",\n\t[3]byte{28, 223, 82}:   \"Texas Instruments\",\n\t[3]byte{28, 225, 101}:  \"Marshal Corporation\",\n\t[3]byte{28, 225, 146}:  \"Qisda Corporation\",\n\t[3]byte{28, 226, 204}:  \"Texas Instruments\",\n\t[3]byte{28, 230, 29}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{28, 230, 43}:   \"Apple, Inc.\",\n\t[3]byte{28, 230, 199}:  \"Cisco Systems, Inc\",\n\t[3]byte{28, 232, 93}:   \"Cisco Systems, Inc\",\n\t[3]byte{28, 234, 11}:   \"Edgecore Networks Corporation\",\n\t[3]byte{28, 234, 27}:   \"Nokia\",\n\t[3]byte{28, 238, 201}:  \"Elo touch solutions\",\n\t[3]byte{28, 238, 232}:  \"Ilshin Elecom\",\n\t[3]byte{28, 239, 206}:  \"bebro electronic GmbH\",\n\t[3]byte{28, 240, 62}:   \"Wearhaus Inc.\",\n\t[3]byte{28, 240, 97}:   \"SCAPS GmbH\",\n\t[3]byte{28, 242, 154}:  \"Google, Inc.\",\n\t[3]byte{28, 244, 202}:  \"Private\",\n\t[3]byte{28, 245, 231}:  \"Turtle Industry Co., Ltd.\",\n\t[3]byte{28, 250, 104}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{28, 252, 187}:  \"Realfiction ApS\",\n\t[3]byte{28, 253, 8}:    \"IEEE Registration Authority\",\n\t[3]byte{28, 254, 43}:   \"Amazon Technologies Inc.\",\n\t[3]byte{28, 254, 167}:  \"IDentytech Solutins Ltd.\",\n\t[3]byte{28, 255, 89}:   \"Sichuan Tianyi Comheart Telecom Co., Ltd.\",\n\t[3]byte{32, 1, 79}:     \"Linea Research Ltd\",\n\t[3]byte{32, 2, 175}:    \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{32, 4, 15}:     \"Dell Inc.\",\n\t[3]byte{32, 5, 5}:      \"RADMAX COMMUNICATION PRIVATE LIMITED\",\n\t[3]byte{32, 5, 232}:    \"OOO InProMedia\",\n\t[3]byte{32, 8, 237}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{32, 10, 13}:    \"IEEE Registration Authority\",\n\t[3]byte{32, 10, 94}:    \"Xiangshan Giant Eagle Technology Developing Co., Ltd.\",\n\t[3]byte{32, 11, 199}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{32, 12, 200}:   \"NETGEAR\",\n\t[3]byte{32, 13, 176}:   \"Shenzhen Four Seas Global Link Network Technology Co., Ltd.\",\n\t[3]byte{32, 14, 149}:   \"IEC – TC9 WG43\",\n\t[3]byte{32, 15, 112}:   \"FOXTECH\",\n\t[3]byte{32, 16, 122}:   \"Gemtek Technology Co., Ltd.\",\n\t[3]byte{32, 17, 78}:    \"MeteRSit S.R.L.\",\n\t[3]byte{32, 18, 87}:    \"Most Lucky Trading Ltd\",\n\t[3]byte{32, 18, 213}:   \"Scientech Materials Corporation\",\n\t[3]byte{32, 19, 224}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{32, 22, 61}:    \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{32, 22, 185}:   \"Intel Corporate\",\n\t[3]byte{32, 22, 216}:   \"Liteon Technology Corporation\",\n\t[3]byte{32, 23, 66}:    \"LG Electronics\",\n\t[3]byte{32, 24, 14}:    \"Shenzhen Sunchip Technology Co., Ltd\",\n\t[3]byte{32, 26, 6}:     \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{32, 27, 201}:   \"Juniper Networks\",\n\t[3]byte{32, 29, 3}:     \"Elatec GmbH\",\n\t[3]byte{32, 31, 49}:    \"Inteno Broadband Technology AB\",\n\t[3]byte{32, 33, 165}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{32, 37, 100}:   \"PEGATRON CORPORATION\",\n\t[3]byte{32, 37, 152}:   \"Teleview\",\n\t[3]byte{32, 38, 129}:   \"TECNO MOBILE LIMITED\",\n\t[3]byte{32, 40, 62}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{32, 40, 188}:   \"Visionscape Co,. Ltd.\",\n\t[3]byte{32, 42, 197}:   \"Petite-En\",\n\t[3]byte{32, 43, 193}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{32, 44, 183}:   \"Kong Yue Electronics & Information Industry (Xinhui) Ltd.\",\n\t[3]byte{32, 45, 7}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{32, 45, 35}:    \"Collinear Networks Inc.\",\n\t[3]byte{32, 45, 248}:   \"Digital Media Cartridge Ltd.\",\n\t[3]byte{32, 49, 28}:    \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{32, 49, 235}:   \"HDSN\",\n\t[3]byte{32, 50, 51}:    \"SHENZHEN BILIAN ELECTRONIC CO.，LTD\",\n\t[3]byte{32, 50, 108}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{32, 52, 251}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{32, 54, 91}:    \"Megafone Limited\",\n\t[3]byte{32, 54, 215}:   \"Shanghai Reacheng  Communication Technology Co.,Ltd\",\n\t[3]byte{32, 55, 6}:     \"Cisco Systems, Inc\",\n\t[3]byte{32, 55, 188}:   \"Kuipers Electronic Engineering BV\",\n\t[3]byte{32, 57, 86}:    \"HMD Global Oy\",\n\t[3]byte{32, 58, 7}:     \"Cisco Systems, Inc\",\n\t[3]byte{32, 58, 239}:   \"Sivantos GmbH\",\n\t[3]byte{32, 60, 174}:   \"Apple, Inc.\",\n\t[3]byte{32, 61, 102}:   \"ARRIS Group, Inc.\",\n\t[3]byte{32, 61, 178}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{32, 61, 189}:   \"LG Innotek\",\n\t[3]byte{32, 64, 5}:     \"feno GmbH\",\n\t[3]byte{32, 65, 90}:    \"Smarteh d.o.o.\",\n\t[3]byte{32, 68, 58}:    \"Schneider Electric Asia Pacific Ltd\",\n\t[3]byte{32, 68, 65}:    \"Remote Solution\",\n\t[3]byte{32, 70, 161}:   \"VECOW Co., Ltd\",\n\t[3]byte{32, 70, 249}:   \"Advanced Network Devices (dba:AND)\",\n\t[3]byte{32, 71, 71}:    \"Dell Inc.\",\n\t[3]byte{32, 71, 218}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{32, 71, 237}:   \"BSkyB Ltd\",\n\t[3]byte{32, 74, 170}:   \"Hanscan Spain S.A.\",\n\t[3]byte{32, 76, 3}:     \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{32, 76, 109}:   \"Hugo Brennenstuhl Gmbh & Co. KG.\",\n\t[3]byte{32, 76, 158}:   \"Cisco Systems, Inc\",\n\t[3]byte{32, 78, 107}:   \"Axxana(israel) ltd\",\n\t[3]byte{32, 78, 113}:   \"Juniper Networks\",\n\t[3]byte{32, 78, 127}:   \"NETGEAR\",\n\t[3]byte{32, 80, 231}:   \"AMPAK Technology,Inc.\",\n\t[3]byte{32, 83, 202}:   \"Risk Technology Ltd\",\n\t[3]byte{32, 84, 118}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{32, 84, 250}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{32, 85, 49}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{32, 85, 50}:    \"Gotech International Technology Limited\",\n\t[3]byte{32, 87, 33}:    \"Salix Technology CO., Ltd.\",\n\t[3]byte{32, 87, 175}:   \"Shenzhen FH-NET OPTOELECTRONICS CO.,LTD\",\n\t[3]byte{32, 88, 105}:   \"Ruckus Wireless\",\n\t[3]byte{32, 89, 160}:   \"Paragon Technologies Inc.\",\n\t[3]byte{32, 90, 0}:     \"Coval\",\n\t[3]byte{32, 91, 42}:    \"Private\",\n\t[3]byte{32, 91, 94}:    \"Shenzhen Wonhe Technology Co., Ltd\",\n\t[3]byte{32, 92, 250}:   \"Yangzhou ChangLian Network Technology Co,ltd.\",\n\t[3]byte{32, 93, 71}:    \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{32, 94, 247}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{32, 95, 61}:    \"Cambridge Communication Systems Ltd\",\n\t[3]byte{32, 98, 116}:   \"Microsoft Corporation\",\n\t[3]byte{32, 99, 95}:    \"Abeeway\",\n\t[3]byte{32, 100, 50}:   \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{32, 100, 203}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{32, 101, 142}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{32, 103, 124}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{32, 103, 177}:  \"Pluto inc.\",\n\t[3]byte{32, 104, 157}:  \"Liteon Technology Corporation\",\n\t[3]byte{32, 105, 128}:  \"Apple, Inc.\",\n\t[3]byte{32, 106, 138}:  \"Wistron Infocomm (Zhongshan) Corporation\",\n\t[3]byte{32, 106, 255}:  \"Atlas Elektronik UK Limited\",\n\t[3]byte{32, 107, 231}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{32, 108, 138}:  \"Extreme Networks, Inc.\",\n\t[3]byte{32, 109, 49}:   \"FIREWALLA INC\",\n\t[3]byte{32, 110, 156}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{32, 111, 236}:  \"Braemac CA LLC\",\n\t[3]byte{32, 113, 158}:  \"SF Technology Co.,Ltd\",\n\t[3]byte{32, 115, 85}:   \"ARRIS Group, Inc.\",\n\t[3]byte{32, 116, 84}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{32, 116, 207}:  \"Shenzhen Voxtech Co.,Ltd\",\n\t[3]byte{32, 118, 0}:    \"Actiontec Electronics, Inc\",\n\t[3]byte{32, 118, 143}:  \"Apple, Inc.\",\n\t[3]byte{32, 118, 147}:  \"Lenovo (Beijing) Limited.\",\n\t[3]byte{32, 119, 89}:   \"OPTICAL NETWORK VIDEO TECHNOLOGIES (SHENZHEN) CO., LTD.\",\n\t[3]byte{32, 120, 11}:   \"Delta Faucet Company\",\n\t[3]byte{32, 120, 82}:   \"Nokia\",\n\t[3]byte{32, 120, 240}:  \"Apple, Inc.\",\n\t[3]byte{32, 121, 24}:   \"Intel Corporate\",\n\t[3]byte{32, 124, 143}:  \"Quanta Microsystems,Inc.\",\n\t[3]byte{32, 125, 116}:  \"Apple, Inc.\",\n\t[3]byte{32, 128, 88}:   \"Ciena Corporation\",\n\t[3]byte{32, 130, 106}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{32, 130, 192}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{32, 131, 248}:  \"Advanced Digital Broadcast SA\",\n\t[3]byte{32, 133, 140}:  \"Assa\",\n\t[3]byte{32, 133, 147}:  \"IEEE Registration Authority\",\n\t[3]byte{32, 135, 86}:   \"SIEMENS AG\",\n\t[3]byte{32, 135, 172}:  \"AES motomation\",\n\t[3]byte{32, 137, 111}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{32, 137, 132}:  \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{32, 137, 134}:  \"zte corporation\",\n\t[3]byte{32, 139, 55}:   \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{32, 144, 111}:  \"Shenzhen Tencent Computer System Co., Ltd.\",\n\t[3]byte{32, 145, 72}:   \"Texas Instruments\",\n\t[3]byte{32, 145, 138}:  \"PROFALUX\",\n\t[3]byte{32, 145, 217}:  \"I'M SPA\",\n\t[3]byte{32, 147, 77}:   \"FUJIAN STAR-NET COMMUNICATION CO.,LTD\",\n\t[3]byte{32, 150, 138}:  \"China Mobile (Hangzhou) Information Technology Co., Ltd.\",\n\t[3]byte{32, 152, 216}:  \"Shenzhen Yingdakang Technology CO., LTD\",\n\t[3]byte{32, 154, 125}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{32, 154, 233}:  \"Volacomm Co., Ltd\",\n\t[3]byte{32, 155, 165}:  \"JIAXING GLEAD Electronics Co.,Ltd\",\n\t[3]byte{32, 155, 205}:  \"Apple, Inc.\",\n\t[3]byte{32, 158, 121}:  \"Universal Electronics, Inc.\",\n\t[3]byte{32, 158, 247}:  \"Extreme Networks, Inc.\",\n\t[3]byte{32, 161, 113}:  \"Amazon Technologies Inc.\",\n\t[3]byte{32, 162, 228}:  \"Apple, Inc.\",\n\t[3]byte{32, 162, 231}:  \"Lee-Dickens Ltd\",\n\t[3]byte{32, 166, 12}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{32, 166, 128}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{32, 166, 205}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{32, 167, 131}:  \"miControl GmbH\",\n\t[3]byte{32, 167, 135}:  \"Bointec Taiwan Corporation Limited\",\n\t[3]byte{32, 168, 185}:  \"SIEMENS AG\",\n\t[3]byte{32, 169, 14}:   \"TCT mobile ltd\",\n\t[3]byte{32, 169, 155}:  \"Microsoft Corporation\",\n\t[3]byte{32, 170, 37}:   \"IP-NET LLC\",\n\t[3]byte{32, 170, 75}:   \"Cisco-Linksys, LLC\",\n\t[3]byte{32, 171, 55}:   \"Apple, Inc.\",\n\t[3]byte{32, 171, 72}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{32, 173, 86}:   \"Continental Automotive Systems Inc.\",\n\t[3]byte{32, 176, 1}:    \"Technicolor\",\n\t[3]byte{32, 176, 247}:  \"Enclustra GmbH\",\n\t[3]byte{32, 179, 153}:  \"Enterasys\",\n\t[3]byte{32, 181, 198}:  \"Mimosa Networks\",\n\t[3]byte{32, 183, 128}:  \"Toshiba Visual Solutions Corporation Co.,Ltd\",\n\t[3]byte{32, 183, 192}:  \"OMICRON electronics GmbH\",\n\t[3]byte{32, 187, 118}:  \"COL GIOVANNI PAOLO SpA\",\n\t[3]byte{32, 187, 192}:  \"Cisco Systems, Inc\",\n\t[3]byte{32, 187, 198}:  \"Jabil Circuit Hungary Ltd.\",\n\t[3]byte{32, 191, 219}:  \"DVL\",\n\t[3]byte{32, 192, 71}:   \"Verizon \",\n\t[3]byte{32, 192, 109}:  \"SHENZHEN SPACETEK TECHNOLOGY CO.,LTD\",\n\t[3]byte{32, 193, 175}:  \"i Wit Digital Co., Limited\",\n\t[3]byte{32, 195, 143}:  \"Texas Instruments\",\n\t[3]byte{32, 195, 164}:  \"RetailNext\",\n\t[3]byte{32, 198, 13}:   \"Shanghai annijie Information technology Co.,LTD\",\n\t[3]byte{32, 198, 235}:  \"Panasonic Corporation AVC Networks Company\",\n\t[3]byte{32, 200, 179}:  \"SHENZHEN BUL-TECH CO.,LTD.\",\n\t[3]byte{32, 201, 208}:  \"Apple, Inc.\",\n\t[3]byte{32, 205, 57}:   \"Texas Instruments\",\n\t[3]byte{32, 206, 196}:  \"Peraso Technologies\",\n\t[3]byte{32, 207, 48}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{32, 209, 96}:   \"Private\",\n\t[3]byte{32, 210, 31}:   \"Wincal Technology Corp.\",\n\t[3]byte{32, 210, 95}:   \"SmartCap Technologies\",\n\t[3]byte{32, 211, 144}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{32, 213, 171}:  \"Korea Infocom Co.,Ltd.\",\n\t[3]byte{32, 213, 191}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{32, 214, 7}:    \"Nokia Corporation\",\n\t[3]byte{32, 215, 90}:   \"Posh Mobile Limited\",\n\t[3]byte{32, 216, 11}:   \"Juniper Networks\",\n\t[3]byte{32, 217, 6}:    \"Iota, Inc.\",\n\t[3]byte{32, 218, 34}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{32, 219, 171}:  \"Samsung Electronics Co., Ltd.\",\n\t[3]byte{32, 220, 147}:  \"Cheetah Hi-Tech, Inc.\",\n\t[3]byte{32, 220, 230}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{32, 222, 136}:  \"IC Realtime LLC\",\n\t[3]byte{32, 223, 63}:   \"Nanjing SAC Power Grid Automation Co., Ltd.\",\n\t[3]byte{32, 223, 185}:  \"Google, Inc.\",\n\t[3]byte{32, 224, 156}:  \"Nokia\",\n\t[3]byte{32, 228, 7}:    \"Spark srl\",\n\t[3]byte{32, 229, 42}:   \"NETGEAR\",\n\t[3]byte{32, 229, 100}:  \"ARRIS Group, Inc.\",\n\t[3]byte{32, 231, 145}:  \"Siemens Healthcare Diagnostics, Inc\",\n\t[3]byte{32, 232, 116}:  \"Apple, Inc.\",\n\t[3]byte{32, 232, 130}:  \"zte corporation\",\n\t[3]byte{32, 234, 199}:  \"SHENZHEN RIOPINE ELECTRONICS CO., LTD\",\n\t[3]byte{32, 237, 116}:  \"Ability enterprise co.,Ltd.\",\n\t[3]byte{32, 238, 40}:   \"Apple, Inc.\",\n\t[3]byte{32, 238, 198}:  \"Elefirst Science & Tech Co ., ltd\",\n\t[3]byte{32, 240, 2}:    \"MTData Developments Pty. Ltd.\",\n\t[3]byte{32, 241, 124}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{32, 241, 158}:  \"ARRIS Group, Inc.\",\n\t[3]byte{32, 243, 117}:  \"ARRIS Group, Inc.\",\n\t[3]byte{32, 243, 163}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{32, 244, 27}:   \"Shenzhen Bilian electronic CO.,LTD\",\n\t[3]byte{32, 244, 79}:   \"Nokia\",\n\t[3]byte{32, 244, 82}:   \"Shanghai IUV Software Development Co. Ltd\",\n\t[3]byte{32, 244, 120}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{32, 245, 16}:   \"Codex Digital Limited\",\n\t[3]byte{32, 245, 67}:   \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{32, 247, 124}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{32, 248, 94}:   \"Delta Electronics\",\n\t[3]byte{32, 250, 187}:  \"Cambridge Executive Limited\",\n\t[3]byte{32, 253, 241}:  \"3COM EUROPE LTD\",\n\t[3]byte{32, 254, 205}:  \"System In Frontier Inc.\",\n\t[3]byte{32, 254, 219}:  \"M2M Solution S.A.S.\",\n\t[3]byte{36, 0, 186}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 0, 250}:    \"China Mobile (Hangzhou) Information Technology Co., Ltd\",\n\t[3]byte{36, 1, 199}:    \"Cisco Systems, Inc\",\n\t[3]byte{36, 5, 15}:     \"MTN Electronic Co. Ltd\",\n\t[3]byte{36, 5, 136}:    \"Google, Inc.\",\n\t[3]byte{36, 5, 245}:    \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{36, 9, 23}:     \"Devlin Electronics Limited\",\n\t[3]byte{36, 9, 149}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 10, 17}:    \"TCT mobile ltd\",\n\t[3]byte{36, 10, 99}:    \"ARRIS Group, Inc.\",\n\t[3]byte{36, 10, 100}:   \"AzureWave Technology Inc.\",\n\t[3]byte{36, 10, 196}:   \"Espressif Inc.\",\n\t[3]byte{36, 11, 10}:    \"Palo Alto Networks\",\n\t[3]byte{36, 11, 42}:    \"Viettel Group\",\n\t[3]byte{36, 11, 177}:   \"KOSTAL Industrie Elektrik GmbH \",\n\t[3]byte{36, 13, 101}:   \"Shenzhen Vsun Communication Technology Co., Ltd.\",\n\t[3]byte{36, 13, 108}:   \"SMND\",\n\t[3]byte{36, 13, 194}:   \"TCT mobile ltd\",\n\t[3]byte{36, 16, 100}:   \"Shenzhen Ecsino Tecnical Co. Ltd\",\n\t[3]byte{36, 17, 37}:    \"Hutek Co., Ltd.\",\n\t[3]byte{36, 17, 72}:    \"Entropix, LLC\",\n\t[3]byte{36, 17, 208}:   \"Chongqing Ehs Science and Technology Development Co.,Ltd.\",\n\t[3]byte{36, 20, 7}:     \"Xiamen Sigmastar Technology Ltd.\",\n\t[3]byte{36, 21, 16}:    \"IEEE Registration Authority\",\n\t[3]byte{36, 22, 109}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 22, 157}:   \"Cisco Systems, Inc\",\n\t[3]byte{36, 24, 29}:    \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{36, 26, 140}:   \"Squarehead Technology AS\",\n\t[3]byte{36, 26, 230}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{36, 27, 19}:    \"Shanghai Nutshell Electronic Co., Ltd.\",\n\t[3]byte{36, 27, 68}:    \"Hangzhou Tuners Electronics Co., Ltd\",\n\t[3]byte{36, 27, 122}:   \"Apple, Inc.\",\n\t[3]byte{36, 28, 4}:     \"SHENZHEN JEHE TECHNOLOGY DEVELOPMENT CO., LTD.\",\n\t[3]byte{36, 30, 235}:   \"Apple, Inc.\",\n\t[3]byte{36, 31, 44}:    \"Calsys, Inc.\",\n\t[3]byte{36, 31, 160}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 32, 199}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{36, 33, 36}:    \"Nokia\",\n\t[3]byte{36, 33, 171}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{36, 36, 14}:    \"Apple, Inc.\",\n\t[3]byte{36, 38, 66}:    \"SHARP Corporation.\",\n\t[3]byte{36, 41, 254}:   \"KYOCERA Corporation \",\n\t[3]byte{36, 46, 2}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 46, 144}:   \"PALIT MICROSYSTEMS, LTD\",\n\t[3]byte{36, 47, 250}:   \"Toshiba Global Commerce Solutions\",\n\t[3]byte{36, 49, 84}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 49, 132}:   \"SHARP Corporation\",\n\t[3]byte{36, 51, 108}:   \"Private\",\n\t[3]byte{36, 53, 204}:   \"Zhongshan Scinan Internet of Things Co.,Ltd.\",\n\t[3]byte{36, 55, 76}:    \"Cisco SPVTG\",\n\t[3]byte{36, 55, 239}:   \"EMC Electronic Media Communication SA\",\n\t[3]byte{36, 58, 130}:   \"IRTS\",\n\t[3]byte{36, 60, 32}:    \"Dynamode Group\",\n\t[3]byte{36, 63, 48}:    \"Oxygen Broadband s.a.\",\n\t[3]byte{36, 64, 174}:   \"NIIC Technology Co., Ltd.\",\n\t[3]byte{36, 65, 140}:   \"Intel Corporate\",\n\t[3]byte{36, 66, 188}:   \"Alinco,incorporated\",\n\t[3]byte{36, 67, 226}:   \"DASAN Network Solutions\",\n\t[3]byte{36, 68, 39}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 69, 151}:   \"GEMUE Gebr. Mueller Apparatebau\",\n\t[3]byte{36, 70, 200}:   \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{36, 71, 14}:    \"PentronicAB\",\n\t[3]byte{36, 73, 123}:   \"Innovative Converged Devices Inc\",\n\t[3]byte{36, 75, 3}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{36, 75, 129}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{36, 75, 254}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{36, 76, 7}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 76, 227}:   \"Amazon Technologies Inc.\",\n\t[3]byte{36, 78, 123}:   \"IEEE Registration Authority\",\n\t[3]byte{36, 79, 29}:    \"iRule LLC\",\n\t[3]byte{36, 82, 106}:   \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{36, 83, 191}:   \"Enernet\",\n\t[3]byte{36, 88, 110}:   \"zte corporation\",\n\t[3]byte{36, 88, 128}:   \"VIZEO\",\n\t[3]byte{36, 89, 11}:    \"White Sky Inc. Limited\",\n\t[3]byte{36, 90, 76}:    \"Ubiquiti Networks Inc.\",\n\t[3]byte{36, 90, 181}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{36, 91, 167}:   \"Apple, Inc.\",\n\t[3]byte{36, 91, 240}:   \"Liteon, Inc.\",\n\t[3]byte{36, 92, 191}:   \"NCSE\",\n\t[3]byte{36, 92, 203}:   \"AXIe Consortium, Inc.\",\n\t[3]byte{36, 94, 190}:   \"QNAP Systems, Inc.\",\n\t[3]byte{36, 95, 159}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{36, 95, 223}:   \"KYOCERA CORPORATION \",\n\t[3]byte{36, 96, 129}:   \"razberi technologies\",\n\t[3]byte{36, 97, 90}:    \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{36, 98, 120}:   \"sysmocom - systems for mobile communications GmbH\",\n\t[3]byte{36, 98, 171}:   \"Espressif Inc.\",\n\t[3]byte{36, 98, 206}:   \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{36, 100, 239}:  \"CYG SUNRI CO.,LTD.\",\n\t[3]byte{36, 101, 17}:   \"AVM GmbH\",\n\t[3]byte{36, 104, 128}:  \"Braveridge.co.,ltd.\",\n\t[3]byte{36, 104, 176}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{36, 105, 62}:   \"innodisk Corporation\",\n\t[3]byte{36, 105, 74}:   \"Jasmine Systems Inc.\",\n\t[3]byte{36, 105, 104}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{36, 105, 165}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 106, 171}:  \"IT-IS International\",\n\t[3]byte{36, 108, 138}:  \"YUKAI Engineering\",\n\t[3]byte{36, 110, 150}:  \"Dell Inc.\",\n\t[3]byte{36, 111, 40}:   \"Espressif Inc.\",\n\t[3]byte{36, 111, 140}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{36, 113, 82}:   \"Dell Inc.\",\n\t[3]byte{36, 113, 137}:  \"Texas Instruments\",\n\t[3]byte{36, 114, 96}:   \"IOTTECH Corp\",\n\t[3]byte{36, 116, 247}:  \"GoPro\",\n\t[3]byte{36, 118, 86}:   \"Shanghai Net Miles Fiber Optics Technology Co., LTD.\",\n\t[3]byte{36, 118, 125}:  \"Cisco SPVTG\",\n\t[3]byte{36, 119, 3}:    \"Intel Corporate\",\n\t[3]byte{36, 121, 42}:   \"Ruckus Wireless\",\n\t[3]byte{36, 121, 239}:  \"Greenpacket Berhad, Taiwan\",\n\t[3]byte{36, 121, 243}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{36, 121, 248}:  \"KUPSON spol. s r.o.\",\n\t[3]byte{36, 124, 76}:   \"Herman Miller\",\n\t[3]byte{36, 125, 77}:   \"Texas Instruments\",\n\t[3]byte{36, 126, 18}:   \"Cisco Systems, Inc\",\n\t[3]byte{36, 126, 81}:   \"zte corporation\",\n\t[3]byte{36, 127, 32}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{36, 127, 60}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 128, 0}:    \"Westcontrol AS\",\n\t[3]byte{36, 129, 170}:  \"KSH International Co., Ltd.\",\n\t[3]byte{36, 129, 199}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{36, 130, 138}:  \"Prowave Technologies Ltd.\",\n\t[3]byte{36, 132, 152}:  \"Beijing Jiaoda Microunion Tech.Co.,Ltd.\",\n\t[3]byte{36, 134, 244}:  \"Ctek, Inc.\",\n\t[3]byte{36, 135, 7}:    \"SEnergy Corporation\",\n\t[3]byte{36, 136, 148}:  \"shenzhen lensun Communication Technology LTD\",\n\t[3]byte{36, 138, 7}:    \"Mellanox Technologies, Inc.\",\n\t[3]byte{36, 139, 224}:  \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{36, 145, 187}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 146, 14}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{36, 147, 202}:  \"Voxtronic Austria\",\n\t[3]byte{36, 148, 66}:   \"OPEN ROAD SOLUTIONS , INC.\",\n\t[3]byte{36, 149, 4}:    \"SFR\",\n\t[3]byte{36, 151, 237}:  \"Techvision Intelligent Technology Limited\",\n\t[3]byte{36, 158, 171}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 160, 116}:  \"Apple, Inc.\",\n\t[3]byte{36, 161, 96}:   \"Espressif Inc.\",\n\t[3]byte{36, 162, 225}:  \"Apple, Inc.\",\n\t[3]byte{36, 164, 44}:   \"KOUKAAM a.s.\",\n\t[3]byte{36, 164, 60}:   \"Ubiquiti Networks Inc.\",\n\t[3]byte{36, 164, 149}:  \"Thales Canada Inc.\",\n\t[3]byte{36, 165, 44}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 165, 52}:   \"SynTrust Tech International Ltd. \",\n\t[3]byte{36, 167, 220}:  \"BSkyB Ltd\",\n\t[3]byte{36, 168, 125}:  \"Panasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd.\",\n\t[3]byte{36, 169, 55}:   \"PURE Storage\",\n\t[3]byte{36, 171, 129}:  \"Apple, Inc.\",\n\t[3]byte{36, 175, 74}:   \"Alcatel-Lucent IPD\",\n\t[3]byte{36, 175, 84}:   \"NEXGEN Mediatech Inc.\",\n\t[3]byte{36, 176, 169}:  \"Shanghai Mobiletek Communication Ltd.\",\n\t[3]byte{36, 177, 5}:    \"Prama Hikvision India Private Limited\",\n\t[3]byte{36, 178, 9}:    \"Avaya Inc\",\n\t[3]byte{36, 178, 222}:  \"Espressif Inc.\",\n\t[3]byte{36, 182, 87}:   \"Cisco Systems, Inc\",\n\t[3]byte{36, 182, 184}:  \"FRIEM SPA\",\n\t[3]byte{36, 182, 253}:  \"Dell Inc.\",\n\t[3]byte{36, 184, 140}:  \"Crenus Co.,Ltd.\",\n\t[3]byte{36, 184, 210}:  \"Opzoon Technology Co.,Ltd.\",\n\t[3]byte{36, 186, 19}:   \"RISO KAGAKU CORPORATION\",\n\t[3]byte{36, 186, 48}:   \"Technical Consumer Products, Inc.\",\n\t[3]byte{36, 187, 193}:  \"Absolute Analysis\",\n\t[3]byte{36, 188, 130}:  \"Dali Wireless, Inc.\",\n\t[3]byte{36, 188, 248}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 190, 5}:    \"Hewlett Packard\",\n\t[3]byte{36, 190, 24}:   \"DADOUTEK COMPANY LIMITED\",\n\t[3]byte{36, 191, 116}:  \"Private\",\n\t[3]byte{36, 192, 179}:  \"RSF\",\n\t[3]byte{36, 193, 122}:  \"BEIJING IACTIVE NETWORK CO.,LTD\",\n\t[3]byte{36, 193, 189}:  \"CRRC DALIAN R&D CO.,LTD.\",\n\t[3]byte{36, 195, 249}:  \"Securitas Direct AB\",\n\t[3]byte{36, 196, 47}:   \"Philips Lifeline\",\n\t[3]byte{36, 196, 74}:   \"zte corporation\",\n\t[3]byte{36, 198, 150}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{36, 200, 72}:   \"mywerk Portal GmbH\",\n\t[3]byte{36, 200, 110}:  \"Chaney Instrument Co.\",\n\t[3]byte{36, 200, 211}:  \"McWane India Pvt Ltd\",\n\t[3]byte{36, 201, 161}:  \"Ruckus Wireless\",\n\t[3]byte{36, 201, 222}:  \"Genoray\",\n\t[3]byte{36, 202, 203}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{36, 203, 231}:  \"MYK, Inc.\",\n\t[3]byte{36, 207, 33}:   \"Shenzhen State Micro Technology Co., Ltd\",\n\t[3]byte{36, 208, 223}:  \"Apple, Inc.\",\n\t[3]byte{36, 209, 63}:   \"MEXUS CO.,LTD\",\n\t[3]byte{36, 210, 204}:  \"SmartDrive Systems Inc.\",\n\t[3]byte{36, 211, 242}:  \"zte corporation\",\n\t[3]byte{36, 213, 28}:   \"Zhongtian broadband technology co., LTD \",\n\t[3]byte{36, 215, 107}:  \"Syntronic AB\",\n\t[3]byte{36, 217, 33}:   \"Avaya Inc\",\n\t[3]byte{36, 218, 17}:   \"NO NDA Inc\",\n\t[3]byte{36, 218, 51}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 218, 155}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{36, 218, 182}:  \"Sistemas de Gestión Energética S.A. de C.V\",\n\t[3]byte{36, 219, 172}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 219, 173}:  \"ShopperTrak RCT Corporation\",\n\t[3]byte{36, 219, 237}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{36, 222, 198}:  \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{36, 223, 106}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 223, 167}:  \"Hangzhou BroadLink Technology Co.,Ltd\",\n\t[3]byte{36, 225, 36}:   \"\\t Xiamen Ursalink Technology Co., Ltd.\",\n\t[3]byte{36, 226, 113}:  \"Qingdao Hisense Communications Co.,Ltd.\",\n\t[3]byte{36, 227, 20}:   \"Apple, Inc.\",\n\t[3]byte{36, 228, 63}:   \"Wenzhou Kunmei Communication Technology Co.,Ltd.\",\n\t[3]byte{36, 229, 170}:  \"Philips Oral Healthcare, Inc.\",\n\t[3]byte{36, 230, 186}:  \"JSC Zavod im. Kozitsky\",\n\t[3]byte{36, 233, 179}:  \"Cisco Systems, Inc\",\n\t[3]byte{36, 233, 202}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{36, 234, 64}:   \"Helmholz GmbH & Co. KG\",\n\t[3]byte{36, 235, 101}:  \"SAET I.S. S.r.l.\",\n\t[3]byte{36, 236, 81}:   \"ADF Technologies Sdn Bhd\",\n\t[3]byte{36, 236, 153}:  \"ASKEY COMPUTER CORP\",\n\t[3]byte{36, 236, 214}:  \"CSG Science & Technology Co.,Ltd.Hefei\",\n\t[3]byte{36, 238, 58}:   \"Chengdu Yingji Electronic Hi-tech Co Ltd\",\n\t[3]byte{36, 238, 154}:  \"Intel Corporate\",\n\t[3]byte{36, 240, 148}:  \"Apple, Inc.\",\n\t[3]byte{36, 240, 255}:  \"GHT Co., Ltd.\",\n\t[3]byte{36, 241, 40}:   \"Telstra\",\n\t[3]byte{36, 241, 80}:   \"Guangzhou Qi'an Technology Co., Ltd.\",\n\t[3]byte{36, 242, 127}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{36, 242, 221}:  \"Radiant Zemax LLC\",\n\t[3]byte{36, 245, 126}:  \"HWH CO., LTD.\",\n\t[3]byte{36, 245, 162}:  \"Belkin International Inc.\",\n\t[3]byte{36, 245, 170}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{36, 246, 119}:  \"Apple, Inc.\",\n\t[3]byte{36, 250, 243}:  \"Shanghai Flexem Technology Co.,Ltd.\",\n\t[3]byte{36, 251, 101}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{36, 252, 229}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{36, 253, 13}:   \"Intelbras\",\n\t[3]byte{36, 253, 82}:   \"Liteon Technology Corporation\",\n\t[3]byte{36, 253, 91}:   \"SmartThings, Inc.\",\n\t[3]byte{40, 2, 69}:     \"Konze System Technology Co.,Ltd.\",\n\t[3]byte{40, 2, 216}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{40, 4, 224}:    \"FERMAX ELECTRONICA S.A.U.\",\n\t[3]byte{40, 6, 30}:     \"NINGBO GLOBAL USEFUL ELECTRIC CO.,LTD\",\n\t[3]byte{40, 6, 141}:    \"ITL, LLC\",\n\t[3]byte{40, 7, 13}:     \"GUANGZHOU WINSOUND INFORMATION TECHNOLOGY CO.,LTD.\",\n\t[3]byte{40, 11, 92}:    \"Apple, Inc.\",\n\t[3]byte{40, 12, 40}:    \"Unigen DataStorage Corporation\",\n\t[3]byte{40, 12, 184}:   \"Mikrosay Yazilim ve Elektronik A.S.\",\n\t[3]byte{40, 13, 252}:   \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{40, 14, 139}:   \"Beijing Spirit Technology Development Co., Ltd.\",\n\t[3]byte{40, 16, 27}:    \"MagnaCom\",\n\t[3]byte{40, 16, 123}:   \"D-Link International\",\n\t[3]byte{40, 17, 165}:   \"Bose Corporation\",\n\t[3]byte{40, 17, 236}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{40, 20, 113}:   \"Lantis co., LTD.\",\n\t[3]byte{40, 22, 46}:    \"2Wire Inc\",\n\t[3]byte{40, 22, 127}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{40, 22, 168}:   \"Microsoft Corporation\",\n\t[3]byte{40, 22, 173}:   \"Intel Corporate\",\n\t[3]byte{40, 23, 206}:   \"Omnisense Ltd\",\n\t[3]byte{40, 24, 120}:   \"Microsoft Corporation\",\n\t[3]byte{40, 24, 253}:   \"Aditya Infotech Ltd.\",\n\t[3]byte{40, 34, 70}:    \"Beijing Sinoix Communication Co., LTD\",\n\t[3]byte{40, 35, 115}:   \"Digita\",\n\t[3]byte{40, 35, 245}:   \"China Mobile (Hangzhou) Information Technology Co., Ltd.\",\n\t[3]byte{40, 36, 255}:   \"Wistron Neweb Corporation\",\n\t[3]byte{40, 37, 54}:    \"SHENZHEN HOLATEK CO.,LTD\",\n\t[3]byte{40, 38, 166}:   \"PBR electronics GmbH\",\n\t[3]byte{40, 39, 191}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{40, 40, 93}:    \"Zyxel Communications Corporation\",\n\t[3]byte{40, 41, 134}:   \"APC by Schneider Electric\",\n\t[3]byte{40, 41, 204}:   \"Corsa Technology Incorporated\",\n\t[3]byte{40, 41, 217}:   \"GlobalBeiMing technology (Beijing)Co. Ltd\",\n\t[3]byte{40, 44, 2}:     \"IEEE Registration Authority\",\n\t[3]byte{40, 44, 178}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{40, 47, 194}:   \"Automotive Data Solutions\",\n\t[3]byte{40, 48, 172}:   \"Frontiir Co. Ltd.\",\n\t[3]byte{40, 49, 82}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{40, 49, 102}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{40, 49, 126}:   \"Hongkong Nano IC Technologies Co., Ltd\",\n\t[3]byte{40, 50, 197}:   \"HUMAX Co., Ltd.\",\n\t[3]byte{40, 51, 52}:    \"Huawei Device Co., Ltd.\",\n\t[3]byte{40, 52, 16}:    \"Enigma Diagnostics Limited\",\n\t[3]byte{40, 52, 162}:   \"Cisco Systems, Inc\",\n\t[3]byte{40, 53, 69}:    \"SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\",\n\t[3]byte{40, 54, 56}:    \"IEEE Registration Authority\",\n\t[3]byte{40, 55, 19}:    \"Shenzhen 3Nod Digital Technology Co., Ltd.\",\n\t[3]byte{40, 55, 55}:    \"Apple, Inc.\",\n\t[3]byte{40, 56, 92}:    \"FLEXTRONICS\",\n\t[3]byte{40, 56, 207}:   \"Gen2wave\",\n\t[3]byte{40, 57, 38}:    \"CyberTAN Technology Inc.\",\n\t[3]byte{40, 57, 94}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{40, 57, 231}:   \"Preceno Technology Pte.Ltd.\",\n\t[3]byte{40, 58, 77}:    \"Cloud Network Technology (Samoa) Limited\",\n\t[3]byte{40, 59, 130}:   \"D-Link International\",\n\t[3]byte{40, 59, 150}:   \"Cool Control LTD\",\n\t[3]byte{40, 60, 228}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{40, 62, 118}:   \"Common Networks\",\n\t[3]byte{40, 63, 105}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{40, 64, 26}:    \"C8 MediSensors, Inc.\",\n\t[3]byte{40, 65, 33}:    \"OptiSense Network, LLC\",\n\t[3]byte{40, 65, 198}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{40, 68, 48}:    \"GenesisTechnical Systems (UK) Ltd\",\n\t[3]byte{40, 71, 170}:   \"Nokia Corporation\",\n\t[3]byte{40, 72, 70}:    \"GridCentric Inc.\",\n\t[3]byte{40, 72, 231}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{40, 76, 83}:    \"Intune Networks\",\n\t[3]byte{40, 77, 146}:   \"Luminator\",\n\t[3]byte{40, 78, 215}:   \"OutSmart Power Systems, Inc.\",\n\t[3]byte{40, 79, 206}:   \"Liaoning Wontel Science and Technology Development Co.,Ltd.\",\n\t[3]byte{40, 81, 50}:    \"Shenzhen Prayfly Technology Co.,Ltd\",\n\t[3]byte{40, 82, 97}:    \"Cisco Systems, Inc\",\n\t[3]byte{40, 82, 224}:   \"Layon international Electronic & Telecom Co.,Ltd\",\n\t[3]byte{40, 82, 249}:   \"Zhongxin Intelligent Times (Shenzhen) Co., Ltd.\",\n\t[3]byte{40, 84, 113}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{40, 86, 90}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{40, 86, 193}:   \"Harman/Becker Automotive Systems GmbH\",\n\t[3]byte{40, 87, 103}:   \"Dish Technologies Corp\",\n\t[3]byte{40, 87, 190}:   \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{40, 90, 235}:   \"Apple, Inc.\",\n\t[3]byte{40, 95, 47}:    \"RNware Co.,Ltd.\",\n\t[3]byte{40, 95, 219}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{40, 96, 70}:    \"Lantech Communications Global, Inc.\",\n\t[3]byte{40, 96, 148}:   \"CAPELEC\",\n\t[3]byte{40, 99, 54}:    \"Siemens AG\",\n\t[3]byte{40, 99, 189}:   \"APTIV SERVICES US, LLC\",\n\t[3]byte{40, 100, 176}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{40, 101, 107}:  \"Keystone Microtech Corporation\",\n\t[3]byte{40, 102, 227}:  \"AzureWave Technology Inc.\",\n\t[3]byte{40, 104, 210}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{40, 106, 184}:  \"Apple, Inc.\",\n\t[3]byte{40, 106, 186}:  \"Apple, Inc.\",\n\t[3]byte{40, 108, 7}:    \"XIAOMI Electronics,CO.,LTD\",\n\t[3]byte{40, 109, 151}:  \"SAMJIN Co., Ltd.\",\n\t[3]byte{40, 109, 205}:  \"Beijing Winner Microelectronics Co.,Ltd. \",\n\t[3]byte{40, 110, 212}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{40, 111, 127}:  \"Cisco Systems, Inc\",\n\t[3]byte{40, 113, 132}:  \"Spire Payments\",\n\t[3]byte{40, 114, 197}:  \"Smartmatic Corp\",\n\t[3]byte{40, 114, 240}:  \"ATHENA\",\n\t[3]byte{40, 117, 216}:  \"FUJIAN STAR-NET COMMUNICATION CO.,LTD\",\n\t[3]byte{40, 118, 16}:   \"IgniteNet\",\n\t[3]byte{40, 118, 205}:  \"Funshion Online Technologies Co.,Ltd\",\n\t[3]byte{40, 119, 241}:  \"Apple, Inc.\",\n\t[3]byte{40, 121, 148}:  \"Realplay Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{40, 122, 238}:  \"ARRIS Group, Inc.\",\n\t[3]byte{40, 123, 9}:    \"zte corporation\",\n\t[3]byte{40, 124, 219}:  \"Hefei  Toycloud Technology Co.,ltd\",\n\t[3]byte{40, 127, 207}:  \"Intel Corporate\",\n\t[3]byte{40, 128, 35}:   \"Hewlett Packard\",\n\t[3]byte{40, 128, 136}:  \"NETGEAR\",\n\t[3]byte{40, 128, 162}:  \"Novatel Wireless Solutions, Inc.\",\n\t[3]byte{40, 131, 53}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{40, 132, 14}:   \"silicon valley immigration service \",\n\t[3]byte{40, 132, 250}:  \"SHARP Corporation\",\n\t[3]byte{40, 133, 45}:   \"Touch Networks\",\n\t[3]byte{40, 137, 21}:   \"CashGuard Sverige AB\",\n\t[3]byte{40, 138, 28}:   \"Juniper Networks\",\n\t[3]byte{40, 140, 184}:  \"zte corporation\",\n\t[3]byte{40, 145, 208}:  \"Stage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH\",\n\t[3]byte{40, 146, 74}:   \"Hewlett Packard\",\n\t[3]byte{40, 147, 254}:  \"Cisco Systems, Inc\",\n\t[3]byte{40, 148, 15}:   \"Cisco Systems, Inc\",\n\t[3]byte{40, 148, 175}:  \"Samhwa Telecom\",\n\t[3]byte{40, 152, 123}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{40, 153, 58}:   \"Arista Networks\",\n\t[3]byte{40, 153, 199}:  \"LINDSAY BROADBAND INC\",\n\t[3]byte{40, 154, 75}:   \"SteelSeries ApS\",\n\t[3]byte{40, 154, 247}:  \"ADVA Optical Networking Ltd.\",\n\t[3]byte{40, 154, 250}:  \"TCT mobile ltd\",\n\t[3]byte{40, 158, 151}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{40, 158, 223}:  \"Danfoss Turbocor Compressors, Inc\",\n\t[3]byte{40, 158, 252}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{40, 160, 43}:   \"Apple, Inc.\",\n\t[3]byte{40, 161, 131}:  \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{40, 161, 134}:  \"enblink\",\n\t[3]byte{40, 161, 146}:  \"GERP Solution\",\n\t[3]byte{40, 161, 235}:  \"ETEK TECHNOLOGY (SHENZHEN) CO.,LTD\",\n\t[3]byte{40, 162, 65}:   \"exlar corp\",\n\t[3]byte{40, 162, 75}:   \"Juniper Networks\",\n\t[3]byte{40, 165, 116}:  \"Miller Electric Mfg. Co.\",\n\t[3]byte{40, 165, 238}:  \"Shenzhen SDGI CATV Co., Ltd\",\n\t[3]byte{40, 166, 172}:  \"seca gmbh & co. kg\",\n\t[3]byte{40, 166, 219}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{40, 172, 103}:  \"Mach Power, Rappresentanze Internazionali s.r.l.\",\n\t[3]byte{40, 172, 158}:  \"Cisco Systems, Inc\",\n\t[3]byte{40, 173, 62}:   \"Shenzhen TONG BO WEI Technology CO.,LTD\",\n\t[3]byte{40, 175, 10}:   \"Sirius XM Radio Inc\",\n\t[3]byte{40, 176, 204}:  \"Xenya d.o.o.\",\n\t[3]byte{40, 178, 189}:  \"Intel Corporate\",\n\t[3]byte{40, 179, 113}:  \"Ruckus Wireless\",\n\t[3]byte{40, 179, 171}:  \"Genmark Automation\",\n\t[3]byte{40, 180, 72}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{40, 180, 251}:  \"Sprocomm Technologies CO.,LTD.\",\n\t[3]byte{40, 183, 124}:  \"IEEE Registration Authority\",\n\t[3]byte{40, 185, 217}:  \"Radisys Corporation\",\n\t[3]byte{40, 186, 24}:   \"NextNav, LLC\",\n\t[3]byte{40, 186, 181}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{40, 187, 89}:   \"RNET Technologies, Inc.\",\n\t[3]byte{40, 188, 24}:   \"SourcingOverseas Co. Ltd\",\n\t[3]byte{40, 188, 86}:   \"EMAC, Inc.\",\n\t[3]byte{40, 189, 137}:  \"Google, Inc.\",\n\t[3]byte{40, 190, 3}:    \"TCT mobile ltd\",\n\t[3]byte{40, 190, 155}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{40, 191, 137}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{40, 192, 218}:  \"Juniper Networks\",\n\t[3]byte{40, 193, 60}:   \"Hon Hai Precision Ind. Co., Ltd.\",\n\t[3]byte{40, 194, 31}:   \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{40, 194, 221}:  \"AzureWave Technology Inc.\",\n\t[3]byte{40, 198, 63}:   \"Intel Corporate\",\n\t[3]byte{40, 198, 113}:  \"Yota Devices OY\",\n\t[3]byte{40, 198, 142}:  \"NETGEAR\",\n\t[3]byte{40, 199, 24}:   \"Altierre\",\n\t[3]byte{40, 199, 206}:  \"Cisco Systems, Inc\",\n\t[3]byte{40, 200, 37}:   \"DellKing Industrial Co., Ltd\",\n\t[3]byte{40, 200, 122}:  \"ARRIS Group, Inc.\",\n\t[3]byte{40, 201, 20}:   \"Taimag Corporation\",\n\t[3]byte{40, 202, 9}:    \"ThyssenKrupp Elevators (Shanghai) Co.,Ltd\",\n\t[3]byte{40, 203, 235}:  \"One\",\n\t[3]byte{40, 204, 1}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{40, 204, 255}:  \"Corporacion Empresarial Altra SL\",\n\t[3]byte{40, 205, 28}:   \"Espotel Oy\",\n\t[3]byte{40, 205, 76}:   \"Individual Computers GmbH\",\n\t[3]byte{40, 205, 156}:  \"Shenzhen Dynamax Software Development Co.,Ltd.\",\n\t[3]byte{40, 205, 196}:  \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{40, 207, 8}:    \"ESSYS\",\n\t[3]byte{40, 207, 218}:  \"Apple, Inc.\",\n\t[3]byte{40, 207, 233}:  \"Apple, Inc.\",\n\t[3]byte{40, 208, 203}:  \"Cambridge Communication Systems Ltd\",\n\t[3]byte{40, 209, 39}:   \"Beijing Xiaomi Mobile Software Co., Ltd\",\n\t[3]byte{40, 209, 175}:  \"Nokia Corporation\",\n\t[3]byte{40, 209, 183}:  \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{40, 210, 68}:   \"LCFC(HeFei) Electronics Technology Co., Ltd.\",\n\t[3]byte{40, 212, 54}:   \"Jiangsu dewosi electric co., LTD\",\n\t[3]byte{40, 213, 118}:  \"Premier Wireless, Inc.\",\n\t[3]byte{40, 217, 62}:   \"Telecor Inc.\",\n\t[3]byte{40, 217, 138}:  \"Hangzhou Konke Technology Co.,Ltd.\",\n\t[3]byte{40, 217, 151}:  \"Yuduan Mobile Co., Ltd.\",\n\t[3]byte{40, 219, 129}:  \"Shanghai Guao Electronic Technology Co., Ltd\",\n\t[3]byte{40, 222, 229}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{40, 222, 246}:  \"bioMerieux Inc.\",\n\t[3]byte{40, 224, 44}:   \"Apple, Inc.\",\n\t[3]byte{40, 225, 76}:   \"Apple, Inc.\",\n\t[3]byte{40, 226, 151}:  \"Shanghai InfoTM Microelectronics Co.,Ltd.\",\n\t[3]byte{40, 227, 31}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{40, 227, 71}:   \"Liteon Technology Corporation\",\n\t[3]byte{40, 227, 78}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{40, 228, 118}:  \"Pi-Coral\",\n\t[3]byte{40, 230, 8}:    \"Tokheim\",\n\t[3]byte{40, 230, 233}:  \"SIS Sat Internet Services GmbH\",\n\t[3]byte{40, 231, 148}:  \"Microtime Computer Inc.\",\n\t[3]byte{40, 231, 207}:  \"Apple, Inc.\",\n\t[3]byte{40, 233, 142}:  \"Mitsubishi Electric Corporation\",\n\t[3]byte{40, 236, 149}:  \"Apple, Inc.\",\n\t[3]byte{40, 236, 154}:  \"Texas Instruments\",\n\t[3]byte{40, 237, 88}:   \"JAG Jakob AG\",\n\t[3]byte{40, 237, 106}:  \"Apple, Inc.\",\n\t[3]byte{40, 237, 224}:  \"AMPAK Technology, Inc.\",\n\t[3]byte{40, 238, 44}:   \"Frontline Test Equipment\",\n\t[3]byte{40, 238, 82}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{40, 238, 211}:  \"Shenzhen Super D Technology Co., Ltd\",\n\t[3]byte{40, 239, 1}:    \"Private\",\n\t[3]byte{40, 240, 51}:   \"Apple, Inc.\",\n\t[3]byte{40, 240, 118}:  \"Apple, Inc.\",\n\t[3]byte{40, 241, 14}:   \"Dell Inc.\",\n\t[3]byte{40, 243, 88}:   \"2C - Trifonov & Co\",\n\t[3]byte{40, 243, 102}:  \"Shenzhen Bilian electronic CO.,LTD\",\n\t[3]byte{40, 245, 50}:   \"ADD-Engineering BV\",\n\t[3]byte{40, 245, 55}:   \"IEEE Registration Authority\",\n\t[3]byte{40, 246, 6}:    \"Syes srl\",\n\t[3]byte{40, 250, 122}:  \"Zhejiang Tmall Technology Co., Ltd.\",\n\t[3]byte{40, 250, 160}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{40, 251, 211}:  \"Ragentek Technology Group\",\n\t[3]byte{40, 252, 81}:   \"The Electric Controller and Manufacturing Co., LLC\",\n\t[3]byte{40, 252, 246}:  \"Shenzhen Xin KingBrand enterprises Co.,Ltd\",\n\t[3]byte{40, 253, 128}:  \"IEEE Registration Authority\",\n\t[3]byte{40, 254, 101}:  \"DongGuan Siyoto Electronics Co., Ltd       \",\n\t[3]byte{40, 254, 205}:  \"Lemobile Information Technology (Beijing) Co., Ltd.\",\n\t[3]byte{40, 254, 222}:  \"COMESTA, Inc.\",\n\t[3]byte{40, 255, 60}:   \"Apple, Inc.\",\n\t[3]byte{40, 255, 62}:   \"zte corporation\",\n\t[3]byte{40, 255, 178}:  \"Toshiba Corp.\",\n\t[3]byte{44, 0, 44}:     \"UNOWHY\",\n\t[3]byte{44, 0, 51}:     \"EControls, LLC\",\n\t[3]byte{44, 0, 247}:    \"XOS\",\n\t[3]byte{44, 1, 11}:     \"NASCENT Technology, LLC - RemKon\",\n\t[3]byte{44, 1, 181}:    \"Cisco Systems, Inc\",\n\t[3]byte{44, 2, 159}:    \"3ALogics\",\n\t[3]byte{44, 6, 35}:     \"Win Leader Inc.\",\n\t[3]byte{44, 7, 60}:     \"DEVLINE LIMITED\",\n\t[3]byte{44, 8, 28}:     \"OVH\",\n\t[3]byte{44, 8, 140}:    \"HUMAX Co., Ltd.\",\n\t[3]byte{44, 9, 77}:     \"Raptor Engineering, LLC\",\n\t[3]byte{44, 9, 203}:    \"COBS AB\",\n\t[3]byte{44, 11, 233}:   \"Cisco Systems, Inc\",\n\t[3]byte{44, 14, 61}:    \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{44, 16, 193}:   \"Nintendo Co., Ltd.\",\n\t[3]byte{44, 21, 225}:   \"Phicomm (Shanghai) Co., Ltd.\",\n\t[3]byte{44, 22, 189}:   \"IEEE Registration Authority\",\n\t[3]byte{44, 24, 117}:   \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{44, 24, 174}:   \"Trend Electronics Co., Ltd.\",\n\t[3]byte{44, 25, 132}:   \"IDN Telecom, Inc.\",\n\t[3]byte{44, 26, 1}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{44, 26, 49}:    \"Electronics Company Limited\",\n\t[3]byte{44, 27, 200}:   \"Hunan Topview Network System CO.,LTD\",\n\t[3]byte{44, 28, 246}:   \"Alien Green LLC\",\n\t[3]byte{44, 29, 184}:   \"ARRIS Group, Inc.\",\n\t[3]byte{44, 30, 79}:    \"Chengdu Qianli Network Technology Co., Ltd.\",\n\t[3]byte{44, 30, 234}:   \"AERODEV\",\n\t[3]byte{44, 31, 35}:    \"Apple, Inc.\",\n\t[3]byte{44, 32, 11}:    \"Apple, Inc.\",\n\t[3]byte{44, 33, 49}:    \"Juniper Networks\",\n\t[3]byte{44, 33, 114}:   \"Juniper Networks\",\n\t[3]byte{44, 33, 215}:   \"IMAX Corporation\",\n\t[3]byte{44, 34, 139}:   \"CTR SRL\",\n\t[3]byte{44, 35, 58}:    \"Hewlett Packard\",\n\t[3]byte{44, 36, 95}:    \"Babolat VS\",\n\t[3]byte{44, 38, 23}:    \"Oculus VR, LLC\",\n\t[3]byte{44, 38, 95}:    \"IEEE Registration Authority\",\n\t[3]byte{44, 38, 197}:   \"zte corporation\",\n\t[3]byte{44, 39, 158}:   \"IEEE Registration Authority\",\n\t[3]byte{44, 39, 215}:   \"Hewlett Packard\",\n\t[3]byte{44, 40, 45}:    \"BBK EDUCATIONAL ELECTRONICS CORP.,LTD.\",\n\t[3]byte{44, 40, 183}:   \"Hangzhou Ruiying technology co., LTD\",\n\t[3]byte{44, 41, 151}:   \"Microsoft Corporation\",\n\t[3]byte{44, 43, 249}:   \"LG Innotek\",\n\t[3]byte{44, 45, 72}:    \"bct electronic GesmbH\",\n\t[3]byte{44, 48, 51}:    \"NETGEAR\",\n\t[3]byte{44, 48, 104}:   \"Pantech Co.,Ltd\",\n\t[3]byte{44, 49, 36}:    \"Cisco Systems, Inc\",\n\t[3]byte{44, 51, 17}:    \"Cisco Systems, Inc\",\n\t[3]byte{44, 51, 97}:    \"Apple, Inc.\",\n\t[3]byte{44, 51, 122}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{44, 52, 39}:    \"ERCO & GENER\",\n\t[3]byte{44, 53, 87}:    \"ELLIY Power CO..Ltd\",\n\t[3]byte{44, 54, 160}:   \"Capisco Limited\",\n\t[3]byte{44, 54, 248}:   \"Cisco Systems, Inc\",\n\t[3]byte{44, 55, 49}:    \"SHENZHEN YIFANG DIGITAL TECHNOLOGY CO.,LTD.\",\n\t[3]byte{44, 55, 150}:   \"CYBO CO.,LTD.\",\n\t[3]byte{44, 55, 197}:   \"Qingdao Haier Intelligent Home Appliance Technology Co.,Ltd\",\n\t[3]byte{44, 57, 150}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{44, 57, 193}:   \"Ciena Corporation\",\n\t[3]byte{44, 58, 40}:    \"Fagor Electrónica\",\n\t[3]byte{44, 58, 232}:   \"Espressif Inc.\",\n\t[3]byte{44, 58, 253}:   \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{44, 59, 253}:   \"Netstor Technology Co., Ltd.\",\n\t[3]byte{44, 62, 207}:   \"Cisco Systems, Inc\",\n\t[3]byte{44, 63, 11}:    \"Cisco Meraki\",\n\t[3]byte{44, 63, 56}:    \"Cisco Systems, Inc\",\n\t[3]byte{44, 63, 62}:    \"Alge-Timing GmbH\",\n\t[3]byte{44, 64, 43}:    \"Smart iBlue Technology Limited\",\n\t[3]byte{44, 64, 83}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{44, 65, 56}:    \"Hewlett Packard\",\n\t[3]byte{44, 65, 161}:   \"Bose Corporation\",\n\t[3]byte{44, 66, 5}:     \"Lytx\",\n\t[3]byte{44, 67, 26}:    \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{44, 68, 1}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{44, 68, 27}:    \"Spectrum Medical Limited\",\n\t[3]byte{44, 68, 253}:   \"Hewlett Packard\",\n\t[3]byte{44, 71, 89}:    \"Beijing MEGA preponderance Science & Technology Co. Ltd\",\n\t[3]byte{44, 72, 53}:    \"IEEE Registration Authority\",\n\t[3]byte{44, 76, 198}:   \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{44, 77, 84}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{44, 77, 121}:   \"WEIFANG GOERTEK ELECTRONICS CO.,LTD\",\n\t[3]byte{44, 78, 125}:   \"Chunghua Intelligent Network Equipment Inc.\",\n\t[3]byte{44, 79, 82}:    \"Cisco Systems, Inc\",\n\t[3]byte{44, 80, 137}:   \"Shenzhen Kaixuan Visual Technology Co.,Limited\",\n\t[3]byte{44, 83, 74}:    \"Shenzhen Winyao Electronic Limited\",\n\t[3]byte{44, 84, 45}:    \"Cisco Systems, Inc\",\n\t[3]byte{44, 84, 145}:   \"Microsoft Corporation\",\n\t[3]byte{44, 84, 207}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{44, 85, 60}:    \"Gainspeed, Inc.\",\n\t[3]byte{44, 85, 124}:   \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{44, 85, 211}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{44, 86, 220}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{44, 87, 49}:    \" Wingtech Group (HongKong）Limited\",\n\t[3]byte{44, 87, 65}:    \"Cisco Systems, Inc\",\n\t[3]byte{44, 88, 79}:    \"ARRIS Group, Inc.\",\n\t[3]byte{44, 88, 232}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{44, 89, 138}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{44, 89, 229}:   \"Hewlett Packard\",\n\t[3]byte{44, 90, 5}:     \"Nokia Corporation\",\n\t[3]byte{44, 90, 15}:    \"Cisco Systems, Inc\",\n\t[3]byte{44, 90, 141}:   \"SYSTRONIK Elektronik u. Systemtechnik GmbH\",\n\t[3]byte{44, 90, 163}:   \"PROMATE ELECTRONIC CO.LTD\",\n\t[3]byte{44, 91, 184}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{44, 91, 225}:   \"Centripetal Networks, Inc\",\n\t[3]byte{44, 93, 52}:    \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{44, 93, 147}:   \"Ruckus Wireless\",\n\t[3]byte{44, 95, 243}:   \"Pertronic Industries\",\n\t[3]byte{44, 96, 12}:    \"Quanta Computer Inc.\",\n\t[3]byte{44, 97, 4}:     \"SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.\",\n\t[3]byte{44, 97, 246}:   \"Apple, Inc.\",\n\t[3]byte{44, 98, 90}:    \"Finest Security Systems Co., Ltd\",\n\t[3]byte{44, 98, 137}:   \"Regenersis (Glenrothes) Ltd\",\n\t[3]byte{44, 99, 115}:   \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{44, 100, 31}:   \"Vizio, Inc\",\n\t[3]byte{44, 103, 152}:  \"InTalTech Ltd.\",\n\t[3]byte{44, 103, 251}:  \"ShenZhen Zhengjili Electronics Co., LTD\",\n\t[3]byte{44, 105, 186}:  \"RF Controls, LLC\",\n\t[3]byte{44, 106, 111}:  \"IEEE Registration Authority\",\n\t[3]byte{44, 107, 125}:  \"Texas Instruments\",\n\t[3]byte{44, 107, 245}:  \"Juniper Networks\",\n\t[3]byte{44, 110, 133}:  \"Intel Corporate\",\n\t[3]byte{44, 111, 81}:   \"Herospeed Digital Technology Limited\",\n\t[3]byte{44, 111, 201}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{44, 113, 85}:   \"HiveMotion\",\n\t[3]byte{44, 114, 195}:  \"Soundmatters\",\n\t[3]byte{44, 115, 96}:   \"Earda Technologies co Ltd\",\n\t[3]byte{44, 115, 160}:  \"Cisco Systems, Inc\",\n\t[3]byte{44, 117, 15}:   \"Shanghai Dongzhou-Lawton Communication Technology Co. Ltd.\",\n\t[3]byte{44, 118, 138}:  \"Hewlett Packard\",\n\t[3]byte{44, 120, 14}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{44, 121, 215}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{44, 123, 90}:   \"Milper Ltd\",\n\t[3]byte{44, 123, 132}:  \"OOO Petr Telegin\",\n\t[3]byte{44, 124, 228}:  \"Wuhan Tianyu Information Industry Co., Ltd.\",\n\t[3]byte{44, 126, 129}:  \"ARRIS Group, Inc.\",\n\t[3]byte{44, 126, 207}:  \"Onzo Ltd\",\n\t[3]byte{44, 128, 101}:  \"HARTING Inc. of North America\",\n\t[3]byte{44, 129, 88}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{44, 134, 210}:  \"Cisco Systems, Inc\",\n\t[3]byte{44, 138, 114}:  \"HTC Corporation\",\n\t[3]byte{44, 139, 242}:  \"Hitachi Metals America Ltd\",\n\t[3]byte{44, 145, 39}:   \"Eintechno Corporation\",\n\t[3]byte{44, 145, 171}:  \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{44, 146, 44}:   \"Kishu Giken Kogyou Company Ltd,.\",\n\t[3]byte{44, 148, 100}:  \"Cincoze Co., Ltd.\",\n\t[3]byte{44, 149, 105}:  \"ARRIS Group, Inc.\",\n\t[3]byte{44, 149, 127}:  \"zte corporation\",\n\t[3]byte{44, 150, 98}:   \"Invenit BV\",\n\t[3]byte{44, 151, 23}:   \"I.C.Y. B.V.\",\n\t[3]byte{44, 151, 177}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{44, 151, 237}:  \"Sony Imaging Products & Solutions Inc.\",\n\t[3]byte{44, 153, 36}:   \"ARRIS Group, Inc.\",\n\t[3]byte{44, 154, 164}:  \"Eolo SpA\",\n\t[3]byte{44, 157, 30}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{44, 158, 95}:   \"ARRIS Group, Inc.\",\n\t[3]byte{44, 158, 236}:  \"Jabil Circuit Penang\",\n\t[3]byte{44, 158, 252}:  \"CANON INC.\",\n\t[3]byte{44, 159, 251}:  \"Wistron Neweb Corporation\",\n\t[3]byte{44, 160, 47}:   \"Veroguard Systems Pty Ltd\",\n\t[3]byte{44, 160, 66}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{44, 161, 87}:   \"acromate, Inc.\",\n\t[3]byte{44, 161, 125}:  \"ARRIS Group, Inc.\",\n\t[3]byte{44, 162, 180}:  \"Fortify Technologies, LLC\",\n\t[3]byte{44, 163, 14}:   \"POWER DRAGON DEVELOPMENT LIMITED\",\n\t[3]byte{44, 165, 57}:   \"Parallel Wireless, Inc\",\n\t[3]byte{44, 167, 128}:  \"True Technologies Inc.\",\n\t[3]byte{44, 168, 53}:   \"RIM\",\n\t[3]byte{44, 168, 156}:  \"Creatz inc.\",\n\t[3]byte{44, 169, 240}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{44, 170, 142}:  \"Wyze Labs Inc\",\n\t[3]byte{44, 171, 0}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{44, 171, 37}:   \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{44, 171, 51}:   \"Texas Instruments\",\n\t[3]byte{44, 171, 164}:  \"Cisco SPVTG\",\n\t[3]byte{44, 171, 235}:  \"Cisco Systems, Inc\",\n\t[3]byte{44, 172, 68}:   \"CONEXTOP\",\n\t[3]byte{44, 173, 19}:   \"SHENZHEN ZHILU TECHNOLOGY CO.,LTD\",\n\t[3]byte{44, 174, 43}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{44, 176, 93}:   \"NETGEAR\",\n\t[3]byte{44, 176, 223}:  \"Soliton Technologies Pvt Ltd\",\n\t[3]byte{44, 177, 21}:   \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{44, 178, 26}:   \"Phicomm (Shanghai) Co., Ltd.\",\n\t[3]byte{44, 180, 58}:   \"Apple, Inc.\",\n\t[3]byte{44, 182, 147}:  \"Radware\",\n\t[3]byte{44, 182, 157}:  \"RED Digital Cinema\",\n\t[3]byte{44, 184, 237}:  \"SonicWall\",\n\t[3]byte{44, 186, 186}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{44, 190, 8}:    \"Apple, Inc.\",\n\t[3]byte{44, 190, 151}:  \"Ingenieurbuero Bickele und Buehler GmbH\",\n\t[3]byte{44, 194, 96}:   \"Oracle Corporation \",\n\t[3]byte{44, 196, 7}:    \"machineQ\",\n\t[3]byte{44, 197, 70}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{44, 197, 72}:   \"IAdea Corporation\",\n\t[3]byte{44, 197, 211}:  \"Ruckus Wireless\",\n\t[3]byte{44, 202, 12}:   \"WITHUS PLANET\",\n\t[3]byte{44, 204, 21}:   \"Nokia Corporation\",\n\t[3]byte{44, 204, 68}:   \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{44, 204, 230}:  \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{44, 205, 39}:   \"Precor Inc\",\n\t[3]byte{44, 205, 67}:   \"Summit Technology Group\",\n\t[3]byte{44, 205, 105}:  \"Aqavi.com\",\n\t[3]byte{44, 207, 88}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{44, 208, 45}:   \"Cisco Systems, Inc\",\n\t[3]byte{44, 208, 90}:   \"Liteon Technology Corporation\",\n\t[3]byte{44, 208, 102}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{44, 209, 65}:   \"IEEE Registration Authority\",\n\t[3]byte{44, 209, 218}:  \"Sanjole, Inc.\",\n\t[3]byte{44, 210, 227}:  \"Guangzhou Aoshi Electronic Co.,Ltd\",\n\t[3]byte{44, 210, 231}:  \"Nokia Corporation\",\n\t[3]byte{44, 212, 68}:   \"FUJITSU LIMITED\",\n\t[3]byte{44, 217, 116}:  \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{44, 219, 7}:    \"Intel Corporate\",\n\t[3]byte{44, 220, 173}:  \"Wistron Neweb Corporation\",\n\t[3]byte{44, 220, 215}:  \"AzureWave Technology Inc.\",\n\t[3]byte{44, 221, 12}:   \"Discovergy GmbH\",\n\t[3]byte{44, 221, 149}:  \"Taicang T&W Electronics\",\n\t[3]byte{44, 221, 163}:  \"Point Grey Research Inc.\",\n\t[3]byte{44, 226, 168}:  \"DeviceDesign\",\n\t[3]byte{44, 227, 16}:   \"Stratacache\",\n\t[3]byte{44, 228, 18}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{44, 230, 204}:  \"Ruckus Wireless\",\n\t[3]byte{44, 232, 113}:  \"Alert Metalguard ApS\",\n\t[3]byte{44, 234, 127}:  \"Dell Inc.\",\n\t[3]byte{44, 237, 235}:  \"Alpheus Digital Company Limited\",\n\t[3]byte{44, 238, 38}:   \"Petroleum Geo-Services\",\n\t[3]byte{44, 240, 93}:   \"Micro-Star INTL CO., LTD.\",\n\t[3]byte{44, 240, 162}:  \"Apple, Inc.\",\n\t[3]byte{44, 240, 238}:  \"Apple, Inc.\",\n\t[3]byte{44, 242, 3}:    \"EMKO ELEKTRONIK SAN VE TIC AS\",\n\t[3]byte{44, 244, 50}:   \"Espressif Inc.\",\n\t[3]byte{44, 244, 197}:  \"Avaya Inc\",\n\t[3]byte{44, 247, 241}:  \"Seeed Technology Inc.\",\n\t[3]byte{44, 248, 155}:  \"Cisco Systems, Inc\",\n\t[3]byte{44, 250, 162}:  \"Alcatel-Lucent Enterprise\",\n\t[3]byte{44, 252, 228}:  \"CTEK Sweden AB\",\n\t[3]byte{44, 253, 55}:   \"Blue Calypso, Inc.\",\n\t[3]byte{44, 253, 161}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{44, 253, 171}:  \"Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.\",\n\t[3]byte{44, 255, 101}:  \"Oki Electric Industry Co., Ltd.\",\n\t[3]byte{44, 255, 238}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{48, 5, 63}:     \"JTI Co.,Ltd.\",\n\t[3]byte{48, 5, 92}:     \"Brother industries, LTD.\",\n\t[3]byte{48, 7, 77}:     \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{48, 9, 249}:    \"IEEE Registration Authority\",\n\t[3]byte{48, 10, 96}:    \"IEEE Registration Authority\",\n\t[3]byte{48, 10, 197}:   \"Ruio telecommunication technologies Co., Limited\",\n\t[3]byte{48, 11, 156}:   \"Delta Mobile Systems, Inc.\",\n\t[3]byte{48, 12, 35}:    \"zte corporation\",\n\t[3]byte{48, 13, 42}:    \"Zhejiang Wellcom Technology Co.,Ltd.\",\n\t[3]byte{48, 13, 67}:    \"Microsoft Mobile Oy\",\n\t[3]byte{48, 13, 158}:   \"Ruijie Networks Co.,LTD\",\n\t[3]byte{48, 14, 213}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{48, 14, 227}:   \"Aquantia Corporation\",\n\t[3]byte{48, 16, 179}:   \"Liteon Technology Corporation\",\n\t[3]byte{48, 16, 228}:   \"Apple, Inc.\",\n\t[3]byte{48, 19, 137}:   \"Siemens AG, Automations & Drives,\",\n\t[3]byte{48, 20, 45}:    \"Piciorgros GmbH\",\n\t[3]byte{48, 20, 74}:    \"Wistron Neweb Corporation\",\n\t[3]byte{48, 21, 24}:    \"Ubiquitous Communication Co. ltd.\",\n\t[3]byte{48, 22, 141}:   \"ProLon\",\n\t[3]byte{48, 23, 200}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{48, 24, 207}:   \"DEOS control systems GmbH\",\n\t[3]byte{48, 25, 102}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{48, 26, 40}:    \"Mako Networks Ltd\",\n\t[3]byte{48, 27, 151}:   \"Lierda Science & Technology Group Co.,Ltd\",\n\t[3]byte{48, 31, 154}:   \"IEEE Registration Authority\",\n\t[3]byte{48, 33, 91}:    \"Shenzhen Ostar Display Electronic Co.,Ltd\",\n\t[3]byte{48, 35, 3}:     \"Belkin International Inc.\",\n\t[3]byte{48, 36, 50}:    \"Intel Corporate\",\n\t[3]byte{48, 36, 120}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{48, 39, 207}:   \"Private\",\n\t[3]byte{48, 41, 82}:    \"Hillstone Networks Inc\",\n\t[3]byte{48, 41, 190}:   \"Shanghai MRDcom Co.,Ltd\",\n\t[3]byte{48, 45, 232}:   \"JDA, LLC (JDA Systems)\",\n\t[3]byte{48, 49, 125}:   \"Hosiden Corporation\",\n\t[3]byte{48, 50, 148}:   \"W-IE-NE-R Plein & Baus GmbH\",\n\t[3]byte{48, 50, 212}:   \"Hanilstm Co., Ltd.\",\n\t[3]byte{48, 51, 53}:    \"Boosty\",\n\t[3]byte{48, 52, 210}:   \"Availink, Inc.\",\n\t[3]byte{48, 53, 173}:   \"Apple, Inc.\",\n\t[3]byte{48, 55, 166}:   \"Cisco Systems, Inc\",\n\t[3]byte{48, 56, 85}:    \"Nokia Corporation\",\n\t[3]byte{48, 57, 38}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{48, 57, 85}:    \"Shenzhen Jinhengjia Electronic Co., Ltd.\",\n\t[3]byte{48, 57, 242}:   \"ADB Broadband Italia\",\n\t[3]byte{48, 58, 100}:   \"Intel Corporate\",\n\t[3]byte{48, 58, 186}:   \"Guangzhou BaoLun Electronics Co., Ltd\",\n\t[3]byte{48, 61, 8}:     \"GLINTT TES S.A.\",\n\t[3]byte{48, 62, 173}:   \"Sonavox Canada Inc\",\n\t[3]byte{48, 65, 116}:   \"ALTEC LANSING LLC\",\n\t[3]byte{48, 66, 37}:    \"BURG-WÄCHTER KG\",\n\t[3]byte{48, 66, 64}:    \"zte corporation\",\n\t[3]byte{48, 66, 161}:   \"ilumisys Inc. DBA Toggled\",\n\t[3]byte{48, 68, 73}:    \"PLATH GmbH\",\n\t[3]byte{48, 68, 135}:   \"Hefei Radio Communication Technology Co., Ltd \",\n\t[3]byte{48, 68, 161}:   \"Shanghai Nanchao Information Technology\",\n\t[3]byte{48, 69, 17}:    \"Texas Instruments\",\n\t[3]byte{48, 69, 150}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{48, 70, 154}:   \"NETGEAR\",\n\t[3]byte{48, 73, 59}:    \"Nanjing Z-Com Wireless Co.,Ltd\",\n\t[3]byte{48, 73, 80}:    \"IEEE Registration Authority\",\n\t[3]byte{48, 74, 38}:    \"Shenzhen Trolink Technology CO, LTD\",\n\t[3]byte{48, 75, 7}:     \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{48, 76, 126}:   \"Panasonic Electric Works Automation Controls Techno Co.,Ltd.\",\n\t[3]byte{48, 78, 195}:   \"Tianjin Techua Technology Co., Ltd.\",\n\t[3]byte{48, 79, 117}:   \"DASAN Network Solutions\",\n\t[3]byte{48, 80, 117}:   \"GN Audio A/S\",\n\t[3]byte{48, 80, 253}:   \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{48, 81, 248}:   \"BYK-Gardner GmbH\",\n\t[3]byte{48, 82, 90}:    \"NST Co., LTD\",\n\t[3]byte{48, 82, 203}:   \"Liteon Technology Corporation\",\n\t[3]byte{48, 85, 237}:   \"Trex Network LLC\",\n\t[3]byte{48, 87, 20}:    \"Apple, Inc.\",\n\t[3]byte{48, 87, 142}:   \"eero inc.\",\n\t[3]byte{48, 87, 172}:   \"IRLAB LTD.\",\n\t[3]byte{48, 88, 144}:   \"Frontier Silicon Ltd\",\n\t[3]byte{48, 89, 91}:    \"streamnow AG\",\n\t[3]byte{48, 89, 183}:   \"Microsoft\",\n\t[3]byte{48, 90, 58}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{48, 93, 56}:    \"Beissbarth \",\n\t[3]byte{48, 93, 166}:   \"ADVALY SYSTEM Inc.\",\n\t[3]byte{48, 96, 35}:    \"ARRIS Group, Inc.\",\n\t[3]byte{48, 97, 18}:    \"PAV GmbH\",\n\t[3]byte{48, 97, 24}:    \"Paradom Inc.\",\n\t[3]byte{48, 99, 107}:   \"Apple, Inc.\",\n\t[3]byte{48, 101, 236}:  \"Wistron (ChongQing)\",\n\t[3]byte{48, 102, 208}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{48, 104, 140}:  \"Reach Technology Inc.\",\n\t[3]byte{48, 105, 75}:   \"RIM\",\n\t[3]byte{48, 106, 133}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{48, 108, 190}:  \"Skymotion Technology (HK) Limited\",\n\t[3]byte{48, 110, 92}:   \"Validus Technologies\",\n\t[3]byte{48, 111, 7}:    \"Nations Technologies Inc.\",\n\t[3]byte{48, 113, 178}:  \"Hangzhou Prevail Optoelectronic Equipment Co.,LTD.\",\n\t[3]byte{48, 115, 80}:   \"Inpeco SA\",\n\t[3]byte{48, 116, 150}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{48, 117, 18}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{48, 118, 111}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{48, 119, 203}:  \"Maike Industry(Shenzhen)CO.,LTD\",\n\t[3]byte{48, 120, 92}:   \"Partow Tamas Novin (Parman)\",\n\t[3]byte{48, 120, 107}:  \"TIANJIN Golden Pentagon Electronics Co., Ltd.\",\n\t[3]byte{48, 120, 194}:  \"Innowireless / QUCELL Networks\",\n\t[3]byte{48, 123, 172}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{48, 124, 48}:   \"RIM\",\n\t[3]byte{48, 124, 94}:   \"Juniper Networks\",\n\t[3]byte{48, 124, 178}:  \"ANOV FRANCE\",\n\t[3]byte{48, 126, 203}:  \"SFR\",\n\t[3]byte{48, 128, 155}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{48, 132, 84}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{48, 133, 169}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{48, 134, 45}:   \"Arista Network, Inc.\",\n\t[3]byte{48, 135, 48}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{48, 135, 217}:  \"Ruckus Wireless\",\n\t[3]byte{48, 136, 65}:   \"Sichuan\\u00a0AI-Link\\u00a0Technology\\u00a0Co.,\\u00a0Ltd.\",\n\t[3]byte{48, 137, 68}:   \"DEVA Broadcast Ltd.\",\n\t[3]byte{48, 137, 118}:  \"DALIAN LAMBA TECHNOLOGY CO.,LTD\",\n\t[3]byte{48, 137, 153}:  \"Guangdong East Power Co.,\",\n\t[3]byte{48, 137, 211}:  \"HONGKONG UCLOUDLINK NETWORK TECHNOLOGY LIMITED\",\n\t[3]byte{48, 138, 247}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{48, 139, 178}:  \"Cisco Systems, Inc\",\n\t[3]byte{48, 140, 251}:  \"Dropcam\",\n\t[3]byte{48, 141, 153}:  \"Hewlett Packard\",\n\t[3]byte{48, 144, 72}:   \"Apple, Inc.\",\n\t[3]byte{48, 144, 171}:  \"Apple, Inc.\",\n\t[3]byte{48, 145, 118}:  \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{48, 145, 143}:  \"Technicolor\",\n\t[3]byte{48, 146, 246}:  \"SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD\",\n\t[3]byte{48, 147, 188}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{48, 148, 53}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{48, 149, 227}:  \"SHANGHAI SIMCOM LIMITED\",\n\t[3]byte{48, 150, 16}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{48, 150, 251}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{48, 153, 53}:   \"zte corporation\",\n\t[3]byte{48, 155, 173}:  \"BBK EDUCATIONAL ELECTRONICS CORP.,LTD.\",\n\t[3]byte{48, 156, 35}:   \"Micro-Star INTL CO., LTD.\",\n\t[3]byte{48, 159, 251}:  \"Ardomus Networks Corporation\",\n\t[3]byte{48, 161, 250}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{48, 162, 32}:   \"ARG Telecom\",\n\t[3]byte{48, 162, 67}:   \"Shenzhen Prifox Innovation Technology Co., Ltd.\",\n\t[3]byte{48, 162, 194}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{48, 164, 82}:   \"Arrival Elements BV\",\n\t[3]byte{48, 168, 137}:  \"DECIMATOR DESIGN\",\n\t[3]byte{48, 168, 219}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{48, 169, 152}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{48, 169, 222}:  \"LG Innotek\",\n\t[3]byte{48, 170, 189}:  \"Shanghai Reallytek Information Technology Co.,Ltd\",\n\t[3]byte{48, 170, 228}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{48, 171, 106}:  \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{48, 174, 123}:  \"Deqing Dusun Electron CO., LTD\",\n\t[3]byte{48, 174, 164}:  \"Espressif Inc.\",\n\t[3]byte{48, 174, 246}:  \"Radio Mobile Access\",\n\t[3]byte{48, 177, 100}:  \"Power Electronics International Inc.\",\n\t[3]byte{48, 178, 22}:   \"ABB Power Grids Germany AG – Grid Automation\",\n\t[3]byte{48, 178, 55}:   \"GD Midea Air-Conditioning Equipment Co.,Ltd.\",\n\t[3]byte{48, 179, 162}:  \"Shenzhen Heguang Measurement & Control Technology Co.,Ltd\",\n\t[3]byte{48, 180, 158}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{48, 180, 184}:  \"LG Electronics\",\n\t[3]byte{48, 181, 194}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{48, 181, 241}:  \"Aitexin Technology Co., Ltd\",\n\t[3]byte{48, 182, 45}:   \" Mojo Networks, Inc.\",\n\t[3]byte{48, 182, 79}:   \"Juniper Networks\",\n\t[3]byte{48, 183, 212}:  \"Hitron Technologies. Inc\",\n\t[3]byte{48, 185, 176}:  \"Intracom Asia Co., Ltd\",\n\t[3]byte{48, 192, 27}:   \"Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd\",\n\t[3]byte{48, 195, 217}:  \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{48, 197, 7}:    \"ECI Telecom Ltd.\",\n\t[3]byte{48, 197, 15}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{48, 199, 80}:   \"MIC Technology Group\",\n\t[3]byte{48, 199, 174}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{48, 200, 42}:   \"WI-BIZ srl\",\n\t[3]byte{48, 201, 171}:  \"CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.\",\n\t[3]byte{48, 203, 248}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{48, 204, 33}:   \"zte corporation\",\n\t[3]byte{48, 205, 167}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{48, 209, 107}:  \"Liteon Technology Corporation\",\n\t[3]byte{48, 209, 126}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{48, 211, 45}:   \"devolo AG\",\n\t[3]byte{48, 211, 87}:   \"Logosol, Inc.\",\n\t[3]byte{48, 211, 134}:  \"zte corporation\",\n\t[3]byte{48, 212, 106}:  \"Autosales Incorporated\",\n\t[3]byte{48, 213, 135}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{48, 214, 89}:   \"Merging Technologies SA\",\n\t[3]byte{48, 214, 201}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{48, 217, 217}:  \"Apple, Inc.\",\n\t[3]byte{48, 222, 134}:  \"Cedac Software S.r.l.\",\n\t[3]byte{48, 223, 141}:  \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{48, 224, 144}:  \"Linctronix Ltd,\",\n\t[3]byte{48, 225, 113}:  \"Hewlett Packard\",\n\t[3]byte{48, 227, 122}:  \"Intel Corporate\",\n\t[3]byte{48, 227, 214}:  \"Spotify USA Inc.\",\n\t[3]byte{48, 228, 142}:  \"Vodafone UK\",\n\t[3]byte{48, 228, 219}:  \"Cisco Systems, Inc\",\n\t[3]byte{48, 233, 142}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{48, 234, 38}:   \"Sycada BV\",\n\t[3]byte{48, 235, 31}:   \"Skylab M&C Technology Co.,Ltd\",\n\t[3]byte{48, 235, 37}:   \"INTEK DIGITAL\",\n\t[3]byte{48, 235, 90}:   \"LANDIS + GYR\",\n\t[3]byte{48, 239, 209}:  \"Alstom Strongwish (Shenzhen) Co., Ltd.\",\n\t[3]byte{48, 243, 29}:   \"zte corporation\",\n\t[3]byte{48, 243, 53}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{48, 243, 58}:   \"+plugg srl\",\n\t[3]byte{48, 244, 47}:   \"ESP\",\n\t[3]byte{48, 246, 185}:  \"Ecocentric Energy\",\n\t[3]byte{48, 247, 13}:   \"Cisco Systems, Inc\",\n\t[3]byte{48, 247, 114}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{48, 247, 127}:  \"S Mobile Devices Limited\",\n\t[3]byte{48, 247, 197}:  \"Apple, Inc.\",\n\t[3]byte{48, 247, 215}:  \"Thread Technology Co., Ltd\",\n\t[3]byte{48, 249, 237}:  \"Sony Corporation\",\n\t[3]byte{48, 250, 183}:  \"Tunai Creative\",\n\t[3]byte{48, 251, 148}:  \"Shanghai Fangzhiwei Information Technology CO.,Ltd.\",\n\t[3]byte{48, 251, 184}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{48, 252, 104}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{48, 252, 235}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{48, 253, 17}:   \"MACROTECH (USA) INC.\",\n\t[3]byte{48, 253, 56}:   \"Google, Inc.\",\n\t[3]byte{48, 253, 101}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{48, 254, 49}:   \"Nokia\",\n\t[3]byte{48, 255, 246}:  \"HangZhou KuoHeng Technology Co.,ltd\",\n\t[3]byte{52, 0, 138}:    \"IEEE Registration Authority\",\n\t[3]byte{52, 0, 163}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{52, 2, 134}:    \"Intel Corporate\",\n\t[3]byte{52, 2, 155}:    \"Plexonics Technologies LImited\",\n\t[3]byte{52, 3, 222}:    \"Texas Instruments\",\n\t[3]byte{52, 4, 158}:    \"IEEE Registration Authority\",\n\t[3]byte{52, 7, 79}:     \"AccelStor, Inc.\",\n\t[3]byte{52, 7, 251}:    \"Ericsson AB\",\n\t[3]byte{52, 8, 4}:      \"D-Link Corporation\",\n\t[3]byte{52, 8, 188}:    \"Apple, Inc.\",\n\t[3]byte{52, 10, 34}:    \"TOP-ACCESS ELECTRONICS CO LTD\",\n\t[3]byte{52, 10, 51}:    \"D-Link International\",\n\t[3]byte{52, 10, 152}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{52, 10, 255}:   \"Qingdao Hisense Communications Co.,Ltd.\",\n\t[3]byte{52, 11, 64}:    \"MIOS ELETTRONICA SRL\",\n\t[3]byte{52, 12, 237}:   \"Moduel AB\",\n\t[3]byte{52, 15, 102}:   \"Web Sensing LLC\",\n\t[3]byte{52, 18, 144}:   \"Treeview Co.,Ltd.\",\n\t[3]byte{52, 18, 152}:   \"Apple, Inc.\",\n\t[3]byte{52, 18, 249}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{52, 19, 168}:   \"Mediplan Limited\",\n\t[3]byte{52, 19, 232}:   \"Intel Corporate\",\n\t[3]byte{52, 20, 95}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{52, 20, 181}:   \"Texas Instruments\",\n\t[3]byte{52, 21, 19}:    \"Texas Instruments\",\n\t[3]byte{52, 21, 158}:   \"Apple, Inc.\",\n\t[3]byte{52, 23, 235}:   \"Dell Inc.\",\n\t[3]byte{52, 26, 53}:    \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{52, 26, 76}:    \"SHENZHEN WEIBU ELECTRONICS CO.,LTD.\",\n\t[3]byte{52, 27, 34}:    \"Grandbeing Technology Co., Ltd\",\n\t[3]byte{52, 30, 107}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{52, 31, 228}:   \"ARRIS Group, Inc.\",\n\t[3]byte{52, 32, 3}:     \"Shenzhen Feitengyun Technology Co.,LTD\",\n\t[3]byte{52, 32, 227}:   \"Ruckus Wireless\",\n\t[3]byte{52, 33, 9}:     \"Jensen Scandinavia AS\",\n\t[3]byte{52, 35, 135}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{52, 35, 186}:   \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{52, 37, 93}:    \"Shenzhen Loadcom Technology Co.,Ltd\",\n\t[3]byte{52, 38, 6}:     \"CarePredict, Inc.\",\n\t[3]byte{52, 39, 146}:   \"FREEBOX SAS\",\n\t[3]byte{52, 40, 240}:   \"ATN International Limited\",\n\t[3]byte{52, 41, 18}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{52, 41, 143}:   \"IEEE Registration Authority\",\n\t[3]byte{52, 41, 234}:   \"MCD ELECTRONICS SP. Z O.O.\",\n\t[3]byte{52, 42, 241}:   \"Texas Instruments\",\n\t[3]byte{52, 44, 196}:   \"Compal Broadband Networks, Inc.\",\n\t[3]byte{52, 45, 13}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{52, 46, 182}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{52, 46, 183}:   \"Intel Corporate\",\n\t[3]byte{52, 47, 110}:   \"Anywire corporation\",\n\t[3]byte{52, 47, 189}:   \"Nintendo Co.,Ltd\",\n\t[3]byte{52, 49, 17}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{52, 49, 196}:   \"AVM GmbH\",\n\t[3]byte{52, 50, 230}:   \"Panasonic Industrial Devices Europe GmbH\",\n\t[3]byte{52, 54, 59}:    \"Apple, Inc.\",\n\t[3]byte{52, 55, 89}:    \"zte corporation\",\n\t[3]byte{52, 55, 148}:   \"Hamee Corp.\",\n\t[3]byte{52, 56, 175}:   \"Inlab Software GmbH\",\n\t[3]byte{52, 56, 183}:   \"HUMAX Co., Ltd.\",\n\t[3]byte{52, 61, 152}:   \"JinQianMao Technology Co.,Ltd.\",\n\t[3]byte{52, 61, 196}:   \"BUFFALO.INC\",\n\t[3]byte{52, 62, 164}:   \"Ring LLC\",\n\t[3]byte{52, 64, 181}:   \"IBM\",\n\t[3]byte{52, 65, 93}:    \"Intel Corporate\",\n\t[3]byte{52, 65, 168}:   \"ER-Telecom\",\n\t[3]byte{52, 66, 98}:    \"Apple, Inc.\",\n\t[3]byte{52, 70, 111}:   \"HiTEM Engineering\",\n\t[3]byte{52, 70, 236}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{52, 72, 237}:   \"Dell Inc.\",\n\t[3]byte{52, 73, 91}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{52, 75, 61}:    \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{52, 75, 80}:    \"zte corporation\",\n\t[3]byte{52, 76, 164}:   \"amazipoint technology Ltd.\",\n\t[3]byte{52, 76, 200}:   \"Echodyne Corp\",\n\t[3]byte{52, 77, 234}:   \"zte corporation\",\n\t[3]byte{52, 77, 247}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{52, 79, 63}:    \"IO-Power Technology Co., Ltd.\",\n\t[3]byte{52, 79, 92}:    \"R&amp;M AG\",\n\t[3]byte{52, 79, 105}:   \"EKINOPS SAS\",\n\t[3]byte{52, 81, 128}:   \"TCL King Electrical Appliances (Huizhou) Co., Ltd\",\n\t[3]byte{52, 81, 170}:   \"JID GLOBAL\",\n\t[3]byte{52, 81, 201}:   \"Apple, Inc.\",\n\t[3]byte{52, 84, 60}:    \"TAKAOKA TOKO CO.,LTD.\",\n\t[3]byte{52, 85, 148}:   \"FUJIAN STAR-NET COMMUNICATION CO.,LTD\",\n\t[3]byte{52, 86, 254}:   \"Cisco Meraki\",\n\t[3]byte{52, 87, 96}:    \"MitraStar Technology Corp.\",\n\t[3]byte{52, 88, 64}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{52, 90, 6}:     \"SHARP Corporation\",\n\t[3]byte{52, 90, 186}:   \"tcloud intelligence\",\n\t[3]byte{52, 91, 17}:    \"EVI HEAT AB\",\n\t[3]byte{52, 91, 187}:   \"GD Midea Air-Conditioning Equipment Co.,Ltd.\",\n\t[3]byte{52, 92, 64}:    \"Cargt Holdings LLC\",\n\t[3]byte{52, 93, 16}:    \"Wytek\",\n\t[3]byte{52, 97, 120}:   \"The Boeing Company\",\n\t[3]byte{52, 98, 136}:   \"Cisco Systems, Inc\",\n\t[3]byte{52, 99, 212}:   \"BIONIX SUPPLYCHAIN TECHNOLOGIES SLU\",\n\t[3]byte{52, 100, 169}:  \"Hewlett Packard\",\n\t[3]byte{52, 102, 234}:  \"VERTU INTERNATIONAL CORPORATION LIMITED\",\n\t[3]byte{52, 104, 74}:   \"Teraworks Co., Ltd.\",\n\t[3]byte{52, 104, 149}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{52, 105, 135}:  \"zte corporation\",\n\t[3]byte{52, 106, 194}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{52, 107, 70}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{52, 107, 91}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{52, 107, 211}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{52, 108, 15}:   \"Pramod Telecom Pvt. Ltd\",\n\t[3]byte{52, 109, 156}:  \"Carrier Corporation\",\n\t[3]byte{52, 110, 138}:  \"Ecosense\",\n\t[3]byte{52, 110, 157}:  \"Ericsson AB\",\n\t[3]byte{52, 111, 144}:  \"Cisco Systems, Inc\",\n\t[3]byte{52, 111, 146}:  \"White Rodgers Division\",\n\t[3]byte{52, 111, 237}:  \"Enovation Controls\",\n\t[3]byte{52, 113, 70}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{52, 117, 99}:   \"SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\",\n\t[3]byte{52, 117, 199}:  \"Avaya Inc\",\n\t[3]byte{52, 118, 197}:  \"I-O DATA DEVICE,INC.\",\n\t[3]byte{52, 120, 57}:   \"zte corporation\",\n\t[3]byte{52, 120, 119}:  \"O-Net Communications (Shenzhen) Limited\",\n\t[3]byte{52, 120, 215}:  \"Gionee Communication Equipment Co.,Ltd.\",\n\t[3]byte{52, 121, 22}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{52, 122, 96}:   \"ARRIS Group, Inc.\",\n\t[3]byte{52, 124, 37}:   \"Apple, Inc.\",\n\t[3]byte{52, 125, 246}:  \"Intel Corporate\",\n\t[3]byte{52, 126, 0}:    \"Huawei Device Co., Ltd.\",\n\t[3]byte{52, 126, 57}:   \"Nokia Danmark A/S\",\n\t[3]byte{52, 126, 92}:   \"Sonos, Inc.\",\n\t[3]byte{52, 126, 202}:  \"NEXTWILL\",\n\t[3]byte{52, 128, 13}:   \"Cavium Inc\",\n\t[3]byte{52, 128, 179}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{52, 129, 55}:   \"UNICARD SA\",\n\t[3]byte{52, 129, 196}:  \"AVM GmbH\",\n\t[3]byte{52, 129, 244}:  \"SST Taiwan Ltd.\",\n\t[3]byte{52, 130, 197}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{52, 130, 222}:  \"Kiio Inc\",\n\t[3]byte{52, 131, 2}:    \"iFORCOM Co., Ltd\",\n\t[3]byte{52, 132, 70}:   \"Ericsson AB\",\n\t[3]byte{52, 133, 132}:  \"Extreme Networks, Inc.\",\n\t[3]byte{52, 134, 42}:   \"Heinz Lackmann GmbH & Co KG\",\n\t[3]byte{52, 135, 61}:   \"Quectel Wireless Solutions Co., Ltd.\",\n\t[3]byte{52, 136, 93}:   \"Logitech Far East\",\n\t[3]byte{52, 138, 123}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{52, 138, 174}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{52, 139, 117}:  \"LAVA INTERNATIONAL(H.K) LIMITED\",\n\t[3]byte{52, 143, 39}:   \"Ruckus Wireless\",\n\t[3]byte{52, 145, 111}:  \"UserGate Ltd.\",\n\t[3]byte{52, 147, 66}:   \"TTE Corporation\",\n\t[3]byte{52, 149, 219}:  \"Logitec Corporation\",\n\t[3]byte{52, 150, 114}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{52, 151, 246}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{52, 151, 251}:  \"ADVANCED RF TECHNOLOGIES INC\",\n\t[3]byte{52, 153, 111}:  \"VPI Engineering\",\n\t[3]byte{52, 153, 113}:  \"Quanta Storage Inc.\",\n\t[3]byte{52, 153, 215}:  \"Universal Flow Monitors, Inc.\",\n\t[3]byte{52, 154, 13}:   \"ZBD Displays Ltd\",\n\t[3]byte{52, 155, 91}:   \"Maquet GmbH\",\n\t[3]byte{52, 157, 144}:  \"Heinzmann GmbH & CO. KG\",\n\t[3]byte{52, 158, 52}:   \"Evervictory Electronic Co.Ltd\",\n\t[3]byte{52, 159, 123}:  \"CANON INC.\",\n\t[3]byte{52, 161, 131}:  \"AWare, Inc\",\n\t[3]byte{52, 162, 162}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{52, 163, 149}:  \"Apple, Inc.\",\n\t[3]byte{52, 163, 191}:  \"Terewave. Inc.\",\n\t[3]byte{52, 165, 93}:   \"TECHNOSOFT INTERNATIONAL SRL\",\n\t[3]byte{52, 165, 225}:  \"Sensorist ApS\",\n\t[3]byte{52, 166, 140}:  \"Shine Profit Development Limited\",\n\t[3]byte{52, 167, 9}:    \"Trevil srl\",\n\t[3]byte{52, 167, 186}:  \"Fischer International Systems Corporation\",\n\t[3]byte{52, 168, 67}:   \"KYOCERA Display Corporation\",\n\t[3]byte{52, 168, 78}:   \"Cisco Systems, Inc\",\n\t[3]byte{52, 168, 235}:  \"Apple, Inc.\",\n\t[3]byte{52, 170, 139}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{52, 170, 153}:  \"Nokia\",\n\t[3]byte{52, 170, 238}:  \"Mikrovisatos Servisas UAB\",\n\t[3]byte{52, 171, 55}:   \"Apple, Inc.\",\n\t[3]byte{52, 173, 228}:  \"Shanghai Chint Power Systems Co., Ltd.\",\n\t[3]byte{52, 175, 44}:   \"Nintendo Co., Ltd.\",\n\t[3]byte{52, 177, 247}:  \"Texas Instruments\",\n\t[3]byte{52, 178, 10}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{52, 179, 84}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{52, 181, 113}:  \"PLDS\",\n\t[3]byte{52, 181, 163}:  \"CIG SHANGHAI CO LTD\",\n\t[3]byte{52, 183, 253}:  \"Guangzhou Younghead Electronic Technology Co.,Ltd\",\n\t[3]byte{52, 186, 56}:   \"PAL MOHAN ELECTRONICS PVT LTD\",\n\t[3]byte{52, 186, 81}:   \"Se-Kure Controls, Inc.\",\n\t[3]byte{52, 186, 117}:  \"Everest Networks, Inc\",\n\t[3]byte{52, 186, 154}:  \"Asiatelco Technologies Co.\",\n\t[3]byte{52, 187, 31}:   \"BlackBerry RTS\",\n\t[3]byte{52, 187, 38}:   \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{52, 188, 166}:  \"Beijing Ding Qing Technology, Ltd.\",\n\t[3]byte{52, 189, 200}:  \"Cisco Systems, Inc\",\n\t[3]byte{52, 189, 249}:  \"Shanghai WDK Industrial Co.,Ltd.\",\n\t[3]byte{52, 189, 250}:  \"Cisco SPVTG\",\n\t[3]byte{52, 190, 0}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{52, 191, 144}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{52, 192, 89}:   \"Apple, Inc.\",\n\t[3]byte{52, 192, 249}:  \"Rockwell Automation\",\n\t[3]byte{52, 195, 172}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{52, 195, 210}:  \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{52, 197, 208}:  \"Hagleitner Hygiene International GmbH\",\n\t[3]byte{52, 198, 154}:  \"Enecsys Ltd\",\n\t[3]byte{52, 199, 49}:   \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{52, 200, 3}:    \"Nokia Corporation\",\n\t[3]byte{52, 201, 157}:  \"EIDOLON COMMUNICATIONS TECHNOLOGY CO. LTD.\",\n\t[3]byte{52, 201, 240}:  \"LM Technologies Ltd\",\n\t[3]byte{52, 203, 26}:   \"Procter & Gamble Company\",\n\t[3]byte{52, 204, 40}:   \"Nexpring Co. LTD.,\",\n\t[3]byte{52, 205, 109}:  \"CommSky Technologies\",\n\t[3]byte{52, 205, 190}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{52, 206, 0}:    \"XIAOMI Electronics,CO.,LTD\",\n\t[3]byte{52, 206, 148}:  \"Parsec (Pty) Ltd\",\n\t[3]byte{52, 207, 246}:  \"Intel Corporate\",\n\t[3]byte{52, 208, 155}:  \"MobilMAX Technology Inc.\",\n\t[3]byte{52, 208, 184}:  \"IEEE Registration Authority\",\n\t[3]byte{52, 210, 98}:   \"SZ DJI TECHNOLOGY CO.,LTD\",\n\t[3]byte{52, 210, 112}:  \"Amazon Technologies Inc.\",\n\t[3]byte{52, 210, 196}:  \"RENA GmbH Print Systeme\",\n\t[3]byte{52, 215, 18}:   \"Smartisan Digital Co., Ltd\",\n\t[3]byte{52, 215, 114}:  \"Xiamen Yudian Automation Technology Co., Ltd \",\n\t[3]byte{52, 215, 180}:  \"Tributary Systems, Inc.\",\n\t[3]byte{52, 217, 84}:   \"WiBotic Inc.\",\n\t[3]byte{52, 218, 183}:  \"zte corporation\",\n\t[3]byte{52, 218, 193}:  \"SAE Technologies Development(Dongguan) Co., Ltd.\",\n\t[3]byte{52, 219, 156}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{52, 219, 253}:  \"Cisco Systems, Inc\",\n\t[3]byte{52, 221, 126}:  \"Umeox Innovations Co.,Ltd\",\n\t[3]byte{52, 222, 26}:   \"Intel Corporate\",\n\t[3]byte{52, 222, 52}:   \"zte corporation\",\n\t[3]byte{52, 223, 42}:   \"Fujikon Industrial Co.,Limited\",\n\t[3]byte{52, 224, 207}:  \"zte corporation\",\n\t[3]byte{52, 224, 215}:  \"DONGGUAN QISHENG ELECTRONICS INDUSTRIAL CO., LTD\",\n\t[3]byte{52, 225, 45}:   \"Intel Corporate\",\n\t[3]byte{52, 225, 209}:  \"IEEE Registration Authority\",\n\t[3]byte{52, 226, 253}:  \"Apple, Inc.\",\n\t[3]byte{52, 227, 128}:  \"Genexis B.V.\",\n\t[3]byte{52, 227, 218}:  \"Hoval Aktiengesellschaft\",\n\t[3]byte{52, 228, 42}:   \"Automatic Bar Controls Inc.\",\n\t[3]byte{52, 229, 236}:  \"Palo Alto Networks\",\n\t[3]byte{52, 230, 173}:  \"Intel Corporate\",\n\t[3]byte{52, 230, 215}:  \"Dell Inc.\",\n\t[3]byte{52, 231, 11}:   \"HAN Networks Co., Ltd\",\n\t[3]byte{52, 231, 28}:   \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{52, 232, 148}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{52, 233, 17}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{52, 234, 52}:   \"HangZhou Gubei Electronics Technology Co.,Ltd\",\n\t[3]byte{52, 234, 231}:  \"Shanghai High-Flying Electronics  Technology Co., Ltd\",\n\t[3]byte{52, 237, 11}:   \" Shanghai XZ-COM.CO.,Ltd.\",\n\t[3]byte{52, 237, 27}:   \"Cisco Systems, Inc\",\n\t[3]byte{52, 239, 68}:   \"2Wire Inc\",\n\t[3]byte{52, 239, 139}:  \"NTT Communications Corporation\",\n\t[3]byte{52, 239, 182}:  \"Edgecore Networks Corporation\",\n\t[3]byte{52, 240, 202}:  \"Shenzhen Linghangyuan Digital Technology Co.,Ltd.\",\n\t[3]byte{52, 241, 80}:   \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{52, 243, 154}:  \"Intel Corporate\",\n\t[3]byte{52, 243, 155}:  \"WizLAN Ltd.\",\n\t[3]byte{52, 246, 45}:   \"SHARP Corporation\",\n\t[3]byte{52, 246, 75}:   \"Intel Corporate\",\n\t[3]byte{52, 246, 210}:  \"Panasonic Taiwan Co.,Ltd.\",\n\t[3]byte{52, 248, 231}:  \"Cisco Systems, Inc\",\n\t[3]byte{52, 249, 104}:  \"ATEK Products, LLC\",\n\t[3]byte{52, 250, 64}:   \"Guangzhou Robustel Technologies Co., Limited\",\n\t[3]byte{52, 250, 159}:  \"Ruckus Wireless\",\n\t[3]byte{52, 252, 111}:  \"ALCEA\",\n\t[3]byte{52, 252, 185}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{52, 252, 239}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{56, 0, 37}:     \"Intel Corporate\",\n\t[3]byte{56, 1, 24}:     \"ULVAC,Inc.\",\n\t[3]byte{56, 1, 70}:     \"SHENZHEN BILIAN ELECTRONIC CO.，LTD\",\n\t[3]byte{56, 1, 149}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{56, 1, 151}:    \"TSST Global,Inc\",\n\t[3]byte{56, 1, 159}:    \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{56, 5, 70}:     \"Foctek Photonics, Inc.\",\n\t[3]byte{56, 5, 172}:    \"Piller Group GmbH\",\n\t[3]byte{56, 6, 180}:    \"A.D.C. GmbH\",\n\t[3]byte{56, 7, 212}:    \"Zeppelin Systems GmbH\",\n\t[3]byte{56, 8, 253}:    \"Silca Spa\",\n\t[3]byte{56, 9, 164}:    \"Firefly Integrations\",\n\t[3]byte{56, 10, 10}:    \"Sky-City Communication and Electronics Limited Company\",\n\t[3]byte{56, 10, 148}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{56, 10, 171}:   \"Formlabs\",\n\t[3]byte{56, 11, 60}:    \"Texas Instruments\",\n\t[3]byte{56, 11, 64}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{56, 13, 212}:   \"Primax Electronics Ltd.\",\n\t[3]byte{56, 14, 77}:    \"Cisco Systems, Inc\",\n\t[3]byte{56, 14, 123}:   \"V.P.S. Thai Co., Ltd\",\n\t[3]byte{56, 15, 74}:    \"Apple, Inc.\",\n\t[3]byte{56, 15, 228}:   \"Dedicated Network Partners Oy\",\n\t[3]byte{56, 16, 213}:   \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{56, 20, 78}:    \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{56, 22, 209}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{56, 23, 48}:    \"Ulrich Lippert GmbH & Co KG\",\n\t[3]byte{56, 23, 102}:   \"PROMZAKAZ LTD.\",\n\t[3]byte{56, 23, 195}:   \"Hewlett Packard Enterprise\",\n\t[3]byte{56, 23, 225}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{56, 24, 76}:    \"Sony Home Entertainment&Sound Products Inc\",\n\t[3]byte{56, 25, 47}:    \"Nokia Corporation\",\n\t[3]byte{56, 26, 82}:    \"Seiko Epson Corporation\",\n\t[3]byte{56, 28, 26}:    \"Cisco Systems, Inc\",\n\t[3]byte{56, 28, 35}:    \"Hilan Technology CO.,LTD\",\n\t[3]byte{56, 28, 74}:    \"SIMCom Wireless Solutions Co.,Ltd.\",\n\t[3]byte{56, 29, 20}:    \"Skydio Inc.\",\n\t[3]byte{56, 29, 217}:   \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{56, 32, 86}:    \"Cisco Systems, Inc\",\n\t[3]byte{56, 32, 168}:   \"ColorTokens, Inc.\",\n\t[3]byte{56, 33, 135}:   \"Midea Group Co., Ltd.\",\n\t[3]byte{56, 33, 199}:   \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{56, 34, 157}:   \"ADB Broadband Italia\",\n\t[3]byte{56, 34, 214}:   \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{56, 34, 226}:   \"HP Inc.\",\n\t[3]byte{56, 37, 107}:   \"Microsoft Mobile Oy\",\n\t[3]byte{56, 38, 43}:    \"UTran Technology\",\n\t[3]byte{56, 38, 205}:   \"ANDTEK\",\n\t[3]byte{56, 40, 234}:   \"Fujian Netcom Technology Co., LTD\",\n\t[3]byte{56, 41, 90}:    \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{56, 41, 221}:   \"ONvocal Inc\",\n\t[3]byte{56, 42, 25}:    \"Technica Engineering GmbH\",\n\t[3]byte{56, 43, 120}:   \"ECO PLUGS ENTERPRISE CO., LTD\",\n\t[3]byte{56, 44, 74}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{56, 45, 209}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{56, 45, 232}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{56, 48, 249}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{56, 49, 172}:   \"WEG\",\n\t[3]byte{56, 53, 251}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{56, 55, 139}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{56, 58, 33}:    \"IEEE Registration Authority\",\n\t[3]byte{56, 59, 38}:    \"Jiangsu Qinheng Co., Ltd.\",\n\t[3]byte{56, 59, 200}:   \"2Wire Inc\",\n\t[3]byte{56, 60, 156}:   \"Fujian Newland Payment Technology Co.,Ltd.\",\n\t[3]byte{56, 63, 16}:    \"DBL Technology Ltd.\",\n\t[3]byte{56, 63, 179}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{56, 66, 51}:    \"Wildeboer Bauteile GmbH\",\n\t[3]byte{56, 66, 166}:   \"Ingenieurbuero Stahlkopf\",\n\t[3]byte{56, 67, 105}:   \"Patrol Products Consortium LLC\",\n\t[3]byte{56, 67, 125}:   \"Compal Broadband Networks, Inc.\",\n\t[3]byte{56, 67, 229}:   \"Grotech Inc\",\n\t[3]byte{56, 69, 76}:    \"Light Labs, Inc.\",\n\t[3]byte{56, 69, 140}:   \"MyCloud Technology corporation\",\n\t[3]byte{56, 70, 8}:     \"zte corporation\",\n\t[3]byte{56, 71, 188}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{56, 72, 76}:    \"Apple, Inc.\",\n\t[3]byte{56, 75, 91}:    \"ZTRON TECHNOLOGY LIMITED\",\n\t[3]byte{56, 75, 118}:   \"AIRTAME ApS\",\n\t[3]byte{56, 76, 79}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{56, 76, 144}:   \"ARRIS Group, Inc.\",\n\t[3]byte{56, 79, 73}:    \"Juniper Networks\",\n\t[3]byte{56, 79, 240}:   \"AzureWave Technology Inc.\",\n\t[3]byte{56, 82, 26}:    \"Nokia\",\n\t[3]byte{56, 83, 156}:   \"Apple, Inc.\",\n\t[3]byte{56, 84, 155}:   \"zte corporation\",\n\t[3]byte{56, 86, 16}:    \"CANDY HOUSE, Inc.\",\n\t[3]byte{56, 86, 181}:   \"Peerbridge Health Inc\",\n\t[3]byte{56, 88, 12}:    \"Panaccess Systems GmbH\",\n\t[3]byte{56, 89, 248}:   \"MindMade Sp. z o.o.\",\n\t[3]byte{56, 89, 249}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{56, 90, 168}:   \"Beijing Zhongdun Security Technology Development Co.\",\n\t[3]byte{56, 95, 102}:   \"Cisco SPVTG\",\n\t[3]byte{56, 95, 195}:   \"Yu Jeong System, Co.Ltd\",\n\t[3]byte{56, 96, 119}:   \"PEGATRON CORPORATION\",\n\t[3]byte{56, 99, 187}:   \"Hewlett Packard\",\n\t[3]byte{56, 99, 246}:   \"3NOD MULTIMEDIA(SHENZHEN)CO.,LTD\",\n\t[3]byte{56, 102, 69}:   \"OOSIC Technology CO.,Ltd\",\n\t[3]byte{56, 102, 240}:  \"Apple, Inc.\",\n\t[3]byte{56, 103, 147}:  \"Asia Optical Co., Inc.\",\n\t[3]byte{56, 104, 147}:  \"Intel Corporate\",\n\t[3]byte{56, 104, 164}:  \"Samsung Electronics Co.,LTD\",\n\t[3]byte{56, 104, 221}:  \"INVENTEC CORPORATION\",\n\t[3]byte{56, 106, 119}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{56, 107, 28}:   \"SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{56, 107, 187}:  \"ARRIS Group, Inc.\",\n\t[3]byte{56, 108, 155}:  \"Ivy Biomedical\",\n\t[3]byte{56, 110, 33}:   \"Wasion Group Ltd.\",\n\t[3]byte{56, 110, 136}:  \"zte corporation\",\n\t[3]byte{56, 110, 162}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{56, 112, 12}:   \"ARRIS Group, Inc.\",\n\t[3]byte{56, 113, 222}:  \"Apple, Inc.\",\n\t[3]byte{56, 114, 192}:  \"Comtrend Corporation\",\n\t[3]byte{56, 115, 234}:  \"IEEE Registration Authority\",\n\t[3]byte{56, 118, 202}:  \"Shenzhen Smart Intelligent Technology Co.Ltd\",\n\t[3]byte{56, 118, 209}:  \"Euronda SpA\",\n\t[3]byte{56, 120, 98}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{56, 123, 71}:   \"AKELA, Inc.\",\n\t[3]byte{56, 128, 223}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{56, 129, 215}:  \"Texas Instruments\",\n\t[3]byte{56, 131, 69}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{56, 131, 154}:  \"SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\",\n\t[3]byte{56, 132, 121}:  \"Cisco Meraki\",\n\t[3]byte{56, 134, 2}:    \"Flexoptix GmbH\",\n\t[3]byte{56, 136, 30}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{56, 137, 44}:   \"Apple, Inc.\",\n\t[3]byte{56, 137, 220}:  \"Opticon Sensors Europe B.V.\",\n\t[3]byte{56, 138, 183}:  \"ITC Networks\",\n\t[3]byte{56, 138, 190}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{56, 139, 89}:   \"Google, Inc.\",\n\t[3]byte{56, 140, 80}:   \"LG Electronics\",\n\t[3]byte{56, 142, 122}:  \"AUTOIT\",\n\t[3]byte{56, 142, 231}:  \"Fanhattan LLC\",\n\t[3]byte{56, 144, 165}:  \"Cisco Systems, Inc\",\n\t[3]byte{56, 145, 213}:  \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{56, 145, 251}:  \"Xenox Holding BV\",\n\t[3]byte{56, 148, 150}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{56, 148, 224}:  \"Syrotech Networks. Ltd.\",\n\t[3]byte{56, 148, 237}:  \"NETGEAR\",\n\t[3]byte{56, 149, 146}:  \"Beijing Tendyron Corporation\",\n\t[3]byte{56, 151, 214}:  \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{56, 152, 216}:  \"MERITECH CO.,LTD\",\n\t[3]byte{56, 154, 246}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{56, 157, 146}:  \"Seiko Epson Corporation\",\n\t[3]byte{56, 159, 90}:   \"C-Kur TV Inc.\",\n\t[3]byte{56, 159, 131}:  \"OTN Systems N.V.\",\n\t[3]byte{56, 162, 140}:  \"SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\",\n\t[3]byte{56, 164, 237}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{56, 165, 60}:   \"COMECER Netherlands\",\n\t[3]byte{56, 165, 182}:  \"SHENZHEN MEGMEET ELECTRICAL CO.,LTD\",\n\t[3]byte{56, 166, 206}:  \"BSkyB Ltd\",\n\t[3]byte{56, 168, 81}:   \"Moog, Ing\",\n\t[3]byte{56, 168, 107}:  \"Orga BV\",\n\t[3]byte{56, 169, 95}:   \"Actifio Inc\",\n\t[3]byte{56, 170, 60}:   \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{56, 172, 61}:   \"Nephos Inc\",\n\t[3]byte{56, 173, 142}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{56, 173, 190}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{56, 175, 41}:   \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{56, 175, 208}:  \"Private\",\n\t[3]byte{56, 175, 215}:  \"FUJITSU LIMITED\",\n\t[3]byte{56, 177, 45}:   \"Sonotronic Nagel GmbH\",\n\t[3]byte{56, 177, 158}:  \"IEEE Registration Authority\",\n\t[3]byte{56, 177, 219}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{56, 180, 211}:  \"BSH Hausgeraete GmbH\",\n\t[3]byte{56, 181, 77}:   \"Apple, Inc.\",\n\t[3]byte{56, 181, 189}:  \"E.G.O. Elektro-Ger\",\n\t[3]byte{56, 183, 37}:   \"Wistron Infocomm (Zhongshan) Corporation\",\n\t[3]byte{56, 183, 77}:   \"Fijowave Limited\",\n\t[3]byte{56, 184, 235}:  \"IEEE Registration Authority\",\n\t[3]byte{56, 186, 176}:  \"Broadcom\",\n\t[3]byte{56, 186, 248}:  \"Intel Corporate\",\n\t[3]byte{56, 187, 35}:   \"OzVision America LLC\",\n\t[3]byte{56, 187, 60}:   \"Avaya Inc\",\n\t[3]byte{56, 188, 1}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{56, 188, 26}:   \"MEIZU Technology Co., Ltd.\",\n\t[3]byte{56, 191, 47}:   \"Espec Corp.\",\n\t[3]byte{56, 191, 51}:   \"NEC CASIO Mobile Communications\",\n\t[3]byte{56, 192, 150}:  \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{56, 194, 186}:  \"CCTV NEOTECH\",\n\t[3]byte{56, 196, 232}:  \"NSS Sp. z o.o.\",\n\t[3]byte{56, 199, 10}:   \"WiFiSong\",\n\t[3]byte{56, 199, 186}:  \"CS Services Co.,Ltd.\",\n\t[3]byte{56, 200, 92}:   \"Cisco SPVTG\",\n\t[3]byte{56, 201, 134}:  \"Apple, Inc.\",\n\t[3]byte{56, 201, 169}:  \"SMART High Reliability Solutions, Inc.\",\n\t[3]byte{56, 202, 151}:  \"Contour Design LLC\",\n\t[3]byte{56, 202, 218}:  \"Apple, Inc.\",\n\t[3]byte{56, 205, 7}:    \"Beijing FaceCam Technology Co., Ltd.\",\n\t[3]byte{56, 209, 53}:   \"EasyIO Corporation Sdn. Bhd.\",\n\t[3]byte{56, 210, 105}:  \"Texas Instruments\",\n\t[3]byte{56, 210, 202}:  \"Zhejiang Tmall Technology Co., Ltd.\",\n\t[3]byte{56, 212, 11}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{56, 213, 71}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{56, 214, 32}:   \"Limidea Concept Pte. Ltd.\",\n\t[3]byte{56, 215, 202}:  \"7HUGS LABS\",\n\t[3]byte{56, 216, 47}:   \"zte corporation\",\n\t[3]byte{56, 217, 165}:  \"Mikotek Information Inc. \",\n\t[3]byte{56, 219, 187}:  \"Sunbow Telecom Co., Ltd.\",\n\t[3]byte{56, 222, 96}:   \"Mohlenhoff GmbH\",\n\t[3]byte{56, 222, 173}:  \"Intel Corporate\",\n\t[3]byte{56, 224, 142}:  \"Mitsubishi Electric Corporation\",\n\t[3]byte{56, 225, 170}:  \"zte corporation\",\n\t[3]byte{56, 226, 110}:  \"ShenZhen Sweet Rain Electronics Co.,Ltd.\",\n\t[3]byte{56, 226, 221}:  \"zte corporation\",\n\t[3]byte{56, 227, 197}:  \"Taicang T&W Electronics\",\n\t[3]byte{56, 229, 149}:  \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{56, 230, 10}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{56, 231, 216}:  \"HTC Corporation\",\n\t[3]byte{56, 232, 223}:  \"b gmbh medien + datenbanken\",\n\t[3]byte{56, 232, 238}:  \"Nanjing Youkuo Electric Technology Co., Ltd\",\n\t[3]byte{56, 233, 140}:  \"Reco S.p.A.\",\n\t[3]byte{56, 234, 167}:  \"Hewlett Packard\",\n\t[3]byte{56, 235, 71}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{56, 236, 13}:   \"Apple, Inc.\",\n\t[3]byte{56, 236, 17}:   \"Novatek Microelectronics Corp.\",\n\t[3]byte{56, 236, 228}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{56, 237, 24}:   \"Cisco Systems, Inc\",\n\t[3]byte{56, 238, 157}:  \"Anedo Ltd.\",\n\t[3]byte{56, 239, 227}:  \" INGENICO TERMINALS SAS\",\n\t[3]byte{56, 240, 152}:  \"Vapor Stone Rail Systems\",\n\t[3]byte{56, 240, 200}:  \"Mevo Inc.\",\n\t[3]byte{56, 241, 53}:   \"SensorTec-Canada\",\n\t[3]byte{56, 242, 62}:   \"Microsoft Mobile Oy\",\n\t[3]byte{56, 243, 46}:   \"Skullcandy\",\n\t[3]byte{56, 243, 63}:   \"TATSUNO CORPORATION\",\n\t[3]byte{56, 245, 84}:   \"HISENSE ELECTRIC CO.,LTD\",\n\t[3]byte{56, 245, 87}:   \"JOLATA, INC.\",\n\t[3]byte{56, 245, 151}:  \"home2net GmbH\",\n\t[3]byte{56, 246, 1}:    \"Solid State Storage Technology Corporation\",\n\t[3]byte{56, 247, 8}:    \"National Resource Management, Inc.\",\n\t[3]byte{56, 247, 61}:   \"Amazon Technologies Inc.\",\n\t[3]byte{56, 247, 178}:  \"SEOJUN ELECTRIC\",\n\t[3]byte{56, 247, 205}:  \"IEEE Registration Authority\",\n\t[3]byte{56, 248, 94}:   \"HUMAX Co., Ltd.\",\n\t[3]byte{56, 248, 137}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{56, 248, 183}:  \"V2COM PARTICIPACOES S.A.\",\n\t[3]byte{56, 248, 202}:  \"OWIN Inc.\",\n\t[3]byte{56, 249, 211}:  \"Apple, Inc.\",\n\t[3]byte{56, 250, 202}:  \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{56, 251, 20}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{56, 253, 254}:  \"IEEE Registration Authority\",\n\t[3]byte{56, 254, 197}:  \"Ellips B.V.\",\n\t[3]byte{56, 255, 54}:   \"Ruckus Wireless\",\n\t[3]byte{60, 1, 239}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{60, 2, 177}:    \"Creation Technologies LP\",\n\t[3]byte{60, 4, 97}:     \"ARRIS Group, Inc.\",\n\t[3]byte{60, 4, 191}:    \"PRAVIS SYSTEMS Co.Ltd.,\",\n\t[3]byte{60, 5, 24}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{60, 5, 171}:    \"Product Creation Studio\",\n\t[3]byte{60, 7, 84}:     \"Apple, Inc.\",\n\t[3]byte{60, 7, 113}:    \"Sony Corporation\",\n\t[3]byte{60, 8, 30}:     \"Beijing Yupont Electric Power Technology Co.,Ltd\",\n\t[3]byte{60, 8, 246}:    \"Cisco Systems, Inc\",\n\t[3]byte{60, 9, 109}:    \"Powerhouse Dynamics\",\n\t[3]byte{60, 12, 72}:    \"Servergy, Inc.\",\n\t[3]byte{60, 12, 125}:   \"Tiny Mesh AS\",\n\t[3]byte{60, 12, 219}:   \"UNIONMAN TECHNOLOGY CO.,LTD\",\n\t[3]byte{60, 14, 35}:    \"Cisco Systems, Inc\",\n\t[3]byte{60, 15, 193}:   \"KBC Networks\",\n\t[3]byte{60, 16, 64}:    \"daesung network\",\n\t[3]byte{60, 16, 111}:   \"ALBAHITH TECHNOLOGIES \",\n\t[3]byte{60, 16, 230}:   \"PHAZR Inc.\",\n\t[3]byte{60, 17, 178}:   \"Fraunhofer FIT\",\n\t[3]byte{60, 19, 204}:   \"Cisco Systems, Inc\",\n\t[3]byte{60, 21, 194}:   \"Apple, Inc.\",\n\t[3]byte{60, 21, 234}:   \"TESCOM CO., LTD.\",\n\t[3]byte{60, 21, 251}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{60, 23, 16}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{60, 24, 159}:   \"Nokia Corporation\",\n\t[3]byte{60, 24, 160}:   \"Luxshare Precision Industry Company Limited\",\n\t[3]byte{60, 25, 21}:    \"GFI Chrono Time\",\n\t[3]byte{60, 25, 125}:   \"Ericsson AB\",\n\t[3]byte{60, 26, 15}:    \"ClearSky Data\",\n\t[3]byte{60, 26, 87}:    \"Cardiopulmonary Corp\",\n\t[3]byte{60, 26, 121}:   \"Huayuan Technology CO.,LTD\",\n\t[3]byte{60, 26, 158}:   \"VitalThings AS\",\n\t[3]byte{60, 28, 190}:   \"JADAK LLC\",\n\t[3]byte{60, 30, 4}:     \"D-Link International\",\n\t[3]byte{60, 30, 19}:    \"HANGZHOU SUNRISE TECHNOLOGY CO., LTD\",\n\t[3]byte{60, 32, 246}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{60, 34, 251}:   \"Apple, Inc.\",\n\t[3]byte{60, 36, 240}:   \"IEEE Registration Authority\",\n\t[3]byte{60, 37, 215}:   \"Nokia Corporation\",\n\t[3]byte{60, 38, 213}:   \"Sotera Wireless\",\n\t[3]byte{60, 39, 99}:    \"SLE quality engineering GmbH & Co. KG\",\n\t[3]byte{60, 40, 109}:   \"Google, Inc.\",\n\t[3]byte{60, 40, 166}:   \"Alcatel-Lucent Enterprise (China)\",\n\t[3]byte{60, 42, 244}:   \"Brother Industries, LTD.\",\n\t[3]byte{60, 44, 48}:    \"Dell Inc.\",\n\t[3]byte{60, 44, 148}:   \"杭州德澜科技有限公司（HangZhou Delan Technology Co.,Ltd）\",\n\t[3]byte{60, 44, 153}:   \"Edgecore Networks Corporation\",\n\t[3]byte{60, 45, 183}:   \"Texas Instruments\",\n\t[3]byte{60, 46, 249}:   \"Apple, Inc.\",\n\t[3]byte{60, 46, 255}:   \"Apple, Inc.\",\n\t[3]byte{60, 47, 58}:    \"SFORZATO Corp.\",\n\t[3]byte{60, 48, 12}:    \"Dewar Electronics Pty Ltd\",\n\t[3]byte{60, 48, 111}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{60, 49, 120}:   \"Qolsys Inc.\",\n\t[3]byte{60, 51, 0}:     \"Shenzhen Bilian electronic CO.,LTD\",\n\t[3]byte{60, 53, 86}:    \"Cognitec Systems GmbH\",\n\t[3]byte{60, 54, 61}:    \"Nokia Corporation\",\n\t[3]byte{60, 54, 228}:   \"ARRIS Group, Inc.\",\n\t[3]byte{60, 55, 134}:   \"NETGEAR\",\n\t[3]byte{60, 56, 136}:   \"ConnectQuest, llc\",\n\t[3]byte{60, 57, 195}:   \"JW Electronics Co., Ltd.\",\n\t[3]byte{60, 57, 231}:   \"IEEE Registration Authority\",\n\t[3]byte{60, 58, 115}:   \"Avaya Inc\",\n\t[3]byte{60, 63, 81}:    \"2CRSI\",\n\t[3]byte{60, 64, 79}:    \"GUANGDONG PISEN ELECTRONICS CO.,LTD\",\n\t[3]byte{60, 65, 14}:    \"Cisco Systems, Inc\",\n\t[3]byte{60, 66, 126}:   \"IEEE Registration Authority\",\n\t[3]byte{60, 67, 142}:   \"ARRIS Group, Inc.\",\n\t[3]byte{60, 70, 216}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{60, 71, 17}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{60, 71, 155}:   \"Theissen Training Systems, Inc.\",\n\t[3]byte{60, 73, 55}:    \"ASSMANN Electronic GmbH\",\n\t[3]byte{60, 74, 146}:   \"Hewlett Packard\",\n\t[3]byte{60, 76, 105}:   \"Infinity System S.L.\",\n\t[3]byte{60, 76, 208}:   \"CERAGON NETWORKS\",\n\t[3]byte{60, 77, 190}:   \"Apple, Inc.\",\n\t[3]byte{60, 78, 71}:    \"Etronic A/S\",\n\t[3]byte{60, 81, 14}:    \"Cisco Systems, Inc\",\n\t[3]byte{60, 82, 130}:   \"Hewlett Packard\",\n\t[3]byte{60, 83, 215}:   \"CEDES AG\",\n\t[3]byte{60, 87, 49}:    \"Cisco Systems, Inc\",\n\t[3]byte{60, 87, 79}:    \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{60, 87, 108}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{60, 87, 189}:   \"Kessler Crane Inc.\",\n\t[3]byte{60, 87, 213}:   \"FiveCo\",\n\t[3]byte{60, 88, 194}:   \"Intel Corporate\",\n\t[3]byte{60, 89, 30}:    \"TCL King Electrical Appliances (Huizhou) Co., Ltd\",\n\t[3]byte{60, 90, 55}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{60, 90, 180}:   \"Google, Inc.\",\n\t[3]byte{60, 92, 195}:   \"Shenzhen First Blue Chip Technology Ltd\",\n\t[3]byte{60, 92, 196}:   \"Amazon Technologies Inc.\",\n\t[3]byte{60, 92, 241}:   \"eero inc.\",\n\t[3]byte{60, 94, 195}:   \"Cisco Systems, Inc\",\n\t[3]byte{60, 95, 1}:     \"Synerchip Co., Ltd.\",\n\t[3]byte{60, 97, 4}:     \"Juniper Networks\",\n\t[3]byte{60, 98, 0}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{60, 98, 120}:   \"SHENZHEN JETNET TECHNOLOGY CO.,LTD.\",\n\t[3]byte{60, 103, 22}:   \"Lily Robotics\",\n\t[3]byte{60, 103, 44}:   \"Sciovid Inc.\",\n\t[3]byte{60, 103, 140}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{60, 104, 22}:   \"VXi Corporation\",\n\t[3]byte{60, 106, 44}:   \"IEEE Registration Authority\",\n\t[3]byte{60, 106, 125}:  \"Niigata Power Systems Co., Ltd.\",\n\t[3]byte{60, 106, 157}:  \"Dexatek Technology LTD.\",\n\t[3]byte{60, 106, 167}:  \"Intel Corporate\",\n\t[3]byte{60, 110, 99}:   \"Mitron OY\",\n\t[3]byte{60, 111, 69}:   \"Fiberpro Inc.\",\n\t[3]byte{60, 111, 234}:  \"Panasonic India Pvt. Ltd.\",\n\t[3]byte{60, 111, 247}:  \"EnTek Systems, Inc.\",\n\t[3]byte{60, 112, 89}:   \"MakerBot Industries\",\n\t[3]byte{60, 113, 191}:  \"Espressif Inc.\",\n\t[3]byte{60, 116, 55}:   \"RIM\",\n\t[3]byte{60, 117, 74}:   \"ARRIS Group, Inc.\",\n\t[3]byte{60, 119, 230}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{60, 120, 67}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{60, 120, 115}:  \"Airsonics\",\n\t[3]byte{60, 122, 138}:  \"ARRIS Group, Inc.\",\n\t[3]byte{60, 124, 63}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{60, 125, 10}:   \"Apple, Inc.\",\n\t[3]byte{60, 125, 177}:  \"Texas Instruments\",\n\t[3]byte{60, 127, 111}:  \"Telechips, Inc.\",\n\t[3]byte{60, 128, 107}:  \"Hunan Voc Acoustics Technology Co., Ltd.\",\n\t[3]byte{60, 128, 170}:  \"Ransnet Singapore Pte Ltd\",\n\t[3]byte{60, 129, 216}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{60, 131, 30}:   \"CKD Corporation\",\n\t[3]byte{60, 131, 117}:  \"Microsoft Corporation\",\n\t[3]byte{60, 131, 181}:  \"Advance Vision Electronics Co. Ltd.\",\n\t[3]byte{60, 132, 106}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{60, 134, 168}:  \"Sangshin elecom .co,, LTD\",\n\t[3]byte{60, 134, 209}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{60, 137, 77}:   \"Dr. Ing. h.c. F. Porsche AG\",\n\t[3]byte{60, 137, 112}:  \"Neosfar\",\n\t[3]byte{60, 137, 148}:  \"BSkyB Ltd\",\n\t[3]byte{60, 137, 166}:  \"KAPELSE\",\n\t[3]byte{60, 138, 176}:  \"Juniper Networks\",\n\t[3]byte{60, 138, 229}:  \"Tensun Information Technology(Hangzhou) Co.,LTD\",\n\t[3]byte{60, 139, 205}:  \"Alcatel-Lucent Shanghai Bell Co., Ltd\",\n\t[3]byte{60, 139, 254}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{60, 140, 64}:   \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{60, 140, 147}:  \"Juniper Networks\",\n\t[3]byte{60, 140, 248}:  \"TRENDnet, Inc.\",\n\t[3]byte{60, 141, 32}:   \"Google, Inc.\",\n\t[3]byte{60, 143, 6}:    \"Shenzhen Libtor Technology Co.,Ltd\",\n\t[3]byte{60, 144, 102}:  \"SmartRG, Inc.\",\n\t[3]byte{60, 145, 43}:   \"Vexata Inc\",\n\t[3]byte{60, 145, 87}:   \"Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\",\n\t[3]byte{60, 145, 116}:  \"ALONG COMMUNICATION TECHNOLOGY\",\n\t[3]byte{60, 145, 128}:  \"Liteon Technology Corporation\",\n\t[3]byte{60, 146, 220}:  \"Octopod Technology Co. Ltd.\",\n\t[3]byte{60, 148, 213}:  \"Juniper Networks\",\n\t[3]byte{60, 149, 9}:    \"Liteon Technology Corporation\",\n\t[3]byte{60, 151, 14}:   \"Wistron InfoComm(Kunshan)Co.,Ltd.\",\n\t[3]byte{60, 151, 126}:  \"IPS Technology Limited\",\n\t[3]byte{60, 152, 114}:  \"Sercomm Corporation.\",\n\t[3]byte{60, 152, 191}:  \"Quest Controls, Inc.\",\n\t[3]byte{60, 153, 247}:  \"Lansentechnology AB\",\n\t[3]byte{60, 154, 119}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{60, 155, 214}:  \"Vizio, Inc\",\n\t[3]byte{60, 156, 15}:   \"Intel Corporate\",\n\t[3]byte{60, 157, 86}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{60, 159, 129}:  \"Shenzhen CATIC Bit Communications Technology Co.,Ltd\",\n\t[3]byte{60, 160, 103}:  \"Liteon Technology Corporation\",\n\t[3]byte{60, 161, 13}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{60, 163, 8}:    \"Texas Instruments\",\n\t[3]byte{60, 163, 21}:   \"Bless Information & Communications Co., Ltd\",\n\t[3]byte{60, 163, 26}:   \"Oilfind International LLC\",\n\t[3]byte{60, 163, 72}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{60, 165, 129}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{60, 166, 22}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{60, 166, 47}:   \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{60, 167, 43}:   \"MRV Communications (Networks) LTD\",\n\t[3]byte{60, 168, 42}:   \"Hewlett Packard\",\n\t[3]byte{60, 169, 244}:  \"Intel Corporate\",\n\t[3]byte{60, 170, 63}:   \"iKey, Ltd.\",\n\t[3]byte{60, 171, 142}:  \"Apple, Inc.\",\n\t[3]byte{60, 174, 105}:  \"ESA Elektroschaltanlagen Grimma GmbH\",\n\t[3]byte{60, 177, 91}:   \"Avaya Inc\",\n\t[3]byte{60, 177, 127}:  \"Wattwatchers Pty Ld\",\n\t[3]byte{60, 178, 51}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{60, 181, 61}:   \"HUNAN GOKE MICROELECTRONICS CO.,LTD\",\n\t[3]byte{60, 182, 183}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{60, 183, 43}:   \"PLUMgrid Inc\",\n\t[3]byte{60, 183, 75}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{60, 183, 146}:  \"Hitachi Maxell, Ltd., Optronics Division\",\n\t[3]byte{60, 184, 122}:  \"Private\",\n\t[3]byte{60, 185, 166}:  \"Belden Deutschland GmbH\",\n\t[3]byte{60, 187, 115}:  \"Shenzhen Xinguodu Technology Co., Ltd.\",\n\t[3]byte{60, 187, 253}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{60, 189, 62}:   \"Beijing Xiaomi Electronics Co., Ltd.\",\n\t[3]byte{60, 189, 216}:  \"LG ELECTRONICS INC\",\n\t[3]byte{60, 190, 225}:  \"NIKON CORPORATION\",\n\t[3]byte{60, 191, 96}:   \"Apple, Inc.\",\n\t[3]byte{60, 192, 121}:  \"Shenzhen One-Nine Intelligent Electronic Science and Technology Co., Ltd\",\n\t[3]byte{60, 192, 198}:  \"d&b audiotechnik GmbH\",\n\t[3]byte{60, 193, 44}:   \"AES Corporation\",\n\t[3]byte{60, 193, 246}:  \"Melange Systems Pvt. Ltd.\",\n\t[3]byte{60, 194, 67}:   \"Nokia Corporation\",\n\t[3]byte{60, 194, 225}:  \"XINHUA CONTROL ENGINEERING CO.,LTD\",\n\t[3]byte{60, 201, 158}:  \"Huiyang Technology Co., Ltd\",\n\t[3]byte{60, 202, 135}:  \"Iders Incorporated\",\n\t[3]byte{60, 203, 124}:  \"TCT mobile ltd\",\n\t[3]byte{60, 205, 54}:   \"Apple, Inc.\",\n\t[3]byte{60, 205, 90}:   \"Technische Alternative GmbH\",\n\t[3]byte{60, 205, 93}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{60, 205, 147}:  \"LG ELECTRONICS INC\",\n\t[3]byte{60, 206, 21}:   \"Mercedes-Benz USA, LLC\",\n\t[3]byte{60, 206, 115}:  \"Cisco Systems, Inc\",\n\t[3]byte{60, 207, 91}:   \"ICOMM HK LIMITED\",\n\t[3]byte{60, 208, 248}:  \"Apple, Inc.\",\n\t[3]byte{60, 209, 110}:  \"Telepower Communication Co., Ltd\",\n\t[3]byte{60, 212, 214}:  \"WirelessWERX, Inc\",\n\t[3]byte{60, 215, 218}:  \"SK Mtek microelectronics(shenzhen)limited\",\n\t[3]byte{60, 217, 43}:   \"Hewlett Packard\",\n\t[3]byte{60, 217, 206}:  \"Eclipse WiFi\",\n\t[3]byte{60, 218, 42}:   \"zte corporation\",\n\t[3]byte{60, 218, 109}:  \"Tiandy Technologies CO.,LTD\",\n\t[3]byte{60, 220, 188}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{60, 221, 137}:  \"SOMO HOLDINGS & TECH. CO.,LTD.\",\n\t[3]byte{60, 223, 30}:   \"Cisco Systems, Inc\",\n\t[3]byte{60, 223, 169}:  \"ARRIS Group, Inc.\",\n\t[3]byte{60, 223, 189}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{60, 224, 114}:  \"Apple, Inc.\",\n\t[3]byte{60, 225, 161}:  \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{60, 227, 231}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{60, 229, 166}:  \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{60, 229, 180}:  \"KIDASEN INDUSTRIA E COMERCIO DE ANTENAS LTDA\",\n\t[3]byte{60, 230, 36}:   \"LG Display \",\n\t[3]byte{60, 232, 36}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{60, 234, 79}:   \"2Wire Inc\",\n\t[3]byte{60, 234, 249}:  \"JUBIXCOLTD\",\n\t[3]byte{60, 234, 251}:  \"NSE AG\",\n\t[3]byte{60, 236, 239}:  \"Super Micro Computer, Inc.\",\n\t[3]byte{60, 239, 140}:  \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{60, 240, 17}:   \"Intel Corporate\",\n\t[3]byte{60, 243, 146}:  \"Virtualtek. Co. Ltd\",\n\t[3]byte{60, 244, 249}:  \"Moda-InnoChips\",\n\t[3]byte{60, 245, 44}:   \"DSPECIALISTS GmbH\",\n\t[3]byte{60, 245, 145}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{60, 245, 204}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{60, 246, 82}:   \"zte corporation\",\n\t[3]byte{60, 247, 42}:   \"Nokia Corporation\",\n\t[3]byte{60, 247, 72}:   \"Shenzhen Linsn Technology Development Co.,Ltd\",\n\t[3]byte{60, 247, 164}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{60, 248, 8}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{60, 248, 98}:   \"Intel Corporate\",\n\t[3]byte{60, 250, 67}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{60, 250, 211}:  \"IEEE Registration Authority\",\n\t[3]byte{60, 251, 92}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{60, 251, 150}:  \"Emcraft Systems LLC\",\n\t[3]byte{60, 253, 254}:  \"Intel Corporate\",\n\t[3]byte{64, 0, 224}:    \"Derek(Shaoguan)Limited\",\n\t[3]byte{64, 1, 7}:      \"Arista Corp\",\n\t[3]byte{64, 1, 122}:    \"Cisco Systems, Inc\",\n\t[3]byte{64, 1, 198}:    \"3COM EUROPE LTD\",\n\t[3]byte{64, 4, 12}:     \"A&T\",\n\t[3]byte{64, 5, 137}:    \"T-Mobile, USA\",\n\t[3]byte{64, 6, 52}:     \"Huawei Device Co., Ltd.\",\n\t[3]byte{64, 6, 160}:    \"Texas Instruments\",\n\t[3]byte{64, 7, 192}:    \"Railtec Systems GmbH\",\n\t[3]byte{64, 13, 16}:    \"ARRIS Group, Inc.\",\n\t[3]byte{64, 14, 103}:   \"Tremol Ltd.\",\n\t[3]byte{64, 14, 133}:   \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{64, 17, 117}:   \"IEEE Registration Authority\",\n\t[3]byte{64, 17, 220}:   \"Sonance\",\n\t[3]byte{64, 18, 228}:   \"Compass-EOS\",\n\t[3]byte{64, 19, 217}:   \"Global ES\",\n\t[3]byte{64, 21, 151}:   \"Protect America, Inc.\",\n\t[3]byte{64, 22, 59}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{64, 22, 126}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{64, 22, 159}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{64, 22, 250}:   \"EKM Metering\",\n\t[3]byte{64, 23, 226}:   \"INTAI TECHNOLOGY CORP.\",\n\t[3]byte{64, 24, 177}:   \"Extreme Networks, Inc.\",\n\t[3]byte{64, 24, 215}:   \"Smartronix, Inc.\",\n\t[3]byte{64, 25, 32}:    \"Movon Corporation\",\n\t[3]byte{64, 27, 95}:    \"WEIFANG GOERTEK ELECTRONICS CO.,LTD\",\n\t[3]byte{64, 29, 89}:    \"Biometric Associates, LP\",\n\t[3]byte{64, 34, 237}:   \"Digital Projection Ltd\",\n\t[3]byte{64, 35, 67}:    \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{64, 37, 194}:   \"Intel Corporate\",\n\t[3]byte{64, 38, 25}:    \"Apple, Inc.\",\n\t[3]byte{64, 39, 11}:    \"Mobileeco Co., Ltd\",\n\t[3]byte{64, 40, 20}:    \"RFI Engineering\",\n\t[3]byte{64, 43, 80}:    \"ARRIS Group, Inc.\",\n\t[3]byte{64, 43, 105}:   \"Kumho Electric Inc.\",\n\t[3]byte{64, 43, 161}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{64, 44, 118}:   \"IEEE Registration Authority\",\n\t[3]byte{64, 44, 244}:   \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{64, 46, 40}:    \"MiXTelematics\",\n\t[3]byte{64, 46, 113}:   \"Texas Instruments\",\n\t[3]byte{64, 47, 134}:   \"LG Innotek\",\n\t[3]byte{64, 48, 4}:     \"Apple, Inc.\",\n\t[3]byte{64, 48, 103}:   \"Conlog (Pty) Ltd\",\n\t[3]byte{64, 49, 60}:    \"XIAOMI Electronics,CO.,LTD\",\n\t[3]byte{64, 51, 26}:    \"Apple, Inc.\",\n\t[3]byte{64, 51, 108}:   \"Godrej & Boyce Mfg. co. ltd\",\n\t[3]byte{64, 55, 173}:   \"Macro Image Technology, Inc.\",\n\t[3]byte{64, 60, 252}:   \"Apple, Inc.\",\n\t[3]byte{64, 61, 236}:   \"HUMAX Co., Ltd.\",\n\t[3]byte{64, 63, 140}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{64, 64, 34}:    \"ZIV\",\n\t[3]byte{64, 64, 40}:    \"ZIV\",\n\t[3]byte{64, 64, 107}:   \"Icomera\",\n\t[3]byte{64, 64, 167}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{64, 66, 41}:    \"Layer3TV, Inc\",\n\t[3]byte{64, 69, 218}:   \"Spreadtrum Communications (Shanghai) Co., Ltd.\",\n\t[3]byte{64, 71, 106}:   \"Astro Gaming\",\n\t[3]byte{64, 72, 253}:   \"IEEE Registration Authority\",\n\t[3]byte{64, 73, 15}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{64, 73, 138}:   \"Synapticon GmbH\",\n\t[3]byte{64, 74, 3}:     \"Zyxel Communications Corporation\",\n\t[3]byte{64, 74, 24}:    \"Addrek Smart Solutions\",\n\t[3]byte{64, 74, 212}:   \"Widex A/S\",\n\t[3]byte{64, 76, 119}:   \"ARRIS Group, Inc.\",\n\t[3]byte{64, 77, 127}:   \"Apple, Inc.\",\n\t[3]byte{64, 77, 142}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{64, 78, 54}:    \"HTC Corporation\",\n\t[3]byte{64, 78, 235}:   \"Higher Way Electronic Co., Ltd.\",\n\t[3]byte{64, 80, 181}:   \"Shenzhen New Species Technology Co., Ltd.\",\n\t[3]byte{64, 80, 224}:   \"Milton Security Group LLC\",\n\t[3]byte{64, 81, 108}:   \"Grandex International Corporation\",\n\t[3]byte{64, 82, 13}:    \"Pico Technology\",\n\t[3]byte{64, 84, 228}:   \"Wearsafe Labs Inc\",\n\t[3]byte{64, 85, 57}:    \"Cisco Systems, Inc\",\n\t[3]byte{64, 85, 130}:   \"Nokia\",\n\t[3]byte{64, 86, 12}:    \"In Home Displays Ltd\",\n\t[3]byte{64, 86, 45}:    \"Smartron India Pvt ltd\",\n\t[3]byte{64, 86, 98}:    \"GuoTengShengHua Electronics LTD.\",\n\t[3]byte{64, 90, 155}:   \"ANOVO\",\n\t[3]byte{64, 91, 216}:   \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{64, 92, 253}:   \"Dell Inc.\",\n\t[3]byte{64, 93, 130}:   \"NETGEAR\",\n\t[3]byte{64, 94, 225}:   \"Shenzhen H&T Intelligent Control Co.,Ltd.\",\n\t[3]byte{64, 95, 190}:   \"RIM\",\n\t[3]byte{64, 95, 194}:   \"Texas Instruments\",\n\t[3]byte{64, 96, 90}:    \"Hawkeye Tech Co. Ltd\",\n\t[3]byte{64, 97, 134}:   \"MICRO-STAR INT'L CO.,LTD\",\n\t[3]byte{64, 97, 142}:   \"Stella-Green Co\",\n\t[3]byte{64, 98, 49}:    \"GIFA\",\n\t[3]byte{64, 98, 52}:    \"Telink Semiconductor (Shanghai) Co., Ltd.\",\n\t[3]byte{64, 98, 182}:   \"Tele system communication\",\n\t[3]byte{64, 98, 234}:   \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{64, 100, 164}:  \"THE FURUKAWA ELECTRIC CO., LTD\",\n\t[3]byte{64, 101, 163}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{64, 102, 122}:  \"mediola - connected living AG\",\n\t[3]byte{64, 104, 38}:   \"Thales UK Limited\",\n\t[3]byte{64, 106, 142}:  \"Hangzhou Puwell OE Tech Ltd.\",\n\t[3]byte{64, 106, 171}:  \"RIM\",\n\t[3]byte{64, 108, 143}:  \"Apple, Inc.\",\n\t[3]byte{64, 111, 42}:   \"BlackBerry RTS\",\n\t[3]byte{64, 112, 9}:    \"ARRIS Group, Inc.\",\n\t[3]byte{64, 112, 74}:   \"Power Idea Technology Limited\",\n\t[3]byte{64, 112, 116}:  \"Life Technology (China) Co., Ltd\",\n\t[3]byte{64, 112, 245}:  \"Apple, Inc.\",\n\t[3]byte{64, 113, 131}:  \"Juniper Networks\",\n\t[3]byte{64, 116, 150}:  \"aFUN TECHNOLOGY INC.\",\n\t[3]byte{64, 116, 224}:  \"Intel Corporate\",\n\t[3]byte{64, 119, 169}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{64, 120, 106}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{64, 120, 117}:  \"IMBEL - Industria de Material Belico do Brasil\",\n\t[3]byte{64, 122, 128}:  \"Nokia Corporation\",\n\t[3]byte{64, 123, 27}:   \"Mettle Networks Inc.\",\n\t[3]byte{64, 124, 125}:  \"Nokia\",\n\t[3]byte{64, 125, 15}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{64, 127, 224}:  \"Glory Star Technics (ShenZhen) Limited\",\n\t[3]byte{64, 130, 86}:   \"Continental Automotive GmbH\",\n\t[3]byte{64, 131, 29}:   \"Apple, Inc.\",\n\t[3]byte{64, 131, 222}:  \"Zebra Technologies Inc\",\n\t[3]byte{64, 132, 147}:  \"Clavister AB\",\n\t[3]byte{64, 134, 46}:   \"JDM MOBILE INTERNET SOLUTION CO., LTD.\",\n\t[3]byte{64, 136, 5}:    \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{64, 136, 47}:   \"Extreme Networks, Inc.\",\n\t[3]byte{64, 136, 224}:  \"Beijing Ereneben Information Technology Limited Shenzhen Branch\",\n\t[3]byte{64, 138, 154}:  \"TITENG CO., Ltd.\",\n\t[3]byte{64, 139, 7}:    \"Actiontec Electronics, Inc\",\n\t[3]byte{64, 139, 246}:  \"Shenzhen TCL New Technology Co., Ltd\",\n\t[3]byte{64, 141, 92}:   \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{64, 149, 5}:    \"ACOINFO TECHNOLOGY CO.,LTD\",\n\t[3]byte{64, 149, 88}:   \"Aisino Corporation\",\n\t[3]byte{64, 149, 189}:  \"NTmore.Co.,Ltd\",\n\t[3]byte{64, 151, 209}:  \"BK Electronics cc\",\n\t[3]byte{64, 152, 76}:   \"Casacom Solutions AG\",\n\t[3]byte{64, 152, 78}:   \"Texas Instruments\",\n\t[3]byte{64, 152, 123}:  \"Aisino Corporation\",\n\t[3]byte{64, 152, 173}:  \"Apple, Inc.\",\n\t[3]byte{64, 153, 34}:   \"AzureWave Technology Inc.\",\n\t[3]byte{64, 155, 13}:   \"Shenzhen Yourf Kwan Industrial Co., Ltd\",\n\t[3]byte{64, 155, 205}:  \"D-Link International\",\n\t[3]byte{64, 156, 40}:   \"Apple, Inc.\",\n\t[3]byte{64, 159, 56}:   \"AzureWave Technology Inc.\",\n\t[3]byte{64, 159, 135}:  \"Jide Technology (Hong Kong) Limited\",\n\t[3]byte{64, 159, 199}:  \"BAEKCHUN I&C Co., Ltd.\",\n\t[3]byte{64, 161, 8}:    \"Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.\",\n\t[3]byte{64, 162, 219}:  \"Amazon Technologies Inc.\",\n\t[3]byte{64, 163, 204}:  \"Intel Corporate\",\n\t[3]byte{64, 165, 239}:  \"Shenzhen Four Seas Global Link Network Technology Co., Ltd.\",\n\t[3]byte{64, 166, 119}:  \"Juniper Networks\",\n\t[3]byte{64, 166, 164}:  \"PassivSystems Ltd\",\n\t[3]byte{64, 166, 183}:  \"Intel Corporate\",\n\t[3]byte{64, 166, 217}:  \"Apple, Inc.\",\n\t[3]byte{64, 166, 232}:  \"Cisco Systems, Inc\",\n\t[3]byte{64, 168, 240}:  \"Hewlett Packard\",\n\t[3]byte{64, 169, 63}:   \"Pivotal Commware, Inc.\",\n\t[3]byte{64, 170, 86}:   \"China Dragon Technology Limited\",\n\t[3]byte{64, 172, 141}:  \"Data Management, Inc.\",\n\t[3]byte{64, 176, 52}:   \"Hewlett Packard\",\n\t[3]byte{64, 176, 118}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{64, 176, 250}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{64, 178, 200}:  \"Nortel Networks\",\n\t[3]byte{64, 179, 14}:   \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{64, 179, 30}:   \"Universal Electronics, Inc.\",\n\t[3]byte{64, 179, 149}:  \"Apple, Inc.\",\n\t[3]byte{64, 179, 205}:  \"Chiyoda Electronics Co.,Ltd.\",\n\t[3]byte{64, 179, 252}:  \"Logital Co. Limited \",\n\t[3]byte{64, 180, 205}:  \"Amazon Technologies Inc.\",\n\t[3]byte{64, 180, 240}:  \"Juniper Networks\",\n\t[3]byte{64, 182, 136}:  \"LEGIC Identsystems AG\",\n\t[3]byte{64, 182, 177}:  \"SUNGSAM CO,.Ltd\",\n\t[3]byte{64, 182, 231}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{64, 183, 243}:  \"ARRIS Group, Inc.\",\n\t[3]byte{64, 184, 55}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{64, 184, 154}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{64, 185, 60}:   \"Hewlett Packard Enterprise\",\n\t[3]byte{64, 186, 97}:   \"ARIMA Communications Corp.\",\n\t[3]byte{64, 188, 96}:   \"Apple, Inc.\",\n\t[3]byte{64, 188, 104}:  \"Wuhan Funshion Online Technologies Co.,Ltd\",\n\t[3]byte{64, 188, 115}:  \"Cronoplast  S.L.\",\n\t[3]byte{64, 188, 139}:  \"itelio GmbH\",\n\t[3]byte{64, 189, 50}:   \"Texas Instruments\",\n\t[3]byte{64, 189, 158}:  \"Physio-Control, Inc\",\n\t[3]byte{64, 191, 23}:   \"Digistar Telecom. SA\",\n\t[3]byte{64, 194, 69}:   \"Shenzhen Hexicom Technology Co., Ltd.\",\n\t[3]byte{64, 195, 198}:  \"SnapRoute\",\n\t[3]byte{64, 196, 214}:  \"ChongQing Camyu Technology Development Co.,Ltd.\",\n\t[3]byte{64, 198, 42}:   \"Shanghai Jing Ren Electronic Technology Co., Ltd.\",\n\t[3]byte{64, 199, 41}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{64, 199, 201}:  \"Naviit Inc.\",\n\t[3]byte{64, 200, 31}:   \"Shenzhen Xinguodu Technology Co., Ltd.\",\n\t[3]byte{64, 200, 203}:  \"AM Telecom co., Ltd.\",\n\t[3]byte{64, 203, 168}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{64, 203, 192}:  \"Apple, Inc.\",\n\t[3]byte{64, 205, 58}:   \"Z3 Technology\",\n\t[3]byte{64, 205, 122}:  \"Qingdao Hisense Communications Co.,Ltd.\",\n\t[3]byte{64, 206, 36}:   \"Cisco Systems, Inc\",\n\t[3]byte{64, 210, 95}:   \"ITEL MOBILE LIMITED\",\n\t[3]byte{64, 210, 138}:  \"Nintendo Co., Ltd.\",\n\t[3]byte{64, 211, 45}:   \"Apple, Inc.\",\n\t[3]byte{64, 211, 87}:   \"Ison Technology Co., Ltd.\",\n\t[3]byte{64, 211, 174}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{64, 212, 14}:   \"Biodata Ltd\",\n\t[3]byte{64, 213, 89}:   \"MICRO S.E.R.I.\",\n\t[3]byte{64, 214, 60}:   \"Equitech Industrial(DongGuan)Co.,Ltd\",\n\t[3]byte{64, 216, 85}:   \"IEEE Registration Authority\",\n\t[3]byte{64, 220, 157}:  \"HAJEN\",\n\t[3]byte{64, 220, 165}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{64, 221, 209}:  \"Beautiful Card Corporation\",\n\t[3]byte{64, 222, 173}:  \"Juniper Networks\",\n\t[3]byte{64, 223, 2}:    \"LINE BIZ Plus\",\n\t[3]byte{64, 226, 48}:   \"AzureWave Technology Inc.\",\n\t[3]byte{64, 227, 214}:  \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{64, 231, 48}:   \"DEY Storage Systems, Inc.\",\n\t[3]byte{64, 231, 147}:  \"Shenzhen Siviton Technology Co.,Ltd\",\n\t[3]byte{64, 234, 206}:  \"FOUNDER BROADBAND NETWORK SERVICE CO.,LTD\",\n\t[3]byte{64, 236, 153}:  \"Intel Corporate\",\n\t[3]byte{64, 236, 248}:  \"Siemens AG\",\n\t[3]byte{64, 237, 152}:  \"IEEE Registration Authority\",\n\t[3]byte{64, 238, 221}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{64, 239, 76}:   \"Fihonest communication co.,Ltd\",\n\t[3]byte{64, 240, 47}:   \"Liteon Technology Corporation\",\n\t[3]byte{64, 240, 78}:   \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{64, 240, 120}:  \"Cisco Systems, Inc\",\n\t[3]byte{64, 241, 76}:   \"ISE Europe SPRL\",\n\t[3]byte{64, 242, 1}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{64, 242, 28}:   \"DASAN Zhone Solutions\",\n\t[3]byte{64, 242, 233}:  \"IBM\",\n\t[3]byte{64, 243, 8}:    \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{64, 243, 133}:  \"IEEE Registration Authority\",\n\t[3]byte{64, 244, 7}:    \"Nintendo Co., Ltd.\",\n\t[3]byte{64, 244, 19}:   \"Rubezh\",\n\t[3]byte{64, 244, 32}:   \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{64, 244, 236}:  \"Cisco Systems, Inc\",\n\t[3]byte{64, 245, 32}:   \"Espressif Inc.\",\n\t[3]byte{64, 245, 46}:   \"Leica Microsystems (Schweiz) AG\",\n\t[3]byte{64, 249, 213}:  \"Tecore Networks\",\n\t[3]byte{64, 250, 127}:  \"Preh Car Connect GmbH\",\n\t[3]byte{64, 252, 137}:  \"ARRIS Group, Inc.\",\n\t[3]byte{64, 254, 13}:   \"MAXIO\",\n\t[3]byte{68, 0, 16}:     \"Apple, Inc.\",\n\t[3]byte{68, 0, 73}:     \"Amazon Technologies Inc.\",\n\t[3]byte{68, 0, 77}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{68, 1, 187}:    \"SHENZHEN BILIAN ELECTRONIC CO.，LTD\",\n\t[3]byte{68, 3, 44}:     \"Intel Corporate\",\n\t[3]byte{68, 3, 119}:    \"IEEE Registration Authority\",\n\t[3]byte{68, 3, 167}:    \"Cisco Systems, Inc\",\n\t[3]byte{68, 4, 68}:     \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{68, 7, 11}:     \"Google, Inc.\",\n\t[3]byte{68, 9, 184}:    \"Salcomp (Shenzhen) CO., LTD.\",\n\t[3]byte{68, 12, 253}:   \"NetMan Co., Ltd.\",\n\t[3]byte{68, 16, 254}:   \"Huizhou Foryou General Electronics Co., Ltd.\",\n\t[3]byte{68, 17, 2}:     \"EDMI  Europe Ltd\",\n\t[3]byte{68, 17, 194}:   \"Telegartner Karl Gartner GmbH\",\n\t[3]byte{68, 19, 25}:    \"WKK TECHNOLOGY LTD.\",\n\t[3]byte{68, 19, 208}:   \"zte corporation\",\n\t[3]byte{68, 20, 65}:    \"AudioControl Inc.\",\n\t[3]byte{68, 22, 34}:    \"Microsoft Corporation\",\n\t[3]byte{68, 24, 71}:    \"HUNAN SCROWN ELECTRONIC INFORMATION TECH.CO.,LTD\",\n\t[3]byte{68, 24, 79}:    \"Fitview\",\n\t[3]byte{68, 24, 253}:   \"Apple, Inc.\",\n\t[3]byte{68, 25, 182}:   \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{68, 26, 250}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{68, 28, 18}:    \"Technicolor CH USA Inc.\",\n\t[3]byte{68, 28, 127}:   \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{68, 28, 168}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{68, 30, 145}:   \"ARVIDA Intelligent Electronics Technology  Co.,Ltd.\",\n\t[3]byte{68, 30, 152}:   \"Ruckus Wireless\",\n\t[3]byte{68, 30, 161}:   \"Hewlett Packard\",\n\t[3]byte{68, 34, 124}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{68, 34, 149}:   \"China Mobile Iot Limited company\",\n\t[3]byte{68, 34, 241}:   \"S.FAC, INC\",\n\t[3]byte{68, 35, 124}:   \"Beijing Xiaomi Mobile Software Co., Ltd\",\n\t[3]byte{68, 35, 170}:   \"Farmage Co., Ltd.\",\n\t[3]byte{68, 37, 187}:   \"Bamboo Entertainment Corporation\",\n\t[3]byte{68, 39, 243}:   \"70mai Co.,Ltd.\",\n\t[3]byte{68, 40, 163}:   \"Jiangsu fulian  Communication Technology Co., Ltd.\",\n\t[3]byte{68, 41, 56}:    \"NietZsche enterprise Co.Ltd.\",\n\t[3]byte{68, 42, 96}:    \"Apple, Inc.\",\n\t[3]byte{68, 42, 255}:   \"E3 Technology, Inc.\",\n\t[3]byte{68, 43, 3}:     \"Cisco Systems, Inc\",\n\t[3]byte{68, 44, 5}:     \"AMPAK Technology, Inc.\",\n\t[3]byte{68, 49, 146}:   \"Hewlett Packard\",\n\t[3]byte{68, 50, 42}:    \"Avaya Inc\",\n\t[3]byte{68, 50, 200}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{68, 51, 76}:    \"Shenzhen Bilian electronic CO.,LTD\",\n\t[3]byte{68, 52, 143}:   \"MXT INDUSTRIAL LTDA\",\n\t[3]byte{68, 52, 167}:   \"ARRIS Group, Inc.\",\n\t[3]byte{68, 53, 111}:   \"Neterix\",\n\t[3]byte{68, 55, 8}:     \"MRV Comunications\",\n\t[3]byte{68, 55, 25}:    \"2 Save Energy Ltd\",\n\t[3]byte{68, 55, 111}:   \"Young Electric Sign Co\",\n\t[3]byte{68, 55, 230}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{68, 56, 57}:    \"Cumulus Networks, inc\",\n\t[3]byte{68, 57, 196}:   \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{68, 60, 136}:   \"FICOSA MAROC INTERNATIONAL\",\n\t[3]byte{68, 60, 156}:   \"Pintsch Tiefenbach GmbH\",\n\t[3]byte{68, 61, 33}:    \"Nuvolt\",\n\t[3]byte{68, 62, 7}:     \"Electrolux\",\n\t[3]byte{68, 62, 178}:   \"DEOTRON Co., LTD.\",\n\t[3]byte{68, 66, 47}:    \"TESTOP CO.,LTD.\",\n\t[3]byte{68, 68, 80}:    \"OttoQ\",\n\t[3]byte{68, 70, 135}:   \"Realme Chongqing MobileTelecommunications Corp Ltd\",\n\t[3]byte{68, 71, 204}:   \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{68, 72, 145}:   \"HDMI Licensing, LLC\",\n\t[3]byte{68, 72, 193}:   \"Hewlett Packard Enterprise\",\n\t[3]byte{68, 74, 101}:   \"Silverflare Ltd.\",\n\t[3]byte{68, 74, 176}:   \"Zhejiang Moorgen Intelligence Technology Co., Ltd\",\n\t[3]byte{68, 74, 219}:   \"Apple, Inc.\",\n\t[3]byte{68, 75, 93}:    \"GE Healthcare\",\n\t[3]byte{68, 75, 126}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{68, 76, 12}:    \"Apple, Inc.\",\n\t[3]byte{68, 76, 168}:   \"Arista Networks\",\n\t[3]byte{68, 78, 26}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{68, 78, 109}:   \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{68, 79, 94}:    \"Pan Studios Co.,Ltd.\",\n\t[3]byte{68, 81, 219}:   \"Raytheon BBN Technologies\",\n\t[3]byte{68, 84, 192}:   \"Thompson Aerospace\",\n\t[3]byte{68, 85, 177}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{68, 85, 196}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{68, 86, 141}:   \"PNC Technologies  Co., Ltd.\",\n\t[3]byte{68, 86, 183}:   \"Spawn Labs, Inc\",\n\t[3]byte{68, 86, 226}:   \"Sichuan Tianyi Comheart Telecom Co., Ltd.\",\n\t[3]byte{68, 88, 41}:    \"Cisco SPVTG\",\n\t[3]byte{68, 89, 159}:   \"Criticare Systems, Inc\",\n\t[3]byte{68, 89, 227}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{68, 92, 233}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{68, 93, 94}:    \"SHENZHEN Coolkit Technology CO.,LTD\",\n\t[3]byte{68, 94, 205}:   \"Razer Inc\",\n\t[3]byte{68, 94, 243}:   \"Tonalite Holding B.V.\",\n\t[3]byte{68, 95, 122}:   \"Shihlin Electric & Engineering Corp.\",\n\t[3]byte{68, 95, 140}:   \"Intercel Group Limited\",\n\t[3]byte{68, 97, 50}:    \"ecobee inc\",\n\t[3]byte{68, 97, 156}:   \"FONsystem co. ltd.\",\n\t[3]byte{68, 98, 70}:    \"Comat AG\",\n\t[3]byte{68, 101, 13}:   \"Amazon Technologies Inc.\",\n\t[3]byte{68, 101, 106}:  \"Mega Video Electronic(HK) Industry Co., Ltd\",\n\t[3]byte{68, 101, 127}:  \"Calix Inc.\",\n\t[3]byte{68, 102, 110}:  \"IP-LINE\",\n\t[3]byte{68, 102, 252}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{68, 103, 71}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{68, 103, 85}:   \"Orbit Irrigation\",\n\t[3]byte{68, 104, 12}:   \"Wacom Co.,Ltd.\",\n\t[3]byte{68, 104, 171}:  \"JUIN COMPANY, LIMITED\",\n\t[3]byte{68, 106, 46}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{68, 106, 183}:  \"ARRIS Group, Inc.\",\n\t[3]byte{68, 108, 36}:   \"Reallin Electronic Co.,Ltd\",\n\t[3]byte{68, 109, 87}:   \"Liteon Technology Corporation\",\n\t[3]byte{68, 109, 108}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{68, 110, 229}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{68, 112, 11}:   \"IFFU\",\n\t[3]byte{68, 112, 152}:  \"MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED\",\n\t[3]byte{68, 115, 214}:  \"Logitech\",\n\t[3]byte{68, 116, 108}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{68, 118, 84}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{68, 120, 62}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{68, 123, 187}:  \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{68, 123, 196}:  \"DualShine Technology(SZ)Co.,Ltd\",\n\t[3]byte{68, 124, 127}:  \"Innolight Technology Corporation\",\n\t[3]byte{68, 125, 165}:  \"VTION INFORMATION TECHNOLOGY (FUJIAN) CO.,LTD\",\n\t[3]byte{68, 126, 118}:  \"Trek Technology (S) Pte Ltd\",\n\t[3]byte{68, 126, 149}:  \"Alpha and Omega, Inc\",\n\t[3]byte{68, 127, 119}:  \"Connected Home\",\n\t[3]byte{68, 128, 235}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{68, 130, 229}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{68, 131, 18}:   \"Star-Net\",\n\t[3]byte{68, 133, 0}:    \"Intel Corporate\",\n\t[3]byte{68, 134, 193}:  \"Siemens Low Voltage & Products\",\n\t[3]byte{68, 135, 35}:   \"HOYA SERVICE CORPORATION\",\n\t[3]byte{68, 135, 219}:  \"Tymphany Acoustic Technology (Huizhou) Co.,  Ltd.\",\n\t[3]byte{68, 135, 252}:  \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{68, 136, 203}:  \"Camco Technologies NV\",\n\t[3]byte{68, 138, 91}:   \"Micro-Star INT'L CO., LTD.\",\n\t[3]byte{68, 140, 82}:   \"KTIS CO., Ltd\",\n\t[3]byte{68, 141, 191}:  \"Rhino Mobility LLC\",\n\t[3]byte{68, 142, 18}:   \"DT Research, Inc.\",\n\t[3]byte{68, 142, 129}:  \"VIG\",\n\t[3]byte{68, 143, 23}:   \"Samsung Electronics Co., Ltd. ARTIK\",\n\t[3]byte{68, 145, 96}:   \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{68, 145, 124}:  \"HMD Global Oy\",\n\t[3]byte{68, 145, 219}:  \"Shanghai Huaqin Telecom Technology Co.,Ltd\",\n\t[3]byte{68, 148, 252}:  \"NETGEAR\",\n\t[3]byte{68, 149, 250}:  \"Qingdao Santong Digital Technology Co.Ltd\",\n\t[3]byte{68, 150, 43}:   \"Aidon Oy\",\n\t[3]byte{68, 151, 90}:   \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{68, 155, 120}:  \"The Now Factory\",\n\t[3]byte{68, 156, 181}:  \"Alcomp, Inc\",\n\t[3]byte{68, 158, 249}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{68, 159, 127}:  \"DataCore Software Corporation\",\n\t[3]byte{68, 161, 145}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{68, 164, 45}:   \"TCT mobile ltd\",\n\t[3]byte{68, 164, 102}:  \"GROUPE LDLC\",\n\t[3]byte{68, 165, 78}:   \"Qorvo International Pte. Ltd.\",\n\t[3]byte{68, 165, 110}:  \"NETGEAR\",\n\t[3]byte{68, 166, 30}:   \"INGRAM MICRO SERVICES\",\n\t[3]byte{68, 166, 137}:  \"PROMAX ELECTRONICA SA\",\n\t[3]byte{68, 166, 229}:  \"THINKING TECHNOLOGY CO.,LTD\",\n\t[3]byte{68, 167, 207}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{68, 168, 66}:   \"Dell Inc.\",\n\t[3]byte{68, 168, 194}:  \"SEWOO TECH CO., LTD\",\n\t[3]byte{68, 170, 39}:   \"udworks Co., Ltd.\",\n\t[3]byte{68, 170, 80}:   \"Juniper Networks\",\n\t[3]byte{68, 170, 232}:  \"Nanotec Electronic GmbH & Co. KG\",\n\t[3]byte{68, 170, 245}:  \"ARRIS Group, Inc.\",\n\t[3]byte{68, 173, 25}:   \"XINGFEI （H.K）LIMITED \",\n\t[3]byte{68, 173, 177}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{68, 173, 217}:  \"Cisco Systems, Inc\",\n\t[3]byte{68, 174, 171}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{68, 175, 40}:   \"Intel Corporate\",\n\t[3]byte{68, 178, 149}:  \"Sichuan\\u00a0AI-Link\\u00a0Technology\\u00a0Co.,\\u00a0Ltd.\",\n\t[3]byte{68, 179, 45}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{68, 179, 130}:  \"Kuang-chi Institute of Advanced Technology\",\n\t[3]byte{68, 180, 18}:   \"SIUS AG\",\n\t[3]byte{68, 180, 51}:   \"tide.co.,ltd\",\n\t[3]byte{68, 180, 98}:   \"Flextronics Tech.(Ind) Pvt Ltd\",\n\t[3]byte{68, 185, 148}:  \"Douglas Lighting Controls\",\n\t[3]byte{68, 186, 70}:   \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{68, 187, 59}:   \"Google, Inc.\",\n\t[3]byte{68, 191, 227}:  \"Shenzhen Longtech Electronics Co.,Ltd\",\n\t[3]byte{68, 193, 92}:   \"Texas Instruments\",\n\t[3]byte{68, 194, 51}:   \"Guangzhou Comet Technology Development Co.Ltd\",\n\t[3]byte{68, 195, 6}:    \"SIFROM Inc.\",\n\t[3]byte{68, 195, 70}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{68, 195, 155}:  \"OOO RUBEZH NPO\",\n\t[3]byte{68, 196, 169}:  \"Opticom Communication, LLC\",\n\t[3]byte{68, 197, 111}:  \"NGN Easy Satfinder (Tianjin) Electronic Co., Ltd\",\n\t[3]byte{68, 198, 93}:   \"Apple, Inc.\",\n\t[3]byte{68, 198, 155}:  \"Wuhan Feng Tian Information Network CO.,LTD\",\n\t[3]byte{68, 199, 252}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{68, 200, 116}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{68, 201, 162}:  \"Greenwald Industries\",\n\t[3]byte{68, 203, 139}:  \"LG Innotek\",\n\t[3]byte{68, 205, 14}:   \"FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.\",\n\t[3]byte{68, 206, 125}:  \"SFR\",\n\t[3]byte{68, 209, 94}:   \"Shanghai Kingto Information Technology Ltd\",\n\t[3]byte{68, 209, 250}:  \"Shenzhen Yunlink Technology Co., Ltd\",\n\t[3]byte{68, 210, 68}:   \"Seiko Epson Corporation\",\n\t[3]byte{68, 210, 202}:  \"Anvia TV Oy\",\n\t[3]byte{68, 211, 173}:  \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{68, 211, 202}:  \"Cisco Systems, Inc\",\n\t[3]byte{68, 212, 55}:   \"Inteno Broadband Technology AB\",\n\t[3]byte{68, 212, 224}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{68, 213, 165}:  \"AddOn Computer\",\n\t[3]byte{68, 213, 242}:  \"IEEE Registration Authority\",\n\t[3]byte{68, 214, 61}:   \"Talari Networks\",\n\t[3]byte{68, 214, 225}:  \"Snuza International Pty. Ltd.\",\n\t[3]byte{68, 215, 145}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{68, 216, 50}:   \"AzureWave Technology Inc.\",\n\t[3]byte{68, 216, 120}:  \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{68, 216, 132}:  \"Apple, Inc.\",\n\t[3]byte{68, 217, 231}:  \"Ubiquiti Networks Inc.\",\n\t[3]byte{68, 220, 78}:   \"ITEL MOBILE LIMITED\",\n\t[3]byte{68, 220, 145}:  \"PLANEX COMMUNICATIONS INC.\",\n\t[3]byte{68, 220, 203}:  \"SEMINDIA SYSTEMS PVT LTD\",\n\t[3]byte{68, 224, 142}:  \"Cisco SPVTG\",\n\t[3]byte{68, 225, 55}:   \"ARRIS Group, Inc.\",\n\t[3]byte{68, 228, 154}:  \"OMNITRONICS PTY LTD\",\n\t[3]byte{68, 228, 217}:  \"Cisco Systems, Inc\",\n\t[3]byte{68, 228, 238}:  \"Wistron Neweb Corporation\",\n\t[3]byte{68, 230, 110}:  \"Apple, Inc.\",\n\t[3]byte{68, 230, 176}:  \"China Mobile IOT Company Limited\",\n\t[3]byte{68, 232, 165}:  \"Myreka Technologies Sdn. Bhd.\",\n\t[3]byte{68, 233, 221}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{68, 234, 75}:   \"Actlas Inc.\",\n\t[3]byte{68, 234, 216}:  \"Texas Instruments\",\n\t[3]byte{68, 236, 206}:  \"Juniper Networks\",\n\t[3]byte{68, 237, 87}:   \"Longicorn, inc.\",\n\t[3]byte{68, 238, 2}:    \"MTI Ltd.\",\n\t[3]byte{68, 238, 48}:   \"Budelmann Elektronik GmbH\",\n\t[3]byte{68, 239, 191}:  \"China Dragon Technology Limited\",\n\t[3]byte{68, 239, 207}:  \"UGENE SOLUTION inc.\",\n\t[3]byte{68, 240, 52}:   \"Kaonmedia CO., LTD.\",\n\t[3]byte{68, 244, 54}:   \"zte corporation\",\n\t[3]byte{68, 244, 89}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{68, 244, 119}:  \"Juniper Networks\",\n\t[3]byte{68, 244, 231}:  \"Cohesity Inc\",\n\t[3]byte{68, 248, 73}:   \"Union Pacific Railroad\",\n\t[3]byte{68, 249, 113}:  \"SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{68, 251, 66}:   \"Apple, Inc.\",\n\t[3]byte{68, 251, 90}:   \"zte corporation\",\n\t[3]byte{68, 253, 163}:  \"Everysight LTD.\",\n\t[3]byte{68, 254, 59}:   \"Arcadyan Corporation\",\n\t[3]byte{68, 255, 186}:  \"zte corporation\",\n\t[3]byte{72, 0, 49}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 0, 51}:     \"Technicolor CH USA Inc.\",\n\t[3]byte{72, 1, 197}:    \"OnePlus Technology (Shenzhen) Co., Ltd\",\n\t[3]byte{72, 2, 42}:     \"B-Link Electronic Limited\",\n\t[3]byte{72, 3, 98}:     \"DESAY ELECTRONICS(HUIZHOU)CO.,LTD\",\n\t[3]byte{72, 4, 159}:    \"ELECOM CO., LTD\",\n\t[3]byte{72, 5, 226}:    \"Huawei Device Co., Ltd.\",\n\t[3]byte{72, 6, 106}:    \"Tempered Networks, Inc.\",\n\t[3]byte{72, 11, 178}:   \"IEEE Registration Authority\",\n\t[3]byte{72, 12, 73}:    \"NAKAYO Inc\",\n\t[3]byte{72, 14, 236}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{72, 15, 207}:   \"Hewlett Packard\",\n\t[3]byte{72, 16, 99}:    \"NTT Innovation Institute, Inc.\",\n\t[3]byte{72, 18, 73}:    \"Luxcom Technologies Inc.\",\n\t[3]byte{72, 19, 126}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{72, 19, 243}:   \"BBK EDUCATIONAL ELECTRONICS CORP.,LTD.\",\n\t[3]byte{72, 22, 147}:   \"Lear Corporation GmbH\",\n\t[3]byte{72, 23, 76}:    \"MicroPower technologies\",\n\t[3]byte{72, 24, 66}:    \"Shanghai Winaas Co. Equipment Co. Ltd.\",\n\t[3]byte{72, 24, 250}:   \"Nocsys\",\n\t[3]byte{72, 26, 132}:   \"Pointer Telocation Ltd\",\n\t[3]byte{72, 27, 210}:   \"Intron Scientific co., ltd.\",\n\t[3]byte{72, 29, 112}:   \"Cisco SPVTG\",\n\t[3]byte{72, 33, 11}:    \"PEGATRON CORPORATION\",\n\t[3]byte{72, 33, 108}:   \"China Mobile IOT Company Limited\",\n\t[3]byte{72, 35, 53}:    \"Dialog Semiconductor Hellas SA\",\n\t[3]byte{72, 38, 44}:    \"Apple, Inc.\",\n\t[3]byte{72, 38, 232}:   \"Tek-Air Systems, Inc.\",\n\t[3]byte{72, 39, 89}:    \"Levven Electronics Ltd.\",\n\t[3]byte{72, 39, 234}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{72, 40, 47}:    \"zte corporation\",\n\t[3]byte{72, 42, 227}:   \"Wistron InfoComm(Kunshan)Co.,Ltd.\",\n\t[3]byte{72, 44, 160}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{72, 44, 208}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 44, 234}:   \"Motorola Inc Business Light Radios\",\n\t[3]byte{72, 51, 221}:   \"ZENNIO AVANCE Y TECNOLOGIA, S.L.\",\n\t[3]byte{72, 52, 61}:    \"IEP GmbH\",\n\t[3]byte{72, 53, 46}:    \"Shenzhen Wolck Network Product Co.,LTD\",\n\t[3]byte{72, 54, 95}:    \"Wintecronics Ltd.\",\n\t[3]byte{72, 57, 116}:   \"Proware Technologies Co., Ltd.\",\n\t[3]byte{72, 59, 56}:    \"Apple, Inc.\",\n\t[3]byte{72, 60, 12}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 61, 50}:    \"Syscor Controls &amp; Automation\",\n\t[3]byte{72, 63, 218}:   \"Espressif Inc.\",\n\t[3]byte{72, 63, 233}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 67, 90}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 67, 124}:   \"Apple, Inc.\",\n\t[3]byte{72, 67, 221}:   \"Amazon Technologies Inc.\",\n\t[3]byte{72, 68, 135}:   \"Cisco SPVTG\",\n\t[3]byte{72, 68, 247}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{72, 69, 32}:    \"Intel Corporate\",\n\t[3]byte{72, 70, 193}:   \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{72, 70, 241}:   \"Uros Oy\",\n\t[3]byte{72, 70, 251}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 73, 199}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{72, 74, 48}:    \"George Robotics Limited\",\n\t[3]byte{72, 74, 233}:   \"Hewlett Packard Enterprise\",\n\t[3]byte{72, 75, 170}:   \"Apple, Inc.\",\n\t[3]byte{72, 75, 212}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{72, 76, 134}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{72, 77, 126}:   \"Dell Inc.\",\n\t[3]byte{72, 78, 252}:   \"ARRIS Group, Inc.\",\n\t[3]byte{72, 80, 115}:   \"Microsoft Corporation\",\n\t[3]byte{72, 81, 105}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{72, 81, 183}:   \"Intel Corporate\",\n\t[3]byte{72, 82, 97}:    \"SOREEL\",\n\t[3]byte{72, 84, 21}:    \"NET RULES TECNOLOGIA EIRELI\",\n\t[3]byte{72, 85, 92}:    \"Wu Qi Technologies,Inc.\",\n\t[3]byte{72, 85, 95}:    \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{72, 87, 2}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 87, 221}:   \"Facebook Inc\",\n\t[3]byte{72, 89, 41}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{72, 89, 164}:   \"zte corporation\",\n\t[3]byte{72, 90, 63}:    \"WISOL\",\n\t[3]byte{72, 90, 182}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{72, 91, 57}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{72, 93, 54}:    \"Verizon \",\n\t[3]byte{72, 93, 96}:    \"AzureWave Technology Inc.\",\n\t[3]byte{72, 93, 235}:   \"Just Add Power\",\n\t[3]byte{72, 95, 153}:   \"Cloud Network Technology (Samoa) Limited\",\n\t[3]byte{72, 96, 95}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{72, 96, 188}:   \"Apple, Inc.\",\n\t[3]byte{72, 97, 163}:   \"Concern \\\"Axion\\\" JSC\",\n\t[3]byte{72, 98, 118}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 101, 238}:  \"IEEE Registration Authority\",\n\t[3]byte{72, 104, 52}:   \"Silicon Motion, Inc.\",\n\t[3]byte{72, 107, 44}:   \"BBK EDUCATIONAL ELECTRONICS CORP.,LTD.\",\n\t[3]byte{72, 107, 145}:  \"Fleetwood Group Inc.\",\n\t[3]byte{72, 109, 187}:  \"Vestel Elektronik San ve Tic. A.Ş.\",\n\t[3]byte{72, 110, 112}:  \"Zhejiang Tmall Technology Co., Ltd.\",\n\t[3]byte{72, 110, 115}:  \"Pica8, Inc.\",\n\t[3]byte{72, 110, 251}:  \"Davit System Technology Co., Ltd.\",\n\t[3]byte{72, 111, 210}:  \"StorSimple Inc\",\n\t[3]byte{72, 113, 25}:   \"SGB GROUP LTD.\",\n\t[3]byte{72, 116, 110}:  \"Apple, Inc.\",\n\t[3]byte{72, 117, 131}:  \"Intellion AG\",\n\t[3]byte{72, 118, 4}:    \"Private\",\n\t[3]byte{72, 119, 70}:   \"Calix Inc.\",\n\t[3]byte{72, 121, 77}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{72, 122, 85}:   \"ALE International\",\n\t[3]byte{72, 122, 218}:  \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{72, 122, 246}:  \"NCS ELECTRICAL SDN BHD\",\n\t[3]byte{72, 122, 255}:  \"ESSYS\",\n\t[3]byte{72, 123, 94}:   \"SMT TELECOMM HK\",\n\t[3]byte{72, 123, 107}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 125, 46}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{72, 130, 68}:   \"Life Fitness / Div. of Brunswick\",\n\t[3]byte{72, 130, 242}:  \"Appel Elektronik GmbH\",\n\t[3]byte{72, 131, 180}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{72, 131, 199}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{72, 134, 232}:  \"Microsoft Corporation\",\n\t[3]byte{72, 135, 45}:   \"SHEN ZHEN DA XIA LONG QUE TECHNOLOGY CO.,LTD\",\n\t[3]byte{72, 135, 100}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{72, 136, 3}:    \"ManTechnology Inc.\",\n\t[3]byte{72, 136, 30}:   \"EthoSwitch LLC\",\n\t[3]byte{72, 136, 202}:  \"Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.\",\n\t[3]byte{72, 137, 231}:  \"Intel Corporate\",\n\t[3]byte{72, 138, 210}:  \"MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{72, 141, 54}:   \"Arcadyan Corporation\",\n\t[3]byte{72, 142, 66}:   \"DIGALOG GmbH\",\n\t[3]byte{72, 142, 239}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 143, 90}:   \"Routerboard.com\",\n\t[3]byte{72, 144, 47}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{72, 145, 83}:   \"Weinmann Geräte für Medizin GmbH + Co. KG\",\n\t[3]byte{72, 145, 246}:  \"Shenzhen Reach software technology CO.,LTD\",\n\t[3]byte{72, 149, 7}:    \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{72, 152, 202}:  \"Sichuan\\u00a0AI-Link\\u00a0Technology\\u00a0Co.,\\u00a0Ltd.\",\n\t[3]byte{72, 154, 66}:   \"Technomate Ltd\",\n\t[3]byte{72, 155, 213}:  \"Extreme Networks, Inc.\",\n\t[3]byte{72, 155, 226}:  \"SCI Innovations Ltd\",\n\t[3]byte{72, 157, 24}:   \"Flashbay Limited\",\n\t[3]byte{72, 157, 36}:   \"BlackBerry RTS\",\n\t[3]byte{72, 157, 209}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{72, 160, 248}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{72, 161, 149}:  \"Apple, Inc.\",\n\t[3]byte{72, 162, 45}:   \"Shenzhen Huaxuchang Telecom Technology Co.,Ltd\",\n\t[3]byte{72, 162, 183}:  \"Kodofon JSC\",\n\t[3]byte{72, 162, 184}:  \"Chengdu Vision-Zenith Tech.Co,.Ltd\",\n\t[3]byte{72, 162, 230}:  \"Resideo\",\n\t[3]byte{72, 163, 128}:  \"Gionee Communication Equipment Co.,Ltd.\",\n\t[3]byte{72, 164, 114}:  \"Intel Corporate\",\n\t[3]byte{72, 164, 147}:  \"TAIYO YUDEN CO.,LTD\",\n\t[3]byte{72, 165, 231}:  \"Nintendo Co.,Ltd\",\n\t[3]byte{72, 166, 184}:  \"Sonos, Inc.\",\n\t[3]byte{72, 166, 210}:  \"GJsun Optical Science and Tech Co.,Ltd.\",\n\t[3]byte{72, 167, 60}:   \"Sichuan tianyi kanghe communications co., LTD\",\n\t[3]byte{72, 167, 78}:   \"zte corporation\",\n\t[3]byte{72, 169, 28}:   \"Apple, Inc.\",\n\t[3]byte{72, 169, 210}:  \"Wistron Neweb Corporation\",\n\t[3]byte{72, 170, 93}:   \"Store Electronic Systems\",\n\t[3]byte{72, 173, 8}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 176, 45}:   \"NVIDIA Corporation\",\n\t[3]byte{72, 178, 83}:   \"Marketaxess Corporation\",\n\t[3]byte{72, 181, 167}:  \"Glory Horse Industries Ltd.\",\n\t[3]byte{72, 182, 32}:   \"ROLI Ltd.\",\n\t[3]byte{72, 184, 163}:  \"Apple, Inc.\",\n\t[3]byte{72, 184, 222}:  \"HOMEWINS TECHNOLOGY CO.,LTD.\",\n\t[3]byte{72, 185, 119}:  \"PulseOn Oy\",\n\t[3]byte{72, 185, 194}:  \"Teletics Inc.\",\n\t[3]byte{72, 186, 78}:   \"Hewlett Packard\",\n\t[3]byte{72, 188, 166}:  \"\\u200bASUNG TECHNO CO.,Ltd\",\n\t[3]byte{72, 189, 14}:   \"Quanta Storage Inc.\",\n\t[3]byte{72, 189, 61}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{72, 190, 45}:   \"Symanitron\",\n\t[3]byte{72, 191, 107}:  \"Apple, Inc.\",\n\t[3]byte{72, 191, 116}:  \"Baicells Technologies Co.,LTD\",\n\t[3]byte{72, 192, 73}:   \"Broad Telecom SA\",\n\t[3]byte{72, 192, 147}:  \"Xirrus, Inc.\",\n\t[3]byte{72, 193, 172}:  \"PLANTRONICS, INC.\",\n\t[3]byte{72, 195, 176}:  \"Pharos Co.Ltd\",\n\t[3]byte{72, 197, 141}:  \"Lear Corporation GmbH\",\n\t[3]byte{72, 198, 99}:   \"GTO Access Systems LLC\",\n\t[3]byte{72, 199, 150}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{72, 200, 98}:   \"Simo Wireless,Inc.\",\n\t[3]byte{72, 200, 182}:  \"SysTec GmbH\",\n\t[3]byte{72, 203, 110}:  \"Cello Electronics (UK) Ltd\",\n\t[3]byte{72, 208, 207}:  \"Universal Electronics, Inc.\",\n\t[3]byte{72, 209, 142}:  \"Metis Communication Co.,Ltd\",\n\t[3]byte{72, 210, 36}:   \"Liteon Technology Corporation\",\n\t[3]byte{72, 210, 79}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{72, 211, 67}:   \"ARRIS Group, Inc.\",\n\t[3]byte{72, 211, 93}:   \"Private\",\n\t[3]byte{72, 213, 57}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 213, 76}:   \"Jeda Networks\",\n\t[3]byte{72, 214, 213}:  \"Google, Inc.\",\n\t[3]byte{72, 215, 5}:    \"Apple, Inc.\",\n\t[3]byte{72, 215, 255}:  \"BLANKOM Antennentechnik GmbH\",\n\t[3]byte{72, 216, 69}:   \"Shenzhen Mainuoke Electronics Co., Ltd\",\n\t[3]byte{72, 216, 85}:   \"Telvent\",\n\t[3]byte{72, 216, 117}:  \"China TransInfo Technology Co., Ltd\",\n\t[3]byte{72, 216, 254}:  \"ClarIDy Solutions, Inc.\",\n\t[3]byte{72, 218, 150}:  \"Eddy Smart Home Solutions Inc.\",\n\t[3]byte{72, 219, 80}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 220, 45}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 220, 251}:  \"Nokia Corporation\",\n\t[3]byte{72, 221, 12}:   \"eero inc.\",\n\t[3]byte{72, 221, 157}:  \"ITEL MOBILE LIMITED\",\n\t[3]byte{72, 223, 28}:   \"Wuhan NEC Fibre Optic Communications industry Co. Ltd\",\n\t[3]byte{72, 223, 55}:   \"Hewlett Packard Enterprise\",\n\t[3]byte{72, 225, 175}:  \"Vity\",\n\t[3]byte{72, 225, 233}:  \"Chengdu Meross Technology Co., Ltd.\",\n\t[3]byte{72, 226, 68}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{72, 227, 195}:  \"JENOPTIK Advanced Systems GmbH\",\n\t[3]byte{72, 230, 149}:  \"Insigma Inc\",\n\t[3]byte{72, 230, 192}:  \"SIMCom Wireless Solutions Co.,Ltd.\",\n\t[3]byte{72, 233, 241}:  \"Apple, Inc.\",\n\t[3]byte{72, 234, 99}:   \"Zhejiang Uniview Technologies Co., Ltd.\",\n\t[3]byte{72, 235, 48}:   \"ETERNA TECHNOLOGY, INC.\",\n\t[3]byte{72, 235, 98}:   \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{72, 236, 91}:   \"Nokia\",\n\t[3]byte{72, 237, 128}:  \"daesung eltec\",\n\t[3]byte{72, 238, 7}:    \"Silver Palm Technologies LLC\",\n\t[3]byte{72, 238, 12}:   \"D-Link International\",\n\t[3]byte{72, 238, 134}:  \"UTStarcom (China) Co.,Ltd\",\n\t[3]byte{72, 240, 39}:   \"Chengdu newifi Co.,Ltd\",\n\t[3]byte{72, 240, 123}:  \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{72, 241, 127}:  \"Intel Corporate\",\n\t[3]byte{72, 242, 48}:   \"Ubizcore Co.,LTD\",\n\t[3]byte{72, 243, 23}:   \"Private\",\n\t[3]byte{72, 244, 125}:  \"TechVision Holding  Internation Limited\",\n\t[3]byte{72, 247, 192}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{72, 247, 241}:  \"Nokia\",\n\t[3]byte{72, 248, 179}:  \"Cisco-Linksys, LLC\",\n\t[3]byte{72, 248, 219}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 248, 225}:  \"Nokia\",\n\t[3]byte{72, 249, 37}:   \"Maestronic\",\n\t[3]byte{72, 249, 124}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{72, 252, 182}:  \"LAVA INTERNATIONAL(H.K) LIMITED\",\n\t[3]byte{72, 252, 184}:  \"Woodstream Corporation\",\n\t[3]byte{72, 253, 142}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{72, 253, 163}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{72, 254, 234}:  \"HOMA B.V.\",\n\t[3]byte{76, 0, 130}:    \"Cisco Systems, Inc\",\n\t[3]byte{76, 1, 67}:     \"eero inc.\",\n\t[3]byte{76, 2, 46}:     \"CMR KOREA CO., LTD\",\n\t[3]byte{76, 2, 137}:    \"LEX COMPUTECH CO., LTD\",\n\t[3]byte{76, 6, 138}:    \"Basler Electric Company\",\n\t[3]byte{76, 7, 201}:    \"COMPUTER OFFICE Co.,Ltd.\",\n\t[3]byte{76, 9, 180}:    \"zte corporation\",\n\t[3]byte{76, 9, 212}:    \"Arcadyan Technology Corporation\",\n\t[3]byte{76, 10, 61}:    \"ADNACOM INC.\",\n\t[3]byte{76, 11, 58}:    \"TCT mobile ltd\",\n\t[3]byte{76, 11, 190}:   \"Microsoft\",\n\t[3]byte{76, 13, 238}:   \"JABIL CIRCUIT (SHANGHAI) LTD.\",\n\t[3]byte{76, 15, 110}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{76, 15, 199}:   \"Earda Technologies co Ltd\",\n\t[3]byte{76, 17, 89}:    \"Vision Information & Communications\",\n\t[3]byte{76, 17, 174}:   \"Espressif Inc.\",\n\t[3]byte{76, 17, 191}:   \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{76, 18, 101}:   \"ARRIS Group, Inc.\",\n\t[3]byte{76, 19, 101}:   \"Emplus Technologies\",\n\t[3]byte{76, 20, 128}:   \"NOREGON SYSTEMS, INC\",\n\t[3]byte{76, 20, 163}:   \"TCL Technoly Electronics (Huizhou) Co., Ltd.\",\n\t[3]byte{76, 22, 148}:   \"shenzhen sibituo Technology Co., Ltd\",\n\t[3]byte{76, 22, 241}:   \"zte corporation\",\n\t[3]byte{76, 22, 252}:   \"Juniper Networks\",\n\t[3]byte{76, 23, 68}:    \"Amazon Technologies Inc.\",\n\t[3]byte{76, 23, 235}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{76, 24, 154}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{76, 26, 58}:    \"PRIMA Research And Production Enterprise Ltd.\",\n\t[3]byte{76, 26, 61}:    \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{76, 26, 149}:   \"Novakon Co., Ltd.\",\n\t[3]byte{76, 27, 134}:   \"Arcadyan Corporation\",\n\t[3]byte{76, 29, 150}:   \"Intel Corporate\",\n\t[3]byte{76, 31, 204}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{76, 33, 19}:    \"Nokia Shanghai Bell Co., Ltd.\",\n\t[3]byte{76, 33, 140}:   \"Panasonic India Private limited\",\n\t[3]byte{76, 33, 208}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{76, 34, 25}:    \"YUANFUDAO HK LIMTED\",\n\t[3]byte{76, 34, 88}:    \"cozybit, Inc.\",\n\t[3]byte{76, 36, 152}:   \"Texas Instruments\",\n\t[3]byte{76, 37, 120}:   \"Nokia Corporation\",\n\t[3]byte{76, 38, 231}:   \"Welgate Co., Ltd.\",\n\t[3]byte{76, 44, 128}:   \"Beijing Skyway Technologies Co.,Ltd \",\n\t[3]byte{76, 44, 131}:   \"Zhejiang KaNong Network Technology Co.,Ltd.\",\n\t[3]byte{76, 46, 254}:   \"Shenzhen Comnect Technology Co.,LTD\",\n\t[3]byte{76, 47, 157}:   \"ICM Controls\",\n\t[3]byte{76, 48, 137}:   \"Thales Transportation Systems GmbH\",\n\t[3]byte{76, 50, 45}:    \"TELEDATA NETWORKS\",\n\t[3]byte{76, 50, 117}:   \"Apple, Inc.\",\n\t[3]byte{76, 50, 217}:   \"M Rutty Holdings Pty. Ltd.\",\n\t[3]byte{76, 51, 41}:    \"Sweroam\",\n\t[3]byte{76, 51, 78}:    \"HIGHTECH\",\n\t[3]byte{76, 52, 136}:   \"Intel Corporate\",\n\t[3]byte{76, 54, 78}:    \"Panasonic Corporation  Connected Solutions Company\",\n\t[3]byte{76, 56, 213}:   \"MITAC COMPUTING TECHNOLOGY CORPORATION\",\n\t[3]byte{76, 56, 216}:   \"ARRIS Group, Inc.\",\n\t[3]byte{76, 57, 9}:     \"HPL Electric & Power Private Limited\",\n\t[3]byte{76, 57, 16}:    \"Newtek Electronics co., Ltd.\",\n\t[3]byte{76, 59, 116}:   \"VOGTEC(H.K.) Co., Ltd\",\n\t[3]byte{76, 60, 22}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{76, 63, 211}:   \"Texas Instruments\",\n\t[3]byte{76, 64, 136}:   \"SANSHIN ELECTRONICS CO.,LTD.\",\n\t[3]byte{76, 69, 118}:   \"China Mobile(Hangzhou) Information Technology Co.,Ltd.\",\n\t[3]byte{76, 72, 218}:   \"Beijing Autelan Technology Co.,Ltd\",\n\t[3]byte{76, 73, 79}:    \"zte corporation\",\n\t[3]byte{76, 73, 227}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{76, 75, 104}:   \"Mobile Device, Inc. \",\n\t[3]byte{76, 75, 249}:   \"IEEE Registration Authority\",\n\t[3]byte{76, 77, 102}:   \"Nanjing Jiahao Technology Co., Ltd.\",\n\t[3]byte{76, 78, 3}:     \"TCT mobile ltd\",\n\t[3]byte{76, 78, 53}:    \"Cisco Systems, Inc\",\n\t[3]byte{76, 79, 238}:   \"OnePlus Technology (Shenzhen) Co., Ltd\",\n\t[3]byte{76, 80, 119}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{76, 82, 98}:    \"Fujitsu Technology Solutions GmbH\",\n\t[3]byte{76, 84, 39}:    \"Linepro Sp. z o.o.\",\n\t[3]byte{76, 84, 153}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{76, 85, 133}:   \"Hamilton Systems\",\n\t[3]byte{76, 85, 184}:   \"Turkcell Teknoloji\",\n\t[3]byte{76, 85, 204}:   \"Zentri Pty Ltd\",\n\t[3]byte{76, 86, 157}:   \"Apple, Inc.\",\n\t[3]byte{76, 86, 223}:   \"Targus US LLC\",\n\t[3]byte{76, 87, 202}:   \"Apple, Inc.\",\n\t[3]byte{76, 93, 205}:   \"Oy Finnish Electric Vehicle Technologies Ltd\",\n\t[3]byte{76, 94, 12}:    \"Routerboard.com\",\n\t[3]byte{76, 95, 210}:   \"Alcatel-Lucent\",\n\t[3]byte{76, 96, 213}:   \"airPointe of New Hampshire\",\n\t[3]byte{76, 96, 222}:   \"NETGEAR\",\n\t[3]byte{76, 98, 85}:    \"SANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V.\",\n\t[3]byte{76, 99, 113}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{76, 99, 235}:   \"Application Solutions (Electronics and Vision) Ltd\",\n\t[3]byte{76, 100, 217}:  \"Guangdong Leawin Group Co., Ltd\",\n\t[3]byte{76, 101, 168}:  \"IEEE Registration Authority\",\n\t[3]byte{76, 102, 65}:   \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{76, 106, 246}:  \"HMD Global Oy\",\n\t[3]byte{76, 107, 232}:  \"Apple, Inc.\",\n\t[3]byte{76, 108, 19}:   \"IoT Company Solucoes Tecnologicas Ltda\",\n\t[3]byte{76, 110, 110}:  \"Comnect Technology CO.,LTD\",\n\t[3]byte{76, 111, 156}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{76, 113, 12}:   \"Cisco Systems, Inc\",\n\t[3]byte{76, 113, 13}:   \"Cisco Systems, Inc\",\n\t[3]byte{76, 114, 185}:  \"PEGATRON CORPORATION\",\n\t[3]byte{76, 115, 103}:  \"Genius Bytes Software Solutions GmbH\",\n\t[3]byte{76, 115, 165}:  \"KOVE\",\n\t[3]byte{76, 116, 3}:    \"BQ\",\n\t[3]byte{76, 116, 135}:  \"Leader Phone Communication Technology Co., Ltd.\",\n\t[3]byte{76, 116, 191}:  \"Apple, Inc.\",\n\t[3]byte{76, 118, 37}:   \"Dell Inc.\",\n\t[3]byte{76, 119, 79}:   \"Embedded Wireless Labs \",\n\t[3]byte{76, 119, 109}:  \"Cisco Systems, Inc\",\n\t[3]byte{76, 120, 114}:  \"Cav. Uff. Giacomo Cimberio S.p.A. \",\n\t[3]byte{76, 120, 151}:  \"Arrowhead Alarm Products Ltd\",\n\t[3]byte{76, 121, 186}:  \"Intel Corporate\",\n\t[3]byte{76, 122, 72}:   \"Nippon Seiki (Europe) B.V.\",\n\t[3]byte{76, 124, 95}:   \"Apple, Inc.\",\n\t[3]byte{76, 124, 217}:  \"Apple, Inc.\",\n\t[3]byte{76, 127, 98}:   \"Nokia Corporation\",\n\t[3]byte{76, 128, 79}:   \"Armstrong Monitoring Corp\",\n\t[3]byte{76, 128, 147}:  \"Intel Corporate\",\n\t[3]byte{76, 128, 186}:  \"Wuhan Tianyu Information Industry Co., Ltd.\",\n\t[3]byte{76, 129, 32}:   \"Taicang T&W Electronics\",\n\t[3]byte{76, 130, 207}:  \"Dish Technologies Corp\",\n\t[3]byte{76, 131, 222}:  \"Cisco SPVTG\",\n\t[3]byte{76, 135, 93}:   \"Bose Corporation\",\n\t[3]byte{76, 139, 48}:   \"Actiontec Electronics, Inc\",\n\t[3]byte{76, 139, 85}:   \"Grupo Digicon\",\n\t[3]byte{76, 139, 239}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{76, 141, 121}:  \"Apple, Inc.\",\n\t[3]byte{76, 142, 204}:  \"SILKAN SA\",\n\t[3]byte{76, 143, 165}:  \"Jastec\",\n\t[3]byte{76, 144, 219}:  \"JL Audio\",\n\t[3]byte{76, 145, 12}:   \" Lanix Internacional, S.A. de C.V.\",\n\t[3]byte{76, 145, 87}:   \"Fujian LANDI Commercial Equipment Co.,Ltd\",\n\t[3]byte{76, 145, 122}:  \"IEEE Registration Authority\",\n\t[3]byte{76, 147, 166}:  \"IEEE Registration Authority\",\n\t[3]byte{76, 150, 20}:   \"Juniper Networks\",\n\t[3]byte{76, 150, 45}:   \"Fresh AB\",\n\t[3]byte{76, 152, 239}:  \"Zeo\",\n\t[3]byte{76, 158, 128}:  \"KYOKKO ELECTRIC Co., Ltd.\",\n\t[3]byte{76, 158, 228}:  \"Hanyang Navicom Co.,Ltd.\",\n\t[3]byte{76, 158, 255}:  \"Zyxel Communications Corporation\",\n\t[3]byte{76, 160, 3}:    \"VITEC\",\n\t[3]byte{76, 161, 97}:   \"Rain Bird Corporation\",\n\t[3]byte{76, 165, 21}:   \"Baikal Electronics JSC\",\n\t[3]byte{76, 165, 109}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{76, 166, 77}:   \"Cisco Systems, Inc\",\n\t[3]byte{76, 167, 75}:   \"Alcatel Lucent\",\n\t[3]byte{76, 169, 40}:   \"Insensi\",\n\t[3]byte{76, 170, 22}:   \"AzureWave Technologies (Shanghai) Inc.\",\n\t[3]byte{76, 171, 51}:   \"KST technology\",\n\t[3]byte{76, 171, 252}:  \"zte corporation\",\n\t[3]byte{76, 172, 10}:   \"zte corporation\",\n\t[3]byte{76, 173, 168}:  \"PANOPTICS CORP.\",\n\t[3]byte{76, 174, 19}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{76, 174, 28}:   \"SaiNXT Technologies LLP\",\n\t[3]byte{76, 174, 49}:   \"ShengHai Electronics (Shenzhen) Ltd\",\n\t[3]byte{76, 174, 163}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{76, 174, 236}:  \"Guangzhou limee technology co.,LTD\",\n\t[3]byte{76, 176, 8}:    \"Shenzhen Gwelltimes Technology Co.,Ltd\",\n\t[3]byte{76, 176, 232}:  \"Beijing RongZhi xinghua technology co., LTD\",\n\t[3]byte{76, 177, 108}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{76, 177, 153}:  \"Apple, Inc.\",\n\t[3]byte{76, 177, 205}:  \"Ruckus Wireless\",\n\t[3]byte{76, 178, 28}:   \"Maxphotonics Co.,Ltd\",\n\t[3]byte{76, 180, 74}:   \"NANOWAVE Technologies Inc.\",\n\t[3]byte{76, 180, 234}:  \"HRD (S) PTE., LTD.\",\n\t[3]byte{76, 183, 109}:  \"Novi Security\",\n\t[3]byte{76, 184, 28}:   \"SAM Electronics GmbH\",\n\t[3]byte{76, 184, 44}:   \"Cambridge Mobile Telematics, Inc.\",\n\t[3]byte{76, 184, 181}:  \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{76, 185, 17}:   \"Raisecom Technology CO.,LTD\",\n\t[3]byte{76, 185, 155}:  \"WEIFANG GOERTEK ELECTRONICS CO.,LTD\",\n\t[3]byte{76, 185, 200}:  \"CONET CO., LTD.\",\n\t[3]byte{76, 186, 163}:  \"Bison Electronics Inc.\",\n\t[3]byte{76, 187, 88}:   \"Chicony Electronics Co., Ltd.\",\n\t[3]byte{76, 188, 66}:   \"Shenzhen Hangsheng Electronics Co.,Ltd.\",\n\t[3]byte{76, 188, 72}:   \"Cisco Systems, Inc\",\n\t[3]byte{76, 188, 114}:  \"Primex Wireless\",\n\t[3]byte{76, 188, 152}:  \"IEEE Registration Authority\",\n\t[3]byte{76, 188, 165}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{76, 188, 180}:  \"ABB SpA - DIN Rail\",\n\t[3]byte{76, 189, 143}:  \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{76, 192, 10}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{76, 194, 6}:    \"Somfy\",\n\t[3]byte{76, 196, 82}:   \"Shang Hai Tyd. Electon Technology Ltd.\",\n\t[3]byte{76, 197, 62}:   \"Zyxel Communications Corporation\",\n\t[3]byte{76, 198, 2}:    \"Radios, Inc.\",\n\t[3]byte{76, 198, 129}:  \"Shenzhen Aisat Electronic Co., Ltd.\",\n\t[3]byte{76, 199, 214}:  \"FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.\",\n\t[3]byte{76, 200, 161}:  \"Cisco Meraki\",\n\t[3]byte{76, 201, 79}:   \"Nokia\",\n\t[3]byte{76, 201, 94}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{76, 202, 83}:   \"Skyera, Inc.\",\n\t[3]byte{76, 203, 245}:  \"zte corporation\",\n\t[3]byte{76, 204, 52}:   \"Motorola Solutions Inc.\",\n\t[3]byte{76, 204, 106}:  \"Micro-Star INTL CO., LTD.\",\n\t[3]byte{76, 206, 45}:   \"Danlaw Inc\",\n\t[3]byte{76, 208, 138}:  \"HUMAX Co., Ltd.\",\n\t[3]byte{76, 208, 203}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{76, 209, 161}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{76, 214, 55}:   \"Qsono Electronics Co., Ltd\",\n\t[3]byte{76, 215, 182}:  \"Helmer Scientific\",\n\t[3]byte{76, 217, 143}:  \"Dell Inc.\",\n\t[3]byte{76, 217, 196}:  \"Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd\",\n\t[3]byte{76, 220, 13}:   \"Coral Telecom Limited\",\n\t[3]byte{76, 221, 49}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{76, 221, 125}:  \"LHP Telematics LLC\",\n\t[3]byte{76, 223, 61}:   \"TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD\",\n\t[3]byte{76, 225, 115}:  \"IEEE Registration Authority\",\n\t[3]byte{76, 225, 117}:  \"Cisco Systems, Inc\",\n\t[3]byte{76, 225, 118}:  \"Cisco Systems, Inc\",\n\t[3]byte{76, 225, 158}:  \"TECNO MOBILE LIMITED\",\n\t[3]byte{76, 225, 187}:  \"Zhuhai HiFocus Technology Co., Ltd.\",\n\t[3]byte{76, 226, 241}:  \"sclak srl\",\n\t[3]byte{76, 229, 174}:  \"Tianjin Beebox Intelligent Technology Co.,Ltd.\",\n\t[3]byte{76, 230, 118}:  \"BUFFALO.INC\",\n\t[3]byte{76, 233, 51}:   \"RailComm, LLC\",\n\t[3]byte{76, 233, 228}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{76, 235, 66}:   \"Intel Corporate\",\n\t[3]byte{76, 235, 189}:  \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{76, 236, 239}:  \"Soraa, Inc.\",\n\t[3]byte{76, 237, 222}:  \"ASKEY COMPUTER CORP\",\n\t[3]byte{76, 237, 251}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{76, 238, 176}:  \"SHC Netzwerktechnik GmbH\",\n\t[3]byte{76, 239, 192}:  \"Amazon Technologies Inc.\",\n\t[3]byte{76, 240, 46}:   \"Vifa Denmark A/S\",\n\t[3]byte{76, 241, 158}:  \"Groupe Atlantic\",\n\t[3]byte{76, 242, 191}:  \"Cambridge Industries(Group) Co.,Ltd.\",\n\t[3]byte{76, 244, 91}:   \"Blue Clover Devices\",\n\t[3]byte{76, 245, 91}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{76, 245, 160}:  \"Scalable Network Technologies Inc\",\n\t[3]byte{76, 247, 55}:   \"SamJi Electronics Co., Ltd\",\n\t[3]byte{76, 249, 93}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{76, 250, 202}:  \"Cambridge Industries(Group) Co.,Ltd.\",\n\t[3]byte{76, 251, 69}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{76, 251, 254}:  \"Sercomm Japan Corporation\",\n\t[3]byte{76, 252, 170}:  \"Tesla,Inc.\",\n\t[3]byte{76, 255, 18}:   \"Fuze Entertainment Co., ltd\",\n\t[3]byte{80, 0, 132}:    \"Siemens Canada\",\n\t[3]byte{80, 0, 140}:    \"Hong Kong Telecommunications (HKT) Limited\",\n\t[3]byte{80, 1, 107}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{80, 1, 187}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 1, 217}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{80, 2, 145}:    \"Espressif Inc.\",\n\t[3]byte{80, 4, 184}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{80, 5, 61}:     \"CyWee Group Ltd\",\n\t[3]byte{80, 6, 4}:      \"Cisco Systems, Inc\",\n\t[3]byte{80, 6, 171}:    \"Cisco Systems, Inc\",\n\t[3]byte{80, 9, 89}:     \"Technicolor CH USA Inc.\",\n\t[3]byte{80, 11, 50}:    \"Foxda Technology Industrial(ShenZhen)Co.,LTD\",\n\t[3]byte{80, 11, 145}:   \"IEEE Registration Authority\",\n\t[3]byte{80, 14, 109}:   \"TrafficCast International\",\n\t[3]byte{80, 15, 128}:   \"Cisco Systems, Inc\",\n\t[3]byte{80, 15, 245}:   \"Tenda Technology Co.,Ltd.Dongguan branch\",\n\t[3]byte{80, 17, 235}:   \"SilverNet Ltd\",\n\t[3]byte{80, 19, 149}:   \"Sichuan\\u00a0AI-Link\\u00a0Technology\\u00a0Co.,\\u00a0Ltd.\",\n\t[3]byte{80, 20, 8}:     \"AiNET\",\n\t[3]byte{80, 20, 121}:   \"iRobot Corporation \",\n\t[3]byte{80, 20, 181}:   \"Richfit Information Technology Co., Ltd\",\n\t[3]byte{80, 23, 255}:   \"Cisco Systems, Inc\",\n\t[3]byte{80, 24, 76}:    \"Platina Systems Inc.\",\n\t[3]byte{80, 26, 165}:   \"GN Netcom A/S\",\n\t[3]byte{80, 26, 197}:   \"Microsoft\",\n\t[3]byte{80, 27, 50}:    \"Taicang T&W Electronics\",\n\t[3]byte{80, 28, 176}:   \"Cisco Systems, Inc\",\n\t[3]byte{80, 28, 191}:   \"Cisco Systems, Inc\",\n\t[3]byte{80, 29, 147}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{80, 30, 45}:    \"StreamUnlimited Engineering GmbH\",\n\t[3]byte{80, 32, 107}:   \"Emerson Climate Technologies Transportation Solutions\",\n\t[3]byte{80, 33, 236}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{80, 34, 103}:   \"PixeLINK\",\n\t[3]byte{80, 37, 43}:    \"Nethra Imaging Incorporated\",\n\t[3]byte{80, 38, 144}:   \"FUJITSU LIMITED\",\n\t[3]byte{80, 39, 199}:   \"TECHNART Co.,Ltd\",\n\t[3]byte{80, 40, 115}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{80, 41, 77}:    \"NANJING IOT SENSOR TECHNOLOGY CO,LTD\",\n\t[3]byte{80, 41, 245}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{80, 42, 126}:   \"Smart electronic GmbH\",\n\t[3]byte{80, 42, 139}:   \"Telekom Research and Development Sdn Bhd\",\n\t[3]byte{80, 43, 115}:   \"Tenda Technology Co.,Ltd.Dongguan branch\",\n\t[3]byte{80, 43, 152}:   \"Es-tech International\",\n\t[3]byte{80, 44, 198}:   \"GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI\",\n\t[3]byte{80, 45, 29}:    \"Nokia Corporation\",\n\t[3]byte{80, 45, 162}:   \"Intel Corporate\",\n\t[3]byte{80, 45, 187}:   \"GD Midea Air-Conditioning Equipment Co.,Ltd.\",\n\t[3]byte{80, 45, 244}:   \"Phytec Messtechnik GmbH\",\n\t[3]byte{80, 46, 92}:    \"HTC Corporation\",\n\t[3]byte{80, 46, 206}:   \"Asahi Electronics Co.,Ltd\",\n\t[3]byte{80, 47, 168}:   \"Cisco Systems, Inc\",\n\t[3]byte{80, 49, 173}:   \"ABB Global Industries and Services Private Limited\",\n\t[3]byte{80, 50, 55}:    \"Apple, Inc.\",\n\t[3]byte{80, 50, 117}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 51, 139}:   \"Texas Instruments\",\n\t[3]byte{80, 51, 240}:   \"YICHEN (SHENZHEN) TECHNOLOGY CO.LTD\",\n\t[3]byte{80, 56, 47}:    \"ASE Group Chung-Li\",\n\t[3]byte{80, 57, 85}:    \"Cisco SPVTG\",\n\t[3]byte{80, 58, 125}:   \"AlphaTech PLC Int’l Co., Ltd.\",\n\t[3]byte{80, 58, 160}:   \"SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{80, 60, 196}:   \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{80, 60, 234}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{80, 61, 161}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 61, 229}:   \"Cisco Systems, Inc\",\n\t[3]byte{80, 62, 124}:   \"LeiShen Intelligent  System Co.Ltd\",\n\t[3]byte{80, 62, 170}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{80, 63, 86}:    \"Syncmold Enterprise Corp\",\n\t[3]byte{80, 63, 152}:   \"CMITECH\",\n\t[3]byte{80, 64, 97}:    \"Nokia\",\n\t[3]byte{80, 65, 185}:   \"I-O DATA DEVICE,INC.\",\n\t[3]byte{80, 67, 185}:   \"OktoInform RUS\",\n\t[3]byte{80, 69, 247}:   \"Liuhe Intelligence Technology Ltd.\",\n\t[3]byte{80, 70, 74}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{80, 70, 93}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{80, 72, 235}:   \"BEIJING HAIHEJINSHENG NETWORK TECHNOLOGY CO. LTD.\",\n\t[3]byte{80, 74, 94}:    \"Masimo Corporation\",\n\t[3]byte{80, 74, 110}:   \"NETGEAR\",\n\t[3]byte{80, 75, 91}:    \"CONTROLtronic GmbH\",\n\t[3]byte{80, 76, 126}:   \"THE 41ST INSTITUTE OF CETC\",\n\t[3]byte{80, 78, 220}:   \"Ping Communication\",\n\t[3]byte{80, 79, 148}:   \"Loxone Electronics GmbH\",\n\t[3]byte{80, 80, 42}:    \"Egardia\",\n\t[3]byte{80, 80, 101}:   \"TAKT Corporation\",\n\t[3]byte{80, 80, 164}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 80, 206}:   \"Hangzhou Dianyixia Communication Technology Co. Ltd.\",\n\t[3]byte{80, 81, 169}:   \"Texas Instruments\",\n\t[3]byte{80, 82, 210}:   \"Hangzhou Telin Technologies Co., Limited\",\n\t[3]byte{80, 85, 39}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{80, 86, 99}:    \"Texas Instruments\",\n\t[3]byte{80, 86, 168}:   \"Jolla Ltd\",\n\t[3]byte{80, 86, 191}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 87, 156}:   \"Seiko Epson Corporation\",\n\t[3]byte{80, 87, 168}:   \"Cisco Systems, Inc\",\n\t[3]byte{80, 88, 0}:     \"WyTec International, Inc.\",\n\t[3]byte{80, 88, 79}:    \"waytotec,Inc.\",\n\t[3]byte{80, 89, 103}:   \"Intent Solutions Inc\",\n\t[3]byte{80, 90, 198}:   \"GUANGDONG SUPER TELECOM CO.,LTD.\",\n\t[3]byte{80, 91, 194}:   \"Liteon Technology Corporation\",\n\t[3]byte{80, 93, 172}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{80, 95, 181}:   \"Askey Computer Corp.\",\n\t[3]byte{80, 96, 40}:    \"Xirrus Inc.\",\n\t[3]byte{80, 97, 132}:   \"Avaya Inc\",\n\t[3]byte{80, 97, 191}:   \"Cisco Systems, Inc\",\n\t[3]byte{80, 97, 214}:   \"Indu-Sol GmbH\",\n\t[3]byte{80, 97, 246}:   \"Universal Electronics, Inc.\",\n\t[3]byte{80, 98, 85}:    \"IEEE Registration Authority\",\n\t[3]byte{80, 99, 19}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{80, 100, 43}:   \"XIAOMI Electronics,CO.,LTD\",\n\t[3]byte{80, 100, 65}:   \"Greenlee\",\n\t[3]byte{80, 101, 131}:  \"Texas Instruments\",\n\t[3]byte{80, 101, 243}:  \"Hewlett Packard\",\n\t[3]byte{80, 103, 135}:  \"Planet Networks\",\n\t[3]byte{80, 103, 174}:  \"Cisco Systems, Inc\",\n\t[3]byte{80, 103, 240}:  \"Zyxel Communications Corporation\",\n\t[3]byte{80, 104, 10}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{80, 106, 3}:    \"NETGEAR\",\n\t[3]byte{80, 107, 75}:   \"Mellanox Technologies, Inc.\",\n\t[3]byte{80, 107, 141}:  \"Nutanix\",\n\t[3]byte{80, 108, 190}:  \"InnosiliconTechnology Ltd\",\n\t[3]byte{80, 110, 146}:  \"Innocent Technology Co., Ltd.\",\n\t[3]byte{80, 111, 119}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{80, 111, 152}:  \"Sehaj Synergy Technologies Private Limited\",\n\t[3]byte{80, 111, 154}:  \"Wi-Fi Alliance\",\n\t[3]byte{80, 112, 67}:   \"BSkyB Ltd\",\n\t[3]byte{80, 112, 229}:  \"He Shan World Fair Electronics Technology Limited\",\n\t[3]byte{80, 114, 36}:   \"Texas Instruments\",\n\t[3]byte{80, 114, 77}:   \"BEG Brueck Electronic GmbH\",\n\t[3]byte{80, 117, 241}:  \"ARRIS Group, Inc.\",\n\t[3]byte{80, 118, 145}:  \"Tekpea, Inc.\",\n\t[3]byte{80, 118, 166}:  \"Ecil Informatica Ind. Com. Ltda\",\n\t[3]byte{80, 118, 175}:  \"Intel Corporate\",\n\t[3]byte{80, 119, 5}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 120, 179}:  \"zte corporation\",\n\t[3]byte{80, 121, 91}:   \"Interexport Telecomunicaciones S.A.\",\n\t[3]byte{80, 122, 85}:   \"Apple, Inc.\",\n\t[3]byte{80, 122, 197}:  \"Apple, Inc.\",\n\t[3]byte{80, 123, 157}:  \"LCFC(HeFei) Electronics Technology co., ltd\",\n\t[3]byte{80, 125, 2}:    \"BIODIT\",\n\t[3]byte{80, 126, 93}:   \"Arcadyan Technology Corporation\",\n\t[3]byte{80, 128, 74}:   \"Quectel Wireless Solutions Co., Ltd.\",\n\t[3]byte{80, 130, 213}:  \"Apple, Inc.\",\n\t[3]byte{80, 133, 105}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 135, 137}:  \"Cisco Systems, Inc\",\n\t[3]byte{80, 135, 184}:  \"Nuvyyo Inc\",\n\t[3]byte{80, 137, 101}:  \"SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{80, 138, 15}:   \"SHENZHEN FISE TECHNOLOGY HOLDING CO.,LTD.\",\n\t[3]byte{80, 138, 66}:   \"Uptmate Technology Co., LTD\",\n\t[3]byte{80, 138, 203}:  \"SHENZHEN MAXMADE TECHNOLOGY CO., LTD.\",\n\t[3]byte{80, 140, 119}:  \"DIRMEIER Schanktechnik GmbH &Co KG\",\n\t[3]byte{80, 140, 177}:  \"Texas Instruments\",\n\t[3]byte{80, 140, 245}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{80, 141, 111}:  \"CHAHOO Limited\",\n\t[3]byte{80, 143, 76}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{80, 146, 185}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 147, 79}:   \"Gradual Tecnologia Ltda.\",\n\t[3]byte{80, 149, 81}:   \"ARRIS Group, Inc.\",\n\t[3]byte{80, 151, 68}:   \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{80, 151, 114}:  \"Westinghouse Digital\",\n\t[3]byte{80, 152, 113}:  \"Inventum Technologies Private Limited\",\n\t[3]byte{80, 152, 184}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{80, 152, 243}:  \"Rheem Australia Pty Ltd\",\n\t[3]byte{80, 154, 76}:   \"Dell Inc.\",\n\t[3]byte{80, 158, 167}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 159, 39}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{80, 159, 59}:   \"OI ELECTRIC CO.,LTD\",\n\t[3]byte{80, 160, 9}:    \"Xiaomi Communications Co Ltd\",\n\t[3]byte{80, 160, 84}:   \"Actineon\",\n\t[3]byte{80, 160, 164}:  \"Nokia\",\n\t[3]byte{80, 160, 191}:  \"Alba Fiber Systems Inc.\",\n\t[3]byte{80, 161, 50}:   \"Shenzhen MiaoMing  Intelligent Technology Co.,Ltd\",\n\t[3]byte{80, 164, 200}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 164, 208}:  \"IEEE Registration Authority\",\n\t[3]byte{80, 166, 127}:  \"Apple, Inc.\",\n\t[3]byte{80, 166, 227}:  \"David Clark Company\",\n\t[3]byte{80, 167, 21}:   \"Aboundi, Inc.\",\n\t[3]byte{80, 167, 43}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{80, 167, 51}:   \"Ruckus Wireless\",\n\t[3]byte{80, 168, 58}:   \"S Mobile Devices Limited\",\n\t[3]byte{80, 169, 222}:  \"Smartcom - Bulgaria AD\",\n\t[3]byte{80, 171, 62}:   \"Qibixx AG\",\n\t[3]byte{80, 171, 191}:  \"Hoseo Telecom\",\n\t[3]byte{80, 173, 113}:  \"Tessolve Semiconductor Private Limited\",\n\t[3]byte{80, 173, 146}:  \"NX Technologies\",\n\t[3]byte{80, 173, 213}:  \"Dynalec Corporation\",\n\t[3]byte{80, 175, 77}:   \"zte corporation\",\n\t[3]byte{80, 175, 115}:  \"Shenzhen Bitland Information Technology Co., Ltd.\",\n\t[3]byte{80, 179, 99}:   \"Digitron da Amazonia S/A\",\n\t[3]byte{80, 182, 149}:  \"Micropoint Biotechnologies,Inc.\",\n\t[3]byte{80, 183, 195}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 184, 136}:  \"wi2be Tecnologia S/A\",\n\t[3]byte{80, 184, 162}:  \"ImTech Technologies LLC,\",\n\t[3]byte{80, 188, 150}:  \"Apple, Inc.\",\n\t[3]byte{80, 189, 95}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{80, 192, 6}:    \"Carmanah Signs\",\n\t[3]byte{80, 194, 113}:  \"SECURETECH INC\",\n\t[3]byte{80, 196, 221}:  \"BUFFALO.INC\",\n\t[3]byte{80, 197, 141}:  \"Juniper Networks\",\n\t[3]byte{80, 198, 142}:  \"Biwin Semiconductor (HK) Company Limted\",\n\t[3]byte{80, 198, 173}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{80, 199, 9}:    \"Juniper Networks\",\n\t[3]byte{80, 199, 191}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{80, 200, 229}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 201, 113}:  \"GN Netcom A/S\",\n\t[3]byte{80, 201, 160}:  \"SKIPPER AS\",\n\t[3]byte{80, 204, 248}:  \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{80, 205, 34}:   \"Avaya Inc\",\n\t[3]byte{80, 205, 50}:   \"NanJing Chaoran Science & Technology Co.,Ltd.\",\n\t[3]byte{80, 206, 117}:  \"Measy Electronics Co., Ltd.\",\n\t[3]byte{80, 206, 227}:  \"Gigafirm.co.LTD\",\n\t[3]byte{80, 210, 19}:   \"CviLux Corporation\",\n\t[3]byte{80, 210, 116}:  \"Steffes Corporation\",\n\t[3]byte{80, 210, 245}:  \"Beijing Xiaomi Mobile Software Co., Ltd\",\n\t[3]byte{80, 211, 127}:  \"Yu Fly Mikly Way Science and Technology Co., Ltd.\",\n\t[3]byte{80, 212, 247}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{80, 213, 156}:  \"Thai Habel Industrial Co., Ltd.\",\n\t[3]byte{80, 214, 215}:  \"Takahata Precision\",\n\t[3]byte{80, 215, 83}:   \"CONELCOM GmbH\",\n\t[3]byte{80, 218, 0}:    \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{80, 219, 63}:   \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{80, 220, 231}:  \"Amazon Technologies Inc.\",\n\t[3]byte{80, 220, 252}:  \"ECOCOM\",\n\t[3]byte{80, 221, 79}:   \"Automation Components, Inc\",\n\t[3]byte{80, 222, 6}:    \"Apple, Inc.\",\n\t[3]byte{80, 223, 149}:  \"Lytx\",\n\t[3]byte{80, 224, 57}:   \"Zyxel Communications Corporation\",\n\t[3]byte{80, 224, 133}:  \"Intel Corporate\",\n\t[3]byte{80, 224, 199}:  \"TurControlSystme AG\",\n\t[3]byte{80, 224, 239}:  \"Nokia\",\n\t[3]byte{80, 225, 74}:   \"Private\",\n\t[3]byte{80, 229, 73}:   \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{80, 230, 102}:  \"Shenzhen Techtion Electronics Co., Ltd.\",\n\t[3]byte{80, 233, 113}:  \"Jibo, Inc.\",\n\t[3]byte{80, 234, 214}:  \"Apple, Inc.\",\n\t[3]byte{80, 235, 26}:   \"Brocade Communications Systems LLC\",\n\t[3]byte{80, 235, 113}:  \"Intel Corporate\",\n\t[3]byte{80, 236, 80}:   \"Beijing Xiaomi Mobile Software Co., Ltd\",\n\t[3]byte{80, 237, 120}:  \"Changzhou Yongse Infotech Co.,Ltd\",\n\t[3]byte{80, 237, 148}:  \"EGATEL SL\",\n\t[3]byte{80, 240, 3}:    \"Open Stack, Inc.\",\n\t[3]byte{80, 240, 211}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 241, 74}:   \"Texas Instruments\",\n\t[3]byte{80, 244, 60}:   \"Leeo Inc\",\n\t[3]byte{80, 245, 32}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 245, 218}:  \"Amazon Technologies Inc.\",\n\t[3]byte{80, 246, 26}:   \"Kunshan JADE Technologies co., Ltd.\",\n\t[3]byte{80, 247, 34}:   \"Cisco Systems, Inc\",\n\t[3]byte{80, 247, 237}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{80, 248, 165}:  \"eWBM Co., Ltd.\",\n\t[3]byte{80, 249, 88}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{80, 250, 132}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{80, 250, 171}:  \"L-tek d.o.o.\",\n\t[3]byte{80, 251, 25}:   \"CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.\",\n\t[3]byte{80, 252, 48}:   \"Treehouse Labs\",\n\t[3]byte{80, 252, 159}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{80, 254, 242}:  \"Sify Technologies Ltd\",\n\t[3]byte{80, 255, 32}:   \"Keenetic Limited\",\n\t[3]byte{80, 255, 153}:  \"IEEE Registration Authority\",\n\t[3]byte{84, 2, 55}:     \"Teltronic AG\",\n\t[3]byte{84, 3, 132}:    \"Hongkong Nano IC Technologies Co., Ltd\",\n\t[3]byte{84, 3, 245}:    \"EBN Technology Corp.\",\n\t[3]byte{84, 4, 150}:    \"Gigawave LTD\",\n\t[3]byte{84, 4, 166}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{84, 5, 54}:     \"Vivago Oy\",\n\t[3]byte{84, 5, 95}:     \"Alcatel Lucent\",\n\t[3]byte{84, 5, 147}:    \"WOORI ELEC Co.,Ltd\",\n\t[3]byte{84, 5, 219}:    \"LCFC(HeFei) Electronics Technology co., ltd\",\n\t[3]byte{84, 6, 139}:    \"Ningbo Deli Kebei Technology Co.LTD\",\n\t[3]byte{84, 9, 85}:     \"zte corporation\",\n\t[3]byte{84, 9, 141}:    \"deister electronic GmbH\",\n\t[3]byte{84, 13, 249}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{84, 14, 45}:    \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{84, 16, 49}:    \"SMARTO\",\n\t[3]byte{84, 16, 236}:   \"Microchip Technology Inc.\",\n\t[3]byte{84, 17, 47}:    \"Sulzer Pump Solutions Finland Oy\",\n\t[3]byte{84, 17, 95}:    \"Atamo Pty Ltd\",\n\t[3]byte{84, 19, 16}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{84, 19, 121}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{84, 20, 115}:   \" Wingtech Group (HongKong）Limited\",\n\t[3]byte{84, 20, 253}:   \"Orbbec 3D Technology International\",\n\t[3]byte{84, 21, 137}:   \"MCS Logic Inc.\",\n\t[3]byte{84, 25, 200}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{84, 27, 93}:    \"Techno-Innov\",\n\t[3]byte{84, 29, 251}:   \"Freestyle Energy Ltd\",\n\t[3]byte{84, 30, 86}:    \"Juniper Networks\",\n\t[3]byte{84, 31, 213}:   \"Advantage Electronics\",\n\t[3]byte{84, 32, 24}:    \"Tely Labs\",\n\t[3]byte{84, 33, 96}:    \"Alula\",\n\t[3]byte{84, 33, 157}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{84, 34, 248}:   \"zte corporation\",\n\t[3]byte{84, 37, 234}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{84, 38, 150}:   \"Apple, Inc.\",\n\t[3]byte{84, 39, 30}:    \"AzureWave Technology Inc.\",\n\t[3]byte{84, 39, 88}:    \"Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.\",\n\t[3]byte{84, 39, 108}:   \"Jiangsu Houge Technology Corp.\",\n\t[3]byte{84, 39, 141}:   \"NXP (China) Management Ltd.\",\n\t[3]byte{84, 42, 27}:    \"Sonos, Inc.\",\n\t[3]byte{84, 42, 156}:   \"LSY Defense, LLC.\",\n\t[3]byte{84, 42, 162}:   \"Alpha Networks Inc.\",\n\t[3]byte{84, 43, 87}:    \"Night Owl SP\",\n\t[3]byte{84, 43, 141}:   \"Apple, Inc.\",\n\t[3]byte{84, 43, 222}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{84, 44, 234}:   \"PROTECTRON\",\n\t[3]byte{84, 47, 137}:   \"Euclid Laboratories, Inc.\",\n\t[3]byte{84, 47, 138}:   \"TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO \",\n\t[3]byte{84, 49, 49}:    \"Raster Vision Ltd\",\n\t[3]byte{84, 51, 203}:   \"Apple, Inc.\",\n\t[3]byte{84, 52, 239}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{84, 53, 48}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{84, 53, 223}:   \"Symeo GmbH\",\n\t[3]byte{84, 54, 155}:   \"1Verge Internet Technology (Beijing) Co., Ltd.\",\n\t[3]byte{84, 57, 104}:   \"Edgewater Networks Inc\",\n\t[3]byte{84, 57, 223}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{84, 59, 48}:    \"duagon AG\",\n\t[3]byte{84, 61, 55}:    \"Ruckus Wireless\",\n\t[3]byte{84, 62, 100}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{84, 64, 173}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{84, 66, 73}:    \"Sony Corporation\",\n\t[3]byte{84, 68, 8}:     \"Nokia Corporation\",\n\t[3]byte{84, 70, 107}:   \"Shenzhen CZTIC Electronic Technology Co., Ltd  \",\n\t[3]byte{84, 71, 65}:    \"XCHENG HOLDING\",\n\t[3]byte{84, 71, 211}:   \"TSAT AS\",\n\t[3]byte{84, 72, 16}:    \"Dell Inc.\",\n\t[3]byte{84, 72, 156}:   \"CDOUBLES ELECTRONICS CO. LTD.\",\n\t[3]byte{84, 72, 230}:   \"Beijing Xiaomi Mobile Software Co., Ltd\",\n\t[3]byte{84, 74, 0}:     \"Cisco Systems, Inc\",\n\t[3]byte{84, 74, 5}:     \"wenglor sensoric gmbh\",\n\t[3]byte{84, 74, 22}:    \"Texas Instruments\",\n\t[3]byte{84, 75, 140}:   \"Juniper Networks\",\n\t[3]byte{84, 78, 69}:    \"Private\",\n\t[3]byte{84, 78, 144}:   \"Apple, Inc.\",\n\t[3]byte{84, 81, 27}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{84, 81, 70}:    \"AMG Systems Ltd.\",\n\t[3]byte{84, 83, 237}:   \"Sony Corporation\",\n\t[3]byte{84, 84, 20}:    \"Digital RF Corea, Inc\",\n\t[3]byte{84, 84, 207}:   \"PROBEDIGITAL CO.,LTD\",\n\t[3]byte{84, 85, 213}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{84, 90, 166}:   \"Espressif Inc.\",\n\t[3]byte{84, 94, 189}:   \"NL Technologies\",\n\t[3]byte{84, 95, 169}:   \"Teracom Limited\",\n\t[3]byte{84, 96, 9}:     \"Google, Inc.\",\n\t[3]byte{84, 97, 114}:   \"ZODIAC AEROSPACE SAS\",\n\t[3]byte{84, 97, 234}:   \"Zaplox AB\",\n\t[3]byte{84, 98, 226}:   \"Apple, Inc.\",\n\t[3]byte{84, 100, 217}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{84, 101, 3}:    \"Quectel Wireless Solutions Co., Ltd.\",\n\t[3]byte{84, 101, 222}:  \"ARRIS Group, Inc.\",\n\t[3]byte{84, 102, 108}:  \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{84, 103, 81}:   \"Compal Broadband Networks, Inc.\",\n\t[3]byte{84, 106, 216}:  \"Elster Water Metering\",\n\t[3]byte{84, 108, 14}:   \"Texas Instruments\",\n\t[3]byte{84, 109, 82}:   \"TOPVIEW OPTRONICS CORP.\",\n\t[3]byte{84, 113, 221}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{84, 114, 79}:   \"Apple, Inc.\",\n\t[3]byte{84, 115, 152}:  \"Toyo Electronics Corporation\",\n\t[3]byte{84, 116, 230}:  \"Webtech Wireless\",\n\t[3]byte{84, 117, 149}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{84, 117, 208}:  \"Cisco Systems, Inc\",\n\t[3]byte{84, 119, 138}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{84, 120, 26}:   \"Cisco Systems, Inc\",\n\t[3]byte{84, 121, 117}:  \"Nokia Corporation\",\n\t[3]byte{84, 122, 82}:   \"CTE International srl\",\n\t[3]byte{84, 124, 105}:  \"Cisco Systems, Inc\",\n\t[3]byte{84, 125, 205}:  \"Texas Instruments\",\n\t[3]byte{84, 127, 84}:   \"INGENICO\",\n\t[3]byte{84, 127, 168}:  \"TELCO systems, s.r.o.\",\n\t[3]byte{84, 127, 188}:  \"iodyne\",\n\t[3]byte{84, 127, 238}:  \"Cisco Systems, Inc\",\n\t[3]byte{84, 128, 40}:   \"Hewlett Packard Enterprise\",\n\t[3]byte{84, 129, 45}:   \"PAX Computer Technology(Shenzhen) Ltd.\",\n\t[3]byte{84, 129, 173}:  \"Eagle Research Corporation\",\n\t[3]byte{84, 131, 58}:   \"Zyxel Communications Corporation\",\n\t[3]byte{84, 132, 123}:  \"Digital Devices GmbH\",\n\t[3]byte{84, 132, 220}:  \"zte corporation\",\n\t[3]byte{84, 134, 188}:  \"Cisco Systems, Inc\",\n\t[3]byte{84, 136, 14}:   \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{84, 136, 222}:  \"Cisco Systems, Inc\",\n\t[3]byte{84, 137, 34}:   \"Zelfy Inc\",\n\t[3]byte{84, 137, 152}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{84, 138, 186}:  \"Cisco Systems, Inc\",\n\t[3]byte{84, 140, 160}:  \"Liteon Technology Corporation\",\n\t[3]byte{84, 141, 90}:   \"Intel Corporate\",\n\t[3]byte{84, 146, 9}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{84, 146, 190}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{84, 147, 89}:   \"SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{84, 148, 120}:  \"Silvershore Technology Partners\",\n\t[3]byte{84, 153, 99}:   \"Apple, Inc.\",\n\t[3]byte{84, 154, 17}:   \"IEEE Registration Authority\",\n\t[3]byte{84, 154, 22}:   \"Uzushio Electric Co.,Ltd.\",\n\t[3]byte{84, 154, 76}:   \"GUANGDONG HOMECARE TECHNOLOGY CO.,LTD. \",\n\t[3]byte{84, 155, 18}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{84, 155, 114}:  \"Ericsson AB\",\n\t[3]byte{84, 156, 39}:   \"Plasma Cloud Limited\",\n\t[3]byte{84, 157, 133}:  \"EnerAccess inc\",\n\t[3]byte{84, 159, 19}:   \"Apple, Inc.\",\n\t[3]byte{84, 159, 53}:   \"Dell Inc.\",\n\t[3]byte{84, 159, 174}:  \"iBASE Gaming Inc\",\n\t[3]byte{84, 160, 79}:   \"t-mac Technologies Ltd\",\n\t[3]byte{84, 160, 80}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{84, 162, 116}:  \"Cisco Systems, Inc\",\n\t[3]byte{84, 163, 27}:   \"Shenzhen Linkworld Technology Co,.LTD\",\n\t[3]byte{84, 163, 250}:  \"BQT Solutions (Australia)Pty Ltd\",\n\t[3]byte{84, 164, 147}:  \"IEEE Registration Authority\",\n\t[3]byte{84, 165, 27}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{84, 165, 75}:   \"NSC Communications Siberia Ltd\",\n\t[3]byte{84, 166, 25}:   \"Alcatel-Lucent Shanghai Bell Co., Ltd\",\n\t[3]byte{84, 166, 92}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{84, 167, 3}:    \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{84, 169, 212}:  \"Minibar Systems\",\n\t[3]byte{84, 171, 58}:   \"Quanta Computer Inc.\",\n\t[3]byte{84, 174, 39}:   \"Apple, Inc.\",\n\t[3]byte{84, 174, 208}:  \"DASAN Networks, Inc. \",\n\t[3]byte{84, 177, 33}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{84, 178, 3}:    \"PEGATRON CORPORATION\",\n\t[3]byte{84, 181, 108}:  \"Xi'an NovaStar Tech Co., Ltd\",\n\t[3]byte{84, 182, 32}:   \"SUHDOL E&C Co.Ltd.\",\n\t[3]byte{84, 183, 83}:   \"Hunan Fenghui Yinjia Science And Technology Co.,Ltd\",\n\t[3]byte{84, 183, 229}:  \"Rayson Technology Co., Ltd.\",\n\t[3]byte{84, 184, 2}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{84, 184, 10}:   \"D-Link International\",\n\t[3]byte{84, 186, 214}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{84, 189, 121}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{84, 190, 83}:   \"zte corporation\",\n\t[3]byte{84, 190, 247}:  \"PEGATRON CORPORATION\",\n\t[3]byte{84, 191, 100}:  \"Dell Inc.\",\n\t[3]byte{84, 195, 62}:   \"Ciena Corporation\",\n\t[3]byte{84, 196, 21}:   \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{84, 197, 122}:  \"Sunnovo International Limited\",\n\t[3]byte{84, 200, 15}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{84, 201, 223}:  \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{84, 205, 16}:   \"Panasonic Mobile Communications Co.,Ltd.\",\n\t[3]byte{84, 205, 167}:  \"Fujian Shenzhou Electronic Co.,Ltd\",\n\t[3]byte{84, 205, 238}:  \"ShenZhen Apexis Electronic Co.,Ltd\",\n\t[3]byte{84, 206, 105}:  \"Hikari Trading Co.,Ltd.\",\n\t[3]byte{84, 208, 180}:  \"Xiamen Four-Faith Communication Technology Co.,Ltd\",\n\t[3]byte{84, 208, 237}:  \"AXIM Communications\",\n\t[3]byte{84, 209, 99}:   \"MAX-TECH,INC\",\n\t[3]byte{84, 209, 176}:  \"Universal Laser Systems, Inc\",\n\t[3]byte{84, 210, 114}:  \"Nuki Home Solutions GmbH\",\n\t[3]byte{84, 212, 111}:  \"Cisco SPVTG\",\n\t[3]byte{84, 215, 81}:   \"Proximus\",\n\t[3]byte{84, 217, 198}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{84, 217, 228}:  \"BRILLIANTTS CO., LTD\",\n\t[3]byte{84, 220, 29}:   \"Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\",\n\t[3]byte{84, 222, 208}:  \"Sevio Srl\",\n\t[3]byte{84, 223, 0}:    \"Ulterius Technologies, LLC\",\n\t[3]byte{84, 223, 36}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{84, 223, 99}:   \"Intrakey technologies GmbH\",\n\t[3]byte{84, 224, 25}:   \"Ring LLC\",\n\t[3]byte{84, 224, 50}:   \"Juniper Networks\",\n\t[3]byte{84, 224, 97}:   \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{84, 225, 64}:   \"INGENICO\",\n\t[3]byte{84, 225, 173}:  \"LCFC(HeFei) Electronics Technology co., ltd\",\n\t[3]byte{84, 226, 200}:  \"Dongguan Aoyuan Electronics Technology Co., Ltd\",\n\t[3]byte{84, 226, 224}:  \"ARRIS Group, Inc.\",\n\t[3]byte{84, 227, 176}:  \"JVL Industri Elektronik\",\n\t[3]byte{84, 227, 246}:  \"Alcatel-Lucent\",\n\t[3]byte{84, 228, 58}:   \"Apple, Inc.\",\n\t[3]byte{84, 228, 169}:  \"BHR Tech GmbH\",\n\t[3]byte{84, 228, 189}:  \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{84, 230, 63}:   \"ShenZhen LingKeWeiEr Technology Co., Ltd.\",\n\t[3]byte{84, 230, 252}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{84, 231, 213}:  \"Sun Cupid Technology (HK) LTD\",\n\t[3]byte{84, 234, 168}:  \"Apple, Inc.\",\n\t[3]byte{84, 236, 47}:   \"Ruckus Wireless\",\n\t[3]byte{84, 237, 163}:  \"Navdy, Inc.\",\n\t[3]byte{84, 238, 117}:  \"Wistron InfoComm(Kunshan)Co.,Ltd.\",\n\t[3]byte{84, 239, 68}:   \"Lumi United Technology Co., Ltd\",\n\t[3]byte{84, 239, 146}:  \"Shenzhen Elink Technology Co., LTD\",\n\t[3]byte{84, 239, 254}:  \"Fullpower Technologies, Inc.\",\n\t[3]byte{84, 241, 95}:   \"Sichuan AI-Link Technology Co., Ltd.\",\n\t[3]byte{84, 242, 1}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{84, 242, 148}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{84, 245, 182}:  \"ORIENTAL PACIFIC INTERNATIONAL LIMITED\",\n\t[3]byte{84, 246, 102}:  \"Berthold Technologies GmbH and Co.KG\",\n\t[3]byte{84, 246, 197}:  \"FUJIAN STAR-NET COMMUNICATION CO.,LTD\",\n\t[3]byte{84, 248, 118}:  \"ABB AG\",\n\t[3]byte{84, 250, 62}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{84, 250, 150}:  \"Nokia\",\n\t[3]byte{84, 251, 88}:   \"WISEWARE, Lda\",\n\t[3]byte{84, 252, 240}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{84, 253, 191}:  \"Scheidt & Bachmann GmbH\",\n\t[3]byte{84, 255, 130}:  \"Davit Solution co.\",\n\t[3]byte{84, 255, 207}:  \"Mopria Alliance\",\n\t[3]byte{88, 0, 187}:    \"Juniper Networks\",\n\t[3]byte{88, 0, 227}:    \"Liteon Technology Corporation\",\n\t[3]byte{88, 3, 251}:    \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{88, 4, 84}:     \"ICOMM HK LIMITED\",\n\t[3]byte{88, 4, 203}:    \"Tianjin Huisun Technology Co.,Ltd.\",\n\t[3]byte{88, 5, 40}:     \"LABRIS NETWORKS\",\n\t[3]byte{88, 5, 86}:     \"Elettronica GF S.r.L.\",\n\t[3]byte{88, 8, 250}:    \"Fiber Optic & telecommunication INC.\",\n\t[3]byte{88, 9, 67}:     \"Private\",\n\t[3]byte{88, 9, 229}:    \"Kivic Inc.\",\n\t[3]byte{88, 10, 32}:    \"Cisco Systems, Inc\",\n\t[3]byte{88, 16, 140}:   \"Intelbras\",\n\t[3]byte{88, 18, 67}:    \"AcSiP Technology Corp.\",\n\t[3]byte{88, 22, 38}:    \"Avaya Inc\",\n\t[3]byte{88, 22, 215}:   \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{88, 23, 12}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{88, 25, 248}:   \"ARRIS Group, Inc.\",\n\t[3]byte{88, 28, 189}:   \"Affinegy\",\n\t[3]byte{88, 29, 145}:   \"Advanced Mobile Telecom co.,ltd.\",\n\t[3]byte{88, 31, 40}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{88, 31, 103}:   \"Open-m technology limited\",\n\t[3]byte{88, 31, 170}:   \"Apple, Inc.\",\n\t[3]byte{88, 31, 239}:   \"Tuttnaer LTD\",\n\t[3]byte{88, 32, 89}:    \"Xiaomi Communications Co Ltd\",\n\t[3]byte{88, 32, 177}:   \"Hewlett Packard\",\n\t[3]byte{88, 33, 54}:    \"KMB systems, s.r.o.\",\n\t[3]byte{88, 33, 233}:   \"TWPI\",\n\t[3]byte{88, 35, 140}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{88, 37, 117}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{88, 39, 140}:   \"BUFFALO.INC\",\n\t[3]byte{88, 42, 247}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{88, 43, 219}:   \"Pax AB\",\n\t[3]byte{88, 45, 52}:    \"Qingping Electronics (Suzhou) Co., Ltd\",\n\t[3]byte{88, 46, 254}:   \"Lighting Science Group\",\n\t[3]byte{88, 47, 64}:    \"Nintendo Co.,Ltd\",\n\t[3]byte{88, 47, 66}:    \"Universal Electric Corporation\",\n\t[3]byte{88, 49, 18}:    \"DRUST\",\n\t[3]byte{88, 50, 119}:   \"Reliance Communications LLC\",\n\t[3]byte{88, 52, 59}:    \"Glovast Technology Ltd.\",\n\t[3]byte{88, 53, 38}:    \"DEEPLET TECHNOLOGY CORP\",\n\t[3]byte{88, 53, 217}:   \"Cisco Systems, Inc\",\n\t[3]byte{88, 56, 121}:   \"RICOH COMPANY, LTD.\",\n\t[3]byte{88, 59, 217}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{88, 60, 198}:   \"Omneality Ltd.\",\n\t[3]byte{88, 63, 84}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{88, 64, 78}:    \"Apple, Inc.\",\n\t[3]byte{88, 66, 228}:   \"Baxter International Inc\",\n\t[3]byte{88, 68, 152}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{88, 70, 143}:   \"Koncar Electronics and Informatics\",\n\t[3]byte{88, 70, 225}:   \"Baxter International Inc\",\n\t[3]byte{88, 71, 4}:     \" Shenzhen Webridge Technology Co.,Ltd\",\n\t[3]byte{88, 72, 34}:    \"Sony Mobile Communications Inc\",\n\t[3]byte{88, 72, 192}:   \"COFLEC\",\n\t[3]byte{88, 73, 37}:    \"E3 Enterprise\",\n\t[3]byte{88, 73, 59}:    \"Palo Alto Networks\",\n\t[3]byte{88, 73, 186}:   \"Chitai Electronic Corp.\",\n\t[3]byte{88, 76, 25}:    \"Chongqing Guohong Technology Development Company Limited\",\n\t[3]byte{88, 76, 238}:   \"Digital One Technologies, Limited\",\n\t[3]byte{88, 80, 118}:   \"Linear Equipamentos Eletronicos SA\",\n\t[3]byte{88, 80, 171}:   \"TLS Corporation\",\n\t[3]byte{88, 80, 230}:   \"Best Buy Corporation\",\n\t[3]byte{88, 80, 237}:   \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{88, 82, 138}:   \"Mitsubishi Electric Corporation\",\n\t[3]byte{88, 83, 192}:   \"Beijing Guang Runtong Technology Development Company co.,Ltd\",\n\t[3]byte{88, 85, 202}:   \"Apple, Inc.\",\n\t[3]byte{88, 86, 232}:   \"ARRIS Group, Inc.\",\n\t[3]byte{88, 87, 13}:    \"Danfoss Solar Inverters\",\n\t[3]byte{88, 89, 194}:   \"Extreme Networks, Inc.\",\n\t[3]byte{88, 95, 246}:   \"zte corporation\",\n\t[3]byte{88, 96, 95}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{88, 97, 99}:    \"Quantum Networks (SG) Pte. Ltd.\",\n\t[3]byte{88, 99, 86}:    \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{88, 99, 154}:   \"TPL SYSTEMES\",\n\t[3]byte{88, 101, 230}:  \"infomark\",\n\t[3]byte{88, 102, 186}:  \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{88, 103, 26}:   \"Barnes&Noble\",\n\t[3]byte{88, 103, 127}:  \"Clare Controls Inc.\",\n\t[3]byte{88, 104, 93}:   \"Tempo Australia Pty Ltd\",\n\t[3]byte{88, 105, 108}:  \"Ruijie Networks Co.,LTD\",\n\t[3]byte{88, 105, 249}:  \"Fusion Transactive Ltd.\",\n\t[3]byte{88, 106, 177}:  \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{88, 107, 20}:   \"Apple, Inc.\",\n\t[3]byte{88, 109, 143}:  \"Cisco-Linksys, LLC\",\n\t[3]byte{88, 110, 214}:  \"Private\",\n\t[3]byte{88, 112, 198}:  \"Shanghai Xiaoyi Technology Co., Ltd.\",\n\t[3]byte{88, 117, 33}:   \"CJSC RTSoft\",\n\t[3]byte{88, 118, 117}:  \"Beijing ECHO Technologies Co.,Ltd\",\n\t[3]byte{88, 118, 197}:  \"DIGI I'S LTD\",\n\t[3]byte{88, 122, 77}:   \"Stonesoft Corporation\",\n\t[3]byte{88, 122, 98}:   \"Texas Instruments\",\n\t[3]byte{88, 122, 106}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{88, 123, 233}:  \"AirPro Technology India Pvt. Ltd\",\n\t[3]byte{88, 126, 97}:   \"Qingdao Hisense Communications Co.,Ltd.\",\n\t[3]byte{88, 127, 87}:   \"Apple, Inc.\",\n\t[3]byte{88, 127, 102}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{88, 127, 183}:  \"SONAR INDUSTRIAL CO., LTD.\",\n\t[3]byte{88, 127, 200}:  \"S2M\",\n\t[3]byte{88, 130, 29}:   \"H. Schomäcker GmbH\",\n\t[3]byte{88, 130, 168}:  \"Microsoft\",\n\t[3]byte{88, 132, 228}:  \"IP500 Alliance e.V.\",\n\t[3]byte{88, 133, 110}:  \"QSC AG\",\n\t[3]byte{88, 133, 162}:  \"Realme Chongqing MobileTelecommunications Corp Ltd\",\n\t[3]byte{88, 133, 233}:  \"Realme Chongqing MobileTelecommunications Corp Ltd\",\n\t[3]byte{88, 135, 76}:   \"LITE-ON CLEAN ENERGY TECHNOLOGY CORP.\",\n\t[3]byte{88, 135, 226}:  \"Shenzhen Coship Electronics Co., Ltd.\",\n\t[3]byte{88, 138, 90}:   \"Dell Inc.\",\n\t[3]byte{88, 139, 243}:  \"Zyxel Communications Corporation\",\n\t[3]byte{88, 141, 9}:    \"Cisco Systems, Inc\",\n\t[3]byte{88, 141, 100}:  \"Xi'an Clevbee Technology Co.,Ltd\",\n\t[3]byte{88, 142, 129}:  \"Silicon Laboratories\",\n\t[3]byte{88, 144, 67}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{88, 145, 207}:  \"Intel Corporate\",\n\t[3]byte{88, 146, 13}:   \"Kinetic Avionics Limited\",\n\t[3]byte{88, 147, 150}:  \"Ruckus Wireless\",\n\t[3]byte{88, 147, 216}:  \"Texas Instruments\",\n\t[3]byte{88, 148, 107}:  \"Intel Corporate\",\n\t[3]byte{88, 148, 162}:  \"KETEK GmbH\",\n\t[3]byte{88, 148, 178}:  \"BrainCo\",\n\t[3]byte{88, 148, 207}:  \"Vertex Standard LMR, Inc.\",\n\t[3]byte{88, 150, 29}:   \"Intel Corporate\",\n\t[3]byte{88, 150, 48}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{88, 151, 30}:   \"Cisco Systems, Inc\",\n\t[3]byte{88, 151, 189}:  \"Cisco Systems, Inc\",\n\t[3]byte{88, 152, 53}:   \"Technicolor\",\n\t[3]byte{88, 152, 111}:  \"Revolution Display\",\n\t[3]byte{88, 155, 11}:   \"Shineway Technologies, Inc.\",\n\t[3]byte{88, 156, 252}:  \"FreeBSD Foundation\",\n\t[3]byte{88, 158, 198}:  \"Gigaset Communications GmbH\",\n\t[3]byte{88, 160, 35}:   \"Intel Corporate\",\n\t[3]byte{88, 160, 203}:  \"TrackNet, Inc\",\n\t[3]byte{88, 162, 181}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{88, 164, 142}:  \"PixArt Imaging Inc.\",\n\t[3]byte{88, 167, 111}:  \"iD corporation\",\n\t[3]byte{88, 168, 57}:   \"Intel Corporate\",\n\t[3]byte{88, 168, 123}:  \"Fitbit, Inc.\",\n\t[3]byte{88, 172, 120}:  \"Cisco Systems, Inc\",\n\t[3]byte{88, 176, 53}:   \"Apple, Inc.\",\n\t[3]byte{88, 176, 212}:  \"ZuniData Systems Inc.\",\n\t[3]byte{88, 177, 15}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{88, 179, 252}:  \"SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\",\n\t[3]byte{88, 180, 45}:   \"YSTen Technology Co.,Ltd\",\n\t[3]byte{88, 181, 104}:  \"SECURITAS DIRECT ESPAÑA, SAU\",\n\t[3]byte{88, 182, 35}:   \"Beijing Xiaomi Mobile Software Co., Ltd\",\n\t[3]byte{88, 182, 51}:   \"Ruckus Wireless\",\n\t[3]byte{88, 185, 97}:   \"SOLEM Electronique\",\n\t[3]byte{88, 185, 225}:  \"Crystalfontz America, Inc.\",\n\t[3]byte{88, 186, 212}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{88, 188, 39}:   \"Cisco Systems, Inc\",\n\t[3]byte{88, 188, 143}:  \"Cognitive Systems Corp.\",\n\t[3]byte{88, 189, 163}:  \"Nintendo Co., Ltd.\",\n\t[3]byte{88, 189, 249}:  \"Sigrand\",\n\t[3]byte{88, 191, 234}:  \"Cisco Systems, Inc\",\n\t[3]byte{88, 193, 122}:  \"Cambium Networks Limited\",\n\t[3]byte{88, 194, 50}:   \"NEC Corporation\",\n\t[3]byte{88, 195, 139}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{88, 197, 131}:  \"ITEL MOBILE LIMITED\",\n\t[3]byte{88, 197, 203}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{88, 198, 240}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{88, 200, 118}:  \"China Mobile (Hangzhou) Information Technology Co., Ltd.\",\n\t[3]byte{88, 201, 53}:   \"Chiun Mai Communication Systems, Inc\",\n\t[3]byte{88, 203, 82}:   \"Google, Inc.\",\n\t[3]byte{88, 207, 75}:   \"Lufkin Industries\",\n\t[3]byte{88, 208, 97}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{88, 208, 113}:  \"BW Broadcast\",\n\t[3]byte{88, 208, 143}:  \"IEEE 1904.1 Working Group\",\n\t[3]byte{88, 213, 10}:   \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{88, 213, 110}:  \"D-Link International\",\n\t[3]byte{88, 214, 122}:  \"TCPlink\",\n\t[3]byte{88, 214, 211}:  \"Dairy Cheq Inc\",\n\t[3]byte{88, 215, 89}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{88, 217, 195}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{88, 217, 213}:  \"Tenda Technology Co.,Ltd.Dongguan branch\",\n\t[3]byte{88, 219, 21}:   \"TECNO MOBILE LIMITED\",\n\t[3]byte{88, 219, 141}:  \"Fast Co., Ltd.\",\n\t[3]byte{88, 220, 109}:  \"Exceptional Innovation, Inc.\",\n\t[3]byte{88, 224, 44}:   \"Micro Technic A/S\",\n\t[3]byte{88, 225, 108}:  \"Ying Hua Information Technology (Shanghai)Co., LTD\",\n\t[3]byte{88, 226, 143}:  \"Apple, Inc.\",\n\t[3]byte{88, 227, 38}:   \"Compass Technologies Inc.\",\n\t[3]byte{88, 228, 118}:  \"CENTRON COMMUNICATIONS TECHNOLOGIES FUJIAN CO.,LTD\",\n\t[3]byte{88, 230, 54}:   \"EVRsafe Technologies\",\n\t[3]byte{88, 230, 186}:  \"Apple, Inc.\",\n\t[3]byte{88, 231, 71}:   \"Deltanet AG\",\n\t[3]byte{88, 232, 8}:    \"AUTONICS CORPORATION\",\n\t[3]byte{88, 232, 115}:  \"HANGZHOU DANGBEI NETWORK TECH.Co.,Ltd\",\n\t[3]byte{88, 232, 118}:  \"IEEE Registration Authority\",\n\t[3]byte{88, 234, 252}:  \"ELL-IoT Inc\",\n\t[3]byte{88, 235, 20}:   \"Proteus Digital Health\",\n\t[3]byte{88, 236, 225}:  \"Newport Corporation\",\n\t[3]byte{88, 236, 237}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{88, 238, 206}:  \"Icon Time Systems\",\n\t[3]byte{88, 239, 104}:  \"Belkin International Inc.\",\n\t[3]byte{88, 241, 2}:    \"BLU Products Inc.\",\n\t[3]byte{88, 242, 252}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{88, 243, 135}:  \"HCCP\",\n\t[3]byte{88, 243, 156}:  \"Cisco Systems, Inc\",\n\t[3]byte{88, 244, 150}:  \"Source Chain\",\n\t[3]byte{88, 246, 123}:  \"Xia Men UnionCore Technology LTD.\",\n\t[3]byte{88, 246, 191}:  \"Kyoto University\",\n\t[3]byte{88, 249, 135}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{88, 249, 142}:  \"SECUDOS GmbH\",\n\t[3]byte{88, 251, 132}:  \"Intel Corporate\",\n\t[3]byte{88, 252, 115}:  \"Arria Live Media, Inc.\",\n\t[3]byte{88, 252, 219}:  \"IEEE Registration Authority\",\n\t[3]byte{88, 253, 32}:   \"Bravida Sakerhet AB\",\n\t[3]byte{88, 253, 177}:  \"LG Electronics\",\n\t[3]byte{88, 253, 190}:  \"Shenzhen Taikaida Technology Co., Ltd\",\n\t[3]byte{92, 0, 56}:     \"Viasat Group S.p.A.\",\n\t[3]byte{92, 2, 106}:    \"Applied Vision Corporation\",\n\t[3]byte{92, 2, 114}:    \"Silicon Laboratories\",\n\t[3]byte{92, 3, 57}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{92, 7, 111}:    \"Thought Creator\",\n\t[3]byte{92, 9, 71}:     \"Apple, Inc.\",\n\t[3]byte{92, 9, 121}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{92, 10, 91}:    \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{92, 11, 202}:   \"Tunstall Nordic AB\",\n\t[3]byte{92, 12, 14}:    \"Guizhou Huaxintong Semiconductor Technology Co Ltd\",\n\t[3]byte{92, 12, 187}:   \"CELIZION Inc.\",\n\t[3]byte{92, 14, 139}:   \"Extreme Networks, Inc.\",\n\t[3]byte{92, 15, 251}:   \"Amino Communications Ltd\",\n\t[3]byte{92, 17, 147}:   \"Seal One AG\",\n\t[3]byte{92, 20, 55}:    \"Thyssenkrupp Aufzugswerke GmbH\",\n\t[3]byte{92, 21, 21}:    \"ADVAN\",\n\t[3]byte{92, 21, 225}:   \"AIDC TECHNOLOGY (S) PTE LTD\",\n\t[3]byte{92, 22, 199}:   \"Big Switch Networks\",\n\t[3]byte{92, 23, 55}:    \"I-View Now, LLC.\",\n\t[3]byte{92, 23, 207}:   \"OnePlus Technology (Shenzhen) Co., Ltd\",\n\t[3]byte{92, 23, 211}:   \"LGE \",\n\t[3]byte{92, 24, 181}:   \"Talon Communications\",\n\t[3]byte{92, 26, 111}:   \"Cambridge Industries(Group) Co.,Ltd.\",\n\t[3]byte{92, 28, 185}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{92, 29, 217}:   \"Apple, Inc.\",\n\t[3]byte{92, 32, 208}:   \"Asoni Communication Co., Ltd.\",\n\t[3]byte{92, 34, 196}:   \"DAE EUN ELETRONICS CO., LTD\",\n\t[3]byte{92, 35, 22}:    \"Squirrels Research Labs LLC\",\n\t[3]byte{92, 36, 67}:    \"O-Sung Telecom Co., Ltd.\",\n\t[3]byte{92, 36, 121}:   \"Baltech AG\",\n\t[3]byte{92, 37, 76}:    \"Avire Global Pte Ltd\",\n\t[3]byte{92, 38, 10}:    \"Dell Inc.\",\n\t[3]byte{92, 38, 35}:    \"WaveLynx Technologies Corporation\",\n\t[3]byte{92, 39, 212}:   \"Shenzhen Qihu Intelligent Technology Company Limited\",\n\t[3]byte{92, 42, 239}:   \"  r2p Asia-Pacific Pty Ltd\",\n\t[3]byte{92, 43, 245}:   \"Vivint Wireless Inc. \",\n\t[3]byte{92, 46, 89}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{92, 46, 210}:   \"ABC(XiSheng) Electronics Co.,Ltd\",\n\t[3]byte{92, 49, 62}:    \"Texas Instruments\",\n\t[3]byte{92, 50, 197}:   \"Teracom Ltd.\",\n\t[3]byte{92, 51, 39}:    \"Spazio Italia srl\",\n\t[3]byte{92, 51, 92}:    \"Swissphone Telecom AG\",\n\t[3]byte{92, 51, 142}:   \"Alpha Networks Inc.\",\n\t[3]byte{92, 52, 0}:     \"HISENSE VISUAL TECHNOLOGY CO.,LTD\",\n\t[3]byte{92, 53, 59}:    \"Compal Broadband Networks, Inc.\",\n\t[3]byte{92, 53, 218}:   \"There Corporation Oy\",\n\t[3]byte{92, 54, 184}:   \"TCL King Electrical Appliances (Huizhou) Co., Ltd\",\n\t[3]byte{92, 56, 224}:   \"Shanghai Super Electronics Technology Co.,LTD\",\n\t[3]byte{92, 58, 61}:    \"zte corporation\",\n\t[3]byte{92, 58, 69}:    \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{92, 59, 53}:    \"Gehirn Inc.\",\n\t[3]byte{92, 60, 39}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{92, 64, 88}:    \"Jefferson Audio Video Systems, Inc.\",\n\t[3]byte{92, 65, 90}:    \"Amazon.com, LLC\",\n\t[3]byte{92, 65, 231}:   \"Wiatec International Ltd.\",\n\t[3]byte{92, 67, 210}:   \"HAZEMEYER\",\n\t[3]byte{92, 68, 62}:    \"Skullcandy\",\n\t[3]byte{92, 69, 39}:    \"Juniper Networks\",\n\t[3]byte{92, 73, 121}:   \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{92, 73, 125}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{92, 74, 31}:    \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{92, 74, 38}:    \"Enguity Technology Corp\",\n\t[3]byte{92, 76, 169}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{92, 80, 21}:    \"Cisco Systems, Inc\",\n\t[3]byte{92, 81, 79}:    \"Intel Corporate\",\n\t[3]byte{92, 81, 129}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{92, 81, 136}:   \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{92, 82, 30}:    \"Nintendo Co.,Ltd\",\n\t[3]byte{92, 84, 109}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{92, 85, 120}:   \"iryx corp\",\n\t[3]byte{92, 86, 237}:   \"3pleplay Electronics Private Limited\",\n\t[3]byte{92, 87, 26}:    \"ARRIS Group, Inc.\",\n\t[3]byte{92, 87, 200}:   \"Nokia Corporation\",\n\t[3]byte{92, 88, 25}:    \"Jingsheng Technology Co., Ltd.\",\n\t[3]byte{92, 89, 72}:    \"Apple, Inc.\",\n\t[3]byte{92, 90, 199}:   \"Cisco Systems, Inc\",\n\t[3]byte{92, 90, 234}:   \"FORD\",\n\t[3]byte{92, 91, 53}:    \"Mist Systems, Inc.\",\n\t[3]byte{92, 91, 194}:   \"YIK Corporation\",\n\t[3]byte{92, 94, 171}:   \"Juniper Networks\",\n\t[3]byte{92, 95, 103}:   \"Intel Corporate\",\n\t[3]byte{92, 99, 191}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{92, 99, 201}:   \"Intellithings Ltd.\",\n\t[3]byte{92, 100, 122}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{92, 102, 108}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{92, 103, 118}:  \"IDS Imaging Development Systems GmbH\",\n\t[3]byte{92, 104, 208}:  \"Aurora Innovation Inc.\",\n\t[3]byte{92, 105, 132}:  \"NUVICO\",\n\t[3]byte{92, 106, 125}:  \"KENTKART EGE ELEKTRONIK SAN. VE TIC. LTD. STI. \",\n\t[3]byte{92, 106, 128}:  \"Zyxel Communications Corporation\",\n\t[3]byte{92, 107, 50}:   \"Texas Instruments\",\n\t[3]byte{92, 107, 79}:   \"Hello Inc.\",\n\t[3]byte{92, 107, 215}:  \"Foshan VIOMI Electric Appliance Technology Co. Ltd.\",\n\t[3]byte{92, 109, 32}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{92, 111, 79}:   \"S.A. SISTEL\",\n\t[3]byte{92, 112, 163}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{92, 113, 13}:   \"Cisco Systems, Inc\",\n\t[3]byte{92, 117, 175}:  \"Fitbit, Inc.\",\n\t[3]byte{92, 118, 149}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{92, 119, 87}:   \"Haivision Network Video\",\n\t[3]byte{92, 119, 118}:  \"TCT mobile ltd\",\n\t[3]byte{92, 120, 248}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{92, 125, 94}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{92, 125, 125}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{92, 128, 182}:  \"Intel Corporate\",\n\t[3]byte{92, 129, 167}:  \"Network Devices Pty Ltd\",\n\t[3]byte{92, 131, 143}:  \"Cisco Systems, Inc\",\n\t[3]byte{92, 132, 134}:  \"Brightsource Industries Israel LTD\",\n\t[3]byte{92, 133, 126}:  \"IEEE Registration Authority\",\n\t[3]byte{92, 134, 19}:   \"Beijing Zhoenet Technology Co., Ltd\",\n\t[3]byte{92, 134, 74}:   \"Secret Labs LLC\",\n\t[3]byte{92, 134, 92}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{92, 134, 193}:  \"DONGGUAN SOLUM ELECTRONICS CO.,LTD\",\n\t[3]byte{92, 135, 120}:  \"Cybertelbridge co.,ltd\",\n\t[3]byte{92, 135, 156}:  \"Intel Corporate\",\n\t[3]byte{92, 136, 22}:   \"Rockwell Automation\",\n\t[3]byte{92, 137, 154}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{92, 137, 212}:  \"Beijing Banner Electric Co.,Ltd\",\n\t[3]byte{92, 138, 56}:   \"Hewlett Packard\",\n\t[3]byte{92, 141, 45}:   \"Shanghai Wellpay Information Technology Co., Ltd\",\n\t[3]byte{92, 141, 78}:   \"Apple, Inc.\",\n\t[3]byte{92, 143, 224}:  \"ARRIS Group, Inc.\",\n\t[3]byte{92, 144, 18}:   \"Owl Cyber Defense Solutions, LLC\",\n\t[3]byte{92, 145, 87}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{92, 145, 253}:  \"Jaewoncnc\",\n\t[3]byte{92, 146, 94}:   \"Zioncom Electronics (Shenzhen) Ltd.\",\n\t[3]byte{92, 147, 162}:  \"Liteon Technology Corporation\",\n\t[3]byte{92, 149, 174}:  \"Apple, Inc.\",\n\t[3]byte{92, 150, 86}:   \"AzureWave Technology Inc.\",\n\t[3]byte{92, 150, 106}:  \"RTNET\",\n\t[3]byte{92, 150, 157}:  \"Apple, Inc.\",\n\t[3]byte{92, 151, 243}:  \"Apple, Inc.\",\n\t[3]byte{92, 153, 96}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{92, 154, 216}:  \"FUJITSU LIMITED\",\n\t[3]byte{92, 161, 118}:  \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{92, 161, 120}:  \"TableTop Media (dba Ziosk)\",\n\t[3]byte{92, 161, 224}:  \"EmbedWay Technologies\",\n\t[3]byte{92, 163, 157}:  \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{92, 163, 235}:  \"Lokel s.r.o.\",\n\t[3]byte{92, 164, 138}:  \"Cisco Systems, Inc\",\n\t[3]byte{92, 165, 188}:  \"eero inc.\",\n\t[3]byte{92, 166, 45}:   \"Cisco Systems, Inc\",\n\t[3]byte{92, 168, 106}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{92, 169, 51}:   \"Luma Home\",\n\t[3]byte{92, 170, 253}:  \"Sonos, Inc.\",\n\t[3]byte{92, 172, 76}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{92, 173, 118}:  \"Shenzhen TCL New Technology Co., Ltd\",\n\t[3]byte{92, 173, 207}:  \"Apple, Inc.\",\n\t[3]byte{92, 175, 6}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{92, 176, 102}:  \"ARRIS Group, Inc.\",\n\t[3]byte{92, 177, 62}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{92, 177, 95}:   \"Oceanblue Cloud Technology Limited\",\n\t[3]byte{92, 178, 158}:  \"ASCO Power Technologies\",\n\t[3]byte{92, 179, 149}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{92, 179, 246}:  \"Human, Incorporated\",\n\t[3]byte{92, 180, 62}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{92, 180, 226}:  \"Inspur Software Group Ltd.\",\n\t[3]byte{92, 181, 36}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{92, 181, 89}:   \"CNEX Labs\",\n\t[3]byte{92, 182, 204}:  \"NovaComm Technologies Inc.\",\n\t[3]byte{92, 184, 203}:  \"Allis Communications\",\n\t[3]byte{92, 185, 1}:    \"Hewlett Packard\",\n\t[3]byte{92, 186, 44}:   \"Hewlett Packard Enterprise\",\n\t[3]byte{92, 186, 55}:   \"Microsoft Corporation\",\n\t[3]byte{92, 186, 239}:  \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{92, 189, 158}:  \"HONGKONG MIRACLE EAGLE TECHNOLOGY(GROUP) LIMITED\",\n\t[3]byte{92, 193, 215}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{92, 194, 19}:   \"Fr. Sauter AG\",\n\t[3]byte{92, 195, 7}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{92, 197, 212}:  \"Intel Corporate\",\n\t[3]byte{92, 198, 208}:  \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{92, 198, 233}:  \"Edifier International\",\n\t[3]byte{92, 199, 215}:  \"AZROAD TECHNOLOGY COMPANY LIMITED\",\n\t[3]byte{92, 201, 153}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{92, 201, 211}:  \"PALLADIUM ENERGY ELETRONICA DA AMAZONIA LTDA\",\n\t[3]byte{92, 202, 26}:   \"Microsoft Mobile Oy\",\n\t[3]byte{92, 202, 50}:   \"Theben AG\",\n\t[3]byte{92, 202, 211}:  \"CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.\",\n\t[3]byte{92, 203, 153}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{92, 203, 202}:  \"FUJIAN STAR-NET COMMUNICATION CO.,LTD\",\n\t[3]byte{92, 204, 160}:  \"Gridwiz Inc.\",\n\t[3]byte{92, 204, 255}:  \"Techroutes Network Pvt Ltd\",\n\t[3]byte{92, 205, 91}:   \"Intel Corporate\",\n\t[3]byte{92, 205, 124}:  \"MEIZU Technology Co.,Ltd.\",\n\t[3]byte{92, 206, 173}:  \"CDYNE Corporation\",\n\t[3]byte{92, 207, 127}:  \"Espressif Inc.\",\n\t[3]byte{92, 209, 53}:   \"Xtreme Power Systems\",\n\t[3]byte{92, 210, 11}:   \"Yytek Co., Ltd.\",\n\t[3]byte{92, 210, 228}:  \"Intel Corporate\",\n\t[3]byte{92, 212, 27}:   \"UCZOON Technology Co., LTD\",\n\t[3]byte{92, 212, 171}:  \"Zektor\",\n\t[3]byte{92, 213, 181}:  \"Shenzhen WiSiYiLink Technology Co.,Ltd\",\n\t[3]byte{92, 214, 31}:   \"Qardio, Inc\",\n\t[3]byte{92, 216, 158}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{92, 217, 152}:  \"D-Link Corporation\",\n\t[3]byte{92, 218, 212}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{92, 220, 150}:  \"Arcadyan Technology Corporation\",\n\t[3]byte{92, 221, 112}:  \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{92, 224, 197}:  \"Intel Corporate\",\n\t[3]byte{92, 224, 202}:  \"FeiTian United (Beijing) System Technology Co., Ltd.\",\n\t[3]byte{92, 224, 246}:  \"NIC.br- Nucleo de Informacao e Coordenacao do Ponto BR\",\n\t[3]byte{92, 225, 118}:  \"Cisco Systems, Inc\",\n\t[3]byte{92, 226, 35}:   \"Delphin Technology AG\",\n\t[3]byte{92, 226, 134}:  \"Nortel Networks\",\n\t[3]byte{92, 226, 140}:  \"Zyxel Communications Corporation\",\n\t[3]byte{92, 226, 244}:  \"AcSiP Technology Corp.\",\n\t[3]byte{92, 227, 14}:   \"ARRIS Group, Inc.\",\n\t[3]byte{92, 227, 182}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{92, 229, 12}:   \"Beijing Xiaomi Mobile Software Co., Ltd\",\n\t[3]byte{92, 231, 160}:  \"Nokia\",\n\t[3]byte{92, 231, 191}:  \"New Singularity International Technical Development Co.,Ltd\",\n\t[3]byte{92, 232, 131}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{92, 232, 183}:  \"Oraimo Technology Limited\",\n\t[3]byte{92, 232, 235}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{92, 234, 29}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{92, 235, 78}:   \"R. STAHL HMI Systems GmbH\",\n\t[3]byte{92, 235, 104}:  \"Cheerstar Technology Co., Ltd\",\n\t[3]byte{92, 238, 121}:  \"Global Digitech Co LTD\",\n\t[3]byte{92, 242, 7}:    \"Speco Technologies\",\n\t[3]byte{92, 242, 134}:  \"IEEE Registration Authority\",\n\t[3]byte{92, 243, 112}:  \"CC&C Technologies, Inc\",\n\t[3]byte{92, 243, 252}:  \"IBM Corp\",\n\t[3]byte{92, 244, 171}:  \"Zyxel Communications Corporation\",\n\t[3]byte{92, 245, 13}:   \"Institute of microelectronic applications\",\n\t[3]byte{92, 245, 218}:  \"Apple, Inc.\",\n\t[3]byte{92, 246, 220}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{92, 247, 195}:  \"SYNTECH (HK) TECHNOLOGY LIMITED\",\n\t[3]byte{92, 247, 230}:  \"Apple, Inc.\",\n\t[3]byte{92, 248, 33}:   \"Texas Instruments\",\n\t[3]byte{92, 248, 161}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{92, 249, 56}:   \"Apple, Inc.\",\n\t[3]byte{92, 249, 106}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{92, 249, 221}:  \"Dell Inc.\",\n\t[3]byte{92, 249, 240}:  \"Atomos Engineering P/L\",\n\t[3]byte{92, 250, 251}:  \"Acubit\",\n\t[3]byte{92, 251, 124}:  \"Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd\",\n\t[3]byte{92, 252, 102}:  \"Cisco Systems, Inc\",\n\t[3]byte{92, 254, 158}:  \"Wiwynn Corporation Tainan Branch\",\n\t[3]byte{92, 255, 53}:   \"Wistron Corporation\",\n\t[3]byte{92, 255, 255}:  \"Shenzhen Kezhonglong Optoelectronic Technology Co., Ltd\",\n\t[3]byte{96, 1, 148}:    \"Espressif Inc.\",\n\t[3]byte{96, 2, 146}:    \"PEGATRON CORPORATION\",\n\t[3]byte{96, 2, 180}:    \"Wistron Neweb Corporation\",\n\t[3]byte{96, 3, 8}:      \"Apple, Inc.\",\n\t[3]byte{96, 3, 71}:     \"Billion Electric Co. Ltd.\",\n\t[3]byte{96, 3, 166}:    \"Inteno Broadband Technology AB\",\n\t[3]byte{96, 4, 23}:     \"POSBANK CO.,LTD\",\n\t[3]byte{96, 5, 138}:    \"Hitachi Metals, Ltd.\",\n\t[3]byte{96, 7, 124}:    \"Jala Group\",\n\t[3]byte{96, 8, 16}:     \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{96, 8, 55}:     \"ivvi Scientific(Nanchang)Co.Ltd\",\n\t[3]byte{96, 9, 195}:    \"u-blox AG\",\n\t[3]byte{96, 11, 3}:     \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{96, 15, 119}:   \"SilverPlus, Inc\",\n\t[3]byte{96, 16, 162}:   \"Crompton Instruments\",\n\t[3]byte{96, 17, 153}:   \"Siama Systems Inc\",\n\t[3]byte{96, 18, 60}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{96, 18, 131}:   \"TSB REAL TIME LOCATION SYSTEMS S.L.\",\n\t[3]byte{96, 18, 139}:   \"CANON INC.\",\n\t[3]byte{96, 20, 102}:   \"zte corporation\",\n\t[3]byte{96, 20, 179}:   \"CyberTAN Technology Inc.\",\n\t[3]byte{96, 21, 199}:   \"IdaTech\",\n\t[3]byte{96, 24, 3}:     \"Daikin Air-conditioning (Shanghai) Co., Ltd.\",\n\t[3]byte{96, 24, 46}:    \"ShenZhen Protruly Electronic Ltd co.\",\n\t[3]byte{96, 24, 136}:   \"zte corporation\",\n\t[3]byte{96, 25, 12}:    \"RRAMAC\",\n\t[3]byte{96, 25, 41}:    \"VOLTRONIC POWER TECHNOLOGY(SHENZHEN) CORP.\",\n\t[3]byte{96, 25, 112}:   \"HUIZHOU QIAOXING ELECTRONICS TECHNOLOGY CO., LTD.\",\n\t[3]byte{96, 25, 113}:   \"ARRIS Group, Inc.\",\n\t[3]byte{96, 29, 15}:    \"Midnite Solar\",\n\t[3]byte{96, 29, 145}:   \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{96, 29, 157}:   \"Sichuan AI-Link Technology Co., Ltd.\",\n\t[3]byte{96, 30, 2}:     \"EltexAlatau\",\n\t[3]byte{96, 33, 1}:     \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{96, 33, 3}:     \"I4VINE, INC\",\n\t[3]byte{96, 33, 192}:   \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{96, 35, 164}:   \"Sichuan\\u00a0AI-Link\\u00a0Technology\\u00a0Co.,\\u00a0Ltd.\",\n\t[3]byte{96, 36, 193}:   \"Jiangsu Zhongxun Electronic Technology Co., Ltd\",\n\t[3]byte{96, 39, 28}:    \"VIDEOR E. Hartig GmbH\",\n\t[3]byte{96, 41, 213}:   \"DAVOLINK Inc.\",\n\t[3]byte{96, 42, 84}:    \"CardioTek B.V.\",\n\t[3]byte{96, 42, 208}:   \"Cisco SPVTG\",\n\t[3]byte{96, 46, 32}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{96, 48, 212}:   \"Apple, Inc.\",\n\t[3]byte{96, 49, 59}:    \"Sunnovo International Limited\",\n\t[3]byte{96, 49, 151}:   \"Zyxel Communications Corporation\",\n\t[3]byte{96, 50, 177}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{96, 50, 240}:   \"Mplus technology\",\n\t[3]byte{96, 51, 75}:    \"Apple, Inc.\",\n\t[3]byte{96, 53, 83}:    \"Buwon Technology\",\n\t[3]byte{96, 53, 192}:   \"SFR\",\n\t[3]byte{96, 54, 150}:   \"The Sapling Company\",\n\t[3]byte{96, 54, 221}:   \"Intel Corporate\",\n\t[3]byte{96, 56, 14}:    \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{96, 56, 224}:   \"Belkin International Inc.\",\n\t[3]byte{96, 57, 31}:    \"ABB Ltd\",\n\t[3]byte{96, 58, 124}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{96, 61, 38}:    \"Technicolor CH USA Inc.\",\n\t[3]byte{96, 62, 123}:   \"Gafachi, Inc.\",\n\t[3]byte{96, 62, 202}:   \"Cambridge Medical Robotics Ltd\",\n\t[3]byte{96, 63, 197}:   \"COX CO., LTD\",\n\t[3]byte{96, 66, 127}:   \"SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\",\n\t[3]byte{96, 68, 122}:   \"Water-i.d. GmbH\",\n\t[3]byte{96, 68, 245}:   \"Easy Digital Ltd.\",\n\t[3]byte{96, 69, 94}:    \"Liptel s.r.o.\",\n\t[3]byte{96, 69, 189}:   \"Microsoft\",\n\t[3]byte{96, 69, 203}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{96, 70, 22}:    \"XIAMEN VANN INTELLIGENT CO., LTD\",\n\t[3]byte{96, 71, 98}:    \"Beijing Sensoro Technology Co.,Ltd.\",\n\t[3]byte{96, 71, 212}:   \"FORICS Electronic Technology Co., Ltd.\",\n\t[3]byte{96, 72, 38}:    \"Newbridge Technologies Int. Ltd.\",\n\t[3]byte{96, 73, 193}:   \"Avaya Inc\",\n\t[3]byte{96, 74, 28}:    \"SUYIN Corporation\",\n\t[3]byte{96, 75, 170}:   \"Magic Leap, Inc.\",\n\t[3]byte{96, 80, 193}:   \"Kinetek Sports\",\n\t[3]byte{96, 81, 44}:    \"TCT mobile ltd\",\n\t[3]byte{96, 82, 208}:   \"FACTS Engineering \",\n\t[3]byte{96, 83, 23}:    \"Sandstone Technologies\",\n\t[3]byte{96, 84, 100}:   \"Eyedro Green Solutions Inc.\",\n\t[3]byte{96, 86, 97}:    \"IXECLOUD Tech\",\n\t[3]byte{96, 87, 24}:    \"Intel Corporate\",\n\t[3]byte{96, 91, 180}:   \"AzureWave Technology Inc.\",\n\t[3]byte{96, 95, 141}:   \"eero inc.\",\n\t[3]byte{96, 96, 31}:    \"SZ DJI TECHNOLOGY CO.,LTD\",\n\t[3]byte{96, 97, 223}:   \"Z-meta Research LLC\",\n\t[3]byte{96, 99, 76}:    \"D-Link International\",\n\t[3]byte{96, 99, 249}:   \"Ciholas, Inc.\",\n\t[3]byte{96, 99, 253}:   \"Transcend Communication Beijing Co.,Ltd.\",\n\t[3]byte{96, 100, 5}:    \"Texas Instruments\",\n\t[3]byte{96, 100, 83}:   \"AOD Co.,Ltd.\",\n\t[3]byte{96, 100, 161}:  \"RADiflow Ltd.\",\n\t[3]byte{96, 103, 32}:   \"Intel Corporate\",\n\t[3]byte{96, 104, 78}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{96, 105, 68}:   \"Apple, Inc.\",\n\t[3]byte{96, 105, 155}:  \"isepos GmbH\",\n\t[3]byte{96, 107, 189}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{96, 107, 255}:  \"Nintendo Co.,Ltd\",\n\t[3]byte{96, 108, 102}:  \"Intel Corporate\",\n\t[3]byte{96, 109, 60}:   \"Luxshare Precision Industry Company Limited\",\n\t[3]byte{96, 109, 199}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{96, 110, 208}:  \"SEAL AG\",\n\t[3]byte{96, 112, 192}:  \"Apple, Inc.\",\n\t[3]byte{96, 114, 11}:   \"BLU Products Inc\",\n\t[3]byte{96, 115, 92}:   \"Cisco Systems, Inc\",\n\t[3]byte{96, 115, 188}:  \"zte corporation\",\n\t[3]byte{96, 116, 141}:  \"Atmaca Elektronik\",\n\t[3]byte{96, 118, 136}:  \"Velodyne\",\n\t[3]byte{96, 119, 113}:  \"Texas Instruments\",\n\t[3]byte{96, 119, 226}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{96, 126, 201}:  \"Apple, Inc.\",\n\t[3]byte{96, 126, 205}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{96, 126, 221}:  \"Microsoft Mobile Oy\",\n\t[3]byte{96, 129, 43}:   \"Custom Control Concepts\",\n\t[3]byte{96, 129, 249}:  \"Helium Systems, Inc\",\n\t[3]byte{96, 131, 52}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{96, 131, 115}:  \"Apple, Inc.\",\n\t[3]byte{96, 131, 178}:  \"GkWare e.K.\",\n\t[3]byte{96, 132, 59}:   \"Soladigm, Inc.\",\n\t[3]byte{96, 132, 189}:  \"BUFFALO.INC\",\n\t[3]byte{96, 134, 69}:   \"Avery Weigh-Tronix, LLC\",\n\t[3]byte{96, 137, 60}:   \"Thermo Fisher Scientific P.O.A.\",\n\t[3]byte{96, 137, 177}:  \"Key Digital Systems\",\n\t[3]byte{96, 137, 183}:  \"KAEL MÜHENDİSLİK ELEKTRONİK TİCARET SANAYİ LİMİTED ŞİRKETİ\",\n\t[3]byte{96, 139, 14}:   \"Apple, Inc.\",\n\t[3]byte{96, 140, 43}:   \"Hanson Technology\",\n\t[3]byte{96, 140, 74}:   \"Apple, Inc.\",\n\t[3]byte{96, 140, 223}:  \"Private\",\n\t[3]byte{96, 140, 230}:  \"ARRIS Group, Inc.\",\n\t[3]byte{96, 141, 23}:   \"Sentrus Government Systems Division, Inc\",\n\t[3]byte{96, 142, 8}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{96, 143, 92}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{96, 144, 132}:  \"DSSD Inc\",\n\t[3]byte{96, 145, 243}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{96, 146, 23}:   \"Apple, Inc.\",\n\t[3]byte{96, 146, 245}:  \"ARRIS Group, Inc.\",\n\t[3]byte{96, 149, 206}:  \"IEEE Registration Authority\",\n\t[3]byte{96, 150, 32}:   \"Private\",\n\t[3]byte{96, 151, 221}:  \"MicroSys Electronics GmbH\",\n\t[3]byte{96, 152, 19}:   \"Shanghai Visking Digital Technology Co. LTD\",\n\t[3]byte{96, 152, 102}:  \"Texas Instruments\",\n\t[3]byte{96, 153, 209}:  \"Vuzix / Lenovo\",\n\t[3]byte{96, 154, 164}:  \"GVI SECURITY INC.\",\n\t[3]byte{96, 154, 193}:  \"Apple, Inc.\",\n\t[3]byte{96, 155, 45}:   \"JMACS Japan Co., Ltd.\",\n\t[3]byte{96, 155, 200}:  \"Hipad Intelligent Technology Co., Ltd.\",\n\t[3]byte{96, 156, 159}:  \"Brocade Communications Systems LLC\",\n\t[3]byte{96, 158, 100}:  \"Vivonic GmbH\",\n\t[3]byte{96, 159, 157}:  \"CloudSwitch\",\n\t[3]byte{96, 161, 10}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{96, 161, 30}:   \"Wuhan Maxsine Electric Co.,Ltd.\",\n\t[3]byte{96, 163, 125}:  \"Apple, Inc.\",\n\t[3]byte{96, 164, 35}:   \"Silicon Laboratories\",\n\t[3]byte{96, 164, 76}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{96, 164, 208}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{96, 167, 48}:   \"Shenzhen Yipinfang Internet Technology Co.,Ltd\",\n\t[3]byte{96, 168, 254}:  \"Nokia\",\n\t[3]byte{96, 169, 176}:  \"Merchandising Technologies, Inc\",\n\t[3]byte{96, 170, 239}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{96, 171, 20}:   \"LG Innotek\",\n\t[3]byte{96, 171, 103}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{96, 171, 210}:  \"Bose Corporation\",\n\t[3]byte{96, 172, 200}:  \"KunTeng Inc.\",\n\t[3]byte{96, 175, 109}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{96, 177, 133}:  \"ATH system\",\n\t[3]byte{96, 179, 135}:  \"Synergics Technologies GmbH\",\n\t[3]byte{96, 179, 196}:  \"Elber Srl\",\n\t[3]byte{96, 180, 247}:  \"Plume Design Inc\",\n\t[3]byte{96, 182, 6}:    \"Phorus\",\n\t[3]byte{96, 182, 23}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{96, 183, 110}:  \"Google, Inc.\",\n\t[3]byte{96, 185, 51}:   \"Deutron Electronics Corp.\",\n\t[3]byte{96, 185, 130}:  \"RO.VE.R. Laboratories S.p.A.\",\n\t[3]byte{96, 186, 24}:   \"nextLAP GmbH\",\n\t[3]byte{96, 187, 12}:   \"Beijing HuaqinWorld Technology Co,Ltd\",\n\t[3]byte{96, 188, 76}:   \"EWM Hightec Welding GmbH\",\n\t[3]byte{96, 189, 145}:  \"Move Innovation\",\n\t[3]byte{96, 190, 181}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{96, 192, 191}:  \"ON Semiconductor\",\n\t[3]byte{96, 193, 203}:  \"Fujian Great Power PLC Equipment Co.,Ltd\",\n\t[3]byte{96, 195, 151}:  \"2Wire Inc\",\n\t[3]byte{96, 197, 71}:   \"Apple, Inc.\",\n\t[3]byte{96, 197, 168}:  \"Beijing LT Honway Technology Co.,Ltd\",\n\t[3]byte{96, 197, 173}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{96, 198, 88}:   \"PHYTRONIX Co.,Ltd.\",\n\t[3]byte{96, 199, 152}:  \"Verifone\",\n\t[3]byte{96, 201, 128}:  \"Trymus\",\n\t[3]byte{96, 203, 251}:  \"AirScape Inc.\",\n\t[3]byte{96, 205, 169}:  \"Abloomy\",\n\t[3]byte{96, 205, 197}:  \"Taiwan Carol Electronics., Ltd\",\n\t[3]byte{96, 206, 134}:  \"Sercomm Corporation.\",\n\t[3]byte{96, 206, 146}:  \"The Refined Industry Company Limited\",\n\t[3]byte{96, 208, 44}:   \"Ruckus Wireless\",\n\t[3]byte{96, 208, 169}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{96, 209, 170}:  \"Vishal Telecommunications Pvt Ltd\",\n\t[3]byte{96, 210, 28}:   \"Sunnovo International Limited\",\n\t[3]byte{96, 210, 72}:   \"ARRIS Group, Inc.\",\n\t[3]byte{96, 210, 98}:   \"Tzukuri Pty Ltd\",\n\t[3]byte{96, 210, 185}:  \"REALAND BIO CO., LTD.\",\n\t[3]byte{96, 210, 221}:  \"Shenzhen Baitong Putian Technology Co.,Ltd.\",\n\t[3]byte{96, 211, 10}:   \"Quatius Limited\",\n\t[3]byte{96, 212, 233}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{96, 215, 85}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{96, 215, 227}:  \"IEEE Registration Authority\",\n\t[3]byte{96, 216, 25}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{96, 216, 156}:  \"HMD Global Oy\",\n\t[3]byte{96, 217, 160}:  \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{96, 217, 199}:  \"Apple, Inc.\",\n\t[3]byte{96, 218, 35}:   \"Estech Co.,Ltd\",\n\t[3]byte{96, 218, 131}:  \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{96, 219, 42}:   \"HNS\",\n\t[3]byte{96, 222, 53}:   \"GITSN, Inc.\",\n\t[3]byte{96, 222, 68}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{96, 222, 243}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{96, 224, 14}:   \"SHINSEI ELECTRONICS CO LTD\",\n\t[3]byte{96, 227, 39}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{96, 227, 172}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{96, 230, 188}:  \"Sino-Telecom Technology Co.,Ltd.\",\n\t[3]byte{96, 231, 1}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{96, 231, 138}:  \"UNISEM\",\n\t[3]byte{96, 233, 86}:   \"Ayla Networks, Inc\",\n\t[3]byte{96, 235, 90}:   \"Asterfusion Data Technologies Co.,Ltd\",\n\t[3]byte{96, 235, 105}:  \"Quanta Computer Inc.\",\n\t[3]byte{96, 238, 92}:   \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{96, 239, 198}:  \"Shenzhen Chima Technologies Co Limited\",\n\t[3]byte{96, 241, 61}:   \"JABLOCOM s.r.o.\",\n\t[3]byte{96, 241, 137}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{96, 241, 138}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{96, 242, 98}:   \"Intel Corporate\",\n\t[3]byte{96, 242, 129}:  \"TRANWO TECHNOLOGY CO., LTD.\",\n\t[3]byte{96, 242, 239}:  \"VisionVera International Co., Ltd.\",\n\t[3]byte{96, 243, 218}:  \"Logic Way GmbH\",\n\t[3]byte{96, 244, 58}:   \"Edifier International\",\n\t[3]byte{96, 244, 69}:   \"Apple, Inc.\",\n\t[3]byte{96, 244, 148}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{96, 245, 156}:  \"CRU-Dataport\",\n\t[3]byte{96, 246, 115}:  \"TERUMO CORPORATION\",\n\t[3]byte{96, 246, 119}:  \"Intel Corporate\",\n\t[3]byte{96, 248, 29}:   \"Apple, Inc.\",\n\t[3]byte{96, 250, 157}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{96, 250, 205}:  \"Apple, Inc.\",\n\t[3]byte{96, 251, 66}:   \"Apple, Inc.\",\n\t[3]byte{96, 253, 86}:   \"WOORISYSTEMS CO., Ltd\",\n\t[3]byte{96, 254, 30}:   \"China Palms Telecom.Ltd\",\n\t[3]byte{96, 254, 32}:   \"2Wire Inc\",\n\t[3]byte{96, 254, 197}:  \"Apple, Inc.\",\n\t[3]byte{96, 254, 249}:  \"Thomas & Betts\",\n\t[3]byte{96, 255, 221}:  \"C.E. ELECTRONICS, INC\",\n\t[3]byte{100, 0, 45}:    \"Powerlinq Co., LTD\",\n\t[3]byte{100, 0, 106}:   \"Dell Inc.\",\n\t[3]byte{100, 0, 241}:   \"Cisco Systems, Inc\",\n\t[3]byte{100, 2, 203}:   \"ARRIS Group, Inc.\",\n\t[3]byte{100, 5, 190}:   \"NEW LIGHT LED\",\n\t[3]byte{100, 5, 233}:   \"Shenzhen WayOS Technology Crop., Ltd.\",\n\t[3]byte{100, 9, 76}:    \"Beijing Superbee Wireless Technology Co.,Ltd\",\n\t[3]byte{100, 9, 128}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{100, 9, 172}:   \"TCT mobile ltd\",\n\t[3]byte{100, 11, 74}:   \"Digital Telecom Technology Limited\",\n\t[3]byte{100, 11, 215}:  \"Apple, Inc.\",\n\t[3]byte{100, 13, 206}:  \"SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{100, 13, 230}:  \"Petra Systems\",\n\t[3]byte{100, 14, 54}:   \"TAZTAG\",\n\t[3]byte{100, 14, 148}:  \"Pluribus Networks, Inc.\",\n\t[3]byte{100, 15, 40}:   \"2Wire Inc\",\n\t[3]byte{100, 16, 132}:  \"HEXIUM Technical Development Co., Ltd.\",\n\t[3]byte{100, 18, 37}:   \"Cisco Systems, Inc\",\n\t[3]byte{100, 18, 54}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{100, 18, 105}:  \"ARRIS Group, Inc.\",\n\t[3]byte{100, 19, 49}:   \"Bosch Car Multimedia (Wuhu) Co. Ltd.\",\n\t[3]byte{100, 19, 108}:  \"zte corporation\",\n\t[3]byte{100, 22, 102}:  \"Nest Labs Inc.\",\n\t[3]byte{100, 22, 127}:  \"Polycom\",\n\t[3]byte{100, 22, 141}:  \"Cisco Systems, Inc\",\n\t[3]byte{100, 22, 240}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{100, 26, 34}:   \"Heliospectra AB\",\n\t[3]byte{100, 28, 103}:  \"DIGIBRAS INDUSTRIA DO BRASILS/A\",\n\t[3]byte{100, 28, 174}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{100, 28, 176}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{100, 30, 129}:  \"Dowslake Microsystems\",\n\t[3]byte{100, 32, 12}:   \"Apple, Inc.\",\n\t[3]byte{100, 32, 159}:  \"Tilgin AB\",\n\t[3]byte{100, 33, 132}:  \"Nippon Denki Kagaku Co.,LTD\",\n\t[3]byte{100, 34, 22}:   \"Shandong Taixin Electronic co.,Ltd\",\n\t[3]byte{100, 35, 21}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{100, 36, 0}:    \"Xorcom Ltd.\",\n\t[3]byte{100, 37, 94}:   \"Observint Technologies, Inc.\",\n\t[3]byte{100, 39, 55}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{100, 41, 237}:  \"AO \\\"PKK Milandr\\\"\",\n\t[3]byte{100, 43, 138}:  \"ALL BEST Industrial Co., Ltd.\",\n\t[3]byte{100, 44, 15}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{100, 44, 172}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{100, 45, 183}:  \"SEUNGIL ELECTRONICS\",\n\t[3]byte{100, 49, 57}:   \"IEEE Registration Authority\",\n\t[3]byte{100, 49, 80}:   \"Hewlett Packard\",\n\t[3]byte{100, 49, 126}:  \"Dexin Corporation\",\n\t[3]byte{100, 50, 168}:  \"Intel Corporate\",\n\t[3]byte{100, 51, 219}:  \"Texas Instruments\",\n\t[3]byte{100, 52, 9}:    \"BITwave Pte Ltd\",\n\t[3]byte{100, 53, 28}:   \"e-CON SYSTEMS INDIA PVT LTD\",\n\t[3]byte{100, 58, 177}:  \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{100, 58, 234}:  \"Cisco Systems, Inc\",\n\t[3]byte{100, 62, 140}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{100, 63, 95}:   \"Exablaze\",\n\t[3]byte{100, 66, 20}:   \"Swisscom Energy Solutions AG\",\n\t[3]byte{100, 67, 70}:   \"GuangDong Quick Network Computer CO.,LTD\",\n\t[3]byte{100, 71, 224}:  \"Feitian Technologies Co., Ltd\",\n\t[3]byte{100, 75, 195}:  \"Shanghai WOASiS Telecommunications Ltd., Co.\",\n\t[3]byte{100, 75, 240}:  \"CalDigit, Inc\",\n\t[3]byte{100, 76, 54}:   \"Intel Corporate\",\n\t[3]byte{100, 77, 112}:  \"dSPACE GmbH\",\n\t[3]byte{100, 79, 66}:   \"JETTER CO., Ltd.\",\n\t[3]byte{100, 79, 116}:  \"LENUS Co., Ltd.\",\n\t[3]byte{100, 79, 176}:  \"Hyunjin.com\",\n\t[3]byte{100, 81, 6}:    \"Hewlett Packard\",\n\t[3]byte{100, 81, 126}:  \"LONG BEN (DONGGUAN) ELECTRONIC TECHNOLOGY CO.,LTD.\",\n\t[3]byte{100, 82, 153}:  \"The Chamberlain Group, Inc\",\n\t[3]byte{100, 83, 93}:   \"Frauscher Sensortechnik\",\n\t[3]byte{100, 84, 34}:   \"Equinox Payments\",\n\t[3]byte{100, 85, 99}:   \"Intelight Inc.\",\n\t[3]byte{100, 85, 127}:  \"NSFOCUS Information Technology Co., Ltd.\",\n\t[3]byte{100, 85, 177}:  \"ARRIS Group, Inc.\",\n\t[3]byte{100, 86, 1}:    \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{100, 88, 173}:  \"China Mobile IOT Company Limited\",\n\t[3]byte{100, 89, 248}:  \"Vodafone Omnitel B.V.\",\n\t[3]byte{100, 90, 4}:    \"Chicony Electronics Co., Ltd.\",\n\t[3]byte{100, 90, 237}:  \"Apple, Inc.\",\n\t[3]byte{100, 92, 243}:  \"ParanTek Inc.\",\n\t[3]byte{100, 93, 134}:  \"Intel Corporate\",\n\t[3]byte{100, 93, 146}:  \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{100, 93, 215}:  \"Shenzhen Lifesense Medical Electronics Co., Ltd.    \",\n\t[3]byte{100, 94, 16}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{100, 94, 44}:   \"IRay Technology Co., Ltd.\",\n\t[3]byte{100, 94, 190}:  \"Yahoo! JAPAN\",\n\t[3]byte{100, 95, 255}:  \"Nicolet Neuro\",\n\t[3]byte{100, 96, 56}:   \"Hirschmann Automation and Control GmbH\",\n\t[3]byte{100, 97, 132}:  \"VELUX\",\n\t[3]byte{100, 98, 35}:   \"Cellient Co., Ltd.\",\n\t[3]byte{100, 98, 102}:  \"IEEE Registration Authority\",\n\t[3]byte{100, 98, 138}:  \"evon GmbH\",\n\t[3]byte{100, 100, 155}: \"Juniper Networks\",\n\t[3]byte{100, 101, 192}: \"Nuvon, Inc\",\n\t[3]byte{100, 102, 36}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{100, 102, 179}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{100, 103, 7}:   \"Beijing Omnific Technology, Ltd.\",\n\t[3]byte{100, 104, 12}:  \"Comtrend Corporation\",\n\t[3]byte{100, 105, 78}:  \"Texas Instruments\",\n\t[3]byte{100, 105, 188}: \"Hytera Communications Co .,ltd\",\n\t[3]byte{100, 106, 82}:  \"Avaya Inc\",\n\t[3]byte{100, 106, 116}: \"AUTH-SERVERS, LLC\",\n\t[3]byte{100, 108, 128}: \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{100, 108, 178}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{100, 109, 108}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{100, 110, 105}: \"Liteon Technology Corporation\",\n\t[3]byte{100, 110, 108}: \"Radio Datacom LLC\",\n\t[3]byte{100, 110, 151}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{100, 110, 234}: \"Iskratel d.o.o.\",\n\t[3]byte{100, 112, 2}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{100, 112, 51}:  \"Apple, Inc.\",\n\t[3]byte{100, 114, 216}: \"GooWi Technology Co.,Limited\",\n\t[3]byte{100, 115, 102}: \"Shenzhen Siera Technology Ltd\",\n\t[3]byte{100, 115, 226}: \"Arbiter Systems, Inc.\",\n\t[3]byte{100, 116, 246}: \"Shooter Detection Systems\",\n\t[3]byte{100, 118, 87}:  \"Innovative Security Designs\",\n\t[3]byte{100, 118, 186}: \"Apple, Inc.\",\n\t[3]byte{100, 119, 125}: \"Hitron Technologies. Inc\",\n\t[3]byte{100, 119, 145}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{100, 121, 167}: \"Phison Electronics Corp.   \",\n\t[3]byte{100, 123, 206}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{100, 123, 212}: \"Texas Instruments\",\n\t[3]byte{100, 124, 52}:  \"Ubee Interactive Co., Limited\",\n\t[3]byte{100, 125, 129}: \"YOKOTA INDUSTRIAL CO,.LTD\",\n\t[3]byte{100, 127, 218}: \"TEKTELIC Communications Inc.\",\n\t[3]byte{100, 128, 139}: \"VG Controls, Inc.\",\n\t[3]byte{100, 128, 153}: \"Intel Corporate\",\n\t[3]byte{100, 129, 37}:  \"Alphatron Marine BV\",\n\t[3]byte{100, 135, 136}: \"Juniper Networks\",\n\t[3]byte{100, 135, 215}: \"ADB Broadband Italia\",\n\t[3]byte{100, 136, 255}: \"Sichuan Changhong Electric Ltd.\",\n\t[3]byte{100, 137, 154}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{100, 137, 241}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{100, 141, 158}: \"IVT Electronic Co.,Ltd\",\n\t[3]byte{100, 144, 193}: \"Beijing Xiaomi Mobile Software Co., Ltd\",\n\t[3]byte{100, 149, 108}: \"LG Electronics\",\n\t[3]byte{100, 152, 41}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{100, 153, 93}:  \"LGE \",\n\t[3]byte{100, 153, 104}: \"Elentec\",\n\t[3]byte{100, 153, 160}: \"AG Elektronik AB\",\n\t[3]byte{100, 154, 8}:   \"Shenzhen SuperElectron Technology Co.,LTD\",\n\t[3]byte{100, 154, 18}:  \"P2 Mobile Technologies Limited\",\n\t[3]byte{100, 154, 190}: \"Apple, Inc.\",\n\t[3]byte{100, 155, 36}:  \"V Technology Co., Ltd.\",\n\t[3]byte{100, 156, 129}: \"Qualcomm Inc.\",\n\t[3]byte{100, 156, 142}: \"Texas Instruments\",\n\t[3]byte{100, 157, 153}: \"FS COM INC\",\n\t[3]byte{100, 158, 243}: \"Cisco Systems, Inc\",\n\t[3]byte{100, 159, 247}: \"Kone OYj\",\n\t[3]byte{100, 160, 231}: \"Cisco Systems, Inc\",\n\t[3]byte{100, 162, 50}:  \"OOO Samlight\",\n\t[3]byte{100, 162, 249}: \"OnePlus Technology (Shenzhen) Co., Ltd\",\n\t[3]byte{100, 163, 65}:  \"Wonderlan (Beijing) Technology Co., Ltd.\",\n\t[3]byte{100, 163, 203}: \"Apple, Inc.\",\n\t[3]byte{100, 165, 195}: \"Apple, Inc.\",\n\t[3]byte{100, 166, 81}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{100, 166, 143}: \"Zhongshan Readboy Electronics Co.,Ltd\",\n\t[3]byte{100, 167, 105}: \"HTC Corporation\",\n\t[3]byte{100, 167, 221}: \"Avaya Inc\",\n\t[3]byte{100, 168, 55}:  \"Juni Korea Co., Ltd\",\n\t[3]byte{100, 169, 101}: \"Linkflow Co., Ltd.\",\n\t[3]byte{100, 174, 12}:  \"Cisco Systems, Inc\",\n\t[3]byte{100, 174, 136}: \"Polytec GmbH\",\n\t[3]byte{100, 174, 241}: \"Qingdao Hisense Electronics Co.,Ltd.\",\n\t[3]byte{100, 176, 166}: \"Apple, Inc.\",\n\t[3]byte{100, 176, 232}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{100, 178, 29}:  \"Chengdu Phycom Tech Co., Ltd.\",\n\t[3]byte{100, 179, 16}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{100, 179, 112}: \"PowerComm Solutions LLC\",\n\t[3]byte{100, 180, 115}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{100, 181, 198}: \"Nintendo Co.,Ltd\",\n\t[3]byte{100, 182, 35}:  \"CCS Care Communication Solutions GmbH\",\n\t[3]byte{100, 182, 74}:  \"ViVOtech, Inc.\",\n\t[3]byte{100, 184, 83}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{100, 185, 232}: \"Apple, Inc.\",\n\t[3]byte{100, 186, 189}: \"SDJ Technologies, Inc.\",\n\t[3]byte{100, 188, 12}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{100, 188, 17}:  \"CombiQ AB\",\n\t[3]byte{100, 188, 88}:  \"Intel Corporate\",\n\t[3]byte{100, 194, 222}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{100, 195, 84}:  \"Avaya Inc\",\n\t[3]byte{100, 195, 214}: \"Juniper Networks\",\n\t[3]byte{100, 197, 170}: \"South African Broadcasting Corporation\",\n\t[3]byte{100, 198, 103}: \"Barnes&Noble\",\n\t[3]byte{100, 198, 175}: \"AXERRA Networks Ltd\",\n\t[3]byte{100, 199, 83}:  \"Apple, Inc.\",\n\t[3]byte{100, 201, 1}:   \"INVENTEC Corporation\",\n\t[3]byte{100, 201, 68}:  \"LARK Technologies, Inc\",\n\t[3]byte{100, 203, 93}:  \"SIA \\\"TeleSet\\\"\",\n\t[3]byte{100, 203, 159}: \"TECNO MOBILE LIMITED\",\n\t[3]byte{100, 203, 163}: \"Pointmobile\",\n\t[3]byte{100, 204, 34}:  \"Arcadyan Corporation\",\n\t[3]byte{100, 204, 46}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{100, 206, 110}: \"Sierra Wireless\",\n\t[3]byte{100, 207, 217}: \"Texas Instruments\",\n\t[3]byte{100, 208, 45}:  \"Next Generation Integration (NGI)\",\n\t[3]byte{100, 209, 84}:  \"Routerboard.com\",\n\t[3]byte{100, 209, 163}: \"Sitecom Europe BV\",\n\t[3]byte{100, 210, 65}:  \"Keith & Koep GmbH\",\n\t[3]byte{100, 212, 189}: \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{100, 212, 218}: \"Intel Corporate\",\n\t[3]byte{100, 216, 20}:  \"Cisco Systems, Inc\",\n\t[3]byte{100, 217, 18}:  \"Solidica, Inc.\",\n\t[3]byte{100, 217, 84}:  \"Taicang T&W Electronics\",\n\t[3]byte{100, 217, 137}: \"Cisco Systems, Inc\",\n\t[3]byte{100, 218, 160}: \"Robert Bosch Smart Home GmbH\",\n\t[3]byte{100, 219, 24}:  \"OpenPattern\",\n\t[3]byte{100, 219, 67}:  \"Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.\",\n\t[3]byte{100, 219, 129}: \"Syszone Co., Ltd.\",\n\t[3]byte{100, 219, 139}: \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{100, 219, 160}: \"Select Comfort\",\n\t[3]byte{100, 220, 1}:   \"Static Systems Group PLC\",\n\t[3]byte{100, 221, 233}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{100, 222, 28}:  \"Kingnetic Pte Ltd\",\n\t[3]byte{100, 223, 16}:  \"JingLue Semiconductor(SH) Ltd.\",\n\t[3]byte{100, 223, 233}: \"ATEME\",\n\t[3]byte{100, 225, 97}:  \"DEP Corp.\",\n\t[3]byte{100, 225, 114}: \"Shenzhen Qihoo Intelligent Technology Co.,Ltd\",\n\t[3]byte{100, 229, 153}: \"EFM Networks\",\n\t[3]byte{100, 230, 37}:  \"Woxu Wireless Co., Ltd\",\n\t[3]byte{100, 230, 130}: \"Apple, Inc.\",\n\t[3]byte{100, 231, 216}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{100, 232, 79}:  \"Serialway Communication Technology Co. Ltd\",\n\t[3]byte{100, 232, 129}: \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{100, 232, 146}: \"Morio Denki Co., Ltd.\",\n\t[3]byte{100, 232, 230}: \"global moisture management system\",\n\t[3]byte{100, 233, 80}:  \"Cisco Systems, Inc\",\n\t[3]byte{100, 234, 197}: \"SiboTech Automation Co., Ltd.\",\n\t[3]byte{100, 235, 140}: \"Seiko Epson Corporation\",\n\t[3]byte{100, 237, 87}:  \"ARRIS Group, Inc.\",\n\t[3]byte{100, 237, 98}:  \"WOORI SYSTEMS Co., Ltd\",\n\t[3]byte{100, 238, 183}: \"Netcore Technology Inc\",\n\t[3]byte{100, 242, 66}:  \"Gerdes Aktiengesellschaft\",\n\t[3]byte{100, 242, 251}: \"Hangzhou Ezviz Software Co.,Ltd.\",\n\t[3]byte{100, 245, 14}:  \"Kinion Technology Company Limited\",\n\t[3]byte{100, 245, 78}:  \"EM Microelectronic\",\n\t[3]byte{100, 246, 157}: \"Cisco Systems, Inc\",\n\t[3]byte{100, 246, 187}: \"Fibocom Wireless Inc.\",\n\t[3]byte{100, 246, 247}: \"Anhui Dynamic Power Co., Ltd.\",\n\t[3]byte{100, 248, 28}:  \"Huawei Technologies Co., Ltd.\",\n\t[3]byte{100, 248, 138}: \"China Mobile IOT Company Limited\",\n\t[3]byte{100, 249, 112}: \"Kenade Electronics Technology Co.,LTD.\",\n\t[3]byte{100, 249, 135}: \"Avvasi Inc.\",\n\t[3]byte{100, 249, 192}: \"ANALOG DEVICES\",\n\t[3]byte{100, 251, 80}:  \"RoomReady/Zdi, Inc.\",\n\t[3]byte{100, 251, 129}: \"IEEE Registration Authority\",\n\t[3]byte{100, 251, 146}: \"PPC Broadband Inc.\",\n\t[3]byte{100, 252, 140}: \"Zonar Systems\",\n\t[3]byte{100, 255, 10}:  \"Wistron Neweb Corporation\",\n\t[3]byte{104, 2, 53}:    \"Konten Networks Inc.\",\n\t[3]byte{104, 2, 184}:   \"Compal Broadband Networks, Inc.\",\n\t[3]byte{104, 5, 113}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{104, 5, 202}:   \"Intel Corporate\",\n\t[3]byte{104, 7, 10}:    \"TPVision Europe B.V\",\n\t[3]byte{104, 7, 21}:    \"Intel Corporate\",\n\t[3]byte{104, 9, 39}:    \"Apple, Inc.\",\n\t[3]byte{104, 10, 215}:  \"Yancheng Kecheng Optoelectronic Technology Co., Ltd\",\n\t[3]byte{104, 10, 226}:  \"Silicon Laboratories\",\n\t[3]byte{104, 18, 45}:   \"Special Instrument Development Co., Ltd.\",\n\t[3]byte{104, 18, 149}:  \"Lupine Lighting Systems GmbH\",\n\t[3]byte{104, 19, 36}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{104, 20, 1}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{104, 21, 144}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{104, 21, 211}:  \"Zaklady Elektroniki i Mechaniki Precyzyjnej R&G S.A.\",\n\t[3]byte{104, 22, 5}:    \"Systems And Electronic Development FZCO\",\n\t[3]byte{104, 23, 41}:   \"Intel Corporate\",\n\t[3]byte{104, 25, 63}:   \"Digital Airways\",\n\t[3]byte{104, 25, 172}:  \"Guangzhou Xianyou Intelligent Technogoly CO., LTD\",\n\t[3]byte{104, 26, 178}:  \"zte corporation\",\n\t[3]byte{104, 28, 162}:  \"Rosewill Inc.\",\n\t[3]byte{104, 29, 100}:  \"Sunwave Communications Co., Ltd\",\n\t[3]byte{104, 29, 239}:  \"Shenzhen CYX Technology Co., Ltd.\",\n\t[3]byte{104, 30, 139}:  \"InfoSight Corporation\",\n\t[3]byte{104, 31, 64}:   \"Blu Wireless Technology Ltd\",\n\t[3]byte{104, 31, 216}:  \"Siemens Industry, Inc.\",\n\t[3]byte{104, 33, 95}:   \"Edgecore Networks Corporation\",\n\t[3]byte{104, 35, 75}:   \"Nihon Dengyo Kousaku\",\n\t[3]byte{104, 38, 42}:   \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{104, 39, 25}:   \"Microchip Technology Inc.\",\n\t[3]byte{104, 39, 55}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{104, 40, 186}:  \"Dejai\",\n\t[3]byte{104, 40, 246}:  \"Vubiq Networks, Inc.\",\n\t[3]byte{104, 41, 220}:  \"Ficosa Electronics S.L.U.\",\n\t[3]byte{104, 44, 123}:  \"Cisco Systems, Inc\",\n\t[3]byte{104, 45, 220}:  \"Wuhan Changjiang Electro-Communication Equipment CO.,LTD\",\n\t[3]byte{104, 49, 254}:  \"Teladin Co.,Ltd.\",\n\t[3]byte{104, 51, 44}:   \"KENSTEL NETWORKS LIMITED\",\n\t[3]byte{104, 52, 137}:  \"LEA Professional\",\n\t[3]byte{104, 53, 99}:   \"SHENZHEN LIOWN ELECTRONICS CO.,LTD.\",\n\t[3]byte{104, 54, 181}:  \"DriveScale, Inc.\",\n\t[3]byte{104, 55, 233}:  \"Amazon Technologies Inc.\",\n\t[3]byte{104, 57, 67}:   \"ittim\",\n\t[3]byte{104, 58, 30}:   \"Cisco Meraki\",\n\t[3]byte{104, 59, 30}:   \"Countwise LTD\",\n\t[3]byte{104, 59, 120}:  \"Cisco Systems, Inc\",\n\t[3]byte{104, 60, 125}:  \"Magic Intelligence Technology Limited\",\n\t[3]byte{104, 62, 2}:    \"SIEMENS AG, Digital Factory, Motion Control System\",\n\t[3]byte{104, 62, 52}:   \"MEIZU Technology Co., Ltd.\",\n\t[3]byte{104, 62, 236}:  \"ERECA\",\n\t[3]byte{104, 63, 30}:   \"EFFECT Photonics B.V.\",\n\t[3]byte{104, 67, 82}:   \"Bhuu Limited\",\n\t[3]byte{104, 67, 215}:  \"Agilecom Photonics Solutions Guangdong Limited\",\n\t[3]byte{104, 69, 241}:  \"TOSHIBA CLIENT SOLUTIONS CO., LTD.\",\n\t[3]byte{104, 71, 73}:   \"Texas Instruments\",\n\t[3]byte{104, 72, 152}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{104, 73, 178}:  \"CARLO GAVAZZI LTD\",\n\t[3]byte{104, 74, 118}:  \"eero inc.\",\n\t[3]byte{104, 74, 174}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{104, 75, 136}:  \"Galtronics Telemetry Inc.\",\n\t[3]byte{104, 76, 168}:  \"Shenzhen Herotel Tech. Co., Ltd.\",\n\t[3]byte{104, 79, 100}:  \"Dell Inc.\",\n\t[3]byte{104, 81, 183}:  \"PowerCloud Systems, Inc.\",\n\t[3]byte{104, 82, 214}:  \"UGame Technology Co.,Ltd\",\n\t[3]byte{104, 83, 108}:  \"SPnS Co.,Ltd\",\n\t[3]byte{104, 83, 136}:  \"P&S Technology\",\n\t[3]byte{104, 84, 90}:   \"Intel Corporate\",\n\t[3]byte{104, 84, 193}:  \"ColorTokens, Inc.\",\n\t[3]byte{104, 84, 237}:  \"Alcatel-Lucent\",\n\t[3]byte{104, 84, 245}:  \"enLighted Inc\",\n\t[3]byte{104, 84, 253}:  \"Amazon Technologies Inc.\",\n\t[3]byte{104, 87, 45}:   \"HANGZHOU AIXIANGJI TECHNOLOGY CO., LTD\",\n\t[3]byte{104, 88, 197}:  \"ZF TRW Automotive\",\n\t[3]byte{104, 89, 127}:  \"Alcatel Lucent\",\n\t[3]byte{104, 90, 207}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{104, 91, 53}:   \"Apple, Inc.\",\n\t[3]byte{104, 91, 54}:   \"POWERTECH INDUSTRIAL CO., LTD.\",\n\t[3]byte{104, 93, 67}:   \"Intel Corporate\",\n\t[3]byte{104, 94, 107}:  \"PowerRay Co., Ltd.\",\n\t[3]byte{104, 99, 80}:   \"Hella India Automotive Pvt Ltd\",\n\t[3]byte{104, 99, 89}:   \"Advanced Digital Broadcast SA\",\n\t[3]byte{104, 100, 75}:  \"Apple, Inc.\",\n\t[3]byte{104, 105, 46}:  \"Zycoo Co.,Ltd\",\n\t[3]byte{104, 105, 117}: \"Angler Labs Inc\",\n\t[3]byte{104, 105, 202}: \"Hitachi, Ltd.\",\n\t[3]byte{104, 105, 242}: \"ComAp s.r.o.\",\n\t[3]byte{104, 109, 188}: \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{104, 110, 35}:  \"Wi3 Inc.\",\n\t[3]byte{104, 110, 72}:  \"Prophet Electronic Technology Corp.,Ltd\",\n\t[3]byte{104, 114, 81}:  \"Ubiquiti Networks Inc.\",\n\t[3]byte{104, 114, 220}: \"CETORY.TV Company Limited\",\n\t[3]byte{104, 118, 79}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{104, 120, 72}:  \"Westunitis Co., Ltd.\",\n\t[3]byte{104, 120, 76}:  \"Nortel Networks\",\n\t[3]byte{104, 121, 36}:  \"ELS-GmbH & Co. KG\",\n\t[3]byte{104, 121, 237}: \"SHARP Corporation\",\n\t[3]byte{104, 124, 200}: \"Measurement Systems S. de R.L.\",\n\t[3]byte{104, 124, 213}: \"Y Soft Corporation, a.s.\",\n\t[3]byte{104, 125, 107}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{104, 125, 180}: \"Cisco Systems, Inc\",\n\t[3]byte{104, 127, 116}: \"Cisco-Linksys, LLC\",\n\t[3]byte{104, 130, 242}: \"grandcentrix GmbH\",\n\t[3]byte{104, 131, 26}:  \"Pandora Mobility Corporation\",\n\t[3]byte{104, 132, 112}: \"eSSys Co.,Ltd\",\n\t[3]byte{104, 132, 126}: \"FUJITSU LIMITED\",\n\t[3]byte{104, 133, 64}:  \"IGI Mobile, Inc.\",\n\t[3]byte{104, 133, 106}: \"OuterLink Corporation\",\n\t[3]byte{104, 134, 167}: \"Cisco Systems, Inc\",\n\t[3]byte{104, 134, 231}: \"Orbotix, Inc.\",\n\t[3]byte{104, 135, 107}: \"INQ Mobile Limited\",\n\t[3]byte{104, 136, 161}: \"Universal Electronics, Inc.\",\n\t[3]byte{104, 137, 117}: \"nuoxc\",\n\t[3]byte{104, 137, 193}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{104, 138, 181}: \"EDP Servicos\",\n\t[3]byte{104, 138, 240}: \"zte corporation\",\n\t[3]byte{104, 139, 15}:  \"China Mobile IOT Company Limited\",\n\t[3]byte{104, 141, 182}: \"AETEK INC.\",\n\t[3]byte{104, 143, 46}:  \"Hitron Technologies. Inc\",\n\t[3]byte{104, 143, 132}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{104, 143, 201}: \"Zhuolian (Shenzhen) Communication Co., Ltd\",\n\t[3]byte{104, 145, 208}: \"IEEE Registration Authority\",\n\t[3]byte{104, 146, 52}:  \"Ruckus Wireless\",\n\t[3]byte{104, 147, 32}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{104, 147, 97}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{104, 148, 35}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{104, 150, 123}: \"Apple, Inc.\",\n\t[3]byte{104, 151, 75}:  \"Shenzhen Costar Electronics Co. Ltd.\",\n\t[3]byte{104, 151, 232}: \"Society of Motion Picture &amp; Television Engineers\",\n\t[3]byte{104, 152, 97}:  \"Beacon Inc\",\n\t[3]byte{104, 153, 205}: \"Cisco Systems, Inc\",\n\t[3]byte{104, 154, 135}: \"Amazon Technologies Inc.\",\n\t[3]byte{104, 154, 183}: \"Atelier Vision Corporation\",\n\t[3]byte{104, 156, 94}:  \"AcSiP Technology Corp.\",\n\t[3]byte{104, 156, 112}: \"Apple, Inc.\",\n\t[3]byte{104, 156, 226}: \"Cisco Systems, Inc\",\n\t[3]byte{104, 158, 11}:  \"Cisco Systems, Inc\",\n\t[3]byte{104, 158, 25}:  \"Texas Instruments\",\n\t[3]byte{104, 159, 240}: \"zte corporation\",\n\t[3]byte{104, 160, 62}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{104, 160, 246}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{104, 161, 183}: \"Honghao Mingchuan Technology (Beijing) CO.,Ltd.\",\n\t[3]byte{104, 163, 120}: \"FREEBOX SAS\",\n\t[3]byte{104, 163, 196}: \"Liteon Technology Corporation\",\n\t[3]byte{104, 164, 14}:  \"BSH Hausgeräte GmbH\",\n\t[3]byte{104, 164, 125}: \"Sun Cupid Technology (HK) LTD\",\n\t[3]byte{104, 166, 130}: \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{104, 168, 40}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{104, 168, 109}: \"Apple, Inc.\",\n\t[3]byte{104, 168, 225}: \"Wacom Co.,Ltd.\",\n\t[3]byte{104, 170, 210}: \"DATECS LTD.,\",\n\t[3]byte{104, 171, 9}:   \"Nokia\",\n\t[3]byte{104, 171, 30}:  \"Apple, Inc.\",\n\t[3]byte{104, 171, 138}: \"RF IDeas\",\n\t[3]byte{104, 174, 32}:  \"Apple, Inc.\",\n\t[3]byte{104, 175, 19}:  \"Futura Mobility\",\n\t[3]byte{104, 175, 255}: \"Shanghai Cambricon Information Technology Co., Ltd.\",\n\t[3]byte{104, 176, 148}: \"INESA ELECTRON CO.,LTD\",\n\t[3]byte{104, 179, 94}:  \"Shenzhen Neostra Technology Co.Ltd\",\n\t[3]byte{104, 180, 58}:  \"WaterFurnace International, Inc.\",\n\t[3]byte{104, 181, 153}: \"Hewlett Packard\",\n\t[3]byte{104, 182, 252}: \"Hitron Technologies. Inc\",\n\t[3]byte{104, 184, 217}: \"Act KDE, Inc.\",\n\t[3]byte{104, 185, 131}: \"b-plus GmbH\",\n\t[3]byte{104, 185, 211}: \"Shenzhen Trolink Technology CO, LTD\",\n\t[3]byte{104, 188, 12}:  \"Cisco Systems, Inc\",\n\t[3]byte{104, 189, 171}: \"Cisco Systems, Inc\",\n\t[3]byte{104, 191, 196}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{104, 196, 77}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{104, 198, 58}:  \"Espressif Inc.\",\n\t[3]byte{104, 201, 11}:  \"Texas Instruments\",\n\t[3]byte{104, 202, 0}:   \"Octopus Systems Limited\",\n\t[3]byte{104, 202, 228}: \"Cisco Systems, Inc\",\n\t[3]byte{104, 204, 110}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{104, 204, 156}: \"Mine Site Technologies\",\n\t[3]byte{104, 205, 15}:  \"U Tek Company Limited\",\n\t[3]byte{104, 206, 78}:  \"L-3 Communications Infrared Products\",\n\t[3]byte{104, 209, 186}: \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{104, 209, 253}: \"Shenzhen Trimax Technology Co.,Ltd\",\n\t[3]byte{104, 210, 71}:  \"Portalis LC\",\n\t[3]byte{104, 212, 130}: \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{104, 214, 237}: \"GooWi Wireless Technology Co., Limited\",\n\t[3]byte{104, 215, 154}: \"Ubiquiti Networks Inc.\",\n\t[3]byte{104, 217, 37}:  \"ProSys Development Services\",\n\t[3]byte{104, 217, 60}:  \"Apple, Inc.\",\n\t[3]byte{104, 219, 84}:  \"Phicomm (Shanghai) Co., Ltd.\",\n\t[3]byte{104, 219, 103}: \"Nantong Coship Electronics Co., Ltd.\",\n\t[3]byte{104, 219, 150}: \"OPWILL Technologies CO .,LTD\",\n\t[3]byte{104, 219, 202}: \"Apple, Inc.\",\n\t[3]byte{104, 219, 245}: \"Amazon Technologies Inc.\",\n\t[3]byte{104, 220, 232}: \"PacketStorm Communications\",\n\t[3]byte{104, 221, 38}:  \"Shanghai Focus Vision Security Technology Co.,Ltd\",\n\t[3]byte{104, 223, 221}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{104, 225, 102}: \"Private\",\n\t[3]byte{104, 226, 9}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{104, 228, 31}:  \"Unglaube Identech GmbH\",\n\t[3]byte{104, 231, 194}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{104, 232, 235}: \"Linktel Technologies Co.,Ltd\",\n\t[3]byte{104, 235, 174}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{104, 235, 197}: \"Angstrem Telecom\",\n\t[3]byte{104, 236, 98}:  \"YODO Technology Corp. Ltd.\",\n\t[3]byte{104, 236, 197}: \"Intel Corporate\",\n\t[3]byte{104, 237, 67}:  \"BlackBerry RTS\",\n\t[3]byte{104, 237, 164}: \"Shenzhen Seavo Technology Co.,Ltd\",\n\t[3]byte{104, 238, 150}: \"Cisco SPVTG\",\n\t[3]byte{104, 239, 67}:  \"Apple, Inc.\",\n\t[3]byte{104, 239, 189}: \"Cisco Systems, Inc\",\n\t[3]byte{104, 240, 109}: \"ALONG INDUSTRIAL CO., LIMITED\",\n\t[3]byte{104, 240, 188}: \"Shenzhen LiWiFi Technology Co., Ltd\",\n\t[3]byte{104, 241, 37}:  \"Data Controls Inc.\",\n\t[3]byte{104, 247, 40}:  \"LCFC(HeFei) Electronics Technology co., ltd\",\n\t[3]byte{104, 248, 149}: \"Redflow Limited\",\n\t[3]byte{104, 249, 86}:  \"Objetivos y Servicio de Valor Añadido\",\n\t[3]byte{104, 251, 126}: \"Apple, Inc.\",\n\t[3]byte{104, 251, 149}: \"Generalplus Technology Inc.\",\n\t[3]byte{104, 252, 179}: \"Next Level Security Systems, Inc.\",\n\t[3]byte{104, 254, 218}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{104, 254, 247}: \"Apple, Inc.\",\n\t[3]byte{104, 255, 123}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{108, 0, 107}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{108, 2, 115}:   \"Shenzhen Jin Yun Video Equipment Co., Ltd.\",\n\t[3]byte{108, 4, 96}:    \"RBH Access Technologies Inc.\",\n\t[3]byte{108, 5, 213}:   \"Ethertronics Inc\",\n\t[3]byte{108, 6, 214}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{108, 9, 10}:    \"GEMATICA SRL\",\n\t[3]byte{108, 9, 214}:   \"Digiquest Electronics LTD\",\n\t[3]byte{108, 11, 132}:  \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{108, 13, 52}:   \"Nokia\",\n\t[3]byte{108, 14, 13}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{108, 14, 230}:  \"Chengdu Xiyida Electronic Technology Co,.Ltd\",\n\t[3]byte{108, 15, 106}:  \"JDC Tech Co., Ltd.\",\n\t[3]byte{108, 20, 247}:  \"Erhardt+Leimer GmbH\",\n\t[3]byte{108, 21, 249}:  \"Nautronix Limited\",\n\t[3]byte{108, 22, 14}:   \"ShotTracker\",\n\t[3]byte{108, 22, 50}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{108, 24, 17}:   \"Decatur Electronics\",\n\t[3]byte{108, 25, 143}:  \"D-Link International\",\n\t[3]byte{108, 25, 192}:  \"Apple, Inc.\",\n\t[3]byte{108, 28, 113}:  \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{108, 29, 235}:  \"u-blox AG\",\n\t[3]byte{108, 30, 112}:  \"Guangzhou YBDS IT Co.,Ltd\",\n\t[3]byte{108, 30, 144}:  \"Hansol Technics Co., Ltd.\",\n\t[3]byte{108, 32, 86}:   \"Cisco Systems, Inc\",\n\t[3]byte{108, 33, 162}:  \"AMPAK Technology, Inc.\",\n\t[3]byte{108, 34, 171}:  \"Ainsworth Game Technology\",\n\t[3]byte{108, 35, 185}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{108, 35, 203}:  \"Wattty Corporation\",\n\t[3]byte{108, 36, 131}:  \"Microsoft Mobile Oy\",\n\t[3]byte{108, 36, 166}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{108, 37, 185}:  \"BBK EDUCATIONAL ELECTRONICS CORP.,LTD.\",\n\t[3]byte{108, 39, 121}:  \"Microsoft Mobile Oy\",\n\t[3]byte{108, 41, 144}:  \"WiZ Connected Lighting Company Limited\",\n\t[3]byte{108, 41, 149}:  \"Intel Corporate\",\n\t[3]byte{108, 42, 203}:  \"Paxton Access Ltd\",\n\t[3]byte{108, 43, 89}:   \"Dell Inc.\",\n\t[3]byte{108, 44, 6}:    \"OOO NPP Systemotechnika-NN\",\n\t[3]byte{108, 44, 220}:  \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{108, 46, 51}:   \"Accelink Technologies Co.,Ltd.\",\n\t[3]byte{108, 46, 114}:  \"B&B EXPORTING LIMITED\",\n\t[3]byte{108, 46, 133}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{108, 47, 44}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{108, 47, 138}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{108, 49, 14}:   \"Cisco Systems, Inc\",\n\t[3]byte{108, 50, 222}:  \"Indieon Technologies Pvt. Ltd.\",\n\t[3]byte{108, 51, 169}:  \"Magicjack LP\",\n\t[3]byte{108, 56, 56}:   \"Marking System Technology Co., Ltd.\",\n\t[3]byte{108, 56, 69}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{108, 56, 161}:  \"Ubee Interactive Co., Limited\",\n\t[3]byte{108, 57, 29}:   \"Beijing ZhongHuaHun Network Information center\",\n\t[3]byte{108, 58, 132}:  \"Shenzhen Aero-Startech. Co.Ltd\",\n\t[3]byte{108, 59, 107}:  \"Routerboard.com\",\n\t[3]byte{108, 59, 229}:  \"Hewlett Packard\",\n\t[3]byte{108, 60, 83}:   \"SoundHawk Corp\",\n\t[3]byte{108, 62, 109}:  \"Apple, Inc.\",\n\t[3]byte{108, 62, 156}:  \"KE Knestel Elektronik GmbH\",\n\t[3]byte{108, 64, 8}:    \"Apple, Inc.\",\n\t[3]byte{108, 64, 198}:  \"Nimbus Data, Inc.\",\n\t[3]byte{108, 65, 14}:   \"Cisco Systems, Inc\",\n\t[3]byte{108, 65, 106}:  \"Cisco Systems, Inc\",\n\t[3]byte{108, 66, 171}:  \"Subscriber Networks, Inc.\",\n\t[3]byte{108, 68, 24}:   \"Zappware\",\n\t[3]byte{108, 68, 42}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{108, 69, 152}:  \"Antex Electronic Corp.\",\n\t[3]byte{108, 73, 193}:  \"o2ones Co., Ltd.\",\n\t[3]byte{108, 74, 57}:   \"BITA\",\n\t[3]byte{108, 74, 133}:  \"Apple, Inc.\",\n\t[3]byte{108, 75, 127}:  \"Vossloh-Schwabe Deutschland GmbH\",\n\t[3]byte{108, 75, 144}:  \"LiteON\",\n\t[3]byte{108, 77, 81}:   \"Shenzhen Ceres Technology Co., Ltd.\",\n\t[3]byte{108, 77, 115}:  \"Apple, Inc.\",\n\t[3]byte{108, 78, 134}:  \"Third Millennium Systems Ltd.\",\n\t[3]byte{108, 80, 77}:   \"Cisco Systems, Inc\",\n\t[3]byte{108, 84, 205}:  \"LAMPEX ELECTRONICS LIMITED\",\n\t[3]byte{108, 85, 232}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{108, 86, 151}:  \"Amazon Technologies Inc.\",\n\t[3]byte{108, 87, 121}:  \"Aclima, Inc.\",\n\t[3]byte{108, 89, 64}:   \"MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{108, 89, 118}:  \"Shanghai Tricheer Technology Co.,Ltd.\",\n\t[3]byte{108, 90, 52}:   \"Shenzhen Haitianxiong Electronic Co., Ltd.\",\n\t[3]byte{108, 90, 181}:  \"TCL Technoly Electronics (Huizhou) Co., Ltd.\",\n\t[3]byte{108, 92, 20}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{108, 92, 61}:   \"IEEE Registration Authority\",\n\t[3]byte{108, 92, 222}:  \"SunReports, Inc.\",\n\t[3]byte{108, 93, 58}:   \"Microsoft Corporation\",\n\t[3]byte{108, 93, 99}:   \"ShenZhen Rapoo Technology Co., Ltd.\",\n\t[3]byte{108, 94, 59}:   \"Cisco Systems, Inc\",\n\t[3]byte{108, 94, 122}:  \"Ubiquitous Internet Telecom Co., Ltd\",\n\t[3]byte{108, 95, 28}:   \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{108, 96, 235}:  \"ZHI YUAN ELECTRONICS CO., LIMITED\",\n\t[3]byte{108, 97, 38}:   \"Rinicom Holdings\",\n\t[3]byte{108, 97, 244}:  \"SFR\",\n\t[3]byte{108, 98, 109}:  \"Micro-Star INT'L CO., LTD\",\n\t[3]byte{108, 99, 156}:  \"ARRIS Group, Inc.\",\n\t[3]byte{108, 100, 26}:  \"Penguin Computing\",\n\t[3]byte{108, 106, 119}: \"Intel Corporate\",\n\t[3]byte{108, 108, 211}: \"Cisco Systems, Inc\",\n\t[3]byte{108, 109, 9}:   \"Kyowa Electronics Co.,Ltd.\",\n\t[3]byte{108, 110, 254}: \"Core Logic Inc.\",\n\t[3]byte{108, 111, 24}:  \"Stereotaxis, Inc.\",\n\t[3]byte{108, 112, 57}:  \"Novar GmbH\",\n\t[3]byte{108, 112, 159}: \"Apple, Inc.\",\n\t[3]byte{108, 113, 13}:  \"Cisco Systems, Inc\",\n\t[3]byte{108, 113, 189}: \"EZELINK TELECOM\",\n\t[3]byte{108, 113, 217}: \"AzureWave Technology Inc.\",\n\t[3]byte{108, 114, 32}:  \"D-Link International\",\n\t[3]byte{108, 114, 231}: \"Apple, Inc.\",\n\t[3]byte{108, 117, 13}:  \"WiFiSONG\",\n\t[3]byte{108, 118, 96}:  \"KYOCERA CORPORATION \",\n\t[3]byte{108, 129, 254}: \"Mitsuba Corporation\",\n\t[3]byte{108, 131, 54}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{108, 131, 102}: \"Nanjing SAC Power Grid Automation Co., Ltd.\",\n\t[3]byte{108, 134, 134}: \"Technonia\",\n\t[3]byte{108, 136, 20}:  \"Intel Corporate\",\n\t[3]byte{108, 138, 236}: \"Nantong Coship Electronics Co., Ltd.\",\n\t[3]byte{108, 139, 47}:  \"zte corporation\",\n\t[3]byte{108, 139, 211}: \"Cisco Systems, Inc\",\n\t[3]byte{108, 140, 219}: \"Otus Technologies Ltd\",\n\t[3]byte{108, 141, 101}: \"Wireless Glue Networks, Inc.\",\n\t[3]byte{108, 141, 193}: \"Apple, Inc.\",\n\t[3]byte{108, 143, 181}: \"Microsoft Mobile Oy\",\n\t[3]byte{108, 144, 177}: \"SanLogic Inc\",\n\t[3]byte{108, 146, 191}: \"Inspur Electronic Information Industry Co.,Ltd.\",\n\t[3]byte{108, 147, 84}:  \"Yaojin Technology (Shenzhen) Co., LTD.\",\n\t[3]byte{108, 148, 248}: \"Apple, Inc.\",\n\t[3]byte{108, 149, 34}:  \"Scalys\",\n\t[3]byte{108, 150, 207}: \"Apple, Inc.\",\n\t[3]byte{108, 152, 235}: \"Riverbed Technology, Inc.\",\n\t[3]byte{108, 153, 97}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{108, 153, 137}: \"Cisco Systems, Inc\",\n\t[3]byte{108, 154, 201}: \"Valentine Research, Inc.\",\n\t[3]byte{108, 155, 2}:   \"Nokia Corporation\",\n\t[3]byte{108, 155, 192}: \"Chemoptics Inc.\",\n\t[3]byte{108, 156, 233}: \"Nimble Storage\",\n\t[3]byte{108, 156, 237}: \"Cisco Systems, Inc\",\n\t[3]byte{108, 158, 124}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{108, 161, 0}:   \"Intel Corporate\",\n\t[3]byte{108, 164, 209}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{108, 166, 4}:   \"ARRIS Group, Inc.\",\n\t[3]byte{108, 166, 130}: \"EDAM information & communications\",\n\t[3]byte{108, 167, 95}:  \"zte corporation\",\n\t[3]byte{108, 167, 128}: \"Nokia Corporation\",\n\t[3]byte{108, 167, 250}: \"YOUNGBO ENGINEERING INC.\",\n\t[3]byte{108, 168, 73}:  \"Avaya Inc\",\n\t[3]byte{108, 168, 88}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{108, 169, 6}:   \"Telefield Ltd\",\n\t[3]byte{108, 169, 40}:  \"HMD Global Oy\",\n\t[3]byte{108, 169, 54}:  \"DisplayLink (UK) Ltd\",\n\t[3]byte{108, 169, 111}: \"TransPacket AS\",\n\t[3]byte{108, 170, 179}: \"Ruckus Wireless\",\n\t[3]byte{108, 171, 5}:   \"Cisco Systems, Inc\",\n\t[3]byte{108, 171, 49}:  \"Apple, Inc.\",\n\t[3]byte{108, 171, 77}:  \"Digital Payment Technologies\",\n\t[3]byte{108, 172, 96}:  \"Venetex Corp\",\n\t[3]byte{108, 173, 63}:  \"Hubbell Building Automation, Inc.\",\n\t[3]byte{108, 173, 239}: \"KZ Broadband Technologies, Ltd. \",\n\t[3]byte{108, 173, 248}: \"AzureWave Technology Inc.\",\n\t[3]byte{108, 174, 139}: \"IBM Corporation\",\n\t[3]byte{108, 174, 246}: \"eero inc.\",\n\t[3]byte{108, 175, 21}:  \"Webasto SE\",\n\t[3]byte{108, 176, 206}: \"NETGEAR\",\n\t[3]byte{108, 178, 39}:  \"Sony Video & Sound Products Inc.\",\n\t[3]byte{108, 178, 174}: \"Cisco Systems, Inc\",\n\t[3]byte{108, 179, 17}:  \"Shenzhen Lianrui Electronics Co.,Ltd\",\n\t[3]byte{108, 179, 80}:  \"Anhui comhigher tech co.,ltd\",\n\t[3]byte{108, 180, 167}: \"Landauer, Inc.\",\n\t[3]byte{108, 181, 107}: \"HUMAX Co., Ltd.\",\n\t[3]byte{108, 182, 202}: \"DIVUS GmbH\",\n\t[3]byte{108, 183, 73}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{108, 183, 244}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{108, 185, 197}: \"Delta Networks, Inc.\",\n\t[3]byte{108, 186, 184}: \"Sagemcom Broadband SAS\",\n\t[3]byte{108, 190, 233}: \"Alcatel-Lucent IPD\",\n\t[3]byte{108, 191, 181}: \"Noon Technology Co., Ltd\",\n\t[3]byte{108, 193, 71}:  \"Xiamen Hanin Electronic Technology Co., Ltd\",\n\t[3]byte{108, 193, 210}: \"ARRIS Group, Inc.\",\n\t[3]byte{108, 194, 23}:  \"Hewlett Packard\",\n\t[3]byte{108, 194, 107}: \"Apple, Inc.\",\n\t[3]byte{108, 195, 116}: \"Texas Instruments\",\n\t[3]byte{108, 196, 213}: \"HMD Global Oy\",\n\t[3]byte{108, 198, 59}:  \"Taicang T&W Electronics\",\n\t[3]byte{108, 199, 236}: \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{108, 202, 8}:   \"ARRIS Group, Inc.\",\n\t[3]byte{108, 206, 68}:  \"1MORE\",\n\t[3]byte{108, 208, 50}:  \"LG Electronics\",\n\t[3]byte{108, 209, 70}:  \"FRAMOS GmbH\",\n\t[3]byte{108, 209, 176}: \"WING SING ELECTRONICS HONG KONG LIMITED\",\n\t[3]byte{108, 210, 186}: \"zte corporation\",\n\t[3]byte{108, 214, 138}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{108, 215, 31}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{108, 217, 76}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{108, 220, 106}: \"Promethean Limited\",\n\t[3]byte{108, 221, 48}:  \"Cisco Systems, Inc\",\n\t[3]byte{108, 221, 188}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{108, 222, 169}: \"Cisco Meraki\",\n\t[3]byte{108, 223, 251}: \"IEEE Registration Authority\",\n\t[3]byte{108, 224, 30}:  \"Modcam AB\",\n\t[3]byte{108, 224, 176}: \"SOUND4\",\n\t[3]byte{108, 227, 182}: \"Nera Telecommunications Ltd.\",\n\t[3]byte{108, 228, 206}: \"Villiger Security Solutions AG\",\n\t[3]byte{108, 228, 218}: \"NEC Platforms, Ltd.\",\n\t[3]byte{108, 229, 247}: \"New H3C Technologies Co., Ltd\",\n\t[3]byte{108, 232, 92}:  \"Apple, Inc.\",\n\t[3]byte{108, 232, 115}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{108, 232, 198}: \"Earda Technologies co Ltd\",\n\t[3]byte{108, 233, 7}:   \"Nokia Corporation\",\n\t[3]byte{108, 233, 131}: \"Gastron Co., LTD.\",\n\t[3]byte{108, 235, 178}: \"Dongguan Sen DongLv Electronics Co.,Ltd\",\n\t[3]byte{108, 235, 182}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{108, 236, 90}:  \"Hon Hai Precision Ind. CO.,Ltd.\",\n\t[3]byte{108, 236, 161}: \"SHENZHEN CLOU ELECTRONICS CO. LTD.\",\n\t[3]byte{108, 236, 235}: \"Texas Instruments\",\n\t[3]byte{108, 237, 81}:  \"NEXCONTROL Co.,Ltd\",\n\t[3]byte{108, 239, 198}: \"SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{108, 240, 73}:  \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{108, 241, 126}: \"Zhejiang Uniview Technologies Co.,Ltd.\",\n\t[3]byte{108, 243, 115}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{108, 243, 127}: \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{108, 245, 232}: \"Mooredoll Inc.\",\n\t[3]byte{108, 247, 18}:  \"Nokia\",\n\t[3]byte{108, 249, 124}: \"Nanoptix Inc.\",\n\t[3]byte{108, 249, 210}: \"CHENGDU POVODO ELECTRONIC TECHNOLOGY CO., LTD\",\n\t[3]byte{108, 250, 88}:  \"Avaya Inc\",\n\t[3]byte{108, 250, 137}: \"Cisco Systems, Inc\",\n\t[3]byte{108, 250, 167}: \"AMPAK Technology, Inc.\",\n\t[3]byte{108, 253, 185}: \"Proware Technologies Co Ltd.\",\n\t[3]byte{108, 255, 190}: \"MPB Communications Inc.\",\n\t[3]byte{112, 1, 54}:    \"FATEK Automation Corporation\",\n\t[3]byte{112, 1, 181}:   \"Cisco Systems, Inc\",\n\t[3]byte{112, 2, 88}:    \"01DB-METRAVIB\",\n\t[3]byte{112, 3, 126}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{112, 3, 159}:   \"Espressif Inc.\",\n\t[3]byte{112, 4, 51}:    \"California Things Inc.\",\n\t[3]byte{112, 5, 20}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{112, 6, 172}:   \"Eastcompeace Technology Co., Ltd\",\n\t[3]byte{112, 11, 1}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{112, 11, 79}:   \"Cisco Systems, Inc\",\n\t[3]byte{112, 11, 192}:  \"Dewav Technology Company\",\n\t[3]byte{112, 15, 106}:  \"Cisco Systems, Inc\",\n\t[3]byte{112, 15, 199}:  \"SHENZHEN IKINLOOP TECHNOLOGY CO.,LTD.\",\n\t[3]byte{112, 15, 236}:  \"Poindus Systems Corp.\",\n\t[3]byte{112, 16, 92}:   \"Cisco Systems, Inc\",\n\t[3]byte{112, 16, 111}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{112, 17, 36}:   \"Apple, Inc.\",\n\t[3]byte{112, 17, 174}:  \"Music Life LTD\",\n\t[3]byte{112, 20, 4}:    \"Limited Liability Company\",\n\t[3]byte{112, 20, 166}:  \"Apple, Inc.\",\n\t[3]byte{112, 22, 159}:  \"EtherCAT Technology Group\",\n\t[3]byte{112, 24, 139}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{112, 24, 167}:  \"Cisco Systems, Inc\",\n\t[3]byte{112, 25, 47}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{112, 26, 4}:    \"Liteon Technology Corporation\",\n\t[3]byte{112, 26, 237}:  \"ADVAS CO., LTD.\",\n\t[3]byte{112, 27, 251}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{112, 28, 231}:  \"Intel Corporate\",\n\t[3]byte{112, 29, 8}:    \"99IOT Shenzhen co.,ltd\",\n\t[3]byte{112, 29, 127}:  \"Comtech Technology Co., Ltd.\",\n\t[3]byte{112, 29, 196}:  \"NorthStar Battery Company, LLC\",\n\t[3]byte{112, 30, 104}:  \"Hanna Instruments, Inc.\",\n\t[3]byte{112, 31, 60}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{112, 31, 83}:   \"Cisco Systems, Inc\",\n\t[3]byte{112, 32, 132}:  \"Hon Hai Precision Ind. Co., Ltd.\",\n\t[3]byte{112, 35, 147}:  \"fos4X GmbH\",\n\t[3]byte{112, 37, 38}:   \"Nokia\",\n\t[3]byte{112, 37, 89}:   \"CyberTAN Technology Inc.\",\n\t[3]byte{112, 38, 5}:    \"SONY Visual Products Inc.\",\n\t[3]byte{112, 40, 139}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{112, 41, 0}:    \"Shenzhen ChipTrip Technology Co,Ltd\",\n\t[3]byte{112, 42, 125}:  \"EpSpot AB\",\n\t[3]byte{112, 42, 213}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{112, 43, 29}:   \"E-Domus International Limited\",\n\t[3]byte{112, 44, 9}:    \"Nintendo Co.,Ltd\",\n\t[3]byte{112, 44, 31}:   \"Wisol\",\n\t[3]byte{112, 45, 132}:  \"i4C Innovations\",\n\t[3]byte{112, 45, 209}:  \"Newings Communication CO., LTD.\",\n\t[3]byte{112, 46, 34}:   \"zte corporation\",\n\t[3]byte{112, 46, 128}:  \"DIEHL Connectivity Solutions\",\n\t[3]byte{112, 46, 217}:  \"Guangzhou Shiyuan Electronics Co., Ltd.\",\n\t[3]byte{112, 47, 53}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{112, 47, 75}:   \"PolyVision Inc.\",\n\t[3]byte{112, 47, 151}:  \"Aava Mobile Oy\",\n\t[3]byte{112, 48, 24}:   \"Avaya Inc\",\n\t[3]byte{112, 48, 93}:   \"Ubiquoss Inc\",\n\t[3]byte{112, 48, 94}:   \"Nanjing Zhongke Menglian Information Technology Co.,LTD\",\n\t[3]byte{112, 49, 135}:  \"ACX GmbH\",\n\t[3]byte{112, 50, 213}:  \"Athena Wireless Communications Inc\",\n\t[3]byte{112, 53, 9}:    \"Cisco Systems, Inc\",\n\t[3]byte{112, 56, 17}:   \"Siemens Mobility Limited\",\n\t[3]byte{112, 56, 180}:  \"Low Tech Solutions\",\n\t[3]byte{112, 56, 238}:  \"Avaya Inc\",\n\t[3]byte{112, 58, 14}:   \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{112, 58, 81}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{112, 58, 115}:  \"Shenzhen Sundray Technologies Company Limited\",\n\t[3]byte{112, 58, 166}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{112, 58, 203}:  \"Google, Inc.\",\n\t[3]byte{112, 58, 216}:  \"Shenzhen Afoundry Electronic Co., Ltd\",\n\t[3]byte{112, 60, 3}:    \"RadiAnt Co.,Ltd\",\n\t[3]byte{112, 60, 57}:   \"SEAWING Kft\",\n\t[3]byte{112, 60, 105}:  \"Apple, Inc.\",\n\t[3]byte{112, 61, 21}:   \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{112, 62, 172}:  \"Apple, Inc.\",\n\t[3]byte{112, 65, 183}:  \"Edwards Lifesciences LLC\",\n\t[3]byte{112, 68, 28}:   \"SHENZHEN KAIFA TECHNOLOGY CO.,LTD.\",\n\t[3]byte{112, 70, 66}:   \"CHYNG HONG ELECTRONIC CO., LTD.\",\n\t[3]byte{112, 71, 233}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{112, 72, 15}:   \"Apple, Inc.\",\n\t[3]byte{112, 72, 247}:  \"Nintendo Co.,Ltd\",\n\t[3]byte{112, 74, 14}:   \"AMPAK Technology,Inc.\",\n\t[3]byte{112, 74, 174}:  \"Xstream Flow (Pty) Ltd\",\n\t[3]byte{112, 74, 228}:  \"Rinstrum Pty Ltd\",\n\t[3]byte{112, 76, 165}:  \"Fortinet, Inc.\",\n\t[3]byte{112, 76, 237}:  \"TMRG, Inc.\",\n\t[3]byte{112, 77, 123}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{112, 78, 1}:    \"KWANGWON TECH CO., LTD.\",\n\t[3]byte{112, 78, 102}:  \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{112, 79, 8}:    \"Shenzhen Huisheng Information Technology Co., Ltd.\",\n\t[3]byte{112, 79, 87}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{112, 79, 184}:  \"ARRIS Group, Inc.\",\n\t[3]byte{112, 80, 175}:  \"BSkyB Ltd\",\n\t[3]byte{112, 82, 197}:  \"Avaya Inc\",\n\t[3]byte{112, 83, 63}:   \"Alfa Instrumentos Eletronicos Ltda.\",\n\t[3]byte{112, 84, 37}:   \"ARRIS Group, Inc.\",\n\t[3]byte{112, 84, 180}:  \"Vestel Elektronik San ve Tic. A.Ş.\",\n\t[3]byte{112, 84, 210}:  \"PEGATRON CORPORATION\",\n\t[3]byte{112, 84, 245}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{112, 85, 248}:  \"Cerebras Systems Inc\",\n\t[3]byte{112, 86, 129}:  \"Apple, Inc.\",\n\t[3]byte{112, 87, 191}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{112, 88, 18}:   \"Panasonic Corporation AVC Networks Company\",\n\t[3]byte{112, 88, 150}:  \"InShow Technology\",\n\t[3]byte{112, 89, 87}:   \"Medallion Instrumentation Systems\",\n\t[3]byte{112, 89, 134}:  \"OOO TTV\",\n\t[3]byte{112, 90, 15}:   \"Hewlett Packard\",\n\t[3]byte{112, 90, 158}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{112, 90, 172}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{112, 90, 182}:  \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{112, 91, 46}:   \"M2Communication Inc.\",\n\t[3]byte{112, 92, 173}:  \"Konami Gaming Inc\",\n\t[3]byte{112, 93, 204}:  \"EFM Networks\",\n\t[3]byte{112, 94, 85}:   \"Realme Chongqing MobileTelecommunications Corp Ltd\",\n\t[3]byte{112, 94, 170}:  \"Action Target, Inc.\",\n\t[3]byte{112, 96, 222}:  \"LaVision GmbH\",\n\t[3]byte{112, 97, 115}:  \"Calantec GmbH\",\n\t[3]byte{112, 97, 123}:  \"Cisco Systems, Inc\",\n\t[3]byte{112, 97, 238}:  \"Sunwoda Electronic Co.,Ltd\",\n\t[3]byte{112, 98, 184}:  \"D-Link International\",\n\t[3]byte{112, 100, 23}:  \"ORBIS TECNOLOGIA ELECTRICA S.A.\",\n\t[3]byte{112, 101, 130}: \"Suzhou Hanming Technologies Co., Ltd.\",\n\t[3]byte{112, 101, 163}: \"Kandao lightforge Co., Ltd.\",\n\t[3]byte{112, 102, 27}:  \"Sonova AG\",\n\t[3]byte{112, 102, 85}:  \"AzureWave Technology Inc.\",\n\t[3]byte{112, 104, 121}: \"Saijo Denki International Co., Ltd.\",\n\t[3]byte{112, 105, 90}:  \"Cisco Systems, Inc\",\n\t[3]byte{112, 105, 121}: \"IEEE Registration Authority\",\n\t[3]byte{112, 107, 185}: \"Cisco Systems, Inc\",\n\t[3]byte{112, 109, 21}:  \"Cisco Systems, Inc\",\n\t[3]byte{112, 109, 236}: \"Wifi-soft LLC\",\n\t[3]byte{112, 110, 109}: \"Cisco Systems, Inc\",\n\t[3]byte{112, 111, 129}: \"Private\",\n\t[3]byte{112, 112, 13}:  \"Apple, Inc.\",\n\t[3]byte{112, 112, 76}:  \"Purple Communications, Inc\",\n\t[3]byte{112, 112, 139}: \"Cisco Systems, Inc\",\n\t[3]byte{112, 113, 179}: \"Brain Corporation\",\n\t[3]byte{112, 113, 188}: \"PEGATRON CORPORATION\",\n\t[3]byte{112, 114, 13}:  \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{112, 114, 60}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{112, 114, 207}: \"EdgeCore Networks\",\n\t[3]byte{112, 115, 203}: \"Apple, Inc.\",\n\t[3]byte{112, 118, 48}:  \"ARRIS Group, Inc.\",\n\t[3]byte{112, 118, 221}: \"OxyGuard Internation A/S\",\n\t[3]byte{112, 118, 240}: \"LevelOne Communications (India) Private Limited\",\n\t[3]byte{112, 118, 255}: \"KERLINK\",\n\t[3]byte{112, 119, 129}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{112, 120, 139}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{112, 121, 56}:  \"Wuxi Zhanrui Electronic Technology Co.,LTD\",\n\t[3]byte{112, 121, 144}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{112, 121, 179}: \"Cisco Systems, Inc\",\n\t[3]byte{112, 123, 232}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{112, 124, 24}:  \"ADATA Technology Co., Ltd\",\n\t[3]byte{112, 124, 105}: \"Avaya Inc\",\n\t[3]byte{112, 125, 149}: \"Shenzhen City LinwlanTechnology Co. Ltd.\",\n\t[3]byte{112, 125, 185}: \"Cisco Systems, Inc\",\n\t[3]byte{112, 126, 67}:  \"ARRIS Group, Inc.\",\n\t[3]byte{112, 126, 222}: \"NASTEC LTD.\",\n\t[3]byte{112, 129, 5}:   \"Cisco Systems, Inc\",\n\t[3]byte{112, 129, 235}: \"Apple, Inc.\",\n\t[3]byte{112, 130, 14}:  \"as electronics GmbH\",\n\t[3]byte{112, 130, 142}: \"OleumTech Corporation\",\n\t[3]byte{112, 133, 64}:  \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{112, 133, 194}: \"ASRock Incorporation\",\n\t[3]byte{112, 133, 198}: \"ARRIS Group, Inc.\",\n\t[3]byte{112, 134, 193}: \"Texas Instruments\",\n\t[3]byte{112, 135, 158}: \"Beken Corporation\",\n\t[3]byte{112, 136, 77}:  \"JAPAN RADIO CO., LTD.\",\n\t[3]byte{112, 137, 204}: \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{112, 138, 9}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{112, 139, 120}: \"citygrow technology co., ltd\",\n\t[3]byte{112, 139, 205}: \"ASUSTek COMPUTER INC.\",\n\t[3]byte{112, 140, 182}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{112, 140, 187}: \"MIMODISPLAYKOREA\",\n\t[3]byte{112, 141, 9}:   \"Nokia Corporation\",\n\t[3]byte{112, 143, 71}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{112, 145, 143}: \"Weber-Stephen Products LLC\",\n\t[3]byte{112, 145, 243}: \"Universal Electronics, Inc.\",\n\t[3]byte{112, 147, 131}: \"Intelligent Optical Network High Tech CO.,LTD.\",\n\t[3]byte{112, 147, 248}: \"Space Monkey, Inc.\",\n\t[3]byte{112, 151, 86}:  \"Happyelectronics Co.,Ltd\",\n\t[3]byte{112, 153, 28}:  \"Shenzhen Honesty Electronics Co.,Ltd\",\n\t[3]byte{112, 154, 11}:  \"Italian Institute of Technology\",\n\t[3]byte{112, 155, 165}: \"Shenzhen Y&D Electronics Co.,LTD.\",\n\t[3]byte{112, 155, 252}: \"Bryton Inc.\",\n\t[3]byte{112, 156, 143}: \"Nero AG\",\n\t[3]byte{112, 156, 209}: \"Intel Corporate\",\n\t[3]byte{112, 158, 41}:  \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{112, 158, 134}: \"X6D Limited\",\n\t[3]byte{112, 159, 45}:  \"zte corporation\",\n\t[3]byte{112, 159, 169}: \"TECNO MOBILE LIMITED\",\n\t[3]byte{112, 161, 145}: \"Trendsetter Medical, LLC\",\n\t[3]byte{112, 162, 179}: \"Apple, Inc.\",\n\t[3]byte{112, 164, 28}:  \"Advanced Wireless Dynamics S.L.\",\n\t[3]byte{112, 166, 106}: \"Prox Dynamics AS\",\n\t[3]byte{112, 168, 76}:  \"MONAD., Inc.\",\n\t[3]byte{112, 168, 227}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{112, 170, 178}: \"BlackBerry RTS\",\n\t[3]byte{112, 172, 215}: \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{112, 173, 84}:  \"Malvern Instruments Ltd\",\n\t[3]byte{112, 175, 36}:  \"TP Vision Belgium NV\",\n\t[3]byte{112, 175, 37}:  \"Nishiyama Industry Co.,LTD.\",\n\t[3]byte{112, 175, 106}: \"SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.\",\n\t[3]byte{112, 176, 53}:  \"Shenzhen Zowee Technology Co., Ltd\",\n\t[3]byte{112, 176, 140}: \"Shenou Communication Equipment Co.,Ltd\",\n\t[3]byte{112, 177, 78}:  \"ARRIS Group, Inc.\",\n\t[3]byte{112, 178, 101}: \"Hiltron s.r.l.\",\n\t[3]byte{112, 179, 23}:  \"Cisco Systems, Inc\",\n\t[3]byte{112, 179, 213}: \"IEEE Registration Authority\",\n\t[3]byte{112, 181, 153}: \"Embedded Technologies s.r.o.\",\n\t[3]byte{112, 181, 232}: \"Dell Inc.\",\n\t[3]byte{112, 183, 170}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{112, 183, 226}: \"Jiangsu Miter Technology Co.,Ltd.\",\n\t[3]byte{112, 185, 33}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{112, 186, 239}: \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{112, 187, 233}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{112, 188, 16}:  \"Microsoft Corporation\",\n\t[3]byte{112, 191, 62}:  \"Charles River Laboratories\",\n\t[3]byte{112, 191, 146}: \"GN Audio A/S\",\n\t[3]byte{112, 198, 172}: \"Bosch Automotive Aftermarket\",\n\t[3]byte{112, 199, 111}: \"INNO S\",\n\t[3]byte{112, 199, 242}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{112, 200, 51}:  \"Wirepas Oy\",\n\t[3]byte{112, 201, 78}:  \"Liteon Technology Corporation\",\n\t[3]byte{112, 201, 198}: \"Cisco Systems, Inc\",\n\t[3]byte{112, 202, 77}:  \"Shenzhen lnovance Technology Co.,Ltd.\",\n\t[3]byte{112, 202, 151}: \"Ruckus Wireless\",\n\t[3]byte{112, 202, 155}: \"Cisco Systems, Inc\",\n\t[3]byte{112, 205, 96}:  \"Apple, Inc.\",\n\t[3]byte{112, 205, 145}: \"TERACOM TELEMATICA S.A\",\n\t[3]byte{112, 206, 140}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{112, 208, 129}: \"Beijing Netpower Technologies Inc.\",\n\t[3]byte{112, 211, 19}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{112, 211, 121}: \"Cisco Systems, Inc\",\n\t[3]byte{112, 212, 242}: \"RIM\",\n\t[3]byte{112, 213, 126}: \"Scalar Corporation\",\n\t[3]byte{112, 213, 231}: \"Wellcore Corporation\",\n\t[3]byte{112, 214, 182}: \"Metrum Technologies\",\n\t[3]byte{112, 216, 128}: \"Upos System sp. z o.o.\",\n\t[3]byte{112, 217, 35}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{112, 217, 49}:  \"Cambridge Industries(Group) Co.,Ltd.\",\n\t[3]byte{112, 218, 156}: \"TECSEN\",\n\t[3]byte{112, 219, 152}: \"Cisco Systems, Inc\",\n\t[3]byte{112, 221, 161}: \"Tellabs\",\n\t[3]byte{112, 221, 168}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{112, 222, 226}: \"Apple, Inc.\",\n\t[3]byte{112, 222, 249}: \"FAI WAH INTERNATIONAL (HONG KONG) LIMITED\",\n\t[3]byte{112, 223, 47}:  \"Cisco Systems, Inc\",\n\t[3]byte{112, 224, 39}:  \"HONGYU COMMUNICATION TECHNOLOGY LIMITED\",\n\t[3]byte{112, 225, 57}:  \"3view Ltd\",\n\t[3]byte{112, 225, 253}: \"FLEXTRONICS\",\n\t[3]byte{112, 226, 76}:  \"SAE IT-systems GmbH & Co. KG\",\n\t[3]byte{112, 226, 132}: \"Wistron Infocomm (Zhongshan) Corporation\",\n\t[3]byte{112, 228, 34}:  \"Cisco Systems, Inc\",\n\t[3]byte{112, 229, 110}: \"Texas Instruments\",\n\t[3]byte{112, 231, 44}:  \"Apple, Inc.\",\n\t[3]byte{112, 232, 67}:  \"Beijing C&W Optical Communication Technology Co.,Ltd.\",\n\t[3]byte{112, 234, 26}:  \"Cisco Systems, Inc\",\n\t[3]byte{112, 234, 90}:  \"Apple, Inc.\",\n\t[3]byte{112, 236, 228}: \"Apple, Inc.\",\n\t[3]byte{112, 238, 80}:  \"Netatmo\",\n\t[3]byte{112, 238, 163}: \"Eoptolink Technology Inc. Ltd,\",\n\t[3]byte{112, 239, 0}:   \"Apple, Inc.\",\n\t[3]byte{112, 240, 135}: \"Apple, Inc.\",\n\t[3]byte{112, 240, 150}: \"Cisco Systems, Inc\",\n\t[3]byte{112, 241, 28}:  \"Shenzhen Ogemray Technology Co.,Ltd\",\n\t[3]byte{112, 241, 118}: \"Data Modul AG\",\n\t[3]byte{112, 241, 150}: \"Actiontec Electronics, Inc\",\n\t[3]byte{112, 241, 161}: \"Liteon Technology Corporation\",\n\t[3]byte{112, 241, 229}: \"Xetawave LLC\",\n\t[3]byte{112, 242, 32}:  \"Actiontec Electronics, Inc\",\n\t[3]byte{112, 243, 90}:  \"Cisco Systems, Inc\",\n\t[3]byte{112, 243, 149}: \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{112, 247, 84}:  \"AMPAK Technology,Inc.\",\n\t[3]byte{112, 248, 43}:  \"DWnet Technologies(Suzhou) Corporation\",\n\t[3]byte{112, 248, 231}: \"IEEE Registration Authority\",\n\t[3]byte{112, 249, 39}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{112, 249, 109}: \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{112, 252, 140}: \"OneAccess SA\",\n\t[3]byte{112, 252, 143}: \"FREEBOX SAS\",\n\t[3]byte{112, 253, 69}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{112, 253, 70}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{112, 255, 92}:  \"Cheerzing Communication(Xiamen)Technology Co.,Ltd\",\n\t[3]byte{112, 255, 118}: \"Texas Instruments\",\n\t[3]byte{116, 3, 189}:   \"BUFFALO.INC\",\n\t[3]byte{116, 4, 43}:    \"Lenovo Mobile Communication (Wuhan) Company Limited\",\n\t[3]byte{116, 5, 165}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{116, 10, 188}:  \"LightwaveRF Technology Ltd\",\n\t[3]byte{116, 10, 225}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{116, 14, 219}:  \"Optowiz Co., Ltd\",\n\t[3]byte{116, 18, 179}:  \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{116, 18, 187}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{116, 20, 137}:  \"SRT Wireless\",\n\t[3]byte{116, 21, 226}:  \"Tri-Sen Systems Corporation\",\n\t[3]byte{116, 24, 101}:  \"Shanghai DareGlobal Technologies Co.,Ltd\",\n\t[3]byte{116, 25, 248}:  \"IEEE Registration Authority\",\n\t[3]byte{116, 26, 224}:  \"IEEE Registration Authority\",\n\t[3]byte{116, 27, 178}:  \"Apple, Inc.\",\n\t[3]byte{116, 28, 39}:   \"ITEL MOBILE LIMITED\",\n\t[3]byte{116, 30, 147}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{116, 31, 74}:   \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{116, 31, 121}:  \"YOUNGKOOK ELECTRONICS CO.,LTD\",\n\t[3]byte{116, 34, 187}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{116, 35, 68}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{116, 37, 138}:  \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{116, 38, 172}:  \"Cisco Systems, Inc\",\n\t[3]byte{116, 39, 60}:   \"ChangYang Technology (Nanjing) Co., LTD\",\n\t[3]byte{116, 39, 234}:  \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{116, 40, 87}:   \"Mayfield Robotics\",\n\t[3]byte{116, 41, 175}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{116, 43, 15}:   \"Infinidat Ltd.\",\n\t[3]byte{116, 43, 98}:   \"FUJITSU LIMITED\",\n\t[3]byte{116, 45, 10}:   \"Norfolk Elektronik AG\",\n\t[3]byte{116, 46, 219}:  \"Perinet GmbH\",\n\t[3]byte{116, 46, 252}:  \"DirectPacket Research, Inc,\",\n\t[3]byte{116, 47, 104}:  \"AzureWave Technology Inc.\",\n\t[3]byte{116, 49, 112}:  \"Arcadyan Technology Corporation\",\n\t[3]byte{116, 50, 86}:   \"NT-ware Systemprg GmbH\",\n\t[3]byte{116, 52, 0}:    \"MTG Co., Ltd.\",\n\t[3]byte{116, 52, 174}:  \"this is engineering Inc.\",\n\t[3]byte{116, 54, 109}:  \"Vodafone Italia S.p.A.\",\n\t[3]byte{116, 55, 47}:   \"Tongfang Shenzhen Cloudcomputing Technology Co.,Ltd\",\n\t[3]byte{116, 55, 59}:   \"UNINET Co.,Ltd.\",\n\t[3]byte{116, 56, 137}:  \"ANNAX Anzeigesysteme GmbH\",\n\t[3]byte{116, 56, 183}:  \"CANON INC.\",\n\t[3]byte{116, 58, 32}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{116, 58, 101}:  \"NEC Corporation\",\n\t[3]byte{116, 58, 239}:  \"Kaonmedia CO., LTD.\",\n\t[3]byte{116, 60, 24}:   \"Taicang T&W Electronics\",\n\t[3]byte{116, 62, 43}:   \"Ruckus Wireless\",\n\t[3]byte{116, 62, 203}:  \"Gentrice tech\",\n\t[3]byte{116, 64, 187}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{116, 64, 190}:  \"LG Innotek\",\n\t[3]byte{116, 66, 127}:  \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{116, 66, 139}:  \"Apple, Inc.\",\n\t[3]byte{116, 68, 1}:    \"NETGEAR\",\n\t[3]byte{116, 69, 45}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{116, 69, 138}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{116, 69, 206}:  \"CRESYN\",\n\t[3]byte{116, 70, 160}:  \"Hewlett Packard\",\n\t[3]byte{116, 74, 164}:  \"zte corporation\",\n\t[3]byte{116, 75, 233}:  \"EXPLORER HYPERTECH CO.,LTD\",\n\t[3]byte{116, 77, 40}:   \"Routerboard.com\",\n\t[3]byte{116, 77, 121}:  \"Arrive Systems Inc.\",\n\t[3]byte{116, 81, 186}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{116, 83, 39}:   \"COMMSEN CO., LIMITED\",\n\t[3]byte{116, 84, 39}:   \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{116, 84, 125}:  \"Cisco SPVTG\",\n\t[3]byte{116, 86, 18}:   \"ARRIS Group, Inc.\",\n\t[3]byte{116, 87, 152}:  \"TRUMPF Laser GmbH + Co. KG\",\n\t[3]byte{116, 88, 243}:  \"Amazon Technologies Inc.\",\n\t[3]byte{116, 89, 9}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{116, 89, 51}:   \"Danal Entertainment\",\n\t[3]byte{116, 90, 170}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{116, 91, 197}:  \"IEEE Registration Authority\",\n\t[3]byte{116, 92, 75}:   \"GN Audio A/S\",\n\t[3]byte{116, 92, 159}:  \"TCT mobile ltd\",\n\t[3]byte{116, 94, 28}:   \"PIONEER CORPORATION\",\n\t[3]byte{116, 95, 0}:    \"Samsung Semiconductor Inc.\",\n\t[3]byte{116, 95, 144}:  \"LAM Technologies\",\n\t[3]byte{116, 95, 174}:  \"TSL PPL\",\n\t[3]byte{116, 96, 250}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{116, 97, 75}:   \"Chongqing Huijiatong Information Technology Co., Ltd.\",\n\t[3]byte{116, 99, 223}:  \"VTS GmbH\",\n\t[3]byte{116, 101, 209}: \"Atlinks\",\n\t[3]byte{116, 102, 48}:  \"T:mi Ytti\",\n\t[3]byte{116, 103, 247}: \"Extreme Networks, Inc.\",\n\t[3]byte{116, 106, 58}:  \"Aperi Corporation\",\n\t[3]byte{116, 106, 137}: \"Rezolt Corporation\",\n\t[3]byte{116, 106, 143}: \"VS Vision Systems GmbH\",\n\t[3]byte{116, 107, 130}: \"MOVEK \",\n\t[3]byte{116, 107, 171}: \"GUANGDONG ENOK COMMUNICATION CO., LTD\",\n\t[3]byte{116, 110, 228}: \"Asia Vital Components Co.,Ltd.\",\n\t[3]byte{116, 111, 25}:  \"ICARVISIONS (SHENZHEN) TECHNOLOGY CO., LTD.\",\n\t[3]byte{116, 111, 61}:  \"Contec GmbH\",\n\t[3]byte{116, 111, 247}: \"Wistron Neweb Corporation\",\n\t[3]byte{116, 112, 253}: \"Intel Corporate\",\n\t[3]byte{116, 114, 30}:  \"Edison Labs Inc.\",\n\t[3]byte{116, 114, 176}: \"Guangzhou Shiyuan Electronics Co., Ltd. \",\n\t[3]byte{116, 114, 242}: \"Chipsip Technology Co., Ltd.\",\n\t[3]byte{116, 115, 54}:  \"MICRODIGTAL Inc\",\n\t[3]byte{116, 117, 72}:  \"Amazon Technologies Inc.\",\n\t[3]byte{116, 120, 24}:  \"Jurumani Solutions\",\n\t[3]byte{116, 122, 144}: \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{116, 123, 122}: \"ETH Inc.\",\n\t[3]byte{116, 125, 36}:  \"Phicomm (Shanghai) Co., Ltd.\",\n\t[3]byte{116, 125, 182}: \"Aliwei Communications, Inc\",\n\t[3]byte{116, 126, 26}:  \"Red Embedded Design Limited\",\n\t[3]byte{116, 126, 45}:  \"Beijing Thomson CITIC Digital Technology Co. LTD.\",\n\t[3]byte{116, 129, 20}:  \"Apple, Inc.\",\n\t[3]byte{116, 129, 154}: \"PT. Hartono Istana Teknologi\",\n\t[3]byte{116, 131, 194}: \"Ubiquiti Networks Inc.\",\n\t[3]byte{116, 131, 239}: \"Arista Networks\",\n\t[3]byte{116, 132, 225}: \"Dongguan Haoyuan Electronics Co.,Ltd\",\n\t[3]byte{116, 133, 42}:  \"PEGATRON CORPORATION\",\n\t[3]byte{116, 133, 196}: \"New H3C Technologies Co., Ltd\",\n\t[3]byte{116, 134, 11}:  \"Cisco Systems, Inc\",\n\t[3]byte{116, 134, 122}: \"Dell Inc.\",\n\t[3]byte{116, 135, 169}: \"OCT Technology Co., Ltd.\",\n\t[3]byte{116, 135, 187}: \"Ciena Corporation\",\n\t[3]byte{116, 136, 42}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{116, 136, 139}: \"ADB Broadband Italia\",\n\t[3]byte{116, 136, 187}: \"Cisco Systems, Inc\",\n\t[3]byte{116, 138, 13}:  \"ARRIS Group, Inc.\",\n\t[3]byte{116, 138, 40}:  \"HMD Global Oy\",\n\t[3]byte{116, 138, 105}: \"Korea Image Technology Co., Ltd\",\n\t[3]byte{116, 139, 52}:  \"Shanghai Smart System Technology Co., Ltd\",\n\t[3]byte{116, 141, 8}:   \"Apple, Inc.\",\n\t[3]byte{116, 142, 8}:   \"Bestek Corp.\",\n\t[3]byte{116, 142, 248}: \"Brocade Communications Systems LLC\",\n\t[3]byte{116, 143, 27}:  \"MasterImage 3D\",\n\t[3]byte{116, 143, 77}:  \"MEN Mikro Elektronik GmbH\",\n\t[3]byte{116, 144, 80}:  \"Renesas Electronics Corporation\",\n\t[3]byte{116, 145, 26}:  \"Ruckus Wireless\",\n\t[3]byte{116, 145, 189}: \"Four systems Co.,Ltd.\",\n\t[3]byte{116, 147, 164}: \"Zebra Technologies Corp.\",\n\t[3]byte{116, 148, 61}:  \"AgJunction\",\n\t[3]byte{116, 149, 236}: \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{116, 150, 55}:  \"Todaair Electronic Co., Ltd\",\n\t[3]byte{116, 151, 129}: \"zte corporation\",\n\t[3]byte{116, 153, 117}: \"IBM Corporation\",\n\t[3]byte{116, 155, 232}: \"Hitron Technologies. Inc\",\n\t[3]byte{116, 156, 82}:  \"Huizhou Desay SV Automotive Co., Ltd.\",\n\t[3]byte{116, 156, 227}: \"KodaCloud Canada, Inc\",\n\t[3]byte{116, 157, 121}: \"Sercomm Corporation.\",\n\t[3]byte{116, 157, 143}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{116, 157, 220}: \"2Wire Inc\",\n\t[3]byte{116, 158, 165}: \"OHSUNG\",\n\t[3]byte{116, 158, 175}: \"Apple, Inc.\",\n\t[3]byte{116, 158, 245}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{116, 160, 47}:  \"Cisco Systems, Inc\",\n\t[3]byte{116, 160, 99}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{116, 162, 230}: \"Cisco Systems, Inc\",\n\t[3]byte{116, 163, 74}:  \"ZIMI CORPORATION\",\n\t[3]byte{116, 164, 167}: \"QRS Music Technologies, Inc.\",\n\t[3]byte{116, 164, 181}: \"Powerleader Science and Technology Co. Ltd.\",\n\t[3]byte{116, 165, 40}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{116, 167, 34}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{116, 167, 142}: \"zte corporation\",\n\t[3]byte{116, 167, 234}: \"Amazon Technologies Inc.\",\n\t[3]byte{116, 171, 147}: \"Blink by Amazon \",\n\t[3]byte{116, 172, 95}:  \"Qiku Internet Network Scientific (Shenzhen) Co., Ltd.\",\n\t[3]byte{116, 172, 185}: \"Ubiquiti Networks Inc.\",\n\t[3]byte{116, 173, 183}: \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{116, 174, 118}: \"iNovo Broadband, Inc.\",\n\t[3]byte{116, 176, 12}:  \"Network Video Technologies, Inc\",\n\t[3]byte{116, 180, 114}: \"CIESSE\",\n\t[3]byte{116, 181, 126}: \"zte corporation\",\n\t[3]byte{116, 181, 135}: \"Apple, Inc.\",\n\t[3]byte{116, 182, 182}: \"eero inc.\",\n\t[3]byte{116, 185, 30}:  \"Nanjing Bestway Automation System Co., Ltd\",\n\t[3]byte{116, 185, 235}: \"JinQianMao Technology Co.,Ltd.\",\n\t[3]byte{116, 186, 219}: \"Longconn Electornics(shenzhen)Co.,Ltd\",\n\t[3]byte{116, 187, 211}: \"Shenzhen xeme Communication Co., Ltd.\",\n\t[3]byte{116, 190, 8}:   \"ATEK Products, LLC\",\n\t[3]byte{116, 191, 161}: \"HYUNTECK\",\n\t[3]byte{116, 191, 183}: \"Nusoft Corporation\",\n\t[3]byte{116, 191, 192}: \"CANON INC.\",\n\t[3]byte{116, 193, 79}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{116, 193, 125}: \"Infinix mobility limited\",\n\t[3]byte{116, 194, 70}:  \"Amazon Technologies Inc.\",\n\t[3]byte{116, 195, 48}:  \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{116, 198, 33}:  \"Zhejiang Hite Renewable Energy Co.,LTD\",\n\t[3]byte{116, 198, 59}:  \"AzureWave Technology Inc.\",\n\t[3]byte{116, 201, 41}:  \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{116, 201, 154}: \"Ericsson AB\",\n\t[3]byte{116, 201, 163}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{116, 202, 37}:  \"Calxeda, Inc.\",\n\t[3]byte{116, 203, 243}: \"Lava international limited\",\n\t[3]byte{116, 204, 57}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{116, 205, 12}:  \"Smith Myers Communications Ltd.\",\n\t[3]byte{116, 206, 86}:  \"Packet Force Technology Limited Company\",\n\t[3]byte{116, 208, 43}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{116, 208, 220}: \"Ericsson AB\",\n\t[3]byte{116, 210, 29}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{116, 212, 53}:  \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{116, 214, 55}:  \"Amazon Technologies Inc.\",\n\t[3]byte{116, 214, 84}:  \"GINT\",\n\t[3]byte{116, 214, 117}: \"WYMA Tecnologia\",\n\t[3]byte{116, 214, 234}: \"Texas Instruments\",\n\t[3]byte{116, 215, 202}: \"Panasonic Corporation Automotive\",\n\t[3]byte{116, 216, 62}:  \"Intel Corporate\",\n\t[3]byte{116, 216, 80}:  \"Evrisko Systems\",\n\t[3]byte{116, 218, 56}:  \"Edimax Technology Co. Ltd.\",\n\t[3]byte{116, 218, 136}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{116, 218, 218}: \"D-Link International\",\n\t[3]byte{116, 218, 234}: \"Texas Instruments\",\n\t[3]byte{116, 219, 209}: \"Ebay Inc\",\n\t[3]byte{116, 222, 43}:  \"Liteon Technology Corporation\",\n\t[3]byte{116, 223, 191}: \"Liteon Technology Corporation\",\n\t[3]byte{116, 224, 110}: \"Ergophone GmbH\",\n\t[3]byte{116, 225, 74}:  \"IEEE Registration Authority\",\n\t[3]byte{116, 225, 130}: \"Texas Instruments\",\n\t[3]byte{116, 225, 154}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{116, 225, 182}: \"Apple, Inc.\",\n\t[3]byte{116, 226, 119}: \"Vizmonet Pte Ltd\",\n\t[3]byte{116, 226, 140}: \"Microsoft Corporation\",\n\t[3]byte{116, 226, 245}: \"Apple, Inc.\",\n\t[3]byte{116, 228, 36}:  \"APISTE CORPORATION\",\n\t[3]byte{116, 229, 11}:  \"Intel Corporate\",\n\t[3]byte{116, 229, 55}:  \"RADSPIN\",\n\t[3]byte{116, 229, 67}:  \"Liteon Technology Corporation\",\n\t[3]byte{116, 229, 249}: \"Intel Corporate\",\n\t[3]byte{116, 230, 15}:  \"TECNO MOBILE LIMITED\",\n\t[3]byte{116, 230, 226}: \"Dell Inc.\",\n\t[3]byte{116, 231, 198}: \"ARRIS Group, Inc.\",\n\t[3]byte{116, 234, 58}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{116, 234, 200}: \"New H3C Technologies Co., Ltd\",\n\t[3]byte{116, 234, 203}: \"New H3C Technologies Co., Ltd\",\n\t[3]byte{116, 234, 232}: \"ARRIS Group, Inc.\",\n\t[3]byte{116, 235, 128}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{116, 236, 66}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{116, 236, 241}: \"Acumen\",\n\t[3]byte{116, 238, 42}:  \"SHENZHEN BILIAN ELECTRONIC CO.，LTD\",\n\t[3]byte{116, 240, 109}: \"AzureWave Technology Inc.\",\n\t[3]byte{116, 240, 125}: \"BnCOM Co.,Ltd\",\n\t[3]byte{116, 241, 2}:   \"Beijing HCHCOM Technology Co., Ltd\",\n\t[3]byte{116, 244, 19}:  \"Maxwell Forest\",\n\t[3]byte{116, 246, 18}:  \"ARRIS Group, Inc.\",\n\t[3]byte{116, 246, 28}:  \"HTC Corporation\",\n\t[3]byte{116, 246, 97}:  \"Schneider Electric Fire & Security Oy\",\n\t[3]byte{116, 247, 38}:  \"Neuron Robotics\",\n\t[3]byte{116, 247, 55}:  \"KCE\",\n\t[3]byte{116, 247, 246}: \"Shanghai Sunmi Technology Co.,Ltd.\",\n\t[3]byte{116, 248, 93}:  \"Berkeley Nucleonics Corp\",\n\t[3]byte{116, 248, 219}: \"IEEE Registration Authority\",\n\t[3]byte{116, 249, 26}:  \"Onface\",\n\t[3]byte{116, 249, 202}: \"Nintendo Co.,Ltd\",\n\t[3]byte{116, 253, 160}: \"Compupal (Group) Corporation \",\n\t[3]byte{116, 254, 72}:  \"ADVANTECH CO., LTD.\",\n\t[3]byte{116, 255, 76}:  \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{116, 255, 125}: \"Wren Sound Systems, LLC\",\n\t[3]byte{120, 0, 158}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 2, 143}:   \"Adaptive Spectrum and Signal Alignment (ASSIA), Inc.\",\n\t[3]byte{120, 2, 177}:   \"Cisco Systems, Inc\",\n\t[3]byte{120, 2, 183}:   \"ShenZhen Ultra Easy Technology CO.,LTD\",\n\t[3]byte{120, 2, 248}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{120, 4, 115}:   \"Texas Instruments\",\n\t[3]byte{120, 4, 227}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{120, 5, 65}:    \"Queclink Wireless Solutions Co., Ltd\",\n\t[3]byte{120, 5, 95}:    \"Shenzhen WYC Technology Co., Ltd.\",\n\t[3]byte{120, 7, 56}:    \"Z.U.K. Elzab S.A.\",\n\t[3]byte{120, 10, 199}:  \"Baofeng TV Co., Ltd.\",\n\t[3]byte{120, 12, 184}:  \"Intel Corporate\",\n\t[3]byte{120, 12, 240}:  \"Cisco Systems, Inc\",\n\t[3]byte{120, 14, 209}:  \"TRUMPF Werkzeugmaschinen GmbH+Co.KG\",\n\t[3]byte{120, 15, 119}:  \"HangZhou Gubei Electronics Technology Co.,Ltd\",\n\t[3]byte{120, 17, 0}:    \"Quantumsolution\",\n\t[3]byte{120, 17, 133}:  \"NBS Payment Solutions Inc.\",\n\t[3]byte{120, 17, 220}:  \"XIAOMI Electronics,CO.,LTD\",\n\t[3]byte{120, 18, 184}:  \"ORANTEK LIMITED\",\n\t[3]byte{120, 23, 53}:   \"Nokia Shanghai Bell Co., Ltd.\",\n\t[3]byte{120, 23, 190}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{120, 24, 129}:  \"AzureWave Technology Inc.\",\n\t[3]byte{120, 25, 46}:   \"NASCENT Technology\",\n\t[3]byte{120, 25, 247}:  \"Juniper Networks\",\n\t[3]byte{120, 28, 90}:   \"SHARP Corporation\",\n\t[3]byte{120, 29, 74}:   \"zte corporation\",\n\t[3]byte{120, 29, 186}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{120, 29, 253}:  \"Jabil Inc\",\n\t[3]byte{120, 31, 219}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 32, 121}:  \"ID Tech\",\n\t[3]byte{120, 34, 61}:   \"Affirmed Networks\",\n\t[3]byte{120, 35, 39}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 35, 174}:  \"ARRIS Group, Inc.\",\n\t[3]byte{120, 36, 175}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{120, 37, 68}:   \"Omnima Limited\",\n\t[3]byte{120, 37, 122}:  \"LEO Innovation Lab\",\n\t[3]byte{120, 37, 173}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 40, 202}:  \"Sonos, Inc.\",\n\t[3]byte{120, 41, 237}:  \"ASKEY COMPUTER CORP\",\n\t[3]byte{120, 42, 121}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{120, 43, 70}:   \"Intel Corporate\",\n\t[3]byte{120, 43, 100}:  \"Bose Corporation\",\n\t[3]byte{120, 43, 203}:  \"Dell Inc.\",\n\t[3]byte{120, 44, 41}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{120, 45, 126}:  \"TRENDnet, Inc.\",\n\t[3]byte{120, 46, 239}:  \"Nokia Corporation\",\n\t[3]byte{120, 47, 23}:   \"Xlab Co.,Ltd\",\n\t[3]byte{120, 48, 59}:   \"Stephen Technologies Co.,Limited\",\n\t[3]byte{120, 48, 225}:  \"UltraClenz, LLC\",\n\t[3]byte{120, 49, 43}:   \"zte corporation\",\n\t[3]byte{120, 49, 193}:  \"Apple, Inc.\",\n\t[3]byte{120, 50, 27}:   \"D-Link International\",\n\t[3]byte{120, 50, 79}:   \"Millennium Group, Inc.\",\n\t[3]byte{120, 53, 160}:  \"Zurn Industries LLC\",\n\t[3]byte{120, 54, 7}:    \"Cermate Technologies Inc.\",\n\t[3]byte{120, 54, 144}:  \"Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\",\n\t[3]byte{120, 54, 204}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{120, 58, 108}:  \"TECNO MOBILE LIMITED\",\n\t[3]byte{120, 58, 132}:  \"Apple, Inc.\",\n\t[3]byte{120, 60, 227}:  \"Kai-EE\",\n\t[3]byte{120, 61, 91}:   \"TELNET Redes Inteligentes S.A.\",\n\t[3]byte{120, 62, 83}:   \"BSkyB Ltd\",\n\t[3]byte{120, 63, 21}:   \"EasySYNC Ltd.\",\n\t[3]byte{120, 64, 228}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 68, 5}:    \"FUJITU(HONG KONG) ELECTRONIC Co.,LTD.\",\n\t[3]byte{120, 68, 118}:  \"Zioncom Electronics (Shenzhen) Ltd.\",\n\t[3]byte{120, 68, 253}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{120, 69, 1}:    \"Biamp Systems\",\n\t[3]byte{120, 69, 88}:   \"Ubiquiti Networks Inc.\",\n\t[3]byte{120, 69, 97}:   \"CyberTAN Technology Inc.\",\n\t[3]byte{120, 69, 196}:  \"Dell Inc.\",\n\t[3]byte{120, 70, 196}:  \"DAEHAP HYPER-TECH\",\n\t[3]byte{120, 70, 212}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 71, 29}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 71, 227}:  \"SICHUAN TIANYI COMHEART TELECOM CO.,LTD\",\n\t[3]byte{120, 72, 89}:   \"Hewlett Packard\",\n\t[3]byte{120, 73, 29}:   \"The Will-Burt Company\",\n\t[3]byte{120, 75, 8}:    \"f.robotics acquisitions ltd\",\n\t[3]byte{120, 75, 135}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{120, 79, 67}:   \"Apple, Inc.\",\n\t[3]byte{120, 79, 155}:  \"Juniper Networks\",\n\t[3]byte{120, 80, 124}:  \"Juniper Networks\",\n\t[3]byte{120, 81, 12}:   \"LiveU Ltd.\",\n\t[3]byte{120, 82, 26}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 82, 74}:   \"Ensenso GmbH\",\n\t[3]byte{120, 82, 98}:   \"Shenzhen Hojy Software Co., Ltd.\",\n\t[3]byte{120, 83, 13}:   \"Shenzhen Skyworth  Digital  Technology  CO., Ltd\",\n\t[3]byte{120, 83, 100}:  \"SHIFT GmbH\",\n\t[3]byte{120, 83, 242}:  \"Roxton Systems Ltd.\",\n\t[3]byte{120, 84, 46}:   \"D-Link International\",\n\t[3]byte{120, 85, 23}:   \"SankyuElectronics\",\n\t[3]byte{120, 87, 18}:   \"Mobile Integration Workgroup\",\n\t[3]byte{120, 87, 115}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{120, 88, 96}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{120, 88, 243}:  \"Vachen Co.,Ltd\",\n\t[3]byte{120, 89, 62}:   \"RAFI GmbH & Co.KG\",\n\t[3]byte{120, 89, 94}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 89, 104}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{120, 92, 40}:   \"Prime Motion Inc.\",\n\t[3]byte{120, 92, 114}:  \"Hioso Technology Co., Ltd.\",\n\t[3]byte{120, 93, 200}:  \"LG Electronics\",\n\t[3]byte{120, 95, 76}:   \"Argox Information Co., Ltd.\",\n\t[3]byte{120, 97, 124}:  \"MITSUMI ELECTRIC CO.,LTD.\",\n\t[3]byte{120, 98, 86}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{120, 100, 230}: \"Green Motive Technology Limited\",\n\t[3]byte{120, 101, 89}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{120, 102, 174}: \"ZTEC Instruments, Inc.\",\n\t[3]byte{120, 103, 215}: \"Apple, Inc.\",\n\t[3]byte{120, 104, 247}: \"YSTen Technology Co.,Ltd\",\n\t[3]byte{120, 105, 212}: \"Shenyang Vibrotech Instruments Inc.\",\n\t[3]byte{120, 106, 137}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{120, 108, 28}:  \"Apple, Inc.\",\n\t[3]byte{120, 109, 148}: \"Palo Alto Networks\",\n\t[3]byte{120, 109, 235}: \"GE Lighting\",\n\t[3]byte{120, 112, 82}:  \"Welotec GmbH\",\n\t[3]byte{120, 113, 156}: \"ARRIS Group, Inc.\",\n\t[3]byte{120, 114, 93}:  \"Cisco Systems, Inc\",\n\t[3]byte{120, 123, 138}: \"Apple, Inc.\",\n\t[3]byte{120, 125, 72}:  \"ITEL MOBILE LIMITED\",\n\t[3]byte{120, 125, 83}:  \"Extreme Networks, Inc.\",\n\t[3]byte{120, 126, 97}:  \"Apple, Inc.\",\n\t[3]byte{120, 127, 98}:  \"GiK mbH\",\n\t[3]byte{120, 128, 56}:  \"FUNAI ELECTRIC CO., LTD.\",\n\t[3]byte{120, 129, 2}:   \"Sercomm Corporation.\",\n\t[3]byte{120, 129, 143}: \"Server Racks Australia Pty Ltd\",\n\t[3]byte{120, 129, 206}: \"China Mobile Iot Limited company\",\n\t[3]byte{120, 132, 60}:  \"Sony Corporation\",\n\t[3]byte{120, 132, 238}: \"INDRA ESPACIO S.A.\",\n\t[3]byte{120, 133, 244}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{120, 135, 13}:  \"Unifiedgateways India Private Limited\",\n\t[3]byte{120, 136, 109}: \"Apple, Inc.\",\n\t[3]byte{120, 136, 138}: \"CDR Sp. z o.o. Sp. k.\",\n\t[3]byte{120, 137, 115}: \"CMC\",\n\t[3]byte{120, 138, 32}:  \"Ubiquiti Networks Inc.\",\n\t[3]byte{120, 139, 42}:  \"Zhen Shi Information Technology (Shanghai) Co., Ltd.\",\n\t[3]byte{120, 139, 119}: \"Standar Telecom\",\n\t[3]byte{120, 140, 77}:  \"Indyme Solutions, LLC\",\n\t[3]byte{120, 140, 84}:  \"Ping Communication\",\n\t[3]byte{120, 140, 119}: \"LEXMARK INTERNATIONAL, INC.\",\n\t[3]byte{120, 141, 247}: \"Hitron Technologies. Inc\",\n\t[3]byte{120, 142, 51}:  \"Jiangsu SEUIC Technology Co.,Ltd\",\n\t[3]byte{120, 146, 62}:  \"Nokia Corporation\",\n\t[3]byte{120, 146, 156}: \"Intel Corporate\",\n\t[3]byte{120, 148, 180}: \"Sercomm Corporation.\",\n\t[3]byte{120, 148, 232}: \"Radio Bridge\",\n\t[3]byte{120, 150, 130}: \"zte corporation\",\n\t[3]byte{120, 150, 132}: \"ARRIS Group, Inc.\",\n\t[3]byte{120, 151, 195}: \"DINGXIN INFORMATION TECHNOLOGY CO.,LTD\",\n\t[3]byte{120, 152, 253}: \"Q9 Networks Inc.\",\n\t[3]byte{120, 153, 92}:  \"Nationz Technologies Inc\",\n\t[3]byte{120, 153, 102}: \"Musilab Electronics (DongGuan)Co.,Ltd.\",\n\t[3]byte{120, 153, 143}: \"MEDILINE ITALIA SRL\",\n\t[3]byte{120, 156, 133}: \"August Home, Inc.\",\n\t[3]byte{120, 156, 231}: \"Shenzhen Aikede Technology Co., Ltd\",\n\t[3]byte{120, 158, 208}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 159, 76}:  \"HOERBIGER Elektronik GmbH\",\n\t[3]byte{120, 159, 112}: \"Apple, Inc.\",\n\t[3]byte{120, 159, 135}: \"Siemens AG I IA PP PRM\",\n\t[3]byte{120, 160, 81}:  \"iiNet Labs Pty Ltd \",\n\t[3]byte{120, 161, 6}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{120, 161, 131}: \"Advidia\",\n\t[3]byte{120, 162, 160}: \"Nintendo Co., Ltd.\",\n\t[3]byte{120, 163, 81}:  \"SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD\",\n\t[3]byte{120, 163, 228}: \"Apple, Inc.\",\n\t[3]byte{120, 165, 4}:   \"Texas Instruments\",\n\t[3]byte{120, 165, 221}: \"Shenzhen Smarteye Digital Electronics Co., Ltd\",\n\t[3]byte{120, 166, 131}: \"Precidata\",\n\t[3]byte{120, 166, 189}: \"DAEYEON Control&Instrument Co,.Ltd\",\n\t[3]byte{120, 166, 225}: \"Brocade Communications Systems LLC\",\n\t[3]byte{120, 167, 20}:  \"Amphenol\",\n\t[3]byte{120, 167, 235}: \"1MORE\",\n\t[3]byte{120, 168, 115}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 170, 130}: \"New H3C Technologies Co., Ltd\",\n\t[3]byte{120, 171, 96}:  \"ABB Australia\",\n\t[3]byte{120, 171, 187}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 172, 68}:  \"Dell Inc.\",\n\t[3]byte{120, 172, 191}: \"Igneous Systems\",\n\t[3]byte{120, 172, 192}: \"Hewlett Packard\",\n\t[3]byte{120, 174, 12}:  \"Far South Networks\",\n\t[3]byte{120, 175, 88}:  \"GIMASI SA\",\n\t[3]byte{120, 175, 228}: \"Comau S.p.A\",\n\t[3]byte{120, 178, 19}:  \"DWnet Technologies(Suzhou) Corporation\",\n\t[3]byte{120, 178, 141}: \"Beijing Tengling Technology CO.Ltd \",\n\t[3]byte{120, 179, 185}: \"ShangHai sunup lighting CO.,LTD\",\n\t[3]byte{120, 179, 206}: \"Elo touch solutions\",\n\t[3]byte{120, 180, 106}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{120, 181, 210}: \"Ever Treasure Industrial Limited\",\n\t[3]byte{120, 182, 193}: \"AOBO Telecom Co.,Ltd\",\n\t[3]byte{120, 182, 236}: \"Scuf Gaming International LLC\",\n\t[3]byte{120, 184, 26}:  \"INTER SALES A/S\",\n\t[3]byte{120, 184, 75}:  \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{120, 184, 214}: \"Zebra Technologies Inc.\",\n\t[3]byte{120, 186, 208}: \"Shinybow Technology Co. Ltd.\",\n\t[3]byte{120, 186, 249}: \"Cisco Systems, Inc\",\n\t[3]byte{120, 188, 26}:  \"Cisco Systems, Inc\",\n\t[3]byte{120, 189, 188}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 190, 182}: \"Enhanced Vision\",\n\t[3]byte{120, 190, 189}: \"STULZ GmbH\",\n\t[3]byte{120, 193, 167}: \"zte corporation\",\n\t[3]byte{120, 194, 192}: \"IEEE Registration Authority\",\n\t[3]byte{120, 195, 19}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{120, 195, 233}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 196, 14}:  \"H&D Wireless\",\n\t[3]byte{120, 196, 171}: \"Shenzhen Runsil Technology Co.,Ltd\",\n\t[3]byte{120, 197, 229}: \"Texas Instruments\",\n\t[3]byte{120, 197, 248}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{120, 198, 187}: \"Innovasic, Inc.\",\n\t[3]byte{120, 200, 129}: \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{120, 202, 4}:   \"Nokia Corporation\",\n\t[3]byte{120, 202, 57}:  \"Apple, Inc.\",\n\t[3]byte{120, 202, 94}:  \"ELNO\",\n\t[3]byte{120, 202, 131}: \"IEEE Registration Authority\",\n\t[3]byte{120, 203, 51}:  \"DHC Software Co.,Ltd\",\n\t[3]byte{120, 203, 104}: \"DAEHAP HYPER-TECH\",\n\t[3]byte{120, 204, 43}:  \"SINEWY TECHNOLOGY CO., LTD\",\n\t[3]byte{120, 205, 142}: \"SMC Networks Inc\",\n\t[3]byte{120, 208, 4}:   \"Neousys Technology Inc.\",\n\t[3]byte{120, 209, 41}:  \"Vicos\",\n\t[3]byte{120, 209, 98}:  \"Apple, Inc.\",\n\t[3]byte{120, 210, 148}: \"NETGEAR\",\n\t[3]byte{120, 211, 71}:  \"Ericsson AB\",\n\t[3]byte{120, 211, 79}:  \"Pace-O-Matic, Inc.\",\n\t[3]byte{120, 211, 141}: \"HONGKONG YUNLINK TECHNOLOGY LIMITED\",\n\t[3]byte{120, 213, 181}: \"NAVIELEKTRO KY\",\n\t[3]byte{120, 214, 111}: \"Aristocrat Technologies Australia Pty. Ltd.\",\n\t[3]byte{120, 214, 178}: \"Toshiba\",\n\t[3]byte{120, 214, 240}: \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{120, 215, 26}:  \"Ciena Corporation\",\n\t[3]byte{120, 215, 82}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{120, 215, 95}:  \"Apple, Inc.\",\n\t[3]byte{120, 216, 0}:   \"IEEE Registration Authority\",\n\t[3]byte{120, 217, 159}: \"NuCom HK Ltd.\",\n\t[3]byte{120, 218, 7}:   \"Zhejiang Tmall Technology Co., Ltd.\",\n\t[3]byte{120, 218, 110}: \"Cisco Systems, Inc\",\n\t[3]byte{120, 218, 162}: \"Cynosure Technologies Co.,Ltd\",\n\t[3]byte{120, 218, 179}: \"GBO Technology\",\n\t[3]byte{120, 219, 47}:  \"Texas Instruments\",\n\t[3]byte{120, 221, 8}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{120, 221, 18}:  \"Arcadyan Corporation\",\n\t[3]byte{120, 221, 214}: \"c-scape\",\n\t[3]byte{120, 221, 217}: \"Guangzhou Shiyuan Electronics Co., Ltd. \",\n\t[3]byte{120, 222, 228}: \"Texas Instruments\",\n\t[3]byte{120, 225, 3}:   \"Amazon Technologies Inc.\",\n\t[3]byte{120, 226, 189}: \"Vodafone Automotive S.p.A.\",\n\t[3]byte{120, 227, 181}: \"Hewlett Packard\",\n\t[3]byte{120, 228, 0}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{120, 231, 209}: \"Hewlett Packard\",\n\t[3]byte{120, 232, 182}: \"zte corporation\",\n\t[3]byte{120, 233, 128}: \"RainUs Co.,Ltd\",\n\t[3]byte{120, 235, 20}:  \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{120, 235, 57}:  \"Instituto Nacional de Tecnología Industrial\",\n\t[3]byte{120, 236, 34}:  \"Shanghai Qihui Telecom Technology Co., LTD\",\n\t[3]byte{120, 236, 116}: \"Kyland-USA\",\n\t[3]byte{120, 239, 76}:  \"Unetconvergence Co., Ltd.\",\n\t[3]byte{120, 242, 158}: \"PEGATRON CORPORATION\",\n\t[3]byte{120, 245, 87}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{120, 245, 229}: \"BEGA Gantenbrink-Leuchten KG\",\n\t[3]byte{120, 245, 253}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{120, 247, 190}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{120, 247, 208}: \"Silverbrook Research\",\n\t[3]byte{120, 248, 130}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{120, 248, 184}: \"Rako Controls Ltd\",\n\t[3]byte{120, 249, 68}:  \"Private\",\n\t[3]byte{120, 249, 180}: \"Nokia\",\n\t[3]byte{120, 252, 20}:  \"Family Zone Cyber Safety Ltd \",\n\t[3]byte{120, 253, 148}: \"Apple, Inc.\",\n\t[3]byte{120, 254, 61}:  \"Juniper Networks\",\n\t[3]byte{120, 254, 65}:  \"Socus networks\",\n\t[3]byte{120, 254, 226}: \"Shanghai Diveo Technology Co., Ltd\",\n\t[3]byte{120, 255, 87}:  \"Intel Corporate\",\n\t[3]byte{120, 255, 202}: \"TECNO MOBILE LIMITED\",\n\t[3]byte{124, 1, 10}:    \"Texas Instruments\",\n\t[3]byte{124, 1, 135}:   \"Curtis Instruments, Inc.\",\n\t[3]byte{124, 1, 145}:   \"Apple, Inc.\",\n\t[3]byte{124, 2, 188}:   \"Hansung Electronics Co. LTD\",\n\t[3]byte{124, 3, 76}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{124, 3, 94}:    \"Xiaomi Communications Co Ltd\",\n\t[3]byte{124, 3, 171}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{124, 3, 201}:   \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{124, 3, 216}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{124, 4, 208}:   \"Apple, Inc.\",\n\t[3]byte{124, 5, 7}:     \"PEGATRON CORPORATION\",\n\t[3]byte{124, 5, 30}:    \"RAFAEL LTD.\",\n\t[3]byte{124, 6, 35}:    \"Ultra Electronics Sonar System Division\",\n\t[3]byte{124, 8, 217}:   \"Shanghai B-Star Technology Co\",\n\t[3]byte{124, 9, 43}:    \"Bekey A/S\",\n\t[3]byte{124, 10, 80}:   \"J-MEX Inc.\",\n\t[3]byte{124, 11, 198}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{124, 12, 246}:  \"Guangdong Huiwei High-tech Co., Ltd.\",\n\t[3]byte{124, 14, 206}:  \"Cisco Systems, Inc\",\n\t[3]byte{124, 16, 21}:   \"Brilliant Home Technology, Inc.\",\n\t[3]byte{124, 17, 190}:  \"Apple, Inc.\",\n\t[3]byte{124, 17, 203}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{124, 17, 205}:  \"QianTang Technology\",\n\t[3]byte{124, 20, 118}:  \"Damall Technologies SAS\",\n\t[3]byte{124, 22, 13}:   \"Saia-Burgess Controls AG\",\n\t[3]byte{124, 24, 205}:  \"E-TRON Co.,Ltd.\",\n\t[3]byte{124, 26, 3}:    \"8Locations Co., Ltd.\",\n\t[3]byte{124, 26, 252}:  \"Dalian Co-Edifice Video Technology Co., Ltd\",\n\t[3]byte{124, 28, 78}:   \"LG Innotek\",\n\t[3]byte{124, 28, 104}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{124, 28, 241}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{124, 29, 217}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{124, 30, 6}:    \"New H3C Technologies Co., Ltd\",\n\t[3]byte{124, 30, 82}:   \"Microsoft\",\n\t[3]byte{124, 30, 179}:  \"2N TELEKOMUNIKACE a.s.\",\n\t[3]byte{124, 32, 72}:   \"KoamTac\",\n\t[3]byte{124, 32, 100}:  \"Alcatel-Lucent IPD\",\n\t[3]byte{124, 33, 13}:   \"Cisco Systems, Inc\",\n\t[3]byte{124, 33, 14}:   \"Cisco Systems, Inc\",\n\t[3]byte{124, 33, 216}:  \"Shenzhen Think Will Communication Technology co., LTD.\",\n\t[3]byte{124, 35, 2}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{124, 36, 12}:   \"Telechips, Inc.\",\n\t[3]byte{124, 37, 134}:  \"Juniper Networks\",\n\t[3]byte{124, 37, 135}:  \"chaowifi.com\",\n\t[3]byte{124, 37, 218}:  \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{124, 38, 52}:   \"ARRIS Group, Inc.\",\n\t[3]byte{124, 38, 100}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{124, 42, 49}:   \"Intel Corporate\",\n\t[3]byte{124, 42, 219}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{124, 43, 225}:  \"Shenzhen Ferex Electrical Co.,Ltd\",\n\t[3]byte{124, 44, 243}:  \"Secure Electrans Ltd\",\n\t[3]byte{124, 46, 13}:   \"Blackmagic Design\",\n\t[3]byte{124, 46, 189}:  \"Google, Inc.\",\n\t[3]byte{124, 46, 221}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{124, 47, 128}:  \"Gigaset Communications GmbH\",\n\t[3]byte{124, 49, 14}:   \"Cisco Systems, Inc\",\n\t[3]byte{124, 51, 110}:  \"MEG Electronics Inc.\",\n\t[3]byte{124, 53, 72}:   \"Transcend Information\",\n\t[3]byte{124, 56, 102}:  \"Texas Instruments\",\n\t[3]byte{124, 56, 108}:  \"Real Time Logic\",\n\t[3]byte{124, 56, 173}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{124, 57, 32}:   \"SSOMA SECURITY\",\n\t[3]byte{124, 57, 83}:   \"zte corporation\",\n\t[3]byte{124, 59, 213}:  \"Imago Group\",\n\t[3]byte{124, 60, 182}:  \"Shenzhen Homecare Technology Co.,Ltd.\",\n\t[3]byte{124, 62, 157}:  \"PATECH\",\n\t[3]byte{124, 65, 162}:  \"Nokia\",\n\t[3]byte{124, 67, 143}:  \"E-Band Communications Corp.\",\n\t[3]byte{124, 68, 76}:   \"Entertainment Solutions, S.L.\",\n\t[3]byte{124, 70, 133}:  \"Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.\",\n\t[3]byte{124, 71, 124}:  \"IEEE Registration Authority\",\n\t[3]byte{124, 72, 178}:  \"Vida Resources Lte Ltd\",\n\t[3]byte{124, 73, 185}:  \"Plexus Manufacturing Sdn Bhd\",\n\t[3]byte{124, 73, 235}:  \"XIAOMI Electronics,CO.,LTD\",\n\t[3]byte{124, 74, 130}:  \"Portsmith LLC\",\n\t[3]byte{124, 74, 168}:  \"MindTree Wireless PVT Ltd\",\n\t[3]byte{124, 75, 120}:  \"Red Sun Synthesis Pte Ltd\",\n\t[3]byte{124, 76, 88}:   \"Scale Computing, Inc.\",\n\t[3]byte{124, 76, 165}:  \"BSkyB Ltd\",\n\t[3]byte{124, 79, 125}:  \"Sawwave\",\n\t[3]byte{124, 79, 181}:  \"Arcadyan Technology Corporation\",\n\t[3]byte{124, 80, 73}:   \"Apple, Inc.\",\n\t[3]byte{124, 80, 218}:  \"Private\",\n\t[3]byte{124, 81, 137}:  \"SG Wireless Limited\",\n\t[3]byte{124, 82, 89}:   \"Sichuan Jiuzhou Electronic Technology Co., Ltd.\",\n\t[3]byte{124, 83, 74}:   \"Metamako\",\n\t[3]byte{124, 85, 231}:  \"YSI, Inc.\",\n\t[3]byte{124, 87, 60}:   \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{124, 87, 78}:   \"COBI GmbH\",\n\t[3]byte{124, 90, 28}:   \"Sophos Ltd\",\n\t[3]byte{124, 90, 103}:  \"JNC Systems, Inc.\",\n\t[3]byte{124, 92, 248}:  \"Intel Corporate\",\n\t[3]byte{124, 96, 74}:   \"Avelon\",\n\t[3]byte{124, 96, 151}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{124, 97, 102}:  \"Amazon Technologies Inc.\",\n\t[3]byte{124, 97, 147}:  \"HTC Corporation\",\n\t[3]byte{124, 100, 86}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{124, 102, 157}: \"Texas Instruments\",\n\t[3]byte{124, 103, 162}: \"Intel Corporate\",\n\t[3]byte{124, 105, 107}: \"Atmosic Technologies\",\n\t[3]byte{124, 105, 246}: \"Cisco Systems, Inc\",\n\t[3]byte{124, 106, 179}: \"IBC TECHNOLOGIES INC.\",\n\t[3]byte{124, 106, 195}: \"GatesAir, Inc\",\n\t[3]byte{124, 106, 219}: \"SafeTone Technology Co.,Ltd\",\n\t[3]byte{124, 106, 243}: \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{124, 107, 51}:  \"Tenyu Tech Co. Ltd.\",\n\t[3]byte{124, 107, 82}:  \"Tigaro Wireless\",\n\t[3]byte{124, 107, 156}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{124, 107, 247}: \"NTI co., ltd.\",\n\t[3]byte{124, 108, 57}:  \"PIXSYS SRL\",\n\t[3]byte{124, 108, 143}: \"AMS NEVE LTD\",\n\t[3]byte{124, 109, 98}:  \"Apple, Inc.\",\n\t[3]byte{124, 109, 166}: \"Superwave Group LLC\",\n\t[3]byte{124, 109, 248}: \"Apple, Inc.\",\n\t[3]byte{124, 111, 6}:   \"Caterpillar Trimble Control Technologies\",\n\t[3]byte{124, 111, 248}: \"ShenZhen ACTO Digital Video Technology Co.,Ltd.\",\n\t[3]byte{124, 112, 188}: \"IEEE Registration Authority\",\n\t[3]byte{124, 113, 118}: \"Wuxi iData Technology Company Ltd.\",\n\t[3]byte{124, 114, 228}: \"Unikey Technologies\",\n\t[3]byte{124, 115, 139}: \"Cocoon Alarm Ltd\",\n\t[3]byte{124, 118, 48}:  \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{124, 118, 53}:  \"Intel Corporate\",\n\t[3]byte{124, 118, 104}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{124, 118, 115}: \"ENMAS GmbH\",\n\t[3]byte{124, 120, 126}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{124, 121, 232}: \"PayRange Inc.\",\n\t[3]byte{124, 122, 83}:  \"Phytrex Technology Corp.\",\n\t[3]byte{124, 122, 145}: \"Intel Corporate\",\n\t[3]byte{124, 123, 139}: \"Control Concepts, Inc.\",\n\t[3]byte{124, 123, 228}: \"Z'SEDAI KENKYUSHO CORPORATION\",\n\t[3]byte{124, 125, 61}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{124, 125, 65}:  \"Jinmuyu Electronics Co., Ltd.\",\n\t[3]byte{124, 130, 45}:  \"Nortec\",\n\t[3]byte{124, 130, 116}: \"Shenzhen Hikeen Technology CO.,LTD\",\n\t[3]byte{124, 131, 6}:   \"Glen Dimplex Nordic as\",\n\t[3]byte{124, 137, 86}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{124, 137, 193}: \"Palo Alto Networks\",\n\t[3]byte{124, 138, 225}: \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{124, 139, 181}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{124, 139, 202}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{124, 141, 145}: \"Shanghai Hongzhuo Information Technology co.,LTD\",\n\t[3]byte{124, 142, 228}: \"Texas Instruments\",\n\t[3]byte{124, 145, 34}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{124, 148, 42}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{124, 148, 178}: \"Philips Healthcare PCCI\",\n\t[3]byte{124, 149, 177}: \"Extreme Networks, Inc.\",\n\t[3]byte{124, 149, 243}: \"Cisco Systems, Inc\",\n\t[3]byte{124, 150, 210}: \"Fihonest communication co.,Ltd\",\n\t[3]byte{124, 151, 99}:  \"Openmatics s.r.o.\",\n\t[3]byte{124, 154, 29}:  \"Apple, Inc.\",\n\t[3]byte{124, 154, 84}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{124, 154, 155}: \"VSE valencia smart energy\",\n\t[3]byte{124, 158, 189}: \"Espressif Inc.\",\n\t[3]byte{124, 161, 93}:  \"GN ReSound A/S\",\n\t[3]byte{124, 161, 119}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{124, 161, 174}: \"Apple, Inc.\",\n\t[3]byte{124, 162, 55}:  \"King Slide Technology CO., LTD.\",\n\t[3]byte{124, 162, 62}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{124, 162, 155}: \"D.SignT GmbH & Co. KG\",\n\t[3]byte{124, 166, 29}:  \"MHL, LLC\",\n\t[3]byte{124, 167, 176}: \"SHENZHEN BILIAN ELECTRONIC CO.，LTD\",\n\t[3]byte{124, 169, 107}: \"Syrotech Networks. Ltd.\",\n\t[3]byte{124, 169, 125}: \"Objenious\",\n\t[3]byte{124, 171, 37}:  \"MESMO TECHNOLOGY INC.\",\n\t[3]byte{124, 171, 96}:  \"Apple, Inc.\",\n\t[3]byte{124, 172, 178}: \"Bosch Software Innovations GmbH\",\n\t[3]byte{124, 173, 79}:  \"Cisco Systems, Inc\",\n\t[3]byte{124, 173, 116}: \"Cisco Systems, Inc\",\n\t[3]byte{124, 176, 62}:  \"OSRAM GmbH\",\n\t[3]byte{124, 176, 194}: \"Intel Corporate\",\n\t[3]byte{124, 177, 93}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{124, 177, 119}: \"Satelco AG\",\n\t[3]byte{124, 178, 27}:  \"Cisco SPVTG\",\n\t[3]byte{124, 178, 50}:  \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{124, 178, 92}:  \"Acacia Communications\",\n\t[3]byte{124, 178, 125}: \"Intel Corporate\",\n\t[3]byte{124, 179, 123}: \"Qingdao Intelligent&Precise Electronics Co.,Ltd.\",\n\t[3]byte{124, 181, 66}:  \"ACES Technology\",\n\t[3]byte{124, 181, 155}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{124, 183, 51}:  \"ASKEY COMPUTER CORP\",\n\t[3]byte{124, 183, 123}: \"Paradigm Electronics Inc\",\n\t[3]byte{124, 185, 96}:  \"Shanghai X-Cheng telecom LTD\",\n\t[3]byte{124, 186, 204}: \"IEEE Registration Authority\",\n\t[3]byte{124, 187, 111}: \"Cosco Electronics Co., Ltd.\",\n\t[3]byte{124, 187, 138}: \"Nintendo Co., Ltd.\",\n\t[3]byte{124, 188, 132}: \"IEEE Registration Authority\",\n\t[3]byte{124, 189, 6}:   \"AE REFUsol\",\n\t[3]byte{124, 191, 136}: \"Mobilicom LTD\",\n\t[3]byte{124, 191, 177}: \"ARRIS Group, Inc.\",\n\t[3]byte{124, 195, 133}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{124, 195, 161}: \"Apple, Inc.\",\n\t[3]byte{124, 196, 239}: \"Devialet\",\n\t[3]byte{124, 197, 55}:  \"Apple, Inc.\",\n\t[3]byte{124, 198, 196}: \"Kolff Computer Supplies b.v.\",\n\t[3]byte{124, 199, 9}:   \"SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\",\n\t[3]byte{124, 199, 126}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{124, 200, 171}: \"Acro Associates, Inc.\",\n\t[3]byte{124, 200, 208}: \"TIANJIN YAAN TECHNOLOGY CO., LTD.\",\n\t[3]byte{124, 200, 215}: \"Damalisk\",\n\t[3]byte{124, 201, 38}:  \"Wuhan GreeNet Information Service Co.,Ltd.\",\n\t[3]byte{124, 201, 90}:  \"Dell EMC\",\n\t[3]byte{124, 203, 13}:  \"Antaira Technologies, LLC\",\n\t[3]byte{124, 203, 226}: \"IEEE Registration Authority\",\n\t[3]byte{124, 204, 31}:  \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{124, 204, 184}: \"Intel Corporate\",\n\t[3]byte{124, 205, 17}:  \"MS-Magnet\",\n\t[3]byte{124, 205, 60}:  \"Guangzhou Juzing Technology Co., Ltd\",\n\t[3]byte{124, 207, 207}: \"Shanghai SEARI Intelligent System Co., Ltd\",\n\t[3]byte{124, 209, 195}: \"Apple, Inc.\",\n\t[3]byte{124, 211, 10}:  \"INVENTEC CORPORATION\",\n\t[3]byte{124, 213, 102}: \"Amazon Technologies Inc.\",\n\t[3]byte{124, 214, 97}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{124, 215, 98}:  \"Freestyle Technology Pty Ltd\",\n\t[3]byte{124, 216, 68}:  \"Enmotus Inc\",\n\t[3]byte{124, 217, 92}:  \"Google, Inc.\",\n\t[3]byte{124, 217, 160}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{124, 217, 254}: \"New Cosmos Electric Co., Ltd.\",\n\t[3]byte{124, 218, 132}: \"Dongnian Networks Inc.\",\n\t[3]byte{124, 219, 152}: \"ASKEY COMPUTER CORP\",\n\t[3]byte{124, 221, 17}:  \"Chongqing MAS SCI&TECH.Co.,Ltd\",\n\t[3]byte{124, 221, 32}:  \"IOXOS Technologies S.A.\",\n\t[3]byte{124, 221, 118}: \"Suzhou Hanming Technologies Co., Ltd.\",\n\t[3]byte{124, 221, 144}: \"Shenzhen Ogemray Technology Co., Ltd.\",\n\t[3]byte{124, 221, 233}: \"ATOM tech Inc.\",\n\t[3]byte{124, 223, 161}: \"Espressif Inc.\",\n\t[3]byte{124, 224, 68}:  \"NEON Inc\",\n\t[3]byte{124, 225, 255}: \"Computer Performance, Inc. DBA Digital Loggers, Inc.\",\n\t[3]byte{124, 226, 202}: \"Juniper Networks\",\n\t[3]byte{124, 228, 170}: \"Private\",\n\t[3]byte{124, 229, 36}:  \"Quirky, Inc.\",\n\t[3]byte{124, 229, 107}: \"ESEN Optoelectronics Technology Co.,Ltd.\",\n\t[3]byte{124, 233, 124}: \"ITEL MOBILE LIMITED\",\n\t[3]byte{124, 233, 211}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{124, 235, 127}: \"Dmet Products Corp.\",\n\t[3]byte{124, 235, 174}: \"Ridgeline Instruments\",\n\t[3]byte{124, 235, 234}: \"ASCT\",\n\t[3]byte{124, 236, 121}: \"Texas Instruments\",\n\t[3]byte{124, 236, 155}: \"Fuzhou Teraway Information Technology Co.,Ltd\",\n\t[3]byte{124, 237, 141}: \"Microsoft\",\n\t[3]byte{124, 239, 24}:  \"Creative Product Design Pty. Ltd.\",\n\t[3]byte{124, 239, 97}:  \"STR Elektronik Josef Schlechtinger GmbH\",\n\t[3]byte{124, 239, 138}: \"Inhon International Ltd.\",\n\t[3]byte{124, 240, 95}:  \"Apple, Inc.\",\n\t[3]byte{124, 240, 152}: \"Bee Beans Technologies, Inc.\",\n\t[3]byte{124, 240, 186}: \"Linkwell Telesystems Pvt Ltd\",\n\t[3]byte{124, 242, 221}: \"Vence Corp\",\n\t[3]byte{124, 243, 27}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{124, 244, 41}:  \"NUUO Inc. \",\n\t[3]byte{124, 248, 84}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{124, 249, 14}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{124, 249, 92}:  \"U.I. Lapp GmbH\",\n\t[3]byte{124, 249, 160}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{124, 250, 223}: \"Apple, Inc.\",\n\t[3]byte{124, 252, 60}:  \"Visteon Corporation\",\n\t[3]byte{124, 253, 107}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{124, 253, 130}: \"GUANGDONG GENIUS TECHNOLOGY CO., LTD.\",\n\t[3]byte{124, 254, 40}:  \"Salutron Inc.\",\n\t[3]byte{124, 254, 78}:  \"Shenzhen Safe vision Technology Co.,LTD\",\n\t[3]byte{124, 254, 144}: \"Mellanox Technologies, Inc.\",\n\t[3]byte{124, 255, 77}:  \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{124, 255, 98}:  \"Huizhou Super Electron Technology Co.,Ltd.\",\n\t[3]byte{128, 0, 11}:    \"Intel Corporate\",\n\t[3]byte{128, 0, 16}:    \"AT&T\",\n\t[3]byte{128, 0, 110}:   \"Apple, Inc.\",\n\t[3]byte{128, 1, 132}:   \"HTC Corporation\",\n\t[3]byte{128, 2, 156}:   \"Gemtek Technology Co., Ltd.\",\n\t[3]byte{128, 2, 223}:   \"ORA Inc.\",\n\t[3]byte{128, 5, 136}:   \"Ruijie Networks Co.,LTD\",\n\t[3]byte{128, 5, 223}:   \"Montage Technology Group Limited\",\n\t[3]byte{128, 7, 162}:   \"Esson Technology Inc.\",\n\t[3]byte{128, 9, 2}:     \"Keysight Technologies, Inc.\",\n\t[3]byte{128, 10, 6}:    \"COMTEC co.,ltd\",\n\t[3]byte{128, 10, 128}:  \"IEEE Registration Authority\",\n\t[3]byte{128, 11, 81}:   \"Chengdu XGimi Technology Co.,Ltd\",\n\t[3]byte{128, 12, 103}:  \"Apple, Inc.\",\n\t[3]byte{128, 13, 215}:  \"Latticework, Inc\",\n\t[3]byte{128, 14, 36}:   \"ForgetBox\",\n\t[3]byte{128, 18, 223}:  \"Shenzhen SuperElectron Technology Co.,Ltd.\",\n\t[3]byte{128, 19, 130}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{128, 20, 64}:   \"Sunlit System Technology Corp\",\n\t[3]byte{128, 20, 168}:  \"Guangzhou V-SOLUTION Electronic Technology Co., Ltd.\",\n\t[3]byte{128, 22, 5}:    \"Vodafone Italia S.p.A.\",\n\t[3]byte{128, 22, 9}:    \"Sleep Number\",\n\t[3]byte{128, 22, 183}:  \"Brunel University\",\n\t[3]byte{128, 23, 125}:  \"Nortel Networks\",\n\t[3]byte{128, 24, 68}:   \"Dell Inc.\",\n\t[3]byte{128, 24, 167}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{128, 25, 52}:   \"Intel Corporate\",\n\t[3]byte{128, 25, 103}:  \"Shanghai Reallytek Information Technology  Co.,Ltd\",\n\t[3]byte{128, 25, 254}:  \"JianLing Technology CO., LTD\",\n\t[3]byte{128, 29, 170}:  \"Avaya Inc\",\n\t[3]byte{128, 31, 2}:    \"Edimax Technology Co. Ltd.\",\n\t[3]byte{128, 31, 18}:   \"Microchip Technology Inc.\",\n\t[3]byte{128, 32, 175}:  \"Trade FIDES, a.s.\",\n\t[3]byte{128, 32, 218}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{128, 32, 225}:  \"BVBA DPTechnics\",\n\t[3]byte{128, 32, 253}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{128, 34, 117}:  \"Beijing Beny Wave Technology Co Ltd\",\n\t[3]byte{128, 34, 167}:  \"NEC Platforms, Ltd.\",\n\t[3]byte{128, 38, 137}:  \"D-Link International\",\n\t[3]byte{128, 41, 148}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{128, 42, 168}:  \"Ubiquiti Networks Inc.\",\n\t[3]byte{128, 42, 250}:  \"Germaneers GmbH\",\n\t[3]byte{128, 43, 249}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{128, 45, 191}:  \"Cisco Systems, Inc\",\n\t[3]byte{128, 45, 225}:  \"Solarbridge Technologies\",\n\t[3]byte{128, 46, 20}:   \"azeti Networks AG\",\n\t[3]byte{128, 47, 222}:  \"Zurich Instruments AG\",\n\t[3]byte{128, 48, 73}:   \"Liteon Technology Corporation\",\n\t[3]byte{128, 48, 220}:  \"Texas Instruments\",\n\t[3]byte{128, 48, 224}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{128, 49, 240}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{128, 50, 83}:   \"Intel Corporate\",\n\t[3]byte{128, 52, 87}:   \"OT Systems Limited\",\n\t[3]byte{128, 53, 193}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{128, 55, 115}:  \"NETGEAR\",\n\t[3]byte{128, 56, 150}:  \"SHARP Corporation\",\n\t[3]byte{128, 56, 188}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{128, 56, 253}:  \"LeapFrog Enterprises, Inc.\",\n\t[3]byte{128, 57, 229}:  \"PATLITE CORPORATION\",\n\t[3]byte{128, 58, 10}:   \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{128, 58, 89}:   \"AT&T\",\n\t[3]byte{128, 58, 244}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{128, 59, 42}:   \"ABB Xiamen Low Voltage Equipment Co.,Ltd.\",\n\t[3]byte{128, 59, 154}:  \"ghe-ces electronic ag\",\n\t[3]byte{128, 59, 246}:  \"LOOK EASY INTERNATIONAL LIMITED\",\n\t[3]byte{128, 62, 72}:   \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{128, 63, 93}:   \"Winstars Technology Ltd\",\n\t[3]byte{128, 63, 214}:  \"bytes at work AG\",\n\t[3]byte{128, 65, 38}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{128, 65, 78}:   \"BBK EDUCATIONAL ELECTRONICS CORP.,LTD.\",\n\t[3]byte{128, 66, 124}:  \"Adolf Tedsen GmbH & Co. KG\",\n\t[3]byte{128, 71, 49}:   \"Packet Design, Inc.\",\n\t[3]byte{128, 72, 165}:  \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{128, 73, 113}:  \"Apple, Inc.\",\n\t[3]byte{128, 74, 20}:   \"Apple, Inc.\",\n\t[3]byte{128, 75, 32}:   \"Ventilation Control\",\n\t[3]byte{128, 78, 112}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{128, 78, 129}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{128, 79, 88}:   \"ThinkEco, Inc.\",\n\t[3]byte{128, 80, 27}:   \"Nokia Corporation\",\n\t[3]byte{128, 80, 103}:  \"W & D TECHNOLOGY CORPORATION\",\n\t[3]byte{128, 80, 246}:  \"ITEL MOBILE LIMITED\",\n\t[3]byte{128, 84, 106}:  \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{128, 86, 242}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{128, 87, 25}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{128, 88, 197}:  \"NovaTec Kommunikationstechnik GmbH\",\n\t[3]byte{128, 88, 248}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{128, 89, 253}:  \"Noviga\",\n\t[3]byte{128, 90, 4}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{128, 94, 12}:   \"YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.\",\n\t[3]byte{128, 94, 79}:   \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{128, 94, 192}:  \"YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.\",\n\t[3]byte{128, 95, 197}:  \"Apple, Inc.\",\n\t[3]byte{128, 96, 7}:    \"RIM\",\n\t[3]byte{128, 96, 183}:  \"CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.\",\n\t[3]byte{128, 97, 95}:   \"Beijing Sinead Technology Co., Ltd. \",\n\t[3]byte{128, 97, 143}:  \"Shenzhen sangfei consumer communications co.,ltd\",\n\t[3]byte{128, 100, 89}:  \"Nimbus Inc.\",\n\t[3]byte{128, 100, 122}: \"Ola Sense Inc\",\n\t[3]byte{128, 101, 109}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{128, 101, 233}: \"BenQ Corporation\",\n\t[3]byte{128, 102, 41}:  \"Prescope Technologies CO.,LTD.\",\n\t[3]byte{128, 105, 51}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{128, 105, 64}:  \"LEXAR CO.,LIMITED\",\n\t[3]byte{128, 106, 176}: \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{128, 108, 27}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{128, 108, 139}: \"KAESER KOMPRESSOREN AG\",\n\t[3]byte{128, 108, 188}: \"NET New Electronic Technology GmbH\",\n\t[3]byte{128, 109, 151}: \"Private\",\n\t[3]byte{128, 111, 176}: \"Texas Instruments\",\n\t[3]byte{128, 113, 31}:  \"Juniper Networks\",\n\t[3]byte{128, 113, 122}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{128, 114, 21}:  \"BSkyB Ltd\",\n\t[3]byte{128, 115, 159}: \"KYOCERA CORPORATION \",\n\t[3]byte{128, 116, 89}:  \"K's Co.,Ltd.\",\n\t[3]byte{128, 117, 31}:  \"BSkyB Ltd\",\n\t[3]byte{128, 118, 147}: \"Newag SA\",\n\t[3]byte{128, 120, 113}: \"ASKEY COMPUTER CORP\",\n\t[3]byte{128, 121, 93}:  \"Infinix mobility limited\",\n\t[3]byte{128, 121, 174}: \"ShanDong Tecsunrise  Co.,Ltd\",\n\t[3]byte{128, 122, 127}: \"ABB Genway Xiamen Electrical Equipment CO., LTD\",\n\t[3]byte{128, 122, 191}: \"HTC Corporation\",\n\t[3]byte{128, 123, 30}:  \"Corsair Memory, Inc.\",\n\t[3]byte{128, 123, 62}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{128, 123, 133}: \"IEEE Registration Authority\",\n\t[3]byte{128, 125, 20}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{128, 125, 27}:  \"Neosystem Co. Ltd.\",\n\t[3]byte{128, 125, 58}:  \"Espressif Inc.\",\n\t[3]byte{128, 125, 227}: \"Chongqing Sichuan Instrument Microcircuit Co.LTD.\",\n\t[3]byte{128, 127, 248}: \"Juniper Networks\",\n\t[3]byte{128, 129, 165}: \"TONGQING COMMUNICATION EQUIPMENT (SHENZHEN) Co.,Ltd\",\n\t[3]byte{128, 130, 35}:  \"Apple, Inc.\",\n\t[3]byte{128, 130, 135}: \"ATCOM Technology Co.Ltd.\",\n\t[3]byte{128, 132, 169}: \"oshkosh Corporation\",\n\t[3]byte{128, 134, 152}: \"Netronics Technologies Inc.\",\n\t[3]byte{128, 134, 217}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{128, 134, 242}: \"Intel Corporate\",\n\t[3]byte{128, 137, 23}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{128, 138, 139}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{128, 139, 92}:  \"Shenzhen Runhuicheng Technology Co., Ltd\",\n\t[3]byte{128, 140, 151}: \"Kaonmedia CO., LTD.\",\n\t[3]byte{128, 141, 183}: \"Hewlett Packard Enterprise\",\n\t[3]byte{128, 143, 29}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{128, 145, 42}:  \"Lih Rong electronic Enterprise Co., Ltd.\",\n\t[3]byte{128, 145, 51}:  \"AzureWave Technology Inc.\",\n\t[3]byte{128, 145, 192}: \"AgileMesh, Inc.\",\n\t[3]byte{128, 146, 159}: \"Apple, Inc.\",\n\t[3]byte{128, 147, 147}: \"Xapt GmbH\",\n\t[3]byte{128, 148, 108}: \"TOKYO RADAR CORPORATION\",\n\t[3]byte{128, 150, 33}:  \"Lenovo\",\n\t[3]byte{128, 150, 177}: \"ARRIS Group, Inc.\",\n\t[3]byte{128, 150, 202}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{128, 151, 27}:  \"Altenergy Power System,Inc.\",\n\t[3]byte{128, 155, 32}:  \"Intel Corporate\",\n\t[3]byte{128, 159, 155}: \"Sichuan\\u00a0AI-Link\\u00a0Technology\\u00a0Co.,\\u00a0Ltd.\",\n\t[3]byte{128, 159, 171}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{128, 160, 54}:  \"Shanghai MXCHIP Information Technology Co., Ltd.\",\n\t[3]byte{128, 161, 171}: \"Intellisis\",\n\t[3]byte{128, 161, 215}: \"Shanghai DareGlobal Technologies Co.,Ltd\",\n\t[3]byte{128, 162, 53}:  \"Edgecore Networks Corporation\",\n\t[3]byte{128, 165, 137}: \"AzureWave Technology Inc.\",\n\t[3]byte{128, 167, 150}: \"Neurotek LLC\",\n\t[3]byte{128, 168, 93}:  \"Osterhout Design Group\",\n\t[3]byte{128, 170, 164}: \"USAG\",\n\t[3]byte{128, 172, 124}: \"Sichuan\\u00a0AI-Link\\u00a0Technology\\u00a0Co.,\\u00a0Ltd.\",\n\t[3]byte{128, 172, 172}: \"Juniper Networks\",\n\t[3]byte{128, 173, 22}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{128, 173, 103}: \"Kasda Networks Inc\",\n\t[3]byte{128, 176, 61}:  \"Apple, Inc.\",\n\t[3]byte{128, 176, 123}: \"zte corporation\",\n\t[3]byte{128, 178, 25}:  \"ELEKTRON TECHNOLOGY UK LIMITED\",\n\t[3]byte{128, 178, 52}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{128, 178, 137}: \"Forworld Electronics Ltd.\",\n\t[3]byte{128, 179, 42}:  \"UK Grid Solutions Ltd\",\n\t[3]byte{128, 181, 117}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{128, 182, 36}:  \"IVS\",\n\t[3]byte{128, 182, 134}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{128, 183, 8}:   \"Blue Danube Systems, Inc\",\n\t[3]byte{128, 183, 9}:   \"Viptela, Inc\",\n\t[3]byte{128, 185, 92}:  \"ELFTECH Co., Ltd.\",\n\t[3]byte{128, 186, 172}: \"TeleAdapt Ltd\",\n\t[3]byte{128, 186, 230}: \"Neets\",\n\t[3]byte{128, 187, 235}: \"Satmap Systems Ltd\",\n\t[3]byte{128, 190, 5}:   \"Apple, Inc.\",\n\t[3]byte{128, 193, 110}: \"Hewlett Packard\",\n\t[3]byte{128, 197, 72}:  \"Shenzhen Zowee Technology Co.,Ltd\",\n\t[3]byte{128, 197, 230}: \"Microsoft Corporation\",\n\t[3]byte{128, 197, 242}: \"AzureWave Technology Inc.\",\n\t[3]byte{128, 198, 63}:  \"Remec Broadband Wireless , LLC\",\n\t[3]byte{128, 198, 171}: \"Technicolor CH USA Inc.\",\n\t[3]byte{128, 198, 202}: \"Endian s.r.l.\",\n\t[3]byte{128, 199, 85}:  \"Panasonic Appliances Company\",\n\t[3]byte{128, 199, 197}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{128, 200, 98}:  \"Openpeak, Inc\",\n\t[3]byte{128, 202, 75}:  \"SHENZHEN GONGJIN ELECTRONICS CO.,LTD\",\n\t[3]byte{128, 204, 18}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{128, 206, 98}:  \"Hewlett Packard\",\n\t[3]byte{128, 206, 177}: \"Theissen Training Systems GmbH\",\n\t[3]byte{128, 206, 185}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{128, 207, 65}:  \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{128, 207, 162}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{128, 208, 25}:  \"Embed, Inc\",\n\t[3]byte{128, 208, 74}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{128, 208, 101}: \"CKS Corporation\",\n\t[3]byte{128, 208, 155}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{128, 209, 96}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{128, 209, 139}: \"Hangzhou I'converge Technology Co.,Ltd\",\n\t[3]byte{128, 210, 29}:  \"AzureWave Technology Inc.\",\n\t[3]byte{128, 211, 54}:  \"CERN\",\n\t[3]byte{128, 212, 51}:  \"LzLabs GmbH\",\n\t[3]byte{128, 212, 165}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{128, 214, 5}:   \"Apple, Inc.\",\n\t[3]byte{128, 215, 51}:  \"QSR Automations, Inc.\",\n\t[3]byte{128, 218, 19}:  \"eero inc.\",\n\t[3]byte{128, 218, 188}: \"Megafone Limited\",\n\t[3]byte{128, 219, 49}:  \"Power Quotient International Co., Ltd.\",\n\t[3]byte{128, 224, 29}:  \"Cisco Systems, Inc\",\n\t[3]byte{128, 225, 191}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{128, 228, 85}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{128, 228, 218}: \"IEEE Registration Authority\",\n\t[3]byte{128, 229, 64}:  \"ARRIS Group, Inc.\",\n\t[3]byte{128, 230, 80}:  \"Apple, Inc.\",\n\t[3]byte{128, 232, 44}:  \"Hewlett Packard\",\n\t[3]byte{128, 232, 111}: \"Cisco Systems, Inc\",\n\t[3]byte{128, 234, 7}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{128, 234, 35}:  \"Wistron Neweb Corporation\",\n\t[3]byte{128, 234, 150}: \"Apple, Inc.\",\n\t[3]byte{128, 234, 202}: \"Dialog Semiconductor Hellas SA\",\n\t[3]byte{128, 235, 119}: \"Wistron Corporation\",\n\t[3]byte{128, 237, 44}:  \"Apple, Inc.\",\n\t[3]byte{128, 238, 37}:  \"Shenzhen Skyworth  Digital  Technology  CO., Ltd\",\n\t[3]byte{128, 238, 115}: \"Shuttle Inc.\",\n\t[3]byte{128, 241, 241}: \"Tech4home, Lda\",\n\t[3]byte{128, 242, 94}:  \"Kyynel\",\n\t[3]byte{128, 245, 3}:   \"ARRIS Group, Inc.\",\n\t[3]byte{128, 245, 147}: \"IRCO Sistemas de Telecomunicación S.A.\",\n\t[3]byte{128, 246, 46}:  \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{128, 248, 235}: \"RayTight\",\n\t[3]byte{128, 250, 91}:  \"CLEVO CO.\",\n\t[3]byte{128, 251, 6}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{128, 251, 240}: \"Quectel Wireless Solutions Co., Ltd.\",\n\t[3]byte{128, 253, 122}: \"BLU Products Inc\",\n\t[3]byte{128, 255, 168}: \"UNIDIS\",\n\t[3]byte{132, 0, 45}:    \"PEGATRON CORPORATION\",\n\t[3]byte{132, 0, 210}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{132, 1, 167}:   \"Greyware Automation Products, Inc\",\n\t[3]byte{132, 2, 131}:   \"HUMAX Co., Ltd.\",\n\t[3]byte{132, 3, 40}:    \"Juniper Networks\",\n\t[3]byte{132, 4, 210}:   \"Kirale Technologies SL\",\n\t[3]byte{132, 11, 45}:   \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{132, 11, 124}:  \"Hitron Technologies. Inc\",\n\t[3]byte{132, 13, 142}:  \"Espressif Inc.\",\n\t[3]byte{132, 15, 69}:   \"Shanghai GMT Digital Technologies Co., Ltd\",\n\t[3]byte{132, 16, 13}:   \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{132, 17, 158}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{132, 19, 159}:  \"zte corporation\",\n\t[3]byte{132, 22, 249}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{132, 23, 21}:   \"GP Electronics (HK) Ltd.\",\n\t[3]byte{132, 23, 102}:  \"WEIFANG GOERTEK ELECTRONICS CO.,LTD\",\n\t[3]byte{132, 23, 239}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{132, 24, 38}:   \"Osram GmbH\",\n\t[3]byte{132, 24, 58}:   \"Ruckus Wireless\",\n\t[3]byte{132, 24, 136}:  \"Juniper Networks\",\n\t[3]byte{132, 27, 56}:   \"Shenzhen Excelsecu Data Technology Co.,Ltd\",\n\t[3]byte{132, 27, 94}:   \"NETGEAR\",\n\t[3]byte{132, 28, 112}:  \"zte corporation\",\n\t[3]byte{132, 30, 38}:   \"KERNEL-I Co.,LTD\",\n\t[3]byte{132, 32, 150}:  \"SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\",\n\t[3]byte{132, 33, 65}:   \"Shenzhen Ginwave Technologies Ltd.\",\n\t[3]byte{132, 33, 241}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{132, 34, 94}:   \"SHENZHEN TECHNEWCHIP TECHNOLOGY CO.,LTD.\",\n\t[3]byte{132, 36, 141}:  \"Zebra Technologies Inc\",\n\t[3]byte{132, 37, 25}:   \"Samsung Electronics\",\n\t[3]byte{132, 37, 63}:   \"silex technology, Inc.\",\n\t[3]byte{132, 37, 164}:  \"Tariox Limited\",\n\t[3]byte{132, 37, 219}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{132, 38, 21}:   \"ADB Broadband Italia\",\n\t[3]byte{132, 38, 43}:   \"Nokia\",\n\t[3]byte{132, 38, 144}:  \"BEIJING THOUGHT SCIENCE CO.,LTD.\",\n\t[3]byte{132, 39, 206}:  \"Corporation of the Presiding Bishop of The Church of Jesus Christ of Latter-day Saints\",\n\t[3]byte{132, 40, 90}:   \"Saffron Solutions Inc\",\n\t[3]byte{132, 41, 20}:   \"EMPORIA TELECOM Produktions- und VertriebsgesmbH & Co KG\",\n\t[3]byte{132, 41, 153}:  \"Apple, Inc.\",\n\t[3]byte{132, 42, 253}:  \"HP Inc.\",\n\t[3]byte{132, 43, 43}:   \"Dell Inc.\",\n\t[3]byte{132, 43, 80}:   \"Huria Co.,Ltd.\",\n\t[3]byte{132, 43, 188}:  \"Modelleisenbahn GmbH\",\n\t[3]byte{132, 44, 128}:  \"Sichuan Changhong Electric Ltd.\",\n\t[3]byte{132, 46, 20}:   \"Silicon Laboratories\",\n\t[3]byte{132, 46, 39}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{132, 47, 117}:  \"Innokas Group\",\n\t[3]byte{132, 48, 229}:  \"SkyHawke Technologies, LLC\",\n\t[3]byte{132, 50, 111}:  \"GUANGZHOU AVA ELECTRONICS TECHNOLOGY CO.,LTD \",\n\t[3]byte{132, 50, 234}:  \"ANHUI WANZTEN P&T CO., LTD\",\n\t[3]byte{132, 52, 151}:  \"Hewlett Packard\",\n\t[3]byte{132, 54, 17}:   \"hyungseul publishing networks\",\n\t[3]byte{132, 55, 213}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{132, 56, 53}:   \"Apple, Inc.\",\n\t[3]byte{132, 56, 56}:   \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{132, 58, 75}:   \"Intel Corporate\",\n\t[3]byte{132, 61, 198}:  \"Cisco Systems, Inc\",\n\t[3]byte{132, 62, 121}:  \"Shenzhen Belon Technology CO.,LTD\",\n\t[3]byte{132, 62, 146}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{132, 63, 78}:   \"Tri-Tech Manufacturing, Inc.\",\n\t[3]byte{132, 64, 118}:  \"Drivenets\",\n\t[3]byte{132, 65, 103}:  \"Apple, Inc.\",\n\t[3]byte{132, 68, 100}:  \"ServerU Inc\",\n\t[3]byte{132, 70, 254}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{132, 71, 101}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{132, 72, 35}:   \"WOXTER TECHNOLOGY Co. Ltd\",\n\t[3]byte{132, 73, 21}:   \"vArmour Networks, Inc.\",\n\t[3]byte{132, 75, 183}:  \"Beijing Sankuai Online Technology Co.,Ltd\",\n\t[3]byte{132, 75, 245}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{132, 79, 3}:    \"Ablelink Electronics Ltd\",\n\t[3]byte{132, 80, 154}:  \"Easy Soft TV Co., Ltd\",\n\t[3]byte{132, 81, 129}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{132, 85, 165}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{132, 86, 156}:  \"Coho Data, Inc.,\",\n\t[3]byte{132, 87, 51}:   \"Microsoft Corporation\",\n\t[3]byte{132, 87, 135}:  \"DVR C&C Co., Ltd.\",\n\t[3]byte{132, 90, 129}:  \"ffly4u\",\n\t[3]byte{132, 91, 18}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{132, 92, 147}:  \"Chabrier Services\",\n\t[3]byte{132, 93, 215}:  \"Shenzhen Netcom Electronics Co.,Ltd\",\n\t[3]byte{132, 97, 160}:  \"ARRIS Group, Inc.\",\n\t[3]byte{132, 98, 35}:   \"Shenzhen Coship Electronics Co., Ltd.\",\n\t[3]byte{132, 98, 166}:  \"EuroCB (Phils), Inc.\",\n\t[3]byte{132, 99, 214}:  \"Microsoft Corporation\",\n\t[3]byte{132, 104, 62}:  \"Intel Corporate\",\n\t[3]byte{132, 104, 120}: \"Apple, Inc.\",\n\t[3]byte{132, 104, 200}: \"TOTOLINK TECHNOLOGY INT‘L LIMITED\",\n\t[3]byte{132, 105, 145}: \"Nokia\",\n\t[3]byte{132, 106, 102}: \"Sumitomo Kizai  Co.,Ltd.\",\n\t[3]byte{132, 106, 237}: \"Wireless Tsukamoto.,co.LTD\",\n\t[3]byte{132, 107, 72}:  \"ShenZhen EepuLink Co., Ltd.\",\n\t[3]byte{132, 110, 177}: \"Park Assist LLC\",\n\t[3]byte{132, 111, 206}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{132, 114, 7}:   \"I&C Technology\",\n\t[3]byte{132, 115, 3}:   \"Letv Mobile and Intelligent Information Technology (Beijing) Corporation Ltd.\",\n\t[3]byte{132, 116, 42}:  \"zte corporation\",\n\t[3]byte{132, 116, 96}:  \"zte corporation\",\n\t[3]byte{132, 118, 22}:  \"Addat s.r.o.\",\n\t[3]byte{132, 118, 55}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{132, 119, 120}: \"Cochlear Limited\",\n\t[3]byte{132, 120, 139}: \"Apple, Inc.\",\n\t[3]byte{132, 120, 172}: \"Cisco Systems, Inc\",\n\t[3]byte{132, 121, 51}:  \"profichip GmbH\",\n\t[3]byte{132, 121, 115}: \"Shanghai Baud Data Communication Co.,Ltd.\",\n\t[3]byte{132, 122, 136}: \"HTC Corporation\",\n\t[3]byte{132, 123, 235}: \"Dell Inc.\",\n\t[3]byte{132, 124, 155}: \"GD Midea Air-Conditioning Equipment Co.,Ltd.\",\n\t[3]byte{132, 125, 80}:  \"Holley Metering Limited\",\n\t[3]byte{132, 126, 64}:  \"Texas Instruments\",\n\t[3]byte{132, 127, 61}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{132, 128, 45}:  \"Cisco Systems, Inc\",\n\t[3]byte{132, 128, 148}: \"Meter, Inc.\",\n\t[3]byte{132, 130, 244}: \"Beijing Huasun Unicreate Technology Co., Ltd\",\n\t[3]byte{132, 131, 25}:  \"Hangzhou Zero Zero Technology Co., Ltd.\",\n\t[3]byte{132, 131, 54}:  \"Newrun\",\n\t[3]byte{132, 131, 113}: \"Avaya Inc\",\n\t[3]byte{132, 132, 51}:  \"Paradox Engineering SA\",\n\t[3]byte{132, 133, 6}:   \"Apple, Inc.\",\n\t[3]byte{132, 133, 10}:  \"Hella Sonnen- und Wetterschutztechnik GmbH\",\n\t[3]byte{132, 133, 230}: \"Guangdong Asano Technology CO.,Ltd.\",\n\t[3]byte{132, 134, 243}: \"Greenvity Communications\",\n\t[3]byte{132, 137, 173}: \"Apple, Inc.\",\n\t[3]byte{132, 137, 236}: \"IEEE Registration Authority\",\n\t[3]byte{132, 138, 141}: \"Cisco Systems, Inc\",\n\t[3]byte{132, 139, 205}: \"IEEE Registration Authority\",\n\t[3]byte{132, 141, 132}: \"Rajant Corporation\",\n\t[3]byte{132, 141, 199}: \"Cisco SPVTG\",\n\t[3]byte{132, 142, 12}:  \"Apple, Inc.\",\n\t[3]byte{132, 142, 150}: \"Embertec Pty Ltd\",\n\t[3]byte{132, 142, 223}: \"Sony Mobile Communications Inc\",\n\t[3]byte{132, 143, 105}: \"Dell Inc.\",\n\t[3]byte{132, 144, 0}:   \"Arnold & Richter Cine Technik\",\n\t[3]byte{132, 147, 12}:  \"InCoax Networks Europe AB\",\n\t[3]byte{132, 148, 140}: \"Hitron Technologies. Inc\",\n\t[3]byte{132, 150, 129}: \"Cathay Communication Co.,Ltd\",\n\t[3]byte{132, 150, 216}: \"ARRIS Group, Inc.\",\n\t[3]byte{132, 151, 184}: \"Memjet Inc.\",\n\t[3]byte{132, 152, 102}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{132, 154, 64}:  \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{132, 156, 166}: \"Arcadyan Technology Corporation\",\n\t[3]byte{132, 157, 100}: \"SMC Corporation\",\n\t[3]byte{132, 157, 197}: \"Centera Photonics Inc.\",\n\t[3]byte{132, 159, 181}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{132, 160, 110}: \"Sagemcom Broadband SAS\",\n\t[3]byte{132, 161, 52}:  \"Apple, Inc.\",\n\t[3]byte{132, 161, 209}: \"Sagemcom Broadband SAS\",\n\t[3]byte{132, 162, 77}:  \"Birds Eye Systems Private Limited\",\n\t[3]byte{132, 163, 181}: \"Propulsion systems\",\n\t[3]byte{132, 164, 35}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{132, 164, 102}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{132, 166, 200}: \"Intel Corporate\",\n\t[3]byte{132, 167, 131}: \"Alcatel Lucent\",\n\t[3]byte{132, 167, 136}: \"Perples\",\n\t[3]byte{132, 168, 228}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{132, 169, 62}:  \"Hewlett Packard\",\n\t[3]byte{132, 169, 145}: \"Cyber Trans Japan Co.,Ltd.\",\n\t[3]byte{132, 169, 196}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{132, 169, 234}: \"Career Technologies USA\",\n\t[3]byte{132, 170, 156}: \"MitraStar Technology Corp.\",\n\t[3]byte{132, 171, 26}:  \"Apple, Inc.\",\n\t[3]byte{132, 172, 164}: \"Beijing Novel Super Digital TV Technology Co., Ltd\",\n\t[3]byte{132, 172, 251}: \"Crouzet Automatismes\",\n\t[3]byte{132, 173, 88}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{132, 173, 141}: \"Apple, Inc.\",\n\t[3]byte{132, 175, 31}:  \"Beat System Service Co,. Ltd.\",\n\t[3]byte{132, 175, 236}: \"BUFFALO.INC\",\n\t[3]byte{132, 177, 83}:  \"Apple, Inc.\",\n\t[3]byte{132, 178, 97}:  \"Cisco Systems, Inc\",\n\t[3]byte{132, 179, 27}:  \"Kinexon GmbH\",\n\t[3]byte{132, 181, 23}:  \"Cisco Systems, Inc\",\n\t[3]byte{132, 181, 65}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{132, 181, 156}: \"Juniper Networks\",\n\t[3]byte{132, 184, 2}:   \"Cisco Systems, Inc\",\n\t[3]byte{132, 184, 102}: \"Beijing XiaoLu technology co. LTD\",\n\t[3]byte{132, 184, 184}: \"Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.\",\n\t[3]byte{132, 186, 59}:  \"CANON INC.\",\n\t[3]byte{132, 187, 105}: \"ARRIS Group, Inc.\",\n\t[3]byte{132, 190, 82}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{132, 192, 239}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{132, 193, 193}: \"Juniper Networks\",\n\t[3]byte{132, 194, 228}: \"Jiangsu Qinheng Co., Ltd.\",\n\t[3]byte{132, 195, 232}: \"Vaillant GmbH\",\n\t[3]byte{132, 197, 166}: \"Intel Corporate\",\n\t[3]byte{132, 199, 39}:  \"Gnodal Ltd\",\n\t[3]byte{132, 199, 143}: \"STORDIS GmbH\",\n\t[3]byte{132, 199, 169}: \"C3PO S.A.\",\n\t[3]byte{132, 199, 234}: \"Sony Mobile Communications Inc\",\n\t[3]byte{132, 200, 7}:   \"ADVA Optical Networking Ltd.\",\n\t[3]byte{132, 200, 177}: \"Incognito Software Systems Inc.\",\n\t[3]byte{132, 201, 178}: \"D-Link International\",\n\t[3]byte{132, 201, 198}: \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{132, 204, 168}: \"Espressif Inc.\",\n\t[3]byte{132, 205, 98}:  \"ShenZhen IDWELL Technology CO.,Ltd\",\n\t[3]byte{132, 207, 191}: \"Fairphone\",\n\t[3]byte{132, 209, 90}:  \"TCT mobile ltd\",\n\t[3]byte{132, 211, 42}:  \"IEEE 1905.1\",\n\t[3]byte{132, 212, 18}:  \"Palo Alto Networks\",\n\t[3]byte{132, 212, 126}: \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{132, 212, 200}: \"Widex A/S\",\n\t[3]byte{132, 214, 197}: \"SolarEdge Technologies\",\n\t[3]byte{132, 214, 208}: \"Amazon Technologies Inc.\",\n\t[3]byte{132, 216, 27}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{132, 217, 49}:  \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{132, 217, 200}: \"Unipattern Co.,\",\n\t[3]byte{132, 219, 47}:  \"Sierra Wireless\",\n\t[3]byte{132, 219, 158}: \"Aifloo AB\",\n\t[3]byte{132, 219, 172}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{132, 219, 252}: \"Nokia\",\n\t[3]byte{132, 221, 32}:  \"Texas Instruments\",\n\t[3]byte{132, 221, 183}: \"Cilag GmbH International\",\n\t[3]byte{132, 222, 61}:  \"Crystal Vision Ltd\",\n\t[3]byte{132, 223, 12}:  \"NET2GRID BV\",\n\t[3]byte{132, 223, 25}:  \"Chuango Security Technology Corporation\",\n\t[3]byte{132, 224, 88}:  \"ARRIS Group, Inc.\",\n\t[3]byte{132, 224, 244}: \"IEEE Registration Authority\",\n\t[3]byte{132, 227, 35}:  \"Green Wave Telecommunication SDN BHD\",\n\t[3]byte{132, 227, 39}:  \"TAILYN TECHNOLOGIES INC\",\n\t[3]byte{132, 228, 217}: \"Shenzhen NEED technology Ltd.\",\n\t[3]byte{132, 229, 216}: \"Guangdong UNIPOE IoT Technology Co.,Ltd.\",\n\t[3]byte{132, 230, 41}:  \"Bluwan SA\",\n\t[3]byte{132, 231, 20}:  \"Liang Herng Enterprise,Co.Ltd.\",\n\t[3]byte{132, 232, 146}: \"Actiontec Electronics, Inc\",\n\t[3]byte{132, 234, 151}: \"Shenzhen iComm Semiconductor Co., Ltd.\",\n\t[3]byte{132, 234, 153}: \"Vieworks\",\n\t[3]byte{132, 234, 237}: \"Roku, Inc\",\n\t[3]byte{132, 235, 24}:  \"Texas Instruments\",\n\t[3]byte{132, 235, 62}:  \"Vivint Smart Home\",\n\t[3]byte{132, 237, 51}:  \"BBMC Co.,Ltd\",\n\t[3]byte{132, 239, 24}:  \"Intel Corporate\",\n\t[3]byte{132, 241, 41}:  \"Metrascale Inc.\",\n\t[3]byte{132, 243, 235}: \"Espressif Inc.\",\n\t[3]byte{132, 244, 147}: \"OMS spol. s.r.o.\",\n\t[3]byte{132, 246, 76}:  \"Cross Point BV\",\n\t[3]byte{132, 246, 250}: \"Miovision Technologies Incorporated\",\n\t[3]byte{132, 248, 131}: \"Luminar Technologies\",\n\t[3]byte{132, 252, 172}: \"Apple, Inc.\",\n\t[3]byte{132, 252, 254}: \"Apple, Inc.\",\n\t[3]byte{132, 253, 209}: \"Intel Corporate\",\n\t[3]byte{132, 254, 158}: \"RTC Industries, Inc.\",\n\t[3]byte{132, 254, 220}: \"Borqs Beijing Ltd.\",\n\t[3]byte{136, 1, 24}:    \"BLT Co\",\n\t[3]byte{136, 1, 242}:   \"Vitec System Engineering Inc.\",\n\t[3]byte{136, 3, 85}:    \"Arcadyan Technology Corporation\",\n\t[3]byte{136, 3, 233}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{136, 7, 75}:    \"LG Electronics (Mobile Communications)\",\n\t[3]byte{136, 9, 5}:     \"MTMCommunications\",\n\t[3]byte{136, 9, 7}:     \"MKT Systemtechnik GmbH & Co. KG\",\n\t[3]byte{136, 9, 175}:   \"Masimo Corporation\",\n\t[3]byte{136, 15, 16}:   \"Huami Information Technology Co.,Ltd.\",\n\t[3]byte{136, 15, 182}:  \"Jabil Circuits India Pvt Ltd,-EHTP unit\",\n\t[3]byte{136, 16, 54}:   \"Panodic(ShenZhen) Electronics Limted\",\n\t[3]byte{136, 16, 143}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 17, 150}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 18, 61}:   \"Suzhou Aquila Solutions Inc.\",\n\t[3]byte{136, 18, 78}:   \"Qualcomm Inc.\",\n\t[3]byte{136, 20, 43}:   \"Protonic Holland\",\n\t[3]byte{136, 21, 68}:   \"Cisco Meraki\",\n\t[3]byte{136, 23, 163}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{136, 24, 174}:  \"Tamron Co., Ltd\",\n\t[3]byte{136, 25, 8}:    \"Apple, Inc.\",\n\t[3]byte{136, 27, 153}:  \"SHENZHEN XIN FEI JIA ELECTRONIC CO. LTD.\",\n\t[3]byte{136, 28, 149}:  \"ITEL MOBILE LIMITED\",\n\t[3]byte{136, 29, 252}:  \"Cisco Systems, Inc\",\n\t[3]byte{136, 31, 161}:  \"Apple, Inc.\",\n\t[3]byte{136, 32, 18}:   \"LMI Technologies\",\n\t[3]byte{136, 33, 227}:  \"Nebusens, S.L.\",\n\t[3]byte{136, 35, 100}:  \"Watchnet DVR Inc\",\n\t[3]byte{136, 35, 254}:  \"TTTech Computertechnik AG\",\n\t[3]byte{136, 37, 44}:   \"Arcadyan Technology Corporation\",\n\t[3]byte{136, 37, 147}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{136, 40, 179}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 41, 73}:   \"Renesas Electronics (Penang) Sdn. Bhd.\",\n\t[3]byte{136, 41, 80}:   \"Netmoon Technology Co., Ltd\",\n\t[3]byte{136, 41, 156}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{136, 43, 148}:  \"MADOKA SYSTEM Co.,Ltd.\",\n\t[3]byte{136, 43, 215}:  \"ADDÉNERGIE  TECHNOLOGIES\",\n\t[3]byte{136, 45, 83}:   \"Baidu Online Network Technology (Beijing) Co., Ltd.\",\n\t[3]byte{136, 46, 90}:   \"storONE\",\n\t[3]byte{136, 48, 138}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{136, 50, 155}:  \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{136, 51, 20}:   \"Texas Instruments\",\n\t[3]byte{136, 51, 190}:  \"Ivenix, Inc.\",\n\t[3]byte{136, 52, 254}:  \"Bosch Automotive Products (Suzhou) Co. Ltd\",\n\t[3]byte{136, 53, 76}:   \"Transics\",\n\t[3]byte{136, 53, 193}:  \"OI ELECTRIC CO.,LTD\",\n\t[3]byte{136, 54, 18}:   \"SRC Computers, LLC\",\n\t[3]byte{136, 54, 95}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{136, 54, 108}:  \"EFM Networks\",\n\t[3]byte{136, 54, 207}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{136, 58, 48}:   \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{136, 59, 139}:  \"Cheering Connection Co. Ltd.\",\n\t[3]byte{136, 60, 28}:   \"MERCURY CORPORATION\",\n\t[3]byte{136, 61, 36}:   \"Google, Inc.\",\n\t[3]byte{136, 63, 74}:   \"Texas Instruments\",\n\t[3]byte{136, 63, 153}:  \"Siemens AG\",\n\t[3]byte{136, 63, 211}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 64, 51}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 64, 59}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 64, 103}:  \"infomark\",\n\t[3]byte{136, 65, 87}:   \"Shenzhen Atsmart Technology Co.,Ltd.\",\n\t[3]byte{136, 65, 193}:  \"ORBISAT DA AMAZONIA IND E AEROL SA\",\n\t[3]byte{136, 65, 252}:  \"AirTies Wireless Networks\",\n\t[3]byte{136, 67, 225}:  \"Cisco Systems, Inc\",\n\t[3]byte{136, 68, 119}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 68, 246}:  \"Nokia Corporation\",\n\t[3]byte{136, 70, 42}:   \"Telechips Inc.\",\n\t[3]byte{136, 74, 24}:   \"Opulinks\",\n\t[3]byte{136, 74, 112}:  \"Wacom Co.,Ltd.\",\n\t[3]byte{136, 74, 234}:  \"Texas Instruments\",\n\t[3]byte{136, 75, 57}:   \"Siemens AG, Healthcare Sector\",\n\t[3]byte{136, 76, 207}:  \"Pulzze Systems, Inc\",\n\t[3]byte{136, 80, 221}:  \"Infiniband Trade Association \",\n\t[3]byte{136, 80, 246}:  \"Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd\",\n\t[3]byte{136, 81, 122}:  \"HMD Global Oy\",\n\t[3]byte{136, 81, 251}:  \"Hewlett Packard\",\n\t[3]byte{136, 83, 46}:   \"Intel Corporate\",\n\t[3]byte{136, 83, 149}:  \"Apple, Inc.\",\n\t[3]byte{136, 83, 212}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 84, 31}:   \"Google, Inc.\",\n\t[3]byte{136, 87, 29}:   \"Seongji Industry Company\",\n\t[3]byte{136, 87, 109}:  \"XTA Electronics Ltd\",\n\t[3]byte{136, 87, 238}:  \"BUFFALO.INC\",\n\t[3]byte{136, 90, 6}:    \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{136, 90, 146}:  \"Cisco Systems, Inc\",\n\t[3]byte{136, 91, 221}:  \"Extreme Networks, Inc.\",\n\t[3]byte{136, 92, 71}:   \"Alcatel Lucent\",\n\t[3]byte{136, 93, 144}:  \"IEEE Registration Authority\",\n\t[3]byte{136, 93, 251}:  \"zte corporation\",\n\t[3]byte{136, 95, 232}:  \"IEEE Registration Authority\",\n\t[3]byte{136, 97, 90}:   \"Siano Mobile Silicon Ltd.\",\n\t[3]byte{136, 99, 223}:  \"Apple, Inc.\",\n\t[3]byte{136, 100, 64}:  \"Apple, Inc.\",\n\t[3]byte{136, 102, 57}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 102, 165}: \"Apple, Inc.\",\n\t[3]byte{136, 104, 92}:  \"Shenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd\",\n\t[3]byte{136, 106, 177}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{136, 106, 227}: \"Alpha Networks Inc.\",\n\t[3]byte{136, 107, 15}:  \"Bluegiga Technologies OY\",\n\t[3]byte{136, 107, 68}:  \"Sunnovo International Limited\",\n\t[3]byte{136, 107, 110}: \"Apple, Inc.\",\n\t[3]byte{136, 107, 118}: \"CHINA HOPEFUL GROUP HOPEFUL ELECTRIC CO.,LTD\",\n\t[3]byte{136, 111, 212}: \"Dell Inc.\",\n\t[3]byte{136, 112, 51}:  \"Hangzhou Silan Microelectronic Inc\",\n\t[3]byte{136, 112, 140}: \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{136, 112, 239}: \"SC Professional Trading Co., Ltd.\",\n\t[3]byte{136, 113, 177}: \"ARRIS Group, Inc.\",\n\t[3]byte{136, 113, 229}: \"Amazon Technologies Inc.\",\n\t[3]byte{136, 115, 132}: \"Toshiba\",\n\t[3]byte{136, 115, 152}: \"K2E Tekpoint\",\n\t[3]byte{136, 117, 86}:  \"Cisco Systems, Inc\",\n\t[3]byte{136, 117, 152}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{136, 120, 115}: \"Intel Corporate\",\n\t[3]byte{136, 120, 156}: \"Game Technologies SA\",\n\t[3]byte{136, 121, 91}:  \"Konka Group Co., Ltd.\",\n\t[3]byte{136, 121, 126}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{136, 122, 49}:  \"Velankani Electronics Pvt. Ltd.\",\n\t[3]byte{136, 126, 37}:  \"Extreme Networks, Inc.\",\n\t[3]byte{136, 127, 3}:   \"Comper Technology Investment Limited\",\n\t[3]byte{136, 130, 121}: \"Shenzhen RB-LINK Intelligent Technology Co.Ltd\",\n\t[3]byte{136, 131, 34}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{136, 131, 93}:  \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{136, 134, 3}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 134, 160}: \"Simton Technologies, Ltd.\",\n\t[3]byte{136, 134, 194}: \"STABILO International GmbH\",\n\t[3]byte{136, 135, 23}:  \"CANON INC.\",\n\t[3]byte{136, 135, 221}: \"DarbeeVision Inc.\",\n\t[3]byte{136, 137, 20}:  \"All Components Incorporated\",\n\t[3]byte{136, 137, 100}: \"GSI Electronics Inc.\",\n\t[3]byte{136, 139, 93}:  \"Storage Appliance Corporation \",\n\t[3]byte{136, 140, 25}:  \"Brady Corp Asia Pacific Ltd\",\n\t[3]byte{136, 144, 141}: \"Cisco Systems, Inc\",\n\t[3]byte{136, 145, 102}: \"Viewcooper Corp.\",\n\t[3]byte{136, 145, 221}: \"Racktivity\",\n\t[3]byte{136, 148, 113}: \"Brocade Communications Systems LLC\",\n\t[3]byte{136, 148, 126}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{136, 148, 143}: \"Xi'an Zhisensor Technologies Co.,Ltd\",\n\t[3]byte{136, 148, 249}: \"Gemicom Technology, Inc.\",\n\t[3]byte{136, 149, 185}: \"Unified Packet Systems Crop\",\n\t[3]byte{136, 150, 78}:  \"ARRIS Group, Inc.\",\n\t[3]byte{136, 150, 85}:  \"Zitte corporation\",\n\t[3]byte{136, 150, 118}: \"TTC MARCONI s.r.o.\",\n\t[3]byte{136, 150, 182}: \"Global Fire Equipment S.A.\",\n\t[3]byte{136, 150, 242}: \"Valeo Schalter und Sensoren GmbH\",\n\t[3]byte{136, 151, 70}:  \"Sichuan\\u00a0AI-Link\\u00a0Technology\\u00a0Co.,\\u00a0Ltd.\",\n\t[3]byte{136, 151, 101}: \"exands\",\n\t[3]byte{136, 151, 223}: \"Entrypass Corporation Sdn. Bhd.\",\n\t[3]byte{136, 152, 33}:  \"TERAON\",\n\t[3]byte{136, 155, 57}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{136, 156, 166}: \"BTB Korea INC\",\n\t[3]byte{136, 157, 152}: \"Allied-telesisK.K.\",\n\t[3]byte{136, 158, 51}:  \"TCT mobile ltd\",\n\t[3]byte{136, 158, 104}: \"Technicolor CH USA Inc.\",\n\t[3]byte{136, 159, 111}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{136, 159, 170}: \"Hella Gutmann Solutions GmbH \",\n\t[3]byte{136, 159, 250}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{136, 160, 132}: \"Formation Data Systems\",\n\t[3]byte{136, 162, 94}:  \"Juniper Networks\",\n\t[3]byte{136, 162, 215}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 163, 3}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{136, 163, 204}: \"Amatis Controls\",\n\t[3]byte{136, 164, 121}: \"Apple, Inc.\",\n\t[3]byte{136, 165, 189}: \"QPCOM INC.\",\n\t[3]byte{136, 166, 198}: \"Sagemcom Broadband SAS\",\n\t[3]byte{136, 167, 60}:  \"Ragentek Technology Group\",\n\t[3]byte{136, 169, 167}: \"IEEE Registration Authority\",\n\t[3]byte{136, 169, 183}: \"Apple, Inc.\",\n\t[3]byte{136, 172, 192}: \"Zyxel Communications Corporation\",\n\t[3]byte{136, 172, 193}: \"Generiton Co., Ltd. \",\n\t[3]byte{136, 173, 67}:  \"PEGATRON CORPORATION\",\n\t[3]byte{136, 173, 210}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{136, 174, 7}:   \"Apple, Inc.\",\n\t[3]byte{136, 174, 29}:  \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{136, 177, 17}:  \"Intel Corporate\",\n\t[3]byte{136, 177, 104}: \"Delta Control GmbH\",\n\t[3]byte{136, 177, 225}: \" Mojo Networks, Inc.\",\n\t[3]byte{136, 178, 145}: \"Apple, Inc.\",\n\t[3]byte{136, 179, 98}:  \"Nokia Shanghai Bell Co., Ltd.\",\n\t[3]byte{136, 180, 54}:  \"Private\",\n\t[3]byte{136, 180, 166}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{136, 182, 39}:  \"Gembird Europe BV\",\n\t[3]byte{136, 182, 107}: \"easynetworks\",\n\t[3]byte{136, 182, 238}: \"Dish Technologies Corp\",\n\t[3]byte{136, 184, 208}: \"Dongguan Koppo Electronic Co.,Ltd\",\n\t[3]byte{136, 186, 127}: \"Qfiednet Co., Ltd.\",\n\t[3]byte{136, 188, 193}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 189, 69}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{136, 189, 120}: \"Flaircomm Microelectronics,Inc.\",\n\t[3]byte{136, 191, 213}: \"Simple Audio Ltd\",\n\t[3]byte{136, 191, 228}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 192, 139}: \"Apple, Inc.\",\n\t[3]byte{136, 194, 66}:  \"Poynt Co.\",\n\t[3]byte{136, 194, 85}:  \"Texas Instruments\",\n\t[3]byte{136, 195, 110}: \"Beijing Ereneben lnformation Technology Limited\",\n\t[3]byte{136, 195, 151}: \"Beijing Xiaomi Mobile Software Co., Ltd\",\n\t[3]byte{136, 195, 179}: \"SOVICO\",\n\t[3]byte{136, 198, 38}:  \"Logitech, Inc\",\n\t[3]byte{136, 198, 99}:  \"Apple, Inc.\",\n\t[3]byte{136, 201, 208}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{136, 203, 135}: \"Apple, Inc.\",\n\t[3]byte{136, 203, 165}: \"Suzhou Torchstar Intelligent Technology Co.,Ltd\",\n\t[3]byte{136, 204, 69}:  \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{136, 206, 250}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 207, 152}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 208, 57}:  \"TCL Technoly Electronics(Huizhou).,Ltd\",\n\t[3]byte{136, 209, 113}: \"BEGHELLI S.P.A\",\n\t[3]byte{136, 210, 17}:  \"Eko Devices, Inc.\",\n\t[3]byte{136, 210, 116}: \"zte corporation\",\n\t[3]byte{136, 210, 191}: \"German Autolabs\",\n\t[3]byte{136, 211, 123}: \"FirmTek, LLC\",\n\t[3]byte{136, 213, 12}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{136, 213, 168}: \"ITEL MOBILE LIMITED\",\n\t[3]byte{136, 214, 82}:  \"AMERGINT Technologies\",\n\t[3]byte{136, 215, 188}: \"DEP Company\",\n\t[3]byte{136, 215, 246}: \"ASUSTek COMPUTER INC.\",\n\t[3]byte{136, 217, 98}:  \"Canopus Systems US LLC\",\n\t[3]byte{136, 217, 143}: \"Juniper Networks\",\n\t[3]byte{136, 218, 26}:  \"Redpine Signals, Inc.\",\n\t[3]byte{136, 218, 51}:  \"Beijing Xiaoyuer Network Technology Co., Ltd\",\n\t[3]byte{136, 220, 150}: \"SENAO Networks, Inc.\",\n\t[3]byte{136, 221, 121}: \"Voltaire\",\n\t[3]byte{136, 222, 124}: \"Askey Computer Corp.\",\n\t[3]byte{136, 222, 169}: \"Roku, Inc.\",\n\t[3]byte{136, 223, 158}: \"New H3C Technologies Co., Ltd\",\n\t[3]byte{136, 224, 52}:  \"Shinwa industries(China) ltd.\",\n\t[3]byte{136, 224, 160}: \"Shenzhen VisionSTOR Technologies Co., Ltd\",\n\t[3]byte{136, 224, 243}: \"Juniper Networks\",\n\t[3]byte{136, 225, 97}:  \"Art Beijing Science and Technology Development Co., Ltd.\",\n\t[3]byte{136, 227, 171}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 230, 3}:   \"Avotek corporation\",\n\t[3]byte{136, 230, 40}:  \"Shenzhen Kezhonglong Optoelectronic Technology Co.,Ltd\",\n\t[3]byte{136, 230, 75}:  \"Juniper Networks\",\n\t[3]byte{136, 231, 18}:  \"Whirlpool Corporation\",\n\t[3]byte{136, 231, 166}: \"iKnowledge Integration Corp.\",\n\t[3]byte{136, 232, 127}: \"Apple, Inc.\",\n\t[3]byte{136, 232, 248}: \"YONG TAI ELECTRONIC (DONGGUAN) LTD.\",\n\t[3]byte{136, 233, 15}:  \"innomdlelab\",\n\t[3]byte{136, 233, 23}:  \"Tamaggo\",\n\t[3]byte{136, 233, 164}: \"Hewlett Packard Enterprise\",\n\t[3]byte{136, 233, 254}: \"Apple, Inc.\",\n\t[3]byte{136, 237, 28}:  \"Cudo Communication Co., Ltd.\",\n\t[3]byte{136, 239, 22}:  \"ARRIS Group, Inc.\",\n\t[3]byte{136, 240, 49}:  \"Cisco Systems, Inc\",\n\t[3]byte{136, 240, 119}: \"Cisco Systems, Inc\",\n\t[3]byte{136, 244, 136}: \"cellon communications technology(shenzhen)Co.,Ltd.\",\n\t[3]byte{136, 244, 144}: \"Jetmobile Pte Ltd\",\n\t[3]byte{136, 245, 110}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 247, 191}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{136, 247, 199}: \"Technicolor CH USA Inc.\",\n\t[3]byte{136, 248, 114}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{136, 253, 21}:  \"LINEEYE CO., LTD\",\n\t[3]byte{136, 254, 214}: \"ShangHai WangYong Software Co., Ltd.\",\n\t[3]byte{140, 0, 109}:   \"Apple, Inc.\",\n\t[3]byte{140, 2, 250}:   \"COMMANDO Networks Limited\",\n\t[3]byte{140, 4, 186}:   \"Dell Inc.\",\n\t[3]byte{140, 4, 255}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{140, 5, 81}:    \"Koubachi AG\",\n\t[3]byte{140, 7, 140}:   \"FLOW DATA INC\",\n\t[3]byte{140, 8, 139}:   \"Remote Solution\",\n\t[3]byte{140, 9, 244}:   \"ARRIS Group, Inc.\",\n\t[3]byte{140, 12, 135}:  \"Nokia\",\n\t[3]byte{140, 12, 144}:  \"Ruckus Wireless\",\n\t[3]byte{140, 12, 163}:  \"Amper\",\n\t[3]byte{140, 13, 118}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{140, 14, 96}:   \"Nanjing Juplink Intelligent Technologies Co., Ltd.\",\n\t[3]byte{140, 14, 227}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{140, 15, 111}:  \"PEGATRON CORPORATION\",\n\t[3]byte{140, 15, 131}:  \"Angie Hospitality LLC\",\n\t[3]byte{140, 15, 160}:  \"di-soric GmbH & Co. KG\",\n\t[3]byte{140, 15, 250}:  \"Hutec co.,ltd\",\n\t[3]byte{140, 16, 212}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{140, 17, 203}:  \"ABUS Security-Center GmbH & Co. KG\",\n\t[3]byte{140, 20, 125}:  \"IEEE Registration Authority\",\n\t[3]byte{140, 20, 180}:  \"zte corporation\",\n\t[3]byte{140, 21, 199}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{140, 22, 69}:   \"LCFC(HeFei) Electronics Technology co., ltd\",\n\t[3]byte{140, 24, 80}:   \"China Mobile (Hangzhou) Information Technology Co., Ltd.\",\n\t[3]byte{140, 24, 217}:  \"Shenzhen RF Technology Co., Ltd\",\n\t[3]byte{140, 25, 45}:   \"IEEE Registration Authority\",\n\t[3]byte{140, 26, 191}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{140, 28, 218}:  \"IEEE Registration Authority\",\n\t[3]byte{140, 31, 148}:  \"RF Surgical System Inc. \",\n\t[3]byte{140, 33, 10}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{140, 37, 5}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{140, 39, 29}:   \"QuantHouse\",\n\t[3]byte{140, 39, 138}:  \"Vocollect Inc\",\n\t[3]byte{140, 41, 55}:   \"Apple, Inc.\",\n\t[3]byte{140, 45, 170}:  \"Apple, Inc.\",\n\t[3]byte{140, 47, 57}:   \"IBA Dosimetry GmbH\",\n\t[3]byte{140, 47, 166}:  \"Solid Optics B.V.\",\n\t[3]byte{140, 51, 48}:   \"EmFirst Co., Ltd.\",\n\t[3]byte{140, 51, 87}:   \"HiteVision Digital Media Technology Co.,Ltd.\",\n\t[3]byte{140, 52, 253}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{140, 53, 121}:  \"QDIQO Sp. z o.o.\",\n\t[3]byte{140, 57, 92}:   \"Bit4id Srl\",\n\t[3]byte{140, 58, 126}:  \"Universal Electronics, Inc.\",\n\t[3]byte{140, 58, 227}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{140, 59, 50}:   \"Microfan B.V.\",\n\t[3]byte{140, 59, 173}:  \"NETGEAR\",\n\t[3]byte{140, 60, 7}:    \"Skiva Technologies, Inc.\",\n\t[3]byte{140, 60, 74}:   \"NAKAYO Inc\",\n\t[3]byte{140, 65, 242}:  \"RDA Technologies Ltd.\",\n\t[3]byte{140, 65, 244}:  \"IPmotion GmbH\",\n\t[3]byte{140, 66, 109}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{140, 68, 53}:   \"Shanghai BroadMobi Communication Technology Co., Ltd.\",\n\t[3]byte{140, 68, 79}:   \"HUMAX Co., Ltd.\",\n\t[3]byte{140, 69, 0}:    \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{140, 71, 190}:  \"Dell Inc.\",\n\t[3]byte{140, 73, 98}:   \"Roku, Inc\",\n\t[3]byte{140, 74, 238}:  \"GIGA TMS INC\",\n\t[3]byte{140, 75, 89}:   \"3D Imaging & Simulations Corp\",\n\t[3]byte{140, 76, 173}:  \"Evoluzn Inc.\",\n\t[3]byte{140, 76, 220}:  \"PLANEX COMMUNICATIONS INC.\",\n\t[3]byte{140, 77, 185}:  \"Unmonday Ltd\",\n\t[3]byte{140, 77, 234}:  \"Cerio Corporation\",\n\t[3]byte{140, 81, 5}:    \"Shenzhen ireadygo Information Technology CO.,LTD.\",\n\t[3]byte{140, 83, 195}:  \"Beijing Xiaomi Mobile Software Co., Ltd\",\n\t[3]byte{140, 83, 210}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{140, 83, 247}:  \"A&D ENGINEERING CO., LTD.\",\n\t[3]byte{140, 84, 29}:   \"LGE \",\n\t[3]byte{140, 86, 157}:  \"Imaging Solutions Group\",\n\t[3]byte{140, 86, 197}:  \"Nintendo Co., Ltd.\",\n\t[3]byte{140, 87, 155}:  \"Wistron Neweb Corporation\",\n\t[3]byte{140, 87, 253}:  \"LVX Western\",\n\t[3]byte{140, 88, 119}:  \"Apple, Inc.\",\n\t[3]byte{140, 89, 60}:   \"IEEE Registration Authority\",\n\t[3]byte{140, 89, 115}:  \"Zyxel Communications Corporation\",\n\t[3]byte{140, 89, 139}:  \"C Technologies AB\",\n\t[3]byte{140, 89, 195}:  \"ADB Italia \",\n\t[3]byte{140, 89, 220}:  \"ASR Microelectronics (Shanghai) Co., Ltd.\",\n\t[3]byte{140, 90, 37}:   \"ARRIS Group, Inc.\",\n\t[3]byte{140, 90, 193}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{140, 90, 240}:  \"Exeltech Solar Products\",\n\t[3]byte{140, 90, 248}:  \"Beijing Xiaomi Electronics Co., Ltd.\",\n\t[3]byte{140, 91, 240}:  \"ARRIS Group, Inc.\",\n\t[3]byte{140, 92, 161}:  \"d-broad,INC\",\n\t[3]byte{140, 93, 96}:   \"UCI Corporation Co.,Ltd.\",\n\t[3]byte{140, 94, 189}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{140, 95, 72}:   \"Continental Intelligent Transportation Systems LLC\",\n\t[3]byte{140, 95, 173}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{140, 95, 223}:  \"Beijing Railway Signal Factory\",\n\t[3]byte{140, 96, 79}:   \"Cisco Systems, Inc\",\n\t[3]byte{140, 96, 120}:  \"Swissbit AG\",\n\t[3]byte{140, 96, 231}:  \"MPGIO CO.,LTD\",\n\t[3]byte{140, 97, 2}:    \"Beijing Baofengmojing Technologies Co., Ltd\",\n\t[3]byte{140, 97, 163}:  \"ARRIS Group, Inc.\",\n\t[3]byte{140, 100, 11}:  \"Beyond Devices d.o.o.\",\n\t[3]byte{140, 100, 34}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{140, 104, 58}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{140, 104, 120}: \"Nortek-AS\",\n\t[3]byte{140, 104, 200}: \"zte corporation\",\n\t[3]byte{140, 106, 228}: \"Viogem Limited\",\n\t[3]byte{140, 109, 80}:  \"SHENZHEN MTC CO LTD\",\n\t[3]byte{140, 109, 119}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{140, 109, 196}: \"Megapixel VR\",\n\t[3]byte{140, 112, 90}:  \"Intel Corporate\",\n\t[3]byte{140, 112, 134}: \"Gesellschaft für Sonder-EDV-Anlagen mbH\",\n\t[3]byte{140, 113, 248}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{140, 115, 110}: \"FUJITSU LIMITED\",\n\t[3]byte{140, 118, 193}: \"Goden Tech Limited\",\n\t[3]byte{140, 119, 18}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{140, 119, 22}:  \"LONGCHEER TELECOMMUNICATION LIMITED\",\n\t[3]byte{140, 120, 215}: \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{140, 121, 103}: \"zte corporation\",\n\t[3]byte{140, 121, 245}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{140, 123, 157}: \"Apple, Inc.\",\n\t[3]byte{140, 123, 240}: \"Xufeng Development Limited\",\n\t[3]byte{140, 124, 146}: \"Apple, Inc.\",\n\t[3]byte{140, 124, 181}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{140, 124, 255}: \"Brocade Communications Systems LLC\",\n\t[3]byte{140, 126, 179}: \"Lytro, Inc.\",\n\t[3]byte{140, 127, 59}:  \"ARRIS Group, Inc.\",\n\t[3]byte{140, 129, 38}:  \"ARCOM\",\n\t[3]byte{140, 130, 168}: \"Insigma Technology Co.,Ltd\",\n\t[3]byte{140, 131, 157}: \"SHENZHEN XINYUPENG ELECTRONIC TECHNOLOGY CO., LTD\",\n\t[3]byte{140, 131, 223}: \"Nokia\",\n\t[3]byte{140, 131, 225}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{140, 132, 1}:   \"Private\",\n\t[3]byte{140, 133, 128}: \"Smart Innovation LLC\",\n\t[3]byte{140, 133, 144}: \"Apple, Inc.\",\n\t[3]byte{140, 133, 193}: \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{140, 133, 230}: \"Cleondris GmbH\",\n\t[3]byte{140, 134, 30}:  \"Apple, Inc.\",\n\t[3]byte{140, 135, 59}:  \"Leica Camera AG\",\n\t[3]byte{140, 137, 122}: \"AUGTEK\",\n\t[3]byte{140, 137, 165}: \"Micro-Star INT'L CO., LTD\",\n\t[3]byte{140, 137, 250}: \"Zhejiang Hechuan Technology Co., Ltd.\",\n\t[3]byte{140, 138, 110}: \"ESTUN AUTOMATION TECHNOLOY CO., LTD\",\n\t[3]byte{140, 138, 187}: \"Beijing Orient View Technology Co., Ltd.\",\n\t[3]byte{140, 139, 131}: \"Texas Instruments\",\n\t[3]byte{140, 141, 40}:  \"Intel Corporate\",\n\t[3]byte{140, 142, 118}: \"taskit GmbH\",\n\t[3]byte{140, 142, 242}: \"Apple, Inc.\",\n\t[3]byte{140, 143, 139}: \"China Mobile Chongqing branch\",\n\t[3]byte{140, 143, 233}: \"Apple, Inc.\",\n\t[3]byte{140, 144, 211}: \"Nokia\",\n\t[3]byte{140, 145, 9}:   \"Toyoshima Electric Technoeogy(Suzhou) Co.,Ltd.\",\n\t[3]byte{140, 146, 54}:  \"Aus.Linx Technology Co., Ltd.\",\n\t[3]byte{140, 146, 70}:  \"Oerlikon Textile Gmbh&Co.KG\",\n\t[3]byte{140, 147, 81}:  \"Jigowatts Inc.\",\n\t[3]byte{140, 148, 31}:  \"Cisco Systems, Inc\",\n\t[3]byte{140, 148, 207}: \"Encell Technology, Inc.\",\n\t[3]byte{140, 150, 95}:  \"Shandong Zhongan Technology Co., Ltd.\",\n\t[3]byte{140, 151, 234}: \"FREEBOX SAS\",\n\t[3]byte{140, 153, 230}: \"TCT mobile ltd\",\n\t[3]byte{140, 159, 59}:  \"Qingdao Hisense Communications Co.,Ltd.\",\n\t[3]byte{140, 160, 72}:  \"Beijing NeTopChip Technology Co.,LTD\",\n\t[3]byte{140, 162, 253}: \"Starry, Inc.\",\n\t[3]byte{140, 165, 161}: \"Oregano Systems - Design & Consulting GmbH\",\n\t[3]byte{140, 166, 223}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{140, 169, 111}: \"D&M Holdings Inc.\",\n\t[3]byte{140, 169, 130}: \"Intel Corporate\",\n\t[3]byte{140, 170, 181}: \"Espressif Inc.\",\n\t[3]byte{140, 171, 142}: \"Shanghai Feixun Communication Co.,Ltd.\",\n\t[3]byte{140, 174, 76}:  \"Plugable Technologies\",\n\t[3]byte{140, 174, 137}: \"Y-cam Solutions Ltd\",\n\t[3]byte{140, 174, 219}: \"NAG LLC\",\n\t[3]byte{140, 176, 148}: \"Airtech I&C Co., Ltd\",\n\t[3]byte{140, 176, 233}: \"Samsung Electronics.,LTD\",\n\t[3]byte{140, 182, 79}:  \"Cisco Systems, Inc\",\n\t[3]byte{140, 183, 247}: \"Shenzhen UniStrong Science & Technology Co., Ltd\",\n\t[3]byte{140, 184, 44}:  \"IPitomy Communications\",\n\t[3]byte{140, 184, 74}:  \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{140, 184, 100}: \"AcSiP Technology Corp.\",\n\t[3]byte{140, 186, 37}:  \"UNIONMAN TECHNOLOGY CO.,LTD\",\n\t[3]byte{140, 190, 36}:  \"Tashang Semiconductor(Shanghai) Co., Ltd.\",\n\t[3]byte{140, 190, 190}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{140, 191, 157}: \"Shanghai Xinyou Information Technology Ltd. Co.\",\n\t[3]byte{140, 191, 166}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{140, 193, 33}:  \"Panasonic Corporation AVC Networks Company\",\n\t[3]byte{140, 197, 180}: \"Sagemcom Broadband SAS\",\n\t[3]byte{140, 197, 225}: \"ShenZhen Konka Telecommunication Technology Co.,Ltd\",\n\t[3]byte{140, 198, 97}:  \"Current, powered by GE\",\n\t[3]byte{140, 198, 129}: \"Intel Corporate\",\n\t[3]byte{140, 199, 170}: \"Radinet Communications Inc.\",\n\t[3]byte{140, 199, 208}: \"zhejiang ebang communication co.,ltd\",\n\t[3]byte{140, 200, 75}:  \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{140, 200, 205}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{140, 200, 244}: \"IEEE Registration Authority\",\n\t[3]byte{140, 205, 162}: \"ACTP, Inc.\",\n\t[3]byte{140, 205, 232}: \"Nintendo Co., Ltd.\",\n\t[3]byte{140, 206, 253}: \"Shenzhen zhouhai technology co.,LTD\",\n\t[3]byte{140, 207, 9}:   \"Dell EMC\",\n\t[3]byte{140, 207, 92}:  \"BEFEGA GmbH\",\n\t[3]byte{140, 207, 143}: \"ITC Systems\",\n\t[3]byte{140, 209, 123}: \"CG Mobile\",\n\t[3]byte{140, 210, 233}: \"YOKOTE SEIKO CO., LTD.\",\n\t[3]byte{140, 211, 162}: \"VisSim AS\",\n\t[3]byte{140, 212, 142}: \"ITEL MOBILE LIMITED\",\n\t[3]byte{140, 214, 40}:  \"Ikor Metering\",\n\t[3]byte{140, 214, 127}: \"EM Microelectronic\",\n\t[3]byte{140, 219, 37}:  \"ESG Solutions\",\n\t[3]byte{140, 220, 2}:   \"zte corporation\",\n\t[3]byte{140, 220, 212}: \"Hewlett Packard\",\n\t[3]byte{140, 221, 141}: \"Wifly-City System Inc.\",\n\t[3]byte{140, 222, 82}:  \"ISSC Technologies Corp.\",\n\t[3]byte{140, 222, 153}: \"Comlab Inc.\",\n\t[3]byte{140, 223, 157}: \"NEC Corporation\",\n\t[3]byte{140, 224, 129}: \"zte corporation\",\n\t[3]byte{140, 225, 23}:  \"zte corporation\",\n\t[3]byte{140, 226, 218}: \"Circle Media Inc\",\n\t[3]byte{140, 227, 142}: \"Kioxia Corporation\",\n\t[3]byte{140, 228, 104}: \"Guangzhou Sageran Technology Co., Ltd.\",\n\t[3]byte{140, 229, 192}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{140, 229, 239}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{140, 231, 72}:  \"Private\",\n\t[3]byte{140, 231, 140}: \"DK Networks\",\n\t[3]byte{140, 231, 179}: \"Sonardyne International Ltd\",\n\t[3]byte{140, 234, 27}:  \"Edgecore Networks Corporation\",\n\t[3]byte{140, 235, 198}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{140, 236, 75}:  \"Dell Inc.\",\n\t[3]byte{140, 238, 198}: \"Precepscion Pty. Ltd.\",\n\t[3]byte{140, 241, 18}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{140, 242, 40}:  \"MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{140, 245, 163}: \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{140, 247, 16}:  \"AMPAK Technology, Inc.\",\n\t[3]byte{140, 247, 115}: \"Nokia\",\n\t[3]byte{140, 248, 19}:  \"ORANGE POLSKA\",\n\t[3]byte{140, 249, 69}:  \"Power Automation pte Ltd\",\n\t[3]byte{140, 249, 87}:  \"RuiXingHengFang Network (Shenzhen) Co.,Ltd\",\n\t[3]byte{140, 249, 201}: \"MESADA Technology Co.,Ltd.\",\n\t[3]byte{140, 250, 186}: \"Apple, Inc.\",\n\t[3]byte{140, 252, 160}: \"Shenzhen Smart Device Technology Co., LTD.\",\n\t[3]byte{140, 253, 24}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{140, 253, 240}: \"Qualcomm Inc.\",\n\t[3]byte{140, 254, 87}:  \"Apple, Inc.\",\n\t[3]byte{140, 254, 116}: \"Ruckus Wireless\",\n\t[3]byte{140, 254, 180}: \"VSOONTECH ELECTRONICS CO., LIMITED\",\n\t[3]byte{144, 0, 78}:    \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{144, 0, 219}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{144, 1, 59}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{144, 2, 24}:    \"BSkyB Ltd\",\n\t[3]byte{144, 2, 138}:   \"Shenzhen Shidean Legrand Electronic Products Co.,Ltd\",\n\t[3]byte{144, 2, 169}:   \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{144, 3, 37}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{144, 3, 114}:   \"Longnan Junya Digital Technology Co. Ltd. \",\n\t[3]byte{144, 3, 183}:   \"PARROT SA\",\n\t[3]byte{144, 6, 40}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{144, 9, 23}:    \"Far-sighted mobile\",\n\t[3]byte{144, 10, 26}:   \"Taicang T&W Electronics\",\n\t[3]byte{144, 10, 57}:   \"Wiio, Inc.\",\n\t[3]byte{144, 10, 58}:   \"PSG Plastic Service GmbH\",\n\t[3]byte{144, 10, 132}:  \"Mellanox Technologies, Inc.\",\n\t[3]byte{144, 11, 193}:  \"Sprocomm Technologies CO.,Ltd\",\n\t[3]byte{144, 12, 180}:  \"Alinket Electronic Technology Co., Ltd\",\n\t[3]byte{144, 12, 200}:  \"Google, Inc.\",\n\t[3]byte{144, 13, 102}:  \"Digimore Electronics Co., Ltd\",\n\t[3]byte{144, 13, 203}:  \"ARRIS Group, Inc.\",\n\t[3]byte{144, 14, 131}:  \"Monico Monitoring, Inc.\",\n\t[3]byte{144, 14, 179}:  \"Shenzhen Amediatech Technology Co., Ltd.\",\n\t[3]byte{144, 18, 52}:   \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{144, 18, 161}:  \"We Corporation Inc.\",\n\t[3]byte{144, 19, 218}:  \"Athom B.V.\",\n\t[3]byte{144, 22, 186}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{144, 23, 17}:   \"Hagenuk Marinekommunikation GmbH\",\n\t[3]byte{144, 23, 63}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{144, 23, 155}:  \"Nanomegas\",\n\t[3]byte{144, 23, 172}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{144, 23, 200}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{144, 24, 94}:   \"Apex Tool Group GmbH & Co OHG\",\n\t[3]byte{144, 24, 124}:  \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{144, 24, 174}:  \"Shanghai Meridian Technologies, Co. Ltd.\",\n\t[3]byte{144, 25, 0}:    \"SCS SA\",\n\t[3]byte{144, 26, 79}:   \"EM Microelectronic\",\n\t[3]byte{144, 26, 202}:  \"ARRIS Group, Inc.\",\n\t[3]byte{144, 27, 14}:   \"Fujitsu Technology Solutions GmbH\",\n\t[3]byte{144, 29, 39}:   \"zte corporation\",\n\t[3]byte{144, 30, 221}:  \"GREAT COMPUTER CORPORATION\",\n\t[3]byte{144, 32, 58}:   \"BYD Precision Manufacture Co.,Ltd\",\n\t[3]byte{144, 32, 131}:  \"General Engine Management Systems Ltd.\",\n\t[3]byte{144, 32, 194}:  \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{144, 33, 6}:    \"BSkyB Ltd\",\n\t[3]byte{144, 33, 85}:   \"HTC Corporation\",\n\t[3]byte{144, 33, 129}:  \"Shanghai Huaqin Telecom Technology Co.,Ltd\",\n\t[3]byte{144, 35, 236}:  \"Availink, Inc.\",\n\t[3]byte{144, 39, 43}:   \"Algorab S.r.l.\",\n\t[3]byte{144, 39, 228}:  \"Apple, Inc.\",\n\t[3]byte{144, 43, 52}:   \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{144, 43, 210}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{144, 44, 199}:  \"C-MAX Asia Limited\",\n\t[3]byte{144, 46, 28}:   \"Intel Corporate\",\n\t[3]byte{144, 46, 135}:  \"LabJack\",\n\t[3]byte{144, 49, 205}:  \"Onyx Healthcare Inc.\",\n\t[3]byte{144, 50, 75}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{144, 52, 43}:   \"Gatekeeper Systems, Inc.\",\n\t[3]byte{144, 52, 252}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{144, 53, 110}:  \"Vodafone Omnitel N.V.\",\n\t[3]byte{144, 56, 9}:    \"Ericsson AB\",\n\t[3]byte{144, 56, 223}:  \"Changzhou Tiannengbo System Co. Ltd.\",\n\t[3]byte{144, 58, 114}:  \"Ruckus Wireless\",\n\t[3]byte{144, 58, 160}:  \"Nokia\",\n\t[3]byte{144, 58, 230}:  \"PARROT SA\",\n\t[3]byte{144, 60, 146}:  \"Apple, Inc.\",\n\t[3]byte{144, 60, 174}:  \"Yunnan KSEC Digital Technology Co.,Ltd.\",\n\t[3]byte{144, 61, 90}:   \"Shenzhen Wision Technology Holding Limited\",\n\t[3]byte{144, 61, 104}:  \"G-Printec, Inc.\",\n\t[3]byte{144, 61, 107}:  \"Zicon Technology Corp.\",\n\t[3]byte{144, 61, 189}:  \"SECURE METERS LIMITED\",\n\t[3]byte{144, 62, 171}:  \"ARRIS Group, Inc.\",\n\t[3]byte{144, 63, 234}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{144, 67, 226}:  \"Cornami, Inc\",\n\t[3]byte{144, 69, 6}:    \"Tokyo Boeki Medisys Inc.\",\n\t[3]byte{144, 70, 162}:  \"Tedipay UK Ltd\",\n\t[3]byte{144, 70, 183}:  \"Vadaro Pte Ltd\",\n\t[3]byte{144, 71, 22}:   \"RORZE CORPORATION\",\n\t[3]byte{144, 71, 60}:   \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{144, 72, 154}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{144, 73, 250}:  \"Intel Corporate\",\n\t[3]byte{144, 76, 129}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{144, 76, 229}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{144, 77, 74}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{144, 77, 195}:  \"Flonidan A/S\",\n\t[3]byte{144, 78, 43}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{144, 78, 145}:  \"IEEE Registration Authority\",\n\t[3]byte{144, 80, 90}:   \"unGlue, Inc\",\n\t[3]byte{144, 80, 123}:  \"Advanced PANMOBIL Systems GmbH & Co. KG\",\n\t[3]byte{144, 80, 202}:  \"Hitron Technologies. Inc\",\n\t[3]byte{144, 81, 63}:   \"Elettronica Santerno SpA\",\n\t[3]byte{144, 84, 70}:   \"TES ELECTRONIC SOLUTIONS\",\n\t[3]byte{144, 85, 174}:  \"Ericsson, EAB/RWI/K\",\n\t[3]byte{144, 85, 222}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{144, 86, 130}:  \"Lenbrook Industries Limited\",\n\t[3]byte{144, 86, 146}:  \"Autotalks Ltd.\",\n\t[3]byte{144, 86, 252}:  \"TECNO MOBILE LIMITED\",\n\t[3]byte{144, 88, 81}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{144, 89, 175}:  \"Texas Instruments\",\n\t[3]byte{144, 92, 52}:   \"Sirius Electronic Systems Srl\",\n\t[3]byte{144, 92, 68}:   \"Compal Broadband Networks, Inc.\",\n\t[3]byte{144, 93, 124}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{144, 95, 46}:   \"TCT mobile ltd\",\n\t[3]byte{144, 95, 141}:  \"modas GmbH\",\n\t[3]byte{144, 96, 241}:  \"Apple, Inc.\",\n\t[3]byte{144, 97, 12}:   \"Fida International (S) Pte Ltd\",\n\t[3]byte{144, 97, 174}:  \"Intel Corporate\",\n\t[3]byte{144, 99, 59}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{144, 103, 23}:  \"Alphion India Private Limited\",\n\t[3]byte{144, 103, 28}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{144, 103, 181}: \"Alcatel-Lucent\",\n\t[3]byte{144, 103, 243}: \"Alcatel Lucent\",\n\t[3]byte{144, 104, 195}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{144, 108, 172}: \"Fortinet, Inc.\",\n\t[3]byte{144, 109, 5}:   \"BXB ELECTRONICS CO., LTD\",\n\t[3]byte{144, 109, 200}: \"DLG Automação Industrial Ltda\",\n\t[3]byte{144, 110, 187}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{144, 111, 24}:  \"Private\",\n\t[3]byte{144, 111, 169}: \"NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.\",\n\t[3]byte{144, 112, 37}:  \"Garea Microsys Co.,Ltd.\",\n\t[3]byte{144, 112, 101}: \"Texas Instruments\",\n\t[3]byte{144, 114, 64}:  \"Apple, Inc.\",\n\t[3]byte{144, 114, 130}: \"Sagemcom Broadband SAS\",\n\t[3]byte{144, 115, 90}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{144, 116, 157}: \"IRay Technology Co., Ltd.\",\n\t[3]byte{144, 118, 159}: \"SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{144, 119, 238}: \"Cisco Systems, Inc\",\n\t[3]byte{144, 120, 65}:  \"Intel Corporate\",\n\t[3]byte{144, 120, 178}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{144, 121, 16}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{144, 121, 144}: \"Benchmark Electronics Romania SRL\",\n\t[3]byte{144, 122, 10}:  \"Gebr. Bode GmbH & Co KG\",\n\t[3]byte{144, 122, 40}:  \"Beijing Morncloud Information And Technology Co. Ltd.\",\n\t[3]byte{144, 122, 88}:  \"Zegna-Daidong Limited\",\n\t[3]byte{144, 122, 241}: \"Wally\",\n\t[3]byte{144, 126, 48}:  \"LARS\",\n\t[3]byte{144, 126, 186}: \"UTEK TECHNOLOGY (SHENZHEN) CO.,LTD\",\n\t[3]byte{144, 127, 97}:  \"Chicony Electronics Co., Ltd.\",\n\t[3]byte{144, 129, 42}:  \"Apple, Inc.\",\n\t[3]byte{144, 130, 96}:  \"IEEE 1904.1 Working Group\",\n\t[3]byte{144, 131, 75}:  \"BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD\",\n\t[3]byte{144, 131, 122}: \"General Electric Water & Process Technologies\",\n\t[3]byte{144, 132, 13}:  \"Apple, Inc.\",\n\t[3]byte{144, 132, 43}:  \"LEGO System A/S\",\n\t[3]byte{144, 132, 139}: \"HDR10+ Technologies, LLC\",\n\t[3]byte{144, 134, 116}: \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{144, 134, 155}: \"zte corporation\",\n\t[3]byte{144, 136, 162}: \"IONICS TECHNOLOGY ME LTDA\",\n\t[3]byte{144, 137, 95}:  \"WEIFANG GOERTEK ELECTRONICS CO.,LTD\",\n\t[3]byte{144, 140, 9}:   \"Total Phase\",\n\t[3]byte{144, 140, 67}:  \"Apple, Inc.\",\n\t[3]byte{144, 140, 68}:  \"H.K ZONGMU TECHNOLOGY CO., LTD.\",\n\t[3]byte{144, 140, 99}:  \"GZ Weedong Networks Technology Co. , Ltd\",\n\t[3]byte{144, 141, 29}:  \"GH Technologies\",\n\t[3]byte{144, 141, 108}: \"Apple, Inc.\",\n\t[3]byte{144, 141, 120}: \"D-Link International\",\n\t[3]byte{144, 143, 207}: \"UNO System Co., Ltd\",\n\t[3]byte{144, 144, 60}:  \"TRISON TECHNOLOGY CORPORATION\",\n\t[3]byte{144, 144, 96}:  \"RSI VIDEO TECHNOLOGIES\",\n\t[3]byte{144, 145, 100}: \"ChongQing Lavid Technology Co., Ltd.\",\n\t[3]byte{144, 146, 180}: \"Diehl BGT Defence GmbH & Co. KG\",\n\t[3]byte{144, 148, 10}:  \"Analog Devices, Inc\",\n\t[3]byte{144, 148, 151}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{144, 148, 228}: \"D-Link International\",\n\t[3]byte{144, 151, 213}: \"Espressif Inc.\",\n\t[3]byte{144, 151, 243}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{144, 152, 56}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{144, 152, 100}: \"Impex-Sat GmbH&amp;Co KG\",\n\t[3]byte{144, 153, 22}:  \"ELVEES NeoTek OJSC\",\n\t[3]byte{144, 154, 119}: \"Texas Instruments\",\n\t[3]byte{144, 156, 74}:  \"Apple, Inc.\",\n\t[3]byte{144, 157, 125}: \"ARRIS Group, Inc.\",\n\t[3]byte{144, 157, 224}: \"Newland Design + Assoc. Inc.\",\n\t[3]byte{144, 159, 51}:  \"EFM Networks\",\n\t[3]byte{144, 159, 67}:  \"Accutron Instruments Inc.\",\n\t[3]byte{144, 161, 55}:  \"Beijing Splendidtel Communication Technology Co,. Ltd\",\n\t[3]byte{144, 162, 16}:  \"United Telecoms Ltd\",\n\t[3]byte{144, 162, 91}:  \"Apple, Inc.\",\n\t[3]byte{144, 162, 218}: \"GHEO SA\",\n\t[3]byte{144, 163, 101}: \"HMD Global Oy\",\n\t[3]byte{144, 164, 106}: \"SISNET CO., LTD\",\n\t[3]byte{144, 164, 222}: \"Wistron Neweb Corporation\",\n\t[3]byte{144, 165, 175}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{144, 166, 47}:  \"NAVER\",\n\t[3]byte{144, 167, 131}: \"JSW PACIFIC CORPORATION \",\n\t[3]byte{144, 167, 193}: \"Pakedge Device and Software Inc.\",\n\t[3]byte{144, 169, 53}:  \"JWEntertainment\",\n\t[3]byte{144, 170, 195}: \"Hitron Technologies. Inc\",\n\t[3]byte{144, 172, 63}:  \"BrightSign LLC\",\n\t[3]byte{144, 173, 247}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{144, 173, 252}: \"Telechips, Inc.\",\n\t[3]byte{144, 174, 27}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{144, 175, 209}: \"netKTI Co., Ltd\",\n\t[3]byte{144, 176, 237}: \"Apple, Inc.\",\n\t[3]byte{144, 177, 28}:  \"Dell Inc.\",\n\t[3]byte{144, 177, 52}:  \"ARRIS Group, Inc.\",\n\t[3]byte{144, 177, 68}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{144, 177, 224}: \"Beijing Nebula Link Technology Co., Ltd\",\n\t[3]byte{144, 178, 31}:  \"Apple, Inc.\",\n\t[3]byte{144, 182, 134}: \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{144, 184, 50}:  \"Extreme Networks, Inc.\",\n\t[3]byte{144, 184, 208}: \"Joyent, Inc.\",\n\t[3]byte{144, 184, 224}: \"SHENZHEN YANRAY TECHNOLOGY CO.,LTD\",\n\t[3]byte{144, 185, 49}:  \"Apple, Inc.\",\n\t[3]byte{144, 185, 125}: \"Johnson Outdoors Marine Electronics d/b/a Minnkota\",\n\t[3]byte{144, 189, 230}: \"Quectel Wireless Solutions Co., Ltd.\",\n\t[3]byte{144, 193, 21}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{144, 193, 198}: \"Apple, Inc.\",\n\t[3]byte{144, 195, 95}:  \"Nanjing Jiahao Technology Co., Ltd.\",\n\t[3]byte{144, 197, 74}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{144, 198, 130}: \"IEEE Registration Authority\",\n\t[3]byte{144, 199, 146}: \"ARRIS Group, Inc.\",\n\t[3]byte{144, 199, 216}: \"zte corporation\",\n\t[3]byte{144, 201, 155}: \"Tesorion Nederland B.V.\",\n\t[3]byte{144, 204, 36}:  \"Synaptics, Inc\",\n\t[3]byte{144, 204, 223}: \"Intel Corporate\",\n\t[3]byte{144, 205, 182}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{144, 207, 21}:  \"Nokia Corporation\",\n\t[3]byte{144, 207, 111}: \"Dlogixs Co Ltd\",\n\t[3]byte{144, 207, 125}: \"Qingdao Hisense Communications Co.,Ltd.\",\n\t[3]byte{144, 209, 27}:  \"Palomar Medical Technologies\",\n\t[3]byte{144, 215, 79}:  \"Bookeen\",\n\t[3]byte{144, 215, 190}: \"Wavelab Global Inc.\",\n\t[3]byte{144, 215, 235}: \"Texas Instruments\",\n\t[3]byte{144, 216, 82}:  \"Comtec Co., Ltd.\",\n\t[3]byte{144, 216, 243}: \"zte corporation\",\n\t[3]byte{144, 217, 44}:  \"HUG-WITSCHI AG\",\n\t[3]byte{144, 218, 78}:  \"AVANU\",\n\t[3]byte{144, 218, 106}: \"FOCUS H&S Co., Ltd.\",\n\t[3]byte{144, 219, 70}:  \"E-LEAD ELECTRONIC CO., LTD\",\n\t[3]byte{144, 221, 93}:  \"Apple, Inc.\",\n\t[3]byte{144, 223, 183}: \"s.m.s smart microwave sensors GmbH\",\n\t[3]byte{144, 223, 251}: \"HOMERIDER SYSTEMS\",\n\t[3]byte{144, 224, 240}: \"IEEE 1722a Working Group\",\n\t[3]byte{144, 225, 123}: \"Apple, Inc.\",\n\t[3]byte{144, 226, 2}:   \"Texas Instruments\",\n\t[3]byte{144, 226, 186}: \"Intel Corporate\",\n\t[3]byte{144, 226, 252}: \"IEEE Registration Authority\",\n\t[3]byte{144, 230, 186}: \"ASUSTek COMPUTER INC.\",\n\t[3]byte{144, 231, 16}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{144, 231, 196}: \"HTC Corporation\",\n\t[3]byte{144, 234, 96}:  \"SPI Lasers Ltd \",\n\t[3]byte{144, 236, 80}:  \"C.O.B.O. SPA\",\n\t[3]byte{144, 236, 119}: \"silicom\",\n\t[3]byte{144, 238, 199}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{144, 238, 217}: \"UNIVERSAL DE DESARROLLOS ELECTRÓNICOS, SA\",\n\t[3]byte{144, 239, 104}: \"Zyxel Communications Corporation\",\n\t[3]byte{144, 240, 82}:  \"MEIZU Technology Co., Ltd.\",\n\t[3]byte{144, 241, 170}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{144, 241, 176}: \"Hangzhou Anheng Info&Tech CO.,LTD\",\n\t[3]byte{144, 242, 120}: \"Radius Gateway\",\n\t[3]byte{144, 243, 5}:   \"HUMAX Co., Ltd.\",\n\t[3]byte{144, 243, 183}: \"Kirisun Communications Co., Ltd.\",\n\t[3]byte{144, 244, 193}: \"Rand McNally\",\n\t[3]byte{144, 246, 68}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{144, 246, 82}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{144, 247, 47}:  \"Phillips Machine & Welding Co., Inc. \",\n\t[3]byte{144, 248, 145}: \"Kaonmedia CO., LTD.\",\n\t[3]byte{144, 251, 91}:  \"Avaya Inc\",\n\t[3]byte{144, 251, 166}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{144, 253, 97}:  \"Apple, Inc.\",\n\t[3]byte{144, 253, 115}: \"zte corporation\",\n\t[3]byte{144, 253, 159}: \"Silicon Laboratories\",\n\t[3]byte{144, 255, 121}: \"Metro Ethernet Forum\",\n\t[3]byte{148, 0, 6}:     \"jinyoung\",\n\t[3]byte{148, 0, 112}:   \"Nokia Corporation\",\n\t[3]byte{148, 0, 176}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{148, 1, 73}:    \"AutoHotBox\",\n\t[3]byte{148, 1, 194}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{148, 2, 107}:   \"Optictimes Co.,Ltd\",\n\t[3]byte{148, 4, 156}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{148, 5, 182}:   \"Liling FullRiver Electronics & Technology Ltd\",\n\t[3]byte{148, 5, 187}:   \"IEEE Registration Authority\",\n\t[3]byte{148, 8, 83}:    \"Liteon Technology Corporation\",\n\t[3]byte{148, 8, 199}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{148, 9, 55}:    \"HUMAX Co., Ltd.\",\n\t[3]byte{148, 11, 25}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{148, 11, 45}:   \"NetView Technologies(Shenzhen) Co., Ltd\",\n\t[3]byte{148, 11, 213}:  \"Himax Technologies, Inc\",\n\t[3]byte{148, 12, 109}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{148, 12, 152}:  \"Apple, Inc.\",\n\t[3]byte{148, 14, 107}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{148, 16, 62}:   \"Belkin International Inc.\",\n\t[3]byte{148, 17, 218}:  \"ITF Fröschl GmbH\",\n\t[3]byte{148, 20, 122}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{148, 22, 37}:   \"Apple, Inc.\",\n\t[3]byte{148, 22, 115}:  \"Point Core SARL\",\n\t[3]byte{148, 23, 0}:    \"Xiaomi Communications Co Ltd\",\n\t[3]byte{148, 24, 130}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{148, 25, 58}:   \"Elvaco AB\",\n\t[3]byte{148, 28, 86}:   \"Actiontec Electronics, Inc\",\n\t[3]byte{148, 29, 28}:   \"TLab West Systems AB\",\n\t[3]byte{148, 32, 83}:   \"Nokia Corporation\",\n\t[3]byte{148, 33, 151}:  \"Stalmart Technology Limited\",\n\t[3]byte{148, 35, 110}:  \"Shenzhen Junlan Electronic Ltd\",\n\t[3]byte{148, 36, 184}:  \"GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI\",\n\t[3]byte{148, 36, 225}:  \"Alcatel-Lucent Enterprise\",\n\t[3]byte{148, 37, 51}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{148, 39, 144}:  \"TCT mobile ltd\",\n\t[3]byte{148, 40, 46}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{148, 41, 12}:   \"Shenyang wisdom Foundation Technology Development Co., Ltd.\",\n\t[3]byte{148, 41, 47}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{148, 41, 141}:  \"Shanghai AdaptComm Technology Co., Ltd.\",\n\t[3]byte{148, 42, 63}:   \"Diversey Inc\",\n\t[3]byte{148, 44, 179}:  \"HUMAX Co., Ltd.\",\n\t[3]byte{148, 45, 220}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{148, 46, 23}:   \"Schneider Electric Canada Inc\",\n\t[3]byte{148, 46, 99}:   \"Finsécur\",\n\t[3]byte{148, 49, 155}:  \"Alphatronics BV\",\n\t[3]byte{148, 51, 221}:  \"Taco Inc\",\n\t[3]byte{148, 53, 10}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{148, 54, 224}:  \"Sichuan Bihong Broadcast &amp; Television New Technologies Co.,Ltd\",\n\t[3]byte{148, 55, 247}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{148, 57, 229}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{148, 58, 240}:  \"Nokia Corporation\",\n\t[3]byte{148, 59, 176}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{148, 59, 177}:  \"Kaonmedia CO., LTD.\",\n\t[3]byte{148, 61, 201}:  \"Asahi Net, Inc.\",\n\t[3]byte{148, 63, 194}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{148, 64, 162}:  \"Anywave Communication Technologies, Inc.\",\n\t[3]byte{148, 64, 201}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{148, 65, 193}:  \"Mini-Cam Limited\",\n\t[3]byte{148, 67, 77}:   \"Ciena Corporation\",\n\t[3]byte{148, 68, 68}:   \"LG Innotek\",\n\t[3]byte{148, 68, 82}:   \"Belkin International Inc.\",\n\t[3]byte{148, 70, 150}:  \"BaudTec Corporation\",\n\t[3]byte{148, 71, 176}:  \"BEIJING ESWIN COMPUTING TECHNOLOGY CO., LTD\",\n\t[3]byte{148, 73, 150}:  \"WiSilica Inc\",\n\t[3]byte{148, 74, 9}:    \"BitWise Controls\",\n\t[3]byte{148, 74, 12}:   \"Sercomm Corporation.\",\n\t[3]byte{148, 79, 76}:   \"Sound United LLC\",\n\t[3]byte{148, 80, 71}:   \"Rechnerbetriebsgruppe\",\n\t[3]byte{148, 80, 137}:  \"SimonsVoss Technologies GmbH\",\n\t[3]byte{148, 81, 3}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{148, 81, 61}:   \"iSmart Alarm, Inc.\",\n\t[3]byte{148, 81, 191}:  \"Hyundai ESG\",\n\t[3]byte{148, 83, 48}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{148, 84, 147}:  \"Rigado, LLC\",\n\t[3]byte{148, 84, 206}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{148, 84, 223}:  \"YST CORP.\",\n\t[3]byte{148, 87, 165}:  \"Hewlett Packard\",\n\t[3]byte{148, 88, 203}:  \"Nintendo Co.,Ltd\",\n\t[3]byte{148, 89, 7}:    \"Shanghai HITE-BELDEN Network Technology Co., Ltd.\",\n\t[3]byte{148, 89, 45}:   \"EKE Building Technology Systems Ltd\",\n\t[3]byte{148, 91, 126}:  \"TRILOBIT LTDA.\",\n\t[3]byte{148, 97, 30}:   \"Wata Electronics Co.,Ltd. \",\n\t[3]byte{148, 97, 36}:   \"Pason Systems\",\n\t[3]byte{148, 98, 105}:  \"ARRIS Group, Inc.\",\n\t[3]byte{148, 99, 114}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{148, 99, 209}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{148, 101, 45}:  \"OnePlus Technology (Shenzhen) Co., Ltd\",\n\t[3]byte{148, 101, 156}: \"Intel Corporate\",\n\t[3]byte{148, 102, 231}: \"WOM Engineering\",\n\t[3]byte{148, 103, 126}: \"Belden India Private Limited\",\n\t[3]byte{148, 106, 119}: \"Technicolor CH USA Inc.\",\n\t[3]byte{148, 106, 176}: \"Arcadyan Corporation\",\n\t[3]byte{148, 112, 210}: \"WINFIRM TECHNOLOGY\",\n\t[3]byte{148, 113, 172}: \"TCT mobile ltd\",\n\t[3]byte{148, 117, 110}: \"QinetiQ North America\",\n\t[3]byte{148, 118, 183}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{148, 119, 43}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{148, 123, 190}: \"Ubicquia\",\n\t[3]byte{148, 123, 231}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{148, 124, 62}:  \"Polewall Norge AS\",\n\t[3]byte{148, 126, 185}: \"National Narrowband Network Communications Pty Ltd\",\n\t[3]byte{148, 129, 164}: \"Azuray Technologies\",\n\t[3]byte{148, 131, 196}: \"GL Technologies (Hong Kong) Limited\",\n\t[3]byte{148, 133, 122}: \"Evantage Industries Corp\",\n\t[3]byte{148, 134, 205}: \"SEOUL ELECTRONICS&TELECOM\",\n\t[3]byte{148, 134, 212}: \"Surveillance Pro Corporation\",\n\t[3]byte{148, 135, 124}: \"ARRIS Group, Inc.\",\n\t[3]byte{148, 135, 224}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{148, 136, 21}:  \"Infinique Worldwide Inc\",\n\t[3]byte{148, 136, 84}:  \"Texas Instruments\",\n\t[3]byte{148, 136, 94}:  \"Surfilter Network Technology Co., Ltd. \",\n\t[3]byte{148, 138, 198}: \"Realme Chongqing Mobile Telecommunications Corp.,Ltd.\",\n\t[3]byte{148, 139, 3}:   \"EAGET Innovation and Technology Co., Ltd.\",\n\t[3]byte{148, 139, 193}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{148, 141, 80}:  \"Beamex Oy Ab\",\n\t[3]byte{148, 141, 239}: \"Oetiker Schweiz AG\",\n\t[3]byte{148, 142, 137}: \"INDUSTRIAS UNIDAS SA DE CV\",\n\t[3]byte{148, 143, 207}: \"ARRIS Group, Inc.\",\n\t[3]byte{148, 143, 238}: \"Verizon Telematics\",\n\t[3]byte{148, 144, 52}:  \"SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\",\n\t[3]byte{148, 145, 127}: \"ASKEY COMPUTER CORP\",\n\t[3]byte{148, 146, 188}: \"SYNTECH(HK) TECHNOLOGY LIMITED\",\n\t[3]byte{148, 146, 210}: \"KCF Technologies, Inc.\",\n\t[3]byte{148, 148, 38}:  \"Apple, Inc.\",\n\t[3]byte{148, 149, 160}: \"Google, Inc.\",\n\t[3]byte{148, 152, 162}: \"Shanghai LISTEN TECH.LTD\",\n\t[3]byte{148, 153, 1}:   \"Shenzhen YITOA Digital Appliance CO.,LTD\",\n\t[3]byte{148, 153, 144}: \"VTC Telecommunications\",\n\t[3]byte{148, 154, 169}: \"Microsoft Corporation\",\n\t[3]byte{148, 155, 44}:  \"Extreme Networks, Inc.\",\n\t[3]byte{148, 155, 253}: \"Trans New Technology, Inc.\",\n\t[3]byte{148, 156, 85}:  \"Alta Data Technologies\",\n\t[3]byte{148, 157, 87}:  \"Panasonic do Brasil Limitada\",\n\t[3]byte{148, 159, 62}:  \"Sonos, Inc.\",\n\t[3]byte{148, 159, 63}:  \"Optek Digital Technology company limited\",\n\t[3]byte{148, 159, 180}: \"ChengDu JiaFaAnTai Technology Co.,Ltd\",\n\t[3]byte{148, 160, 78}:  \"Bostex Technology Co., LTD\",\n\t[3]byte{148, 161, 162}: \"AMPAK Technology, Inc.\",\n\t[3]byte{148, 163, 202}: \"KonnectONE, LLC\",\n\t[3]byte{148, 164, 12}:  \"Diehl Metering GmbH\",\n\t[3]byte{148, 167, 183}: \"zte corporation\",\n\t[3]byte{148, 167, 188}: \"BodyMedia, Inc.\",\n\t[3]byte{148, 170, 184}: \"Joview(Beijing) Technology Co. Ltd.\",\n\t[3]byte{148, 171, 222}: \"OMX Technology - FZE\",\n\t[3]byte{148, 172, 202}: \"trivum technologies GmbH\",\n\t[3]byte{148, 174, 97}:  \"Alcatel Lucent\",\n\t[3]byte{148, 174, 227}: \"Belden Hirschmann Industries (Suzhou) Ltd.\",\n\t[3]byte{148, 174, 240}: \"Cisco Systems, Inc\",\n\t[3]byte{148, 176, 31}:  \"Apple, Inc.\",\n\t[3]byte{148, 177, 10}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{148, 178, 204}: \"PIONEER CORPORATION\",\n\t[3]byte{148, 180, 15}:  \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{148, 184, 25}:  \"Nokia\",\n\t[3]byte{148, 184, 109}: \"Intel Corporate\",\n\t[3]byte{148, 184, 197}: \"RuggedCom Inc.\",\n\t[3]byte{148, 185, 180}: \"Aptos Technology\",\n\t[3]byte{148, 186, 49}:  \"Visiontec da Amazônia Ltda.\",\n\t[3]byte{148, 186, 86}:  \"Shenzhen Coship Electronics Co., Ltd.\",\n\t[3]byte{148, 187, 174}: \"Husqvarna AB\",\n\t[3]byte{148, 190, 70}:  \"Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.\",\n\t[3]byte{148, 191, 30}:  \"eflow Inc. / Smart Device Planning and Development Division\",\n\t[3]byte{148, 191, 45}:  \"Apple, Inc.\",\n\t[3]byte{148, 191, 128}: \"zte corporation\",\n\t[3]byte{148, 191, 148}: \"Juniper Networks\",\n\t[3]byte{148, 191, 149}: \"Shenzhen Coship Electronics Co., Ltd\",\n\t[3]byte{148, 191, 196}: \"Ruckus Wireless\",\n\t[3]byte{148, 192, 20}:  \"Sorter Sp. j. Konrad Grzeszczyk MichaA, Ziomek\",\n\t[3]byte{148, 192, 56}:  \"Tallac Networks\",\n\t[3]byte{148, 193, 80}:  \"2Wire Inc\",\n\t[3]byte{148, 194, 189}: \"TECNOBIT\",\n\t[3]byte{148, 195, 228}: \"Atlas Copco IAS GmbH\",\n\t[3]byte{148, 196, 233}: \"PowerLayer Microsystems HongKong Limited\",\n\t[3]byte{148, 198, 145}: \"EliteGroup Computer Systems Co., LTD\",\n\t[3]byte{148, 198, 235}: \"NOVA electronics, Inc.\",\n\t[3]byte{148, 199, 175}: \"Raylios Technology\",\n\t[3]byte{148, 201, 96}:  \"Zhongshan B&T technology.co.,ltd\",\n\t[3]byte{148, 201, 98}:  \"Teseq AG\",\n\t[3]byte{148, 202, 15}:  \"Honeywell Analytics\",\n\t[3]byte{148, 204, 4}:   \"IEEE Registration Authority\",\n\t[3]byte{148, 204, 185}: \"ARRIS Group, Inc.\",\n\t[3]byte{148, 205, 172}: \"Creowave Oy\",\n\t[3]byte{148, 206, 44}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{148, 206, 49}:  \"CTS Limited\",\n\t[3]byte{148, 208, 13}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{148, 208, 25}:  \"Cydle Corp.\",\n\t[3]byte{148, 208, 41}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{148, 208, 117}: \"CIS Crypto\",\n\t[3]byte{148, 210, 153}: \"Techmation Co.,Ltd.\",\n\t[3]byte{148, 212, 23}:  \"GPI KOREA INC.\",\n\t[3]byte{148, 212, 105}: \"Cisco Systems, Inc\",\n\t[3]byte{148, 213, 5}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{148, 214, 14}:  \"shenzhen yunmao information technologies co., ltd\",\n\t[3]byte{148, 214, 219}: \"NexFi\",\n\t[3]byte{148, 215, 35}:  \"Shanghai DareGlobal Technologies Co.,Ltd\",\n\t[3]byte{148, 215, 113}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{148, 216, 89}:  \"TCT mobile ltd\",\n\t[3]byte{148, 217, 60}:  \"ENELPS\",\n\t[3]byte{148, 217, 179}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{148, 219, 73}:  \"SITCORP\",\n\t[3]byte{148, 219, 86}:  \"Sony Home Entertainment&Sound Products Inc\",\n\t[3]byte{148, 219, 201}: \"AzureWave Technology Inc.\",\n\t[3]byte{148, 219, 218}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{148, 220, 78}:  \"AEV, spol. s r. o.\",\n\t[3]byte{148, 221, 63}:  \"A+V Link Technologies, Corp.\",\n\t[3]byte{148, 222, 14}:  \"SmartOptics AS\",\n\t[3]byte{148, 222, 128}: \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{148, 223, 78}:  \"Wistron InfoComm(Kunshan)Co.,Ltd.\",\n\t[3]byte{148, 223, 88}:  \"IJ Electron CO.,Ltd.\",\n\t[3]byte{148, 224, 208}: \"HealthStream Taiwan Inc.\",\n\t[3]byte{148, 224, 214}: \"China Dragon Technology Limited\",\n\t[3]byte{148, 225, 172}: \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{148, 226, 38}:  \"D. ORtiz Consulting, LLC\",\n\t[3]byte{148, 226, 253}: \"Boge Kompressoren OTTO Boge GmbH & Co. KG\",\n\t[3]byte{148, 227, 109}: \"Texas Instruments\",\n\t[3]byte{148, 227, 238}: \"zte corporation\",\n\t[3]byte{148, 228, 186}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{148, 230, 247}: \"Intel Corporate\",\n\t[3]byte{148, 231, 11}:  \"Intel Corporate\",\n\t[3]byte{148, 231, 17}:  \"Xirka Dama Persada PT\",\n\t[3]byte{148, 231, 234}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{148, 232, 72}:  \"FYLDE MICRO LTD\",\n\t[3]byte{148, 232, 197}: \"ARRIS Group, Inc.\",\n\t[3]byte{148, 233, 106}: \"Apple, Inc.\",\n\t[3]byte{148, 233, 121}: \"Liteon Technology Corporation\",\n\t[3]byte{148, 233, 140}: \"Nokia\",\n\t[3]byte{148, 233, 238}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{148, 234, 234}: \"TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO \",\n\t[3]byte{148, 235, 44}:  \"Google, Inc.\",\n\t[3]byte{148, 235, 205}: \"BlackBerry RTS\",\n\t[3]byte{148, 238, 159}: \"HMD Global Oy\",\n\t[3]byte{148, 241, 40}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{148, 241, 158}: \"HUIZHOU MAORONG INTELLIGENT TECHNOLOGY CO.,LTD\",\n\t[3]byte{148, 242, 120}: \"Elma Electronic\",\n\t[3]byte{148, 245, 81}:  \"Cadi Scientific Pte Ltd\",\n\t[3]byte{148, 246, 101}: \"Ruckus Wireless\",\n\t[3]byte{148, 246, 146}: \"Geminico co.,Ltd.\",\n\t[3]byte{148, 246, 163}: \"Apple, Inc.\",\n\t[3]byte{148, 246, 214}: \"Apple, Inc.\",\n\t[3]byte{148, 247, 32}:  \"Tianjin Deviser Electronics Instrument Co., Ltd\",\n\t[3]byte{148, 247, 173}: \"Juniper Networks\",\n\t[3]byte{148, 250, 232}: \"Shenzhen Eycom Technology Co., Ltd \",\n\t[3]byte{148, 251, 41}:  \"Zebra Technologies Inc.\",\n\t[3]byte{148, 251, 167}: \"IEEE Registration Authority\",\n\t[3]byte{148, 251, 178}: \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{148, 253, 29}:  \"WhereWhen Corp\",\n\t[3]byte{148, 253, 46}:  \"Shanghai Uniscope Technologies Co.,Ltd\",\n\t[3]byte{148, 254, 34}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{148, 254, 157}: \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{148, 254, 244}: \"Sagemcom Broadband SAS\",\n\t[3]byte{148, 255, 97}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{152, 0, 106}:   \"zte corporation\",\n\t[3]byte{152, 0, 116}:   \"Raisecom Technology CO., LTD\",\n\t[3]byte{152, 0, 193}:   \"GuangZhou CREATOR Technology Co.,Ltd.(CHINA)\",\n\t[3]byte{152, 0, 198}:   \"Apple, Inc.\",\n\t[3]byte{152, 1, 167}:   \"Apple, Inc.\",\n\t[3]byte{152, 2, 132}:   \"Theobroma Systems GmbH\",\n\t[3]byte{152, 2, 216}:   \"IEEE Registration Authority\",\n\t[3]byte{152, 3, 155}:   \"Mellanox Technologies, Inc.\",\n\t[3]byte{152, 3, 160}:   \"ABB n.v. Power Quality Products\",\n\t[3]byte{152, 3, 216}:   \"Apple, Inc.\",\n\t[3]byte{152, 6, 55}:    \"IEEE Registration Authority\",\n\t[3]byte{152, 6, 60}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{152, 7, 45}:    \"Texas Instruments\",\n\t[3]byte{152, 9, 207}:   \"OnePlus Technology (Shenzhen) Co., Ltd\",\n\t[3]byte{152, 12, 130}:  \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{152, 12, 165}:  \"Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.\",\n\t[3]byte{152, 13, 46}:   \"HTC Corporation\",\n\t[3]byte{152, 13, 81}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{152, 13, 103}:  \"Zyxel Communications Corporation\",\n\t[3]byte{152, 14, 36}:   \"Phytium Technology Co.,Ltd.\",\n\t[3]byte{152, 14, 228}:  \"Private\",\n\t[3]byte{152, 16, 148}:  \"Shenzhen Vsun communication technology Co.,ltd\",\n\t[3]byte{152, 16, 232}:  \"Apple, Inc.\",\n\t[3]byte{152, 19, 51}:   \"zte corporation\",\n\t[3]byte{152, 20, 210}:  \"Avonic\",\n\t[3]byte{152, 22, 236}:  \"IC Intracom\",\n\t[3]byte{152, 24, 136}:  \"Cisco Meraki\",\n\t[3]byte{152, 27, 181}:  \"ASSA ABLOY Korea Co., Ltd iRevo\",\n\t[3]byte{152, 29, 250}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{152, 30, 15}:   \"Jeelan (Shanghai Jeelan Technology Information Inc\",\n\t[3]byte{152, 30, 25}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{152, 31, 177}:  \"Shenzhen Lemon Network Technology Co.,Ltd\",\n\t[3]byte{152, 32, 142}:  \"Definium Technologies\",\n\t[3]byte{152, 34, 239}:  \"Liteon Technology Corporation\",\n\t[3]byte{152, 35, 78}:   \"Micromedia AG\",\n\t[3]byte{152, 38, 42}:   \"Applied Research Associates, Inc\",\n\t[3]byte{152, 40, 166}:  \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{152, 41, 29}:   \"Jaguar de Mexico, SA de CV\",\n\t[3]byte{152, 41, 63}:   \"Fujian Start Computer Equipment Co.,Ltd\",\n\t[3]byte{152, 41, 166}:  \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{152, 44, 188}:  \"Intel Corporate\",\n\t[3]byte{152, 44, 190}:  \"2Wire Inc\",\n\t[3]byte{152, 45, 86}:   \"Resolution Audio\",\n\t[3]byte{152, 45, 104}:  \"Samsung Electronics Co., Ltd\",\n\t[3]byte{152, 45, 186}:  \"Fibergate Inc.\",\n\t[3]byte{152, 47, 60}:   \"Sichuan Changhong Electric Ltd.\",\n\t[3]byte{152, 47, 248}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{152, 48, 0}:    \"Beijing KEMACOM Technologies Co., Ltd.\",\n\t[3]byte{152, 48, 113}:  \"DAIKYUNG VASCOM\",\n\t[3]byte{152, 52, 157}:  \"Krauss Maffei Technologies GmbH\",\n\t[3]byte{152, 53, 113}:  \"Sub10 Systems Ltd\",\n\t[3]byte{152, 53, 184}:  \"Assembled Products Corporation\",\n\t[3]byte{152, 53, 237}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{152, 55, 19}:   \"PT.Navicom Indonesia\",\n\t[3]byte{152, 57, 142}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{152, 59, 22}:   \"AMPAK Technology, Inc.\",\n\t[3]byte{152, 59, 143}:  \"Intel Corporate\",\n\t[3]byte{152, 63, 159}:  \"China SSJ (Suzhou) Network Technology Inc.\",\n\t[3]byte{152, 64, 187}:  \"Dell Inc.\",\n\t[3]byte{152, 65, 92}:   \"Nintendo Co.,Ltd\",\n\t[3]byte{152, 66, 70}:   \"SOL INDUSTRY PTE., LTD\",\n\t[3]byte{152, 67, 218}:  \"INTERTECH\",\n\t[3]byte{152, 68, 182}:  \"INFRANOR SAS\",\n\t[3]byte{152, 68, 206}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{152, 69, 98}:   \"Shanghai Baud Data Communication Co.,Ltd.\",\n\t[3]byte{152, 70, 10}:   \"Apple, Inc.\",\n\t[3]byte{152, 71, 60}:   \"SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD\",\n\t[3]byte{152, 72, 39}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{152, 73, 20}:   \"Wistron Neweb Corporation\",\n\t[3]byte{152, 73, 225}:  \"Boeing Defence Australia\",\n\t[3]byte{152, 74, 71}:   \"CHG Hospital Beds\",\n\t[3]byte{152, 75, 74}:   \"ARRIS Group, Inc.\",\n\t[3]byte{152, 75, 225}:  \"Hewlett Packard\",\n\t[3]byte{152, 76, 4}:    \"Zhangzhou Keneng Electrical Equipment Co Ltd\",\n\t[3]byte{152, 76, 211}:  \"Mantis Deposition\",\n\t[3]byte{152, 78, 151}:  \"Starlight Marketing (H. K.) Ltd.\",\n\t[3]byte{152, 79, 238}:  \"Intel Corporate\",\n\t[3]byte{152, 82, 61}:   \"Sunitec Enterprise Co.,Ltd\",\n\t[3]byte{152, 82, 74}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{152, 82, 177}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{152, 84, 27}:   \"Intel Corporate\",\n\t[3]byte{152, 87, 211}:  \"HON HAI-CCPBG  PRECISION IND.CO.,LTD.\",\n\t[3]byte{152, 88, 138}:  \"SYSGRATION Ltd.\",\n\t[3]byte{152, 89, 69}:   \"Texas Instruments\",\n\t[3]byte{152, 89, 73}:   \"LUXOTTICA GROUP S.P.A.\",\n\t[3]byte{152, 90, 235}:  \"Apple, Inc.\",\n\t[3]byte{152, 91, 176}:  \"KMDATA INC.\",\n\t[3]byte{152, 92, 147}:  \"SBG Systems SAS\",\n\t[3]byte{152, 93, 70}:   \"PeopleNet Communication\",\n\t[3]byte{152, 93, 130}:  \"Arista Networks\",\n\t[3]byte{152, 93, 173}:  \"Texas Instruments\",\n\t[3]byte{152, 94, 27}:   \"ConversDigital Co., Ltd.\",\n\t[3]byte{152, 95, 211}:  \"Microsoft Corporation\",\n\t[3]byte{152, 96, 34}:   \"EMW Co., Ltd.\",\n\t[3]byte{152, 102, 234}: \"Industrial Control Communications, Inc.\",\n\t[3]byte{152, 107, 61}:  \"ARRIS Group, Inc.\",\n\t[3]byte{152, 108, 92}:  \"Jiangxi Gosun Guard Security Co.,Ltd\",\n\t[3]byte{152, 108, 245}: \"zte corporation\",\n\t[3]byte{152, 109, 53}:  \"IEEE Registration Authority\",\n\t[3]byte{152, 109, 200}: \"TOSHIBA MITSUBISHI-ELECTRIC INDUSTRIAL SYSTEMS CORPORATION\",\n\t[3]byte{152, 111, 96}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{152, 112, 232}: \"INNATECH SDN BHD\",\n\t[3]byte{152, 115, 196}: \"Sage Electronic Engineering LLC\",\n\t[3]byte{152, 116, 61}:  \"Shenzhen Jun Kai Hengye Technology Co. Ltd\",\n\t[3]byte{152, 116, 218}: \"Infinix mobility limited\",\n\t[3]byte{152, 118, 182}: \"Adafruit\",\n\t[3]byte{152, 119, 112}: \"Pep Digital Technology (Guangzhou) Co., Ltd\",\n\t[3]byte{152, 122, 16}:  \"Ericsson AB\",\n\t[3]byte{152, 122, 20}:  \"Microsoft Corporation\",\n\t[3]byte{152, 123, 243}: \"Texas Instruments\",\n\t[3]byte{152, 126, 70}:  \"Emizon Networks Limited\",\n\t[3]byte{152, 126, 202}: \"Inventus Power Eletronica do Brasil LTDA\",\n\t[3]byte{152, 128, 238}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{152, 130, 23}:  \"Disruptive Ltd\",\n\t[3]byte{152, 131, 137}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{152, 132, 227}: \"Texas Instruments\",\n\t[3]byte{152, 134, 93}:  \"Nokia Shanghai Bell Co., Ltd.\",\n\t[3]byte{152, 134, 177}: \"Flyaudio corporation (China)\",\n\t[3]byte{152, 135, 68}:  \"Wuxi Hongda Science and Technology Co.,LTD\",\n\t[3]byte{152, 137, 237}: \"Anadem Information Inc.\",\n\t[3]byte{152, 139, 10}:  \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{152, 139, 93}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{152, 139, 173}: \"Corintech Ltd.\",\n\t[3]byte{152, 141, 70}:  \"Intel Corporate\",\n\t[3]byte{152, 142, 52}:  \"ZHEJIANG BOXSAM ELECTRONIC CO.,LTD\",\n\t[3]byte{152, 142, 74}:  \"NOXUS(BEIJING) TECHNOLOGY CO.,LTD\",\n\t[3]byte{152, 142, 121}: \"Qudelix, Inc.\",\n\t[3]byte{152, 142, 212}: \"ITEL MOBILE LIMITED\",\n\t[3]byte{152, 142, 221}: \"TE Connectivity Limerick\",\n\t[3]byte{152, 144, 128}: \"Linkpower Network System Inc Ltd.\",\n\t[3]byte{152, 144, 150}: \"Dell Inc.\",\n\t[3]byte{152, 147, 204}: \"LG ELECTRONICS INC\",\n\t[3]byte{152, 148, 73}:  \"Skyworth Wireless Technology Ltd.\",\n\t[3]byte{152, 151, 209}: \"MitraStar Technology Corp.\",\n\t[3]byte{152, 155, 203}: \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{152, 156, 87}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{152, 157, 93}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{152, 158, 99}:  \"Apple, Inc.\",\n\t[3]byte{152, 164, 4}:   \"Ericsson AB\",\n\t[3]byte{152, 164, 14}:  \"Snap, Inc.\",\n\t[3]byte{152, 167, 176}: \"MCST ZAO\",\n\t[3]byte{152, 169, 66}:  \"Guangzhou Tozed Kangwei Intelligent Technology Co., LTD\",\n\t[3]byte{152, 170, 60}:  \"Will i-tech Co., Ltd.\",\n\t[3]byte{152, 170, 215}: \"BLUE WAVE NETWORKING CO LTD\",\n\t[3]byte{152, 170, 252}: \"IEEE Registration Authority\",\n\t[3]byte{152, 174, 113}: \"VVDN Technologies Pvt Ltd\",\n\t[3]byte{152, 175, 101}: \"Intel Corporate\",\n\t[3]byte{152, 176, 57}:  \"Nokia\",\n\t[3]byte{152, 179, 239}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{152, 182, 233}: \"Nintendo Co.,Ltd\",\n\t[3]byte{152, 184, 186}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{152, 184, 188}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{152, 184, 227}: \"Apple, Inc.\",\n\t[3]byte{152, 186, 57}:  \"Doro AB\",\n\t[3]byte{152, 187, 30}:  \"BYD Precision Manufacture Company Ltd.\",\n\t[3]byte{152, 187, 153}: \"Phicomm (Sichuan) Co.,Ltd.\",\n\t[3]byte{152, 188, 87}:  \"SVA TECHNOLOGIES CO.LTD\",\n\t[3]byte{152, 188, 153}: \"Edeltech Co.,Ltd.\",\n\t[3]byte{152, 190, 148}: \"IBM\",\n\t[3]byte{152, 192, 235}: \"Global Regency Ltd\",\n\t[3]byte{152, 197, 219}: \"Ericsson AB\",\n\t[3]byte{152, 199, 164}: \"Shenzhen HS Fiber Communication Equipment CO., LTD\",\n\t[3]byte{152, 200, 69}:  \"PacketAccess\",\n\t[3]byte{152, 200, 184}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{152, 201, 124}: \"Shenzhen iComm Semiconductor CO,LTD\",\n\t[3]byte{152, 202, 51}:  \"Apple, Inc.\",\n\t[3]byte{152, 203, 39}:  \"Galore Networks Pvt. Ltd.\",\n\t[3]byte{152, 203, 164}: \"Benchmark Electronics\",\n\t[3]byte{152, 204, 77}:  \"Shenzhen mantunsci co., LTD\",\n\t[3]byte{152, 205, 180}: \"Virident Systems, Inc.\",\n\t[3]byte{152, 207, 83}:  \"BBK EDUCATIONAL ELECTRONICS CORP.,LTD.\",\n\t[3]byte{152, 210, 147}: \"Google, Inc.\",\n\t[3]byte{152, 211, 49}:  \"Shenzhen Bolutek Technology Co.,Ltd.\",\n\t[3]byte{152, 211, 210}: \"MEKRA Lang GmbH & Co. KG\",\n\t[3]byte{152, 211, 231}: \"Netafim L\",\n\t[3]byte{152, 214, 134}: \"Chyi Lee industry Co., ltd.\",\n\t[3]byte{152, 214, 187}: \"Apple, Inc.\",\n\t[3]byte{152, 214, 247}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{152, 216, 99}:  \"Shanghai High-Flying Electronics Technology Co., Ltd\",\n\t[3]byte{152, 216, 140}: \"Nortel Networks\",\n\t[3]byte{152, 218, 146}: \"Vuzix Corporation\",\n\t[3]byte{152, 218, 196}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{152, 220, 217}: \"UNITEC Co., Ltd.\",\n\t[3]byte{152, 221, 91}:  \"TAKUMI JAPAN LTD\",\n\t[3]byte{152, 221, 234}: \"Infinix mobility limited\",\n\t[3]byte{152, 222, 208}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{152, 223, 130}: \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{152, 224, 217}: \"Apple, Inc.\",\n\t[3]byte{152, 225, 101}: \"Accutome\",\n\t[3]byte{152, 228, 118}: \"Zentan\",\n\t[3]byte{152, 231, 67}:  \"Dell Inc.\",\n\t[3]byte{152, 231, 154}: \"Foxconn(NanJing) Communication Co.,Ltd.\",\n\t[3]byte{152, 231, 244}: \"Hewlett Packard\",\n\t[3]byte{152, 231, 245}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{152, 232, 72}:  \"Axiim\",\n\t[3]byte{152, 232, 250}: \"Nintendo Co.,Ltd\",\n\t[3]byte{152, 236, 101}: \"Cosesy ApS\",\n\t[3]byte{152, 237, 92}:  \"Tesla,Inc.\",\n\t[3]byte{152, 238, 203}: \"Wistron Infocomm (Zhongshan) Corporation\",\n\t[3]byte{152, 239, 155}: \"OHSUNG\",\n\t[3]byte{152, 240, 88}:  \"Lynxspring, Incl.\",\n\t[3]byte{152, 240, 171}: \"Apple, Inc.\",\n\t[3]byte{152, 241, 112}: \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{152, 241, 153}: \"NEC Platforms, Ltd.\",\n\t[3]byte{152, 242, 179}: \"Hewlett Packard Enterprise\",\n\t[3]byte{152, 244, 40}:  \"zte corporation\",\n\t[3]byte{152, 244, 171}: \"Espressif Inc.\",\n\t[3]byte{152, 245, 55}:  \"zte corporation\",\n\t[3]byte{152, 245, 169}: \"OHSUNG\",\n\t[3]byte{152, 246, 33}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{152, 247, 129}: \"ARRIS Group, Inc.\",\n\t[3]byte{152, 247, 215}: \"ARRIS Group, Inc.\",\n\t[3]byte{152, 248, 193}: \"IDT Technology Limited\",\n\t[3]byte{152, 248, 219}: \"Marini Impianti Industriali s.r.l.\",\n\t[3]byte{152, 249, 199}: \"IEEE Registration Authority\",\n\t[3]byte{152, 250, 155}: \"LCFC(HeFei) Electronics Technology co., ltd\",\n\t[3]byte{152, 250, 167}: \"INNONET\",\n\t[3]byte{152, 250, 227}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{152, 251, 18}:  \"Grand Electronics (HK) Ltd\",\n\t[3]byte{152, 252, 17}:  \"Cisco-Linksys, LLC\",\n\t[3]byte{152, 252, 132}: \"IEEE Registration Authority\",\n\t[3]byte{152, 253, 116}: \"ACT.CO.LTD\",\n\t[3]byte{152, 253, 180}: \"Primax Electronics Ltd.\",\n\t[3]byte{152, 254, 3}:   \"Ericsson - North America\",\n\t[3]byte{152, 254, 148}: \"Apple, Inc.\",\n\t[3]byte{152, 255, 106}: \"OTEC(Shanghai)Technology Co.,Ltd.\",\n\t[3]byte{152, 255, 208}: \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{156, 1, 17}:    \"Shenzhen Newabel Electronic Co., Ltd.\",\n\t[3]byte{156, 2, 152}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{156, 3, 158}:   \"Beijing Winchannel Software Technology Co., Ltd\",\n\t[3]byte{156, 4, 115}:   \"Tecmobile (International) Ltd. \",\n\t[3]byte{156, 4, 235}:   \"Apple, Inc.\",\n\t[3]byte{156, 6, 27}:    \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{156, 6, 110}:   \"Hytera Communications Corporation Limited\",\n\t[3]byte{156, 12, 223}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{156, 13, 172}:  \"Tymphany HK Limited\",\n\t[3]byte{156, 14, 74}:   \"Shenzhen Vastking Electronic Co.,Ltd.\",\n\t[3]byte{156, 19, 171}:  \"Chanson Water Co., Ltd.\",\n\t[3]byte{156, 20, 99}:   \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{156, 20, 101}:  \"Edata Elektronik San. ve Tic. A.Ş.\",\n\t[3]byte{156, 24, 116}:  \"Nokia Danmark A/S\",\n\t[3]byte{156, 25, 194}:  \"Dongguan Liesheng Electronic Co., Ltd.\",\n\t[3]byte{156, 28, 18}:   \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{156, 29, 54}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{156, 29, 88}:   \"Texas Instruments\",\n\t[3]byte{156, 30, 149}:  \"Actiontec Electronics, Inc\",\n\t[3]byte{156, 31, 221}:  \"Accupix Inc.\",\n\t[3]byte{156, 32, 123}:  \"Apple, Inc.\",\n\t[3]byte{156, 33, 106}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{156, 34, 14}:   \"TASCAN Systems GmbH\",\n\t[3]byte{156, 37, 190}:  \"Wildlife Acoustics, Inc.\",\n\t[3]byte{156, 40, 64}:   \"Discovery Technology,LTD..\",\n\t[3]byte{156, 40, 191}:  \"Continental Automotive Czech Republic s.r.o.\",\n\t[3]byte{156, 40, 239}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{156, 40, 247}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{156, 41, 63}:   \"Apple, Inc.\",\n\t[3]byte{156, 41, 118}:  \"Intel Corporate\",\n\t[3]byte{156, 42, 112}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{156, 42, 131}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{156, 45, 207}:  \"Shishi Tongyun Technology(Chengdu)Co.,Ltd.\",\n\t[3]byte{156, 46, 161}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{156, 47, 78}:   \"zte corporation\",\n\t[3]byte{156, 47, 115}:  \"Universal Tiancheng Technology (Beijing) Co., Ltd.\",\n\t[3]byte{156, 48, 91}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{156, 48, 102}:  \"RWE Effizienz GmbH\",\n\t[3]byte{156, 49, 120}:  \"Foshan Huadian Intelligent Communications Teachnologies Co.,Ltd\",\n\t[3]byte{156, 49, 182}:  \"Kulite Semiconductor Products Inc\",\n\t[3]byte{156, 49, 195}:  \"BSkyB Ltd\",\n\t[3]byte{156, 50, 169}:  \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{156, 50, 206}:  \"CANON INC.\",\n\t[3]byte{156, 52, 38}:   \"ARRIS Group, Inc.\",\n\t[3]byte{156, 53, 131}:  \"Nipro Diagnostics, Inc\",\n\t[3]byte{156, 53, 235}:  \"Apple, Inc.\",\n\t[3]byte{156, 55, 244}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{156, 58, 154}:  \"Shenzhen Sundray Technologies Company Limited\",\n\t[3]byte{156, 58, 175}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{156, 61, 207}:  \"NETGEAR\",\n\t[3]byte{156, 62, 170}:  \"EnvyLogic Co.,Ltd.\",\n\t[3]byte{156, 65, 124}:  \"Hame  Technology Co.,  Limited \",\n\t[3]byte{156, 67, 30}:   \"IEEE Registration Authority\",\n\t[3]byte{156, 68, 61}:   \"CHENGDU XUGUANG TECHNOLOGY CO, LTD\",\n\t[3]byte{156, 68, 166}:  \"SwiftTest, Inc.\",\n\t[3]byte{156, 69, 99}:   \"DIMEP Sistemas\",\n\t[3]byte{156, 73, 127}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{156, 74, 123}:  \"Nokia Corporation\",\n\t[3]byte{156, 76, 174}:  \"Mesa Labs\",\n\t[3]byte{156, 78, 32}:   \"Cisco Systems, Inc\",\n\t[3]byte{156, 78, 54}:   \"Intel Corporate\",\n\t[3]byte{156, 78, 142}:  \"ALT Systems Ltd\",\n\t[3]byte{156, 78, 191}:  \"BoxCast\",\n\t[3]byte{156, 79, 207}:  \"TCT mobile ltd\",\n\t[3]byte{156, 79, 218}:  \"Apple, Inc.\",\n\t[3]byte{156, 80, 238}:  \"Cambridge Industries(Group) Co.,Ltd.\",\n\t[3]byte{156, 82, 248}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{156, 83, 205}:  \"ENGICAM s.r.l.\",\n\t[3]byte{156, 84, 28}:   \"Shenzhen My-power Technology Co.,Ltd\",\n\t[3]byte{156, 84, 202}:  \"Zhengzhou VCOM Science and Technology Co.,Ltd\",\n\t[3]byte{156, 84, 218}:  \"SkyBell Technologies Inc.\",\n\t[3]byte{156, 85, 180}:  \"I.S.E. S.r.l.\",\n\t[3]byte{156, 87, 17}:   \"Feitian Xunda(Beijing) Aeronautical Information Technology Co., Ltd.\",\n\t[3]byte{156, 87, 173}:  \"Cisco Systems, Inc\",\n\t[3]byte{156, 90, 68}:   \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{156, 91, 150}:  \"NMR Corporation\",\n\t[3]byte{156, 92, 141}:  \"FIREMAX INDÚSTRIA E COMÉRCIO DE PRODUTOS ELETRÔNICOS  LTDA\",\n\t[3]byte{156, 92, 142}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{156, 92, 249}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{156, 93, 18}:   \"Extreme Networks, Inc.\",\n\t[3]byte{156, 93, 149}:  \"VTC Electronics Corp.\",\n\t[3]byte{156, 94, 115}:  \"Calibre UK LTD\",\n\t[3]byte{156, 95, 90}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{156, 97, 29}:   \"Panasonic Corporation of North America\",\n\t[3]byte{156, 97, 33}:   \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{156, 98, 171}:  \"Sumavision Technologies Co.,Ltd\",\n\t[3]byte{156, 99, 237}:  \"zte corporation\",\n\t[3]byte{156, 100, 94}:  \"Harman Consumer Group\",\n\t[3]byte{156, 100, 139}: \"Apple, Inc.\",\n\t[3]byte{156, 101, 176}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{156, 101, 238}: \"DASAN Network Solutions\",\n\t[3]byte{156, 101, 249}: \"AcSiP Technology Corp.\",\n\t[3]byte{156, 102, 80}:  \"Glodio Technolies Co.,Ltd Tianjin Branch\",\n\t[3]byte{156, 104, 91}:  \"Octonion SA\",\n\t[3]byte{156, 105, 55}:  \"Qorvo International Pte. Ltd.\",\n\t[3]byte{156, 105, 180}: \"IEEE Registration Authority\",\n\t[3]byte{156, 105, 209}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{156, 106, 190}: \"QEES ApS.\",\n\t[3]byte{156, 107, 55}:  \"Renesas Electronics (Penang) Sdn. Bhd.\",\n\t[3]byte{156, 107, 114}: \"Realme Chongqing MobileTelecommunications Corp Ltd\",\n\t[3]byte{156, 108, 21}:  \"Microsoft Corporation\",\n\t[3]byte{156, 111, 82}:  \"zte corporation\",\n\t[3]byte{156, 113, 58}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{156, 116, 26}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{156, 117, 20}:  \"Wildix srl\",\n\t[3]byte{156, 119, 170}: \"NADASNV\",\n\t[3]byte{156, 121, 172}: \"Suntec Software(Shanghai) Co., Ltd.\",\n\t[3]byte{156, 122, 3}:   \"Ciena Corporation\",\n\t[3]byte{156, 123, 210}: \"NEOLAB Convergence\",\n\t[3]byte{156, 123, 239}: \"Hewlett Packard\",\n\t[3]byte{156, 125, 163}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{156, 127, 87}:  \"UNIC Memory Technology Co Ltd\",\n\t[3]byte{156, 128, 125}: \"SYSCABLE Korea Inc.\",\n\t[3]byte{156, 128, 223}: \"Arcadyan Technology Corporation\",\n\t[3]byte{156, 130, 117}: \"Yichip\\u00a0Microelectronics (Hangzhou) Co.,Ltd\",\n\t[3]byte{156, 131, 191}: \"PRO-VISION, Inc.\",\n\t[3]byte{156, 132, 191}: \"Apple, Inc.\",\n\t[3]byte{156, 134, 218}: \"Phoenix Geophysics Ltd.\",\n\t[3]byte{156, 136, 136}: \"Simac Techniek NV\",\n\t[3]byte{156, 136, 173}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{156, 138, 203}: \"Juniper Networks\",\n\t[3]byte{156, 139, 160}: \"Apple, Inc.\",\n\t[3]byte{156, 139, 241}: \"The Warehouse Limited\",\n\t[3]byte{156, 140, 110}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{156, 140, 216}: \"Hewlett Packard Enterprise\",\n\t[3]byte{156, 141, 26}:  \"INTEG process group inc\",\n\t[3]byte{156, 141, 124}: \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{156, 141, 211}: \"Leonton Technologies\",\n\t[3]byte{156, 142, 153}: \"Hewlett Packard\",\n\t[3]byte{156, 142, 205}: \"Amcrest Technologies\",\n\t[3]byte{156, 142, 220}: \"Teracom Limited\",\n\t[3]byte{156, 147, 78}:  \"Xerox Corporation\",\n\t[3]byte{156, 147, 176}: \"Megatronix (Beijing) Technology Co., Ltd.\",\n\t[3]byte{156, 147, 228}: \"Private\",\n\t[3]byte{156, 149, 248}: \"SmartDoor Systems, LLC\",\n\t[3]byte{156, 151, 38}:  \"Technicolor\",\n\t[3]byte{156, 151, 137}: \"1MORE\",\n\t[3]byte{156, 152, 17}:  \"Guangzhou Sunrise Electronics Development Co., Ltd\",\n\t[3]byte{156, 153, 160}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{156, 153, 205}: \"Voippartners\",\n\t[3]byte{156, 156, 29}:  \"Starkey Labs Inc.\",\n\t[3]byte{156, 156, 64}:  \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{156, 157, 93}:  \"Raden Inc\",\n\t[3]byte{156, 157, 126}: \"Beijing Xiaomi Mobile Software Co., Ltd\",\n\t[3]byte{156, 161, 10}:  \"SCLE SFE\",\n\t[3]byte{156, 161, 52}:  \"Nike, Inc.\",\n\t[3]byte{156, 163, 169}: \"Guangzhou Juan Optical and Electronical Tech Joint Stock Co., Ltd\",\n\t[3]byte{156, 163, 186}: \"SAKURA Internet Inc.\",\n\t[3]byte{156, 165, 19}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{156, 165, 37}:  \"Shandong USR IOT Technology Limited\",\n\t[3]byte{156, 165, 119}: \"Osorno Enterprises Inc.\",\n\t[3]byte{156, 165, 192}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{156, 166, 21}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{156, 166, 157}: \"Whaley Technology Co.Ltd\",\n\t[3]byte{156, 169, 228}: \"zte corporation\",\n\t[3]byte{156, 170, 27}:  \"Microsoft Corporation\",\n\t[3]byte{156, 172, 109}: \"Universal Electronics, Inc.\",\n\t[3]byte{156, 173, 151}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{156, 173, 239}: \"Obihai Technology, Inc.\",\n\t[3]byte{156, 174, 211}: \"Seiko Epson Corporation\",\n\t[3]byte{156, 175, 111}: \"ITEL MOBILE LIMITED\",\n\t[3]byte{156, 175, 202}: \"Cisco Systems, Inc\",\n\t[3]byte{156, 176, 8}:   \"Ubiquitous Computing Technology Corporation\",\n\t[3]byte{156, 178, 6}:   \"PROCENTEC\",\n\t[3]byte{156, 178, 178}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{156, 182, 84}:  \"Hewlett Packard\",\n\t[3]byte{156, 182, 208}: \"Rivet Networks\",\n\t[3]byte{156, 183, 13}:  \"Liteon Technology Corporation\",\n\t[3]byte{156, 183, 147}: \"Creatcomm Technology Inc.\",\n\t[3]byte{156, 187, 152}: \"Shen Zhen RND Electronic Co.,LTD\",\n\t[3]byte{156, 189, 110}: \"DERA Co., Ltd\",\n\t[3]byte{156, 189, 157}: \"SkyDisk, Inc.\",\n\t[3]byte{156, 190, 224}: \"Biosoundlab Co., Ltd.\",\n\t[3]byte{156, 192, 119}: \"PrintCounts, LLC\",\n\t[3]byte{156, 192, 210}: \"Conductix-Wampfler GmbH\",\n\t[3]byte{156, 193, 114}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{156, 199, 166}: \"AVM GmbH\",\n\t[3]byte{156, 199, 209}: \"SHARP Corporation\",\n\t[3]byte{156, 200, 174}: \"Becton, Dickinson  and Company\",\n\t[3]byte{156, 200, 252}: \"ARRIS Group, Inc.\",\n\t[3]byte{156, 201, 80}:  \"Baumer Holding\",\n\t[3]byte{156, 201, 235}: \"NETGEAR\",\n\t[3]byte{156, 202, 217}: \"Nokia Corporation\",\n\t[3]byte{156, 204, 131}: \"Juniper Networks\",\n\t[3]byte{156, 205, 130}: \"CHENG UEI PRECISION INDUSTRY CO.,LTD\",\n\t[3]byte{156, 210, 30}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{156, 210, 75}:  \"zte corporation\",\n\t[3]byte{156, 211, 50}:  \"PLC Technology Ltd\",\n\t[3]byte{156, 211, 91}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{156, 211, 109}: \"NETGEAR\",\n\t[3]byte{156, 212, 139}: \"Innolux Technology Europe BV\",\n\t[3]byte{156, 214, 67}:  \"D-Link International\",\n\t[3]byte{156, 217, 23}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{156, 217, 203}: \"Lesira Manufacturing Pty Ltd\",\n\t[3]byte{156, 218, 62}:  \"Intel Corporate\",\n\t[3]byte{156, 219, 7}:   \"Thum+Mahr GmbH\",\n\t[3]byte{156, 220, 113}: \"Hewlett Packard Enterprise\",\n\t[3]byte{156, 221, 31}:  \"Intelligent Steward Co.,Ltd\",\n\t[3]byte{156, 223, 3}:   \"Harman/Becker Automotive Systems GmbH\",\n\t[3]byte{156, 223, 177}: \"Shenzhen Crave Communication Co., LTD\",\n\t[3]byte{156, 224, 99}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{156, 225, 14}:  \"NCTech Ltd\",\n\t[3]byte{156, 225, 118}: \"Cisco Systems, Inc\",\n\t[3]byte{156, 225, 214}: \"Junger Audio-Studiotechnik GmbH\",\n\t[3]byte{156, 226, 48}:  \"JULONG CO,.LTD.\",\n\t[3]byte{156, 227, 63}:  \"Apple, Inc.\",\n\t[3]byte{156, 227, 116}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{156, 230, 53}:  \"Nintendo Co., Ltd.\",\n\t[3]byte{156, 230, 94}:  \"Apple, Inc.\",\n\t[3]byte{156, 230, 231}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{156, 231, 189}: \"Winduskorea co., Ltd\",\n\t[3]byte{156, 232, 43}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{156, 232, 149}: \"New H3C Technologies Co., Ltd\",\n\t[3]byte{156, 233, 28}:  \"zte corporation\",\n\t[3]byte{156, 233, 81}:  \"Shenzhen Sang Fei Consumer Communications Ltd., Co.\",\n\t[3]byte{156, 235, 232}: \"BizLink (Kunshan) Co.,Ltd\",\n\t[3]byte{156, 237, 250}: \"EVUlution AG\",\n\t[3]byte{156, 239, 213}: \"Panda Wireless, Inc.\",\n\t[3]byte{156, 240, 41}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{156, 243, 135}: \"Apple, Inc.\",\n\t[3]byte{156, 244, 142}: \"Apple, Inc.\",\n\t[3]byte{156, 245, 49}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{156, 246, 26}:  \"Carrier Fire & Security\",\n\t[3]byte{156, 246, 125}: \"Ricardo Prague, s.r.o.\",\n\t[3]byte{156, 246, 221}: \"IEEE Registration Authority\",\n\t[3]byte{156, 248, 219}: \"shenzhen eyunmei technology co,.ltd\",\n\t[3]byte{156, 249, 56}:  \"AREVA NP GmbH\",\n\t[3]byte{156, 251, 213}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{156, 251, 241}: \"MESOMATIC GmbH & Co.KG\",\n\t[3]byte{156, 252, 1}:   \"Apple, Inc.\",\n\t[3]byte{156, 252, 209}: \"Aetheris Technology (Shanghai) Co., Ltd.\",\n\t[3]byte{156, 252, 232}: \"Intel Corporate\",\n\t[3]byte{156, 254, 161}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{156, 255, 190}: \"OTSL Inc.\",\n\t[3]byte{156, 255, 194}: \"AVI Systems GmbH\",\n\t[3]byte{160, 2, 220}:   \"Amazon Technologies Inc.\",\n\t[3]byte{160, 3, 99}:    \"Robert Bosch Healthcare GmbH\",\n\t[3]byte{160, 4, 62}:    \"Parker Hannifin Manufacturing Germany GmbH & Co. KG\",\n\t[3]byte{160, 4, 96}:    \"NETGEAR\",\n\t[3]byte{160, 6, 39}:    \"NEXPA System\",\n\t[3]byte{160, 7, 152}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{160, 7, 182}:   \"Advanced Technical Support, Inc.\",\n\t[3]byte{160, 8, 111}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{160, 9, 76}:    \"CenturyLink\",\n\t[3]byte{160, 9, 237}:   \"Avaya Inc\",\n\t[3]byte{160, 10, 191}:  \"Wieson Technologies Co., Ltd.\",\n\t[3]byte{160, 11, 186}:  \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{160, 12, 161}:  \"SKTB SKiT\",\n\t[3]byte{160, 16, 129}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{160, 18, 144}:  \"Avaya Inc\",\n\t[3]byte{160, 18, 219}:  \"TABUCHI ELECTRIC CO.,LTD\",\n\t[3]byte{160, 19, 59}:   \"HiTi Digital, Inc.\",\n\t[3]byte{160, 19, 203}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{160, 20, 61}:   \"PARROT SA\",\n\t[3]byte{160, 22, 92}:   \"Triteka LTD\",\n\t[3]byte{160, 24, 40}:   \"Apple, Inc.\",\n\t[3]byte{160, 24, 89}:   \"Shenzhen Yidashi Electronics Co Ltd\",\n\t[3]byte{160, 25, 23}:   \"Bertel S.p.a.\",\n\t[3]byte{160, 25, 178}:  \"IEEE Registration Authority\",\n\t[3]byte{160, 27, 41}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{160, 28, 5}:    \"NIMAX TELECOM CO.,LTD.\",\n\t[3]byte{160, 28, 141}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{160, 29, 72}:   \"Hewlett Packard\",\n\t[3]byte{160, 30, 11}:   \"MINIX Technology Limited\",\n\t[3]byte{160, 32, 166}:  \"Espressif Inc.\",\n\t[3]byte{160, 33, 149}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{160, 33, 183}:  \"NETGEAR\",\n\t[3]byte{160, 34, 78}:   \"IEEE Registration Authority\",\n\t[3]byte{160, 34, 222}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{160, 35, 27}:   \"TeleComp R&D Corp.\",\n\t[3]byte{160, 35, 159}:  \"Cisco Systems, Inc\",\n\t[3]byte{160, 39, 182}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{160, 40, 51}:   \"IEEE Registration Authority\",\n\t[3]byte{160, 40, 237}:  \"HMD Global Oy\",\n\t[3]byte{160, 43, 184}:  \"Hewlett Packard\",\n\t[3]byte{160, 44, 54}:   \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{160, 45, 19}:   \"AirTies Wireless Networks\",\n\t[3]byte{160, 46, 243}:  \"United Integrated Services Co., Led.\",\n\t[3]byte{160, 50, 153}:  \"Lenovo (Beijing) Co., Ltd.\",\n\t[3]byte{160, 52, 27}:   \"Adero Inc\",\n\t[3]byte{160, 54, 159}:  \"Intel Corporate\",\n\t[3]byte{160, 54, 240}:  \"Comprehensive Power\",\n\t[3]byte{160, 54, 250}:  \"Ettus Research LLC\",\n\t[3]byte{160, 56, 248}:  \"OURA Health Oy\",\n\t[3]byte{160, 57, 238}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{160, 57, 247}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{160, 58, 117}:  \"PSS Belgium N.V.\",\n\t[3]byte{160, 59, 27}:   \"Inspire Tech\",\n\t[3]byte{160, 59, 227}:  \"Apple, Inc.\",\n\t[3]byte{160, 60, 49}:   \"Shenzhen Belon Technology CO.,LTD\",\n\t[3]byte{160, 61, 111}:  \"Cisco Systems, Inc\",\n\t[3]byte{160, 62, 107}:  \"IEEE Registration Authority\",\n\t[3]byte{160, 64, 37}:   \"Actioncable, Inc.\",\n\t[3]byte{160, 64, 65}:   \"SAMWONFA Co.,Ltd.\",\n\t[3]byte{160, 64, 160}:  \"NETGEAR\",\n\t[3]byte{160, 65, 71}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{160, 65, 94}:   \"Opsens Solution Inc.\",\n\t[3]byte{160, 65, 167}:  \"NL Ministry of Defense\",\n\t[3]byte{160, 66, 63}:   \"Tyan Computer Corp\",\n\t[3]byte{160, 66, 70}:   \"IT Telecom Co., Ltd.\",\n\t[3]byte{160, 67, 176}:  \"Hangzhou BroadLink Technology Co.,Ltd\",\n\t[3]byte{160, 67, 219}:  \"Sitael S.p.A.\",\n\t[3]byte{160, 71, 215}:  \"Best IT World (India) Pvt Ltd\",\n\t[3]byte{160, 72, 28}:   \"Hewlett Packard\",\n\t[3]byte{160, 76, 91}:   \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{160, 76, 193}:  \"Helixtech Corp.\",\n\t[3]byte{160, 78, 1}:    \"CENTRAL ENGINEERING co.,ltd.\",\n\t[3]byte{160, 78, 4}:    \"Nokia Corporation\",\n\t[3]byte{160, 78, 167}:  \"Apple, Inc.\",\n\t[3]byte{160, 79, 133}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{160, 79, 212}:  \"ADB Broadband Italia\",\n\t[3]byte{160, 81, 11}:   \"Intel Corporate\",\n\t[3]byte{160, 81, 198}:  \"Avaya Inc\",\n\t[3]byte{160, 85, 79}:   \"Cisco Systems, Inc\",\n\t[3]byte{160, 85, 222}:  \"ARRIS Group, Inc.\",\n\t[3]byte{160, 86, 178}:  \"Harman/Becker Automotive Systems GmbH\",\n\t[3]byte{160, 86, 243}:  \"Apple, Inc.\",\n\t[3]byte{160, 87, 227}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{160, 89, 58}:   \"V.D.S. Video Display Systems srl\",\n\t[3]byte{160, 90, 164}:  \"Grand Products Nevada, Inc.\",\n\t[3]byte{160, 91, 33}:   \"ENVINET GmbH\",\n\t[3]byte{160, 93, 193}:  \"TMCT Co., LTD.\",\n\t[3]byte{160, 93, 231}:  \"DIRECTV, Inc.\",\n\t[3]byte{160, 94, 107}:  \"MELPER Co., Ltd.\",\n\t[3]byte{160, 96, 144}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{160, 98, 96}:   \"Private\",\n\t[3]byte{160, 99, 145}:  \"NETGEAR\",\n\t[3]byte{160, 100, 143}: \"ASKEY COMPUTER CORP\",\n\t[3]byte{160, 101, 24}:  \"VNPT TECHNOLOGY\",\n\t[3]byte{160, 102, 16}:  \"FUJITSU LIMITED\",\n\t[3]byte{160, 103, 190}: \"Sicon srl\",\n\t[3]byte{160, 104, 28}:  \"GD Midea Air-Conditioning Equipment Co.,Ltd.\",\n\t[3]byte{160, 104, 126}: \"ARRIS Group, Inc.\",\n\t[3]byte{160, 105, 134}: \"Wellav Technologies Ltd\",\n\t[3]byte{160, 106, 0}:   \"Verilink Corporation\",\n\t[3]byte{160, 106, 68}:  \"Vizio, Inc\",\n\t[3]byte{160, 108, 236}: \"RIM\",\n\t[3]byte{160, 109, 9}:   \"Intelcan Technosystems Inc.\",\n\t[3]byte{160, 110, 80}:  \"Nanotek Elektronik Sistemler Ltd. Sti.\",\n\t[3]byte{160, 111, 170}: \"LG Innotek\",\n\t[3]byte{160, 112, 153}: \"Beijing Huacan Electronics Co., Ltd\",\n\t[3]byte{160, 113, 169}: \"Nokia Corporation\",\n\t[3]byte{160, 114, 44}:  \"HUMAX Co., Ltd.\",\n\t[3]byte{160, 114, 228}: \"NJ SYSTEM CO.,LTD\",\n\t[3]byte{160, 115, 50}:  \"Cashmaster International Limited\",\n\t[3]byte{160, 115, 252}: \"Rancore Technologies Private Limited\",\n\t[3]byte{160, 117, 145}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{160, 117, 234}: \"BoxLock, Inc.\",\n\t[3]byte{160, 119, 113}: \"Vialis BV\",\n\t[3]byte{160, 120, 186}: \"Pantech Co., Ltd.\",\n\t[3]byte{160, 130, 31}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{160, 130, 172}: \"Linear DMS Solutions Sdn. Bhd.\",\n\t[3]byte{160, 130, 199}: \"P.T.I Co.,LTD\",\n\t[3]byte{160, 132, 203}: \"SonicSensory,Inc.\",\n\t[3]byte{160, 133, 252}: \"Microsoft Corporation\",\n\t[3]byte{160, 134, 29}:  \"Chengdu Fuhuaxin Technology co.,Ltd\",\n\t[3]byte{160, 134, 198}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{160, 134, 236}: \"SAEHAN HITEC Co., Ltd\",\n\t[3]byte{160, 136, 105}: \"Intel Corporate\",\n\t[3]byte{160, 136, 180}: \"Intel Corporate\",\n\t[3]byte{160, 137, 228}: \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{160, 138, 135}: \"HuiZhou KaiYue Electronic Co.,Ltd\",\n\t[3]byte{160, 140, 21}:  \"Gerhard D. Wempe KG\",\n\t[3]byte{160, 140, 155}: \"Xtreme Technologies Corp\",\n\t[3]byte{160, 140, 248}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{160, 140, 253}: \"Hewlett Packard\",\n\t[3]byte{160, 141, 22}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{160, 142, 120}: \"Sagemcom Broadband SAS\",\n\t[3]byte{160, 144, 222}: \"VEEDIMS,LLC\",\n\t[3]byte{160, 145, 105}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{160, 145, 162}: \"OnePlus Electronics (Shenzhen) Co., Ltd.\",\n\t[3]byte{160, 145, 200}: \"zte corporation\",\n\t[3]byte{160, 147, 71}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{160, 147, 81}:  \"Cisco Systems, Inc\",\n\t[3]byte{160, 148, 106}: \"Shenzhen XGTEC Technology Co,.Ltd.\",\n\t[3]byte{160, 149, 12}:  \"China Mobile IOT Company Limited\",\n\t[3]byte{160, 152, 5}:   \"OpenVox Communication Co Ltd\",\n\t[3]byte{160, 152, 237}: \"Shandong Intelligent Optical Communication Development Co., Ltd.\",\n\t[3]byte{160, 153, 155}: \"Apple, Inc.\",\n\t[3]byte{160, 154, 90}:  \"Time Domain\",\n\t[3]byte{160, 155, 18}:  \"China Mobile IOT Company Limited\",\n\t[3]byte{160, 155, 23}:  \"Taicang T&W Electronics\",\n\t[3]byte{160, 155, 189}: \"Total Aviation Solutions Pty Ltd\",\n\t[3]byte{160, 157, 134}: \"Alcatel-Lucent Shanghai Bell Co., Ltd\",\n\t[3]byte{160, 157, 145}: \"SoundBridge\",\n\t[3]byte{160, 157, 193}: \"China Dragon Technology Limited\",\n\t[3]byte{160, 158, 26}:  \"Polar Electro Oy\",\n\t[3]byte{160, 161, 48}:  \"DLI Taiwan Branch office\",\n\t[3]byte{160, 162, 60}:  \"GPMS\",\n\t[3]byte{160, 163, 59}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{160, 163, 184}: \"WISCLOUD\",\n\t[3]byte{160, 163, 226}: \"Actiontec Electronics, Inc\",\n\t[3]byte{160, 164, 197}: \"Intel Corporate\",\n\t[3]byte{160, 166, 92}:  \"Supercomputing Systems AG\",\n\t[3]byte{160, 167, 99}:  \"Polytron Vertrieb GmbH\",\n\t[3]byte{160, 168, 205}: \"Intel Corporate\",\n\t[3]byte{160, 170, 253}: \"EraThink Technologies Corp.\",\n\t[3]byte{160, 171, 27}:  \"D-Link International\",\n\t[3]byte{160, 171, 81}:  \"WEIFANG GOERTEK ELECTRONICS CO.,LTD\",\n\t[3]byte{160, 172, 105}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{160, 173, 161}: \"JMR Electronics, Inc\",\n\t[3]byte{160, 175, 189}: \"Intel Corporate\",\n\t[3]byte{160, 176, 69}:  \"Halong Mining\",\n\t[3]byte{160, 177, 0}:   \"ShenZhen Cando Electronics Co.,Ltd\",\n\t[3]byte{160, 179, 204}: \"Hewlett Packard\",\n\t[3]byte{160, 180, 55}:  \" GD Mission Systems\",\n\t[3]byte{160, 180, 57}:  \"Cisco Systems, Inc\",\n\t[3]byte{160, 180, 165}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{160, 181, 73}:  \"Arcadyan Corporation\",\n\t[3]byte{160, 181, 218}: \"HongKong THTF Co., Ltd\",\n\t[3]byte{160, 182, 98}:  \"Acutvista Innovation Co., Ltd.\",\n\t[3]byte{160, 184, 248}: \"Amgen U.S.A. Inc.\",\n\t[3]byte{160, 185, 237}: \"Skytap\",\n\t[3]byte{160, 186, 184}: \"Pixon Imaging\",\n\t[3]byte{160, 187, 62}:  \"IEEE Registration Authority\",\n\t[3]byte{160, 189, 29}:  \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{160, 189, 205}: \"BSkyB Ltd\",\n\t[3]byte{160, 191, 80}:  \"S.C. ADD-PRODUCTION S.R.L.\",\n\t[3]byte{160, 191, 165}: \"CORESYS\",\n\t[3]byte{160, 194, 222}: \"Costar Video Systems\",\n\t[3]byte{160, 195, 222}: \"Triton Electronic Systems Ltd.\",\n\t[3]byte{160, 196, 165}: \"SYGN HOUSE CO.,LTD\",\n\t[3]byte{160, 197, 98}:  \"ARRIS Group, Inc.\",\n\t[3]byte{160, 197, 137}: \"Intel Corporate\",\n\t[3]byte{160, 197, 242}: \"IEEE Registration Authority\",\n\t[3]byte{160, 198, 236}: \"ShenZhen ANYK Technology Co.,LTD\",\n\t[3]byte{160, 201, 160}: \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{160, 202, 165}: \"INTELLIGENCE TECHNOLOGY OF CEC CO., LTD\",\n\t[3]byte{160, 203, 253}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{160, 204, 43}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{160, 206, 200}: \"CE LINK LIMITED\",\n\t[3]byte{160, 207, 91}:  \"Cisco Systems, Inc\",\n\t[3]byte{160, 207, 245}: \"zte corporation\",\n\t[3]byte{160, 208, 220}: \"Amazon Technologies Inc.\",\n\t[3]byte{160, 209, 42}:  \"AXPRO Technology Inc.\",\n\t[3]byte{160, 211, 122}: \"Intel Corporate\",\n\t[3]byte{160, 211, 133}: \"AUMA Riester GmbH & Co. KG\",\n\t[3]byte{160, 211, 193}: \"Hewlett Packard\",\n\t[3]byte{160, 214, 53}:  \"WBS Technology\",\n\t[3]byte{160, 215, 149}: \"Apple, Inc.\",\n\t[3]byte{160, 216, 7}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{160, 216, 61}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{160, 216, 111}: \"ARGO AI, LLC\",\n\t[3]byte{160, 218, 146}: \"Nanjing Glarun Atten Technology Co. Ltd.\",\n\t[3]byte{160, 220, 4}:   \"Becker-Antriebe GmbH\",\n\t[3]byte{160, 221, 151}: \"PolarLink Technologies, Ltd\",\n\t[3]byte{160, 221, 229}: \"SHARP Corporation\",\n\t[3]byte{160, 222, 5}:   \"JSC \\\"Irbis-T\\\"\",\n\t[3]byte{160, 222, 15}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{160, 223, 21}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{160, 224, 175}: \"Cisco Systems, Inc\",\n\t[3]byte{160, 226, 1}:   \"AVTrace Ltd.(China)\",\n\t[3]byte{160, 226, 90}:  \"Amicus SK, s.r.o.\",\n\t[3]byte{160, 226, 149}: \"DAT System Co.,Ltd\",\n\t[3]byte{160, 228, 83}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{160, 228, 203}: \"Zyxel Communications Corporation\",\n\t[3]byte{160, 229, 52}:  \"Stratec Biomedical AG\",\n\t[3]byte{160, 229, 233}: \"enimai Inc\",\n\t[3]byte{160, 230, 23}:  \"MATIS\",\n\t[3]byte{160, 230, 248}: \"Texas Instruments\",\n\t[3]byte{160, 233, 219}: \"Ningbo FreeWings Technologies Co.,Ltd\",\n\t[3]byte{160, 235, 118}: \"AirCUVE Inc.\",\n\t[3]byte{160, 236, 128}: \"zte corporation\",\n\t[3]byte{160, 236, 249}: \"Cisco Systems, Inc\",\n\t[3]byte{160, 237, 205}: \"Apple, Inc.\",\n\t[3]byte{160, 239, 132}: \"Seine Image Int'l Co., Ltd\",\n\t[3]byte{160, 242, 23}:  \"GE Medical System(China) Co., Ltd. \",\n\t[3]byte{160, 243, 193}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{160, 243, 228}: \"Alcatel-Lucent IPD\",\n\t[3]byte{160, 244, 25}:  \"Nokia Corporation\",\n\t[3]byte{160, 244, 80}:  \"HTC Corporation\",\n\t[3]byte{160, 244, 89}:  \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{160, 244, 121}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{160, 246, 253}: \"Texas Instruments\",\n\t[3]byte{160, 248, 73}:  \"Cisco Systems, Inc\",\n\t[3]byte{160, 248, 149}: \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{160, 249, 183}: \"Ademco Smart Homes Technology(Tianjin)Co.,Ltd.\",\n\t[3]byte{160, 249, 224}: \"VIVATEL COMPANY LIMITED\",\n\t[3]byte{160, 252, 110}: \"Telegrafia a.s.\",\n\t[3]byte{160, 254, 97}:  \"Vivint Wireless Inc. \",\n\t[3]byte{160, 254, 145}: \"AVAT Automation GmbH\",\n\t[3]byte{160, 255, 112}: \"Technicolor CH USA Inc.\",\n\t[3]byte{164, 0, 226}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{164, 1, 48}:    \"ABIsystems Co., LTD\",\n\t[3]byte{164, 2, 185}:   \"Intel Corporate\",\n\t[3]byte{164, 4, 80}:    \"nFore Technology Inc.\",\n\t[3]byte{164, 5, 158}:   \"STA Infinity LLP\",\n\t[3]byte{164, 6, 233}:   \"Texas Instruments\",\n\t[3]byte{164, 7, 182}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{164, 8, 1}:     \"Amazon Technologies Inc.\",\n\t[3]byte{164, 8, 234}:   \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{164, 8, 245}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{164, 9, 203}:   \"Alfred Kaercher GmbH &amp; Co KG\",\n\t[3]byte{164, 11, 237}:  \"Carry Technology Co.,Ltd\",\n\t[3]byte{164, 12, 102}:  \"Shenzhen Colorful Yugong Technology and Development Co., Ltd.\",\n\t[3]byte{164, 12, 195}:  \"Cisco Systems, Inc\",\n\t[3]byte{164, 13, 188}:  \"Xiamen Intretech Inc.\",\n\t[3]byte{164, 14, 43}:   \"Facebook Inc\",\n\t[3]byte{164, 17, 21}:   \"Robert Bosch Engineering and Business Solutions pvt. Ltd.\",\n\t[3]byte{164, 17, 98}:   \"Arlo Technology\",\n\t[3]byte{164, 17, 99}:   \"IEEE Registration Authority\",\n\t[3]byte{164, 17, 148}:  \"Lenovo\",\n\t[3]byte{164, 18, 50}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{164, 18, 66}:   \"NEC Platforms, Ltd.\",\n\t[3]byte{164, 19, 78}:   \"Luxul \",\n\t[3]byte{164, 20, 55}:   \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{164, 21, 102}:  \"WEIFANG GOERTEK ELECTRONICS CO.,LTD\",\n\t[3]byte{164, 21, 136}:  \"ARRIS Group, Inc.\",\n\t[3]byte{164, 22, 231}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{164, 23, 49}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{164, 23, 145}:  \"Shenzhen Decnta Technology Co.,LTD.\",\n\t[3]byte{164, 24, 117}:  \"Cisco Systems, Inc\",\n\t[3]byte{164, 25, 8}:    \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{164, 27, 192}:  \"Fastec Imaging Corporation\",\n\t[3]byte{164, 31, 114}:  \"Dell Inc.\",\n\t[3]byte{164, 33, 138}:  \"Nortel Networks\",\n\t[3]byte{164, 35, 5}:    \"Open Networking Laboratory\",\n\t[3]byte{164, 36, 179}:  \"FlatFrog Laboratories AB\",\n\t[3]byte{164, 36, 221}:  \"Cambrionix Ltd\",\n\t[3]byte{164, 37, 27}:   \"Avaya Inc\",\n\t[3]byte{164, 38, 24}:   \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{164, 38, 85}:   \"LTI Motion (Shanghai) Co., Ltd.\",\n\t[3]byte{164, 40, 183}:  \"Yangtze Memory Technologies Co., Ltd.\",\n\t[3]byte{164, 41, 64}:   \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{164, 41, 131}:  \"Boeing Defence Australia\",\n\t[3]byte{164, 41, 133}:  \"Sichuan AI-Link Technology Co., Ltd.\",\n\t[3]byte{164, 41, 183}:  \"bluesky\",\n\t[3]byte{164, 43, 140}:  \"NETGEAR\",\n\t[3]byte{164, 43, 176}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{164, 44, 8}:    \"Masterwork Automodules\",\n\t[3]byte{164, 48, 122}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{164, 49, 17}:   \"ZIV\",\n\t[3]byte{164, 49, 53}:   \"Apple, Inc.\",\n\t[3]byte{164, 51, 209}:  \"Fibrlink Communications Co.,Ltd.\",\n\t[3]byte{164, 51, 215}:  \"MitraStar Technology Corp.\",\n\t[3]byte{164, 52, 18}:   \"Thales Alenia Space\",\n\t[3]byte{164, 52, 217}:  \"Intel Corporate\",\n\t[3]byte{164, 52, 241}:  \"Texas Instruments\",\n\t[3]byte{164, 53, 35}:   \"Guangdong Donyan Network Technologies Co.,Ltd.\",\n\t[3]byte{164, 56, 49}:   \"RF elements s.r.o.\",\n\t[3]byte{164, 56, 204}:  \"Nintendo Co.,Ltd\",\n\t[3]byte{164, 56, 252}:  \"Plastic Logic\",\n\t[3]byte{164, 58, 105}:  \"Vers Inc\",\n\t[3]byte{164, 59, 14}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{164, 59, 250}:  \"IEEE Registration Authority\",\n\t[3]byte{164, 61, 120}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{164, 62, 81}:   \"ANOV FRANCE\",\n\t[3]byte{164, 62, 160}:  \"iComm HK LIMITED\",\n\t[3]byte{164, 64, 39}:   \"zte corporation\",\n\t[3]byte{164, 68, 209}:  \" Wingtech Group (HongKong）Limited\",\n\t[3]byte{164, 69, 25}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{164, 69, 205}:  \"IoT Diagnostics\",\n\t[3]byte{164, 70, 107}:  \"EOC Technology\",\n\t[3]byte{164, 70, 180}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{164, 70, 250}:  \"AmTRAN Video Corporation\",\n\t[3]byte{164, 74, 211}:  \"ST Electronics(Shanghai) Co.,Ltd\",\n\t[3]byte{164, 75, 21}:   \"Sun Cupid Technology (HK) LTD\",\n\t[3]byte{164, 75, 213}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{164, 76, 17}:   \"Cisco Systems, Inc\",\n\t[3]byte{164, 76, 200}:  \"Dell Inc.\",\n\t[3]byte{164, 78, 45}:   \"Adaptive Wireless Solutions, LLC\",\n\t[3]byte{164, 78, 49}:   \"Intel Corporate\",\n\t[3]byte{164, 79, 41}:   \"IEEE Registration Authority\",\n\t[3]byte{164, 80, 6}:    \"SHENZHEN HUACHUANG SHIDAI TECHNOLOGYCO.,LTD\",\n\t[3]byte{164, 80, 70}:   \"Xiaomi Communications Co Ltd\",\n\t[3]byte{164, 80, 85}:   \"BUSWARE.DE\",\n\t[3]byte{164, 81, 41}:   \"XAG\",\n\t[3]byte{164, 81, 111}:  \"Microsoft Mobile Oy\",\n\t[3]byte{164, 82, 111}:  \"ADB Broadband Italia\",\n\t[3]byte{164, 83, 14}:   \"Cisco Systems, Inc\",\n\t[3]byte{164, 83, 133}:  \"WEIFANG GOERTEK ELECTRONICS CO.,LTD\",\n\t[3]byte{164, 86, 2}:    \"fenglian Technology Co.,Ltd.\",\n\t[3]byte{164, 86, 27}:   \"MCOT Corporation\",\n\t[3]byte{164, 86, 48}:   \"Cisco Systems, Inc\",\n\t[3]byte{164, 86, 204}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{164, 88, 15}:   \"IEEE Registration Authority\",\n\t[3]byte{164, 90, 28}:   \"smart-electronic GmbH\",\n\t[3]byte{164, 92, 39}:   \"Nintendo Co., Ltd.\",\n\t[3]byte{164, 93, 54}:   \"Hewlett Packard\",\n\t[3]byte{164, 93, 161}:  \"ADB Broadband Italia\",\n\t[3]byte{164, 94, 96}:   \"Apple, Inc.\",\n\t[3]byte{164, 95, 155}:  \"Nexell\",\n\t[3]byte{164, 96, 17}:   \"Verifone\",\n\t[3]byte{164, 96, 50}:   \"MRV Communications (Networks) LTD\",\n\t[3]byte{164, 97, 145}:  \"NamJunSa\",\n\t[3]byte{164, 98, 223}:  \"DS Global. Co., LTD\",\n\t[3]byte{164, 99, 161}:  \"Inventus Power Eletronica do Brasil LTDA\",\n\t[3]byte{164, 103, 6}:   \"Apple, Inc.\",\n\t[3]byte{164, 104, 188}: \"Private\",\n\t[3]byte{164, 108, 42}:  \"Cisco Systems, Inc\",\n\t[3]byte{164, 108, 193}: \"LTi REEnergy GmbH\",\n\t[3]byte{164, 108, 241}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{164, 110, 121}: \"DFT System Co.Ltd\",\n\t[3]byte{164, 112, 214}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{164, 113, 116}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{164, 119, 51}:  \"Google, Inc.\",\n\t[3]byte{164, 119, 88}:  \"Ningbo Freewings Technologies Co.,Ltd\",\n\t[3]byte{164, 119, 96}:  \"Nokia Corporation\",\n\t[3]byte{164, 120, 134}: \"Avaya Inc\",\n\t[3]byte{164, 121, 228}: \"KLINFO Corp\",\n\t[3]byte{164, 122, 164}: \"ARRIS Group, Inc.\",\n\t[3]byte{164, 122, 207}: \"VIBICOM COMMUNICATIONS INC.\",\n\t[3]byte{164, 123, 44}:  \"Nokia\",\n\t[3]byte{164, 123, 133}: \"ULTIMEDIA Co Ltd,\",\n\t[3]byte{164, 123, 157}: \"Espressif Inc.\",\n\t[3]byte{164, 124, 20}:  \"ChargeStorm AB\",\n\t[3]byte{164, 124, 31}:  \"Cobham plc\",\n\t[3]byte{164, 124, 201}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{164, 126, 57}:  \"zte corporation\",\n\t[3]byte{164, 129, 122}: \"CIG SHANGHAI CO LTD\",\n\t[3]byte{164, 129, 238}: \"Nokia Corporation\",\n\t[3]byte{164, 130, 105}: \"Datrium, Inc.\",\n\t[3]byte{164, 131, 231}: \"Apple, Inc.\",\n\t[3]byte{164, 132, 49}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{164, 133, 107}: \"Q Electronics Ltd\",\n\t[3]byte{164, 134, 174}: \"Quectel Wireless Solutions Co., Ltd.\",\n\t[3]byte{164, 136, 115}: \"Cisco Systems, Inc\",\n\t[3]byte{164, 137, 91}:  \"ARK INFOSOLUTIONS PVT LTD\",\n\t[3]byte{164, 140, 192}: \"JLG Industries, Inc.\",\n\t[3]byte{164, 140, 219}: \"Lenovo\",\n\t[3]byte{164, 141, 59}:  \"Vizio, Inc\",\n\t[3]byte{164, 142, 10}:  \"DeLaval International AB\",\n\t[3]byte{164, 144, 5}:   \"CHINA GREATWALL COMPUTER SHENZHEN CO.,LTD\",\n\t[3]byte{164, 145, 177}: \"Technicolor\",\n\t[3]byte{164, 146, 203}: \"Nokia\",\n\t[3]byte{164, 147, 63}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{164, 147, 64}:  \"Beijing Supvan Information Technology Co.,Ltd.\",\n\t[3]byte{164, 147, 76}:  \"Cisco Systems, Inc\",\n\t[3]byte{164, 148, 38}:  \"Elgama-Elektronika Ltd.\",\n\t[3]byte{164, 151, 92}:  \"VTech Telecommunications Ltd.\",\n\t[3]byte{164, 151, 177}: \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{164, 151, 187}: \"Hitachi Industrial Equipment Systems Co.,Ltd\",\n\t[3]byte{164, 152, 19}:  \"ARRIS Group, Inc.\",\n\t[3]byte{164, 153, 71}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{164, 153, 129}: \"FuJian Elite Power Tech CO.,LTD.\",\n\t[3]byte{164, 154, 88}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{164, 155, 19}:  \"Digital Check\",\n\t[3]byte{164, 155, 79}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{164, 155, 245}: \"Hybridserver Tec GmbH\",\n\t[3]byte{164, 157, 73}:  \"Ketra, Inc.\",\n\t[3]byte{164, 158, 219}: \"AutoCrib, Inc.\",\n\t[3]byte{164, 159, 133}: \"Lyve Minds, Inc\",\n\t[3]byte{164, 159, 137}: \"Shanghai Rui Rui Communication Technology Co.Ltd.\",\n\t[3]byte{164, 161, 121}: \"Nanjing dianyan electric power automation co. LTD\",\n\t[3]byte{164, 161, 194}: \"Ericsson AB\",\n\t[3]byte{164, 161, 228}: \"Innotube, Inc.\",\n\t[3]byte{164, 162, 74}:  \"Cisco SPVTG\",\n\t[3]byte{164, 164, 211}: \"Bluebank Communication Technology Co.Ltd\",\n\t[3]byte{164, 166, 169}: \"Private\",\n\t[3]byte{164, 168, 15}:  \"Shenzhen Coship Electronics Co., Ltd.\",\n\t[3]byte{164, 172, 15}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{164, 173, 0}:   \"Ragsdale Technology\",\n\t[3]byte{164, 173, 184}: \"Vitec Group, Camera Dynamics Ltd\",\n\t[3]byte{164, 174, 17}:  \"Hon Hai Precision Ind. Co., Ltd.\",\n\t[3]byte{164, 174, 18}:  \"Hon Hai Precision Ind. Co., Ltd.\",\n\t[3]byte{164, 174, 154}: \"Maestro Wireless Solutions ltd.\",\n\t[3]byte{164, 177, 33}:  \"Arantia 2010 S.L.\",\n\t[3]byte{164, 177, 151}: \"Apple, Inc.\",\n\t[3]byte{164, 177, 193}: \"Intel Corporate\",\n\t[3]byte{164, 177, 233}: \"Technicolor\",\n\t[3]byte{164, 177, 238}: \"H. ZANDER GmbH & Co. KG\",\n\t[3]byte{164, 178, 57}:  \"Cisco Systems, Inc\",\n\t[3]byte{164, 178, 167}: \"Adaxys Solutions AG\",\n\t[3]byte{164, 179, 106}: \"JSC SDO Chromatec\",\n\t[3]byte{164, 180, 57}:  \"Cisco Systems, Inc\",\n\t[3]byte{164, 181, 46}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{164, 182, 30}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{164, 184, 5}:   \"Apple, Inc.\",\n\t[3]byte{164, 184, 24}:  \"PENTA Gesellschaft für elektronische Industriedatenverarbeitung mbH\",\n\t[3]byte{164, 185, 128}: \"Parking BOXX Inc.\",\n\t[3]byte{164, 186, 118}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{164, 186, 219}: \"Dell Inc.\",\n\t[3]byte{164, 187, 109}: \"Dell Inc.\",\n\t[3]byte{164, 187, 175}: \"Lime Instruments\",\n\t[3]byte{164, 189, 196}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{164, 190, 43}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{164, 190, 97}:  \"EutroVision System, Inc.\",\n\t[3]byte{164, 191, 1}:   \"Intel Corporate\",\n\t[3]byte{164, 192, 199}: \"ShenZhen Hitom Communication Technology Co..LTD\",\n\t[3]byte{164, 192, 225}: \"Nintendo Co., Ltd.\",\n\t[3]byte{164, 193, 56}:  \"Telink Semiconductor (Taipei) Co. Ltd.\",\n\t[3]byte{164, 194, 171}: \"Hangzhou LEAD-IT Information & Technology Co.,Ltd\",\n\t[3]byte{164, 195, 97}:  \"Apple, Inc.\",\n\t[3]byte{164, 195, 240}: \"Intel Corporate\",\n\t[3]byte{164, 196, 148}: \"Intel Corporate\",\n\t[3]byte{164, 197, 78}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{164, 198, 79}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{164, 199, 75}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{164, 199, 222}: \"Cambridge Industries(Group) Co.,Ltd.\",\n\t[3]byte{164, 201, 57}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{164, 202, 160}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{164, 204, 50}:  \"Inficomm Co., Ltd\",\n\t[3]byte{164, 205, 35}:  \"Shenzhenshi Xinzhongxin  Co., Ltd\",\n\t[3]byte{164, 207, 18}:  \"Espressif Inc.\",\n\t[3]byte{164, 207, 210}: \"Ubee Interactive Co., Limited\",\n\t[3]byte{164, 208, 148}: \"Erwin Peters Systemtechnik GmbH\",\n\t[3]byte{164, 209, 140}: \"Apple, Inc.\",\n\t[3]byte{164, 209, 143}: \"Shenzhen Skyee Optical Fiber Communication Technology Ltd. \",\n\t[3]byte{164, 209, 209}: \"ECOtality North America\",\n\t[3]byte{164, 209, 210}: \"Apple, Inc.\",\n\t[3]byte{164, 211, 181}: \"GLITEL Stropkov, s.r.o.\",\n\t[3]byte{164, 212, 178}: \"Shenzhen MeiG Smart Technology Co.,Ltd\",\n\t[3]byte{164, 213, 120}: \"Texas Instruments\",\n\t[3]byte{164, 216, 86}:  \"Gimbal, Inc\",\n\t[3]byte{164, 216, 202}: \"HONG KONG WATER WORLD TECHNOLOGY CO. LIMITED\",\n\t[3]byte{164, 217, 49}:  \"Apple, Inc.\",\n\t[3]byte{164, 217, 144}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{164, 217, 164}: \"neXus ID Solutions AB\",\n\t[3]byte{164, 218, 34}:  \"IEEE Registration Authority\",\n\t[3]byte{164, 218, 50}:  \"Texas Instruments\",\n\t[3]byte{164, 218, 63}:  \"Bionics Corp.\",\n\t[3]byte{164, 219, 46}:  \"Kingspan Environmental Ltd\",\n\t[3]byte{164, 219, 48}:  \"Liteon Technology Corporation\",\n\t[3]byte{164, 220, 190}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{164, 222, 80}:  \"Total Walther GmbH\",\n\t[3]byte{164, 222, 201}: \"QLove Mobile Intelligence Information Technology (W.H.) Co. Ltd.\",\n\t[3]byte{164, 224, 230}: \"FILIZOLA S.A. PESAGEM E AUTOMACAO\",\n\t[3]byte{164, 227, 27}:  \"Nokia\",\n\t[3]byte{164, 227, 46}:  \"Silicon & Software Systems Ltd.\",\n\t[3]byte{164, 227, 145}: \"DENY FONTAINE\",\n\t[3]byte{164, 228, 184}: \"BlackBerry RTS\",\n\t[3]byte{164, 229, 151}: \"Gessler GmbH\",\n\t[3]byte{164, 230, 21}:  \"SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\",\n\t[3]byte{164, 230, 177}: \"Shanghai Joindata Technology Co.,Ltd.\",\n\t[3]byte{164, 231, 49}:  \"Nokia Corporation\",\n\t[3]byte{164, 231, 228}: \"Connex GmbH\",\n\t[3]byte{164, 233, 117}: \"Apple, Inc.\",\n\t[3]byte{164, 233, 145}: \"SISTEMAS AUDIOVISUALES ITELSIS S.L.\",\n\t[3]byte{164, 233, 163}: \"Honest Technology Co., Ltd\",\n\t[3]byte{164, 234, 142}: \"Extreme Networks, Inc.\",\n\t[3]byte{164, 235, 211}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{164, 237, 67}:  \"IEEE Registration Authority\",\n\t[3]byte{164, 237, 78}:  \"ARRIS Group, Inc.\",\n\t[3]byte{164, 238, 87}:  \"Seiko Epson Corporation\",\n\t[3]byte{164, 239, 82}:  \"Telewave Co., Ltd.\",\n\t[3]byte{164, 240, 94}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{164, 241, 232}: \"Apple, Inc.\",\n\t[3]byte{164, 243, 193}: \"Open Source Robotics Foundation, Inc.\",\n\t[3]byte{164, 243, 231}: \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{164, 244, 101}: \"ITEL MOBILE LIMITED\",\n\t[3]byte{164, 244, 194}: \"VNPT TECHNOLOGY\",\n\t[3]byte{164, 245, 34}:  \"CHOFU SEISAKUSHO CO.,LTD\",\n\t[3]byte{164, 247, 208}: \"LAN Accessories Co., Ltd.\",\n\t[3]byte{164, 250, 118}: \"New H3C Technologies Co., Ltd\",\n\t[3]byte{164, 251, 141}: \"Hangzhou Dunchong Technology Co.Ltd\",\n\t[3]byte{164, 252, 119}: \"Mega Well Limited\",\n\t[3]byte{164, 252, 206}: \"Security Expert Ltd.\",\n\t[3]byte{168, 1, 109}:   \"Aiwa Corporation\",\n\t[3]byte{168, 1, 128}:   \"IMAGO Technologies GmbH\",\n\t[3]byte{168, 2, 219}:   \"zte corporation\",\n\t[3]byte{168, 3, 42}:    \"Espressif Inc.\",\n\t[3]byte{168, 5, 119}:   \"Netlist, Inc.\",\n\t[3]byte{168, 6, 0}:     \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{168, 12, 13}:   \"Cisco Systems, Inc\",\n\t[3]byte{168, 12, 99}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{168, 12, 202}:  \"Shenzhen Sundray Technologies Company Limited\",\n\t[3]byte{168, 16, 135}:  \"Texas Instruments\",\n\t[3]byte{168, 17, 252}:  \"ARRIS Group, Inc.\",\n\t[3]byte{168, 19, 116}:  \"Panasonic Corporation AVC Networks Company\",\n\t[3]byte{168, 21, 77}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{168, 21, 89}:   \"Breathometer, Inc.\",\n\t[3]byte{168, 21, 214}:  \"Shenzhen Meione Technology CO., LTD\",\n\t[3]byte{168, 22, 178}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{168, 22, 208}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{168, 23, 88}:   \"Elektronik System i Umeå AB\",\n\t[3]byte{168, 27, 24}:   \"XTS CORP\",\n\t[3]byte{168, 27, 90}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{168, 27, 93}:   \"Foxtel Management Pty Ltd\",\n\t[3]byte{168, 27, 106}:  \"Texas Instruments\",\n\t[3]byte{168, 29, 22}:   \"AzureWave Technology Inc.\",\n\t[3]byte{168, 30, 132}:  \"Quanta Computer Inc.\",\n\t[3]byte{168, 31, 175}:  \"KRYPTON POLSKA\",\n\t[3]byte{168, 32, 102}:  \"Apple, Inc.\",\n\t[3]byte{168, 35, 254}:  \"LG Electronics\",\n\t[3]byte{168, 36, 184}:  \"Nokia\",\n\t[3]byte{168, 36, 235}:  \"ZAO NPO Introtest\",\n\t[3]byte{168, 37, 235}:  \"Cambridge Industries(Group) Co.,Ltd.\",\n\t[3]byte{168, 38, 217}:  \"HTC Corporation\",\n\t[3]byte{168, 41, 76}:   \"Precision Optical Transceivers, Inc.\",\n\t[3]byte{168, 43, 181}:  \"Edgecore Networks Corporation\",\n\t[3]byte{168, 43, 185}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{168, 43, 205}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{168, 43, 214}:  \"Shina System Co., Ltd\",\n\t[3]byte{168, 48, 173}:  \"WEIFANG GOERTEK ELECTRONICS CO.,LTD\",\n\t[3]byte{168, 48, 188}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{168, 50, 154}:  \"Digicom Futuristic Technologies Ltd.\",\n\t[3]byte{168, 52, 106}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{168, 53, 18}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{168, 54, 122}:  \"frogblue TECHNOLOGY GmbH\",\n\t[3]byte{168, 55, 89}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{168, 57, 68}:   \"Actiontec Electronics, Inc\",\n\t[3]byte{168, 60, 203}:  \"ROSSMA\",\n\t[3]byte{168, 62, 14}:   \"HMD Global Oy\",\n\t[3]byte{168, 63, 161}:  \"IEEE Registration Authority\",\n\t[3]byte{168, 64, 37}:   \"Oxide Computer Company\",\n\t[3]byte{168, 64, 65}:   \"Dragino Technology Co., Limited\",\n\t[3]byte{168, 65, 34}:   \"China Mobile (Hangzhou) Information Technology Co.,Ltd.\",\n\t[3]byte{168, 68, 129}:  \"Nokia Corporation\",\n\t[3]byte{168, 69, 205}:  \"Siselectron Technology LTD.\",\n\t[3]byte{168, 69, 233}:  \"Firich Enterprises CO., LTD.\",\n\t[3]byte{168, 70, 157}:  \"Cisco Meraki\",\n\t[3]byte{168, 71, 74}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{168, 73, 77}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{168, 73, 165}:  \"Lisantech Co., Ltd.\",\n\t[3]byte{168, 77, 74}:   \"Audiowise Technology Inc.\",\n\t[3]byte{168, 78, 63}:   \"Hitron Technologies. Inc\",\n\t[3]byte{168, 81, 91}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{168, 84, 178}:  \"Wistron Neweb Corporation\",\n\t[3]byte{168, 85, 106}:  \"Pocketnet Technology Inc.\",\n\t[3]byte{168, 87, 78}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{168, 88, 64}:   \"Cambridge Industries(Group) Co.,Ltd.\",\n\t[3]byte{168, 90, 224}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{168, 90, 243}:  \"Shanghai Siflower Communication Technology Co., Ltd\",\n\t[3]byte{168, 91, 108}:  \"Robert Bosch Gmbh, CM-CI2\",\n\t[3]byte{168, 91, 120}:  \"Apple, Inc.\",\n\t[3]byte{168, 91, 176}:  \"Shenzhen Dehoo Technology Co.,Ltd\",\n\t[3]byte{168, 91, 243}:  \"Audivo GmbH\",\n\t[3]byte{168, 92, 44}:   \"Apple, Inc.\",\n\t[3]byte{168, 94, 69}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{168, 94, 228}:  \"12Sided Technology, LLC\",\n\t[3]byte{168, 96, 182}:  \"Apple, Inc.\",\n\t[3]byte{168, 97, 10}:   \"ARDUINO AG\",\n\t[3]byte{168, 97, 170}:  \"Cloudview Limited\",\n\t[3]byte{168, 98, 162}:  \"JIWUMEDIA CO., LTD.\",\n\t[3]byte{168, 99, 223}:  \"DISPLAIRE CORPORATION\",\n\t[3]byte{168, 99, 242}:  \"Texas Instruments\",\n\t[3]byte{168, 100, 5}:   \"nimbus 9, Inc\",\n\t[3]byte{168, 101, 178}: \"DONGGUAN YISHANG ELECTRONIC TECHNOLOGY CO., LIMITED\",\n\t[3]byte{168, 102, 127}: \"Apple, Inc.\",\n\t[3]byte{168, 105, 140}: \"Oracle Corporation \",\n\t[3]byte{168, 106, 111}: \"RIM\",\n\t[3]byte{168, 106, 187}: \"Sagemcom Broadband SAS\",\n\t[3]byte{168, 106, 193}: \"HanbitEDS Co., Ltd.\",\n\t[3]byte{168, 107, 124}: \"SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.\",\n\t[3]byte{168, 107, 173}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{168, 109, 95}:  \"Raisecom Technology CO., LTD\",\n\t[3]byte{168, 109, 170}: \"Intel Corporate\",\n\t[3]byte{168, 112, 93}:  \"ARRIS Group, Inc.\",\n\t[3]byte{168, 112, 165}: \"UniComm Inc.\",\n\t[3]byte{168, 114, 133}: \"IDT, INC.\",\n\t[3]byte{168, 116, 29}:  \"PHOENIX CONTACT Electronics GmbH\",\n\t[3]byte{168, 117, 214}: \"FreeTek International Co., Ltd.\",\n\t[3]byte{168, 117, 226}: \"Aventura Technologies, Inc.\",\n\t[3]byte{168, 119, 111}: \"Zonoff\",\n\t[3]byte{168, 123, 57}:  \"Nokia Corporation\",\n\t[3]byte{168, 124, 1}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{168, 125, 18}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{168, 126, 51}:  \"Nokia Danmark A/S\",\n\t[3]byte{168, 126, 234}: \"Intel Corporate\",\n\t[3]byte{168, 128, 56}:  \"ShenZhen MovingComm Technology Co., Limited\",\n\t[3]byte{168, 129, 149}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{168, 129, 241}: \"BMEYE B.V.\",\n\t[3]byte{168, 130, 0}:   \"Hisense Electric Co.,Ltd\",\n\t[3]byte{168, 130, 127}: \"CIBN Oriental Network(Beijing) CO.,Ltd\",\n\t[3]byte{168, 133, 215}: \"Sangfor Technologies Inc.\",\n\t[3]byte{168, 134, 221}: \"Apple, Inc.\",\n\t[3]byte{168, 135, 146}: \"Broadband Antenna Tracking Systems\",\n\t[3]byte{168, 135, 179}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{168, 135, 237}: \"ARC Wireless LLC\",\n\t[3]byte{168, 136, 8}:   \"Apple, Inc.\",\n\t[3]byte{168, 140, 238}: \"MicroMade Galka i Drozdz sp.j.\",\n\t[3]byte{168, 141, 123}: \"SunDroid Global limited.\",\n\t[3]byte{168, 142, 36}:  \"Apple, Inc.\",\n\t[3]byte{168, 144, 8}:   \"Beijing Yuecheng Technology Co. Ltd.\",\n\t[3]byte{168, 144, 66}:  \"Beijing Wanwei Intelligent Technology Co., Ltd.\",\n\t[3]byte{168, 145, 61}:  \"Apple, Inc.\",\n\t[3]byte{168, 146, 44}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{168, 147, 82}:  \"SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD\",\n\t[3]byte{168, 147, 230}: \"JIANGXI JINGGANGSHAN CKING COMMUNICATION TECHNOLOGY CO.,LTD\",\n\t[3]byte{168, 149, 176}: \"Aker Subsea Ltd\",\n\t[3]byte{168, 150, 117}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{168, 150, 138}: \"Apple, Inc.\",\n\t[3]byte{168, 151, 205}: \"ARRIS Group, Inc.\",\n\t[3]byte{168, 151, 220}: \"IBM\",\n\t[3]byte{168, 152, 198}: \"Shinbo Co., Ltd.\",\n\t[3]byte{168, 153, 92}:  \"aizo ag\",\n\t[3]byte{168, 153, 105}: \"Dell Inc.\",\n\t[3]byte{168, 154, 147}: \"Sagemcom Broadband SAS\",\n\t[3]byte{168, 155, 16}:  \"inMotion Ltd.\",\n\t[3]byte{168, 156, 164}: \"Furrion Limited\",\n\t[3]byte{168, 156, 237}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{168, 157, 33}:  \"Cisco Systems, Inc\",\n\t[3]byte{168, 157, 210}: \"Shanghai DareGlobal Technologies Co.,Ltd\",\n\t[3]byte{168, 159, 186}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{168, 159, 236}: \"ARRIS Group, Inc.\",\n\t[3]byte{168, 160, 137}: \"Tactical Communications\",\n\t[3]byte{168, 160, 151}: \"ScioTeq bvba\",\n\t[3]byte{168, 161, 89}:  \"ASRock Incorporation\",\n\t[3]byte{168, 161, 152}: \"TCT mobile ltd\",\n\t[3]byte{168, 165, 226}: \"MSF-Vathauer Antriebstechnik GmbH & Co KG \",\n\t[3]byte{168, 166, 72}:  \"Qingdao Hisense Communications Co.,Ltd.\",\n\t[3]byte{168, 166, 104}: \"zte corporation\",\n\t[3]byte{168, 167, 149}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{168, 173, 61}:  \"Alcatel-Lucent Shanghai Bell Co., Ltd\",\n\t[3]byte{168, 176, 174}: \"LEONI \",\n\t[3]byte{168, 177, 212}: \"Cisco Systems, Inc\",\n\t[3]byte{168, 178, 218}: \"FUJITSU LIMITED\",\n\t[3]byte{168, 180, 86}:  \"Cisco Systems, Inc\",\n\t[3]byte{168, 184, 110}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{168, 185, 179}: \"ESSYS\",\n\t[3]byte{168, 187, 80}:  \"WiZ IoT Company Limited\",\n\t[3]byte{168, 187, 207}: \"Apple, Inc.\",\n\t[3]byte{168, 188, 156}: \"Cloud Light Technology Limited\",\n\t[3]byte{168, 189, 26}:  \"Honey Bee (Hong Kong) Limited\",\n\t[3]byte{168, 189, 39}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{168, 189, 58}:  \"UNIONMAN TECHNOLOGY CO.,LTD\",\n\t[3]byte{168, 190, 39}:  \"Apple, Inc.\",\n\t[3]byte{168, 191, 60}:  \"HDV Phoelectron Technology Limited\",\n\t[3]byte{168, 192, 146}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{168, 192, 234}: \"Pepwave Limited\",\n\t[3]byte{168, 194, 34}:  \"TM-Research Inc.\",\n\t[3]byte{168, 194, 82}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{168, 200, 58}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{168, 200, 127}: \"Roqos, Inc.\",\n\t[3]byte{168, 202, 123}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{168, 202, 185}: \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{168, 203, 149}: \"EAST BEST CO., LTD.\",\n\t[3]byte{168, 204, 197}: \"Saab AB (publ)\",\n\t[3]byte{168, 206, 144}: \"CVC\",\n\t[3]byte{168, 208, 227}: \"Systech Electronics Ltd\",\n\t[3]byte{168, 208, 229}: \"Juniper Networks\",\n\t[3]byte{168, 210, 54}:  \"Lightware Visual Engineering\",\n\t[3]byte{168, 211, 200}: \"Topcon Electronics GmbH & Co. KG\",\n\t[3]byte{168, 211, 247}: \"Arcadyan Technology Corporation\",\n\t[3]byte{168, 212, 9}:   \"USA 111 Inc\",\n\t[3]byte{168, 212, 152}: \"Avira Operations GmbH & Co. KG\",\n\t[3]byte{168, 213, 121}: \"Beijing Chushang Science and Technology Co.,Ltd\",\n\t[3]byte{168, 216, 40}:  \"Ascensia Diabetes Care\",\n\t[3]byte{168, 216, 138}: \"Wyconn\",\n\t[3]byte{168, 218, 1}:   \"Shenzhen NUOLIJIA Digital Technology Co.,Ltd\",\n\t[3]byte{168, 219, 3}:   \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{168, 224, 24}:  \"Nokia Corporation\",\n\t[3]byte{168, 226, 193}: \"Texas Instruments\",\n\t[3]byte{168, 226, 195}: \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{168, 227, 238}: \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{168, 229, 57}:  \"Moimstone Co.,Ltd\",\n\t[3]byte{168, 229, 68}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{168, 229, 82}:  \"JUWEL Aquarium AG & Co. KG\",\n\t[3]byte{168, 231, 5}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{168, 231, 125}: \"Texas Instruments\",\n\t[3]byte{168, 232, 36}:  \"INIM ELECTRONICS S.R.L.\",\n\t[3]byte{168, 233, 120}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{168, 238, 198}: \"Muuselabs NV/SA\",\n\t[3]byte{168, 239, 38}:  \"Tritonwave\",\n\t[3]byte{168, 240, 56}:  \"SHEN ZHEN SHI JIN HUA TAI ELECTRONICS CO.,LTD\",\n\t[3]byte{168, 242, 116}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{168, 244, 112}: \"Fujian Newland Communication Science Technologies Co.,Ltd.\",\n\t[3]byte{168, 245, 172}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{168, 245, 221}: \"ARRIS Group, Inc.\",\n\t[3]byte{168, 247, 224}: \"PLANET Technology Corporation\",\n\t[3]byte{168, 249, 75}:  \"Eltex Enterprise Ltd.\",\n\t[3]byte{168, 250, 216}: \"Apple, Inc.\",\n\t[3]byte{168, 251, 112}: \"WiseSec L.t.d\",\n\t[3]byte{168, 252, 183}: \"Consolidated Resource Imaging\",\n\t[3]byte{170, 0, 0}:     \"DIGITAL EQUIPMENT CORPORATION\",\n\t[3]byte{170, 0, 1}:     \"DIGITAL EQUIPMENT CORPORATION\",\n\t[3]byte{170, 0, 2}:     \"DIGITAL EQUIPMENT CORPORATION\",\n\t[3]byte{170, 0, 3}:     \"DIGITAL EQUIPMENT CORPORATION\",\n\t[3]byte{170, 0, 4}:     \"DIGITAL EQUIPMENT CORPORATION\",\n\t[3]byte{172, 0, 208}:   \"zte corporation\",\n\t[3]byte{172, 1, 66}:    \"Uriel Technologies SIA\",\n\t[3]byte{172, 2, 202}:   \"HI Solutions, Inc.\",\n\t[3]byte{172, 2, 207}:   \"RW Tecnologia Industria e Comercio Ltda\",\n\t[3]byte{172, 2, 239}:   \"Comsis\",\n\t[3]byte{172, 4, 11}:    \"Peloton Interactive, Inc\",\n\t[3]byte{172, 4, 129}:   \"Jiangsu Huaxing Electronics Co., Ltd.\",\n\t[3]byte{172, 6, 19}:    \"Senselogix Ltd\",\n\t[3]byte{172, 6, 199}:   \"ServerNet S.r.l.\",\n\t[3]byte{172, 7, 95}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 10, 97}:   \"Labor S.r.L.\",\n\t[3]byte{172, 13, 27}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{172, 13, 254}:  \"Ekon GmbH - myGEKKO\",\n\t[3]byte{172, 17, 211}:  \"Suzhou HOTEK  Video Technology Co. Ltd\",\n\t[3]byte{172, 18, 3}:    \"Intel Corporate\",\n\t[3]byte{172, 20, 97}:   \"ATAW  Co., Ltd.\",\n\t[3]byte{172, 20, 210}:  \"wi-daq, inc.\",\n\t[3]byte{172, 21, 133}:  \"silergy corp\",\n\t[3]byte{172, 21, 244}:  \"Apple, Inc.\",\n\t[3]byte{172, 22, 45}:   \"Hewlett Packard\",\n\t[3]byte{172, 23, 2}:    \"Fibar Group sp. z o.o.\",\n\t[3]byte{172, 23, 200}:  \"Cisco Meraki\",\n\t[3]byte{172, 24, 38}:   \"Seiko Epson Corporation\",\n\t[3]byte{172, 25, 159}:  \"SUNGROW POWER SUPPLY CO.,LTD.\",\n\t[3]byte{172, 29, 223}:  \"IEEE Registration Authority\",\n\t[3]byte{172, 30, 146}:  \"Samsung Electronics Co.,LTD\",\n\t[3]byte{172, 30, 208}:  \"Temic Automotive Philippines Inc.\",\n\t[3]byte{172, 31, 9}:    \"shenzhen RAKwireless technology  Co.,Ltd\",\n\t[3]byte{172, 31, 107}:  \"Super Micro Computer, Inc.\",\n\t[3]byte{172, 31, 116}:  \"Apple, Inc.\",\n\t[3]byte{172, 31, 215}:  \"Real Vision Technology Co.,Ltd.\",\n\t[3]byte{172, 32, 46}:   \"Hitron Technologies. Inc\",\n\t[3]byte{172, 32, 62}:   \"Wuhan Tianyu Information Industry Co., Ltd.\",\n\t[3]byte{172, 32, 170}:  \"DMATEK Co., Ltd.\",\n\t[3]byte{172, 34, 5}:    \"Compal Broadband Networks, Inc.\",\n\t[3]byte{172, 34, 11}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{172, 35, 52}:   \"Infinix mobility limited\",\n\t[3]byte{172, 35, 63}:   \"Shenzhen Minew Technologies Co., Ltd.\",\n\t[3]byte{172, 41, 58}:   \"Apple, Inc.\",\n\t[3]byte{172, 42, 12}:   \"CSR ZHUZHOU INSTITUTE CO.,LTD.\",\n\t[3]byte{172, 43, 110}:  \"Intel Corporate\",\n\t[3]byte{172, 45, 163}:  \"TXTR GmbH\",\n\t[3]byte{172, 45, 169}:  \"TECNO MOBILE LIMITED\",\n\t[3]byte{172, 47, 168}:  \"Humannix Co.,Ltd.\",\n\t[3]byte{172, 49, 157}:  \"Shenzhen TG-NET Botone Technology Co.,Ltd.\",\n\t[3]byte{172, 52, 203}:  \"Shanhai GBCOM Communication Technology Co. Ltd\",\n\t[3]byte{172, 53, 238}:  \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{172, 54, 19}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{172, 54, 81}:   \"Jiangsu Hengtong Terahertz Technology Co., Ltd.\",\n\t[3]byte{172, 55, 67}:   \"HTC Corporation\",\n\t[3]byte{172, 55, 201}:  \"RAID Incorporated\",\n\t[3]byte{172, 56, 112}:  \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{172, 58, 103}:  \"Cisco Systems, Inc\",\n\t[3]byte{172, 58, 122}:  \"Roku, Inc.\",\n\t[3]byte{172, 59, 119}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{172, 60, 11}:   \"Apple, Inc.\",\n\t[3]byte{172, 60, 142}:  \"Flextronics Computing(Suzhou)Co.,Ltd.\",\n\t[3]byte{172, 60, 180}:  \"Nilan A/S\",\n\t[3]byte{172, 61, 5}:    \"Instorescreen Aisa\",\n\t[3]byte{172, 61, 117}:  \"HANGZHOU ZHIWAY TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{172, 63, 164}:  \"TAIYO YUDEN CO.,LTD\",\n\t[3]byte{172, 64, 234}:  \"C&T Solution Inc. \",\n\t[3]byte{172, 65, 34}:   \"Eclipse Electronic Systems Inc.\",\n\t[3]byte{172, 66, 40}:   \"Parta Networks\",\n\t[3]byte{172, 67, 48}:   \"Versa Networks\",\n\t[3]byte{172, 68, 242}:  \"YAMAHA CORPORATION\",\n\t[3]byte{172, 71, 35}:   \"Genelec\",\n\t[3]byte{172, 72, 45}:   \"Ralinwi Nanjing Electronic Technology Co., Ltd.\",\n\t[3]byte{172, 74, 86}:   \"Cisco Systems, Inc\",\n\t[3]byte{172, 74, 103}:  \"Cisco Systems, Inc\",\n\t[3]byte{172, 74, 254}:  \"Hisense Broadband Multimedia Technology Co.,Ltd.\",\n\t[3]byte{172, 75, 30}:   \"Integri-Sys.Com LLC\",\n\t[3]byte{172, 75, 200}:  \"Juniper Networks\",\n\t[3]byte{172, 78, 46}:   \"Shenzhen JingHanDa Electronics Co.Ltd\",\n\t[3]byte{172, 78, 145}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 79, 252}:  \"SVS-VISTEK GmbH\",\n\t[3]byte{172, 80, 54}:   \"Pi-Coral Inc\",\n\t[3]byte{172, 80, 147}:  \"Magna Electronics Europe GmbH & Co. OHG\",\n\t[3]byte{172, 81, 44}:   \"Infinix mobility limited\",\n\t[3]byte{172, 81, 53}:   \"MPI TECH\",\n\t[3]byte{172, 81, 238}:  \"Cambridge Communication Systems Ltd\",\n\t[3]byte{172, 84, 116}:  \"China Mobile IOT Company Limited\",\n\t[3]byte{172, 84, 236}:  \"IEEE P1823 Standards Working Group\",\n\t[3]byte{172, 86, 44}:   \"LAVA INTERNATIONAL(H.K) LIMITED\",\n\t[3]byte{172, 87, 117}:  \"HMD Global Oy\",\n\t[3]byte{172, 88, 59}:   \"Human Assembler, Inc.\",\n\t[3]byte{172, 88, 123}:  \"JCT Healthcare\",\n\t[3]byte{172, 90, 20}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{172, 90, 238}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{172, 93, 16}:   \"Pace Americas\",\n\t[3]byte{172, 93, 92}:   \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{172, 94, 140}:  \"Utillink\",\n\t[3]byte{172, 95, 62}:   \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{172, 95, 234}:  \"OnePlus Technology (Shenzhen) Co., Ltd\",\n\t[3]byte{172, 96, 137}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 96, 182}:  \"Ericsson AB\",\n\t[3]byte{172, 97, 35}:   \"Drivven, Inc.\",\n\t[3]byte{172, 97, 117}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 97, 185}:  \"WAMA Technology Limited\",\n\t[3]byte{172, 97, 234}:  \"Apple, Inc.\",\n\t[3]byte{172, 98, 13}:   \"Jabil Circuit(Wuxi) Co.,Ltd\",\n\t[3]byte{172, 99, 190}:  \"Amazon Technologies Inc.\",\n\t[3]byte{172, 100, 23}:  \"Siemens AG\",\n\t[3]byte{172, 100, 98}:  \"zte corporation\",\n\t[3]byte{172, 100, 207}: \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{172, 100, 221}: \"IEEE Registration Authority\",\n\t[3]byte{172, 103, 6}:   \"Ruckus Wireless\",\n\t[3]byte{172, 103, 93}:  \"Intel Corporate\",\n\t[3]byte{172, 103, 111}: \"Electrocompaniet A.S.\",\n\t[3]byte{172, 103, 178}: \"Espressif Inc.\",\n\t[3]byte{172, 107, 15}:  \"CADENCE DESIGN SYSTEMS INC\",\n\t[3]byte{172, 107, 172}: \"Jenny Science AG\",\n\t[3]byte{172, 110, 26}:  \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{172, 111, 79}:  \"Enspert Inc\",\n\t[3]byte{172, 111, 187}: \"TATUNG Technology Inc.\",\n\t[3]byte{172, 111, 217}: \"Valueplus Inc.\",\n\t[3]byte{172, 113, 12}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{172, 114, 54}:  \"Lexking Technology Co., Ltd.\",\n\t[3]byte{172, 114, 137}: \"Intel Corporate\",\n\t[3]byte{172, 116, 9}:   \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{172, 117, 29}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 119, 19}:  \"Honeywell Safety Products (Shanghai) Co.,Ltd\",\n\t[3]byte{172, 122, 66}:  \"iConnectivity\",\n\t[3]byte{172, 122, 77}:  \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{172, 122, 86}:  \"Cisco Systems, Inc\",\n\t[3]byte{172, 123, 161}: \"Intel Corporate\",\n\t[3]byte{172, 126, 138}: \"Cisco Systems, Inc\",\n\t[3]byte{172, 127, 62}:  \"Apple, Inc.\",\n\t[3]byte{172, 128, 214}: \"Hexatronic AB\",\n\t[3]byte{172, 129, 18}:  \"Gemtek Technology Co., Ltd.\",\n\t[3]byte{172, 129, 243}: \"Nokia Corporation\",\n\t[3]byte{172, 131, 23}:  \"Shenzhen Furtunetel Communication Co., Ltd\",\n\t[3]byte{172, 131, 233}: \"Beijing Zile Technology Co., Ltd\",\n\t[3]byte{172, 131, 240}: \"ImmediaTV Corporation\",\n\t[3]byte{172, 131, 243}: \"AMPAK Technology, Inc.\",\n\t[3]byte{172, 132, 198}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{172, 132, 201}: \"Sagemcom Broadband SAS\",\n\t[3]byte{172, 133, 61}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 134, 116}: \"Open Mesh, Inc.\",\n\t[3]byte{172, 134, 126}: \"Create New Technology (HK) Limited Company\",\n\t[3]byte{172, 135, 163}: \"Apple, Inc.\",\n\t[3]byte{172, 136, 253}: \"Apple, Inc.\",\n\t[3]byte{172, 137, 149}: \"AzureWave Technology Inc.\",\n\t[3]byte{172, 138, 205}: \"ROGER D.Wensker, G.Wensker sp.j.\",\n\t[3]byte{172, 139, 156}: \"Primera Technology, Inc.\",\n\t[3]byte{172, 141, 20}:  \"Smartrove Inc\",\n\t[3]byte{172, 141, 52}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 143, 248}: \"Nokia\",\n\t[3]byte{172, 144, 133}: \"Apple, Inc.\",\n\t[3]byte{172, 146, 50}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 147, 47}:  \"Nokia Corporation\",\n\t[3]byte{172, 148, 3}:   \"Envision Peripherals Inc\",\n\t[3]byte{172, 149, 114}: \"Jovision Technology Co., Ltd.\",\n\t[3]byte{172, 154, 34}:  \"NXP Semiconductors\",\n\t[3]byte{172, 154, 150}: \"Maxlinear, Inc\",\n\t[3]byte{172, 155, 10}:  \"Sony Corporation\",\n\t[3]byte{172, 155, 132}: \"Smak Tecnologia e Automacao\",\n\t[3]byte{172, 156, 228}: \"Alcatel-Lucent Shanghai Bell Co., Ltd\",\n\t[3]byte{172, 158, 23}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{172, 160, 22}:  \"Cisco Systems, Inc\",\n\t[3]byte{172, 162, 19}:  \"Shenzhen Bilian electronic CO.,LTD\",\n\t[3]byte{172, 162, 44}:  \"Baycity Technologies Ltd\",\n\t[3]byte{172, 163, 30}:  \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{172, 164, 48}:  \"Peerless AV\",\n\t[3]byte{172, 164, 110}: \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{172, 166, 103}: \"Electronic Systems Protection, Inc.\",\n\t[3]byte{172, 168, 142}: \"SHARP Corporation\",\n\t[3]byte{172, 169, 25}:  \"TrekStor GmbH\",\n\t[3]byte{172, 169, 160}: \"Audioengine, Ltd.\",\n\t[3]byte{172, 171, 46}:  \"Beijing LasNubes Technology Co., Ltd.\",\n\t[3]byte{172, 171, 141}: \"Lyngso Marine A/S\",\n\t[3]byte{172, 171, 191}: \"AthenTek Inc.\",\n\t[3]byte{172, 174, 25}:  \"Roku, Inc\",\n\t[3]byte{172, 175, 185}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{172, 177, 238}: \"SHENZHEN FENDA TECHNOLOGY CO., LTD\",\n\t[3]byte{172, 179, 19}:  \"ARRIS Group, Inc.\",\n\t[3]byte{172, 179, 181}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 181, 125}: \"Liteon Technology Corporation\",\n\t[3]byte{172, 183, 79}:  \"METEL s.r.o.\",\n\t[3]byte{172, 184, 89}:  \"Uniband Electronic Corp,\",\n\t[3]byte{172, 187, 97}:  \"YSTen Technology Co.,Ltd\",\n\t[3]byte{172, 188, 50}:  \"Apple, Inc.\",\n\t[3]byte{172, 189, 11}:  \"Leimac Ltd.\",\n\t[3]byte{172, 189, 112}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{172, 190, 117}: \"Ufine Technologies Co.,Ltd.\",\n\t[3]byte{172, 190, 182}: \"Visualedge Technology Co., Ltd.\",\n\t[3]byte{172, 193, 238}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{172, 194, 93}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{172, 194, 236}: \"CLT INT'L IND. CORP.\",\n\t[3]byte{172, 195, 58}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{172, 195, 88}:  \"Continental Automotive Czech Republic s.r.o.\",\n\t[3]byte{172, 197, 27}:  \"Zhuhai Pantum Electronics Co., Ltd.\",\n\t[3]byte{172, 197, 149}: \"Graphite Systems\",\n\t[3]byte{172, 198, 98}:  \"MitraStar Technology Corp.\",\n\t[3]byte{172, 198, 152}: \"Kohzu Precision Co., Ltd.\",\n\t[3]byte{172, 199, 63}:  \"VITSMO CO., LTD.\",\n\t[3]byte{172, 201, 53}:  \"Ness Corporation\",\n\t[3]byte{172, 202, 84}:  \"Telldus Technologies AB\",\n\t[3]byte{172, 202, 142}: \"ODA Technologies\",\n\t[3]byte{172, 202, 171}: \"Virtual Electric Inc\",\n\t[3]byte{172, 202, 186}: \"Midokura Co., Ltd. \",\n\t[3]byte{172, 203, 9}:   \"Hefcom Metering (Pty) Ltd\",\n\t[3]byte{172, 203, 81}:  \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{172, 204, 142}: \"Axis Communications AB\",\n\t[3]byte{172, 206, 143}: \"HWA YAO TECHNOLOGIES CO., LTD\",\n\t[3]byte{172, 207, 35}:  \"Hi-flying electronics technology Co.,Ltd\",\n\t[3]byte{172, 207, 92}:  \"Apple, Inc.\",\n\t[3]byte{172, 207, 133}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 208, 116}: \"Espressif Inc.\",\n\t[3]byte{172, 209, 128}: \"Crexendo Business Solutions, Inc.\",\n\t[3]byte{172, 209, 184}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{172, 211, 100}: \"ABB SPA, ABB SACE DIV.\",\n\t[3]byte{172, 213, 100}: \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{172, 214, 87}:  \"Shaanxi GuoLian Digital TV Technology Co.,Ltd.\",\n\t[3]byte{172, 217, 214}: \"tci GmbH\",\n\t[3]byte{172, 219, 72}:  \"ARRIS Group, Inc.\",\n\t[3]byte{172, 219, 218}: \"Shenzhen Geniatech Inc, Ltd\",\n\t[3]byte{172, 220, 229}: \"Procter & Gamble Company\",\n\t[3]byte{172, 222, 72}:  \"Private\",\n\t[3]byte{172, 224, 16}:  \"Liteon Technology Corporation\",\n\t[3]byte{172, 224, 105}: \"ISAAC Instruments\",\n\t[3]byte{172, 226, 21}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 226, 211}: \"Hewlett Packard\",\n\t[3]byte{172, 227, 66}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 227, 72}:  \"MadgeTech, Inc\",\n\t[3]byte{172, 228, 46}:  \"SK hynix\",\n\t[3]byte{172, 228, 181}: \"Apple, Inc.\",\n\t[3]byte{172, 229, 240}: \"Doppler Labs\",\n\t[3]byte{172, 230, 75}:  \"Shenzhen Baojia Battery Technology Co., Ltd.\",\n\t[3]byte{172, 231, 123}: \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{172, 232, 123}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 232, 126}: \"Bytemark Computer Consulting Ltd\",\n\t[3]byte{172, 233, 127}: \"IoT Tech Limited\",\n\t[3]byte{172, 233, 170}: \"Hay Systems Ltd\",\n\t[3]byte{172, 234, 106}: \"GENIX INFOCOMM CO., LTD.\",\n\t[3]byte{172, 235, 81}:  \"Universal Electronics, Inc.\",\n\t[3]byte{172, 236, 128}: \"ARRIS Group, Inc.\",\n\t[3]byte{172, 237, 92}:  \"Intel Corporate\",\n\t[3]byte{172, 238, 59}:  \"6harmonics Inc\",\n\t[3]byte{172, 238, 112}: \"Fontem Ventures BV\",\n\t[3]byte{172, 238, 158}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{172, 240, 178}: \"Becker Electronics Taiwan Ltd.\",\n\t[3]byte{172, 241, 8}:   \"LG Innotek\",\n\t[3]byte{172, 241, 223}: \"D-Link International\",\n\t[3]byte{172, 242, 197}: \"Cisco Systems, Inc\",\n\t[3]byte{172, 245, 230}: \"Cisco Systems, Inc\",\n\t[3]byte{172, 246, 247}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{172, 247, 243}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{172, 248, 92}:  \"Private\",\n\t[3]byte{172, 248, 204}: \"ARRIS Group, Inc.\",\n\t[3]byte{172, 249, 112}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{172, 249, 126}: \"ELESYS INC.\",\n\t[3]byte{172, 253, 147}: \"WEIFANG GOERTEK ELECTRONICS CO.,LTD\",\n\t[3]byte{172, 253, 206}: \"Intel Corporate\",\n\t[3]byte{172, 253, 236}: \"Apple, Inc.\",\n\t[3]byte{172, 254, 5}:   \"ITEL MOBILE LIMITED\",\n\t[3]byte{176, 0, 115}:   \"Wistron Neweb Corporation\",\n\t[3]byte{176, 0, 180}:   \"Cisco Systems, Inc\",\n\t[3]byte{176, 2, 71}:    \"AMPAK Technology, Inc.\",\n\t[3]byte{176, 2, 126}:   \"MULLER SERVICES\",\n\t[3]byte{176, 5, 148}:   \"Liteon Technology Corporation\",\n\t[3]byte{176, 8, 117}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{176, 8, 191}:   \"Vital Connect, Inc.\",\n\t[3]byte{176, 9, 211}:   \"Avizia\",\n\t[3]byte{176, 9, 218}:   \"Ring Solutions\",\n\t[3]byte{176, 10, 213}:  \"zte corporation\",\n\t[3]byte{176, 12, 209}:  \"Hewlett Packard\",\n\t[3]byte{176, 16, 65}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{176, 18, 3}:    \"Dynamics Hong Kong Limited\",\n\t[3]byte{176, 18, 102}:  \"Futaba-Kikaku\",\n\t[3]byte{176, 20, 8}:    \"LIGHTSPEED INTERNATIONAL CO.\",\n\t[3]byte{176, 23, 67}:   \"EDISON GLOBAL CIRCUITS LLC\",\n\t[3]byte{176, 24, 134}:  \"SmarDTV\",\n\t[3]byte{176, 25, 198}:  \"Apple, Inc.\",\n\t[3]byte{176, 27, 124}:  \"Ontrol A.S.\",\n\t[3]byte{176, 27, 210}:  \"Le Shi Zhi Xin Electronic Technology (Tianjin) Limited\",\n\t[3]byte{176, 28, 145}:  \"Elim Co\",\n\t[3]byte{176, 31, 41}:   \"Helvetia INC.\",\n\t[3]byte{176, 31, 129}:  \"IEEE Registration Authority\",\n\t[3]byte{176, 36, 243}:  \"Progeny Systems\",\n\t[3]byte{176, 37, 170}:  \"Private\",\n\t[3]byte{176, 38, 40}:   \"Broadcom Limited\",\n\t[3]byte{176, 38, 128}:  \"Cisco Systems, Inc\",\n\t[3]byte{176, 42, 31}:   \" Wingtech Group (HongKong）Limited\",\n\t[3]byte{176, 42, 67}:   \"Google, Inc.\",\n\t[3]byte{176, 48, 85}:   \"China Mobile IOT Company Limited\",\n\t[3]byte{176, 48, 200}:  \"Teal Drones, Inc.\",\n\t[3]byte{176, 51, 166}:  \"Juniper Networks\",\n\t[3]byte{176, 52, 149}:  \"Apple, Inc.\",\n\t[3]byte{176, 53, 11}:   \"MOBIWIRE MOBILES (NINGBO) CO.,LTD\",\n\t[3]byte{176, 53, 141}:  \"Nokia Corporation\",\n\t[3]byte{176, 53, 159}:  \"Intel Corporate\",\n\t[3]byte{176, 53, 181}:  \"Apple, Inc.\",\n\t[3]byte{176, 56, 41}:   \"Siliconware Precision Industries Co., Ltd.\",\n\t[3]byte{176, 56, 80}:   \"Nanjing CAS-ZDC IOT SYSTEM CO.,LTD\",\n\t[3]byte{176, 57, 86}:   \"NETGEAR\",\n\t[3]byte{176, 61, 150}:  \"Vision Valley FZ LLC\",\n\t[3]byte{176, 62, 81}:   \"BSkyB Ltd\",\n\t[3]byte{176, 62, 176}:  \"MICRODIA Ltd.\",\n\t[3]byte{176, 64, 137}:  \"Senient Systems LTD\",\n\t[3]byte{176, 65, 29}:   \"ITTIM Technologies\",\n\t[3]byte{176, 65, 111}:  \"Shenzhen Maxtang Computer Co.,Ltd\",\n\t[3]byte{176, 67, 93}:   \"NuLEDs, Inc.\",\n\t[3]byte{176, 68, 20}:   \"New H3C Technologies Co., Ltd\",\n\t[3]byte{176, 69, 2}:    \"Huawei Device Co., Ltd.\",\n\t[3]byte{176, 69, 21}:   \"mira fitness,LLC.\",\n\t[3]byte{176, 69, 25}:   \"TCT mobile ltd\",\n\t[3]byte{176, 69, 69}:   \"YACOUB Automation GmbH\",\n\t[3]byte{176, 70, 252}:  \"MitraStar Technology Corp.\",\n\t[3]byte{176, 71, 191}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{176, 72, 26}:   \"Apple, Inc.\",\n\t[3]byte{176, 72, 122}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{176, 73, 95}:   \"OMRON HEALTHCARE Co., Ltd.\",\n\t[3]byte{176, 75, 191}:  \"PT HAN SUNG ELECTORONICS INDONESIA\",\n\t[3]byte{176, 76, 5}:    \"Fresenius Medical Care Deutschland GmbH\",\n\t[3]byte{176, 78, 38}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{176, 79, 195}:  \"Shenzhen NVC Cloud Technology Co., Ltd.\",\n\t[3]byte{176, 80, 188}:  \"SHENZHEN BASICOM ELECTRONIC CO.,LTD.\",\n\t[3]byte{176, 81, 142}:  \"Holl technology CO.Ltd.\",\n\t[3]byte{176, 82, 22}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{176, 83, 101}:  \"China Mobile IOT Company Limited\",\n\t[3]byte{176, 85, 8}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{176, 87, 6}:    \"Vallox Oy\",\n\t[3]byte{176, 88, 196}:  \"Broadcast Microwave Services, Inc\",\n\t[3]byte{176, 89, 71}:   \"Shenzhen Qihu Intelligent Technology Company Limited\",\n\t[3]byte{176, 90, 218}:  \"Hewlett Packard\",\n\t[3]byte{176, 91, 31}:   \"THERMO FISHER SCIENTIFIC S.P.A.\",\n\t[3]byte{176, 91, 103}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{176, 92, 218}:  \"HP Inc.\",\n\t[3]byte{176, 92, 229}:  \"Nokia Corporation\",\n\t[3]byte{176, 97, 199}:  \"Ericsson-LG Enterprise\",\n\t[3]byte{176, 101, 99}:  \"Shanghai Railway Communication Factory\",\n\t[3]byte{176, 101, 189}: \"Apple, Inc.\",\n\t[3]byte{176, 101, 241}: \"WIO Manufacturing HK Limited\",\n\t[3]byte{176, 103, 47}:  \"Bowers & Wilkins\",\n\t[3]byte{176, 104, 182}: \"Hangzhou OYE Technology Co. Ltd\",\n\t[3]byte{176, 104, 230}: \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{176, 105, 113}: \"DEI Sales, Inc.\",\n\t[3]byte{176, 108, 191}: \"3ality Digital Systems GmbH\",\n\t[3]byte{176, 110, 191}: \"ASUSTek COMPUTER INC.\",\n\t[3]byte{176, 111, 224}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{176, 112, 13}:  \"Nokia\",\n\t[3]byte{176, 112, 45}:  \"Apple, Inc.\",\n\t[3]byte{176, 114, 191}: \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{176, 115, 93}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{176, 117, 12}:  \"QA Cafe\",\n\t[3]byte{176, 117, 77}:  \"Nokia\",\n\t[3]byte{176, 117, 213}: \"zte corporation\",\n\t[3]byte{176, 118, 27}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{176, 119, 172}: \"ARRIS Group, Inc.\",\n\t[3]byte{176, 120, 112}: \"Wi-NEXT, Inc.\",\n\t[3]byte{176, 120, 240}: \"Beijing HuaqinWorld Technology Co.,Ltd.\",\n\t[3]byte{176, 121, 8}:   \"Cummings Engineering\",\n\t[3]byte{176, 121, 60}:  \"Revolv Inc\",\n\t[3]byte{176, 121, 148}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{176, 125, 71}:  \"Cisco Systems, Inc\",\n\t[3]byte{176, 125, 98}:  \"Dipl.-Ing. H. Horstmann GmbH\",\n\t[3]byte{176, 125, 100}: \"Intel Corporate\",\n\t[3]byte{176, 126, 17}:  \"Texas Instruments\",\n\t[3]byte{176, 126, 112}: \"Zadara Storage Ltd.\",\n\t[3]byte{176, 127, 185}: \"NETGEAR\",\n\t[3]byte{176, 128, 140}: \"Laser Light Engines\",\n\t[3]byte{176, 129, 216}: \"I-sys Corp\",\n\t[3]byte{176, 131, 214}: \"ARRIS Group, Inc.\",\n\t[3]byte{176, 131, 254}: \"Dell Inc.\",\n\t[3]byte{176, 134, 158}: \"Chloride S.r.L\",\n\t[3]byte{176, 136, 7}:   \"Strata Worldwide\",\n\t[3]byte{176, 137, 0}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{176, 137, 145}: \"LGE \",\n\t[3]byte{176, 137, 194}: \"Zyptonite\",\n\t[3]byte{176, 139, 207}: \"Cisco Systems, Inc\",\n\t[3]byte{176, 142, 26}:  \"URadio Systems Co., Ltd\",\n\t[3]byte{176, 144, 116}: \"Fulan Electronics Limited\",\n\t[3]byte{176, 144, 126}: \"Cisco Systems, Inc\",\n\t[3]byte{176, 144, 212}: \"Shenzhen Hoin Internet Technology Co., Ltd\",\n\t[3]byte{176, 145, 34}:  \"Texas Instruments\",\n\t[3]byte{176, 145, 52}:  \"Taleo\",\n\t[3]byte{176, 145, 55}:  \"ISis ImageStream Internet Solutions, Inc\",\n\t[3]byte{176, 147, 91}:  \"ARRIS Group, Inc.\",\n\t[3]byte{176, 149, 117}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{176, 149, 142}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{176, 150, 108}: \"Lanbowan Technology Ltd.\",\n\t[3]byte{176, 151, 58}:  \"E-Fuel Corporation\",\n\t[3]byte{176, 152, 43}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{176, 152, 159}: \"LG CNS\",\n\t[3]byte{176, 153, 40}:  \"FUJITSU LIMITED\",\n\t[3]byte{176, 154, 226}: \"STEMMER IMAGING GmbH\",\n\t[3]byte{176, 155, 212}: \"GNH Software India Private Limited\",\n\t[3]byte{176, 159, 186}: \"Apple, Inc.\",\n\t[3]byte{176, 161, 10}:  \"Pivotal Systems Corporation\",\n\t[3]byte{176, 162, 231}: \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{176, 163, 126}: \"QING DAO HAIER TELECOM CO.,LTD.\",\n\t[3]byte{176, 164, 84}:  \"Tripwire Inc.\",\n\t[3]byte{176, 164, 96}:  \"Intel Corporate\",\n\t[3]byte{176, 166, 245}: \"Xaptum, Inc.\",\n\t[3]byte{176, 167, 42}:  \"Ensemble Designs, Inc.\",\n\t[3]byte{176, 167, 55}:  \"Roku, Inc.\",\n\t[3]byte{176, 168, 110}: \"Juniper Networks\",\n\t[3]byte{176, 170, 54}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{176, 170, 119}: \"Cisco Systems, Inc\",\n\t[3]byte{176, 170, 210}: \"Sichuan tianyi kanghe communications co., LTD\",\n\t[3]byte{176, 172, 210}: \"zte corporation\",\n\t[3]byte{176, 172, 250}: \"FUJITSU LIMITED\",\n\t[3]byte{176, 173, 170}: \"Avaya Inc\",\n\t[3]byte{176, 174, 37}:  \"Varikorea\",\n\t[3]byte{176, 177, 19}:  \"Texas Instruments\",\n\t[3]byte{176, 177, 148}: \"zte corporation\",\n\t[3]byte{176, 178, 143}: \"Sagemcom Broadband SAS\",\n\t[3]byte{176, 178, 220}: \"Zyxel Communications Corporation\",\n\t[3]byte{176, 179, 43}:  \"Slican Sp. z o.o.\",\n\t[3]byte{176, 179, 83}:  \"IEEE Registration Authority\",\n\t[3]byte{176, 179, 173}: \"HUMAX Co., Ltd.\",\n\t[3]byte{176, 180, 72}:  \"Texas Instruments\",\n\t[3]byte{176, 181, 195}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{176, 181, 232}: \"Ruroc LTD\",\n\t[3]byte{176, 184, 103}: \"Hewlett Packard Enterprise\",\n\t[3]byte{176, 184, 213}: \"Nanjing Nengrui Auto Equipment CO.,Ltd\",\n\t[3]byte{176, 185, 138}: \"NETGEAR\",\n\t[3]byte{176, 187, 139}: \"WAVETEL TECHNOLOGY LIMITED\",\n\t[3]byte{176, 189, 109}: \"Echostreams Innovative Solutions\",\n\t[3]byte{176, 189, 161}: \"ZAKLAD ELEKTRONICZNY SIMS\",\n\t[3]byte{176, 190, 118}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{176, 191, 153}: \"WIZITDONGDO\",\n\t[3]byte{176, 192, 144}: \"Chicony Electronics Co., Ltd.\",\n\t[3]byte{176, 193, 40}:  \"Adler ELREHA GmbH\",\n\t[3]byte{176, 193, 158}: \"zte corporation\",\n\t[3]byte{176, 194, 5}:   \"BIONIME\",\n\t[3]byte{176, 194, 135}: \"Technicolor CH USA Inc.\",\n\t[3]byte{176, 195, 135}: \"GOEFER, Inc.\",\n\t[3]byte{176, 196, 108}: \"Senseit\",\n\t[3]byte{176, 196, 231}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{176, 197, 84}:  \"D-Link International\",\n\t[3]byte{176, 197, 89}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{176, 197, 202}: \"IEEE Registration Authority\",\n\t[3]byte{176, 198, 154}: \"Juniper Networks\",\n\t[3]byte{176, 199, 69}:  \"BUFFALO.INC\",\n\t[3]byte{176, 200, 63}:  \"Jiangsu Cynray IOT Co., Ltd.\",\n\t[3]byte{176, 200, 173}: \"People Power Company\",\n\t[3]byte{176, 201, 91}:  \"Beijing Symtech CO.,LTD\",\n\t[3]byte{176, 202, 104}: \"Apple, Inc.\",\n\t[3]byte{176, 204, 254}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{176, 206, 24}:  \"Zhejiang shenghui lighting co.,Ltd\",\n\t[3]byte{176, 207, 77}:  \"MI-Zone Technology Ireland\",\n\t[3]byte{176, 208, 156}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{176, 210, 245}: \"Vello Systems, Inc.\",\n\t[3]byte{176, 213, 104}: \"Shenzhen Cultraview Digital Technology Co., Ltd\",\n\t[3]byte{176, 213, 157}: \"Shenzhen Zowee Technology Co., Ltd\",\n\t[3]byte{176, 213, 204}: \"Texas Instruments\",\n\t[3]byte{176, 215, 197}: \"Logipix Ltd\",\n\t[3]byte{176, 215, 204}: \"Tridonic GmbH & Co KG\",\n\t[3]byte{176, 218, 0}:   \"CERA ELECTRONIQUE\",\n\t[3]byte{176, 218, 249}: \"ARRIS Group, Inc.\",\n\t[3]byte{176, 223, 58}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{176, 223, 193}: \"Tenda Technology Co.,Ltd.Dongguan branch\",\n\t[3]byte{176, 224, 60}:  \"TCT mobile ltd\",\n\t[3]byte{176, 225, 126}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{176, 226, 53}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{176, 226, 229}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{176, 227, 157}: \"CAT SYSTEM CO.,LTD.\",\n\t[3]byte{176, 228, 213}: \"Google, Inc.\",\n\t[3]byte{176, 229, 14}:  \"NRG SYSTEMS INC\",\n\t[3]byte{176, 229, 237}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{176, 231, 29}:  \"Shanghai Maigantech Co.,Ltd\",\n\t[3]byte{176, 231, 84}:  \"2Wire Inc\",\n\t[3]byte{176, 231, 222}: \"Homa Technologies JSC\",\n\t[3]byte{176, 232, 146}: \"Seiko Epson Corporation\",\n\t[3]byte{176, 233, 126}: \"Advanced Micro Peripherals\",\n\t[3]byte{176, 234, 188}: \"ASKEY COMPUTER CORP\",\n\t[3]byte{176, 235, 87}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{176, 236, 113}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{176, 236, 143}: \"GMX SAS\",\n\t[3]byte{176, 236, 225}: \"Private\",\n\t[3]byte{176, 238, 69}:  \"AzureWave Technology Inc.\",\n\t[3]byte{176, 238, 123}: \"Roku, Inc\",\n\t[3]byte{176, 241, 163}: \"Fengfan (BeiJing) Technology Co., Ltd. \",\n\t[3]byte{176, 241, 188}: \"Dhemax Ingenieros Ltda\",\n\t[3]byte{176, 241, 236}: \"AMPAK Technology, Inc.\",\n\t[3]byte{176, 245, 48}:  \"Hitron Technologies. Inc\",\n\t[3]byte{176, 248, 147}: \"Shanghai MXCHIP Information Technology Co., Ltd.\",\n\t[3]byte{176, 249, 99}:  \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{176, 250, 235}: \"Cisco Systems, Inc\",\n\t[3]byte{176, 252, 13}:  \"Amazon Technologies Inc.\",\n\t[3]byte{176, 252, 54}:  \"CyberTAN Technology Inc.\",\n\t[3]byte{176, 253, 11}:  \"IEEE Registration Authority\",\n\t[3]byte{176, 254, 189}: \"Private\",\n\t[3]byte{176, 254, 229}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{180, 0, 22}:    \" INGENICO TERMINALS SAS\",\n\t[3]byte{180, 0, 156}:   \"CableWorld Ltd.\",\n\t[3]byte{180, 1, 66}:    \"GCI Science & Technology Co.,LTD\",\n\t[3]byte{180, 2, 22}:    \"Cisco Systems, Inc\",\n\t[3]byte{180, 4, 24}:    \"Smartchip Integrated Inc.\",\n\t[3]byte{180, 5, 93}:    \"Inspur Electronic Information Industry Co.,Ltd.\",\n\t[3]byte{180, 5, 102}:   \"SP Best Corporation Co., LTD.\",\n\t[3]byte{180, 7, 249}:   \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{180, 8, 50}:    \"TC Communications\",\n\t[3]byte{180, 9, 49}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{180, 10, 198}:  \"DEXON Systems Ltd.\",\n\t[3]byte{180, 11, 68}:   \"Smartisan Technology Co., Ltd.\",\n\t[3]byte{180, 11, 120}:  \"Brusa Elektronik AG\",\n\t[3]byte{180, 11, 122}:  \"Brusa Elektronik AG\",\n\t[3]byte{180, 12, 37}:   \"Palo Alto Networks\",\n\t[3]byte{180, 14, 150}:  \"HERAN \",\n\t[3]byte{180, 14, 220}:  \"LG-Ericsson Co.,Ltd.\",\n\t[3]byte{180, 15, 59}:   \"Tenda Technology Co.,Ltd.Dongguan branch\",\n\t[3]byte{180, 15, 179}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{180, 20, 137}:  \"Cisco Systems, Inc\",\n\t[3]byte{180, 21, 19}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{180, 21, 126}:  \"Celona Inc.\",\n\t[3]byte{180, 23, 128}:  \"DTI Group Ltd\",\n\t[3]byte{180, 24, 209}:  \"Apple, Inc.\",\n\t[3]byte{180, 26, 29}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{180, 28, 48}:   \"zte corporation\",\n\t[3]byte{180, 29, 43}:   \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{180, 29, 239}:  \"Internet Laboratories, Inc.\",\n\t[3]byte{180, 33, 29}:   \"Beijing GuangXin Technology Co., Ltd\",\n\t[3]byte{180, 33, 138}:  \"Dog Hunter LLC\",\n\t[3]byte{180, 34, 0}:    \"Brother Industries, LTD.\",\n\t[3]byte{180, 35, 48}:   \"Itron Inc\",\n\t[3]byte{180, 36, 231}:  \"Codetek Technology Co.,Ltd\",\n\t[3]byte{180, 38, 93}:   \"Taicang T&W Electronics\",\n\t[3]byte{180, 40, 241}:  \"E-Prime Co., Ltd.\",\n\t[3]byte{180, 41, 61}:   \"Shenzhen Urovo Technology Co.,Ltd.\",\n\t[3]byte{180, 42, 14}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{180, 42, 57}:   \"ORBIT MERRET, spol. s r. o.\",\n\t[3]byte{180, 44, 146}:  \"Zhejiang Weirong Electronic Co., Ltd\",\n\t[3]byte{180, 44, 190}:  \"Direct Payment Solutions Limited\",\n\t[3]byte{180, 45, 86}:   \"Extreme Networks, Inc.\",\n\t[3]byte{180, 46, 153}:  \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{180, 46, 248}:  \"Eline Technology co.Ltd\",\n\t[3]byte{180, 48, 82}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{180, 48, 192}:  \"York Instruments Ltd\",\n\t[3]byte{180, 49, 184}:  \"Aviwest\",\n\t[3]byte{180, 52, 108}:  \"MATSUNICHI DIGITAL TECHNOLOGY (HONG KONG) LIMITED\",\n\t[3]byte{180, 53, 100}:  \"Fujian Tian Cheng Electron Science & Technical Development Co.,Ltd.\",\n\t[3]byte{180, 53, 247}:  \"Zhejiang Pearmain Electronics Co.ltd.\",\n\t[3]byte{180, 54, 169}:  \"Fibocom Wireless Inc. \",\n\t[3]byte{180, 54, 209}:  \"Renesas Electronics (Penang) Sdn. Bhd.\",\n\t[3]byte{180, 54, 227}:  \"KBVISION GROUP\",\n\t[3]byte{180, 55, 65}:   \"Consert, Inc.\",\n\t[3]byte{180, 55, 209}:  \"IEEE Registration Authority\",\n\t[3]byte{180, 57, 52}:   \"Pen Generations, Inc.\",\n\t[3]byte{180, 57, 57}:   \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{180, 57, 214}:  \"ProCurve Networking by HP\",\n\t[3]byte{180, 58, 40}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{180, 61, 178}:  \"Degreane Horizon\",\n\t[3]byte{180, 62, 59}:   \"Viableware, Inc\",\n\t[3]byte{180, 64, 164}:  \"Apple, Inc.\",\n\t[3]byte{180, 65, 122}:  \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{180, 67, 13}:   \"Broadlink Pty Ltd\",\n\t[3]byte{180, 67, 38}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{180, 71, 94}:   \"Avaya Inc\",\n\t[3]byte{180, 71, 245}:  \"Earda Technologies co Ltd\",\n\t[3]byte{180, 75, 210}:  \"Apple, Inc.\",\n\t[3]byte{180, 75, 214}:  \"IEEE Registration Authority\",\n\t[3]byte{180, 76, 59}:   \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{180, 76, 194}:  \"NR ELECTRIC CO., LTD\",\n\t[3]byte{180, 79, 150}:  \"Zhejiang Xinzailing Technology co., ltd\",\n\t[3]byte{180, 80, 98}:   \"EmBestor Technology Inc.\",\n\t[3]byte{180, 81, 249}:  \"NB Software\",\n\t[3]byte{180, 82, 83}:   \"Seagate Technology\",\n\t[3]byte{180, 82, 125}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{180, 82, 126}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{180, 82, 169}:  \"Texas Instruments\",\n\t[3]byte{180, 84, 89}:   \"China Mobile (Hangzhou) Information Technology Co., Ltd.\",\n\t[3]byte{180, 85, 112}:  \"Borea\",\n\t[3]byte{180, 86, 185}:  \"Teraspek Technologies Co.,Ltd\",\n\t[3]byte{180, 88, 97}:   \"CRemote, LLC\",\n\t[3]byte{180, 92, 164}:  \"Thing-talk Wireless Communication Technologies Corporation Limited\",\n\t[3]byte{180, 93, 80}:   \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{180, 96, 119}:  \"Sichuan Changhong Electric Ltd.\",\n\t[3]byte{180, 96, 237}:  \"Beijing Xiaomi Mobile Software Co., Ltd\",\n\t[3]byte{180, 97, 255}:  \"Lumigon A/S\",\n\t[3]byte{180, 98, 56}:   \"Exablox\",\n\t[3]byte{180, 98, 147}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{180, 98, 173}:  \"Elysia Germany GmbH\",\n\t[3]byte{180, 102, 152}: \"Zealabs srl\",\n\t[3]byte{180, 103, 233}: \"Qingdao GoerTek Technology Co., Ltd.\",\n\t[3]byte{180, 105, 33}:  \"Intel Corporate\",\n\t[3]byte{180, 107, 252}: \"Intel Corporate\",\n\t[3]byte{180, 108, 71}:  \"Panasonic Appliances Company\",\n\t[3]byte{180, 109, 53}:  \"Dalian Seasky Automation Co;Ltd\",\n\t[3]byte{180, 109, 131}: \"Intel Corporate\",\n\t[3]byte{180, 110, 8}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{180, 111, 45}:  \"Wahoo Fitness\",\n\t[3]byte{180, 115, 86}:  \"Hangzhou Treebear Networking Co., Ltd.\",\n\t[3]byte{180, 116, 67}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{180, 116, 71}:  \"CoreOS\",\n\t[3]byte{180, 116, 159}: \"ASKEY COMPUTER CORP\",\n\t[3]byte{180, 117, 14}:  \"Belkin International Inc.\",\n\t[3]byte{180, 119, 72}:  \"Shenzhen Neoway Technology Co.,Ltd.\",\n\t[3]byte{180, 121, 71}:  \"Nutanix\",\n\t[3]byte{180, 121, 167}: \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{180, 121, 200}: \"Ruckus Wireless\",\n\t[3]byte{180, 122, 241}: \"Hewlett Packard Enterprise\",\n\t[3]byte{180, 124, 41}:  \"Shenzhen Guzidi Technology Co.,Ltd\",\n\t[3]byte{180, 124, 89}:  \"Jiangsu Hengxin Technology Co.,Ltd.\",\n\t[3]byte{180, 124, 156}: \"Amazon Technologies Inc.\",\n\t[3]byte{180, 127, 94}:  \"Foresight Manufacture (S) Pte Ltd\",\n\t[3]byte{180, 129, 7}:   \"SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\",\n\t[3]byte{180, 129, 191}: \"Meta-Networks, LLC\",\n\t[3]byte{180, 130, 85}:  \"Research Products Corporation\",\n\t[3]byte{180, 130, 123}: \"AKG Acoustics GmbH\",\n\t[3]byte{180, 130, 197}: \"Relay2, Inc.\",\n\t[3]byte{180, 130, 254}: \"ASKEY COMPUTER CORP\",\n\t[3]byte{180, 133, 71}:  \"Amptown System Company GmbH\",\n\t[3]byte{180, 134, 85}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{180, 137, 16}:  \"Coster T.E. S.P.A.\",\n\t[3]byte{180, 139, 25}:  \"Apple, Inc.\",\n\t[3]byte{180, 148, 78}:  \"WeTelecom Co., Ltd.\",\n\t[3]byte{180, 150, 145}: \"Intel Corporate\",\n\t[3]byte{180, 152, 66}:  \"zte corporation\",\n\t[3]byte{180, 153, 76}:  \"Texas Instruments\",\n\t[3]byte{180, 153, 186}: \"Hewlett Packard\",\n\t[3]byte{180, 154, 149}: \"Shenzhen Boomtech Industrial Corporation\",\n\t[3]byte{180, 156, 223}: \"Apple, Inc.\",\n\t[3]byte{180, 157, 11}:  \"BQ\",\n\t[3]byte{180, 157, 180}: \"Axion Technologies Inc.\",\n\t[3]byte{180, 158, 128}: \"Sichuan Changhong Electric Ltd.\",\n\t[3]byte{180, 158, 172}: \"Imagik Int'l Corp\",\n\t[3]byte{180, 158, 230}: \"SHENZHEN TECHNOLOGY CO LTD\",\n\t[3]byte{180, 162, 235}: \"IEEE Registration Authority\",\n\t[3]byte{180, 163, 5}:   \"XIAMEN YAXON NETWORK CO., LTD.\",\n\t[3]byte{180, 163, 130}: \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{180, 164, 181}: \"Zen Eye Co.,Ltd\",\n\t[3]byte{180, 164, 227}: \"Cisco Systems, Inc\",\n\t[3]byte{180, 165, 169}: \"MODI GmbH\",\n\t[3]byte{180, 165, 172}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{180, 165, 239}: \"Sercomm Corporation.\",\n\t[3]byte{180, 168, 40}:  \"Shenzhen Concox Information Technology Co., Ltd\",\n\t[3]byte{180, 168, 43}:  \"Histar Digital Electronics Co., Ltd.\",\n\t[3]byte{180, 168, 152}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{180, 168, 185}: \"Cisco Systems, Inc\",\n\t[3]byte{180, 169, 79}:  \"MERCURY CORPORATION\",\n\t[3]byte{180, 169, 90}:  \"Avaya Inc\",\n\t[3]byte{180, 169, 132}: \"Symantec Corporation\",\n\t[3]byte{180, 169, 252}: \"Quanta Computer Inc.\",\n\t[3]byte{180, 169, 254}: \"GHIA Technology (Shenzhen) LTD\",\n\t[3]byte{180, 170, 77}:  \"Ensequence, Inc.\",\n\t[3]byte{180, 171, 44}:  \"MtM Technology Corporation\",\n\t[3]byte{180, 173, 163}: \"Guangzhou\\u00a0Shiyuan\\u00a0Electronic\\u00a0Technology\\u00a0Company\\u00a0Limited\",\n\t[3]byte{180, 174, 43}:  \"Microsoft\",\n\t[3]byte{180, 174, 111}: \"Circle Reliance, Inc DBA Cranberry Networks\",\n\t[3]byte{180, 176, 23}:  \"Avaya Inc\",\n\t[3]byte{180, 176, 85}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{180, 177, 90}:  \"Siemens AG Energy Management Division\",\n\t[3]byte{180, 178, 101}: \"DAEHO I&T\",\n\t[3]byte{180, 179, 98}:  \"zte corporation\",\n\t[3]byte{180, 179, 132}: \"ShenZhen Figigantic Electronic Co.,Ltd\",\n\t[3]byte{180, 181, 47}:  \"Hewlett Packard\",\n\t[3]byte{180, 181, 66}:  \"Hubbell Power Systems, Inc.\",\n\t[3]byte{180, 181, 175}: \"Minsung Electronics\",\n\t[3]byte{180, 182, 118}: \"Intel Corporate\",\n\t[3]byte{180, 182, 134}: \"Hewlett Packard\",\n\t[3]byte{180, 184, 89}:  \"Texa Spa\",\n\t[3]byte{180, 184, 141}: \"Thuh Company\",\n\t[3]byte{180, 188, 124}: \"Texas Instruments\",\n\t[3]byte{180, 191, 246}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{180, 192, 245}: \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{180, 193, 112}: \"Yi chip Microelectronics (Hangzhou) Co., Ltd\",\n\t[3]byte{180, 194, 106}: \"Garmin International\",\n\t[3]byte{180, 196, 78}:  \"VXL eTech Pvt Ltd\",\n\t[3]byte{180, 196, 118}: \"Wuhan Maritime Communication Research Institute\",\n\t[3]byte{180, 196, 252}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{180, 198, 46}:  \"Molex CMS\",\n\t[3]byte{180, 198, 248}: \"Axilspot Communication\",\n\t[3]byte{180, 199, 153}: \"Extreme Networks, Inc.\",\n\t[3]byte{180, 200, 16}:  \"UMPI Elettronica\",\n\t[3]byte{180, 201, 185}: \"Sichuan AI-Link Technology Co., Ltd.\",\n\t[3]byte{180, 203, 87}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{180, 204, 4}:   \"Piranti\",\n\t[3]byte{180, 204, 233}: \"PROSYST\",\n\t[3]byte{180, 205, 39}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{180, 206, 64}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{180, 206, 246}: \"HTC Corporation\",\n\t[3]byte{180, 206, 254}: \"James Czekaj\",\n\t[3]byte{180, 207, 219}: \"Shenzhen Jiuzhou Electric Co.,LTD\",\n\t[3]byte{180, 207, 224}: \"Sichuan tianyi kanghe communications co., LTD\",\n\t[3]byte{180, 208, 169}: \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{180, 209, 53}:  \"Cloudistics\",\n\t[3]byte{180, 213, 189}: \"Intel Corporate\",\n\t[3]byte{180, 214, 78}:  \"Caldero Limited\",\n\t[3]byte{180, 216, 169}: \"BetterBots\",\n\t[3]byte{180, 216, 222}: \"iota Computing, Inc.\",\n\t[3]byte{180, 220, 9}:   \"Guangzhou Dawei Communication Co.,Ltd\",\n\t[3]byte{180, 221, 21}:  \"ControlThings Oy Ab\",\n\t[3]byte{180, 221, 208}: \"Continental Automotive Hungary Kft\",\n\t[3]byte{180, 222, 49}:  \"Cisco Systems, Inc\",\n\t[3]byte{180, 222, 223}: \"zte corporation\",\n\t[3]byte{180, 223, 59}:  \"Chromlech\",\n\t[3]byte{180, 223, 250}: \"Litemax Electronics Inc.\",\n\t[3]byte{180, 224, 29}:  \"CONCEPTION ELECTRONIQUE\",\n\t[3]byte{180, 224, 205}: \"Fusion-io, Inc\",\n\t[3]byte{180, 225, 15}:  \"Dell Inc.\",\n\t[3]byte{180, 225, 196}: \"Microsoft Mobile Oy\",\n\t[3]byte{180, 225, 235}: \"Private\",\n\t[3]byte{180, 230, 42}:  \"LG Innotek\",\n\t[3]byte{180, 230, 45}:  \"Espressif Inc.\",\n\t[3]byte{180, 231, 130}: \"Vivalnk\",\n\t[3]byte{180, 232, 66}:  \"Hong Kong Bouffalo Lab Limited\",\n\t[3]byte{180, 232, 201}: \"XADA Technologies\",\n\t[3]byte{180, 233, 163}: \"port industrial automation GmbH\",\n\t[3]byte{180, 233, 176}: \"Cisco Systems, Inc\",\n\t[3]byte{180, 236, 2}:   \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{180, 236, 242}: \"Shanghai Listent Medical Tech Co., Ltd.\",\n\t[3]byte{180, 237, 25}:  \"Pie Digital, Inc.\",\n\t[3]byte{180, 237, 84}:  \"Wohler Technologies\",\n\t[3]byte{180, 238, 37}:  \"Shenzhen Belon Technology CO.,LTD\",\n\t[3]byte{180, 238, 180}: \"ASKEY COMPUTER CORP\",\n\t[3]byte{180, 238, 212}: \"Texas Instruments\",\n\t[3]byte{180, 239, 4}:   \"DAIHAN Scientific Co., Ltd.\",\n\t[3]byte{180, 239, 28}:  \"360 AI Technology Co.Ltd\",\n\t[3]byte{180, 239, 57}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{180, 239, 250}: \"Lemobile Information Technology (Beijing) Co., Ltd.\",\n\t[3]byte{180, 240, 171}: \"Apple, Inc.\",\n\t[3]byte{180, 241, 140}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{180, 241, 218}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{180, 242, 232}: \"ARRIS Group, Inc.\",\n\t[3]byte{180, 243, 35}:  \"PETATEL INC.\",\n\t[3]byte{180, 245, 142}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{180, 246, 28}:  \"Apple, Inc.\",\n\t[3]byte{180, 247, 161}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{180, 248, 30}:  \"Kinova\",\n\t[3]byte{180, 249, 73}:  \"optilink networks pvt ltd\",\n\t[3]byte{180, 251, 228}: \"Ubiquiti Networks Inc.\",\n\t[3]byte{180, 251, 249}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{180, 252, 117}: \"SEMA Electronics(HK) CO.,LTD\",\n\t[3]byte{180, 254, 140}: \"Centro Sicurezza Italia SpA\",\n\t[3]byte{184, 0, 24}:    \"Htel\",\n\t[3]byte{184, 2, 164}:   \"Aeonsemi, Inc.\",\n\t[3]byte{184, 3, 5}:     \"Intel Corporate\",\n\t[3]byte{184, 4, 21}:    \"Bayan Audio\",\n\t[3]byte{184, 5, 171}:   \"zte corporation\",\n\t[3]byte{184, 7, 22}:    \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{184, 7, 86}:    \"Cisco Meraki\",\n\t[3]byte{184, 8, 207}:   \"Intel Corporate\",\n\t[3]byte{184, 8, 215}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{184, 9, 138}:   \"Apple, Inc.\",\n\t[3]byte{184, 11, 157}:  \"ROPEX Industrie-Elektronik GmbH\",\n\t[3]byte{184, 16, 212}:  \"Masimo Corporation\",\n\t[3]byte{184, 19, 233}:  \"Trace Live Network\",\n\t[3]byte{184, 20, 19}:   \"Keen High Holding(HK) Ltd.\",\n\t[3]byte{184, 22, 25}:   \"ARRIS Group, Inc.\",\n\t[3]byte{184, 22, 219}:  \"CHANT SINCERE CO.,LTD\",\n\t[3]byte{184, 23, 194}:  \"Apple, Inc.\",\n\t[3]byte{184, 24, 111}:  \"ORIENTAL MOTOR CO., LTD.\",\n\t[3]byte{184, 25, 4}:    \"Nokia Shanghai Bell Co., Ltd.\",\n\t[3]byte{184, 25, 153}:  \"Nesys\",\n\t[3]byte{184, 29, 170}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{184, 31, 94}:   \"Apption Labs Limited\",\n\t[3]byte{184, 32, 231}:  \"Guangzhou Horizontal Information & Network Integration Co. Ltd\",\n\t[3]byte{184, 34, 79}:   \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{184, 36, 16}:   \"Magneti Marelli Slovakia s.r.o.\",\n\t[3]byte{184, 36, 26}:   \"SWEDA INFORMATICA LTDA\",\n\t[3]byte{184, 36, 240}:  \"SOYO Technology Development Co., Ltd.\",\n\t[3]byte{184, 37, 154}:  \"Thalmic Labs \",\n\t[3]byte{184, 38, 108}:  \"ANOV France\",\n\t[3]byte{184, 38, 212}:  \"Furukawa Industrial S.A. Produtos Elétricos\",\n\t[3]byte{184, 39, 197}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{184, 39, 235}:  \"Raspberry Pi Foundation\",\n\t[3]byte{184, 40, 139}:  \"Parker Hannifin Manufacturing (UK) Ltd\",\n\t[3]byte{184, 41, 247}:  \"Blaster Tech\",\n\t[3]byte{184, 42, 114}:  \"Dell Inc.\",\n\t[3]byte{184, 42, 220}:  \"EFR Europäische Funk-Rundsteuerung GmbH\",\n\t[3]byte{184, 44, 160}:  \"Resideo\",\n\t[3]byte{184, 47, 203}:  \"CMS Electracom\",\n\t[3]byte{184, 48, 168}:  \"Road-Track Telematics Development\",\n\t[3]byte{184, 49, 181}:  \"Microsoft Corporation\",\n\t[3]byte{184, 50, 65}:   \"Wuhan Tianyu Information Industry Co., Ltd.\",\n\t[3]byte{184, 54, 216}:  \"Videoswitch\",\n\t[3]byte{184, 55, 101}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{184, 56, 97}:   \"Cisco Systems, Inc\",\n\t[3]byte{184, 56, 202}:  \"Kyokko Tsushin System CO.,LTD\",\n\t[3]byte{184, 58, 8}:    \"Tenda Technology Co.,Ltd.Dongguan branch\",\n\t[3]byte{184, 58, 90}:   \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{184, 58, 123}:  \"Worldplay (Canada) Inc.\",\n\t[3]byte{184, 58, 157}:  \"Alarm.com\",\n\t[3]byte{184, 61, 78}:   \"Shenzhen Cultraview Digital Technology Co.,Ltd Shanghai Branch\",\n\t[3]byte{184, 62, 89}:   \"Roku, Inc.\",\n\t[3]byte{184, 65, 95}:   \"ASP AG\",\n\t[3]byte{184, 65, 164}:  \"Apple, Inc.\",\n\t[3]byte{184, 67, 228}:  \"Vlatacom\",\n\t[3]byte{184, 68, 217}:  \"Apple, Inc.\",\n\t[3]byte{184, 71, 198}:  \"SanJet Technology Corp.\",\n\t[3]byte{184, 72, 170}:  \"EM Microelectronic\",\n\t[3]byte{184, 77, 238}:  \"Hisense broadband multimedia technology Co.,Ltd\",\n\t[3]byte{184, 79, 213}:  \"Microsoft Corporation\",\n\t[3]byte{184, 80, 1}:    \"Extreme Networks, Inc.\",\n\t[3]byte{184, 83, 172}:  \"Apple, Inc.\",\n\t[3]byte{184, 85, 16}:   \"Zioncom Electronics (Shenzhen) Ltd.\",\n\t[3]byte{184, 86, 189}:  \"ITT LLC\",\n\t[3]byte{184, 87, 118}:  \"lignex1\",\n\t[3]byte{184, 87, 216}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{184, 88, 16}:   \"NUMERA, INC.\",\n\t[3]byte{184, 89, 159}:  \"Mellanox Technologies, Inc.\",\n\t[3]byte{184, 90, 115}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{184, 90, 247}:  \"Ouya, Inc\",\n\t[3]byte{184, 90, 254}:  \"Handaer Communication Technology (Beijing) Co., Ltd\",\n\t[3]byte{184, 93, 10}:   \"Apple, Inc.\",\n\t[3]byte{184, 94, 123}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{184, 95, 152}:  \"Amazon Technologies Inc.\",\n\t[3]byte{184, 96, 145}:  \"Onnet Technologies and Innovations LLC\",\n\t[3]byte{184, 97, 66}:   \"Beijing Tricolor Technology Co., Ltd\",\n\t[3]byte{184, 97, 111}:  \"Accton Technology Corp\",\n\t[3]byte{184, 98, 31}:   \"Cisco Systems, Inc\",\n\t[3]byte{184, 99, 77}:   \"Apple, Inc.\",\n\t[3]byte{184, 99, 146}:  \"GUANGDONG GENIUS TECHNOLOGY CO., LTD.\",\n\t[3]byte{184, 99, 188}:  \"ROBOTIS, Co, Ltd\",\n\t[3]byte{184, 100, 145}: \"CK Telecom Ltd\",\n\t[3]byte{184, 101, 59}:  \"Bolymin, Inc.\",\n\t[3]byte{184, 102, 133}: \"Sagemcom Broadband SAS\",\n\t[3]byte{184, 105, 194}: \"Sunitec Enterprise Co., Ltd.\",\n\t[3]byte{184, 105, 244}: \"Routerboard.com\",\n\t[3]byte{184, 106, 151}: \"Edgecore Networks Corporation\",\n\t[3]byte{184, 107, 35}:  \"Toshiba\",\n\t[3]byte{184, 108, 232}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{184, 112, 244}: \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{184, 116, 36}:  \"Viessmann Elektronik GmbH\",\n\t[3]byte{184, 116, 71}:  \"Convergence Technologies\",\n\t[3]byte{184, 117, 192}: \"PayPal, Inc.\",\n\t[3]byte{184, 118, 63}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{184, 119, 195}: \"METER Group\",\n\t[3]byte{184, 120, 38}:  \"Nintendo Co.,Ltd\",\n\t[3]byte{184, 120, 46}:  \"Apple, Inc.\",\n\t[3]byte{184, 120, 121}: \"Roche Diagnostics GmbH\",\n\t[3]byte{184, 121, 126}: \"Secure Meters (UK) Limited\",\n\t[3]byte{184, 122, 201}: \"Siemens Ltd.\",\n\t[3]byte{184, 123, 197}: \"Apple, Inc.\",\n\t[3]byte{184, 124, 111}: \"NXP (China) Management Ltd.\",\n\t[3]byte{184, 124, 242}: \"Extreme Networks, Inc.\",\n\t[3]byte{184, 128, 53}:  \"Shenzhen Qihu Intelligent Technology Company Limited\",\n\t[3]byte{184, 128, 79}:  \"Texas Instruments\",\n\t[3]byte{184, 129, 152}: \"Intel Corporate\",\n\t[3]byte{184, 131, 3}:   \"Hewlett Packard Enterprise\",\n\t[3]byte{184, 133, 132}: \"Dell Inc.\",\n\t[3]byte{184, 134, 135}: \"Liteon Technology Corporation\",\n\t[3]byte{184, 135, 30}:  \"Good Mind Industries Co., Ltd.\",\n\t[3]byte{184, 135, 168}: \"Step Ahead Innovations Inc.\",\n\t[3]byte{184, 135, 198}: \"Prudential Technology co.,LTD\",\n\t[3]byte{184, 136, 227}: \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{184, 137, 129}: \"Chengdu InnoThings Technology Co., Ltd.\",\n\t[3]byte{184, 137, 202}: \"ILJIN ELECTRIC Co., Ltd.\",\n\t[3]byte{184, 138, 96}:  \"Intel Corporate\",\n\t[3]byte{184, 138, 236}: \"Nintendo Co.,Ltd\",\n\t[3]byte{184, 141, 18}:  \"Apple, Inc.\",\n\t[3]byte{184, 142, 58}:  \"Infinite Technologies JLT\",\n\t[3]byte{184, 142, 130}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{184, 142, 198}: \"Stateless Networks\",\n\t[3]byte{184, 142, 223}: \"Zencheer Communication Technology Co., Ltd.\",\n\t[3]byte{184, 143, 20}:  \"Analytica GmbH\",\n\t[3]byte{184, 143, 180}: \"JABIL CIRCUIT ITALIA S.R.L\",\n\t[3]byte{184, 144, 71}:  \"Apple, Inc.\",\n\t[3]byte{184, 145, 201}: \"Handreamnet\",\n\t[3]byte{184, 146, 29}:  \"BG T&A\",\n\t[3]byte{184, 148, 54}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{184, 148, 210}: \"Retail Innovation HTT AB\",\n\t[3]byte{184, 150, 116}: \"AllDSP GmbH & Co. KG\",\n\t[3]byte{184, 151, 90}:  \"BIOSTAR Microtech Int'l Corp.\",\n\t[3]byte{184, 152, 176}: \"Atlona Inc.\",\n\t[3]byte{184, 152, 247}: \"Gionee Communication Equipment Co,Ltd.ShenZhen\",\n\t[3]byte{184, 153, 25}:  \"7signal Solutions, Inc\",\n\t[3]byte{184, 153, 174}: \"Shenzhen MiaoMing  Intelligent Technology Co.,Ltd\",\n\t[3]byte{184, 153, 176}: \"Cohere Technologies\",\n\t[3]byte{184, 154, 42}:  \"Intel Corporate\",\n\t[3]byte{184, 154, 154}: \"Xin Shi Jia Technology (Beijing) Co.,Ltd\",\n\t[3]byte{184, 154, 205}: \"ELITE OPTOELECTRONIC(ASIA)CO.,LTD\",\n\t[3]byte{184, 154, 237}: \"OceanServer Technology, Inc\",\n\t[3]byte{184, 155, 201}: \"SMC Networks Inc\",\n\t[3]byte{184, 155, 228}: \"ABB Power Systems Power Generation\",\n\t[3]byte{184, 159, 9}:   \"Wistron Neweb Corporation\",\n\t[3]byte{184, 161, 117}: \"Roku, Inc.\",\n\t[3]byte{184, 163, 134}: \"D-Link International\",\n\t[3]byte{184, 163, 224}: \"BenRui Technology Co.,Ltd\",\n\t[3]byte{184, 164, 79}:  \"Axis Communications AB\",\n\t[3]byte{184, 165, 141}: \"Axe Group Holdings Limited\",\n\t[3]byte{184, 168, 175}: \"Logic S.p.A.\",\n\t[3]byte{184, 172, 111}: \"Dell Inc.\",\n\t[3]byte{184, 173, 62}:  \"BLUECOM\",\n\t[3]byte{184, 174, 110}: \"Nintendo Co., Ltd.\",\n\t[3]byte{184, 174, 237}: \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{184, 175, 103}: \"Hewlett Packard\",\n\t[3]byte{184, 177, 199}: \"BT&COM CO.,LTD\",\n\t[3]byte{184, 178, 235}: \"Googol Technology (HK) Limited\",\n\t[3]byte{184, 178, 248}: \"Apple, Inc.\",\n\t[3]byte{184, 179, 220}: \"DEREK (SHAOGUAN) LIMITED\",\n\t[3]byte{184, 180, 46}:  \"Gionee Communication Equipment Co,Ltd.ShenZhen\",\n\t[3]byte{184, 183, 215}: \"2GIG Technologies\",\n\t[3]byte{184, 183, 241}: \"Wistron Neweb Corporation\",\n\t[3]byte{184, 184, 30}:  \"Intel Corporate\",\n\t[3]byte{184, 185, 78}:  \"Shenzhen iBaby Labs, Inc.\",\n\t[3]byte{184, 186, 104}: \"Xi'an Jizhong Digital Communication Co.,Ltd\",\n\t[3]byte{184, 186, 114}: \"Cynove\",\n\t[3]byte{184, 187, 35}:  \"Guangdong Nufront CSC Co., Ltd\",\n\t[3]byte{184, 187, 109}: \"ENERES Co.,Ltd.\",\n\t[3]byte{184, 187, 175}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{184, 188, 27}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{184, 188, 91}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{184, 189, 121}: \"TrendPoint Systems\",\n\t[3]byte{184, 190, 191}: \"Cisco Systems, Inc\",\n\t[3]byte{184, 190, 244}: \"devolo AG\",\n\t[3]byte{184, 191, 131}: \"Intel Corporate\",\n\t[3]byte{184, 193, 17}:  \"Apple, Inc.\",\n\t[3]byte{184, 193, 162}: \"Dragon Path Technologies Co., Limited\",\n\t[3]byte{184, 194, 39}:  \"PSTec\",\n\t[3]byte{184, 194, 83}:  \"Juniper Networks\",\n\t[3]byte{184, 195, 133}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{184, 195, 191}: \"Henan Chengshi NetWork Technology Co.，Ltd\",\n\t[3]byte{184, 196, 111}: \"PRIMMCON INDUSTRIES INC\",\n\t[3]byte{184, 198, 142}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{184, 198, 170}: \"Earda Technologies co Ltd\",\n\t[3]byte{184, 199, 22}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{184, 199, 74}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{184, 199, 93}:  \"Apple, Inc.\",\n\t[3]byte{184, 200, 85}:  \"Shanghai GBCOM Communication Technology Co.,Ltd.\",\n\t[3]byte{184, 200, 235}: \"ITEL MOBILE LIMITED\",\n\t[3]byte{184, 201, 181}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{184, 202, 4}:   \"Holtek Semiconductor Inc.\",\n\t[3]byte{184, 202, 58}:  \"Dell Inc.\",\n\t[3]byte{184, 203, 41}:  \"Dell Inc.\",\n\t[3]byte{184, 205, 147}: \"Penetek, Inc\",\n\t[3]byte{184, 205, 167}: \"Maxeler Technologies Ltd.\",\n\t[3]byte{184, 206, 246}: \"Mellanox Technologies, Inc.\",\n\t[3]byte{184, 208, 111}: \"GUANGZHOU HKUST FOK YING TUNG RESEARCH INSTITUTE\",\n\t[3]byte{184, 211, 9}:   \"Cox Communications, Inc\",\n\t[3]byte{184, 212, 157}: \"M Seven System Ltd.\",\n\t[3]byte{184, 212, 231}: \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{184, 213, 11}:  \"Sunitec Enterprise Co.,Ltd\",\n\t[3]byte{184, 213, 38}:  \"Zyxel Communications Corporation\",\n\t[3]byte{184, 215, 175}: \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{184, 216, 18}:  \"IEEE Registration Authority\",\n\t[3]byte{184, 217, 77}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{184, 217, 206}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{184, 218, 241}: \"Strahlenschutz- Entwicklungs- und Ausruestungsgesellschaft mbH\",\n\t[3]byte{184, 218, 247}: \"Advanced Photonics, Inc.\",\n\t[3]byte{184, 219, 28}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{184, 220, 135}: \"IAI Corporation\",\n\t[3]byte{184, 221, 113}: \"zte corporation\",\n\t[3]byte{184, 222, 94}:  \"LONGCHEER TELECOMMUNICATION LIMITED\",\n\t[3]byte{184, 223, 107}: \"SpotCam Co., Ltd.\",\n\t[3]byte{184, 227, 177}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{184, 227, 238}: \"Universal Electronics, Inc.\",\n\t[3]byte{184, 229, 137}: \"Payter BV\",\n\t[3]byte{184, 230, 37}:  \"2Wire Inc\",\n\t[3]byte{184, 231, 121}: \"9Solutions Oy\",\n\t[3]byte{184, 232, 86}:  \"Apple, Inc.\",\n\t[3]byte{184, 233, 55}:  \"Sonos, Inc.\",\n\t[3]byte{184, 234, 170}: \"ICG NETWORKS CO.,ltd\",\n\t[3]byte{184, 236, 163}: \"Zyxel Communications Corporation\",\n\t[3]byte{184, 238, 14}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{184, 238, 101}: \"Liteon Technology Corporation\",\n\t[3]byte{184, 238, 121}: \"YWire Technologies, Inc.\",\n\t[3]byte{184, 239, 139}: \"SHENZHEN CANNICE TECHNOLOGY CO.,LTD\",\n\t[3]byte{184, 240, 9}:   \"Espressif Inc.\",\n\t[3]byte{184, 240, 128}: \"SPS, INC.\",\n\t[3]byte{184, 241, 42}:  \"Apple, Inc.\",\n\t[3]byte{184, 243, 23}:  \"iSun Smasher Communications Private Limited\",\n\t[3]byte{184, 244, 208}: \"Herrmann Ultraschalltechnik GmbH & Co. Kg\",\n\t[3]byte{184, 245, 231}: \"WayTools, LLC\",\n\t[3]byte{184, 246, 83}:  \"Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd\",\n\t[3]byte{184, 246, 177}: \"Apple, Inc.\",\n\t[3]byte{184, 247, 50}:  \"Aryaka Networks Inc\",\n\t[3]byte{184, 247, 74}:  \"RCNTEC\",\n\t[3]byte{184, 248, 40}:  \"Changshu Gaoshida Optoelectronic Technology Co. Ltd.\",\n\t[3]byte{184, 248, 83}:  \"Arcadyan Corporation\",\n\t[3]byte{184, 248, 131}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{184, 248, 190}: \"BLUECOM\",\n\t[3]byte{184, 249, 52}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{184, 252, 154}: \"Le Shi Zhi Xin Electronic Technology (Tianjin) Limited\",\n\t[3]byte{184, 253, 50}:  \"Zhejiang ROICX Microelectronics\",\n\t[3]byte{184, 255, 97}:  \"Apple, Inc.\",\n\t[3]byte{184, 255, 111}: \"Shanghai Typrotech Technology Co.Ltd\",\n\t[3]byte{184, 255, 179}: \"MitraStar Technology Corp.\",\n\t[3]byte{184, 255, 254}: \"Texas Instruments\",\n\t[3]byte{188, 2, 0}:     \"Stewart Audio\",\n\t[3]byte{188, 2, 74}:    \"HMD Global Oy\",\n\t[3]byte{188, 3, 167}:   \"MFP MICHELIN\",\n\t[3]byte{188, 5, 67}:    \"AVM GmbH\",\n\t[3]byte{188, 9, 99}:    \"Apple, Inc.\",\n\t[3]byte{188, 13, 165}:  \"Texas Instruments\",\n\t[3]byte{188, 15, 43}:   \"FORTUNE TECHGROUP CO.,LTD\",\n\t[3]byte{188, 15, 100}:  \"Intel Corporate\",\n\t[3]byte{188, 15, 154}:  \"D-Link International\",\n\t[3]byte{188, 15, 167}:  \"Ouster\",\n\t[3]byte{188, 18, 94}:   \"Beijing  WisVideo  INC.\",\n\t[3]byte{188, 19, 168}:  \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{188, 20, 1}:    \"Hitron Technologies. Inc\",\n\t[3]byte{188, 20, 133}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 20, 239}:  \"ITON Technology Limited\",\n\t[3]byte{188, 21, 166}:  \"Taiwan Jantek Electronics,Ltd.\",\n\t[3]byte{188, 21, 172}:  \"Vodafone Italia S.p.A.\",\n\t[3]byte{188, 22, 101}:  \"Cisco Systems, Inc\",\n\t[3]byte{188, 22, 149}:  \"zte corporation\",\n\t[3]byte{188, 22, 245}:  \"Cisco Systems, Inc\",\n\t[3]byte{188, 23, 184}:  \"Intel Corporate\",\n\t[3]byte{188, 26, 103}:  \"YF Technology Co., Ltd\",\n\t[3]byte{188, 26, 228}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{188, 28, 129}:  \"Sichuan iLink Technology Co., Ltd.\",\n\t[3]byte{188, 32, 164}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 32, 186}:  \"Inspur (Shandong) Electronic Information Co., Ltd\",\n\t[3]byte{188, 34, 251}:  \"RF Industries\",\n\t[3]byte{188, 35, 146}:  \"BYD Precision Manufacture Company Ltd.\",\n\t[3]byte{188, 37, 224}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{188, 37, 240}:  \"3D Display Technologies Co., Ltd.\",\n\t[3]byte{188, 38, 29}:   \"HONG KONG TECON TECHNOLOGY\",\n\t[3]byte{188, 38, 67}:   \"Elprotronic Inc.\",\n\t[3]byte{188, 38, 161}:  \"FACTORY FIVE Corporation\",\n\t[3]byte{188, 38, 199}:  \"Cisco Systems, Inc\",\n\t[3]byte{188, 40, 44}:   \"e-Smart Systems Pvt. Ltd\",\n\t[3]byte{188, 40, 70}:   \"NextBIT Computing Pvt. Ltd.\",\n\t[3]byte{188, 40, 214}:  \"Rowley Associates Limited\",\n\t[3]byte{188, 43, 107}:  \"Beijing Haier IC Design Co.,Ltd\",\n\t[3]byte{188, 43, 215}:  \"Revogi Innovation Co., Ltd.\",\n\t[3]byte{188, 44, 85}:   \"Bear Flag Design, Inc.\",\n\t[3]byte{188, 45, 152}:  \"ThinGlobal LLC\",\n\t[3]byte{188, 45, 239}:  \"Realme Chongqing Mobile Telecommunications Corp.,Ltd.\",\n\t[3]byte{188, 46, 72}:   \"ARRIS Group, Inc.\",\n\t[3]byte{188, 46, 246}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{188, 47, 61}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{188, 48, 91}:   \"Dell Inc.\",\n\t[3]byte{188, 48, 125}:  \"Wistron Neweb Corporation\",\n\t[3]byte{188, 48, 126}:  \"Wistron Neweb Corporation\",\n\t[3]byte{188, 48, 217}:  \"Arcadyan Corporation\",\n\t[3]byte{188, 50, 95}:   \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{188, 51, 172}:  \"Silicon Laboratories\",\n\t[3]byte{188, 52, 0}:    \"IEEE Registration Authority\",\n\t[3]byte{188, 53, 229}:  \"Hydro Systems Company\",\n\t[3]byte{188, 56, 101}:  \"JWCNETWORKS\",\n\t[3]byte{188, 56, 210}:  \"Pandachip Limited\",\n\t[3]byte{188, 57, 166}:  \"CSUN System Technology Co.,LTD\",\n\t[3]byte{188, 57, 217}:  \"Z-TEC\",\n\t[3]byte{188, 58, 234}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{188, 59, 175}:  \"Apple, Inc.\",\n\t[3]byte{188, 61, 133}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{188, 62, 7}:    \"Hitron Technologies. Inc\",\n\t[3]byte{188, 62, 19}:   \"Accordance Systems Inc.\",\n\t[3]byte{188, 63, 78}:   \"Teleepoch Ltd\",\n\t[3]byte{188, 63, 143}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{188, 65, 0}:    \"CODACO ELECTRONIC s.r.o.\",\n\t[3]byte{188, 65, 1}:    \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{188, 66, 140}:  \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{188, 67, 119}:  \"Hang Zhou Huite Technology Co.,ltd.\",\n\t[3]byte{188, 68, 52}:   \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{188, 68, 134}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 68, 176}:  \"Elastifile\",\n\t[3]byte{188, 69, 46}:   \"Knowledge Development for POF S.L.\",\n\t[3]byte{188, 70, 153}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{188, 71, 96}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 74, 86}:   \"Cisco Systems, Inc\",\n\t[3]byte{188, 75, 121}:  \"SensingTek\",\n\t[3]byte{188, 76, 196}:  \"Apple, Inc.\",\n\t[3]byte{188, 77, 251}:  \"Hitron Technologies. Inc\",\n\t[3]byte{188, 78, 60}:   \"CORE STAFF CO., LTD.\",\n\t[3]byte{188, 78, 93}:   \"ZhongMiao Technology Co., Ltd.\",\n\t[3]byte{188, 81, 254}:  \"Swann communications Pty Ltd\",\n\t[3]byte{188, 82, 180}:  \"Nokia\",\n\t[3]byte{188, 82, 183}:  \"Apple, Inc.\",\n\t[3]byte{188, 84, 47}:   \"Intel Corporate\",\n\t[3]byte{188, 84, 54}:   \"Apple, Inc.\",\n\t[3]byte{188, 84, 81}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 84, 249}:  \"Drogoo Technology Co., Ltd.\",\n\t[3]byte{188, 84, 252}:  \"SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{188, 90, 86}:   \"Cisco Systems, Inc\",\n\t[3]byte{188, 92, 76}:   \"ELECOM CO.,LTD.\",\n\t[3]byte{188, 94, 161}:  \"PsiKick, Inc.\",\n\t[3]byte{188, 95, 244}:  \"ASRock Incorporation\",\n\t[3]byte{188, 95, 246}:  \"MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{188, 96, 16}:   \"Qingdao Hisense Communications Co.,Ltd.\",\n\t[3]byte{188, 96, 167}:  \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{188, 98, 14}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{188, 98, 159}:  \"Telenet Systems P. Ltd.\",\n\t[3]byte{188, 98, 210}:  \"Genexis International B.V.\",\n\t[3]byte{188, 100, 75}:  \"ARRIS Group, Inc.\",\n\t[3]byte{188, 102, 65}:  \"IEEE Registration Authority\",\n\t[3]byte{188, 102, 222}: \"Shadow Creator Information Technology Co.,Ltd.\",\n\t[3]byte{188, 103, 28}:  \"Cisco Systems, Inc\",\n\t[3]byte{188, 103, 120}: \"Apple, Inc.\",\n\t[3]byte{188, 103, 132}: \"Environics Oy\",\n\t[3]byte{188, 106, 22}:  \"tdvine\",\n\t[3]byte{188, 106, 41}:  \"Texas Instruments\",\n\t[3]byte{188, 106, 47}:  \"Henge Docks LLC\",\n\t[3]byte{188, 106, 68}:  \"Commend International GmbH\",\n\t[3]byte{188, 107, 77}:  \"Nokia\",\n\t[3]byte{188, 108, 33}:  \"Apple, Inc.\",\n\t[3]byte{188, 110, 100}: \"Sony Mobile Communications Inc\",\n\t[3]byte{188, 110, 118}: \"Green Energy Options Ltd\",\n\t[3]byte{188, 113, 193}: \"XTrillion, Inc.\",\n\t[3]byte{188, 114, 177}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 116, 215}: \"HangZhou JuRu Technology CO.,LTD\",\n\t[3]byte{188, 117, 54}:  \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{188, 117, 116}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{188, 117, 150}: \"Beijing Broadwit Technology Co., Ltd.\",\n\t[3]byte{188, 118, 78}:  \"Rackspace US, Inc.\",\n\t[3]byte{188, 118, 94}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 118, 112}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{188, 118, 197}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{188, 119, 55}:  \"Intel Corporate\",\n\t[3]byte{188, 119, 159}: \"SBM Co., Ltd.\",\n\t[3]byte{188, 121, 173}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 122, 191}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 125, 209}: \"Radio Data Comms\",\n\t[3]byte{188, 126, 139}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 127, 123}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{188, 127, 164}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{188, 129, 31}:  \"Ingate Systems\",\n\t[3]byte{188, 129, 153}: \"BASIC Co.,Ltd.\",\n\t[3]byte{188, 130, 93}:  \"MITSUMI ELECTRIC CO.,LTD.\",\n\t[3]byte{188, 131, 133}: \"Microsoft Corporation\",\n\t[3]byte{188, 131, 167}: \"SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\",\n\t[3]byte{188, 133, 31}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 133, 86}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{188, 136, 147}: \"VILLBAU Ltd.\",\n\t[3]byte{188, 136, 195}: \"Ningbo Dooya Mechanic & Electronic Technology Co., Ltd\",\n\t[3]byte{188, 138, 163}: \"NHN Entertainment\",\n\t[3]byte{188, 138, 232}: \"QING DAO HAIER TELECOM CO.,LTD.\",\n\t[3]byte{188, 139, 85}:  \"NPP ELIKS America Inc. DBA T&M Atlantic\",\n\t[3]byte{188, 140, 205}: \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{188, 141, 14}:  \"Nokia\",\n\t[3]byte{188, 144, 58}:  \"Robert Bosch GmbH\",\n\t[3]byte{188, 145, 181}: \"Infinix mobility limited\",\n\t[3]byte{188, 146, 107}: \"Apple, Inc.\",\n\t[3]byte{188, 147, 37}:  \"Ningbo Joyson Preh Car Connect Co.,Ltd.  \",\n\t[3]byte{188, 150, 128}: \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{188, 151, 64}:  \"IEEE Registration Authority\",\n\t[3]byte{188, 151, 225}: \"Broadcom Limited\",\n\t[3]byte{188, 152, 137}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{188, 152, 223}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{188, 153, 17}:  \"Zyxel Communications Corporation\",\n\t[3]byte{188, 153, 188}: \"FonSee Technology Inc.\",\n\t[3]byte{188, 155, 104}: \"Technicolor CH USA Inc.\",\n\t[3]byte{188, 156, 49}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{188, 156, 197}: \"Beijing Huafei Technology Co., Ltd.\",\n\t[3]byte{188, 157, 165}: \"DASCOM Europe GmbH\",\n\t[3]byte{188, 159, 228}: \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{188, 159, 239}: \"Apple, Inc.\",\n\t[3]byte{188, 160, 66}:  \"SHANGHAI FLYCO ELECTRICAL APPLIANCE CO.,LTD\",\n\t[3]byte{188, 161, 58}:  \"SES-imagotag\",\n\t[3]byte{188, 164, 225}: \"Nabto\",\n\t[3]byte{188, 165, 17}:  \"NETGEAR\",\n\t[3]byte{188, 165, 139}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 168, 166}: \"Intel Corporate\",\n\t[3]byte{188, 169, 32}:  \"Apple, Inc.\",\n\t[3]byte{188, 169, 147}: \"Cambium Networks Limited\",\n\t[3]byte{188, 169, 214}: \"Cyber-Rain, Inc.\",\n\t[3]byte{188, 171, 124}: \"TRnP KOREA Co Ltd\",\n\t[3]byte{188, 173, 40}:  \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{188, 173, 171}: \"Avaya Inc\",\n\t[3]byte{188, 174, 197}: \"ASUSTek COMPUTER INC.\",\n\t[3]byte{188, 175, 145}: \"TE Connectivity Sensor Solutions\",\n\t[3]byte{188, 176, 231}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{188, 177, 129}: \"SHARP CORPORATION\",\n\t[3]byte{188, 177, 243}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 178, 43}:  \"EM-Tech\",\n\t[3]byte{188, 179, 8}:   \"HONGKONG RAGENTEK COMMUNICATION TECHNOLOGY CO.,LIMITED\",\n\t[3]byte{188, 184, 82}:  \"Cybera, Inc.\",\n\t[3]byte{188, 184, 99}:  \"Apple, Inc.\",\n\t[3]byte{188, 186, 194}: \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{188, 186, 225}: \"AREC Inc.\",\n\t[3]byte{188, 187, 201}: \"Kellendonk Elektronik GmbH\",\n\t[3]byte{188, 188, 70}:  \"SKS Welding Systems GmbH\",\n\t[3]byte{188, 192, 15}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{188, 193, 104}: \"DinBox Sverige AB\",\n\t[3]byte{188, 194, 58}:  \"Thomson Video Networks\",\n\t[3]byte{188, 195, 27}:  \"Kygo Life A\",\n\t[3]byte{188, 195, 66}:  \"Panasonic Communications Co., Ltd.\",\n\t[3]byte{188, 196, 147}: \"Cisco Systems, Inc\",\n\t[3]byte{188, 198, 26}:  \"SPECTRA EMBEDDED SYSTEMS\",\n\t[3]byte{188, 198, 219}: \"Nokia Corporation\",\n\t[3]byte{188, 200, 16}:  \"Cisco SPVTG\",\n\t[3]byte{188, 202, 181}: \"ARRIS Group, Inc.\",\n\t[3]byte{188, 205, 69}:  \"VOISMART\",\n\t[3]byte{188, 207, 79}:  \"Zyxel Communications Corporation\",\n\t[3]byte{188, 207, 204}: \"HTC Corporation\",\n\t[3]byte{188, 209, 31}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 209, 101}: \"Cisco SPVTG\",\n\t[3]byte{188, 209, 119}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{188, 209, 211}: \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{188, 213, 182}: \"d2d technologies\",\n\t[3]byte{188, 215, 19}:  \"Owl Labs\",\n\t[3]byte{188, 215, 103}: \"Private\",\n\t[3]byte{188, 217, 64}:  \"ASR Co,.Ltd.\",\n\t[3]byte{188, 221, 194}: \"Espressif Inc.\",\n\t[3]byte{188, 224, 157}: \"Eoslink\",\n\t[3]byte{188, 225, 67}:  \"Apple, Inc.\",\n\t[3]byte{188, 226, 101}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{188, 229, 159}: \"WATERWORLD Technology Co.,LTD\",\n\t[3]byte{188, 230, 63}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{188, 230, 124}: \"Cambium Networks Limited\",\n\t[3]byte{188, 231, 103}: \"Quanzhou  TDX Electronics Co., Ltd\",\n\t[3]byte{188, 231, 150}: \"Wireless CCTV Ltd\",\n\t[3]byte{188, 233, 47}:  \"HP Inc.\",\n\t[3]byte{188, 234, 43}:  \"CityCom GmbH\",\n\t[3]byte{188, 234, 250}: \"Hewlett Packard\",\n\t[3]byte{188, 235, 95}:  \"Fujian Beifeng Telecom Technology Co., Ltd.\",\n\t[3]byte{188, 236, 35}:  \"SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\",\n\t[3]byte{188, 236, 93}:  \"Apple, Inc.\",\n\t[3]byte{188, 238, 123}: \"ASUSTek COMPUTER INC.\",\n\t[3]byte{188, 241, 242}: \"Cisco Systems, Inc\",\n\t[3]byte{188, 242, 146}: \"PLANTRONICS, INC.\",\n\t[3]byte{188, 242, 175}: \"devolo AG\",\n\t[3]byte{188, 243, 16}:  \"Extreme Networks, Inc.\",\n\t[3]byte{188, 245, 172}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{188, 246, 28}:  \"Geomodeling Wuxi Technology Co. Ltd.\",\n\t[3]byte{188, 246, 133}: \"D-Link International\",\n\t[3]byte{188, 248, 17}:  \"Xiamen DNAKE Technology Co.,Ltd\",\n\t[3]byte{188, 249, 242}: \"TEKO\",\n\t[3]byte{188, 254, 140}: \"Altronic, LLC\",\n\t[3]byte{188, 254, 217}: \"Apple, Inc.\",\n\t[3]byte{188, 255, 33}:  \"Smart Code(shenzhen)Technology Co.,Ltd\",\n\t[3]byte{188, 255, 172}: \"TOPCON CORPORATION\",\n\t[3]byte{188, 255, 235}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{192, 2, 141}:   \"WINSTAR Display CO.,Ltd\",\n\t[3]byte{192, 3, 128}:   \"Juniper Networks\",\n\t[3]byte{192, 5, 194}:   \"ARRIS Group, Inc.\",\n\t[3]byte{192, 7, 74}:    \"Brita GmbH\",\n\t[3]byte{192, 13, 126}:  \"Additech, Inc.\",\n\t[3]byte{192, 16, 177}:  \"HMD Global Oy\",\n\t[3]byte{192, 17, 115}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{192, 17, 166}:  \"Fort-Telecom ltd.\",\n\t[3]byte{192, 18, 66}:   \"Alpha Security Products\",\n\t[3]byte{192, 19, 43}:   \"Sichuan Changhong Electric Ltd.\",\n\t[3]byte{192, 20, 61}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{192, 20, 184}:  \"Nokia\",\n\t[3]byte{192, 20, 254}:  \"Cisco Systems, Inc\",\n\t[3]byte{192, 22, 146}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{192, 23, 77}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{192, 24, 80}:   \"Quanta Computer Inc.\",\n\t[3]byte{192, 24, 133}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{192, 26, 218}:  \"Apple, Inc.\",\n\t[3]byte{192, 27, 35}:   \"SICHUAN TIANYI COMHEART TELECOM CO.,LTD\",\n\t[3]byte{192, 28, 48}:   \"Shenzhen WIFI-3L Technology Co.,Ltd\",\n\t[3]byte{192, 30, 155}:  \"Pixavi AS\",\n\t[3]byte{192, 33, 13}:   \"SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\",\n\t[3]byte{192, 34, 80}:   \"Koss Corporation\",\n\t[3]byte{192, 37, 6}:    \"AVM GmbH\",\n\t[3]byte{192, 37, 92}:   \"Cisco Systems, Inc\",\n\t[3]byte{192, 37, 103}:  \"Nexxt Solutions\",\n\t[3]byte{192, 37, 162}:  \"NEC Platforms, Ltd.\",\n\t[3]byte{192, 37, 233}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{192, 39, 185}:  \"Beijing National Railway Research & Design Institute  of Signal & Communication Co., Ltd.\",\n\t[3]byte{192, 40, 141}:  \"Logitech, Inc\",\n\t[3]byte{192, 41, 115}:  \"Audyssey Laboratories Inc.\",\n\t[3]byte{192, 41, 243}:  \"XySystem\",\n\t[3]byte{192, 43, 252}:  \"iNES. applied informatics GmbH\",\n\t[3]byte{192, 44, 122}:  \"Shenzhen Horn Audio Co.,Ltd.\",\n\t[3]byte{192, 45, 238}:  \"Cuff\",\n\t[3]byte{192, 46, 37}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{192, 46, 38}:   \"Private\",\n\t[3]byte{192, 47, 241}:  \"Volta Networks\",\n\t[3]byte{192, 51, 94}:   \"Microsoft\",\n\t[3]byte{192, 52, 180}:  \"Gigastone Corporation\",\n\t[3]byte{192, 53, 128}:  \"A&R TECH\",\n\t[3]byte{192, 53, 189}:  \"Velocytech Aps\",\n\t[3]byte{192, 53, 197}:  \"Prosoft Systems LTD\",\n\t[3]byte{192, 54, 86}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{192, 56, 150}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{192, 56, 249}:  \"Nokia Danmark A/S\",\n\t[3]byte{192, 57, 55}:   \"GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI\",\n\t[3]byte{192, 57, 90}:   \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{192, 59, 143}:  \"Minicom Digital Signage\",\n\t[3]byte{192, 61, 3}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{192, 61, 70}:   \"Shanghai Sango Network Technology Co.,Ltd\",\n\t[3]byte{192, 61, 217}:  \"MitraStar Technology Corp.\",\n\t[3]byte{192, 62, 15}:   \"BSkyB Ltd\",\n\t[3]byte{192, 62, 186}:  \"Dell Inc.\",\n\t[3]byte{192, 63, 14}:   \"NETGEAR\",\n\t[3]byte{192, 63, 42}:   \"Biscotti, Inc.\",\n\t[3]byte{192, 63, 213}:  \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{192, 64, 4}:    \"Medicaroid Corporation\",\n\t[3]byte{192, 65, 33}:   \"Nokia\",\n\t[3]byte{192, 65, 246}:  \"LG ELECTRONICS INC\",\n\t[3]byte{192, 66, 208}:  \"Juniper Networks\",\n\t[3]byte{192, 67, 1}:    \"Epec Oy\",\n\t[3]byte{192, 68, 227}:  \"Shenzhen Sinkna Electronics Co., LTD\",\n\t[3]byte{192, 72, 230}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{192, 72, 251}:  \"Shenzhen JingHanDa Electronics Co.Ltd\",\n\t[3]byte{192, 73, 61}:   \"MAITRISE TECHNOLOGIQUE\",\n\t[3]byte{192, 74, 0}:    \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{192, 74, 9}:    \"Zhejiang Everbright Communication Equip. Co,. Ltd\",\n\t[3]byte{192, 77, 247}:  \"SERELEC\",\n\t[3]byte{192, 81, 126}:  \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{192, 83, 54}:   \"Beijing National Railway Research & Design Institute of Signal & Communication Group Co..Ltd.\",\n\t[3]byte{192, 86, 39}:   \"Belkin International Inc.\",\n\t[3]byte{192, 86, 227}:  \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{192, 87, 188}:  \"Avaya Inc\",\n\t[3]byte{192, 88, 167}:  \"Pico Systems Co., Ltd.\",\n\t[3]byte{192, 94, 111}:  \"V. Stonkaus firma \\\"Kodinis Raktas\\\"\",\n\t[3]byte{192, 94, 121}:  \"SHENZHEN HUAXUN ARK TECHNOLOGIES CO.,LTD\",\n\t[3]byte{192, 97, 24}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{192, 97, 154}:  \"IEEE Registration Authority\",\n\t[3]byte{192, 98, 107}:  \"Cisco Systems, Inc\",\n\t[3]byte{192, 99, 105}:  \"BINXIN TECHNOLOGY(ZHEJIANG) LTD.\",\n\t[3]byte{192, 99, 148}:  \"Apple, Inc.\",\n\t[3]byte{192, 100, 198}: \"Nokia Corporation\",\n\t[3]byte{192, 100, 228}: \"Cisco Systems, Inc\",\n\t[3]byte{192, 101, 153}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{192, 103, 175}: \"Cisco Systems, Inc\",\n\t[3]byte{192, 108, 15}:  \"Dobbs Stanford\",\n\t[3]byte{192, 108, 109}: \"MagneMotion, Inc.\",\n\t[3]byte{192, 109, 26}:  \"Tianjin Henxinhuifeng Technology Co.,Ltd.\",\n\t[3]byte{192, 112, 9}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{192, 116, 43}:  \"SHENZHEN XUNLONG SOFTWARE CO.,LIMITED\",\n\t[3]byte{192, 116, 173}: \"Grandstream Networks, Inc.\",\n\t[3]byte{192, 120, 120}: \"FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.\",\n\t[3]byte{192, 123, 188}: \"Cisco Systems, Inc\",\n\t[3]byte{192, 124, 209}: \"PEGATRON CORPORATION\",\n\t[3]byte{192, 126, 64}:  \"SHENZHEN XDK COMMUNICATION EQUIPMENT CO.,LTD\",\n\t[3]byte{192, 129, 53}:  \"Ningbo Forfan technology Co., LTD\",\n\t[3]byte{192, 129, 112}: \"Effigis GeoSolutions\",\n\t[3]byte{192, 131, 10}:  \"2Wire Inc\",\n\t[3]byte{192, 131, 89}:  \"IEEE Registration Authority\",\n\t[3]byte{192, 131, 201}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{192, 132, 122}: \"Apple, Inc.\",\n\t[3]byte{192, 132, 125}: \"AMPAK Technology, Inc.\",\n\t[3]byte{192, 132, 136}: \"Finis Inc\",\n\t[3]byte{192, 133, 76}:  \"Ragentek Technology Group\",\n\t[3]byte{192, 134, 179}: \"Shenzhen Voxtech Co., Ltd.\",\n\t[3]byte{192, 135, 235}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{192, 136, 91}:  \"SnD Tech Co., Ltd.\",\n\t[3]byte{192, 137, 151}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{192, 137, 171}: \"ARRIS Group, Inc.\",\n\t[3]byte{192, 138, 205}: \"Guangzhou Shiyuan Electronic Technology Company Limited\",\n\t[3]byte{192, 138, 222}: \"Ruckus Wireless\",\n\t[3]byte{192, 139, 111}: \"S I Sistemas Inteligentes Eletrônicos Ltda\",\n\t[3]byte{192, 140, 96}:  \"Cisco Systems, Inc\",\n\t[3]byte{192, 140, 113}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{192, 143, 32}:  \"Shenzhen Skyworth  Digital  Technology  CO., Ltd\",\n\t[3]byte{192, 145, 50}:  \"Patriot Memory\",\n\t[3]byte{192, 145, 52}:  \"ProCurve Networking by HP\",\n\t[3]byte{192, 149, 218}: \"NXP India Private Limited\",\n\t[3]byte{192, 151, 39}:  \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{192, 152, 121}: \"Acer Inc.\",\n\t[3]byte{192, 152, 218}: \"China Mobile IOT Company Limited\",\n\t[3]byte{192, 152, 229}: \"University of Michigan\",\n\t[3]byte{192, 154, 113}: \"XIAMEN MEITU MOBILE TECHNOLOGY CO.LTD\",\n\t[3]byte{192, 154, 208}: \"Apple, Inc.\",\n\t[3]byte{192, 155, 244}: \"IEEE Registration Authority\",\n\t[3]byte{192, 156, 4}:   \"Shaanxi GuoLian Digital TV Technology Co.,Ltd.\",\n\t[3]byte{192, 156, 146}: \"COBY\",\n\t[3]byte{192, 157, 38}:  \"Topicon HK Lmd.\",\n\t[3]byte{192, 159, 5}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{192, 159, 66}:  \"Apple, Inc.\",\n\t[3]byte{192, 159, 225}: \"zte corporation\",\n\t[3]byte{192, 160, 13}:  \"ARRIS Group, Inc.\",\n\t[3]byte{192, 160, 187}: \"D-Link International\",\n\t[3]byte{192, 160, 199}: \"FAIRFIELD INDUSTRIES\",\n\t[3]byte{192, 160, 222}: \"Multi Touch Oy\",\n\t[3]byte{192, 160, 226}: \"Eden Innovations\",\n\t[3]byte{192, 161, 162}: \"MarqMetrix\",\n\t[3]byte{192, 162, 109}: \"Abbott Point of Care\",\n\t[3]byte{192, 163, 100}: \"3D Systems Massachusetts\",\n\t[3]byte{192, 163, 110}: \"BSkyB Ltd\",\n\t[3]byte{192, 163, 158}: \"EarthCam, Inc.\",\n\t[3]byte{192, 165, 62}:  \"Apple, Inc.\",\n\t[3]byte{192, 165, 221}: \"SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{192, 166, 0}:   \"Apple, Inc.\",\n\t[3]byte{192, 166, 109}: \"Inspur Group Co., Ltd.\",\n\t[3]byte{192, 168, 240}: \"Adamson Systems Engineering\",\n\t[3]byte{192, 170, 104}: \"OSASI Technos Inc.\",\n\t[3]byte{192, 172, 84}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{192, 177, 1}:   \"zte corporation\",\n\t[3]byte{192, 179, 57}:  \"Comigo Ltd.\",\n\t[3]byte{192, 179, 87}:  \"Yoshiki Electronics Industry Ltd.\",\n\t[3]byte{192, 180, 125}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{192, 181, 205}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{192, 181, 215}: \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{192, 182, 88}:  \"Apple, Inc.\",\n\t[3]byte{192, 182, 249}: \"Intel Corporate\",\n\t[3]byte{192, 183, 19}:  \"Beijing Xiaoyuer Technology Co. Ltd.\",\n\t[3]byte{192, 184, 131}: \"Intel Corporate\",\n\t[3]byte{192, 184, 177}: \"BitBox Ltd\",\n\t[3]byte{192, 184, 230}: \"Ruijie Networks Co.,LTD\",\n\t[3]byte{192, 186, 230}: \"Application Solutions (Electronics and Vision) Ltd\",\n\t[3]byte{192, 188, 154}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{192, 189, 66}:  \"ZPA Smart Energy a.s.\",\n\t[3]byte{192, 189, 200}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{192, 189, 209}: \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{192, 191, 167}: \"Juniper Networks\",\n\t[3]byte{192, 191, 192}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{192, 193, 192}: \"Cisco-Linksys, LLC\",\n\t[3]byte{192, 195, 182}: \"Automatic Systems\",\n\t[3]byte{192, 197, 32}:  \"Ruckus Wireless\",\n\t[3]byte{192, 197, 34}:  \"ARRIS Group, Inc.\",\n\t[3]byte{192, 197, 105}: \"SHANGHAI LYNUC CNC TECHNOLOGY CO.,LTD\",\n\t[3]byte{192, 198, 135}: \"Cisco SPVTG\",\n\t[3]byte{192, 201, 70}:  \"MITSUYA LABORATORIES INC.\",\n\t[3]byte{192, 201, 118}: \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{192, 203, 56}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{192, 203, 241}: \"Mobiwire Mobiles (NingBo) Co., LTD\",\n\t[3]byte{192, 204, 66}:  \"Sichuan Tianyi Comheart Telecom Co., Ltd.\",\n\t[3]byte{192, 204, 248}: \"Apple, Inc.\",\n\t[3]byte{192, 206, 205}: \"Apple, Inc.\",\n\t[3]byte{192, 207, 163}: \"Creative Electronics & Software, Inc.\",\n\t[3]byte{192, 208, 18}:  \"Apple, Inc.\",\n\t[3]byte{192, 208, 68}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{192, 208, 255}: \"China Mobile IOT Company Limited\",\n\t[3]byte{192, 209, 147}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{192, 210, 221}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{192, 210, 243}: \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{192, 211, 145}: \"IEEE Registration Authority\",\n\t[3]byte{192, 211, 192}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{192, 214, 130}: \"Arista Networks\",\n\t[3]byte{192, 216, 52}:  \"xvtec ltd\",\n\t[3]byte{192, 217, 98}:  \"ASKEY COMPUTER CORP\",\n\t[3]byte{192, 217, 247}: \"ShanDong Domor Intelligent S&T CO.,Ltd\",\n\t[3]byte{192, 218, 116}: \"Hangzhou Sunyard Technology Co., Ltd.\",\n\t[3]byte{192, 220, 106}: \"Qingdao Eastsoft Communication Technology Co.,LTD\",\n\t[3]byte{192, 220, 218}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{192, 223, 119}: \"Conrad Electronic SE\",\n\t[3]byte{192, 227, 160}: \"Renesas Electronics (Penang) Sdn. Bhd.\",\n\t[3]byte{192, 228, 34}:  \"Texas Instruments\",\n\t[3]byte{192, 228, 45}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{192, 228, 52}:  \"AzureWave Technology Inc.\",\n\t[3]byte{192, 229, 78}:  \"ARIES Embedded GmbH\",\n\t[3]byte{192, 231, 191}: \"Sichuan AI-Link Technology Co., Ltd.\",\n\t[3]byte{192, 232, 98}:  \"Apple, Inc.\",\n\t[3]byte{192, 234, 228}: \"Sonicwall\",\n\t[3]byte{192, 238, 64}:  \"Laird Technologies\",\n\t[3]byte{192, 238, 181}: \"Enice Network.\",\n\t[3]byte{192, 238, 251}: \"OnePlus Tech (Shenzhen) Ltd\",\n\t[3]byte{192, 241, 196}: \"Pacidal Corporation Ltd.\",\n\t[3]byte{192, 242, 251}: \"Apple, Inc.\",\n\t[3]byte{192, 244, 230}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{192, 246, 54}:  \"Hangzhou Kuaiyue Technologies, Ltd.\",\n\t[3]byte{192, 246, 194}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{192, 247, 157}: \"Powercode\",\n\t[3]byte{192, 248, 218}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{192, 249, 69}:  \"Toshiba Toko Meter Systems Co., LTD.\",\n\t[3]byte{192, 249, 145}: \"GME Standard Communications P/L\",\n\t[3]byte{192, 253, 132}: \"zte corporation\",\n\t[3]byte{192, 255, 168}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{192, 255, 212}: \"NETGEAR\",\n\t[3]byte{196, 0, 6}:     \"Lipi Data Systems Ltd.\",\n\t[3]byte{196, 0, 73}:    \"Kamama\",\n\t[3]byte{196, 0, 173}:   \"Advantech Technology (CHINA) Co., Ltd.\",\n\t[3]byte{196, 1, 66}:    \"MaxMedia Technology Limited\",\n\t[3]byte{196, 1, 124}:   \"Ruckus Wireless\",\n\t[3]byte{196, 1, 177}:   \"SeekTech INC\",\n\t[3]byte{196, 1, 206}:   \"PRESITION (2000) CO., LTD.\",\n\t[3]byte{196, 2, 225}:   \"Khwahish Technologies Private Limited\",\n\t[3]byte{196, 4, 21}:    \"NETGEAR\",\n\t[3]byte{196, 4, 123}:   \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{196, 5, 40}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 6, 131}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 7, 47}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 8, 74}:    \"Nokia\",\n\t[3]byte{196, 8, 128}:   \"Shenzhen UTEPO Tech Co., Ltd.\",\n\t[3]byte{196, 9, 56}:    \"FUJIAN STAR-NET COMMUNICATION CO.,LTD\",\n\t[3]byte{196, 10, 203}:  \"Cisco Systems, Inc\",\n\t[3]byte{196, 11, 203}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{196, 13, 150}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 14, 69}:   \"ACK Networks,Inc.\",\n\t[3]byte{196, 15, 9}:    \"Hermes electronic GmbH\",\n\t[3]byte{196, 16, 138}:  \"Ruckus Wireless\",\n\t[3]byte{196, 17, 224}:  \"Bull Group Co., Ltd\",\n\t[3]byte{196, 18, 245}:  \"D-Link International\",\n\t[3]byte{196, 19, 226}:  \"Extreme Networks, Inc.\",\n\t[3]byte{196, 20, 60}:   \"Cisco Systems, Inc\",\n\t[3]byte{196, 22, 136}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{196, 22, 250}:  \"Prysm Inc\",\n\t[3]byte{196, 23, 254}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{196, 25, 139}:  \"Dominion Voting Systems Corporation\",\n\t[3]byte{196, 25, 209}:  \"Telink Semiconductor (Shanghai) Co., Ltd.\",\n\t[3]byte{196, 25, 236}:  \"Qualisys AB\",\n\t[3]byte{196, 28, 255}:  \"Vizio, Inc\",\n\t[3]byte{196, 30, 206}:  \"HMI Sources Ltd.\",\n\t[3]byte{196, 33, 200}:  \"KYOCERA CORPORATION \",\n\t[3]byte{196, 35, 122}:  \"WhizNets Inc.\",\n\t[3]byte{196, 35, 162}:  \"PT. Emsonic Indonesia\",\n\t[3]byte{196, 36, 46}:   \"Galvanic Applied Sciences Inc\",\n\t[3]byte{196, 36, 86}:   \"Palo Alto Networks\",\n\t[3]byte{196, 38, 40}:   \"Airo Wireless\",\n\t[3]byte{196, 39, 149}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{196, 40, 45}:   \"Embedded Intellect Pty Ltd\",\n\t[3]byte{196, 41, 29}:   \"KLEMSAN ELEKTRIK ELEKTRONIK SAN.VE TIC.AS.\",\n\t[3]byte{196, 41, 150}:  \"Signify B.V.\",\n\t[3]byte{196, 42, 208}:  \"Apple, Inc.\",\n\t[3]byte{196, 43, 68}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{196, 44, 3}:    \"Apple, Inc.\",\n\t[3]byte{196, 44, 79}:   \"Qingdao Hisense Mobile Communication Technology Co,Ltd\",\n\t[3]byte{196, 47, 144}:  \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{196, 48, 24}:   \"MCS Logic Inc.\",\n\t[3]byte{196, 50, 209}:  \"Farlink Technology Limited\",\n\t[3]byte{196, 51, 6}:    \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{196, 52, 107}:  \"Hewlett Packard\",\n\t[3]byte{196, 54, 85}:   \"Shenzhen Fenglian Technology Co., Ltd.\",\n\t[3]byte{196, 54, 108}:  \"LG Innotek\",\n\t[3]byte{196, 54, 218}:  \"Rusteletech Ltd.\",\n\t[3]byte{196, 56, 211}:  \"TAGATEC CO.,LTD\",\n\t[3]byte{196, 57, 58}:   \"SMC Networks Inc\",\n\t[3]byte{196, 58, 53}:   \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{196, 58, 159}:  \"Siconix Inc.\",\n\t[3]byte{196, 58, 190}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{196, 60, 60}:   \"CYBELEC SA\",\n\t[3]byte{196, 61, 199}:  \"NETGEAR\",\n\t[3]byte{196, 64, 68}:   \"RackTop Systems Inc.\",\n\t[3]byte{196, 65, 30}:   \"Belkin International Inc.\",\n\t[3]byte{196, 66, 2}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{196, 66, 104}:  \"CRESTRON ELECTRONICS, INC.\",\n\t[3]byte{196, 67, 143}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{196, 68, 125}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 68, 160}:  \"Cisco Systems, Inc\",\n\t[3]byte{196, 69, 103}:  \"SAMBON PRECISON and ELECTRONICS\",\n\t[3]byte{196, 69, 236}:  \"Shanghai Yali Electron Co.,LTD\",\n\t[3]byte{196, 70, 25}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{196, 71, 63}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 72, 56}:   \"Satcom Direct, Inc.\",\n\t[3]byte{196, 73, 187}:  \"MITSUMI ELECTRIC CO.,LTD.\",\n\t[3]byte{196, 74, 208}:  \"FIREFLIES SYSTEMS\",\n\t[3]byte{196, 75, 68}:   \"Omniprint Inc.\",\n\t[3]byte{196, 75, 209}:  \"Wallys Communications  Teachnologies Co.,Ltd.\",\n\t[3]byte{196, 78, 31}:   \"BlueN\",\n\t[3]byte{196, 78, 172}:  \"Shenzhen Shiningworth Technology Co., Ltd.\",\n\t[3]byte{196, 79, 51}:   \"Espressif Inc.\",\n\t[3]byte{196, 80, 6}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{196, 81, 141}:  \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{196, 84, 68}:   \"Quanta Computer Inc.\",\n\t[3]byte{196, 85, 166}:  \"Cadac Holdings Ltd\",\n\t[3]byte{196, 85, 194}:  \"Bach-Simpson\",\n\t[3]byte{196, 86, 0}:    \"Galleon Embedded Computing\",\n\t[3]byte{196, 86, 254}:  \"Lava International Ltd.\",\n\t[3]byte{196, 87, 31}:   \"June Life Inc\",\n\t[3]byte{196, 87, 110}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{196, 88, 194}:  \"Shenzhen TATFOOK Technology Co., Ltd.\",\n\t[3]byte{196, 89, 118}:  \"Fugoo Coorporation\",\n\t[3]byte{196, 91, 247}:  \"ants\",\n\t[3]byte{196, 93, 216}:  \"HDMI Forum\",\n\t[3]byte{196, 96, 68}:   \"Everex Electronics Limited\",\n\t[3]byte{196, 97, 139}:  \"Apple, Inc.\",\n\t[3]byte{196, 98, 107}:  \"ZPT Vigantice\",\n\t[3]byte{196, 98, 234}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{196, 99, 84}:   \"U-Raku, Inc.\",\n\t[3]byte{196, 99, 251}:  \"Neatframe AS\",\n\t[3]byte{196, 100, 19}:  \"Cisco Systems, Inc\",\n\t[3]byte{196, 100, 183}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{196, 100, 227}: \"Texas Instruments\",\n\t[3]byte{196, 101, 22}:  \"Hewlett Packard\",\n\t[3]byte{196, 102, 153}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{196, 103, 181}: \"Libratone A/S\",\n\t[3]byte{196, 103, 209}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 104, 208}: \"VTech Telecommunications Ltd.\",\n\t[3]byte{196, 105, 62}:  \"Turbulence Design Inc.\",\n\t[3]byte{196, 106, 183}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{196, 107, 180}: \"myIDkey\",\n\t[3]byte{196, 109, 241}: \"DataGravity\",\n\t[3]byte{196, 110, 31}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{196, 110, 123}: \"SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\",\n\t[3]byte{196, 112, 11}:  \"GUANGZHOU CHIP TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 113, 48}:  \"Fon Technology S.L.\",\n\t[3]byte{196, 113, 84}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{196, 113, 254}: \"Cisco Systems, Inc\",\n\t[3]byte{196, 114, 149}: \"Cisco Systems, Inc\",\n\t[3]byte{196, 115, 30}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{196, 116, 30}:  \"zte corporation\",\n\t[3]byte{196, 116, 248}: \"Hot Pepper, Inc.\",\n\t[3]byte{196, 119, 171}: \"Beijing ASU Tech Co.,Ltd\",\n\t[3]byte{196, 119, 175}: \"Advanced Digital Broadcast SA\",\n\t[3]byte{196, 123, 47}:  \"Beijing JoinHope Image Technology Ltd.\",\n\t[3]byte{196, 123, 163}: \"NAVIS Inc.\",\n\t[3]byte{196, 124, 141}: \"IEEE Registration Authority\",\n\t[3]byte{196, 125, 70}:  \"FUJITSU LIMITED\",\n\t[3]byte{196, 125, 79}:  \"Cisco Systems, Inc\",\n\t[3]byte{196, 125, 204}: \"Zebra Technologies Inc\",\n\t[3]byte{196, 125, 254}: \"A.N. Solutions GmbH\",\n\t[3]byte{196, 127, 81}:  \"Inventek Systems\",\n\t[3]byte{196, 130, 63}:  \"Fujian Newland Auto-ID Tech. Co,.Ltd.\",\n\t[3]byte{196, 130, 78}:  \"Changzhou Uchip Electronics Co., LTD.\",\n\t[3]byte{196, 131, 111}: \"Ciena Corporation\",\n\t[3]byte{196, 132, 102}: \"Apple, Inc.\",\n\t[3]byte{196, 133, 8}:   \"Intel Corporate\",\n\t[3]byte{196, 134, 233}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 136, 229}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{196, 137, 237}: \"Solid Optics EU N.V.\",\n\t[3]byte{196, 138, 90}:  \"JFCONTROL\",\n\t[3]byte{196, 142, 143}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{196, 143, 7}:   \"Shenzhen Yihao Hulian Science and Technology Co., Ltd.\",\n\t[3]byte{196, 143, 193}: \"DEEPTRACK S.L.U.\",\n\t[3]byte{196, 145, 12}:  \"Apple, Inc.\",\n\t[3]byte{196, 145, 58}:  \"Shenzhen Sanland Electronic Co., ltd.\",\n\t[3]byte{196, 146, 76}:  \"KEISOKUKI CENTER CO.,LTD.\",\n\t[3]byte{196, 147, 0}:   \"8Devices\",\n\t[3]byte{196, 147, 19}:  \"100fio networks technology llc\",\n\t[3]byte{196, 147, 128}: \"Speedytel technology\",\n\t[3]byte{196, 147, 217}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{196, 149, 0}:   \"Amazon Technologies Inc.\",\n\t[3]byte{196, 149, 77}:  \"IEEE Registration Authority\",\n\t[3]byte{196, 149, 162}: \"SHENZHEN WEIJIU INDUSTRY AND TRADE DEVELOPMENT CO., LTD\",\n\t[3]byte{196, 152, 5}:   \"Minieum Networks, Inc\",\n\t[3]byte{196, 152, 92}:  \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{196, 152, 120}: \"SHANGHAI MOAAN INTELLIGENT TECHNOLOGY CO.,LTD\",\n\t[3]byte{196, 152, 128}: \"Apple, Inc.\",\n\t[3]byte{196, 152, 134}: \"Qorvo International Pte. Ltd.\",\n\t[3]byte{196, 154, 2}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{196, 157, 237}: \"Microsoft Corporation\",\n\t[3]byte{196, 158, 65}:  \"G24 Power Limited\",\n\t[3]byte{196, 159, 76}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 159, 243}: \"Mciao Technologies, Inc.\",\n\t[3]byte{196, 161, 81}:  \"Sichuan Tianyi Comheart Telecom Co., Ltd.\",\n\t[3]byte{196, 163, 102}: \"zte corporation\",\n\t[3]byte{196, 164, 2}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 168, 29}:  \"D-Link International\",\n\t[3]byte{196, 170, 161}: \"SUMMIT DEVELOPMENT, spol.s r.o.\",\n\t[3]byte{196, 171, 178}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{196, 172, 89}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{196, 173, 33}:  \"MEDIAEDGE Corporation\",\n\t[3]byte{196, 173, 52}:  \"Routerboard.com\",\n\t[3]byte{196, 173, 241}: \"GOPEACE Inc.\",\n\t[3]byte{196, 174, 18}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{196, 178, 57}:  \"Cisco Systems, Inc\",\n\t[3]byte{196, 179, 1}:   \"Apple, Inc.\",\n\t[3]byte{196, 179, 106}: \"Cisco Systems, Inc\",\n\t[3]byte{196, 181, 18}:  \"General Electric Digital Energy\",\n\t[3]byte{196, 184, 180}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 185, 205}: \"Cisco Systems, Inc\",\n\t[3]byte{196, 186, 153}: \"I+ME Actia Informatik und Mikro-Elektronik GmbH\",\n\t[3]byte{196, 186, 163}: \"Beijing Winicssec Technologies Co., Ltd.\",\n\t[3]byte{196, 187, 76}:  \"Zebra Information Tech Co. Ltd\",\n\t[3]byte{196, 187, 234}: \"Pakedge Device and Software Inc\",\n\t[3]byte{196, 189, 106}: \"SKF GmbH\",\n\t[3]byte{196, 190, 132}: \"Texas Instruments\",\n\t[3]byte{196, 190, 212}: \"Avaya Inc\",\n\t[3]byte{196, 192, 174}: \"MIDORI ELECTRONIC CO., LTD.\",\n\t[3]byte{196, 193, 56}:  \"OWLink Technology Inc\",\n\t[3]byte{196, 193, 159}: \"National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)\",\n\t[3]byte{196, 197, 99}:  \"TECNO MOBILE LIMITED\",\n\t[3]byte{196, 198, 3}:   \"Cisco Systems, Inc\",\n\t[3]byte{196, 199, 85}:  \"Beijing HuaqinWorld Technology Co.,Ltd\",\n\t[3]byte{196, 201, 25}:  \"Energy Imports Ltd\",\n\t[3]byte{196, 201, 236}: \"Gugaoo   HK Limited\",\n\t[3]byte{196, 202, 217}: \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{196, 203, 107}: \"Airista Flow, Inc.\",\n\t[3]byte{196, 205, 69}:  \"Beijing Boomsense Technology CO.,LTD.\",\n\t[3]byte{196, 205, 130}: \"Hangzhou Lowan Information Technology Co., Ltd.\",\n\t[3]byte{196, 209, 151}: \"Ventia Utility Services\",\n\t[3]byte{196, 212, 137}: \"JiangSu Joyque Information Industry Co.,Ltd\",\n\t[3]byte{196, 214, 85}:  \"Tercel technology co.,ltd\",\n\t[3]byte{196, 215, 56}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{196, 216, 243}: \"iZotope\",\n\t[3]byte{196, 217, 135}: \"Intel Corporate\",\n\t[3]byte{196, 218, 38}:  \"NOBLEX SA\",\n\t[3]byte{196, 218, 125}: \"Ivium Technologies B.V.\",\n\t[3]byte{196, 224, 50}:  \"IEEE 1904.1 Working Group\",\n\t[3]byte{196, 224, 222}: \"Zhengzhou XindaJiean Information Technology Co.,Ltd.\",\n\t[3]byte{196, 225, 124}: \"U2S co.\",\n\t[3]byte{196, 225, 161}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{196, 227, 159}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{196, 229, 6}:   \"Piper Networks, Inc.\",\n\t[3]byte{196, 229, 16}:  \"Mechatro, Inc.\",\n\t[3]byte{196, 231, 190}: \"SCSpro Co.,Ltd\",\n\t[3]byte{196, 233, 10}:  \"D-Link International\",\n\t[3]byte{196, 233, 47}:  \"AB Sciex\",\n\t[3]byte{196, 233, 132}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{196, 234, 29}:  \"Technicolor\",\n\t[3]byte{196, 235, 227}: \"RRCN SAS\",\n\t[3]byte{196, 237, 186}: \"Texas Instruments\",\n\t[3]byte{196, 238, 174}: \"VSS Monitoring\",\n\t[3]byte{196, 238, 245}: \"II-VI Incorporated\",\n\t[3]byte{196, 239, 112}: \"Home Skinovations\",\n\t[3]byte{196, 240, 129}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 240, 236}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{196, 241, 209}: \"BEIJING SOGOU TECHNOLOGY DEVELOPMENT CO., LTD.\",\n\t[3]byte{196, 243, 18}:  \"Texas Instruments\",\n\t[3]byte{196, 244, 100}: \"Spica international\",\n\t[3]byte{196, 245, 124}: \"Brocade Communications Systems LLC\",\n\t[3]byte{196, 245, 165}: \"Kumalift Co., Ltd.\",\n\t[3]byte{196, 247, 213}: \"Cisco Systems, Inc\",\n\t[3]byte{196, 248, 57}:  \"Actia Automotive\",\n\t[3]byte{196, 252, 228}: \"DishTV NZ Ltd\",\n\t[3]byte{196, 253, 230}: \"DRTECH\",\n\t[3]byte{196, 254, 91}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{196, 254, 226}: \"AMICCOM Electronics Corporation\",\n\t[3]byte{196, 255, 31}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{196, 255, 188}: \"IEEE Registration Authority\",\n\t[3]byte{200, 0, 132}:   \"Cisco Systems, Inc\",\n\t[3]byte{200, 2, 16}:    \"LG Innotek\",\n\t[3]byte{200, 2, 88}:    \"ITW GSE ApS\",\n\t[3]byte{200, 2, 143}:   \"Nova Electronics (Shanghai) Co., Ltd.\",\n\t[3]byte{200, 2, 166}:   \"Beijing Newmine Technology\",\n\t[3]byte{200, 3, 245}:   \"Ruckus Wireless\",\n\t[3]byte{200, 7, 24}:    \"TDSi\",\n\t[3]byte{200, 7, 57}:    \"NAKAYO Inc\",\n\t[3]byte{200, 8, 115}:   \"Ruckus Wireless\",\n\t[3]byte{200, 8, 233}:   \"LG Electronics\",\n\t[3]byte{200, 9, 168}:   \"Intel Corporate\",\n\t[3]byte{200, 10, 169}:  \"Quanta Computer Inc.\",\n\t[3]byte{200, 12, 200}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{200, 13, 50}:   \"Holoplot GmbH\",\n\t[3]byte{200, 14, 20}:   \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{200, 14, 119}:  \"Le Shi Zhi Xin Electronic Technology (Tianjin) Limited\",\n\t[3]byte{200, 14, 149}:  \"OmniLync Inc.\",\n\t[3]byte{200, 16, 115}:  \"CENTURY OPTICOMM CO.,LTD\",\n\t[3]byte{200, 20, 81}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{200, 20, 121}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{200, 22, 165}:  \"Masimo Corporation\",\n\t[3]byte{200, 22, 189}:  \"Qingdao Hisense Communications Co.,Ltd.\",\n\t[3]byte{200, 22, 218}:  \"Realme Chongqing Mobile Telecommunications Corp.,Ltd.\",\n\t[3]byte{200, 23, 57}:   \"ITEL MOBILE LIMITED\",\n\t[3]byte{200, 25, 247}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{200, 26, 254}:  \"DLOGIC GmbH\",\n\t[3]byte{200, 27, 92}:   \"BCTech\",\n\t[3]byte{200, 27, 107}:  \"Innova Security\",\n\t[3]byte{200, 30, 142}:  \"ADV Security (S) Pte Ltd\",\n\t[3]byte{200, 30, 231}:  \"Apple, Inc.\",\n\t[3]byte{200, 31, 102}:  \"Dell Inc.\",\n\t[3]byte{200, 31, 190}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{200, 31, 234}:  \"Avaya Inc\",\n\t[3]byte{200, 32, 142}:  \"Storagedata\",\n\t[3]byte{200, 33, 88}:   \"Intel Corporate\",\n\t[3]byte{200, 33, 218}:  \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{200, 37, 225}:  \"Lemobile Information Technology (Beijing) Co., Ltd\",\n\t[3]byte{200, 40, 50}:   \"Beijing Xiaomi Electronics Co., Ltd.\",\n\t[3]byte{200, 41, 42}:   \"Barun Electronics\",\n\t[3]byte{200, 42, 20}:   \"Apple, Inc.\",\n\t[3]byte{200, 43, 150}:  \"Espressif Inc.\",\n\t[3]byte{200, 44, 43}:   \"IEEE Registration Authority\",\n\t[3]byte{200, 46, 71}:   \"Suzhou SmartChip Semiconductor Co., LTD\",\n\t[3]byte{200, 46, 148}:  \"Halfa Enterprise Co., Ltd.\",\n\t[3]byte{200, 49, 104}:  \"eZEX corporation\",\n\t[3]byte{200, 50, 50}:   \"Hunting Innova\",\n\t[3]byte{200, 51, 75}:   \"Apple, Inc.\",\n\t[3]byte{200, 52, 142}:  \"Intel Corporate\",\n\t[3]byte{200, 53, 184}:  \"Ericsson, EAB/RWI/K\",\n\t[3]byte{200, 56, 112}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{200, 58, 53}:   \"Tenda Technology Co., Ltd.\",\n\t[3]byte{200, 58, 107}:  \"Roku, Inc\",\n\t[3]byte{200, 59, 69}:   \"JRI\",\n\t[3]byte{200, 60, 133}:  \"Apple, Inc.\",\n\t[3]byte{200, 61, 151}:  \"Nokia Corporation\",\n\t[3]byte{200, 61, 212}:  \"CyberTAN Technology Inc.\",\n\t[3]byte{200, 61, 220}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{200, 61, 252}:  \"AlphaTheta Corporation\",\n\t[3]byte{200, 62, 153}:  \"Texas Instruments\",\n\t[3]byte{200, 62, 167}:  \"KUNBUS GmbH\",\n\t[3]byte{200, 63, 38}:   \"Microsoft Corporation\",\n\t[3]byte{200, 63, 180}:  \"ARRIS Group, Inc.\",\n\t[3]byte{200, 64, 41}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{200, 69, 41}:   \"IMK Networks Co.,Ltd\",\n\t[3]byte{200, 69, 68}:   \"Asia Pacific CIS (Wuxi) Co, Ltd\",\n\t[3]byte{200, 69, 143}:  \"Wyler AG\",\n\t[3]byte{200, 71, 130}:  \"Areson Technology Corp.\",\n\t[3]byte{200, 71, 140}:  \"Beken Corporation\",\n\t[3]byte{200, 72, 245}:  \"MEDISON Xray Co., Ltd\",\n\t[3]byte{200, 76, 117}:  \"Cisco Systems, Inc\",\n\t[3]byte{200, 79, 14}:   \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{200, 79, 134}:  \"Sophos Ltd\",\n\t[3]byte{200, 80, 206}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{200, 80, 233}:  \"Raisecom Technology CO., LTD\",\n\t[3]byte{200, 81, 149}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{200, 82, 97}:   \"ARRIS Group, Inc.\",\n\t[3]byte{200, 83, 225}:  \"Beijing Bytedance Network Technology Co., Ltd\",\n\t[3]byte{200, 84, 75}:   \"Zyxel Communications Corporation\",\n\t[3]byte{200, 86, 69}:   \"Intermas France\",\n\t[3]byte{200, 86, 99}:   \"Sunflex Europe GmbH\",\n\t[3]byte{200, 88, 192}:  \"Intel Corporate\",\n\t[3]byte{200, 90, 159}:  \"zte corporation\",\n\t[3]byte{200, 91, 118}:  \"LCFC(HeFei) Electronics Technology co., ltd\",\n\t[3]byte{200, 91, 160}:  \"Shenzhen Qihu Intelligent Technology Company Limited\",\n\t[3]byte{200, 93, 56}:   \"HUMAX Co., Ltd.\",\n\t[3]byte{200, 96, 0}:    \"ASUSTek COMPUTER INC.\",\n\t[3]byte{200, 99, 20}:   \"IEEE Registration Authority\",\n\t[3]byte{200, 99, 241}:  \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{200, 99, 252}:  \"ARRIS Group, Inc.\",\n\t[3]byte{200, 100, 199}: \"zte corporation\",\n\t[3]byte{200, 102, 44}:  \"Beijing Haitai Fangyuan High Technology Co,.Ltd.\",\n\t[3]byte{200, 102, 93}:  \"Extreme Networks, Inc.\",\n\t[3]byte{200, 103, 94}:  \"Extreme Networks, Inc.\",\n\t[3]byte{200, 104, 222}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{200, 105, 205}: \"Apple, Inc.\",\n\t[3]byte{200, 108, 30}:  \"Display Systems Ltd\",\n\t[3]byte{200, 108, 135}: \"Zyxel Communications Corporation\",\n\t[3]byte{200, 108, 182}: \"Optcom Co., Ltd.\",\n\t[3]byte{200, 111, 29}:  \"Apple, Inc.\",\n\t[3]byte{200, 113, 37}:  \"Johnson Outdoors Marine Electronics d/b/a Minnkota\",\n\t[3]byte{200, 114, 72}:  \"Aplicom Oy\",\n\t[3]byte{200, 115, 36}:  \" Sow Cheng Technology Co. Ltd.\",\n\t[3]byte{200, 117, 91}:  \"Quantify Technology Pty. Ltd.\",\n\t[3]byte{200, 119, 101}: \"Tiesse SpA\",\n\t[3]byte{200, 119, 139}: \"Mercury Systems – Trusted Mission Solutions, Inc. \",\n\t[3]byte{200, 123, 91}:  \"zte corporation\",\n\t[3]byte{200, 124, 188}: \"Valink Co., Ltd. \",\n\t[3]byte{200, 125, 119}: \"Shenzhen Kingtech Communication Equipment Co.,Ltd\",\n\t[3]byte{200, 126, 117}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{200, 126, 161}: \"TCL MOKA International Limited\",\n\t[3]byte{200, 131, 20}:  \"Tempo Communications\",\n\t[3]byte{200, 132, 57}:  \"Sunrise Technologies\",\n\t[3]byte{200, 132, 71}:  \"Beautiful Enterprise Co., Ltd\",\n\t[3]byte{200, 132, 161}: \"Cisco Systems, Inc\",\n\t[3]byte{200, 133, 80}:  \"Apple, Inc.\",\n\t[3]byte{200, 134, 41}:  \"Shenzhen Duubee Intelligent Technologies Co.,LTD.\",\n\t[3]byte{200, 135, 34}:  \"Lumenpulse\",\n\t[3]byte{200, 135, 59}:  \"Net Optics\",\n\t[3]byte{200, 138, 131}: \"Dongguan HuaHong Electronics Co.,Ltd\",\n\t[3]byte{200, 139, 71}:  \"Nolangroup S.P.A con Socio Unico\",\n\t[3]byte{200, 139, 232}: \"Masimo Corporation\",\n\t[3]byte{200, 141, 131}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{200, 142, 209}: \"IEEE Registration Authority\",\n\t[3]byte{200, 143, 38}:  \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{200, 144, 62}:  \"Pakton Technologies\",\n\t[3]byte{200, 145, 249}: \"Sagemcom Broadband SAS\",\n\t[3]byte{200, 147, 70}:  \"MXCHIP Company Limited\",\n\t[3]byte{200, 147, 131}: \"Embedded Automation, Inc.\",\n\t[3]byte{200, 148, 187}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{200, 148, 210}: \"Jiangsu Datang  Electronic Products Co., Ltd\",\n\t[3]byte{200, 151, 159}: \"Nokia Corporation\",\n\t[3]byte{200, 156, 19}:  \"Inspiremobile\",\n\t[3]byte{200, 156, 29}:  \"Cisco Systems, Inc\",\n\t[3]byte{200, 156, 220}: \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{200, 159, 29}:  \"SHENZHEN COMMUNICATION TECHNOLOGIES CO.,LTD\",\n\t[3]byte{200, 159, 66}:  \"VDII Innovation AB\",\n\t[3]byte{200, 160, 48}:  \"Texas Instruments\",\n\t[3]byte{200, 161, 182}: \"Shenzhen Longway Technologies Co., Ltd\",\n\t[3]byte{200, 161, 186}: \"Neul Ltd\",\n\t[3]byte{200, 162, 206}: \"Oasis Media Systems LLC\",\n\t[3]byte{200, 166, 32}:  \"Nebula, Inc\",\n\t[3]byte{200, 167, 10}:  \"Verizon Business\",\n\t[3]byte{200, 167, 41}:  \"SYStronics Co., Ltd.\",\n\t[3]byte{200, 167, 118}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{200, 168, 35}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{200, 169, 252}: \"Goyoo Networks Inc.\",\n\t[3]byte{200, 170, 33}:  \"ARRIS Group, Inc.\",\n\t[3]byte{200, 170, 85}:  \"Hunan Comtom Electronic Incorporated Co.,Ltd\",\n\t[3]byte{200, 170, 204}: \"Private\",\n\t[3]byte{200, 174, 156}: \"Shanghai TYD Elecronic Technology Co. Ltd\",\n\t[3]byte{200, 175, 64}:  \"marco Systemanalyse und Entwicklung GmbH\",\n\t[3]byte{200, 175, 227}: \"Hefei Radio Communication Technology Co., Ltd \",\n\t[3]byte{200, 177, 205}: \"Apple, Inc.\",\n\t[3]byte{200, 177, 238}: \"Qorvo\",\n\t[3]byte{200, 178, 30}:  \"CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.\",\n\t[3]byte{200, 178, 155}: \"Intel Corporate\",\n\t[3]byte{200, 179, 115}: \"Cisco-Linksys, LLC\",\n\t[3]byte{200, 180, 34}:  \"ASKEY COMPUTER CORP\",\n\t[3]byte{200, 181, 173}: \"Hewlett Packard Enterprise\",\n\t[3]byte{200, 181, 183}: \"Apple, Inc.\",\n\t[3]byte{200, 186, 148}: \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{200, 186, 233}: \"QDIS\",\n\t[3]byte{200, 187, 211}: \"Embrane\",\n\t[3]byte{200, 188, 156}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{200, 188, 200}: \"Apple, Inc.\",\n\t[3]byte{200, 188, 229}: \"Sense Things Japan INC.\",\n\t[3]byte{200, 190, 25}:  \"D-Link International\",\n\t[3]byte{200, 193, 38}:  \"ZPM Industria e Comercio Ltda\",\n\t[3]byte{200, 193, 60}:  \"RuggedTek Hangzhou Co., Ltd\",\n\t[3]byte{200, 194, 198}: \"Shanghai Airm2m Communication Technology Co., Ltd\",\n\t[3]byte{200, 194, 245}: \"FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.\",\n\t[3]byte{200, 194, 250}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{200, 196, 101}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{200, 197, 14}:  \"Shenzhen Primestone Network Technologies.Co., Ltd.\",\n\t[3]byte{200, 198, 74}:  \"Flextronics Tech.(Ind) Pvt Ltd\",\n\t[3]byte{200, 199, 80}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{200, 199, 145}: \"Zero1.tv GmbH\",\n\t[3]byte{200, 202, 99}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{200, 203, 184}: \"Hewlett Packard\",\n\t[3]byte{200, 205, 114}: \"Sagemcom Broadband SAS\",\n\t[3]byte{200, 208, 25}:  \"Shanghai Tigercel Communication Technology Co.,Ltd\",\n\t[3]byte{200, 208, 131}: \"Apple, Inc.\",\n\t[3]byte{200, 209, 11}:  \"Nokia Corporation\",\n\t[3]byte{200, 209, 42}:  \"Comtrend Corporation\",\n\t[3]byte{200, 209, 94}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{200, 209, 209}: \"AGAiT Technology Corporation\",\n\t[3]byte{200, 210, 193}: \"Jetlun (Shenzhen) Corporation\",\n\t[3]byte{200, 211, 163}: \"D-Link International\",\n\t[3]byte{200, 211, 255}: \"Hewlett Packard\",\n\t[3]byte{200, 212, 41}:  \"Muehlbauer AG\",\n\t[3]byte{200, 213, 144}: \"FLIGHT DATA SYSTEMS\",\n\t[3]byte{200, 213, 254}: \"Shenzhen Zowee Technology Co., Ltd\",\n\t[3]byte{200, 214, 157}: \"Arab International Optronics\",\n\t[3]byte{200, 215, 25}:  \"Cisco-Linksys, LLC\",\n\t[3]byte{200, 215, 120}: \"BSH Hausgeraete GmbH\",\n\t[3]byte{200, 215, 121}: \"QING DAO HAIER TELECOM CO.,LTD.\",\n\t[3]byte{200, 215, 176}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{200, 217, 210}: \"Hewlett Packard\",\n\t[3]byte{200, 219, 38}:  \"Logitech\",\n\t[3]byte{200, 221, 201}: \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{200, 222, 81}:  \" IntegraOptics\",\n\t[3]byte{200, 222, 201}: \"Coriant\",\n\t[3]byte{200, 223, 124}: \"Nokia Corporation\",\n\t[3]byte{200, 223, 132}: \"Texas Instruments\",\n\t[3]byte{200, 224, 235}: \"Apple, Inc.\",\n\t[3]byte{200, 225, 48}:  \"Milkyway Group Ltd\",\n\t[3]byte{200, 225, 167}: \"Vertu Corporation Limited\",\n\t[3]byte{200, 228, 47}:  \"Technical Research Design and Development\",\n\t[3]byte{200, 230, 0}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{200, 231, 118}: \"PTCOM Technology\",\n\t[3]byte{200, 231, 216}: \"MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{200, 231, 240}: \"Juniper Networks\",\n\t[3]byte{200, 234, 248}: \"zte corporation\",\n\t[3]byte{200, 238, 8}:   \"TANGTOP TECHNOLOGY CO.,LTD\",\n\t[3]byte{200, 238, 117}: \"Pishion International Co. Ltd\",\n\t[3]byte{200, 238, 166}: \"Shenzhen SHX Technology Co., Ltd\",\n\t[3]byte{200, 239, 46}:  \"Beijing Gefei Tech. Co., Ltd \",\n\t[3]byte{200, 242, 48}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{200, 243, 25}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{200, 243, 107}: \"Yamato Scale Co.,Ltd.\",\n\t[3]byte{200, 243, 134}: \"Shenzhen Xiaoniao Technology Co.,Ltd\",\n\t[3]byte{200, 244, 6}:   \"Avaya Inc\",\n\t[3]byte{200, 246, 80}:  \"Apple, Inc.\",\n\t[3]byte{200, 246, 141}: \"S.E.TECHNOLOGIES LIMITED\",\n\t[3]byte{200, 246, 200}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{200, 247, 4}:   \"Building Block Video\",\n\t[3]byte{200, 247, 51}:  \"Intel Corporate\",\n\t[3]byte{200, 247, 66}:  \"HangZhou Gubei Electronics Technology Co.,Ltd\",\n\t[3]byte{200, 247, 80}:  \"Dell Inc.\",\n\t[3]byte{200, 248, 109}: \"Alcatel-Lucent Shanghai Bell Co., Ltd\",\n\t[3]byte{200, 249, 70}:  \"LOCOSYS Technology Inc.\",\n\t[3]byte{200, 249, 129}: \"Seneca s.r.l.\",\n\t[3]byte{200, 249, 200}: \"NewSharp Technology(SuZhou)Co,Ltd\",\n\t[3]byte{200, 249, 249}: \"Cisco Systems, Inc\",\n\t[3]byte{200, 250, 132}: \"Trusonus corp.\",\n\t[3]byte{200, 250, 225}: \"ARQ Digital LLC\",\n\t[3]byte{200, 251, 38}:  \"Cisco SPVTG\",\n\t[3]byte{200, 253, 25}:  \"Texas Instruments\",\n\t[3]byte{200, 254, 48}:  \"Bejing DAYO Mobile Communication Technology Ltd.\",\n\t[3]byte{200, 254, 106}: \"Juniper Networks\",\n\t[3]byte{200, 255, 40}:  \"Liteon Technology Corporation\",\n\t[3]byte{200, 255, 119}: \"Dyson Limited\",\n\t[3]byte{204, 0, 128}:   \"BETTINI SRL\",\n\t[3]byte{204, 3, 217}:   \"Cisco Meraki\",\n\t[3]byte{204, 3, 250}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{204, 4, 124}:   \"G-WAY Microwave\",\n\t[3]byte{204, 4, 180}:   \"Select Comfort\",\n\t[3]byte{204, 5, 27}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{204, 5, 119}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{204, 6, 119}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{204, 7, 171}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{204, 7, 228}:   \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{204, 8, 141}:   \"Apple, Inc.\",\n\t[3]byte{204, 8, 224}:   \"Apple, Inc.\",\n\t[3]byte{204, 8, 251}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{204, 9, 200}:   \"IMAQLIQ LTD\",\n\t[3]byte{204, 12, 218}:  \"Miljovakt AS\",\n\t[3]byte{204, 13, 236}:  \"Cisco SPVTG\",\n\t[3]byte{204, 13, 242}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{204, 16, 163}:  \"Beijing Nan Bao Technology Co., Ltd.\",\n\t[3]byte{204, 20, 166}:  \"Yichun MyEnergy Domain, Inc\",\n\t[3]byte{204, 22, 126}:  \"Cisco Systems, Inc\",\n\t[3]byte{204, 24, 123}:  \"Manzanita Systems, Inc.\",\n\t[3]byte{204, 25, 168}:  \"PT Inovação e Sistemas SA\",\n\t[3]byte{204, 26, 250}:  \"zte corporation\",\n\t[3]byte{204, 27, 224}:  \"IEEE Registration Authority\",\n\t[3]byte{204, 30, 255}:  \"Metrological Group BV\",\n\t[3]byte{204, 31, 196}:  \"InVue\",\n\t[3]byte{204, 32, 232}:  \"Apple, Inc.\",\n\t[3]byte{204, 33, 25}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{204, 34, 24}:   \"InnoDigital Co., Ltd.\",\n\t[3]byte{204, 34, 55}:   \"IEEE Registration Authority\",\n\t[3]byte{204, 37, 239}:  \"Apple, Inc.\",\n\t[3]byte{204, 38, 45}:   \"Verifi, LLC\",\n\t[3]byte{204, 41, 245}:  \"Apple, Inc.\",\n\t[3]byte{204, 42, 128}:  \"Micro-Biz intelligence solutions Co.,Ltd\",\n\t[3]byte{204, 44, 131}:  \"DarkMatter L.L.C\",\n\t[3]byte{204, 45, 27}:   \"SFR\",\n\t[3]byte{204, 45, 33}:   \"Tenda Technology Co.,Ltd.Dongguan branch\",\n\t[3]byte{204, 45, 131}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{204, 45, 140}:  \"LG ELECTRONICS INC\",\n\t[3]byte{204, 45, 183}:  \"Apple, Inc.\",\n\t[3]byte{204, 45, 224}:  \"Routerboard.com\",\n\t[3]byte{204, 47, 113}:  \"Intel Corporate\",\n\t[3]byte{204, 48, 128}:  \"VAIO Corporation\",\n\t[3]byte{204, 50, 229}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{204, 51, 187}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{204, 52, 41}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{204, 52, 215}:  \"GEWISS S.P.A.\",\n\t[3]byte{204, 53, 64}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{204, 53, 90}:   \"SecuGen Corporation\",\n\t[3]byte{204, 55, 171}:  \"Edgecore Networks Corporation\",\n\t[3]byte{204, 57, 140}:  \"Shiningtek\",\n\t[3]byte{204, 58, 97}:   \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{204, 58, 223}:  \"Private\",\n\t[3]byte{204, 59, 62}:   \"Lester Electrical\",\n\t[3]byte{204, 59, 88}:   \"Curiouser Products Inc\",\n\t[3]byte{204, 60, 63}:   \"SA.S.S. Datentechnik AG\",\n\t[3]byte{204, 61, 130}:  \"Intel Corporate\",\n\t[3]byte{204, 62, 95}:   \"Hewlett Packard\",\n\t[3]byte{204, 63, 29}:   \"Intesis Software SL\",\n\t[3]byte{204, 63, 234}:  \"BAE Systems, Inc\",\n\t[3]byte{204, 64, 208}:  \"NETGEAR\",\n\t[3]byte{204, 65, 142}:  \"MSA Innovation\",\n\t[3]byte{204, 67, 227}:  \"Trump s.a.\",\n\t[3]byte{204, 68, 99}:   \"Apple, Inc.\",\n\t[3]byte{204, 70, 57}:   \"WAAV, Inc.\",\n\t[3]byte{204, 70, 78}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{204, 70, 214}:  \"Cisco Systems, Inc\",\n\t[3]byte{204, 71, 3}:    \"Intercon Systems Co., Ltd.\",\n\t[3]byte{204, 71, 189}:  \"Rhombus Systems\",\n\t[3]byte{204, 72, 58}:   \"Dell Inc.\",\n\t[3]byte{204, 74, 225}:  \"fourtec -Fourier Technologies\",\n\t[3]byte{204, 75, 115}:  \"AMPAK Technology, Inc.\",\n\t[3]byte{204, 75, 251}:  \"Hellberg Safety AB\",\n\t[3]byte{204, 77, 56}:   \"Carnegie Technologies\",\n\t[3]byte{204, 78, 36}:   \"Brocade Communications Systems LLC\",\n\t[3]byte{204, 78, 236}:  \"HUMAX Co., Ltd.\",\n\t[3]byte{204, 80, 10}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{204, 80, 28}:   \"KVH Industries, Inc.\",\n\t[3]byte{204, 80, 118}:  \"Ocom Communications, Inc.\",\n\t[3]byte{204, 80, 227}:  \"Espressif Inc.\",\n\t[3]byte{204, 81, 180}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{204, 82, 137}:  \"SHENZHEN OPTFOCUS TECHNOLOGY.,LTD\",\n\t[3]byte{204, 82, 175}:  \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{204, 83, 181}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{204, 84, 89}:   \"OnTime Networks AS\",\n\t[3]byte{204, 85, 173}:  \"RIM\",\n\t[3]byte{204, 89, 62}:   \"Sensium Healthcare Limited\",\n\t[3]byte{204, 90, 83}:   \"Cisco Systems, Inc\",\n\t[3]byte{204, 92, 117}:  \"Weightech Com. Imp. Exp. Equip. Pesagem Ltda\",\n\t[3]byte{204, 92, 222}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{204, 93, 78}:   \"Zyxel Communications Corporation\",\n\t[3]byte{204, 93, 87}:   \"Information  System Research Institute,Inc.\",\n\t[3]byte{204, 93, 120}:  \"JTD Consulting\",\n\t[3]byte{204, 95, 191}:  \"Topwise 3G Communication Co., Ltd.\",\n\t[3]byte{204, 96, 187}:  \"Empower RF Systems\",\n\t[3]byte{204, 97, 229}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{204, 100, 166}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{204, 101, 173}: \"ARRIS Group, Inc.\",\n\t[3]byte{204, 102, 10}:  \"Apple, Inc.\",\n\t[3]byte{204, 102, 178}: \"Nokia\",\n\t[3]byte{204, 105, 176}: \"Global Traffic Technologies, LLC\",\n\t[3]byte{204, 106, 16}:  \"The Chamberlain Group, Inc\",\n\t[3]byte{204, 107, 152}: \"Minetec Wireless Technologies\",\n\t[3]byte{204, 107, 241}: \"Sound Masking Inc.\",\n\t[3]byte{204, 109, 160}: \"Roku, Inc.\",\n\t[3]byte{204, 109, 239}: \"TJK Tietolaite Oy\",\n\t[3]byte{204, 110, 164}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{204, 112, 237}: \"Cisco Systems, Inc\",\n\t[3]byte{204, 114, 15}:  \"Viscount Systems Inc.\",\n\t[3]byte{204, 114, 134}: \"Xi'an Fengyu Information Technology Co., Ltd.\",\n\t[3]byte{204, 115, 20}:  \"HONG KONG WHEATEK TECHNOLOGY LIMITED\",\n\t[3]byte{204, 116, 152}: \"Filmetrics Inc.\",\n\t[3]byte{204, 117, 226}: \"ARRIS Group, Inc.\",\n\t[3]byte{204, 118, 105}: \"SEETECH\",\n\t[3]byte{204, 120, 95}:  \"Apple, Inc.\",\n\t[3]byte{204, 120, 171}: \"Texas Instruments\",\n\t[3]byte{204, 121, 74}:  \"BLU Products Inc.\",\n\t[3]byte{204, 121, 207}: \"SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\",\n\t[3]byte{204, 122, 48}:  \"CMAX Wireless Co., Ltd.\",\n\t[3]byte{204, 123, 53}:  \"zte corporation\",\n\t[3]byte{204, 123, 97}:  \"NIKKISO CO., LTD.\",\n\t[3]byte{204, 125, 55}:  \"ARRIS Group, Inc.\",\n\t[3]byte{204, 126, 231}: \"Panasonic Corporation AVC Networks Company\",\n\t[3]byte{204, 127, 117}: \"Cisco Systems, Inc\",\n\t[3]byte{204, 127, 118}: \"Cisco Systems, Inc\",\n\t[3]byte{204, 129, 218}: \"Phicomm (Shanghai) Co., Ltd.\",\n\t[3]byte{204, 130, 235}: \"KYOCERA CORPORATION \",\n\t[3]byte{204, 133, 108}: \"SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD\",\n\t[3]byte{204, 135, 74}:  \"Nokia\",\n\t[3]byte{204, 136, 38}:  \"LG Innotek\",\n\t[3]byte{204, 137, 253}: \"Nokia Corporation\",\n\t[3]byte{204, 140, 218}: \"Shenzhen Wei Da Intelligent Technology Go.,Ltd\",\n\t[3]byte{204, 140, 227}: \"Texas Instruments\",\n\t[3]byte{204, 142, 113}: \"Cisco Systems, Inc\",\n\t[3]byte{204, 144, 112}: \"Cisco Systems, Inc\",\n\t[3]byte{204, 144, 147}: \"Hansong Tehnologies\",\n\t[3]byte{204, 144, 232}: \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{204, 145, 43}:  \"TE Connectivity Touch Solutions\",\n\t[3]byte{204, 147, 74}:  \"Sierra Wireless\",\n\t[3]byte{204, 148, 74}:  \"Pfeiffer Vacuum GmbH\",\n\t[3]byte{204, 148, 112}: \"Kinestral Technologies, Inc.\",\n\t[3]byte{204, 149, 215}: \"Vizio, Inc\",\n\t[3]byte{204, 150, 53}:  \"LVS Co.,Ltd.\",\n\t[3]byte{204, 150, 160}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{204, 152, 139}: \"SONY Visual Products Inc.\",\n\t[3]byte{204, 152, 145}: \"Cisco Systems, Inc\",\n\t[3]byte{204, 153, 22}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{204, 158, 0}:   \"Nintendo Co., Ltd.\",\n\t[3]byte{204, 158, 162}: \"Amazon Technologies Inc.\",\n\t[3]byte{204, 158, 202}: \"HMD Global Oy\",\n\t[3]byte{204, 159, 53}:  \"Transbit Sp. z o.o.\",\n\t[3]byte{204, 159, 122}: \"Chiun Mai Communication Systems, Inc\",\n\t[3]byte{204, 160, 229}: \"DZG Metering GmbH\",\n\t[3]byte{204, 161, 43}:  \"TCL King Electrical Appliances (Huizhou) Co., Ltd\",\n\t[3]byte{204, 162, 25}:  \"SHENZHEN ALONG INVESTMENT CO.,LTD\",\n\t[3]byte{204, 162, 35}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{204, 162, 96}:  \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{204, 163, 116}: \"Guangdong Guanglian Electronic Technology Co.Ltd\",\n\t[3]byte{204, 164, 98}:  \"ARRIS Group, Inc.\",\n\t[3]byte{204, 164, 175}: \"Shenzhen Sowell Technology Co., LTD\",\n\t[3]byte{204, 166, 20}:  \"AIFA TECHNOLOGY CORP.\",\n\t[3]byte{204, 167, 193}: \"Google, Inc.\",\n\t[3]byte{204, 171, 44}:  \"HUMAX Co., Ltd.\",\n\t[3]byte{204, 175, 120}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{204, 176, 168}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{204, 176, 218}: \"Liteon Technology Corporation\",\n\t[3]byte{204, 177, 26}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{204, 177, 130}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{204, 178, 85}:  \"D-Link International\",\n\t[3]byte{204, 179, 171}: \"shenzhen Biocare Bio-Medical Equipment Co.,Ltd.\",\n\t[3]byte{204, 179, 248}: \"FUJITSU ISOTEC LIMITED\",\n\t[3]byte{204, 181, 90}:  \"Fraunhofer ITWM\",\n\t[3]byte{204, 182, 145}: \"NECMagnusCommunications\",\n\t[3]byte{204, 184, 136}: \"AnB Securite s.a.\",\n\t[3]byte{204, 184, 168}: \"AMPAK Technology, Inc.\",\n\t[3]byte{204, 184, 241}: \"EAGLE KINGDOM TECHNOLOGIES LIMITED\",\n\t[3]byte{204, 187, 254}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{204, 189, 53}:  \"Steinel GmbH\",\n\t[3]byte{204, 189, 211}: \"Ultimaker B.V.\",\n\t[3]byte{204, 190, 89}:  \"Calix Inc.\",\n\t[3]byte{204, 190, 113}: \"OptiLogix BV\",\n\t[3]byte{204, 192, 121}: \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{204, 193, 4}:   \"Applied Technical Systems\",\n\t[3]byte{204, 194, 97}:  \"IEEE Registration Authority\",\n\t[3]byte{204, 194, 224}: \"Raisecom Technology CO., LTD\",\n\t[3]byte{204, 195, 234}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{204, 197, 10}:  \"SHENZHEN DAJIAHAO TECHNOLOGY CO.,LTD\",\n\t[3]byte{204, 197, 229}: \"Dell Inc.\",\n\t[3]byte{204, 197, 239}: \"Co-Comm Servicios Telecomunicaciones S.L.\",\n\t[3]byte{204, 198, 43}:  \"Tri-Systems Corporation\",\n\t[3]byte{204, 199, 96}:  \"Apple, Inc.\",\n\t[3]byte{204, 200, 215}: \"CIAS Elettronica srl\",\n\t[3]byte{204, 201, 44}:  \"Schindler - PORT Technology\",\n\t[3]byte{204, 204, 78}:  \"Sun Fountainhead USA. Corp \",\n\t[3]byte{204, 204, 129}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{204, 204, 204}: \"Silicon Laboratories\",\n\t[3]byte{204, 205, 100}: \"SM-Electronic GmbH\",\n\t[3]byte{204, 206, 30}:  \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{204, 206, 64}:  \"Janteq Corp\",\n\t[3]byte{204, 208, 131}: \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{204, 210, 129}: \"Apple, Inc.\",\n\t[3]byte{204, 210, 155}: \"Shenzhen Bopengfa Elec&Technology CO.,Ltd\",\n\t[3]byte{204, 211, 30}:  \"IEEE Registration Authority\",\n\t[3]byte{204, 211, 157}: \"IEEE Registration Authority\",\n\t[3]byte{204, 211, 193}: \"Vestel Elektronik San ve Tic. A.Ş.\",\n\t[3]byte{204, 211, 226}: \"Jiangsu Yinhe  Electronics Co.,Ltd.\",\n\t[3]byte{204, 212, 46}:  \"Arcadyan Corporation\",\n\t[3]byte{204, 212, 161}: \"MitraStar Technology Corp.\",\n\t[3]byte{204, 213, 57}:  \"Cisco Systems, Inc\",\n\t[3]byte{204, 215, 60}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{204, 216, 17}:  \"Aiconn Technology Corporation\",\n\t[3]byte{204, 216, 31}:  \"Maipu Communication Technology Co.,Ltd.\",\n\t[3]byte{204, 216, 193}: \"Cisco Systems, Inc\",\n\t[3]byte{204, 217, 172}: \"Intel Corporate\",\n\t[3]byte{204, 217, 233}: \"SCR Engineers Ltd.\",\n\t[3]byte{204, 219, 147}: \"Cisco Systems, Inc\",\n\t[3]byte{204, 220, 85}:  \"Dragonchip Limited\",\n\t[3]byte{204, 224, 195}: \"EXTEN Technologies, Inc.\",\n\t[3]byte{204, 225, 127}: \"Juniper Networks\",\n\t[3]byte{204, 225, 148}: \"Juniper Networks\",\n\t[3]byte{204, 225, 213}: \"BUFFALO.INC\",\n\t[3]byte{204, 231, 152}: \"My Social Stuff\",\n\t[3]byte{204, 231, 223}: \"American Magnetics, Inc.\",\n\t[3]byte{204, 232, 172}: \"SOYEA Technology Co.,Ltd.\",\n\t[3]byte{204, 234, 28}:  \"DCONWORKS  Co., Ltd\",\n\t[3]byte{204, 237, 220}: \"MitraStar Technology Corp.\",\n\t[3]byte{204, 238, 217}: \"VAHLE Automation GmbH\",\n\t[3]byte{204, 239, 3}:   \"Hunan Keyshare Communication Technology Co., Ltd.\",\n\t[3]byte{204, 239, 72}:  \"Cisco Systems, Inc\",\n\t[3]byte{204, 240, 253}: \"China Mobile (Hangzhou) Information Technology Co., Ltd.\",\n\t[3]byte{204, 243, 165}: \"Chi Mei Communication Systems, Inc\",\n\t[3]byte{204, 244, 7}:   \"EUKREA ELECTROMATIQUE SARL\",\n\t[3]byte{204, 244, 17}:  \"Google, Inc.\",\n\t[3]byte{204, 245, 56}:  \"3isysnetworks\",\n\t[3]byte{204, 246, 122}: \"Ayecka Communication Systems LTD\",\n\t[3]byte{204, 247, 53}:  \"Amazon Technologies Inc.\",\n\t[3]byte{204, 248, 65}:  \"Lumewave\",\n\t[3]byte{204, 248, 240}: \"Xi'an HISU Multimedia Technology Co.,Ltd.\",\n\t[3]byte{204, 249, 84}:  \"Avaya Inc\",\n\t[3]byte{204, 249, 87}:  \"u-blox AG\",\n\t[3]byte{204, 249, 228}: \"Intel Corporate\",\n\t[3]byte{204, 249, 232}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{204, 250, 0}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{204, 251, 101}: \"Nintendo Co., Ltd.\",\n\t[3]byte{204, 252, 109}: \"RIZ TRANSMITTERS\",\n\t[3]byte{204, 252, 177}: \"Wireless Technology, Inc.\",\n\t[3]byte{204, 253, 23}:  \"TCT mobile ltd\",\n\t[3]byte{204, 254, 60}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{204, 255, 144}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{208, 3, 75}:    \"Apple, Inc.\",\n\t[3]byte{208, 3, 223}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{208, 3, 235}:   \"Texas Instruments\",\n\t[3]byte{208, 4, 1}:     \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{208, 4, 146}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{208, 5, 42}:    \"Arcadyan Corporation\",\n\t[3]byte{208, 5, 228}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{208, 7, 144}:   \"Texas Instruments\",\n\t[3]byte{208, 7, 202}:   \"Juniper Networks\",\n\t[3]byte{208, 10, 171}:  \"Yokogawa Digital Computer Corporation\",\n\t[3]byte{208, 13, 247}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{208, 14, 164}:  \"Porsche Cars North America\",\n\t[3]byte{208, 14, 217}:  \"Taicang T&W Electronics\",\n\t[3]byte{208, 15, 109}:  \"T&W Electronics Company\",\n\t[3]byte{208, 18, 66}:   \"BIOS Corporation\",\n\t[3]byte{208, 19, 30}:   \"Sunrex Technology Corp\",\n\t[3]byte{208, 19, 253}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{208, 20, 17}:   \"IEEE Registration Authority\",\n\t[3]byte{208, 21, 74}:   \"zte corporation\",\n\t[3]byte{208, 21, 166}:  \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{208, 22, 180}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{208, 23, 106}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{208, 23, 194}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{208, 25, 106}:  \"Ciena Corporation\",\n\t[3]byte{208, 26, 167}:  \"UniPrint\",\n\t[3]byte{208, 28, 60}:   \"TECNO MOBILE LIMITED\",\n\t[3]byte{208, 28, 187}:  \"Beijing Ctimes Digital Technology Co., Ltd.\",\n\t[3]byte{208, 33, 249}:  \"Ubiquiti Networks Inc.\",\n\t[3]byte{208, 34, 18}:   \"IEEE Registration Authority\",\n\t[3]byte{208, 34, 190}:  \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{208, 35, 219}:  \"Apple, Inc.\",\n\t[3]byte{208, 37, 22}:   \"MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{208, 37, 68}:   \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{208, 37, 152}:  \"Apple, Inc.\",\n\t[3]byte{208, 39, 136}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{208, 40, 186}:  \"Realme Chongqing MobileTelecommunications Corp Ltd\",\n\t[3]byte{208, 43, 32}:   \"Apple, Inc.\",\n\t[3]byte{208, 44, 69}:   \"littleBits Electronics, Inc.\",\n\t[3]byte{208, 45, 179}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{208, 49, 16}:   \"Ingenic Semiconductor Co.,Ltd\",\n\t[3]byte{208, 49, 105}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{208, 51, 17}:   \"Apple, Inc.\",\n\t[3]byte{208, 55, 66}:   \"Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\",\n\t[3]byte{208, 55, 69}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{208, 55, 97}:   \"Texas Instruments\",\n\t[3]byte{208, 57, 114}:  \"Texas Instruments\",\n\t[3]byte{208, 57, 179}:  \"ARRIS Group, Inc.\",\n\t[3]byte{208, 57, 234}:  \"NetApp\",\n\t[3]byte{208, 61, 82}:   \"Ava Security Limited\",\n\t[3]byte{208, 61, 195}:  \"AQ Corporation\",\n\t[3]byte{208, 62, 92}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{208, 63, 170}:  \"Apple, Inc.\",\n\t[3]byte{208, 65, 201}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{208, 67, 30}:   \"Dell Inc.\",\n\t[3]byte{208, 70, 220}:  \"Southwest Research Institute\",\n\t[3]byte{208, 72, 243}:  \"DATTUS Inc\",\n\t[3]byte{208, 73, 139}:  \"ZOOM SERVER\",\n\t[3]byte{208, 76, 193}:  \"SINTRONES Technology Corp.\",\n\t[3]byte{208, 77, 44}:   \"Roku, Inc.\",\n\t[3]byte{208, 78, 80}:   \"Mobiwire Mobiles (NingBo) Co., LTD\",\n\t[3]byte{208, 79, 126}:  \"Apple, Inc.\",\n\t[3]byte{208, 80, 153}:  \"ASRock Incorporation\",\n\t[3]byte{208, 81, 87}:   \"LEAX Arkivator Telecom\",\n\t[3]byte{208, 81, 98}:   \"Sony Mobile Communications Inc\",\n\t[3]byte{208, 82, 168}:  \"Physical Graph Corporation\",\n\t[3]byte{208, 83, 73}:   \"Liteon Technology Corporation\",\n\t[3]byte{208, 84, 45}:   \"Cambridge Industries(Group) Co.,Ltd.\",\n\t[3]byte{208, 85, 178}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{208, 87, 76}:   \"Cisco Systems, Inc\",\n\t[3]byte{208, 87, 123}:  \"Intel Corporate\",\n\t[3]byte{208, 87, 133}:  \"Pantech Co., Ltd.\",\n\t[3]byte{208, 87, 148}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{208, 87, 161}:  \"Werma Signaltechnik GmbH & Co. KG\",\n\t[3]byte{208, 88, 117}:  \"Active Control Technology Inc.\",\n\t[3]byte{208, 88, 168}:  \"zte corporation\",\n\t[3]byte{208, 88, 192}:  \"Qingdao Haier Multimedia Limited. \",\n\t[3]byte{208, 88, 252}:  \"BSkyB Ltd\",\n\t[3]byte{208, 89, 149}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{208, 89, 195}:  \"CeraMicro Technology Corporation\",\n\t[3]byte{208, 89, 228}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{208, 90, 0}:    \"Technicolor CH USA Inc.\",\n\t[3]byte{208, 90, 15}:   \"I-BT DIGITAL CO.,LTD\",\n\t[3]byte{208, 90, 241}:  \"Shenzhen Pulier Tech CO.,Ltd\",\n\t[3]byte{208, 91, 168}:  \"zte corporation\",\n\t[3]byte{208, 92, 122}:  \"Sartura d.o.o.\",\n\t[3]byte{208, 95, 100}:  \"IEEE Registration Authority\",\n\t[3]byte{208, 95, 184}:  \"Texas Instruments\",\n\t[3]byte{208, 95, 206}:  \"Hitachi Data Systems\",\n\t[3]byte{208, 96, 140}:  \"zte corporation\",\n\t[3]byte{208, 98, 160}:  \"China Essence Technology (Zhumadian) Co., Ltd.\",\n\t[3]byte{208, 99, 77}:   \"Meiko Maschinenbau GmbH &amp; Co. KG\",\n\t[3]byte{208, 99, 180}:  \"SolidRun Ltd.\",\n\t[3]byte{208, 101, 68}:  \"Apple, Inc.\",\n\t[3]byte{208, 101, 202}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{208, 102, 109}: \"Shenzhen Bus-Lan Technology Co., Ltd.\",\n\t[3]byte{208, 102, 123}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{208, 103, 38}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{208, 103, 229}: \"Dell Inc.\",\n\t[3]byte{208, 105, 158}: \"LUMINEX Lighting Control Equipment\",\n\t[3]byte{208, 105, 208}: \"Verto Medical Solutions, LLC\",\n\t[3]byte{208, 106, 31}:  \"BSE CO.,LTD.\",\n\t[3]byte{208, 110, 222}: \"Sagemcom Broadband SAS\",\n\t[3]byte{208, 111, 74}:  \"TOPWELL INTERNATIONAL HOLDINGS LIMITED\",\n\t[3]byte{208, 111, 130}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{208, 113, 196}: \"zte corporation\",\n\t[3]byte{208, 114, 220}: \"Cisco Systems, Inc\",\n\t[3]byte{208, 115, 127}: \"Mini-Circuits\",\n\t[3]byte{208, 115, 142}: \"DONG OH PRECISION CO., LTD. \",\n\t[3]byte{208, 115, 213}: \"LIFI LABS MANAGEMENT PTY LTD\",\n\t[3]byte{208, 117, 190}: \"Reno A&E\",\n\t[3]byte{208, 118, 80}:  \"IEEE Registration Authority\",\n\t[3]byte{208, 118, 143}: \"Calix Inc.\",\n\t[3]byte{208, 118, 231}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{208, 119, 20}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{208, 122, 181}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{208, 124, 45}:  \"Leie IOT technology Co., Ltd\",\n\t[3]byte{208, 125, 229}: \"Forward Pay Systems, Inc.\",\n\t[3]byte{208, 126, 40}:  \"Hewlett Packard\",\n\t[3]byte{208, 126, 53}:  \"Intel Corporate\",\n\t[3]byte{208, 127, 160}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{208, 127, 196}: \"Ou Wei Technology Co.，Ltd. of Shenzhen City\",\n\t[3]byte{208, 129, 122}: \"Apple, Inc.\",\n\t[3]byte{208, 131, 212}: \"Xtel Wireless ApS\",\n\t[3]byte{208, 132, 176}: \"Sagemcom Broadband SAS\",\n\t[3]byte{208, 135, 226}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{208, 137, 153}: \"APCON, Inc.\",\n\t[3]byte{208, 138, 85}:  \"Skullcandy\",\n\t[3]byte{208, 138, 145}: \"Technicolor CH USA Inc.\",\n\t[3]byte{208, 139, 126}: \"Passif Semiconductor\",\n\t[3]byte{208, 140, 181}: \"Texas Instruments\",\n\t[3]byte{208, 140, 255}: \"UPWIS AB\",\n\t[3]byte{208, 146, 158}: \"Microsoft Corporation\",\n\t[3]byte{208, 146, 250}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{208, 147, 128}: \"Ducere Technologies Pvt. Ltd.\",\n\t[3]byte{208, 147, 248}: \"Stonestreet One LLC\",\n\t[3]byte{208, 148, 102}: \"Dell Inc.\",\n\t[3]byte{208, 149, 199}: \"Pantech Co., Ltd.\",\n\t[3]byte{208, 150, 251}: \"DASAN Network Solutions\",\n\t[3]byte{208, 153, 213}: \"Alcatel-Lucent\",\n\t[3]byte{208, 155, 5}:   \"Emtronix\",\n\t[3]byte{208, 156, 48}:  \"Foster Electric Company, Limited\",\n\t[3]byte{208, 156, 122}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{208, 157, 10}:  \"LINKCOM\",\n\t[3]byte{208, 157, 171}: \"TCT mobile ltd\",\n\t[3]byte{208, 160, 214}: \"Chengdu TD Tech Ltd.\",\n\t[3]byte{208, 163, 17}:  \"Neuberger Gebäudeautomation GmbH\",\n\t[3]byte{208, 164, 177}: \"Sonifex Ltd.\",\n\t[3]byte{208, 165, 166}: \"Cisco Systems, Inc\",\n\t[3]byte{208, 166, 55}:  \"Apple, Inc.\",\n\t[3]byte{208, 171, 213}: \"Intel Corporate\",\n\t[3]byte{208, 174, 236}: \"Alpha Networks Inc.\",\n\t[3]byte{208, 175, 182}: \"Linktop Technology Co., LTD\",\n\t[3]byte{208, 176, 205}: \"Moen\",\n\t[3]byte{208, 177, 40}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{208, 178, 20}:  \"PoeWit Inc\",\n\t[3]byte{208, 178, 196}: \"Technicolor CH USA Inc.\",\n\t[3]byte{208, 179, 63}:  \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{208, 180, 93}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{208, 180, 152}: \"Robert Bosch LLC Automotive Electronics\",\n\t[3]byte{208, 181, 35}:  \"Bestcare Cloucal Corp.\",\n\t[3]byte{208, 181, 61}:  \"SEPRO ROBOTIQUE\",\n\t[3]byte{208, 181, 194}: \"Texas Instruments\",\n\t[3]byte{208, 182, 10}:  \"Xingluo Technology Company  Limited\",\n\t[3]byte{208, 186, 228}: \"Shanghai MXCHIP Information Technology Co., Ltd.\",\n\t[3]byte{208, 187, 128}: \"SHL Telemedicine International Ltd.\",\n\t[3]byte{208, 189, 1}:   \"DS International\",\n\t[3]byte{208, 190, 44}:  \"CNSLink Co., Ltd.\",\n\t[3]byte{208, 191, 156}: \"Hewlett Packard\",\n\t[3]byte{208, 192, 191}: \"Actions Microelectronics Co., Ltd\",\n\t[3]byte{208, 193, 147}: \"SKYBELL, INC\",\n\t[3]byte{208, 193, 177}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{208, 194, 130}: \"Cisco Systems, Inc\",\n\t[3]byte{208, 196, 47}:  \"Tamagawa Seiki Co.,Ltd.\",\n\t[3]byte{208, 197, 211}: \"AzureWave Technology Inc.\",\n\t[3]byte{208, 197, 216}: \"LATECOERE\",\n\t[3]byte{208, 197, 243}: \"Apple, Inc.\",\n\t[3]byte{208, 198, 55}:  \"Intel Corporate\",\n\t[3]byte{208, 198, 91}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{208, 199, 137}: \"Cisco Systems, Inc\",\n\t[3]byte{208, 199, 192}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{208, 200, 87}:  \"IEEE Registration Authority\",\n\t[3]byte{208, 205, 225}: \"Scientech Electronics\",\n\t[3]byte{208, 207, 94}:  \"Energy Micro AS\",\n\t[3]byte{208, 208, 3}:   \"Samsung Electronics Co.,LTD\",\n\t[3]byte{208, 208, 75}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{208, 208, 253}: \"Cisco Systems, Inc\",\n\t[3]byte{208, 210, 18}:  \"K2NET Co.,Ltd.\",\n\t[3]byte{208, 210, 134}: \"Beckman Coulter K.K.\",\n\t[3]byte{208, 210, 176}: \"Apple, Inc.\",\n\t[3]byte{208, 211, 224}: \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{208, 211, 252}: \"Mios, Ltd.\",\n\t[3]byte{208, 212, 18}:  \"ADB Broadband Italia\",\n\t[3]byte{208, 212, 113}: \"MVTECH co., Ltd\",\n\t[3]byte{208, 214, 204}: \"Wintop\",\n\t[3]byte{208, 215, 131}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{208, 217, 79}:  \"IEEE Registration Authority\",\n\t[3]byte{208, 219, 50}:  \"Nokia Corporation\",\n\t[3]byte{208, 221, 73}:  \"Juniper Networks\",\n\t[3]byte{208, 223, 154}: \"Liteon Technology Corporation\",\n\t[3]byte{208, 223, 178}: \"Genie Networks Limited\",\n\t[3]byte{208, 223, 199}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{208, 225, 64}:  \"Apple, Inc.\",\n\t[3]byte{208, 227, 71}:  \"Yoga\",\n\t[3]byte{208, 228, 11}:  \"Wearable Inc.\",\n\t[3]byte{208, 228, 74}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{208, 229, 77}:  \"ARRIS Group, Inc.\",\n\t[3]byte{208, 231, 130}: \"AzureWave Technology Inc.\",\n\t[3]byte{208, 235, 3}:   \"Zhehua technology limited\",\n\t[3]byte{208, 235, 158}: \"Seowoo Inc.\",\n\t[3]byte{208, 236, 53}:  \"Cisco Systems, Inc\",\n\t[3]byte{208, 239, 193}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{208, 240, 219}: \"Ericsson\",\n\t[3]byte{208, 242, 127}: \"SteadyServ Technoligies, LLC\",\n\t[3]byte{208, 243, 245}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{208, 247, 59}:  \"Helmut Mauell GmbH Werk Weida\",\n\t[3]byte{208, 248, 140}: \"Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.\",\n\t[3]byte{208, 250, 29}:  \"Qihoo  360  Technology Co.,Ltd\",\n\t[3]byte{208, 252, 204}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{208, 255, 80}:  \"Texas Instruments\",\n\t[3]byte{208, 255, 152}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 0, 13}:    \"Phoenix Broadband Technologies, LLC.\",\n\t[3]byte{212, 0, 87}:    \"MC Technologies GmbH\",\n\t[3]byte{212, 1, 41}:    \"Broadcom\",\n\t[3]byte{212, 1, 109}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{212, 2, 74}:    \"Delphian Systems LLC\",\n\t[3]byte{212, 4, 205}:   \"ARRIS Group, Inc.\",\n\t[3]byte{212, 4, 255}:   \"Juniper Networks\",\n\t[3]byte{212, 5, 152}:   \"ARRIS Group, Inc.\",\n\t[3]byte{212, 10, 169}:  \"ARRIS Group, Inc.\",\n\t[3]byte{212, 11, 26}:   \"HTC Corporation\",\n\t[3]byte{212, 11, 185}:  \"Solid Semecs bv.\",\n\t[3]byte{212, 15, 178}:  \"Applied Micro Electronics AME bv\",\n\t[3]byte{212, 16, 144}:  \"iNFORM Systems AG\",\n\t[3]byte{212, 16, 207}:  \"Huanshun Network Science and Technology Co., Ltd.\",\n\t[3]byte{212, 17, 163}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{212, 17, 214}:  \"ShotSpotter, Inc.\",\n\t[3]byte{212, 18, 67}:   \"AMPAK Technology, Inc.\",\n\t[3]byte{212, 18, 150}:  \"Anobit Technologies Ltd.\",\n\t[3]byte{212, 18, 187}:  \"Quadrant Components Inc. Ltd\",\n\t[3]byte{212, 19, 111}:  \"Asia Pacific Brands\",\n\t[3]byte{212, 26, 63}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{212, 26, 200}:  \"Nippon Printer Engineering\",\n\t[3]byte{212, 28, 28}:   \"RCF S.P.A.\",\n\t[3]byte{212, 29, 113}:  \"Palo Alto Networks\",\n\t[3]byte{212, 30, 53}:   \"TOHO Electronics INC.\",\n\t[3]byte{212, 31, 12}:   \"JAI Manufacturing\",\n\t[3]byte{212, 32, 109}:  \"HTC Corporation\",\n\t[3]byte{212, 32, 176}:  \"Mist Systems, Inc.\",\n\t[3]byte{212, 33, 34}:   \"Sercomm Corporation.\",\n\t[3]byte{212, 34, 63}:   \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{212, 34, 78}:   \"Alcatel Lucent\",\n\t[3]byte{212, 34, 205}:  \"Xsens Technologies B.V.\",\n\t[3]byte{212, 36, 147}:  \"GW Technologies Co.,Ltd\",\n\t[3]byte{212, 37, 139}:  \"Intel Corporate\",\n\t[3]byte{212, 37, 204}:  \"IEEE Registration Authority\",\n\t[3]byte{212, 39, 81}:   \"Infopia Co., Ltd\",\n\t[3]byte{212, 40, 178}:  \"ioBridge, Inc.\",\n\t[3]byte{212, 40, 213}:  \"TCT mobile ltd\",\n\t[3]byte{212, 41, 234}:  \"Zimory GmbH\",\n\t[3]byte{212, 44, 15}:   \"ARRIS Group, Inc.\",\n\t[3]byte{212, 44, 61}:   \"Sky Light Digital Limited\",\n\t[3]byte{212, 44, 68}:   \"Cisco Systems, Inc\",\n\t[3]byte{212, 45, 197}:  \"Panasonic i-PRO Sensing Solutions Co., Ltd.\",\n\t[3]byte{212, 47, 35}:   \"Akenori PTE Ltd\",\n\t[3]byte{212, 49, 157}:  \"Sinwatec\",\n\t[3]byte{212, 50, 96}:   \"GoPro\",\n\t[3]byte{212, 50, 102}:  \"Fike Corporation\",\n\t[3]byte{212, 53, 29}:   \"Technicolor\",\n\t[3]byte{212, 54, 57}:   \"Texas Instruments\",\n\t[3]byte{212, 54, 219}:  \"Jiangsu Toppower Automotive Electronics Co., Ltd\",\n\t[3]byte{212, 55, 215}:  \"zte corporation\",\n\t[3]byte{212, 56, 156}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{212, 58, 46}:   \"SHENZHEN MTC CO LTD\",\n\t[3]byte{212, 58, 101}:  \"IGRS Engineering Lab Ltd.\",\n\t[3]byte{212, 58, 233}:  \"DONGGUAN ipt INDUSTRIAL CO., LTD\",\n\t[3]byte{212, 59, 4}:    \"Intel Corporate\",\n\t[3]byte{212, 61, 57}:   \"Dialog Semiconductor\",\n\t[3]byte{212, 61, 103}:  \"Carma Industries Inc.\",\n\t[3]byte{212, 61, 126}:  \"Micro-Star Int'l Co, Ltd\",\n\t[3]byte{212, 63, 203}:  \"ARRIS Group, Inc.\",\n\t[3]byte{212, 64, 208}:  \"OCOSMOS Co., LTD\",\n\t[3]byte{212, 64, 240}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 65, 101}:  \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{212, 67, 168}:  \"Changzhou Haojie Electric Co., Ltd.\",\n\t[3]byte{212, 69, 232}:  \"Jiangxi Hongpai Technology Co., Ltd.\",\n\t[3]byte{212, 70, 73}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 70, 225}:  \"Apple, Inc.\",\n\t[3]byte{212, 75, 94}:   \"TAIYO YUDEN CO., LTD.\",\n\t[3]byte{212, 75, 182}:  \"Zhejiang Tmall Technology Co., Ltd.\",\n\t[3]byte{212, 76, 36}:   \"Vuppalamritha Magnetic Components LTD\",\n\t[3]byte{212, 76, 156}:  \"Shenzhen YOOBAO Technology Co.Ltd\",\n\t[3]byte{212, 76, 167}:  \"Informtekhnika & Communication, LLC\",\n\t[3]byte{212, 77, 164}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{212, 79, 104}:  \"Eidetic Communications Inc\",\n\t[3]byte{212, 79, 128}:  \"Kemper Digital GmbH\",\n\t[3]byte{212, 80, 63}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{212, 80, 122}:  \"CEIVA Logic, Inc\",\n\t[3]byte{212, 82, 42}:   \"TangoWiFi.com\",\n\t[3]byte{212, 82, 81}:   \"IBT Ingenieurbureau Broennimann Thun\",\n\t[3]byte{212, 82, 151}:  \"nSTREAMS Technologies, Inc.\",\n\t[3]byte{212, 82, 238}:  \"BSkyB Ltd\",\n\t[3]byte{212, 83, 131}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{212, 83, 175}:  \"VIGO System S.A.\",\n\t[3]byte{212, 85, 86}:   \"Fiber Mountain Inc.\",\n\t[3]byte{212, 85, 190}:  \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 88, 0}:    \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{212, 90, 178}:  \"Galleon Systems\",\n\t[3]byte{212, 92, 112}:  \"Wi-Fi Alliance\",\n\t[3]byte{212, 93, 66}:   \"Nokia Corporation\",\n\t[3]byte{212, 93, 100}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{212, 93, 223}:  \"PEGATRON CORPORATION\",\n\t[3]byte{212, 94, 236}:  \"Beijing Xiaomi Electronics Co., Ltd.\",\n\t[3]byte{212, 95, 37}:   \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{212, 96, 117}:  \"Baidu Online Network Technology (Beijing) Co., Ltd\",\n\t[3]byte{212, 96, 227}:  \"Sercomm Corporation.\",\n\t[3]byte{212, 97, 46}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 97, 50}:   \"Pro Concept Manufacturer Co.,Ltd.\",\n\t[3]byte{212, 97, 157}:  \"Apple, Inc.\",\n\t[3]byte{212, 97, 218}:  \"Apple, Inc.\",\n\t[3]byte{212, 97, 254}:  \"Hangzhou H3C Technologies Co., Limited\",\n\t[3]byte{212, 98, 234}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 99, 198}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{212, 99, 254}:  \"Arcadyan Corporation\",\n\t[3]byte{212, 100, 247}: \"CHENGDU USEE DIGITAL TECHNOLOGY CO., LTD\",\n\t[3]byte{212, 102, 168}: \"Riedo Networks Ltd\",\n\t[3]byte{212, 103, 97}:  \"XonTel Technology Co.\",\n\t[3]byte{212, 103, 211}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{212, 103, 231}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{212, 104, 77}:  \"Ruckus Wireless\",\n\t[3]byte{212, 104, 103}: \"Neoventus Design Group\",\n\t[3]byte{212, 104, 186}: \"Shenzhen Sundray Technologies Company Limited\",\n\t[3]byte{212, 105, 165}: \"Miura Systems Ltd.\",\n\t[3]byte{212, 106, 53}:  \"Cisco Systems, Inc\",\n\t[3]byte{212, 106, 106}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{212, 106, 145}: \"SnapAV\",\n\t[3]byte{212, 106, 168}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 107, 166}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 108, 191}: \"Goodrich ISR\",\n\t[3]byte{212, 108, 218}: \"CSM GmbH\",\n\t[3]byte{212, 109, 80}:  \"Cisco Systems, Inc\",\n\t[3]byte{212, 109, 109}: \"Intel Corporate\",\n\t[3]byte{212, 110, 14}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{212, 110, 92}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 111, 66}:  \"WAXESS USA Inc\",\n\t[3]byte{212, 114, 8}:   \"Bragi GmbH\",\n\t[3]byte{212, 114, 38}:  \"zte corporation\",\n\t[3]byte{212, 116, 27}:  \"Beijing HuaDa ZhiBao Electronic System Co.,Ltd.\",\n\t[3]byte{212, 118, 234}: \"zte corporation\",\n\t[3]byte{212, 119, 43}:  \"Nanjing Ztlink Network Technology Co.,Ltd\",\n\t[3]byte{212, 119, 178}: \"Netix Global B.V.\",\n\t[3]byte{212, 120, 86}:  \"Avaya Inc\",\n\t[3]byte{212, 120, 155}: \"Cisco Systems, Inc\",\n\t[3]byte{212, 121, 195}: \"Cameronet GmbH & Co. KG\",\n\t[3]byte{212, 122, 226}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{212, 123, 53}:  \"NEO Monitors AS\",\n\t[3]byte{212, 123, 117}: \"HARTING Electronics GmbH\",\n\t[3]byte{212, 123, 176}: \"ASKEY COMPUTER CORP\",\n\t[3]byte{212, 124, 68}:  \"IEEE Registration Authority\",\n\t[3]byte{212, 125, 252}: \"TECNO MOBILE LIMITED\",\n\t[3]byte{212, 129, 202}: \"iDevices, LLC\",\n\t[3]byte{212, 129, 215}: \"Dell Inc.\",\n\t[3]byte{212, 130, 62}:  \"Argosy Technologies, Ltd.\",\n\t[3]byte{212, 131, 4}:   \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 133, 100}: \"Hewlett Packard\",\n\t[3]byte{212, 135, 216}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{212, 136, 63}:  \"HDPRO CO., LTD.\",\n\t[3]byte{212, 136, 144}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{212, 138, 57}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{212, 140, 181}: \"Cisco Systems, Inc\",\n\t[3]byte{212, 141, 217}: \"Meld Technology, Inc\",\n\t[3]byte{212, 143, 51}:  \"Microsoft Corporation\",\n\t[3]byte{212, 143, 170}: \"Sogecam Industrial, S.A.\",\n\t[3]byte{212, 144, 156}: \"Apple, Inc.\",\n\t[3]byte{212, 144, 224}: \"Topcon Electronics GmbH & Co. KG\",\n\t[3]byte{212, 145, 175}: \"Electroacustica General Iberica, S.A.\",\n\t[3]byte{212, 146, 52}:  \"NEC Corporation\",\n\t[3]byte{212, 147, 152}: \"Nokia Corporation\",\n\t[3]byte{212, 147, 160}: \"Fidelix Oy\",\n\t[3]byte{212, 148, 90}:  \"COSMO CO., LTD\",\n\t[3]byte{212, 148, 161}: \"Texas Instruments\",\n\t[3]byte{212, 148, 232}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 149, 36}:  \"Clover Network, Inc.\",\n\t[3]byte{212, 150, 223}: \"SUNGJIN C&T CO.,LTD\",\n\t[3]byte{212, 151, 11}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{212, 154, 32}:  \"Apple, Inc.\",\n\t[3]byte{212, 154, 160}: \"VNPT TECHNOLOGY\",\n\t[3]byte{212, 155, 92}:  \"Chongqing Miedu Technology Co., Ltd.\",\n\t[3]byte{212, 156, 40}:  \"JayBird LLC\",\n\t[3]byte{212, 156, 142}: \"University of FUKUI\",\n\t[3]byte{212, 156, 221}: \"AMPAK Technology,Inc.\",\n\t[3]byte{212, 156, 244}: \"Palo Alto Networks\",\n\t[3]byte{212, 157, 192}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{212, 158, 5}:   \"zte corporation\",\n\t[3]byte{212, 158, 59}:  \"Guangzhou\\u00a0Shiyuan\\u00a0Electronic\\u00a0Technology\\u00a0Company\\u00a0Limited\",\n\t[3]byte{212, 158, 109}: \"Wuhan Zhongyuan Huadian Science & Technology Co.,\",\n\t[3]byte{212, 160, 42}:  \"Cisco Systems, Inc\",\n\t[3]byte{212, 161, 72}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 163, 61}:  \"Apple, Inc.\",\n\t[3]byte{212, 164, 37}:  \"SMAX Technology Co., Ltd.\",\n\t[3]byte{212, 164, 153}: \"InView Technology Corporation\",\n\t[3]byte{212, 166, 81}:  \"HANGZHOU AIXIANGJI TECHNOLOGY CO., LTD\",\n\t[3]byte{212, 169, 40}:  \"GreenWave Reality Inc\",\n\t[3]byte{212, 170, 255}: \"MICRO WORLD \",\n\t[3]byte{212, 171, 130}: \"ARRIS Group, Inc.\",\n\t[3]byte{212, 171, 205}: \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{212, 172, 78}:  \"BODi rS, LLC\",\n\t[3]byte{212, 173, 45}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{212, 173, 113}: \"Cisco Systems, Inc\",\n\t[3]byte{212, 173, 189}: \"Cisco Systems, Inc\",\n\t[3]byte{212, 174, 5}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{212, 174, 82}:  \"Dell Inc.\",\n\t[3]byte{212, 175, 247}: \"Arista Networks\",\n\t[3]byte{212, 177, 16}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 177, 105}: \"Le Shi Zhi Xin Electronic Technology (Tianjin) Limited\",\n\t[3]byte{212, 178, 122}: \"ARRIS Group, Inc.\",\n\t[3]byte{212, 180, 62}:  \"Messcomp Datentechnik GmbH\",\n\t[3]byte{212, 183, 9}:   \"zte corporation\",\n\t[3]byte{212, 183, 97}:  \"Sichuan\\u00a0AI-Link\\u00a0Technology\\u00a0Co.,\\u00a0Ltd.\",\n\t[3]byte{212, 184, 255}: \"Home Control Singapore Pte Ltd\",\n\t[3]byte{212, 185, 47}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{212, 187, 200}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{212, 187, 230}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{212, 189, 30}:  \"5VT Technologies,Taiwan LTd.\",\n\t[3]byte{212, 190, 217}: \"Dell Inc.\",\n\t[3]byte{212, 191, 45}:  \"SE Controls Asia Pacific Ltd\",\n\t[3]byte{212, 191, 127}: \"UPVEL\",\n\t[3]byte{212, 193, 158}: \"Ruckus Wireless\",\n\t[3]byte{212, 193, 200}: \"zte corporation\",\n\t[3]byte{212, 193, 252}: \"Nokia Corporation\",\n\t[3]byte{212, 199, 102}: \"Acentic GmbH\",\n\t[3]byte{212, 200, 176}: \"Prime Electronics & Satellitics Inc.\",\n\t[3]byte{212, 201, 60}:  \"Cisco Systems, Inc\",\n\t[3]byte{212, 201, 75}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{212, 201, 178}: \"Quanergy Systems Inc\",\n\t[3]byte{212, 201, 239}: \"Hewlett Packard\",\n\t[3]byte{212, 202, 109}: \"Routerboard.com\",\n\t[3]byte{212, 202, 110}: \"u-blox AG\",\n\t[3]byte{212, 203, 175}: \"Nokia Corporation\",\n\t[3]byte{212, 206, 184}: \"Enatel LTD\",\n\t[3]byte{212, 207, 55}:  \"Symbolic IO\",\n\t[3]byte{212, 207, 249}: \"Shenzhen SEI Robotics Co.,Ltd\",\n\t[3]byte{212, 209, 132}: \"ADB Broadband Italia\",\n\t[3]byte{212, 210, 73}:  \"Power Ethernet\",\n\t[3]byte{212, 210, 82}:  \"Intel Corporate\",\n\t[3]byte{212, 210, 214}: \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{212, 210, 229}: \"BKAV Corporation\",\n\t[3]byte{212, 213, 13}:  \"Southwest Microwave, Inc\",\n\t[3]byte{212, 213, 27}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 215, 72}:  \"Cisco Systems, Inc\",\n\t[3]byte{212, 215, 169}: \"Shanghai Kaixiang Info Tech LTD\",\n\t[3]byte{212, 216, 152}: \"Korea CNO Tech Co., Ltd\",\n\t[3]byte{212, 217, 25}:  \"GoPro\",\n\t[3]byte{212, 218, 205}: \"BSkyB Ltd\",\n\t[3]byte{212, 220, 9}:   \"Mist Systems, Inc.\",\n\t[3]byte{212, 220, 205}: \"Apple, Inc.\",\n\t[3]byte{212, 223, 87}:  \"Alpinion Medical Systems\",\n\t[3]byte{212, 224, 142}: \"ValueHD Corporation\",\n\t[3]byte{212, 227, 44}:  \"S. Siedle & Sohne\",\n\t[3]byte{212, 227, 63}:  \"Nokia\",\n\t[3]byte{212, 230, 183}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{212, 232, 128}: \"Cisco Systems, Inc\",\n\t[3]byte{212, 232, 178}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{212, 233, 11}:  \"CVT CO.,LTD\",\n\t[3]byte{212, 234, 14}:  \"Avaya Inc\",\n\t[3]byte{212, 236, 12}:  \"Harley-Davidson Motor Company\",\n\t[3]byte{212, 236, 134}: \"LinkedHope Intelligent Technologies Co., Ltd\",\n\t[3]byte{212, 238, 7}:   \"HIWIFI Co., Ltd.\",\n\t[3]byte{212, 240, 39}:  \"Trust Power Ltd.\",\n\t[3]byte{212, 240, 87}:  \"Nintendo Co.,Ltd\",\n\t[3]byte{212, 240, 180}: \"Napco Security Technologies\",\n\t[3]byte{212, 241, 67}:  \"IPROAD.,Inc\",\n\t[3]byte{212, 242, 7}:   \"DIAODIAO(Beijing)Technology CO.,Ltd\",\n\t[3]byte{212, 243, 55}:  \"Xunison Ltd.\",\n\t[3]byte{212, 244, 111}: \"Apple, Inc.\",\n\t[3]byte{212, 244, 190}: \"Palo Alto Networks\",\n\t[3]byte{212, 245, 19}:  \"Texas Instruments\",\n\t[3]byte{212, 245, 39}:  \"SIEMENS AG\",\n\t[3]byte{212, 245, 71}:  \"Google, Inc.\",\n\t[3]byte{212, 245, 239}: \"Hewlett Packard Enterprise\",\n\t[3]byte{212, 246, 63}:  \"IEA S.R.L.\",\n\t[3]byte{212, 247, 86}:  \"zte corporation\",\n\t[3]byte{212, 247, 134}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{212, 248, 41}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{212, 249, 161}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{212, 252, 19}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{216, 0, 77}:    \"Apple, Inc.\",\n\t[3]byte{216, 5, 46}:    \"Skyviia Corporation\",\n\t[3]byte{216, 6, 209}:   \"Honeywell Fire System (Shanghai) Co,. Ltd.\",\n\t[3]byte{216, 7, 182}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{216, 8, 49}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{216, 8, 245}:   \"Arcadia Networks Co. Ltd. \",\n\t[3]byte{216, 9, 195}:   \"Cercacor Labs\",\n\t[3]byte{216, 11, 154}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{216, 11, 203}:  \"Telink Semiconductor (Shanghai) Co., Ltd.\",\n\t[3]byte{216, 12, 207}:  \"C.G.V. S.A.S.\",\n\t[3]byte{216, 13, 23}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{216, 13, 227}:  \"FXI TECHNOLOGIES AS\",\n\t[3]byte{216, 15, 153}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{216, 18, 101}:  \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{216, 19, 153}:  \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{216, 20, 214}:  \"SURE SYSTEM Co Ltd\",\n\t[3]byte{216, 21, 13}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{216, 22, 10}:   \"Nippon Electro-Sensory Devices\",\n\t[3]byte{216, 22, 193}:  \"DEWAV (HK) ELECTRONICS LIMITED\",\n\t[3]byte{216, 24, 43}:   \"Conti Temic Microelectronic GmbH\",\n\t[3]byte{216, 24, 211}:  \"Juniper Networks\",\n\t[3]byte{216, 25, 122}:  \"Nuheara Ltd\",\n\t[3]byte{216, 25, 206}:  \"Telesquare\",\n\t[3]byte{216, 27, 254}:  \"TWINLINX CORPORATION\",\n\t[3]byte{216, 28, 20}:   \"Compacta International, Ltd.\",\n\t[3]byte{216, 28, 121}:  \"Apple, Inc.\",\n\t[3]byte{216, 29, 114}:  \"Apple, Inc.\",\n\t[3]byte{216, 30, 221}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{216, 30, 222}:  \"B&W Group Ltd\",\n\t[3]byte{216, 31, 204}:  \"Brocade Communications Systems LLC\",\n\t[3]byte{216, 32, 159}:  \"Cubro Acronet GesmbH\",\n\t[3]byte{216, 34, 244}:  \"Avnet Silica\",\n\t[3]byte{216, 36, 119}:  \"Universal Electric Corporation\",\n\t[3]byte{216, 36, 189}:  \"Cisco Systems, Inc\",\n\t[3]byte{216, 37, 34}:   \"ARRIS Group, Inc.\",\n\t[3]byte{216, 37, 176}:  \"Rockeetech Systems Co.,Ltd.\",\n\t[3]byte{216, 38, 185}:  \"Guangdong Coagent Electronics S&amp;T Co.,Ltd.\",\n\t[3]byte{216, 39, 12}:   \"MaxTronic International Co., Ltd.\",\n\t[3]byte{216, 40, 201}:  \"General Electric Consumer and Industrial\",\n\t[3]byte{216, 41, 22}:   \"Ascent Communication Technology\",\n\t[3]byte{216, 41, 24}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{216, 41, 134}:  \"Best Wish Technology LTD\",\n\t[3]byte{216, 42, 21}:   \"Leitner SpA\",\n\t[3]byte{216, 42, 126}:  \"Nokia Corporation\",\n\t[3]byte{216, 45, 155}:  \"Shenzhen G.Credit Communication Technology Co., Ltd\",\n\t[3]byte{216, 45, 225}:  \"Tricascade Inc.\",\n\t[3]byte{216, 47, 230}:  \"Zhejiang Tmall Technology Co., Ltd.\",\n\t[3]byte{216, 48, 98}:   \"Apple, Inc.\",\n\t[3]byte{216, 49, 52}:   \"Roku, Inc\",\n\t[3]byte{216, 49, 207}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{216, 50, 20}:   \"Tenda Technology Co.,Ltd.Dongguan branch\",\n\t[3]byte{216, 50, 90}:   \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{216, 50, 227}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{216, 51, 127}:  \"Office FA.com Co.,Ltd.\",\n\t[3]byte{216, 52, 238}:  \"Stem Audio\",\n\t[3]byte{216, 55, 190}:  \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{216, 56, 13}:   \"SHENZHEN IP-COM Network Co.,Ltd\",\n\t[3]byte{216, 56, 252}:  \"Ruckus Wireless\",\n\t[3]byte{216, 58, 245}:  \"Wideband Labs LLC\",\n\t[3]byte{216, 59, 191}:  \"Intel Corporate\",\n\t[3]byte{216, 60, 105}:  \"Shenzhen TINNO Mobile Technology Corp.\",\n\t[3]byte{216, 66, 172}:  \"Shanghai Feixun Communication Co.,Ltd.\",\n\t[3]byte{216, 66, 226}:  \"Canary Connect, Inc.\",\n\t[3]byte{216, 67, 237}:  \"Suzuken\",\n\t[3]byte{216, 68, 92}:   \"DEV Tecnologia Ind Com Man Eq LTDA\",\n\t[3]byte{216, 69, 43}:   \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{216, 70, 6}:    \"Silicon Valley Global Marketing\",\n\t[3]byte{216, 71, 16}:   \"Sichuan Changhong Electric Ltd.\",\n\t[3]byte{216, 71, 50}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{216, 72, 238}:  \"Hangzhou Xueji Technology Co., Ltd.\",\n\t[3]byte{216, 73, 11}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{216, 73, 47}:   \"CANON INC.\",\n\t[3]byte{216, 74, 135}:  \"OI ELECTRIC CO.,LTD\",\n\t[3]byte{216, 75, 42}:   \"Cognitas Technologies, Inc.\",\n\t[3]byte{216, 76, 144}:  \"Apple, Inc.\",\n\t[3]byte{216, 77, 185}:  \"Wu Qi Technologies,Inc.\",\n\t[3]byte{216, 79, 55}:   \"Proxis, spol. s r.o.\",\n\t[3]byte{216, 79, 184}:  \"LG ELECTRONICS\",\n\t[3]byte{216, 80, 230}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{216, 84, 58}:   \"Texas Instruments\",\n\t[3]byte{216, 84, 162}:  \"Extreme Networks, Inc.\",\n\t[3]byte{216, 85, 117}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{216, 85, 163}:  \"zte corporation\",\n\t[3]byte{216, 87, 239}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{216, 88, 215}:  \"CZ.NIC, z.s.p.o.\",\n\t[3]byte{216, 91, 42}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{216, 93, 76}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{216, 93, 132}:  \"CAx soft GmbH\",\n\t[3]byte{216, 93, 226}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{216, 93, 239}:  \"Busch-Jaeger Elektro GmbH\",\n\t[3]byte{216, 93, 251}:  \"Private\",\n\t[3]byte{216, 95, 119}:  \"Telink Semiconductor (Shanghai) Co., Ltd.\",\n\t[3]byte{216, 96, 176}:  \"bioMérieux Italia S.p.A.\",\n\t[3]byte{216, 96, 179}:  \"Guangdong Global Electronic Technology CO.，LTD\",\n\t[3]byte{216, 97, 98}:   \"Wistron Neweb Corporation\",\n\t[3]byte{216, 97, 148}:  \"Objetivos y Sevicios de Valor Añadido\",\n\t[3]byte{216, 98, 219}:  \"Eno Inc.\",\n\t[3]byte{216, 99, 117}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{216, 101, 149}: \"Toy's Myth Inc.\",\n\t[3]byte{216, 102, 198}: \"Shenzhen Daystar Technology Co.,ltd\",\n\t[3]byte{216, 102, 238}: \"BOXIN COMMUNICATION CO.,LTD.\",\n\t[3]byte{216, 103, 217}: \"Cisco Systems, Inc\",\n\t[3]byte{216, 104, 195}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{216, 105, 96}:  \"Steinsvik\",\n\t[3]byte{216, 107, 247}: \"Nintendo Co., Ltd.\",\n\t[3]byte{216, 108, 2}:   \"Huaqin Telecom Technology Co.,Ltd\",\n\t[3]byte{216, 108, 99}:  \"Google, Inc.\",\n\t[3]byte{216, 108, 233}: \"Sagemcom Broadband SAS\",\n\t[3]byte{216, 113, 77}:  \"Texas Instruments\",\n\t[3]byte{216, 113, 87}:  \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{216, 116, 149}: \"zte corporation\",\n\t[3]byte{216, 117, 51}:  \"Nokia Corporation\",\n\t[3]byte{216, 118, 10}:  \"Escort, Inc.\",\n\t[3]byte{216, 119, 139}: \"Intelbras\",\n\t[3]byte{216, 120, 127}: \"Ubee Interactive Co., Limited\",\n\t[3]byte{216, 120, 229}: \"KUHN SA\",\n\t[3]byte{216, 121, 136}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{216, 124, 221}: \"SANIX INCORPORATED\",\n\t[3]byte{216, 125, 127}: \"Sagemcom Broadband SAS\",\n\t[3]byte{216, 126, 118}: \"ITEL MOBILE LIMITED\",\n\t[3]byte{216, 126, 177}: \"x.o.ware, inc.\",\n\t[3]byte{216, 128, 57}:  \"Microchip Technology Inc.\",\n\t[3]byte{216, 128, 60}:  \"Anhui Huami Information Technology Company Limited\",\n\t[3]byte{216, 129, 206}: \"AHN INC.\",\n\t[3]byte{216, 132, 102}: \"Extreme Networks, Inc.\",\n\t[3]byte{216, 134, 11}:  \"IEEE Registration Authority\",\n\t[3]byte{216, 135, 213}: \"Leadcore Technology CO.,LTD\",\n\t[3]byte{216, 136, 206}: \"RF Technology Pty Ltd\",\n\t[3]byte{216, 138, 59}:  \"UNIT-EM\",\n\t[3]byte{216, 138, 220}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{216, 139, 76}:  \"KingTing Tech.\",\n\t[3]byte{216, 140, 121}: \"Google, Inc.\",\n\t[3]byte{216, 141, 92}:  \"Elentec\",\n\t[3]byte{216, 141, 200}: \"Atil Technology Co., LTD\",\n\t[3]byte{216, 143, 118}: \"Apple, Inc.\",\n\t[3]byte{216, 144, 232}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{216, 145, 42}:  \"Zyxel Communications Corporation\",\n\t[3]byte{216, 145, 54}:  \"Dover Fueling Solutions\",\n\t[3]byte{216, 147, 65}:  \"General Electric Global Research\",\n\t[3]byte{216, 148, 3}:   \"Hewlett Packard Enterprise\",\n\t[3]byte{216, 149, 47}:  \"Texas Instruments\",\n\t[3]byte{216, 150, 133}: \"GoPro\",\n\t[3]byte{216, 150, 149}: \"Apple, Inc.\",\n\t[3]byte{216, 150, 224}: \"Alibaba Cloud Computing Ltd.\",\n\t[3]byte{216, 151, 59}:  \"Artesyn Embedded Technologies\",\n\t[3]byte{216, 151, 96}:  \"C2 Development, Inc.\",\n\t[3]byte{216, 151, 124}: \"Grey Innovation\",\n\t[3]byte{216, 151, 144}: \"Commonwealth Scientific and Industrial Research Organisation\",\n\t[3]byte{216, 151, 186}: \"PEGATRON CORPORATION\",\n\t[3]byte{216, 154, 52}:  \"Beijing SHENQI Technology Co., Ltd.\",\n\t[3]byte{216, 155, 59}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{216, 156, 103}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{216, 157, 103}: \"Hewlett Packard\",\n\t[3]byte{216, 157, 185}: \"eMegatech International Corp.\",\n\t[3]byte{216, 158, 63}:  \"Apple, Inc.\",\n\t[3]byte{216, 158, 97}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{216, 158, 212}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{216, 158, 243}: \"Dell Inc.\",\n\t[3]byte{216, 160, 29}:  \"Espressif Inc.\",\n\t[3]byte{216, 161, 5}:   \"Syslane, Co., Ltd.\",\n\t[3]byte{216, 162, 94}:  \"Apple, Inc.\",\n\t[3]byte{216, 163, 21}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{216, 164, 145}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{216, 165, 52}:  \"Spectronix Corporation\",\n\t[3]byte{216, 166, 253}: \"Ghost Locomotion\",\n\t[3]byte{216, 167, 86}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{216, 168, 200}: \"zte corporation\",\n\t[3]byte{216, 169, 139}: \"Texas Instruments\",\n\t[3]byte{216, 173, 221}: \"Sonavation, Inc.\",\n\t[3]byte{216, 174, 144}: \"Itibia Technologies\",\n\t[3]byte{216, 174, 208}: \"Shanghai Engineering Science & Technology Co.,LTD CGNPC\",\n\t[3]byte{216, 175, 59}:  \"Hangzhou Bigbright Integrated communications system Co.,Ltd\",\n\t[3]byte{216, 175, 129}: \"   ZAO \\\"NPK Rotek\\\"\",\n\t[3]byte{216, 175, 241}: \"Panasonic Appliances Company\",\n\t[3]byte{216, 176, 46}:  \"Guangzhou Zonerich Business Machine Co., LTD.\",\n\t[3]byte{216, 176, 76}:  \"Jinan USR IOT Technology Co., Ltd.\",\n\t[3]byte{216, 177, 34}:  \"Juniper Networks\",\n\t[3]byte{216, 177, 42}:  \"Panasonic Mobile Communications Co.,Ltd.\",\n\t[3]byte{216, 177, 144}: \"Cisco Systems, Inc\",\n\t[3]byte{216, 179, 119}: \"HTC Corporation\",\n\t[3]byte{216, 182, 183}: \"Comtrend Corporation\",\n\t[3]byte{216, 182, 193}: \"NetworkAccountant, Inc.\",\n\t[3]byte{216, 182, 214}: \"Blu Tether Limited\",\n\t[3]byte{216, 184, 246}: \"Nantworks\",\n\t[3]byte{216, 185, 14}:  \"Triple Domain Vision Co.,Ltd.\",\n\t[3]byte{216, 187, 44}:  \"Apple, Inc.\",\n\t[3]byte{216, 188, 89}:  \"Shenzhen DAPU Microelectronics Co., Ltd\",\n\t[3]byte{216, 191, 76}:  \"Victory Concept Electronics Limited\",\n\t[3]byte{216, 191, 192}: \"Espressif Inc.\",\n\t[3]byte{216, 192, 104}: \"Netgenetech.co.,ltd.\",\n\t[3]byte{216, 192, 106}: \"Hunantv.com Interactive Entertainment Media Co.,Ltd.\",\n\t[3]byte{216, 192, 166}: \"AzureWave Technology Inc.\",\n\t[3]byte{216, 195, 251}: \"DETRACOM\",\n\t[3]byte{216, 196, 106}: \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{216, 196, 151}: \"Quanta Computer Inc.\",\n\t[3]byte{216, 196, 233}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{216, 197, 97}:  \"CommFront Communications Pte Ltd\",\n\t[3]byte{216, 198, 120}: \"MitraStar Technology Corp.\",\n\t[3]byte{216, 198, 145}: \"Hichan Technology Corp.\",\n\t[3]byte{216, 199, 113}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{216, 199, 200}: \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{216, 200, 233}: \"Phicomm (Shanghai) Co., Ltd.\",\n\t[3]byte{216, 201, 157}: \"EA DISPLAY LIMITED\",\n\t[3]byte{216, 202, 6}:   \"Titan DataCenters France\",\n\t[3]byte{216, 203, 138}: \"Micro-Star INTL CO., LTD.\",\n\t[3]byte{216, 206, 58}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{216, 207, 137}: \"Beijing DoSee Science and Technology Co., Ltd.\",\n\t[3]byte{216, 207, 156}: \"Apple, Inc.\",\n\t[3]byte{216, 208, 144}: \"Dell Inc.\",\n\t[3]byte{216, 209, 203}: \"Apple, Inc.\",\n\t[3]byte{216, 210, 124}: \"JEMA ENERGY, SA\",\n\t[3]byte{216, 211, 133}: \"Hewlett Packard\",\n\t[3]byte{216, 212, 60}:  \"Sony Corporation\",\n\t[3]byte{216, 212, 230}: \"Hytec Inter Co., Ltd.\",\n\t[3]byte{216, 213, 185}: \"Rainforest Automation, Inc.\",\n\t[3]byte{216, 214, 126}: \"GSK CNC EQUIPMENT CO.,LTD\",\n\t[3]byte{216, 214, 243}: \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{216, 215, 35}:  \"IDS, Inc\",\n\t[3]byte{216, 215, 117}: \"Sagemcom Broadband SAS\",\n\t[3]byte{216, 216, 102}: \"SHENZHEN TOZED TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{216, 218, 82}:  \"APATOR S.A.\",\n\t[3]byte{216, 220, 64}:  \"Apple, Inc.\",\n\t[3]byte{216, 220, 233}: \"Kunshan Erlab ductless filtration system Co.,Ltd\",\n\t[3]byte{216, 221, 95}:  \"BALMUDA Inc.\",\n\t[3]byte{216, 221, 253}: \"Texas Instruments\",\n\t[3]byte{216, 222, 206}: \"ISUNG CO.,LTD\",\n\t[3]byte{216, 223, 13}:  \"beroNet GmbH\",\n\t[3]byte{216, 223, 122}: \"Quest Software, Inc.\",\n\t[3]byte{216, 224, 4}:   \"Vodia Networks Inc\",\n\t[3]byte{216, 224, 184}: \"BULAT LLC\",\n\t[3]byte{216, 224, 225}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{216, 227, 174}: \"CIRTEC MEDICAL SYSTEMS\",\n\t[3]byte{216, 229, 109}: \"TCT mobile ltd\",\n\t[3]byte{216, 231, 43}:  \"NetAlly\",\n\t[3]byte{216, 231, 67}:  \"Wush, Inc\",\n\t[3]byte{216, 233, 82}:  \"KEOPSYS\",\n\t[3]byte{216, 235, 151}: \"TRENDnet, Inc.\",\n\t[3]byte{216, 237, 28}:  \"Magna Technology SL\",\n\t[3]byte{216, 238, 120}: \"Moog Protokraft\",\n\t[3]byte{216, 239, 66}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{216, 239, 205}: \"Nokia\",\n\t[3]byte{216, 240, 242}: \"Zeebo Inc\",\n\t[3]byte{216, 241, 91}:  \"Espressif Inc.\",\n\t[3]byte{216, 241, 240}: \"Pepxim International Limited\",\n\t[3]byte{216, 242, 202}: \"Intel Corporate\",\n\t[3]byte{216, 243, 219}: \"Post CH AG\",\n\t[3]byte{216, 247, 16}:  \"Libre Wireless Technologies Inc.\",\n\t[3]byte{216, 248, 131}: \"Intel Corporate\",\n\t[3]byte{216, 251, 17}:  \"AXACORE\",\n\t[3]byte{216, 251, 94}:  \"ASKEY COMPUTER CORP\",\n\t[3]byte{216, 251, 104}: \"Cloud Corner Ltd.\",\n\t[3]byte{216, 252, 56}:  \"Giantec Semiconductor Inc\",\n\t[3]byte{216, 252, 147}: \"Intel Corporate\",\n\t[3]byte{216, 254, 143}: \"IDFone Co., Ltd.\",\n\t[3]byte{216, 254, 227}: \"D-Link International\",\n\t[3]byte{220, 0, 119}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{220, 2, 101}:   \"Meditech Kft\",\n\t[3]byte{220, 2, 142}:   \"zte corporation\",\n\t[3]byte{220, 5, 47}:    \"National Products Inc.\",\n\t[3]byte{220, 5, 117}:   \"SIEMENS ENERGY AUTOMATION\",\n\t[3]byte{220, 5, 237}:   \"Nabtesco  Corporation\",\n\t[3]byte{220, 7, 193}:   \"HangZhou QiYang Technology Co.,Ltd.\",\n\t[3]byte{220, 8, 15}:    \"Apple, Inc.\",\n\t[3]byte{220, 8, 86}:    \"Alcatel-Lucent Enterprise\",\n\t[3]byte{220, 9, 20}:    \"Talk-A-Phone Co.\",\n\t[3]byte{220, 9, 76}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{220, 11, 26}:   \"ADB Broadband Italia\",\n\t[3]byte{220, 11, 52}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{220, 12, 45}:   \"WEIFANG GOERTEK ELECTRONICS CO.,LTD\",\n\t[3]byte{220, 12, 92}:   \"Apple, Inc.\",\n\t[3]byte{220, 13, 48}:   \"Shenzhen Feasycom Technology Co., Ltd.\",\n\t[3]byte{220, 14, 161}:  \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{220, 21, 219}:  \"Ge Ruili Intelligent Technology ( Beijing ) Co., Ltd.\",\n\t[3]byte{220, 22, 162}:  \"Medtronic Diabetes\",\n\t[3]byte{220, 22, 178}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{220, 23, 90}:   \"Hitachi High-Technologies Corporation\",\n\t[3]byte{220, 23, 146}:  \"Captivate Network\",\n\t[3]byte{220, 26, 1}:    \"Ecoliv Technology ( Shenzhen ) Ltd.\",\n\t[3]byte{220, 26, 197}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{220, 27, 161}:  \"Intel Corporate\",\n\t[3]byte{220, 29, 159}:  \"U & B tech\",\n\t[3]byte{220, 29, 212}:  \"Microstep-MIS spol. s r.o.\",\n\t[3]byte{220, 30, 163}:  \"Accensus LLC\",\n\t[3]byte{220, 32, 8}:    \"ASD Electronics Ltd \",\n\t[3]byte{220, 33, 185}:  \"Sentec Co.Ltd\",\n\t[3]byte{220, 33, 226}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{220, 40, 52}:   \"HAKKO Corporation\",\n\t[3]byte{220, 41, 25}:   \"AltoBeam (Xiamen) Technology Ltd, Co.\",\n\t[3]byte{220, 41, 58}:   \"Shenzhen Nuoshi Technology Co., LTD.\",\n\t[3]byte{220, 42, 20}:   \"Shanghai Longjing Technology Co.\",\n\t[3]byte{220, 42, 161}:  \"MedHab LLC\",\n\t[3]byte{220, 43, 42}:   \"Apple, Inc.\",\n\t[3]byte{220, 43, 97}:   \"Apple, Inc.\",\n\t[3]byte{220, 43, 102}:  \"InfoBLOCK S.A. de C.V.\",\n\t[3]byte{220, 43, 202}:  \"Zera GmbH\",\n\t[3]byte{220, 44, 38}:   \"Iton Technology Limited\",\n\t[3]byte{220, 45, 203}:  \"Beijing Unis HengYue Technology Co., Ltd.\",\n\t[3]byte{220, 46, 106}:  \"HCT. Co., Ltd.\",\n\t[3]byte{220, 47, 3}:    \"Step forward Group Co., Ltd.\",\n\t[3]byte{220, 48, 156}:  \"Heyrex Limited\",\n\t[3]byte{220, 49, 209}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{220, 51, 13}:   \"QING DAO HAIER TELECOM CO.,LTD.\",\n\t[3]byte{220, 51, 61}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{220, 51, 80}:   \"TechSAT GmbH\",\n\t[3]byte{220, 53, 241}:  \"Positivo Tecnologia S.A.\",\n\t[3]byte{220, 55, 20}:   \"Apple, Inc.\",\n\t[3]byte{220, 55, 82}:   \"GE\",\n\t[3]byte{220, 55, 87}:   \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{220, 55, 210}:  \"Hunan HKT Electronic Technology Co., Ltd\",\n\t[3]byte{220, 56, 225}:  \"Juniper Networks\",\n\t[3]byte{220, 57, 111}:  \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{220, 57, 121}:  \"Cisco Systems, Inc\",\n\t[3]byte{220, 58, 94}:   \"Roku, Inc.\",\n\t[3]byte{220, 60, 46}:   \"Manufacturing System Insights, Inc.\",\n\t[3]byte{220, 60, 132}:  \"Ticom Geomatics, Inc.\",\n\t[3]byte{220, 60, 246}:  \"Atomic Rules LLC\",\n\t[3]byte{220, 62, 81}:   \"Solberg & Andersen AS\",\n\t[3]byte{220, 62, 248}:  \"Nokia Corporation\",\n\t[3]byte{220, 65, 95}:   \"Apple, Inc.\",\n\t[3]byte{220, 65, 169}:  \"Intel Corporate\",\n\t[3]byte{220, 65, 229}:  \"Shenzhen Zhixin Data Service Co., Ltd.\",\n\t[3]byte{220, 68, 39}:   \"IEEE Registration Authority\",\n\t[3]byte{220, 68, 109}:  \"Allwinner Technology Co., Ltd\",\n\t[3]byte{220, 68, 182}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{220, 69, 23}:   \"ARRIS Group, Inc.\",\n\t[3]byte{220, 72, 178}:  \"Baraja Pty. Ltd.\",\n\t[3]byte{220, 73, 201}:  \"CASCO SIGNAL LTD\",\n\t[3]byte{220, 74, 62}:   \"Hewlett Packard\",\n\t[3]byte{220, 75, 221}:  \"Shenzhen SuperElectron Technology Co.,Ltd.\",\n\t[3]byte{220, 75, 254}:  \"Shenzhen Belon Technology CO.,LTD\",\n\t[3]byte{220, 77, 35}:   \"MRV Comunications\",\n\t[3]byte{220, 78, 222}:  \"SHINYEI TECHNOLOGY CO., LTD.\",\n\t[3]byte{220, 78, 244}:  \"Shenzhen MTN Electronics CO., Ltd\",\n\t[3]byte{220, 79, 34}:   \"Espressif Inc.\",\n\t[3]byte{220, 80, 58}:   \"Nanjing Ticom Tech Co., Ltd.\",\n\t[3]byte{220, 83, 96}:   \"Intel Corporate\",\n\t[3]byte{220, 83, 124}:  \"Compal Broadband Networks, Inc.\",\n\t[3]byte{220, 84, 61}:   \"ITEL MOBILE LIMITED\",\n\t[3]byte{220, 84, 215}:  \"Amazon Technologies Inc.\",\n\t[3]byte{220, 85, 131}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{220, 86, 230}:  \"Shenzhen Bococom Technology Co.,LTD\",\n\t[3]byte{220, 86, 231}:  \"Apple, Inc.\",\n\t[3]byte{220, 87, 38}:   \"Power-One\",\n\t[3]byte{220, 88, 188}:  \"Thomas-Krenn.AG\",\n\t[3]byte{220, 94, 54}:   \"Paterson Technology\",\n\t[3]byte{220, 96, 161}:  \"Teledyne DALSA Professional Imaging\",\n\t[3]byte{220, 100, 124}: \"C.R.S. iiMotion GmbH\",\n\t[3]byte{220, 100, 184}: \"Shenzhen JingHanDa Electronics Co.Ltd\",\n\t[3]byte{220, 102, 58}:  \"Apacer Technology Inc.\",\n\t[3]byte{220, 102, 114}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{220, 103, 35}:  \"barox Kommunikation GmbH\",\n\t[3]byte{220, 104, 12}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{220, 104, 235}: \"Nintendo Co.,Ltd\",\n\t[3]byte{220, 106, 234}: \"Infinix mobility limited\",\n\t[3]byte{220, 107, 18}:  \"worldcns inc.\",\n\t[3]byte{220, 109, 205}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{220, 111, 0}:   \"Livescribe, Inc.\",\n\t[3]byte{220, 111, 8}:   \"Bay Storage Technology\",\n\t[3]byte{220, 112, 20}:  \"Private\",\n\t[3]byte{220, 113, 55}:  \"zte corporation\",\n\t[3]byte{220, 113, 68}:  \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{220, 113, 150}: \"Intel Corporate\",\n\t[3]byte{220, 114, 35}:  \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{220, 114, 155}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{220, 115, 133}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{220, 116, 168}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{220, 119, 76}:  \"Cisco Systems, Inc\",\n\t[3]byte{220, 120, 52}:  \"LOGICOM SA\",\n\t[3]byte{220, 123, 148}: \"Cisco Systems, Inc\",\n\t[3]byte{220, 127, 164}: \"2Wire Inc\",\n\t[3]byte{220, 130, 91}:  \"JANUS, spol. s r.o.\",\n\t[3]byte{220, 130, 246}: \"iPort\",\n\t[3]byte{220, 133, 222}: \"AzureWave Technology Inc.\",\n\t[3]byte{220, 134, 216}: \"Apple, Inc.\",\n\t[3]byte{220, 137, 131}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{220, 139, 40}:  \"Intel Corporate\",\n\t[3]byte{220, 140, 55}:  \"Cisco Systems, Inc\",\n\t[3]byte{220, 144, 136}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{220, 145, 191}: \"Amazon Technologies Inc.\",\n\t[3]byte{220, 150, 44}:  \"NST Audio Ltd\",\n\t[3]byte{220, 152, 64}:  \"Microsoft Corporation\",\n\t[3]byte{220, 153, 20}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{220, 154, 142}: \"Nanjing Cocomm electronics co., LTD\",\n\t[3]byte{220, 155, 30}:  \"Intercom, Inc.\",\n\t[3]byte{220, 155, 156}: \"Apple, Inc.\",\n\t[3]byte{220, 156, 82}:  \"Sapphire Technology Limited.\",\n\t[3]byte{220, 156, 159}: \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{220, 159, 164}: \"Nokia Corporation\",\n\t[3]byte{220, 159, 219}: \"Ubiquiti Networks Inc.\",\n\t[3]byte{220, 162, 102}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{220, 163, 51}:  \"Shenzhen YOUHUA Technology Co., Ltd\\t\",\n\t[3]byte{220, 163, 162}: \"Feng mi(Beijing)technology co., LTD\",\n\t[3]byte{220, 163, 172}: \"RBcloudtech\",\n\t[3]byte{220, 164, 202}: \"Apple, Inc.\",\n\t[3]byte{220, 165, 244}: \"Cisco Systems, Inc\",\n\t[3]byte{220, 166, 50}:  \"Raspberry Pi Trading Ltd\",\n\t[3]byte{220, 166, 189}: \"Beijing Lanbo Technology Co., Ltd.\",\n\t[3]byte{220, 167, 217}: \"Compressor Controls Corp\",\n\t[3]byte{220, 168, 207}: \"New Spin Golf, LLC.\",\n\t[3]byte{220, 169, 4}:   \"Apple, Inc.\",\n\t[3]byte{220, 169, 113}: \"Intel Corporate\",\n\t[3]byte{220, 169, 137}: \"MACANDC\",\n\t[3]byte{220, 173, 158}: \"GreenPriz\",\n\t[3]byte{220, 174, 4}:   \"CELOXICA Ltd\",\n\t[3]byte{220, 174, 235}: \"Ruckus Wireless\",\n\t[3]byte{220, 175, 104}: \"WEIFANG GOERTEK ELECTRONICS CO.,LTD\",\n\t[3]byte{220, 176, 88}:  \"Bürkert Werke GmbH\",\n\t[3]byte{220, 176, 130}: \"Nokia\",\n\t[3]byte{220, 179, 180}: \"Honeywell Environmental & Combustion Controls (Tianjin) Co., Ltd.\",\n\t[3]byte{220, 180, 172}: \"FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.\",\n\t[3]byte{220, 180, 196}: \"Microsoft XCG\",\n\t[3]byte{220, 184, 8}:   \"Extreme Networks, Inc.\",\n\t[3]byte{220, 189, 122}: \"Guangzhou\\u00a0Shiyuan\\u00a0Electronic\\u00a0Technology\\u00a0Company\\u00a0Limited\",\n\t[3]byte{220, 190, 122}: \"Zhejiang Nurotron Biotechnology Co.\",\n\t[3]byte{220, 191, 144}: \"HUIZHOU QIAOXING TELECOMMUNICATION INDUSTRY CO.,LTD.\",\n\t[3]byte{220, 191, 233}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{220, 192, 219}: \"Shenzhen Kaiboer Technology Co., Ltd.\",\n\t[3]byte{220, 192, 235}: \"ASSA ABLOY CÔTE PICARDE\",\n\t[3]byte{220, 193, 1}:   \"SOLiD Technologies, Inc.\",\n\t[3]byte{220, 196, 34}:  \"Systembase Limited\",\n\t[3]byte{220, 198, 34}:  \"BUHEUNG SYSTEM\",\n\t[3]byte{220, 198, 75}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{220, 199, 147}: \"Nokia Corporation\",\n\t[3]byte{220, 200, 245}: \"Shanghai UMEinfo CO.,LTD.\",\n\t[3]byte{220, 203, 168}: \"Explora Technologies Inc\",\n\t[3]byte{220, 204, 141}: \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{220, 205, 47}:  \"Seiko Epson Corporation\",\n\t[3]byte{220, 206, 65}:  \"FE GLOBAL HONG KONG LIMITED\",\n\t[3]byte{220, 206, 188}: \"Shenzhen JSR Technology Co.,Ltd.\",\n\t[3]byte{220, 206, 193}: \"Cisco Systems, Inc\",\n\t[3]byte{220, 207, 148}: \"Beijing Rongcheng Hutong Technology Co., Ltd.\",\n\t[3]byte{220, 207, 150}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{220, 208, 247}: \"Bentek Systems Ltd.\",\n\t[3]byte{220, 210, 85}:  \"Kinpo Electronics, Inc.\",\n\t[3]byte{220, 210, 252}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{220, 211, 33}:  \"HUMAX Co., Ltd.\",\n\t[3]byte{220, 211, 162}: \"Apple, Inc.\",\n\t[3]byte{220, 212, 68}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{220, 213, 42}:  \"Sunny Heart Limited\",\n\t[3]byte{220, 216, 124}: \"Beijing Jingdong Century Trading Co., LTD.\",\n\t[3]byte{220, 216, 127}: \"Shenzhen JoinCyber Telecom Equipment Ltd\",\n\t[3]byte{220, 217, 22}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{220, 217, 174}: \"Nokia Shanghai Bell Co., Ltd.\",\n\t[3]byte{220, 218, 79}:  \"GETCK TECHNOLOGY,  INC\",\n\t[3]byte{220, 218, 128}: \"New H3C Technologies Co., Ltd\",\n\t[3]byte{220, 219, 112}: \"Tonfunk Systementwicklung und Service GmbH\",\n\t[3]byte{220, 220, 7}:   \"TRP Systems BV\",\n\t[3]byte{220, 220, 226}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{220, 221, 36}:  \"Energica Motor Company SpA\",\n\t[3]byte{220, 222, 79}:  \"Gionee Communication Equipment Co Ltd \",\n\t[3]byte{220, 222, 202}: \"Akyllor\",\n\t[3]byte{220, 223, 214}: \"zte corporation\",\n\t[3]byte{220, 224, 38}:  \"Patrol Tag, Inc\",\n\t[3]byte{220, 224, 235}: \"Nanjing Aozheng Information Technology Co.Ltd\",\n\t[3]byte{220, 225, 173}: \"Shenzhen Wintop Photoelectric Technology Co., Ltd\",\n\t[3]byte{220, 226, 172}: \"Lumens Digital Optics Inc.\",\n\t[3]byte{220, 227, 5}:   \"   ZAO \\\"NPK Rotek\\\"\",\n\t[3]byte{220, 229, 51}:  \"IEEE Registration Authority\",\n\t[3]byte{220, 229, 120}: \"Experimental Factory of Scientific Engineering and Special Design Department\",\n\t[3]byte{220, 231, 28}:  \"AUG Elektronik GmbH\",\n\t[3]byte{220, 232, 56}:  \"CK Telecom (Shenzhen) Limited\",\n\t[3]byte{220, 235, 83}:  \"Wuhan QianXiao Elecronic Technology CO.,LTD\",\n\t[3]byte{220, 235, 105}: \"Technicolor CH USA Inc.\",\n\t[3]byte{220, 235, 148}: \"Cisco Systems, Inc\",\n\t[3]byte{220, 236, 6}:   \"Heimi Network Technology Co., Ltd.\",\n\t[3]byte{220, 237, 132}: \"Haverford Systems Inc\",\n\t[3]byte{220, 238, 6}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{220, 239, 9}:   \"NETGEAR\",\n\t[3]byte{220, 239, 128}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{220, 239, 202}: \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{220, 240, 93}:  \"Letta Teknoloji\",\n\t[3]byte{220, 240, 144}: \"Nubia Technology Co.,Ltd.\",\n\t[3]byte{220, 241, 16}:  \"Nokia Corporation\",\n\t[3]byte{220, 244, 1}:   \"Dell Inc.\",\n\t[3]byte{220, 245, 5}:   \"AzureWave Technology Inc.\",\n\t[3]byte{220, 247, 25}:  \"Cisco Systems, Inc\",\n\t[3]byte{220, 247, 85}:  \"SITRONIK\",\n\t[3]byte{220, 247, 86}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{220, 248, 88}:  \"Lorent Networks, Inc.\",\n\t[3]byte{220, 248, 185}: \"zte corporation\",\n\t[3]byte{220, 250, 213}: \"STRONG Ges.m.b.H.\",\n\t[3]byte{220, 251, 2}:   \"BUFFALO.INC\",\n\t[3]byte{220, 251, 72}:  \"Intel Corporate\",\n\t[3]byte{220, 254, 7}:   \"PEGATRON CORPORATION\",\n\t[3]byte{220, 254, 24}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{224, 0, 132}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{224, 2, 165}:   \"ABB Robotics\",\n\t[3]byte{224, 3, 112}:   \"ShenZhen Continental Wireless Technology Co., Ltd.\",\n\t[3]byte{224, 5, 197}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{224, 6, 230}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{224, 7, 27}:    \"Hewlett Packard Enterprise\",\n\t[3]byte{224, 9, 191}:   \"SHENZHEN\\u2002TONG BO WEI\\u2002TECHNOLOGY Co.,LTD\",\n\t[3]byte{224, 11, 40}:   \"Inovonics\",\n\t[3]byte{224, 12, 127}:  \"Nintendo Co., Ltd.\",\n\t[3]byte{224, 13, 185}:  \"Cree, Inc.\",\n\t[3]byte{224, 14, 218}:  \"Cisco Systems, Inc\",\n\t[3]byte{224, 14, 225}:  \"We Corporation Inc.\",\n\t[3]byte{224, 14, 228}:  \"DWnet Technologies(Suzhou) Corporation\",\n\t[3]byte{224, 16, 127}:  \"Ruckus Wireless\",\n\t[3]byte{224, 18, 131}:  \" Shenzhen Fanzhuo Communication Technology Co., Lt\",\n\t[3]byte{224, 19, 181}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{224, 20, 62}:   \"Modoosis Inc.\",\n\t[3]byte{224, 24, 119}:  \"FUJITSU LIMITED\",\n\t[3]byte{224, 24, 159}:  \"EM Microelectronic\",\n\t[3]byte{224, 25, 29}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{224, 25, 84}:   \"zte corporation\",\n\t[3]byte{224, 25, 149}:  \"Nutanix\",\n\t[3]byte{224, 25, 216}:  \"BH TECHNOLOGIES\",\n\t[3]byte{224, 26, 234}:  \"Allied Telesis, Inc.\",\n\t[3]byte{224, 28, 65}:   \"Extreme Networks, Inc.\",\n\t[3]byte{224, 28, 238}:  \"Bravo Tech, Inc.\",\n\t[3]byte{224, 29, 56}:   \"Beijing HuaqinWorld Technology Co.,Ltd\",\n\t[3]byte{224, 29, 59}:   \"Cambridge Industries(Group) Co.,Ltd.\",\n\t[3]byte{224, 30, 7}:    \"Anite Telecoms  US. Inc\",\n\t[3]byte{224, 31, 10}:   \"Xslent Energy Technologies. LLC\",\n\t[3]byte{224, 31, 136}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{224, 34, 2}:    \"ARRIS Group, Inc.\",\n\t[3]byte{224, 35, 255}:  \"Fortinet, Inc.\",\n\t[3]byte{224, 36, 127}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{224, 36, 129}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{224, 37, 56}:   \"Titan Pet Products\",\n\t[3]byte{224, 38, 48}:   \"Intrigue Technologies, Inc.\",\n\t[3]byte{224, 38, 54}:   \"Nortel Networks\",\n\t[3]byte{224, 39, 26}:   \"TTC Next-generation Home Network System WG\",\n\t[3]byte{224, 40, 97}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{224, 40, 109}:  \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{224, 42, 130}:  \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{224, 42, 230}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{224, 43, 150}:  \"Apple, Inc.\",\n\t[3]byte{224, 44, 178}:  \"Lenovo Mobile Communication (Wuhan) Company Limited\",\n\t[3]byte{224, 44, 243}:  \"MRS Electronic GmbH\",\n\t[3]byte{224, 47, 109}:  \"Cisco Systems, Inc\",\n\t[3]byte{224, 48, 5}:    \"Alcatel-Lucent Shanghai Bell Co., Ltd\",\n\t[3]byte{224, 49, 158}:  \"Valve Corporation\",\n\t[3]byte{224, 49, 208}:  \"SZ Telstar CO., LTD\",\n\t[3]byte{224, 51, 142}:  \"Apple, Inc.\",\n\t[3]byte{224, 52, 228}:  \"Feit Electric Company, Inc.\",\n\t[3]byte{224, 53, 96}:   \"Challenger Supply Holdings, LLC\",\n\t[3]byte{224, 54, 118}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{224, 54, 227}:  \"Stage One International Co., Ltd.\",\n\t[3]byte{224, 55, 23}:   \"Technicolor CH USA Inc.\",\n\t[3]byte{224, 55, 191}:  \"Wistron Neweb Corporation\",\n\t[3]byte{224, 56, 63}:   \"zte corporation\",\n\t[3]byte{224, 57, 215}:  \"Plexxi, Inc.\",\n\t[3]byte{224, 60, 91}:   \"SHENZHEN JIAXINJIE ELECTRON CO.,LTD\",\n\t[3]byte{224, 62, 68}:   \"Broadcom\",\n\t[3]byte{224, 62, 74}:   \"Cavanagh Group International\",\n\t[3]byte{224, 62, 125}:  \"data-complex GmbH\",\n\t[3]byte{224, 63, 73}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{224, 64, 7}:    \"Huawei Device Co., Ltd.\",\n\t[3]byte{224, 65, 54}:   \"MitraStar Technology Corp.\",\n\t[3]byte{224, 67, 219}:  \"Shenzhen ViewAt Technology Co.,Ltd. \",\n\t[3]byte{224, 69, 109}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{224, 70, 154}:  \"NETGEAR\",\n\t[3]byte{224, 70, 229}:  \"Gosuncn Technology Group Co., Ltd.\",\n\t[3]byte{224, 72, 175}:  \"Premietech Limited\",\n\t[3]byte{224, 72, 211}:  \"MOBIWIRE MOBILES (NINGBO) CO.,LTD\",\n\t[3]byte{224, 73, 237}:  \"Audeze LLC\",\n\t[3]byte{224, 75, 69}:   \"Hi-P Electronics Pte Ltd\",\n\t[3]byte{224, 79, 67}:   \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{224, 79, 189}:  \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{224, 80, 139}:  \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{224, 81, 36}:   \"NXP Semiconductors\",\n\t[3]byte{224, 81, 99}:   \"Arcadyan Corporation\",\n\t[3]byte{224, 85, 61}:   \"Cisco Meraki\",\n\t[3]byte{224, 85, 151}:  \"Emergent Vision Technologies Inc.\",\n\t[3]byte{224, 86, 244}:  \"AxesNetwork Solutions inc.\",\n\t[3]byte{224, 88, 158}:  \"Laerdal Medical\",\n\t[3]byte{224, 90, 159}:  \"IEEE Registration Authority\",\n\t[3]byte{224, 91, 112}:  \"Innovid, Co., Ltd.\",\n\t[3]byte{224, 93, 92}:   \"Oy Everon Ab\",\n\t[3]byte{224, 93, 166}:  \"Detlef Fink Elektronik & Softwareentwicklung\",\n\t[3]byte{224, 95, 69}:   \"Apple, Inc.\",\n\t[3]byte{224, 95, 185}:  \"Cisco Systems, Inc\",\n\t[3]byte{224, 96, 102}:  \"Sercomm Corporation.\",\n\t[3]byte{224, 96, 137}:  \"Cloudleaf, Inc.\",\n\t[3]byte{224, 97, 178}:  \"HANGZHOU ZENOINTEL TECHNOLOGY CO., LTD\",\n\t[3]byte{224, 98, 52}:   \"Texas Instruments\",\n\t[3]byte{224, 98, 103}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{224, 98, 144}:  \"Jinan Jovision Science & Technology Co., Ltd.\",\n\t[3]byte{224, 99, 218}:  \"Ubiquiti Networks Inc.\",\n\t[3]byte{224, 99, 229}:  \"Sony Mobile Communications Inc\",\n\t[3]byte{224, 100, 187}: \"DigiView S.r.l.\",\n\t[3]byte{224, 102, 120}: \"Apple, Inc.\",\n\t[3]byte{224, 103, 179}: \"Shenzhen C-Data Technology Co., Ltd\",\n\t[3]byte{224, 104, 109}: \"Raybased AB\",\n\t[3]byte{224, 105, 58}:  \"Innophase Inc.\",\n\t[3]byte{224, 105, 149}: \"PEGATRON CORPORATION\",\n\t[3]byte{224, 108, 166}: \"Creotech Instruments S.A.\",\n\t[3]byte{224, 115, 95}:  \"NUCOM\",\n\t[3]byte{224, 117, 10}:  \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{224, 117, 125}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{224, 118, 208}: \"AMPAK Technology, Inc.\",\n\t[3]byte{224, 120, 163}: \"Shanghai Winner Information Technology Co.,Inc\",\n\t[3]byte{224, 121, 94}:  \"Wuxi Xiaohu Technology Co.,Ltd.\",\n\t[3]byte{224, 121, 196}: \"iRay Technology Company Limited\",\n\t[3]byte{224, 124, 19}:  \"zte corporation\",\n\t[3]byte{224, 124, 98}:  \"Whistle Labs, Inc.\",\n\t[3]byte{224, 125, 234}: \"Texas Instruments\",\n\t[3]byte{224, 127, 83}:  \"TECHBOARD SRL\",\n\t[3]byte{224, 127, 136}: \"EVIDENCE Network SIA\",\n\t[3]byte{224, 129, 119}: \"GreenBytes, Inc.\",\n\t[3]byte{224, 132, 243}: \"High Grade Controls Corporation\",\n\t[3]byte{224, 133, 154}: \"SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\",\n\t[3]byte{224, 135, 177}: \"Nata-Info Ltd.\",\n\t[3]byte{224, 136, 93}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{224, 137, 126}: \"Apple, Inc.\",\n\t[3]byte{224, 137, 157}: \"Cisco Systems, Inc\",\n\t[3]byte{224, 138, 126}: \"Exponent\",\n\t[3]byte{224, 142, 60}:  \"Aztech Electronics Pte Ltd\",\n\t[3]byte{224, 143, 236}: \"REPOTEC CO., LTD.\",\n\t[3]byte{224, 145, 83}:  \"XAVi Technologies Corp.\",\n\t[3]byte{224, 145, 245}: \"NETGEAR\",\n\t[3]byte{224, 146, 167}: \"Feitian Technologies Co., Ltd\",\n\t[3]byte{224, 148, 103}: \"Intel Corporate\",\n\t[3]byte{224, 149, 121}: \"ORTHOsoft inc, d/b/a Zimmer CAS\",\n\t[3]byte{224, 151, 150}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{224, 151, 242}: \"Atomax Inc.\",\n\t[3]byte{224, 152, 6}:   \"Espressif Inc.\",\n\t[3]byte{224, 152, 97}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{224, 153, 113}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{224, 157, 49}:  \"Intel Corporate\",\n\t[3]byte{224, 157, 184}: \"PLANEX COMMUNICATIONS INC.\",\n\t[3]byte{224, 157, 250}: \"Wanan Hongsheng Electronic Co.Ltd\",\n\t[3]byte{224, 159, 42}:  \"Iton Technology Corp. \",\n\t[3]byte{224, 161, 152}: \"NOJA Power Switchgear Pty Ltd\",\n\t[3]byte{224, 161, 215}: \"SFR\",\n\t[3]byte{224, 163, 15}:  \"Pevco\",\n\t[3]byte{224, 163, 172}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{224, 165, 9}:   \"Bitmain Technologies Inc\",\n\t[3]byte{224, 166, 112}: \"Nokia Corporation\",\n\t[3]byte{224, 167, 0}:   \"Verkada Inc\",\n\t[3]byte{224, 168, 184}: \"Le Shi Zhi Xin Electronic Technology (Tianjin) Limited\",\n\t[3]byte{224, 170, 150}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{224, 170, 176}: \"SUNTAILI ENTERPRISE CO. LTD,\",\n\t[3]byte{224, 170, 219}: \"Nanjing PANENG Technology Development Co.,Ltd\",\n\t[3]byte{224, 171, 254}: \"Orb Networks, Inc.\",\n\t[3]byte{224, 172, 203}: \"Apple, Inc.\",\n\t[3]byte{224, 172, 241}: \"Cisco Systems, Inc\",\n\t[3]byte{224, 174, 94}:  \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{224, 174, 178}: \"Bender GmbH &amp; Co.KG\",\n\t[3]byte{224, 174, 237}: \"LOENK\",\n\t[3]byte{224, 175, 75}:  \"Pluribus Networks, Inc.\",\n\t[3]byte{224, 175, 79}:  \"Deutsche Telekom AG\",\n\t[3]byte{224, 178, 96}:  \"TENO NETWORK TECHNOLOGIES COMPANY LIMITED\",\n\t[3]byte{224, 178, 241}: \"FN-LINK TECHNOLOGY LIMITED\",\n\t[3]byte{224, 181, 45}:  \"Apple, Inc.\",\n\t[3]byte{224, 181, 95}:  \"Apple, Inc.\",\n\t[3]byte{224, 182, 85}:  \"Beijing Xiaomi Electronics Co., Ltd.\",\n\t[3]byte{224, 182, 245}: \"IEEE Registration Authority\",\n\t[3]byte{224, 183, 10}:  \"ARRIS Group, Inc.\",\n\t[3]byte{224, 183, 177}: \"ARRIS Group, Inc.\",\n\t[3]byte{224, 185, 77}:  \"SHENZHEN BILIAN ELECTRONIC CO.，LTD\",\n\t[3]byte{224, 185, 165}: \"AzureWave Technology Inc.\",\n\t[3]byte{224, 185, 186}: \"Apple, Inc.\",\n\t[3]byte{224, 185, 229}: \"Technicolor\",\n\t[3]byte{224, 186, 180}: \"Arrcus, Inc\",\n\t[3]byte{224, 187, 158}: \"Seiko Epson Corporation\",\n\t[3]byte{224, 188, 67}:  \"C2 Microsystems, Inc.\",\n\t[3]byte{224, 190, 3}:   \"Lite-On Network Communication (Dongguan) Limited\",\n\t[3]byte{224, 192, 209}: \"CK Telecom (Shenzhen) Limited\",\n\t[3]byte{224, 194, 134}: \"Aisai Communication Technology Co., Ltd.\",\n\t[3]byte{224, 194, 183}: \"Masimo Corporation\",\n\t[3]byte{224, 195, 243}: \"zte corporation\",\n\t[3]byte{224, 198, 60}:  \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{224, 198, 179}: \"MilDef AB\",\n\t[3]byte{224, 199, 103}: \"Apple, Inc.\",\n\t[3]byte{224, 199, 157}: \"Texas Instruments\",\n\t[3]byte{224, 200, 106}: \"SHENZHEN TW-SCIE Co., Ltd\",\n\t[3]byte{224, 201, 34}:  \"Jireh Energy Tech., Ltd.\",\n\t[3]byte{224, 201, 122}: \"Apple, Inc.\",\n\t[3]byte{224, 202, 77}:  \"Shenzhen Unistar Communication Co.,LTD\",\n\t[3]byte{224, 202, 148}: \"ASKEY COMPUTER CORP\",\n\t[3]byte{224, 203, 29}:  \"Private\",\n\t[3]byte{224, 203, 78}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{224, 203, 188}: \"Cisco Meraki\",\n\t[3]byte{224, 203, 238}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{224, 204, 122}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{224, 204, 248}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{224, 205, 253}: \"Beijing E3Control Technology Co, LTD\",\n\t[3]byte{224, 206, 195}: \"ASKEY COMPUTER CORP\",\n\t[3]byte{224, 207, 45}:  \"Gemintek Corporation\",\n\t[3]byte{224, 208, 131}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{224, 209, 10}:  \"Katoudenkikougyousyo co ltd\",\n\t[3]byte{224, 209, 115}: \"Cisco Systems, Inc\",\n\t[3]byte{224, 209, 230}: \"Aliph dba Jawbone\",\n\t[3]byte{224, 211, 26}:  \"EQUES Technology Co., Limited\",\n\t[3]byte{224, 212, 98}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{224, 212, 100}: \"Intel Corporate\",\n\t[3]byte{224, 212, 232}: \"Intel Corporate\",\n\t[3]byte{224, 213, 94}:  \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{224, 215, 186}: \"Texas Instruments\",\n\t[3]byte{224, 216, 72}:  \"Dell Inc.\",\n\t[3]byte{224, 217, 162}: \"Hippih aps\",\n\t[3]byte{224, 217, 227}: \"Eltex Enterprise Ltd.\",\n\t[3]byte{224, 218, 220}: \"JVC KENWOOD Corporation\",\n\t[3]byte{224, 219, 16}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{224, 219, 85}:  \"Dell Inc.\",\n\t[3]byte{224, 219, 136}: \"Open Standard Digital-IF Interface for SATCOM Systems\",\n\t[3]byte{224, 220, 160}: \"Siemens Industrial Automation Products Ltd Chengdu\",\n\t[3]byte{224, 220, 255}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{224, 221, 192}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{224, 224, 252}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{224, 229, 207}: \"Texas Instruments\",\n\t[3]byte{224, 230, 46}:  \"TCT mobile ltd\",\n\t[3]byte{224, 230, 49}:  \"SNB TECHNOLOGIES LIMITED\",\n\t[3]byte{224, 231, 81}:  \"Nintendo Co., Ltd.\",\n\t[3]byte{224, 231, 187}: \"Nureva, Inc.\",\n\t[3]byte{224, 232, 230}: \"Shenzhen C-Data Technology Co., Ltd.\",\n\t[3]byte{224, 232, 232}: \"Olive Telecommunication Pvt. Ltd\",\n\t[3]byte{224, 235, 64}:  \"Apple, Inc.\",\n\t[3]byte{224, 235, 98}:  \"Shanghai Hulu Devices Co., Ltd\",\n\t[3]byte{224, 237, 26}:  \"vastriver Technology Co., Ltd\",\n\t[3]byte{224, 237, 199}: \"Shenzhen Friendcom Technology Development Co., Ltd\",\n\t[3]byte{224, 238, 27}:  \"Panasonic Automotive Systems Company of America\",\n\t[3]byte{224, 239, 37}:  \"Lintes Technology Co., Ltd.\",\n\t[3]byte{224, 242, 17}:  \"Digitalwatt\",\n\t[3]byte{224, 243, 121}: \"Vaddio\",\n\t[3]byte{224, 244, 66}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{224, 245, 198}: \"Apple, Inc.\",\n\t[3]byte{224, 245, 202}: \"CHENG UEI PRECISION INDUSTRY CO.,LTD.\",\n\t[3]byte{224, 246, 181}: \"Nintendo Co.,Ltd\",\n\t[3]byte{224, 248, 71}:  \"Apple, Inc.\",\n\t[3]byte{224, 249, 190}: \"Cloudena Corp.\",\n\t[3]byte{224, 250, 236}: \"Platan sp. z o.o. sp. k.\",\n\t[3]byte{224, 255, 247}: \"Softiron Inc.\",\n\t[3]byte{228, 2, 155}:   \"Intel Corporate\",\n\t[3]byte{228, 4, 57}:    \"TomTom Software Ltd\",\n\t[3]byte{228, 5, 248}:   \"Delta Innovation Technology Co., Ltd.\",\n\t[3]byte{228, 14, 238}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 17, 91}:   \"Hewlett Packard\",\n\t[3]byte{228, 18, 24}:   \"ShenZhen Rapoo Technology Co., Ltd.\",\n\t[3]byte{228, 18, 29}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 18, 137}:  \"topsystem Systemhaus GmbH\",\n\t[3]byte{228, 21, 246}:  \"Texas Instruments\",\n\t[3]byte{228, 23, 216}:  \"8BITDO TECHNOLOGY HK LIMITED\",\n\t[3]byte{228, 24, 107}:  \"Zyxel Communications Corporation\",\n\t[3]byte{228, 25, 193}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 26, 44}:   \"ZPE Systems, Inc.\",\n\t[3]byte{228, 28, 75}:   \"V2 TECHNOLOGY, INC.\",\n\t[3]byte{228, 29, 45}:   \"Mellanox Technologies, Inc.\",\n\t[3]byte{228, 30, 10}:   \"IEEE Registration Authority\",\n\t[3]byte{228, 31, 19}:   \"IBM Corp\",\n\t[3]byte{228, 31, 123}:  \"Cisco Systems, Inc\",\n\t[3]byte{228, 31, 233}:  \"Dunkermotoren GmbH\",\n\t[3]byte{228, 34, 165}:  \"PLANTRONICS, INC.\",\n\t[3]byte{228, 35, 84}:   \"SHENZHEN FUZHI SOFTWARE TECHNOLOGY CO.,LTD\",\n\t[3]byte{228, 36, 108}:  \"Zhejiang Dahua Technology Co., Ltd.\",\n\t[3]byte{228, 37, 231}:  \"Apple, Inc.\",\n\t[3]byte{228, 37, 233}:  \"Color-Chip\",\n\t[3]byte{228, 38, 134}:  \"DWnet Technologies(Suzhou) Corporation\",\n\t[3]byte{228, 38, 139}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{228, 39, 113}:  \"Smartlabs\",\n\t[3]byte{228, 42, 211}:  \"Magneti Marelli S.p.A. Powertrain\",\n\t[3]byte{228, 43, 52}:   \"Apple, Inc.\",\n\t[3]byte{228, 44, 86}:   \"Lilee Systems, Ltd.\",\n\t[3]byte{228, 45, 2}:    \"TCT mobile ltd\",\n\t[3]byte{228, 45, 123}:  \"China Mobile IOT Company Limited\",\n\t[3]byte{228, 47, 38}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{228, 47, 86}:   \"OptoMET GmbH\",\n\t[3]byte{228, 47, 246}:  \"Unicore communication Inc.\",\n\t[3]byte{228, 48, 34}:   \"Hanwha Techwin Security Vietnam\",\n\t[3]byte{228, 50, 203}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 52, 147}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 53, 147}:  \"Hangzhou GoTo technology Co.Ltd\",\n\t[3]byte{228, 53, 200}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 53, 251}:  \"Sabre Technology (Hull) Ltd\",\n\t[3]byte{228, 55, 215}:  \"HENRI DEPAEPE S.A.S.\",\n\t[3]byte{228, 56, 140}:  \"Digital Products Limited\",\n\t[3]byte{228, 56, 242}:  \"Advantage Controls\",\n\t[3]byte{228, 58, 101}:  \"MofiNetwork Inc\",\n\t[3]byte{228, 58, 110}:  \"Shenzhen Zeroone Technology CO.,LTD\",\n\t[3]byte{228, 60, 128}:  \"University of Oklahoma\",\n\t[3]byte{228, 61, 26}:   \"Broadcom Limited\",\n\t[3]byte{228, 62, 198}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 62, 215}:  \"Arcadyan Corporation\",\n\t[3]byte{228, 63, 162}:  \"Wuxi DSP Technologies Inc.\",\n\t[3]byte{228, 64, 226}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 65, 34}:   \"OnePlus Technology (Shenzhen) Co., Ltd\",\n\t[3]byte{228, 65, 230}:  \"Ottec Technology GmbH\",\n\t[3]byte{228, 66, 166}:  \"Intel Corporate\",\n\t[3]byte{228, 67, 75}:   \"Dell Inc.\",\n\t[3]byte{228, 70, 189}:  \"C&C TECHNIC TAIWAN CO., LTD.\",\n\t[3]byte{228, 70, 218}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{228, 71, 144}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{228, 71, 179}:  \"zte corporation\",\n\t[3]byte{228, 72, 199}:  \"Cisco SPVTG\",\n\t[3]byte{228, 76, 108}:  \"Shenzhen Guo Wei Electronic Co,. Ltd.\",\n\t[3]byte{228, 76, 199}:  \"IEEE Registration Authority\",\n\t[3]byte{228, 78, 24}:   \"Gardasoft VisionLimited\",\n\t[3]byte{228, 78, 118}:  \"CHAMPIONTECH  ENTERPRISE (SHENZHEN) INC\",\n\t[3]byte{228, 79, 41}:   \"MA Lighting Technology GmbH\",\n\t[3]byte{228, 79, 95}:   \"EDS Elektronik Destek San.Tic.Ltd.Sti\",\n\t[3]byte{228, 80, 154}:  \"HW Communications Ltd\",\n\t[3]byte{228, 80, 235}:  \"Apple, Inc.\",\n\t[3]byte{228, 84, 232}:  \"Dell Inc.\",\n\t[3]byte{228, 85, 234}:  \"Dedicated Computing\",\n\t[3]byte{228, 86, 20}:   \"Suttle Apparatus\",\n\t[3]byte{228, 87, 64}:   \"ARRIS Group, Inc.\",\n\t[3]byte{228, 87, 168}:  \"Stuart Manufacturing, Inc.\",\n\t[3]byte{228, 88, 184}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 88, 231}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 90, 162}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{228, 90, 212}:  \"Eltex Enterprise Ltd.\",\n\t[3]byte{228, 93, 55}:   \"Juniper Networks\",\n\t[3]byte{228, 93, 81}:   \"SFR\",\n\t[3]byte{228, 93, 82}:   \"Avaya Inc\",\n\t[3]byte{228, 93, 117}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 94, 55}:   \"Intel Corporate\",\n\t[3]byte{228, 95, 1}:    \"Raspberry Pi Trading Ltd\",\n\t[3]byte{228, 96, 89}:   \"Pingtek Co., Ltd.\",\n\t[3]byte{228, 98, 81}:   \"HAO CHENG GROUP LIMITED\",\n\t[3]byte{228, 100, 73}:  \"ARRIS Group, Inc.\",\n\t[3]byte{228, 103, 30}:  \"SHEN ZHEN NUO XIN CHENG TECHNOLOGY co., Ltd.\",\n\t[3]byte{228, 103, 186}: \"Danish Interpretation Systems A/S\",\n\t[3]byte{228, 104, 163}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 105, 90}:  \"Dictum Health, Inc.\",\n\t[3]byte{228, 108, 33}:  \"messMa GmbH\",\n\t[3]byte{228, 111, 19}:  \"D-Link International\",\n\t[3]byte{228, 112, 184}: \"Intel Corporate\",\n\t[3]byte{228, 113, 133}: \"Securifi Ltd\",\n\t[3]byte{228, 114, 226}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 117, 30}:  \"Getinge Sterilization AB\",\n\t[3]byte{228, 118, 132}: \"Apple, Inc.\",\n\t[3]byte{228, 119, 35}:  \"zte corporation\",\n\t[3]byte{228, 119, 107}: \"AARTESYS AG\",\n\t[3]byte{228, 119, 212}: \"Minrray Industry Co.,Ltd \",\n\t[3]byte{228, 123, 63}:  \"BEIJING CO-CLOUD TECHNOLOGY LTD.\",\n\t[3]byte{228, 124, 101}: \"Sunstar Communication Technology  Co., Ltd\",\n\t[3]byte{228, 124, 249}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 125, 90}:  \"Beijing Hanbang Technology Corp.\",\n\t[3]byte{228, 125, 189}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 125, 235}: \"Shanghai Notion Information Technology CO.,LTD.\",\n\t[3]byte{228, 126, 102}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 126, 154}: \"zte corporation\",\n\t[3]byte{228, 127, 178}: \"FUJITSU LIMITED\",\n\t[3]byte{228, 129, 132}: \"Nokia\",\n\t[3]byte{228, 129, 179}: \"Shenzhen ACT Industrial Co.,Ltd.\",\n\t[3]byte{228, 130, 204}: \"Jumptronic GmbH\",\n\t[3]byte{228, 131, 38}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 131, 153}: \"ARRIS Group, Inc.\",\n\t[3]byte{228, 132, 43}:  \"HANGZHOU SOFTEL OPTIC CO., LTD\",\n\t[3]byte{228, 133, 1}:   \"Geberit International AG\",\n\t[3]byte{228, 138, 213}: \"RF WINDOW CO., LTD.\",\n\t[3]byte{228, 139, 127}: \"Apple, Inc.\",\n\t[3]byte{228, 140, 15}:  \"Discovery Insure\",\n\t[3]byte{228, 141, 140}: \"Routerboard.com\",\n\t[3]byte{228, 143, 52}:  \"Vodafone Italia S.p.A.\",\n\t[3]byte{228, 143, 101}: \"Yelatma Instrument Making Enterprise, JSC\",\n\t[3]byte{228, 144, 105}: \"Rockwell Automation\",\n\t[3]byte{228, 144, 126}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{228, 144, 253}: \"Apple, Inc.\",\n\t[3]byte{228, 146, 42}:  \"DBG HOLDINGS LIMITED\",\n\t[3]byte{228, 146, 231}: \"Gridlink Tech. Co.,Ltd.\",\n\t[3]byte{228, 146, 251}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 149, 110}: \"IEEE Registration Authority\",\n\t[3]byte{228, 150, 174}: \"ALTOGRAPHICS Inc.\",\n\t[3]byte{228, 151, 240}: \"Shanghai VLC Technologies Ltd. Co.\",\n\t[3]byte{228, 152, 187}: \"Phyplus Microelectronics Limited\",\n\t[3]byte{228, 152, 209}: \"Microsoft Mobile Oy\",\n\t[3]byte{228, 152, 214}: \"Apple, Inc.\",\n\t[3]byte{228, 154, 121}: \"Apple, Inc.\",\n\t[3]byte{228, 154, 220}: \"Apple, Inc.\",\n\t[3]byte{228, 158, 18}:  \"FREEBOX SAS\",\n\t[3]byte{228, 159, 30}:  \"ARRIS Group, Inc.\",\n\t[3]byte{228, 161, 230}: \"Alcatel-Lucent Shanghai Bell Co., Ltd\",\n\t[3]byte{228, 163, 47}:  \"Shanghai Artimen Technology Co., Ltd.\",\n\t[3]byte{228, 163, 135}: \"Control Solutions LLC\",\n\t[3]byte{228, 164, 113}: \"Intel Corporate\",\n\t[3]byte{228, 165, 239}: \"TRON LINK ELECTRONICS CO., LTD.\",\n\t[3]byte{228, 167, 73}:  \"Palo Alto Networks\",\n\t[3]byte{228, 167, 160}: \"Intel Corporate\",\n\t[3]byte{228, 167, 197}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 167, 253}: \"Cellco Partnership\",\n\t[3]byte{228, 168, 182}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 168, 223}: \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{228, 170, 93}:  \"Cisco Systems, Inc\",\n\t[3]byte{228, 170, 234}: \"Liteon Technology Corporation\",\n\t[3]byte{228, 170, 236}: \"Tianjin Hualai Technology Co., Ltd\",\n\t[3]byte{228, 171, 70}:  \"UAB Selteka\",\n\t[3]byte{228, 171, 137}: \"MitraStar Technology Corp.\",\n\t[3]byte{228, 173, 125}: \"SCL Elements\",\n\t[3]byte{228, 175, 161}: \"HES-SO\",\n\t[3]byte{228, 176, 5}:   \"Beijing IQIYI Science & Technology Co., Ltd.\",\n\t[3]byte{228, 176, 33}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 178, 251}: \"Apple, Inc.\",\n\t[3]byte{228, 179, 24}:  \"Intel Corporate\",\n\t[3]byte{228, 185, 122}: \"Dell Inc.\",\n\t[3]byte{228, 186, 217}: \"360 Fly Inc.\",\n\t[3]byte{228, 189, 75}:  \"zte corporation\",\n\t[3]byte{228, 190, 237}: \"Netcore Technology Inc.\",\n\t[3]byte{228, 192, 204}: \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{228, 193, 70}:  \"Objetivos y Servicios de Valor A\",\n\t[3]byte{228, 193, 241}: \"SHENZHEN SPOTMAU INFORMATION TECHNOLIGY CO., Ltd  \",\n\t[3]byte{228, 194, 209}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 196, 131}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{228, 198, 43}:  \"Airware\",\n\t[3]byte{228, 198, 61}:  \"Apple, Inc.\",\n\t[3]byte{228, 198, 230}: \"Mophie, LLC\",\n\t[3]byte{228, 199, 34}:  \"Cisco Systems, Inc\",\n\t[3]byte{228, 200, 1}:   \"BLU Products Inc\",\n\t[3]byte{228, 200, 6}:   \"Ceiec Electric Technology Inc.\",\n\t[3]byte{228, 202, 18}:  \"zte corporation\",\n\t[3]byte{228, 203, 89}:  \"Beijing Loveair Science and Technology Co. Ltd.\",\n\t[3]byte{228, 204, 157}: \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{228, 206, 2}:   \"WyreStorm Technologies Ltd\",\n\t[3]byte{228, 206, 112}: \"Health & Life co., Ltd.\",\n\t[3]byte{228, 206, 143}: \"Apple, Inc.\",\n\t[3]byte{228, 209, 36}:  \" Mojo Networks, Inc.\",\n\t[3]byte{228, 211, 50}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{228, 211, 115}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 211, 170}: \"FUJITSU CONNECTED TECHNOLOGIES LIMITED\",\n\t[3]byte{228, 211, 241}: \"Cisco Systems, Inc\",\n\t[3]byte{228, 213, 61}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{228, 215, 29}:  \"Oraya Therapeutics\",\n\t[3]byte{228, 219, 109}: \"Beijing Xiaomi Electronics Co., Ltd.\",\n\t[3]byte{228, 221, 121}: \"En-Vision America, Inc.\",\n\t[3]byte{228, 224, 166}: \"Apple, Inc.\",\n\t[3]byte{228, 224, 197}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 225, 18}:  \"Texas Instruments\",\n\t[3]byte{228, 225, 48}:  \"TCT mobile ltd\",\n\t[3]byte{228, 228, 9}:   \"LEIFHEIT AG\",\n\t[3]byte{228, 228, 171}: \"Apple, Inc.\",\n\t[3]byte{228, 231, 73}:  \"Hewlett Packard\",\n\t[3]byte{228, 234, 131}: \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{228, 236, 16}:  \"Nokia Corporation\",\n\t[3]byte{228, 238, 253}: \"MR&D Manufacturing\",\n\t[3]byte{228, 240, 4}:   \"Dell Inc.\",\n\t[3]byte{228, 240, 66}:  \"Google, Inc.\",\n\t[3]byte{228, 241, 76}:  \"Private\",\n\t[3]byte{228, 243, 39}:  \"ATOL LLC\",\n\t[3]byte{228, 243, 101}: \"Time-O-Matic, Inc.\",\n\t[3]byte{228, 243, 196}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 243, 227}: \"Shanghai iComhome Co.,Ltd.\",\n\t[3]byte{228, 243, 232}: \"Shenzhen SuperElectron Technology Co.,Ltd.\",\n\t[3]byte{228, 243, 245}: \"SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{228, 244, 198}: \"NETGEAR\",\n\t[3]byte{228, 247, 161}: \"Datafox GmbH\",\n\t[3]byte{228, 248, 156}: \"Intel Corporate\",\n\t[3]byte{228, 248, 239}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 249, 57}:  \"Minxon Hotel Technology INC.\",\n\t[3]byte{228, 250, 29}:  \"PAD Peripheral Advanced Design Inc.\",\n\t[3]byte{228, 250, 237}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{228, 250, 253}: \"Intel Corporate\",\n\t[3]byte{228, 251, 93}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 251, 143}: \"MOBIWIRE MOBILES (NINGBO) CO.,LTD\",\n\t[3]byte{228, 252, 130}: \"Juniper Networks\",\n\t[3]byte{228, 253, 161}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{228, 254, 217}: \"EDMI Europe Ltd\",\n\t[3]byte{228, 255, 221}: \"ELECTRON INDIA\",\n\t[3]byte{232, 0, 54}:    \"Befs co,. ltd\",\n\t[3]byte{232, 1, 141}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{232, 3, 154}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{232, 4, 11}:    \"Apple, Inc.\",\n\t[3]byte{232, 4, 16}:    \"Private\",\n\t[3]byte{232, 4, 98}:    \"Cisco Systems, Inc\",\n\t[3]byte{232, 4, 243}:   \"Throughtek Co., Ltd.\",\n\t[3]byte{232, 5, 109}:   \"Nortel Networks\",\n\t[3]byte{232, 6, 136}:   \"Apple, Inc.\",\n\t[3]byte{232, 7, 52}:    \"Champion Optical Network Engineering, LLC\",\n\t[3]byte{232, 7, 191}:   \"SHENZHEN BOOMTECH INDUSTRY CO.,LTD\",\n\t[3]byte{232, 8, 139}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{232, 9, 69}:    \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{232, 9, 89}:    \"Guoguang Electric Co.,Ltd\",\n\t[3]byte{232, 11, 19}:   \"Akib Systems Taiwan, INC\",\n\t[3]byte{232, 12, 56}:   \"DAEYOUNG INFORMATION SYSTEM CO., LTD\",\n\t[3]byte{232, 12, 117}:  \"Syncbak, Inc.\",\n\t[3]byte{232, 15, 200}:  \"Universal Electronics, Inc.\",\n\t[3]byte{232, 16, 46}:   \"Really Simple Software, Inc\",\n\t[3]byte{232, 17, 50}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{232, 17, 202}:  \"SHANDONG KAER ELECTRIC.CO.,LTD\",\n\t[3]byte{232, 19, 36}:   \"GuangZhou Bonsoninfo System CO.,LTD\",\n\t[3]byte{232, 19, 99}:   \"Comstock RD, Inc.\",\n\t[3]byte{232, 19, 103}:  \"AIRSOUND Inc.\",\n\t[3]byte{232, 19, 110}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{232, 21, 14}:   \"Nokia Corporation\",\n\t[3]byte{232, 22, 43}:   \"IDEO Security Co., Ltd.\",\n\t[3]byte{232, 23, 252}:  \"Fujitsu Cloud Technologies Limited\",\n\t[3]byte{232, 24, 99}:   \"IEEE Registration Authority\",\n\t[3]byte{232, 26, 88}:   \"TECHNOLOGIC SYSTEMS\",\n\t[3]byte{232, 26, 172}:  \"ORFEO SOUNDWORKS Inc.\",\n\t[3]byte{232, 27, 75}:   \"amnimo Inc.\",\n\t[3]byte{232, 27, 105}:  \"Sercomm Corporation.\",\n\t[3]byte{232, 28, 186}:  \"Fortinet, Inc.\",\n\t[3]byte{232, 29, 168}:  \"Ruckus Wireless\",\n\t[3]byte{232, 32, 226}:  \"HUMAX Co., Ltd.\",\n\t[3]byte{232, 38, 137}:  \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{232, 38, 182}:  \"Inside Biometrics International Limited\",\n\t[3]byte{232, 40, 119}:  \"TMY Co., Ltd.\",\n\t[3]byte{232, 40, 193}:  \"Eltex Enterprise Ltd.\",\n\t[3]byte{232, 40, 213}:  \"Cots Technology\",\n\t[3]byte{232, 42, 68}:   \"Liteon Technology Corporation\",\n\t[3]byte{232, 42, 234}:  \"Intel Corporate\",\n\t[3]byte{232, 44, 109}:  \"SmartRG, Inc.\",\n\t[3]byte{232, 46, 12}:   \"NETINT Technologies Inc.\",\n\t[3]byte{232, 46, 36}:   \"Out of the Fog Research LLC\",\n\t[3]byte{232, 51, 13}:   \"Xaptec GmbH\",\n\t[3]byte{232, 51, 129}:  \"ARRIS Group, Inc.\",\n\t[3]byte{232, 52, 62}:   \"Beijing Infosec Technologies Co., LTD.\",\n\t[3]byte{232, 54, 23}:   \"Apple, Inc.\",\n\t[3]byte{232, 54, 29}:   \"Sense Labs, Inc.\",\n\t[3]byte{232, 55, 122}:  \"Zyxel Communications Corporation\",\n\t[3]byte{232, 57, 53}:   \"Hewlett Packard\",\n\t[3]byte{232, 57, 223}:  \"ASKEY COMPUTER CORP\",\n\t[3]byte{232, 58, 18}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{232, 58, 151}:  \"Toshiba Corporation\",\n\t[3]byte{232, 62, 182}:  \"RIM\",\n\t[3]byte{232, 62, 251}:  \"GEODESIC LTD.\",\n\t[3]byte{232, 62, 252}:  \"ARRIS Group, Inc.\",\n\t[3]byte{232, 63, 103}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{232, 64, 64}:   \"Cisco Systems, Inc\",\n\t[3]byte{232, 64, 242}:  \"PEGATRON CORPORATION\",\n\t[3]byte{232, 67, 182}:  \"QNAP Systems, Inc.\",\n\t[3]byte{232, 68, 126}:  \"Bitdefender SRL\",\n\t[3]byte{232, 72, 31}:   \"Advanced Automotive Antennas\",\n\t[3]byte{232, 73, 67}:   \"YUGE Information technology Co. Ltd\",\n\t[3]byte{232, 76, 86}:   \"INTERCEPT SERVICES LIMITED\",\n\t[3]byte{232, 77, 208}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{232, 78, 6}:    \"EDUP INTERNATIONAL (HK) CO., LTD\",\n\t[3]byte{232, 78, 132}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{232, 78, 206}:  \"Nintendo Co., Ltd.\",\n\t[3]byte{232, 80, 139}:  \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{232, 81, 110}:  \"TSMART Inc.\",\n\t[3]byte{232, 81, 157}:  \"Yeonhab Precision Co.,LTD\",\n\t[3]byte{232, 84, 132}:  \"NEO Information Systems Co., Ltd.\",\n\t[3]byte{232, 85, 180}:  \"SAI Technology Inc.\",\n\t[3]byte{232, 86, 89}:   \"Advanced-Connectek Inc.\",\n\t[3]byte{232, 86, 214}:  \"NCTech Ltd\",\n\t[3]byte{232, 90, 139}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{232, 90, 167}:  \"LLC Emzior\",\n\t[3]byte{232, 90, 209}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{232, 91, 91}:   \"LG ELECTRONICS INC\",\n\t[3]byte{232, 91, 183}:  \"Ample Systems Inc.\",\n\t[3]byte{232, 91, 240}:  \"Imaging Diagnostics\",\n\t[3]byte{232, 93, 107}:  \"Luminate Wireless\",\n\t[3]byte{232, 93, 134}:  \"CHANG YOW TECHNOLOGIES INTERNATIONAL CO.,LTD.\",\n\t[3]byte{232, 94, 83}:   \"Infratec Datentechnik GmbH\",\n\t[3]byte{232, 97, 31}:   \"Dawning Information Industry Co.,Ltd\",\n\t[3]byte{232, 97, 126}:  \"Liteon Technology Corporation\",\n\t[3]byte{232, 97, 131}:  \"Black Diamond Advanced Technology, LLC\",\n\t[3]byte{232, 97, 190}:  \"Melec Inc.\",\n\t[3]byte{232, 101, 73}:  \"Cisco Systems, Inc\",\n\t[3]byte{232, 101, 212}: \"Tenda Technology Co.,Ltd.Dongguan branch\",\n\t[3]byte{232, 102, 196}: \"Diamanti\",\n\t[3]byte{232, 104, 25}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{232, 106, 100}: \"LCFC(HeFei) Electronics Technology co., ltd\",\n\t[3]byte{232, 108, 218}: \"Supercomputers and Neurocomputers Research Center\",\n\t[3]byte{232, 109, 82}:  \"ARRIS Group, Inc.\",\n\t[3]byte{232, 109, 84}:  \"Digit Mobile Inc\",\n\t[3]byte{232, 109, 101}: \"AUDIO MOBIL Elektronik GmbH\",\n\t[3]byte{232, 109, 110}: \"voestalpine SIGNALING Fareham Ltd.\",\n\t[3]byte{232, 109, 203}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{232, 111, 56}:  \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{232, 111, 242}: \"Actiontec Electronics, Inc\",\n\t[3]byte{232, 113, 141}: \"Elsys Equipamentos Eletronicos Ltda\",\n\t[3]byte{232, 116, 199}: \"Sentinhealth\",\n\t[3]byte{232, 116, 230}: \"ADB Broadband Italia\",\n\t[3]byte{232, 117, 127}: \"FIRS Technologies(Shenzhen) Co., Ltd\",\n\t[3]byte{232, 120, 161}: \"BEOVIEW INTERCOM DOO\",\n\t[3]byte{232, 122, 243}: \"S5 Tech S.r.l.\",\n\t[3]byte{232, 127, 149}: \"Apple, Inc.\",\n\t[3]byte{232, 128, 46}:  \"Apple, Inc.\",\n\t[3]byte{232, 128, 216}: \"GNTEK Electronics Co.,Ltd.\",\n\t[3]byte{232, 130, 91}:  \"ARRIS Group, Inc.\",\n\t[3]byte{232, 132, 198}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{232, 133, 75}:  \"Apple, Inc.\",\n\t[3]byte{232, 135, 163}: \"Loxley Public Company Limited\",\n\t[3]byte{232, 136, 108}: \"Shenzhen SC Technologies Co.,LTD\",\n\t[3]byte{232, 137, 44}:  \"ARRIS Group, Inc.\",\n\t[3]byte{232, 141, 40}:  \"Apple, Inc.\",\n\t[3]byte{232, 141, 245}: \"ZNYX Networks, Inc.\",\n\t[3]byte{232, 142, 96}:  \"NSD Corporation\",\n\t[3]byte{232, 145, 15}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{232, 145, 32}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{232, 146, 24}:  \"Arcontia International AB\",\n\t[3]byte{232, 146, 164}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{232, 147, 9}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{232, 147, 99}:  \"Nokia\",\n\t[3]byte{232, 148, 76}:  \"Cogent Healthcare Systems Ltd\",\n\t[3]byte{232, 148, 246}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{232, 150, 6}:   \"testo Instruments (Shenzhen) Co., Ltd.\",\n\t[3]byte{232, 152, 109}: \"Palo Alto Networks\",\n\t[3]byte{232, 152, 194}: \"ZETLAB Company\",\n\t[3]byte{232, 153, 90}:  \"PiiGAB, Processinformation i Goteborg AB\",\n\t[3]byte{232, 153, 196}: \"HTC Corporation\",\n\t[3]byte{232, 154, 143}: \"Quanta Computer Inc.\",\n\t[3]byte{232, 154, 255}: \"Fujian LANDI Commercial Equipment Co.,Ltd\",\n\t[3]byte{232, 157, 135}: \"Toshiba\",\n\t[3]byte{232, 158, 12}:  \"Private\",\n\t[3]byte{232, 158, 180}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{232, 159, 128}: \"Belkin International Inc.\",\n\t[3]byte{232, 159, 236}: \"CHENGDU KT ELECTRONIC HI-TECH CO.,LTD\",\n\t[3]byte{232, 161, 248}: \"zte corporation\",\n\t[3]byte{232, 162, 69}:  \"Juniper Networks\",\n\t[3]byte{232, 163, 100}: \"Signal Path International / Peachtree Audio\",\n\t[3]byte{232, 164, 193}: \"Deep Sea Electronics Ltd\",\n\t[3]byte{232, 167, 136}: \"XIAMEN LEELEN TECHNOLOGY CO., LTD\",\n\t[3]byte{232, 167, 242}: \"sTraffic\",\n\t[3]byte{232, 171, 243}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{232, 171, 250}: \"Shenzhen Reecam Tech.Ltd.\",\n\t[3]byte{232, 172, 173}: \"zte corporation\",\n\t[3]byte{232, 173, 166}: \"Sagemcom Broadband SAS\",\n\t[3]byte{232, 177, 252}: \"Intel Corporate\",\n\t[3]byte{232, 178, 172}: \"Apple, Inc.\",\n\t[3]byte{232, 178, 254}: \"HUMAX Co., Ltd.\",\n\t[3]byte{232, 180, 112}: \"IEEE Registration Authority\",\n\t[3]byte{232, 180, 174}: \"Shenzhen C&D Electronics Co.,Ltd\",\n\t[3]byte{232, 180, 200}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{232, 181, 65}:  \"zte corporation\",\n\t[3]byte{232, 182, 194}: \"Juniper Networks\",\n\t[3]byte{232, 183, 72}:  \"Cisco Systems, Inc\",\n\t[3]byte{232, 186, 112}: \"Cisco Systems, Inc\",\n\t[3]byte{232, 187, 61}:  \"Sino Prime-Tech Limited\",\n\t[3]byte{232, 187, 168}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{232, 189, 209}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{232, 190, 129}: \"Sagemcom Broadband SAS\",\n\t[3]byte{232, 193, 184}: \" Nanjing Bangzhong Electronic Commerce Limited\",\n\t[3]byte{232, 193, 215}: \"Philips\",\n\t[3]byte{232, 194, 41}:  \"H-Displays (MSC) Bhd\",\n\t[3]byte{232, 195, 32}:  \"Austco Communication Systems Pty Ltd\",\n\t[3]byte{232, 196, 23}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{232, 197, 122}: \"Ufispace Co., LTD.\",\n\t[3]byte{232, 199, 79}:  \"Liteon Technology Corporation\",\n\t[3]byte{232, 203, 161}: \"Nokia Corporation\",\n\t[3]byte{232, 204, 24}:  \"D-Link International\",\n\t[3]byte{232, 204, 50}:  \"Micronet  LTD\",\n\t[3]byte{232, 205, 45}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{232, 206, 6}:   \"SkyHawke Technologies, LLC.\",\n\t[3]byte{232, 208, 60}:  \"Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd\",\n\t[3]byte{232, 208, 153}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{232, 208, 185}: \"Taicang T&W Electronics\",\n\t[3]byte{232, 208, 250}: \"MKS Instruments Deutschland GmbH\",\n\t[3]byte{232, 208, 252}: \"Liteon Technology Corporation\",\n\t[3]byte{232, 209, 27}:  \"ASKEY COMPUTER CORP\",\n\t[3]byte{232, 212, 131}: \"ULTIMATE Europe Transportation Equipment GmbH\",\n\t[3]byte{232, 212, 224}: \"Beijing BenyWave Technology Co., Ltd.\",\n\t[3]byte{232, 216, 25}:  \"AzureWave Technology Inc.\",\n\t[3]byte{232, 216, 209}: \"HP Inc.\",\n\t[3]byte{232, 218, 32}:  \"Nintendo Co.,Ltd\",\n\t[3]byte{232, 218, 150}: \"Zhuhai Tianrui Electrical Power Tech. Co., Ltd.\",\n\t[3]byte{232, 218, 170}: \"VideoHome Technology Corp.\",\n\t[3]byte{232, 222, 0}:   \"ChongQing GuanFang Technology Co.,LTD\",\n\t[3]byte{232, 222, 39}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{232, 222, 142}: \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{232, 222, 214}: \"Intrising Networks, Inc.\",\n\t[3]byte{232, 222, 251}: \"MESOTIC SAS\",\n\t[3]byte{232, 223, 112}: \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{232, 223, 242}: \"PRF Co., Ltd.\",\n\t[3]byte{232, 224, 143}: \"GRAVOTECH MARKING SAS\",\n\t[3]byte{232, 224, 183}: \"Toshiba\",\n\t[3]byte{232, 225, 225}: \"Gemtek Technology Co., Ltd.\",\n\t[3]byte{232, 225, 226}: \"Energotest\",\n\t[3]byte{232, 229, 214}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{232, 231, 50}:  \"Alcatel-Lucent Enterprise\",\n\t[3]byte{232, 231, 112}: \"Warp9 Tech Design, Inc.\",\n\t[3]byte{232, 231, 118}: \"Shenzhen Kootion Technology Co., Ltd\",\n\t[3]byte{232, 232, 117}: \"iS5 Communications Inc.\",\n\t[3]byte{232, 232, 183}: \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{232, 233, 142}: \"SOLAR controls s.r.o.\",\n\t[3]byte{232, 234, 106}: \"StarTech.com\",\n\t[3]byte{232, 234, 218}: \"Denkovi Assembly Electronics LTD\",\n\t[3]byte{232, 235, 17}:  \"Texas Instruments\",\n\t[3]byte{232, 235, 27}:  \"Microchip Technology Inc.\",\n\t[3]byte{232, 236, 163}: \"Dongguan Liesheng Electronic Co.Ltd\",\n\t[3]byte{232, 237, 5}:   \"ARRIS Group, Inc.\",\n\t[3]byte{232, 237, 243}: \"Cisco Systems, Inc\",\n\t[3]byte{232, 239, 137}: \"OPMEX Tech.\",\n\t[3]byte{232, 241, 176}: \"Sagemcom Broadband SAS\",\n\t[3]byte{232, 242, 38}:  \"MILLSON CUSTOM SOLUTIONS INC.\",\n\t[3]byte{232, 242, 226}: \"LG Innotek\",\n\t[3]byte{232, 242, 227}: \"Starcor Beijing Co.,Limited\",\n\t[3]byte{232, 247, 36}:  \"Hewlett Packard Enterprise\",\n\t[3]byte{232, 249, 40}:  \"RFTECH SRL\",\n\t[3]byte{232, 250, 247}: \"Guangdong Uniteddata Holding Group Co., Ltd.\",\n\t[3]byte{232, 251, 233}: \"Apple, Inc.\",\n\t[3]byte{232, 252, 96}:  \"ELCOM Innovations Private Limited\",\n\t[3]byte{232, 252, 175}: \"NETGEAR\",\n\t[3]byte{232, 253, 114}: \"SHANGHAI LINGUO TECHNOLOGY CO., LTD.\",\n\t[3]byte{232, 253, 144}: \"Turbostor\",\n\t[3]byte{232, 253, 232}: \"CeLa Link Corporation\",\n\t[3]byte{236, 1, 51}:    \"TRINUS SYSTEMS INC.\",\n\t[3]byte{236, 1, 226}:   \"FOXCONN INTERCONNECT TECHNOLOGY\",\n\t[3]byte{236, 1, 238}:   \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{236, 4, 65}:    \"ShenZhen TIGO Semiconductor Co., Ltd.\",\n\t[3]byte{236, 8, 107}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{236, 13, 154}:  \"Mellanox Technologies, Inc.\",\n\t[3]byte{236, 14, 196}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{236, 14, 214}:  \"ITECH INSTRUMENTS SAS\",\n\t[3]byte{236, 16, 123}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{236, 17, 32}:   \"FloDesign Wind Turbine Corporation\",\n\t[3]byte{236, 17, 39}:   \"Texas Instruments\",\n\t[3]byte{236, 19, 178}:  \"Netonix\",\n\t[3]byte{236, 19, 219}:  \"Juniper Networks\",\n\t[3]byte{236, 20, 246}:  \"BioControl AS\",\n\t[3]byte{236, 23, 47}:   \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{236, 23, 102}:  \"Research Centre Module\",\n\t[3]byte{236, 26, 89}:   \"Belkin International Inc.\",\n\t[3]byte{236, 27, 189}:  \"Silicon Laboratories\",\n\t[3]byte{236, 29, 127}:  \"zte corporation\",\n\t[3]byte{236, 29, 139}:  \"Cisco Systems, Inc\",\n\t[3]byte{236, 31, 114}:  \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{236, 33, 159}:  \"VidaBox LLC\",\n\t[3]byte{236, 33, 229}:  \"Toshiba\",\n\t[3]byte{236, 34, 87}:   \"JiangSu NanJing University Electronic Information Technology Co.,Ltd\",\n\t[3]byte{236, 34, 128}:  \"D-Link International\",\n\t[3]byte{236, 35, 61}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{236, 35, 104}:  \"IntelliVoice Co.,Ltd.\",\n\t[3]byte{236, 35, 123}:  \"zte corporation\",\n\t[3]byte{236, 36, 184}:  \"Texas Instruments\",\n\t[3]byte{236, 38, 81}:   \"Apple, Inc.\",\n\t[3]byte{236, 38, 202}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{236, 38, 251}:  \"TECC CO.,LTD.\",\n\t[3]byte{236, 42, 240}:  \"Ypsomed AG\",\n\t[3]byte{236, 44, 73}:   \"University of Tokyo\",\n\t[3]byte{236, 44, 226}:  \"Apple, Inc.\",\n\t[3]byte{236, 46, 78}:   \"HITACHI-LG DATA STORAGE INC\",\n\t[3]byte{236, 48, 145}:  \"Cisco Systems, Inc\",\n\t[3]byte{236, 49, 109}:  \"Hansgrohe\",\n\t[3]byte{236, 53, 134}:  \"Apple, Inc.\",\n\t[3]byte{236, 54, 63}:   \"Markov Corporation\",\n\t[3]byte{236, 56, 115}:  \"Juniper Networks\",\n\t[3]byte{236, 56, 143}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{236, 59, 240}:  \"NovelSat\",\n\t[3]byte{236, 60, 90}:   \"SHEN ZHEN HENG SHENG HUI DIGITAL TECHNOLOGY CO.,LTD\",\n\t[3]byte{236, 60, 136}:  \"MCNEX Co.,Ltd.\",\n\t[3]byte{236, 60, 187}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{236, 61, 253}:  \"SHENZHEN BILIAN ELECTRONIC CO.，LTD\",\n\t[3]byte{236, 62, 9}:    \"PERFORMANCE DESIGNED PRODUCTS, LLC\",\n\t[3]byte{236, 62, 179}:  \"Zyxel Communications Corporation\",\n\t[3]byte{236, 62, 247}:  \"Juniper Networks\",\n\t[3]byte{236, 63, 5}:    \"Institute 706, The Second Academy China Aerospace Science & Industry Corp\",\n\t[3]byte{236, 65, 24}:   \"XIAOMI Electronics,CO.,LTD\",\n\t[3]byte{236, 66, 180}:  \"ADC Corporation\",\n\t[3]byte{236, 66, 240}:  \"ADL Embedded Solutions, Inc.\",\n\t[3]byte{236, 67, 139}:  \"YAPTV\",\n\t[3]byte{236, 67, 230}:  \"AWCER Ltd.\",\n\t[3]byte{236, 67, 246}:  \"Zyxel Communications Corporation\",\n\t[3]byte{236, 68, 118}:  \"Cisco Systems, Inc\",\n\t[3]byte{236, 70, 68}:   \"TTK SAS\",\n\t[3]byte{236, 70, 112}:  \"Meinberg Funkuhren GmbH & Co. KG\",\n\t[3]byte{236, 71, 60}:   \"Redwire, LLC\",\n\t[3]byte{236, 73, 147}:  \"Qihan Technology Co., Ltd \",\n\t[3]byte{236, 76, 77}:   \"ZAO NPK RoTeK\",\n\t[3]byte{236, 77, 62}:   \"Beijing Xiaomi Mobile Software Co., Ltd\",\n\t[3]byte{236, 77, 71}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{236, 79, 130}:  \"Calix Inc.\",\n\t[3]byte{236, 81, 188}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{236, 82, 220}:  \"WORLD MEDIA AND TECHNOLOGY Corp.\",\n\t[3]byte{236, 84, 46}:   \"Shanghai XiMei Electronic Technology Co. Ltd\",\n\t[3]byte{236, 85, 249}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{236, 86, 35}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{236, 87, 13}:   \"AFE Inc.\",\n\t[3]byte{236, 88, 234}:  \"Ruckus Wireless\",\n\t[3]byte{236, 89, 231}:  \"Microsoft Corporation\",\n\t[3]byte{236, 90, 134}:  \"Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\",\n\t[3]byte{236, 91, 115}:  \"Advanced & Wise Technology Corp.\",\n\t[3]byte{236, 92, 104}:  \"CHONGQING FUGUI ELECTRONICS CO.,LTD.\",\n\t[3]byte{236, 92, 105}:  \"MITSUBISHI HEAVY INDUSTRIES MECHATRONICS SYSTEMS,LTD.\",\n\t[3]byte{236, 95, 35}:   \"Qinghai Kimascend Electronics Technology Co. Ltd.\",\n\t[3]byte{236, 96, 224}:  \"AVI-ON LABS\",\n\t[3]byte{236, 98, 100}:  \"Global411 Internet Services, LLC\",\n\t[3]byte{236, 99, 229}:  \"ePBoard Design LLC\",\n\t[3]byte{236, 99, 237}:  \"Hyundai Autoever Corp.\",\n\t[3]byte{236, 100, 231}: \"MOCACARE Corporation\",\n\t[3]byte{236, 101, 204}: \"Panasonic Automotive Systems Company of America\",\n\t[3]byte{236, 102, 209}: \"B&W Group LTD\",\n\t[3]byte{236, 104, 129}: \"Palo Alto Networks\",\n\t[3]byte{236, 108, 154}: \"Arcadyan Corporation\",\n\t[3]byte{236, 108, 159}: \"Chengdu Volans Technology CO.,LTD\",\n\t[3]byte{236, 108, 181}: \"zte corporation\",\n\t[3]byte{236, 111, 11}:  \"FADU, Inc.\",\n\t[3]byte{236, 112, 151}: \"ARRIS Group, Inc.\",\n\t[3]byte{236, 113, 219}: \"Shenzhen Baichuan Digital Technology Co., Ltd.\",\n\t[3]byte{236, 116, 186}: \"Hirschmann Automation and Control GmbH\",\n\t[3]byte{236, 117, 62}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{236, 121, 73}:  \"FUJITSU LIMITED\",\n\t[3]byte{236, 121, 242}: \"Startel\",\n\t[3]byte{236, 124, 116}: \"Justone Technologies Co., Ltd.\",\n\t[3]byte{236, 125, 17}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{236, 125, 157}: \"CPI\",\n\t[3]byte{236, 127, 198}: \"ECCEL CORPORATION SAS\",\n\t[3]byte{236, 128, 9}:   \"NovaSparks\",\n\t[3]byte{236, 129, 147}: \"Logitech, Inc\",\n\t[3]byte{236, 130, 99}:  \"zte corporation\",\n\t[3]byte{236, 131, 80}:  \"Microsoft Corporation\",\n\t[3]byte{236, 131, 108}: \"RM Tech Co., Ltd.\",\n\t[3]byte{236, 131, 213}: \"GIRD Systems Inc\",\n\t[3]byte{236, 132, 180}: \"CIG SHANGHAI CO LTD\",\n\t[3]byte{236, 133, 47}:  \"Apple, Inc.\",\n\t[3]byte{236, 136, 143}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{236, 136, 146}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{236, 137, 20}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{236, 137, 245}: \"Lenovo Mobile Communication Technology Ltd.\",\n\t[3]byte{236, 138, 76}:  \"zte corporation\",\n\t[3]byte{236, 138, 199}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{236, 140, 154}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{236, 140, 162}: \"Ruckus Wireless\",\n\t[3]byte{236, 142, 173}: \"DLX\",\n\t[3]byte{236, 142, 174}: \"Nagravision SA\",\n\t[3]byte{236, 142, 181}: \"Hewlett Packard\",\n\t[3]byte{236, 146, 51}:  \"Eddyfi NDT Inc\",\n\t[3]byte{236, 147, 39}:  \"MEMMERT GmbH + Co. KG\",\n\t[3]byte{236, 147, 101}: \"Mapper.ai, Inc.\",\n\t[3]byte{236, 147, 237}: \"DDoS-Guard LTD\",\n\t[3]byte{236, 150, 129}: \"2276427 Ontario Inc\",\n\t[3]byte{236, 151, 178}: \"SUMEC Machinery & Electric Co.,Ltd.\",\n\t[3]byte{236, 152, 108}: \"Lufft Mess- und Regeltechnik GmbH\",\n\t[3]byte{236, 152, 193}: \"Beijing Risbo Network Technology Co.,Ltd\",\n\t[3]byte{236, 154, 116}: \"Hewlett Packard\",\n\t[3]byte{236, 155, 91}:  \"Nokia Corporation\",\n\t[3]byte{236, 155, 139}: \"Hewlett Packard Enterprise\",\n\t[3]byte{236, 155, 243}: \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{236, 156, 50}:  \"Sichuan\\u00a0AI-Link\\u00a0Technology\\u00a0Co.,\\u00a0Ltd.\",\n\t[3]byte{236, 158, 205}: \"Artesyn Embedded Technologies\",\n\t[3]byte{236, 159, 13}:  \"IEEE Registration Authority\",\n\t[3]byte{236, 162, 155}: \"Kemppi Oy\",\n\t[3]byte{236, 165, 222}: \"ONYX WIFI Inc\",\n\t[3]byte{236, 168, 107}: \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{236, 169, 64}:  \"ARRIS Group, Inc.\",\n\t[3]byte{236, 169, 250}: \"GUANGDONG GENIUS TECHNOLOGY CO., LTD.\",\n\t[3]byte{236, 170, 37}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{236, 170, 160}: \"PEGATRON CORPORATION\",\n\t[3]byte{236, 173, 184}: \"Apple, Inc.\",\n\t[3]byte{236, 173, 224}: \"D-Link International\",\n\t[3]byte{236, 175, 151}: \"GIT\",\n\t[3]byte{236, 176, 225}: \"Ciena Corporation\",\n\t[3]byte{236, 177, 6}:   \"Acuro Networks, Inc\",\n\t[3]byte{236, 177, 215}: \"Hewlett Packard\",\n\t[3]byte{236, 179, 19}:  \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{236, 181, 65}:  \"SHINANO E and E Co.Ltd.\",\n\t[3]byte{236, 181, 250}: \"Philips Lighting BV\",\n\t[3]byte{236, 184, 112}: \"Beijing Heweinet Technology Co.,Ltd.\",\n\t[3]byte{236, 185, 7}:   \"CloudGenix Inc\",\n\t[3]byte{236, 186, 254}: \"GIROPTIC\",\n\t[3]byte{236, 187, 174}: \"Digivoice Tecnologia em Eletronica Ltda\",\n\t[3]byte{236, 189, 9}:   \"FUSION Electronics Ltd\",\n\t[3]byte{236, 189, 29}:  \"Cisco Systems, Inc\",\n\t[3]byte{236, 190, 221}: \"Sagemcom Broadband SAS\",\n\t[3]byte{236, 192, 27}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{236, 192, 106}: \"PowerChord Group Limited\",\n\t[3]byte{236, 195, 138}: \"Accuenergy (CANADA) Inc\",\n\t[3]byte{236, 196, 13}:  \"Nintendo Co.,Ltd\",\n\t[3]byte{236, 197, 127}: \"Suzhou Pairlink Network Technology\",\n\t[3]byte{236, 200, 130}: \"Cisco Systems, Inc\",\n\t[3]byte{236, 203, 48}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{236, 205, 109}: \"Allied Telesis, Inc.\",\n\t[3]byte{236, 206, 215}: \"Apple, Inc.\",\n\t[3]byte{236, 208, 14}:  \"MiraeRecognition Co., Ltd.\",\n\t[3]byte{236, 208, 64}:  \"GEA Farm Technologies GmbH\",\n\t[3]byte{236, 208, 159}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{236, 209, 154}: \"Zhuhai Liming Industries Co., Ltd\",\n\t[3]byte{236, 214, 138}: \"Shenzhen JMicron Intelligent Technology Developmen\",\n\t[3]byte{236, 217, 37}:  \"RAMI\",\n\t[3]byte{236, 217, 80}:  \"IRT SA\",\n\t[3]byte{236, 217, 209}: \"Shenzhen TG-NET Botone Technology Co.,Ltd.\",\n\t[3]byte{236, 219, 134}: \"API-K\",\n\t[3]byte{236, 222, 61}:  \"Lamprey Networks, Inc.\",\n\t[3]byte{236, 223, 58}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{236, 224, 155}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{236, 225, 84}:  \"Beijing Unisound Information Technology Co.,Ltd.\",\n\t[3]byte{236, 225, 169}: \"Cisco Systems, Inc\",\n\t[3]byte{236, 226, 253}: \"SKG Electric Group(Thailand) Co., Ltd.\",\n\t[3]byte{236, 229, 18}:  \"tado GmbH\",\n\t[3]byte{236, 229, 85}:  \"Hirschmann Automation\",\n\t[3]byte{236, 231, 68}:  \"Omntec mfg. inc\",\n\t[3]byte{236, 233, 11}:  \"SISTEMA SOLUCOES ELETRONICAS LTDA - EASYTECH\",\n\t[3]byte{236, 233, 21}:  \"STI Ltd\",\n\t[3]byte{236, 233, 248}: \"Guang Zhou TRI-SUN Electronics Technology  Co., Ltd\",\n\t[3]byte{236, 234, 3}:   \"DARFON LIGHTING CORP\",\n\t[3]byte{236, 235, 184}: \"Hewlett Packard Enterprise\",\n\t[3]byte{236, 238, 216}: \"ZTLX Network Technology Co.,Ltd\",\n\t[3]byte{236, 240, 14}:  \"AboCom\",\n\t[3]byte{236, 240, 254}: \"zte corporation\",\n\t[3]byte{236, 242, 43}:  \"TECNO MOBILE LIMITED\",\n\t[3]byte{236, 242, 54}:  \"NEOMONTANA ELECTRONICS\",\n\t[3]byte{236, 243, 66}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{236, 243, 91}:  \"Nokia Corporation\",\n\t[3]byte{236, 244, 81}:  \"Arcadyan Corporation\",\n\t[3]byte{236, 244, 187}: \"Dell Inc.\",\n\t[3]byte{236, 246, 189}: \"SNCF MOBILITÉS\",\n\t[3]byte{236, 247, 43}:  \"HD DIGITAL TECH CO., LTD.\",\n\t[3]byte{236, 248, 235}: \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{236, 250, 3}:   \"FCA\",\n\t[3]byte{236, 250, 92}:  \"Beijing Xiaomi Electronics Co., Ltd.\",\n\t[3]byte{236, 250, 170}: \"The IMS Company\",\n\t[3]byte{236, 250, 188}: \"Espressif Inc.\",\n\t[3]byte{236, 250, 244}: \"SenRa Tech Pvt. Ltd\",\n\t[3]byte{236, 252, 85}:  \"A. Eberle GmbH & Co. KG\",\n\t[3]byte{236, 254, 126}: \"BlueRadios, Inc.\",\n\t[3]byte{240, 0, 127}:   \"Janz - Contadores de Energia, SA\",\n\t[3]byte{240, 2, 43}:    \"Chrontel\",\n\t[3]byte{240, 2, 72}:    \"SmarteBuilding\",\n\t[3]byte{240, 3, 140}:   \"AzureWave Technology Inc.\",\n\t[3]byte{240, 7, 134}:   \"Shandong Bittel Electronics Co., Ltd\",\n\t[3]byte{240, 8, 209}:   \"Espressif Inc.\",\n\t[3]byte{240, 8, 241}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{240, 13, 92}:   \"JinQianMao  Technology Co.,Ltd.\",\n\t[3]byte{240, 13, 245}:  \"ACOMA Medical Industry Co,. Ltd.\",\n\t[3]byte{240, 14, 29}:   \"Megafone Limited\",\n\t[3]byte{240, 14, 191}:  \"ZettaHash Inc.\",\n\t[3]byte{240, 15, 236}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{240, 16, 144}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{240, 16, 171}:  \"China Mobile (Hangzhou) Information Technology Co., Ltd.\",\n\t[3]byte{240, 19, 195}:  \"SHENZHEN FENDA TECHNOLOGY CO., LTD\",\n\t[3]byte{240, 21, 160}:  \"KyungDong One Co., Ltd.\",\n\t[3]byte{240, 21, 185}:  \"PlayFusion Limited\",\n\t[3]byte{240, 24, 43}:   \"LG Chem\",\n\t[3]byte{240, 24, 152}:  \"Apple, Inc.\",\n\t[3]byte{240, 27, 108}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{240, 28, 19}:   \"LG Electronics (Mobile Communications)\",\n\t[3]byte{240, 28, 45}:   \"Juniper Networks\",\n\t[3]byte{240, 29, 188}:  \"Microsoft Corporation\",\n\t[3]byte{240, 30, 52}:   \"ORICO Technologies Co., Ltd\",\n\t[3]byte{240, 31, 175}:  \"Dell Inc.\",\n\t[3]byte{240, 33, 157}:  \"Cal-Comp Electronics & Communications Company Ltd.\",\n\t[3]byte{240, 34, 78}:   \"Esan electronic co.\",\n\t[3]byte{240, 35, 41}:   \"SHOWA DENKI CO.,LTD.\",\n\t[3]byte{240, 35, 185}:  \"IEEE Registration Authority\",\n\t[3]byte{240, 36, 5}:    \"OPUS High Technology Corporation\",\n\t[3]byte{240, 36, 8}:    \"Talaris (Sweden) AB\",\n\t[3]byte{240, 36, 117}:  \"Apple, Inc.\",\n\t[3]byte{240, 37, 114}:  \"Cisco Systems, Inc\",\n\t[3]byte{240, 37, 183}:  \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{240, 38, 36}:   \"WAFA TECHNOLOGIES CO., LTD.\",\n\t[3]byte{240, 38, 76}:   \"Sigrist-Photometer AG\",\n\t[3]byte{240, 39, 45}:   \"Amazon Technologies Inc.\",\n\t[3]byte{240, 39, 69}:   \"F-Secure Corporation\",\n\t[3]byte{240, 39, 101}:  \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{240, 41, 41}:   \"Cisco Systems, Inc\",\n\t[3]byte{240, 42, 35}:   \"Creative Next Design\",\n\t[3]byte{240, 42, 97}:   \"Waldo Networks, Inc.\",\n\t[3]byte{240, 46, 81}:   \"Casa Systems\",\n\t[3]byte{240, 47, 167}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{240, 47, 216}:  \"Bi2-Vision\",\n\t[3]byte{240, 50, 26}:   \"Mita-Teknik A/S\",\n\t[3]byte{240, 51, 229}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{240, 52, 4}:    \"TCT mobile ltd\",\n\t[3]byte{240, 55, 161}:  \"Huike Electronics (SHENZHEN) CO., LTD.\",\n\t[3]byte{240, 58, 75}:   \"Bloombase, Inc.\",\n\t[3]byte{240, 58, 85}:   \"Omega Elektronik AS\",\n\t[3]byte{240, 61, 3}:    \"TECNO MOBILE LIMITED\",\n\t[3]byte{240, 61, 41}:   \"Actility\",\n\t[3]byte{240, 62, 144}:  \"Ruckus Wireless\",\n\t[3]byte{240, 62, 191}:  \"GOGORO TAIWAN LIMITED\",\n\t[3]byte{240, 63, 149}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{240, 63, 248}:  \"R L Drake\",\n\t[3]byte{240, 64, 123}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{240, 65, 198}:  \"Heat Tech Company, Ltd.\",\n\t[3]byte{240, 65, 200}:  \"IEEE Registration Authority\",\n\t[3]byte{240, 66, 28}:   \"Intel Corporate\",\n\t[3]byte{240, 67, 53}:   \"DVN(Shanghai)Ltd.\",\n\t[3]byte{240, 67, 71}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{240, 69, 218}:  \"Texas Instruments\",\n\t[3]byte{240, 70, 59}:   \"Comcast Cable Corporation\",\n\t[3]byte{240, 74, 43}:   \"PYRAMID Computer GmbH\",\n\t[3]byte{240, 75, 58}:   \"Juniper Networks\",\n\t[3]byte{240, 75, 106}:  \"Scientific Production Association Siberian Arsenal, Ltd.\",\n\t[3]byte{240, 75, 242}:  \"JTECH Communications, Inc.\",\n\t[3]byte{240, 76, 213}:  \"Maxlinear, Inc\",\n\t[3]byte{240, 77, 162}:  \"Dell Inc.\",\n\t[3]byte{240, 79, 124}:  \"Private\",\n\t[3]byte{240, 81, 54}:   \"TCT mobile ltd\",\n\t[3]byte{240, 81, 234}:  \"Fitbit, Inc.\",\n\t[3]byte{240, 84, 148}:  \"Honeywell Connected Building\",\n\t[3]byte{240, 85, 1}:    \"Huawei Device Co., Ltd.\",\n\t[3]byte{240, 88, 73}:   \"CareView Communications\",\n\t[3]byte{240, 90, 9}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{240, 91, 123}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{240, 92, 25}:   \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{240, 92, 119}:  \"Google, Inc.\",\n\t[3]byte{240, 92, 213}:  \"Apple, Inc.\",\n\t[3]byte{240, 93, 137}:  \"Dycon Limited\",\n\t[3]byte{240, 93, 200}:  \"Duracell Powermat\",\n\t[3]byte{240, 95, 90}:   \"Getriebebau NORD GmbH and Co. KG\",\n\t[3]byte{240, 97, 48}:   \"Advantage Pharmacy Services, LLC\",\n\t[3]byte{240, 98, 13}:   \"Shenzhen Egreat Tech Corp.,Ltd\",\n\t[3]byte{240, 98, 129}:  \"ProCurve Networking by HP\",\n\t[3]byte{240, 99, 249}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{240, 101, 194}: \"Yanfeng Visteon Electronics Technology (Shanghai) Co.,Ltd.\",\n\t[3]byte{240, 101, 221}: \"Primax Electronics Ltd.\",\n\t[3]byte{240, 103, 40}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{240, 104, 83}:  \"Integrated Corporation\",\n\t[3]byte{240, 104, 101}: \"Taicang T&W Electronics\",\n\t[3]byte{240, 107, 202}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{240, 109, 120}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{240, 110, 11}:  \"Microsoft Corporation\",\n\t[3]byte{240, 110, 50}:  \"MICROTEL INNOVATION S.R.L.\",\n\t[3]byte{240, 114, 140}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{240, 114, 234}: \"Google, Inc.\",\n\t[3]byte{240, 115, 174}: \"PEAK-System Technik\",\n\t[3]byte{240, 116, 133}: \"NGD Systems, Inc.\",\n\t[3]byte{240, 116, 228}: \"Thundercomm Technology Co., Ltd\",\n\t[3]byte{240, 118, 28}:  \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{240, 118, 111}: \"Apple, Inc.\",\n\t[3]byte{240, 119, 101}: \"Sourcefire, Inc\",\n\t[3]byte{240, 119, 208}: \"Xcellen\",\n\t[3]byte{240, 120, 7}:   \"Apple, Inc.\",\n\t[3]byte{240, 120, 22}:  \"Cisco Systems, Inc\",\n\t[3]byte{240, 121, 89}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{240, 121, 96}:  \"Apple, Inc.\",\n\t[3]byte{240, 121, 232}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{240, 123, 203}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{240, 124, 199}: \"Juniper Networks\",\n\t[3]byte{240, 125, 104}: \"D-Link Corporation\",\n\t[3]byte{240, 127, 6}:   \"Cisco Systems, Inc\",\n\t[3]byte{240, 127, 12}:  \"Leopold Kostal GmbH &Co. KG\",\n\t[3]byte{240, 129, 115}: \"Amazon Technologies Inc.\",\n\t[3]byte{240, 129, 117}: \"Sagemcom Broadband SAS\",\n\t[3]byte{240, 129, 175}: \"IRZ AUTOMATION TECHNOLOGIES LTD\",\n\t[3]byte{240, 130, 97}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{240, 132, 47}:  \"ADB Broadband Italia\",\n\t[3]byte{240, 132, 201}: \"zte corporation\",\n\t[3]byte{240, 133, 193}: \"SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\",\n\t[3]byte{240, 134, 32}:  \"Arcadyan Corporation\",\n\t[3]byte{240, 138, 40}:  \"JIANGSU HENGSION ELECTRONIC S and T CO.,LTD\",\n\t[3]byte{240, 138, 118}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{240, 139, 254}: \"COSTEL.,CO.LTD\",\n\t[3]byte{240, 140, 251}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{240, 142, 219}: \"VeloCloud Networks\",\n\t[3]byte{240, 146, 28}:  \"Hewlett Packard\",\n\t[3]byte{240, 146, 180}: \"SICHUAN TIANYI COMHEART TELECOMCO., LTD\",\n\t[3]byte{240, 147, 58}:  \"NxtConect\",\n\t[3]byte{240, 147, 197}: \"Garland Technology\",\n\t[3]byte{240, 149, 241}: \"Carl Zeiss AG\",\n\t[3]byte{240, 151, 229}: \"TAMIO, INC\",\n\t[3]byte{240, 152, 56}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{240, 152, 157}: \"Apple, Inc.\",\n\t[3]byte{240, 153, 25}:  \"Garmin International\",\n\t[3]byte{240, 153, 182}: \"Apple, Inc.\",\n\t[3]byte{240, 153, 191}: \"Apple, Inc.\",\n\t[3]byte{240, 154, 81}:  \"Shanghai Viroyal Electronic Technology Company Limited\",\n\t[3]byte{240, 155, 184}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{240, 156, 187}: \"RaonThink Inc.\",\n\t[3]byte{240, 156, 215}: \"Guangzhou Blue Cheetah Intelligent Technology Co., Ltd.\",\n\t[3]byte{240, 156, 233}: \"Extreme Networks, Inc.\",\n\t[3]byte{240, 158, 99}:  \"Cisco Systems, Inc\",\n\t[3]byte{240, 159, 194}: \"Ubiquiti Networks Inc.\",\n\t[3]byte{240, 159, 252}: \"SHARP Corporation\",\n\t[3]byte{240, 162, 37}:  \"Private\",\n\t[3]byte{240, 163, 90}:  \"Apple, Inc.\",\n\t[3]byte{240, 167, 100}: \"GST Co., Ltd.\",\n\t[3]byte{240, 167, 178}: \"FUTABA CORPORATION\",\n\t[3]byte{240, 169, 104}: \"Antailiye Technology Co.,Ltd\",\n\t[3]byte{240, 171, 84}:  \"MITSUMI ELECTRIC CO.,LTD.\",\n\t[3]byte{240, 172, 164}: \"HBC-radiomatic\",\n\t[3]byte{240, 172, 215}: \"IEEE Registration Authority\",\n\t[3]byte{240, 173, 78}:  \"Globalscale Technologies, Inc.\",\n\t[3]byte{240, 174, 81}:  \"Xi3 Corp\",\n\t[3]byte{240, 175, 80}:  \"Phantom Intelligence\",\n\t[3]byte{240, 175, 133}: \"ARRIS Group, Inc.\",\n\t[3]byte{240, 176, 20}:  \"AVM Audiovisuelles Marketing und Computersysteme GmbH\",\n\t[3]byte{240, 176, 34}:  \"TOHO Electronics INC.\",\n\t[3]byte{240, 176, 82}:  \"Ruckus Wireless\",\n\t[3]byte{240, 176, 231}: \"Apple, Inc.\",\n\t[3]byte{240, 177, 7}:   \"Ericsson AB\",\n\t[3]byte{240, 178, 229}: \"Cisco Systems, Inc\",\n\t[3]byte{240, 179, 30}:  \"Universal Electronics, Inc.\",\n\t[3]byte{240, 180, 41}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{240, 180, 121}: \"Apple, Inc.\",\n\t[3]byte{240, 180, 210}: \"D-Link International\",\n\t[3]byte{240, 181, 183}: \"Disruptive Technologies Research AS\",\n\t[3]byte{240, 181, 209}: \"Texas Instruments\",\n\t[3]byte{240, 182, 235}: \"Poslab Technology Co., Ltd.\",\n\t[3]byte{240, 185, 104}: \"ITEL MOBILE LIMITED\",\n\t[3]byte{240, 188, 200}: \"MaxID (Pty) Ltd\",\n\t[3]byte{240, 188, 201}: \"PFU LIMITED\",\n\t[3]byte{240, 189, 46}:  \"H+S Polatis Ltd\",\n\t[3]byte{240, 189, 241}: \"Sipod Inc.\",\n\t[3]byte{240, 191, 151}: \"Sony Corporation\",\n\t[3]byte{240, 193, 241}: \"Apple, Inc.\",\n\t[3]byte{240, 194, 76}:  \"Zhejiang FeiYue Digital Technology Co., Ltd\",\n\t[3]byte{240, 194, 124}: \"Mianyang Netop Telecom Equipment Co.,Ltd.\",\n\t[3]byte{240, 195, 113}: \"Apple, Inc.\",\n\t[3]byte{240, 196, 47}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{240, 199, 127}: \"Texas Instruments\",\n\t[3]byte{240, 200, 80}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{240, 200, 140}: \"LeddarTech Inc.\",\n\t[3]byte{240, 201, 209}: \"GD Midea Air-Conditioning Equipment Co.,Ltd.\",\n\t[3]byte{240, 203, 161}: \"Apple, Inc.\",\n\t[3]byte{240, 209, 79}:  \"LINEAR LLC\",\n\t[3]byte{240, 209, 169}: \"Apple, Inc.\",\n\t[3]byte{240, 209, 184}: \"LEDVANCE\",\n\t[3]byte{240, 210, 241}: \"Amazon Technologies Inc.\",\n\t[3]byte{240, 211, 167}: \"CobaltRay Co., Ltd\",\n\t[3]byte{240, 211, 231}: \"Sensometrix SA\",\n\t[3]byte{240, 212, 226}: \"Dell Inc.\",\n\t[3]byte{240, 212, 246}: \"Lars Thrane A/S\",\n\t[3]byte{240, 212, 247}: \"varram system\",\n\t[3]byte{240, 213, 191}: \"Intel Corporate\",\n\t[3]byte{240, 214, 87}:  \"ECHOSENS\",\n\t[3]byte{240, 215, 103}: \"Axema Passagekontroll AB\",\n\t[3]byte{240, 215, 170}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{240, 215, 175}: \"IEEE Registration Authority\",\n\t[3]byte{240, 215, 220}: \"Wesine (Wuhan) Technology Co., Ltd.\",\n\t[3]byte{240, 217, 178}: \"EXO S.A.\",\n\t[3]byte{240, 218, 124}: \"RLH INDUSTRIES,INC.\",\n\t[3]byte{240, 219, 48}:  \"Yottabyte\",\n\t[3]byte{240, 219, 226}: \"Apple, Inc.\",\n\t[3]byte{240, 219, 248}: \"Apple, Inc.\",\n\t[3]byte{240, 220, 226}: \"Apple, Inc.\",\n\t[3]byte{240, 222, 113}: \"Shanghai EDO Technologies Co.,Ltd.\",\n\t[3]byte{240, 222, 185}: \"ShangHai Y&Y Electronics Co., Ltd\",\n\t[3]byte{240, 222, 241}: \"Wistron Infocomm (Zhongshan) Corporation\",\n\t[3]byte{240, 227, 220}: \"Tecon MT, LLC\",\n\t[3]byte{240, 228, 162}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{240, 229, 195}: \"Drägerwerk AG & Co. KG aA\",\n\t[3]byte{240, 231, 126}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{240, 235, 208}: \"Shanghai Feixun Communication Co.,Ltd.\",\n\t[3]byte{240, 236, 57}:  \"Essec\",\n\t[3]byte{240, 237, 30}:  \"Bilkon Bilgisayar Kontrollu Cih. Im.Ltd.\",\n\t[3]byte{240, 238, 16}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{240, 238, 88}:  \"PACE Telematics GmbH\",\n\t[3]byte{240, 238, 187}: \"VIPAR GmbH\",\n\t[3]byte{240, 239, 134}: \"Google, Inc.\",\n\t[3]byte{240, 239, 210}: \"TF PAYMENT SERVICE CO., LTD\",\n\t[3]byte{240, 240, 2}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{240, 240, 143}: \"Nextek Solutions Pte Ltd\",\n\t[3]byte{240, 240, 164}: \"Amazon Technologies Inc.\",\n\t[3]byte{240, 242, 73}:  \"Hitron Technologies. Inc\",\n\t[3]byte{240, 242, 96}:  \"Mobitec AB\",\n\t[3]byte{240, 243, 54}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{240, 245, 174}: \"Adaptrum Inc.\",\n\t[3]byte{240, 246, 28}:  \"Apple, Inc.\",\n\t[3]byte{240, 246, 68}:  \"Whitesky Science & Technology Co.,Ltd.\",\n\t[3]byte{240, 246, 105}: \"Motion Analysis Corporation\",\n\t[3]byte{240, 246, 193}: \"Sonos, Inc.\",\n\t[3]byte{240, 247, 85}:  \"Cisco Systems, Inc\",\n\t[3]byte{240, 247, 179}: \"Phorm\",\n\t[3]byte{240, 248, 66}:  \"KEEBOX, Inc.\",\n\t[3]byte{240, 248, 242}: \"Texas Instruments\",\n\t[3]byte{240, 249, 247}: \"IES GmbH & Co. KG\",\n\t[3]byte{240, 250, 199}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{240, 252, 200}: \"ARRIS Group, Inc.\",\n\t[3]byte{240, 253, 160}: \"Acurix Networks Pty Ltd\",\n\t[3]byte{240, 254, 107}: \"Shanghai High-Flying Electronics Technology Co., Ltd\",\n\t[3]byte{244, 2, 112}:   \"Dell Inc.\",\n\t[3]byte{244, 3, 4}:     \"Google, Inc.\",\n\t[3]byte{244, 3, 33}:    \"BeNeXt B.V.\",\n\t[3]byte{244, 3, 42}:    \"Amazon Technologies Inc.\",\n\t[3]byte{244, 3, 47}:    \"Reduxio Systems\",\n\t[3]byte{244, 3, 67}:    \"Hewlett Packard Enterprise\",\n\t[3]byte{244, 4, 76}:    \"ValenceTech Limited\",\n\t[3]byte{244, 6, 22}:    \"Apple, Inc.\",\n\t[3]byte{244, 6, 105}:   \"Intel Corporate\",\n\t[3]byte{244, 6, 141}:   \"devolo AG\",\n\t[3]byte{244, 6, 165}:   \"Hangzhou Bianfeng Networking Technology Co., Ltd.\",\n\t[3]byte{244, 9, 216}:   \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{244, 10, 74}:   \"INDUSNET Communication Technology Co.,LTD\",\n\t[3]byte{244, 11, 147}:  \"BlackBerry RTS\",\n\t[3]byte{244, 14, 1}:    \"Apple, Inc.\",\n\t[3]byte{244, 14, 17}:   \"IEEE Registration Authority\",\n\t[3]byte{244, 14, 34}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{244, 14, 131}:  \"ARRIS Group, Inc.\",\n\t[3]byte{244, 15, 27}:   \"Cisco Systems, Inc\",\n\t[3]byte{244, 15, 36}:   \"Apple, Inc.\",\n\t[3]byte{244, 15, 155}:  \"WAVELINK\",\n\t[3]byte{244, 21, 53}:   \"SPON Communication Technology Co.,Ltd\",\n\t[3]byte{244, 21, 99}:   \"F5 Networks, Inc.\",\n\t[3]byte{244, 21, 253}:  \"Shanghai Pateo Electronic Equipment Manufacturing Co., Ltd.\",\n\t[3]byte{244, 23, 184}:  \"AirTies Wireless Networks\",\n\t[3]byte{244, 25, 226}:  \"Volterra\",\n\t[3]byte{244, 27, 161}:  \"Apple, Inc.\",\n\t[3]byte{244, 28, 149}:  \"BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD\",\n\t[3]byte{244, 29, 107}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 30, 38}:   \"Simon-Kaloi Engineering\",\n\t[3]byte{244, 30, 94}:   \"RtBrick Inc.\",\n\t[3]byte{244, 31, 11}:   \"YAMABISHI Corporation\",\n\t[3]byte{244, 31, 136}:  \"zte corporation\",\n\t[3]byte{244, 31, 194}:  \"Cisco Systems, Inc\",\n\t[3]byte{244, 32, 18}:   \"Cuciniale GmbH\",\n\t[3]byte{244, 40, 51}:   \"MMPC Inc.\",\n\t[3]byte{244, 40, 83}:   \"Zioncom Electronics (Shenzhen) Ltd.\",\n\t[3]byte{244, 40, 150}:  \"SPECTO PAINEIS ELETRONICOS LTDA\",\n\t[3]byte{244, 41, 129}:  \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{244, 43, 72}:   \"Ubiqam\",\n\t[3]byte{244, 44, 86}:   \"SENOR TECH CO LTD\",\n\t[3]byte{244, 46, 127}:  \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{244, 48, 139}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{244, 48, 185}:  \"Hewlett Packard\",\n\t[3]byte{244, 49, 195}:  \"Apple, Inc.\",\n\t[3]byte{244, 50, 61}:   \"Sichuan tianyi kanghe communications co., LTD\",\n\t[3]byte{244, 51, 40}:   \"CIMCON Lighting Inc.\",\n\t[3]byte{244, 54, 225}:  \"Abilis Systems SARL\",\n\t[3]byte{244, 55, 183}:  \"Apple, Inc.\",\n\t[3]byte{244, 56, 20}:   \"Shanghai Howell Electronic Co.,Ltd\",\n\t[3]byte{244, 57, 9}:    \"Hewlett Packard\",\n\t[3]byte{244, 61, 128}:  \"FAG Industrial Services GmbH\",\n\t[3]byte{244, 62, 97}:   \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{244, 62, 102}:  \"Bee Computing (HK) Limited\",\n\t[3]byte{244, 62, 157}:  \"Benu Networks, Inc.\",\n\t[3]byte{244, 65, 86}:   \"Arrikto Inc.\",\n\t[3]byte{244, 66, 39}:   \"S & S Research Inc.\",\n\t[3]byte{244, 66, 143}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{244, 68, 80}:   \"BND Co., Ltd.\",\n\t[3]byte{244, 69, 237}:  \"Portable Innovation Technology Ltd.\",\n\t[3]byte{244, 71, 19}:   \"Leading Public Performance Co., Ltd.\",\n\t[3]byte{244, 71, 42}:   \"Nanjing Rousing Sci. and Tech. Industrial Co., Ltd\",\n\t[3]byte{244, 72, 72}:   \"Amscreen Group Ltd\",\n\t[3]byte{244, 73, 85}:   \"MIMO TECH Co., Ltd.\",\n\t[3]byte{244, 73, 239}:  \"EMSTONE\",\n\t[3]byte{244, 75, 42}:   \"Cisco SPVTG\",\n\t[3]byte{244, 76, 112}:  \"Skyworth Digital Technology(Shenzhen) Co.,Ltd\",\n\t[3]byte{244, 76, 127}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 77, 23}:   \"GOLDCARD HIGH-TECH CO.,LTD.\",\n\t[3]byte{244, 77, 48}:   \"Elitegroup Computer Systems Co.,Ltd.\",\n\t[3]byte{244, 78, 5}:    \"Cisco Systems, Inc\",\n\t[3]byte{244, 78, 253}:  \"Actions Semiconductor Co.,Ltd.(Cayman Islands)\",\n\t[3]byte{244, 80, 235}:  \"Telechips Inc\",\n\t[3]byte{244, 82, 20}:   \"Mellanox Technologies, Inc.\",\n\t[3]byte{244, 84, 32}:   \"TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO \",\n\t[3]byte{244, 84, 51}:   \"Rockwell Automation\",\n\t[3]byte{244, 85, 149}:  \"HENGBAO Corporation LTD.\",\n\t[3]byte{244, 85, 156}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 85, 224}:  \"Niceway CNC Technology Co.,Ltd.Hunan Province\",\n\t[3]byte{244, 87, 62}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{244, 88, 66}:   \"Boxx TV Ltd\",\n\t[3]byte{244, 91, 115}:  \"Wanjiaan Interconnected Technology Co., Ltd\",\n\t[3]byte{244, 92, 137}:  \"Apple, Inc.\",\n\t[3]byte{244, 94, 171}:  \"Texas Instruments\",\n\t[3]byte{244, 95, 105}:  \"Matsufu Electronics distribution Company\",\n\t[3]byte{244, 95, 212}:  \"Cisco SPVTG\",\n\t[3]byte{244, 95, 247}:  \"DQ Technology Inc.\",\n\t[3]byte{244, 96, 13}:   \"Panoptic Technology, Inc\",\n\t[3]byte{244, 96, 226}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{244, 98, 208}:  \"Not for Radio, LLC\",\n\t[3]byte{244, 99, 31}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 99, 73}:   \"Diffon Corporation\",\n\t[3]byte{244, 100, 93}:  \"Toshiba\",\n\t[3]byte{244, 103, 45}:  \"ShenZhen Topstar Technology Company\",\n\t[3]byte{244, 105, 66}:  \"ASKEY COMPUTER CORP\",\n\t[3]byte{244, 105, 213}: \"IEEE Registration Authority\",\n\t[3]byte{244, 106, 146}: \"SHENZHEN FAST TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 106, 188}: \"Adonit Corp. Ltd.\",\n\t[3]byte{244, 107, 239}: \"Sagemcom Broadband SAS\",\n\t[3]byte{244, 109, 4}:   \"ASUSTek COMPUTER INC.\",\n\t[3]byte{244, 109, 226}: \"zte corporation\",\n\t[3]byte{244, 110, 36}:  \"NEC Personal Computers, Ltd.\",\n\t[3]byte{244, 110, 149}: \"Extreme Networks, Inc.\",\n\t[3]byte{244, 111, 78}:  \"Echowell\",\n\t[3]byte{244, 112, 171}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{244, 113, 144}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{244, 115, 53}:  \"Logitech Far East\",\n\t[3]byte{244, 115, 202}: \"Conversion Sound Inc.\",\n\t[3]byte{244, 116, 136}: \"New H3C Technologies Co., Ltd\",\n\t[3]byte{244, 118, 38}:  \"Viltechmeda UAB \",\n\t[3]byte{244, 121, 96}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 122, 78}:  \"Woojeon&Handan\",\n\t[3]byte{244, 122, 204}: \"SolidFire, Inc.\",\n\t[3]byte{244, 123, 94}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{244, 125, 239}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{244, 127, 53}:  \"Cisco Systems, Inc\",\n\t[3]byte{244, 129, 57}:  \"CANON INC.\",\n\t[3]byte{244, 131, 205}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{244, 131, 225}: \"Shanghai Clouder Semiconductor Co.,Ltd\",\n\t[3]byte{244, 132, 76}:  \"Texas Instruments\",\n\t[3]byte{244, 133, 198}: \"FDT Technologies\",\n\t[3]byte{244, 135, 113}: \"Infoblox\",\n\t[3]byte{244, 135, 197}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{244, 139, 50}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{244, 140, 80}:  \"Intel Corporate\",\n\t[3]byte{244, 140, 235}: \"D-Link International\",\n\t[3]byte{244, 142, 9}:   \"Nokia Corporation\",\n\t[3]byte{244, 142, 56}:  \"Dell Inc.\",\n\t[3]byte{244, 142, 146}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 144, 202}: \"Tensorcom\",\n\t[3]byte{244, 144, 203}: \"IEEE Registration Authority\",\n\t[3]byte{244, 144, 234}: \"Deciso B.V.\",\n\t[3]byte{244, 145, 30}:  \"ZHUHAI EWPE INFORMATION TECHNOLOGY INC\",\n\t[3]byte{244, 146, 191}: \"Ubiquiti Networks Inc.\",\n\t[3]byte{244, 147, 159}: \"Hon Hai Precision Ind. Co., Ltd.\",\n\t[3]byte{244, 148, 97}:  \"NexGen Storage\",\n\t[3]byte{244, 148, 102}: \"CountMax,  ltd\",\n\t[3]byte{244, 149, 27}:  \"Hefei Radio Communication Technology Co., Ltd \",\n\t[3]byte{244, 150, 52}:  \"Intel Corporate\",\n\t[3]byte{244, 150, 81}:  \"NAKAYO Inc\",\n\t[3]byte{244, 151, 194}: \"Nebulon Inc\",\n\t[3]byte{244, 153, 172}: \"WEBER Schraubautomaten GmbH\",\n\t[3]byte{244, 156, 18}:  \"Structab AB\",\n\t[3]byte{244, 158, 239}: \"Taicang T&W Electronics\",\n\t[3]byte{244, 159, 84}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{244, 159, 243}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 162, 148}: \"EAGLE WORLD DEVELOPMENT CO., LIMITED\",\n\t[3]byte{244, 164, 214}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 165, 42}:  \"Hawa Technologies Inc\",\n\t[3]byte{244, 165, 157}: \"Huawei Device Co., Ltd.\",\n\t[3]byte{244, 167, 57}:  \"Juniper Networks\",\n\t[3]byte{244, 169, 151}: \"CANON INC.\",\n\t[3]byte{244, 172, 193}: \"Cisco Systems, Inc\",\n\t[3]byte{244, 175, 231}: \"Apple, Inc.\",\n\t[3]byte{244, 177, 100}: \"Lightning Telecommunications Technology Co. Ltd\",\n\t[3]byte{244, 179, 129}: \"WindowMaster A/S\",\n\t[3]byte{244, 181, 32}:  \"Biostar Microtech international corp.\",\n\t[3]byte{244, 181, 47}:  \"Juniper Networks\",\n\t[3]byte{244, 181, 73}:  \"Xiamen Yeastar Information Technology Co., Ltd.\",\n\t[3]byte{244, 181, 170}: \"zte corporation\",\n\t[3]byte{244, 181, 187}: \"CERAGON NETWORKS\",\n\t[3]byte{244, 182, 136}: \"PLANTRONICS, INC.\",\n\t[3]byte{244, 182, 229}: \"TerraSem Co.,Ltd\",\n\t[3]byte{244, 183, 42}:  \"TIME INTERCONNECT LTD\",\n\t[3]byte{244, 183, 141}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 183, 179}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{244, 183, 226}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{244, 184, 94}:  \"Texas Instruments\",\n\t[3]byte{244, 184, 167}: \"zte corporation\",\n\t[3]byte{244, 188, 151}: \"Shenzhen Crave Communication Co., LTD\",\n\t[3]byte{244, 188, 218}: \"Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd\",\n\t[3]byte{244, 189, 124}: \"Chengdu jinshi communication Co., LTD\",\n\t[3]byte{244, 189, 158}: \"Cisco Systems, Inc\",\n\t[3]byte{244, 191, 128}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 191, 168}: \"Juniper Networks\",\n\t[3]byte{244, 193, 20}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{244, 194, 72}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{244, 196, 71}:  \"Coagent International Enterprise Limited\",\n\t[3]byte{244, 196, 214}: \"Shenzhen Xinfa Electronic Co.,ltd\",\n\t[3]byte{244, 198, 19}:  \"Alcatel-Lucent Shanghai Bell Co., Ltd\",\n\t[3]byte{244, 198, 215}: \"blackned GmbH\",\n\t[3]byte{244, 199, 20}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 199, 149}: \"WEY Elektronik AG\",\n\t[3]byte{244, 199, 200}: \"Kelvin Inc.\",\n\t[3]byte{244, 202, 36}:  \"FreeBit Co., Ltd.\",\n\t[3]byte{244, 202, 229}: \"FREEBOX SAS\",\n\t[3]byte{244, 203, 82}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 204, 85}:  \"Juniper Networks\",\n\t[3]byte{244, 205, 144}: \"Vispiron Rotec GmbH\",\n\t[3]byte{244, 206, 54}:  \"Nordic Semiconductor ASA\",\n\t[3]byte{244, 206, 70}:  \"Hewlett Packard\",\n\t[3]byte{244, 207, 162}: \"Espressif Inc.\",\n\t[3]byte{244, 207, 226}: \"Cisco Systems, Inc\",\n\t[3]byte{244, 208, 50}:  \"Yunnan Ideal Information&Technology.,Ltd\",\n\t[3]byte{244, 209, 8}:   \"Intel Corporate\",\n\t[3]byte{244, 210, 97}:  \"SEMOCON Co., Ltd\",\n\t[3]byte{244, 214, 32}:  \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{244, 215, 178}: \"LGS Innovations, LLC\",\n\t[3]byte{244, 217, 198}: \"UNIONMAN TECHNOLOGY CO.,LTD\",\n\t[3]byte{244, 217, 251}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{244, 219, 227}: \"Apple, Inc.\",\n\t[3]byte{244, 219, 230}: \"Cisco Systems, Inc\",\n\t[3]byte{244, 220, 65}:  \"YOUNGZONE CULTURE (SHANGHAI) CORP\",\n\t[3]byte{244, 220, 77}:  \"Beijing CCD Digital Technology Co., Ltd\",\n\t[3]byte{244, 220, 165}: \"DAWON DNS\",\n\t[3]byte{244, 220, 218}: \"Zhuhai Jiahe Communication Technology Co., limited\",\n\t[3]byte{244, 220, 249}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 221, 158}: \"GoPro\",\n\t[3]byte{244, 222, 12}:  \"ESPOD Ltd.\",\n\t[3]byte{244, 222, 175}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 225, 30}:  \"Texas Instruments\",\n\t[3]byte{244, 225, 66}:  \"Delta Elektronika BV\",\n\t[3]byte{244, 226, 4}:   \"Traqueur\",\n\t[3]byte{244, 227, 251}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 228, 173}: \"zte corporation\",\n\t[3]byte{244, 229, 120}: \"LLC Proizvodstvennaya Kompania \\\"TransService\\\"\",\n\t[3]byte{244, 229, 242}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{244, 230, 215}: \"Solar Power Technologies, Inc.\",\n\t[3]byte{244, 233, 38}:  \"Tianjin Zanpu Technology Inc.\",\n\t[3]byte{244, 233, 212}: \"QLogic Corporation\",\n\t[3]byte{244, 234, 103}: \"Cisco Systems, Inc\",\n\t[3]byte{244, 234, 181}: \"Extreme Networks, Inc.\",\n\t[3]byte{244, 235, 56}:  \"Sagemcom Broadband SAS\",\n\t[3]byte{244, 235, 159}: \"Ellu Company 2019 SL\",\n\t[3]byte{244, 236, 56}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{244, 237, 95}:  \"SHENZHEN KTC TECHNOLOGY GROUP \",\n\t[3]byte{244, 238, 20}:  \"MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{244, 239, 158}: \"SGSG SCIENCE & TECHNOLOGY CO. LTD\",\n\t[3]byte{244, 241, 90}:  \"Apple, Inc.\",\n\t[3]byte{244, 241, 151}: \"EMTAKE Inc\",\n\t[3]byte{244, 241, 225}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{244, 242, 109}: \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{244, 243, 170}: \"JBL GmbH & Co. KG\",\n\t[3]byte{244, 245, 36}:  \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{244, 245, 165}: \"Nokia Corporation\",\n\t[3]byte{244, 245, 216}: \"Google, Inc.\",\n\t[3]byte{244, 245, 219}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{244, 245, 232}: \"Google, Inc.\",\n\t[3]byte{244, 246, 70}:  \"Dediprog Technology Co. Ltd.\",\n\t[3]byte{244, 249, 81}:  \"Apple, Inc.\",\n\t[3]byte{244, 252, 50}:  \"Texas Instruments\",\n\t[3]byte{244, 252, 177}: \"JJ Corp\",\n\t[3]byte{244, 253, 43}:  \"ZOYI Company\",\n\t[3]byte{244, 254, 251}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{248, 1, 19}:    \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{248, 2, 120}:   \"IEEE Registration Authority\",\n\t[3]byte{248, 3, 50}:    \"Khomp\",\n\t[3]byte{248, 3, 119}:   \"Apple, Inc.\",\n\t[3]byte{248, 4, 46}:    \"SAMSUNG ELECTRO-MECHANICS(THAILAND)\",\n\t[3]byte{248, 5, 28}:    \"DRS Imaging and Targeting Solutions\",\n\t[3]byte{248, 8, 79}:    \"Sagemcom Broadband SAS\",\n\t[3]byte{248, 11, 190}:  \"ARRIS Group, Inc.\",\n\t[3]byte{248, 11, 203}:  \"Cisco Systems, Inc\",\n\t[3]byte{248, 11, 208}:  \"Datang Telecom communication terminal (Tianjin) Co., Ltd.\",\n\t[3]byte{248, 12, 243}:  \"LG Electronics (Mobile Communications)\",\n\t[3]byte{248, 13, 67}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{248, 13, 96}:   \"CANON INC.\",\n\t[3]byte{248, 13, 234}:  \"ZyCast Technology Inc.\",\n\t[3]byte{248, 13, 240}:  \"zte corporation\",\n\t[3]byte{248, 13, 241}:  \"Sontex SA\",\n\t[3]byte{248, 15, 65}:   \"Wistron Infocomm (Zhongshan) Corporation\",\n\t[3]byte{248, 15, 111}:  \"Cisco Systems, Inc\",\n\t[3]byte{248, 15, 132}:  \"Natural Security SAS\",\n\t[3]byte{248, 15, 249}:  \"Google, Inc.\",\n\t[3]byte{248, 16, 55}:   \"Atopia Systems, LP\",\n\t[3]byte{248, 19, 8}:    \"Nokia\",\n\t[3]byte{248, 21, 71}:   \"Avaya Inc\",\n\t[3]byte{248, 22, 84}:   \"Intel Corporate\",\n\t[3]byte{248, 24, 151}:  \"2Wire Inc\",\n\t[3]byte{248, 26, 103}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{248, 27, 4}:    \"Zhong Shan City Richsound Electronic Industrial Ltd\",\n\t[3]byte{248, 28, 229}:  \"Telefonbau Behnke GmbH\",\n\t[3]byte{248, 29, 15}:   \"Hitron Technologies. Inc\",\n\t[3]byte{248, 29, 120}:  \"IEEE Registration Authority\",\n\t[3]byte{248, 29, 144}:  \"Solidwintech\",\n\t[3]byte{248, 29, 147}:  \"Longdhua(Beijing) Controls Technology Co.,Ltd\",\n\t[3]byte{248, 30, 111}:  \"EBG compleo GmbH\",\n\t[3]byte{248, 30, 223}:  \"Apple, Inc.\",\n\t[3]byte{248, 31, 50}:   \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{248, 32, 85}:   \"Green Information System\",\n\t[3]byte{248, 34, 133}:  \"Cypress Technology CO., LTD.\",\n\t[3]byte{248, 35, 135}:  \"Shenzhen Horn Audio Co.,Ltd.\",\n\t[3]byte{248, 35, 178}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{248, 36, 65}:   \"Yeelink\",\n\t[3]byte{248, 39, 46}:   \"Mercku\",\n\t[3]byte{248, 39, 147}:  \"Apple, Inc.\",\n\t[3]byte{248, 40, 25}:   \"Liteon Technology Corporation\",\n\t[3]byte{248, 43, 200}:  \"Jiangsu Switter Co., Ltd\",\n\t[3]byte{248, 44, 24}:   \"2Wire Inc\",\n\t[3]byte{248, 45, 124}:  \"Apple, Inc.\",\n\t[3]byte{248, 45, 192}:  \"ARRIS Group, Inc.\",\n\t[3]byte{248, 46, 63}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{248, 46, 142}:  \"Nanjing Kechen Electric Co., Ltd.\",\n\t[3]byte{248, 46, 219}:  \"RTW GmbH & Co. KG\",\n\t[3]byte{248, 47, 8}:    \"Molex CMS\",\n\t[3]byte{248, 47, 91}:   \"eGauge Systems LLC\",\n\t[3]byte{248, 47, 101}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{248, 47, 106}:  \"ITEL MOBILE LIMITED\",\n\t[3]byte{248, 47, 168}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{248, 48, 2}:    \"Texas Instruments\",\n\t[3]byte{248, 48, 148}:  \"Alcatel-Lucent Telecom Limited\",\n\t[3]byte{248, 49, 62}:   \"endeavour GmbH\",\n\t[3]byte{248, 50, 228}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{248, 51, 49}:   \"Texas Instruments\",\n\t[3]byte{248, 51, 118}:  \"Good Mind Innovation Co., Ltd.\",\n\t[3]byte{248, 52, 65}:   \"Intel Corporate\",\n\t[3]byte{248, 53, 83}:   \"Magenta Research Ltd.\",\n\t[3]byte{248, 53, 221}:  \"Gemtek Technology Co., Ltd.\",\n\t[3]byte{248, 54, 155}:  \"Texas Instruments\",\n\t[3]byte{248, 56, 128}:  \"Apple, Inc.\",\n\t[3]byte{248, 60, 191}:  \"BOTATO ELECTRONICS SDN BHD\",\n\t[3]byte{248, 61, 78}:   \"Softlink Automation System Co., Ltd\",\n\t[3]byte{248, 61, 255}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{248, 63, 81}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{248, 66, 251}:  \"Yasuda Joho Co.,ltd.\",\n\t[3]byte{248, 68, 227}:  \"Taicang T&W Electronics\",\n\t[3]byte{248, 69, 173}:  \"Konka Group Co., Ltd.\",\n\t[3]byte{248, 70, 28}:   \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{248, 70, 45}:   \"SYNTEC Incorporation\",\n\t[3]byte{248, 71, 45}:   \"X2gen Digital Corp. Ltd\",\n\t[3]byte{248, 72, 151}:  \"Hitachi, Ltd.\",\n\t[3]byte{248, 72, 253}:  \"China Mobile Group Device Co.,Ltd.\",\n\t[3]byte{248, 74, 115}:  \"EUMTECH CO., LTD\",\n\t[3]byte{248, 74, 127}:  \"Innometriks Inc\",\n\t[3]byte{248, 74, 191}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{248, 77, 51}:   \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{248, 77, 252}:  \"Hangzhou Hikvision Digital Technology Co.,Ltd.\",\n\t[3]byte{248, 78, 115}:  \"Apple, Inc.\",\n\t[3]byte{248, 79, 87}:   \"Cisco Systems, Inc\",\n\t[3]byte{248, 79, 173}:  \"Hui Zhou Gaoshengda Technology Co.,LTD\",\n\t[3]byte{248, 80, 28}:   \"Tianjin Geneuo Technology Co.,Ltd\",\n\t[3]byte{248, 80, 99}:   \"Verathon\",\n\t[3]byte{248, 81, 40}:   \"SimpliSafe\",\n\t[3]byte{248, 81, 109}:  \"Denwa Technology Corp.\",\n\t[3]byte{248, 82, 223}:  \"VNL Europe AB\",\n\t[3]byte{248, 84, 175}:  \"ECI Telecom Ltd.\",\n\t[3]byte{248, 84, 184}:  \"Amazon Technologies Inc.\",\n\t[3]byte{248, 85, 205}:  \"Visteon Corporation\",\n\t[3]byte{248, 87, 46}:   \"Core Brands, LLC\",\n\t[3]byte{248, 89, 113}:  \"Intel Corporate\",\n\t[3]byte{248, 90, 0}:    \"Sanford LP\",\n\t[3]byte{248, 91, 59}:   \"ASKEY COMPUTER CORP\",\n\t[3]byte{248, 91, 156}:  \"SB SYSTEMS Co.,Ltd\",\n\t[3]byte{248, 91, 201}:  \"M-Cube Spa\",\n\t[3]byte{248, 92, 69}:   \"IC Nexus Co. Ltd.\",\n\t[3]byte{248, 92, 77}:   \"Nokia\",\n\t[3]byte{248, 92, 125}:  \"Shenzhen Honesty Electronics Co.,Ltd.\",\n\t[3]byte{248, 94, 60}:   \"SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD\",\n\t[3]byte{248, 95, 42}:   \"Nokia Corporation\",\n\t[3]byte{248, 96, 240}:  \"Aruba, a Hewlett Packard Enterprise Company\",\n\t[3]byte{248, 98, 20}:   \"Apple, Inc.\",\n\t[3]byte{248, 98, 170}:  \"xn systems\",\n\t[3]byte{248, 99, 63}:   \"Intel Corporate\",\n\t[3]byte{248, 100, 101}: \"Anova Applied Electronics, Inc.\",\n\t[3]byte{248, 100, 184}: \"zte corporation\",\n\t[3]byte{248, 102, 1}:   \"Suzhou Chi-tek information technology Co., Ltd\",\n\t[3]byte{248, 102, 209}: \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{248, 102, 242}: \"Cisco Systems, Inc\",\n\t[3]byte{248, 105, 113}: \"Seibu Electric Co.,\",\n\t[3]byte{248, 107, 217}: \"Cisco Systems, Inc\",\n\t[3]byte{248, 108, 3}:   \"Shenzhen Teleone Technology Co., Ltd\",\n\t[3]byte{248, 108, 225}: \"Taicang T&W Electronics\",\n\t[3]byte{248, 110, 207}: \"Arcx Inc\",\n\t[3]byte{248, 110, 238}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{248, 111, 193}: \"Apple, Inc.\",\n\t[3]byte{248, 111, 222}: \"Shenzhen Goodix Technology Co.,Ltd.\",\n\t[3]byte{248, 113, 254}: \"The Goldman Sachs Group, Inc.\",\n\t[3]byte{248, 114, 234}: \"Cisco Systems, Inc\",\n\t[3]byte{248, 115, 148}: \"NETGEAR\",\n\t[3]byte{248, 115, 162}: \"Avaya Inc\",\n\t[3]byte{248, 117, 136}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{248, 117, 164}: \"LCFC(HeFei) Electronics Technology co., ltd\",\n\t[3]byte{248, 118, 155}: \"Neopis Co., Ltd.\",\n\t[3]byte{248, 119, 184}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{248, 122, 239}: \"Rosonix Technology, Inc.\",\n\t[3]byte{248, 123, 32}:  \"Cisco Systems, Inc\",\n\t[3]byte{248, 123, 98}:  \"FASTWEL INTERNATIONAL CO., LTD. Taiwan Branch\",\n\t[3]byte{248, 123, 122}: \"ARRIS Group, Inc.\",\n\t[3]byte{248, 123, 140}: \"Amped Wireless\",\n\t[3]byte{248, 128, 150}: \"Elsys Equipamentos Eletrônicos Ltda\",\n\t[3]byte{248, 129, 26}:  \"OVERKIZ\",\n\t[3]byte{248, 130, 0}:   \"CaptionCall\",\n\t[3]byte{248, 132, 121}: \"Yaojin Technology(Shenzhen)Co.,Ltd\",\n\t[3]byte{248, 132, 242}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{248, 135, 241}: \"Apple, Inc.\",\n\t[3]byte{248, 137, 60}:  \"Inventec Appliances Corp.\",\n\t[3]byte{248, 138, 60}:  \"IEEE Registration Authority\",\n\t[3]byte{248, 138, 94}:  \"Texas Instruments\",\n\t[3]byte{248, 139, 55}:  \"ARRIS Group, Inc.\",\n\t[3]byte{248, 140, 28}:  \"KAISHUN ELECTRONIC TECHNOLOGY CO., LTD. BEIJING\",\n\t[3]byte{248, 141, 239}: \"Tenebraex\",\n\t[3]byte{248, 142, 133}: \"Comtrend Corporation\",\n\t[3]byte{248, 143, 202}: \"Google, Inc.\",\n\t[3]byte{248, 144, 102}: \"Nain Inc.\",\n\t[3]byte{248, 145, 42}:  \"GLP German Light Products GmbH\",\n\t[3]byte{248, 145, 115}: \"AEDLE SAS\",\n\t[3]byte{248, 147, 243}: \"VOLANS\",\n\t[3]byte{248, 148, 194}: \"Intel Corporate\",\n\t[3]byte{248, 149, 80}:  \"Proton Products Chengdu Ltd\",\n\t[3]byte{248, 149, 199}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{248, 149, 234}: \"Apple, Inc.\",\n\t[3]byte{248, 151, 207}: \"DAESHIN-INFORMATION TECHNOLOGY CO., LTD.\",\n\t[3]byte{248, 152, 58}:  \"Leeman International (HongKong) Limited\",\n\t[3]byte{248, 152, 185}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{248, 152, 239}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{248, 153, 16}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{248, 153, 85}:  \"Fortress Technology Inc\",\n\t[3]byte{248, 154, 120}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{248, 157, 13}:  \"Control Technology Inc.\",\n\t[3]byte{248, 157, 187}: \"Tintri\",\n\t[3]byte{248, 158, 40}:  \"Cisco Meraki\",\n\t[3]byte{248, 159, 184}: \"YAZAKI Energy System Corporation\",\n\t[3]byte{248, 160, 61}:  \"Dinstar Technologies Co., Ltd.\",\n\t[3]byte{248, 160, 151}: \"ARRIS Group, Inc.\",\n\t[3]byte{248, 161, 136}: \"LED Roadway Lighting\",\n\t[3]byte{248, 162, 109}: \"CANON INC.\",\n\t[3]byte{248, 162, 180}: \"RHEWA-WAAGENFABRIK August Freudewald GmbH &amp;Co. KG\",\n\t[3]byte{248, 162, 214}: \"Liteon Technology Corporation\",\n\t[3]byte{248, 163, 79}:  \"zte corporation\",\n\t[3]byte{248, 164, 95}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{248, 165, 197}: \"Cisco Systems, Inc\",\n\t[3]byte{248, 167, 99}:  \"Zhejiang Tmall Technology Co., Ltd.\",\n\t[3]byte{248, 169, 99}:  \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{248, 169, 208}: \"LG Electronics (Mobile Communications)\",\n\t[3]byte{248, 169, 222}: \"PUISSANCE PLUS\",\n\t[3]byte{248, 170, 138}: \"Axview Technology (Shenzhen) Co.,Ltd\",\n\t[3]byte{248, 171, 5}:   \"Sagemcom Broadband SAS\",\n\t[3]byte{248, 172, 101}: \"Intel Corporate\",\n\t[3]byte{248, 172, 109}: \"Deltenna Ltd\",\n\t[3]byte{248, 173, 203}: \"HMD Global Oy\",\n\t[3]byte{248, 174, 39}:  \"John Deere Electronic Solutions\",\n\t[3]byte{248, 175, 5}:   \"Huawei Device Co., Ltd.\",\n\t[3]byte{248, 175, 219}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{248, 177, 86}:  \"Dell Inc.\",\n\t[3]byte{248, 178, 243}: \"GUANGZHOU BOSMA TECHNOLOGY CO.,LTD\",\n\t[3]byte{248, 180, 106}: \"Hewlett Packard\",\n\t[3]byte{248, 181, 104}: \"IEEE Registration Authority\",\n\t[3]byte{248, 181, 153}: \"Guangzhou CHNAVS Digital Technology Co.,Ltd\",\n\t[3]byte{248, 183, 151}: \"NEC Platforms, Ltd.\",\n\t[3]byte{248, 183, 226}: \"Cisco Systems, Inc\",\n\t[3]byte{248, 187, 191}: \"eero inc.\",\n\t[3]byte{248, 188, 14}:  \"eero inc.\",\n\t[3]byte{248, 188, 18}:  \"Dell Inc.\",\n\t[3]byte{248, 188, 65}:  \"Rosslare Enterprises Limited\",\n\t[3]byte{248, 190, 13}:  \"A2UICT Co.,Ltd.\",\n\t[3]byte{248, 191, 9}:   \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{248, 192, 1}:   \"Juniper Networks\",\n\t[3]byte{248, 192, 145}: \"Highgates Technology\",\n\t[3]byte{248, 193, 32}:  \"Xi'an Link-Science Technology Co.,Ltd\",\n\t[3]byte{248, 194, 73}:  \"Private\",\n\t[3]byte{248, 194, 136}: \"Cisco Systems, Inc\",\n\t[3]byte{248, 195, 114}: \"TSUZUKI DENKI\",\n\t[3]byte{248, 195, 151}: \"NZXT Corp. Ltd.\",\n\t[3]byte{248, 195, 158}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{248, 196, 243}: \"Shanghai Infinity Wireless Technologies Co.,Ltd.\",\n\t[3]byte{248, 198, 120}: \"Carefusion\",\n\t[3]byte{248, 201, 108}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{248, 202, 89}:  \"NetComm Wireless\",\n\t[3]byte{248, 202, 184}: \"Dell Inc.\",\n\t[3]byte{248, 204, 110}: \"DEPO Electronics Ltd\",\n\t[3]byte{248, 207, 197}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{248, 208, 39}:  \"Seiko Epson Corporation\",\n\t[3]byte{248, 208, 172}: \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{248, 208, 189}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{248, 209, 17}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{248, 211, 169}: \"AXAN Networks\",\n\t[3]byte{248, 212, 98}:  \"Pumatronix Equipamentos Eletronicos Ltda.\",\n\t[3]byte{248, 212, 120}: \"Flextronics Tech.(Ind) Pvt Ltd\",\n\t[3]byte{248, 215, 86}:  \"Simm Tronic Limited \",\n\t[3]byte{248, 215, 191}: \"REV Ritter GmbH\",\n\t[3]byte{248, 217, 184}: \"Open Mesh, Inc.\",\n\t[3]byte{248, 218, 12}:  \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{248, 218, 223}: \"EcoTech, Inc.\",\n\t[3]byte{248, 218, 226}: \"NDC Technologies\",\n\t[3]byte{248, 218, 244}: \"Taishan Online Technology Co., Ltd.\",\n\t[3]byte{248, 219, 76}:  \"PNY Technologies, INC.\",\n\t[3]byte{248, 219, 127}: \"HTC Corporation\",\n\t[3]byte{248, 219, 136}: \"Dell Inc.\",\n\t[3]byte{248, 220, 122}: \"Variscite LTD\",\n\t[3]byte{248, 223, 21}:  \"Sunitec Enterprise Co.,Ltd\",\n\t[3]byte{248, 223, 168}: \"zte corporation\",\n\t[3]byte{248, 223, 225}: \"MyLight Systems\",\n\t[3]byte{248, 224, 121}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{248, 228, 78}:  \"MCOT INC.\",\n\t[3]byte{248, 228, 227}: \"Intel Corporate\",\n\t[3]byte{248, 228, 251}: \"Actiontec Electronics, Inc\",\n\t[3]byte{248, 229, 207}: \"CGI IT UK LIMITED\",\n\t[3]byte{248, 230, 26}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{248, 231, 30}:  \"Ruckus Wireless\",\n\t[3]byte{248, 231, 160}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{248, 231, 181}: \"µTech Tecnologia LTDA\",\n\t[3]byte{248, 232, 17}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{248, 232, 119}: \"Harman/Becker Automotive Systems GmbH\",\n\t[3]byte{248, 233, 3}:   \"D-Link International\",\n\t[3]byte{248, 233, 78}:  \"Apple, Inc.\",\n\t[3]byte{248, 233, 104}: \"Egker Kft.\",\n\t[3]byte{248, 234, 10}:  \"Dipl.-Math. Michael Rauch\",\n\t[3]byte{248, 237, 165}: \"ARRIS Group, Inc.\",\n\t[3]byte{248, 240, 5}:   \"Newport Media Inc.\",\n\t[3]byte{248, 240, 20}:  \"RackWare Inc.\",\n\t[3]byte{248, 240, 130}: \"NAG LLC\",\n\t[3]byte{248, 241, 182}: \"Motorola Mobility LLC, a Lenovo Company\",\n\t[3]byte{248, 241, 230}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{248, 242, 30}:  \"Intel Corporate\",\n\t[3]byte{248, 242, 90}:  \"G-Lab GmbH\",\n\t[3]byte{248, 244, 100}: \"Rawe Electonic GmbH\",\n\t[3]byte{248, 245, 50}:  \"ARRIS Group, Inc.\",\n\t[3]byte{248, 247, 211}: \"International Communications Corporation\",\n\t[3]byte{248, 247, 255}: \"SYN-TECH SYSTEMS INC\",\n\t[3]byte{248, 251, 47}:  \"Santur Corporation\",\n\t[3]byte{248, 254, 92}:  \"Reciprocal Labs Corp\",\n\t[3]byte{248, 254, 168}: \"Technico Japan Corporation\",\n\t[3]byte{248, 255, 11}:  \"Electronic Technology Inc.\",\n\t[3]byte{248, 255, 95}:  \"Shenzhen Communication Technology Co.,Ltd\",\n\t[3]byte{248, 255, 194}: \"Apple, Inc.\",\n\t[3]byte{252, 0, 18}:    \"Toshiba Samsung Storage Technolgoy Korea Corporation \",\n\t[3]byte{252, 1, 124}:   \"Hon Hai Precision Ind. Co.,Ltd.\",\n\t[3]byte{252, 1, 158}:   \"VIEVU\",\n\t[3]byte{252, 1, 205}:   \"FUNDACION TEKNIKER\",\n\t[3]byte{252, 3, 159}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{252, 6, 71}:    \"Cortland Research, LLC\",\n\t[3]byte{252, 6, 237}:   \"M2Motive Technology Inc.\",\n\t[3]byte{252, 7, 160}:   \"LRE Medical GmbH\",\n\t[3]byte{252, 8, 74}:    \"FUJITSU LIMITED\",\n\t[3]byte{252, 8, 119}:   \"Prentke Romich Company\",\n\t[3]byte{252, 9, 216}:   \"ACTEON Group\",\n\t[3]byte{252, 9, 246}:   \"GUANGDONG TONZE ELECTRIC CO.,LTD\",\n\t[3]byte{252, 10, 129}:  \"Extreme Networks, Inc.\",\n\t[3]byte{252, 15, 75}:   \"Texas Instruments\",\n\t[3]byte{252, 15, 230}:  \"Sony Interactive Entertainment Inc.\",\n\t[3]byte{252, 16, 189}:  \"Control Sistematizado S.A.\",\n\t[3]byte{252, 16, 198}:  \"Taicang T&W Electronics\",\n\t[3]byte{252, 17, 134}:  \"Logic3 plc\",\n\t[3]byte{252, 19, 73}:   \"Global Apps Corp.\",\n\t[3]byte{252, 20, 153}:  \"Aimore Acoustics Incorporation\",\n\t[3]byte{252, 21, 180}:  \"Hewlett Packard\",\n\t[3]byte{252, 22, 7}:    \"Taian Technology(Wuxi) Co.,Ltd.\",\n\t[3]byte{252, 23, 148}:  \"InterCreative Co., Ltd\",\n\t[3]byte{252, 24, 60}:   \"Apple, Inc.\",\n\t[3]byte{252, 25, 16}:   \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{252, 25, 153}:  \"Xiaomi Communications Co Ltd\",\n\t[3]byte{252, 25, 208}:  \"Cloud Vision Networks Technology Co.,Ltd.\",\n\t[3]byte{252, 26, 17}:   \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{252, 27, 209}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{252, 27, 255}:  \"V-ZUG AG\",\n\t[3]byte{252, 28, 161}:  \"Nokia\",\n\t[3]byte{252, 29, 67}:   \"Apple, Inc.\",\n\t[3]byte{252, 29, 89}:   \"I Smart Cities HK Ltd\",\n\t[3]byte{252, 29, 132}:  \"Autobase\",\n\t[3]byte{252, 30, 22}:   \"IPEVO corp\",\n\t[3]byte{252, 31, 25}:   \"SAMSUNG ELECTRO MECHANICS CO., LTD.\",\n\t[3]byte{252, 31, 192}:  \"EURECAM\",\n\t[3]byte{252, 34, 156}:  \"Han Kyung I Net Co.,Ltd.\",\n\t[3]byte{252, 35, 37}:   \"EosTek (Shenzhen) Co., Ltd.\",\n\t[3]byte{252, 37, 63}:   \"Apple, Inc.\",\n\t[3]byte{252, 39, 162}:  \"TRANS ELECTRIC CO., LTD.\",\n\t[3]byte{252, 41, 243}:  \"McPay Co.,LTD.\",\n\t[3]byte{252, 42, 84}:   \"Connected Data, Inc.\",\n\t[3]byte{252, 42, 156}:  \"Apple, Inc.\",\n\t[3]byte{252, 43, 178}:  \"Actiontec Electronics, Inc\",\n\t[3]byte{252, 45, 94}:   \"zte corporation\",\n\t[3]byte{252, 46, 45}:   \"Lorom Industrial Co.LTD.\",\n\t[3]byte{252, 47, 64}:   \"Calxeda, Inc.\",\n\t[3]byte{252, 47, 107}:  \"Everspin Technologies, Inc.\",\n\t[3]byte{252, 47, 170}:  \"Nokia\",\n\t[3]byte{252, 47, 239}:  \"UTT Technologies Co., Ltd.\",\n\t[3]byte{252, 50, 136}:  \"CELOT Wireless Co., Ltd\",\n\t[3]byte{252, 51, 66}:   \"Juniper Networks\",\n\t[3]byte{252, 51, 95}:   \"Polyera\",\n\t[3]byte{252, 53, 152}:  \"Favite Inc.\",\n\t[3]byte{252, 53, 230}:  \"Visteon corp\",\n\t[3]byte{252, 55, 43}:   \"SICHUAN TIANYI COMHEART TELECOMCO.,LTD\",\n\t[3]byte{252, 57, 100}:  \"ITEL MOBILE LIMITED\",\n\t[3]byte{252, 60, 233}:  \"Tsingtong Technologies Co, Ltd.\",\n\t[3]byte{252, 61, 147}:  \"LONGCHEER TELECOMMUNICATION LIMITED\",\n\t[3]byte{252, 61, 165}:  \"Arcadyan Corporation\",\n\t[3]byte{252, 63, 124}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{252, 63, 171}:  \"Henan Lanxin Technology Co., Ltd\",\n\t[3]byte{252, 63, 219}:  \"Hewlett Packard\",\n\t[3]byte{252, 66, 3}:    \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{252, 68, 99}:   \"Universal Audio, Inc\",\n\t[3]byte{252, 68, 130}:  \"Intel Corporate\",\n\t[3]byte{252, 68, 153}:  \"Swarco LEA d.o.o.\",\n\t[3]byte{252, 69, 95}:   \"JIANGXI SHANSHUI OPTOELECTRONIC TECHNOLOGY CO.,LTD\",\n\t[3]byte{252, 69, 150}:  \"COMPAL INFORMATION (KUNSHAN) CO., LTD. \",\n\t[3]byte{252, 72, 239}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{252, 73, 45}:   \"Amazon Technologies Inc.\",\n\t[3]byte{252, 74, 233}:  \"Castlenet Technology Inc.\",\n\t[3]byte{252, 75, 28}:   \"INTERSENSOR S.R.L.\",\n\t[3]byte{252, 75, 188}:  \"Sunplus Technology Co., Ltd.\",\n\t[3]byte{252, 77, 140}:  \"SHENZHEN PANTE ELECTRONICS TECHNOLOGY CO., LTD\",\n\t[3]byte{252, 77, 212}:  \"Universal Global Scientific Industrial Co., Ltd.\",\n\t[3]byte{252, 80, 144}:  \"SIMEX Sp. z o.o.\",\n\t[3]byte{252, 81, 164}:  \"ARRIS Group, Inc.\",\n\t[3]byte{252, 82, 141}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{252, 82, 206}:  \"Control iD\",\n\t[3]byte{252, 83, 158}:  \"Shanghai Wind Technologies Co.,Ltd\",\n\t[3]byte{252, 85, 220}:  \"Baltic Latvian Universal Electronics LLC\",\n\t[3]byte{252, 88, 154}:  \"Cisco Systems, Inc\",\n\t[3]byte{252, 88, 250}:  \"Shen Zhen Shi Xin Zhong Xin Technology Co.,Ltd.\",\n\t[3]byte{252, 90, 29}:   \"Hitron Technologies. Inc\",\n\t[3]byte{252, 91, 36}:   \"Weibel Scientific A/S\",\n\t[3]byte{252, 91, 38}:   \"MikroBits\",\n\t[3]byte{252, 91, 57}:   \"Cisco Systems, Inc\",\n\t[3]byte{252, 96, 24}:   \"Zhejiang Kangtai Electric Co., Ltd.\",\n\t[3]byte{252, 96, 155}:  \"New H3C Technologies Co., Ltd\",\n\t[3]byte{252, 97, 152}:  \"NEC Personal Products, Ltd\",\n\t[3]byte{252, 97, 233}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{252, 98, 110}:  \"Beijing MDC Telecom\",\n\t[3]byte{252, 98, 185}:  \"ALPS ELECTRIC CO., LTD.\",\n\t[3]byte{252, 100, 58}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{252, 100, 186}: \"Xiaomi Communications Co Ltd\",\n\t[3]byte{252, 101, 222}: \"Amazon Technologies Inc.\",\n\t[3]byte{252, 104, 62}:  \"Directed Perception, Inc\",\n\t[3]byte{252, 105, 71}:  \"Texas Instruments\",\n\t[3]byte{252, 107, 240}: \"TOPWELL INTERNATIONAL HOLDINDS LIMITED\",\n\t[3]byte{252, 108, 49}:  \"LXinstruments GmbH\",\n\t[3]byte{252, 109, 192}: \"BME CORPORATION\",\n\t[3]byte{252, 111, 183}: \"ARRIS Group, Inc.\",\n\t[3]byte{252, 113, 250}: \"Trane Technologies\",\n\t[3]byte{252, 115, 251}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{252, 117, 22}:  \"D-Link International\",\n\t[3]byte{252, 117, 230}: \"Handreamnet\",\n\t[3]byte{252, 119, 116}: \"Intel Corporate\",\n\t[3]byte{252, 121, 11}:  \"Hitachi High Technologies America, Inc.\",\n\t[3]byte{252, 124, 2}:   \"Phicomm (Shanghai) Co., Ltd.\",\n\t[3]byte{252, 124, 231}: \"FCI USA LLC\",\n\t[3]byte{252, 125, 108}: \"HYESUNG TECHWIN Co., Ltd\",\n\t[3]byte{252, 127, 86}:  \"CoSyst Control Systems GmbH\",\n\t[3]byte{252, 131, 41}:  \"Trei technics\",\n\t[3]byte{252, 131, 153}: \"Avaya Inc\",\n\t[3]byte{252, 131, 198}: \"N-Radio Technologies Co., Ltd.\",\n\t[3]byte{252, 133, 150}: \"Axonne Inc.\",\n\t[3]byte{252, 134, 42}:  \"Huawei Device Co., Ltd.\",\n\t[3]byte{252, 135, 67}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{252, 139, 151}: \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{252, 142, 91}:  \"China Mobile Iot Limited company\",\n\t[3]byte{252, 142, 110}: \"StreamCCTV, LLC\",\n\t[3]byte{252, 142, 126}: \"ARRIS Group, Inc.\",\n\t[3]byte{252, 143, 125}: \"SHENZHEN GONGJIN ELECTRONICS CO.,LT\",\n\t[3]byte{252, 143, 144}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{252, 143, 196}: \"Intelligent Technology Inc.\",\n\t[3]byte{252, 144, 250}: \"Independent Technologies\",\n\t[3]byte{252, 145, 20}:  \"Technicolor CH USA Inc.\",\n\t[3]byte{252, 146, 59}:  \"Nokia Corporation\",\n\t[3]byte{252, 148, 53}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{252, 148, 108}: \"UBIVELOX\",\n\t[3]byte{252, 148, 206}: \"zte corporation\",\n\t[3]byte{252, 148, 227}: \"Technicolor CH USA Inc.\",\n\t[3]byte{252, 149, 106}: \"OCTAGON SYSTEMS CORP.\",\n\t[3]byte{252, 153, 71}:  \"Cisco Systems, Inc\",\n\t[3]byte{252, 154, 250}: \"Motus Global Inc.\",\n\t[3]byte{252, 155, 198}: \"Sumavision Technologies Co.,Ltd\",\n\t[3]byte{252, 157, 216}: \"Beijing TongTongYiLian Science and Technology Ltd.\",\n\t[3]byte{252, 159, 174}: \"Fidus Systems Inc\",\n\t[3]byte{252, 159, 225}: \"CONWIN.Tech. Ltd\",\n\t[3]byte{252, 161, 62}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{252, 161, 131}: \"Amazon Technologies Inc.\",\n\t[3]byte{252, 162, 42}:  \"PT. Callysta Multi Engineering\",\n\t[3]byte{252, 163, 134}: \"SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\",\n\t[3]byte{252, 164, 122}: \"IEEE Registration Authority\",\n\t[3]byte{252, 165, 208}: \"GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\",\n\t[3]byte{252, 166, 33}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{252, 166, 103}: \"Amazon Technologies Inc.\",\n\t[3]byte{252, 166, 205}: \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{252, 168, 65}:  \"Avaya Inc\",\n\t[3]byte{252, 168, 154}: \"Sunitec Enterprise Co.,Ltd\",\n\t[3]byte{252, 169, 176}: \"MIARTECH (SHANGHAI),INC.\",\n\t[3]byte{252, 170, 20}:  \"GIGA-BYTE TECHNOLOGY CO.,LTD.\",\n\t[3]byte{252, 170, 182}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{252, 171, 144}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{252, 173, 15}:  \"QTS NETWORKS\",\n\t[3]byte{252, 174, 52}:  \"ARRIS Group, Inc.\",\n\t[3]byte{252, 175, 106}: \"Qulsar Inc\",\n\t[3]byte{252, 175, 172}: \"Socionext Inc.\",\n\t[3]byte{252, 176, 196}: \"Shanghai DareGlobal Technologies Co.,Ltd\",\n\t[3]byte{252, 177, 13}:  \"Shenzhen Tian Kun Technology Co.,LTD.\",\n\t[3]byte{252, 179, 188}: \"Intel Corporate\",\n\t[3]byte{252, 180, 230}: \"ASKEY COMPUTER CORP\",\n\t[3]byte{252, 181, 138}: \"Wapice Ltd.\",\n\t[3]byte{252, 182, 98}:  \"IC Holdings LLC\",\n\t[3]byte{252, 182, 152}: \"Cambridge Industries(Group) Co.,Ltd.\",\n\t[3]byte{252, 182, 216}: \"Apple, Inc.\",\n\t[3]byte{252, 183, 240}: \"Idaho National Laboratory\",\n\t[3]byte{252, 187, 161}: \"Shenzhen Minicreate Technology Co.,Ltd\",\n\t[3]byte{252, 188, 14}:  \"Zhejiang Cainiao Supply Chain Management Co., Ltd\",\n\t[3]byte{252, 188, 156}: \"Vimar Spa\",\n\t[3]byte{252, 188, 209}: \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{252, 189, 103}: \"Arista Networks\",\n\t[3]byte{252, 190, 123}: \"vivo Mobile Communication Co., Ltd.\",\n\t[3]byte{252, 194, 51}:  \"ASUSTek COMPUTER INC.\",\n\t[3]byte{252, 194, 61}:  \"Atmel Corporation\",\n\t[3]byte{252, 194, 222}: \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{252, 199, 52}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{252, 200, 151}: \"zte corporation\",\n\t[3]byte{252, 202, 196}: \"LifeHealth, LLC\",\n\t[3]byte{252, 204, 228}: \"Ascon Ltd.\",\n\t[3]byte{252, 207, 67}:  \"HUIZHOU CITY HUIYANG DISTRICT MEISIQI INDUSTRY DEVELOPMENT CO,.LTD\",\n\t[3]byte{252, 207, 98}:  \"IBM Corp\",\n\t[3]byte{252, 210, 182}: \"IEEE Registration Authority\",\n\t[3]byte{252, 212, 242}: \"The Coca Cola Company\",\n\t[3]byte{252, 212, 246}: \"Messana Air.Ray Conditioning s.r.l.\",\n\t[3]byte{252, 213, 217}: \"Shenzhen SDMC Technology Co., Ltd.\",\n\t[3]byte{252, 214, 189}: \"Robert Bosch GmbH\",\n\t[3]byte{252, 215, 51}:  \"TP-LINK TECHNOLOGIES CO.,LTD.\",\n\t[3]byte{252, 216, 23}:  \"Beijing Hesun Technologies Co.Ltd.\",\n\t[3]byte{252, 216, 72}:  \"Apple, Inc.\",\n\t[3]byte{252, 219, 33}:  \"SAMSARA NETWORKS INC\",\n\t[3]byte{252, 219, 150}: \"ENERVALLEY CO., LTD\",\n\t[3]byte{252, 219, 179}: \"Murata Manufacturing Co., Ltd.\",\n\t[3]byte{252, 220, 74}:  \"G-Wearables Corp.\",\n\t[3]byte{252, 221, 85}:  \"Shenzhen WeWins wireless Co.,Ltd\",\n\t[3]byte{252, 222, 144}: \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{252, 225, 79}:  \"BRK Brands, Inc.\",\n\t[3]byte{252, 225, 134}: \"A3M Co., LTD\",\n\t[3]byte{252, 225, 146}: \"Sichuan Jinwangtong Electronic Science&Technology Co,.Ltd\",\n\t[3]byte{252, 225, 217}: \"Stable Imaging Solutions LLC\",\n\t[3]byte{252, 225, 251}: \"Array Networks\",\n\t[3]byte{252, 226, 63}:  \"CLAY PAKY SPA\",\n\t[3]byte{252, 227, 60}:  \"HUAWEI TECHNOLOGIES CO.,LTD\",\n\t[3]byte{252, 229, 87}:  \"Nokia Corporation\",\n\t[3]byte{252, 230, 106}: \"Industrial Software Co\",\n\t[3]byte{252, 232, 146}: \"Hangzhou Lancable Technology Co.,Ltd\",\n\t[3]byte{252, 233, 152}: \"Apple, Inc.\",\n\t[3]byte{252, 234, 80}:  \"Integrated Device Technology (Malaysia) Sdn. Bhd.\",\n\t[3]byte{252, 236, 218}: \"Ubiquiti Networks Inc.\",\n\t[3]byte{252, 237, 185}: \"Arrayent\",\n\t[3]byte{252, 238, 230}: \"FORMIKE ELECTRONIC CO., LTD\",\n\t[3]byte{252, 241, 54}:  \"Samsung Electronics Co.,Ltd\",\n\t[3]byte{252, 241, 82}:  \"Sony Corporation\",\n\t[3]byte{252, 241, 205}: \"OPTEX-FA CO.,LTD.\",\n\t[3]byte{252, 242, 159}: \"China Mobile Iot Limited company\",\n\t[3]byte{252, 245, 40}:  \"Zyxel Communications Corporation\",\n\t[3]byte{252, 245, 196}: \"Espressif Inc.\",\n\t[3]byte{252, 246, 71}:  \"Fiberhome Telecommunication Technologies Co.,LTD\",\n\t[3]byte{252, 248, 174}: \"Intel Corporate\",\n\t[3]byte{252, 248, 183}: \"TRONTEQ Electronic\",\n\t[3]byte{252, 250, 247}: \"Shanghai Baud Data Communication Co.,Ltd.\",\n\t[3]byte{252, 251, 251}: \"Cisco Systems, Inc\",\n\t[3]byte{252, 252, 72}:  \"Apple, Inc.\",\n\t[3]byte{252, 254, 119}: \"Hitachi Reftechno, Inc.\",\n\t[3]byte{252, 254, 194}: \"Invensys Controls UK Limited\",\n\t[3]byte{252, 255, 170}: \"IEEE Registration Authority\",\n}\n"
  },
  {
    "path": "packet.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage gopacket\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"reflect\"\n\t\"runtime/debug\"\n\t\"strings\"\n\t\"syscall\"\n\t\"time\"\n)\n\n// CaptureInfo provides standardized information about a packet captured off\n// the wire or read from a file.\ntype CaptureInfo struct {\n\t// Timestamp is the time the packet was captured, if that is known.\n\tTimestamp time.Time\n\t// CaptureLength is the total number of bytes read off of the wire.\n\tCaptureLength int\n\t// Length is the size of the original packet.  Should always be >=\n\t// CaptureLength.\n\tLength int\n\t// InterfaceIndex\n\tInterfaceIndex int\n\t// The packet source can place ancillary data of various types here.\n\t// For example, the afpacket source can report the VLAN of captured\n\t// packets this way.\n\tAncillaryData []interface{}\n}\n\n// PacketMetadata contains metadata for a packet.\ntype PacketMetadata struct {\n\tCaptureInfo\n\t// Truncated is true if packet decoding logic detects that there are fewer\n\t// bytes in the packet than are detailed in various headers (for example, if\n\t// the number of bytes in the IPv4 contents/payload is less than IPv4.Length).\n\t// This is also set automatically for packets captured off the wire if\n\t// CaptureInfo.CaptureLength < CaptureInfo.Length.\n\tTruncated bool\n}\n\n// Packet is the primary object used by gopacket.  Packets are created by a\n// Decoder's Decode call.  A packet is made up of a set of Data, which\n// is broken into a number of Layers as it is decoded.\ntype Packet interface {\n\t//// Functions for outputting the packet as a human-readable string:\n\t//// ------------------------------------------------------------------\n\t// String returns a human-readable string representation of the packet.\n\t// It uses LayerString on each layer to output the layer.\n\tString() string\n\t// Dump returns a verbose human-readable string representation of the packet,\n\t// including a hex dump of all layers.  It uses LayerDump on each layer to\n\t// output the layer.\n\tDump() string\n\n\t//// Functions for accessing arbitrary packet layers:\n\t//// ------------------------------------------------------------------\n\t// Layers returns all layers in this packet, computing them as necessary\n\tLayers() []Layer\n\t// Layer returns the first layer in this packet of the given type, or nil\n\tLayer(LayerType) Layer\n\t// LayerClass returns the first layer in this packet of the given class,\n\t// or nil.\n\tLayerClass(LayerClass) Layer\n\n\t//// Functions for accessing specific types of packet layers.  These functions\n\t//// return the first layer of each type found within the packet.\n\t//// ------------------------------------------------------------------\n\t// LinkLayer returns the first link layer in the packet\n\tLinkLayer() LinkLayer\n\t// NetworkLayer returns the first network layer in the packet\n\tNetworkLayer() NetworkLayer\n\t// TransportLayer returns the first transport layer in the packet\n\tTransportLayer() TransportLayer\n\t// ApplicationLayer returns the first application layer in the packet\n\tApplicationLayer() ApplicationLayer\n\t// ErrorLayer is particularly useful, since it returns nil if the packet\n\t// was fully decoded successfully, and non-nil if an error was encountered\n\t// in decoding and the packet was only partially decoded.  Thus, its output\n\t// can be used to determine if the entire packet was able to be decoded.\n\tErrorLayer() ErrorLayer\n\n\t//// Functions for accessing data specific to the packet:\n\t//// ------------------------------------------------------------------\n\t// Data returns the set of bytes that make up this entire packet.\n\tData() []byte\n\t// Metadata returns packet metadata associated with this packet.\n\tMetadata() *PacketMetadata\n}\n\n// packet contains all the information we need to fulfill the Packet interface,\n// and its two \"subclasses\" (yes, no such thing in Go, bear with me),\n// eagerPacket and lazyPacket, provide eager and lazy decoding logic around the\n// various functions needed to access this information.\ntype packet struct {\n\t// data contains the entire packet data for a packet\n\tdata []byte\n\t// initialLayers is space for an initial set of layers already created inside\n\t// the packet.\n\tinitialLayers [6]Layer\n\t// layers contains each layer we've already decoded\n\tlayers []Layer\n\t// last is the last layer added to the packet\n\tlast Layer\n\t// metadata is the PacketMetadata for this packet\n\tmetadata PacketMetadata\n\n\tdecodeOptions DecodeOptions\n\n\t// Pointers to the various important layers\n\tlink        LinkLayer\n\tnetwork     NetworkLayer\n\ttransport   TransportLayer\n\tapplication ApplicationLayer\n\tfailure     ErrorLayer\n}\n\nfunc (p *packet) SetTruncated() {\n\tp.metadata.Truncated = true\n}\n\nfunc (p *packet) SetLinkLayer(l LinkLayer) {\n\tif p.link == nil {\n\t\tp.link = l\n\t}\n}\n\nfunc (p *packet) SetNetworkLayer(l NetworkLayer) {\n\tif p.network == nil {\n\t\tp.network = l\n\t}\n}\n\nfunc (p *packet) SetTransportLayer(l TransportLayer) {\n\tif p.transport == nil {\n\t\tp.transport = l\n\t}\n}\n\nfunc (p *packet) SetApplicationLayer(l ApplicationLayer) {\n\tif p.application == nil {\n\t\tp.application = l\n\t}\n}\n\nfunc (p *packet) SetErrorLayer(l ErrorLayer) {\n\tif p.failure == nil {\n\t\tp.failure = l\n\t}\n}\n\nfunc (p *packet) AddLayer(l Layer) {\n\tp.layers = append(p.layers, l)\n\tp.last = l\n}\n\nfunc (p *packet) DumpPacketData() {\n\tfmt.Fprint(os.Stderr, p.packetDump())\n\tos.Stderr.Sync()\n}\n\nfunc (p *packet) Metadata() *PacketMetadata {\n\treturn &p.metadata\n}\n\nfunc (p *packet) Data() []byte {\n\treturn p.data\n}\n\nfunc (p *packet) DecodeOptions() *DecodeOptions {\n\treturn &p.decodeOptions\n}\n\nfunc (p *packet) addFinalDecodeError(err error, stack []byte) {\n\tfail := &DecodeFailure{err: err, stack: stack}\n\tif p.last == nil {\n\t\tfail.data = p.data\n\t} else {\n\t\tfail.data = p.last.LayerPayload()\n\t}\n\tp.AddLayer(fail)\n\tp.SetErrorLayer(fail)\n}\n\nfunc (p *packet) recoverDecodeError() {\n\tif !p.decodeOptions.SkipDecodeRecovery {\n\t\tif r := recover(); r != nil {\n\t\t\tp.addFinalDecodeError(fmt.Errorf(\"%v\", r), debug.Stack())\n\t\t}\n\t}\n}\n\n// LayerString outputs an individual layer as a string.  The layer is output\n// in a single line, with no trailing newline.  This function is specifically\n// designed to do the right thing for most layers... it follows the following\n// rules:\n//  * If the Layer has a String function, just output that.\n//  * Otherwise, output all exported fields in the layer, recursing into\n//    exported slices and structs.\n// NOTE:  This is NOT THE SAME AS fmt's \"%#v\".  %#v will output both exported\n// and unexported fields... many times packet layers contain unexported stuff\n// that would just mess up the output of the layer, see for example the\n// Payload layer and it's internal 'data' field, which contains a large byte\n// array that would really mess up formatting.\nfunc LayerString(l Layer) string {\n\treturn fmt.Sprintf(\"%v\\t%s\", l.LayerType(), layerString(reflect.ValueOf(l), false, false))\n}\n\n// Dumper dumps verbose information on a value.  If a layer type implements\n// Dumper, then its LayerDump() string will include the results in its output.\ntype Dumper interface {\n\tDump() string\n}\n\n// LayerDump outputs a very verbose string representation of a layer.  Its\n// output is a concatenation of LayerString(l) and hex.Dump(l.LayerContents()).\n// It contains newlines and ends with a newline.\nfunc LayerDump(l Layer) string {\n\tvar b bytes.Buffer\n\tb.WriteString(LayerString(l))\n\tb.WriteByte('\\n')\n\tif d, ok := l.(Dumper); ok {\n\t\tdump := d.Dump()\n\t\tif dump != \"\" {\n\t\t\tb.WriteString(dump)\n\t\t\tif dump[len(dump)-1] != '\\n' {\n\t\t\t\tb.WriteByte('\\n')\n\t\t\t}\n\t\t}\n\t}\n\tb.WriteString(hex.Dump(l.LayerContents()))\n\treturn b.String()\n}\n\n// layerString outputs, recursively, a layer in a \"smart\" way.  See docs for\n// LayerString for more details.\n//\n// Params:\n//   i - value to write out\n//   anonymous:  if we're currently recursing an anonymous member of a struct\n//   writeSpace:  if we've already written a value in a struct, and need to\n//     write a space before writing more.  This happens when we write various\n//     anonymous values, and need to keep writing more.\nfunc layerString(v reflect.Value, anonymous bool, writeSpace bool) string {\n\t// Let String() functions take precedence.\n\tif v.CanInterface() {\n\t\tif s, ok := v.Interface().(fmt.Stringer); ok {\n\t\t\treturn s.String()\n\t\t}\n\t}\n\t// Reflect, and spit out all the exported fields as key=value.\n\tswitch v.Type().Kind() {\n\tcase reflect.Interface, reflect.Ptr:\n\t\tif v.IsNil() {\n\t\t\treturn \"nil\"\n\t\t}\n\t\tr := v.Elem()\n\t\treturn layerString(r, anonymous, writeSpace)\n\tcase reflect.Struct:\n\t\tvar b bytes.Buffer\n\t\ttyp := v.Type()\n\t\tif !anonymous {\n\t\t\tb.WriteByte('{')\n\t\t}\n\t\tfor i := 0; i < v.NumField(); i++ {\n\t\t\t// Check if this is upper-case.\n\t\t\tftype := typ.Field(i)\n\t\t\tf := v.Field(i)\n\t\t\tif ftype.Anonymous {\n\t\t\t\tanonStr := layerString(f, true, writeSpace)\n\t\t\t\twriteSpace = writeSpace || anonStr != \"\"\n\t\t\t\tb.WriteString(anonStr)\n\t\t\t} else if ftype.PkgPath == \"\" { // exported\n\t\t\t\tif writeSpace {\n\t\t\t\t\tb.WriteByte(' ')\n\t\t\t\t}\n\t\t\t\twriteSpace = true\n\t\t\t\tfmt.Fprintf(&b, \"%s=%s\", typ.Field(i).Name, layerString(f, false, writeSpace))\n\t\t\t}\n\t\t}\n\t\tif !anonymous {\n\t\t\tb.WriteByte('}')\n\t\t}\n\t\treturn b.String()\n\tcase reflect.Slice:\n\t\tvar b bytes.Buffer\n\t\tb.WriteByte('[')\n\t\tif v.Len() > 4 {\n\t\t\tfmt.Fprintf(&b, \"..%d..\", v.Len())\n\t\t} else {\n\t\t\tfor j := 0; j < v.Len(); j++ {\n\t\t\t\tif j != 0 {\n\t\t\t\t\tb.WriteString(\", \")\n\t\t\t\t}\n\t\t\t\tb.WriteString(layerString(v.Index(j), false, false))\n\t\t\t}\n\t\t}\n\t\tb.WriteByte(']')\n\t\treturn b.String()\n\t}\n\treturn fmt.Sprintf(\"%v\", v.Interface())\n}\n\nconst (\n\tlongBytesLength = 128\n)\n\n// LongBytesGoString returns a string representation of the byte slice shortened\n// using the format '<type>{<truncated slice> ... (<n> bytes)}' if it\n// exceeds a predetermined length. Can be used to avoid filling the display with\n// very long byte strings.\nfunc LongBytesGoString(buf []byte) string {\n\tif len(buf) < longBytesLength {\n\t\treturn fmt.Sprintf(\"%#v\", buf)\n\t}\n\ts := fmt.Sprintf(\"%#v\", buf[:longBytesLength-1])\n\ts = strings.TrimSuffix(s, \"}\")\n\treturn fmt.Sprintf(\"%s ... (%d bytes)}\", s, len(buf))\n}\n\nfunc baseLayerString(value reflect.Value) string {\n\tt := value.Type()\n\tcontent := value.Field(0)\n\tc := make([]byte, content.Len())\n\tfor i := range c {\n\t\tc[i] = byte(content.Index(i).Uint())\n\t}\n\tpayload := value.Field(1)\n\tp := make([]byte, payload.Len())\n\tfor i := range p {\n\t\tp[i] = byte(payload.Index(i).Uint())\n\t}\n\treturn fmt.Sprintf(\"%s{Contents:%s, Payload:%s}\", t.String(),\n\t\tLongBytesGoString(c),\n\t\tLongBytesGoString(p))\n}\n\nfunc layerGoString(i interface{}, b *bytes.Buffer) {\n\tif s, ok := i.(fmt.GoStringer); ok {\n\t\tb.WriteString(s.GoString())\n\t\treturn\n\t}\n\n\tvar v reflect.Value\n\tvar ok bool\n\tif v, ok = i.(reflect.Value); !ok {\n\t\tv = reflect.ValueOf(i)\n\t}\n\tswitch v.Kind() {\n\tcase reflect.Ptr, reflect.Interface:\n\t\tif v.Kind() == reflect.Ptr {\n\t\t\tb.WriteByte('&')\n\t\t}\n\t\tlayerGoString(v.Elem().Interface(), b)\n\tcase reflect.Struct:\n\t\tt := v.Type()\n\t\tb.WriteString(t.String())\n\t\tb.WriteByte('{')\n\t\tfor i := 0; i < v.NumField(); i++ {\n\t\t\tif i > 0 {\n\t\t\t\tb.WriteString(\", \")\n\t\t\t}\n\t\t\tif t.Field(i).Name == \"BaseLayer\" {\n\t\t\t\tfmt.Fprintf(b, \"BaseLayer:%s\", baseLayerString(v.Field(i)))\n\t\t\t} else if v.Field(i).Kind() == reflect.Struct {\n\t\t\t\tfmt.Fprintf(b, \"%s:\", t.Field(i).Name)\n\t\t\t\tlayerGoString(v.Field(i), b)\n\t\t\t} else if v.Field(i).Kind() == reflect.Ptr {\n\t\t\t\tb.WriteByte('&')\n\t\t\t\tlayerGoString(v.Field(i), b)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(b, \"%s:%#v\", t.Field(i).Name, v.Field(i))\n\t\t\t}\n\t\t}\n\t\tb.WriteByte('}')\n\tdefault:\n\t\tfmt.Fprintf(b, \"%#v\", i)\n\t}\n}\n\n// LayerGoString returns a representation of the layer in Go syntax,\n// taking care to shorten \"very long\" BaseLayer byte slices\nfunc LayerGoString(l Layer) string {\n\tb := new(bytes.Buffer)\n\tlayerGoString(l, b)\n\treturn b.String()\n}\n\nfunc (p *packet) packetString() string {\n\tvar b bytes.Buffer\n\tfmt.Fprintf(&b, \"PACKET: %d bytes\", len(p.Data()))\n\tif p.metadata.Truncated {\n\t\tb.WriteString(\", truncated\")\n\t}\n\tif p.metadata.Length > 0 {\n\t\tfmt.Fprintf(&b, \", wire length %d cap length %d\", p.metadata.Length, p.metadata.CaptureLength)\n\t}\n\tif !p.metadata.Timestamp.IsZero() {\n\t\tfmt.Fprintf(&b, \" @ %v\", p.metadata.Timestamp)\n\t}\n\tb.WriteByte('\\n')\n\tfor i, l := range p.layers {\n\t\tfmt.Fprintf(&b, \"- Layer %d (%02d bytes) = %s\\n\", i+1, len(l.LayerContents()), LayerString(l))\n\t}\n\treturn b.String()\n}\n\nfunc (p *packet) packetDump() string {\n\tvar b bytes.Buffer\n\tfmt.Fprintf(&b, \"-- FULL PACKET DATA (%d bytes) ------------------------------------\\n%s\", len(p.data), hex.Dump(p.data))\n\tfor i, l := range p.layers {\n\t\tfmt.Fprintf(&b, \"--- Layer %d ---\\n%s\", i+1, LayerDump(l))\n\t}\n\treturn b.String()\n}\n\n// eagerPacket is a packet implementation that does eager decoding.  Upon\n// initial construction, it decodes all the layers it can from packet data.\n// eagerPacket implements Packet and PacketBuilder.\ntype eagerPacket struct {\n\tpacket\n}\n\nvar errNilDecoder = errors.New(\"NextDecoder passed nil decoder, probably an unsupported decode type\")\n\nfunc (p *eagerPacket) NextDecoder(next Decoder) error {\n\tif next == nil {\n\t\treturn errNilDecoder\n\t}\n\tif p.last == nil {\n\t\treturn errors.New(\"NextDecoder called, but no layers added yet\")\n\t}\n\td := p.last.LayerPayload()\n\tif len(d) == 0 {\n\t\treturn nil\n\t}\n\t// Since we're eager, immediately call the next decoder.\n\treturn next.Decode(d, p)\n}\nfunc (p *eagerPacket) initialDecode(dec Decoder) {\n\tdefer p.recoverDecodeError()\n\terr := dec.Decode(p.data, p)\n\tif err != nil {\n\t\tp.addFinalDecodeError(err, nil)\n\t}\n}\nfunc (p *eagerPacket) LinkLayer() LinkLayer {\n\treturn p.link\n}\nfunc (p *eagerPacket) NetworkLayer() NetworkLayer {\n\treturn p.network\n}\nfunc (p *eagerPacket) TransportLayer() TransportLayer {\n\treturn p.transport\n}\nfunc (p *eagerPacket) ApplicationLayer() ApplicationLayer {\n\treturn p.application\n}\nfunc (p *eagerPacket) ErrorLayer() ErrorLayer {\n\treturn p.failure\n}\nfunc (p *eagerPacket) Layers() []Layer {\n\treturn p.layers\n}\nfunc (p *eagerPacket) Layer(t LayerType) Layer {\n\tfor _, l := range p.layers {\n\t\tif l.LayerType() == t {\n\t\t\treturn l\n\t\t}\n\t}\n\treturn nil\n}\nfunc (p *eagerPacket) LayerClass(lc LayerClass) Layer {\n\tfor _, l := range p.layers {\n\t\tif lc.Contains(l.LayerType()) {\n\t\t\treturn l\n\t\t}\n\t}\n\treturn nil\n}\nfunc (p *eagerPacket) String() string { return p.packetString() }\nfunc (p *eagerPacket) Dump() string   { return p.packetDump() }\n\n// lazyPacket does lazy decoding on its packet data.  On construction it does\n// no initial decoding.  For each function call, it decodes only as many layers\n// as are necessary to compute the return value for that function.\n// lazyPacket implements Packet and PacketBuilder.\ntype lazyPacket struct {\n\tpacket\n\tnext Decoder\n}\n\nfunc (p *lazyPacket) NextDecoder(next Decoder) error {\n\tif next == nil {\n\t\treturn errNilDecoder\n\t}\n\tp.next = next\n\treturn nil\n}\nfunc (p *lazyPacket) decodeNextLayer() {\n\tif p.next == nil {\n\t\treturn\n\t}\n\td := p.data\n\tif p.last != nil {\n\t\td = p.last.LayerPayload()\n\t}\n\tnext := p.next\n\tp.next = nil\n\t// We've just set p.next to nil, so if we see we have no data, this should be\n\t// the final call we get to decodeNextLayer if we return here.\n\tif len(d) == 0 {\n\t\treturn\n\t}\n\tdefer p.recoverDecodeError()\n\terr := next.Decode(d, p)\n\tif err != nil {\n\t\tp.addFinalDecodeError(err, nil)\n\t}\n}\nfunc (p *lazyPacket) LinkLayer() LinkLayer {\n\tfor p.link == nil && p.next != nil {\n\t\tp.decodeNextLayer()\n\t}\n\treturn p.link\n}\nfunc (p *lazyPacket) NetworkLayer() NetworkLayer {\n\tfor p.network == nil && p.next != nil {\n\t\tp.decodeNextLayer()\n\t}\n\treturn p.network\n}\nfunc (p *lazyPacket) TransportLayer() TransportLayer {\n\tfor p.transport == nil && p.next != nil {\n\t\tp.decodeNextLayer()\n\t}\n\treturn p.transport\n}\nfunc (p *lazyPacket) ApplicationLayer() ApplicationLayer {\n\tfor p.application == nil && p.next != nil {\n\t\tp.decodeNextLayer()\n\t}\n\treturn p.application\n}\nfunc (p *lazyPacket) ErrorLayer() ErrorLayer {\n\tfor p.failure == nil && p.next != nil {\n\t\tp.decodeNextLayer()\n\t}\n\treturn p.failure\n}\nfunc (p *lazyPacket) Layers() []Layer {\n\tfor p.next != nil {\n\t\tp.decodeNextLayer()\n\t}\n\treturn p.layers\n}\nfunc (p *lazyPacket) Layer(t LayerType) Layer {\n\tfor _, l := range p.layers {\n\t\tif l.LayerType() == t {\n\t\t\treturn l\n\t\t}\n\t}\n\tnumLayers := len(p.layers)\n\tfor p.next != nil {\n\t\tp.decodeNextLayer()\n\t\tfor _, l := range p.layers[numLayers:] {\n\t\t\tif l.LayerType() == t {\n\t\t\t\treturn l\n\t\t\t}\n\t\t}\n\t\tnumLayers = len(p.layers)\n\t}\n\treturn nil\n}\nfunc (p *lazyPacket) LayerClass(lc LayerClass) Layer {\n\tfor _, l := range p.layers {\n\t\tif lc.Contains(l.LayerType()) {\n\t\t\treturn l\n\t\t}\n\t}\n\tnumLayers := len(p.layers)\n\tfor p.next != nil {\n\t\tp.decodeNextLayer()\n\t\tfor _, l := range p.layers[numLayers:] {\n\t\t\tif lc.Contains(l.LayerType()) {\n\t\t\t\treturn l\n\t\t\t}\n\t\t}\n\t\tnumLayers = len(p.layers)\n\t}\n\treturn nil\n}\nfunc (p *lazyPacket) String() string { p.Layers(); return p.packetString() }\nfunc (p *lazyPacket) Dump() string   { p.Layers(); return p.packetDump() }\n\n// DecodeOptions tells gopacket how to decode a packet.\ntype DecodeOptions struct {\n\t// Lazy decoding decodes the minimum number of layers needed to return data\n\t// for a packet at each function call.  Be careful using this with concurrent\n\t// packet processors, as each call to packet.* could mutate the packet, and\n\t// two concurrent function calls could interact poorly.\n\tLazy bool\n\t// NoCopy decoding doesn't copy its input buffer into storage that's owned by\n\t// the packet.  If you can guarantee that the bytes underlying the slice\n\t// passed into NewPacket aren't going to be modified, this can be faster.  If\n\t// there's any chance that those bytes WILL be changed, this will invalidate\n\t// your packets.\n\tNoCopy bool\n\t// SkipDecodeRecovery skips over panic recovery during packet decoding.\n\t// Normally, when packets decode, if a panic occurs, that panic is captured\n\t// by a recover(), and a DecodeFailure layer is added to the packet detailing\n\t// the issue.  If this flag is set, panics are instead allowed to continue up\n\t// the stack.\n\tSkipDecodeRecovery bool\n\t// DecodeStreamsAsDatagrams enables routing of application-level layers in the TCP\n\t// decoder. If true, we should try to decode layers after TCP in single packets.\n\t// This is disabled by default because the reassembly package drives the decoding\n\t// of TCP payload data after reassembly.\n\tDecodeStreamsAsDatagrams bool\n}\n\n// Default decoding provides the safest (but slowest) method for decoding\n// packets.  It eagerly processes all layers (so it's concurrency-safe) and it\n// copies its input buffer upon creation of the packet (so the packet remains\n// valid if the underlying slice is modified.  Both of these take time,\n// though, so beware.  If you can guarantee that the packet will only be used\n// by one goroutine at a time, set Lazy decoding.  If you can guarantee that\n// the underlying slice won't change, set NoCopy decoding.\nvar Default = DecodeOptions{}\n\n// Lazy is a DecodeOptions with just Lazy set.\nvar Lazy = DecodeOptions{Lazy: true}\n\n// NoCopy is a DecodeOptions with just NoCopy set.\nvar NoCopy = DecodeOptions{NoCopy: true}\n\n// DecodeStreamsAsDatagrams is a DecodeOptions with just DecodeStreamsAsDatagrams set.\nvar DecodeStreamsAsDatagrams = DecodeOptions{DecodeStreamsAsDatagrams: true}\n\n// NewPacket creates a new Packet object from a set of bytes.  The\n// firstLayerDecoder tells it how to interpret the first layer from the bytes,\n// future layers will be generated from that first layer automatically.\nfunc NewPacket(data []byte, firstLayerDecoder Decoder, options DecodeOptions) Packet {\n\tif !options.NoCopy {\n\t\tdataCopy := make([]byte, len(data))\n\t\tcopy(dataCopy, data)\n\t\tdata = dataCopy\n\t}\n\tif options.Lazy {\n\t\tp := &lazyPacket{\n\t\t\tpacket: packet{data: data, decodeOptions: options},\n\t\t\tnext:   firstLayerDecoder,\n\t\t}\n\t\tp.layers = p.initialLayers[:0]\n\t\t// Crazy craziness:\n\t\t// If the following return statemet is REMOVED, and Lazy is FALSE, then\n\t\t// eager packet processing becomes 17% FASTER.  No, there is no logical\n\t\t// explanation for this.  However, it's such a hacky micro-optimization that\n\t\t// we really can't rely on it.  It appears to have to do with the size the\n\t\t// compiler guesses for this function's stack space, since one symptom is\n\t\t// that with the return statement in place, we more than double calls to\n\t\t// runtime.morestack/runtime.lessstack.  We'll hope the compiler gets better\n\t\t// over time and we get this optimization for free.  Until then, we'll have\n\t\t// to live with slower packet processing.\n\t\treturn p\n\t}\n\tp := &eagerPacket{\n\t\tpacket: packet{data: data, decodeOptions: options},\n\t}\n\tp.layers = p.initialLayers[:0]\n\tp.initialDecode(firstLayerDecoder)\n\treturn p\n}\n\n// PacketDataSource is an interface for some source of packet data.  Users may\n// create their own implementations, or use the existing implementations in\n// gopacket/pcap (libpcap, allows reading from live interfaces or from\n// pcap files) or gopacket/pfring (PF_RING, allows reading from live\n// interfaces).\ntype PacketDataSource interface {\n\t// ReadPacketData returns the next packet available from this data source.\n\t// It returns:\n\t//  data:  The bytes of an individual packet.\n\t//  ci:  Metadata about the capture\n\t//  err:  An error encountered while reading packet data.  If err != nil,\n\t//    then data/ci will be ignored.\n\tReadPacketData() (data []byte, ci CaptureInfo, err error)\n}\n\n// ConcatFinitePacketDataSources returns a PacketDataSource that wraps a set\n// of internal PacketDataSources, each of which will stop with io.EOF after\n// reading a finite number of packets.  The returned PacketDataSource will\n// return all packets from the first finite source, followed by all packets from\n// the second, etc.  Once all finite sources have returned io.EOF, the returned\n// source will as well.\nfunc ConcatFinitePacketDataSources(pds ...PacketDataSource) PacketDataSource {\n\tc := concat(pds)\n\treturn &c\n}\n\ntype concat []PacketDataSource\n\nfunc (c *concat) ReadPacketData() (data []byte, ci CaptureInfo, err error) {\n\tfor len(*c) > 0 {\n\t\tdata, ci, err = (*c)[0].ReadPacketData()\n\t\tif err == io.EOF {\n\t\t\t*c = (*c)[1:]\n\t\t\tcontinue\n\t\t}\n\t\treturn\n\t}\n\treturn nil, CaptureInfo{}, io.EOF\n}\n\n// ZeroCopyPacketDataSource is an interface to pull packet data from sources\n// that allow data to be returned without copying to a user-controlled buffer.\n// It's very similar to PacketDataSource, except that the caller must be more\n// careful in how the returned buffer is handled.\ntype ZeroCopyPacketDataSource interface {\n\t// ZeroCopyReadPacketData returns the next packet available from this data source.\n\t// It returns:\n\t//  data:  The bytes of an individual packet.  Unlike with\n\t//    PacketDataSource's ReadPacketData, the slice returned here points\n\t//    to a buffer owned by the data source.  In particular, the bytes in\n\t//    this buffer may be changed by future calls to\n\t//    ZeroCopyReadPacketData.  Do not use the returned buffer after\n\t//    subsequent ZeroCopyReadPacketData calls.\n\t//  ci:  Metadata about the capture\n\t//  err:  An error encountered while reading packet data.  If err != nil,\n\t//    then data/ci will be ignored.\n\tZeroCopyReadPacketData() (data []byte, ci CaptureInfo, err error)\n}\n\n// PacketSource reads in packets from a PacketDataSource, decodes them, and\n// returns them.\n//\n// There are currently two different methods for reading packets in through\n// a PacketSource:\n//\n// Reading With Packets Function\n//\n// This method is the most convenient and easiest to code, but lacks\n// flexibility.  Packets returns a 'chan Packet', then asynchronously writes\n// packets into that channel.  Packets uses a blocking channel, and closes\n// it if an io.EOF is returned by the underlying PacketDataSource.  All other\n// PacketDataSource errors are ignored and discarded.\n//  for packet := range packetSource.Packets() {\n//    ...\n//  }\n//\n// Reading With NextPacket Function\n//\n// This method is the most flexible, and exposes errors that may be\n// encountered by the underlying PacketDataSource.  It's also the fastest\n// in a tight loop, since it doesn't have the overhead of a channel\n// read/write.  However, it requires the user to handle errors, most\n// importantly the io.EOF error in cases where packets are being read from\n// a file.\n//  for {\n//    packet, err := packetSource.NextPacket()\n//    if err == io.EOF {\n//      break\n//    } else if err != nil {\n//      log.Println(\"Error:\", err)\n//      continue\n//    }\n//    handlePacket(packet)  // Do something with each packet.\n//  }\ntype PacketSource struct {\n\tsource  PacketDataSource\n\tdecoder Decoder\n\t// DecodeOptions is the set of options to use for decoding each piece\n\t// of packet data.  This can/should be changed by the user to reflect the\n\t// way packets should be decoded.\n\tDecodeOptions\n\tc chan Packet\n}\n\n// NewPacketSource creates a packet data source.\nfunc NewPacketSource(source PacketDataSource, decoder Decoder) *PacketSource {\n\treturn &PacketSource{\n\t\tsource:  source,\n\t\tdecoder: decoder,\n\t}\n}\n\n// NextPacket returns the next decoded packet from the PacketSource.  On error,\n// it returns a nil packet and a non-nil error.\nfunc (p *PacketSource) NextPacket() (Packet, error) {\n\tdata, ci, err := p.source.ReadPacketData()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpacket := NewPacket(data, p.decoder, p.DecodeOptions)\n\tm := packet.Metadata()\n\tm.CaptureInfo = ci\n\tm.Truncated = m.Truncated || ci.CaptureLength < ci.Length\n\treturn packet, nil\n}\n\n// packetsToChannel reads in all packets from the packet source and sends them\n// to the given channel. This routine terminates when a non-temporary error\n// is returned by NextPacket().\nfunc (p *PacketSource) packetsToChannel() {\n\tdefer close(p.c)\n\tfor {\n\t\tpacket, err := p.NextPacket()\n\t\tif err == nil {\n\t\t\tp.c <- packet\n\t\t\tcontinue\n\t\t}\n\n\t\t// Immediately retry for temporary network errors\n\t\tif nerr, ok := err.(net.Error); ok && nerr.Temporary() {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Immediately retry for EAGAIN\n\t\tif err == syscall.EAGAIN {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Immediately break for known unrecoverable errors\n\t\tif err == io.EOF || err == io.ErrUnexpectedEOF ||\n\t\t\terr == io.ErrNoProgress || err == io.ErrClosedPipe || err == io.ErrShortBuffer ||\n\t\t\terr == syscall.EBADF ||\n\t\t\tstrings.Contains(err.Error(), \"use of closed file\") {\n\t\t\tbreak\n\t\t}\n\n\t\t// Sleep briefly and try again\n\t\ttime.Sleep(time.Millisecond * time.Duration(5))\n\t}\n}\n\n// Packets returns a channel of packets, allowing easy iterating over\n// packets.  Packets will be asynchronously read in from the underlying\n// PacketDataSource and written to the returned channel.  If the underlying\n// PacketDataSource returns an io.EOF error, the channel will be closed.\n// If any other error is encountered, it is ignored.\n//\n//  for packet := range packetSource.Packets() {\n//    handlePacket(packet)  // Do something with each packet.\n//  }\n//\n// If called more than once, returns the same channel.\nfunc (p *PacketSource) Packets() chan Packet {\n\tif p.c == nil {\n\t\tp.c = make(chan Packet, 1000)\n\t\tgo p.packetsToChannel()\n\t}\n\treturn p.c\n}\n"
  },
  {
    "path": "packet_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage gopacket\n\nimport (\n\t\"io\"\n\t\"reflect\"\n\t\"testing\"\n)\n\ntype embedded struct {\n\tA, B int\n}\n\ntype embedding struct {\n\tembedded\n\tC, D int\n}\n\nfunc TestDumpEmbedded(t *testing.T) {\n\te := embedding{embedded: embedded{A: 1, B: 2}, C: 3, D: 4}\n\tif got, want := layerString(reflect.ValueOf(e), false, false), \"{A=1 B=2 C=3 D=4}\"; got != want {\n\t\tt.Errorf(\"embedded dump mismatch:\\n   got: %v\\n  want: %v\", got, want)\n\t}\n}\n\ntype singlePacketSource [1][]byte\n\nfunc (s *singlePacketSource) ReadPacketData() ([]byte, CaptureInfo, error) {\n\tif (*s)[0] == nil {\n\t\treturn nil, CaptureInfo{}, io.EOF\n\t}\n\tout := (*s)[0]\n\t(*s)[0] = nil\n\treturn out, CaptureInfo{}, nil\n}\n\nfunc TestConcatPacketSources(t *testing.T) {\n\tsourceA := &singlePacketSource{[]byte{1}}\n\tsourceB := &singlePacketSource{[]byte{2}}\n\tsourceC := &singlePacketSource{[]byte{3}}\n\tconcat := ConcatFinitePacketDataSources(sourceA, sourceB, sourceC)\n\ta, _, err := concat.ReadPacketData()\n\tif err != nil || len(a) != 1 || a[0] != 1 {\n\t\tt.Errorf(\"expected [1], got %v/%v\", a, err)\n\t}\n\tb, _, err := concat.ReadPacketData()\n\tif err != nil || len(b) != 1 || b[0] != 2 {\n\t\tt.Errorf(\"expected [2], got %v/%v\", b, err)\n\t}\n\tc, _, err := concat.ReadPacketData()\n\tif err != nil || len(c) != 1 || c[0] != 3 {\n\t\tt.Errorf(\"expected [3], got %v/%v\", c, err)\n\t}\n\tif _, _, err := concat.ReadPacketData(); err != io.EOF {\n\t\tt.Errorf(\"expected io.EOF, got %v\", err)\n\t}\n}\n"
  },
  {
    "path": "parser.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage gopacket\n\nimport (\n\t\"fmt\"\n)\n\n// A container for single LayerType->DecodingLayer mapping.\ntype decodingLayerElem struct {\n\ttyp LayerType\n\tdec DecodingLayer\n}\n\n// DecodingLayer is an interface for packet layers that can decode themselves.\n//\n// The important part of DecodingLayer is that they decode themselves in-place.\n// Calling DecodeFromBytes on a DecodingLayer totally resets the entire layer to\n// the new state defined by the data passed in.  A returned error leaves the\n// DecodingLayer in an unknown intermediate state, thus its fields should not be\n// trusted.\n//\n// Because the DecodingLayer is resetting its own fields, a call to\n// DecodeFromBytes should normally not require any memory allocation.\ntype DecodingLayer interface {\n\t// DecodeFromBytes resets the internal state of this layer to the state\n\t// defined by the passed-in bytes.  Slices in the DecodingLayer may\n\t// reference the passed-in data, so care should be taken to copy it\n\t// first should later modification of data be required before the\n\t// DecodingLayer is discarded.\n\tDecodeFromBytes(data []byte, df DecodeFeedback) error\n\t// CanDecode returns the set of LayerTypes this DecodingLayer can\n\t// decode.  For Layers that are also DecodingLayers, this will most\n\t// often be that Layer's LayerType().\n\tCanDecode() LayerClass\n\t// NextLayerType returns the LayerType which should be used to decode\n\t// the LayerPayload.\n\tNextLayerType() LayerType\n\t// LayerPayload is the set of bytes remaining to decode after a call to\n\t// DecodeFromBytes.\n\tLayerPayload() []byte\n}\n\n// DecodingLayerFunc decodes given packet and stores decoded LayerType\n// values into specified slice. Returns either first encountered\n// unsupported LayerType value or decoding error. In case of success,\n// returns (LayerTypeZero, nil).\ntype DecodingLayerFunc func([]byte, *[]LayerType) (LayerType, error)\n\n// DecodingLayerContainer stores all DecodingLayer-s and serves as a\n// searching tool for DecodingLayerParser.\ntype DecodingLayerContainer interface {\n\t// Put adds new DecodingLayer to container. The new instance of\n\t// the same DecodingLayerContainer is returned so it may be\n\t// implemented as a value receiver.\n\tPut(DecodingLayer) DecodingLayerContainer\n\t// Decoder returns DecodingLayer to decode given LayerType and\n\t// true if it was found. If no decoder found, return false.\n\tDecoder(LayerType) (DecodingLayer, bool)\n\t// LayersDecoder returns DecodingLayerFunc which decodes given\n\t// packet, starting with specified LayerType and DecodeFeedback.\n\tLayersDecoder(first LayerType, df DecodeFeedback) DecodingLayerFunc\n}\n\n// DecodingLayerSparse is a sparse array-based implementation of\n// DecodingLayerContainer. Each DecodingLayer is addressed in an\n// allocated slice by LayerType value itself. Though this is the\n// fastest container it may be memory-consuming if used with big\n// LayerType values.\ntype DecodingLayerSparse []DecodingLayer\n\n// Put implements DecodingLayerContainer interface.\nfunc (dl DecodingLayerSparse) Put(d DecodingLayer) DecodingLayerContainer {\n\tmaxLayerType := LayerType(len(dl) - 1)\n\tfor _, typ := range d.CanDecode().LayerTypes() {\n\t\tif typ > maxLayerType {\n\t\t\tmaxLayerType = typ\n\t\t}\n\t}\n\n\tif extra := maxLayerType - LayerType(len(dl)) + 1; extra > 0 {\n\t\tdl = append(dl, make([]DecodingLayer, extra)...)\n\t}\n\n\tfor _, typ := range d.CanDecode().LayerTypes() {\n\t\tdl[typ] = d\n\t}\n\treturn dl\n}\n\n// LayersDecoder implements DecodingLayerContainer interface.\nfunc (dl DecodingLayerSparse) LayersDecoder(first LayerType, df DecodeFeedback) DecodingLayerFunc {\n\treturn LayersDecoder(dl, first, df)\n}\n\n// Decoder implements DecodingLayerContainer interface.\nfunc (dl DecodingLayerSparse) Decoder(typ LayerType) (DecodingLayer, bool) {\n\tif int64(typ) < int64(len(dl)) {\n\t\tdecoder := dl[typ]\n\t\treturn decoder, decoder != nil\n\t}\n\treturn nil, false\n}\n\n// DecodingLayerArray is an array-based implementation of\n// DecodingLayerContainer. Each DecodingLayer is searched linearly in\n// an allocated slice in one-by-one fashion.\ntype DecodingLayerArray []decodingLayerElem\n\n// Put implements DecodingLayerContainer interface.\nfunc (dl DecodingLayerArray) Put(d DecodingLayer) DecodingLayerContainer {\nTYPES:\n\tfor _, typ := range d.CanDecode().LayerTypes() {\n\t\tfor i := range dl {\n\t\t\tif dl[i].typ == typ {\n\t\t\t\tdl[i].dec = d\n\t\t\t\tcontinue TYPES\n\t\t\t}\n\t\t}\n\t\tdl = append(dl, decodingLayerElem{typ, d})\n\t}\n\treturn dl\n}\n\n// Decoder implements DecodingLayerContainer interface.\nfunc (dl DecodingLayerArray) Decoder(typ LayerType) (DecodingLayer, bool) {\n\tfor i := range dl {\n\t\tif dl[i].typ == typ {\n\t\t\treturn dl[i].dec, true\n\t\t}\n\t}\n\treturn nil, false\n}\n\n// LayersDecoder implements DecodingLayerContainer interface.\nfunc (dl DecodingLayerArray) LayersDecoder(first LayerType, df DecodeFeedback) DecodingLayerFunc {\n\treturn LayersDecoder(dl, first, df)\n}\n\n// DecodingLayerMap is an map-based implementation of\n// DecodingLayerContainer. Each DecodingLayer is searched in a map\n// hashed by LayerType value.\ntype DecodingLayerMap map[LayerType]DecodingLayer\n\n// Put implements DecodingLayerContainer interface.\nfunc (dl DecodingLayerMap) Put(d DecodingLayer) DecodingLayerContainer {\n\tfor _, typ := range d.CanDecode().LayerTypes() {\n\t\tif dl == nil {\n\t\t\tdl = make(map[LayerType]DecodingLayer)\n\t\t}\n\t\tdl[typ] = d\n\t}\n\treturn dl\n}\n\n// Decoder implements DecodingLayerContainer interface.\nfunc (dl DecodingLayerMap) Decoder(typ LayerType) (DecodingLayer, bool) {\n\td, ok := dl[typ]\n\treturn d, ok\n}\n\n// LayersDecoder implements DecodingLayerContainer interface.\nfunc (dl DecodingLayerMap) LayersDecoder(first LayerType, df DecodeFeedback) DecodingLayerFunc {\n\treturn LayersDecoder(dl, first, df)\n}\n\n// Static code check.\nvar (\n\t_ = []DecodingLayerContainer{\n\t\tDecodingLayerSparse(nil),\n\t\tDecodingLayerMap(nil),\n\t\tDecodingLayerArray(nil),\n\t}\n)\n\n// DecodingLayerParser parses a given set of layer types.  See DecodeLayers for\n// more information on how DecodingLayerParser should be used.\ntype DecodingLayerParser struct {\n\t// DecodingLayerParserOptions is the set of options available to the\n\t// user to define the parser's behavior.\n\tDecodingLayerParserOptions\n\tdlc   DecodingLayerContainer\n\tfirst LayerType\n\tdf    DecodeFeedback\n\n\tdecodeFunc DecodingLayerFunc\n\n\t// Truncated is set when a decode layer detects that the packet has been\n\t// truncated.\n\tTruncated bool\n}\n\n// AddDecodingLayer adds a decoding layer to the parser.  This adds support for\n// the decoding layer's CanDecode layers to the parser... should they be\n// encountered, they'll be parsed.\nfunc (l *DecodingLayerParser) AddDecodingLayer(d DecodingLayer) {\n\tl.SetDecodingLayerContainer(l.dlc.Put(d))\n}\n\n// SetTruncated is used by DecodingLayers to set the Truncated boolean in the\n// DecodingLayerParser.  Users should simply read Truncated after calling\n// DecodeLayers.\nfunc (l *DecodingLayerParser) SetTruncated() {\n\tl.Truncated = true\n}\n\n// NewDecodingLayerParser creates a new DecodingLayerParser and adds in all\n// of the given DecodingLayers with AddDecodingLayer.\n//\n// Each call to DecodeLayers will attempt to decode the given bytes first by\n// treating them as a 'first'-type layer, then by using NextLayerType on\n// subsequently decoded layers to find the next relevant decoder.  Should a\n// deoder not be available for the layer type returned by NextLayerType,\n// decoding will stop.\n//\n// NewDecodingLayerParser uses DecodingLayerMap container by\n// default.\nfunc NewDecodingLayerParser(first LayerType, decoders ...DecodingLayer) *DecodingLayerParser {\n\tdlp := &DecodingLayerParser{first: first}\n\tdlp.df = dlp // Cast this once to the interface\n\t// default container\n\tdlc := DecodingLayerContainer(DecodingLayerMap(make(map[LayerType]DecodingLayer)))\n\tfor _, d := range decoders {\n\t\tdlc = dlc.Put(d)\n\t}\n\n\tdlp.SetDecodingLayerContainer(dlc)\n\treturn dlp\n}\n\n// SetDecodingLayerContainer specifies container with decoders. This\n// call replaces all decoders already registered in given instance of\n// DecodingLayerParser.\nfunc (l *DecodingLayerParser) SetDecodingLayerContainer(dlc DecodingLayerContainer) {\n\tl.dlc = dlc\n\tl.decodeFunc = l.dlc.LayersDecoder(l.first, l.df)\n}\n\n// DecodeLayers decodes as many layers as possible from the given data.  It\n// initially treats the data as layer type 'typ', then uses NextLayerType on\n// each subsequent decoded layer until it gets to a layer type it doesn't know\n// how to parse.\n//\n// For each layer successfully decoded, DecodeLayers appends the layer type to\n// the decoded slice.  DecodeLayers truncates the 'decoded' slice initially, so\n// there's no need to empty it yourself.\n//\n// This decoding method is about an order of magnitude faster than packet\n// decoding, because it only decodes known layers that have already been\n// allocated.  This means it doesn't need to allocate each layer it returns...\n// instead it overwrites the layers that already exist.\n//\n// Example usage:\n//    func main() {\n//      var eth layers.Ethernet\n//      var ip4 layers.IPv4\n//      var ip6 layers.IPv6\n//      var tcp layers.TCP\n//      var udp layers.UDP\n//      var payload gopacket.Payload\n//      parser := gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet, &eth, &ip4, &ip6, &tcp, &udp, &payload)\n//      var source gopacket.PacketDataSource = getMyDataSource()\n//      decodedLayers := make([]gopacket.LayerType, 0, 10)\n//      for {\n//        data, _, err := source.ReadPacketData()\n//        if err != nil {\n//          fmt.Println(\"Error reading packet data: \", err)\n//          continue\n//        }\n//        fmt.Println(\"Decoding packet\")\n//        err = parser.DecodeLayers(data, &decodedLayers)\n//        for _, typ := range decodedLayers {\n//          fmt.Println(\"  Successfully decoded layer type\", typ)\n//          switch typ {\n//            case layers.LayerTypeEthernet:\n//              fmt.Println(\"    Eth \", eth.SrcMAC, eth.DstMAC)\n//            case layers.LayerTypeIPv4:\n//              fmt.Println(\"    IP4 \", ip4.SrcIP, ip4.DstIP)\n//            case layers.LayerTypeIPv6:\n//              fmt.Println(\"    IP6 \", ip6.SrcIP, ip6.DstIP)\n//            case layers.LayerTypeTCP:\n//              fmt.Println(\"    TCP \", tcp.SrcPort, tcp.DstPort)\n//            case layers.LayerTypeUDP:\n//              fmt.Println(\"    UDP \", udp.SrcPort, udp.DstPort)\n//          }\n//        }\n//        if decodedLayers.Truncated {\n//          fmt.Println(\"  Packet has been truncated\")\n//        }\n//        if err != nil {\n//          fmt.Println(\"  Error encountered:\", err)\n//        }\n//      }\n//    }\n//\n// If DecodeLayers is unable to decode the next layer type, it will return the\n// error UnsupportedLayerType.\nfunc (l *DecodingLayerParser) DecodeLayers(data []byte, decoded *[]LayerType) (err error) {\n\tl.Truncated = false\n\tif !l.IgnorePanic {\n\t\tdefer panicToError(&err)\n\t}\n\ttyp, err := l.decodeFunc(data, decoded)\n\tif typ != LayerTypeZero {\n\t\t// no decoder\n\t\tif l.IgnoreUnsupported {\n\t\t\treturn nil\n\t\t}\n\t\treturn UnsupportedLayerType(typ)\n\t}\n\treturn err\n}\n\n// UnsupportedLayerType is returned by DecodingLayerParser if DecodeLayers\n// encounters a layer type that the DecodingLayerParser has no decoder for.\ntype UnsupportedLayerType LayerType\n\n// Error implements the error interface, returning a string to say that the\n// given layer type is unsupported.\nfunc (e UnsupportedLayerType) Error() string {\n\treturn fmt.Sprintf(\"No decoder for layer type %v\", LayerType(e))\n}\n\nfunc panicToError(e *error) {\n\tif r := recover(); r != nil {\n\t\t*e = fmt.Errorf(\"panic: %v\", r)\n\t}\n}\n\n// DecodingLayerParserOptions provides options to affect the behavior of a given\n// DecodingLayerParser.\ntype DecodingLayerParserOptions struct {\n\t// IgnorePanic determines whether a DecodingLayerParser should stop\n\t// panics on its own (by returning them as an error from DecodeLayers)\n\t// or should allow them to raise up the stack.  Handling errors does add\n\t// latency to the process of decoding layers, but is much safer for\n\t// callers.  IgnorePanic defaults to false, thus if the caller does\n\t// nothing decode panics will be returned as errors.\n\tIgnorePanic bool\n\t// IgnoreUnsupported will stop parsing and return a nil error when it\n\t// encounters a layer it doesn't have a parser for, instead of returning an\n\t// UnsupportedLayerType error.  If this is true, it's up to the caller to make\n\t// sure that all expected layers have been parsed (by checking the decoded\n\t// slice).\n\tIgnoreUnsupported bool\n}\n"
  },
  {
    "path": "pcap/bpf_test.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\npackage pcap\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\nvar (\n\tsnaplen = 65535\n\tpacket  = [...]byte{\n\t\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // dst mac\n\t\t0x0, 0x11, 0x22, 0x33, 0x44, 0x55, // src mac\n\t\t0x08, 0x0, // ether type\n\t\t0x45, 0x0, 0x0, 0x3c, 0xa6, 0xc3, 0x40, 0x0, 0x40, 0x06, 0x3d, 0xd8, // ip header\n\t\t0xc0, 0xa8, 0x50, 0x2f, // src ip\n\t\t0xc0, 0xa8, 0x50, 0x2c, // dst ip\n\t\t0xaf, 0x14, // src port\n\t\t0x0, 0x50, // dst port\n\t}\n\tmatchingBPFFilter    = \"ip and tcp and port 80\"\n\tnonmatchingBPFFilter = \"udp and port 80\"\n)\n\nfunc BenchmarkPcapNonmatchingBPFFilter(b *testing.B) {\n\tbpf, err := NewBPF(layers.LinkTypeEthernet, snaplen, nonmatchingBPFFilter)\n\tif err != nil {\n\t\tb.Fatal(\"incorrect filter\")\n\t}\n\n\tci := gopacket.CaptureInfo{\n\t\tInterfaceIndex: 0,\n\t\tCaptureLength:  len(packet),\n\t\tLength:         len(packet),\n\t\tTimestamp:      time.Now(),\n\t}\n\n\tfor i := 0; i < b.N; i++ {\n\t\tif bpf.Matches(ci, packet[:]) {\n\t\t\tb.Fatal(\"filter must not match the packet\")\n\t\t}\n\t}\n}\n\nfunc BenchmarkPcapMatchingBPFFilter(b *testing.B) {\n\tbpf, err := NewBPF(layers.LinkTypeEthernet, snaplen, matchingBPFFilter)\n\tif err != nil {\n\t\tb.Fatal(\"incorrect filter\")\n\t}\n\n\tci := gopacket.CaptureInfo{\n\t\tInterfaceIndex: 0,\n\t\tCaptureLength:  len(packet),\n\t\tLength:         len(packet),\n\t\tTimestamp:      time.Now(),\n\t}\n\n\tfor i := 0; i < b.N; i++ {\n\t\tif !bpf.Matches(ci, packet[:]) {\n\t\t\tb.Fatal(\"filter must match the packet\")\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pcap/defs_windows_386.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// This file contains necessary structs/constants generated from libpcap headers with cgo -godefs\n// generated with: generate_defs.exe\n// DO NOT MODIFY\n\npackage pcap\n\nimport \"syscall\"\n\nconst errorBufferSize = 0x100\n\nconst (\n\tpcapErrorNotActivated    = -0x3\n\tpcapErrorActivated       = -0x4\n\tpcapWarningPromisc       = 0x2\n\tpcapErrorNoSuchDevice    = -0x5\n\tpcapErrorDenied          = -0x8\n\tpcapErrorNotUp           = -0x9\n\tpcapError                = -0x1\n\tpcapWarning              = 0x1\n\tpcapDIN                  = 0x1\n\tpcapDOUT                 = 0x2\n\tpcapDINOUT               = 0x0\n\tpcapNetmaskUnknown       = 0xffffffff\n\tpcapTstampPrecisionMicro = 0x0\n\tpcapTstampPrecisionNano  = 0x1\n)\n\ntype timeval struct {\n\tSec  int32\n\tUsec int32\n}\ntype pcapPkthdr struct {\n\tTs     timeval\n\tCaplen uint32\n\tLen    uint32\n}\ntype pcapTPtr uintptr\ntype pcapBpfInstruction struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\ntype pcapBpfProgram struct {\n\tLen   uint32\n\tInsns *pcapBpfInstruction\n}\ntype pcapStats struct {\n\tRecv   uint32\n\tDrop   uint32\n\tIfdrop uint32\n}\ntype pcapCint int32\ntype pcapIf struct {\n\tNext        *pcapIf\n\tName        *int8\n\tDescription *int8\n\tAddresses   *pcapAddr\n\tFlags       uint32\n}\n\ntype pcapAddr struct {\n\tNext      *pcapAddr\n\tAddr      *syscall.RawSockaddr\n\tNetmask   *syscall.RawSockaddr\n\tBroadaddr *syscall.RawSockaddr\n\tDstaddr   *syscall.RawSockaddr\n}\n"
  },
  {
    "path": "pcap/defs_windows_amd64.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// This file contains necessary structs/constants generated from libpcap headers with cgo -godefs\n// generated with: generate_defs.exe\n// DO NOT MODIFY\n\npackage pcap\n\nimport \"syscall\"\n\nconst errorBufferSize = 0x100\n\nconst (\n\tpcapErrorNotActivated    = -0x3\n\tpcapErrorActivated       = -0x4\n\tpcapWarningPromisc       = 0x2\n\tpcapErrorNoSuchDevice    = -0x5\n\tpcapErrorDenied          = -0x8\n\tpcapErrorNotUp           = -0x9\n\tpcapError                = -0x1\n\tpcapWarning              = 0x1\n\tpcapDIN                  = 0x1\n\tpcapDOUT                 = 0x2\n\tpcapDINOUT               = 0x0\n\tpcapNetmaskUnknown       = 0xffffffff\n\tpcapTstampPrecisionMicro = 0x0\n\tpcapTstampPrecisionNano  = 0x1\n)\n\ntype timeval struct {\n\tSec  int32\n\tUsec int32\n}\ntype pcapPkthdr struct {\n\tTs     timeval\n\tCaplen uint32\n\tLen    uint32\n}\ntype pcapTPtr uintptr\ntype pcapBpfInstruction struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\ntype pcapBpfProgram struct {\n\tLen       uint32\n\tPad_cgo_0 [4]byte\n\tInsns     *pcapBpfInstruction\n}\ntype pcapStats struct {\n\tRecv   uint32\n\tDrop   uint32\n\tIfdrop uint32\n}\ntype pcapCint int32\ntype pcapIf struct {\n\tNext        *pcapIf\n\tName        *int8\n\tDescription *int8\n\tAddresses   *pcapAddr\n\tFlags       uint32\n\tPad_cgo_0   [4]byte\n}\n\ntype pcapAddr struct {\n\tNext      *pcapAddr\n\tAddr      *syscall.RawSockaddr\n\tNetmask   *syscall.RawSockaddr\n\tBroadaddr *syscall.RawSockaddr\n\tDstaddr   *syscall.RawSockaddr\n}\n"
  },
  {
    "path": "pcap/doc.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n/*\nPackage pcap allows users of gopacket to read packets off the wire or from\npcap files.\n\nThis package is meant to be used with its parent,\nhttp://github.com/google/gopacket, although it can also be used independently\nif you just want to get packet data from the wire.\n\nDepending on libpcap version, os support, or file timestamp resolution,\nnanosecond resolution is used for the internal timestamps. Returned timestamps\nare always scaled to nanosecond resolution due to the usage of time.Time.\nlibpcap must be at least version 1.5 to support nanosecond timestamps. OpenLive\nsupports only microsecond resolution.\n\nReading PCAP Files\n\nThe following code can be used to read in data from a pcap file.\n\n if handle, err := pcap.OpenOffline(\"/path/to/my/file\"); err != nil {\n   panic(err)\n } else {\n   packetSource := gopacket.NewPacketSource(handle, handle.LinkType())\n   for packet := range packetSource.Packets() {\n     handlePacket(packet)  // Do something with a packet here.\n   }\n }\n\nReading Live Packets\n\nThe following code can be used to read in data from a live device, in this case\n\"eth0\". Be aware, that OpenLive only supports microsecond resolution.\n\n if handle, err := pcap.OpenLive(\"eth0\", 1600, true, pcap.BlockForever); err != nil {\n   panic(err)\n } else if err := handle.SetBPFFilter(\"tcp and port 80\"); err != nil {  // optional\n   panic(err)\n } else {\n   packetSource := gopacket.NewPacketSource(handle, handle.LinkType())\n   for packet := range packetSource.Packets() {\n     handlePacket(packet)  // Do something with a packet here.\n   }\n }\n\nInactive Handles\n\nNewer PCAP functionality requires the concept of an 'inactive' PCAP handle.\nInstead of constantly adding new arguments to pcap_open_live, users now call\npcap_create to create a handle, set it up with a bunch of optional function\ncalls, then call pcap_activate to activate it.  This library mirrors that\nmechanism, for those that want to expose/use these new features:\n\n  inactive, err := pcap.NewInactiveHandle(deviceName)\n  if err != nil {\n    log.Fatal(err)\n  }\n  defer inactive.CleanUp()\n\n  // Call various functions on inactive to set it up the way you'd like:\n  if err = inactive.SetTimeout(time.Minute); err != nil {\n    log.Fatal(err)\n  } else if err = inactive.SetTimestampSource(\"foo\"); err != nil {\n    log.Fatal(err)\n  }\n\n  // Finally, create the actual handle by calling Activate:\n  handle, err := inactive.Activate()  // after this, inactive is no longer valid\n  if err != nil {\n    log.Fatal(err)\n  }\n  defer handle.Close()\n\n  // Now use your handle as you see fit.\n\nPCAP Timeouts\n\npcap.OpenLive and pcap.SetTimeout both take timeouts.\nIf you don't care about timeouts, just pass in BlockForever,\nwhich should do what you expect with minimal fuss.\n\nA timeout of 0 is not recommended.  Some platforms, like Macs\n(http://www.manpages.info/macosx/pcap.3.html) say:\n  The read timeout is used to arrange that the read not necessarily return\n  immediately when a packet is seen, but that it wait for some amount of time\n  to allow more packets to arrive and to read multiple packets from the OS\n  kernel in one operation.\nThis means that if you only capture one packet, the kernel might decide to wait\n'timeout' for more packets to batch with it before returning.  A timeout of\n0, then, means 'wait forever for more packets', which is... not good.\n\nTo get around this, we've introduced the following behavior:  if a negative\ntimeout is passed in, we set the positive timeout in the handle, then loop\ninternally in ReadPacketData/ZeroCopyReadPacketData when we see timeout\nerrors.\n\nPCAP File Writing\n\nThis package does not implement PCAP file writing.  However, gopacket/pcapgo\ndoes!  Look there if you'd like to write PCAP files.\n\nNote For Windows Users\n\ngopacket can use winpcap or npcap. If both are installed at the same time,\nnpcap is preferred. Make sure the right windows service is loaded (npcap for npcap\nand npf for winpcap).\n*/\npackage pcap\n"
  },
  {
    "path": "pcap/generate_defs.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build ignore\n\npackage main\n\n// This file generates the godefs needed for the windows version.\n// Rebuild is only necessary if additional libpcap functionality is implemented, or a new arch is implemented in golang.\n// Call with go run generate_windows.go [-I includepath]\n// Needs npcap sdk, go tool cgo, and gofmt to work. Location of npcap includes can be specified with -I\n\nimport (\n\t\"bytes\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\nconst header = `// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// This file contains necessary structs/constants generated from libpcap headers with cgo -godefs\n// generated with: %s\n// DO NOT MODIFY\n\n`\n\nconst source = `\npackage pcap\n\n//#include <pcap.h>\nimport \"C\"\n\nimport \"syscall\" // needed for RawSockaddr\n\nconst errorBufferSize = C.PCAP_ERRBUF_SIZE\n\nconst (\n\tpcapErrorNotActivated    = C.PCAP_ERROR_NOT_ACTIVATED\n\tpcapErrorActivated       = C.PCAP_ERROR_ACTIVATED\n\tpcapWarningPromisc       = C.PCAP_WARNING_PROMISC_NOTSUP\n\tpcapErrorNoSuchDevice    = C.PCAP_ERROR_NO_SUCH_DEVICE\n\tpcapErrorDenied          = C.PCAP_ERROR_PERM_DENIED\n\tpcapErrorNotUp           = C.PCAP_ERROR_IFACE_NOT_UP\n\tpcapError                = C.PCAP_ERROR\n\tpcapWarning              = C.PCAP_WARNING\n\tpcapDIN                  = C.PCAP_D_IN\n\tpcapDOUT                 = C.PCAP_D_OUT\n\tpcapDINOUT               = C.PCAP_D_INOUT\n\tpcapNetmaskUnknown       = C.PCAP_NETMASK_UNKNOWN\n\tpcapTstampPrecisionMicro = C.PCAP_TSTAMP_PRECISION_MICRO\n\tpcapTstampPrecisionNano  = C.PCAP_TSTAMP_PRECISION_NANO\n)\n\ntype timeval C.struct_timeval\ntype pcapPkthdr C.struct_pcap_pkthdr\ntype pcapTPtr uintptr\ntype pcapBpfInstruction C.struct_bpf_insn\ntype pcapBpfProgram C.struct_bpf_program\ntype pcapStats C.struct_pcap_stat\ntype pcapCint C.int\ntype pcapIf C.struct_pcap_if\n// +godefs map struct_sockaddr syscall.RawSockaddr\ntype pcapAddr C.struct_pcap_addr\n`\n\nvar includes = flag.String(\"I\", \"C:\\\\npcap-sdk-1.01\\\\Include\", \"Include path containing libpcap headers\")\n\nfunc main() {\n\tflag.Parse()\n\n\tinfile, err := ioutil.TempFile(\".\", \"defs.*.go\")\n\tif err != nil {\n\t\tlog.Fatal(\"Couldn't create temporary source file: \", err)\n\t}\n\tdefer infile.Close()\n\tdefer os.Remove(infile.Name())\n\n\t_, err = infile.WriteString(source)\n\tif err != nil {\n\t\tlog.Fatalf(\"Couldn't write definitions to temporary file %s: %s\", infile.Name(), err)\n\t}\n\terr = infile.Close()\n\tif err != nil {\n\t\tlog.Fatalf(\"Couldn't close temporary source file %s: %s\", infile.Name(), err)\n\t}\n\n\tarchs := []string{\"386\", \"amd64\"}\n\tfor _, arch := range archs {\n\t\tenv := append(os.Environ(), \"GOARCH=\"+arch)\n\t\tcmd := exec.Command(\"go\", \"tool\", \"cgo\", \"-godefs\", \"--\", \"-I\", *includes, infile.Name())\n\t\tcmd.Env = env\n\t\tcmd.Stderr = os.Stderr\n\t\tvar generated bytes.Buffer\n\t\tcmd.Stdout = &generated\n\t\terr := cmd.Run()\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"Couldn't generated defs for %s: %s\\n\", arch, err)\n\t\t}\n\n\t\tcmd = exec.Command(\"gofmt\")\n\t\tcmd.Env = env\n\t\tcmd.Stderr = os.Stderr\n\t\toutName := fmt.Sprintf(\"defs_windows_%s.go\", arch)\n\t\tout, err := os.Create(outName)\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"Couldn't open file %s: %s\", outName, err)\n\t\t}\n\t\tcmd.Stdout = out\n\t\tin, err := cmd.StdinPipe()\n\t\tif err != nil {\n\t\t\tlog.Fatal(\"Couldn't create input pipe for gofmt: \", err)\n\t\t}\n\t\terr = cmd.Start()\n\t\tif err != nil {\n\t\t\tlog.Fatal(\"Couldn't start gofmt: \", err)\n\t\t}\n\n\t\t_, err = fmt.Fprintf(in, header, strings.Join(append([]string{filepath.Base(os.Args[0])}, os.Args[1:]...), \" \"))\n\t\tif err != nil {\n\t\t\tlog.Fatal(\"Couldn't write header to gofmt: \", err)\n\t\t}\n\n\t\tfor {\n\t\t\tline, err := generated.ReadBytes('\\n')\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// remove godefs comments\n\t\t\tif bytes.HasPrefix(line, []byte(\"//\")) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t_, err = in.Write(line)\n\t\t\tif err != nil {\n\t\t\t\tlog.Fatal(\"Couldn't write line to gofmt: \", err)\n\t\t\t}\n\t\t}\n\t\tin.Close()\n\t\terr = cmd.Wait()\n\t\tif err != nil {\n\t\t\tlog.Fatal(\"gofmt failed: \", err)\n\t\t}\n\t\tout.Close()\n\t}\n}\n"
  },
  {
    "path": "pcap/gopacket_benchmark/benchmark.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// This benchmark reads in file <tempdir>/gopacket_benchmark.pcap and measures\n// the time it takes to decode all packets from that file.  If the file doesn't\n// exist, it's pulled down from a publicly available location.  However, you can\n// feel free to substitute your own file at that location, in which case the\n// benchmark will run on your own data.\n//\n// It's also useful for figuring out which packets may be causing errors.  Pass\n// in the --printErrors flag, and it'll print out error layers for each packet\n// that has them.  This includes any packets that it's just unable to decode,\n// which is a great way to find new protocols to decode, and get test packets to\n// write tests for them.\npackage main\n\nimport (\n\t\"compress/gzip\"\n\t\"encoding/hex\"\n\t\"flag\"\n\t\"fmt\"\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n\t\"github.com/google/gopacket/pcap\"\n\t\"github.com/google/gopacket/tcpassembly\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"os\"\n\t\"runtime\"\n\t\"runtime/pprof\"\n\t\"time\"\n)\n\nvar decodeLazy *bool = flag.Bool(\"lazy\", false, \"If true, use lazy decoding\")\nvar decodeNoCopy *bool = flag.Bool(\"nocopy\", true, \"If true, avoid an extra copy when decoding packets\")\nvar printErrors *bool = flag.Bool(\"printErrors\", false, \"If true, check for and print error layers.\")\nvar printLayers *bool = flag.Bool(\"printLayers\", false, \"If true, print out the layers of each packet\")\nvar repeat *int = flag.Int(\"repeat\", 5, \"Read over the file N times\")\nvar cpuProfile *string = flag.String(\"cpuprofile\", \"\", \"If set, write CPU profile to filename\")\nvar url *string = flag.String(\"url\", \"http://www.ll.mit.edu/mission/communications/cyber/CSTcorpora/ideval/data/1999/training/week1/tuesday/inside.tcpdump.gz\", \"URL to gzip'd pcap file\")\n\ntype BufferPacketSource struct {\n\tindex int\n\tdata  [][]byte\n\tci    []gopacket.CaptureInfo\n}\n\nfunc NewBufferPacketSource(p gopacket.PacketDataSource) *BufferPacketSource {\n\tstart := time.Now()\n\tb := &BufferPacketSource{}\n\tfor {\n\t\tdata, ci, err := p.ReadPacketData()\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t}\n\t\tb.data = append(b.data, data)\n\t\tb.ci = append(b.ci, ci)\n\t}\n\tduration := time.Since(start)\n\tfmt.Printf(\"Reading packet data into memory: %d packets in %v, %v per packet\\n\", len(b.data), duration, duration/time.Duration(len(b.data)))\n\treturn b\n}\n\nfunc (b *BufferPacketSource) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\tif b.index >= len(b.data) {\n\t\terr = io.EOF\n\t\treturn\n\t}\n\tdata = b.data[b.index]\n\tci = b.ci[b.index]\n\tb.index++\n\treturn\n}\n\nfunc (b *BufferPacketSource) Reset() {\n\truntime.GC()\n\tb.index = 0\n}\n\nfunc main() {\n\tflag.Parse()\n\tfilename := os.TempDir() + string(os.PathSeparator) + \"gopacket_benchmark.pcap\"\n\tif _, err := os.Stat(filename); err != nil {\n\t\t// This URL points to a publicly available packet data set from a DARPA\n\t\t// intrusion detection evaluation.  See\n\t\t// http://www.ll.mit.edu/mission/communications/cyber/CSTcorpora/ideval/data/1999/training/week1/index.html\n\t\t// for more details.\n\t\tfmt.Println(\"Local pcap file\", filename, \"doesn't exist, reading from\", *url)\n\t\tif resp, err := http.Get(*url); err != nil {\n\t\t\tpanic(err)\n\t\t} else if out, err := os.Create(filename); err != nil {\n\t\t\tpanic(err)\n\t\t} else if gz, err := gzip.NewReader(resp.Body); err != nil {\n\t\t\tpanic(err)\n\t\t} else if n, err := io.Copy(out, gz); err != nil {\n\t\t\tpanic(err)\n\t\t} else if err := gz.Close(); err != nil {\n\t\t\tpanic(err)\n\t\t} else if err := out.Close(); err != nil {\n\t\t\tpanic(err)\n\t\t} else {\n\t\t\tfmt.Println(\"Successfully read\", n, \"bytes from url, unzipped to local storage\")\n\t\t}\n\t}\n\tfmt.Println(\"Reading file once through to hopefully cache most of it\")\n\tif f, err := os.Open(filename); err != nil {\n\t\tpanic(err)\n\t} else if n, err := io.Copy(ioutil.Discard, f); err != nil {\n\t\tpanic(err)\n\t} else if err := f.Close(); err != nil {\n\t\tpanic(err)\n\t} else {\n\t\tfmt.Println(\"Read in file\", filename, \", total of\", n, \"bytes\")\n\t}\n\tif *cpuProfile != \"\" {\n\t\tif cpu, err := os.Create(*cpuProfile); err != nil {\n\t\t\tpanic(err)\n\t\t} else if err := pprof.StartCPUProfile(cpu); err != nil {\n\t\t\tpanic(err)\n\t\t} else {\n\t\t\tdefer func() {\n\t\t\t\tpprof.StopCPUProfile()\n\t\t\t\tcpu.Close()\n\t\t\t}()\n\t\t}\n\t}\n\tvar packetDataSource *BufferPacketSource\n\tvar packetSource *gopacket.PacketSource\n\tfmt.Printf(\"Opening file %q for read\\n\", filename)\n\tif h, err := pcap.OpenOffline(filename); err != nil {\n\t\tpanic(err)\n\t} else {\n\t\tfmt.Println(\"Reading all packets into memory with BufferPacketSource.\")\n\t\tstart := time.Now()\n\t\tpacketDataSource = NewBufferPacketSource(h)\n\t\tduration := time.Since(start)\n\t\tfmt.Printf(\"Time to read packet data into memory from file: %v\\n\", duration)\n\t\tpacketSource = gopacket.NewPacketSource(packetDataSource, h.LinkType())\n\t\tpacketSource.DecodeOptions.Lazy = *decodeLazy\n\t\tpacketSource.DecodeOptions.NoCopy = *decodeNoCopy\n\t}\n\tfmt.Println()\n\tfor i := 0; i < *repeat; i++ {\n\t\tpacketDataSource.Reset()\n\t\tfmt.Printf(\"Benchmarking decode %d/%d\\n\", i+1, *repeat)\n\t\tbenchmarkPacketDecode(packetSource)\n\t}\n\tfmt.Println()\n\tfor i := 0; i < *repeat; i++ {\n\t\tpacketDataSource.Reset()\n\t\tfmt.Printf(\"Benchmarking decoding layer parser %d/%d\\n\", i+1, *repeat)\n\t\tbenchmarkLayerDecode(packetDataSource, false)\n\t}\n\tfmt.Println()\n\tfor i := 0; i < *repeat; i++ {\n\t\tpacketDataSource.Reset()\n\t\tfmt.Printf(\"Benchmarking decoding layer parser with assembly %d/%d\\n\", i+1, *repeat)\n\t\tbenchmarkLayerDecode(packetDataSource, true)\n\t}\n}\n\nfunc benchmarkPacketDecode(packetSource *gopacket.PacketSource) {\n\tcount, errors := 0, 0\n\tstart := time.Now()\n\tfor packet, err := packetSource.NextPacket(); err != io.EOF; packet, err = packetSource.NextPacket() {\n\t\tif err != nil {\n\t\t\tfmt.Println(\"Error reading in packet:\", err)\n\t\t\tcontinue\n\t\t}\n\t\tcount++\n\t\tvar hasError bool\n\t\tif *printErrors && packet.ErrorLayer() != nil {\n\t\t\tfmt.Println(\"\\n\\n\\nError decoding packet:\", packet.ErrorLayer().Error())\n\t\t\tfmt.Println(hex.Dump(packet.Data()))\n\t\t\tfmt.Printf(\"%#v\\n\", packet.Data())\n\t\t\terrors++\n\t\t\thasError = true\n\t\t}\n\t\tif *printLayers || hasError {\n\t\t\tfmt.Printf(\"\\n=== PACKET %d ===\\n\", count)\n\t\t\tfor _, l := range packet.Layers() {\n\t\t\t\tfmt.Printf(\"--- LAYER %v ---\\n%#v\\n\\n\", l.LayerType(), l)\n\t\t\t}\n\t\t\tfmt.Println()\n\t\t}\n\t}\n\tduration := time.Since(start)\n\tfmt.Printf(\"\\tRead in %v packets in %v, %v per packet\\n\", count, duration, duration/time.Duration(count))\n\tif *printErrors {\n\t\tfmt.Printf(\"%v errors, successfully decoded %.02f%%\\n\", errors, float64(count-errors)*100.0/float64(count))\n\t}\n}\n\ntype streamFactory struct {\n}\n\nfunc (s *streamFactory) New(netFlow, tcpFlow gopacket.Flow) tcpassembly.Stream {\n\treturn s\n}\nfunc (s *streamFactory) Reassembled([]tcpassembly.Reassembly) {\n}\nfunc (s *streamFactory) ReassemblyComplete() {\n}\n\nfunc benchmarkLayerDecode(source *BufferPacketSource, assemble bool) {\n\tvar tcp layers.TCP\n\tvar ip layers.IPv4\n\tvar eth layers.Ethernet\n\tvar udp layers.UDP\n\tvar icmp layers.ICMPv4\n\tvar payload gopacket.Payload\n\tparser := gopacket.NewDecodingLayerParser(\n\t\tlayers.LayerTypeEthernet,\n\t\t&eth, &ip, &icmp, &tcp, &udp, &payload)\n\tpool := tcpassembly.NewStreamPool(&streamFactory{})\n\tassembler := tcpassembly.NewAssembler(pool)\n\tvar decoded []gopacket.LayerType\n\tstart := time.Now()\n\tpackets, decodedlayers, assembled := 0, 0, 0\n\tfor {\n\t\tpackets++\n\t\tdata, ci, err := source.ReadPacketData()\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t} else if err != nil {\n\t\t\tfmt.Println(\"Error reading packet: \", err)\n\t\t\tcontinue\n\t\t}\n\t\terr = parser.DecodeLayers(data, &decoded)\n\t\tfor _, typ := range decoded {\n\t\t\tdecodedlayers++\n\t\t\tif typ == layers.LayerTypeTCP && assemble {\n\t\t\t\tassembled++\n\t\t\t\tassembler.AssembleWithTimestamp(ip.NetworkFlow(), &tcp, ci.Timestamp)\n\t\t\t}\n\t\t}\n\t}\n\tif assemble {\n\t\tassembler.FlushAll()\n\t}\n\tduration := time.Since(start)\n\tfmt.Printf(\"\\tRead in %d packets in %v, decoded %v layers, assembled %v packets: %v per packet\\n\", packets, duration, decodedlayers, assembled, duration/time.Duration(packets))\n}\n"
  },
  {
    "path": "pcap/pcap.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcap\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\n// ErrNotActive is returned if handle is not activated\nconst ErrNotActive = pcapErrorNotActivated\n\n// MaxBpfInstructions is the maximum number of BPF instructions supported (BPF_MAXINSNS),\n// taken from Linux kernel: include/uapi/linux/bpf_common.h\n//\n// https://github.com/torvalds/linux/blob/master/include/uapi/linux/bpf_common.h\nconst MaxBpfInstructions = 4096\n\n// 8 bytes per instruction, max 4096 instructions\nconst bpfInstructionBufferSize = 8 * MaxBpfInstructions\n\n// Handle provides a connection to a pcap handle, allowing users to read packets\n// off the wire (Next), inject packets onto the wire (Inject), and\n// perform a number of other functions to affect and understand packet output.\n//\n// Handles are already pcap_activate'd\ntype Handle struct {\n\t// stop is set to a non-zero value by Handle.Close to signal to\n\t// getNextBufPtrLocked to stop trying to read packets\n\t// This must be the first entry to ensure alignment for sync.atomic\n\tstop uint64\n\t// cptr is the handle for the actual pcap C object.\n\tcptr           pcapTPtr\n\ttimeout        time.Duration\n\tdevice         string\n\tdeviceIndex    int\n\tmu             sync.Mutex\n\tcloseMu        sync.Mutex\n\tnanoSecsFactor int64\n\n\t// Since pointers to these objects are passed into a C function, if\n\t// they're declared locally then the Go compiler thinks they may have\n\t// escaped into C-land, so it allocates them on the heap.  This causes a\n\t// huge memory hit, so to handle that we store them here instead.\n\tpkthdr *pcapPkthdr\n\tbufptr *uint8\n}\n\n// Stats contains statistics on how many packets were handled by a pcap handle,\n// and what was done with those packets.\ntype Stats struct {\n\tPacketsReceived  int\n\tPacketsDropped   int\n\tPacketsIfDropped int\n}\n\n// Interface describes a single network interface on a machine.\ntype Interface struct {\n\tName        string\n\tDescription string\n\tFlags       uint32\n\tAddresses   []InterfaceAddress\n}\n\n// Datalink describes the datalink\ntype Datalink struct {\n\tName        string\n\tDescription string\n}\n\n// InterfaceAddress describes an address associated with an Interface.\n// Currently, it's IPv4/6 specific.\ntype InterfaceAddress struct {\n\tIP        net.IP\n\tNetmask   net.IPMask // Netmask may be nil if we were unable to retrieve it.\n\tBroadaddr net.IP     // Broadcast address for this IP may be nil\n\tP2P       net.IP     // P2P destination address for this IP may be nil\n}\n\n// bpfFilter keeps C.struct_bpf_program separate from BPF.orig which might be a pointer to go memory.\n// This is a workaround for https://github.com/golang/go/issues/32970 which will be fixed in go1.14.\n// (type conversion is in pcap_unix.go pcapOfflineFilter)\ntype bpfFilter struct {\n\tbpf pcapBpfProgram // takes a finalizer, not overriden by outsiders\n}\n\n// BPF is a compiled filter program, useful for offline packet matching.\ntype BPF struct {\n\torig string\n\tbpf  *bpfFilter\n\thdr  pcapPkthdr // allocate on the heap to enable optimizations\n}\n\n// BPFInstruction is a byte encoded structure holding a BPF instruction\ntype BPFInstruction struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\n// BlockForever causes it to block forever waiting for packets, when passed\n// into SetTimeout or OpenLive, while still returning incoming packets to userland relatively\n// quickly.\nconst BlockForever = -time.Millisecond * 10\n\nfunc timeoutMillis(timeout time.Duration) int {\n\t// Flip sign if necessary.  See package docs on timeout for reasoning behind this.\n\tif timeout < 0 {\n\t\ttimeout *= -1\n\t}\n\t// Round up\n\tif timeout != 0 && timeout < time.Millisecond {\n\t\ttimeout = time.Millisecond\n\t}\n\treturn int(timeout / time.Millisecond)\n}\n\n// OpenLive opens a device and returns a *Handle.\n// It takes as arguments the name of the device (\"eth0\"), the maximum size to\n// read for each packet (snaplen), whether to put the interface in promiscuous\n// mode, and a timeout. Warning: this function supports only microsecond timestamps.\n// For nanosecond resolution use an InactiveHandle.\n//\n// See the package documentation for important details regarding 'timeout'.\nfunc OpenLive(device string, snaplen int32, promisc bool, timeout time.Duration) (handle *Handle, _ error) {\n\tvar pro int\n\tif promisc {\n\t\tpro = 1\n\t}\n\n\tp, err := pcapOpenLive(device, int(snaplen), pro, timeoutMillis(timeout))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp.timeout = timeout\n\tp.device = device\n\n\tifc, err := net.InterfaceByName(device)\n\tif err != nil {\n\t\t// The device wasn't found in the OS, but could be \"any\"\n\t\t// Set index to 0\n\t\tp.deviceIndex = 0\n\t} else {\n\t\tp.deviceIndex = ifc.Index\n\t}\n\n\tp.nanoSecsFactor = 1000\n\n\t// Only set the PCAP handle into non-blocking mode if we have a timeout\n\t// greater than zero. If the user wants to block forever, we'll let libpcap\n\t// handle that.\n\tif p.timeout > 0 {\n\t\tif err := p.setNonBlocking(); err != nil {\n\t\t\tp.pcapClose()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn p, nil\n}\n\n// OpenOffline opens a file and returns its contents as a *Handle. Depending on libpcap support and\n// on the timestamp resolution used in the file, nanosecond or microsecond resolution is used\n// internally. All returned timestamps are scaled to nanosecond resolution. Resolution() can be used\n// to query the actual resolution used.\nfunc OpenOffline(file string) (handle *Handle, err error) {\n\thandle, err = openOffline(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tif pcapGetTstampPrecision(handle.cptr) == pcapTstampPrecisionNano {\n\t\thandle.nanoSecsFactor = 1\n\t} else {\n\t\thandle.nanoSecsFactor = 1000\n\t}\n\treturn\n}\n\n// OpenOfflineFile returns contents of input file as a *Handle. Depending on libpcap support and\n// on the timestamp resolution used in the file, nanosecond or microsecond resolution is used\n// internally. All returned timestamps are scaled to nanosecond resolution. Resolution() can be used\n// to query the actual resolution used.\nfunc OpenOfflineFile(file *os.File) (handle *Handle, err error) {\n\thandle, err = openOfflineFile(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tif pcapGetTstampPrecision(handle.cptr) == pcapTstampPrecisionNano {\n\t\thandle.nanoSecsFactor = 1\n\t} else {\n\t\thandle.nanoSecsFactor = 1000\n\t}\n\treturn\n}\n\n// NextError is the return code from a call to Next.\ntype NextError int32\n\n// NextError implements the error interface.\nfunc (n NextError) Error() string {\n\tswitch n {\n\tcase NextErrorOk:\n\t\treturn \"OK\"\n\tcase NextErrorTimeoutExpired:\n\t\treturn \"Timeout Expired\"\n\tcase NextErrorReadError:\n\t\treturn \"Read Error\"\n\tcase NextErrorNoMorePackets:\n\t\treturn \"No More Packets In File\"\n\tcase NextErrorNotActivated:\n\t\treturn \"Not Activated\"\n\t}\n\treturn strconv.Itoa(int(n))\n}\n\n// NextError values.\nconst (\n\tNextErrorOk             NextError = 1\n\tNextErrorTimeoutExpired NextError = 0\n\tNextErrorReadError      NextError = -1\n\t// NextErrorNoMorePackets is returned when reading from a file (OpenOffline) and\n\t// EOF is reached.  When this happens, Next() returns io.EOF instead of this.\n\tNextErrorNoMorePackets NextError = -2\n\tNextErrorNotActivated  NextError = -3\n)\n\n// ReadPacketData returns the next packet read from the pcap handle, along with an error\n// code associated with that packet.  If the packet is read successfully, the\n// returned error is nil.\nfunc (p *Handle) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\tp.mu.Lock()\n\terr = p.getNextBufPtrLocked(&ci)\n\tif err == nil {\n\t\tdata = make([]byte, ci.CaptureLength)\n\t\tcopy(data, (*(*[1 << 30]byte)(unsafe.Pointer(p.bufptr)))[:])\n\t}\n\tp.mu.Unlock()\n\tif err == NextErrorTimeoutExpired {\n\t\truntime.Gosched()\n\t}\n\treturn\n}\n\ntype activateError int\n\nconst (\n\taeNoError      = activateError(0)\n\taeActivated    = activateError(pcapErrorActivated)\n\taePromisc      = activateError(pcapWarningPromisc)\n\taeNoSuchDevice = activateError(pcapErrorNoSuchDevice)\n\taeDenied       = activateError(pcapErrorDenied)\n\taeNotUp        = activateError(pcapErrorNotUp)\n\taeWarning      = activateError(pcapWarning)\n\taeError        = activateError(pcapError)\n)\n\nfunc (a activateError) Error() string {\n\tswitch a {\n\tcase aeNoError:\n\t\treturn \"No Error\"\n\tcase aeActivated:\n\t\treturn \"Already Activated\"\n\tcase aePromisc:\n\t\treturn \"Cannot set as promisc\"\n\tcase aeNoSuchDevice:\n\t\treturn \"No Such Device\"\n\tcase aeDenied:\n\t\treturn \"Permission Denied\"\n\tcase aeNotUp:\n\t\treturn \"Interface Not Up\"\n\tcase aeWarning:\n\t\treturn fmt.Sprintf(\"Warning: %v\", activateErrMsg.Error())\n\tcase aeError:\n\t\treturn fmt.Sprintf(\"Error: %v\", activateErrMsg.Error())\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown activated error: %d\", a)\n\t}\n}\n\n// getNextBufPtrLocked is shared code for ReadPacketData and\n// ZeroCopyReadPacketData.\nfunc (p *Handle) getNextBufPtrLocked(ci *gopacket.CaptureInfo) error {\n\tif !p.isOpen() {\n\t\treturn io.EOF\n\t}\n\n\t// set after we have call waitForPacket for the first time\n\tvar waited bool\n\n\tfor atomic.LoadUint64(&p.stop) == 0 {\n\t\t// try to read a packet if one is immediately available\n\t\tresult := p.pcapNextPacketEx()\n\n\t\tswitch result {\n\t\tcase NextErrorOk:\n\t\t\tsec := p.pkthdr.getSec()\n\t\t\t// convert micros to nanos\n\t\t\tnanos := int64(p.pkthdr.getUsec()) * p.nanoSecsFactor\n\n\t\t\tci.Timestamp = time.Unix(sec, nanos)\n\t\t\tci.CaptureLength = p.pkthdr.getCaplen()\n\t\t\tci.Length = p.pkthdr.getLen()\n\t\t\tci.InterfaceIndex = p.deviceIndex\n\n\t\t\treturn nil\n\t\tcase NextErrorNoMorePackets:\n\t\t\t// no more packets, return EOF rather than libpcap-specific error\n\t\t\treturn io.EOF\n\t\tcase NextErrorTimeoutExpired:\n\t\t\t// we've already waited for a packet and we're supposed to time out\n\t\t\t//\n\t\t\t// we should never actually hit this if we were passed BlockForever\n\t\t\t// since we should block on C.pcap_next_ex until there's a packet\n\t\t\t// to read.\n\t\t\tif waited && p.timeout > 0 {\n\t\t\t\treturn result\n\t\t\t}\n\n\t\t\t// wait for packet before trying again\n\t\t\tp.waitForPacket()\n\t\t\twaited = true\n\t\tdefault:\n\t\t\treturn result\n\t\t}\n\t}\n\n\t// stop must be set\n\treturn io.EOF\n}\n\n// ZeroCopyReadPacketData reads the next packet off the wire, and returns its data.\n// The slice returned by ZeroCopyReadPacketData points to bytes owned by the\n// the Handle.  Each call to ZeroCopyReadPacketData invalidates any data previously\n// returned by ZeroCopyReadPacketData.  Care must be taken not to keep pointers\n// to old bytes when using ZeroCopyReadPacketData... if you need to keep data past\n// the next time you call ZeroCopyReadPacketData, use ReadPacketData, which copies\n// the bytes into a new buffer for you.\n//  data1, _, _ := handle.ZeroCopyReadPacketData()\n//  // do everything you want with data1 here, copying bytes out of it if you'd like to keep them around.\n//  data2, _, _ := handle.ZeroCopyReadPacketData()  // invalidates bytes in data1\nfunc (p *Handle) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\tp.mu.Lock()\n\terr = p.getNextBufPtrLocked(&ci)\n\tif err == nil {\n\t\tslice := (*reflect.SliceHeader)(unsafe.Pointer(&data))\n\t\tslice.Data = uintptr(unsafe.Pointer(p.bufptr))\n\t\tslice.Len = ci.CaptureLength\n\t\tslice.Cap = ci.CaptureLength\n\t}\n\tp.mu.Unlock()\n\tif err == NextErrorTimeoutExpired {\n\t\truntime.Gosched()\n\t}\n\treturn\n}\n\n// Close closes the underlying pcap handle.\nfunc (p *Handle) Close() {\n\tp.closeMu.Lock()\n\tdefer p.closeMu.Unlock()\n\n\tif !p.isOpen() {\n\t\treturn\n\t}\n\n\tatomic.StoreUint64(&p.stop, 1)\n\n\t// wait for packet reader to stop\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\n\tp.pcapClose()\n}\n\n// Error returns the current error associated with a pcap handle (pcap_geterr).\nfunc (p *Handle) Error() error {\n\treturn p.pcapGeterr()\n}\n\n// Stats returns statistics on the underlying pcap handle.\nfunc (p *Handle) Stats() (stat *Stats, err error) {\n\treturn p.pcapStats()\n}\n\n// ListDataLinks obtains a list of all possible data link types supported for an interface.\nfunc (p *Handle) ListDataLinks() (datalinks []Datalink, err error) {\n\treturn p.pcapListDatalinks()\n}\n\n// compileBPFFilter always returns an allocated C.struct_bpf_program\n// It is the callers responsibility to free the memory again, e.g.\n//\n//    C.pcap_freecode(&bpf)\n//\nfunc (p *Handle) compileBPFFilter(expr string) (pcapBpfProgram, error) {\n\tvar maskp = uint32(pcapNetmaskUnknown)\n\n\t// Only do the lookup on network interfaces.\n\t// No device indicates we're handling a pcap file.\n\tif len(p.device) > 0 {\n\t\tvar err error\n\t\t_, maskp, err = pcapLookupnet(p.device)\n\t\tif err != nil {\n\t\t\t// We can't lookup the network, but that could be because the interface\n\t\t\t// doesn't have an IPv4.\n\t\t\tmaskp = uint32(pcapNetmaskUnknown)\n\t\t}\n\t}\n\n\treturn p.pcapCompile(expr, maskp)\n}\n\n// CompileBPFFilter compiles and returns a BPF filter with given a link type and capture length.\nfunc CompileBPFFilter(linkType layers.LinkType, captureLength int, expr string) ([]BPFInstruction, error) {\n\th, err := pcapOpenDead(linkType, captureLength)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer h.Close()\n\treturn h.CompileBPFFilter(expr)\n}\n\n// CompileBPFFilter compiles and returns a BPF filter for the pcap handle.\nfunc (p *Handle) CompileBPFFilter(expr string) ([]BPFInstruction, error) {\n\tbpf, err := p.compileBPFFilter(expr)\n\tdefer bpf.free()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn bpf.toBPFInstruction(), nil\n}\n\n// SetBPFFilter compiles and sets a BPF filter for the pcap handle.\nfunc (p *Handle) SetBPFFilter(expr string) (err error) {\n\tbpf, err := p.compileBPFFilter(expr)\n\tdefer bpf.free()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn p.pcapSetfilter(bpf)\n}\n\n// SetBPFInstructionFilter may be used to apply a filter in BPF asm byte code format.\n//\n// Simplest way to generate BPF asm byte code is with tcpdump:\n//     tcpdump -dd 'udp'\n//\n// The output may be used directly to add a filter, e.g.:\n//     bpfInstructions := []pcap.BpfInstruction{\n//\t\t\t{0x28, 0, 0, 0x0000000c},\n//\t\t\t{0x15, 0, 9, 0x00000800},\n//\t\t\t{0x30, 0, 0, 0x00000017},\n//\t\t\t{0x15, 0, 7, 0x00000006},\n//\t\t\t{0x28, 0, 0, 0x00000014},\n//\t\t\t{0x45, 5, 0, 0x00001fff},\n//\t\t\t{0xb1, 0, 0, 0x0000000e},\n//\t\t\t{0x50, 0, 0, 0x0000001b},\n//\t\t\t{0x54, 0, 0, 0x00000012},\n//\t\t\t{0x15, 0, 1, 0x00000012},\n//\t\t\t{0x6, 0, 0, 0x0000ffff},\n//\t\t\t{0x6, 0, 0, 0x00000000},\n//\t\t}\n//\n// An other posibility is to write the bpf code in bpf asm.\n// Documentation: https://www.kernel.org/doc/Documentation/networking/filter.txt\n//\n// To compile the code use bpf_asm from\n// https://github.com/torvalds/linux/tree/master/tools/net\n//\n// The following command may be used to convert bpf_asm output to c/go struct, usable for SetBPFFilterByte:\n// bpf_asm -c tcp.bpf\nfunc (p *Handle) SetBPFInstructionFilter(bpfInstructions []BPFInstruction) (err error) {\n\tbpf, err := bpfInstructionFilter(bpfInstructions)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer bpf.free()\n\n\treturn p.pcapSetfilter(bpf)\n}\n\nfunc bpfInstructionFilter(bpfInstructions []BPFInstruction) (bpf pcapBpfProgram, err error) {\n\tif len(bpfInstructions) < 1 {\n\t\treturn bpf, errors.New(\"bpfInstructions must not be empty\")\n\t}\n\n\tif len(bpfInstructions) > MaxBpfInstructions {\n\t\treturn bpf, fmt.Errorf(\"bpfInstructions must not be larger than %d\", MaxBpfInstructions)\n\t}\n\n\treturn pcapBpfProgramFromInstructions(bpfInstructions), nil\n}\n\n// NewBPF compiles the given string into a new filter program.\n//\n// BPF filters need to be created from activated handles, because they need to\n// know the underlying link type to correctly compile their offsets.\nfunc (p *Handle) NewBPF(expr string) (*BPF, error) {\n\tbpf := &BPF{orig: expr, bpf: new(bpfFilter)}\n\n\tvar err error\n\tbpf.bpf.bpf, err = p.pcapCompile(expr, pcapNetmaskUnknown)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\truntime.SetFinalizer(bpf, destroyBPF)\n\treturn bpf, nil\n}\n\n// NewBPF allows to create a BPF without requiring an existing handle.\n// This allows to match packets obtained from a-non GoPacket capture source\n// to be matched.\n//\n// \tbuf := make([]byte, MaxFrameSize)\n// \tbpfi, _ := pcap.NewBPF(layers.LinkTypeEthernet, MaxFrameSize, \"icmp\")\n// \tn, _ := someIO.Read(buf)\n// \tci := gopacket.CaptureInfo{CaptureLength: n, Length: n}\n// \tif bpfi.Matches(ci, buf) {\n// \t\tdoSomething()\n// \t}\nfunc NewBPF(linkType layers.LinkType, captureLength int, expr string) (*BPF, error) {\n\th, err := pcapOpenDead(linkType, captureLength)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer h.Close()\n\treturn h.NewBPF(expr)\n}\n\n// NewBPFInstructionFilter sets the given BPFInstructions as new filter program.\n//\n// More details see func SetBPFInstructionFilter\n//\n// BPF filters need to be created from activated handles, because they need to\n// know the underlying link type to correctly compile their offsets.\nfunc (p *Handle) NewBPFInstructionFilter(bpfInstructions []BPFInstruction) (*BPF, error) {\n\tvar err error\n\tbpf := &BPF{orig: \"BPF Instruction Filter\", bpf: new(bpfFilter)}\n\n\tbpf.bpf.bpf, err = bpfInstructionFilter(bpfInstructions)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\truntime.SetFinalizer(bpf, destroyBPF)\n\treturn bpf, nil\n}\nfunc destroyBPF(bpf *BPF) {\n\tbpf.bpf.bpf.free()\n}\n\n// String returns the original string this BPF filter was compiled from.\nfunc (b *BPF) String() string {\n\treturn b.orig\n}\n\n// Matches returns true if the given packet data matches this filter.\nfunc (b *BPF) Matches(ci gopacket.CaptureInfo, data []byte) bool {\n\treturn b.pcapOfflineFilter(ci, data)\n}\n\n// Version returns pcap_lib_version.\nfunc Version() string {\n\treturn pcapLibVersion()\n}\n\n// LinkType returns pcap_datalink, as a layers.LinkType.\nfunc (p *Handle) LinkType() layers.LinkType {\n\treturn p.pcapDatalink()\n}\n\n// SetLinkType calls pcap_set_datalink on the pcap handle.\nfunc (p *Handle) SetLinkType(dlt layers.LinkType) error {\n\treturn p.pcapSetDatalink(dlt)\n}\n\n// DatalinkValToName returns pcap_datalink_val_to_name as string\nfunc DatalinkValToName(dlt int) string {\n\treturn pcapDatalinkValToName(dlt)\n}\n\n// DatalinkValToDescription returns pcap_datalink_val_to_description as string\nfunc DatalinkValToDescription(dlt int) string {\n\treturn pcapDatalinkValToDescription(dlt)\n}\n\n// DatalinkNameToVal returns pcap_datalink_name_to_val as int\nfunc DatalinkNameToVal(name string) int {\n\treturn pcapDatalinkNameToVal(name)\n}\n\n// FindAllDevs attempts to enumerate all interfaces on the current machine.\nfunc FindAllDevs() (ifs []Interface, err error) {\n\talldevsp, err := pcapFindAllDevs()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer alldevsp.free()\n\n\tfor alldevsp.next() {\n\t\tvar iface Interface\n\t\tiface.Name = alldevsp.name()\n\t\tiface.Description = alldevsp.description()\n\t\tiface.Addresses = findalladdresses(alldevsp.addresses())\n\t\tiface.Flags = alldevsp.flags()\n\t\tifs = append(ifs, iface)\n\t}\n\treturn\n}\n\nfunc findalladdresses(addresses pcapAddresses) (retval []InterfaceAddress) {\n\t// TODO - make it support more than IPv4 and IPv6?\n\tretval = make([]InterfaceAddress, 0, 1)\n\tfor addresses.next() {\n\t\t// Strangely, it appears that in some cases, we get a pcap address back from\n\t\t// pcap_findalldevs with a nil .addr.  It appears that we can skip over\n\t\t// these.\n\t\tif addresses.addr() == nil {\n\t\t\tcontinue\n\t\t}\n\t\tvar a InterfaceAddress\n\t\tvar err error\n\t\tif a.IP, err = sockaddrToIP(addresses.addr()); err != nil {\n\t\t\tcontinue\n\t\t}\n\t\t// To be safe, we'll also check for netmask.\n\t\tif addresses.netmask() == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif a.Netmask, err = sockaddrToIP(addresses.netmask()); err != nil {\n\t\t\t// If we got an IP address but we can't get a netmask, just return the IP\n\t\t\t// address.\n\t\t\ta.Netmask = nil\n\t\t}\n\t\tif a.Broadaddr, err = sockaddrToIP(addresses.broadaddr()); err != nil {\n\t\t\ta.Broadaddr = nil\n\t\t}\n\t\tif a.P2P, err = sockaddrToIP(addresses.dstaddr()); err != nil {\n\t\t\ta.P2P = nil\n\t\t}\n\t\tretval = append(retval, a)\n\t}\n\treturn\n}\n\nfunc sockaddrToIP(rsa *syscall.RawSockaddr) (IP []byte, err error) {\n\tif rsa == nil {\n\t\terr = errors.New(\"Value not set\")\n\t\treturn\n\t}\n\tswitch rsa.Family {\n\tcase syscall.AF_INET:\n\t\tpp := (*syscall.RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\tIP = make([]byte, 4)\n\t\tfor i := 0; i < len(IP); i++ {\n\t\t\tIP[i] = pp.Addr[i]\n\t\t}\n\t\treturn\n\tcase syscall.AF_INET6:\n\t\tpp := (*syscall.RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\tIP = make([]byte, 16)\n\t\tfor i := 0; i < len(IP); i++ {\n\t\t\tIP[i] = pp.Addr[i]\n\t\t}\n\t\treturn\n\t}\n\terr = errors.New(\"Unsupported address type\")\n\treturn\n}\n\n// WritePacketData calls pcap_sendpacket, injecting the given data into the pcap handle.\nfunc (p *Handle) WritePacketData(data []byte) (err error) {\n\treturn p.pcapSendpacket(data)\n}\n\n// Direction is used by Handle.SetDirection.\ntype Direction uint8\n\n// Direction values for Handle.SetDirection.\nconst (\n\tDirectionIn    = Direction(pcapDIN)\n\tDirectionOut   = Direction(pcapDOUT)\n\tDirectionInOut = Direction(pcapDINOUT)\n)\n\n// SetDirection sets the direction for which packets will be captured.\nfunc (p *Handle) SetDirection(direction Direction) error {\n\tif direction != DirectionIn && direction != DirectionOut && direction != DirectionInOut {\n\t\treturn fmt.Errorf(\"Invalid direction: %v\", direction)\n\t}\n\treturn p.pcapSetdirection(direction)\n}\n\n// SnapLen returns the snapshot length\nfunc (p *Handle) SnapLen() int {\n\treturn p.pcapSnapshot()\n}\n\n// Resolution returns the timestamp resolution of acquired timestamps before scaling to NanosecondTimestampResolution.\nfunc (p *Handle) Resolution() gopacket.TimestampResolution {\n\tif p.nanoSecsFactor == 1 {\n\t\treturn gopacket.TimestampResolutionMicrosecond\n\t}\n\treturn gopacket.TimestampResolutionNanosecond\n}\n\n// TimestampSource tells PCAP which type of timestamp to use for packets.\ntype TimestampSource int\n\n// String returns the timestamp type as a human-readable string.\nfunc (t TimestampSource) String() string {\n\treturn t.pcapTstampTypeValToName()\n}\n\n// TimestampSourceFromString translates a string into a timestamp type, case\n// insensitive.\nfunc TimestampSourceFromString(s string) (TimestampSource, error) {\n\treturn pcapTstampTypeNameToVal(s)\n}\n\n// InactiveHandle allows you to call pre-pcap_activate functions on your pcap\n// handle to set it up just the way you'd like.\ntype InactiveHandle struct {\n\t// cptr is the handle for the actual pcap C object.\n\tcptr        pcapTPtr\n\tdevice      string\n\tdeviceIndex int\n\ttimeout     time.Duration\n}\n\n// holds the err messoge in case activation returned a Warning\nvar activateErrMsg error\n\n// Error returns the current error associated with a pcap handle (pcap_geterr).\nfunc (p *InactiveHandle) Error() error {\n\treturn p.pcapGeterr()\n}\n\n// Activate activates the handle.  The current InactiveHandle becomes invalid\n// and all future function calls on it will fail.\nfunc (p *InactiveHandle) Activate() (*Handle, error) {\n\t// ignore error with set_tstamp_precision, since the actual precision is queried later anyway\n\tpcapSetTstampPrecision(p.cptr, pcapTstampPrecisionNano)\n\thandle, err := p.pcapActivate()\n\tif err != aeNoError {\n\t\tif err == aeWarning || err == aeError {\n\t\t\tactivateErrMsg = p.Error()\n\t\t}\n\t\treturn nil, err\n\t}\n\thandle.timeout = p.timeout\n\tif p.timeout > 0 {\n\t\tif err := handle.setNonBlocking(); err != nil {\n\t\t\thandle.pcapClose()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\thandle.device = p.device\n\thandle.deviceIndex = p.deviceIndex\n\tif pcapGetTstampPrecision(handle.cptr) == pcapTstampPrecisionNano {\n\t\thandle.nanoSecsFactor = 1\n\t} else {\n\t\thandle.nanoSecsFactor = 1000\n\t}\n\treturn handle, nil\n}\n\n// CleanUp cleans up any stuff left over from a successful or failed building\n// of a handle.\nfunc (p *InactiveHandle) CleanUp() {\n\tp.pcapClose()\n}\n\n// NewInactiveHandle creates a new InactiveHandle, which wraps an un-activated PCAP handle.\n// Callers of NewInactiveHandle should immediately defer 'CleanUp', as in:\n//   inactive := NewInactiveHandle(\"eth0\")\n//   defer inactive.CleanUp()\nfunc NewInactiveHandle(device string) (*InactiveHandle, error) {\n\t// Try to get the interface index, but iy could be something like \"any\"\n\t// in which case use 0, which doesn't exist in nature\n\tdeviceIndex := 0\n\tifc, err := net.InterfaceByName(device)\n\tif err == nil {\n\t\tdeviceIndex = ifc.Index\n\t}\n\n\t// This copies a bunch of the pcap_open_live implementation from pcap.c:\n\thandle, err := pcapCreate(device)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\thandle.device = device\n\thandle.deviceIndex = deviceIndex\n\treturn handle, nil\n}\n\n// SetSnapLen sets the snap length (max bytes per packet to capture).\nfunc (p *InactiveHandle) SetSnapLen(snaplen int) error {\n\treturn p.pcapSetSnaplen(snaplen)\n}\n\n// SetPromisc sets the handle to either be promiscuous (capture packets\n// unrelated to this host) or not.\nfunc (p *InactiveHandle) SetPromisc(promisc bool) error {\n\treturn p.pcapSetPromisc(promisc)\n}\n\n// SetTimeout sets the read timeout for the handle.\n//\n// See the package documentation for important details regarding 'timeout'.\nfunc (p *InactiveHandle) SetTimeout(timeout time.Duration) error {\n\terr := p.pcapSetTimeout(timeout)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.timeout = timeout\n\treturn nil\n}\n\n// SupportedTimestamps returns a list of supported timstamp types for this\n// handle.\nfunc (p *InactiveHandle) SupportedTimestamps() (out []TimestampSource) {\n\treturn p.pcapListTstampTypes()\n}\n\n// SetTimestampSource sets the type of timestamp generator PCAP uses when\n// attaching timestamps to packets.\nfunc (p *InactiveHandle) SetTimestampSource(t TimestampSource) error {\n\treturn p.pcapSetTstampType(t)\n}\n\n// CannotSetRFMon is returned by SetRFMon if the handle does not allow\n// setting RFMon because pcap_can_set_rfmon returns 0.\nvar CannotSetRFMon = errors.New(\"Cannot set rfmon for this handle\")\n\n// SetRFMon turns on radio monitoring mode, similar to promiscuous mode but for\n// wireless networks.  If this mode is enabled, the interface will not need to\n// associate with an access point before it can receive traffic.\nfunc (p *InactiveHandle) SetRFMon(monitor bool) error {\n\treturn p.pcapSetRfmon(monitor)\n}\n\n// SetBufferSize sets the buffer size (in bytes) of the handle.\nfunc (p *InactiveHandle) SetBufferSize(bufferSize int) error {\n\treturn p.pcapSetBufferSize(bufferSize)\n}\n\n// SetImmediateMode sets (or unsets) the immediate mode of the\n// handle. In immediate mode, packets are delivered to the application\n// as soon as they arrive.  In other words, this overrides SetTimeout.\nfunc (p *InactiveHandle) SetImmediateMode(mode bool) error {\n\treturn p.pcapSetImmediateMode(mode)\n}\n"
  },
  {
    "path": "pcap/pcap_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcap\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\nfunc TestPcapNonexistentFile(t *testing.T) {\n\thandle, err := OpenOffline(\"/path/to/nonexistent/file\")\n\tif err == nil {\n\t\tt.Error(\"No error returned for nonexistent file open\")\n\t} else {\n\t\tt.Logf(\"Error returned for nonexistent file: %v\", err)\n\t}\n\tif handle != nil {\n\t\tt.Error(\"Non-nil handle returned for nonexistent file open\")\n\t}\n}\n\nfunc TestPcapFileRead(t *testing.T) {\n\tinvalidData := []byte{\n\t\t0xAB, 0xAD, 0x1D, 0xEA,\n\t}\n\n\tinvalidPcap, err := ioutil.TempFile(\"\", \"invalid.pcap\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tinvalidPcap.Close() // if the file is still open later, the invalid test fails with permission denied on windows\n\tdefer os.Remove(invalidPcap.Name())\n\n\terr = ioutil.WriteFile(invalidPcap.Name(), invalidData, 0644)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tfor _, file := range []struct {\n\t\tfilename       string\n\t\tnum            int\n\t\texpectedLayers []gopacket.LayerType\n\t\terr            string\n\t}{\n\t\t{filename: \"test_loopback.pcap\",\n\t\t\tnum: 24,\n\t\t\texpectedLayers: []gopacket.LayerType{\n\t\t\t\tlayers.LayerTypeLoopback,\n\t\t\t\tlayers.LayerTypeIPv6,\n\t\t\t\tlayers.LayerTypeTCP,\n\t\t\t},\n\t\t},\n\t\t{filename: \"test_ethernet.pcap\",\n\t\t\tnum: 10,\n\t\t\texpectedLayers: []gopacket.LayerType{\n\t\t\t\tlayers.LayerTypeEthernet,\n\t\t\t\tlayers.LayerTypeIPv4,\n\t\t\t\tlayers.LayerTypeTCP,\n\t\t\t},\n\t\t},\n\t\t{filename: \"test_dns.pcap\",\n\t\t\tnum: 10,\n\t\t\texpectedLayers: []gopacket.LayerType{\n\t\t\t\tlayers.LayerTypeEthernet,\n\t\t\t\tlayers.LayerTypeIPv4,\n\t\t\t\tlayers.LayerTypeUDP,\n\t\t\t\tlayers.LayerTypeDNS,\n\t\t\t},\n\t\t},\n\t\t{filename: invalidPcap.Name(),\n\t\t\tnum: 0,\n\t\t\terr: \"unknown file format\",\n\t\t},\n\t} {\n\t\tt.Logf(\"\\n\\n\\n\\nProcessing file %s\\n\\n\\n\\n\", file.filename)\n\n\t\tpackets := []gopacket.Packet{}\n\t\tif handle, err := OpenOffline(file.filename); err != nil {\n\t\t\tif file.err != \"\" {\n\t\t\t\tif err.Error() != file.err {\n\t\t\t\t\tt.Errorf(\"expected message %q; got %q\", file.err, err.Error())\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\t} else {\n\t\t\tif file.err != \"\" {\n\t\t\t\tt.Fatalf(\"Expected error, got none\")\n\t\t\t}\n\t\t\tpacketSource := gopacket.NewPacketSource(handle, handle.LinkType())\n\t\t\tfor packet := range packetSource.Packets() {\n\t\t\t\tpackets = append(packets, packet)\n\t\t\t}\n\t\t}\n\t\tif len(packets) != file.num {\n\t\t\tt.Fatal(\"Incorrect number of packets, want\", file.num, \"got\", len(packets))\n\t\t}\n\t\tfor i, p := range packets {\n\t\t\tt.Log(p.Dump())\n\t\t\tfor _, layertype := range file.expectedLayers {\n\t\t\t\tif p.Layer(layertype) == nil {\n\t\t\t\t\tt.Fatal(\"Packet\", i, \"has no layer type\\n%s\", layertype, p.Dump())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestBPF(t *testing.T) {\n\thandle, err := OpenOffline(\"test_ethernet.pcap\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tfor _, expected := range []struct {\n\t\texpr   string\n\t\tError  bool\n\t\tResult bool\n\t}{\n\t\t{\"foobar\", true, false},\n\t\t{\"tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)\", false, true},\n\t\t{\"tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-ack\", false, true},\n\t\t{\"udp\", false, false},\n\t\t{string([]byte(\"udp\")), false, false}, // test for #664\n\t} {\n\t\tdata, ci, err := handle.ReadPacketData()\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tt.Log(\"Testing filter\", expected.expr)\n\t\tif bpf, err := handle.NewBPF(expected.expr); err != nil {\n\t\t\tif !expected.Error {\n\t\t\t\tt.Error(err, \"while compiling filter was unexpected\")\n\t\t\t}\n\t\t} else if expected.Error {\n\t\t\tt.Error(\"expected error but didn't see one\")\n\t\t} else if matches := bpf.Matches(ci, data); matches != expected.Result {\n\t\t\tt.Error(\"Filter result was\", matches, \"but should be\", expected.Result)\n\t\t}\n\t}\n}\n\nfunc TestBPFInstruction(t *testing.T) {\n\thandle, err := OpenOffline(\"test_ethernet.pcap\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tcntr := 0\n\toversizedBpfInstructionBuffer := [MaxBpfInstructions + 1]BPFInstruction{}\n\n\tfor _, expected := range []struct {\n\t\tFilter         string\n\t\tBpfInstruction []BPFInstruction\n\t\tError          bool\n\t\tResult         bool\n\t}{\n\t\t// {\"foobar\", true, false},\n\t\t{\"foobar\", []BPFInstruction{}, true, false},\n\n\t\t// tcpdump -dd 'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)'\n\t\t{\"tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)\",\n\t\t\t[]BPFInstruction{\n\t\t\t\t{0x28, 0, 0, 0x0000000c},\n\t\t\t\t{0x15, 0, 9, 0x00000800},\n\t\t\t\t{0x30, 0, 0, 0x00000017},\n\t\t\t\t{0x15, 0, 7, 0x00000006},\n\t\t\t\t{0x28, 0, 0, 0x00000014},\n\t\t\t\t{0x45, 5, 0, 0x00001fff},\n\t\t\t\t{0xb1, 0, 0, 0x0000000e},\n\t\t\t\t{0x50, 0, 0, 0x0000001b},\n\t\t\t\t{0x54, 0, 0, 0x00000012},\n\t\t\t\t{0x15, 0, 1, 0x00000012},\n\t\t\t\t{0x6, 0, 0, 0x0000ffff},\n\t\t\t\t{0x6, 0, 0, 0x00000000},\n\t\t\t}, false, true},\n\n\t\t// tcpdump -dd 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-ack'\n\t\t{\"tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-ack\",\n\t\t\t[]BPFInstruction{\n\t\t\t\t{0x28, 0, 0, 0x0000000c},\n\t\t\t\t{0x15, 0, 9, 0x00000800},\n\t\t\t\t{0x30, 0, 0, 0x00000017},\n\t\t\t\t{0x15, 0, 7, 0x00000006},\n\t\t\t\t{0x28, 0, 0, 0x00000014},\n\t\t\t\t{0x45, 5, 0, 0x00001fff},\n\t\t\t\t{0xb1, 0, 0, 0x0000000e},\n\t\t\t\t{0x50, 0, 0, 0x0000001b},\n\t\t\t\t{0x54, 0, 0, 0x00000012},\n\t\t\t\t{0x15, 0, 1, 0x00000010},\n\t\t\t\t{0x6, 0, 0, 0x0000ffff},\n\t\t\t\t{0x6, 0, 0, 0x00000000},\n\t\t\t}, false, true},\n\n\t\t// tcpdump -dd 'udp'\n\t\t{\"udp\",\n\t\t\t[]BPFInstruction{\n\t\t\t\t{0x28, 0, 0, 0x0000000c},\n\t\t\t\t{0x15, 0, 5, 0x000086dd},\n\t\t\t\t{0x30, 0, 0, 0x00000014},\n\t\t\t\t{0x15, 6, 0, 0x00000011},\n\t\t\t\t{0x15, 0, 6, 0x0000002c},\n\t\t\t\t{0x30, 0, 0, 0x00000036},\n\t\t\t\t{0x15, 3, 4, 0x00000011},\n\t\t\t\t{0x15, 0, 3, 0x00000800},\n\t\t\t\t{0x30, 0, 0, 0x00000017},\n\t\t\t\t{0x15, 0, 1, 0x00000011},\n\t\t\t\t{0x6, 0, 0, 0x0000ffff},\n\t\t\t\t{0x6, 0, 0, 0x00000000},\n\t\t\t}, false, false},\n\n\t\t{\"\", oversizedBpfInstructionBuffer[:], true, false},\n\t} {\n\t\tcntr++\n\t\tdata, ci, err := handle.ReadPacketData()\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\n\t\tt.Log(\"Testing BpfInstruction filter\", cntr)\n\t\tif bpf, err := handle.NewBPFInstructionFilter(expected.BpfInstruction); err != nil {\n\t\t\tif !expected.Error {\n\t\t\t\tt.Error(err, \"while compiling filter was unexpected\")\n\t\t\t}\n\t\t} else if expected.Error {\n\t\t\tt.Error(\"expected error but didn't see one\")\n\t\t} else if matches := bpf.Matches(ci, data); matches != expected.Result {\n\t\t\tt.Error(\"Filter result was\", matches, \"but should be\", expected.Result)\n\t\t}\n\n\t\tif expected.Filter != \"\" {\n\t\t\tt.Log(\"Testing dead bpf filter\", cntr)\n\t\t\tif bpf, err := CompileBPFFilter(layers.LinkTypeEthernet, 65535, expected.Filter); err != nil {\n\t\t\t\tif !expected.Error {\n\t\t\t\t\tt.Error(err, \"while compiling filter was unexpected\")\n\t\t\t\t}\n\t\t\t} else if expected.Error {\n\t\t\t\tt.Error(\"expected error but didn't see one\")\n\t\t\t} else {\n\t\t\t\tif len(bpf) != len(expected.BpfInstruction) {\n\t\t\t\t\tt.Errorf(\"expected %d instructions, got %d\", len(expected.BpfInstruction), len(bpf))\n\t\t\t\t}\n\t\t\t\tfor i := 0; i < len(bpf); i++ {\n\t\t\t\t\tif bpf[i] != expected.BpfInstruction[i] {\n\t\t\t\t\t\tt.Errorf(\"expected instruction %d = %d, got %d\", i, expected.BpfInstruction[i], bpf[i])\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc ExampleBPF() {\n\thandle, err := OpenOffline(\"test_ethernet.pcap\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tsynack, err := handle.NewBPF(\"tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tsyn, err := handle.NewBPF(\"tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfor {\n\t\tdata, ci, err := handle.ReadPacketData()\n\t\tswitch {\n\t\tcase err == io.EOF:\n\t\t\treturn\n\t\tcase err != nil:\n\t\t\tlog.Fatal(err)\n\t\tcase synack.Matches(ci, data):\n\t\t\tfmt.Println(\"SYN/ACK packet\")\n\t\tcase syn.Matches(ci, data):\n\t\t\tfmt.Println(\"SYN packet\")\n\t\tdefault:\n\t\t\tfmt.Println(\"SYN flag not set\")\n\t\t}\n\t}\n\t// Output:\n\t// SYN packet\n\t// SYN/ACK packet\n\t// SYN flag not set\n\t// SYN flag not set\n\t// SYN flag not set\n\t// SYN flag not set\n\t// SYN flag not set\n\t// SYN flag not set\n\t// SYN flag not set\n\t// SYN flag not set\n}\n"
  },
  {
    "path": "pcap/pcap_tester.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build ignore\n\n// This binary tests that PCAP packet capture is working correctly by issuing\n// HTTP requests, then making sure we actually capture data off the wire.\npackage main\n\nimport (\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/google/gopacket/pcap\"\n)\n\nvar mode = flag.String(\"mode\", \"basic\", \"One of: basic,filtered,timestamp\")\n\nfunc generatePackets() {\n\tif resp, err := http.Get(\"http://code.google.com\"); err != nil {\n\t\tlog.Printf(\"Could not get HTTP: %v\", err)\n\t} else {\n\t\tresp.Body.Close()\n\t}\n}\n\nfunc main() {\n\tflag.Parse()\n\tifaces, err := pcap.FindAllDevs()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfor _, iface := range ifaces {\n\t\tlog.Printf(\"Trying capture on %q\", iface.Name)\n\t\tif err := tryCapture(iface); err != nil {\n\t\t\tlog.Printf(\"Error capturing on %q: %v\", iface.Name, err)\n\t\t} else {\n\t\t\tlog.Printf(\"Successfully captured on %q\", iface.Name)\n\t\t\treturn\n\t\t}\n\t}\n\tos.Exit(1)\n}\n\nfunc tryCapture(iface pcap.Interface) error {\n\tif iface.Name[:2] == \"lo\" {\n\t\treturn errors.New(\"skipping loopback\")\n\t}\n\tvar h *pcap.Handle\n\tvar err error\n\tswitch *mode {\n\tcase \"basic\":\n\t\th, err = pcap.OpenLive(iface.Name, 65536, false, time.Second*3)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"openlive: %v\", err)\n\t\t}\n\t\tdefer h.Close()\n\tcase \"filtered\":\n\t\th, err = pcap.OpenLive(iface.Name, 65536, false, time.Second*3)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"openlive: %v\", err)\n\t\t}\n\t\tdefer h.Close()\n\t\tif err := h.SetBPFFilter(\"port 80 or port 443\"); err != nil {\n\t\t\treturn fmt.Errorf(\"setbpf: %v\", err)\n\t\t}\n\tcase \"timestamp\":\n\t\tu, err := pcap.NewInactiveHandle(iface.Name)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer u.CleanUp()\n\t\tif err = u.SetSnapLen(65536); err != nil {\n\t\t\treturn err\n\t\t} else if err = u.SetPromisc(false); err != nil {\n\t\t\treturn err\n\t\t} else if err = u.SetTimeout(time.Second * 3); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsources := u.SupportedTimestamps()\n\t\tif len(sources) == 0 {\n\t\t\treturn errors.New(\"no supported timestamp sources\")\n\t\t} else if err := u.SetTimestampSource(sources[0]); err != nil {\n\t\t\treturn fmt.Errorf(\"settimestampsource(%v): %v\", sources[0], err)\n\t\t} else if h, err = u.Activate(); err != nil {\n\t\t\treturn fmt.Errorf(\"could not activate: %v\", err)\n\t\t}\n\t\tdefer h.Close()\n\tdefault:\n\t\tpanic(\"Invalid --mode: \" + *mode)\n\t}\n\tgo generatePackets()\n\th.ReadPacketData() // Do one dummy read to clear any timeouts.\n\tdata, ci, err := h.ReadPacketData()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"readpacketdata: %v\", err)\n\t}\n\tlog.Printf(\"Read packet, %v bytes, CI: %+v\", len(data), ci)\n\treturn nil\n}\n"
  },
  {
    "path": "pcap/pcap_unix.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n//\n// +build !windows\n\npackage pcap\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"sync\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/google/gopacket\"\n\n\t\"github.com/google/gopacket/layers\"\n)\n\n/*\n#cgo solaris LDFLAGS: -L /opt/local/lib -lpcap\n#cgo linux LDFLAGS: -lpcap\n#cgo dragonfly LDFLAGS: -lpcap\n#cgo freebsd LDFLAGS: -lpcap\n#cgo openbsd LDFLAGS: -lpcap\n#cgo netbsd LDFLAGS: -lpcap\n#cgo darwin LDFLAGS: -lpcap\n#include <stdlib.h>\n#include <pcap.h>\n#include <stdint.h>\n#include <poll.h>\n\n// Some old versions of pcap don't define this constant.\n#ifndef PCAP_NETMASK_UNKNOWN\n#define PCAP_NETMASK_UNKNOWN 0xffffffff\n#endif\n\n// libpcap doesn't actually export its version in a #define-guardable way,\n// so we have to use other defined things to differentiate versions.\n// We assume at least libpcap v1.1 at the moment.\n// See http://upstream-tracker.org/versions/libpcap.html\n\n#ifndef PCAP_ERROR_TSTAMP_PRECISION_NOTSUP  // < v1.5\n#define PCAP_ERROR_TSTAMP_PRECISION_NOTSUP -12\n\nint pcap_set_immediate_mode(pcap_t *p, int mode) {\n  return PCAP_ERROR;\n}\n\n//  libpcap version < v1.5 doesn't have timestamp precision (everything is microsecond)\n//\n//  This means *_tstamp_* functions and macros are missing. Therefore, we emulate these\n//  functions here and pretend the setting the precision works. This is actually the way\n//  the pcap_open_offline_with_tstamp_precision works, because it doesn't return an error\n//  if it was not possible to set the precision, which depends on support by the given file.\n//  => The rest of the functions always pretend as if they could set nano precision and\n//  verify the actual precision with pcap_get_tstamp_precision, which is emulated for <v1.5\n//  to always return micro resolution.\n\n#define PCAP_TSTAMP_PRECISION_MICRO\t0\n#define PCAP_TSTAMP_PRECISION_NANO\t1\n\npcap_t *pcap_open_offline_with_tstamp_precision(const char *fname, u_int precision,\n  char *errbuf) {\n  return pcap_open_offline(fname, errbuf);\n}\n\npcap_t *pcap_fopen_offline_with_tstamp_precision(FILE *fp, u_int precision,\n  char *errbuf) {\n  return pcap_fopen_offline(fp, errbuf);\n}\n\nint pcap_set_tstamp_precision(pcap_t *p, int tstamp_precision) {\n  if (tstamp_precision == PCAP_TSTAMP_PRECISION_MICRO)\n    return 0;\n  return PCAP_ERROR_TSTAMP_PRECISION_NOTSUP;\n}\n\nint pcap_get_tstamp_precision(pcap_t *p) {\n  return PCAP_TSTAMP_PRECISION_MICRO;\n}\n\n#ifndef PCAP_TSTAMP_HOST  // < v1.2\n\nint pcap_set_tstamp_type(pcap_t* p, int t) { return -1; }\nint pcap_list_tstamp_types(pcap_t* p, int** t) { return 0; }\nvoid pcap_free_tstamp_types(int *tstamp_types) {}\nconst char* pcap_tstamp_type_val_to_name(int t) {\n\treturn \"pcap timestamp types not supported\";\n}\nint pcap_tstamp_type_name_to_val(const char* t) {\n\treturn PCAP_ERROR;\n}\n\n#endif  // < v1.2\n#endif  // < v1.5\n\n#ifndef PCAP_ERROR_PROMISC_PERM_DENIED\n#define PCAP_ERROR_PROMISC_PERM_DENIED -11\n#endif\n\n// Windows, Macs, and Linux all use different time types.  Joy.\n#ifdef __APPLE__\n#define gopacket_time_secs_t __darwin_time_t\n#define gopacket_time_usecs_t __darwin_suseconds_t\n#elif __ANDROID__\n#define gopacket_time_secs_t __kernel_time_t\n#define gopacket_time_usecs_t __kernel_suseconds_t\n#elif __GLIBC__\n#define gopacket_time_secs_t __time_t\n#define gopacket_time_usecs_t __suseconds_t\n#else  // Some form of linux/bsd/etc...\n#include <sys/param.h>\n#ifdef __OpenBSD__\n#define gopacket_time_secs_t u_int32_t\n#define gopacket_time_usecs_t u_int32_t\n#else\n#define gopacket_time_secs_t time_t\n#define gopacket_time_usecs_t suseconds_t\n#endif\n#endif\n\n// The things we do to avoid pointers escaping to the heap...\n// According to https://github.com/the-tcpdump-group/libpcap/blob/1131a7c26c6f4d4772e4a2beeaf7212f4dea74ac/pcap.c#L398-L406 ,\n// the return value of pcap_next_ex could be greater than 1 for success.\n// Let's just make it 1 if it comes bigger than 1.\nint pcap_next_ex_escaping(pcap_t *p, uintptr_t pkt_hdr, uintptr_t pkt_data) {\n  int ex = pcap_next_ex(p, (struct pcap_pkthdr**)(pkt_hdr), (const u_char**)(pkt_data));\n  if (ex > 1) {\n    ex = 1;\n  }\n  return ex;\n}\n\nint pcap_offline_filter_escaping(struct bpf_program *fp, uintptr_t pkt_hdr, uintptr_t pkt) {\n\treturn pcap_offline_filter(fp, (struct pcap_pkthdr*)(pkt_hdr), (const u_char*)(pkt));\n}\n\n// pcap_wait returns when the next packet is available or the timeout expires.\n// Since it uses pcap_get_selectable_fd, it will not work in Windows.\nint pcap_wait(pcap_t *p, int msec) {\n\tstruct pollfd fds[1];\n\tint fd;\n\n\tfd = pcap_get_selectable_fd(p);\n\tif(fd < 0) {\n\t\treturn fd;\n\t}\n\n\tfds[0].fd = fd;\n\tfds[0].events = POLLIN;\n\n\tif(msec != 0) {\n\t\treturn poll(fds, 1, msec);\n\t}\n\n\t// block indefinitely if no timeout provided\n\treturn poll(fds, 1, -1);\n}\n\n*/\nimport \"C\"\n\nconst errorBufferSize = C.PCAP_ERRBUF_SIZE\n\nconst (\n\tpcapErrorNotActivated    = C.PCAP_ERROR_NOT_ACTIVATED\n\tpcapErrorActivated       = C.PCAP_ERROR_ACTIVATED\n\tpcapWarningPromisc       = C.PCAP_WARNING_PROMISC_NOTSUP\n\tpcapErrorNoSuchDevice    = C.PCAP_ERROR_NO_SUCH_DEVICE\n\tpcapErrorDenied          = C.PCAP_ERROR_PERM_DENIED\n\tpcapErrorNotUp           = C.PCAP_ERROR_IFACE_NOT_UP\n\tpcapWarning              = C.PCAP_WARNING\n\tpcapError                = C.PCAP_ERROR\n\tpcapDIN                  = C.PCAP_D_IN\n\tpcapDOUT                 = C.PCAP_D_OUT\n\tpcapDINOUT               = C.PCAP_D_INOUT\n\tpcapNetmaskUnknown       = C.PCAP_NETMASK_UNKNOWN\n\tpcapTstampPrecisionMicro = C.PCAP_TSTAMP_PRECISION_MICRO\n\tpcapTstampPrecisionNano  = C.PCAP_TSTAMP_PRECISION_NANO\n)\n\ntype pcapPkthdr C.struct_pcap_pkthdr\ntype pcapTPtr *C.struct_pcap\ntype pcapBpfProgram C.struct_bpf_program\n\nfunc (h *pcapPkthdr) getSec() int64 {\n\treturn int64(h.ts.tv_sec)\n}\n\nfunc (h *pcapPkthdr) getUsec() int64 {\n\treturn int64(h.ts.tv_usec)\n}\n\nfunc (h *pcapPkthdr) getLen() int {\n\treturn int(h.len)\n}\n\nfunc (h *pcapPkthdr) getCaplen() int {\n\treturn int(h.caplen)\n}\n\nfunc pcapGetTstampPrecision(cptr pcapTPtr) int {\n\treturn int(C.pcap_get_tstamp_precision(cptr))\n}\n\nfunc pcapSetTstampPrecision(cptr pcapTPtr, precision int) error {\n\tret := C.pcap_set_tstamp_precision(cptr, C.int(precision))\n\tif ret < 0 {\n\t\treturn errors.New(C.GoString(C.pcap_geterr(cptr)))\n\t}\n\treturn nil\n}\n\nfunc statusError(status C.int) error {\n\treturn errors.New(C.GoString(C.pcap_statustostr(status)))\n}\n\nfunc pcapOpenLive(device string, snaplen int, pro int, timeout int) (*Handle, error) {\n\tbuf := (*C.char)(C.calloc(errorBufferSize, 1))\n\tdefer C.free(unsafe.Pointer(buf))\n\n\tdev := C.CString(device)\n\tdefer C.free(unsafe.Pointer(dev))\n\n\tcptr := C.pcap_open_live(dev, C.int(snaplen), C.int(pro), C.int(timeout), buf)\n\tif cptr == nil {\n\t\treturn nil, errors.New(C.GoString(buf))\n\t}\n\treturn &Handle{cptr: cptr}, nil\n}\n\nfunc openOffline(file string) (handle *Handle, err error) {\n\tbuf := (*C.char)(C.calloc(errorBufferSize, 1))\n\tdefer C.free(unsafe.Pointer(buf))\n\tcf := C.CString(file)\n\tdefer C.free(unsafe.Pointer(cf))\n\n\tcptr := C.pcap_open_offline_with_tstamp_precision(cf, C.PCAP_TSTAMP_PRECISION_NANO, buf)\n\tif cptr == nil {\n\t\treturn nil, errors.New(C.GoString(buf))\n\t}\n\treturn &Handle{cptr: cptr}, nil\n}\n\nfunc (p *Handle) pcapClose() {\n\tif p.cptr != nil {\n\t\tC.pcap_close(p.cptr)\n\t}\n\tp.cptr = nil\n}\n\nfunc (p *Handle) pcapGeterr() error {\n\treturn errors.New(C.GoString(C.pcap_geterr(p.cptr)))\n}\n\nfunc (p *Handle) pcapStats() (*Stats, error) {\n\tvar cstats C.struct_pcap_stat\n\tif C.pcap_stats(p.cptr, &cstats) < 0 {\n\t\treturn nil, p.pcapGeterr()\n\t}\n\treturn &Stats{\n\t\tPacketsReceived:  int(cstats.ps_recv),\n\t\tPacketsDropped:   int(cstats.ps_drop),\n\t\tPacketsIfDropped: int(cstats.ps_ifdrop),\n\t}, nil\n}\n\n// for libpcap < 1.8 pcap_compile is NOT thread-safe, so protect it.\nvar pcapCompileMu sync.Mutex\n\nfunc (p *Handle) pcapCompile(expr string, maskp uint32) (pcapBpfProgram, error) {\n\tvar bpf pcapBpfProgram\n\tcexpr := C.CString(expr)\n\tdefer C.free(unsafe.Pointer(cexpr))\n\n\tpcapCompileMu.Lock()\n\tdefer pcapCompileMu.Unlock()\n\tif C.pcap_compile(p.cptr, (*C.struct_bpf_program)(&bpf), cexpr, 1, C.bpf_u_int32(maskp)) < 0 {\n\t\treturn bpf, p.pcapGeterr()\n\t}\n\treturn bpf, nil\n}\n\nfunc (p pcapBpfProgram) free() {\n\tC.pcap_freecode((*C.struct_bpf_program)(&p))\n}\n\nfunc (p pcapBpfProgram) toBPFInstruction() []BPFInstruction {\n\tbpfInsn := (*[bpfInstructionBufferSize]C.struct_bpf_insn)(unsafe.Pointer(p.bf_insns))[0:p.bf_len:p.bf_len]\n\tbpfInstruction := make([]BPFInstruction, len(bpfInsn), len(bpfInsn))\n\n\tfor i, v := range bpfInsn {\n\t\tbpfInstruction[i].Code = uint16(v.code)\n\t\tbpfInstruction[i].Jt = uint8(v.jt)\n\t\tbpfInstruction[i].Jf = uint8(v.jf)\n\t\tbpfInstruction[i].K = uint32(v.k)\n\t}\n\treturn bpfInstruction\n}\n\nfunc pcapBpfProgramFromInstructions(bpfInstructions []BPFInstruction) pcapBpfProgram {\n\tvar bpf pcapBpfProgram\n\tbpf.bf_len = C.u_int(len(bpfInstructions))\n\tcbpfInsns := C.calloc(C.size_t(len(bpfInstructions)), C.size_t(unsafe.Sizeof(bpfInstructions[0])))\n\tgbpfInsns := (*[bpfInstructionBufferSize]C.struct_bpf_insn)(cbpfInsns)\n\n\tfor i, v := range bpfInstructions {\n\t\tgbpfInsns[i].code = C.u_short(v.Code)\n\t\tgbpfInsns[i].jt = C.u_char(v.Jt)\n\t\tgbpfInsns[i].jf = C.u_char(v.Jf)\n\t\tgbpfInsns[i].k = C.bpf_u_int32(v.K)\n\t}\n\n\tbpf.bf_insns = (*C.struct_bpf_insn)(cbpfInsns)\n\treturn bpf\n}\n\nfunc pcapLookupnet(device string) (netp, maskp uint32, err error) {\n\terrorBuf := (*C.char)(C.calloc(errorBufferSize, 1))\n\tdefer C.free(unsafe.Pointer(errorBuf))\n\tdev := C.CString(device)\n\tdefer C.free(unsafe.Pointer(dev))\n\tif C.pcap_lookupnet(\n\t\tdev,\n\t\t(*C.bpf_u_int32)(unsafe.Pointer(&netp)),\n\t\t(*C.bpf_u_int32)(unsafe.Pointer(&maskp)),\n\t\terrorBuf,\n\t) < 0 {\n\t\treturn 0, 0, errors.New(C.GoString(errorBuf))\n\t\t// We can't lookup the network, but that could be because the interface\n\t\t// doesn't have an IPv4.\n\t}\n\treturn\n}\n\nfunc (b *BPF) pcapOfflineFilter(ci gopacket.CaptureInfo, data []byte) bool {\n\thdr := (*C.struct_pcap_pkthdr)(&b.hdr)\n\thdr.ts.tv_sec = C.gopacket_time_secs_t(ci.Timestamp.Unix())\n\thdr.ts.tv_usec = C.gopacket_time_usecs_t(ci.Timestamp.Nanosecond() / 1000)\n\thdr.caplen = C.bpf_u_int32(len(data)) // Trust actual length over ci.Length.\n\thdr.len = C.bpf_u_int32(ci.Length)\n\tdataptr := (*C.u_char)(unsafe.Pointer(&data[0]))\n\treturn C.pcap_offline_filter_escaping((*C.struct_bpf_program)(&b.bpf.bpf),\n\t\tC.uintptr_t(uintptr(unsafe.Pointer(hdr))),\n\t\tC.uintptr_t(uintptr(unsafe.Pointer(dataptr)))) != 0\n}\n\nfunc (p *Handle) pcapSetfilter(bpf pcapBpfProgram) error {\n\tif C.pcap_setfilter(p.cptr, (*C.struct_bpf_program)(&bpf)) < 0 {\n\t\treturn p.pcapGeterr()\n\t}\n\treturn nil\n}\n\nfunc (p *Handle) pcapListDatalinks() (datalinks []Datalink, err error) {\n\tvar dltbuf *C.int\n\n\tn := int(C.pcap_list_datalinks(p.cptr, &dltbuf))\n\tif n < 0 {\n\t\treturn nil, p.pcapGeterr()\n\t}\n\n\tdefer C.pcap_free_datalinks(dltbuf)\n\n\tdatalinks = make([]Datalink, n)\n\n\tdltArray := (*[1 << 28]C.int)(unsafe.Pointer(dltbuf))\n\n\tfor i := 0; i < n; i++ {\n\t\tdatalinks[i].Name = pcapDatalinkValToName(int((*dltArray)[i]))\n\t\tdatalinks[i].Description = pcapDatalinkValToDescription(int((*dltArray)[i]))\n\t}\n\n\treturn datalinks, nil\n}\n\nfunc pcapOpenDead(linkType layers.LinkType, captureLength int) (*Handle, error) {\n\tcptr := C.pcap_open_dead(C.int(linkType), C.int(captureLength))\n\tif cptr == nil {\n\t\treturn nil, errors.New(\"error opening dead capture\")\n\t}\n\n\treturn &Handle{cptr: cptr}, nil\n}\n\nfunc (p *Handle) pcapNextPacketEx() NextError {\n\t// This horrible magic allows us to pass a ptr-to-ptr to pcap_next_ex\n\t// without causing that ptr-to-ptr to itself be allocated on the heap.\n\t// Since Handle itself survives through the duration of the pcap_next_ex\n\t// call, this should be perfectly safe for GC stuff, etc.\n\n\treturn NextError(C.pcap_next_ex_escaping(p.cptr, C.uintptr_t(uintptr(unsafe.Pointer(&p.pkthdr))), C.uintptr_t(uintptr(unsafe.Pointer(&p.bufptr)))))\n}\n\nfunc (p *Handle) pcapDatalink() layers.LinkType {\n\treturn layers.LinkType(C.pcap_datalink(p.cptr))\n}\n\nfunc (p *Handle) pcapSetDatalink(dlt layers.LinkType) error {\n\tif C.pcap_set_datalink(p.cptr, C.int(dlt)) < 0 {\n\t\treturn p.pcapGeterr()\n\t}\n\treturn nil\n}\n\nfunc pcapDatalinkValToName(dlt int) string {\n\treturn C.GoString(C.pcap_datalink_val_to_name(C.int(dlt)))\n}\n\nfunc pcapDatalinkValToDescription(dlt int) string {\n\treturn C.GoString(C.pcap_datalink_val_to_description(C.int(dlt)))\n}\n\nfunc pcapDatalinkNameToVal(name string) int {\n\tcptr := C.CString(name)\n\tdefer C.free(unsafe.Pointer(cptr))\n\treturn int(C.pcap_datalink_name_to_val(cptr))\n}\n\nfunc pcapLibVersion() string {\n\treturn C.GoString(C.pcap_lib_version())\n}\n\nfunc (p *Handle) isOpen() bool {\n\treturn p.cptr != nil\n}\n\ntype pcapDevices struct {\n\tall, cur *C.pcap_if_t\n}\n\nfunc (p pcapDevices) free() {\n\tC.pcap_freealldevs((*C.pcap_if_t)(p.all))\n}\n\nfunc (p *pcapDevices) next() bool {\n\tif p.cur == nil {\n\t\tp.cur = p.all\n\t\tif p.cur == nil {\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t}\n\tif p.cur.next == nil {\n\t\treturn false\n\t}\n\tp.cur = p.cur.next\n\treturn true\n}\n\nfunc (p pcapDevices) name() string {\n\treturn C.GoString(p.cur.name)\n}\n\nfunc (p pcapDevices) description() string {\n\treturn C.GoString(p.cur.description)\n}\n\nfunc (p pcapDevices) flags() uint32 {\n\treturn uint32(p.cur.flags)\n}\n\ntype pcapAddresses struct {\n\tall, cur *C.pcap_addr_t\n}\n\nfunc (p *pcapAddresses) next() bool {\n\tif p.cur == nil {\n\t\tp.cur = p.all\n\t\tif p.cur == nil {\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t}\n\tif p.cur.next == nil {\n\t\treturn false\n\t}\n\tp.cur = p.cur.next\n\treturn true\n}\n\nfunc (p pcapAddresses) addr() *syscall.RawSockaddr {\n\treturn (*syscall.RawSockaddr)(unsafe.Pointer(p.cur.addr))\n}\n\nfunc (p pcapAddresses) netmask() *syscall.RawSockaddr {\n\treturn (*syscall.RawSockaddr)(unsafe.Pointer(p.cur.netmask))\n}\n\nfunc (p pcapAddresses) broadaddr() *syscall.RawSockaddr {\n\treturn (*syscall.RawSockaddr)(unsafe.Pointer(p.cur.broadaddr))\n}\n\nfunc (p pcapAddresses) dstaddr() *syscall.RawSockaddr {\n\treturn (*syscall.RawSockaddr)(unsafe.Pointer(p.cur.dstaddr))\n}\n\nfunc (p pcapDevices) addresses() pcapAddresses {\n\treturn pcapAddresses{all: p.cur.addresses}\n}\n\nfunc pcapFindAllDevs() (pcapDevices, error) {\n\tvar buf *C.char\n\tbuf = (*C.char)(C.calloc(errorBufferSize, 1))\n\tdefer C.free(unsafe.Pointer(buf))\n\tvar alldevsp pcapDevices\n\n\tif C.pcap_findalldevs((**C.pcap_if_t)(&alldevsp.all), buf) < 0 {\n\t\treturn pcapDevices{}, errors.New(C.GoString(buf))\n\t}\n\treturn alldevsp, nil\n}\n\nfunc (p *Handle) pcapSendpacket(data []byte) error {\n\tif C.pcap_sendpacket(p.cptr, (*C.u_char)(&data[0]), (C.int)(len(data))) < 0 {\n\t\treturn p.pcapGeterr()\n\t}\n\treturn nil\n}\n\nfunc (p *Handle) pcapSetdirection(direction Direction) error {\n\tif status := C.pcap_setdirection(p.cptr, (C.pcap_direction_t)(direction)); status < 0 {\n\t\treturn statusError(status)\n\t}\n\treturn nil\n}\n\nfunc (p *Handle) pcapSnapshot() int {\n\treturn int(C.pcap_snapshot(p.cptr))\n}\n\nfunc (t TimestampSource) pcapTstampTypeValToName() string {\n\treturn C.GoString(C.pcap_tstamp_type_val_to_name(C.int(t)))\n}\n\nfunc pcapTstampTypeNameToVal(s string) (TimestampSource, error) {\n\tcs := C.CString(s)\n\tdefer C.free(unsafe.Pointer(cs))\n\tt := C.pcap_tstamp_type_name_to_val(cs)\n\tif t < 0 {\n\t\treturn 0, statusError(t)\n\t}\n\treturn TimestampSource(t), nil\n}\n\nfunc (p *InactiveHandle) pcapGeterr() error {\n\treturn errors.New(C.GoString(C.pcap_geterr(p.cptr)))\n}\n\nfunc (p *InactiveHandle) pcapActivate() (*Handle, activateError) {\n\tret := activateError(C.pcap_activate(p.cptr))\n\tif ret != aeNoError {\n\t\treturn nil, ret\n\t}\n\th := &Handle{\n\t\tcptr: p.cptr,\n\t}\n\tp.cptr = nil\n\treturn h, ret\n}\n\nfunc (p *InactiveHandle) pcapClose() {\n\tif p.cptr != nil {\n\t\tC.pcap_close(p.cptr)\n\t}\n}\n\nfunc pcapCreate(device string) (*InactiveHandle, error) {\n\tbuf := (*C.char)(C.calloc(errorBufferSize, 1))\n\tdefer C.free(unsafe.Pointer(buf))\n\tdev := C.CString(device)\n\tdefer C.free(unsafe.Pointer(dev))\n\n\tcptr := C.pcap_create(dev, buf)\n\tif cptr == nil {\n\t\treturn nil, errors.New(C.GoString(buf))\n\t}\n\treturn &InactiveHandle{cptr: cptr}, nil\n}\n\nfunc (p *InactiveHandle) pcapSetSnaplen(snaplen int) error {\n\tif status := C.pcap_set_snaplen(p.cptr, C.int(snaplen)); status < 0 {\n\t\treturn statusError(status)\n\t}\n\treturn nil\n}\n\nfunc (p *InactiveHandle) pcapSetPromisc(promisc bool) error {\n\tvar pro C.int\n\tif promisc {\n\t\tpro = 1\n\t}\n\tif status := C.pcap_set_promisc(p.cptr, pro); status < 0 {\n\t\treturn statusError(status)\n\t}\n\treturn nil\n}\n\nfunc (p *InactiveHandle) pcapSetTimeout(timeout time.Duration) error {\n\tif status := C.pcap_set_timeout(p.cptr, C.int(timeoutMillis(timeout))); status < 0 {\n\t\treturn statusError(status)\n\t}\n\treturn nil\n}\n\nfunc (p *InactiveHandle) pcapListTstampTypes() (out []TimestampSource) {\n\tvar types *C.int\n\tn := int(C.pcap_list_tstamp_types(p.cptr, &types))\n\tif n < 0 {\n\t\treturn // public interface doesn't have error :(\n\t}\n\tdefer C.pcap_free_tstamp_types(types)\n\ttypesArray := (*[1 << 28]C.int)(unsafe.Pointer(types))\n\tfor i := 0; i < n; i++ {\n\t\tout = append(out, TimestampSource((*typesArray)[i]))\n\t}\n\treturn\n}\n\nfunc (p *InactiveHandle) pcapSetTstampType(t TimestampSource) error {\n\tif status := C.pcap_set_tstamp_type(p.cptr, C.int(t)); status < 0 {\n\t\treturn statusError(status)\n\t}\n\treturn nil\n}\n\nfunc (p *InactiveHandle) pcapSetRfmon(monitor bool) error {\n\tvar mon C.int\n\tif monitor {\n\t\tmon = 1\n\t}\n\tswitch canset := C.pcap_can_set_rfmon(p.cptr); canset {\n\tcase 0:\n\t\treturn CannotSetRFMon\n\tcase 1:\n\t\t// success\n\tdefault:\n\t\treturn statusError(canset)\n\t}\n\tif status := C.pcap_set_rfmon(p.cptr, mon); status != 0 {\n\t\treturn statusError(status)\n\t}\n\treturn nil\n}\n\nfunc (p *InactiveHandle) pcapSetBufferSize(bufferSize int) error {\n\tif status := C.pcap_set_buffer_size(p.cptr, C.int(bufferSize)); status < 0 {\n\t\treturn statusError(status)\n\t}\n\treturn nil\n}\n\nfunc (p *InactiveHandle) pcapSetImmediateMode(mode bool) error {\n\tvar md C.int\n\tif mode {\n\t\tmd = 1\n\t}\n\tif status := C.pcap_set_immediate_mode(p.cptr, md); status < 0 {\n\t\treturn statusError(status)\n\t}\n\treturn nil\n}\n\nfunc (p *Handle) setNonBlocking() error {\n\tbuf := (*C.char)(C.calloc(errorBufferSize, 1))\n\tdefer C.free(unsafe.Pointer(buf))\n\n\t// Change the device to non-blocking, we'll use pcap_wait to wait until the\n\t// handle is ready to read.\n\tif v := C.pcap_setnonblock(p.cptr, 1, buf); v < -1 {\n\t\treturn errors.New(C.GoString(buf))\n\t}\n\n\treturn nil\n}\n\n// waitForPacket waits for a packet or for the timeout to expire.\nfunc (p *Handle) waitForPacket() {\n\t// According to pcap_get_selectable_fd() man page, there are some cases where it will\n\t// return a file descriptor, but a simple call of select() or poll() will not indicate\n\t// that the descriptor is readable until a full buffer's worth of packets is received,\n\t// so the call must have a timeout less than *or equal* to the packet buffer timeout.\n\t// The packet buffer timeout is set to timeoutMillis(p.timeout) in pcapOpenLive(),\n\t// so we should be fine to use it here too.\n\tC.pcap_wait(p.cptr, C.int(timeoutMillis(p.timeout)))\n}\n\n// openOfflineFile returns contents of input file as a *Handle.\nfunc openOfflineFile(file *os.File) (handle *Handle, err error) {\n\tbuf := (*C.char)(C.calloc(errorBufferSize, 1))\n\tdefer C.free(unsafe.Pointer(buf))\n\tcmode := C.CString(\"rb\")\n\tdefer C.free(unsafe.Pointer(cmode))\n\tcf := C.fdopen(C.int(file.Fd()), cmode)\n\n\tcptr := C.pcap_fopen_offline_with_tstamp_precision(cf, C.PCAP_TSTAMP_PRECISION_NANO, buf)\n\tif cptr == nil {\n\t\treturn nil, errors.New(C.GoString(buf))\n\t}\n\treturn &Handle{cptr: cptr}, nil\n}\n"
  },
  {
    "path": "pcap/pcap_windows.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcap\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"sync\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n\t\"golang.org/x/sys/windows\"\n)\n\nvar pcapLoaded = false\n\nconst npcapPath = \"\\\\Npcap\"\n\nfunc initDllPath(kernel32 syscall.Handle) {\n\tsetDllDirectory, err := syscall.GetProcAddress(kernel32, \"SetDllDirectoryA\")\n\tif err != nil {\n\t\t// we can't do anything since SetDllDirectoryA is missing - fall back to use first wpcap.dll we encounter\n\t\treturn\n\t}\n\tgetSystemDirectory, err := syscall.GetProcAddress(kernel32, \"GetSystemDirectoryA\")\n\tif err != nil {\n\t\t// we can't do anything since SetDllDirectoryA is missing - fall back to use first wpcap.dll we encounter\n\t\treturn\n\t}\n\tbuf := make([]byte, 4096)\n\tr, _, _ := syscall.Syscall(getSystemDirectory, 2, uintptr(unsafe.Pointer(&buf[0])), uintptr(len(buf)), 0)\n\tif r == 0 || r > 4096-uintptr(len(npcapPath))-1 {\n\t\t// we can't do anything since SetDllDirectoryA is missing - fall back to use first wpcap.dll we encounter\n\t\treturn\n\t}\n\tcopy(buf[r:], npcapPath)\n\t_, _, _ = syscall.Syscall(setDllDirectory, 1, uintptr(unsafe.Pointer(&buf[0])), 0, 0)\n\t// ignore errors here - we just fallback to load wpcap.dll from default locations\n}\n\n// loadedDllPath will hold the full pathname of the loaded wpcap.dll after init if possible\nvar loadedDllPath = \"wpcap.dll\"\n\nfunc initLoadedDllPath(kernel32 syscall.Handle) {\n\tgetModuleFileName, err := syscall.GetProcAddress(kernel32, \"GetModuleFileNameA\")\n\tif err != nil {\n\t\t// we can't get the filename of the loaded module in this case - just leave default of wpcap.dll\n\t\treturn\n\t}\n\tbuf := make([]byte, 4096)\n\tr, _, _ := syscall.Syscall(getModuleFileName, 3, uintptr(wpcapHandle), uintptr(unsafe.Pointer(&buf[0])), uintptr(len(buf)))\n\tif r == 0 {\n\t\t// we can't get the filename of the loaded module in this case - just leave default of wpcap.dll\n\t\treturn\n\t}\n\tloadedDllPath = string(buf[:int(r)])\n}\n\nfunc mustLoad(fun string) uintptr {\n\taddr, err := windows.GetProcAddress(wpcapHandle, fun)\n\tif err != nil {\n\t\tpanic(fmt.Sprintf(\"Couldn't load function %s from %s\", fun, loadedDllPath))\n\t}\n\treturn addr\n}\n\nfunc mightLoad(fun string) uintptr {\n\taddr, err := windows.GetProcAddress(wpcapHandle, fun)\n\tif err != nil {\n\t\treturn 0\n\t}\n\treturn addr\n}\n\nfunc byteSliceToString(bval []byte) string {\n\tfor i := range bval {\n\t\tif bval[i] == 0 {\n\t\t\treturn string(bval[:i])\n\t\t}\n\t}\n\treturn string(bval[:])\n}\n\n// bytePtrToString returns a string copied from pointer to a null terminated byte array\n// WARNING: ONLY SAFE WITH IF r POINTS TO C MEMORY!\n// govet will complain about this function for the reason stated above\nfunc bytePtrToString(r uintptr) string {\n\tif r == 0 {\n\t\treturn \"\"\n\t}\n\tbval := (*[1 << 30]byte)(unsafe.Pointer(r))\n\treturn byteSliceToString(bval[:])\n}\n\nvar wpcapHandle windows.Handle\nvar msvcrtHandle syscall.Handle\nvar (\n\tcallocPtr,\n\tpcapStrerrorPtr,\n\tpcapStatustostrPtr,\n\tpcapOpenLivePtr,\n\tpcapOpenOfflinePtr,\n\tpcapClosePtr,\n\tpcapGeterrPtr,\n\tpcapStatsPtr,\n\tpcapCompilePtr,\n\tpcapFreecodePtr,\n\tpcapLookupnetPtr,\n\tpcapOfflineFilterPtr,\n\tpcapSetfilterPtr,\n\tpcapListDatalinksPtr,\n\tpcapFreeDatalinksPtr,\n\tpcapDatalinkValToNamePtr,\n\tpcapDatalinkValToDescriptionPtr,\n\tpcapOpenDeadPtr,\n\tpcapNextExPtr,\n\tpcapDatalinkPtr,\n\tpcapSetDatalinkPtr,\n\tpcapDatalinkNameToValPtr,\n\tpcapLibVersionPtr,\n\tpcapFreealldevsPtr,\n\tpcapFindalldevsPtr,\n\tpcapSendpacketPtr,\n\tpcapSetdirectionPtr,\n\tpcapSnapshotPtr,\n\tpcapTstampTypeValToNamePtr,\n\tpcapTstampTypeNameToValPtr,\n\tpcapListTstampTypesPtr,\n\tpcapFreeTstampTypesPtr,\n\tpcapSetTstampTypePtr,\n\tpcapGetTstampPrecisionPtr,\n\tpcapSetTstampPrecisionPtr,\n\tpcapOpenOfflineWithTstampPrecisionPtr,\n\tpcapHOpenOfflineWithTstampPrecisionPtr,\n\tpcapActivatePtr,\n\tpcapCreatePtr,\n\tpcapSetSnaplenPtr,\n\tpcapSetPromiscPtr,\n\tpcapSetTimeoutPtr,\n\tpcapCanSetRfmonPtr,\n\tpcapSetRfmonPtr,\n\tpcapSetBufferSizePtr,\n\tpcapSetImmediateModePtr,\n\tpcapHopenOfflinePtr uintptr\n)\n\nfunc init() {\n\tLoadWinPCAP()\n}\n\n// LoadWinPCAP attempts to dynamically load the wpcap DLL and resolve necessary functions\nfunc LoadWinPCAP() error {\n\tif pcapLoaded {\n\t\treturn nil\n\t}\n\n\tkernel32, err := syscall.LoadLibrary(\"kernel32.dll\")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"couldn't load kernel32.dll\")\n\t}\n\tdefer syscall.FreeLibrary(kernel32)\n\n\tinitDllPath(kernel32)\n\n\tif haveSearch, _ := syscall.GetProcAddress(kernel32, \"AddDllDirectory\"); haveSearch != 0 {\n\t\t// if AddDllDirectory is present, we can use LOAD_LIBRARY_* stuff with LoadLibraryEx to avoid wpcap.dll hijacking\n\t\t// see: https://msdn.microsoft.com/en-us/library/ff919712%28VS.85%29.aspx\n\t\tconst LOAD_LIBRARY_SEARCH_USER_DIRS = 0x00000400\n\t\tconst LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800\n\t\twpcapHandle, err = windows.LoadLibraryEx(\"wpcap.dll\", 0, LOAD_LIBRARY_SEARCH_USER_DIRS|LOAD_LIBRARY_SEARCH_SYSTEM32)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"couldn't load wpcap.dll\")\n\t\t}\n\t} else {\n\t\t// otherwise fall back to load it with the unsafe search cause by SetDllDirectory\n\t\twpcapHandle, err = windows.LoadLibrary(\"wpcap.dll\")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"couldn't load wpcap.dll\")\n\t\t}\n\t}\n\tinitLoadedDllPath(kernel32)\n\tmsvcrtHandle, err = syscall.LoadLibrary(\"msvcrt.dll\")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"couldn't load msvcrt.dll\")\n\t}\n\tcallocPtr, err = syscall.GetProcAddress(msvcrtHandle, \"calloc\")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"couldn't get calloc function\")\n\t}\n\n\tpcapStrerrorPtr = mustLoad(\"pcap_strerror\")\n\tpcapStatustostrPtr = mightLoad(\"pcap_statustostr\") // not available on winpcap\n\tpcapOpenLivePtr = mustLoad(\"pcap_open_live\")\n\tpcapOpenOfflinePtr = mustLoad(\"pcap_open_offline\")\n\tpcapClosePtr = mustLoad(\"pcap_close\")\n\tpcapGeterrPtr = mustLoad(\"pcap_geterr\")\n\tpcapStatsPtr = mustLoad(\"pcap_stats\")\n\tpcapCompilePtr = mustLoad(\"pcap_compile\")\n\tpcapFreecodePtr = mustLoad(\"pcap_freecode\")\n\tpcapLookupnetPtr = mustLoad(\"pcap_lookupnet\")\n\tpcapOfflineFilterPtr = mustLoad(\"pcap_offline_filter\")\n\tpcapSetfilterPtr = mustLoad(\"pcap_setfilter\")\n\tpcapListDatalinksPtr = mustLoad(\"pcap_list_datalinks\")\n\tpcapFreeDatalinksPtr = mustLoad(\"pcap_free_datalinks\")\n\tpcapDatalinkValToNamePtr = mustLoad(\"pcap_datalink_val_to_name\")\n\tpcapDatalinkValToDescriptionPtr = mustLoad(\"pcap_datalink_val_to_description\")\n\tpcapOpenDeadPtr = mustLoad(\"pcap_open_dead\")\n\tpcapNextExPtr = mustLoad(\"pcap_next_ex\")\n\tpcapDatalinkPtr = mustLoad(\"pcap_datalink\")\n\tpcapSetDatalinkPtr = mustLoad(\"pcap_set_datalink\")\n\tpcapDatalinkNameToValPtr = mustLoad(\"pcap_datalink_name_to_val\")\n\tpcapLibVersionPtr = mustLoad(\"pcap_lib_version\")\n\tpcapFreealldevsPtr = mustLoad(\"pcap_freealldevs\")\n\tpcapFindalldevsPtr = mustLoad(\"pcap_findalldevs\")\n\tpcapSendpacketPtr = mustLoad(\"pcap_sendpacket\")\n\tpcapSetdirectionPtr = mustLoad(\"pcap_setdirection\")\n\tpcapSnapshotPtr = mustLoad(\"pcap_snapshot\")\n\t//libpcap <1.2 doesn't have pcap_*_tstamp_* functions\n\tpcapTstampTypeValToNamePtr = mightLoad(\"pcap_tstamp_type_val_to_name\")\n\tpcapTstampTypeNameToValPtr = mightLoad(\"pcap_tstamp_type_name_to_val\")\n\tpcapListTstampTypesPtr = mightLoad(\"pcap_list_tstamp_types\")\n\tpcapFreeTstampTypesPtr = mightLoad(\"pcap_free_tstamp_types\")\n\tpcapSetTstampTypePtr = mightLoad(\"pcap_set_tstamp_type\")\n\tpcapGetTstampPrecisionPtr = mightLoad(\"pcap_get_tstamp_precision\")\n\tpcapSetTstampPrecisionPtr = mightLoad(\"pcap_set_tstamp_precision\")\n\tpcapOpenOfflineWithTstampPrecisionPtr = mightLoad(\"pcap_open_offline_with_tstamp_precision\")\n\tpcapHOpenOfflineWithTstampPrecisionPtr = mightLoad(\"pcap_hopen_offline_with_tstamp_precision\")\n\tpcapActivatePtr = mustLoad(\"pcap_activate\")\n\tpcapCreatePtr = mustLoad(\"pcap_create\")\n\tpcapSetSnaplenPtr = mustLoad(\"pcap_set_snaplen\")\n\tpcapSetPromiscPtr = mustLoad(\"pcap_set_promisc\")\n\tpcapSetTimeoutPtr = mustLoad(\"pcap_set_timeout\")\n\t//winpcap does not support rfmon\n\tpcapCanSetRfmonPtr = mightLoad(\"pcap_can_set_rfmon\")\n\tpcapSetRfmonPtr = mightLoad(\"pcap_set_rfmon\")\n\tpcapSetBufferSizePtr = mustLoad(\"pcap_set_buffer_size\")\n\t//libpcap <1.5 does not have pcap_set_immediate_mode\n\tpcapSetImmediateModePtr = mightLoad(\"pcap_set_immediate_mode\")\n\tpcapHopenOfflinePtr = mustLoad(\"pcap_hopen_offline\")\n\n\tpcapLoaded = true\n\treturn nil\n}\n\nfunc (h *pcapPkthdr) getSec() int64 {\n\treturn int64(h.Ts.Sec)\n}\n\nfunc (h *pcapPkthdr) getUsec() int64 {\n\treturn int64(h.Ts.Usec)\n}\n\nfunc (h *pcapPkthdr) getLen() int {\n\treturn int(h.Len)\n}\n\nfunc (h *pcapPkthdr) getCaplen() int {\n\treturn int(h.Caplen)\n}\n\nfunc statusError(status pcapCint) error {\n\tvar ret uintptr\n\tif pcapStatustostrPtr == 0 {\n\t\tret, _, _ = syscall.Syscall(pcapStrerrorPtr, 1, uintptr(status), 0, 0)\n\t} else {\n\t\tret, _, _ = syscall.Syscall(pcapStatustostrPtr, 1, uintptr(status), 0, 0)\n\t}\n\treturn errors.New(bytePtrToString(ret))\n}\n\nfunc pcapGetTstampPrecision(cptr pcapTPtr) int {\n\tif pcapGetTstampPrecisionPtr == 0 {\n\t\treturn pcapTstampPrecisionMicro\n\t}\n\tret, _, _ := syscall.Syscall(pcapGetTstampPrecisionPtr, 1, uintptr(cptr), 0, 0)\n\treturn int(pcapCint(ret))\n}\n\nfunc pcapSetTstampPrecision(cptr pcapTPtr, precision int) error {\n\tif pcapSetTstampPrecisionPtr == 0 {\n\t\treturn errors.New(\"Not supported\")\n\t}\n\tret, _, _ := syscall.Syscall(pcapSetTstampPrecisionPtr, 2, uintptr(cptr), uintptr(precision), 0)\n\tif pcapCint(ret) < 0 {\n\t\treturn errors.New(\"Not supported\")\n\t}\n\treturn nil\n}\n\nfunc pcapOpenLive(device string, snaplen int, pro int, timeout int) (*Handle, error) {\n\terr := LoadWinPCAP()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbuf := make([]byte, errorBufferSize)\n\tdev, err := syscall.BytePtrFromString(device)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcptr, _, _ := syscall.Syscall6(pcapOpenLivePtr, 5, uintptr(unsafe.Pointer(dev)), uintptr(snaplen), uintptr(pro), uintptr(timeout), uintptr(unsafe.Pointer(&buf[0])), 0)\n\n\tif cptr == 0 {\n\t\treturn nil, errors.New(byteSliceToString(buf))\n\t}\n\treturn &Handle{cptr: pcapTPtr(cptr)}, nil\n}\n\nfunc openOffline(file string) (handle *Handle, err error) {\n\terr = LoadWinPCAP()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbuf := make([]byte, errorBufferSize)\n\tf, err := syscall.BytePtrFromString(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar cptr uintptr\n\tif pcapOpenOfflineWithTstampPrecisionPtr == 0 {\n\t\tcptr, _, _ = syscall.Syscall(pcapOpenOfflinePtr, 2, uintptr(unsafe.Pointer(f)), uintptr(unsafe.Pointer(&buf[0])), 0)\n\t} else {\n\t\tcptr, _, _ = syscall.Syscall(pcapOpenOfflineWithTstampPrecisionPtr, 3, uintptr(unsafe.Pointer(f)), uintptr(pcapTstampPrecisionNano), uintptr(unsafe.Pointer(&buf[0])))\n\t}\n\n\tif cptr == 0 {\n\t\treturn nil, errors.New(byteSliceToString(buf))\n\t}\n\n\th := &Handle{cptr: pcapTPtr(cptr)}\n\treturn h, nil\n}\n\nfunc (p *Handle) pcapClose() {\n\tif p.cptr != 0 {\n\t\t_, _, _ = syscall.Syscall(pcapClosePtr, 1, uintptr(p.cptr), 0, 0)\n\t}\n\tp.cptr = 0\n}\n\nfunc (p *Handle) pcapGeterr() error {\n\tret, _, _ := syscall.Syscall(pcapGeterrPtr, 1, uintptr(p.cptr), 0, 0)\n\treturn errors.New(bytePtrToString(ret))\n}\n\nfunc (p *Handle) pcapStats() (*Stats, error) {\n\tvar cstats pcapStats\n\tret, _, _ := syscall.Syscall(pcapStatsPtr, 2, uintptr(p.cptr), uintptr(unsafe.Pointer(&cstats)), 0)\n\tif pcapCint(ret) < 0 {\n\t\treturn nil, p.pcapGeterr()\n\t}\n\treturn &Stats{\n\t\tPacketsReceived:  int(cstats.Recv),\n\t\tPacketsDropped:   int(cstats.Drop),\n\t\tPacketsIfDropped: int(cstats.Ifdrop),\n\t}, nil\n}\n\n// for libpcap < 1.8 pcap_compile is NOT thread-safe, so protect it.\nvar pcapCompileMu sync.Mutex\n\nfunc (p *Handle) pcapCompile(expr string, maskp uint32) (pcapBpfProgram, error) {\n\tvar bpf pcapBpfProgram\n\tcexpr, err := syscall.BytePtrFromString(expr)\n\tif err != nil {\n\t\treturn pcapBpfProgram{}, err\n\t}\n\tpcapCompileMu.Lock()\n\tdefer pcapCompileMu.Unlock()\n\tres, _, _ := syscall.Syscall6(pcapCompilePtr, 5, uintptr(p.cptr), uintptr(unsafe.Pointer(&bpf)), uintptr(unsafe.Pointer(cexpr)), uintptr(1), uintptr(maskp), 0)\n\tif pcapCint(res) < 0 {\n\t\treturn bpf, p.pcapGeterr()\n\t}\n\treturn bpf, nil\n}\n\nfunc (p pcapBpfProgram) free() {\n\t_, _, _ = syscall.Syscall(pcapFreecodePtr, 1, uintptr(unsafe.Pointer(&p)), 0, 0)\n}\n\nfunc (p pcapBpfProgram) toBPFInstruction() []BPFInstruction {\n\tbpfInsn := (*[bpfInstructionBufferSize]pcapBpfInstruction)(unsafe.Pointer(p.Insns))[0:p.Len:p.Len]\n\tbpfInstruction := make([]BPFInstruction, len(bpfInsn), len(bpfInsn))\n\n\tfor i, v := range bpfInsn {\n\t\tbpfInstruction[i].Code = v.Code\n\t\tbpfInstruction[i].Jt = v.Jt\n\t\tbpfInstruction[i].Jf = v.Jf\n\t\tbpfInstruction[i].K = v.K\n\t}\n\treturn bpfInstruction\n}\n\nfunc pcapBpfProgramFromInstructions(bpfInstructions []BPFInstruction) pcapBpfProgram {\n\tvar bpf pcapBpfProgram\n\tbpf.Len = uint32(len(bpfInstructions))\n\tcbpfInsns, _, _ := syscall.Syscall(callocPtr, 2, uintptr(len(bpfInstructions)), uintptr(unsafe.Sizeof(bpfInstructions[0])), 0)\n\tgbpfInsns := (*[bpfInstructionBufferSize]pcapBpfInstruction)(unsafe.Pointer(cbpfInsns))\n\n\tfor i, v := range bpfInstructions {\n\t\tgbpfInsns[i].Code = v.Code\n\t\tgbpfInsns[i].Jt = v.Jt\n\t\tgbpfInsns[i].Jf = v.Jf\n\t\tgbpfInsns[i].K = v.K\n\t}\n\n\tbpf.Insns = (*pcapBpfInstruction)(unsafe.Pointer(cbpfInsns))\n\treturn bpf\n}\n\nfunc pcapLookupnet(device string) (netp, maskp uint32, err error) {\n\terr = LoadWinPCAP()\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\n\tbuf := make([]byte, errorBufferSize)\n\tdev, err := syscall.BytePtrFromString(device)\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\te, _, _ := syscall.Syscall6(pcapLookupnetPtr, 4, uintptr(unsafe.Pointer(dev)), uintptr(unsafe.Pointer(&netp)), uintptr(unsafe.Pointer(&maskp)), uintptr(unsafe.Pointer(&buf[0])), 0, 0)\n\tif pcapCint(e) < 0 {\n\t\treturn 0, 0, errors.New(byteSliceToString(buf))\n\t}\n\treturn\n}\n\nfunc (b *BPF) pcapOfflineFilter(ci gopacket.CaptureInfo, data []byte) bool {\n\tvar hdr pcapPkthdr\n\thdr.Ts.Sec = int32(ci.Timestamp.Unix())\n\thdr.Ts.Usec = int32(ci.Timestamp.Nanosecond() / 1000)\n\thdr.Caplen = uint32(len(data)) // Trust actual length over ci.Length.\n\thdr.Len = uint32(ci.Length)\n\te, _, _ := syscall.Syscall(pcapOfflineFilterPtr, 3, uintptr(unsafe.Pointer(&b.bpf.bpf)), uintptr(unsafe.Pointer(&hdr)), uintptr(unsafe.Pointer(&data[0])))\n\treturn e != 0\n}\n\nfunc (p *Handle) pcapSetfilter(bpf pcapBpfProgram) error {\n\te, _, _ := syscall.Syscall(pcapSetfilterPtr, 2, uintptr(p.cptr), uintptr(unsafe.Pointer(&bpf)), 0)\n\tif pcapCint(e) < 0 {\n\t\treturn p.pcapGeterr()\n\t}\n\treturn nil\n}\n\nfunc (p *Handle) pcapListDatalinks() (datalinks []Datalink, err error) {\n\tvar dltbuf *pcapCint\n\tret, _, _ := syscall.Syscall(pcapListDatalinksPtr, 2, uintptr(p.cptr), uintptr(unsafe.Pointer(&dltbuf)), 0)\n\n\tn := int(pcapCint(ret))\n\n\tif n < 0 {\n\t\treturn nil, p.pcapGeterr()\n\t}\n\tdefer syscall.Syscall(pcapFreeDatalinksPtr, 1, uintptr(unsafe.Pointer(dltbuf)), 0, 0)\n\n\tdatalinks = make([]Datalink, n)\n\n\tdltArray := (*[1 << 28]pcapCint)(unsafe.Pointer(dltbuf))\n\n\tfor i := 0; i < n; i++ {\n\t\tdatalinks[i].Name = pcapDatalinkValToName(int((*dltArray)[i]))\n\t\tdatalinks[i].Description = pcapDatalinkValToDescription(int((*dltArray)[i]))\n\t}\n\n\treturn datalinks, nil\n}\n\nfunc pcapOpenDead(linkType layers.LinkType, captureLength int) (*Handle, error) {\n\terr := LoadWinPCAP()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcptr, _, _ := syscall.Syscall(pcapOpenDeadPtr, 2, uintptr(linkType), uintptr(captureLength), 0)\n\tif cptr == 0 {\n\t\treturn nil, errors.New(\"error opening dead capture\")\n\t}\n\n\treturn &Handle{cptr: pcapTPtr(cptr)}, nil\n}\n\nfunc (p *Handle) pcapNextPacketEx() NextError {\n\tr, _, _ := syscall.Syscall(pcapNextExPtr, 3, uintptr(p.cptr), uintptr(unsafe.Pointer(&p.pkthdr)), uintptr(unsafe.Pointer(&p.bufptr)))\n\tret := pcapCint(r)\n\t// According to https://github.com/the-tcpdump-group/libpcap/blob/1131a7c26c6f4d4772e4a2beeaf7212f4dea74ac/pcap.c#L398-L406 ,\n\t// the return value of pcap_next_ex could be greater than 1 for success.\n\t// Let's just make it 1 if it comes bigger than 1.\n\tif ret > 1 {\n\t\tret = 1\n\t}\n\treturn NextError(ret)\n}\n\nfunc (p *Handle) pcapDatalink() layers.LinkType {\n\tret, _, _ := syscall.Syscall(pcapDatalinkPtr, 1, uintptr(p.cptr), 0, 0)\n\treturn layers.LinkType(ret)\n}\n\nfunc (p *Handle) pcapSetDatalink(dlt layers.LinkType) error {\n\tret, _, _ := syscall.Syscall(pcapSetDatalinkPtr, 2, uintptr(p.cptr), uintptr(dlt), 0)\n\tif pcapCint(ret) < 0 {\n\t\treturn p.pcapGeterr()\n\t}\n\treturn nil\n}\n\nfunc pcapDatalinkValToName(dlt int) string {\n\terr := LoadWinPCAP()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tret, _, _ := syscall.Syscall(pcapDatalinkValToNamePtr, 1, uintptr(dlt), 0, 0)\n\treturn bytePtrToString(ret)\n}\n\nfunc pcapDatalinkValToDescription(dlt int) string {\n\terr := LoadWinPCAP()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tret, _, _ := syscall.Syscall(pcapDatalinkValToDescriptionPtr, 1, uintptr(dlt), 0, 0)\n\treturn bytePtrToString(ret)\n}\n\nfunc pcapDatalinkNameToVal(name string) int {\n\terr := LoadWinPCAP()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tcptr, err := syscall.BytePtrFromString(name)\n\tif err != nil {\n\t\treturn 0\n\t}\n\tret, _, _ := syscall.Syscall(pcapDatalinkNameToValPtr, 1, uintptr(unsafe.Pointer(cptr)), 0, 0)\n\treturn int(pcapCint(ret))\n}\n\nfunc pcapLibVersion() string {\n\terr := LoadWinPCAP()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tret, _, _ := syscall.Syscall(pcapLibVersionPtr, 0, 0, 0, 0)\n\treturn bytePtrToString(ret)\n}\n\nfunc (p *Handle) isOpen() bool {\n\treturn p.cptr != 0\n}\n\ntype pcapDevices struct {\n\tall, cur *pcapIf\n}\n\nfunc (p pcapDevices) free() {\n\tsyscall.Syscall(pcapFreealldevsPtr, 1, uintptr(unsafe.Pointer(p.all)), 0, 0)\n}\n\nfunc (p *pcapDevices) next() bool {\n\tif p.cur == nil {\n\t\tp.cur = p.all\n\t\tif p.cur == nil {\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t}\n\tif p.cur.Next == nil {\n\t\treturn false\n\t}\n\tp.cur = p.cur.Next\n\treturn true\n}\n\nfunc (p pcapDevices) name() string {\n\treturn bytePtrToString(uintptr(unsafe.Pointer(p.cur.Name)))\n}\n\nfunc (p pcapDevices) description() string {\n\treturn bytePtrToString(uintptr(unsafe.Pointer(p.cur.Description)))\n}\n\nfunc (p pcapDevices) flags() uint32 {\n\treturn p.cur.Flags\n}\n\ntype pcapAddresses struct {\n\tall, cur *pcapAddr\n}\n\nfunc (p *pcapAddresses) next() bool {\n\tif p.cur == nil {\n\t\tp.cur = p.all\n\t\tif p.cur == nil {\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t}\n\tif p.cur.Next == nil {\n\t\treturn false\n\t}\n\tp.cur = p.cur.Next\n\treturn true\n}\n\nfunc (p pcapAddresses) addr() *syscall.RawSockaddr {\n\treturn p.cur.Addr\n}\n\nfunc (p pcapAddresses) netmask() *syscall.RawSockaddr {\n\treturn p.cur.Netmask\n}\n\nfunc (p pcapAddresses) broadaddr() *syscall.RawSockaddr {\n\treturn p.cur.Broadaddr\n}\n\nfunc (p pcapAddresses) dstaddr() *syscall.RawSockaddr {\n\treturn p.cur.Dstaddr\n}\n\nfunc (p pcapDevices) addresses() pcapAddresses {\n\treturn pcapAddresses{all: p.cur.Addresses}\n}\n\nfunc pcapFindAllDevs() (pcapDevices, error) {\n\tvar alldevsp pcapDevices\n\terr := LoadWinPCAP()\n\tif err != nil {\n\t\treturn alldevsp, err\n\t}\n\n\tbuf := make([]byte, errorBufferSize)\n\n\tret, _, _ := syscall.Syscall(pcapFindalldevsPtr, 2, uintptr(unsafe.Pointer(&alldevsp.all)), uintptr(unsafe.Pointer(&buf[0])), 0)\n\n\tif pcapCint(ret) < 0 {\n\t\treturn pcapDevices{}, errors.New(byteSliceToString(buf))\n\t}\n\treturn alldevsp, nil\n}\n\nfunc (p *Handle) pcapSendpacket(data []byte) error {\n\tret, _, _ := syscall.Syscall(pcapSendpacketPtr, 3, uintptr(p.cptr), uintptr(unsafe.Pointer(&data[0])), uintptr(len(data)))\n\tif pcapCint(ret) < 0 {\n\t\treturn p.pcapGeterr()\n\t}\n\treturn nil\n}\n\nfunc (p *Handle) pcapSetdirection(direction Direction) error {\n\tstatus, _, _ := syscall.Syscall(pcapSetdirectionPtr, 2, uintptr(p.cptr), uintptr(direction), 0)\n\tif pcapCint(status) < 0 {\n\t\treturn statusError(pcapCint(status))\n\t}\n\treturn nil\n}\n\nfunc (p *Handle) pcapSnapshot() int {\n\tret, _, _ := syscall.Syscall(pcapSnapshotPtr, 1, uintptr(p.cptr), 0, 0)\n\treturn int(pcapCint(ret))\n}\n\nfunc (t TimestampSource) pcapTstampTypeValToName() string {\n\terr := LoadWinPCAP()\n\tif err != nil {\n\t\treturn err.Error()\n\t}\n\n\t//libpcap <1.2 doesn't have pcap_*_tstamp_* functions\n\tif pcapTstampTypeValToNamePtr == 0 {\n\t\treturn \"pcap timestamp types not supported\"\n\t}\n\tret, _, _ := syscall.Syscall(pcapTstampTypeValToNamePtr, 1, uintptr(t), 0, 0)\n\treturn bytePtrToString(ret)\n}\n\nfunc pcapTstampTypeNameToVal(s string) (TimestampSource, error) {\n\terr := LoadWinPCAP()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t//libpcap <1.2 doesn't have pcap_*_tstamp_* functions\n\tif pcapTstampTypeNameToValPtr == 0 {\n\t\treturn 0, statusError(pcapCint(pcapError))\n\t}\n\tcs, err := syscall.BytePtrFromString(s)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tret, _, _ := syscall.Syscall(pcapTstampTypeNameToValPtr, 1, uintptr(unsafe.Pointer(cs)), 0, 0)\n\tt := pcapCint(ret)\n\tif t < 0 {\n\t\treturn 0, statusError(pcapCint(t))\n\t}\n\treturn TimestampSource(t), nil\n}\n\nfunc (p *InactiveHandle) pcapGeterr() error {\n\tret, _, _ := syscall.Syscall(pcapGeterrPtr, 1, uintptr(p.cptr), 0, 0)\n\treturn errors.New(bytePtrToString(ret))\n}\n\nfunc (p *InactiveHandle) pcapActivate() (*Handle, activateError) {\n\tr, _, _ := syscall.Syscall(pcapActivatePtr, 1, uintptr(p.cptr), 0, 0)\n\tret := activateError(pcapCint(r))\n\tif ret != aeNoError {\n\t\treturn nil, ret\n\t}\n\th := &Handle{\n\t\tcptr: p.cptr,\n\t}\n\tp.cptr = 0\n\treturn h, ret\n}\n\nfunc (p *InactiveHandle) pcapClose() {\n\tif p.cptr != 0 {\n\t\t_, _, _ = syscall.Syscall(pcapClosePtr, 1, uintptr(p.cptr), 0, 0)\n\t}\n\tp.cptr = 0\n}\n\nfunc pcapCreate(device string) (*InactiveHandle, error) {\n\terr := LoadWinPCAP()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbuf := make([]byte, errorBufferSize)\n\tdev, err := syscall.BytePtrFromString(device)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcptr, _, _ := syscall.Syscall(pcapCreatePtr, 2, uintptr(unsafe.Pointer(dev)), uintptr(unsafe.Pointer(&buf[0])), 0)\n\tif cptr == 0 {\n\t\treturn nil, errors.New(byteSliceToString(buf))\n\t}\n\treturn &InactiveHandle{cptr: pcapTPtr(cptr)}, nil\n}\n\nfunc (p *InactiveHandle) pcapSetSnaplen(snaplen int) error {\n\tstatus, _, _ := syscall.Syscall(pcapSetSnaplenPtr, 2, uintptr(p.cptr), uintptr(snaplen), 0)\n\tif pcapCint(status) < 0 {\n\t\treturn statusError(pcapCint(status))\n\t}\n\treturn nil\n}\n\nfunc (p *InactiveHandle) pcapSetPromisc(promisc bool) error {\n\tvar pro uintptr\n\tif promisc {\n\t\tpro = 1\n\t}\n\tstatus, _, _ := syscall.Syscall(pcapSetPromiscPtr, 2, uintptr(p.cptr), pro, 0)\n\tif pcapCint(status) < 0 {\n\t\treturn statusError(pcapCint(status))\n\t}\n\treturn nil\n}\n\nfunc (p *InactiveHandle) pcapSetTimeout(timeout time.Duration) error {\n\tstatus, _, _ := syscall.Syscall(pcapSetTimeoutPtr, 2, uintptr(p.cptr), uintptr(timeoutMillis(timeout)), 0)\n\n\tif pcapCint(status) < 0 {\n\t\treturn statusError(pcapCint(status))\n\t}\n\treturn nil\n}\n\nfunc (p *InactiveHandle) pcapListTstampTypes() (out []TimestampSource) {\n\t//libpcap <1.2 doesn't have pcap_*_tstamp_* functions\n\tif pcapListTstampTypesPtr == 0 {\n\t\treturn\n\t}\n\tvar types *pcapCint\n\tret, _, _ := syscall.Syscall(pcapListTstampTypesPtr, 2, uintptr(p.cptr), uintptr(unsafe.Pointer(&types)), 0)\n\tn := int(pcapCint(ret))\n\tif n < 0 {\n\t\treturn // public interface doesn't have error :(\n\t}\n\tdefer syscall.Syscall(pcapFreeTstampTypesPtr, 1, uintptr(unsafe.Pointer(types)), 0, 0)\n\ttypesArray := (*[1 << 28]pcapCint)(unsafe.Pointer(types))\n\tfor i := 0; i < n; i++ {\n\t\tout = append(out, TimestampSource((*typesArray)[i]))\n\t}\n\treturn\n}\n\nfunc (p *InactiveHandle) pcapSetTstampType(t TimestampSource) error {\n\t//libpcap <1.2 doesn't have pcap_*_tstamp_* functions\n\tif pcapSetTstampTypePtr == 0 {\n\t\treturn statusError(pcapError)\n\t}\n\tstatus, _, _ := syscall.Syscall(pcapSetTstampTypePtr, 2, uintptr(p.cptr), uintptr(t), 0)\n\tif pcapCint(status) < 0 {\n\t\treturn statusError(pcapCint(status))\n\t}\n\treturn nil\n}\n\nfunc (p *InactiveHandle) pcapSetRfmon(monitor bool) error {\n\t//winpcap does not support rfmon\n\tif pcapCanSetRfmonPtr == 0 {\n\t\treturn CannotSetRFMon\n\t}\n\tvar mon uintptr\n\tif monitor {\n\t\tmon = 1\n\t}\n\tcanset, _, _ := syscall.Syscall(pcapCanSetRfmonPtr, 1, uintptr(p.cptr), 0, 0)\n\tswitch canset {\n\tcase 0:\n\t\treturn CannotSetRFMon\n\tcase 1:\n\t\t// success\n\tdefault:\n\t\treturn statusError(pcapCint(canset))\n\t}\n\tstatus, _, _ := syscall.Syscall(pcapSetRfmonPtr, 2, uintptr(p.cptr), mon, 0)\n\tif status != 0 {\n\t\treturn statusError(pcapCint(status))\n\t}\n\treturn nil\n}\n\nfunc (p *InactiveHandle) pcapSetBufferSize(bufferSize int) error {\n\tstatus, _, _ := syscall.Syscall(pcapSetBufferSizePtr, 2, uintptr(p.cptr), uintptr(bufferSize), 0)\n\tif pcapCint(status) < 0 {\n\t\treturn statusError(pcapCint(status))\n\t}\n\treturn nil\n}\n\nfunc (p *InactiveHandle) pcapSetImmediateMode(mode bool) error {\n\t//libpcap <1.5 does not have pcap_set_immediate_mode\n\tif pcapSetImmediateModePtr == 0 {\n\t\treturn statusError(pcapError)\n\t}\n\tvar md uintptr\n\tif mode {\n\t\tmd = 1\n\t}\n\tstatus, _, _ := syscall.Syscall(pcapSetImmediateModePtr, 2, uintptr(p.cptr), md, 0)\n\tif pcapCint(status) < 0 {\n\t\treturn statusError(pcapCint(status))\n\t}\n\treturn nil\n}\n\nfunc (p *Handle) setNonBlocking() error {\n\t// do nothing\n\treturn nil\n}\n\n// waitForPacket waits for a packet or for the timeout to expire.\nfunc (p *Handle) waitForPacket() {\n\t// can't use select() so instead just switch goroutines\n\truntime.Gosched()\n}\n\n// openOfflineFile returns contents of input file as a *Handle.\nfunc openOfflineFile(file *os.File) (handle *Handle, err error) {\n\terr = LoadWinPCAP()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbuf := make([]byte, errorBufferSize)\n\tcf := file.Fd()\n\n\tvar cptr uintptr\n\tif pcapOpenOfflineWithTstampPrecisionPtr == 0 {\n\t\tcptr, _, _ = syscall.Syscall(pcapHopenOfflinePtr, 2, cf, uintptr(unsafe.Pointer(&buf[0])), 0)\n\t} else {\n\t\tcptr, _, _ = syscall.Syscall(pcapHOpenOfflineWithTstampPrecisionPtr, 3, cf, uintptr(pcapTstampPrecisionNano), uintptr(unsafe.Pointer(&buf[0])))\n\t}\n\n\tif cptr == 0 {\n\t\treturn nil, errors.New(byteSliceToString(buf))\n\t}\n\treturn &Handle{cptr: pcapTPtr(cptr)}, nil\n}\n"
  },
  {
    "path": "pcap/pcapgo_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcap\n\nimport (\n\t\"bytes\"\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n\t\"github.com/google/gopacket/pcapgo\"\n\t\"io/ioutil\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestPCAPGoWrite(t *testing.T) {\n\tf, err := ioutil.TempFile(\"\", \"pcapgo\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdata := []byte{0xab, 0xcd, 0xef, 0x01, 0x02, 0x03, 0x04}\n\tci := gopacket.CaptureInfo{\n\t\tTimestamp:     time.Unix(12345667, 1234567000),\n\t\tLength:        700,\n\t\tCaptureLength: len(data),\n\t}\n\tfunc() {\n\t\tdefer f.Close()\n\t\tw := pcapgo.NewWriter(f)\n\t\tif err := w.WriteFileHeader(65536, layers.LinkTypeEthernet); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif err := w.WritePacket(ci, data); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t}()\n\th, err := OpenOffline(f.Name())\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer h.Close()\n\tgotData, gotCI, err := h.ReadPacketData()\n\tif err != nil {\n\t\tt.Fatal(\"could not read first packet:\", err)\n\t}\n\tif !bytes.Equal(gotData, data) {\n\t\tt.Errorf(\"byte mismatch:\\nwant: %v\\n got: %v\", data, gotData)\n\t}\n\tif !reflect.DeepEqual(ci, gotCI) {\n\t\tt.Errorf(\"CI mismatch:\\nwant: %v\\n got: %v\", ci, gotCI)\n\t}\n}\n"
  },
  {
    "path": "pcap/pcapnggo_test.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcap\n\nimport (\n\t\"bytes\"\n\t\"io/ioutil\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n\t\"github.com/google/gopacket/pcapgo\"\n)\n\nfunc TestPCAPGoNgWrite(t *testing.T) {\n\tf, err := ioutil.TempFile(\"\", \"pcapnggo\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdata := []byte{0xab, 0xcd, 0xef, 0x01, 0x02, 0x03, 0x04}\n\tci := gopacket.CaptureInfo{\n\t\tTimestamp:     time.Unix(12345667, 1234567123),\n\t\tLength:        700,\n\t\tCaptureLength: len(data),\n\t}\n\tfunc() {\n\t\tdefer f.Close()\n\t\tw, err := pcapgo.NewNgWriter(f, layers.LinkTypeEthernet)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif err := w.WritePacket(ci, data); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif err := w.Flush(); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t}()\n\th, err := OpenOffline(f.Name())\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer h.Close()\n\tgotData, gotCI, err := h.ReadPacketData()\n\tif err != nil {\n\t\tt.Fatal(\"could not read first packet:\", err)\n\t}\n\tif !bytes.Equal(gotData, data) {\n\t\tt.Errorf(\"byte mismatch:\\nwant: %v\\n got: %v\", data, gotData)\n\t}\n\tif !reflect.DeepEqual(ci, gotCI) {\n\t\tt.Errorf(\"CI mismatch:\\nwant: %v\\n got: %v\", ci, gotCI)\n\t}\n}\n"
  },
  {
    "path": "pcapgo/capture.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n// +build linux,go1.9\n\npackage pcapgo\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"runtime\"\n\t\"sync\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"golang.org/x/net/bpf\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/google/gopacket\"\n)\n\nvar hdrLen = unix.CmsgSpace(0)\nvar auxLen = unix.CmsgSpace(int(unsafe.Sizeof(unix.TpacketAuxdata{})))\nvar timensLen = unix.CmsgSpace(int(unsafe.Sizeof(unix.Timespec{})))\nvar timeLen = unix.CmsgSpace(int(unsafe.Sizeof(unix.Timeval{})))\n\nfunc htons(data uint16) uint16 { return data<<8 | data>>8 }\n\n// EthernetHandle holds shared buffers and file descriptor of af_packet socket\ntype EthernetHandle struct {\n\tfd     int\n\tbuffer []byte\n\toob    []byte\n\tancil  []interface{}\n\tmu     sync.Mutex\n\tintf   int\n\taddr   net.HardwareAddr\n}\n\n// readOne reads a packet from the handle and returns a capture info + vlan info\nfunc (h *EthernetHandle) readOne() (ci gopacket.CaptureInfo, vlan int, haveVlan bool, err error) {\n\t// we could use unix.Recvmsg, but that does a memory allocation (for the returned sockaddr) :(\n\tvar msg unix.Msghdr\n\tvar sa unix.RawSockaddrLinklayer\n\n\tmsg.Name = (*byte)(unsafe.Pointer(&sa))\n\tmsg.Namelen = uint32(unsafe.Sizeof(sa))\n\n\tvar iov unix.Iovec\n\tif len(h.buffer) > 0 {\n\t\tiov.Base = &h.buffer[0]\n\t\tiov.SetLen(len(h.buffer))\n\t}\n\tmsg.Iov = &iov\n\tmsg.Iovlen = 1\n\n\tif len(h.oob) > 0 {\n\t\tmsg.Control = &h.oob[0]\n\t\tmsg.SetControllen(len(h.oob))\n\t}\n\n\t// use msg_trunc so we know packet size without auxdata, which might be missing\n\tn, _, e := syscall.Syscall(unix.SYS_RECVMSG, uintptr(h.fd), uintptr(unsafe.Pointer(&msg)), uintptr(unix.MSG_TRUNC))\n\n\tif e != 0 {\n\t\treturn gopacket.CaptureInfo{}, 0, false, fmt.Errorf(\"couldn't read packet: %s\", e)\n\t}\n\n\tif sa.Family == unix.AF_PACKET {\n\t\tci.InterfaceIndex = int(sa.Ifindex)\n\t} else {\n\t\tci.InterfaceIndex = h.intf\n\t}\n\n\t// custom aux parsing so we don't allocate stuff (unix.ParseSocketControlMessage allocates a slice)\n\t// we're getting at most 2 cmsgs anyway and know which ones they are (auxdata + timestamp(ns))\n\toob := h.oob[:msg.Controllen]\n\tgotAux := false\n\n\tfor len(oob) > hdrLen { // > hdrLen, because we also need something after the cmsg header\n\t\thdr := (*unix.Cmsghdr)(unsafe.Pointer(&oob[0]))\n\t\tswitch {\n\t\tcase hdr.Level == unix.SOL_PACKET && hdr.Type == unix.PACKET_AUXDATA && len(oob) >= auxLen:\n\t\t\taux := (*unix.TpacketAuxdata)(unsafe.Pointer(&oob[hdrLen]))\n\t\t\tci.CaptureLength = int(n)\n\t\t\tci.Length = int(aux.Len)\n\t\t\tvlan = int(aux.Vlan_tci)\n\t\t\thaveVlan = (aux.Status & unix.TP_STATUS_VLAN_VALID) != 0\n\t\t\tgotAux = true\n\t\tcase hdr.Level == unix.SOL_SOCKET && hdr.Type == unix.SO_TIMESTAMPNS && len(oob) >= timensLen:\n\t\t\ttstamp := (*unix.Timespec)(unsafe.Pointer(&oob[hdrLen]))\n\t\t\tci.Timestamp = time.Unix(int64(tstamp.Sec), int64(tstamp.Nsec))\n\t\tcase hdr.Level == unix.SOL_SOCKET && hdr.Type == unix.SO_TIMESTAMP && len(oob) >= timeLen:\n\t\t\ttstamp := (*unix.Timeval)(unsafe.Pointer(&oob[hdrLen]))\n\t\t\tci.Timestamp = time.Unix(int64(tstamp.Sec), int64(tstamp.Usec)*1000)\n\t\t}\n\t\toob = oob[unix.CmsgSpace(int(hdr.Len))-hdrLen:]\n\t}\n\n\tif !gotAux {\n\t\t// fallback for no aux cmsg\n\t\tci.CaptureLength = int(n)\n\t\tci.Length = int(n)\n\t\thaveVlan = false\n\t}\n\n\t// fix up capture length if we needed to truncate\n\tif ci.CaptureLength > len(h.buffer) {\n\t\tci.CaptureLength = len(h.buffer)\n\t}\n\n\tif ci.Timestamp.IsZero() {\n\t\t// we got no timestamp info -> emulate it\n\t\tci.Timestamp = time.Now()\n\t}\n\n\treturn ci, vlan, haveVlan, nil\n}\n\n// ReadPacketData implements gopacket.PacketDataSource. If this was captured on a vlan, the vlan id will be in the AncillaryData[0]\nfunc (h *EthernetHandle) ReadPacketData() ([]byte, gopacket.CaptureInfo, error) {\n\th.mu.Lock()\n\tci, vlan, haveVlan, err := h.readOne()\n\tif err != nil {\n\t\th.mu.Unlock()\n\t\treturn nil, gopacket.CaptureInfo{}, fmt.Errorf(\"couldn't read packet data: %s\", err)\n\t}\n\n\tb := make([]byte, ci.CaptureLength)\n\tcopy(b, h.buffer)\n\th.mu.Unlock()\n\n\tif haveVlan {\n\t\tci.AncillaryData = []interface{}{vlan}\n\n\t}\n\n\treturn b, ci, nil\n}\n\n// ZeroCopyReadPacketData implements gopacket.ZeroCopyPacketDataSource. If this was captured on a vlan, the vlan id will be in the AncillaryData[0].\n// This function does not allocate memory. Beware that the next call to ZeroCopyReadPacketData will overwrite existing slices (returned data AND AncillaryData)!\n// Due to shared buffers this must not be called concurrently\nfunc (h *EthernetHandle) ZeroCopyReadPacketData() ([]byte, gopacket.CaptureInfo, error) {\n\tci, vlan, haveVlan, err := h.readOne()\n\tif err != nil {\n\t\treturn nil, gopacket.CaptureInfo{}, fmt.Errorf(\"couldn't read packet data: %s\", err)\n\t}\n\n\tif haveVlan {\n\t\th.ancil[0] = vlan\n\t\tci.AncillaryData = h.ancil\n\t}\n\n\treturn h.buffer[:ci.CaptureLength], ci, nil\n}\n\n// Close closes the underlying socket\nfunc (h *EthernetHandle) Close() {\n\tif h.fd != -1 {\n\t\tunix.Close(h.fd)\n\t\th.fd = -1\n\t\truntime.SetFinalizer(h, nil)\n\t}\n}\n\n// SetCaptureLength sets the maximum capture length to the given value\nfunc (h *EthernetHandle) SetCaptureLength(len int) error {\n\tif len < 0 {\n\t\treturn fmt.Errorf(\"illegal capture length %d. Must be at least 0\", len)\n\t}\n\th.buffer = make([]byte, len)\n\treturn nil\n}\n\n// GetCaptureLength returns the maximum capture length\nfunc (h *EthernetHandle) GetCaptureLength() int {\n\treturn len(h.buffer)\n}\n\n// SetBPF attaches the given BPF filter to the socket. After this, only the packets for which the filter returns a value greater than zero are received.\n// If a filter was already attached, it will be overwritten. To remove the filter, provide an empty slice.\nfunc (h *EthernetHandle) SetBPF(filter []bpf.RawInstruction) error {\n\tif len(filter) == 0 {\n\t\treturn unix.SetsockoptInt(h.fd, unix.SOL_SOCKET, unix.SO_DETACH_FILTER, 0)\n\t}\n\tf := make([]unix.SockFilter, len(filter))\n\tfor i := range filter {\n\t\tf[i].Code = filter[i].Op\n\t\tf[i].Jf = filter[i].Jf\n\t\tf[i].Jt = filter[i].Jt\n\t\tf[i].K = filter[i].K\n\t}\n\tfprog := &unix.SockFprog{\n\t\tLen:    uint16(len(filter)),\n\t\tFilter: &f[0],\n\t}\n\treturn unix.SetsockoptSockFprog(h.fd, unix.SOL_SOCKET, unix.SO_ATTACH_FILTER, fprog)\n}\n\n// LocalAddr returns the local network address\nfunc (h *EthernetHandle) LocalAddr() net.HardwareAddr {\n\t// Hardware Address might have changed. Fetch new one and fall back to the stored one if fetching interface fails\n\tintf, err := net.InterfaceByIndex(h.intf)\n\tif err == nil {\n\t\th.addr = intf.HardwareAddr\n\t}\n\treturn h.addr\n}\n\n// SetPromiscuous sets promiscous mode to the required value. If it is enabled, traffic not destined for the interface will also be captured.\nfunc (h *EthernetHandle) SetPromiscuous(b bool) error {\n\tmreq := unix.PacketMreq{\n\t\tIfindex: int32(h.intf),\n\t\tType:    unix.PACKET_MR_PROMISC,\n\t}\n\n\topt := unix.PACKET_ADD_MEMBERSHIP\n\tif !b {\n\t\topt = unix.PACKET_DROP_MEMBERSHIP\n\t}\n\n\treturn unix.SetsockoptPacketMreq(h.fd, unix.SOL_PACKET, opt, &mreq)\n}\n\n// Stats returns number of packets and dropped packets. This will be the number of packets/dropped packets since the last call to stats (not the cummulative sum!).\nfunc (h *EthernetHandle) Stats() (*unix.TpacketStats, error) {\n\treturn unix.GetsockoptTpacketStats(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS)\n}\n\n// NewEthernetHandle implements pcap.OpenLive for network devices.\n// If you want better performance have a look at github.com/google/gopacket/afpacket.\n// SetCaptureLength can be used to limit the maximum capture length.\nfunc NewEthernetHandle(ifname string) (*EthernetHandle, error) {\n\tintf, err := net.InterfaceByName(ifname)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"couldn't query interface %s: %s\", ifname, err)\n\t}\n\n\tfd, err := unix.Socket(unix.AF_PACKET, unix.SOCK_RAW, int(htons(unix.ETH_P_ALL)))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"couldn't open packet socket: %s\", err)\n\t}\n\n\taddr := unix.SockaddrLinklayer{\n\t\tProtocol: htons(unix.ETH_P_ALL),\n\t\tIfindex:  intf.Index,\n\t}\n\n\tif err := unix.Bind(fd, &addr); err != nil {\n\t\treturn nil, fmt.Errorf(\"couldn't bind to interface %s: %s\", ifname, err)\n\t}\n\n\tooblen := 0\n\n\tif err := unix.SetsockoptInt(fd, unix.SOL_PACKET, unix.PACKET_AUXDATA, 1); err != nil {\n\t\t// we can't get auxdata -> no vlan info\n\t} else {\n\t\tooblen += auxLen\n\t}\n\n\tif err := unix.SetsockoptInt(fd, unix.SOL_SOCKET, unix.SO_TIMESTAMPNS, 1); err != nil {\n\t\t// no nanosecond resolution :( -> try ms\n\t\tif err := unix.SetsockoptInt(fd, unix.SOL_SOCKET, unix.SO_TIMESTAMP, 1); err != nil {\n\t\t\t// if this doesn't work we well use time.Now() -> ignore errors here\n\t\t} else {\n\t\t\tooblen += timeLen\n\t\t}\n\t} else {\n\t\tooblen += timensLen\n\t}\n\n\thandle := &EthernetHandle{\n\t\tfd:     fd,\n\t\tbuffer: make([]byte, intf.MTU),\n\t\toob:    make([]byte, ooblen),\n\t\tancil:  make([]interface{}, 1),\n\t\tintf:   intf.Index,\n\t\taddr:   intf.HardwareAddr,\n\t}\n\truntime.SetFinalizer(handle, (*EthernetHandle).Close)\n\treturn handle, nil\n}\n"
  },
  {
    "path": "pcapgo/capture_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n// +build linux,go1.9\n\npackage pcapgo_test\n\nimport (\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n\t\"github.com/google/gopacket/pcapgo\"\n)\n\nfunc Example_captureEthernet() {\n\tf, err := os.Create(\"/tmp/lo.pcap\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer f.Close()\n\tpcapw := pcapgo.NewWriter(f)\n\tif err := pcapw.WriteFileHeader(1600, layers.LinkTypeEthernet); err != nil {\n\t\tlog.Fatalf(\"WriteFileHeader: %v\", err)\n\t}\n\n\thandle, err := pcapgo.NewEthernetHandle(\"lo\")\n\tif err != nil {\n\t\tlog.Fatalf(\"OpenEthernet: %v\", err)\n\t}\n\n\tpkgsrc := gopacket.NewPacketSource(handle, layers.LayerTypeEthernet)\n\tfor packet := range pkgsrc.Packets() {\n\t\tif err := pcapw.WritePacket(packet.Metadata().CaptureInfo, packet.Data()); err != nil {\n\t\t\tlog.Fatalf(\"pcap.WritePacket(): %v\", err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pcapgo/doc.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n/*\nPackage pcapgo provides some native PCAP support, not requiring C libpcap to be installed.\n\nOverview\n\nThis package contains implementations for native PCAP support. Currently supported are\n\n * pcap-files read/write: Reader, Writer\n * pcapng-files read/write: NgReader, NgWriter\n * raw socket capture (linux only): EthernetHandle\n\nBasic Usage pcapng\n\nPcapng files can be read and written. Reading supports both big and little endian files, packet blocks,\nsimple packet blocks, enhanced packets blocks, interface blocks, and interface statistics blocks. All\nthe options also by Wireshark are supported. The default reader options match libpcap behaviour. Have\na look at NgReaderOptions for more advanced usage. Both ReadPacketData and ZeroCopyReadPacketData is\nsupported (which means PacketDataSource and ZeroCopyPacketDataSource is supported).\n\n\t\tf, err := os.Open(\"somefile.pcapng\")\n\t\tif err != nil {\n\t\t\t...\n\t\t}\n\t\tdefer f.Close()\n\n\t\tr, err := NewNgReader(f, DefaultNgReaderOptions)\n\t\tif err != nil {\n\t\t\t...\n\t\t}\n\n\t\tdata, ci, err := r.ReadPacketData()\n\t\t...\n\nWrite supports only little endian, enhanced packets blocks, interface blocks, and interface statistics\nblocks. The same options as with writing are supported. Interface timestamp resolution is fixed to\n10^-9s to match time.Time. Any other values are ignored. Upon creating a writer, a section, and an\ninterface block is automatically written. Additional interfaces can be added at any time. Since\nthe writer uses a bufio.Writer internally, Flush must be called before closing the file! Have a look\nat NewNgWriterInterface for more advanced usage.\n\n\t\tf, err := os.Create(\"somefile.pcapng\")\n\t\tif err != nil {\n\t\t\t...\n\t\t}\n\t\tdefer f.Close()\n\n\t\tr, err = NewNgWriter(f, layers.LinkTypeEthernet)\n\t\tif err != nil {\n\t\t\t...\n\t\t}\n\t\tdefer r.Flush()\n\n\t\terr = r.WritePacket(ci, data)\n\t\t...\n\n*/\npackage pcapgo\n"
  },
  {
    "path": "pcapgo/ngread.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcapgo\n\nimport (\n\t\"bufio\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\n// NgReaderOptions holds options for reading a pcapng file\ntype NgReaderOptions struct {\n\t// WantMixedLinkType enables reading a pcapng file containing multiple interfaces with varying link types. If false all link types must match, which is the libpcap behaviour and LinkType returns the link type of the first interface.\n\t// If true the link type of the packet is also exposed via ci.AncillaryData[0].\n\tWantMixedLinkType bool\n\t// ErrorOnMismatchingLinkType enables returning an error if a packet with a link type not matching the first interface is encountered and WantMixedLinkType == false.\n\t// If false packets those packets are just silently ignored, which is the libpcap behaviour.\n\tErrorOnMismatchingLinkType bool\n\t// SkipUnknownVersion enables automatically skipping sections with an unknown version, which is recommended by the pcapng standard. Otherwise ErrVersionMismatch is returned.\n\tSkipUnknownVersion bool\n\t// SectionEndCallback gets called at the end of a section (execept for the last section, which is ends on EOF). The current list of interfaces and additional section information is provided.\n\t// This is a good way to read interface statistics.\n\tSectionEndCallback func([]NgInterface, NgSectionInfo)\n\t// StatisticsCallback is called when a interface statistics block is read. The interface id and the read statistics are provided.\n\tStatisticsCallback func(int, NgInterfaceStatistics)\n}\n\n// DefaultNgReaderOptions provides sane defaults for a pcapng reader.\nvar DefaultNgReaderOptions = NgReaderOptions{}\n\n// NgReader wraps an underlying bufio.NgReader to read packet data in pcapng.\ntype NgReader struct {\n\tr                 *bufio.Reader\n\toptions           NgReaderOptions\n\tsectionInfo       NgSectionInfo\n\tlinkType          layers.LinkType\n\tifaces            []NgInterface\n\tcurrentBlock      ngBlock\n\tcurrentOption     ngOption\n\tbuf               [24]byte\n\tpacketBuf         []byte\n\tci                gopacket.CaptureInfo\n\tancil             [1]interface{}\n\tblen              int\n\tfirstSectionFound bool\n\tactiveSection     bool\n\tbigEndian         bool\n}\n\n// NewNgReader initializes a new writer, reads the first section header, and if necessary according to the options the first interface.\nfunc NewNgReader(r io.Reader, options NgReaderOptions) (*NgReader, error) {\n\tret := &NgReader{\n\t\tr: bufio.NewReader(r),\n\t\tcurrentOption: ngOption{\n\t\t\tvalue: make([]byte, 1024),\n\t\t},\n\t\toptions: options,\n\t}\n\n\t//pcapng _must_ start with a section header\n\tif err := ret.readBlock(); err != nil {\n\t\treturn nil, err\n\t}\n\tif ret.currentBlock.typ != ngBlockTypeSectionHeader {\n\t\treturn nil, fmt.Errorf(\"Unknown magic %x\", ret.currentBlock.typ)\n\t}\n\n\tif err := ret.readSectionHeader(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn ret, nil\n}\n\n// First a couple of helper functions to speed things up\n\n// This is way faster than calling io.ReadFull since io.ReadFull needs an itab lookup, does an additional function call into ReadAtLeast, and ReadAtLeast does additional stuff we don't need\n// Additionally this removes the bounds check compared to io.ReadFull due to the use of uint\nfunc (r *NgReader) readBytes(buffer []byte) error {\n\tn := uint(0)\n\tfor n < uint(len(buffer)) {\n\t\tnn, err := r.r.Read(buffer[n:])\n\t\tn += uint(nn)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// The following functions make the binary.* functions inlineable (except for getUint64, which is too big, but not in any hot path anyway)\n// Compared to storing binary.*Endian in a binary.ByteOrder this shaves off about 20% for (ZeroCopy)ReadPacketData, which is caused by the needed itab lookup + indirect go call\nfunc (r *NgReader) getUint16(buffer []byte) uint16 {\n\tif r.bigEndian {\n\t\treturn binary.BigEndian.Uint16(buffer)\n\t}\n\treturn binary.LittleEndian.Uint16(buffer)\n}\n\nfunc (r *NgReader) getUint32(buffer []byte) uint32 {\n\tif r.bigEndian {\n\t\treturn binary.BigEndian.Uint32(buffer)\n\t}\n\treturn binary.LittleEndian.Uint32(buffer)\n}\n\nfunc (r *NgReader) getUint64(buffer []byte) uint64 {\n\tif r.bigEndian {\n\t\treturn binary.BigEndian.Uint64(buffer)\n\t}\n\treturn binary.LittleEndian.Uint64(buffer)\n}\n\n// Now the pcapng implementation\n\n// readBlock reads a the blocktype and length from the file. If the type is a section header, endianess is also read.\nfunc (r *NgReader) readBlock() error {\n\tif err := r.readBytes(r.buf[0:8]); err != nil {\n\t\treturn err\n\t}\n\tr.currentBlock.typ = ngBlockType(r.getUint32(r.buf[0:4]))\n\t// The next part is a bit fucked up since a section header could change the endianess...\n\t// So first read then length just into a buffer, check if its a section header and then do the endianess part...\n\tif r.currentBlock.typ == ngBlockTypeSectionHeader {\n\t\tif err := r.readBytes(r.buf[8:12]); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif binary.BigEndian.Uint32(r.buf[8:12]) == ngByteOrderMagic {\n\t\t\tr.bigEndian = true\n\t\t} else if binary.LittleEndian.Uint32(r.buf[8:12]) == ngByteOrderMagic {\n\t\t\tr.bigEndian = false\n\t\t} else {\n\t\t\treturn errors.New(\"Wrong byte order value in Section Header\")\n\t\t}\n\t\t// Set length to remaining length (length - (type + lengthfield = 8) - 4 for byteOrderMagic)\n\t\tr.currentBlock.length = r.getUint32(r.buf[4:8]) - 8 - 4\n\t\treturn nil\n\t}\n\t// Set length to remaining length (length - (type + lengthfield = 8)\n\tr.currentBlock.length = r.getUint32(r.buf[4:8]) - 8\n\treturn nil\n}\n\n// readOption reads a single arbitrary option (type and value). If there is no space left for options and end of options is missing, it is faked.\nfunc (r *NgReader) readOption() error {\n\tif r.currentBlock.length == 4 {\n\t\t// no more options\n\t\tr.currentOption.code = ngOptionCodeEndOfOptions\n\t\treturn nil\n\t}\n\tif err := r.readBytes(r.buf[:4]); err != nil {\n\t\treturn err\n\t}\n\tr.currentBlock.length -= 4\n\tr.currentOption.code = ngOptionCode(r.getUint16(r.buf[:2]))\n\tlength := r.getUint16(r.buf[2:4])\n\tif r.currentOption.code == ngOptionCodeEndOfOptions {\n\t\tif length != 0 {\n\t\t\treturn errors.New(\"End of Options must be zero length\")\n\t\t}\n\t\treturn nil\n\t}\n\tif length != 0 {\n\t\tif length < uint16(cap(r.currentOption.value)) {\n\t\t\tr.currentOption.value = r.currentOption.value[:length]\n\t\t} else {\n\t\t\tr.currentOption.value = make([]byte, length)\n\t\t}\n\t\tif err := r.readBytes(r.currentOption.value); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t//consume padding\n\t\tpadding := length % 4\n\t\tif padding > 0 {\n\t\t\tpadding = 4 - padding\n\t\t\tif _, err := r.r.Discard(int(padding)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tr.currentBlock.length -= uint32(length + padding)\n\t}\n\treturn nil\n}\n\n// readSectionHeader parses the full section header and implements section skipping in case of version mismatch\n// if needed, the first interface is read\nfunc (r *NgReader) readSectionHeader() error {\n\tif r.options.SectionEndCallback != nil && r.activeSection {\n\t\tinterfaces := make([]NgInterface, len(r.ifaces))\n\t\tfor i := range r.ifaces {\n\t\t\tinterfaces[i] = r.ifaces[i]\n\t\t}\n\t\tr.options.SectionEndCallback(interfaces, r.sectionInfo)\n\t}\n\t// clear the interfaces\n\tr.ifaces = r.ifaces[:0]\n\tr.activeSection = false\n\nRESTART:\n\t// read major, minor, section length\n\tif err := r.readBytes(r.buf[:12]); err != nil {\n\t\treturn err\n\t}\n\tr.currentBlock.length -= 12\n\n\tvMajor := r.getUint16(r.buf[0:2])\n\tvMinor := r.getUint16(r.buf[2:4])\n\tif vMajor != ngVersionMajor || vMinor != ngVersionMinor {\n\t\tif !r.options.SkipUnknownVersion {\n\t\t\t// Well the standard actually says to skip unknown version section headers,\n\t\t\t// but this would mean user would be kept in the dark about whats going on...\n\t\t\treturn ErrNgVersionMismatch\n\t\t}\n\t\tif _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := r.skipSection(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgoto RESTART\n\t}\n\n\tvar section NgSectionInfo\n\nOPTIONS:\n\tfor {\n\t\tif err := r.readOption(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch r.currentOption.code {\n\t\tcase ngOptionCodeEndOfOptions:\n\t\t\tbreak OPTIONS\n\t\tcase ngOptionCodeComment:\n\t\t\tsection.Comment = string(r.currentOption.value)\n\t\tcase ngOptionCodeHardware:\n\t\t\tsection.Hardware = string(r.currentOption.value)\n\t\tcase ngOptionCodeOS:\n\t\t\tsection.OS = string(r.currentOption.value)\n\t\tcase ngOptionCodeUserApplication:\n\t\t\tsection.Application = string(r.currentOption.value)\n\t\t}\n\t}\n\n\tif _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {\n\t\treturn err\n\t}\n\tr.activeSection = true\n\tr.sectionInfo = section\n\n\tif !r.options.WantMixedLinkType {\n\t\t// If we don't want mixed link type, we need the first interface to fill Reader.LinkType()\n\t\t// This handles most of the pcapngs out there, since they start with an IDB\n\t\tif err := r.firstInterface(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// skipSection skips blocks until the next section\nfunc (r *NgReader) skipSection() error {\n\tfor {\n\t\tif err := r.readBlock(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif r.currentBlock.typ == ngBlockTypeSectionHeader {\n\t\t\treturn nil\n\t\t}\n\t\tif _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n}\n\n// SkipSection skips the contents of the rest of the current section and reads the next section header.\nfunc (r *NgReader) SkipSection() error {\n\tif err := r.skipSection(); err != nil {\n\t\treturn err\n\t}\n\treturn r.readSectionHeader()\n}\n\n// firstInterface reads the first interface from the section and panics if a packet is encountered.\nfunc (r *NgReader) firstInterface() error {\n\tfor {\n\t\tif err := r.readBlock(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch r.currentBlock.typ {\n\t\tcase ngBlockTypeInterfaceDescriptor:\n\t\t\tif err := r.readInterfaceDescriptor(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif !r.firstSectionFound {\n\t\t\t\tr.linkType = r.ifaces[0].LinkType\n\t\t\t\tr.firstSectionFound = true\n\t\t\t} else if r.linkType != r.ifaces[0].LinkType {\n\t\t\t\tif r.options.ErrorOnMismatchingLinkType {\n\t\t\t\t\treturn ErrNgLinkTypeMismatch\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn nil\n\t\tcase ngBlockTypePacket, ngBlockTypeEnhancedPacket, ngBlockTypeSimplePacket, ngBlockTypeInterfaceStatistics:\n\t\t\treturn errors.New(\"A section must have an interface before a packet block\")\n\t\t}\n\t\tif _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n}\n\n// readInterfaceDescriptor parses an interface descriptor, prepares timing calculation, and adds the interface details to the current list\nfunc (r *NgReader) readInterfaceDescriptor() error {\n\tif err := r.readBytes(r.buf[:8]); err != nil {\n\t\treturn err\n\t}\n\tr.currentBlock.length -= 8\n\tvar intf NgInterface\n\tintf.LinkType = layers.LinkType(r.getUint16(r.buf[:2]))\n\tintf.SnapLength = r.getUint32(r.buf[4:8])\n\nOPTIONS:\n\tfor {\n\t\tif err := r.readOption(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch r.currentOption.code {\n\t\tcase ngOptionCodeEndOfOptions:\n\t\t\tbreak OPTIONS\n\t\tcase ngOptionCodeInterfaceName:\n\t\t\tintf.Name = string(r.currentOption.value)\n\t\tcase ngOptionCodeComment:\n\t\t\tintf.Comment = string(r.currentOption.value)\n\t\tcase ngOptionCodeInterfaceDescription:\n\t\t\tintf.Description = string(r.currentOption.value)\n\t\tcase ngOptionCodeInterfaceFilter:\n\t\t\t// ignore filter type (first byte) since it is not specified\n\t\t\tintf.Filter = string(r.currentOption.value[1:])\n\t\tcase ngOptionCodeInterfaceOS:\n\t\t\tintf.OS = string(r.currentOption.value)\n\t\tcase ngOptionCodeInterfaceTimestampOffset:\n\t\t\tintf.TimestampOffset = r.getUint64(r.currentOption.value[:8])\n\t\tcase ngOptionCodeInterfaceTimestampResolution:\n\t\t\tintf.TimestampResolution = NgResolution(r.currentOption.value[0])\n\t\t}\n\t}\n\tif _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {\n\t\treturn err\n\t}\n\tif intf.TimestampResolution == 0 {\n\t\tintf.TimestampResolution = 6\n\t}\n\n\t//parse options\n\tif intf.TimestampResolution.Binary() {\n\t\t//negative power of 2\n\t\tintf.secondMask = 1 << intf.TimestampResolution.Exponent()\n\t} else {\n\t\t//negative power of 10\n\t\tintf.secondMask = 1\n\t\tfor j := uint8(0); j < intf.TimestampResolution.Exponent(); j++ {\n\t\t\tintf.secondMask *= 10\n\t\t}\n\t}\n\tintf.scaleDown = 1\n\tintf.scaleUp = 1\n\tif intf.secondMask < 1e9 {\n\t\tintf.scaleUp = 1e9 / intf.secondMask\n\t} else {\n\t\tintf.scaleDown = intf.secondMask / 1e9\n\t}\n\tr.ifaces = append(r.ifaces, intf)\n\treturn nil\n}\n\n// convertTime adds offset + shifts the given time value according to the given interface\nfunc (r *NgReader) convertTime(ifaceID int, ts uint64) (int64, int64) {\n\tiface := r.ifaces[ifaceID]\n\treturn int64(ts/iface.secondMask + iface.TimestampOffset), int64(ts % iface.secondMask * iface.scaleUp / iface.scaleDown)\n}\n\n// readInterfaceStatistics updates the statistics of the given interface\nfunc (r *NgReader) readInterfaceStatistics() error {\n\tif err := r.readBytes(r.buf[:12]); err != nil {\n\t\treturn err\n\t}\n\tr.currentBlock.length -= 12\n\tifaceID := int(r.getUint32(r.buf[:4]))\n\tts := uint64(r.getUint32(r.buf[4:8]))<<32 | uint64(r.getUint32(r.buf[8:12]))\n\tif int(ifaceID) >= len(r.ifaces) {\n\t\treturn fmt.Errorf(\"Interface id %d not present in section (have only %d interfaces)\", ifaceID, len(r.ifaces))\n\t}\n\tstats := &r.ifaces[ifaceID].Statistics\n\t*stats = ngEmptyStatistics\n\tstats.LastUpdate = time.Unix(r.convertTime(ifaceID, ts)).UTC()\n\nOPTIONS:\n\tfor {\n\t\tif err := r.readOption(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch r.currentOption.code {\n\t\tcase ngOptionCodeEndOfOptions:\n\t\t\tbreak OPTIONS\n\t\tcase ngOptionCodeComment:\n\t\t\tstats.Comment = string(r.currentOption.value)\n\t\tcase ngOptionCodeInterfaceStatisticsStartTime:\n\t\t\tts = uint64(r.getUint32(r.currentOption.value[:4]))<<32 | uint64(r.getUint32(r.currentOption.value[4:8]))\n\t\t\tstats.StartTime = time.Unix(r.convertTime(ifaceID, ts)).UTC()\n\t\tcase ngOptionCodeInterfaceStatisticsEndTime:\n\t\t\tts = uint64(r.getUint32(r.currentOption.value[:4]))<<32 | uint64(r.getUint32(r.currentOption.value[4:8]))\n\t\t\tstats.EndTime = time.Unix(r.convertTime(ifaceID, ts)).UTC()\n\t\tcase ngOptionCodeInterfaceStatisticsInterfaceReceived:\n\t\t\tstats.PacketsReceived = r.getUint64(r.currentOption.value[:8])\n\t\tcase ngOptionCodeInterfaceStatisticsInterfaceDropped:\n\t\t\tstats.PacketsDropped = r.getUint64(r.currentOption.value[:8])\n\t\t}\n\t}\n\tif _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {\n\t\treturn err\n\t}\n\tif r.options.StatisticsCallback != nil {\n\t\tr.options.StatisticsCallback(ifaceID, *stats)\n\t}\n\treturn nil\n}\n\n// readPacketHeader looks for a packet (enhanced, simple, or packet) and parses the header.\n// If an interface descriptor, an interface statistics block, or a section header is encountered, those are handled accordingly.\n// All other block types are skipped. New block types must be added here.\nfunc (r *NgReader) readPacketHeader() error {\nRESTART:\nFIND_PACKET:\n\tfor {\n\t\tif err := r.readBlock(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch r.currentBlock.typ {\n\t\tcase ngBlockTypeEnhancedPacket:\n\t\t\tif err := r.readBytes(r.buf[:20]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tr.currentBlock.length -= 20\n\t\t\tr.ci.InterfaceIndex = int(r.getUint32(r.buf[:4]))\n\t\t\tif r.ci.InterfaceIndex >= len(r.ifaces) {\n\t\t\t\treturn fmt.Errorf(\"Interface id %d not present in section (have only %d interfaces)\", r.ci.InterfaceIndex, len(r.ifaces))\n\t\t\t}\n\t\t\tr.ci.Timestamp = time.Unix(r.convertTime(r.ci.InterfaceIndex, uint64(r.getUint32(r.buf[4:8]))<<32|uint64(r.getUint32(r.buf[8:12])))).UTC()\n\t\t\tr.ci.CaptureLength = int(r.getUint32(r.buf[12:16]))\n\t\t\tr.ci.Length = int(r.getUint32(r.buf[16:20]))\n\t\t\tbreak FIND_PACKET\n\t\tcase ngBlockTypeSimplePacket:\n\t\t\tif err := r.readBytes(r.buf[:4]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tr.currentBlock.length -= 4\n\t\t\tr.ci.Timestamp = time.Time{}\n\t\t\tr.ci.InterfaceIndex = 0\n\t\t\tr.ci.Length = int(r.getUint32(r.buf[:4]))\n\t\t\tr.ci.CaptureLength = r.ci.Length\n\t\t\tif len(r.ifaces) == 0 {\n\t\t\t\treturn errors.New(\"At least one Interface is needed for a packet\")\n\t\t\t}\n\t\t\tif r.ifaces[0].SnapLength != 0 && uint32(r.ci.CaptureLength) > r.ifaces[0].SnapLength {\n\t\t\t\tr.ci.CaptureLength = int(r.ifaces[0].SnapLength)\n\t\t\t}\n\t\t\tbreak FIND_PACKET\n\t\tcase ngBlockTypeInterfaceDescriptor:\n\t\t\tif err := r.readInterfaceDescriptor(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase ngBlockTypeInterfaceStatistics:\n\t\t\tif err := r.readInterfaceStatistics(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase ngBlockTypeSectionHeader:\n\t\t\tif err := r.readSectionHeader(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase ngBlockTypePacket:\n\t\t\tif err := r.readBytes(r.buf[:20]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tr.currentBlock.length -= 20\n\t\t\tr.ci.InterfaceIndex = int(r.getUint16(r.buf[0:2]))\n\t\t\tif r.ci.InterfaceIndex >= len(r.ifaces) {\n\t\t\t\treturn fmt.Errorf(\"Interface id %d not present in section (have only %d interfaces)\", r.ci.InterfaceIndex, len(r.ifaces))\n\t\t\t}\n\t\t\tr.ci.Timestamp = time.Unix(r.convertTime(r.ci.InterfaceIndex, uint64(r.getUint32(r.buf[4:8]))<<32|uint64(r.getUint32(r.buf[8:12])))).UTC()\n\t\t\tr.ci.CaptureLength = int(r.getUint32(r.buf[12:16]))\n\t\t\tr.ci.Length = int(r.getUint32(r.buf[16:20]))\n\t\t\tbreak FIND_PACKET\n\t\tdefault:\n\t\t\tif _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\tif !r.options.WantMixedLinkType {\n\t\tif r.ifaces[r.ci.InterfaceIndex].LinkType != r.linkType {\n\t\t\tif _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif r.options.ErrorOnMismatchingLinkType {\n\t\t\t\treturn ErrNgLinkTypeMismatch\n\t\t\t}\n\t\t\tgoto RESTART\n\t\t}\n\t\treturn nil\n\t}\n\tr.ancil[0] = r.ifaces[r.ci.InterfaceIndex].LinkType\n\treturn nil\n}\n\n// ReadPacketData returns the next packet available from this data source.\n// If WantMixedLinkType is true, ci.AncillaryData[0] contains the link type.\nfunc (r *NgReader) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\tif err = r.readPacketHeader(); err != nil {\n\t\treturn\n\t}\n\tci = r.ci\n\tif r.options.WantMixedLinkType {\n\t\tci.AncillaryData = make([]interface{}, 1)\n\t\tci.AncillaryData[0] = r.ancil[0]\n\t}\n\tdata = make([]byte, r.ci.CaptureLength)\n\tif err = r.readBytes(data); err != nil {\n\t\treturn\n\t}\n\t// handle options somehow - this would be expensive\n\t_, err = r.r.Discard(int(r.currentBlock.length) - r.ci.CaptureLength)\n\treturn\n}\n\n// ZeroCopyReadPacketData returns the next packet available from this data source.\n// If WantMixedLinkType is true, ci.AncillaryData[0] contains the link type.\n// Warning: Like data, ci.AncillaryData is also reused and overwritten on the next call to ZeroCopyReadPacketData.\n//\n// It is not true zero copy, as data is still copied from the underlying reader. However,\n// this method avoids allocating heap memory for every packet.\nfunc (r *NgReader) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\tif err = r.readPacketHeader(); err != nil {\n\t\treturn\n\t}\n\tci = r.ci\n\tif r.options.WantMixedLinkType {\n\t\tci.AncillaryData = r.ancil[:]\n\t}\n\tif cap(r.packetBuf) < ci.CaptureLength {\n\t\tsnaplen := int(r.ifaces[ci.InterfaceIndex].SnapLength)\n\t\tif snaplen < ci.CaptureLength {\n\t\t\tsnaplen = ci.CaptureLength\n\t\t}\n\t\tr.packetBuf = make([]byte, snaplen)\n\t}\n\tdata = r.packetBuf[:ci.CaptureLength]\n\tif err = r.readBytes(data); err != nil {\n\t\treturn\n\t}\n\t// handle options somehow - this would be expensive\n\t_, err = r.r.Discard(int(r.currentBlock.length) - ci.CaptureLength)\n\treturn\n}\n\n// LinkType returns the link type of the first interface, as a layers.LinkType. This is only valid, if WantMixedLinkType is false.\nfunc (r *NgReader) LinkType() layers.LinkType {\n\treturn r.linkType\n}\n\n// SectionInfo returns information about the current section.\nfunc (r *NgReader) SectionInfo() NgSectionInfo {\n\treturn r.sectionInfo\n}\n\n// Interface returns interface information and statistics of interface with the given id.\nfunc (r *NgReader) Interface(i int) (NgInterface, error) {\n\tif i >= len(r.ifaces) || i < 0 {\n\t\treturn NgInterface{}, fmt.Errorf(\"Interface %d invalid. There are only %d interfaces\", i, len(r.ifaces))\n\t}\n\treturn r.ifaces[i], nil\n}\n\n// NInterfaces returns the current number of interfaces.\nfunc (r *NgReader) NInterfaces() int {\n\treturn len(r.ifaces)\n}\n\n// Resolution returns the timestamp resolution of acquired timestamps before scaling to NanosecondTimestampResolution.\nfunc (r *NgReader) Resolution() gopacket.TimestampResolution {\n\tif r.options.WantMixedLinkType {\n\t\treturn gopacket.TimestampResolution{}\n\t}\n\treturn r.ifaces[0].Resolution()\n}\n"
  },
  {
    "path": "pcapgo/ngread_test.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcapgo\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\nfunc ngMustDecode(s string) []byte {\n\tret, err := hex.DecodeString(s)\n\tif err != nil {\n\t\tlog.Panic(\"Initialization failed\")\n\t}\n\treturn ret\n}\n\nvar ngPacketSource = [...][]byte{\n\tngMustDecode(\"ffffffffffff000b8201fc4208004500012ca8360000fa11178b00000000ffffffff004400430118591f0101060000003d1d0000000000000000000000000000000000000000000b8201fc4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000638253633501013d0701000b8201fc4232040000000037040103062aff00000000000000\"),\n\tngMustDecode(\"000b8201fc42000874adf19b0800450001480445000080110000c0a80001c0a8000a00430044013422330201060000003d1d0000000000000000c0a8000ac0a8000100000000000b8201fc4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000638253633501020104ffffff003a04000007083b0400000c4e330400000e103604c0a80001ff0000000000000000000000000000000000000000000000000000\"),\n\tngMustDecode(\"ffffffffffff000b8201fc4208004500012ca8370000fa11178a00000000ffffffff0044004301189fbd0101060000003d1e0000000000000000000000000000000000000000000b8201fc4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000638253633501033d0701000b8201fc423204c0a8000a3604c0a8000137040103062aff00\"),\n\tngMustDecode(\"000b8201fc42000874adf19b0800450001480446000080110000c0a80001c0a8000a004300440134dfdb0201060000003d1e0000000000000000c0a8000a0000000000000000000b8201fc4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000638253633501053a04000007083b0400000c4e330400000e103604c0a800010104ffffff00ff0000000000000000000000000000000000000000000000000000\"),\n\tngMustDecode(\"02000000450000a4c6ce00004011f147c0a8018bffffffff445c445c0090ba037b22686f73745f696e74223a20343039343531343438332c202276657273696f6e223a205b312c20385d2c2022646973706c61796e616d65223a2022222c2022706f7274223a2031373530302c20226e616d65737061636573223a205b32303532343235372c203633393533393037322c203633393533393333372c203633393533393535355d7d\"),\n}\n\ntype ngFileReadTestPacket struct {\n\tdata []byte\n\tci   gopacket.CaptureInfo\n\terr  error\n}\n\ntype ngFileReadTestSection struct {\n\tsectionInfo NgSectionInfo\n\tifaces      []NgInterface\n}\n\ntype ngFileReadTest struct {\n\ttestName                   string\n\ttestContents               io.Reader\n\ttestType                   string\n\twantMixedLinkType          bool\n\terrorOnMismatchingLinkType bool\n\tskipUnknownVersion         bool\n\n\tlinkType layers.LinkType\n\tsections []ngFileReadTestSection\n\tpackets  []ngFileReadTestPacket\n}\n\nfunc ngRunFileReadTest(test ngFileReadTest, be string, zerocopy bool, t *testing.T) {\n\tvar err error\n\tvar f io.Reader\n\tif test.testContents == nil {\n\t\ttestf, err := os.Open(filepath.Join(\"tests\", be, test.testName+\".pcapng\"))\n\t\tif err != nil {\n\t\t\tt.Fatal(\"Couldn't open file:\", err)\n\t\t}\n\t\tdefer testf.Close()\n\t\tf = testf\n\t} else {\n\t\tf = test.testContents\n\t}\n\n\tvar r *NgReader\n\n\tsection := 0\n\tcheckInterface := func(intf NgInterface, i int) {\n\t\tcurrentInterface := test.sections[section].ifaces[i]\n\n\t\t// fix non-zero defaults\n\t\tif currentInterface.TimestampResolution == 0 {\n\t\t\tcurrentInterface.TimestampResolution = 6\n\t\t}\n\t\t// clear private values\n\t\tintf.scaleDown = 0\n\t\tintf.scaleUp = 0\n\t\tintf.secondMask = 0\n\n\t\tif !reflect.DeepEqual(intf, currentInterface) {\n\t\t\tt.Fatalf(\"[section %d] interface %d mismatches:\\ngot:\\n%#v\\nwant:\\n%#v\\n\\n\", section, i, intf, currentInterface)\n\t\t}\n\t}\n\ttestSection := func(intf []NgInterface, sectionInfo NgSectionInfo) {\n\t\tcurrentSection := test.sections[section]\n\n\t\tif !reflect.DeepEqual(sectionInfo, currentSection.sectionInfo) {\n\t\t\tt.Fatalf(\"[section header %d] section info mismatch:\\ngot:\\n%#v\\nwant:\\n%#v\\n\\n\", section, sectionInfo, currentSection.sectionInfo)\n\t\t}\n\n\t\tif intf == nil {\n\t\t\tif r.NInterfaces() != len(test.sections[section].ifaces) {\n\t\t\t\tt.Fatalf(\"[section %d] Expected at least %d interfaces, but got only %d\", section, len(test.sections[section].ifaces), r.NInterfaces())\n\t\t\t}\n\t\t\tfor i := 0; i < r.NInterfaces(); i++ {\n\t\t\t\tin, err := r.Interface(i)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"Unexpected error querying interface %d\", i)\n\t\t\t\t}\n\t\t\t\tcheckInterface(in, i)\n\t\t\t}\n\t\t} else {\n\t\t\tif len(intf) != len(test.sections[section].ifaces) {\n\t\t\t\tt.Fatalf(\"[section %d] Expected at least %d interfaces, but got only %d\", section, len(test.sections[section].ifaces), len(intf))\n\t\t\t}\n\t\t\tfor i, in := range intf {\n\t\t\t\tcheckInterface(in, i)\n\t\t\t}\n\t\t}\n\n\t\tsection++\n\t}\n\n\toptions := DefaultNgReaderOptions\n\toptions.ErrorOnMismatchingLinkType = test.errorOnMismatchingLinkType\n\toptions.WantMixedLinkType = test.wantMixedLinkType\n\toptions.SkipUnknownVersion = test.skipUnknownVersion\n\tif len(test.sections) > 1 {\n\t\toptions.SectionEndCallback = testSection\n\t}\n\n\tr, err = NewNgReader(f, options)\n\tif err != nil {\n\t\tt.Fatal(\"Couldn't read start of file:\", err)\n\t}\n\n\tif test.wantMixedLinkType {\n\t\tif r.LinkType() != 0 {\n\t\t\tt.Fatalf(\"[first interface (section %d)] LinkType should be 0 with WantMixedLinkType, but is %s\", section, r.LinkType())\n\t\t}\n\t} else {\n\t\tif r.LinkType() != test.linkType {\n\t\t\tt.Fatalf(\"[first interface (section %d)] LinkType mismatch: Should be %s but is %s\", section, test.linkType, r.LinkType())\n\t\t}\n\t}\n\n\tfor i, packet := range test.packets {\n\t\tvar data []byte\n\t\tvar ci gopacket.CaptureInfo\n\t\tvar err error\n\n\t\tif zerocopy {\n\t\t\tdata, ci, err = r.ZeroCopyReadPacketData()\n\t\t} else {\n\t\t\tdata, ci, err = r.ReadPacketData()\n\t\t}\n\t\tif err == io.EOF {\n\t\t\tt.Fatalf(\"[packets] Expected %d packets, but got only %d\", len(test.packets), i)\n\t\t}\n\t\tif err != nil {\n\t\t\tif err != packet.err {\n\t\t\t\tt.Fatalf(\"[packet %d] Expected error %s, but got %s\", i, packet.err, err)\n\t\t\t}\n\t\t\tif err != ErrNgVersionMismatch {\n\t\t\t\ttestSection(nil, r.SectionInfo())\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tif bytes.Compare(data, packet.data) != 0 {\n\t\t\tt.Log(data)\n\t\t\tt.Log(packet.data)\n\t\t\tt.Fatalf(\"[packet %d] data mismatch\", i)\n\t\t}\n\n\t\tif !reflect.DeepEqual(ci, packet.ci) {\n\t\t\tt.Fatalf(\"[packet %d] ci mismatch:\\ngot:\\n%#v\\nwant:\\n%#v\\n\\n\", i, ci, packet.ci)\n\t\t}\n\t}\n\n\tif zerocopy {\n\t\t_, _, err = r.ZeroCopyReadPacketData()\n\t} else {\n\t\t_, _, err = r.ReadPacketData()\n\t}\n\tif err != io.EOF {\n\t\tt.Fatalf(\"[packets] Expected only %d packet(s), but got at least one more!\", len(test.packets))\n\t}\n\n\ttestSection(nil, r.SectionInfo())\n\n\tif section != len(test.sections) {\n\t\tt.Fatalf(\"File should have %d sections, but has %d\", len(test.sections), section)\n\t}\n}\n\nvar tests = []ngFileReadTest{\n\t{\n\t\ttestName: \"test001\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test001\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"silly ethernet interface\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[0]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[1]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[2]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[3]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName:          \"test002\",\n\t\twantMixedLinkType: true,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test002\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test003\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test003\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"silly ethernet interface\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test004\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test004\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 128,\n\t\t\t\t\t\tName:       \"en1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1][:128],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  128,\n\t\t\t\t\tInterfaceIndex: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+2000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3][:128],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+3000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  128,\n\t\t\t\t\tInterfaceIndex: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test005\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test005\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 128,\n\t\t\t\t\t\tName:       \"en1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1][:128],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  128,\n\t\t\t\t\tInterfaceIndex: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+2000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3][:128],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+3000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  128,\n\t\t\t\t\tInterfaceIndex: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test006\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test006\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType: layers.LinkTypeNull,\n\t\t\t\t\t\tName:     \"en1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+2000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+3000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+4000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName:                   \"test006\",\n\t\ttestType:                   \"/ErrorOnMismatchingLink\",\n\t\terrorOnMismatchingLinkType: true,\n\t\tlinkType:                   layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test006\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType: layers.LinkTypeNull,\n\t\t\t\t\t\tName:     \"en1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{err: ErrNgLinkTypeMismatch},\n\t\t},\n\t},\n\t{\n\t\ttestName:          \"test006\",\n\t\ttestType:          \"/WantMixedLinkType\",\n\t\twantMixedLinkType: true,\n\t\tlinkType:          layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test006\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType: layers.LinkTypeNull,\n\t\t\t\t\t\tName:     \"en1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t\tAncillaryData:  []interface{}{layers.LinkTypeEthernet},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[4],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[4]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[4]),\n\t\t\t\t\tInterfaceIndex: 1,\n\t\t\t\t\tAncillaryData:  []interface{}{layers.LinkTypeNull},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+2000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t\tAncillaryData:  []interface{}{layers.LinkTypeEthernet},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+3000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t\tAncillaryData:  []interface{}{layers.LinkTypeEthernet},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+4000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t\tAncillaryData:  []interface{}{layers.LinkTypeEthernet},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test007\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test007\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test008\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test008\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:            layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength:          96,\n\t\t\t\t\t\tName:                \"eth-_0 foo\",\n\t\t\t\t\t\tComment:             \"test008, and more\\nfoo\\r\\nbar\",\n\t\t\t\t\t\tDescription:         \"silly ethernet interface\",\n\t\t\t\t\t\tFilter:              \"tcp port 23 and host 192.0.2.5\",\n\t\t\t\t\t\tOS:                  \"Microsoft Windows for Workgroups 3.11b\\npatch 42\",\n\t\t\t\t\t\tTimestampResolution: 9,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:            layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength:          128,\n\t\t\t\t\t\tName:                \"en1\",\n\t\t\t\t\t\tComment:             \"test008\",\n\t\t\t\t\t\tDescription:         \"silly ethernet interface 2\",\n\t\t\t\t\t\tFilter:              \"tcp port 23 and host 192.0.2.5\",\n\t\t\t\t\t\tOS:                  \"Novell NetWare 4.11\\nbut not using IPX\",\n\t\t\t\t\t\tTimestampResolution: 9,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1][:128],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa+1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  128,\n\t\t\t\t\tInterfaceIndex: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa+2000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3][:128],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa+3000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  128,\n\t\t\t\t\tInterfaceIndex: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test009\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test009\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[0]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[1]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test010\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test010\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[0]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[1]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[2]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[3]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test011\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test011\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[0]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[1]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[2]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+1000*2000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[3]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test012\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test012\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 315,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[0]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1][:315],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  315,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[2]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3][:315],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  315,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test013\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test013\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"silly ethernet interface\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0).UTC(),\n\t\t\t\t\t\t\tStartTime:       time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tEndTime:         time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  10,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName:          \"test014\",\n\t\twantMixedLinkType: true,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test014\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tStartTime:       time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tEndTime:         time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  10,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeNull,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"null1\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tStartTime:       time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tEndTime:         time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  10,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 128,\n\t\t\t\t\t\tName:       \"silly ethernet interface 2\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tStartTime:       time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tEndTime:         time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  10,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t\tComment:         \"test014 ISB\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test015\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test015\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"silly ethernet interface\",\n\t\t\t\t\t\tComment:    \"test015 IDB\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test016\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test016\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[0]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[1]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[2]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+1000*2000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[3]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName:          \"test017\",\n\t\twantMixedLinkType: true,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test017\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test018\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test018\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[0]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[1]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[2]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+1000*2000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[3]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test100\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test100\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeNull,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"null1\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 128,\n\t\t\t\t\t\tName:       \"wifi2?\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[0]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[1]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[2]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+1000*2000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[3]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test101\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test101\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  NgNoValue64,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeNull,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"null1\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0x4c39764ca47aa*1000-1000*1000).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  NgNoValue64,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 128,\n\t\t\t\t\t\tName:       \"silly ethernet interface 2\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\t\t\tStartTime:       time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tEndTime:         time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  10,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t\tComment:         \"test101 ISB-2\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1][:128],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  128,\n\t\t\t\t\tInterfaceIndex: 2,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test102\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test102\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  NgNoValue64,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeNull,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"null1\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0x4c39764ca47aa*1000-1000*1000).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  NgNoValue64,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"silly!\\r\\nethernet interface 2\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\t\t\tStartTime:       time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tEndTime:         time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  10,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t\tComment:         \"test102 ISB-2\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[1]),\n\t\t\t\t\tInterfaceIndex: 2,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000+2000*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test200\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test200\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test200\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test200\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeNull,\n\t\t\t\t\t\tSnapLength: 128,\n\t\t\t\t\t\tName:       \"null1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test201\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test201 SHB-0\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeNull,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"null1\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  NgNoValue64,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test201 SHB-1\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 128,\n\t\t\t\t\t\tName:       \"silly ethernet interface 2\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\t\t\tStartTime:       time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tEndTime:         time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  10,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t\tComment:         \"test201 ISB-2\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test201 SHB-2\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  NgNoValue64,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeNull,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"null1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1][:128],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  128,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2][:128],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  128,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test202\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test202 SHB-0\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeNull,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"null1\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  NgNoValue64,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test202 SHB-1\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 128,\n\t\t\t\t\t\tName:       \"silly ethernet interface 2\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\t\t\tStartTime:       time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tEndTime:         time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\t\t\tPacketsDropped:  10,\n\t\t\t\t\t\t\tPacketsReceived: NgNoValue64,\n\t\t\t\t\t\t\tComment:         \"test202 ISB-2\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"Apple MBP\",\n\t\t\t\t\tOS:          \"OS-X 10.10.5\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test202 SHB-2\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 96,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(0, 0).UTC(),\n\t\t\t\t\t\t\tStartTime:       time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\t\t\tEndTime:         time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),\n\t\t\t\t\t\t\tPacketsReceived: 100,\n\t\t\t\t\t\t\tPacketsDropped:  1,\n\t\t\t\t\t\t\tComment:         \"test202 ISB-0\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeNull,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"null1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0][:128],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  128,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1][:128],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  128,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2][:128],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Time{},\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  128,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3][:128],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  128,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test901\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"my computer\",\n\t\t\t\t\tOS:          \"linux\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test901 SHB-0\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[0]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{err: ErrNgVersionMismatch},\n\t\t},\n\t},\n\t{\n\t\ttestName:           \"test901\",\n\t\tskipUnknownVersion: true,\n\t\tlinkType:           layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"my computer\",\n\t\t\t\t\tOS:          \"linux\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test901 SHB-0\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"my computer\",\n\t\t\t\t\tOS:          \"linux\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test901 SHB-2\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:   layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength: 0,\n\t\t\t\t\t\tName:       \"eth0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[0]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(0, 0x4c39764ca47aa*1000).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[2]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\ttestName: \"test902\",\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tHardware:    \"my computer\",\n\t\t\t\t\tOS:          \"linux\",\n\t\t\t\t\tApplication: \"pcap_writer.lua\",\n\t\t\t\t\tComment:     \"test902\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tLinkType:            layers.LinkTypeEthernet,\n\t\t\t\t\t\tSnapLength:          0,\n\t\t\t\t\t\tName:                \"eth0\",\n\t\t\t\t\t\tTimestampResolution: 0x88,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(1519128000, 195312500).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[0]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n}\n\nfunc TestNgFileReadBE(t *testing.T) {\n\tfor _, test := range tests {\n\t\tngRunFileReadTest(test, \"be\", false, t)\n\t}\n}\n\nfunc TestNgFileReadLE(t *testing.T) {\n\tfor _, test := range tests {\n\t\tngRunFileReadTest(test, \"le\", false, t)\n\t}\n}\n\nfunc TestNgFileReadBEZero(t *testing.T) {\n\tfor _, test := range tests {\n\t\tngRunFileReadTest(test, \"be\", true, t)\n\t}\n}\n\nfunc TestNgFileReadLEZero(t *testing.T) {\n\tfor _, test := range tests {\n\t\tngRunFileReadTest(test, \"le\", true, t)\n\t}\n}\n\ntype endlessNgPacketReader struct {\n\tpacket []byte\n}\n\nfunc (e endlessNgPacketReader) Read(p []byte) (n int, err error) {\n\tn = copy(p, e.packet)\n\treturn\n}\n\nfunc setupNgReadBenchmark(b *testing.B) *NgReader {\n\theader := bytes.NewBuffer([]byte{\n\t\t0x0A, 0x0D, 0x0D, 0x0A, // Section Header\n\t\t0, 0, 0, 28, // block total length\n\t\t0x1A, 0x2B, 0x3C, 0x4D, // BOM\n\t\t0, 1, 0, 0, //Version\n\t\t0, 0, 0, 0, //Section length\n\t\t0, 0, 0, 0, //Section length\n\t\t0, 0, 0, 28, //block total length\n\n\t\t0, 0, 0, 1, // IDB\n\t\t0, 0, 0, 20, // block total length\n\t\t0, 1, 0, 0, // Ethernet\n\t\t0, 0, 0, 0, // Snap length\n\t\t0, 0, 0, 20, // block total length\n\t})\n\n\tpacket := endlessNgPacketReader{\n\t\t[]byte{\n\t\t\t0, 0, 0, 6, // EPB\n\t\t\t0, 0, 0, 48, // block total length\n\t\t\t0, 0, 0, 0, // interface ID\n\t\t\t0, 0, 0, 0, // time (high)\n\t\t\t0, 0, 0, 0, // time (low)\n\t\t\t0, 0, 0, 16, // capture packet length\n\t\t\t0, 0, 0, 16, // original packet length\n\t\t\t1, 2, 3, 4,\n\t\t\t5, 6, 7, 8,\n\t\t\t9, 10, 11, 12,\n\t\t\t13, 14, 15, 16,\n\t\t\t0, 0, 0, 48, // block total length\n\t\t\t0, 0, 0, 6, // EPB\n\t\t\t0, 0, 0, 40, // block total length\n\t\t\t0, 0, 0, 0, // interface ID\n\t\t\t0, 0, 0, 0, // time (high)\n\t\t\t0, 0, 0, 0, // time (low)\n\t\t\t0, 0, 0, 8, // capture packet length\n\t\t\t0, 0, 0, 8, // original packet length\n\t\t\t8, 7, 6, 5,\n\t\t\t4, 3, 2, 1,\n\t\t\t0, 0, 0, 40, // block total length\n\t\t},\n\t}\n\tpacketReader := bufio.NewReaderSize(packet, len(packet.packet))\n\n\tr, err := NewNgReader(header, DefaultNgReaderOptions)\n\n\tif err != nil {\n\t\tb.Fatal(\"Couldn't read header + IDB:\", err)\n\t}\n\tr.r = packetReader\n\treturn r\n}\n\nfunc BenchmarkNgReadPacketData(b *testing.B) {\n\tr := setupNgReadBenchmark(b)\n\tb.ResetTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\t_, _, _ = r.ReadPacketData()\n\t}\n}\n\nfunc BenchmarkNgZeroCopyReadPacketData(b *testing.B) {\n\tr := setupNgReadBenchmark(b)\n\tb.ResetTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\t_, _, _ = r.ZeroCopyReadPacketData()\n\t}\n}\n"
  },
  {
    "path": "pcapgo/ngwrite.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcapgo\n\nimport (\n\t\"bufio\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"runtime\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\n// NgWriterOptions holds options for creating a pcapng file\ntype NgWriterOptions struct {\n\t// SectionInfo will be written to the section header\n\tSectionInfo NgSectionInfo\n}\n\n// DefaultNgWriterOptions contain defaults for a pcapng writer used by NewWriter\nvar DefaultNgWriterOptions = NgWriterOptions{\n\tSectionInfo: NgSectionInfo{\n\t\tHardware:    runtime.GOARCH,\n\t\tOS:          runtime.GOOS,\n\t\tApplication: \"gopacket\", //spread the word\n\t},\n}\n\n// DefaultNgInterface contains default interface options used by NewWriter\nvar DefaultNgInterface = NgInterface{\n\tName:                \"intf0\",\n\tOS:                  runtime.GOOS,\n\tSnapLength:          0, //unlimited\n\tTimestampResolution: 9,\n}\n\n// NgWriter holds the internal state of a pcapng file writer. Internally a bufio.NgWriter is used, therefore Flush must be called before closing the underlying file.\ntype NgWriter struct {\n\tw       *bufio.Writer\n\toptions NgWriterOptions\n\tintf    uint32\n\tbuf     [28]byte\n}\n\n// NewNgWriter initializes and returns a new writer. Additionally, one section and one interface (without statistics) is written to the file. Interface and section options are used from DefaultNgInterface and DefaultNgWriterOptions.\n// Flush must be called before the file is closed, or if eventual unwritten information should be written out to the storage device.\n//\n// Written files are in little endian format. Interface timestamp resolution is fixed to 9 (to match time.Time).\nfunc NewNgWriter(w io.Writer, linkType layers.LinkType) (*NgWriter, error) {\n\tintf := DefaultNgInterface\n\tintf.LinkType = linkType\n\treturn NewNgWriterInterface(w, intf, DefaultNgWriterOptions)\n}\n\n// NewNgWriterInterface initializes and returns a new writer. Additionally, one section and one interface (without statistics) is written to the file.\n// Flush must be called before the file is closed, or if eventual unwritten information should be written out to the storage device.\n//\n// Written files are in little endian format. Interface timestamp resolution is fixed to 9 (to match time.Time).\nfunc NewNgWriterInterface(w io.Writer, intf NgInterface, options NgWriterOptions) (*NgWriter, error) {\n\tret := &NgWriter{\n\t\tw:       bufio.NewWriter(w),\n\t\toptions: options,\n\t}\n\tif err := ret.writeSectionHeader(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif _, err := ret.AddInterface(intf); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n}\n\n// ngOptionLength returns the needed length for one option value (without padding)\nfunc ngOptionLength(option ngOption) int {\n\tswitch val := option.raw.(type) {\n\tcase []byte:\n\t\treturn len(val)\n\tcase string:\n\t\treturn len(val)\n\tcase time.Time:\n\t\treturn 8\n\tcase uint64:\n\t\treturn 8\n\tcase uint32:\n\t\treturn 4\n\tcase uint8:\n\t\treturn 1\n\tdefault:\n\t\tpanic(\"This should never happen\")\n\t}\n}\n\n// prepareNgOptions fills out the length value of the given options and returns the number of octets needed for all the given options including padding.\nfunc prepareNgOptions(options []ngOption) uint32 {\n\tvar ret uint32\n\tfor i, option := range options {\n\t\tlength := ngOptionLength(option)\n\t\toptions[i].length = uint16(length)\n\t\tlength += (4-length&3)&3 + // padding\n\t\t\t4 //header\n\t\tret += uint32(length)\n\t}\n\tif ret > 0 {\n\t\tret += 4 // end of options\n\t}\n\treturn ret\n}\n\n// writeOptions writes the given options to the file. prepareOptions must be called beforehand.\nfunc (w *NgWriter) writeOptions(options []ngOption) error {\n\tif len(options) == 0 {\n\t\treturn nil\n\t}\n\n\tvar zero [4]byte\n\tfor _, option := range options {\n\t\tbinary.LittleEndian.PutUint16(w.buf[0:2], uint16(option.code))\n\t\tbinary.LittleEndian.PutUint16(w.buf[2:4], option.length)\n\t\tif _, err := w.w.Write(w.buf[:4]); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch val := option.raw.(type) {\n\t\tcase []byte:\n\t\t\tif _, err := w.w.Write(val); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tpadding := uint8((4 - option.length&3) & 3)\n\t\t\tif padding < 4 {\n\t\t\t\tif _, err := w.w.Write(zero[:padding]); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\tcase string:\n\t\t\tif _, err := w.w.Write([]byte(val)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tpadding := uint8((4 - option.length&3) & 3)\n\t\t\tif padding < 4 {\n\t\t\t\tif _, err := w.w.Write(zero[:padding]); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\tcase time.Time:\n\t\t\tts := val.UnixNano()\n\t\t\tbinary.LittleEndian.PutUint32(w.buf[:4], uint32(ts>>32))\n\t\t\tbinary.LittleEndian.PutUint32(w.buf[4:8], uint32(ts))\n\t\t\tif _, err := w.w.Write(w.buf[:8]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase uint64:\n\t\t\tbinary.LittleEndian.PutUint64(w.buf[:8], val)\n\t\t\tif _, err := w.w.Write(w.buf[:8]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase uint32:\n\t\t\tbinary.LittleEndian.PutUint32(w.buf[:4], val)\n\t\t\tif _, err := w.w.Write(w.buf[:4]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase uint8:\n\t\t\tbinary.LittleEndian.PutUint32(w.buf[:4], 0) // padding\n\t\t\tw.buf[0] = val\n\t\t\tif _, err := w.w.Write(w.buf[:4]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(\"This should never happen\")\n\t\t}\n\t}\n\n\t// options must be folled by an end of options option\n\tbinary.LittleEndian.PutUint16(w.buf[0:2], uint16(ngOptionCodeEndOfOptions))\n\tbinary.LittleEndian.PutUint16(w.buf[2:4], 0)\n\t_, err := w.w.Write(w.buf[:4])\n\treturn err\n}\n\n// writeSectionHeader writes a section header to the file\nfunc (w *NgWriter) writeSectionHeader() error {\n\tvar scratch [4]ngOption\n\ti := 0\n\tinfo := w.options.SectionInfo\n\tif info.Application != \"\" {\n\t\tscratch[i].code = ngOptionCodeUserApplication\n\t\tscratch[i].raw = info.Application\n\t\ti++\n\t}\n\tif info.Comment != \"\" {\n\t\tscratch[i].code = ngOptionCodeComment\n\t\tscratch[i].raw = info.Comment\n\t\ti++\n\t}\n\tif info.Hardware != \"\" {\n\t\tscratch[i].code = ngOptionCodeHardware\n\t\tscratch[i].raw = info.Hardware\n\t\ti++\n\t}\n\tif info.OS != \"\" {\n\t\tscratch[i].code = ngOptionCodeOS\n\t\tscratch[i].raw = info.OS\n\t\ti++\n\t}\n\toptions := scratch[:i]\n\n\tlength := prepareNgOptions(options) +\n\t\t24 + // header\n\t\t4 // trailer\n\n\tbinary.LittleEndian.PutUint32(w.buf[:4], uint32(ngBlockTypeSectionHeader))\n\tbinary.LittleEndian.PutUint32(w.buf[4:8], length)\n\tbinary.LittleEndian.PutUint32(w.buf[8:12], ngByteOrderMagic)\n\tbinary.LittleEndian.PutUint16(w.buf[12:14], ngVersionMajor)\n\tbinary.LittleEndian.PutUint16(w.buf[14:16], ngVersionMinor)\n\tbinary.LittleEndian.PutUint64(w.buf[16:24], 0xFFFFFFFFFFFFFFFF) // unspecified\n\tif _, err := w.w.Write(w.buf[:24]); err != nil {\n\t\treturn err\n\t}\n\n\tif err := w.writeOptions(options); err != nil {\n\t\treturn err\n\t}\n\n\tbinary.LittleEndian.PutUint32(w.buf[0:4], length)\n\t_, err := w.w.Write(w.buf[:4])\n\treturn err\n}\n\n// AddInterface adds the specified interface to the file, excluding statistics. Interface timestamp resolution is fixed to 9 (to match time.Time). Empty values are not written.\nfunc (w *NgWriter) AddInterface(intf NgInterface) (id int, err error) {\n\tid = int(w.intf)\n\tw.intf++\n\n\tvar scratch [7]ngOption\n\ti := 0\n\tif intf.Name != \"\" {\n\t\tscratch[i].code = ngOptionCodeInterfaceName\n\t\tscratch[i].raw = intf.Name\n\t\ti++\n\t}\n\tif intf.Comment != \"\" {\n\t\tscratch[i].code = ngOptionCodeComment\n\t\tscratch[i].raw = intf.Comment\n\t\ti++\n\t}\n\tif intf.Description != \"\" {\n\t\tscratch[i].code = ngOptionCodeInterfaceDescription\n\t\tscratch[i].raw = intf.Description\n\t\ti++\n\t}\n\tif intf.Filter != \"\" {\n\t\tscratch[i].code = ngOptionCodeInterfaceFilter\n\t\tscratch[i].raw = append([]byte{0}, []byte(intf.Filter)...)\n\t\ti++\n\t}\n\tif intf.OS != \"\" {\n\t\tscratch[i].code = ngOptionCodeInterfaceOS\n\t\tscratch[i].raw = intf.OS\n\t\ti++\n\t}\n\tif intf.TimestampOffset != 0 {\n\t\tscratch[i].code = ngOptionCodeInterfaceTimestampOffset\n\t\tscratch[i].raw = intf.TimestampOffset\n\t\ti++\n\t}\n\tscratch[i].code = ngOptionCodeInterfaceTimestampResolution\n\tscratch[i].raw = uint8(9) // fix resolution to nanoseconds (time.Time) in decimal\n\ti++\n\toptions := scratch[:i]\n\n\tlength := prepareNgOptions(options) +\n\t\t16 + // header\n\t\t4 // trailer\n\n\tbinary.LittleEndian.PutUint32(w.buf[:4], uint32(ngBlockTypeInterfaceDescriptor))\n\tbinary.LittleEndian.PutUint32(w.buf[4:8], length)\n\tbinary.LittleEndian.PutUint16(w.buf[8:10], uint16(intf.LinkType))\n\tbinary.LittleEndian.PutUint16(w.buf[10:12], 0) // reserved value\n\tbinary.LittleEndian.PutUint32(w.buf[12:16], intf.SnapLength)\n\tif _, err := w.w.Write(w.buf[:16]); err != nil {\n\t\treturn 0, err\n\t}\n\n\tif err := w.writeOptions(options); err != nil {\n\t\treturn 0, err\n\t}\n\n\tbinary.LittleEndian.PutUint32(w.buf[0:4], length)\n\t_, err = w.w.Write(w.buf[:4])\n\treturn id, err\n}\n\n// WriteInterfaceStats writes the given interface statistics for the given interface id to the file. Empty values are not written.\nfunc (w *NgWriter) WriteInterfaceStats(intf int, stats NgInterfaceStatistics) error {\n\tif intf >= int(w.intf) || intf < 0 {\n\t\treturn fmt.Errorf(\"Can't send statistics for non existent interface %d; have only %d interfaces\", intf, w.intf)\n\t}\n\n\tvar scratch [4]ngOption\n\ti := 0\n\tif !stats.StartTime.IsZero() {\n\t\tscratch[i].code = ngOptionCodeInterfaceStatisticsStartTime\n\t\tscratch[i].raw = stats.StartTime\n\t\ti++\n\t}\n\tif !stats.EndTime.IsZero() {\n\t\tscratch[i].code = ngOptionCodeInterfaceStatisticsEndTime\n\t\tscratch[i].raw = stats.EndTime\n\t\ti++\n\t}\n\tif stats.PacketsDropped != NgNoValue64 {\n\t\tscratch[i].code = ngOptionCodeInterfaceStatisticsInterfaceDropped\n\t\tscratch[i].raw = stats.PacketsDropped\n\t\ti++\n\t}\n\tif stats.PacketsReceived != NgNoValue64 {\n\t\tscratch[i].code = ngOptionCodeInterfaceStatisticsInterfaceReceived\n\t\tscratch[i].raw = stats.PacketsReceived\n\t\ti++\n\t}\n\toptions := scratch[:i]\n\n\tlength := prepareNgOptions(options) + 24\n\n\tts := stats.LastUpdate.UnixNano()\n\tif stats.LastUpdate.IsZero() {\n\t\tts = 0\n\t}\n\n\tbinary.LittleEndian.PutUint32(w.buf[:4], uint32(ngBlockTypeInterfaceStatistics))\n\tbinary.LittleEndian.PutUint32(w.buf[4:8], length)\n\tbinary.LittleEndian.PutUint32(w.buf[8:12], uint32(intf))\n\tbinary.LittleEndian.PutUint32(w.buf[12:16], uint32(ts>>32))\n\tbinary.LittleEndian.PutUint32(w.buf[16:20], uint32(ts))\n\tif _, err := w.w.Write(w.buf[:20]); err != nil {\n\t\treturn err\n\t}\n\n\tif err := w.writeOptions(options); err != nil {\n\t\treturn err\n\t}\n\n\tbinary.LittleEndian.PutUint32(w.buf[0:4], length)\n\t_, err := w.w.Write(w.buf[:4])\n\treturn err\n}\n\n// WritePacket writes out packet with the given data and capture info. The given InterfaceIndex must already be added to the file. InterfaceIndex 0 is automatically added by the NewWriter* methods.\nfunc (w *NgWriter) WritePacket(ci gopacket.CaptureInfo, data []byte) error {\n\tif ci.InterfaceIndex >= int(w.intf) || ci.InterfaceIndex < 0 {\n\t\treturn fmt.Errorf(\"Can't send statistics for non existent interface %d; have only %d interfaces\", ci.InterfaceIndex, w.intf)\n\t}\n\tif ci.CaptureLength != len(data) {\n\t\treturn fmt.Errorf(\"capture length %d does not match data length %d\", ci.CaptureLength, len(data))\n\t}\n\tif ci.CaptureLength > ci.Length {\n\t\treturn fmt.Errorf(\"invalid capture info %+v:  capture length > length\", ci)\n\t}\n\n\tlength := uint32(len(data)) + 32\n\tpadding := (4 - length&3) & 3\n\tlength += padding\n\n\tts := ci.Timestamp.UnixNano()\n\n\tbinary.LittleEndian.PutUint32(w.buf[:4], uint32(ngBlockTypeEnhancedPacket))\n\tbinary.LittleEndian.PutUint32(w.buf[4:8], length)\n\tbinary.LittleEndian.PutUint32(w.buf[8:12], uint32(ci.InterfaceIndex))\n\tbinary.LittleEndian.PutUint32(w.buf[12:16], uint32(ts>>32))\n\tbinary.LittleEndian.PutUint32(w.buf[16:20], uint32(ts))\n\tbinary.LittleEndian.PutUint32(w.buf[20:24], uint32(ci.CaptureLength))\n\tbinary.LittleEndian.PutUint32(w.buf[24:28], uint32(ci.Length))\n\n\tif _, err := w.w.Write(w.buf[:28]); err != nil {\n\t\treturn err\n\t}\n\n\tif _, err := w.w.Write(data); err != nil {\n\t\treturn err\n\t}\n\n\tbinary.LittleEndian.PutUint32(w.buf[:4], 0)\n\t_, err := w.w.Write(w.buf[4-padding : 8]) // padding + length\n\treturn err\n}\n\n// Flush writes out buffered data to the storage media. Must be called before closing the underlying file.\nfunc (w *NgWriter) Flush() error {\n\treturn w.w.Flush()\n}\n"
  },
  {
    "path": "pcapgo/ngwrite_test.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcapgo\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\nfunc TestNgWriteSimple(t *testing.T) {\n\tbuffer := &bytes.Buffer{}\n\n\tw, err := NewNgWriter(buffer, layers.LinkTypeEthernet)\n\tif err != nil {\n\t\tt.Fatal(\"Opening file failed with: \", err)\n\t}\n\tci := gopacket.CaptureInfo{\n\t\tTimestamp:      time.Unix(0, 0).UTC(),\n\t\tLength:         len(ngPacketSource[0]),\n\t\tCaptureLength:  len(ngPacketSource[0]),\n\t\tInterfaceIndex: 0,\n\t}\n\terr = w.WritePacket(ci, ngPacketSource[0])\n\tif err != nil {\n\t\tt.Fatal(\"Couldn't write packet\", err)\n\t}\n\terr = w.Flush()\n\tif err != nil {\n\t\tt.Fatal(\"Couldn't flush buffer\", err)\n\t}\n\n\tinterf := DefaultNgInterface\n\tinterf.LinkType = layers.LinkTypeEthernet\n\n\ttest := ngFileReadTest{\n\t\ttestContents: bytes.NewReader(buffer.Bytes()),\n\t\tlinkType:     layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: DefaultNgWriterOptions.SectionInfo,\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\tinterf,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0],\n\t\t\t\tci:   ci,\n\t\t\t},\n\t\t},\n\t}\n\n\tngRunFileReadTest(test, \"\", false, t)\n}\n\nfunc TestNgWriteComplex(t *testing.T) {\n\ttest := ngFileReadTest{\n\t\tlinkType: layers.LinkTypeEthernet,\n\t\tsections: []ngFileReadTestSection{\n\t\t\t{\n\t\t\t\tsectionInfo: NgSectionInfo{\n\t\t\t\t\tComment: \"A test\",\n\t\t\t\t},\n\t\t\t\tifaces: []NgInterface{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:                \"in0\",\n\t\t\t\t\t\tComment:             \"test0\",\n\t\t\t\t\t\tDescription:         \"some test interface\",\n\t\t\t\t\t\tLinkType:            layers.LinkTypeEthernet,\n\t\t\t\t\t\tTimestampResolution: 3,\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate:      time.Unix(1519128000, 195312500).UTC(),\n\t\t\t\t\t\t\tStartTime:       time.Unix(1519128000-100, 195312500).UTC(),\n\t\t\t\t\t\t\tEndTime:         time.Unix(1519128000, 195312500).UTC(),\n\t\t\t\t\t\t\tPacketsReceived: 100,\n\t\t\t\t\t\t\tPacketsDropped:  1,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:            \"null0\",\n\t\t\t\t\t\tDescription:     \"some test interface\",\n\t\t\t\t\t\tFilter:          \"none\",\n\t\t\t\t\t\tOS:              \"not needed\",\n\t\t\t\t\t\tLinkType:        layers.LinkTypeEthernet,\n\t\t\t\t\t\tTimestampOffset: 100,\n\t\t\t\t\t\tStatistics: NgInterfaceStatistics{\n\t\t\t\t\t\t\tLastUpdate: time.Unix(1519128000, 195312500).UTC(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpackets: []ngFileReadTestPacket{\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[0],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(1519128000-900, 195312500).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[0]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[0]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[4],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(1519128000-800, 195312500).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[4]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[4]),\n\t\t\t\t\tInterfaceIndex: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[1],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(1519128000-500, 195312500).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[1]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[1]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[2][:96],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(1519128000-300, 195312500).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[2]),\n\t\t\t\t\tCaptureLength:  96,\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdata: ngPacketSource[3],\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp:      time.Unix(1519128000-200, 195312500).UTC(),\n\t\t\t\t\tLength:         len(ngPacketSource[3]),\n\t\t\t\t\tCaptureLength:  len(ngPacketSource[3]),\n\t\t\t\t\tInterfaceIndex: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tbuffer := &bytes.Buffer{}\n\n\toptions := NgWriterOptions{\n\t\tSectionInfo: test.sections[0].sectionInfo,\n\t}\n\n\tw, err := NewNgWriterInterface(buffer, test.sections[0].ifaces[0], options)\n\tif err != nil {\n\t\tt.Fatal(\"Opening file failed with: \", err)\n\t}\n\n\tpackets := test.packets\n\terr = w.WritePacket(packets[0].ci, packets[0].data)\n\tif err != nil {\n\t\tt.Fatal(\"Couldn't write packet\", err)\n\t}\n\tid, err := w.AddInterface(test.sections[0].ifaces[1])\n\tif err != nil {\n\t\tt.Fatal(\"Couldn't add interface\", err)\n\t}\n\tif id != 1 {\n\t\tt.Fatalf(\"Expected interface id 1, but got %d\", id)\n\t}\n\terr = w.WritePacket(packets[1].ci, packets[1].data)\n\tif err != nil {\n\t\tt.Fatal(\"Couldn't write packet\", err)\n\t}\n\terr = w.WriteInterfaceStats(1, test.sections[0].ifaces[1].Statistics)\n\tif err != nil {\n\t\tt.Fatal(\"Couldn't write interface stats\", err)\n\t}\n\terr = w.WritePacket(packets[2].ci, packets[2].data)\n\tif err != nil {\n\t\tt.Fatal(\"Couldn't write packet\", err)\n\t}\n\terr = w.WritePacket(packets[3].ci, packets[3].data)\n\tif err != nil {\n\t\tt.Fatal(\"Couldn't write packet\", err)\n\t}\n\terr = w.WritePacket(packets[4].ci, packets[4].data)\n\tif err != nil {\n\t\tt.Fatal(\"Couldn't write packet\", err)\n\t}\n\terr = w.WriteInterfaceStats(0, test.sections[0].ifaces[0].Statistics)\n\tif err != nil {\n\t\tt.Fatal(\"Couldn't write interface stats\", err)\n\t}\n\n\terr = w.Flush()\n\tif err != nil {\n\t\tt.Fatal(\"Couldn't flush buffer\", err)\n\t}\n\n\t// writer fixes resolution to 9\n\ttest.sections[0].ifaces[0].TimestampResolution = 9\n\ttest.sections[0].ifaces[1].TimestampResolution = 9\n\n\t// compensate for offset on interface 1\n\ttest.sections[0].ifaces[1].Statistics.LastUpdate = test.sections[0].ifaces[1].Statistics.LastUpdate.Add(100 * time.Second)\n\ttest.packets[1].ci.Timestamp = test.packets[1].ci.Timestamp.Add(100 * time.Second)\n\n\ttest.testContents = bytes.NewReader(buffer.Bytes())\n\n\tngRunFileReadTest(test, \"\", false, t)\n}\n\ntype ngDevNull struct{}\n\nfunc (w *ngDevNull) Write(p []byte) (n int, err error) {\n\treturn len(p), nil\n}\n\nfunc BenchmarkNgWritePacket(b *testing.B) {\n\tci := gopacket.CaptureInfo{\n\t\tTimestamp:     time.Unix(0x01020304, 0xAA*1000),\n\t\tLength:        0xABCD,\n\t\tCaptureLength: 10,\n\t}\n\tdata := []byte{9, 8, 7, 6, 5, 4, 3, 2, 1, 0}\n\tw, err := NewNgWriter(&ngDevNull{}, layers.LinkTypeEthernet)\n\tif err != nil {\n\t\tb.Fatal(\"Failed creating writer:\", err)\n\t}\n\tb.ResetTimer()\n\n\tfor i := 0; i < b.N; i++ {\n\t\tw.WritePacket(ci, data)\n\t}\n}\n"
  },
  {
    "path": "pcapgo/pcapng.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcapgo\n\nimport (\n\t\"errors\"\n\t\"math\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\n// ErrNgVersionMismatch gets returned for unknown pcapng section versions. This can only happen if ReaderOptions.SkipUnknownVersion == false\nvar ErrNgVersionMismatch = errors.New(\"Unknown pcapng Version in Section Header\")\n\n// ErrNgLinkTypeMismatch gets returned if the link type of an interface is not the same as the link type from the first interface. This can only happen if ReaderOptions.ErrorOnMismatchingLinkType == true && ReaderOptions.WantMixedLinkType == false\nvar ErrNgLinkTypeMismatch = errors.New(\"Link type of current interface is different from first one\")\n\nconst (\n\tngByteOrderMagic = 0x1A2B3C4D\n\n\t// We can handle only version 1.0\n\tngVersionMajor = 1\n\tngVersionMinor = 0\n)\n\ntype ngBlockType uint32\n\nconst (\n\tngBlockTypeInterfaceDescriptor ngBlockType = 1          // Interface description block\n\tngBlockTypePacket              ngBlockType = 2          // Packet block (deprecated)\n\tngBlockTypeSimplePacket        ngBlockType = 3          // Simple packet block\n\tngBlockTypeInterfaceStatistics ngBlockType = 5          // Interface statistics block\n\tngBlockTypeEnhancedPacket      ngBlockType = 6          // Enhanced packet block\n\tngBlockTypeSectionHeader       ngBlockType = 0x0A0D0D0A // Section header block (same in both endians)\n)\n\ntype ngOptionCode uint16\n\nconst (\n\tngOptionCodeEndOfOptions    ngOptionCode = iota // end of options. must be at the end of options in a block\n\tngOptionCodeComment                             // comment\n\tngOptionCodeHardware                            // description of the hardware\n\tngOptionCodeOS                                  // name of the operating system\n\tngOptionCodeUserApplication                     // name of the application\n)\n\nconst (\n\tngOptionCodeInterfaceName                ngOptionCode = iota + 2 // interface name\n\tngOptionCodeInterfaceDescription                                 // interface description\n\tngOptionCodeInterfaceIPV4Address                                 // IPv4 network address and netmask for the interface\n\tngOptionCodeInterfaceIPV6Address                                 // IPv6 network address and prefix length for the interface\n\tngOptionCodeInterfaceMACAddress                                  // interface hardware MAC address\n\tngOptionCodeInterfaceEUIAddress                                  // interface hardware EUI address\n\tngOptionCodeInterfaceSpeed                                       // interface speed in bits/s\n\tngOptionCodeInterfaceTimestampResolution                         // timestamp resolution\n\tngOptionCodeInterfaceTimezone                                    // time zone\n\tngOptionCodeInterfaceFilter                                      // capture filter\n\tngOptionCodeInterfaceOS                                          // operating system\n\tngOptionCodeInterfaceFCSLength                                   // length of the Frame Check Sequence in bits\n\tngOptionCodeInterfaceTimestampOffset                             // offset (in seconds) that must be added to packet timestamp\n)\n\nconst (\n\tngOptionCodeInterfaceStatisticsStartTime         ngOptionCode = iota + 2 // Start of capture\n\tngOptionCodeInterfaceStatisticsEndTime                                   // End of capture\n\tngOptionCodeInterfaceStatisticsInterfaceReceived                         // Packets received by physical interface\n\tngOptionCodeInterfaceStatisticsInterfaceDropped                          // Packets dropped by physical interface\n\tngOptionCodeInterfaceStatisticsFilterAccept                              // Packets accepted by filter\n\tngOptionCodeInterfaceStatisticsOSDrop                                    // Packets dropped by operating system\n\tngOptionCodeInterfaceStatisticsDelivered                                 // Packets delivered to user\n)\n\n// ngOption is a pcapng option\ntype ngOption struct {\n\tcode   ngOptionCode\n\tvalue  []byte\n\traw    interface{}\n\tlength uint16\n}\n\n// ngBlock is a pcapng block header\ntype ngBlock struct {\n\ttyp    ngBlockType\n\tlength uint32 // remaining length of block\n}\n\n// NgResolution represents a pcapng timestamp resolution\ntype NgResolution uint8\n\n// Binary returns true if the timestamp resolution is a negative power of two. Otherwise NgResolution is a negative power of 10.\nfunc (r NgResolution) Binary() bool {\n\tif r&0x80 == 0x80 {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// Exponent returns the negative exponent of the resolution.\nfunc (r NgResolution) Exponent() uint8 {\n\treturn uint8(r) & 0x7f\n}\n\n// ToTimestampResolution converts an NgResolution to a gopaket.TimestampResolution\nfunc (r NgResolution) ToTimestampResolution() (ret gopacket.TimestampResolution) {\n\tif r.Binary() {\n\t\tret.Base = 2\n\t} else {\n\t\tret.Base = 10\n\t}\n\tret.Exponent = -int(r.Exponent())\n\treturn\n}\n\n// NgNoValue64 is a placeholder for an empty numeric 64 bit value.\nconst NgNoValue64 = math.MaxUint64\n\n// NgInterfaceStatistics hold the statistic for an interface at a single point in time. These values are already supposed to be accumulated. Most pcapng files contain this information at the end of the file/section.\ntype NgInterfaceStatistics struct {\n\t// LastUpdate is the last time the statistics were updated.\n\tLastUpdate time.Time\n\t// StartTime is the time packet capture started on this interface. This value might be zero if this option is missing.\n\tStartTime time.Time\n\t// EndTime is the time packet capture ended on this interface This value might be zero if this option is missing.\n\tEndTime time.Time\n\t// Comment can be an arbitrary comment. This value might be empty if this option is missing.\n\tComment string\n\t// PacketsReceived are the number of received packets. This value might be NoValue64 if this option is missing.\n\tPacketsReceived uint64\n\t// PacketsReceived are the number of received packets. This value might be NoValue64 if this option is missing.\n\tPacketsDropped uint64\n}\n\nvar ngEmptyStatistics = NgInterfaceStatistics{\n\tPacketsReceived: NgNoValue64,\n\tPacketsDropped:  NgNoValue64,\n}\n\n// NgInterface holds all the information of a pcapng interface.\ntype NgInterface struct {\n\t// Name is the name of the interface. This value might be empty if this option is missing.\n\tName string\n\t// Comment can be an arbitrary comment. This value might be empty if this option is missing.\n\tComment string\n\t// Description is a description of the interface. This value might be empty if this option is missing.\n\tDescription string\n\t// Filter is the filter used during packet capture. This value might be empty if this option is missing.\n\tFilter string\n\t// OS is the operating system this interface was controlled by. This value might be empty if this option is missing.\n\tOS string\n\t// LinkType is the linktype of the interface.\n\tLinkType layers.LinkType\n\t// TimestampResolution is the timestamp resolution of the packets in the pcapng file belonging to this interface.\n\tTimestampResolution NgResolution\n\t// TimestampResolution is the timestamp offset in seconds of the packets in the pcapng file belonging to this interface.\n\tTimestampOffset uint64\n\t// SnapLength is the maximum packet length captured by this interface. 0 for unlimited\n\tSnapLength uint32\n\t// Statistics holds the interface statistics\n\tStatistics NgInterfaceStatistics\n\n\tsecondMask uint64\n\tscaleUp    uint64\n\tscaleDown  uint64\n}\n\n// Resolution returns the timestamp resolution of acquired timestamps before scaling to NanosecondTimestampResolution.\nfunc (i NgInterface) Resolution() gopacket.TimestampResolution {\n\treturn i.TimestampResolution.ToTimestampResolution()\n}\n\n// NgSectionInfo contains additional information of a pcapng section\ntype NgSectionInfo struct {\n\t// Hardware is the hardware this file was generated on. This value might be empty if this option is missing.\n\tHardware string\n\t// OS is the operating system this file was generated on. This value might be empty if this option is missing.\n\tOS string\n\t// Application is the user space application this file was generated with. This value might be empty if this option is missing.\n\tApplication string\n\t// Comment can be an arbitrary comment. This value might be empty if this option is missing.\n\tComment string\n}\n"
  },
  {
    "path": "pcapgo/read.go",
    "content": "// Copyright 2014 Damjan Cvetko. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcapgo\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"time\"\n\n\t\"bufio\"\n\t\"compress/gzip\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\n// Reader wraps an underlying io.Reader to read packet data in PCAP\n// format.  See http://wiki.wireshark.org/Development/LibpcapFileFormat\n// for information on the file format.\n//\n// We currenty read v2.4 file format with nanosecond and microsecdond\n// timestamp resolution in little-endian and big-endian encoding.\n//\n// If the PCAP data is gzip compressed it is transparently uncompressed\n// by wrapping the given io.Reader with a gzip.Reader.\ntype Reader struct {\n\tr              io.Reader\n\tbyteOrder      binary.ByteOrder\n\tnanoSecsFactor uint32\n\tversionMajor   uint16\n\tversionMinor   uint16\n\t// timezone\n\t// sigfigs\n\tsnaplen  uint32\n\tlinkType layers.LinkType\n\t// reusable buffer\n\tbuf [16]byte\n\t// buffer for ZeroCopyReadPacketData\n\tpacketBuf []byte\n}\n\nconst magicNanoseconds = 0xA1B23C4D\nconst magicMicrosecondsBigendian = 0xD4C3B2A1\nconst magicNanosecondsBigendian = 0x4D3CB2A1\n\nconst magicGzip1 = 0x1f\nconst magicGzip2 = 0x8b\n\n// NewReader returns a new reader object, for reading packet data from\n// the given reader. The reader must be open and header data is\n// read from it at this point.\n// If the file format is not supported an error is returned\n//\n//  // Create new reader:\n//  f, _ := os.Open(\"/tmp/file.pcap\")\n//  defer f.Close()\n//  r, err := NewReader(f)\n//  data, ci, err := r.ReadPacketData()\nfunc NewReader(r io.Reader) (*Reader, error) {\n\tret := Reader{r: r}\n\tif err := ret.readHeader(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &ret, nil\n}\n\nfunc (r *Reader) readHeader() error {\n\tbr := bufio.NewReader(r.r)\n\tgzipMagic, err := br.Peek(2)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif gzipMagic[0] == magicGzip1 && gzipMagic[1] == magicGzip2 {\n\t\tif r.r, err = gzip.NewReader(br); err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\tr.r = br\n\t}\n\n\tbuf := make([]byte, 24)\n\tif n, err := io.ReadFull(r.r, buf); err != nil {\n\t\treturn err\n\t} else if n < 24 {\n\t\treturn errors.New(\"Not enough data for read\")\n\t}\n\tif magic := binary.LittleEndian.Uint32(buf[0:4]); magic == magicNanoseconds {\n\t\tr.byteOrder = binary.LittleEndian\n\t\tr.nanoSecsFactor = 1\n\t} else if magic == magicNanosecondsBigendian {\n\t\tr.byteOrder = binary.BigEndian\n\t\tr.nanoSecsFactor = 1\n\t} else if magic == magicMicroseconds {\n\t\tr.byteOrder = binary.LittleEndian\n\t\tr.nanoSecsFactor = 1000\n\t} else if magic == magicMicrosecondsBigendian {\n\t\tr.byteOrder = binary.BigEndian\n\t\tr.nanoSecsFactor = 1000\n\t} else {\n\t\treturn fmt.Errorf(\"Unknown magic %x\", magic)\n\t}\n\tif r.versionMajor = r.byteOrder.Uint16(buf[4:6]); r.versionMajor != versionMajor {\n\t\treturn fmt.Errorf(\"Unknown major version %d\", r.versionMajor)\n\t}\n\tif r.versionMinor = r.byteOrder.Uint16(buf[6:8]); r.versionMinor != versionMinor {\n\t\treturn fmt.Errorf(\"Unknown minor version %d\", r.versionMinor)\n\t}\n\t// ignore timezone 8:12 and sigfigs 12:16\n\tr.snaplen = r.byteOrder.Uint32(buf[16:20])\n\tr.linkType = layers.LinkType(r.byteOrder.Uint32(buf[20:24]))\n\treturn nil\n}\n\n// ReadPacketData reads next packet from file.\nfunc (r *Reader) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\tif ci, err = r.readPacketHeader(); err != nil {\n\t\treturn\n\t}\n\tif ci.CaptureLength > int(r.snaplen) {\n\t\terr = fmt.Errorf(\"capture length exceeds snap length: %d > %d\", ci.CaptureLength, r.snaplen)\n\t\treturn\n\t}\n\tif ci.CaptureLength > ci.Length {\n\t\terr = fmt.Errorf(\"capture length exceeds original packet length: %d > %d\", ci.CaptureLength, ci.Length)\n\t\treturn\n\t}\n\tdata = make([]byte, ci.CaptureLength)\n\t_, err = io.ReadFull(r.r, data)\n\treturn data, ci, err\n}\n\n// ZeroCopyReadPacketData reads next packet from file. The data buffer is owned by the Reader,\n// and each call to ZeroCopyReadPacketData invalidates data returned by the previous one.\n//\n// It is not true zero copy, as data is still copied from the underlying reader. However,\n// this method avoids allocating heap memory for every packet.\nfunc (r *Reader) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\tif ci, err = r.readPacketHeader(); err != nil {\n\t\treturn\n\t}\n\tif ci.CaptureLength > int(r.snaplen) {\n\t\terr = fmt.Errorf(\"capture length exceeds snap length: %d > %d\", ci.CaptureLength, r.snaplen)\n\t\treturn\n\t}\n\tif ci.CaptureLength > ci.Length {\n\t\terr = fmt.Errorf(\"capture length exceeds original packet length: %d > %d\", ci.CaptureLength, ci.Length)\n\t\treturn\n\t}\n\n\tif cap(r.packetBuf) < ci.CaptureLength {\n\t\tsnaplen := int(r.snaplen)\n\t\tif snaplen < ci.CaptureLength {\n\t\t\tsnaplen = ci.CaptureLength\n\t\t}\n\t\tr.packetBuf = make([]byte, snaplen)\n\t}\n\tdata = r.packetBuf[:ci.CaptureLength]\n\t_, err = io.ReadFull(r.r, data)\n\treturn data, ci, err\n}\n\nfunc (r *Reader) readPacketHeader() (ci gopacket.CaptureInfo, err error) {\n\tif _, err = io.ReadFull(r.r, r.buf[:]); err != nil {\n\t\treturn\n\t}\n\tci.Timestamp = time.Unix(int64(r.byteOrder.Uint32(r.buf[0:4])), int64(r.byteOrder.Uint32(r.buf[4:8])*r.nanoSecsFactor)).UTC()\n\tci.CaptureLength = int(r.byteOrder.Uint32(r.buf[8:12]))\n\tci.Length = int(r.byteOrder.Uint32(r.buf[12:16]))\n\treturn\n}\n\n// LinkType returns network, as a layers.LinkType.\nfunc (r *Reader) LinkType() layers.LinkType {\n\treturn r.linkType\n}\n\n// Snaplen returns the snapshot length of the capture file.\nfunc (r *Reader) Snaplen() uint32 {\n\treturn r.snaplen\n}\n\n// SetSnaplen sets the snapshot length of the capture file.\n//\n// This is useful when a pcap file contains packets bigger than then snaplen.\n// Pcapgo will error when reading packets bigger than snaplen, then it dumps those\n// packets and reads the next 16 bytes, which are part of the \"faulty\" packet's payload, but pcapgo\n// thinks it's the next header, which is probably also faulty because it's not really a packet header.\n// This can lead to a lot of faulty reads.\n//\n// The SetSnaplen function can be used to set a bigger snaplen to prevent those read errors.\n//\n// This snaplen situation can happen when a pcap writer doesn't truncate packets to the snaplen size while writing packets to file.\n// E.g. In Python, dpkt.pcap.Writer sets snaplen by default to 1500 (https://dpkt.readthedocs.io/en/latest/api/api_auto.html#dpkt.pcap.Writer)\n// but doesn't enforce this when writing packets (https://dpkt.readthedocs.io/en/latest/_modules/dpkt/pcap.html#Writer.writepkt).\n// When reading, tools like tcpdump, tcpslice, mergecap and wireshark ignore the snaplen and use\n// their own defined snaplen.\n// E.g. When reading packets, tcpdump defines MAXIMUM_SNAPLEN (https://github.com/the-tcpdump-group/tcpdump/blob/6e80fcdbe9c41366df3fa244ffe4ac8cce2ab597/netdissect.h#L290)\n// and uses it (https://github.com/the-tcpdump-group/tcpdump/blob/66384fa15b04b47ad08c063d4728df3b9c1c0677/print.c#L343-L358).\n//\n// For further reading:\n//  - https://github.com/the-tcpdump-group/tcpdump/issues/389\n//  - https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8808\n//  - https://www.wireshark.org/lists/wireshark-dev/201307/msg00061.html\n//  - https://github.com/wireshark/wireshark/blob/bfd51199e707c1d5c28732be34b44a9ee8a91cd8/wiretap/pcap-common.c#L723-L742\n//    - https://github.com/wireshark/wireshark/blob/f07fb6cdfc0904905627707b88450054e921f092/wiretap/libpcap.c#L592-L598\n//    - https://github.com/wireshark/wireshark/blob/f07fb6cdfc0904905627707b88450054e921f092/wiretap/libpcap.c#L714-L727\n//  - https://github.com/the-tcpdump-group/tcpdump/commit/d033c1bc381c76d13e4aface97a4f4ec8c3beca2\n//  - https://github.com/the-tcpdump-group/tcpdump/blob/88e87cb2cb74c5f939792171379acd9e0efd8b9a/netdissect.h#L263-L290\nfunc (r *Reader) SetSnaplen(newSnaplen uint32) {\n\tr.snaplen = newSnaplen\n}\n\n// Reader formater\nfunc (r *Reader) String() string {\n\treturn fmt.Sprintf(\"PcapFile  maj: %x min: %x snaplen: %d linktype: %s\", r.versionMajor, r.versionMinor, r.snaplen, r.linkType)\n}\n\n// Resolution returns the timestamp resolution of acquired timestamps before scaling to NanosecondTimestampResolution.\nfunc (r *Reader) Resolution() gopacket.TimestampResolution {\n\tif r.nanoSecsFactor == 1 {\n\t\treturn gopacket.TimestampResolutionMicrosecond\n\t}\n\treturn gopacket.TimestampResolutionNanosecond\n}\n"
  },
  {
    "path": "pcapgo/read_test.go",
    "content": "// Copyright 2014 Damjan Cvetko. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\npackage pcapgo\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n\t\"time\"\n)\n\n// test header read\nfunc TestCreatePcapReader(t *testing.T) {\n\ttest := []byte{\n\t\t0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,\n\t}\n\tbuf := bytes.NewBuffer(test)\n\t_, err := NewReader(buf)\n\tif err != nil {\n\t\tt.Error(err)\n\t\tt.FailNow()\n\t}\n}\n\n// test big endian file read\nfunc TestCreatePcapReaderBigEndian(t *testing.T) {\n\ttest := []byte{\n\t\t0xa1, 0xb2, 0xc3, 0xd4, 0x00, 0x02, 0x00, 0x04,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,\n\t}\n\tbuf := bytes.NewBuffer(test)\n\t_, err := NewReader(buf)\n\tif err != nil {\n\t\tt.Error(err)\n\t\tt.FailNow()\n\t}\n}\n\n// test opening invalid data\nfunc TestCreatePcapReaderFail(t *testing.T) {\n\ttest := []byte{\n\t\t0xd0, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,\n\t}\n\tbuf := bytes.NewBuffer(test)\n\t_, err := NewReader(buf)\n\tif err == nil {\n\t\tt.Error(\"Should fail but did not\")\n\t\tt.FailNow()\n\t}\n}\n\nfunc TestPacket(t *testing.T) {\n\ttest := []byte{\n\t\t0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, // magic, maj, min\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tz, sigfigs\n\t\t0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // snaplen, linkType\n\t\t0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec\n\t\t0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len\n\t\t0x01, 0x02, 0x03, 0x04, // data\n\t}\n\n\tbuf := bytes.NewBuffer(test)\n\tr, err := NewReader(buf)\n\tif err != nil {\n\t\tt.Errorf(\"Failed to get new reader object: %v\", err)\n\t}\n\n\tdata, ci, err := r.ReadPacketData()\n\tif err != nil {\n\t\tt.Error(err)\n\t\tt.FailNow()\n\t}\n\tif !ci.Timestamp.Equal(time.Date(2014, 9, 18, 12, 13, 14, 1000, time.UTC)) {\n\t\tt.Error(\"Invalid time read\")\n\t\tt.FailNow()\n\t}\n\tif ci.CaptureLength != 4 || ci.Length != 8 {\n\t\tt.Error(\"Invalid CapLen or Len\")\n\t}\n\twant := []byte{1, 2, 3, 4}\n\tif !bytes.Equal(data, want) {\n\t\tt.Errorf(\"buf mismatch:\\nwant: %+v\\ngot:  %+v\", want, data)\n\t}\n}\n\nfunc TestPacketNano(t *testing.T) {\n\ttest := []byte{\n\t\t0x4d, 0x3c, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, // magic, maj, min\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tz, sigfigs\n\t\t0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // snaplen, linkType\n\t\t0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec\n\t\t0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len\n\t\t0x01, 0x02, 0x03, 0x04, // data\n\t}\n\n\tbuf := bytes.NewBuffer(test)\n\tr, err := NewReader(buf)\n\tif err != nil {\n\t\tt.Errorf(\"Failed to get new reader object: %v\", err)\n\t}\n\n\tdata, ci, err := r.ReadPacketData()\n\tif err != nil {\n\t\tt.Error(err)\n\t\tt.FailNow()\n\t}\n\tif !ci.Timestamp.Equal(time.Date(2014, 9, 18, 12, 13, 14, 1, time.UTC)) {\n\t\tt.Error(\"Invalid time read\")\n\t\tt.FailNow()\n\t}\n\tif ci.CaptureLength != 4 || ci.Length != 8 {\n\t\tt.Error(\"Invalid CapLen or Len\")\n\t}\n\twant := []byte{1, 2, 3, 4}\n\tif !bytes.Equal(data, want) {\n\t\tt.Errorf(\"buf mismatch:\\nwant: %+v\\ngot:  %+v\", want, data)\n\t}\n}\n\nfunc TestGzipPacket(t *testing.T) {\n\ttest := []byte{\n\t\t0x1f, 0x8b, 0x08, 0x08, 0x92, 0x4d, 0x81, 0x57,\n\t\t0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x00, 0xbb,\n\t\t0x72, 0x78, 0xd3, 0x42, 0x26, 0x06, 0x16, 0x06,\n\t\t0x18, 0xf8, 0xff, 0x9f, 0x81, 0x81, 0x11, 0x48,\n\t\t0x47, 0x9d, 0x91, 0x0a, 0x01, 0xd1, 0x20, 0x19,\n\t\t0x0e, 0x20, 0x66, 0x64, 0x62, 0x66, 0x01, 0x00,\n\t\t0xe4, 0x76, 0x9b, 0x75, 0x2c, 0x00, 0x00, 0x00,\n\t}\n\tbuf := bytes.NewBuffer(test)\n\tr, err := NewReader(buf)\n\tif err != nil {\n\t\tt.Error(\"Unexpected error returned:\", err)\n\t\tt.FailNow()\n\t}\n\n\tdata, ci, err := r.ReadPacketData()\n\tif err != nil {\n\t\tt.Error(err)\n\t\tt.FailNow()\n\t}\n\tif !ci.Timestamp.Equal(time.Date(2014, 9, 18, 12, 13, 14, 1000, time.UTC)) {\n\t\tt.Error(\"Invalid time read\")\n\t\tt.FailNow()\n\t}\n\tif ci.CaptureLength != 4 || ci.Length != 8 {\n\t\tt.Error(\"Invalid CapLen or Len\")\n\t}\n\twant := []byte{1, 2, 3, 4}\n\tif !bytes.Equal(data, want) {\n\t\tt.Errorf(\"buf mismatch:\\nwant: %+v\\ngot:  %+v\", want, data)\n\t}\n}\n\nfunc TestTruncatedGzipPacket(t *testing.T) {\n\ttest := []byte{\n\t\t0x1f, 0x8b, 0x08,\n\t}\n\tbuf := bytes.NewBuffer(test)\n\t_, err := NewReader(buf)\n\tif err == nil {\n\t\tt.Error(\"Should fail but did not\")\n\t\tt.FailNow()\n\t}\n}\n\nfunc TestPacketBufferReuse(t *testing.T) {\n\ttest := []byte{\n\t\t0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, // magic, maj, min\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tz, sigfigs\n\t\t0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // snaplen, linkType\n\t\t0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec\n\t\t0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len\n\t\t0x01, 0x02, 0x03, 0x04, // data\n\t\t0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec\n\t\t0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len\n\t\t0x01, 0x02, 0x03, 0x04, // data\n\t}\n\n\tbuf := bytes.NewBuffer(test)\n\tr, err := NewReader(buf)\n\tif err != nil {\n\t\tt.Errorf(\"Failed to get new reader object: %v\", err)\n\t}\n\n\tdata1, _, err := r.ReadPacketData()\n\tif err != nil {\n\t\tt.Error(err)\n\t\tt.FailNow()\n\t}\n\tif want := []byte{1, 2, 3, 4}; !bytes.Equal(data1, want) {\n\t\tt.Errorf(\"buf mismatch:\\nwant: %+v\\ngot:  %+v\", want, data1)\n\t}\n\tdata2, _, err := r.ReadPacketData()\n\tif err != nil {\n\t\tt.Error(err)\n\t\tt.FailNow()\n\t}\n\tfor i := range data1 {\n\t\tdata1[i] = 0xff // modify data1 after getting data2, make sure we don't overlap buffers.\n\t}\n\tif want := []byte{1, 2, 3, 4}; !bytes.Equal(data2, want) {\n\t\tt.Errorf(\"buf mismatch:\\nwant: %+v\\ngot:  %+v\", want, data2)\n\t}\n}\n\nfunc TestPacketZeroCopy(t *testing.T) {\n\ttest := []byte{\n\t\t0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, // magic, maj, min\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tz, sigfigs\n\t\t0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // snaplen, linkType\n\t\t0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec\n\t\t0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len\n\t\t0x01, 0x02, 0x03, 0x04, // data\n\t\t0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec\n\t\t0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len\n\t\t0x05, 0x06, 0x07, 0x08, // data\n\t}\n\n\tbuf := bytes.NewBuffer(test)\n\tr, err := NewReader(buf)\n\tif err != nil {\n\t\tt.Errorf(\"Failed to get new reader object: %v\", err)\n\t}\n\n\tdata1, _, err := r.ZeroCopyReadPacketData()\n\tif err != nil {\n\t\tt.Error(err)\n\t\tt.FailNow()\n\t}\n\tif want := []byte{1, 2, 3, 4}; !bytes.Equal(data1, want) {\n\t\tt.Errorf(\"buf mismatch:\\nwant: %+v\\ngot:  %+v\", want, data1)\n\t}\n\tdata2, _, err := r.ZeroCopyReadPacketData()\n\tif err != nil {\n\t\tt.Error(err)\n\t\tt.FailNow()\n\t}\n\tif want := []byte{5, 6, 7, 8}; !bytes.Equal(data2, want) {\n\t\tt.Errorf(\"buf mismatch:\\nwant: %+v\\ngot:  %+v\", want, data2)\n\t}\n\n\tif &data1[0] != &data2[0] {\n\t\tt.Error(\"different buffers returned by subsequent ZeroCopyReadPacketData calls\")\n\t}\n}\n"
  },
  {
    "path": "pcapgo/snoop.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcapgo\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\nconst snoopMagic uint64 = 0x736e6f6f70000000 //8 byte in big endian\nconst snoopVersion uint32 = 2\nconst maxCaptureLen int = 4096\n\n// Errors\nconst unknownMagic = \"Unknown Snoop Magic Bytes\"\nconst unknownVersion = \"Unknown Snoop Format Version\"\nconst unkownLinkType = \"Unknown Link Type\"\nconst originalLenExceeded = \"Capture length exceeds original packet length\"\nconst captureLenExceeded = \"Capture length exceeds max capture length\"\n\ntype snoopHeader struct {\n\tVersion  uint32\n\tlinkType uint32\n}\n\n// SnoopReader wraps an underlying io.SnoopReader to read packet data in SNOOP\n// format.  See https://tools.ietf.org/html/rfc1761\n// for information on the file format.\n// We currenty read v2 file format and convert microsecond to nanoseconds\n// byte order in big-endian encoding.\ntype SnoopReader struct {\n\tr      io.Reader\n\theader snoopHeader\n\t//reuseable\n\tpad       int\n\tpacketBuf []byte\n\tbuf       [24]byte\n}\n\nvar (\n\tlayerTypes = map[uint32]layers.LinkType{\n\t\t0: layers.LinkTypeEthernet,  // IEEE 802.3\n\t\t2: layers.LinkTypeTokenRing, // IEEE 802.5 Token Ring\n\t\t4: layers.LinkTypeEthernet,  // Ethernet\n\t\t5: layers.LinkTypeC_HDLC,    // HDLC\n\t\t8: layers.LinkTypeFDDI,      // FDDI\n\t\t/*\n\t\t\t10 - 4294967295 Unassigned\n\t\t\tnot supported:\n\t\t\t1 - IEEE 802.4 Token Bus\n\t\t\t3 - IEEE 802.6 Metro Net\n\t\t\t6 - Character Synchronous\n\t\t\t7 - IBM Channel-to-Channel\n\t\t\t9 - Other\n\t\t*/\n\t}\n)\n\n// LinkType return the mapped gopacket LinkType\nfunc (r *SnoopReader) LinkType() (*layers.LinkType, error) {\n\tif _, ok := layerTypes[r.header.linkType]; ok {\n\t\tlt := layerTypes[r.header.linkType]\n\t\treturn &lt, nil\n\t}\n\treturn nil, fmt.Errorf(\"%s, Code:%d\", unkownLinkType, r.header.linkType)\n\n}\n\n// NewSnoopReader returns a new SnoopReader object, for reading packet data from\n// the given SnoopReader. The SnoopReader must be open and header data is\n// read from it at this point.\n// If the file format is not supported an error is returned\nfunc NewSnoopReader(r io.Reader) (*SnoopReader, error) {\n\tret := SnoopReader{r: r}\n\n\tif err := ret.readHeader(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &ret, nil\n}\n\nfunc (r *SnoopReader) readHeader() error {\n\tbuf := make([]byte, 16)\n\n\tif n, err := io.ReadFull(r.r, buf); err != nil {\n\t\treturn err\n\t} else if n < 16 {\n\t\treturn errors.New(\"Not enough data for read\")\n\t}\n\n\tif magic := binary.BigEndian.Uint64(buf[0:8]); magic != snoopMagic {\n\t\treturn fmt.Errorf(\"%s: %x\", unknownMagic, magic)\n\t}\n\n\tif r.header.Version = binary.BigEndian.Uint32(buf[8:12]); r.header.Version != snoopVersion {\n\t\treturn fmt.Errorf(\"%s: %d\", unknownVersion, r.header.Version)\n\t}\n\n\tif r.header.linkType = binary.BigEndian.Uint32(buf[12:16]); r.header.linkType > 10 {\n\t\treturn fmt.Errorf(\"%s, Code:%d\", unkownLinkType, r.header.linkType)\n\t}\n\treturn nil\n}\n\nfunc (r *SnoopReader) readPacketHeader() (ci gopacket.CaptureInfo, err error) {\n\n\tif _, err = io.ReadFull(r.r, r.buf[:]); err != nil {\n\t\treturn\n\t}\n\t// \tOriginalLength        uint32\t4\n\t// \tIncludedLength        uint32\t8\n\t// \tPacketRecordLength    uint32\t12\n\t// \tCumulativeDrops       uint32\t16\n\t// \tTimestampSeconds      uint32\t20\n\t// \tTimestampMicroseconds uint32\t24\n\n\tci.Timestamp = time.Unix(int64(binary.BigEndian.Uint32(r.buf[16:20])), int64(binary.BigEndian.Uint32(r.buf[20:24])*1000)).UTC()\n\tci.Length = int(binary.BigEndian.Uint32(r.buf[0:4]))\n\tci.CaptureLength = int(binary.BigEndian.Uint32(r.buf[4:8]))\n\tr.pad = int(binary.BigEndian.Uint32(r.buf[8:12])) - (24 + ci.Length)\n\n\tif ci.CaptureLength > ci.Length {\n\t\terr = errors.New(originalLenExceeded)\n\t\treturn\n\t}\n\n\tif ci.CaptureLength > maxCaptureLen {\n\t\terr = errors.New(captureLenExceeded)\n\t}\n\n\treturn\n}\n\n// ReadPacketData reads next packet data.\nfunc (r *SnoopReader) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\tif ci, err = r.readPacketHeader(); err != nil {\n\t\treturn\n\t}\n\tdata = make([]byte, ci.CaptureLength+r.pad)\n\t_, err = io.ReadFull(r.r, data)\n\treturn data[:ci.CaptureLength], ci, err\n\n}\n\n// ZeroCopyReadPacketData reads next packet data. The data buffer is owned by the SnoopReader,\n// and each call to ZeroCopyReadPacketData invalidates data returned by the previous one.\n//\n// It is not true zero copy, as data is still copied from the underlying SnoopReader. However,\n// this method avoids allocating heap memory for every packet.\nfunc (r *SnoopReader) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\tif ci, err = r.readPacketHeader(); err != nil {\n\t\treturn\n\t}\n\n\tif cap(r.packetBuf) < ci.CaptureLength+r.pad {\n\t\tr.packetBuf = make([]byte, ci.CaptureLength+r.pad)\n\t}\n\t_, err = io.ReadFull(r.r, r.packetBuf[:ci.CaptureLength+r.pad])\n\treturn r.packetBuf[:ci.CaptureLength], ci, err\n}\n"
  },
  {
    "path": "pcapgo/snoop_test.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\npackage pcapgo\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n)\n\nvar (\n\tspHeader = []byte{\n\t\t0x73, 0x6E, 0x6F, 0x6F, 0x70, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x02,\n\t\t0x00, 0x00, 0x00, 0x04,\n\t}\n\n\tpack = []byte{\n\t\t0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x5C, 0xBE, 0xB8, 0x4C, 0x00, 0x0C, 0xB1, 0x47,\n\t\t0x7c, 0x5a, 0x1c, 0x49, 0x3c, 0xd1, 0x1e, 0x65, 0x50, 0x7f, 0xb9, 0xca, 0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0x1e, 0x65,\n\t\t0x50, 0x7f, 0xb9, 0xca, 0x0a, 0x00, 0x33, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x33, 0x01, 0x00, 0x00,\n\t}\n)\n\nfunc OpenHandlePack() (buf []byte, handle *SnoopReader, err error) {\n\tbuf = make([]byte, len(spHeader)+len(pack))\n\tcopy(buf, append(spHeader, pack...))\n\thandle, err = NewSnoopReader(bytes.NewReader(buf))\n\treturn buf, handle, err\n}\n\nfunc equalError(t *testing.T, err error, eq error) {\n\tif err.Error() != eq.Error() {\n\t\tt.Error(err)\n\t}\n}\n\nfunc equalNil(t *testing.T, err error) {\n\tif err != nil {\n\t\tt.Error(err)\n\t}\n}\n\nfunc equal(t *testing.T, expected, actual interface{}) {\n\tif !reflect.DeepEqual(expected, actual) {\n\t\tt.Error(fmt.Errorf(\"Not equal: \\nexpected: %s\\nactual  : %s\", expected, actual))\n\t}\n}\n\nfunc TestReadHeader(t *testing.T) {\n\t_, err := NewSnoopReader(bytes.NewReader(spHeader))\n\tequalNil(t, err)\n}\n\nfunc TestBadHeader(t *testing.T) {\n\tbuf := make([]byte, len(spHeader))\n\tcopy(buf, spHeader)\n\tbuf[6] = 0xff\n\t_, err := NewSnoopReader(bytes.NewReader(buf))\n\tequalError(t, err, fmt.Errorf(\"%s: %s\", unknownMagic, \"736e6f6f7000ff00\"))\n\n\tbuf[6] = 0x00\n\tbuf[11] = 0x03\n\t_, err = NewSnoopReader(bytes.NewReader(buf))\n\tequalError(t, err, fmt.Errorf(\"%s: %d\", unknownVersion, 3))\n\n\tbuf[11] = 0x02\n\tbuf[15] = 0x0b // linktype 11 is undefined\n\t_, err = NewSnoopReader(bytes.NewReader(buf))\n\tequalError(t, err, fmt.Errorf(\"%s, Code:%d\", unkownLinkType, 11))\n\n\tbuf[15] = 0x04\n}\n\nfunc TestReadPacket(t *testing.T) {\n\t_, handle, err := OpenHandlePack()\n\tequalNil(t, err)\n\n\t_, _, err = handle.ReadPacketData()\n\tequalNil(t, err)\n}\n\nfunc TestZeroCopy(t *testing.T) {\n\t_, handle, err := OpenHandlePack()\n\tequalNil(t, err)\n\n\tvar cnt int\n\tfor cnt = 0; ; cnt++ {\n\t\t_, _, err := handle.ZeroCopyReadPacketData()\n\t\tif err != nil {\n\t\t\tequalError(t, err, fmt.Errorf(\"EOF\"))\n\t\t\tbreak\n\t\t}\n\t}\n\tif cnt != 1 {\n\t\tt.Error(err)\n\t}\n}\n\nfunc TestPacketHeader(t *testing.T) {\n\t_, handle, err := OpenHandlePack()\n\tequalNil(t, err)\n\t_, ci, err := handle.ReadPacketData()\n\tequalNil(t, err)\n\n\tequal(t, ci.CaptureLength, 42)\n\tequal(t, ci.Length, 42)\n\tequal(t, ci.Timestamp, time.Date(2019, 04, 23, 07, 01, 32, 831815*1000, time.UTC)) //with nanosec\n\n}\n\nfunc TestBadPacketHeader(t *testing.T) {\n\tbuf, handle, err := OpenHandlePack()\n\tequalNil(t, err)\n\tbuf[23] = 0x2C\n\t_, _, err = handle.ReadPacketData()\n\tequalError(t, err, fmt.Errorf(originalLenExceeded))\n\tbuf[23] = 0x2A\n}\n\nfunc TestBigPacketData(t *testing.T) {\n\tbuf, handle, err := OpenHandlePack()\n\tequalNil(t, err)\n\t// increase OriginalLen\n\tbuf[19] = 0x00\n\tbuf[18] = 0x11\n\t// increase includedLen\n\tbuf[23] = 0x00\n\tbuf[22] = 0x11\n\t_, _, err = handle.ReadPacketData()\n\tequalError(t, err, fmt.Errorf(captureLenExceeded))\n\tbuf[23] = 0x44\n\tbuf[22] = 0x00\n\tbuf[19] = 0x44\n\tbuf[18] = 0x00\n}\n\nfunc TestLinkType(t *testing.T) {\n\t_, handle, err := OpenHandlePack()\n\tequalNil(t, err)\n\t_, err = handle.LinkType()\n\tequalNil(t, err)\n}\n\nfunc TestNotOverlapBuf(t *testing.T) {\n\tbuf := make([]byte, len(spHeader)+len(pack)*2)\n\tpacks := append(spHeader, pack...)\n\tcopy(buf, append(packs, pack...))\n\thandle, err := NewSnoopReader(bytes.NewReader(buf))\n\tequalNil(t, err)\n\toverlap, _, err := handle.ReadPacketData()\n\tequalNil(t, err)\n\toverlap2, _, err := handle.ReadPacketData()\n\tequalNil(t, err)\n\toverlap[30] = 0xff\n\tif overlap[30] == overlap2[30] {\n\t\tt.Error(fmt.Errorf(\"Should not be: %x\", overlap[30]))\n\t}\n\n}\n\nfunc GeneratePacks(num int) []byte {\n\tbuf := make([]byte, len(spHeader)+(len(pack)*num))\n\tpacks := append(spHeader, pack...)\n\tfor i := 1; i < num; i++ {\n\t\tpacks = append(packs, pack...)\n\t}\n\tcopy(buf, packs)\n\treturn buf\n}\nfunc BenchmarkReadPacketData(b *testing.B) {\n\tbuf := GeneratePacks(100)\n\thandle, _ := NewSnoopReader(bytes.NewReader(buf))\n\tfor n := 0; n < b.N; n++ {\n\t\t_, _, _ = handle.ReadPacketData()\n\t}\n}\n\nfunc BenchmarkZeroCopyReadPacketData(b *testing.B) {\n\tbuf := GeneratePacks(100)\n\thandle, _ := NewSnoopReader(bytes.NewReader(buf))\n\tfor n := 0; n < b.N; n++ {\n\t\t_, _, _ = handle.ZeroCopyReadPacketData()\n\t}\n}\n"
  },
  {
    "path": "pcapgo/tests/README.md",
    "content": "This directory contains the test data generated with https://github.com/hadrielk/pcapng-test-generator and two additional tests."
  },
  {
    "path": "pcapgo/tests/test901.lua",
    "content": "-- prevent wireshark loading this file as a plugin\nif not _G['pcapng_test_gen'] then return end\n\n\nlocal block = require \"blocks\"\nlocal input = require \"input\"\n\n\nlocal test = {\n    category    = 'difficult',\n    description = \"Multible SHB sections, one with invalid version number\",\n}\n\n\nlocal timestamp = UInt64(0x64ca47aa, 0x0004c397)\n\nfunction test:compile()\n    local idb0 = block.IDB(0, input.linktype.ETHERNET, 0, \"eth0\")\n\n    self.blocks = {\n        block.SHB(\"my computer\", \"linux\", \"pcap_writer.lua\")\n            :addOption('comment', self.testname .. \" SHB-0\"),\n        idb0,\n\n        block.EPB( idb0, input:getData(1), timestamp ),\n\n        block.SHB(\"my computer\", \"linux\", \"pcap_writer.lua\")\n            :addOption('comment', self.testname .. \" SHB-1\")\n            :setVersion(2, 0),\n        idb0,\n\n        block.EPB( idb0, input:getData(2), timestamp ),\n\n        block.SHB(\"my computer\", \"linux\", \"pcap_writer.lua\")\n            :addOption('comment', self.testname .. \" SHB-2\"),\n        idb0,\n\n        block.EPB( idb0, input:getData(3), timestamp ),\n    }\nend\n\n\nreturn test\n"
  },
  {
    "path": "pcapgo/tests/test902.lua",
    "content": "-- prevent wireshark loading this file as a plugin\nif not _G['pcapng_test_gen'] then return end\n\n\nlocal block = require \"blocks\"\nlocal input = require \"input\"\n\n\nlocal test = {\n    category    = 'difficult',\n    description = \"idb with binary resolution\",\n}\n\n\nlocal timestamp = UInt64(0x8c0dc032, 0x0000005a)\n\nfunction test:compile()\n    local idb0 = block.IDB(0, input.linktype.ETHERNET, 0, \"eth0\")\n                    :addOption( block.OptionFormat ('if_tsresol', \"B\", 0x88) )\n\n    self.blocks = {\n        block.SHB(\"my computer\", \"linux\", \"pcap_writer.lua\")\n            :addOption('comment', self.testname),\n        idb0,\n        block.EPB( idb0, input:getData(1),  timestamp ),\n    }\nend\n\n\nreturn test\n"
  },
  {
    "path": "pcapgo/write.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcapgo\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\n// Writer wraps an underlying io.Writer to write packet data in PCAP\n// format.  See http://wiki.wireshark.org/Development/LibpcapFileFormat\n// for information on the file format.\n//\n// For those that care, we currently write v2.4 files with nanosecond\n// or microsecond timestamp resolution and little-endian encoding.\ntype Writer struct {\n\tw        io.Writer\n\ttsScaler int\n\t// Moving this into the struct seems to save an allocation for each call to writePacketHeader\n\tbuf [16]byte\n}\n\nconst magicMicroseconds = 0xA1B2C3D4\nconst versionMajor = 2\nconst versionMinor = 4\n\n// NewWriterNanos returns a new writer object, for writing packet data out\n// to the given writer.  If this is a new empty writer (as opposed to\n// an append), you must call WriteFileHeader before WritePacket.  Packet\n// timestamps are written with nanosecond precision.\n//\n//  // Write a new file:\n//  f, _ := os.Create(\"/tmp/file.pcap\")\n//  w := pcapgo.NewWriterNanos(f)\n//  w.WriteFileHeader(65536, layers.LinkTypeEthernet)  // new file, must do this.\n//  w.WritePacket(gopacket.CaptureInfo{...}, data1)\n//  f.Close()\n//  // Append to existing file (must have same snaplen and linktype)\n//  f2, _ := os.OpenFile(\"/tmp/fileNano.pcap\", os.O_APPEND, 0700)\n//  w2 := pcapgo.NewWriter(f2)\n//  // no need for file header, it's already written.\n//  w2.WritePacket(gopacket.CaptureInfo{...}, data2)\n//  f2.Close()\nfunc NewWriterNanos(w io.Writer) *Writer {\n\treturn &Writer{w: w, tsScaler: nanosPerNano}\n}\n\n// NewWriter returns a new writer object, for writing packet data out\n// to the given writer.  If this is a new empty writer (as opposed to\n// an append), you must call WriteFileHeader before WritePacket.\n// Packet timestamps are written witn microsecond precision.\n//\n//  // Write a new file:\n//  f, _ := os.Create(\"/tmp/file.pcap\")\n//  w := pcapgo.NewWriter(f)\n//  w.WriteFileHeader(65536, layers.LinkTypeEthernet)  // new file, must do this.\n//  w.WritePacket(gopacket.CaptureInfo{...}, data1)\n//  f.Close()\n//  // Append to existing file (must have same snaplen and linktype)\n//  f2, _ := os.OpenFile(\"/tmp/file.pcap\", os.O_APPEND, 0700)\n//  w2 := pcapgo.NewWriter(f2)\n//  // no need for file header, it's already written.\n//  w2.WritePacket(gopacket.CaptureInfo{...}, data2)\n//  f2.Close()\nfunc NewWriter(w io.Writer) *Writer {\n\treturn &Writer{w: w, tsScaler: nanosPerMicro}\n}\n\n// WriteFileHeader writes a file header out to the writer.\n// This must be called exactly once per output.\nfunc (w *Writer) WriteFileHeader(snaplen uint32, linktype layers.LinkType) error {\n\tvar buf [24]byte\n\tif w.tsScaler == nanosPerMicro {\n\t\tbinary.LittleEndian.PutUint32(buf[0:4], magicMicroseconds)\n\t} else {\n\t\tbinary.LittleEndian.PutUint32(buf[0:4], magicNanoseconds)\n\t}\n\tbinary.LittleEndian.PutUint16(buf[4:6], versionMajor)\n\tbinary.LittleEndian.PutUint16(buf[6:8], versionMinor)\n\t// bytes 8:12 stay 0 (timezone = UTC)\n\t// bytes 12:16 stay 0 (sigfigs is always set to zero, according to\n\t//   http://wiki.wireshark.org/Development/LibpcapFileFormat\n\tbinary.LittleEndian.PutUint32(buf[16:20], snaplen)\n\tbinary.LittleEndian.PutUint32(buf[20:24], uint32(linktype))\n\t_, err := w.w.Write(buf[:])\n\treturn err\n}\n\nconst nanosPerMicro = 1000\nconst nanosPerNano = 1\n\nfunc (w *Writer) writePacketHeader(ci gopacket.CaptureInfo) error {\n\tt := ci.Timestamp\n\tif t.IsZero() {\n\t\tt = time.Now()\n\t}\n\tsecs := t.Unix()\n\tusecs := t.Nanosecond() / w.tsScaler\n\tbinary.LittleEndian.PutUint32(w.buf[0:4], uint32(secs))\n\tbinary.LittleEndian.PutUint32(w.buf[4:8], uint32(usecs))\n\tbinary.LittleEndian.PutUint32(w.buf[8:12], uint32(ci.CaptureLength))\n\tbinary.LittleEndian.PutUint32(w.buf[12:16], uint32(ci.Length))\n\t_, err := w.w.Write(w.buf[:])\n\treturn err\n}\n\n// WritePacket writes the given packet data out to the file.\nfunc (w *Writer) WritePacket(ci gopacket.CaptureInfo, data []byte) error {\n\tif ci.CaptureLength != len(data) {\n\t\treturn fmt.Errorf(\"capture length %d does not match data length %d\", ci.CaptureLength, len(data))\n\t}\n\tif ci.CaptureLength > ci.Length {\n\t\treturn fmt.Errorf(\"invalid capture info %+v:  capture length > length\", ci)\n\t}\n\tif err := w.writePacketHeader(ci); err != nil {\n\t\treturn fmt.Errorf(\"error writing packet header: %v\", err)\n\t}\n\t_, err := w.w.Write(data)\n\treturn err\n}\n"
  },
  {
    "path": "pcapgo/write_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pcapgo\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n)\n\nfunc TestWriteHeaderNanos(t *testing.T) {\n\tvar buf bytes.Buffer\n\tw := NewWriterNanos(&buf)\n\tw.WriteFileHeader(0x1234, 0x56)\n\twant := []byte{\n\t\t0x4d, 0x3c, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x34, 0x12, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,\n\t}\n\tif got := buf.Bytes(); !bytes.Equal(got, want) {\n\t\tt.Errorf(\"buf mismatch:\\nwant: %+v\\ngot:  %+v\", want, got)\n\t}\n}\n\nfunc TestWriteHeader(t *testing.T) {\n\tvar buf bytes.Buffer\n\tw := NewWriter(&buf)\n\tw.WriteFileHeader(0x1234, 0x56)\n\twant := []byte{\n\t\t0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x34, 0x12, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,\n\t}\n\tif got := buf.Bytes(); !bytes.Equal(got, want) {\n\t\tt.Errorf(\"buf mismatch:\\nwant: %+v\\ngot:  %+v\", want, got)\n\t}\n}\n\nfunc TestWritePacket(t *testing.T) {\n\tci := gopacket.CaptureInfo{\n\t\tTimestamp:     time.Unix(0x01020304, 0xAA*1000),\n\t\tLength:        0xABCD,\n\t\tCaptureLength: 10,\n\t}\n\tdata := []byte{9, 8, 7, 6, 5, 4, 3, 2, 1, 0}\n\tvar buf bytes.Buffer\n\tw := NewWriter(&buf)\n\tw.WritePacket(ci, data)\n\twant := []byte{\n\t\t0x04, 0x03, 0x02, 0x01, 0xAA, 0x00, 0x00, 0x00,\n\t\t0x0A, 0x00, 0x00, 0x00, 0xCD, 0xAB, 0x00, 0x00,\n\t\t0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,\n\t}\n\tif got := buf.Bytes(); !bytes.Equal(got, want) {\n\t\tt.Errorf(\"buf mismatch:\\nwant: %+v\\ngot:  %+v\", want, got)\n\t}\n}\n\nfunc BenchmarkWritePacket(b *testing.B) {\n\tb.StopTimer()\n\tci := gopacket.CaptureInfo{\n\t\tTimestamp:     time.Unix(0x01020304, 0xAA*1000),\n\t\tLength:        0xABCD,\n\t\tCaptureLength: 10,\n\t}\n\tdata := []byte{9, 8, 7, 6, 5, 4, 3, 2, 1, 0}\n\tvar buf bytes.Buffer\n\tw := NewWriter(&buf)\n\tb.StartTimer()\n\n\tfor i := 0; i < b.N; i++ {\n\t\tw.WritePacket(ci, data)\n\t}\n}\n\nfunc TestCaptureInfoErrors(t *testing.T) {\n\tdata := []byte{1, 2, 3, 4}\n\tts := time.Unix(0, 0)\n\tfor _, test := range []gopacket.CaptureInfo{\n\t\tgopacket.CaptureInfo{\n\t\t\tTimestamp:     ts,\n\t\t\tLength:        5,\n\t\t\tCaptureLength: 5,\n\t\t},\n\t\tgopacket.CaptureInfo{\n\t\t\tTimestamp:     ts,\n\t\t\tLength:        3,\n\t\t\tCaptureLength: 4,\n\t\t},\n\t} {\n\t\tvar buf bytes.Buffer\n\t\tw := NewWriter(&buf)\n\t\tif err := w.WritePacket(test, data); err == nil {\n\t\t\tt.Errorf(\"CaptureInfo %+v should have error\", test)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pfring/doc.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n/*Package pfring wraps the PF_RING C library for Go.\n\nPF_RING is a high-performance packet capture library written by ntop.org (see\nhttp://www.ntop.org/products/pf_ring/).  This library allows you to utilize the\nPF_RING library with gopacket to read packet data and decode it.\n\nThis package is meant to be used with its parent,\nhttp://github.com/google/gopacket, although it can also be used independently\nif you just want to get packet data from the wire.\n\nSimple Example\n\nThis is probably the simplest code you can use to start getting packets through\npfring:\n\n if ring, err := pfring.NewRing(\"eth0\", 65536, pfring.FlagPromisc); err != nil {\n   panic(err)\n } else if err := ring.SetBPFFilter(\"tcp and port 80\"); err != nil {  // optional\n   panic(err)\n } else if err := ring.Enable(); err != nil { // Must do this!, or you get no packets!\n   panic(err)\n } else {\n   packetSource := gopacket.NewPacketSource(ring, layers.LinkTypeEthernet)\n\t for packet := range packetSource.Packets() {\n     handlePacket(packet)  // Do something with a packet here.\n   }\n }\n\nPfring Tweaks\n\nPF_RING has a ton of optimizations and tweaks to make sure you get just the\npackets you want.  For example, if you're only using pfring to read packets,\nconsider running:\n\n ring.SetSocketMode(pfring.ReadOnly)\n\nIf you only care about packets received on your interface (not those transmitted\nby the interface), you can run:\n\n ring.SetDirection(pfring.ReceiveOnly)\n\nPfring Clusters\n\nPF_RING has an idea of 'clusters', where multiple applications can all read from\nthe same cluster, and PF_RING will multiplex packets over that cluster such that\nonly one application receives each packet.  We won't discuss this mechanism in\ntoo much more detail (see the ntop.org docs for more info), but here's how to\nutilize this with the pfring go library:\n\n ring.SetCluster(1, pfring.ClusterPerFlow5Tuple)\n*/\npackage pfring\n"
  },
  {
    "path": "pfring/pfring.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n// Copyright 2009-2011 Andreas Krennmair. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pfring\n\n/*\n// lpcap is needed for bpf\n#cgo LDFLAGS: -lpfring -lpcap\n#include <stdlib.h>\n#include <pfring.h>\n#include <stdint.h>\n#include <linux/pf_ring.h>\n\nstruct metadata {\n\tu_int64_t timestamp_ns;\n\tu_int32_t caplen;\n\tu_int32_t len;\n\tint32_t if_index;\n};\n\n// In pfring 7.2 pfring_pkthdr struct was changed to packed\n// Since this is incompatible with go, copy the values we need to a custom\n// struct (struct metadata above).\n// Another way to do this, would be to store the struct offsets in defines\n// and use encoding/binary in go-land. But this has the downside, that there is\n// no native endianess in encoding/binary and storing ByteOrder in a variable\n// leads to an expensive itab lookup + call (instead of very fast inlined and\n// optimized movs). Using unsafe magic could lead to problems with unaligned\n// access.\n// Additionally, this does the same uintptr-dance as pcap.\nint pfring_readpacketdatato_wrapper(\n    pfring* ring,\n    uintptr_t buffer,\n    uintptr_t meta) {\n  struct metadata* ci = (struct metadata* )meta;\n  struct pfring_pkthdr hdr;\n  int ret = pfring_recv(ring, (u_char**)buffer, 0, &hdr, 1);\n  ci->timestamp_ns = hdr.extended_hdr.timestamp_ns;\n  ci->caplen = hdr.caplen;\n  ci->len = hdr.len;\n  ci->if_index = hdr.extended_hdr.if_index;\n  return ret;\n}\n*/\nimport \"C\"\n\n// NOTE:  If you install PF_RING with non-standard options, you may also need\n// to use LDFLAGS -lnuma and/or -lrt.  Both have been reported necessary if\n// PF_RING is configured with --disable-bpf.\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/google/gopacket\"\n)\n\nconst errorBufferSize = 256\n\n// Ring provides a handle to a pf_ring.\ntype Ring struct {\n\tcptr                    *C.pfring\n\tuseExtendedPacketHeader bool\n\tinterfaceIndex          int\n\tmu                      sync.Mutex\n\n\tmeta   C.struct_metadata\n\tbufPtr *C.u_char\n}\n\n// Flag provides a set of boolean flags to use when creating a new ring.\ntype Flag uint32\n\n// Set of flags that can be passed (OR'd together) to NewRing.\nconst (\n\tFlagReentrant       Flag = C.PF_RING_REENTRANT\n\tFlagLongHeader      Flag = C.PF_RING_LONG_HEADER\n\tFlagPromisc         Flag = C.PF_RING_PROMISC\n\tFlagDNASymmetricRSS Flag = C.PF_RING_DNA_SYMMETRIC_RSS\n\tFlagTimestamp       Flag = C.PF_RING_TIMESTAMP\n\tFlagHWTimestamp     Flag = C.PF_RING_HW_TIMESTAMP\n)\n\n// NewRing creates a new PFRing.  Note that when the ring is initially created,\n// it is disabled.  The caller must call Enable to start receiving packets.\n// The caller should call Close on the given ring when finished with it.\nfunc NewRing(device string, snaplen uint32, flags Flag) (ring *Ring, _ error) {\n\tdev := C.CString(device)\n\tdefer C.free(unsafe.Pointer(dev))\n\n\tcptr, err := C.pfring_open(dev, C.u_int32_t(snaplen), C.u_int32_t(flags))\n\tif cptr == nil || err != nil {\n\t\treturn nil, fmt.Errorf(\"pfring NewRing error: %v\", err)\n\t}\n\tring = &Ring{cptr: cptr}\n\n\tif flags&FlagLongHeader == FlagLongHeader {\n\t\tring.useExtendedPacketHeader = true\n\t} else {\n\t\tifc, err := net.InterfaceByName(device)\n\t\tif err == nil {\n\t\t\tring.interfaceIndex = ifc.Index\n\t\t}\n\t}\n\tring.SetApplicationName(os.Args[0])\n\treturn\n}\n\n// Close closes the given Ring.  After this call, the Ring should no longer be\n// used.\nfunc (r *Ring) Close() {\n\tC.pfring_close(r.cptr)\n}\n\n// NextResult is the return code from a call to Next.\ntype NextResult int32\n\n// Set of results that could be returned from a call to get another packet.\nconst (\n\tNextNoPacketNonblocking NextResult = 0\n\tNextError               NextResult = -1\n\tNextOk                  NextResult = 1\n\tNextNotEnabled          NextResult = -7\n)\n\n// NextResult implements the error interface.\nfunc (n NextResult) Error() string {\n\tswitch n {\n\tcase NextNoPacketNonblocking:\n\t\treturn \"No packet available, nonblocking socket\"\n\tcase NextError:\n\t\treturn \"Generic error\"\n\tcase NextOk:\n\t\treturn \"Success (not an error)\"\n\tcase NextNotEnabled:\n\t\treturn \"Ring not enabled\"\n\t}\n\treturn strconv.Itoa(int(n))\n}\n\n// shared code (Read-functions), that fetches a packet + metadata from pf_ring\nfunc (r *Ring) getNextBufPtrLocked(ci *gopacket.CaptureInfo) error {\n\tresult := NextResult(C.pfring_readpacketdatato_wrapper(r.cptr, C.uintptr_t(uintptr(unsafe.Pointer(&r.bufPtr))), C.uintptr_t(uintptr(unsafe.Pointer(&r.meta)))))\n\tif result != NextOk {\n\t\treturn result\n\t}\n\tci.Timestamp = time.Unix(0, int64(r.meta.timestamp_ns))\n\tci.CaptureLength = int(r.meta.caplen)\n\tci.Length = int(r.meta.len)\n\tif r.useExtendedPacketHeader {\n\t\tci.InterfaceIndex = int(r.meta.if_index)\n\t} else {\n\t\tci.InterfaceIndex = r.interfaceIndex\n\t}\n\treturn nil\n}\n\n// ReadPacketDataTo reads packet data into a user-supplied buffer.\n//\n// Deprecated: This function is provided for legacy code only. Use ReadPacketData or ZeroCopyReadPacketData\n// This function does an additional copy, and is therefore slower than ZeroCopyReadPacketData.\n// The old implementation did the same inside the pf_ring library.\nfunc (r *Ring) ReadPacketDataTo(data []byte) (ci gopacket.CaptureInfo, err error) {\n\tr.mu.Lock()\n\terr = r.getNextBufPtrLocked(&ci)\n\tif err == nil {\n\t\tvar buf []byte\n\t\tslice := (*reflect.SliceHeader)(unsafe.Pointer(&buf))\n\t\tslice.Data = uintptr(unsafe.Pointer(r.bufPtr))\n\t\tslice.Len = ci.CaptureLength\n\t\tslice.Cap = ci.CaptureLength\n\t\tcopy(data, buf)\n\t}\n\tr.mu.Unlock()\n\treturn\n}\n\n// ReadPacketData returns the next packet read from pf_ring, along with an error\n// code associated with that packet. If the packet is read successfully, the\n// returned error is nil.\nfunc (r *Ring) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\tr.mu.Lock()\n\terr = r.getNextBufPtrLocked(&ci)\n\tif err == nil {\n\t\tdata = C.GoBytes(unsafe.Pointer(r.bufPtr), C.int(ci.CaptureLength))\n\t}\n\tr.mu.Unlock()\n\treturn\n}\n\n// ZeroCopyReadPacketData returns the next packet read from pf_ring, along with an error\n// code associated with that packet.\n// The slice returned by ZeroCopyReadPacketData points to bytes inside a pf_ring\n// ring. Each call to ZeroCopyReadPacketData might invalidate any data previously\n// returned by ZeroCopyReadPacketData. Care must be taken not to keep pointers\n// to old bytes when using ZeroCopyReadPacketData... if you need to keep data past\n// the next time you call ZeroCopyReadPacketData, use ReadPacketData, which copies\n// the bytes into a new buffer for you.\n//  data1, _, _ := handle.ZeroCopyReadPacketData()\n//  // do everything you want with data1 here, copying bytes out of it if you'd like to keep them around.\n//  data2, _, _ := handle.ZeroCopyReadPacketData()  // invalidates bytes in data1\nfunc (r *Ring) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {\n\tr.mu.Lock()\n\terr = r.getNextBufPtrLocked(&ci)\n\tif err == nil {\n\t\tslice := (*reflect.SliceHeader)(unsafe.Pointer(&data))\n\t\tslice.Data = uintptr(unsafe.Pointer(r.bufPtr))\n\t\tslice.Len = ci.CaptureLength\n\t\tslice.Cap = ci.CaptureLength\n\t}\n\tr.mu.Unlock()\n\treturn\n}\n\n// ClusterType is a type of clustering used when balancing across multiple\n// rings.\ntype ClusterType C.cluster_type\n\nconst (\n\t// ClusterPerFlow clusters by <src ip, src port, dst ip, dst port, proto,\n\t// vlan>\n\tClusterPerFlow ClusterType = C.cluster_per_flow\n\t// ClusterRoundRobin round-robins packets between applications, ignoring\n\t// packet information.\n\tClusterRoundRobin ClusterType = C.cluster_round_robin\n\t// ClusterPerFlow2Tuple clusters by <src ip, dst ip>\n\tClusterPerFlow2Tuple ClusterType = C.cluster_per_flow_2_tuple\n\t// ClusterPerFlow4Tuple clusters by <src ip, src port, dst ip, dst port>\n\tClusterPerFlow4Tuple ClusterType = C.cluster_per_flow_4_tuple\n\t// ClusterPerFlow5Tuple clusters by <src ip, src port, dst ip, dst port,\n\t// proto>\n\tClusterPerFlow5Tuple ClusterType = C.cluster_per_flow_5_tuple\n\t// ClusterPerFlowTCP5Tuple acts like ClusterPerFlow5Tuple for TCP packets and\n\t// like ClusterPerFlow2Tuple for all other packets.\n\tClusterPerFlowTCP5Tuple ClusterType = C.cluster_per_flow_tcp_5_tuple\n)\n\n// SetCluster sets which cluster the ring should be part of, and the cluster\n// type to use.\nfunc (r *Ring) SetCluster(cluster int, typ ClusterType) error {\n\tif rv := C.pfring_set_cluster(r.cptr, C.u_int(cluster), C.cluster_type(typ)); rv != 0 {\n\t\treturn fmt.Errorf(\"Unable to set cluster, got error code %d\", rv)\n\t}\n\treturn nil\n}\n\n// RemoveFromCluster removes the ring from the cluster it was put in with\n// SetCluster.\nfunc (r *Ring) RemoveFromCluster() error {\n\tif rv := C.pfring_remove_from_cluster(r.cptr); rv != 0 {\n\t\treturn fmt.Errorf(\"Unable to remove from cluster, got error code %d\", rv)\n\t}\n\treturn nil\n}\n\n// SetSamplingRate sets the sampling rate to 1/<rate>.\nfunc (r *Ring) SetSamplingRate(rate int) error {\n\tif rv := C.pfring_set_sampling_rate(r.cptr, C.u_int32_t(rate)); rv != 0 {\n\t\treturn fmt.Errorf(\"Unable to set sampling rate, got error code %d\", rv)\n\t}\n\treturn nil\n}\n\n// SetPollWatermark sets the pfring's poll watermark packet count\nfunc (r *Ring) SetPollWatermark(count uint16) error {\n\tif rv := C.pfring_set_poll_watermark(r.cptr, C.u_int16_t(count)); rv != 0 {\n\t\treturn fmt.Errorf(\"Unable to set poll watermark, got error code %d\", rv)\n\t}\n\treturn nil\n}\n\n// SetPriority sets the pfring poll threads CPU usage limit\nfunc (r *Ring) SetPriority(cpu uint16) {\n\tC.pfring_config(C.u_short(cpu))\n}\n\n// SetPollDuration sets the pfring's poll duration before it yields/returns\nfunc (r *Ring) SetPollDuration(durationMillis uint) error {\n\tif rv := C.pfring_set_poll_duration(r.cptr, C.u_int(durationMillis)); rv != 0 {\n\t\treturn fmt.Errorf(\"Unable to set poll duration, got error code %d\", rv)\n\t}\n\treturn nil\n}\n\n// SetBPFFilter sets the BPF filter for the ring.\nfunc (r *Ring) SetBPFFilter(bpfFilter string) error {\n\tfilter := C.CString(bpfFilter)\n\tdefer C.free(unsafe.Pointer(filter))\n\tif rv := C.pfring_set_bpf_filter(r.cptr, filter); rv != 0 {\n\t\treturn fmt.Errorf(\"Unable to set BPF filter, got error code %d\", rv)\n\t}\n\treturn nil\n}\n\n// RemoveBPFFilter removes the BPF filter from the ring.\nfunc (r *Ring) RemoveBPFFilter() error {\n\tif rv := C.pfring_remove_bpf_filter(r.cptr); rv != 0 {\n\t\treturn fmt.Errorf(\"Unable to remove BPF filter, got error code %d\", rv)\n\t}\n\treturn nil\n}\n\n// WritePacketData uses the ring to send raw packet data to the interface.\nfunc (r *Ring) WritePacketData(data []byte) error {\n\tbuf := (*C.char)(unsafe.Pointer(&data[0]))\n\tif rv := C.pfring_send(r.cptr, buf, C.u_int(len(data)), 1); rv < 0 {\n\t\treturn fmt.Errorf(\"Unable to send packet data, got error code %d\", rv)\n\t}\n\treturn nil\n}\n\n// Enable enables the given ring.  This function MUST be called on each new\n// ring after it has been set up, or that ring will NOT receive packets.\nfunc (r *Ring) Enable() error {\n\tif rv := C.pfring_enable_ring(r.cptr); rv != 0 {\n\t\treturn fmt.Errorf(\"Unable to enable ring, got error code %d\", rv)\n\t}\n\treturn nil\n}\n\n// Disable disables the given ring.  After this call, it will no longer receive\n// packets.\nfunc (r *Ring) Disable() error {\n\tif rv := C.pfring_disable_ring(r.cptr); rv != 0 {\n\t\treturn fmt.Errorf(\"Unable to disable ring, got error code %d\", rv)\n\t}\n\treturn nil\n}\n\n// Stats provides simple statistics on a ring.\ntype Stats struct {\n\tReceived, Dropped uint64\n}\n\n// Stats returns statistsics for the ring.\nfunc (r *Ring) Stats() (s Stats, err error) {\n\tvar stats C.pfring_stat\n\tif rv := C.pfring_stats(r.cptr, &stats); rv != 0 {\n\t\terr = fmt.Errorf(\"Unable to get ring stats, got error code %d\", rv)\n\t\treturn\n\t}\n\ts.Received = uint64(stats.recv)\n\ts.Dropped = uint64(stats.drop)\n\treturn\n}\n\n// Direction is a simple enum to set which packets (TX, RX, or both) a ring\n// captures.\ntype Direction C.packet_direction\n\nconst (\n\t// TransmitOnly will only capture packets transmitted by the ring's\n\t// interface(s).\n\tTransmitOnly Direction = C.tx_only_direction\n\t// ReceiveOnly will only capture packets received by the ring's\n\t// interface(s).\n\tReceiveOnly Direction = C.rx_only_direction\n\t// ReceiveAndTransmit will capture both received and transmitted packets on\n\t// the ring's interface(s).\n\tReceiveAndTransmit Direction = C.rx_and_tx_direction\n)\n\n// SetDirection sets which packets should be captured by the ring.\nfunc (r *Ring) SetDirection(d Direction) error {\n\tif rv := C.pfring_set_direction(r.cptr, C.packet_direction(d)); rv != 0 {\n\t\treturn fmt.Errorf(\"Unable to set ring direction, got error code %d\", rv)\n\t}\n\treturn nil\n}\n\n// SocketMode is an enum for setting whether a ring should read, write, or both.\ntype SocketMode C.socket_mode\n\nconst (\n\t// WriteOnly sets up the ring to only send packets (Inject), not read them.\n\tWriteOnly SocketMode = C.send_only_mode\n\t// ReadOnly sets up the ring to only receive packets (ReadPacketData), not\n\t// send them.\n\tReadOnly SocketMode = C.recv_only_mode\n\t// WriteAndRead sets up the ring to both send and receive packets.\n\tWriteAndRead SocketMode = C.send_and_recv_mode\n)\n\n// SetSocketMode sets the mode of the ring socket to send, receive, or both.\nfunc (r *Ring) SetSocketMode(s SocketMode) error {\n\tif rv := C.pfring_set_socket_mode(r.cptr, C.socket_mode(s)); rv != 0 {\n\t\treturn fmt.Errorf(\"Unable to set socket mode, got error code %d\", rv)\n\t}\n\treturn nil\n}\n\n// SetApplicationName sets a string name to the ring.  This name is available in\n// /proc stats for pf_ring.  By default, NewRing automatically calls this with\n// argv[0].\nfunc (r *Ring) SetApplicationName(name string) error {\n\tbuf := C.CString(name)\n\tdefer C.free(unsafe.Pointer(buf))\n\tif rv := C.pfring_set_application_name(r.cptr, buf); rv != 0 {\n\t\treturn fmt.Errorf(\"Unable to set ring application name, got error code %d\", rv)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "pfring/pfring_test.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage pfring\n\nimport (\n\t\"flag\"\n\t\"log\"\n\t\"testing\"\n)\n\nvar iface = flag.String(\"i\", \"eth0\", \"Interface to read packets from\")\n\nfunc BenchmarkPfringRead(b *testing.B) {\n\tvar ring *Ring\n\tvar err error\n\tif ring, err = NewRing(*iface, 65536, FlagPromisc); err != nil {\n\t\tlog.Fatalln(\"pfring ring creation error:\", err)\n\t}\n\tif err = ring.SetSocketMode(ReadOnly); err != nil {\n\t\tlog.Fatalln(\"pfring SetSocketMode error:\", err)\n\t} else if err = ring.Enable(); err != nil {\n\t\tlog.Fatalln(\"pfring Enable error:\", err)\n\t}\n\tb.ResetTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\t_, ci, _ := ring.ReadPacketData()\n\t\tb.SetBytes(int64(ci.CaptureLength))\n\t}\n}\n\nfunc BenchmarkPfringReadZero(b *testing.B) {\n\tvar ring *Ring\n\tvar err error\n\tif ring, err = NewRing(*iface, 65536, FlagPromisc); err != nil {\n\t\tlog.Fatalln(\"pfring ring creation error:\", err)\n\t}\n\tif err = ring.SetSocketMode(ReadOnly); err != nil {\n\t\tlog.Fatalln(\"pfring SetSocketMode error:\", err)\n\t} else if err = ring.Enable(); err != nil {\n\t\tlog.Fatalln(\"pfring Enable error:\", err)\n\t}\n\tb.ResetTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\t_, ci, _ := ring.ZeroCopyReadPacketData()\n\t\tb.SetBytes(int64(ci.CaptureLength))\n\t}\n}\n\nfunc BenchmarkPfringReadTo(b *testing.B) {\n\tvar ring *Ring\n\tvar err error\n\tif ring, err = NewRing(*iface, 65536, FlagPromisc); err != nil {\n\t\tlog.Fatalln(\"pfring ring creation error:\", err)\n\t}\n\tif err = ring.SetSocketMode(ReadOnly); err != nil {\n\t\tlog.Fatalln(\"pfring SetSocketMode error:\", err)\n\t} else if err = ring.Enable(); err != nil {\n\t\tlog.Fatalln(\"pfring Enable error:\", err)\n\t}\n\tbuffer := make([]byte, 65536*2)\n\tb.ResetTimer()\n\tfor i := 0; i < b.N; i++ {\n\t\tci, _ := ring.ReadPacketDataTo(buffer)\n\t\tb.SetBytes(int64(ci.CaptureLength))\n\t}\n}\n"
  },
  {
    "path": "reassembly/cap2test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build ignore\n\npackage main\n\nimport (\n\t\"bytes\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n\t\"github.com/google/gopacket/pcap\"\n)\n\nvar input = flag.String(\"i\", \"\", \"Input filename\")\n\nfunc main() {\n\tvar handler *pcap.Handle\n\tvar err error\n\tflag.Parse()\n\tif *input == \"\" {\n\t\tlog.Fatalf(\"Please specify input filename\")\n\t}\n\tif handler, err = pcap.OpenOffline(*input); err != nil {\n\t\tlog.Fatalf(\"Failed to open: %s: %s\", *input, err)\n\t}\n\targs := flag.Args()\n\tif len(args) > 0 {\n\t\tfilter := strings.Join(args, \" \")\n\t\tif err := handler.SetBPFFilter(filter); err != nil {\n\t\t\tlog.Fatalf(\"Failed to set BPF filter \\\"%s\\\": %s\", filter, err)\n\t\t}\n\t\thandler.Stats()\n\t}\n\tvar decoder gopacket.Decoder\n\tvar ok bool\n\tlinkType := fmt.Sprintf(\"%s\", handler.LinkType())\n\tif decoder, ok = gopacket.DecodersByLayerName[linkType]; !ok {\n\t\tlog.Fatalf(\"Failed to find decoder to pcap's linktype %s\", linkType)\n\t}\n\tsource := gopacket.NewPacketSource(handler, decoder)\n\tcount := uint64(0)\n\tpktNonTcp := uint64(0)\n\tpktTcp := uint64(0)\n\tfmt.Println(\"test([]testSequence{\")\n\tfor packet := range source.Packets() {\n\t\tcount++\n\t\ttcp := packet.Layer(layers.LayerTypeTCP)\n\t\tif tcp == nil {\n\t\t\tpktNonTcp++\n\t\t\tcontinue\n\t\t} else {\n\t\t\tpktTcp++\n\t\t\ttcp := tcp.(*layers.TCP)\n\t\t\t//fmt.Printf(\"packet: %s\\n\", tcp)\n\t\t\tvar b bytes.Buffer\n\t\t\tb.WriteString(\"{\\n\")\n\t\t\t// TCP\n\t\t\tb.WriteString(\"tcp: layers.TCP{\\n\")\n\t\t\tif tcp.SYN {\n\t\t\t\tb.WriteString(\"  SYN: true,\\n\")\n\t\t\t}\n\t\t\tif tcp.ACK {\n\t\t\t\tb.WriteString(\"  ACK: true,\\n\")\n\t\t\t}\n\t\t\tif tcp.RST {\n\t\t\t\tb.WriteString(\"  RST: true,\\n\")\n\t\t\t}\n\t\t\tif tcp.FIN {\n\t\t\t\tb.WriteString(\"  FIN: true,\\n\")\n\t\t\t}\n\t\t\tb.WriteString(fmt.Sprintf(\"  SrcPort: %d,\\n\", tcp.SrcPort))\n\t\t\tb.WriteString(fmt.Sprintf(\"  DstPort: %d,\\n\", tcp.DstPort))\n\t\t\tb.WriteString(fmt.Sprintf(\"  Seq: %d,\\n\", tcp.Seq))\n\t\t\tb.WriteString(fmt.Sprintf(\"  Ack: %d,\\n\", tcp.Ack))\n\t\t\tb.WriteString(\"  BaseLayer: layers.BaseLayer{Payload: []byte{\")\n\t\t\tfor _, p := range tcp.Payload {\n\t\t\t\tb.WriteString(fmt.Sprintf(\"%d,\", p))\n\t\t\t}\n\t\t\tb.WriteString(\"}},\\n\")\n\t\t\tb.WriteString(\"},\\n\")\n\t\t\t// CaptureInfo\n\t\t\tb.WriteString(\"ci: gopacket.CaptureInfo{\\n\")\n\t\t\tts := packet.Metadata().CaptureInfo.Timestamp\n\t\t\tb.WriteString(fmt.Sprintf(\"  Timestamp: time.Unix(%d,%d),\\n\", ts.Unix(), ts.Nanosecond()))\n\t\t\tb.WriteString(\"},\\n\")\n\t\t\t// Struct\n\t\t\tb.WriteString(\"},\\n\")\n\t\t\tfmt.Print(b.String())\n\t\t}\n\n\t}\n\tfmt.Println(\"})\")\n\n\tfmt.Fprintf(os.Stderr, \"Total: %d, TCP: %d, non-TCP: %d\\n\", count, pktTcp, pktNonTcp)\n}\n"
  },
  {
    "path": "reassembly/memory.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage reassembly\n\nimport (\n\t\"flag\"\n\t\"log\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/google/gopacket/layers\"\n)\n\nvar memLog = flag.Bool(\"assembly_memuse_log\", defaultDebug, \"If true, the github.com/google/gopacket/reassembly library will log information regarding its memory use every once in a while.\")\n\n/*\n * pageCache\n */\n// pageCache is a concurrency-unsafe store of page objects we use to avoid\n// memory allocation as much as we can.\ntype pageCache struct {\n\tpagePool     *sync.Pool\n\tused         int\n\tpageRequests int64\n}\n\nfunc newPageCache() *pageCache {\n\tpc := &pageCache{\n\t\tpagePool: &sync.Pool{\n\t\t\tNew: func() interface{} { return new(page) },\n\t\t}}\n\treturn pc\n}\n\n// next returns a clean, ready-to-use page object.\nfunc (c *pageCache) next(ts time.Time) (p *page) {\n\tif *memLog {\n\t\tc.pageRequests++\n\t\tif c.pageRequests&0xFFFF == 0 {\n\t\t\tlog.Println(\"PageCache:\", c.pageRequests, \"requested,\", c.used, \"used,\")\n\t\t}\n\t}\n\tp = c.pagePool.Get().(*page)\n\tp.seen = ts\n\tp.bytes = p.buf[:0]\n\tc.used++\n\tif *memLog {\n\t\tlog.Printf(\"allocator returns %s\\n\", p)\n\t}\n\n\treturn p\n}\n\n// replace replaces a page into the pageCache.\nfunc (c *pageCache) replace(p *page) {\n\tc.used--\n\tif *memLog {\n\t\tlog.Printf(\"replacing %s\\n\", p)\n\t}\n\tp.prev = nil\n\tp.next = nil\n\tc.pagePool.Put(p)\n}\n\n/*\n * StreamPool\n */\n\n// StreamPool stores all streams created by Assemblers, allowing multiple\n// assemblers to work together on stream processing while enforcing the fact\n// that a single stream receives its data serially.  It is safe\n// for concurrency, usable by multiple Assemblers at once.\n//\n// StreamPool handles the creation and storage of Stream objects used by one or\n// more Assembler objects.  When a new TCP stream is found by an Assembler, it\n// creates an associated Stream by calling its StreamFactory's New method.\n// Thereafter (until the stream is closed), that Stream object will receive\n// assembled TCP data via Assembler's calls to the stream's Reassembled\n// function.\n//\n// Like the Assembler, StreamPool attempts to minimize allocation.  Unlike the\n// Assembler, though, it does have to do some locking to make sure that the\n// connection objects it stores are accessible to multiple Assemblers.\ntype StreamPool struct {\n\tconns              map[key]*connection\n\tusers              int\n\tmu                 sync.RWMutex\n\tfactory            StreamFactory\n\tfree               []*connection\n\tall                [][]connection\n\tnextAlloc          int\n\tnewConnectionCount int64\n}\n\nconst initialAllocSize = 1024\n\nfunc (p *StreamPool) grow() {\n\tconns := make([]connection, p.nextAlloc)\n\tp.all = append(p.all, conns)\n\tfor i := range conns {\n\t\tp.free = append(p.free, &conns[i])\n\t}\n\tif *memLog {\n\t\tlog.Println(\"StreamPool: created\", p.nextAlloc, \"new connections\")\n\t}\n\tp.nextAlloc *= 2\n}\n\n// Dump logs all connections\nfunc (p *StreamPool) Dump() {\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\tlog.Printf(\"Remaining %d connections: \", len(p.conns))\n\tfor _, conn := range p.conns {\n\t\tlog.Printf(\"%v %s\", conn.key, conn)\n\t}\n}\n\nfunc (p *StreamPool) remove(conn *connection) {\n\tp.mu.Lock()\n\tif _, ok := p.conns[conn.key]; ok {\n\t\tdelete(p.conns, conn.key)\n\t\tp.free = append(p.free, conn)\n\t}\n\tp.mu.Unlock()\n}\n\n// NewStreamPool creates a new connection pool.  Streams will\n// be created as necessary using the passed-in StreamFactory.\nfunc NewStreamPool(factory StreamFactory) *StreamPool {\n\treturn &StreamPool{\n\t\tconns:     make(map[key]*connection, initialAllocSize),\n\t\tfree:      make([]*connection, 0, initialAllocSize),\n\t\tfactory:   factory,\n\t\tnextAlloc: initialAllocSize,\n\t}\n}\n\nfunc (p *StreamPool) connections() []*connection {\n\tp.mu.RLock()\n\tconns := make([]*connection, 0, len(p.conns))\n\tfor _, conn := range p.conns {\n\t\tconns = append(conns, conn)\n\t}\n\tp.mu.RUnlock()\n\treturn conns\n}\n\nfunc (p *StreamPool) newConnection(k key, s Stream, ts time.Time) (c *connection, h *halfconnection, r *halfconnection) {\n\tif *memLog {\n\t\tp.newConnectionCount++\n\t\tif p.newConnectionCount&0x7FFF == 0 {\n\t\t\tlog.Println(\"StreamPool:\", p.newConnectionCount, \"requests,\", len(p.conns), \"used,\", len(p.free), \"free\")\n\t\t}\n\t}\n\tif len(p.free) == 0 {\n\t\tp.grow()\n\t}\n\tindex := len(p.free) - 1\n\tc, p.free = p.free[index], p.free[:index]\n\tc.reset(k, s, ts)\n\treturn c, &c.c2s, &c.s2c\n}\n\nfunc (p *StreamPool) getHalf(k key) (*connection, *halfconnection, *halfconnection) {\n\tconn := p.conns[k]\n\tif conn != nil {\n\t\treturn conn, &conn.c2s, &conn.s2c\n\t}\n\trk := k.Reverse()\n\tconn = p.conns[rk]\n\tif conn != nil {\n\t\treturn conn, &conn.s2c, &conn.c2s\n\t}\n\treturn nil, nil, nil\n}\n\n// getConnection returns a connection.  If end is true and a connection\n// does not already exist, returns nil.  This allows us to check for a\n// connection without actually creating one if it doesn't already exist.\nfunc (p *StreamPool) getConnection(k key, end bool, ts time.Time, tcp *layers.TCP, ac AssemblerContext) (*connection, *halfconnection, *halfconnection) {\n\tp.mu.RLock()\n\tconn, half, rev := p.getHalf(k)\n\tp.mu.RUnlock()\n\tif end || conn != nil {\n\t\treturn conn, half, rev\n\t}\n\ts := p.factory.New(k[0], k[1], tcp, ac)\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\tconn, half, rev = p.newConnection(k, s, ts)\n\tconn2, half2, rev2 := p.getHalf(k)\n\tif conn2 != nil {\n\t\tif conn2.key != k {\n\t\t\tpanic(\"FIXME: other dir added in the meantime...\")\n\t\t}\n\t\t// FIXME: delete s ?\n\t\treturn conn2, half2, rev2\n\t}\n\tp.conns[k] = conn\n\treturn conn, half, rev\n}\n"
  },
  {
    "path": "reassembly/tcpassembly.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// Package reassembly provides TCP stream re-assembly.\n//\n// The reassembly package implements uni-directional TCP reassembly, for use in\n// packet-sniffing applications.  The caller reads packets off the wire, then\n// presents them to an Assembler in the form of gopacket layers.TCP packets\n// (github.com/google/gopacket, github.com/google/gopacket/layers).\n//\n// The Assembler uses a user-supplied\n// StreamFactory to create a user-defined Stream interface, then passes packet\n// data in stream order to that object.  A concurrency-safe StreamPool keeps\n// track of all current Streams being reassembled, so multiple Assemblers may\n// run at once to assemble packets while taking advantage of multiple cores.\n//\n// TODO: Add simplest example\npackage reassembly\n\nimport (\n\t\"encoding/hex\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\n// TODO:\n// - push to Stream on Ack\n// - implement chunked (cheap) reads and Reader() interface\n// - better organize file: split files: 'mem', 'misc' (seq + flow)\n\nvar defaultDebug = false\n\nvar debugLog = flag.Bool(\"assembly_debug_log\", defaultDebug, \"If true, the github.com/google/gopacket/reassembly library will log verbose debugging information (at least one line per packet)\")\n\nconst invalidSequence = -1\nconst uint32Max = 0xFFFFFFFF\n\n// Sequence is a TCP sequence number.  It provides a few convenience functions\n// for handling TCP wrap-around.  The sequence should always be in the range\n// [0,0xFFFFFFFF]... its other bits are simply used in wrap-around calculations\n// and should never be set.\ntype Sequence int64\n\n// Difference defines an ordering for comparing TCP sequences that's safe for\n// roll-overs.  It returns:\n//    > 0 : if t comes after s\n//    < 0 : if t comes before s\n//      0 : if t == s\n// The number returned is the sequence difference, so 4.Difference(8) will\n// return 4.\n//\n// It handles rollovers by considering any sequence in the first quarter of the\n// uint32 space to be after any sequence in the last quarter of that space, thus\n// wrapping the uint32 space.\nfunc (s Sequence) Difference(t Sequence) int {\n\tif s > uint32Max-uint32Max/4 && t < uint32Max/4 {\n\t\tt += uint32Max\n\t} else if t > uint32Max-uint32Max/4 && s < uint32Max/4 {\n\t\ts += uint32Max\n\t}\n\treturn int(t - s)\n}\n\n// Add adds an integer to a sequence and returns the resulting sequence.\nfunc (s Sequence) Add(t int) Sequence {\n\treturn (s + Sequence(t)) & uint32Max\n}\n\n// TCPAssemblyStats provides some figures for a ScatterGather\ntype TCPAssemblyStats struct {\n\t// For this ScatterGather\n\tChunks  int\n\tPackets int\n\t// For the half connection, since last call to ReassembledSG()\n\tQueuedBytes    int\n\tQueuedPackets  int\n\tOverlapBytes   int\n\tOverlapPackets int\n}\n\n// ScatterGather is used to pass reassembled data and metadata of reassembled\n// packets to a Stream via ReassembledSG\ntype ScatterGather interface {\n\t// Returns the length of available bytes and saved bytes\n\tLengths() (int, int)\n\t// Returns the bytes up to length (shall be <= available bytes)\n\tFetch(length int) []byte\n\t// Tell to keep from offset\n\tKeepFrom(offset int)\n\t// Return CaptureInfo of packet corresponding to given offset\n\tCaptureInfo(offset int) gopacket.CaptureInfo\n\t// Return some info about the reassembled chunks\n\tInfo() (direction TCPFlowDirection, start bool, end bool, skip int)\n\t// Return some stats regarding the state of the stream\n\tStats() TCPAssemblyStats\n}\n\n// byteContainer is either a page or a livePacket\ntype byteContainer interface {\n\tgetBytes() []byte\n\tlength() int\n\tconvertToPages(*pageCache, int, AssemblerContext) (*page, *page, int)\n\tcaptureInfo() gopacket.CaptureInfo\n\tassemblerContext() AssemblerContext\n\trelease(*pageCache) int\n\tisStart() bool\n\tisEnd() bool\n\tgetSeq() Sequence\n\tisPacket() bool\n}\n\n// Implements a ScatterGather\ntype reassemblyObject struct {\n\tall       []byteContainer\n\tSkip      int\n\tDirection TCPFlowDirection\n\tsaved     int\n\ttoKeep    int\n\t// stats\n\tqueuedBytes    int\n\tqueuedPackets  int\n\toverlapBytes   int\n\toverlapPackets int\n}\n\nfunc (rl *reassemblyObject) Lengths() (int, int) {\n\tl := 0\n\tfor _, r := range rl.all {\n\t\tl += r.length()\n\t}\n\treturn l, rl.saved\n}\n\nfunc (rl *reassemblyObject) Fetch(l int) []byte {\n\tif l <= rl.all[0].length() {\n\t\treturn rl.all[0].getBytes()[:l]\n\t}\n\tbytes := make([]byte, 0, l)\n\tfor _, bc := range rl.all {\n\t\tbytes = append(bytes, bc.getBytes()...)\n\t}\n\treturn bytes[:l]\n}\n\nfunc (rl *reassemblyObject) KeepFrom(offset int) {\n\trl.toKeep = offset\n}\n\nfunc (rl *reassemblyObject) CaptureInfo(offset int) gopacket.CaptureInfo {\n\tif offset < 0 {\n\t\treturn gopacket.CaptureInfo{}\n\t}\n\n\tcurrent := 0\n\tfor _, r := range rl.all {\n\t\tif current+r.length() > offset {\n\t\t\treturn r.captureInfo()\n\t\t}\n\t\tcurrent += r.length()\n\t}\n\t// Invalid offset\n\treturn gopacket.CaptureInfo{}\n}\n\nfunc (rl *reassemblyObject) Info() (TCPFlowDirection, bool, bool, int) {\n\treturn rl.Direction, rl.all[0].isStart(), rl.all[len(rl.all)-1].isEnd(), rl.Skip\n}\n\nfunc (rl *reassemblyObject) Stats() TCPAssemblyStats {\n\tpackets := int(0)\n\tfor _, r := range rl.all {\n\t\tif r.isPacket() {\n\t\t\tpackets++\n\t\t}\n\t}\n\treturn TCPAssemblyStats{\n\t\tChunks:         len(rl.all),\n\t\tPackets:        packets,\n\t\tQueuedBytes:    rl.queuedBytes,\n\t\tQueuedPackets:  rl.queuedPackets,\n\t\tOverlapBytes:   rl.overlapBytes,\n\t\tOverlapPackets: rl.overlapPackets,\n\t}\n}\n\nconst pageBytes = 1900\n\n// TCPFlowDirection distinguish the two half-connections directions.\n//\n// TCPDirClientToServer is assigned to half-connection for the first received\n// packet, hence might be wrong if packets are not received in order.\n// It's up to the caller (e.g. in Accept()) to decide if the direction should\n// be interpretted differently.\ntype TCPFlowDirection bool\n\n// Value are not really useful\nconst (\n\tTCPDirClientToServer TCPFlowDirection = false\n\tTCPDirServerToClient TCPFlowDirection = true\n)\n\nfunc (dir TCPFlowDirection) String() string {\n\tswitch dir {\n\tcase TCPDirClientToServer:\n\t\treturn \"client->server\"\n\tcase TCPDirServerToClient:\n\t\treturn \"server->client\"\n\t}\n\treturn \"\"\n}\n\n// Reverse returns the reversed direction\nfunc (dir TCPFlowDirection) Reverse() TCPFlowDirection {\n\treturn !dir\n}\n\n/* page: implements a byteContainer */\n\n// page is used to store TCP data we're not ready for yet (out-of-order\n// packets).  Unused pages are stored in and returned from a pageCache, which\n// avoids memory allocation.  Used pages are stored in a doubly-linked list in\n// a connection.\ntype page struct {\n\tbytes      []byte\n\tseq        Sequence\n\tprev, next *page\n\tbuf        [pageBytes]byte\n\tac         AssemblerContext // only set for the first page of a packet\n\tseen       time.Time\n\tstart, end bool\n}\n\nfunc (p *page) getBytes() []byte {\n\treturn p.bytes\n}\nfunc (p *page) captureInfo() gopacket.CaptureInfo {\n\treturn p.ac.GetCaptureInfo()\n}\nfunc (p *page) assemblerContext() AssemblerContext {\n\treturn p.ac\n}\nfunc (p *page) convertToPages(pc *pageCache, skip int, ac AssemblerContext) (*page, *page, int) {\n\tif skip != 0 {\n\t\tp.bytes = p.bytes[skip:]\n\t\tp.seq = p.seq.Add(skip)\n\t}\n\tp.prev, p.next = nil, nil\n\treturn p, p, 1\n}\nfunc (p *page) length() int {\n\treturn len(p.bytes)\n}\nfunc (p *page) release(pc *pageCache) int {\n\tpc.replace(p)\n\treturn 1\n}\nfunc (p *page) isStart() bool {\n\treturn p.start\n}\nfunc (p *page) isEnd() bool {\n\treturn p.end\n}\nfunc (p *page) getSeq() Sequence {\n\treturn p.seq\n}\nfunc (p *page) isPacket() bool {\n\treturn p.ac != nil\n}\nfunc (p *page) String() string {\n\treturn fmt.Sprintf(\"page@%p{seq: %v, bytes:%d, -> nextSeq:%v} (prev:%p, next:%p)\", p, p.seq, len(p.bytes), p.seq+Sequence(len(p.bytes)), p.prev, p.next)\n}\n\n/* livePacket: implements a byteContainer */\ntype livePacket struct {\n\tbytes []byte\n\tstart bool\n\tend   bool\n\tac    AssemblerContext\n\tseq   Sequence\n}\n\nfunc (lp *livePacket) getBytes() []byte {\n\treturn lp.bytes\n}\nfunc (lp *livePacket) captureInfo() gopacket.CaptureInfo {\n\treturn lp.ac.GetCaptureInfo()\n}\nfunc (lp *livePacket) assemblerContext() AssemblerContext {\n\treturn lp.ac\n}\nfunc (lp *livePacket) length() int {\n\treturn len(lp.bytes)\n}\nfunc (lp *livePacket) isStart() bool {\n\treturn lp.start\n}\nfunc (lp *livePacket) isEnd() bool {\n\treturn lp.end\n}\nfunc (lp *livePacket) getSeq() Sequence {\n\treturn lp.seq\n}\nfunc (lp *livePacket) isPacket() bool {\n\treturn true\n}\n\n// Creates a page (or set of pages) from a TCP packet: returns the first and last\n// page in its doubly-linked list of new pages.\nfunc (lp *livePacket) convertToPages(pc *pageCache, skip int, ac AssemblerContext) (*page, *page, int) {\n\tts := lp.captureInfo().Timestamp\n\tfirst := pc.next(ts)\n\tcurrent := first\n\tcurrent.prev = nil\n\tfirst.ac = ac\n\tnumPages := 1\n\tseq, bytes := lp.seq.Add(skip), lp.bytes[skip:]\n\tfor {\n\t\tlength := min(len(bytes), pageBytes)\n\t\tcurrent.bytes = current.buf[:length]\n\t\tcopy(current.bytes, bytes)\n\t\tcurrent.seq = seq\n\t\tbytes = bytes[length:]\n\t\tif len(bytes) == 0 {\n\t\t\tcurrent.end = lp.isEnd()\n\t\t\tcurrent.next = nil\n\t\t\tbreak\n\t\t}\n\t\tseq = seq.Add(length)\n\t\tcurrent.next = pc.next(ts)\n\t\tcurrent.next.prev = current\n\t\tcurrent = current.next\n\t\tcurrent.ac = nil\n\t\tnumPages++\n\t}\n\treturn first, current, numPages\n}\nfunc (lp *livePacket) estimateNumberOfPages() int {\n\treturn (len(lp.bytes) + pageBytes + 1) / pageBytes\n}\n\nfunc (lp *livePacket) release(*pageCache) int {\n\treturn 0\n}\n\n// Stream is implemented by the caller to handle incoming reassembled\n// TCP data.  Callers create a StreamFactory, then StreamPool uses\n// it to create a new Stream for every TCP stream.\n//\n// assembly will, in order:\n//    1) Create the stream via StreamFactory.New\n//    2) Call ReassembledSG 0 or more times, passing in reassembled TCP data in order\n//    3) Call ReassemblyComplete one time, after which the stream is dereferenced by assembly.\ntype Stream interface {\n\t// Tell whether the TCP packet should be accepted, start could be modified to force a start even if no SYN have been seen\n\tAccept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, nextSeq Sequence, start *bool, ac AssemblerContext) bool\n\n\t// ReassembledSG is called zero or more times.\n\t// ScatterGather is reused after each Reassembled call,\n\t// so it's important to copy anything you need out of it,\n\t// especially bytes (or use KeepFrom())\n\tReassembledSG(sg ScatterGather, ac AssemblerContext)\n\n\t// ReassemblyComplete is called when assembly decides there is\n\t// no more data for this Stream, either because a FIN or RST packet\n\t// was seen, or because the stream has timed out without any new\n\t// packet data (due to a call to FlushCloseOlderThan).\n\t// It should return true if the connection should be removed from the pool\n\t// It can return false if it want to see subsequent packets with Accept(), e.g. to\n\t// see FIN-ACK, for deeper state-machine analysis.\n\tReassemblyComplete(ac AssemblerContext) bool\n}\n\n// StreamFactory is used by assembly to create a new stream for each\n// new TCP session.\ntype StreamFactory interface {\n\t// New should return a new stream for the given TCP key.\n\tNew(netFlow, tcpFlow gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream\n}\n\ntype key [2]gopacket.Flow\n\nfunc (k *key) String() string {\n\treturn fmt.Sprintf(\"%s:%s\", k[0], k[1])\n}\n\nfunc (k *key) Reverse() key {\n\treturn key{\n\t\tk[0].Reverse(),\n\t\tk[1].Reverse(),\n\t}\n}\n\nconst assemblerReturnValueInitialSize = 16\n\n/* one-way connection, i.e. halfconnection */\ntype halfconnection struct {\n\tdir               TCPFlowDirection\n\tpages             int      // Number of pages used (both in first/last and saved)\n\tsaved             *page    // Doubly-linked list of in-order pages (seq < nextSeq) already given to Stream who told us to keep\n\tfirst, last       *page    // Doubly-linked list of out-of-order pages (seq > nextSeq)\n\tnextSeq           Sequence // sequence number of in-order received bytes\n\tackSeq            Sequence\n\tcreated, lastSeen time.Time\n\tstream            Stream\n\tclosed            bool\n\t// for stats\n\tqueuedBytes    int\n\tqueuedPackets  int\n\toverlapBytes   int\n\toverlapPackets int\n}\n\nfunc (half *halfconnection) String() string {\n\tclosed := \"\"\n\tif half.closed {\n\t\tclosed = \"closed \"\n\t}\n\treturn fmt.Sprintf(\"%screated:%v, last:%v\", closed, half.created, half.lastSeen)\n}\n\n// Dump returns a string (crypticly) describing the halfconnction\nfunc (half *halfconnection) Dump() string {\n\ts := fmt.Sprintf(\"pages: %d\\n\"+\n\t\t\"nextSeq: %d\\n\"+\n\t\t\"ackSeq: %d\\n\"+\n\t\t\"Seen :  %s\\n\"+\n\t\t\"dir:    %s\\n\", half.pages, half.nextSeq, half.ackSeq, half.lastSeen, half.dir)\n\tnb := 0\n\tfor p := half.first; p != nil; p = p.next {\n\t\ts += fmt.Sprintf(\"\tPage[%d] %s len: %d\\n\", nb, p, len(p.bytes))\n\t\tnb++\n\t}\n\treturn s\n}\n\n/* Bi-directionnal connection */\n\ntype connection struct {\n\tkey      key // client->server\n\tc2s, s2c halfconnection\n\tmu       sync.Mutex\n}\n\nfunc (c *connection) reset(k key, s Stream, ts time.Time) {\n\tc.key = k\n\tbase := halfconnection{\n\t\tnextSeq:  invalidSequence,\n\t\tackSeq:   invalidSequence,\n\t\tcreated:  ts,\n\t\tlastSeen: ts,\n\t\tstream:   s,\n\t}\n\tc.c2s, c.s2c = base, base\n\tc.c2s.dir, c.s2c.dir = TCPDirClientToServer, TCPDirServerToClient\n}\n\nfunc (c *connection) lastSeen() time.Time {\n\tif c.c2s.lastSeen.Before(c.s2c.lastSeen) {\n\t\treturn c.s2c.lastSeen\n\t}\n\n\treturn c.c2s.lastSeen\n}\n\nfunc (c *connection) String() string {\n\treturn fmt.Sprintf(\"c2s: %s, s2c: %s\", &c.c2s, &c.s2c)\n}\n\n/*\n * Assembler\n */\n\n// DefaultAssemblerOptions provides default options for an assembler.\n// These options are used by default when calling NewAssembler, so if\n// modified before a NewAssembler call they'll affect the resulting Assembler.\n//\n// Note that the default options can result in ever-increasing memory usage\n// unless one of the Flush* methods is called on a regular basis.\nvar DefaultAssemblerOptions = AssemblerOptions{\n\tMaxBufferedPagesPerConnection: 0, // unlimited\n\tMaxBufferedPagesTotal:         0, // unlimited\n}\n\n// AssemblerOptions controls the behavior of each assembler.  Modify the\n// options of each assembler you create to change their behavior.\ntype AssemblerOptions struct {\n\t// MaxBufferedPagesTotal is an upper limit on the total number of pages to\n\t// buffer while waiting for out-of-order packets.  Once this limit is\n\t// reached, the assembler will degrade to flushing every connection it\n\t// gets a packet for.  If <= 0, this is ignored.\n\tMaxBufferedPagesTotal int\n\t// MaxBufferedPagesPerConnection is an upper limit on the number of pages\n\t// buffered for a single connection.  Should this limit be reached for a\n\t// particular connection, the smallest sequence number will be flushed, along\n\t// with any contiguous data.  If <= 0, this is ignored.\n\tMaxBufferedPagesPerConnection int\n}\n\n// Assembler handles reassembling TCP streams.  It is not safe for\n// concurrency... after passing a packet in via the Assemble call, the caller\n// must wait for that call to return before calling Assemble again.  Callers can\n// get around this by creating multiple assemblers that share a StreamPool.  In\n// that case, each individual stream will still be handled serially (each stream\n// has an individual mutex associated with it), however multiple assemblers can\n// assemble different connections concurrently.\n//\n// The Assembler provides (hopefully) fast TCP stream re-assembly for sniffing\n// applications written in Go.  The Assembler uses the following methods to be\n// as fast as possible, to keep packet processing speedy:\n//\n// Avoids Lock Contention\n//\n// Assemblers locks connections, but each connection has an individual lock, and\n// rarely will two Assemblers be looking at the same connection.  Assemblers\n// lock the StreamPool when looking up connections, but they use Reader\n// locks initially, and only force a write lock if they need to create a new\n// connection or close one down.  These happen much less frequently than\n// individual packet handling.\n//\n// Each assembler runs in its own goroutine, and the only state shared between\n// goroutines is through the StreamPool.  Thus all internal Assembler state\n// can be handled without any locking.\n//\n// NOTE:  If you can guarantee that packets going to a set of Assemblers will\n// contain information on different connections per Assembler (for example,\n// they're already hashed by PF_RING hashing or some other hashing mechanism),\n// then we recommend you use a seperate StreamPool per Assembler, thus\n// avoiding all lock contention.  Only when different Assemblers could receive\n// packets for the same Stream should a StreamPool be shared between them.\n//\n// Avoids Memory Copying\n//\n// In the common case, handling of a single TCP packet should result in zero\n// memory allocations.  The Assembler will look up the connection, figure out\n// that the packet has arrived in order, and immediately pass that packet on to\n// the appropriate connection's handling code.  Only if a packet arrives out of\n// order is its contents copied and stored in memory for later.\n//\n// Avoids Memory Allocation\n//\n// Assemblers try very hard to not use memory allocation unless absolutely\n// necessary.  Packet data for sequential packets is passed directly to streams\n// with no copying or allocation.  Packet data for out-of-order packets is\n// copied into reusable pages, and new pages are only allocated rarely when the\n// page cache runs out.  Page caches are Assembler-specific, thus not used\n// concurrently and requiring no locking.\n//\n// Internal representations for connection objects are also reused over time.\n// Because of this, the most common memory allocation done by the Assembler is\n// generally what's done by the caller in StreamFactory.New.  If no allocation\n// is done there, then very little allocation is done ever, mostly to handle\n// large increases in bandwidth or numbers of connections.\n//\n// TODO:  The page caches used by an Assembler will grow to the size necessary\n// to handle a workload, and currently will never shrink.  This means that\n// traffic spikes can result in large memory usage which isn't garbage\n// collected when typical traffic levels return.\ntype Assembler struct {\n\tAssemblerOptions\n\tret      []byteContainer\n\tpc       *pageCache\n\tconnPool *StreamPool\n\tcacheLP  livePacket\n\tcacheSG  reassemblyObject\n\tstart    bool\n}\n\n// NewAssembler creates a new assembler.  Pass in the StreamPool\n// to use, may be shared across assemblers.\n//\n// This sets some sane defaults for the assembler options,\n// see DefaultAssemblerOptions for details.\nfunc NewAssembler(pool *StreamPool) *Assembler {\n\tpool.mu.Lock()\n\tpool.users++\n\tpool.mu.Unlock()\n\treturn &Assembler{\n\t\tret:              make([]byteContainer, 0, assemblerReturnValueInitialSize),\n\t\tpc:               newPageCache(),\n\t\tconnPool:         pool,\n\t\tAssemblerOptions: DefaultAssemblerOptions,\n\t}\n}\n\n// Dump returns a short string describing the page usage of the Assembler\nfunc (a *Assembler) Dump() string {\n\ts := \"\"\n\ts += fmt.Sprintf(\"pageCache: used: %d:\", a.pc.used)\n\treturn s\n}\n\n// AssemblerContext provides method to get metadata\ntype AssemblerContext interface {\n\tGetCaptureInfo() gopacket.CaptureInfo\n}\n\n// Implements AssemblerContext for Assemble()\ntype assemblerSimpleContext gopacket.CaptureInfo\n\nfunc (asc *assemblerSimpleContext) GetCaptureInfo() gopacket.CaptureInfo {\n\treturn gopacket.CaptureInfo(*asc)\n}\n\n// Assemble calls AssembleWithContext with the current timestamp, useful for\n// packets being read directly off the wire.\nfunc (a *Assembler) Assemble(netFlow gopacket.Flow, t *layers.TCP) {\n\tctx := assemblerSimpleContext(gopacket.CaptureInfo{Timestamp: time.Now()})\n\ta.AssembleWithContext(netFlow, t, &ctx)\n}\n\ntype assemblerAction struct {\n\tnextSeq Sequence\n\tqueue   bool\n}\n\n// AssembleWithContext reassembles the given TCP packet into its appropriate\n// stream.\n//\n// The timestamp passed in must be the timestamp the packet was seen.\n// For packets read off the wire, time.Now() should be fine.  For packets read\n// from PCAP files, CaptureInfo.Timestamp should be passed in.  This timestamp\n// will affect which streams are flushed by a call to FlushCloseOlderThan.\n//\n// Each AssembleWithContext call results in, in order:\n//\n//    zero or one call to StreamFactory.New, creating a stream\n//    zero or one call to ReassembledSG on a single stream\n//    zero or one call to ReassemblyComplete on the same stream\nfunc (a *Assembler) AssembleWithContext(netFlow gopacket.Flow, t *layers.TCP, ac AssemblerContext) {\n\tvar conn *connection\n\tvar half *halfconnection\n\tvar rev *halfconnection\n\n\ta.ret = a.ret[:0]\n\tkey := key{netFlow, t.TransportFlow()}\n\tci := ac.GetCaptureInfo()\n\ttimestamp := ci.Timestamp\n\n\tconn, half, rev = a.connPool.getConnection(key, false, timestamp, t, ac)\n\tif conn == nil {\n\t\tif *debugLog {\n\t\t\tlog.Printf(\"%v got empty packet on otherwise empty connection\", key)\n\t\t}\n\t\treturn\n\t}\n\tconn.mu.Lock()\n\tdefer conn.mu.Unlock()\n\tif half.lastSeen.Before(timestamp) {\n\t\thalf.lastSeen = timestamp\n\t}\n\ta.start = half.nextSeq == invalidSequence && t.SYN\n\tif *debugLog {\n\t\tif half.nextSeq < rev.ackSeq {\n\t\t\tlog.Printf(\"Delay detected on %v, data is acked but not assembled yet (acked %v, nextSeq %v)\", key, rev.ackSeq, half.nextSeq)\n\t\t}\n\t}\n\n\tif !half.stream.Accept(t, ci, half.dir, half.nextSeq, &a.start, ac) {\n\t\tif *debugLog {\n\t\t\tlog.Printf(\"Ignoring packet\")\n\t\t}\n\t\treturn\n\t}\n\tif half.closed {\n\t\t// this way is closed\n\t\tif *debugLog {\n\t\t\tlog.Printf(\"%v got packet on closed half\", key)\n\t\t}\n\t\treturn\n\t}\n\n\tseq, ack, bytes := Sequence(t.Seq), Sequence(t.Ack), t.Payload\n\tif t.ACK {\n\t\thalf.ackSeq = ack\n\t}\n\t// TODO: push when Ack is seen ??\n\taction := assemblerAction{\n\t\tnextSeq: Sequence(invalidSequence),\n\t\tqueue:   true,\n\t}\n\ta.dump(\"AssembleWithContext()\", half)\n\tif half.nextSeq == invalidSequence {\n\t\tif t.SYN {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"%v saw first SYN packet, returning immediately, seq=%v\", key, seq)\n\t\t\t}\n\t\t\tseq = seq.Add(1)\n\t\t\thalf.nextSeq = seq\n\t\t\taction.queue = false\n\t\t} else if a.start {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"%v start forced\", key)\n\t\t\t}\n\t\t\thalf.nextSeq = seq\n\t\t\taction.queue = false\n\t\t} else {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"%v waiting for start, storing into connection\", key)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tdiff := half.nextSeq.Difference(seq)\n\t\tif diff > 0 {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"%v gap in sequence numbers (%v, %v) diff %v, storing into connection\", key, half.nextSeq, seq, diff)\n\t\t\t}\n\t\t} else {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"%v found contiguous data (%v, %v), returning immediately: len:%d\", key, seq, half.nextSeq, len(bytes))\n\t\t\t}\n\t\t\taction.queue = false\n\t\t}\n\t}\n\n\taction = a.handleBytes(bytes, seq, half, t.SYN, t.RST || t.FIN, action, ac)\n\tif len(a.ret) > 0 {\n\t\taction.nextSeq = a.sendToConnection(conn, half, ac)\n\t}\n\tif action.nextSeq != invalidSequence {\n\t\thalf.nextSeq = action.nextSeq\n\t\tif t.FIN {\n\t\t\thalf.nextSeq = half.nextSeq.Add(1)\n\t\t}\n\t}\n\tif *debugLog {\n\t\tlog.Printf(\"%v nextSeq:%d\", key, half.nextSeq)\n\t}\n}\n\n// Overlap strategies:\n//  - new packet overlaps with sent packets:\n//\t1) discard new overlapping part\n//\t2) overwrite old overlapped (TODO)\n//  - new packet overlaps existing queued packets:\n//\ta) consider \"age\" by timestamp (TODO)\n//\tb) consider \"age\" by being present\n//\tThen\n//      1) discard new overlapping part\n//      2) overwrite queued part\n\nfunc (a *Assembler) checkOverlap(half *halfconnection, queue bool, ac AssemblerContext) {\n\tvar next *page\n\tcur := half.last\n\tbytes := a.cacheLP.bytes\n\tstart := a.cacheLP.seq\n\tend := start.Add(len(bytes))\n\n\ta.dump(\"before checkOverlap\", half)\n\n\t//          [s6           :           e6]\n\t//   [s1:e1][s2:e2] -- [s3:e3] -- [s4:e4][s5:e5]\n\t//             [s <--ds-- : --de--> e]\n\tfor cur != nil {\n\n\t\tif *debugLog {\n\t\t\tlog.Printf(\"cur = %p (%s)\\n\", cur, cur)\n\t\t}\n\n\t\t// end < cur.start: continue (5)\n\t\tif end.Difference(cur.seq) > 0 {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"case 5\\n\")\n\t\t\t}\n\t\t\tnext = cur\n\t\t\tcur = cur.prev\n\t\t\tcontinue\n\t\t}\n\n\t\tcurEnd := cur.seq.Add(len(cur.bytes))\n\t\t// start > cur.end: stop (1)\n\t\tif start.Difference(curEnd) <= 0 {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"case 1\\n\")\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\tdiffStart := start.Difference(cur.seq)\n\t\tdiffEnd := end.Difference(curEnd)\n\n\t\t// end > cur.end && start < cur.start: drop (3)\n\t\tif diffEnd <= 0 && diffStart >= 0 {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"case 3\\n\")\n\t\t\t}\n\t\t\tif cur.isPacket() {\n\t\t\t\thalf.overlapPackets++\n\t\t\t}\n\t\t\thalf.overlapBytes += len(cur.bytes)\n\t\t\t// update links\n\t\t\tif cur.prev != nil {\n\t\t\t\tcur.prev.next = cur.next\n\t\t\t} else {\n\t\t\t\thalf.first = cur.next\n\t\t\t}\n\t\t\tif cur.next != nil {\n\t\t\t\tcur.next.prev = cur.prev\n\t\t\t} else {\n\t\t\t\thalf.last = cur.prev\n\t\t\t}\n\t\t\ttmp := cur.prev\n\t\t\thalf.pages -= cur.release(a.pc)\n\t\t\tcur = tmp\n\t\t\tcontinue\n\t\t}\n\n\t\t// end > cur.end && start < cur.end: drop cur's end (2)\n\t\tif diffEnd < 0 && start.Difference(curEnd) > 0 {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"case 2\\n\")\n\t\t\t}\n\t\t\tcur.bytes = cur.bytes[:-start.Difference(cur.seq)]\n\t\t\tbreak\n\t\t} else\n\n\t\t// start < cur.start && end > cur.start: drop cur's start (4)\n\t\tif diffStart > 0 && end.Difference(cur.seq) < 0 {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"case 4\\n\")\n\t\t\t}\n\t\t\tcur.bytes = cur.bytes[-end.Difference(cur.seq):]\n\t\t\tcur.seq = cur.seq.Add(-end.Difference(cur.seq))\n\t\t\tnext = cur\n\t\t} else\n\n\t\t// end < cur.end && start > cur.start: replace bytes inside cur (6)\n\t\tif diffEnd >= 0 && diffStart <= 0 {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"case 6\\n\")\n\t\t\t}\n\t\t\tcopy(cur.bytes[-diffStart:-diffStart+len(bytes)], bytes)\n\t\t\tbytes = bytes[:0]\n\t\t} else {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"no overlap\\n\")\n\t\t\t}\n\t\t\tnext = cur\n\t\t}\n\t\tcur = cur.prev\n\t}\n\n\t// Split bytes into pages, and insert in queue\n\ta.cacheLP.bytes = bytes\n\ta.cacheLP.seq = start\n\tif len(bytes) > 0 && queue {\n\t\tp, p2, numPages := a.cacheLP.convertToPages(a.pc, 0, ac)\n\t\thalf.queuedPackets++\n\t\thalf.queuedBytes += len(bytes)\n\t\thalf.pages += numPages\n\t\tif cur != nil {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"adding %s after %s\", p, cur)\n\t\t\t}\n\t\t\tcur.next = p\n\t\t\tp.prev = cur\n\t\t} else {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"adding %s as first\", p)\n\t\t\t}\n\t\t\thalf.first = p\n\t\t}\n\t\tif next != nil {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"setting %s as next of new %s\", next, p2)\n\t\t\t}\n\t\t\tp2.next = next\n\t\t\tnext.prev = p2\n\t\t} else {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"setting %s as last\", p2)\n\t\t\t}\n\t\t\thalf.last = p2\n\t\t}\n\t}\n\ta.dump(\"After checkOverlap\", half)\n}\n\n// Warning: this is a low-level dumper, i.e. a.ret or a.cacheSG might\n// be strange, but it could be ok.\nfunc (a *Assembler) dump(text string, half *halfconnection) {\n\tif !*debugLog {\n\t\treturn\n\t}\n\tlog.Printf(\"%s: dump\\n\", text)\n\tif half != nil {\n\t\tp := half.first\n\t\tif p == nil {\n\t\t\tlog.Printf(\" * half.first = %p, no chunks queued\\n\", p)\n\t\t} else {\n\t\t\ts := 0\n\t\t\tnb := 0\n\t\t\tlog.Printf(\" * half.first = %p, queued chunks:\", p)\n\t\t\tfor p != nil {\n\t\t\t\tlog.Printf(\"\\t%s bytes:%s\\n\", p, hex.EncodeToString(p.bytes))\n\t\t\t\ts += len(p.bytes)\n\t\t\t\tnb++\n\t\t\t\tp = p.next\n\t\t\t}\n\t\t\tlog.Printf(\"\\t%d chunks for %d bytes\", nb, s)\n\t\t}\n\t\tlog.Printf(\" * half.last = %p\\n\", half.last)\n\t\tlog.Printf(\" * half.saved = %p\\n\", half.saved)\n\t\tp = half.saved\n\t\tfor p != nil {\n\t\t\tlog.Printf(\"\\tseq:%d %s bytes:%s\\n\", p.getSeq(), p, hex.EncodeToString(p.bytes))\n\t\t\tp = p.next\n\t\t}\n\t}\n\tlog.Printf(\" * a.ret\\n\")\n\tfor i, r := range a.ret {\n\t\tlog.Printf(\"\\t%d: %v b:%s\\n\", i, r.captureInfo(), hex.EncodeToString(r.getBytes()))\n\t}\n\tlog.Printf(\" * a.cacheSG.all\\n\")\n\tfor i, r := range a.cacheSG.all {\n\t\tlog.Printf(\"\\t%d: %v b:%s\\n\", i, r.captureInfo(), hex.EncodeToString(r.getBytes()))\n\t}\n}\n\nfunc (a *Assembler) overlapExisting(half *halfconnection, start, end Sequence, bytes []byte) ([]byte, Sequence) {\n\tif half.nextSeq == invalidSequence {\n\t\t// no start yet\n\t\treturn bytes, start\n\t}\n\tdiff := start.Difference(half.nextSeq)\n\tif diff == 0 {\n\t\treturn bytes, start\n\t}\n\ts := 0\n\te := len(bytes)\n\t// TODO: depending on strategy, we might want to shrink half.saved if possible\n\tif e != 0 {\n\t\tif *debugLog {\n\t\t\tlog.Printf(\"Overlap detected: ignoring current packet's first %d bytes\", diff)\n\t\t}\n\t\thalf.overlapPackets++\n\t\thalf.overlapBytes += diff\n\t}\n\ts += diff\n\tif s >= e {\n\t\t// Completely included in sent\n\t\ts = e\n\t}\n\tbytes = bytes[s:]\n\treturn bytes, half.nextSeq\n}\n\n// Prepare send or queue\nfunc (a *Assembler) handleBytes(bytes []byte, seq Sequence, half *halfconnection, start bool, end bool, action assemblerAction, ac AssemblerContext) assemblerAction {\n\ta.cacheLP.bytes = bytes\n\ta.cacheLP.start = start\n\ta.cacheLP.end = end\n\ta.cacheLP.seq = seq\n\ta.cacheLP.ac = ac\n\n\tif action.queue {\n\t\ta.checkOverlap(half, true, ac)\n\t\tif (a.MaxBufferedPagesPerConnection > 0 && half.pages >= a.MaxBufferedPagesPerConnection) ||\n\t\t\t(a.MaxBufferedPagesTotal > 0 && a.pc.used >= a.MaxBufferedPagesTotal) {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"hit max buffer size: %+v, %v, %v\", a.AssemblerOptions, half.pages, a.pc.used)\n\t\t\t}\n\t\t\taction.queue = false\n\t\t\ta.addNextFromConn(half)\n\t\t}\n\t\ta.dump(\"handleBytes after queue\", half)\n\t} else {\n\t\ta.cacheLP.bytes, a.cacheLP.seq = a.overlapExisting(half, seq, seq.Add(len(bytes)), a.cacheLP.bytes)\n\t\ta.checkOverlap(half, false, ac)\n\t\tif len(a.cacheLP.bytes) != 0 || end || start {\n\t\t\ta.ret = append(a.ret, &a.cacheLP)\n\t\t}\n\t\ta.dump(\"handleBytes after no queue\", half)\n\t}\n\treturn action\n}\n\nfunc (a *Assembler) setStatsToSG(half *halfconnection) {\n\ta.cacheSG.queuedBytes = half.queuedBytes\n\thalf.queuedBytes = 0\n\ta.cacheSG.queuedPackets = half.queuedPackets\n\thalf.queuedPackets = 0\n\ta.cacheSG.overlapBytes = half.overlapBytes\n\thalf.overlapBytes = 0\n\ta.cacheSG.overlapPackets = half.overlapPackets\n\thalf.overlapPackets = 0\n}\n\n// Build the ScatterGather object, i.e. prepend saved bytes and\n// append continuous bytes.\nfunc (a *Assembler) buildSG(half *halfconnection) (bool, Sequence) {\n\t// find if there are skipped bytes\n\tskip := -1\n\tif half.nextSeq != invalidSequence {\n\t\tskip = half.nextSeq.Difference(a.ret[0].getSeq())\n\t}\n\tlast := a.ret[0].getSeq().Add(a.ret[0].length())\n\t// Prepend saved bytes\n\tsaved := a.addPending(half, a.ret[0].getSeq())\n\t// Append continuous bytes\n\tnextSeq := a.addContiguous(half, last)\n\ta.cacheSG.all = a.ret\n\ta.cacheSG.Direction = half.dir\n\ta.cacheSG.Skip = skip\n\ta.cacheSG.saved = saved\n\ta.cacheSG.toKeep = -1\n\ta.setStatsToSG(half)\n\ta.dump(\"after buildSG\", half)\n\treturn a.ret[len(a.ret)-1].isEnd(), nextSeq\n}\n\nfunc (a *Assembler) cleanSG(half *halfconnection, ac AssemblerContext) {\n\tcur := 0\n\tndx := 0\n\tskip := 0\n\n\ta.dump(\"cleanSG(start)\", half)\n\n\tvar r byteContainer\n\t// Find first page to keep\n\tif a.cacheSG.toKeep < 0 {\n\t\tndx = len(a.cacheSG.all)\n\t} else {\n\t\tskip = a.cacheSG.toKeep\n\t\tfound := false\n\t\tfor ndx, r = range a.cacheSG.all {\n\t\t\tif a.cacheSG.toKeep < cur+r.length() {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcur += r.length()\n\t\t\tif skip >= r.length() {\n\t\t\t\tskip -= r.length()\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tndx++\n\t\t}\n\t}\n\t// Release consumed pages\n\tfor _, r := range a.cacheSG.all[:ndx] {\n\t\tif r == half.saved {\n\t\t\tif half.saved.next != nil {\n\t\t\t\thalf.saved.next.prev = nil\n\t\t\t}\n\t\t\thalf.saved = half.saved.next\n\t\t} else if r == half.first {\n\t\t\tif half.first.next != nil {\n\t\t\t\thalf.first.next.prev = nil\n\t\t\t}\n\t\t\tif half.first == half.last {\n\t\t\t\thalf.first, half.last = nil, nil\n\t\t\t} else {\n\t\t\t\thalf.first = half.first.next\n\t\t\t}\n\t\t}\n\t\thalf.pages -= r.release(a.pc)\n\t}\n\ta.dump(\"after consumed release\", half)\n\t// Keep un-consumed pages\n\tnbKept := 0\n\thalf.saved = nil\n\tvar saved *page\n\tfor _, r := range a.cacheSG.all[ndx:] {\n\t\tpreConvertLen := r.length()\n\t\tfirst, last, nb := r.convertToPages(a.pc, skip, ac)\n\n\t\t// Update skip count as we move from one container to the next.\n\t\tif delta := preConvertLen - r.length(); delta > skip {\n\t\t\tskip = 0\n\t\t} else {\n\t\t\tskip -= delta\n\t\t}\n\n\t\tif half.saved == nil {\n\t\t\thalf.saved = first\n\t\t} else {\n\t\t\tsaved.next = first\n\t\t\tfirst.prev = saved\n\t\t}\n\t\tsaved = last\n\t\tnbKept += nb\n\t}\n\tif *debugLog {\n\t\tlog.Printf(\"Remaining %d chunks in SG\\n\", nbKept)\n\t\tlog.Printf(\"%s\\n\", a.Dump())\n\t\ta.dump(\"after cleanSG()\", half)\n\t}\n}\n\n// sendToConnection sends the current values in a.ret to the connection, closing\n// the connection if the last thing sent had End set.\nfunc (a *Assembler) sendToConnection(conn *connection, half *halfconnection, ac AssemblerContext) Sequence {\n\tif *debugLog {\n\t\tlog.Printf(\"sendToConnection\\n\")\n\t}\n\tend, nextSeq := a.buildSG(half)\n\thalf.stream.ReassembledSG(&a.cacheSG, ac)\n\ta.cleanSG(half, ac)\n\tif end {\n\t\ta.closeHalfConnection(conn, half)\n\t}\n\tif *debugLog {\n\t\tlog.Printf(\"after sendToConnection: nextSeq: %d\\n\", nextSeq)\n\t}\n\treturn nextSeq\n}\n\n//\nfunc (a *Assembler) addPending(half *halfconnection, firstSeq Sequence) int {\n\tif half.saved == nil {\n\t\treturn 0\n\t}\n\ts := 0\n\tret := []byteContainer{}\n\tfor p := half.saved; p != nil; p = p.next {\n\t\tif *debugLog {\n\t\t\tlog.Printf(\"adding pending @%p %s (%s)\\n\", p, p, hex.EncodeToString(p.bytes))\n\t\t}\n\t\tret = append(ret, p)\n\t\ts += len(p.bytes)\n\t}\n\tif half.saved.seq.Add(s) != firstSeq {\n\t\t// non-continuous saved: drop them\n\t\tvar next *page\n\t\tfor p := half.saved; p != nil; p = next {\n\t\t\tnext = p.next\n\t\t\tp.release(a.pc)\n\t\t}\n\t\thalf.saved = nil\n\t\tret = []byteContainer{}\n\t\ts = 0\n\t}\n\n\ta.ret = append(ret, a.ret...)\n\treturn s\n}\n\n// addContiguous adds contiguous byte-sets to a connection.\nfunc (a *Assembler) addContiguous(half *halfconnection, lastSeq Sequence) Sequence {\n\tpage := half.first\n\tif page == nil {\n\t\tif *debugLog {\n\t\t\tlog.Printf(\"addContiguous(%d): no pages\\n\", lastSeq)\n\t\t}\n\t\treturn lastSeq\n\t}\n\tif lastSeq == invalidSequence {\n\t\tlastSeq = page.seq\n\t}\n\tfor page != nil && lastSeq.Difference(page.seq) == 0 {\n\t\tif *debugLog {\n\t\t\tlog.Printf(\"addContiguous: lastSeq: %d, first.seq=%d, page.seq=%d\\n\", half.nextSeq, half.first.seq, page.seq)\n\t\t}\n\t\tlastSeq = lastSeq.Add(len(page.bytes))\n\t\ta.ret = append(a.ret, page)\n\t\thalf.first = page.next\n\t\tif half.first == nil {\n\t\t\thalf.last = nil\n\t\t}\n\t\tif page.next != nil {\n\t\t\tpage.next.prev = nil\n\t\t}\n\t\tpage = page.next\n\t}\n\treturn lastSeq\n}\n\n// skipFlush skips the first set of bytes we're waiting for and returns the\n// first set of bytes we have.  If we have no bytes saved, it closes the\n// connection.\nfunc (a *Assembler) skipFlush(conn *connection, half *halfconnection) {\n\tif *debugLog {\n\t\tlog.Printf(\"skipFlush %v\\n\", half.nextSeq)\n\t}\n\t// Well, it's embarassing it there is still something in half.saved\n\t// FIXME: change API to give back saved + new/no packets\n\tif half.first == nil {\n\t\ta.closeHalfConnection(conn, half)\n\t\treturn\n\t}\n\ta.ret = a.ret[:0]\n\ta.addNextFromConn(half)\n\tnextSeq := a.sendToConnection(conn, half, a.ret[0].assemblerContext())\n\tif nextSeq != invalidSequence {\n\t\thalf.nextSeq = nextSeq\n\t}\n}\n\nfunc (a *Assembler) closeHalfConnection(conn *connection, half *halfconnection) {\n\tif *debugLog {\n\t\tlog.Printf(\"%v closing\", conn)\n\t}\n\thalf.closed = true\n\tfor p := half.first; p != nil; p = p.next {\n\t\t// FIXME: it should be already empty\n\t\ta.pc.replace(p)\n\t\thalf.pages--\n\t}\n\tif conn.s2c.closed && conn.c2s.closed {\n\t\tif half.stream.ReassemblyComplete(nil) { //FIXME: which context to pass ?\n\t\t\ta.connPool.remove(conn)\n\t\t}\n\t}\n}\n\n// addNextFromConn pops the first page from a connection off and adds it to the\n// return array.\nfunc (a *Assembler) addNextFromConn(conn *halfconnection) {\n\tif conn.first == nil {\n\t\treturn\n\t}\n\tif *debugLog {\n\t\tlog.Printf(\"   adding from conn (%v, %v) %v (%d)\\n\", conn.first.seq, conn.nextSeq, conn.nextSeq-conn.first.seq, len(conn.first.bytes))\n\t}\n\ta.ret = append(a.ret, conn.first)\n\tconn.first = conn.first.next\n\tif conn.first != nil {\n\t\tconn.first.prev = nil\n\t} else {\n\t\tconn.last = nil\n\t}\n}\n\n// FlushOptions provide options for flushing connections.\ntype FlushOptions struct {\n\tT  time.Time // If nonzero, only connections with data older than T are flushed\n\tTC time.Time // If nonzero, only connections with data older than TC are closed (if no FIN/RST received)\n}\n\n// FlushWithOptions finds any streams waiting for packets older than\n// the given time T, and pushes through the data they have (IE: tells\n// them to stop waiting and skip the data they're waiting for).\n//\n// It also closes streams older than TC (that can be set to zero, to keep\n// long-lived stream alive, but to flush data anyway).\n//\n// Each Stream maintains a list of zero or more sets of bytes it has received\n// out-of-order.  For example, if it has processed up through sequence number\n// 10, it might have bytes [15-20), [20-25), [30,50) in its list.  Each set of\n// bytes also has the timestamp it was originally viewed.  A flush call will\n// look at the smallest subsequent set of bytes, in this case [15-20), and if\n// its timestamp is older than the passed-in time, it will push it and all\n// contiguous byte-sets out to the Stream's Reassembled function.  In this case,\n// it will push [15-20), but also [20-25), since that's contiguous.  It will\n// only push [30-50) if its timestamp is also older than the passed-in time,\n// otherwise it will wait until the next FlushCloseOlderThan to see if bytes\n// [25-30) come in.\n//\n// Returns the number of connections flushed, and of those, the number closed\n// because of the flush.\nfunc (a *Assembler) FlushWithOptions(opt FlushOptions) (flushed, closed int) {\n\tconns := a.connPool.connections()\n\tcloses := 0\n\tflushes := 0\n\tfor _, conn := range conns {\n\t\tremove := false\n\t\tconn.mu.Lock()\n\t\tfor _, half := range []*halfconnection{&conn.s2c, &conn.c2s} {\n\t\t\tflushed, closed := a.flushClose(conn, half, opt.T, opt.TC)\n\t\t\tif flushed {\n\t\t\t\tflushes++\n\t\t\t}\n\t\t\tif closed {\n\t\t\t\tcloses++\n\t\t\t}\n\t\t}\n\t\tif conn.s2c.closed && conn.c2s.closed && conn.s2c.lastSeen.Before(opt.TC) && conn.c2s.lastSeen.Before(opt.TC) {\n\t\t\tremove = true\n\t\t}\n\t\tconn.mu.Unlock()\n\t\tif remove {\n\t\t\ta.connPool.remove(conn)\n\t\t}\n\t}\n\treturn flushes, closes\n}\n\n// FlushCloseOlderThan flushes and closes streams older than given time\nfunc (a *Assembler) FlushCloseOlderThan(t time.Time) (flushed, closed int) {\n\treturn a.FlushWithOptions(FlushOptions{T: t, TC: t})\n}\n\nfunc (a *Assembler) flushClose(conn *connection, half *halfconnection, t time.Time, tc time.Time) (bool, bool) {\n\tflushed, closed := false, false\n\tif half.closed {\n\t\treturn flushed, closed\n\t}\n\tfor half.first != nil && half.first.seen.Before(t) {\n\t\tflushed = true\n\t\ta.skipFlush(conn, half)\n\t\tif half.closed {\n\t\t\tclosed = true\n\t\t\treturn flushed, closed\n\t\t}\n\t}\n\t// Close the connection only if both halfs of the connection last seen before tc.\n\tif !half.closed && half.first == nil && conn.lastSeen().Before(tc) {\n\t\ta.closeHalfConnection(conn, half)\n\t\tclosed = true\n\t}\n\treturn flushed, closed\n}\n\n// FlushAll flushes all remaining data into all remaining connections and closes\n// those connections. It returns the total number of connections flushed/closed\n// by the call.\nfunc (a *Assembler) FlushAll() (closed int) {\n\tconns := a.connPool.connections()\n\tclosed = len(conns)\n\tfor _, conn := range conns {\n\t\tconn.mu.Lock()\n\t\tfor _, half := range []*halfconnection{&conn.s2c, &conn.c2s} {\n\t\t\tfor !half.closed {\n\t\t\t\ta.skipFlush(conn, half)\n\t\t\t}\n\t\t\tif !half.closed {\n\t\t\t\ta.closeHalfConnection(conn, half)\n\t\t\t}\n\t\t}\n\t\tconn.mu.Unlock()\n\t}\n\treturn\n}\n\nfunc min(a, b int) int {\n\tif a < b {\n\t\treturn a\n\t}\n\treturn b\n}\n"
  },
  {
    "path": "reassembly/tcpassembly_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage reassembly\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"net\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\nvar netFlow gopacket.Flow\n\nvar testDebug = false\n\nfunc init() {\n\tnetFlow, _ = gopacket.FlowFromEndpoints(\n\t\tlayers.NewIPEndpoint(net.IP{1, 2, 3, 4}),\n\t\tlayers.NewIPEndpoint(net.IP{5, 6, 7, 8}))\n}\n\ntype Reassembly struct {\n\tBytes []byte\n\tStart bool\n\tEnd   bool\n\tSkip  int\n}\n\ntype testSequence struct {\n\tin   layers.TCP\n\twant []Reassembly\n}\n\n/* For benchmark: do nothing */\ntype testFactoryBench struct {\n}\n\nfunc (t *testFactoryBench) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {\n\treturn t\n}\nfunc (t *testFactoryBench) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {\n\treturn true\n}\nfunc (t *testFactoryBench) ReassembledSG(sg ScatterGather, ac AssemblerContext) {\n}\nfunc (t *testFactoryBench) ReassemblyComplete(ac AssemblerContext) bool {\n\treturn true\n}\n\n/* For tests: append bytes */\ntype testFactory struct {\n\treassembly []Reassembly\n}\n\nfunc (t *testFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {\n\treturn t\n}\nfunc (t *testFactory) Reassembled(r []Reassembly) {\n\tt.reassembly = r\n\tfor i := 0; i < len(r); i++ {\n\t\t//t.reassembly[i].Seen = time.Time{}\n\t}\n}\nfunc (t *testFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) {\n\t_, start, end, skip := sg.Info()\n\tl, _ := sg.Lengths()\n\tt.reassembly = append(t.reassembly, Reassembly{\n\t\tBytes: sg.Fetch(l),\n\t\tSkip:  skip,\n\t\tStart: start,\n\t\tEnd:   end,\n\t})\n}\n\nfunc (t *testFactory) ReassemblyComplete(ac AssemblerContext) bool {\n\treturn true\n}\n\nfunc (t *testFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {\n\treturn true\n}\n\n/* For memory checks: counts bytes */\ntype testMemoryFactory struct {\n\tbytes int\n}\n\nfunc (tf *testMemoryFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {\n\treturn tf\n}\nfunc (tf *testMemoryFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {\n\treturn true\n}\nfunc (tf *testMemoryFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) {\n\tbytes, _ := sg.Lengths()\n\ttf.bytes += bytes\n}\nfunc (tf *testMemoryFactory) ReassemblyComplete(ac AssemblerContext) bool {\n\treturn true\n}\n\n/*\n * Tests\n */\n\nfunc test(t *testing.T, s []testSequence) {\n\tfact := &testFactory{}\n\tp := NewStreamPool(fact)\n\ta := NewAssembler(p)\n\ta.MaxBufferedPagesPerConnection = 4\n\tfor i, test := range s {\n\t\tfact.reassembly = []Reassembly{}\n\t\tif testDebug {\n\t\t\tfmt.Printf(\"#### test: #%d: sending:%s\\n\", i, hex.EncodeToString(test.in.BaseLayer.Payload))\n\t\t}\n\t\ttest.in.SetInternalPortsForTesting()\n\t\ta.Assemble(netFlow, &test.in)\n\t\tfinal := []Reassembly{}\n\t\tif len(test.want) > 0 {\n\t\t\tfinal = append(final, Reassembly{})\n\t\t\tfor _, w := range test.want {\n\t\t\t\tfinal[0].Bytes = append(final[0].Bytes, w.Bytes...)\n\t\t\t\tif w.End {\n\t\t\t\t\tfinal[0].End = true\n\t\t\t\t}\n\t\t\t\tif w.Start {\n\t\t\t\t\tfinal[0].Start = true\n\t\t\t\t}\n\t\t\t\tif w.Skip != 0 {\n\t\t\t\t\tfinal[0].Skip = w.Skip\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif !reflect.DeepEqual(fact.reassembly, final) {\n\t\t\tt.Fatalf(\"test %v:\\nwant: %v\\n got: %v\\n\", i, final, fact.reassembly)\n\t\t}\n\t\tif testDebug {\n\t\t\tfmt.Printf(\"test %v passing...(%v)\\n\", i, final)\n\t\t}\n\t}\n}\n\nfunc TestReorder(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1001,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1004,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{4, 5, 6}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1010,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{10, 11, 12}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tSkip:  -1,\n\t\t\t\t\tBytes: []byte{1, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{4, 5, 6},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{7, 8, 9},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{10, 11, 12},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1016,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1019,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1013,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{1, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{2, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{3, 2, 3},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestMaxPerSkip(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1000,\n\t\t\t\tSYN:       true,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1010,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{4, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1013,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{5, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1016,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{6, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tSkip:  3,\n\t\t\t\t\tBytes: []byte{3, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{4, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{5, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{6, 2, 3},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestReorderFast(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1004,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{2, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{3, 2, 3},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestOverlap(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1010,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{6, 7},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestBufferedOverlap1(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1010,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{6, 7},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestBufferedOverlapCase6(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 10, 11, 12, 13, 14}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{11, 12, 13, 14, 5},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestBufferedOverlapExisting(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1000,\n\t\t\t\tSYN:       true,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5, 6, 7},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1005,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{5, 6, 7, 8, 9, 10}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{8, 9, 10},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestBufferedOverlapReemit(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1000,\n\t\t\t\tSYN:       true,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5, 6, 7},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1003,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{3, 4, 5}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t})\n}\n\nfunc TestReorderRetransmission2(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1001,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1010,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{10, 11}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1004,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{6, 6, 6, 2, 2}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tSkip:  -1,\n\t\t\t\t\tBytes: []byte{1, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{6, 6, 6},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{2, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{10, 11},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestOverrun1(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       0xFFFFFFFF,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       10,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestOverrun2(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       10,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       0xFFFFFFFF,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestCacheLargePacket(t *testing.T) {\n\tdata := make([]byte, pageBytes*3)\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1001,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: data},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1000,\n\t\t\t\tSYN:       true,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: data[:pageBytes],\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: data[pageBytes : pageBytes*2],\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: data[pageBytes*2 : pageBytes*3],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc testFlush(t *testing.T, s []testSequence, delay time.Duration, flushInterval time.Duration) {\n\tfact := &testFactory{}\n\tp := NewStreamPool(fact)\n\ta := NewAssembler(p)\n\ta.MaxBufferedPagesPerConnection = 10\n\tport := layers.TCPPort(0)\n\n\tsimTime := time.Unix(0, 0)\n\n\tfor i, test := range s {\n\t\tfact.reassembly = []Reassembly{}\n\t\tif testDebug {\n\t\t\tfmt.Printf(\"#### test: #%d: sending:%s\\n\", i, hex.EncodeToString(test.in.BaseLayer.Payload))\n\t\t}\n\n\t\tflow := netFlow\n\t\tif port == 0 {\n\t\t\tport = test.in.SrcPort\n\t\t}\n\t\tif port != test.in.SrcPort {\n\t\t\tflow = flow.Reverse()\n\t\t}\n\t\ttest.in.SetInternalPortsForTesting()\n\t\tctx := assemblerSimpleContext(gopacket.CaptureInfo{Timestamp: simTime})\n\t\ta.AssembleWithContext(flow, &test.in, &ctx)\n\t\tsimTime = simTime.Add(delay)\n\t\ta.FlushCloseOlderThan(simTime.Add(-1 * flushInterval))\n\n\t\tfinal := []Reassembly{}\n\t\tif len(test.want) > 0 {\n\t\t\tfinal = append(final, Reassembly{})\n\t\t\tfor _, w := range test.want {\n\t\t\t\tfinal[0].Bytes = append(final[0].Bytes, w.Bytes...)\n\t\t\t\tif w.End {\n\t\t\t\t\tfinal[0].End = true\n\t\t\t\t}\n\t\t\t\tif w.Start {\n\t\t\t\t\tfinal[0].Start = true\n\t\t\t\t}\n\t\t\t\tif w.Skip != 0 {\n\t\t\t\t\tfinal[0].Skip = w.Skip\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif !reflect.DeepEqual(fact.reassembly, final) {\n\t\t\tt.Errorf(\"test %v:\\nwant: %v\\n got: %v\\n\", i, final, fact.reassembly)\n\t\t}\n\n\t\tif testDebug {\n\t\t\tfmt.Printf(\"test %v passing...(%v)\\n\", i, final)\n\t\t}\n\t}\n}\n\nfunc TestFlush(t *testing.T) {\n\tfor _, test := range []struct {\n\t\tseq                   []testSequence\n\t\tdelay, flushOlderThan time.Duration\n\t}{\n\t\t{\n\t\t\tseq: []testSequence{\n\t\t\t\t{\n\t\t\t\t\tin: layers.TCP{\n\t\t\t\t\t\tSrcPort:   1,\n\t\t\t\t\t\tDstPort:   2,\n\t\t\t\t\t\tSeq:       1001,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t\t\t},\n\t\t\t\t\twant: []Reassembly{\n\t\t\t\t\t\t// flushed after flush interval.\n\t\t\t\t\t\tReassembly{\n\t\t\t\t\t\t\tSkip:  -1,\n\t\t\t\t\t\t\tBytes: []byte{1, 2, 3},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tin: layers.TCP{\n\t\t\t\t\t\tSrcPort:   1,\n\t\t\t\t\t\tDstPort:   2,\n\t\t\t\t\t\tSeq:       1010,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{4, 5, 6, 7}},\n\t\t\t\t\t},\n\t\t\t\t\twant: []Reassembly{\n\t\t\t\t\t\t// flushed after flush interval.\n\t\t\t\t\t\tReassembly{\n\t\t\t\t\t\t\tSkip:  -1,\n\t\t\t\t\t\t\tBytes: []byte{4, 5, 6, 7},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdelay:          time.Millisecond * 50,\n\t\t\tflushOlderThan: time.Millisecond * 40,\n\t\t},\n\t\t{\n\t\t\t// two way stream.\n\t\t\tseq: []testSequence{\n\t\t\t\t{\n\t\t\t\t\tin: layers.TCP{\n\t\t\t\t\t\tSrcPort:   1,\n\t\t\t\t\t\tDstPort:   2,\n\t\t\t\t\t\tSeq:       1001,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t\t\t},\n\t\t\t\t\twant: []Reassembly{},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tin: layers.TCP{\n\t\t\t\t\t\tSrcPort:   2,\n\t\t\t\t\t\tDstPort:   1,\n\t\t\t\t\t\tSeq:       890,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{11, 22, 33}},\n\t\t\t\t\t},\n\t\t\t\t\twant: []Reassembly{\n\t\t\t\t\t\t// First half is flushed after flush interval.\n\t\t\t\t\t\tReassembly{\n\t\t\t\t\t\t\tSkip:  -1,\n\t\t\t\t\t\t\tBytes: []byte{1, 2, 3},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tin: layers.TCP{\n\t\t\t\t\t\tSrcPort:   2,\n\t\t\t\t\t\tDstPort:   1,\n\t\t\t\t\t\tSeq:       893,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{44, 55, 66, 77}},\n\t\t\t\t\t},\n\t\t\t\t\twant: []Reassembly{\n\t\t\t\t\t\t// continues data is flushed.\n\t\t\t\t\t\tReassembly{\n\t\t\t\t\t\t\tSkip:  -1,\n\t\t\t\t\t\t\tBytes: []byte{11, 22, 33, 44, 55, 66, 77},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tin: layers.TCP{\n\t\t\t\t\t\tSrcPort:   1,\n\t\t\t\t\t\tDstPort:   2,\n\t\t\t\t\t\tSeq:       1004,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{8, 9}},\n\t\t\t\t\t},\n\t\t\t\t\twant: []Reassembly{\n\t\t\t\t\t\tReassembly{\n\t\t\t\t\t\t\t// Should be flushed because is continues.\n\t\t\t\t\t\t\tBytes: []byte{8, 9},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdelay:          time.Millisecond * 50,\n\t\t\tflushOlderThan: time.Millisecond * 99,\n\t\t},\n\t\t// a late RST packet\n\t\t{\n\t\t\tseq: []testSequence{\n\t\t\t\t{\n\t\t\t\t\tin: layers.TCP{\n\t\t\t\t\t\tSrcPort:   1,\n\t\t\t\t\t\tDstPort:   2,\n\t\t\t\t\t\tSeq:       1005,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{5, 6, 7}},\n\t\t\t\t\t},\n\t\t\t\t\t// gets queued\n\t\t\t\t\twant: []Reassembly{},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tin: layers.TCP{\n\t\t\t\t\t\tSrcPort:   1,\n\t\t\t\t\t\tDstPort:   2,\n\t\t\t\t\t\tRST:       true,\n\t\t\t\t\t\tSeq:       1001,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t\t\t},\n\t\t\t\t\t// gets queued just before the first packet\n\t\t\t\t\t// and should close its half-connection (RST) during next flush\n\t\t\t\t\twant: []Reassembly{},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t// triggers flush/close\n\t\t\t\t\tin: layers.TCP{\n\t\t\t\t\t\tSrcPort:   1,\n\t\t\t\t\t\tDstPort:   2,\n\t\t\t\t\t\tSeq:       1010,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{10, 11, 12}},\n\t\t\t\t\t},\n\t\t\t\t\twant: []Reassembly{\n\t\t\t\t\t\tReassembly{\n\t\t\t\t\t\t\tSkip:  -1,\n\t\t\t\t\t\t\tEnd:   true,\n\t\t\t\t\t\t\tBytes: []byte{1, 2, 3},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdelay:          time.Millisecond * 40,\n\t\t\tflushOlderThan: time.Millisecond * 50,\n\t\t},\n\t} {\n\t\ttestFlush(t, test.seq, test.delay, test.flushOlderThan)\n\t}\n}\n\n/*\n * Keep\n */\ntype testKeepFactory struct {\n\tkeep    int\n\tbytes   []byte\n\tskipped int\n\tt       *testing.T\n}\n\nfunc (tkf *testKeepFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {\n\treturn tkf\n}\nfunc (tkf *testKeepFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) {\n\tl, _ := sg.Lengths()\n\t_, _, _, tkf.skipped = sg.Info()\n\ttkf.bytes = sg.Fetch(l)\n\tsg.KeepFrom(tkf.keep)\n}\nfunc (tkf *testKeepFactory) ReassemblyComplete(ac AssemblerContext) bool {\n\treturn true\n}\n\nfunc (tkf *testKeepFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {\n\treturn true\n}\n\ntype testKeepSequence struct {\n\ttcp     layers.TCP\n\tkeep    int\n\twant    []byte\n\tskipped int\n\tflush   bool\n}\n\nfunc testKeep(t *testing.T, s []testKeepSequence) {\n\tfact := &testKeepFactory{t: t}\n\tp := NewStreamPool(fact)\n\ta := NewAssembler(p)\n\ta.MaxBufferedPagesPerConnection = 4\n\tport := layers.TCPPort(0)\n\tfor i, test := range s {\n\t\t// Fake some values according to ports\n\t\tflow := netFlow\n\t\tdir := TCPDirClientToServer\n\t\tif port == 0 {\n\t\t\tport = test.tcp.SrcPort\n\t\t}\n\t\tif port != test.tcp.SrcPort {\n\t\t\tdir = dir.Reverse()\n\t\t\tflow = flow.Reverse()\n\t\t}\n\t\ttest.tcp.SetInternalPortsForTesting()\n\t\tfact.keep = test.keep\n\t\tfact.bytes = []byte{}\n\t\tif testDebug {\n\t\t\tfmt.Printf(\"#### testKeep: #%d: sending:%s\\n\", i, hex.EncodeToString(test.tcp.BaseLayer.Payload))\n\t\t}\n\t\ta.Assemble(flow, &test.tcp)\n\t\tif !reflect.DeepEqual(fact.bytes, test.want) {\n\t\t\tt.Fatalf(\"#%d: invalid bytes: got %v, expected %v\", i, fact.bytes, test.want)\n\t\t}\n\t\tif fact.skipped != test.skipped {\n\t\t\tt.Fatalf(\"#%d: expecting %d skipped bytes, got %d\", i, test.skipped, fact.skipped)\n\t\t}\n\t\tif testDebug {\n\t\t\tfmt.Printf(\"#### testKeep: #%d: bytes: %s\\n\", i, hex.EncodeToString(fact.bytes))\n\t\t}\n\n\t\tif test.flush {\n\t\t\ta.FlushAll()\n\t\t}\n\t}\n}\n\nfunc TestKeepSimpleOnBoundary(t *testing.T) {\n\ttestKeep(t, []testKeepSequence{\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t\t\t},\n\t\t\tkeep: 0,\n\t\t\twant: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},\n\t\t\t},\n\t\t\twant: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5},\n\t\t},\n\t})\n}\n\nfunc TestKeepSimpleNotBoundaryLive(t *testing.T) {\n\ttestKeep(t, []testKeepSequence{\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t\t\t},\n\t\t\tkeep: 1,\n\t\t\twant: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},\n\t\t\t},\n\t\t\twant: []byte{2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5},\n\t\t},\n\t})\n}\n\nfunc TestKeepSimpleNotBoundaryAlreadyKept(t *testing.T) {\n\ttestKeep(t, []testKeepSequence{\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0x10}},\n\t\t\t},\n\t\t\tkeep: 0, // 1→10\n\t\t\twant: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0x10},\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15}},\n\t\t\t},\n\t\t\tkeep: 11, // 12→15\n\t\t\twant: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15},\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1016,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{0x16, 0x17, 0x18}},\n\t\t\t},\n\t\t\twant: []byte{0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18},\n\t\t},\n\t})\n}\n\nfunc TestKeepLonger(t *testing.T) {\n\ttestKeep(t, []testKeepSequence{\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}},\n\t\t\t},\n\t\t\tkeep: 0,\n\t\t\twant: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 10, 11, 12, 13, 14, 15}},\n\t\t\t},\n\t\t\tkeep: 0,\n\t\t\twant: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1010,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{10, 11, 12, 13, 14, 15, 16, 17}},\n\t\t\t},\n\t\t\twant: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17},\n\t\t},\n\t})\n}\n\nfunc TestKeepWithFlush(t *testing.T) {\n\ttestKeep(t, []testKeepSequence{\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1}},\n\t\t\t},\n\t\t\tkeep: 1,\n\t\t\twant: []byte{1},\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1003,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{3}},\n\t\t\t},\n\t\t\tkeep: 0,\n\t\t\twant: []byte{},\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1004,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{4}},\n\t\t\t},\n\t\t\tkeep: 0,\n\t\t\twant: []byte{},\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1006,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{6}},\n\t\t\t},\n\t\t\tkeep: 0,\n\t\t\twant: []byte{},\n\t\t},\n\t\t// Exceeding 4 pages: flushing first continuous pages\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1008,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{8}},\n\t\t\t},\n\t\t\tkeep:    0,\n\t\t\tskipped: 1,\n\t\t\twant:    []byte{3, 4},\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1010,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{10}},\n\t\t\t},\n\t\t\tkeep:    0,\n\t\t\tskipped: 1,\n\t\t\twant:    []byte{6},\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1012,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{12}},\n\t\t\t},\n\t\t\tkeep:    0,\n\t\t\tskipped: 1,\n\t\t\twant:    []byte{8},\n\t\t},\n\t})\n}\n\nfunc TestKeepWithOutOfOrderPacketAndManualFlush(t *testing.T) {\n\tmakePayload := func(length int) []byte {\n\t\tdata := make([]byte, length)\n\t\trand.Read(data)\n\t\treturn data\n\t}\n\n\t// The first packet is received out of order. It contains `pageBytes + 1`\n\t// number of bytes, so it spans 2 pages.\n\t// The second packet carries a single byte before the first packet, and we\n\t// request to keep `pageBytes` bytes. Then trigger a flush.\n\t// Prior to a fix, this would result in an slice bounds out of range panic\n\t// when the code tries to incorrectly skip the leading bytes on the second\n\t// page of the first packet.\n\ttestKeep(t, []testKeepSequence{\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1001,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: makePayload(pageBytes + 1)},\n\t\t\t},\n\t\t\twant: []byte{},\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1}},\n\t\t\t},\n\t\t\tkeep:  pageBytes,\n\t\t\twant:  []byte{},\n\t\t\tflush: true,\n\t\t},\n\t})\n}\n\n/*\n * FSM tests\n */\n/* For FSM: bump nb on accepted packet */\ntype testFSMFactory struct {\n\tnb  int\n\tfsm TCPSimpleFSM\n}\n\nfunc (t *testFSMFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {\n\treturn t\n}\nfunc (t *testFSMFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) {\n}\nfunc (t *testFSMFactory) ReassemblyComplete(ac AssemblerContext) bool {\n\treturn false\n}\n\nfunc (t *testFSMFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {\n\tok := t.fsm.CheckState(tcp, dir)\n\tif ok {\n\t\tt.nb++\n\t}\n\treturn ok\n}\n\ntype testFSMSequence struct {\n\ttcp layers.TCP\n\tci  gopacket.CaptureInfo\n\tnb  int\n}\n\nfunc (seq *testFSMSequence) GetCaptureInfo() gopacket.CaptureInfo {\n\treturn seq.ci\n}\n\nfunc testFSM(t *testing.T, s []testFSMSequence) {\n\tfact := &testFSMFactory{}\n\tp := NewStreamPool(fact)\n\ta := NewAssembler(p)\n\t//a.MaxBufferedPagesPerConnection = 4\n\tfact.nb = 0\n\tport := layers.TCPPort(0)\n\tfor i, test := range s {\n\t\t// Fake some values according to ports\n\t\tflow := netFlow\n\t\tdir := TCPDirClientToServer\n\t\tif port == 0 {\n\t\t\tport = test.tcp.SrcPort\n\t\t}\n\t\tif port != test.tcp.SrcPort {\n\t\t\tdir = dir.Reverse()\n\t\t\tflow = flow.Reverse()\n\t\t}\n\t\ttest.tcp.SetInternalPortsForTesting()\n\t\ta.AssembleWithContext(flow, &test.tcp, &test)\n\t\tif fact.nb != test.nb {\n\t\t\tt.Fatalf(\"#%d: packet rejected: got %d, expected %d\", i, fact.nb, test.nb)\n\t\t}\n\t}\n}\n\nfunc TestFSMnormalFlow(t *testing.T) {\n\ttestFSM(t, []testFSMSequence{\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSYN:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511116,\n\t\t\t\tAck:       0,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 566690000),\n\t\t\t},\n\t\t\tnb: 1,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSYN:       true,\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   53,\n\t\t\t\tDstPort:   54842,\n\t\t\t\tSeq:       3465787765,\n\t\t\t\tAck:       374511117,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590332000),\n\t\t\t},\n\t\t\tnb: 2,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511117,\n\t\t\t\tAck:       3465787766,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590346000),\n\t\t\t},\n\t\t\tnb: 3,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511117,\n\t\t\t\tAck:       3465787766,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590387000),\n\t\t\t},\n\t\t\tnb: 4,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   53,\n\t\t\t\tDstPort:   54842,\n\t\t\t\tSeq:       3465787766,\n\t\t\t\tAck:       374511150,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 613687000),\n\t\t\t},\n\t\t\tnb: 5,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   53,\n\t\t\t\tDstPort:   54842,\n\t\t\t\tSeq:       3465787766,\n\t\t\t\tAck:       374511150,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{8, 133, 104, 196, 132, 0, 0, 1, 0, 2, 0, 7, 0, 19, 2, 85, 83, 0, 0, 6, 0, 1, 2, 117, 115, 0, 0, 6, 0, 1, 0, 0, 3, 132, 0, 54, 1, 97, 5, 99, 99, 116, 108, 100, 192, 20, 10, 104, 111, 115, 116, 109, 97, 115, 116, 101, 114, 7, 110, 101, 117, 115, 116, 97, 114, 3, 98, 105, 122, 0, 120, 18, 40, 205, 0, 0, 3, 132, 0, 0, 3, 132, 0, 9, 58, 128, 0, 1, 81, 128, 192, 20, 0, 46, 0, 1, 0, 0, 3, 132, 0, 150, 0, 6, 5, 1, 0, 0, 3, 132, 85, 138, 90, 146, 85, 98, 191, 130, 27, 78, 2, 117, 115, 0, 69, 13, 35, 189, 141, 225, 107, 238, 108, 182, 207, 44, 105, 31, 212, 103, 32, 93, 217, 108, 20, 231, 188, 28, 241, 237, 104, 182, 117, 121, 195, 112, 64, 96, 237, 248, 6, 181, 186, 96, 60, 6, 18, 29, 188, 96, 201, 140, 251, 61, 71, 177, 108, 156, 9, 83, 125, 172, 188, 75, 81, 67, 218, 55, 93, 131, 243, 15, 190, 75, 4, 165, 226, 124, 49, 67, 142, 131, 239, 240, 76, 225, 10, 242, 68, 88, 240, 200, 27, 97, 102, 73, 92, 73, 133, 170, 175, 198, 99, 109, 90, 16, 162, 101, 95, 96, 102, 250, 91, 74, 80, 3, 87, 167, 50, 230, 9, 213, 7, 222, 197, 87, 183, 190, 148, 247, 207, 204, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 10, 1, 102, 5, 99, 99, 116, 108, 100, 192, 12, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 97, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 98, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 99, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 101, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 107, 193, 8, 192, 118, 0, 46, 0, 1, 0, 7, 233, 0, 0, 150, 0, 2, 5, 1, 0, 7, 233, 0, 85, 127, 33, 92, 85, 87, 134, 98, 27, 78, 2, 117, 115, 0, 19, 227, 175, 75, 88, 245, 164, 158, 150, 198, 57, 253, 150, 179, 161, 52, 24, 56, 229, 176, 175, 40, 45, 232, 188, 171, 131, 197, 107, 125, 218, 192, 78, 221, 146, 33, 114, 55, 43, 12, 131, 213, 51, 98, 37, 2, 102, 161, 232, 115, 177, 210, 51, 169, 215, 133, 56, 190, 91, 75, 8, 222, 231, 202, 139, 28, 187, 249, 72, 21, 23, 56, 63, 72, 126, 142, 242, 195, 242, 64, 208, 134, 100, 157, 197, 159, 43, 148, 20, 70, 117, 152, 159, 35, 200, 220, 49, 234, 173, 210, 91, 34, 210, 192, 7, 197, 112, 117, 208, 234, 42, 49, 133, 237, 197, 14, 244, 149, 191, 142, 36, 252, 42, 48, 182, 189, 9, 68, 1, 65, 5, 67, 67, 84, 76, 68, 193, 126, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 124, 70, 1, 66, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 125, 70, 194, 26, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 209, 174, 255, 255, 255, 255, 255, 255, 255, 255, 255, 126, 1, 67, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 127, 70, 1, 69, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 126, 70, 1, 70, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 209, 173, 58, 70, 194, 108, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 0, 54, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 1, 75, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 128, 70, 194, 154, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 226, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 194, 2, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 230, 49, 85, 73, 83, 2, 27, 78, 2, 117, 115, 0, 82, 36, 11, 141, 74, 85, 70, 98, 179, 63, 173, 83, 8, 70, 155, 41, 102, 166, 140, 62, 71, 178, 130, 38, 171, 200, 180, 68, 2, 215, 45, 6, 43, 59, 171, 146, 223, 215, 9, 77, 5, 104, 167, 42, 237, 170, 30, 114, 205, 129, 59, 225, 152, 224, 79, 1, 65, 68, 208, 153, 121, 237, 199, 87, 2, 251, 100, 105, 59, 24, 73, 226, 169, 121, 250, 91, 41, 124, 14, 23, 135, 52, 2, 86, 72, 224, 100, 135, 70, 216, 16, 107, 84, 59, 13, 168, 58, 187, 54, 98, 230, 167, 246, 42, 46, 156, 206, 238, 120, 199, 25, 144, 98, 249, 70, 162, 34, 43, 145, 114, 186, 233, 47, 42, 75, 95, 152, 235, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 160, 95, 100, 37, 167, 82, 93, 165, 126, 247, 147, 173, 238, 154, 206, 174, 96, 175, 209, 7, 8, 169, 171, 223, 29, 201, 161, 177, 98, 54, 94, 62, 70, 127, 142, 109, 206, 42, 179, 109, 156, 160, 156, 20, 59, 24, 147, 164, 13, 121, 192, 84, 157, 26, 56, 177, 151, 210, 7, 197, 229, 110, 60, 58, 224, 42, 77, 5, 59, 80, 216, 221, 248, 19, 66, 102, 74, 199, 238, 120, 231, 201, 187, 29, 11, 46, 195, 164, 8, 221, 128, 25, 205, 42, 247, 152, 112, 176, 14, 117, 150, 223, 245, 32, 212, 107, 4, 245, 27, 126, 224, 216, 0, 89, 106, 238, 185, 206, 44, 56, 204, 175, 7, 139, 233, 228, 127, 175, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 108, 217, 174, 85, 69, 70, 242, 27, 78, 2, 117, 115, 0, 172, 117, 89, 89, 73, 249, 245, 211, 100, 127, 48, 135, 224, 97, 172, 146, 128, 30, 190, 72, 199, 170, 97, 179, 136, 109, 86, 110, 235, 214, 47, 50, 115, 11, 226, 168, 56, 198, 24, 212, 205, 207, 2, 116, 104, 112, 99, 234, 236, 44, 70, 19, 19, 215, 127, 200, 162, 215, 142, 45, 135, 91, 219, 217, 86, 231, 154, 87, 222, 161, 32, 66, 196, 55, 117, 20, 186, 9, 134, 252, 249, 219, 9, 196, 128, 8, 222, 201, 131, 210, 182, 232, 142, 72, 160, 171, 95, 231, 232, 156, 28, 34, 54, 94, 73, 183, 38, 160, 123, 175, 157, 21, 163, 8, 214, 155, 172, 237, 169, 28, 15, 138, 105, 107, 251, 109, 131, 240, 194, 72, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 77, 207, 197, 130, 236, 138, 192, 241, 225, 114, 8, 22, 76, 54, 43, 121, 42, 44, 9, 92, 56, 253, 224, 179, 191, 131, 40, 176, 94, 61, 33, 12, 43, 82, 156, 236, 211, 29, 187, 100, 220, 243, 24, 134, 42, 204, 46, 161, 214, 91, 68, 119, 40, 252, 53, 54, 146, 136, 196, 168, 204, 195, 131, 110, 6, 73, 16, 161, 86, 35, 150, 153, 162, 185, 227, 65, 228, 160, 203, 42, 250, 121, 14, 42, 115, 221, 232, 96, 99, 164, 230, 29, 195, 149, 85, 206, 41, 1, 252, 77, 188, 88, 8, 182, 37, 249, 6, 158, 6, 244, 158, 254, 141, 203, 6, 158, 198, 103, 130, 98, 123, 34, 245, 44, 126, 77, 24, 187, 194, 90, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 108, 194, 203, 85, 69, 51, 125, 27, 78, 2, 117, 115, 0, 86, 26, 187, 56, 252, 194, 199, 140, 229, 133, 186, 187, 20, 174, 26, 48, 212, 129, 10, 20, 167, 179, 53, 72, 176, 92, 153, 48, 146, 15, 163, 182, 80, 138, 181, 135, 98, 129, 17, 66, 55, 184, 76, 225, 72, 104, 7, 221, 40, 71, 41, 202, 246, 154, 166, 199, 74, 175, 146, 54, 25, 56, 115, 243}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 621198000),\n\t\t\t},\n\t\t\tnb: 6,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511150,\n\t\t\t\tAck:       3465789226,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 621220000),\n\t\t\t},\n\t\t\tnb: 7,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   53,\n\t\t\t\tDstPort:   54842,\n\t\t\t\tSeq:       3465789226,\n\t\t\t\tAck:       374511150,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{153, 141, 101, 187, 110, 15, 63, 42, 81, 100, 95, 68, 241, 85, 160, 227, 3, 1, 12, 80, 166, 1, 98, 2, 44, 98, 63, 203, 70, 164, 99, 195, 23, 152, 223, 253, 208, 10, 12, 19, 66, 121, 9, 158, 205, 96, 218, 0, 80, 70, 58, 95, 41, 124, 216, 13, 122, 135, 102, 200, 181, 233, 129, 174, 194, 108, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 108, 223, 157, 85, 69, 74, 55, 27, 78, 2, 117, 115, 0, 149, 71, 215, 149, 16, 165, 115, 229, 141, 136, 187, 158, 88, 225, 131, 231, 182, 218, 235, 27, 48, 65, 244, 77, 186, 135, 72, 18, 87, 52, 180, 128, 130, 67, 75, 173, 160, 243, 104, 178, 103, 117, 96, 209, 36, 51, 108, 47, 232, 214, 254, 15, 208, 182, 218, 174, 248, 237, 88, 150, 35, 190, 239, 249, 171, 151, 9, 236, 2, 252, 255, 13, 79, 190, 147, 36, 161, 210, 202, 80, 209, 136, 167, 180, 186, 68, 246, 249, 48, 123, 46, 11, 132, 103, 132, 207, 186, 68, 110, 133, 142, 109, 194, 19, 122, 57, 203, 217, 120, 93, 67, 168, 91, 252, 87, 38, 33, 228, 229, 162, 190, 170, 23, 188, 89, 15, 241, 71, 194, 108, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 108, 217, 174, 85, 69, 70, 242, 27, 78, 2, 117, 115, 0, 206, 97, 120, 37, 255, 252, 7, 156, 162, 192, 43, 84, 105, 94, 125, 55, 13, 247, 234, 9, 25, 100, 246, 25, 77, 168, 199, 208, 187, 209, 164, 123, 234, 138, 238, 15, 86, 45, 163, 108, 162, 117, 247, 128, 3, 187, 100, 185, 193, 191, 134, 86, 161, 254, 236, 99, 66, 66, 35, 173, 91, 243, 175, 3, 175, 94, 79, 68, 246, 109, 200, 154, 209, 185, 11, 210, 50, 147, 136, 213, 158, 81, 111, 17, 149, 239, 110, 114, 25, 234, 247, 158, 233, 33, 36, 181, 66, 84, 189, 37, 207, 58, 9, 171, 143, 66, 69, 137, 192, 6, 187, 59, 16, 51, 80, 56, 89, 170, 12, 195, 69, 133, 188, 110, 171, 17, 17, 213, 194, 154, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 123, 36, 154, 4, 158, 41, 96, 252, 116, 114, 16, 137, 28, 177, 206, 33, 192, 88, 89, 1, 69, 252, 206, 88, 89, 152, 210, 179, 248, 44, 202, 239, 95, 131, 126, 147, 249, 93, 57, 166, 215, 184, 211, 164, 196, 71, 170, 3, 25, 18, 177, 214, 94, 147, 181, 148, 197, 11, 171, 219, 107, 48, 105, 81, 239, 110, 249, 140, 68, 127, 193, 146, 176, 161, 246, 108, 75, 141, 205, 211, 73, 247, 125, 205, 120, 156, 82, 55, 130, 250, 26, 15, 44, 214, 91, 115, 11, 103, 22, 83, 184, 96, 107, 138, 2, 127, 168, 191, 92, 102, 137, 161, 63, 225, 134, 17, 178, 242, 11, 43, 8, 30, 164, 28, 140, 195, 83, 121, 194, 154, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 189, 98, 234, 251, 237, 24, 143, 210, 30, 242, 97, 66, 50, 211, 47, 109, 110, 121, 244, 239, 89, 0, 39, 92, 218, 155, 71, 5, 23, 136, 231, 107, 95, 52, 231, 118, 253, 206, 250, 178, 209, 136, 13, 36, 36, 54, 157, 237, 35, 110, 134, 253, 80, 237, 162, 163, 38, 21, 54, 241, 240, 253, 73, 33, 191, 128, 32, 6, 198, 165, 35, 203, 244, 15, 166, 250, 159, 67, 149, 56, 19, 243, 230, 87, 6, 44, 150, 90, 79, 107, 18, 121, 112, 23, 176, 104, 50, 110, 176, 138, 250, 6, 209, 22, 41, 73, 234, 4, 124, 233, 208, 218, 236, 117, 232, 217, 10, 172, 18, 215, 143, 119, 193, 113, 10, 59, 255, 221, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 622508000),\n\t\t\t},\n\t\t\tnb: 8,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511150,\n\t\t\t\tAck:       3465789949,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 622531000),\n\t\t\t},\n\t\t\tnb: 9,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tFIN:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511150,\n\t\t\t\tAck:       3465789949,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 622907000),\n\t\t\t},\n\t\t\tnb: 10,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tFIN:       true,\n\t\t\t\tSrcPort:   53,\n\t\t\t\tDstPort:   54842,\n\t\t\t\tSeq:       3465789949,\n\t\t\t\tAck:       374511151,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 652784000),\n\t\t\t},\n\t\t\tnb: 11,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511151,\n\t\t\t\tAck:       3465789950,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 652809000),\n\t\t\t},\n\t\t\tnb: 12,\n\t\t},\n\t})\n}\n\nfunc TestFSMearlyRST(t *testing.T) {\n\ttestFSM(t, []testFSMSequence{\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSYN:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511116,\n\t\t\t\tAck:       0,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 566690000),\n\t\t\t},\n\t\t\tnb: 1,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSYN:       true,\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   53,\n\t\t\t\tDstPort:   54842,\n\t\t\t\tSeq:       3465787765,\n\t\t\t\tAck:       374511117,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590332000),\n\t\t\t},\n\t\t\tnb: 2,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tRST:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511117,\n\t\t\t\tAck:       3465787766,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590346000),\n\t\t\t},\n\t\t\tnb: 3,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511117,\n\t\t\t\tAck:       3465787766,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590387000),\n\t\t\t},\n\t\t\tnb: 3,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   53,\n\t\t\t\tDstPort:   54842,\n\t\t\t\tSeq:       3465787766,\n\t\t\t\tAck:       374511150,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 613687000),\n\t\t\t},\n\t\t\tnb: 3,\n\t\t},\n\t})\n}\n\nfunc TestFSMestablishedThenRST(t *testing.T) {\n\ttestFSM(t, []testFSMSequence{\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSYN:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511116,\n\t\t\t\tAck:       0,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 566690000),\n\t\t\t},\n\t\t\tnb: 1,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSYN:       true,\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   53,\n\t\t\t\tDstPort:   54842,\n\t\t\t\tSeq:       3465787765,\n\t\t\t\tAck:       374511117,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590332000),\n\t\t\t},\n\t\t\tnb: 2,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511117,\n\t\t\t\tAck:       3465787766,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590346000),\n\t\t\t},\n\t\t\tnb: 3,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511117,\n\t\t\t\tAck:       3465787766,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590387000),\n\t\t\t},\n\t\t\tnb: 4,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tRST:       true,\n\t\t\t\tSrcPort:   53,\n\t\t\t\tDstPort:   54842,\n\t\t\t\tSeq:       3465787766,\n\t\t\t\tAck:       374511150,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 613687000),\n\t\t\t},\n\t\t\tnb: 5,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   53,\n\t\t\t\tDstPort:   54842,\n\t\t\t\tSeq:       3465787766,\n\t\t\t\tAck:       374511150,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{8, 133, 104, 196, 132, 0, 0, 1, 0, 2, 0, 7, 0, 19, 2, 85, 83, 0, 0, 6, 0, 1, 2, 117, 115, 0, 0, 6, 0, 1, 0, 0, 3, 132, 0, 54, 1, 97, 5, 99, 99, 116, 108, 100, 192, 20, 10, 104, 111, 115, 116, 109, 97, 115, 116, 101, 114, 7, 110, 101, 117, 115, 116, 97, 114, 3, 98, 105, 122, 0, 120, 18, 40, 205, 0, 0, 3, 132, 0, 0, 3, 132, 0, 9, 58, 128, 0, 1, 81, 128, 192, 20, 0, 46, 0, 1, 0, 0, 3, 132, 0, 150, 0, 6, 5, 1, 0, 0, 3, 132, 85, 138, 90, 146, 85, 98, 191, 130, 27, 78, 2, 117, 115, 0, 69, 13, 35, 189, 141, 225, 107, 238, 108, 182, 207, 44, 105, 31, 212, 103, 32, 93, 217, 108, 20, 231, 188, 28, 241, 237, 104, 182, 117, 121, 195, 112, 64, 96, 237, 248, 6, 181, 186, 96, 60, 6, 18, 29, 188, 96, 201, 140, 251, 61, 71, 177, 108, 156, 9, 83, 125, 172, 188, 75, 81, 67, 218, 55, 93, 131, 243, 15, 190, 75, 4, 165, 226, 124, 49, 67, 142, 131, 239, 240, 76, 225, 10, 242, 68, 88, 240, 200, 27, 97, 102, 73, 92, 73, 133, 170, 175, 198, 99, 109, 90, 16, 162, 101, 95, 96, 102, 250, 91, 74, 80, 3, 87, 167, 50, 230, 9, 213, 7, 222, 197, 87, 183, 190, 148, 247, 207, 204, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 10, 1, 102, 5, 99, 99, 116, 108, 100, 192, 12, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 97, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 98, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 99, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 101, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 107, 193, 8, 192, 118, 0, 46, 0, 1, 0, 7, 233, 0, 0, 150, 0, 2, 5, 1, 0, 7, 233, 0, 85, 127, 33, 92, 85, 87, 134, 98, 27, 78, 2, 117, 115, 0, 19, 227, 175, 75, 88, 245, 164, 158, 150, 198, 57, 253, 150, 179, 161, 52, 24, 56, 229, 176, 175, 40, 45, 232, 188, 171, 131, 197, 107, 125, 218, 192, 78, 221, 146, 33, 114, 55, 43, 12, 131, 213, 51, 98, 37, 2, 102, 161, 232, 115, 177, 210, 51, 169, 215, 133, 56, 190, 91, 75, 8, 222, 231, 202, 139, 28, 187, 249, 72, 21, 23, 56, 63, 72, 126, 142, 242, 195, 242, 64, 208, 134, 100, 157, 197, 159, 43, 148, 20, 70, 117, 152, 159, 35, 200, 220, 49, 234, 173, 210, 91, 34, 210, 192, 7, 197, 112, 117, 208, 234, 42, 49, 133, 237, 197, 14, 244, 149, 191, 142, 36, 252, 42, 48, 182, 189, 9, 68, 1, 65, 5, 67, 67, 84, 76, 68, 193, 126, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 124, 70, 1, 66, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 125, 70, 194, 26, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 209, 174, 255, 255, 255, 255, 255, 255, 255, 255, 255, 126, 1, 67, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 127, 70, 1, 69, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 126, 70, 1, 70, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 209, 173, 58, 70, 194, 108, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 0, 54, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 1, 75, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 128, 70, 194, 154, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 226, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 194, 2, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 230, 49, 85, 73, 83, 2, 27, 78, 2, 117, 115, 0, 82, 36, 11, 141, 74, 85, 70, 98, 179, 63, 173, 83, 8, 70, 155, 41, 102, 166, 140, 62, 71, 178, 130, 38, 171, 200, 180, 68, 2, 215, 45, 6, 43, 59, 171, 146, 223, 215, 9, 77, 5, 104, 167, 42, 237, 170, 30, 114, 205, 129, 59, 225, 152, 224, 79, 1, 65, 68, 208, 153, 121, 237, 199, 87, 2, 251, 100, 105, 59, 24, 73, 226, 169, 121, 250, 91, 41, 124, 14, 23, 135, 52, 2, 86, 72, 224, 100, 135, 70, 216, 16, 107, 84, 59, 13, 168, 58, 187, 54, 98, 230, 167, 246, 42, 46, 156, 206, 238, 120, 199, 25, 144, 98, 249, 70, 162, 34, 43, 145, 114, 186, 233, 47, 42, 75, 95, 152, 235, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 160, 95, 100, 37, 167, 82, 93, 165, 126, 247, 147, 173, 238, 154, 206, 174, 96, 175, 209, 7, 8, 169, 171, 223, 29, 201, 161, 177, 98, 54, 94, 62, 70, 127, 142, 109, 206, 42, 179, 109, 156, 160, 156, 20, 59, 24, 147, 164, 13, 121, 192, 84, 157, 26, 56, 177, 151, 210, 7, 197, 229, 110, 60, 58, 224, 42, 77, 5, 59, 80, 216, 221, 248, 19, 66, 102, 74, 199, 238, 120, 231, 201, 187, 29, 11, 46, 195, 164, 8, 221, 128, 25, 205, 42, 247, 152, 112, 176, 14, 117, 150, 223, 245, 32, 212, 107, 4, 245, 27, 126, 224, 216, 0, 89, 106, 238, 185, 206, 44, 56, 204, 175, 7, 139, 233, 228, 127, 175, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 108, 217, 174, 85, 69, 70, 242, 27, 78, 2, 117, 115, 0, 172, 117, 89, 89, 73, 249, 245, 211, 100, 127, 48, 135, 224, 97, 172, 146, 128, 30, 190, 72, 199, 170, 97, 179, 136, 109, 86, 110, 235, 214, 47, 50, 115, 11, 226, 168, 56, 198, 24, 212, 205, 207, 2, 116, 104, 112, 99, 234, 236, 44, 70, 19, 19, 215, 127, 200, 162, 215, 142, 45, 135, 91, 219, 217, 86, 231, 154, 87, 222, 161, 32, 66, 196, 55, 117, 20, 186, 9, 134, 252, 249, 219, 9, 196, 128, 8, 222, 201, 131, 210, 182, 232, 142, 72, 160, 171, 95, 231, 232, 156, 28, 34, 54, 94, 73, 183, 38, 160, 123, 175, 157, 21, 163, 8, 214, 155, 172, 237, 169, 28, 15, 138, 105, 107, 251, 109, 131, 240, 194, 72, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 77, 207, 197, 130, 236, 138, 192, 241, 225, 114, 8, 22, 76, 54, 43, 121, 42, 44, 9, 92, 56, 253, 224, 179, 191, 131, 40, 176, 94, 61, 33, 12, 43, 82, 156, 236, 211, 29, 187, 100, 220, 243, 24, 134, 42, 204, 46, 161, 214, 91, 68, 119, 40, 252, 53, 54, 146, 136, 196, 168, 204, 195, 131, 110, 6, 73, 16, 161, 86, 35, 150, 153, 162, 185, 227, 65, 228, 160, 203, 42, 250, 121, 14, 42, 115, 221, 232, 96, 99, 164, 230, 29, 195, 149, 85, 206, 41, 1, 252, 77, 188, 88, 8, 182, 37, 249, 6, 158, 6, 244, 158, 254, 141, 203, 6, 158, 198, 103, 130, 98, 123, 34, 245, 44, 126, 77, 24, 187, 194, 90, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 108, 194, 203, 85, 69, 51, 125, 27, 78, 2, 117, 115, 0, 86, 26, 187, 56, 252, 194, 199, 140, 229, 133, 186, 187, 20, 174, 26, 48, 212, 129, 10, 20, 167, 179, 53, 72, 176, 92, 153, 48, 146, 15, 163, 182, 80, 138, 181, 135, 98, 129, 17, 66, 55, 184, 76, 225, 72, 104, 7, 221, 40, 71, 41, 202, 246, 154, 166, 199, 74, 175, 146, 54, 25, 56, 115, 243}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 621198000),\n\t\t\t},\n\t\t\tnb: 5,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511150,\n\t\t\t\tAck:       3465789226,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 621220000),\n\t\t\t},\n\t\t\tnb: 5,\n\t\t},\n\t})\n}\n\nfunc TestFSMmissingSYNACK(t *testing.T) {\n\ttestFSM(t, []testFSMSequence{\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSYN:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511116,\n\t\t\t\tAck:       0,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 566690000),\n\t\t\t},\n\t\t\tnb: 1,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511117,\n\t\t\t\tAck:       3465787766,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590346000),\n\t\t\t},\n\t\t\tnb: 1,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511117,\n\t\t\t\tAck:       3465787766,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590387000),\n\t\t\t},\n\t\t\tnb: 1,\n\t\t},\n\t})\n}\n\n/*\n * Memory test\n */\nfunc TestMemoryShrink(t *testing.T) {\n\ttcp := layers.TCP{\n\t\tSrcPort:   1,\n\t\tDstPort:   2,\n\t\tSYN:       true,\n\t\tSeq:       999,\n\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t}\n\ttcp.SetInternalPortsForTesting()\n\ta := NewAssembler(NewStreamPool(&testFactoryBench{}))\n\tvar before runtime.MemStats\n\truntime.GC()\n\truntime.ReadMemStats(&before)\n\trun := 1050\n\t// Allocate > initial\n\tfor i := 0; i < run; i++ {\n\t\ta.Assemble(netFlow, &tcp)\n\t\tif tcp.SYN {\n\t\t\ttcp.SYN = false\n\t\t\ttcp.Seq += 1 + 1\n\t\t}\n\t\ttcp.Seq += 10\n\t}\n\tvar after runtime.MemStats\n\ta.FlushAll()\n\truntime.GC()\n\truntime.ReadMemStats(&after)\n\tif after.HeapAlloc < before.HeapAlloc {\n\t\tt.Fatalf(\"Nothing allocated for %d run: before: %d, after: %d\", run, before.HeapAlloc, after.HeapAlloc)\n\t}\n\tbefore = after\n\t// Do ~ initial allocs+free()\n\trun *= 2\n\tfor i := 0; i < run; i++ {\n\t\ta.Assemble(netFlow, &tcp)\n\t\tif i%50 == 0 {\n\t\t\ta.FlushAll()\n\t\t}\n\t\ttcp.Seq += 10\n\t}\n\truntime.GC()\n\truntime.ReadMemStats(&after)\n\tif after.HeapAlloc >= before.HeapAlloc {\n\t\tt.Fatalf(\"Nothing freed for %d run: before: %d, after: %d\", run, before.HeapAlloc, after.HeapAlloc)\n\t}\n}\n\n/*\n * Benchmark tests\n */\nfunc BenchmarkSingleStreamNo(b *testing.B) {\n\tt := layers.TCP{\n\t\tSrcPort:   1,\n\t\tDstPort:   2,\n\t\tSYN:       true,\n\t\tSeq:       1000,\n\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t}\n\tt.SetInternalPortsForTesting()\n\ta := NewAssembler(NewStreamPool(&testFactoryBench{}))\n\tfor i := 0; i < b.N; i++ {\n\t\ta.Assemble(netFlow, &t)\n\t\tif t.SYN {\n\t\t\tt.SYN = false\n\t\t\tt.Seq++\n\t\t}\n\t\tt.Seq += 10\n\t}\n}\n\nfunc BenchmarkSingleStreamSkips(b *testing.B) {\n\tt := layers.TCP{\n\t\tSrcPort:   1,\n\t\tDstPort:   2,\n\t\tSYN:       true,\n\t\tSeq:       1000,\n\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t}\n\tt.SetInternalPortsForTesting()\n\ta := NewAssembler(NewStreamPool(&testFactoryBench{}))\n\tskipped := false\n\tfor i := 0; i < b.N; i++ {\n\t\tif i%10 == 9 {\n\t\t\tt.Seq += 10\n\t\t\tskipped = true\n\t\t} else if skipped {\n\t\t\tt.Seq -= 20\n\t\t}\n\t\ta.Assemble(netFlow, &t)\n\t\tif t.SYN {\n\t\t\tt.SYN = false\n\t\t\tt.Seq++\n\t\t}\n\t\tt.Seq += 10\n\t\tif skipped {\n\t\t\tt.Seq += 10\n\t\t\tskipped = false\n\t\t}\n\t}\n}\n\nfunc BenchmarkSingleStreamLoss(b *testing.B) {\n\tt := layers.TCP{\n\t\tSrcPort:   1,\n\t\tDstPort:   2,\n\t\tSYN:       true,\n\t\tSeq:       1000,\n\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t}\n\tt.SetInternalPortsForTesting()\n\ta := NewAssembler(NewStreamPool(&testFactoryBench{}))\n\tfor i := 0; i < b.N; i++ {\n\t\ta.Assemble(netFlow, &t)\n\t\tt.SYN = false\n\t\tt.Seq += 11\n\t}\n}\n\nfunc BenchmarkMultiStreamGrow(b *testing.B) {\n\tt := layers.TCP{\n\t\tSrcPort:   1,\n\t\tDstPort:   2,\n\t\tSeq:       0,\n\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t}\n\ta := NewAssembler(NewStreamPool(&testFactoryBench{}))\n\tfor i := 0; i < b.N; i++ {\n\t\tt.SrcPort = layers.TCPPort(i)\n\t\tt.SetInternalPortsForTesting()\n\t\ta.Assemble(netFlow, &t)\n\t\tt.Seq += 10\n\t}\n}\n\nfunc BenchmarkMultiStreamConn(b *testing.B) {\n\tt := layers.TCP{\n\t\tSrcPort:   1,\n\t\tDstPort:   2,\n\t\tSeq:       0,\n\t\tSYN:       true,\n\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t}\n\ta := NewAssembler(NewStreamPool(&testFactoryBench{}))\n\tfor i := 0; i < b.N; i++ {\n\t\tt.SrcPort = layers.TCPPort(i)\n\t\tt.SetInternalPortsForTesting()\n\t\ta.Assemble(netFlow, &t)\n\t\tif i%65536 == 65535 {\n\t\t\tif t.SYN {\n\t\t\t\tt.SYN = false\n\t\t\t\tt.Seq++\n\t\t\t}\n\t\t\tt.Seq += 10\n\t\t}\n\t}\n}\n\ntype testMemoryContext struct{}\n\nfunc (t *testMemoryContext) GetCaptureInfo() gopacket.CaptureInfo {\n\treturn gopacket.CaptureInfo{\n\t\tTimestamp: time.Unix(1432538521, 590387000),\n\t}\n}\n\nfunc TestFullyOrderedAndCompleteStreamDoesNotAlloc(t *testing.T) {\n\tc2s := layers.TCP{\n\t\tSrcPort:   1,\n\t\tDstPort:   2,\n\t\tSeq:       0,\n\t\tSYN:       true,\n\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t}\n\ts2c := layers.TCP{\n\t\tSrcPort:   c2s.DstPort,\n\t\tDstPort:   c2s.SrcPort,\n\t\tSeq:       0,\n\t\tSYN:       true,\n\t\tACK:       true,\n\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t}\n\tc2s.SetInternalPortsForTesting()\n\ts2c.SetInternalPortsForTesting()\n\ttf := testMemoryFactory{}\n\ta := NewAssembler(NewStreamPool(&tf))\n\n\tctx := &testMemoryContext{}\n\t// First packet\n\ta.AssembleWithContext(netFlow, &c2s, ctx)\n\ta.AssembleWithContext(netFlow.Reverse(), &s2c, ctx)\n\tc2s.SYN, s2c.SYN = false, false\n\tc2s.ACK = true\n\tc2s.Seq++\n\ts2c.Seq++\n\tN := 1000\n\tif n := testing.AllocsPerRun(N, func() {\n\t\tc2s.Seq += 10\n\t\ts2c.Seq += 10\n\t\tc2s.Ack += 10\n\t\ts2c.Ack += 10\n\t\ta.AssembleWithContext(netFlow, &c2s, ctx)\n\t\ta.AssembleWithContext(netFlow.Reverse(), &s2c, ctx)\n\t}); n > 0 {\n\t\tt.Error(n, \"mallocs for normal TCP stream\")\n\t}\n\t// Ensure all bytes have been through the stream\n\t// +1 for first packet and +1 because AllocsPerRun seems to run fun N+1 times.\n\tif tf.bytes != 10*2*(N+1+1) {\n\t\tt.Error(tf.bytes, \"bytes handled, expected\", 10*2*(N+1+1))\n\t}\n}\n\ntype testCustomContext int\n\nfunc (c testCustomContext) GetCaptureInfo() gopacket.CaptureInfo {\n\t// We're just abusing the InterfaceIndex to identify the context, no other\n\t// meaning here.\n\treturn gopacket.CaptureInfo{InterfaceIndex: int(c)}\n}\n\n// Make sure reassemblyObject.CaptureInfo conforms to ScatterGather interface.\nfunc TestReassemblyObjectCaptureInfo(t *testing.T) {\n\t// Add 20 bytes worth of data into a reassemblyObject.\n\tall := []byteContainer{\n\t\t&page{\n\t\t\tbytes: bytes.Repeat([]byte(\"1\"), 10),\n\t\t\tac:    testCustomContext(1203),\n\t\t},\n\t\t&livePacket{\n\t\t\tbytes: bytes.Repeat([]byte(\"1\"), 10),\n\t\t\tac:    testCustomContext(794598214),\n\t\t},\n\t}\n\tro := &reassemblyObject{all: all}\n\n\ttestCases := []struct {\n\t\toffset   int\n\t\texpected testCustomContext\n\t}{\n\t\t{\n\t\t\toffset: -1,\n\t\t},\n\t\t{\n\t\t\toffset:   0,\n\t\t\texpected: testCustomContext(1203),\n\t\t},\n\t\t{\n\t\t\toffset:   5,\n\t\t\texpected: testCustomContext(1203),\n\t\t},\n\t\t{\n\t\t\toffset:   10,\n\t\t\texpected: testCustomContext(794598214),\n\t\t},\n\t\t{\n\t\t\toffset:   19,\n\t\t\texpected: testCustomContext(794598214),\n\t\t},\n\t\t{\n\t\t\toffset: 20,\n\t\t},\n\t\t{\n\t\t\toffset: 1000000,\n\t\t},\n\t}\n\tfor _, c := range testCases {\n\t\texpected := c.expected.GetCaptureInfo()\n\t\tci := ro.CaptureInfo(c.offset)\n\t\tif !reflect.DeepEqual(expected, ci) {\n\t\t\tt.Errorf(\"test CaptureInfo(%d):\\nwant: %v\\n got: %v\\n\", c.offset, expected, ci)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "reassembly/tcpcheck.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage reassembly\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\n/*\n * Check TCP packet against options (window, MSS)\n */\n\ntype tcpStreamOptions struct {\n\tmss           int\n\tscale         int\n\treceiveWindow uint\n}\n\n// TCPOptionCheck contains options for the two directions\ntype TCPOptionCheck struct {\n\toptions [2]tcpStreamOptions\n}\n\nfunc (t *TCPOptionCheck) getOptions(dir TCPFlowDirection) *tcpStreamOptions {\n\tif dir == TCPDirClientToServer {\n\t\treturn &t.options[0]\n\t}\n\treturn &t.options[1]\n}\n\n// NewTCPOptionCheck creates default options\nfunc NewTCPOptionCheck() TCPOptionCheck {\n\treturn TCPOptionCheck{\n\t\toptions: [2]tcpStreamOptions{\n\t\t\ttcpStreamOptions{\n\t\t\t\tmss:           0,\n\t\t\t\tscale:         -1,\n\t\t\t\treceiveWindow: 0,\n\t\t\t}, tcpStreamOptions{\n\t\t\t\tmss:           0,\n\t\t\t\tscale:         -1,\n\t\t\t\treceiveWindow: 0,\n\t\t\t},\n\t\t},\n\t}\n}\n\n// Accept checks whether the packet should be accepted by checking TCP options\nfunc (t *TCPOptionCheck) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, nextSeq Sequence, start *bool) error {\n\toptions := t.getOptions(dir)\n\tif tcp.SYN {\n\t\tmss := -1\n\t\tscale := -1\n\t\tfor _, o := range tcp.Options {\n\t\t\t// MSS\n\t\t\tif o.OptionType == 2 {\n\t\t\t\tif len(o.OptionData) != 2 {\n\t\t\t\t\treturn fmt.Errorf(\"MSS option data length expected 2, got %d\", len(o.OptionData))\n\t\t\t\t}\n\t\t\t\tmss = int(binary.BigEndian.Uint16(o.OptionData[:2]))\n\t\t\t}\n\t\t\t// Window scaling\n\t\t\tif o.OptionType == 3 {\n\t\t\t\tif len(o.OptionData) != 1 {\n\t\t\t\t\treturn fmt.Errorf(\"Window scaling length expected: 1, got %d\", len(o.OptionData))\n\t\t\t\t}\n\t\t\t\tscale = int(o.OptionData[0])\n\t\t\t}\n\t\t}\n\t\toptions.mss = mss\n\t\toptions.scale = scale\n\t} else {\n\t\tif nextSeq != invalidSequence {\n\t\t\trevOptions := t.getOptions(dir.Reverse())\n\t\t\tlength := len(tcp.Payload)\n\n\t\t\t// Check packet is in the correct window\n\t\t\tdiff := nextSeq.Difference(Sequence(tcp.Seq))\n\t\t\tif diff == -1 && (length == 1 || length == 0) {\n\t\t\t\t// This is probably a Keep-alive\n\t\t\t\t// TODO: check byte is ok\n\t\t\t} else if diff < 0 {\n\t\t\t\treturn fmt.Errorf(\"Re-emitted packet (diff:%d,seq:%d,rev-ack:%d)\", diff,\n\t\t\t\t\ttcp.Seq, nextSeq)\n\t\t\t} else if revOptions.mss > 0 && length > revOptions.mss {\n\t\t\t\treturn fmt.Errorf(\"%d > mss (%d)\", length, revOptions.mss)\n\t\t\t} else if revOptions.receiveWindow != 0 && revOptions.scale < 0 && diff > int(revOptions.receiveWindow) {\n\t\t\t\treturn fmt.Errorf(\"%d > receiveWindow(%d)\", diff, revOptions.receiveWindow)\n\t\t\t}\n\t\t}\n\t}\n\t// Compute receiveWindow\n\toptions.receiveWindow = uint(tcp.Window)\n\tif options.scale > 0 {\n\t\toptions.receiveWindow = options.receiveWindow << (uint(options.scale))\n\t}\n\treturn nil\n}\n\n// TCPSimpleFSM implements a very simple TCP state machine\n//\n// Usage:\n// When implementing a Stream interface and to avoid to consider packets that\n// would be rejected due to client/server's TCP stack, the  Accept() can call\n// TCPSimpleFSM.CheckState().\n//\n// Limitations:\n// - packet should be received in-order.\n// - no check on sequence number is performed\n// - no RST\ntype TCPSimpleFSM struct {\n\tdir     TCPFlowDirection\n\tstate   int\n\toptions TCPSimpleFSMOptions\n}\n\n// TCPSimpleFSMOptions holds options for TCPSimpleFSM\ntype TCPSimpleFSMOptions struct {\n\tSupportMissingEstablishment bool // Allow missing SYN, SYN+ACK, ACK\n}\n\n// Internal values of state machine\nconst (\n\tTCPStateClosed      = 0\n\tTCPStateSynSent     = 1\n\tTCPStateEstablished = 2\n\tTCPStateCloseWait   = 3\n\tTCPStateLastAck     = 4\n\tTCPStateReset       = 5\n)\n\n// NewTCPSimpleFSM creates a new TCPSimpleFSM\nfunc NewTCPSimpleFSM(options TCPSimpleFSMOptions) *TCPSimpleFSM {\n\treturn &TCPSimpleFSM{\n\t\tstate:   TCPStateClosed,\n\t\toptions: options,\n\t}\n}\n\nfunc (t *TCPSimpleFSM) String() string {\n\tswitch t.state {\n\tcase TCPStateClosed:\n\t\treturn \"Closed\"\n\tcase TCPStateSynSent:\n\t\treturn \"SynSent\"\n\tcase TCPStateEstablished:\n\t\treturn \"Established\"\n\tcase TCPStateCloseWait:\n\t\treturn \"CloseWait\"\n\tcase TCPStateLastAck:\n\t\treturn \"LastAck\"\n\tcase TCPStateReset:\n\t\treturn \"Reset\"\n\t}\n\treturn \"?\"\n}\n\n// CheckState returns false if tcp is invalid wrt current state or update the state machine's state\nfunc (t *TCPSimpleFSM) CheckState(tcp *layers.TCP, dir TCPFlowDirection) bool {\n\tif t.state == TCPStateClosed && t.options.SupportMissingEstablishment && !(tcp.SYN && !tcp.ACK) {\n\t\t/* try to figure out state */\n\t\tswitch true {\n\t\tcase tcp.SYN && tcp.ACK:\n\t\t\tt.state = TCPStateSynSent\n\t\t\tt.dir = dir.Reverse()\n\t\tcase tcp.FIN && !tcp.ACK:\n\t\t\tt.state = TCPStateEstablished\n\t\tcase tcp.FIN && tcp.ACK:\n\t\t\tt.state = TCPStateCloseWait\n\t\t\tt.dir = dir.Reverse()\n\t\tdefault:\n\t\t\tt.state = TCPStateEstablished\n\t\t}\n\t}\n\n\tswitch t.state {\n\t/* openning connection */\n\tcase TCPStateClosed:\n\t\tif tcp.SYN && !tcp.ACK {\n\t\t\tt.dir = dir\n\t\t\tt.state = TCPStateSynSent\n\t\t\treturn true\n\t\t}\n\tcase TCPStateSynSent:\n\t\tif tcp.RST {\n\t\t\tt.state = TCPStateReset\n\t\t\treturn true\n\t\t}\n\n\t\tif tcp.SYN && tcp.ACK && dir == t.dir.Reverse() {\n\t\t\tt.state = TCPStateEstablished\n\t\t\treturn true\n\t\t}\n\t\tif tcp.SYN && !tcp.ACK && dir == t.dir {\n\t\t\t// re-transmission\n\t\t\treturn true\n\t\t}\n\t/* established */\n\tcase TCPStateEstablished:\n\t\tif tcp.RST {\n\t\t\tt.state = TCPStateReset\n\t\t\treturn true\n\t\t}\n\n\t\tif tcp.FIN {\n\t\t\tt.state = TCPStateCloseWait\n\t\t\tt.dir = dir\n\t\t\treturn true\n\t\t}\n\t\t// accept any packet\n\t\treturn true\n\t/* closing connection */\n\tcase TCPStateCloseWait:\n\t\tif tcp.RST {\n\t\t\tt.state = TCPStateReset\n\t\t\treturn true\n\t\t}\n\n\t\tif tcp.FIN && tcp.ACK && dir == t.dir.Reverse() {\n\t\t\tt.state = TCPStateLastAck\n\t\t\treturn true\n\t\t}\n\t\tif tcp.ACK {\n\t\t\treturn true\n\t\t}\n\tcase TCPStateLastAck:\n\t\tif tcp.RST {\n\t\t\tt.state = TCPStateReset\n\t\t\treturn true\n\t\t}\n\n\t\tif tcp.ACK && t.dir == dir {\n\t\t\tt.state = TCPStateClosed\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "reassembly/tcpcheck_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage reassembly\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n)\n\n// netFlow declared in tcpassembly_test\n\n/*\n * FSM tests\n */\n\ntype testCheckFSMSequence struct {\n\ttcp      layers.TCP\n\tci       gopacket.CaptureInfo\n\texpected bool\n}\n\nfunc testCheckFSM(t *testing.T, options TCPSimpleFSMOptions, s []testCheckFSMSequence) {\n\tfsm := NewTCPSimpleFSM(options)\n\tport := layers.TCPPort(0)\n\tfor i, test := range s {\n\t\t// Fake some values according to ports\n\t\tflow := netFlow\n\t\tdir := TCPDirClientToServer\n\t\tif port == 0 {\n\t\t\tport = test.tcp.SrcPort\n\t\t}\n\t\tif port != test.tcp.SrcPort {\n\t\t\tdir = dir.Reverse()\n\t\t\tflow = flow.Reverse()\n\t\t}\n\t\tres := fsm.CheckState(&test.tcp, dir)\n\t\tif res != test.expected {\n\t\t\tt.Fatalf(\"#%d: packet rejected (%v): got %v, expected %v. State:%s\", i, gopacket.LayerDump(&test.tcp), res, test.expected, fsm.String())\n\t\t}\n\t}\n}\n\nfunc TestCheckFSM(t *testing.T) {\n\ttestCheckFSM(t, TCPSimpleFSMOptions{}, []testCheckFSMSequence{\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSYN:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511116,\n\t\t\t\tAck:       0,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 566690000),\n\t\t\t},\n\t\t\texpected: true,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSYN:       true,\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   53,\n\t\t\t\tDstPort:   54842,\n\t\t\t\tSeq:       3465787765,\n\t\t\t\tAck:       374511117,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590332000),\n\t\t\t},\n\t\t\texpected: true,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511117,\n\t\t\t\tAck:       3465787766,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590346000),\n\t\t\t},\n\t\t\texpected: true,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511117,\n\t\t\t\tAck:       3465787766,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590387000),\n\t\t\t},\n\t\t\texpected: true,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   53,\n\t\t\t\tDstPort:   54842,\n\t\t\t\tSeq:       3465787766,\n\t\t\t\tAck:       374511150,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 613687000),\n\t\t\t},\n\t\t\texpected: true,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   53,\n\t\t\t\tDstPort:   54842,\n\t\t\t\tSeq:       3465787766,\n\t\t\t\tAck:       374511150,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{8, 133, 104, 196, 132, 0, 0, 1, 0, 2, 0, 7, 0, 19, 2, 85, 83, 0, 0, 6, 0, 1, 2, 117, 115, 0, 0, 6, 0, 1, 0, 0, 3, 132, 0, 54, 1, 97, 5, 99, 99, 116, 108, 100, 192, 20, 10, 104, 111, 115, 116, 109, 97, 115, 116, 101, 114, 7, 110, 101, 117, 115, 116, 97, 114, 3, 98, 105, 122, 0, 120, 18, 40, 205, 0, 0, 3, 132, 0, 0, 3, 132, 0, 9, 58, 128, 0, 1, 81, 128, 192, 20, 0, 46, 0, 1, 0, 0, 3, 132, 0, 150, 0, 6, 5, 1, 0, 0, 3, 132, 85, 138, 90, 146, 85, 98, 191, 130, 27, 78, 2, 117, 115, 0, 69, 13, 35, 189, 141, 225, 107, 238, 108, 182, 207, 44, 105, 31, 212, 103, 32, 93, 217, 108, 20, 231, 188, 28, 241, 237, 104, 182, 117, 121, 195, 112, 64, 96, 237, 248, 6, 181, 186, 96, 60, 6, 18, 29, 188, 96, 201, 140, 251, 61, 71, 177, 108, 156, 9, 83, 125, 172, 188, 75, 81, 67, 218, 55, 93, 131, 243, 15, 190, 75, 4, 165, 226, 124, 49, 67, 142, 131, 239, 240, 76, 225, 10, 242, 68, 88, 240, 200, 27, 97, 102, 73, 92, 73, 133, 170, 175, 198, 99, 109, 90, 16, 162, 101, 95, 96, 102, 250, 91, 74, 80, 3, 87, 167, 50, 230, 9, 213, 7, 222, 197, 87, 183, 190, 148, 247, 207, 204, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 10, 1, 102, 5, 99, 99, 116, 108, 100, 192, 12, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 97, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 98, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 99, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 101, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 107, 193, 8, 192, 118, 0, 46, 0, 1, 0, 7, 233, 0, 0, 150, 0, 2, 5, 1, 0, 7, 233, 0, 85, 127, 33, 92, 85, 87, 134, 98, 27, 78, 2, 117, 115, 0, 19, 227, 175, 75, 88, 245, 164, 158, 150, 198, 57, 253, 150, 179, 161, 52, 24, 56, 229, 176, 175, 40, 45, 232, 188, 171, 131, 197, 107, 125, 218, 192, 78, 221, 146, 33, 114, 55, 43, 12, 131, 213, 51, 98, 37, 2, 102, 161, 232, 115, 177, 210, 51, 169, 215, 133, 56, 190, 91, 75, 8, 222, 231, 202, 139, 28, 187, 249, 72, 21, 23, 56, 63, 72, 126, 142, 242, 195, 242, 64, 208, 134, 100, 157, 197, 159, 43, 148, 20, 70, 117, 152, 159, 35, 200, 220, 49, 234, 173, 210, 91, 34, 210, 192, 7, 197, 112, 117, 208, 234, 42, 49, 133, 237, 197, 14, 244, 149, 191, 142, 36, 252, 42, 48, 182, 189, 9, 68, 1, 65, 5, 67, 67, 84, 76, 68, 193, 126, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 124, 70, 1, 66, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 125, 70, 194, 26, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 209, 174, 255, 255, 255, 255, 255, 255, 255, 255, 255, 126, 1, 67, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 127, 70, 1, 69, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 126, 70, 1, 70, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 209, 173, 58, 70, 194, 108, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 0, 54, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 1, 75, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 128, 70, 194, 154, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 226, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 194, 2, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 230, 49, 85, 73, 83, 2, 27, 78, 2, 117, 115, 0, 82, 36, 11, 141, 74, 85, 70, 98, 179, 63, 173, 83, 8, 70, 155, 41, 102, 166, 140, 62, 71, 178, 130, 38, 171, 200, 180, 68, 2, 215, 45, 6, 43, 59, 171, 146, 223, 215, 9, 77, 5, 104, 167, 42, 237, 170, 30, 114, 205, 129, 59, 225, 152, 224, 79, 1, 65, 68, 208, 153, 121, 237, 199, 87, 2, 251, 100, 105, 59, 24, 73, 226, 169, 121, 250, 91, 41, 124, 14, 23, 135, 52, 2, 86, 72, 224, 100, 135, 70, 216, 16, 107, 84, 59, 13, 168, 58, 187, 54, 98, 230, 167, 246, 42, 46, 156, 206, 238, 120, 199, 25, 144, 98, 249, 70, 162, 34, 43, 145, 114, 186, 233, 47, 42, 75, 95, 152, 235, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 160, 95, 100, 37, 167, 82, 93, 165, 126, 247, 147, 173, 238, 154, 206, 174, 96, 175, 209, 7, 8, 169, 171, 223, 29, 201, 161, 177, 98, 54, 94, 62, 70, 127, 142, 109, 206, 42, 179, 109, 156, 160, 156, 20, 59, 24, 147, 164, 13, 121, 192, 84, 157, 26, 56, 177, 151, 210, 7, 197, 229, 110, 60, 58, 224, 42, 77, 5, 59, 80, 216, 221, 248, 19, 66, 102, 74, 199, 238, 120, 231, 201, 187, 29, 11, 46, 195, 164, 8, 221, 128, 25, 205, 42, 247, 152, 112, 176, 14, 117, 150, 223, 245, 32, 212, 107, 4, 245, 27, 126, 224, 216, 0, 89, 106, 238, 185, 206, 44, 56, 204, 175, 7, 139, 233, 228, 127, 175, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 108, 217, 174, 85, 69, 70, 242, 27, 78, 2, 117, 115, 0, 172, 117, 89, 89, 73, 249, 245, 211, 100, 127, 48, 135, 224, 97, 172, 146, 128, 30, 190, 72, 199, 170, 97, 179, 136, 109, 86, 110, 235, 214, 47, 50, 115, 11, 226, 168, 56, 198, 24, 212, 205, 207, 2, 116, 104, 112, 99, 234, 236, 44, 70, 19, 19, 215, 127, 200, 162, 215, 142, 45, 135, 91, 219, 217, 86, 231, 154, 87, 222, 161, 32, 66, 196, 55, 117, 20, 186, 9, 134, 252, 249, 219, 9, 196, 128, 8, 222, 201, 131, 210, 182, 232, 142, 72, 160, 171, 95, 231, 232, 156, 28, 34, 54, 94, 73, 183, 38, 160, 123, 175, 157, 21, 163, 8, 214, 155, 172, 237, 169, 28, 15, 138, 105, 107, 251, 109, 131, 240, 194, 72, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 77, 207, 197, 130, 236, 138, 192, 241, 225, 114, 8, 22, 76, 54, 43, 121, 42, 44, 9, 92, 56, 253, 224, 179, 191, 131, 40, 176, 94, 61, 33, 12, 43, 82, 156, 236, 211, 29, 187, 100, 220, 243, 24, 134, 42, 204, 46, 161, 214, 91, 68, 119, 40, 252, 53, 54, 146, 136, 196, 168, 204, 195, 131, 110, 6, 73, 16, 161, 86, 35, 150, 153, 162, 185, 227, 65, 228, 160, 203, 42, 250, 121, 14, 42, 115, 221, 232, 96, 99, 164, 230, 29, 195, 149, 85, 206, 41, 1, 252, 77, 188, 88, 8, 182, 37, 249, 6, 158, 6, 244, 158, 254, 141, 203, 6, 158, 198, 103, 130, 98, 123, 34, 245, 44, 126, 77, 24, 187, 194, 90, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 108, 194, 203, 85, 69, 51, 125, 27, 78, 2, 117, 115, 0, 86, 26, 187, 56, 252, 194, 199, 140, 229, 133, 186, 187, 20, 174, 26, 48, 212, 129, 10, 20, 167, 179, 53, 72, 176, 92, 153, 48, 146, 15, 163, 182, 80, 138, 181, 135, 98, 129, 17, 66, 55, 184, 76, 225, 72, 104, 7, 221, 40, 71, 41, 202, 246, 154, 166, 199, 74, 175, 146, 54, 25, 56, 115, 243}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 621198000),\n\t\t\t},\n\t\t\texpected: true,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511150,\n\t\t\t\tAck:       3465789226,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 621220000),\n\t\t\t},\n\t\t\texpected: true,\n\t\t},\n\t})\n}\n\nfunc TestCheckFSMmissingSYNACK(t *testing.T) {\n\ttestCheckFSM(t, TCPSimpleFSMOptions{}, []testCheckFSMSequence{\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tSYN:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511116,\n\t\t\t\tAck:       0,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 566690000),\n\t\t\t},\n\t\t\texpected: true,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511117,\n\t\t\t\tAck:       3465787766,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590346000),\n\t\t\t},\n\t\t\texpected: false,\n\t\t},\n\t\t{\n\t\t\ttcp: layers.TCP{\n\t\t\t\tACK:       true,\n\t\t\t\tSrcPort:   54842,\n\t\t\t\tDstPort:   53,\n\t\t\t\tSeq:       374511117,\n\t\t\t\tAck:       3465787766,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},\n\t\t\t},\n\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\tTimestamp: time.Unix(1432538521, 590387000),\n\t\t\t},\n\t\t\texpected: false,\n\t\t},\n\t})\n}\n\n// Support packets w/o SYN (+SYN+ACK) depending on option\nfunc TestCheckFSMmissingSYN(t *testing.T) {\n\tfor _, val := range []bool{false, true} {\n\t\ttestCheckFSM(t, TCPSimpleFSMOptions{SupportMissingEstablishment: val}, []testCheckFSMSequence{\n\t\t\t{\n\t\t\t\ttcp: layers.TCP{\n\t\t\t\t\tACK:       true,\n\t\t\t\t\tSrcPort:   54842,\n\t\t\t\t\tDstPort:   53,\n\t\t\t\t\tSeq:       12,\n\t\t\t\t\tAck:       1012,\n\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1}},\n\t\t\t\t},\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp: time.Unix(1432538521, 566690000),\n\t\t\t\t},\n\t\t\t\texpected: val,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttcp: layers.TCP{\n\t\t\t\t\tACK:       true,\n\t\t\t\t\tSrcPort:   53,\n\t\t\t\t\tDstPort:   54842,\n\t\t\t\t\tSeq:       1012,\n\t\t\t\t\tAck:       13,\n\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{2}},\n\t\t\t\t},\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp: time.Unix(1432538521, 590346000),\n\t\t\t\t},\n\t\t\t\texpected: val,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttcp: layers.TCP{\n\t\t\t\t\tACK:       true,\n\t\t\t\t\tSrcPort:   53,\n\t\t\t\t\tDstPort:   54842,\n\t\t\t\t\tSeq:       1013,\n\t\t\t\t\tAck:       13,\n\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{3}},\n\t\t\t\t},\n\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\tTimestamp: time.Unix(1432538521, 590387000),\n\t\t\t\t},\n\t\t\t\texpected: val,\n\t\t\t},\n\t\t})\n\t}\n}\n\n/*\n * Option tests\n */\n\ntype testCheckOptionsSequence struct {\n\ttcp      layers.TCP\n\tci       gopacket.CaptureInfo\n\tdir      TCPFlowDirection\n\tnextSeq  Sequence\n\texpected bool\n\tstart    bool\n}\n\nfunc testCheckOptions(t *testing.T, title string, s []testCheckOptionsSequence) {\n\topt := NewTCPOptionCheck()\n\tfor i, test := range s {\n\t\terr := opt.Accept(&test.tcp, test.ci, test.dir, test.nextSeq, &test.start)\n\t\tres := err == nil\n\t\tif res != test.expected {\n\t\t\tt.Fatalf(\"'%v' #%d: packet rejected (%v): got %v, expected %v.\", title, i, gopacket.LayerDump(&test.tcp), res, test.expected)\n\t\t}\n\t}\n}\n\nfunc TestCheckOptions(t *testing.T) {\n\tfor _, test := range []struct {\n\t\ttitle    string\n\t\tsequence []testCheckOptionsSequence\n\t}{\n\t\t{\n\t\t\ttitle: \"simle valid flow\",\n\t\t\tsequence: []testCheckOptionsSequence{\n\t\t\t\t{\n\t\t\t\t\tdir:     TCPDirClientToServer,\n\t\t\t\t\tnextSeq: -1, // no packets received yet.\n\t\t\t\t\ttcp: layers.TCP{\n\t\t\t\t\t\tSrcPort:   35721,\n\t\t\t\t\t\tDstPort:   80,\n\t\t\t\t\t\tSeq:       374511116,\n\t\t\t\t\t\tAck:       0,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t\t\t},\n\t\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\t\tTimestamp: time.Unix(1432538521, 566690000),\n\t\t\t\t\t},\n\t\t\t\t\texpected: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdir:     TCPDirServerToClient,\n\t\t\t\t\tnextSeq: -1,\n\t\t\t\t\ttcp: layers.TCP{\n\t\t\t\t\t\tSrcPort:   53,\n\t\t\t\t\t\tDstPort:   54842,\n\t\t\t\t\t\tSeq:       3465787765,\n\t\t\t\t\t\tAck:       374511119,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t\t\t},\n\t\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\t\tTimestamp: time.Unix(1432538521, 590332000),\n\t\t\t\t\t},\n\t\t\t\t\texpected: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdir:     TCPDirClientToServer,\n\t\t\t\t\tnextSeq: 374511119,\n\t\t\t\t\ttcp: layers.TCP{\n\t\t\t\t\t\tACK:       true,\n\t\t\t\t\t\tSrcPort:   54842,\n\t\t\t\t\t\tDstPort:   53,\n\t\t\t\t\t\tSeq:       374511119,\n\t\t\t\t\t\tAck:       3465787766,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{2, 3, 4}},\n\t\t\t\t\t},\n\t\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\t\tTimestamp: time.Unix(1432538521, 590346000),\n\t\t\t\t\t},\n\t\t\t\t\texpected: true,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttitle: \"ack received before data\",\n\t\t\tsequence: []testCheckOptionsSequence{\n\t\t\t\t{\n\t\t\t\t\tdir:     TCPDirServerToClient,\n\t\t\t\t\tnextSeq: -1,\n\t\t\t\t\ttcp: layers.TCP{\n\t\t\t\t\t\tSrcPort:   53,\n\t\t\t\t\t\tDstPort:   54842,\n\t\t\t\t\t\tSeq:       3465787765,\n\t\t\t\t\t\tAck:       374511119,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t\t\t},\n\t\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\t\tTimestamp: time.Unix(1432538521, 590332000),\n\t\t\t\t\t},\n\t\t\t\t\texpected: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdir:     TCPDirClientToServer,\n\t\t\t\t\tnextSeq: 37451116, // this is the next expected sequence.\n\t\t\t\t\ttcp: layers.TCP{\n\t\t\t\t\t\tSrcPort:   35721,\n\t\t\t\t\t\tDstPort:   80,\n\t\t\t\t\t\tSeq:       374511116,\n\t\t\t\t\t\tAck:       0,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t\t\t},\n\t\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\t\tTimestamp: time.Unix(1432538521, 566690000),\n\t\t\t\t\t},\n\t\t\t\t\texpected: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdir:     TCPDirClientToServer,\n\t\t\t\t\tnextSeq: 374511119,\n\t\t\t\t\ttcp: layers.TCP{\n\t\t\t\t\t\tACK:       true,\n\t\t\t\t\t\tSrcPort:   54842,\n\t\t\t\t\t\tDstPort:   53,\n\t\t\t\t\t\tSeq:       374511119,\n\t\t\t\t\t\tAck:       3465787766,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{2, 3, 4}},\n\t\t\t\t\t},\n\t\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\t\tTimestamp: time.Unix(1432538521, 590346000),\n\t\t\t\t\t},\n\t\t\t\t\texpected: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdir:     TCPDirClientToServer,\n\t\t\t\t\tnextSeq: 374511122, // 10 bytes skipped\n\t\t\t\t\ttcp: layers.TCP{\n\t\t\t\t\t\tACK:       true,\n\t\t\t\t\t\tSrcPort:   54842,\n\t\t\t\t\t\tDstPort:   53,\n\t\t\t\t\t\tSeq:       374511132,\n\t\t\t\t\t\tAck:       3465787766,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{22, 33, 44}},\n\t\t\t\t\t},\n\t\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\t\tTimestamp: time.Unix(1432538521, 590346000),\n\t\t\t\t\t},\n\t\t\t\t\texpected: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdir:     TCPDirClientToServer,\n\t\t\t\t\tnextSeq: 374511132,\n\t\t\t\t\ttcp: layers.TCP{\n\t\t\t\t\t\tACK:       true,\n\t\t\t\t\t\tSrcPort:   54842,\n\t\t\t\t\t\tDstPort:   53,\n\t\t\t\t\t\tSeq:       374511119, // retransmission of reassembled data.\n\t\t\t\t\t\tAck:       3465787766,\n\t\t\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{2, 3, 4}},\n\t\t\t\t\t},\n\t\t\t\t\tci: gopacket.CaptureInfo{\n\t\t\t\t\t\tTimestamp: time.Unix(1432538521, 590346000),\n\t\t\t\t\t},\n\t\t\t\t\texpected: false,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t} {\n\t\ttestCheckOptions(t, test.title, test.sequence)\n\t}\n}\n"
  },
  {
    "path": "routing/common.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage routing\n\nimport (\n\t\"net\"\n)\n\n// Router implements simple IPv4/IPv6 routing based on the kernel's routing\n// table.  This routing library has very few features and may actually route\n// incorrectly in some cases, but it should work the majority of the time.\ntype Router interface {\n\t// Route returns where to route a packet based on the packet's source\n\t// and destination IP address.\n\t//\n\t// Callers may pass in nil for src, in which case the src is treated as\n\t// either 0.0.0.0 or ::, depending on whether dst is a v4 or v6 address.\n\t//\n\t// It returns the interface on which to send the packet, the gateway IP\n\t// to send the packet to (if necessary), the preferred src IP to use (if\n\t// available).  If the preferred src address is not given in the routing\n\t// table, the first IP address of the interface is provided.\n\t//\n\t// If an error is encountered, iface, geteway, and\n\t// preferredSrc will be nil, and err will be set.\n\tRoute(dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error)\n\n\t// RouteWithSrc routes based on source information as well as destination\n\t// information.  Either or both of input/src can be nil.  If both are, this\n\t// should behave exactly like Route(dst)\n\tRouteWithSrc(input net.HardwareAddr, src, dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error)\n}\n"
  },
  {
    "path": "routing/other.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build !linux\n\n// Package routing is currently only supported in Linux, but the build system requires a valid go file for all architectures.\n\npackage routing\n\nfunc New() (Router, error) {\n\tpanic(\"router only implemented in linux\")\n}\n"
  },
  {
    "path": "routing/routing.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build linux\n\n// Package routing provides a very basic but mostly functional implementation of\n// a routing table for IPv4/IPv6 addresses.  It uses a routing table pulled from\n// the kernel via netlink to find the correct interface, gateway, and preferred\n// source IP address for packets destined to a particular location.\n//\n// The routing package is meant to be used with applications that are sending\n// raw packet data, which don't have the benefit of having the kernel route\n// packets for them.\npackage routing\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"sort\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// Pulled from http://man7.org/linux/man-pages/man7/rtnetlink.7.html\n// See the section on RTM_NEWROUTE, specifically 'struct rtmsg'.\ntype routeInfoInMemory struct {\n\tFamily byte\n\tDstLen byte\n\tSrcLen byte\n\tTOS    byte\n\n\tTable    byte\n\tProtocol byte\n\tScope    byte\n\tType     byte\n\n\tFlags uint32\n}\n\n// rtInfo contains information on a single route.\ntype rtInfo struct {\n\tSrc, Dst         *net.IPNet\n\tGateway, PrefSrc net.IP\n\t// We currently ignore the InputIface.\n\tInputIface, OutputIface uint32\n\tPriority                uint32\n}\n\n// routeSlice implements sort.Interface to sort routes by Priority.\ntype routeSlice []*rtInfo\n\nfunc (r routeSlice) Len() int {\n\treturn len(r)\n}\nfunc (r routeSlice) Less(i, j int) bool {\n\treturn r[i].Priority < r[j].Priority\n}\nfunc (r routeSlice) Swap(i, j int) {\n\tr[i], r[j] = r[j], r[i]\n}\n\ntype router struct {\n\tifaces map[int]*net.Interface\n\taddrs  map[int]ipAddrs\n\tv4, v6 routeSlice\n}\n\nfunc (r *router) String() string {\n\tstrs := []string{\"ROUTER\", \"--- V4 ---\"}\n\tfor _, route := range r.v4 {\n\t\tstrs = append(strs, fmt.Sprintf(\"%+v\", *route))\n\t}\n\tstrs = append(strs, \"--- V6 ---\")\n\tfor _, route := range r.v6 {\n\t\tstrs = append(strs, fmt.Sprintf(\"%+v\", *route))\n\t}\n\treturn strings.Join(strs, \"\\n\")\n}\n\ntype ipAddrs struct {\n\tv4, v6 net.IP\n}\n\nfunc (r *router) Route(dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error) {\n\treturn r.RouteWithSrc(nil, nil, dst)\n}\n\nfunc (r *router) RouteWithSrc(input net.HardwareAddr, src, dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error) {\n\tvar ifaceIndex int\n\tswitch {\n\tcase dst.To4() != nil:\n\t\tifaceIndex, gateway, preferredSrc, err = r.route(r.v4, input, src, dst)\n\tcase dst.To16() != nil:\n\t\tifaceIndex, gateway, preferredSrc, err = r.route(r.v6, input, src, dst)\n\tdefault:\n\t\terr = errors.New(\"IP is not valid as IPv4 or IPv6\")\n\t}\n\n\tif err != nil {\n\t\treturn\n\t}\n\n\tiface = r.ifaces[ifaceIndex]\n\n\tif preferredSrc == nil {\n\t\tswitch {\n\t\tcase dst.To4() != nil:\n\t\t\tpreferredSrc = r.addrs[ifaceIndex].v4\n\t\tcase dst.To16() != nil:\n\t\t\tpreferredSrc = r.addrs[ifaceIndex].v6\n\t\t}\n\t}\n\treturn\n}\n\nfunc (r *router) route(routes routeSlice, input net.HardwareAddr, src, dst net.IP) (iface int, gateway, preferredSrc net.IP, err error) {\n\tvar inputIndex uint32\n\tif input != nil {\n\t\tfor i, iface := range r.ifaces {\n\t\t\tif bytes.Equal(input, iface.HardwareAddr) {\n\t\t\t\tinputIndex = uint32(i)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tvar defaultGateway *rtInfo = nil\n\tfor _, rt := range routes {\n\t\tif rt.InputIface != 0 && rt.InputIface != inputIndex {\n\t\t\tcontinue\n\t\t}\n\t\tif rt.Src == nil && rt.Dst == nil {\n\t\t\tdefaultGateway = rt\n\t\t\tcontinue\n\t\t}\n\t\tif rt.Src != nil && !rt.Src.Contains(src) {\n\t\t\tcontinue\n\t\t}\n\t\tif rt.Dst != nil && !rt.Dst.Contains(dst) {\n\t\t\tcontinue\n\t\t}\n\t\treturn int(rt.OutputIface), rt.Gateway, rt.PrefSrc, nil\n\t}\n\n\tif defaultGateway != nil {\n\t\treturn int(defaultGateway.OutputIface), defaultGateway.Gateway, defaultGateway.PrefSrc, nil\n\t}\n\terr = fmt.Errorf(\"no route found for %v\", dst)\n\treturn\n}\n\n// New creates a new router object.  The router returned by New currently does\n// not update its routes after construction... care should be taken for\n// long-running programs to call New() regularly to take into account any\n// changes to the routing table which have occurred since the last New() call.\nfunc New() (Router, error) {\n\trtr := &router{\n\t\tifaces: make(map[int]*net.Interface),\n\t\taddrs:  make(map[int]ipAddrs),\n\t}\n\ttab, err := syscall.NetlinkRIB(syscall.RTM_GETROUTE, syscall.AF_UNSPEC)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmsgs, err := syscall.ParseNetlinkMessage(tab)\n\tif err != nil {\n\t\treturn nil, err\n\t}\nloop:\n\tfor _, m := range msgs {\n\t\tswitch m.Header.Type {\n\t\tcase syscall.NLMSG_DONE:\n\t\t\tbreak loop\n\t\tcase syscall.RTM_NEWROUTE:\n\t\t\trt := (*routeInfoInMemory)(unsafe.Pointer(&m.Data[0]))\n\t\t\trouteInfo := rtInfo{}\n\t\t\tattrs, err := syscall.ParseNetlinkRouteAttr(&m)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tswitch rt.Family {\n\t\t\tcase syscall.AF_INET:\n\t\t\t\trtr.v4 = append(rtr.v4, &routeInfo)\n\t\t\tcase syscall.AF_INET6:\n\t\t\t\trtr.v6 = append(rtr.v6, &routeInfo)\n\t\t\tdefault:\n\t\t\t\tcontinue loop\n\t\t\t}\n\t\t\tfor _, attr := range attrs {\n\t\t\t\tswitch attr.Attr.Type {\n\t\t\t\tcase syscall.RTA_DST:\n\t\t\t\t\trouteInfo.Dst = &net.IPNet{\n\t\t\t\t\t\tIP:   net.IP(attr.Value),\n\t\t\t\t\t\tMask: net.CIDRMask(int(rt.DstLen), len(attr.Value)*8),\n\t\t\t\t\t}\n\t\t\t\tcase syscall.RTA_SRC:\n\t\t\t\t\trouteInfo.Src = &net.IPNet{\n\t\t\t\t\t\tIP:   net.IP(attr.Value),\n\t\t\t\t\t\tMask: net.CIDRMask(int(rt.SrcLen), len(attr.Value)*8),\n\t\t\t\t\t}\n\t\t\t\tcase syscall.RTA_GATEWAY:\n\t\t\t\t\trouteInfo.Gateway = net.IP(attr.Value)\n\t\t\t\tcase syscall.RTA_PREFSRC:\n\t\t\t\t\trouteInfo.PrefSrc = net.IP(attr.Value)\n\t\t\t\tcase syscall.RTA_IIF:\n\t\t\t\t\trouteInfo.InputIface = *(*uint32)(unsafe.Pointer(&attr.Value[0]))\n\t\t\t\tcase syscall.RTA_OIF:\n\t\t\t\t\trouteInfo.OutputIface = *(*uint32)(unsafe.Pointer(&attr.Value[0]))\n\t\t\t\tcase syscall.RTA_PRIORITY:\n\t\t\t\t\trouteInfo.Priority = *(*uint32)(unsafe.Pointer(&attr.Value[0]))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tsort.Sort(rtr.v4)\n\tsort.Sort(rtr.v6)\n\tifaces, err := net.Interfaces()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, tmp := range ifaces {\n\t\tiface := tmp\n\t\trtr.ifaces[iface.Index] = &iface\n\t\tvar addrs ipAddrs\n\t\tifaceAddrs, err := iface.Addrs()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor _, addr := range ifaceAddrs {\n\t\t\tif inet, ok := addr.(*net.IPNet); ok {\n\t\t\t\t// Go has a nasty habit of giving you IPv4s as ::ffff:1.2.3.4 instead of 1.2.3.4.\n\t\t\t\t// We want to use mapped v4 addresses as v4 preferred addresses, never as v6\n\t\t\t\t// preferred addresses.\n\t\t\t\tif v4 := inet.IP.To4(); v4 != nil {\n\t\t\t\t\tif addrs.v4 == nil {\n\t\t\t\t\t\taddrs.v4 = v4\n\t\t\t\t\t}\n\t\t\t\t} else if addrs.v6 == nil {\n\t\t\t\t\taddrs.v6 = inet.IP\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\trtr.addrs[iface.Index] = addrs\n\t}\n\treturn rtr, nil\n}\n"
  },
  {
    "path": "routing/routing_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// +build linux\n\npackage routing\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"runtime\"\n\t\"sort\"\n\t\"testing\"\n\n\t\"github.com/vishvananda/netlink\"\n\t\"github.com/vishvananda/netns\"\n)\n\nfunc TestPrivateRoute(t *testing.T) {\n\ttests := []struct {\n\t\tname                          string\n\t\trouter                        router\n\t\troutes                        routeSlice\n\t\tinput                         net.HardwareAddr\n\t\tsrc, dst                      net.IP\n\t\twantIface                     int\n\t\twantGateway, wantPreferredSrc net.IP\n\t\twantErr                       error\n\t}{\n\t\t{\n\t\t\tname: \"only static routes\",\n\t\t\trouter: router{\n\t\t\t\tifaces: map[int]*net.Interface{\n\t\t\t\t\t1: {\n\t\t\t\t\t\tIndex:        1,\n\t\t\t\t\t\tMTU:          1500,\n\t\t\t\t\t\tName:         \"eth0\",\n\t\t\t\t\t\tHardwareAddr: net.HardwareAddr{0x54, 0x52, 0x00, 0x00, 0x00, 0x01},\n\t\t\t\t\t\tFlags:        net.FlagUp,\n\t\t\t\t\t},\n\t\t\t\t\t2: {\n\t\t\t\t\t\tIndex:        2,\n\t\t\t\t\t\tMTU:          1500,\n\t\t\t\t\t\tName:         \"eth1\",\n\t\t\t\t\t\tHardwareAddr: net.HardwareAddr{0x54, 0x52, 0x00, 0x00, 0x00, 0x02},\n\t\t\t\t\t\tFlags:        net.FlagUp,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\taddrs: map[int]ipAddrs{\n\t\t\t\t\t1: {\n\t\t\t\t\t\tv4: net.ParseIP(\"192.168.10.1/24\"),\n\t\t\t\t\t},\n\t\t\t\t\t2: {\n\t\t\t\t\t\tv4: net.ParseIP(\"192.168.20.1/24\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\troutes: []*rtInfo{\n\t\t\t\t{\n\t\t\t\t\tDst: &net.IPNet{\n\t\t\t\t\t\tIP:   net.ParseIP(\"192.168.10.0\"),\n\t\t\t\t\t\tMask: net.IPv4Mask(255, 255, 255, 0),\n\t\t\t\t\t},\n\t\t\t\t\tPrefSrc:     net.ParseIP(\"192.168.10.1\"),\n\t\t\t\t\tOutputIface: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tDst: &net.IPNet{\n\t\t\t\t\t\tIP:   net.ParseIP(\"192.168.20.0\"),\n\t\t\t\t\t\tMask: net.IPv4Mask(255, 255, 255, 0),\n\t\t\t\t\t},\n\t\t\t\t\tPrefSrc:     net.ParseIP(\"192.168.20.1\"),\n\t\t\t\t\tOutputIface: 2,\n\t\t\t\t},\n\t\t\t},\n\t\t\tinput:            net.HardwareAddr{0x54, 0x52, 0x00, 0x00, 0x00, 0x01},\n\t\t\tsrc:              net.ParseIP(\"192.168.10.1\"),\n\t\t\tdst:              net.ParseIP(\"192.168.20.1\"),\n\t\t\twantIface:        2,\n\t\t\twantGateway:      nil,\n\t\t\twantPreferredSrc: net.ParseIP(\"192.168.20.1\"),\n\t\t\twantErr:          nil,\n\t\t},\n\t\t{\n\t\t\tname: \"not exists route with default gateway\",\n\t\t\trouter: router{\n\t\t\t\tifaces: map[int]*net.Interface{\n\t\t\t\t\t1: {\n\t\t\t\t\t\tIndex:        1,\n\t\t\t\t\t\tMTU:          1500,\n\t\t\t\t\t\tName:         \"eth0\",\n\t\t\t\t\t\tHardwareAddr: net.HardwareAddr{0x54, 0x52, 0x00, 0x00, 0x00, 0x01},\n\t\t\t\t\t\tFlags:        net.FlagUp,\n\t\t\t\t\t},\n\t\t\t\t\t2: {\n\t\t\t\t\t\tIndex:        2,\n\t\t\t\t\t\tMTU:          1500,\n\t\t\t\t\t\tName:         \"eth1\",\n\t\t\t\t\t\tHardwareAddr: net.HardwareAddr{0x54, 0x52, 0x00, 0x00, 0x00, 0x02},\n\t\t\t\t\t\tFlags:        net.FlagUp,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\taddrs: map[int]ipAddrs{\n\t\t\t\t\t1: {\n\t\t\t\t\t\tv4: net.ParseIP(\"192.168.10.1/24\"),\n\t\t\t\t\t},\n\t\t\t\t\t2: {\n\t\t\t\t\t\tv4: net.ParseIP(\"192.168.20.1/24\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\troutes: []*rtInfo{\n\t\t\t\t{\n\t\t\t\t\tGateway:     net.ParseIP(\"192.168.20.254\"),\n\t\t\t\t\tPrefSrc:     net.ParseIP(\"192.168.20.1\"),\n\t\t\t\t\tOutputIface: 2,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tDst: &net.IPNet{\n\t\t\t\t\t\tIP:   net.ParseIP(\"192.168.10.0\"),\n\t\t\t\t\t\tMask: net.IPv4Mask(255, 255, 255, 0),\n\t\t\t\t\t},\n\t\t\t\t\tPrefSrc:     net.ParseIP(\"192.168.10.1\"),\n\t\t\t\t\tOutputIface: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tDst: &net.IPNet{\n\t\t\t\t\t\tIP:   net.ParseIP(\"192.168.20.0\"),\n\t\t\t\t\t\tMask: net.IPv4Mask(255, 255, 255, 0),\n\t\t\t\t\t},\n\t\t\t\t\tPrefSrc:     net.ParseIP(\"192.168.20.1\"),\n\t\t\t\t\tOutputIface: 2,\n\t\t\t\t},\n\t\t\t},\n\t\t\tinput:            net.HardwareAddr{0x54, 0x52, 0x00, 0x00, 0x00, 0x01},\n\t\t\tsrc:              net.ParseIP(\"192.168.10.1\"),\n\t\t\tdst:              net.ParseIP(\"192.168.30.2\"),\n\t\t\twantIface:        2,\n\t\t\twantGateway:      net.ParseIP(\"192.168.20.254\"),\n\t\t\twantPreferredSrc: net.ParseIP(\"192.168.20.1\"),\n\t\t\twantErr:          nil,\n\t\t},\n\t\t{\n\t\t\tname: \"exists route with default gateway\",\n\t\t\trouter: router{\n\t\t\t\tifaces: map[int]*net.Interface{\n\t\t\t\t\t1: {\n\t\t\t\t\t\tIndex:        1,\n\t\t\t\t\t\tMTU:          1500,\n\t\t\t\t\t\tName:         \"eth0\",\n\t\t\t\t\t\tHardwareAddr: net.HardwareAddr{0x54, 0x52, 0x00, 0x00, 0x00, 0x01},\n\t\t\t\t\t\tFlags:        net.FlagUp,\n\t\t\t\t\t},\n\t\t\t\t\t2: {\n\t\t\t\t\t\tIndex:        2,\n\t\t\t\t\t\tMTU:          1500,\n\t\t\t\t\t\tName:         \"eth1\",\n\t\t\t\t\t\tHardwareAddr: net.HardwareAddr{0x54, 0x52, 0x00, 0x00, 0x00, 0x02},\n\t\t\t\t\t\tFlags:        net.FlagUp,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\taddrs: map[int]ipAddrs{\n\t\t\t\t\t1: {\n\t\t\t\t\t\tv4: net.ParseIP(\"192.168.10.1/24\"),\n\t\t\t\t\t},\n\t\t\t\t\t2: {\n\t\t\t\t\t\tv4: net.ParseIP(\"192.168.20.1/24\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\troutes: []*rtInfo{\n\t\t\t\t{\n\t\t\t\t\tGateway:     net.ParseIP(\"192.168.20.254\"),\n\t\t\t\t\tPrefSrc:     net.ParseIP(\"192.168.20.1\"),\n\t\t\t\t\tOutputIface: 2,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tDst: &net.IPNet{\n\t\t\t\t\t\tIP:   net.ParseIP(\"192.168.10.0\"),\n\t\t\t\t\t\tMask: net.IPv4Mask(255, 255, 255, 0),\n\t\t\t\t\t},\n\t\t\t\t\tPrefSrc:     net.ParseIP(\"192.168.10.1\"),\n\t\t\t\t\tOutputIface: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tDst: &net.IPNet{\n\t\t\t\t\t\tIP:   net.ParseIP(\"192.168.20.0\"),\n\t\t\t\t\t\tMask: net.IPv4Mask(255, 255, 255, 0),\n\t\t\t\t\t},\n\t\t\t\t\tPrefSrc:     net.ParseIP(\"192.168.20.1\"),\n\t\t\t\t\tOutputIface: 2,\n\t\t\t\t},\n\t\t\t},\n\t\t\tinput:            net.HardwareAddr{0x54, 0x52, 0x00, 0x00, 0x00, 0x01},\n\t\t\tsrc:              net.ParseIP(\"192.168.10.1\"),\n\t\t\tdst:              net.ParseIP(\"192.168.20.2\"),\n\t\t\twantIface:        2,\n\t\t\twantGateway:      nil,\n\t\t\twantPreferredSrc: net.ParseIP(\"192.168.20.1\"),\n\t\t\twantErr:          nil,\n\t\t},\n\t\t{\n\t\t\tname: \"not exists route without default gateway\",\n\t\t\trouter: router{\n\t\t\t\tifaces: map[int]*net.Interface{\n\t\t\t\t\t1: {\n\t\t\t\t\t\tIndex:        1,\n\t\t\t\t\t\tMTU:          1500,\n\t\t\t\t\t\tName:         \"eth0\",\n\t\t\t\t\t\tHardwareAddr: net.HardwareAddr{0x54, 0x52, 0x00, 0x00, 0x00, 0x01},\n\t\t\t\t\t\tFlags:        net.FlagUp,\n\t\t\t\t\t},\n\t\t\t\t\t2: {\n\t\t\t\t\t\tIndex:        2,\n\t\t\t\t\t\tMTU:          1500,\n\t\t\t\t\t\tName:         \"eth1\",\n\t\t\t\t\t\tHardwareAddr: net.HardwareAddr{0x54, 0x52, 0x00, 0x00, 0x00, 0x02},\n\t\t\t\t\t\tFlags:        net.FlagUp,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\taddrs: map[int]ipAddrs{\n\t\t\t\t\t1: {\n\t\t\t\t\t\tv4: net.ParseIP(\"192.168.10.1/24\"),\n\t\t\t\t\t},\n\t\t\t\t\t2: {\n\t\t\t\t\t\tv4: net.ParseIP(\"192.168.20.1/24\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\troutes: []*rtInfo{\n\t\t\t\t{\n\t\t\t\t\tDst: &net.IPNet{\n\t\t\t\t\t\tIP:   net.ParseIP(\"192.168.10.0\"),\n\t\t\t\t\t\tMask: net.IPv4Mask(255, 255, 255, 0),\n\t\t\t\t\t},\n\t\t\t\t\tPrefSrc:     net.ParseIP(\"192.168.10.1\"),\n\t\t\t\t\tOutputIface: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tDst: &net.IPNet{\n\t\t\t\t\t\tIP:   net.ParseIP(\"192.168.20.0\"),\n\t\t\t\t\t\tMask: net.IPv4Mask(255, 255, 255, 0),\n\t\t\t\t\t},\n\t\t\t\t\tPrefSrc:     net.ParseIP(\"192.168.20.1\"),\n\t\t\t\t\tOutputIface: 2,\n\t\t\t\t},\n\t\t\t},\n\t\t\tinput:            net.HardwareAddr{0x54, 0x52, 0x00, 0x00, 0x00, 0x01},\n\t\t\tsrc:              net.ParseIP(\"192.168.10.1\"),\n\t\t\tdst:              net.ParseIP(\"192.168.30.2\"),\n\t\t\twantIface:        2,\n\t\t\twantGateway:      nil,\n\t\t\twantPreferredSrc: nil,\n\t\t\twantErr:          fmt.Errorf(\"no route found for 192.168.30.2\"),\n\t\t},\n\t}\n\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tiface, gateway, preferredSrc, err := tt.router.route(tt.routes, tt.input, tt.src, tt.dst)\n\t\t\tif tt.wantErr != nil {\n\t\t\t\tif err != nil && tt.wantErr.Error() == err.Error() {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tt.Errorf(\"route() illegal return value `err`:\\ngot\t:%#v\\n\\nwant:\t%#v\\n\\n\", err, tt.wantErr)\n\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"route() illegal return value `err`:\\ngot\t:%#v\\n\\nwant:\tnil\\n\\n\", err)\n\t\t\t}\n\n\t\t\tif tt.wantIface != iface {\n\t\t\t\tt.Errorf(\"route() illegal return value `iface`:\\ngot\t:%d\\n\\nwant:\t%d\\n\\n\", iface, tt.wantIface)\n\t\t\t}\n\n\t\t\tif !tt.wantGateway.Equal(gateway) {\n\t\t\t\tt.Errorf(\"route() illegal return value `gateway`:\\ngot\t:%#v\\n\\nwant\t:%#v\\n\\n\", gateway, tt.wantGateway)\n\t\t\t}\n\n\t\t\tif !tt.wantPreferredSrc.Equal(preferredSrc) {\n\t\t\t\tt.Errorf(\"route() illegal return value `preferredSrc`:\\ngot\t:%#v\\n\\nwant\t:%#v\\n\\n\", preferredSrc, tt.wantPreferredSrc)\n\t\t\t}\n\n\t\t})\n\t}\n\n}\n\nfunc TestRouting(t *testing.T) {\n\truntime.LockOSThread()\n\tdefer runtime.UnlockOSThread()\n\n\t// parent network namespace\n\ttestNs, _ := netns.New()\n\tdefer testNs.Close()\n\n\t// child network namespace\n\tnewns, _ := netns.New()\n\tdefer newns.Close()\n\n\tveth0 := &netlink.Veth{\n\t\tLinkAttrs: netlink.LinkAttrs{\n\t\t\tName: \"veth0\",\n\t\t},\n\t\tPeerName: \"veth0-peer\",\n\t}\n\n\tveth1 := &netlink.Veth{\n\t\tLinkAttrs: netlink.LinkAttrs{\n\t\t\tName: \"veth1\",\n\t\t},\n\t\tPeerName: \"veth1-peer\",\n\t}\n\n\t// ip link add veth0 type veth peer name veth0-peer\n\tif err := netlink.LinkAdd(veth0); err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: link add veth0 type veth peer name veth0-peer: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\n\t// ip link add veth1 type veth peer name veth1-peer\n\tif err := netlink.LinkAdd(veth1); err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: link add veth1 type veth peer name veth1-peer: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\n\t// ip address add 192.168.10.1/24 dev veth0\n\tveth0Addr, err := netlink.ParseAddr(\"192.168.10.1/24\")\n\tif err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: parse addr 192.168.10.1/24: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\tif err := netlink.AddrAdd(veth0, veth0Addr); err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: address add 192.168.10.1/24 dev veth0: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\n\t// ip address add 192.168.20.1/24 dev veth1\n\tveth1Addr, err := netlink.ParseAddr(\"192.168.20.1/24\")\n\tif err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: parse addr 192.168.20.1/24: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\tif err := netlink.AddrAdd(veth1, veth1Addr); err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: parse addr 192.168.20.1/24 dev veth1: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\n\t// ip link set up veth0\n\tif err := netlink.LinkSetUp(veth0); err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: link set up veth0: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\n\t// ip link set up veth1\n\tif err := netlink.LinkSetUp(veth1); err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: link set up veth1: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\n\tveth0Peer, err := netlink.LinkByName(\"veth0-peer\")\n\tif err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: link by name veth0-peer: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\t// ip link set up veth0-peer\n\tif err := netlink.LinkSetUp(veth0Peer); err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: link set up veth0-peer: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\t// ip link set dev veth0-peer netns {testNs}\n\tif err := netlink.LinkSetNsFd(veth0Peer, int(testNs)); err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: link set dev veth0-peer netns testNs: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\n\tveth1Peer, err := netlink.LinkByName(\"veth1-peer\")\n\tif err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: link by name veth1-peer: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\t// ip link set up veth1-peer\n\tif err := netlink.LinkSetUp(veth1Peer); err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: link set up veth1-peer: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\t// ip link set dev veth1-peer netns {testNs}\n\tif err := netlink.LinkSetNsFd(veth1Peer, int(testNs)); err != nil {\n\t\tt.Errorf(\"\\nFailed SetUp Test Environment: link set dev veth1-peer netns testNs: %#v\\n\\n\", err)\n\t\treturn\n\t}\n\n\t/**\n\t * routing table\n\t * 192.168.10.0/24 dev veth0 proto kernel scope link src 192.168.10.1\n\t * 192.168.20.0/24 dev veth1 proto kernel scope link src 192.168.20.1\n\t */\n\n\tt.Run(\"exists route without default gateway\", func(t *testing.T) {\n\t\tnetns.Set(newns)\n\t\tr, err := New()\n\t\tif err != nil {\n\t\t\tt.Errorf(\"\\ngot:\t%#v\\nwant:\tnil\", err)\n\t\t\treturn\n\t\t}\n\n\t\tiface, _, _, err := r.Route(net.ParseIP(\"192.168.10.2\"))\n\t\tif err != nil {\n\t\t\tt.Errorf(\"\\ngot:\t%#v\\nwant:\tnil\", err)\n\t\t}\n\n\t\tif veth0.Index != iface.Index {\n\t\t\tt.Errorf(\"\\ngot:\t%d\\nwant:\t%d\\n\\n\", iface.Index, veth0.Index)\n\t\t}\n\n\t\tiface, _, _, err = r.Route(net.ParseIP(\"192.168.20.2\"))\n\t\tif err != nil {\n\t\t\tt.Errorf(\"\\ngot:\t%#v\\nwant:\tnil\", err)\n\t\t}\n\n\t\tif veth1.Index != iface.Index {\n\t\t\tt.Errorf(\"\\ngot:\t%d\\nwant:\t%d\\n\\n\", iface.Index, veth1.Index)\n\t\t}\n\t})\n\n\tt.Run(\"not exists route without default gateway\", func(t *testing.T) {\n\t\tnetns.Set(newns)\n\n\t\tr, err := New()\n\t\tif err != nil {\n\t\t\tt.Errorf(\"\\ngot:\t%#v\\nwant:\tnil\\n\\n\", err)\n\t\t\treturn\n\t\t}\n\n\t\tif _, _, _, err = r.Route(net.ParseIP(\"172.16.0.1\")); err == nil && err == fmt.Errorf(\"no route found for 172.16.0.1\") {\n\t\t\tt.Errorf(\"\\ngot:\t%#v\\nwant:\t%#v\\n\\n\", err, fmt.Errorf(\"no route found for 172.16.0.1\"))\n\t\t\treturn\n\t\t}\n\t})\n\n\tt.Run(\"exists route with default gateway\", func(t *testing.T) {\n\t\tnetns.Set(newns)\n\n\t\tnetlink.RouteAdd(&netlink.Route{\n\t\t\tGw:        net.ParseIP(\"192.168.20.254\"),\n\t\t\tLinkIndex: veth1.Index,\n\t\t})\n\t\tdefer func() {\n\t\t\t// teardown\n\t\t\tnetlink.RouteDel(&netlink.Route{\n\t\t\t\tGw:        net.ParseIP(\"192.168.20.254\"),\n\t\t\t\tLinkIndex: veth1.Index,\n\t\t\t})\n\t\t}()\n\n\t\tr, err := New()\n\t\tif err != nil {\n\t\t\tt.Errorf(\"\\ngot:\t%#v\\nwant:\tnil\\n\\n\", err)\n\t\t\treturn\n\t\t}\n\n\t\tiface, gateway, prefSrc, err := r.Route(net.ParseIP(\"192.168.10.2\"))\n\t\tif err != nil {\n\t\t\tt.Errorf(\"\\ngot:\t%#v\\nwant:\tnil\\n\\n\", err)\n\t\t\treturn\n\t\t}\n\n\t\tif veth0.Index != iface.Index {\n\t\t\tt.Errorf(\"\\ngot:\t%d\\nwant:\t%d\\n\\n\", iface.Index, veth0.Index)\n\t\t}\n\n\t\tif gateway != nil {\n\t\t\tt.Errorf(\"\\ngot:\t%#v\\nwant:\tnil\\n\\n\", gateway)\n\t\t}\n\n\t\tif !prefSrc.Equal(net.ParseIP(\"192.168.10.1\")) {\n\t\t\tt.Errorf(\"\\ngot:\t%#v\\nwant:\t%#v\\n\\n\", prefSrc, net.ParseIP(\"192.168.10.1\"))\n\t\t}\n\t})\n\n\tt.Run(\"not exists route with default gateway\", func(t *testing.T) {\n\t\tnetns.Set(newns)\n\n\t\tnetlink.RouteAdd(&netlink.Route{\n\t\t\tGw:        net.ParseIP(\"192.168.20.254\"),\n\t\t\tLinkIndex: veth1.Index,\n\t\t})\n\t\tdefer func() {\n\t\t\t// teardown\n\t\t\tnetlink.RouteDel(&netlink.Route{\n\t\t\t\tGw:        net.ParseIP(\"192.168.20.254\"),\n\t\t\t\tLinkIndex: veth1.Index,\n\t\t\t})\n\t\t}()\n\n\t\tr, err := New()\n\t\tif err != nil {\n\t\t\tt.Errorf(\"\\ngot:\t%#v\\nwant:\tnil\\n\\n\", err)\n\t\t\treturn\n\t\t}\n\n\t\tiface, gateway, prefSrc, err := r.Route(net.ParseIP(\"172.16.0.1\"))\n\t\tif err != nil {\n\t\t\tt.Errorf(\"\\ngot:\t%#v\\nwant:\tnil\\n\\n\", err)\n\t\t\treturn\n\t\t}\n\n\t\tif veth1.Index != iface.Index {\n\t\t\tt.Errorf(\"\\ngot:\t%d\\nwant:\t%d\\n\\n\", iface.Index, veth1.Index)\n\t\t}\n\n\t\tif !gateway.Equal(net.ParseIP(\"192.168.20.254\")) {\n\t\t\tt.Errorf(\"\\ngot:\t%#v\\nwant:\t%#v\\n\\n\", gateway, net.ParseIP(\"192.168.20.254\"))\n\t\t}\n\n\t\tif !prefSrc.Equal(net.ParseIP(\"192.168.20.1\")) {\n\t\t\tt.Errorf(\"\\ngot:\t%#v\\nwant:\t%#v\\n\\n\", prefSrc, net.ParseIP(\"192.168.20.1\"))\n\t\t}\n\t})\n}\n\nvar testRouter router\n\nfunc init() {\n\ttestRouter = router{ifaces: make(map[int]*net.Interface), addrs: make(map[int]ipAddrs)}\n\t// Configure default route\n\tdefaultHW, _ := net.ParseMAC(\"01:23:45:67:89:ab\")\n\tdefaultInterface := net.Interface{Index: 5, MTU: 1500, Name: \"Default\", HardwareAddr: defaultHW, Flags: 1}\n\ttestRouter.ifaces[2] = &defaultInterface\n\ttestRouter.addrs[2] = ipAddrs{v4: net.IPv4(192, 168, 1, 2)}\n\tdefaultRoute := &rtInfo{Gateway: net.IPv4(192, 168, 1, 1), InputIface: 0, OutputIface: 2, Priority: 600}\n\ttestRouter.v4 = append(testRouter.v4, defaultRoute)\n\t// Configure local route\n\tlocalHW, _ := net.ParseMAC(\"01:23:45:67:89:ac\")\n\tlocalInterface := net.Interface{Index: 1, MTU: 1500, Name: \"Local\", HardwareAddr: localHW, Flags: 1}\n\ttestRouter.ifaces[1] = &localInterface\n\ttestRouter.addrs[1] = ipAddrs{v4: net.IPv4(10, 0, 0, 2)}\n\tlocalRoute := &rtInfo{Dst: &net.IPNet{IP: net.IPv4(10, 0, 0, 0), Mask: net.CIDRMask(8, 32)},\n\t\tGateway: net.IPv4(10, 0, 0, 1), InputIface: 0, OutputIface: 1, Priority: 300}\n\ttestRouter.v4 = append(testRouter.v4, localRoute)\n\tsort.Sort(testRouter.v4)\n}\n\nvar routeTests = []struct {\n\tdst       net.IP\n\tifaceName string\n}{\n\t{net.IPv4(8, 8, 8, 8), \"Default\"},\n\t{net.IPv4(192, 168, 2, 3), \"Default\"},\n\t{net.IPv4(10, 0, 0, 3), \"Local\"},\n}\n\nfunc TestRoute(t *testing.T) {\n\tfor _, tt := range routeTests {\n\t\tt.Run(tt.dst.String(), func(t *testing.T) {\n\t\t\tiface, _, _, _ := testRouter.Route(tt.dst)\n\t\t\tif tt.ifaceName != iface.Name {\n\t\t\t\tt.Fatalf(\"test %s\\n want:%s\\n got:%s\\n\", tt.dst.String(), tt.ifaceName, iface.Name)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "tcpassembly/assembly.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// Package tcpassembly provides TCP stream re-assembly.\n//\n// The tcpassembly package implements uni-directional TCP reassembly, for use in\n// packet-sniffing applications.  The caller reads packets off the wire, then\n// presents them to an Assembler in the form of gopacket layers.TCP packets\n// (github.com/google/gopacket, github.com/google/gopacket/layers).\n//\n// The Assembler uses a user-supplied\n// StreamFactory to create a user-defined Stream interface, then passes packet\n// data in stream order to that object.  A concurrency-safe StreamPool keeps\n// track of all current Streams being reassembled, so multiple Assemblers may\n// run at once to assemble packets while taking advantage of multiple cores.\npackage tcpassembly\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n\t\"log\"\n\t\"sync\"\n\t\"time\"\n)\n\nvar memLog = flag.Bool(\"assembly_memuse_log\", false, \"If true, the github.com/google/gopacket/tcpassembly library will log information regarding its memory use every once in a while.\")\nvar debugLog = flag.Bool(\"assembly_debug_log\", false, \"If true, the github.com/google/gopacket/tcpassembly library will log verbose debugging information (at least one line per packet)\")\n\nconst invalidSequence = -1\nconst uint32Size = 1 << 32\n\n// Sequence is a TCP sequence number.  It provides a few convenience functions\n// for handling TCP wrap-around.  The sequence should always be in the range\n// [0,0xFFFFFFFF]... its other bits are simply used in wrap-around calculations\n// and should never be set.\ntype Sequence int64\n\n// Difference defines an ordering for comparing TCP sequences that's safe for\n// roll-overs.  It returns:\n//    > 0 : if t comes after s\n//    < 0 : if t comes before s\n//      0 : if t == s\n// The number returned is the sequence difference, so 4.Difference(8) will\n// return 4.\n//\n// It handles rollovers by considering any sequence in the first quarter of the\n// uint32 space to be after any sequence in the last quarter of that space, thus\n// wrapping the uint32 space.\nfunc (s Sequence) Difference(t Sequence) int {\n\tif s > uint32Size-uint32Size/4 && t < uint32Size/4 {\n\t\tt += uint32Size\n\t} else if t > uint32Size-uint32Size/4 && s < uint32Size/4 {\n\t\ts += uint32Size\n\t}\n\treturn int(t - s)\n}\n\n// Add adds an integer to a sequence and returns the resulting sequence.\nfunc (s Sequence) Add(t int) Sequence {\n\treturn (s + Sequence(t)) & (uint32Size - 1)\n}\n\n// Reassembly objects are passed by an Assembler into Streams using the\n// Reassembled call.  Callers should not need to create these structs themselves\n// except for testing.\ntype Reassembly struct {\n\t// Bytes is the next set of bytes in the stream.  May be empty.\n\tBytes []byte\n\t// Skip is set to non-zero if bytes were skipped between this and the\n\t// last Reassembly.  If this is the first packet in a connection and we\n\t// didn't see the start, we have no idea how many bytes we skipped, so\n\t// we set it to -1.  Otherwise, it's set to the number of bytes skipped.\n\tSkip int\n\t// Start is set if this set of bytes has a TCP SYN accompanying it.\n\tStart bool\n\t// End is set if this set of bytes has a TCP FIN or RST accompanying it.\n\tEnd bool\n\t// Seen is the timestamp this set of bytes was pulled off the wire.\n\tSeen time.Time\n}\n\nconst pageBytes = 1900\n\n// page is used to store TCP data we're not ready for yet (out-of-order\n// packets).  Unused pages are stored in and returned from a pageCache, which\n// avoids memory allocation.  Used pages are stored in a doubly-linked list in\n// a connection.\ntype page struct {\n\tReassembly\n\tseq        Sequence\n\tindex      int\n\tprev, next *page\n\tbuf        [pageBytes]byte\n}\n\n// pageCache is a concurrency-unsafe store of page objects we use to avoid\n// memory allocation as much as we can.  It grows but never shrinks.\ntype pageCache struct {\n\tfree         []*page\n\tpcSize       int\n\tsize, used   int\n\tpages        [][]page\n\tpageRequests int64\n}\n\nconst initialAllocSize = 1024\n\nfunc newPageCache() *pageCache {\n\tpc := &pageCache{\n\t\tfree:   make([]*page, 0, initialAllocSize),\n\t\tpcSize: initialAllocSize,\n\t}\n\tpc.grow()\n\treturn pc\n}\n\n// grow exponentially increases the size of our page cache as much as necessary.\nfunc (c *pageCache) grow() {\n\tpages := make([]page, c.pcSize)\n\tc.pages = append(c.pages, pages)\n\tc.size += c.pcSize\n\tfor i := range pages {\n\t\tc.free = append(c.free, &pages[i])\n\t}\n\tif *memLog {\n\t\tlog.Println(\"PageCache: created\", c.pcSize, \"new pages\")\n\t}\n\tc.pcSize *= 2\n}\n\n// next returns a clean, ready-to-use page object.\nfunc (c *pageCache) next(ts time.Time) (p *page) {\n\tif *memLog {\n\t\tc.pageRequests++\n\t\tif c.pageRequests&0xFFFF == 0 {\n\t\t\tlog.Println(\"PageCache:\", c.pageRequests, \"requested,\", c.used, \"used,\", len(c.free), \"free\")\n\t\t}\n\t}\n\tif len(c.free) == 0 {\n\t\tc.grow()\n\t}\n\ti := len(c.free) - 1\n\tp, c.free = c.free[i], c.free[:i]\n\tp.prev = nil\n\tp.next = nil\n\tp.Reassembly = Reassembly{Bytes: p.buf[:0], Seen: ts}\n\tc.used++\n\treturn p\n}\n\n// replace replaces a page into the pageCache.\nfunc (c *pageCache) replace(p *page) {\n\tc.used--\n\tc.free = append(c.free, p)\n}\n\n// Stream is implemented by the caller to handle incoming reassembled\n// TCP data.  Callers create a StreamFactory, then StreamPool uses\n// it to create a new Stream for every TCP stream.\n//\n// assembly will, in order:\n//    1) Create the stream via StreamFactory.New\n//    2) Call Reassembled 0 or more times, passing in reassembled TCP data in order\n//    3) Call ReassemblyComplete one time, after which the stream is dereferenced by assembly.\ntype Stream interface {\n\t// Reassembled is called zero or more times.  assembly guarantees\n\t// that the set of all Reassembly objects passed in during all\n\t// calls are presented in the order they appear in the TCP stream.\n\t// Reassembly objects are reused after each Reassembled call,\n\t// so it's important to copy anything you need out of them\n\t// (specifically out of Reassembly.Bytes) that you need to stay\n\t// around after you return from the Reassembled call.\n\tReassembled([]Reassembly)\n\t// ReassemblyComplete is called when assembly decides there is\n\t// no more data for this Stream, either because a FIN or RST packet\n\t// was seen, or because the stream has timed out without any new\n\t// packet data (due to a call to FlushOlderThan).\n\tReassemblyComplete()\n}\n\n// StreamFactory is used by assembly to create a new stream for each\n// new TCP session.\ntype StreamFactory interface {\n\t// New should return a new stream for the given TCP key.\n\tNew(netFlow, tcpFlow gopacket.Flow) Stream\n}\n\nfunc (p *StreamPool) connections() []*connection {\n\tp.mu.RLock()\n\tconns := make([]*connection, 0, len(p.conns))\n\tfor _, conn := range p.conns {\n\t\tconns = append(conns, conn)\n\t}\n\tp.mu.RUnlock()\n\treturn conns\n}\n\n// FlushOptions provide options for flushing connections.\ntype FlushOptions struct {\n\tT        time.Time // If nonzero, only connections with data older than T are flushed\n\tCloseAll bool      // If true, ALL connections are closed post flush, not just those that correctly see FIN/RST.\n}\n\n// FlushWithOptions finds any streams waiting for packets older than\n// the given time, and pushes through the data they have (IE: tells\n// them to stop waiting and skip the data they're waiting for).\n//\n// Each Stream maintains a list of zero or more sets of bytes it has received\n// out-of-order.  For example, if it has processed up through sequence number\n// 10, it might have bytes [15-20), [20-25), [30,50) in its list.  Each set of\n// bytes also has the timestamp it was originally viewed.  A flush call will\n// look at the smallest subsequent set of bytes, in this case [15-20), and if\n// its timestamp is older than the passed-in time, it will push it and all\n// contiguous byte-sets out to the Stream's Reassembled function.  In this case,\n// it will push [15-20), but also [20-25), since that's contiguous.  It will\n// only push [30-50) if its timestamp is also older than the passed-in time,\n// otherwise it will wait until the next FlushOlderThan to see if bytes [25-30)\n// come in.\n//\n// If it pushes all bytes (or there were no sets of bytes to begin with)\n// AND the connection has not received any bytes since the passed-in time,\n// the connection will be closed.\n//\n// If CloseAll is set, it will close out connections that have been drained.\n// Regardless of the CloseAll setting, connections stale for the specified\n// time will be closed.\n//\n// Returns the number of connections flushed, and of those, the number closed\n// because of the flush.\nfunc (a *Assembler) FlushWithOptions(opt FlushOptions) (flushed, closed int) {\n\tconns := a.connPool.connections()\n\tcloses := 0\n\tflushes := 0\n\tfor _, conn := range conns {\n\t\tflushed := false\n\t\tconn.mu.Lock()\n\t\tif conn.closed {\n\t\t\t// Already closed connection, nothing to do here.\n\t\t\tconn.mu.Unlock()\n\t\t\tcontinue\n\t\t}\n\t\tfor conn.first != nil && conn.first.Seen.Before(opt.T) {\n\t\t\ta.skipFlush(conn)\n\t\t\tflushed = true\n\t\t\tif conn.closed {\n\t\t\t\tcloses++\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif opt.CloseAll && !conn.closed && conn.first == nil && conn.lastSeen.Before(opt.T) {\n\t\t\tflushed = true\n\t\t\ta.closeConnection(conn)\n\t\t\tcloses++\n\t\t}\n\t\tif flushed {\n\t\t\tflushes++\n\t\t}\n\t\tconn.mu.Unlock()\n\t}\n\treturn flushes, closes\n}\n\n// FlushOlderThan calls FlushWithOptions with the CloseAll option set to true.\nfunc (a *Assembler) FlushOlderThan(t time.Time) (flushed, closed int) {\n\treturn a.FlushWithOptions(FlushOptions{CloseAll: true, T: t})\n}\n\n// FlushAll flushes all remaining data into all remaining connections, closing\n// those connections.  It returns the total number of connections flushed/closed\n// by the call.\nfunc (a *Assembler) FlushAll() (closed int) {\n\tconns := a.connPool.connections()\n\tclosed = len(conns)\n\tfor _, conn := range conns {\n\t\tconn.mu.Lock()\n\t\tfor !conn.closed {\n\t\t\ta.skipFlush(conn)\n\t\t}\n\t\tconn.mu.Unlock()\n\t}\n\treturn\n}\n\ntype key [2]gopacket.Flow\n\nfunc (k *key) String() string {\n\treturn fmt.Sprintf(\"%s:%s\", k[0], k[1])\n}\n\n// StreamPool stores all streams created by Assemblers, allowing multiple\n// assemblers to work together on stream processing while enforcing the fact\n// that a single stream receives its data serially.  It is safe\n// for concurrency, usable by multiple Assemblers at once.\n//\n// StreamPool handles the creation and storage of Stream objects used by one or\n// more Assembler objects.  When a new TCP stream is found by an Assembler, it\n// creates an associated Stream by calling its StreamFactory's New method.\n// Thereafter (until the stream is closed), that Stream object will receive\n// assembled TCP data via Assembler's calls to the stream's Reassembled\n// function.\n//\n// Like the Assembler, StreamPool attempts to minimize allocation.  Unlike the\n// Assembler, though, it does have to do some locking to make sure that the\n// connection objects it stores are accessible to multiple Assemblers.\ntype StreamPool struct {\n\tconns              map[key]*connection\n\tusers              int\n\tmu                 sync.RWMutex\n\tfactory            StreamFactory\n\tfree               []*connection\n\tall                [][]connection\n\tnextAlloc          int\n\tnewConnectionCount int64\n}\n\nfunc (p *StreamPool) grow() {\n\tconns := make([]connection, p.nextAlloc)\n\tp.all = append(p.all, conns)\n\tfor i := range conns {\n\t\tp.free = append(p.free, &conns[i])\n\t}\n\tif *memLog {\n\t\tlog.Println(\"StreamPool: created\", p.nextAlloc, \"new connections\")\n\t}\n\tp.nextAlloc *= 2\n}\n\n// NewStreamPool creates a new connection pool.  Streams will\n// be created as necessary using the passed-in StreamFactory.\nfunc NewStreamPool(factory StreamFactory) *StreamPool {\n\treturn &StreamPool{\n\t\tconns:     make(map[key]*connection, initialAllocSize),\n\t\tfree:      make([]*connection, 0, initialAllocSize),\n\t\tfactory:   factory,\n\t\tnextAlloc: initialAllocSize,\n\t}\n}\n\nconst assemblerReturnValueInitialSize = 16\n\n// NewAssembler creates a new assembler.  Pass in the StreamPool\n// to use, may be shared across assemblers.\n//\n// This sets some sane defaults for the assembler options,\n// see DefaultAssemblerOptions for details.\nfunc NewAssembler(pool *StreamPool) *Assembler {\n\tpool.mu.Lock()\n\tpool.users++\n\tpool.mu.Unlock()\n\treturn &Assembler{\n\t\tret:              make([]Reassembly, assemblerReturnValueInitialSize),\n\t\tpc:               newPageCache(),\n\t\tconnPool:         pool,\n\t\tAssemblerOptions: DefaultAssemblerOptions,\n\t}\n}\n\n// DefaultAssemblerOptions provides default options for an assembler.\n// These options are used by default when calling NewAssembler, so if\n// modified before a NewAssembler call they'll affect the resulting Assembler.\n//\n// Note that the default options can result in ever-increasing memory usage\n// unless one of the Flush* methods is called on a regular basis.\nvar DefaultAssemblerOptions = AssemblerOptions{\n\tMaxBufferedPagesPerConnection: 0, // unlimited\n\tMaxBufferedPagesTotal:         0, // unlimited\n}\n\ntype connection struct {\n\tkey               key\n\tpages             int\n\tfirst, last       *page\n\tnextSeq           Sequence\n\tcreated, lastSeen time.Time\n\tstream            Stream\n\tclosed            bool\n\tmu                sync.Mutex\n}\n\nfunc (c *connection) reset(k key, s Stream, ts time.Time) {\n\tc.key = k\n\tc.pages = 0\n\tc.first, c.last = nil, nil\n\tc.nextSeq = invalidSequence\n\tc.created = ts\n\tc.stream = s\n\tc.closed = false\n}\n\n// AssemblerOptions controls the behavior of each assembler.  Modify the\n// options of each assembler you create to change their behavior.\ntype AssemblerOptions struct {\n\t// MaxBufferedPagesTotal is an upper limit on the total number of pages to\n\t// buffer while waiting for out-of-order packets.  Once this limit is\n\t// reached, the assembler will degrade to flushing every connection it\n\t// gets a packet for.  If <= 0, this is ignored.\n\tMaxBufferedPagesTotal int\n\t// MaxBufferedPagesPerConnection is an upper limit on the number of pages\n\t// buffered for a single connection.  Should this limit be reached for a\n\t// particular connection, the smallest sequence number will be flushed, along\n\t// with any contiguous data.  If <= 0, this is ignored.\n\tMaxBufferedPagesPerConnection int\n}\n\n// Assembler handles reassembling TCP streams.  It is not safe for\n// concurrency... after passing a packet in via the Assemble call, the caller\n// must wait for that call to return before calling Assemble again.  Callers can\n// get around this by creating multiple assemblers that share a StreamPool.  In\n// that case, each individual stream will still be handled serially (each stream\n// has an individual mutex associated with it), however multiple assemblers can\n// assemble different connections concurrently.\n//\n// The Assembler provides (hopefully) fast TCP stream re-assembly for sniffing\n// applications written in Go.  The Assembler uses the following methods to be\n// as fast as possible, to keep packet processing speedy:\n//\n// Avoids Lock Contention\n//\n// Assemblers locks connections, but each connection has an individual lock, and\n// rarely will two Assemblers be looking at the same connection.  Assemblers\n// lock the StreamPool when looking up connections, but they use Reader\n// locks initially, and only force a write lock if they need to create a new\n// connection or close one down.  These happen much less frequently than\n// individual packet handling.\n//\n// Each assembler runs in its own goroutine, and the only state shared between\n// goroutines is through the StreamPool.  Thus all internal Assembler state\n// can be handled without any locking.\n//\n// NOTE:  If you can guarantee that packets going to a set of Assemblers will\n// contain information on different connections per Assembler (for example,\n// they're already hashed by PF_RING hashing or some other hashing mechanism),\n// then we recommend you use a seperate StreamPool per Assembler, thus\n// avoiding all lock contention.  Only when different Assemblers could receive\n// packets for the same Stream should a StreamPool be shared between them.\n//\n// Avoids Memory Copying\n//\n// In the common case, handling of a single TCP packet should result in zero\n// memory allocations.  The Assembler will look up the connection, figure out\n// that the packet has arrived in order, and immediately pass that packet on to\n// the appropriate connection's handling code.  Only if a packet arrives out of\n// order is its contents copied and stored in memory for later.\n//\n// Avoids Memory Allocation\n//\n// Assemblers try very hard to not use memory allocation unless absolutely\n// necessary.  Packet data for sequential packets is passed directly to streams\n// with no copying or allocation.  Packet data for out-of-order packets is\n// copied into reusable pages, and new pages are only allocated rarely when the\n// page cache runs out.  Page caches are Assembler-specific, thus not used\n// concurrently and requiring no locking.\n//\n// Internal representations for connection objects are also reused over time.\n// Because of this, the most common memory allocation done by the Assembler is\n// generally what's done by the caller in StreamFactory.New.  If no allocation\n// is done there, then very little allocation is done ever, mostly to handle\n// large increases in bandwidth or numbers of connections.\n//\n// TODO:  The page caches used by an Assembler will grow to the size necessary\n// to handle a workload, and currently will never shrink.  This means that\n// traffic spikes can result in large memory usage which isn't garbage\n// collected when typical traffic levels return.\ntype Assembler struct {\n\tAssemblerOptions\n\tret      []Reassembly\n\tpc       *pageCache\n\tconnPool *StreamPool\n}\n\nfunc (p *StreamPool) newConnection(k key, s Stream, ts time.Time) (c *connection) {\n\tif *memLog {\n\t\tp.newConnectionCount++\n\t\tif p.newConnectionCount&0x7FFF == 0 {\n\t\t\tlog.Println(\"StreamPool:\", p.newConnectionCount, \"requests,\", len(p.conns), \"used,\", len(p.free), \"free\")\n\t\t}\n\t}\n\tif len(p.free) == 0 {\n\t\tp.grow()\n\t}\n\tindex := len(p.free) - 1\n\tc, p.free = p.free[index], p.free[:index]\n\tc.reset(k, s, ts)\n\treturn c\n}\n\n// getConnection returns a connection.  If end is true and a connection\n// does not already exist, returns nil.  This allows us to check for a\n// connection without actually creating one if it doesn't already exist.\nfunc (p *StreamPool) getConnection(k key, end bool, ts time.Time) *connection {\n\tp.mu.RLock()\n\tconn := p.conns[k]\n\tp.mu.RUnlock()\n\tif end || conn != nil {\n\t\treturn conn\n\t}\n\ts := p.factory.New(k[0], k[1])\n\tp.mu.Lock()\n\tconn = p.newConnection(k, s, ts)\n\tif conn2 := p.conns[k]; conn2 != nil {\n\t\tp.mu.Unlock()\n\t\treturn conn2\n\t}\n\tp.conns[k] = conn\n\tp.mu.Unlock()\n\treturn conn\n}\n\n// Assemble calls AssembleWithTimestamp with the current timestamp, useful for\n// packets being read directly off the wire.\nfunc (a *Assembler) Assemble(netFlow gopacket.Flow, t *layers.TCP) {\n\ta.AssembleWithTimestamp(netFlow, t, time.Now())\n}\n\n// AssembleWithTimestamp reassembles the given TCP packet into its appropriate\n// stream.\n//\n// The timestamp passed in must be the timestamp the packet was seen.\n// For packets read off the wire, time.Now() should be fine.  For packets read\n// from PCAP files, CaptureInfo.Timestamp should be passed in.  This timestamp\n// will affect which streams are flushed by a call to FlushOlderThan.\n//\n// Each Assemble call results in, in order:\n//\n//    zero or one calls to StreamFactory.New, creating a stream\n//    zero or one calls to Reassembled on a single stream\n//    zero or one calls to ReassemblyComplete on the same stream\nfunc (a *Assembler) AssembleWithTimestamp(netFlow gopacket.Flow, t *layers.TCP, timestamp time.Time) {\n\t// Ignore empty TCP packets\n\tif !t.SYN && !t.FIN && !t.RST && len(t.LayerPayload()) == 0 {\n\t\tif *debugLog {\n\t\t\tlog.Println(\"ignoring useless packet\")\n\t\t}\n\t\treturn\n\t}\n\n\ta.ret = a.ret[:0]\n\tkey := key{netFlow, t.TransportFlow()}\n\tvar conn *connection\n\t// This for loop handles a race condition where a connection will close, lock\n\t// the connection pool, and remove itself, but before it locked the connection\n\t// pool it's returned to another Assemble statement.  This should loop 0-1\n\t// times for the VAST majority of cases.\n\tfor {\n\t\tconn = a.connPool.getConnection(\n\t\t\tkey, !t.SYN && len(t.LayerPayload()) == 0, timestamp)\n\t\tif conn == nil {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"%v got empty packet on otherwise empty connection\", key)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tconn.mu.Lock()\n\t\tif !conn.closed {\n\t\t\tbreak\n\t\t}\n\t\tconn.mu.Unlock()\n\t}\n\tif conn.lastSeen.Before(timestamp) {\n\t\tconn.lastSeen = timestamp\n\t}\n\tseq, bytes := Sequence(t.Seq), t.Payload\n\tif conn.nextSeq == invalidSequence {\n\t\tif t.SYN {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"%v saw first SYN packet, returning immediately, seq=%v\", key, seq)\n\t\t\t}\n\t\t\ta.ret = append(a.ret, Reassembly{\n\t\t\t\tBytes: bytes,\n\t\t\t\tSkip:  0,\n\t\t\t\tStart: true,\n\t\t\t\tSeen:  timestamp,\n\t\t\t})\n\t\t\tconn.nextSeq = seq.Add(len(bytes) + 1)\n\t\t} else {\n\t\t\tif *debugLog {\n\t\t\t\tlog.Printf(\"%v waiting for start, storing into connection\", key)\n\t\t\t}\n\t\t\ta.insertIntoConn(t, conn, timestamp)\n\t\t}\n\t} else if diff := conn.nextSeq.Difference(seq); diff > 0 {\n\t\tif *debugLog {\n\t\t\tlog.Printf(\"%v gap in sequence numbers (%v, %v) diff %v, storing into connection\", key, conn.nextSeq, seq, diff)\n\t\t}\n\t\ta.insertIntoConn(t, conn, timestamp)\n\t} else {\n\t\tbytes, conn.nextSeq = byteSpan(conn.nextSeq, seq, bytes)\n\t\tif *debugLog {\n\t\t\tlog.Printf(\"%v found contiguous data (%v, %v), returning immediately\", key, seq, conn.nextSeq)\n\t\t}\n\t\ta.ret = append(a.ret, Reassembly{\n\t\t\tBytes: bytes,\n\t\t\tSkip:  0,\n\t\t\tEnd:   t.RST || t.FIN,\n\t\t\tSeen:  timestamp,\n\t\t})\n\t}\n\tif len(a.ret) > 0 {\n\t\ta.sendToConnection(conn)\n\t}\n\tconn.mu.Unlock()\n}\n\nfunc byteSpan(expected, received Sequence, bytes []byte) (toSend []byte, next Sequence) {\n\tif expected == invalidSequence {\n\t\treturn bytes, received.Add(len(bytes))\n\t}\n\tspan := int(received.Difference(expected))\n\tif span <= 0 {\n\t\treturn bytes, received.Add(len(bytes))\n\t} else if len(bytes) < span {\n\t\treturn nil, expected\n\t}\n\treturn bytes[span:], expected.Add(len(bytes) - span)\n}\n\n// sendToConnection sends the current values in a.ret to the connection, closing\n// the connection if the last thing sent had End set.\nfunc (a *Assembler) sendToConnection(conn *connection) {\n\ta.addContiguous(conn)\n\tif conn.stream == nil {\n\t\tpanic(\"why?\")\n\t}\n\tconn.stream.Reassembled(a.ret)\n\tif a.ret[len(a.ret)-1].End {\n\t\ta.closeConnection(conn)\n\t}\n}\n\n// addContiguous adds contiguous byte-sets to a connection.\nfunc (a *Assembler) addContiguous(conn *connection) {\n\tfor conn.first != nil && conn.nextSeq.Difference(conn.first.seq) <= 0 {\n\t\ta.addNextFromConn(conn)\n\t}\n}\n\n// skipFlush skips the first set of bytes we're waiting for and returns the\n// first set of bytes we have.  If we have no bytes pending, it closes the\n// connection.\nfunc (a *Assembler) skipFlush(conn *connection) {\n\tif *debugLog {\n\t\tlog.Printf(\"%v skipFlush %v\", conn.key, conn.nextSeq)\n\t}\n\tif conn.first == nil {\n\t\ta.closeConnection(conn)\n\t\treturn\n\t}\n\ta.ret = a.ret[:0]\n\ta.addNextFromConn(conn)\n\ta.addContiguous(conn)\n\ta.sendToConnection(conn)\n}\n\nfunc (p *StreamPool) remove(conn *connection) {\n\tp.mu.Lock()\n\tdelete(p.conns, conn.key)\n\tp.free = append(p.free, conn)\n\tp.mu.Unlock()\n}\n\nfunc (a *Assembler) closeConnection(conn *connection) {\n\tif *debugLog {\n\t\tlog.Printf(\"%v closing\", conn.key)\n\t}\n\tconn.stream.ReassemblyComplete()\n\tconn.closed = true\n\ta.connPool.remove(conn)\n\tfor p := conn.first; p != nil; p = p.next {\n\t\ta.pc.replace(p)\n\t}\n}\n\n// traverseConn traverses our doubly-linked list of pages for the correct\n// position to put the given sequence number.  Note that it traverses backwards,\n// starting at the highest sequence number and going down, since we assume the\n// common case is that TCP packets for a stream will appear in-order, with\n// minimal loss or packet reordering.\nfunc (c *connection) traverseConn(seq Sequence) (prev, current *page) {\n\tprev = c.last\n\tfor prev != nil && prev.seq.Difference(seq) < 0 {\n\t\tcurrent = prev\n\t\tprev = current.prev\n\t}\n\treturn\n}\n\n// pushBetween inserts the doubly-linked list first-...-last in between the\n// nodes prev-next in another doubly-linked list.  If prev is nil, makes first\n// the new first page in the connection's list.  If next is nil, makes last the\n// new last page in the list.  first/last may point to the same page.\nfunc (c *connection) pushBetween(prev, next, first, last *page) {\n\t// Maintain our doubly linked list\n\tif next == nil || c.last == nil {\n\t\tc.last = last\n\t} else {\n\t\tlast.next = next\n\t\tnext.prev = last\n\t}\n\tif prev == nil || c.first == nil {\n\t\tc.first = first\n\t} else {\n\t\tfirst.prev = prev\n\t\tprev.next = first\n\t}\n}\n\nfunc (a *Assembler) insertIntoConn(t *layers.TCP, conn *connection, ts time.Time) {\n\tif conn.first != nil && conn.first.seq == conn.nextSeq {\n\t\tpanic(\"wtf\")\n\t}\n\tp, p2, numPages := a.pagesFromTCP(t, ts)\n\tprev, current := conn.traverseConn(Sequence(t.Seq))\n\tconn.pushBetween(prev, current, p, p2)\n\tconn.pages += numPages\n\tif (a.MaxBufferedPagesPerConnection > 0 && conn.pages >= a.MaxBufferedPagesPerConnection) ||\n\t\t(a.MaxBufferedPagesTotal > 0 && a.pc.used >= a.MaxBufferedPagesTotal) {\n\t\tif *debugLog {\n\t\t\tlog.Printf(\"%v hit max buffer size: %+v, %v, %v\", conn.key, a.AssemblerOptions, conn.pages, a.pc.used)\n\t\t}\n\t\ta.addNextFromConn(conn)\n\t}\n}\n\n// pagesFromTCP creates a page (or set of pages) from a TCP packet.  Note that\n// it should NEVER receive a SYN packet, as it doesn't handle sequences\n// correctly.\n//\n// It returns the first and last page in its doubly-linked list of new pages.\nfunc (a *Assembler) pagesFromTCP(t *layers.TCP, ts time.Time) (p, p2 *page, numPages int) {\n\tfirst := a.pc.next(ts)\n\tcurrent := first\n\tnumPages++\n\tseq, bytes := Sequence(t.Seq), t.Payload\n\tfor {\n\t\tlength := min(len(bytes), pageBytes)\n\t\tcurrent.Bytes = current.buf[:length]\n\t\tcopy(current.Bytes, bytes)\n\t\tcurrent.seq = seq\n\t\tbytes = bytes[length:]\n\t\tif len(bytes) == 0 {\n\t\t\tbreak\n\t\t}\n\t\tseq = seq.Add(length)\n\t\tcurrent.next = a.pc.next(ts)\n\t\tcurrent.next.prev = current\n\t\tcurrent = current.next\n\t\tnumPages++\n\t}\n\tcurrent.End = t.RST || t.FIN\n\treturn first, current, numPages\n}\n\n// addNextFromConn pops the first page from a connection off and adds it to the\n// return array.\nfunc (a *Assembler) addNextFromConn(conn *connection) {\n\tif conn.nextSeq == invalidSequence {\n\t\tconn.first.Skip = -1\n\t} else if diff := conn.nextSeq.Difference(conn.first.seq); diff > 0 {\n\t\tconn.first.Skip = int(diff)\n\t}\n\tconn.first.Bytes, conn.nextSeq = byteSpan(conn.nextSeq, conn.first.seq, conn.first.Bytes)\n\tif *debugLog {\n\t\tlog.Printf(\"%v   adding from conn (%v, %v)\", conn.key, conn.first.seq, conn.nextSeq)\n\t}\n\ta.ret = append(a.ret, conn.first.Reassembly)\n\ta.pc.replace(conn.first)\n\tif conn.first == conn.last {\n\t\tconn.first = nil\n\t\tconn.last = nil\n\t} else {\n\t\tconn.first = conn.first.next\n\t\tconn.first.prev = nil\n\t}\n\tconn.pages--\n}\n\nfunc min(a, b int) int {\n\tif a < b {\n\t\treturn a\n\t}\n\treturn b\n}\n"
  },
  {
    "path": "tcpassembly/assembly_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage tcpassembly\n\nimport (\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n\t\"net\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n)\n\nvar netFlow gopacket.Flow\n\nfunc init() {\n\tnetFlow, _ = gopacket.FlowFromEndpoints(\n\t\tlayers.NewIPEndpoint(net.IP{1, 2, 3, 4}),\n\t\tlayers.NewIPEndpoint(net.IP{5, 6, 7, 8}))\n}\n\nfunc TestSequenceOverflow(t *testing.T) {\n\tif want, got := 20, Sequence((1<<32)-10).Difference(Sequence(10)); want != got {\n\t\tt.Errorf(\"overflow diff failure: got %d want %d\", got, want)\n\t}\n}\n\ntype testSequence struct {\n\tin   layers.TCP\n\twant []Reassembly\n}\n\ntype testFactory struct {\n\treassembly []Reassembly\n}\n\nfunc (t *testFactory) New(a, b gopacket.Flow) Stream {\n\treturn t\n}\nfunc (t *testFactory) Reassembled(r []Reassembly) {\n\tt.reassembly = r\n\tfor i := 0; i < len(r); i++ {\n\t\tt.reassembly[i].Seen = time.Time{}\n\t}\n}\nfunc (t *testFactory) ReassemblyComplete() {\n}\n\nfunc test(t *testing.T, s []testSequence) {\n\tfact := &testFactory{}\n\tp := NewStreamPool(fact)\n\ta := NewAssembler(p)\n\ta.MaxBufferedPagesPerConnection = 4\n\tfor i, test := range s {\n\t\tfact.reassembly = []Reassembly{}\n\t\ta.Assemble(netFlow, &test.in)\n\t\tif !reflect.DeepEqual(fact.reassembly, test.want) {\n\t\t\tt.Fatalf(\"test %v:\\nwant: %v\\n got: %v\\n\", i, test.want, fact.reassembly)\n\t\t}\n\t}\n}\n\nfunc TestReorder(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1001,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1004,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1010,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{4, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tSkip:  -1,\n\t\t\t\t\tBytes: []byte{1, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{2, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{3, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{4, 2, 3},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1016,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1019,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1013,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{1, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{2, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{3, 2, 3},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestMaxPerSkip(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1000,\n\t\t\t\tSYN:       true,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1010,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{4, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1013,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{5, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1016,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{6, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tSkip:  3,\n\t\t\t\t\tBytes: []byte{3, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{4, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{5, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{6, 2, 3},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestReorderFast(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1004,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{2, 2, 3},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{3, 2, 3},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestOverlap(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1010,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{6, 7},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestBufferedOverlap(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1007,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1010,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{6, 7},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestOverrun1(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       0xFFFFFFFF,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       10,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestOverrun2(t *testing.T) {\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       10,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSYN:       true,\n\t\t\t\tSeq:       0xFFFFFFFF,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: []byte{1, 2, 3, 4},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc TestCacheLargePacket(t *testing.T) {\n\tdata := make([]byte, pageBytes*3)\n\ttest(t, []testSequence{\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1001,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: data},\n\t\t\t},\n\t\t\twant: []Reassembly{},\n\t\t},\n\t\t{\n\t\t\tin: layers.TCP{\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1000,\n\t\t\t\tSYN:       true,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{}},\n\t\t\t},\n\t\t\twant: []Reassembly{\n\t\t\t\tReassembly{\n\t\t\t\t\tStart: true,\n\t\t\t\t\tBytes: []byte{},\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: data[:pageBytes],\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: data[pageBytes : pageBytes*2],\n\t\t\t\t},\n\t\t\t\tReassembly{\n\t\t\t\t\tBytes: data[pageBytes*2 : pageBytes*3],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc BenchmarkSingleStream(b *testing.B) {\n\tt := layers.TCP{\n\t\tSrcPort:   1,\n\t\tDstPort:   2,\n\t\tSYN:       true,\n\t\tSeq:       1000,\n\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t}\n\ta := NewAssembler(NewStreamPool(&testFactory{}))\n\tfor i := 0; i < b.N; i++ {\n\t\ta.Assemble(netFlow, &t)\n\t\tif t.SYN {\n\t\t\tt.SYN = false\n\t\t\tt.Seq++\n\t\t}\n\t\tt.Seq += 10\n\t}\n}\n\nfunc BenchmarkSingleStreamSkips(b *testing.B) {\n\tt := layers.TCP{\n\t\tSrcPort:   1,\n\t\tDstPort:   2,\n\t\tSYN:       true,\n\t\tSeq:       1000,\n\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t}\n\ta := NewAssembler(NewStreamPool(&testFactory{}))\n\tskipped := false\n\tfor i := 0; i < b.N; i++ {\n\t\tif i%10 == 9 {\n\t\t\tt.Seq += 10\n\t\t\tskipped = true\n\t\t} else if skipped {\n\t\t\tt.Seq -= 20\n\t\t}\n\t\ta.Assemble(netFlow, &t)\n\t\tif t.SYN {\n\t\t\tt.SYN = false\n\t\t\tt.Seq++\n\t\t}\n\t\tt.Seq += 10\n\t\tif skipped {\n\t\t\tt.Seq += 10\n\t\t\tskipped = false\n\t\t}\n\t}\n}\n\nfunc BenchmarkSingleStreamLoss(b *testing.B) {\n\tt := layers.TCP{\n\t\tSrcPort:   1,\n\t\tDstPort:   2,\n\t\tSYN:       true,\n\t\tSeq:       1000,\n\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t}\n\ta := NewAssembler(NewStreamPool(&testFactory{}))\n\tfor i := 0; i < b.N; i++ {\n\t\ta.Assemble(netFlow, &t)\n\t\tt.SYN = false\n\t\tt.Seq += 11\n\t}\n}\n\nfunc BenchmarkMultiStreamGrow(b *testing.B) {\n\tt := layers.TCP{\n\t\tSrcPort:   1,\n\t\tDstPort:   2,\n\t\tSeq:       0,\n\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t}\n\ta := NewAssembler(NewStreamPool(&testFactory{}))\n\tfor i := 0; i < b.N; i++ {\n\t\tt.SrcPort = layers.TCPPort(i)\n\t\ta.Assemble(netFlow, &t)\n\t\tt.Seq += 10\n\t}\n}\n\nfunc BenchmarkMultiStreamConn(b *testing.B) {\n\tt := layers.TCP{\n\t\tSrcPort:   1,\n\t\tDstPort:   2,\n\t\tSeq:       0,\n\t\tSYN:       true,\n\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},\n\t}\n\ta := NewAssembler(NewStreamPool(&testFactory{}))\n\tfor i := 0; i < b.N; i++ {\n\t\tt.SrcPort = layers.TCPPort(i)\n\t\ta.Assemble(netFlow, &t)\n\t\tif i%65536 == 65535 {\n\t\t\tif t.SYN {\n\t\t\t\tt.SYN = false\n\t\t\t\tt.Seq++\n\t\t\t}\n\t\t\tt.Seq += 10\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "tcpassembly/tcpreader/reader.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\n// Package tcpreader provides an implementation for tcpassembly.Stream which presents\n// the caller with an io.Reader for easy processing.\n//\n// The assembly package handles packet data reordering, but its output is\n// library-specific, thus not usable by the majority of external Go libraries.\n// The io.Reader interface, on the other hand, is used throughout much of Go\n// code as an easy mechanism for reading in data streams and decoding them.  For\n// example, the net/http package provides the ReadRequest function, which can\n// parse an HTTP request from a live data stream, just what we'd want when\n// sniffing HTTP traffic.  Using ReaderStream, this is relatively easy to set\n// up:\n//\n//  // Create our StreamFactory\n//  type httpStreamFactory struct {}\n//  func (f *httpStreamFactory) New(a, b gopacket.Flow) tcpassembly.Stream {\n//  \tr := tcpreader.NewReaderStream()\n//  \tgo printRequests(&r, a, b)\n//  \treturn &r\n//  }\n//  func printRequests(r io.Reader, a, b gopacket.Flow) {\n//  \t// Convert to bufio, since that's what ReadRequest wants.\n//  \tbuf := bufio.NewReader(r)\n//  \tfor {\n//  \t\tif req, err := http.ReadRequest(buf); err == io.EOF {\n//  \t\t\treturn\n//  \t\t} else if err != nil {\n//  \t\t\tlog.Println(\"Error parsing HTTP requests:\", err)\n//  \t\t} else {\n//  \t\t\tfmt.Println(a, b)\n//  \t\t\tfmt.Println(\"HTTP REQUEST:\", req)\n//  \t\t\tfmt.Println(\"Body contains\", tcpreader.DiscardBytesToEOF(req.Body), \"bytes\")\n//  \t\t}\n//  \t}\n//  }\n//\n// Using just this code, we're able to reference a powerful, built-in library\n// for HTTP request parsing to do all the dirty-work of parsing requests from\n// the wire in real-time.  Pass this stream factory to an tcpassembly.StreamPool,\n// start up an tcpassembly.Assembler, and you're good to go!\npackage tcpreader\n\nimport (\n\t\"errors\"\n\t\"github.com/google/gopacket/tcpassembly\"\n\t\"io\"\n)\n\nvar discardBuffer = make([]byte, 4096)\n\n// DiscardBytesToFirstError will read in all bytes up to the first error\n// reported by the given reader, then return the number of bytes discarded\n// and the error encountered.\nfunc DiscardBytesToFirstError(r io.Reader) (discarded int, err error) {\n\tfor {\n\t\tn, e := r.Read(discardBuffer)\n\t\tdiscarded += n\n\t\tif e != nil {\n\t\t\treturn discarded, e\n\t\t}\n\t}\n}\n\n// DiscardBytesToEOF will read in all bytes from a Reader until it\n// encounters an io.EOF, then return the number of bytes.  Be careful\n// of this... if used on a Reader that returns a non-io.EOF error\n// consistently, this will loop forever discarding that error while\n// it waits for an EOF.\nfunc DiscardBytesToEOF(r io.Reader) (discarded int) {\n\tfor {\n\t\tn, e := DiscardBytesToFirstError(r)\n\t\tdiscarded += n\n\t\tif e == io.EOF {\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// ReaderStream implements both tcpassembly.Stream and io.Reader.  You can use it\n// as a building block to make simple, easy stream handlers.\n//\n// IMPORTANT:  If you use a ReaderStream, you MUST read ALL BYTES from it,\n// quickly.  Not reading available bytes will block TCP stream reassembly.  It's\n// a common pattern to do this by starting a goroutine in the factory's New\n// method:\n//\n//  type myStreamHandler struct {\n//  \tr ReaderStream\n//  }\n//  func (m *myStreamHandler) run() {\n//  \t// Do something here that reads all of the ReaderStream, or your assembly\n//  \t// will block.\n//  \tfmt.Println(tcpreader.DiscardBytesToEOF(&m.r))\n//  }\n//  func (f *myStreamFactory) New(a, b gopacket.Flow) tcpassembly.Stream {\n//  \ts := &myStreamHandler{}\n//  \tgo s.run()\n//  \t// Return the ReaderStream as the stream that assembly should populate.\n//  \treturn &s.r\n//  }\ntype ReaderStream struct {\n\tReaderStreamOptions\n\treassembled  chan []tcpassembly.Reassembly\n\tdone         chan bool\n\tcurrent      []tcpassembly.Reassembly\n\tclosed       bool\n\tlossReported bool\n\tfirst        bool\n\tinitiated    bool\n}\n\n// ReaderStreamOptions provides user-resettable options for a ReaderStream.\ntype ReaderStreamOptions struct {\n\t// LossErrors determines whether this stream will return\n\t// ReaderStreamDataLoss errors from its Read function whenever it\n\t// determines data has been lost.\n\tLossErrors bool\n}\n\n// NewReaderStream returns a new ReaderStream object.\nfunc NewReaderStream() ReaderStream {\n\tr := ReaderStream{\n\t\treassembled: make(chan []tcpassembly.Reassembly),\n\t\tdone:        make(chan bool),\n\t\tfirst:       true,\n\t\tinitiated:   true,\n\t}\n\treturn r\n}\n\n// Reassembled implements tcpassembly.Stream's Reassembled function.\nfunc (r *ReaderStream) Reassembled(reassembly []tcpassembly.Reassembly) {\n\tif !r.initiated {\n\t\tpanic(\"ReaderStream not created via NewReaderStream\")\n\t}\n\tr.reassembled <- reassembly\n\t<-r.done\n}\n\n// ReassemblyComplete implements tcpassembly.Stream's ReassemblyComplete function.\nfunc (r *ReaderStream) ReassemblyComplete() {\n\tclose(r.reassembled)\n\tclose(r.done)\n}\n\n// stripEmpty strips empty reassembly slices off the front of its current set of\n// slices.\nfunc (r *ReaderStream) stripEmpty() {\n\tfor len(r.current) > 0 && len(r.current[0].Bytes) == 0 {\n\t\tr.current = r.current[1:]\n\t\tr.lossReported = false\n\t}\n}\n\n// DataLost is returned by the ReaderStream's Read function when it encounters\n// a Reassembly with Skip != 0.\nvar DataLost = errors.New(\"lost data\")\n\n// Read implements io.Reader's Read function.\n// Given a byte slice, it will either copy a non-zero number of bytes into\n// that slice and return the number of bytes and a nil error, or it will\n// leave slice p as is and return 0, io.EOF.\nfunc (r *ReaderStream) Read(p []byte) (int, error) {\n\tif !r.initiated {\n\t\tpanic(\"ReaderStream not created via NewReaderStream\")\n\t}\n\tvar ok bool\n\tr.stripEmpty()\n\tfor !r.closed && len(r.current) == 0 {\n\t\tif r.first {\n\t\t\tr.first = false\n\t\t} else {\n\t\t\tr.done <- true\n\t\t}\n\t\tif r.current, ok = <-r.reassembled; ok {\n\t\t\tr.stripEmpty()\n\t\t} else {\n\t\t\tr.closed = true\n\t\t}\n\t}\n\tif len(r.current) > 0 {\n\t\tcurrent := &r.current[0]\n\t\tif r.LossErrors && !r.lossReported && current.Skip != 0 {\n\t\t\tr.lossReported = true\n\t\t\treturn 0, DataLost\n\t\t}\n\t\tlength := copy(p, current.Bytes)\n\t\tcurrent.Bytes = current.Bytes[length:]\n\t\treturn length, nil\n\t}\n\treturn 0, io.EOF\n}\n\n// Close implements io.Closer's Close function, making ReaderStream a\n// io.ReadCloser.  It discards all remaining bytes in the reassembly in a\n// manner that's safe for the assembler (IE: it doesn't block).\nfunc (r *ReaderStream) Close() error {\n\tr.current = nil\n\tr.closed = true\n\tfor {\n\t\tif _, ok := <-r.reassembled; !ok {\n\t\t\treturn nil\n\t\t}\n\t\tr.done <- true\n\t}\n}\n"
  },
  {
    "path": "tcpassembly/tcpreader/reader_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage tcpreader\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"github.com/google/gopacket\"\n\t\"github.com/google/gopacket/layers\"\n\t\"github.com/google/gopacket/tcpassembly\"\n\t\"io\"\n\t\"net\"\n\t\"testing\"\n)\n\nvar netFlow gopacket.Flow\n\nfunc init() {\n\tnetFlow, _ = gopacket.FlowFromEndpoints(\n\t\tlayers.NewIPEndpoint(net.IP{1, 2, 3, 4}),\n\t\tlayers.NewIPEndpoint(net.IP{5, 6, 7, 8}))\n}\n\ntype readReturn struct {\n\tdata []byte\n\terr  error\n}\ntype readSequence struct {\n\tin   []layers.TCP\n\twant []readReturn\n}\ntype testReaderFactory struct {\n\tlossErrors bool\n\treadSize   int\n\tReaderStream\n\toutput chan []byte\n}\n\nfunc (t *testReaderFactory) New(a, b gopacket.Flow) tcpassembly.Stream {\n\treturn &t.ReaderStream\n}\n\nfunc testReadSequence(t *testing.T, lossErrors bool, readSize int, seq readSequence) {\n\tf := &testReaderFactory{ReaderStream: NewReaderStream()}\n\tf.ReaderStream.LossErrors = lossErrors\n\tp := tcpassembly.NewStreamPool(f)\n\ta := tcpassembly.NewAssembler(p)\n\tbuf := make([]byte, readSize)\n\tgo func() {\n\t\tfor i, test := range seq.in {\n\t\t\tfmt.Println(\"Assembling\", i)\n\t\t\ta.Assemble(netFlow, &test)\n\t\t\tfmt.Println(\"Assembly done\")\n\t\t}\n\t}()\n\tfor i, test := range seq.want {\n\t\tfmt.Println(\"Waiting for read\", i)\n\t\tn, err := f.Read(buf[:])\n\t\tfmt.Println(\"Got read\")\n\t\tif n != len(test.data) {\n\t\t\tt.Errorf(\"test %d want %d bytes, got %d bytes\", i, len(test.data), n)\n\t\t} else if err != test.err {\n\t\t\tt.Errorf(\"test %d want err %v, got err %v\", i, test.err, err)\n\t\t} else if !bytes.Equal(buf[:n], test.data) {\n\t\t\tt.Errorf(\"test %d\\nwant: %v\\n got: %v\\n\", i, test.data, buf[:n])\n\t\t}\n\t}\n\tfmt.Println(\"All done reads\")\n}\n\nfunc TestRead(t *testing.T) {\n\ttestReadSequence(t, false, 10, readSequence{\n\t\tin: []layers.TCP{\n\t\t\t{\n\t\t\t\tSYN:       true,\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t},\n\t\t\t{\n\t\t\t\tFIN:     true,\n\t\t\t\tSrcPort: 1,\n\t\t\t\tDstPort: 2,\n\t\t\t\tSeq:     1004,\n\t\t\t},\n\t\t},\n\t\twant: []readReturn{\n\t\t\t{data: []byte{1, 2, 3}},\n\t\t\t{err: io.EOF},\n\t\t},\n\t})\n}\n\nfunc TestReadSmallChunks(t *testing.T) {\n\ttestReadSequence(t, false, 2, readSequence{\n\t\tin: []layers.TCP{\n\t\t\t{\n\t\t\t\tSYN:       true,\n\t\t\t\tSrcPort:   1,\n\t\t\t\tDstPort:   2,\n\t\t\t\tSeq:       1000,\n\t\t\t\tBaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},\n\t\t\t},\n\t\t\t{\n\t\t\t\tFIN:     true,\n\t\t\t\tSrcPort: 1,\n\t\t\t\tDstPort: 2,\n\t\t\t\tSeq:     1004,\n\t\t\t},\n\t\t},\n\t\twant: []readReturn{\n\t\t\t{data: []byte{1, 2}},\n\t\t\t{data: []byte{3}},\n\t\t\t{err: io.EOF},\n\t\t},\n\t})\n}\n\nfunc ExampleDiscardBytesToEOF() {\n\tb := bytes.NewBuffer([]byte{1, 2, 3, 4, 5})\n\tfmt.Println(DiscardBytesToEOF(b))\n\t// Output:\n\t// 5\n}\n"
  },
  {
    "path": "time.go",
    "content": "// Copyright 2018 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage gopacket\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"time\"\n)\n\n// TimestampResolution represents the resolution of timestamps in Base^Exponent.\ntype TimestampResolution struct {\n\tBase, Exponent int\n}\n\nfunc (t TimestampResolution) String() string {\n\treturn fmt.Sprintf(\"%d^%d\", t.Base, t.Exponent)\n}\n\n// ToDuration returns the smallest representable time difference as a time.Duration\nfunc (t TimestampResolution) ToDuration() time.Duration {\n\tif t.Base == 0 {\n\t\treturn 0\n\t}\n\tif t.Exponent == 0 {\n\t\treturn time.Second\n\t}\n\tswitch t.Base {\n\tcase 10:\n\t\treturn time.Duration(math.Pow10(t.Exponent + 9))\n\tcase 2:\n\t\tif t.Exponent < 0 {\n\t\t\treturn time.Second >> uint(-t.Exponent)\n\t\t}\n\t\treturn time.Second << uint(t.Exponent)\n\tdefault:\n\t\t// this might loose precision\n\t\treturn time.Duration(float64(time.Second) * math.Pow(float64(t.Base), float64(t.Exponent)))\n\t}\n}\n\n// TimestampResolutionInvalid represents an invalid timestamp resolution\nvar TimestampResolutionInvalid = TimestampResolution{}\n\n// TimestampResolutionMillisecond is a resolution of 10^-3s\nvar TimestampResolutionMillisecond = TimestampResolution{10, -3}\n\n// TimestampResolutionMicrosecond is a resolution of 10^-6s\nvar TimestampResolutionMicrosecond = TimestampResolution{10, -6}\n\n// TimestampResolutionNanosecond is a resolution of 10^-9s\nvar TimestampResolutionNanosecond = TimestampResolution{10, -9}\n\n// TimestampResolutionNTP is the resolution of NTP timestamps which is 2^-32 ≈ 233 picoseconds\nvar TimestampResolutionNTP = TimestampResolution{2, -32}\n\n// TimestampResolutionCaptureInfo is the resolution used in CaptureInfo, which his currently nanosecond\nvar TimestampResolutionCaptureInfo = TimestampResolutionNanosecond\n\n// PacketSourceResolution is an interface for packet data sources that\n// support reporting the timestamp resolution of the aqcuired timestamps.\n// Returned timestamps will always have NanosecondTimestampResolution due\n// to the use of time.Time, but scaling might have occured if acquired\n// timestamps have a different resolution.\ntype PacketSourceResolution interface {\n\t// Resolution returns the timestamp resolution of acquired timestamps before scaling to NanosecondTimestampResolution.\n\tResolution() TimestampResolution\n}\n"
  },
  {
    "path": "time_test.go",
    "content": "// Copyright 2019 The GoPacket Authors. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage gopacket\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestToDuration(t *testing.T) {\n\tfor i, test := range []struct {\n\t\tr TimestampResolution\n\t\td time.Duration\n\t}{\n\t\t{\n\t\t\tTimestampResolutionMillisecond,\n\t\t\ttime.Millisecond,\n\t\t},\n\t\t{\n\t\t\tTimestampResolutionMicrosecond,\n\t\t\ttime.Microsecond,\n\t\t},\n\t\t{\n\t\t\tTimestampResolutionNanosecond,\n\t\t\ttime.Nanosecond,\n\t\t},\n\t\t{\n\t\t\tTimestampResolutionNTP,\n\t\t\t0, // this is not representable since it's ~0.233 nanoseconds\n\t\t},\n\t\t{\n\t\t\tTimestampResolution{2, -16},\n\t\t\t15258,\n\t\t},\n\t\t{\n\t\t\tTimestampResolution{2, 1},\n\t\t\t2 * time.Second,\n\t\t},\n\t\t{\n\t\t\tTimestampResolution{10, 1},\n\t\t\t10 * time.Second,\n\t\t},\n\t\t{\n\t\t\tTimestampResolution{10, 0},\n\t\t\ttime.Second,\n\t\t},\n\t\t{\n\t\t\tTimestampResolution{2, 0},\n\t\t\ttime.Second,\n\t\t},\n\t\t{\n\t\t\tTimestampResolution{0, 0},\n\t\t\t0,\n\t\t},\n\t\t{\n\t\t\tTimestampResolution{3, 2},\n\t\t\t9 * time.Second,\n\t\t},\n\t\t{\n\t\t\tTimestampResolution{3, -2},\n\t\t\t111111111,\n\t\t},\n\t} {\n\t\td := test.r.ToDuration()\n\t\tif d != test.d {\n\t\t\tt.Errorf(\"%d: resolution: %s want: %d got: %d\", i, test.r, test.d, d)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "writer.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage gopacket\n\nimport (\n\t\"fmt\"\n)\n\n// SerializableLayer allows its implementations to be written out as a set of bytes,\n// so those bytes may be sent on the wire or otherwise used by the caller.\n// SerializableLayer is implemented by certain Layer types, and can be encoded to\n// bytes using the LayerWriter object.\ntype SerializableLayer interface {\n\t// SerializeTo writes this layer to a slice, growing that slice if necessary\n\t// to make it fit the layer's data.\n\t//  Args:\n\t//   b:  SerializeBuffer to write this layer on to.  When called, b.Bytes()\n\t//     is the payload this layer should wrap, if any.  Note that this\n\t//     layer can either prepend itself (common), append itself\n\t//     (uncommon), or both (sometimes padding or footers are required at\n\t//     the end of packet data). It's also possible (though probably very\n\t//     rarely needed) to overwrite any bytes in the current payload.\n\t//     After this call, b.Bytes() should return the byte encoding of\n\t//     this layer wrapping the original b.Bytes() payload.\n\t//   opts:  options to use while writing out data.\n\t//  Returns:\n\t//   error if a problem was encountered during encoding.  If an error is\n\t//   returned, the bytes in data should be considered invalidated, and\n\t//   not used.\n\t//\n\t// SerializeTo calls SHOULD entirely ignore LayerContents and\n\t// LayerPayload.  It just serializes based on struct fields, neither\n\t// modifying nor using contents/payload.\n\tSerializeTo(b SerializeBuffer, opts SerializeOptions) error\n\t// LayerType returns the type of the layer that is being serialized to the buffer\n\tLayerType() LayerType\n}\n\n// SerializeOptions provides options for behaviors that SerializableLayers may want to\n// implement.\ntype SerializeOptions struct {\n\t// FixLengths determines whether, during serialization, layers should fix\n\t// the values for any length field that depends on the payload.\n\tFixLengths bool\n\t// ComputeChecksums determines whether, during serialization, layers\n\t// should recompute checksums based on their payloads.\n\tComputeChecksums bool\n}\n\n// SerializeBuffer is a helper used by gopacket for writing out packet layers.\n// SerializeBuffer starts off as an empty []byte.  Subsequent calls to PrependBytes\n// return byte slices before the current Bytes(), AppendBytes returns byte\n// slices after.\n//\n// Byte slices returned by PrependBytes/AppendBytes are NOT zero'd out, so if\n// you want to make sure they're all zeros, set them as such.\n//\n// SerializeBuffer is specifically designed to handle packet writing, where unlike\n// with normal writes it's easier to start writing at the inner-most layer and\n// work out, meaning that we often need to prepend bytes.  This runs counter to\n// typical writes to byte slices using append(), where we only write at the end\n// of the buffer.\n//\n// It can be reused via Clear.  Note, however, that a Clear call will invalidate the\n// byte slices returned by any previous Bytes() call (the same buffer is\n// reused).\n//\n//  1) Reusing a write buffer is generally much faster than creating a new one,\n//     and with the default implementation it avoids additional memory allocations.\n//  2) If a byte slice from a previous Bytes() call will continue to be used,\n//     it's better to create a new SerializeBuffer.\n//\n// The Clear method is specifically designed to minimize memory allocations for\n// similar later workloads on the SerializeBuffer.  IE: if you make a set of\n// Prepend/Append calls, then clear, then make the same calls with the same\n// sizes, the second round (and all future similar rounds) shouldn't allocate\n// any new memory.\ntype SerializeBuffer interface {\n\t// Bytes returns the contiguous set of bytes collected so far by Prepend/Append\n\t// calls.  The slice returned by Bytes will be modified by future Clear calls,\n\t// so if you're planning on clearing this SerializeBuffer, you may want to copy\n\t// Bytes somewhere safe first.\n\tBytes() []byte\n\t// PrependBytes returns a set of bytes which prepends the current bytes in this\n\t// buffer.  These bytes start in an indeterminate state, so they should be\n\t// overwritten by the caller.  The caller must only call PrependBytes if they\n\t// know they're going to immediately overwrite all bytes returned.\n\tPrependBytes(num int) ([]byte, error)\n\t// AppendBytes returns a set of bytes which appends the current bytes in this\n\t// buffer.  These bytes start in an indeterminate state, so they should be\n\t// overwritten by the caller.  The caller must only call AppendBytes if they\n\t// know they're going to immediately overwrite all bytes returned.\n\tAppendBytes(num int) ([]byte, error)\n\t// Clear resets the SerializeBuffer to a new, empty buffer.  After a call to clear,\n\t// the byte slice returned by any previous call to Bytes() for this buffer\n\t// should be considered invalidated.\n\tClear() error\n\t// Layers returns all the Layers that have been successfully serialized into this buffer\n\t// already.\n\tLayers() []LayerType\n\t// PushLayer adds the current Layer to the list of Layers that have been serialized\n\t// into this buffer.\n\tPushLayer(LayerType)\n}\n\ntype serializeBuffer struct {\n\tdata                []byte\n\tstart               int\n\tprepended, appended int\n\tlayers              []LayerType\n}\n\n// NewSerializeBuffer creates a new instance of the default implementation of\n// the SerializeBuffer interface.\nfunc NewSerializeBuffer() SerializeBuffer {\n\treturn &serializeBuffer{}\n}\n\n// NewSerializeBufferExpectedSize creates a new buffer for serialization, optimized for an\n// expected number of bytes prepended/appended.  This tends to decrease the\n// number of memory allocations made by the buffer during writes.\nfunc NewSerializeBufferExpectedSize(expectedPrependLength, expectedAppendLength int) SerializeBuffer {\n\treturn &serializeBuffer{\n\t\tdata:      make([]byte, expectedPrependLength, expectedPrependLength+expectedAppendLength),\n\t\tstart:     expectedPrependLength,\n\t\tprepended: expectedPrependLength,\n\t\tappended:  expectedAppendLength,\n\t}\n}\n\nfunc (w *serializeBuffer) Bytes() []byte {\n\treturn w.data[w.start:]\n}\n\nfunc (w *serializeBuffer) PrependBytes(num int) ([]byte, error) {\n\tif num < 0 {\n\t\tpanic(\"num < 0\")\n\t}\n\tif w.start < num {\n\t\ttoPrepend := w.prepended\n\t\tif toPrepend < num {\n\t\t\ttoPrepend = num\n\t\t}\n\t\tw.prepended += toPrepend\n\t\tlength := cap(w.data) + toPrepend\n\t\tnewData := make([]byte, length)\n\t\tnewStart := w.start + toPrepend\n\t\tcopy(newData[newStart:], w.data[w.start:])\n\t\tw.start = newStart\n\t\tw.data = newData[:toPrepend+len(w.data)]\n\t}\n\tw.start -= num\n\treturn w.data[w.start : w.start+num], nil\n}\n\nfunc (w *serializeBuffer) AppendBytes(num int) ([]byte, error) {\n\tif num < 0 {\n\t\tpanic(\"num < 0\")\n\t}\n\tinitialLength := len(w.data)\n\tif cap(w.data)-initialLength < num {\n\t\ttoAppend := w.appended\n\t\tif toAppend < num {\n\t\t\ttoAppend = num\n\t\t}\n\t\tw.appended += toAppend\n\t\tnewData := make([]byte, cap(w.data)+toAppend)\n\t\tcopy(newData[w.start:], w.data[w.start:])\n\t\tw.data = newData[:initialLength]\n\t}\n\t// Grow the buffer.  We know it'll be under capacity given above.\n\tw.data = w.data[:initialLength+num]\n\treturn w.data[initialLength:], nil\n}\n\nfunc (w *serializeBuffer) Clear() error {\n\tw.start = w.prepended\n\tw.data = w.data[:w.start]\n\tw.layers = w.layers[:0]\n\treturn nil\n}\n\nfunc (w *serializeBuffer) Layers() []LayerType {\n\treturn w.layers\n}\n\nfunc (w *serializeBuffer) PushLayer(l LayerType) {\n\tw.layers = append(w.layers, l)\n}\n\n// SerializeLayers clears the given write buffer, then writes all layers into it so\n// they correctly wrap each other.  Note that by clearing the buffer, it\n// invalidates all slices previously returned by w.Bytes()\n//\n// Example:\n//   buf := gopacket.NewSerializeBuffer()\n//   opts := gopacket.SerializeOptions{}\n//   gopacket.SerializeLayers(buf, opts, a, b, c)\n//   firstPayload := buf.Bytes()  // contains byte representation of a(b(c))\n//   gopacket.SerializeLayers(buf, opts, d, e, f)\n//   secondPayload := buf.Bytes()  // contains byte representation of d(e(f)). firstPayload is now invalidated, since the SerializeLayers call Clears buf.\nfunc SerializeLayers(w SerializeBuffer, opts SerializeOptions, layers ...SerializableLayer) error {\n\tw.Clear()\n\tfor i := len(layers) - 1; i >= 0; i-- {\n\t\tlayer := layers[i]\n\t\terr := layer.SerializeTo(w, opts)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tw.PushLayer(layer.LayerType())\n\t}\n\treturn nil\n}\n\n// SerializePacket is a convenience function that calls SerializeLayers\n// on packet's Layers().\n// It returns an error if one of the packet layers is not a SerializableLayer.\nfunc SerializePacket(buf SerializeBuffer, opts SerializeOptions, packet Packet) error {\n\tsls := []SerializableLayer{}\n\tfor _, layer := range packet.Layers() {\n\t\tsl, ok := layer.(SerializableLayer)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"layer %s is not serializable\", layer.LayerType().String())\n\t\t}\n\t\tsls = append(sls, sl)\n\t}\n\treturn SerializeLayers(buf, opts, sls...)\n}\n"
  },
  {
    "path": "writer_test.go",
    "content": "// Copyright 2012 Google, Inc. All rights reserved.\n//\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file in the root of the source\n// tree.\n\npackage gopacket\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n)\n\nfunc TestExponentialSizeIncreasePrepend(t *testing.T) {\n\tvar b serializeBuffer\n\tfor i, test := range []struct {\n\t\tprepend, size int\n\t}{\n\t\t{2, 2},\n\t\t{2, 4},\n\t\t{2, 8},\n\t\t{2, 8},\n\t\t{2, 16},\n\t\t{2, 16},\n\t\t{2, 16},\n\t\t{2, 16},\n\t\t{2, 32},\n\t} {\n\t\tb.PrependBytes(test.prepend)\n\t\tif test.size != cap(b.data) {\n\t\t\tt.Error(i, \"size want\", test.size, \"got\", cap(b.data))\n\t\t}\n\t}\n\tb.Clear()\n\tif b.start != 32 {\n\t\tt.Error(b.start)\n\t}\n}\n\nfunc TestExponentialSizeIncreaseAppend(t *testing.T) {\n\tvar b serializeBuffer\n\tfor i, test := range []struct {\n\t\tappnd, size int\n\t}{\n\t\t{2, 2},\n\t\t{2, 4},\n\t\t{2, 8},\n\t\t{2, 8},\n\t\t{2, 16},\n\t\t{2, 16},\n\t\t{2, 16},\n\t\t{2, 16},\n\t\t{2, 32},\n\t} {\n\t\tb.AppendBytes(test.appnd)\n\t\tif test.size != cap(b.data) {\n\t\t\tt.Error(i, \"size want\", test.size, \"got\", cap(b.data))\n\t\t}\n\t}\n\tb.Clear()\n\tif b.start != 0 {\n\t\tt.Error(b.start)\n\t}\n}\n\nfunc ExampleSerializeBuffer() {\n\tb := NewSerializeBuffer()\n\tfmt.Println(\"1:\", b.Bytes())\n\tbytes, _ := b.PrependBytes(3)\n\tcopy(bytes, []byte{1, 2, 3})\n\tfmt.Println(\"2:\", b.Bytes())\n\tbytes, _ = b.AppendBytes(2)\n\tcopy(bytes, []byte{4, 5})\n\tfmt.Println(\"3:\", b.Bytes())\n\tbytes, _ = b.PrependBytes(1)\n\tcopy(bytes, []byte{0})\n\tfmt.Println(\"4:\", b.Bytes())\n\tbytes, _ = b.AppendBytes(3)\n\tcopy(bytes, []byte{6, 7, 8})\n\tfmt.Println(\"5:\", b.Bytes())\n\tb.Clear()\n\tfmt.Println(\"6:\", b.Bytes())\n\tbytes, _ = b.PrependBytes(2)\n\tcopy(bytes, []byte{9, 9})\n\tfmt.Println(\"7:\", b.Bytes())\n\t// Output:\n\t// 1: []\n\t// 2: [1 2 3]\n\t// 3: [1 2 3 4 5]\n\t// 4: [0 1 2 3 4 5]\n\t// 5: [0 1 2 3 4 5 6 7 8]\n\t// 6: []\n\t// 7: [9 9]\n}\n"
  }
]